Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

svg.js 2.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import octiconChevronDown from '../../public/img/svg/octicon-chevron-down.svg';
  2. import octiconChevronRight from '../../public/img/svg/octicon-chevron-right.svg';
  3. import octiconGitMerge from '../../public/img/svg/octicon-git-merge.svg';
  4. import octiconGitPullRequest from '../../public/img/svg/octicon-git-pull-request.svg';
  5. import octiconIssueClosed from '../../public/img/svg/octicon-issue-closed.svg';
  6. import octiconIssueOpened from '../../public/img/svg/octicon-issue-opened.svg';
  7. import octiconKebabHorizontal from '../../public/img/svg/octicon-kebab-horizontal.svg';
  8. import octiconLink from '../../public/img/svg/octicon-link.svg';
  9. import octiconLock from '../../public/img/svg/octicon-lock.svg';
  10. import octiconMilestone from '../../public/img/svg/octicon-milestone.svg';
  11. import octiconMirror from '../../public/img/svg/octicon-mirror.svg';
  12. import octiconProject from '../../public/img/svg/octicon-project.svg';
  13. import octiconRepo from '../../public/img/svg/octicon-repo.svg';
  14. import octiconRepoForked from '../../public/img/svg/octicon-repo-forked.svg';
  15. import octiconRepoTemplate from '../../public/img/svg/octicon-repo-template.svg';
  16. import Vue from 'vue';
  17. export const svgs = {
  18. 'octicon-chevron-down': octiconChevronDown,
  19. 'octicon-chevron-right': octiconChevronRight,
  20. 'octicon-git-merge': octiconGitMerge,
  21. 'octicon-git-pull-request': octiconGitPullRequest,
  22. 'octicon-issue-closed': octiconIssueClosed,
  23. 'octicon-issue-opened': octiconIssueOpened,
  24. 'octicon-kebab-horizontal': octiconKebabHorizontal,
  25. 'octicon-link': octiconLink,
  26. 'octicon-lock': octiconLock,
  27. 'octicon-milestone': octiconMilestone,
  28. 'octicon-mirror': octiconMirror,
  29. 'octicon-project': octiconProject,
  30. 'octicon-repo': octiconRepo,
  31. 'octicon-repo-forked': octiconRepoForked,
  32. 'octicon-repo-template': octiconRepoTemplate,
  33. };
  34. const parser = new DOMParser();
  35. const serializer = new XMLSerializer();
  36. // retrieve a HTML string for given SVG icon name, size and additional classes
  37. export function svg(name, size = 16, className = '') {
  38. if (!(name in svgs)) return '';
  39. if (size === 16 && !className) return svgs[name];
  40. const document = parser.parseFromString(svgs[name], 'image/svg+xml');
  41. const svgNode = document.firstChild;
  42. if (size !== 16) svgNode.setAttribute('width', String(size));
  43. if (size !== 16) svgNode.setAttribute('height', String(size));
  44. if (className) svgNode.classList.add(...className.split(/\s+/));
  45. return serializer.serializeToString(svgNode);
  46. }
  47. export const SvgIcon = Vue.component('SvgIcon', {
  48. props: {
  49. name: {type: String, required: true},
  50. size: {type: Number, default: 16},
  51. className: {type: String, default: ''},
  52. },
  53. computed: {
  54. svg() {
  55. return svg(this.name, this.size, this.className);
  56. },
  57. },
  58. template: `<span v-html="svg" />`
  59. });