2020-07-13 16:21:19 +03:00
import octiconChevronDown from '../../public/img/svg/octicon-chevron-down.svg' ;
import octiconChevronRight from '../../public/img/svg/octicon-chevron-right.svg' ;
2020-07-12 12:10:56 +03:00
import octiconGitMerge from '../../public/img/svg/octicon-git-merge.svg' ;
import octiconGitPullRequest from '../../public/img/svg/octicon-git-pull-request.svg' ;
import octiconIssueClosed from '../../public/img/svg/octicon-issue-closed.svg' ;
import octiconIssueOpened from '../../public/img/svg/octicon-issue-opened.svg' ;
2021-05-19 06:16:02 +03:00
import octiconKebabHorizontal from '../../public/img/svg/octicon-kebab-horizontal.svg' ;
2020-07-12 12:10:56 +03:00
import octiconLink from '../../public/img/svg/octicon-link.svg' ;
2020-07-13 02:48:48 +03:00
import octiconLock from '../../public/img/svg/octicon-lock.svg' ;
2020-11-29 09:22:04 +03:00
import octiconMilestone from '../../public/img/svg/octicon-milestone.svg' ;
2020-07-17 18:15:12 +03:00
import octiconMirror from '../../public/img/svg/octicon-mirror.svg' ;
2020-11-29 09:22:04 +03:00
import octiconProject from '../../public/img/svg/octicon-project.svg' ;
2020-07-13 02:48:48 +03:00
import octiconRepo from '../../public/img/svg/octicon-repo.svg' ;
import octiconRepoForked from '../../public/img/svg/octicon-repo-forked.svg' ;
import octiconRepoTemplate from '../../public/img/svg/octicon-repo-template.svg' ;
2021-10-11 01:40:03 +03:00
import octiconTriangleDown from '../../public/img/svg/octicon-triangle-down.svg' ;
2020-07-12 12:10:56 +03:00
2021-07-13 21:09:19 +03:00
import Vue from 'vue' ;
2020-07-13 02:48:48 +03:00
export const svgs = {
2020-07-13 16:21:19 +03:00
'octicon-chevron-down' : octiconChevronDown ,
'octicon-chevron-right' : octiconChevronRight ,
2020-07-12 12:10:56 +03:00
'octicon-git-merge' : octiconGitMerge ,
'octicon-git-pull-request' : octiconGitPullRequest ,
'octicon-issue-closed' : octiconIssueClosed ,
'octicon-issue-opened' : octiconIssueOpened ,
2021-05-19 06:16:02 +03:00
'octicon-kebab-horizontal' : octiconKebabHorizontal ,
2020-07-12 12:10:56 +03:00
'octicon-link' : octiconLink ,
2020-07-13 02:48:48 +03:00
'octicon-lock' : octiconLock ,
2020-11-29 09:22:04 +03:00
'octicon-milestone' : octiconMilestone ,
2020-07-17 18:15:12 +03:00
'octicon-mirror' : octiconMirror ,
2020-11-29 09:22:04 +03:00
'octicon-project' : octiconProject ,
2020-07-13 02:48:48 +03:00
'octicon-repo' : octiconRepo ,
'octicon-repo-forked' : octiconRepoForked ,
'octicon-repo-template' : octiconRepoTemplate ,
2021-10-11 01:40:03 +03:00
'octicon-triangle-down' : octiconTriangleDown ,
2020-07-12 12:10:56 +03:00
} ;
const parser = new DOMParser ( ) ;
const serializer = new XMLSerializer ( ) ;
2020-11-29 09:22:04 +03:00
// retrieve a HTML string for given SVG icon name, size and additional classes
export function svg ( name , size = 16 , className = '' ) {
if ( ! ( name in svgs ) ) return '' ;
if ( size === 16 && ! className ) return svgs [ name ] ;
2020-07-12 12:10:56 +03:00
2020-11-29 09:22:04 +03:00
const document = parser . parseFromString ( svgs [ name ] , 'image/svg+xml' ) ;
const svgNode = document . firstChild ;
if ( size !== 16 ) svgNode . setAttribute ( 'width' , String ( size ) ) ;
if ( size !== 16 ) svgNode . setAttribute ( 'height' , String ( size ) ) ;
if ( className ) svgNode . classList . add ( ... className . split ( /\s+/ ) ) ;
return serializer . serializeToString ( svgNode ) ;
2020-07-12 12:10:56 +03:00
}
2021-07-13 21:09:19 +03:00
export const SvgIcon = Vue . component ( 'SvgIcon' , {
props : {
name : { type : String , required : true } ,
size : { type : Number , default : 16 } ,
className : { type : String , default : '' } ,
} ,
computed : {
svg ( ) {
return svg ( this . name , this . size , this . className ) ;
} ,
} ,
template : ` <span v-html="svg" /> `
} ) ;