mirror of
https://gitee.com/veigarchen/iconfont-download.git
synced 2025-10-13 21:30:31 +00:00
1 line
9.8 KiB
JavaScript
1 line
9.8 KiB
JavaScript
let map={};const define=function(e,n,t){let o={},r=n.map(e=>map[e]);r[1]=o,t(...r),map[e]=o};let __awaiter=this&&this.__awaiter||function(e,n,t,o){return new(t||(t=Promise))(function(r,l){function i(e){try{s(o.next(e))}catch(e){l(e)}}function c(e){try{s(o.throw(e))}catch(e){l(e)}}function s(e){var n;e.done?r(e.value):(n=e.value,n instanceof t?n:new t(function(e){e(n)})).then(i,c)}s((o=o.apply(e,n||[])).next())})},__generator=this&&this.__generator||function(e,n){let t,o,r,l,i={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){return function(l){if(t)throw new TypeError("Generator is already executing.");for(;i;)try{if(t=1,o&&(r=2&l[0]?o.return:l[0]?o.throw||((r=o.return)&&r.call(o),0):o.next)&&!(r=r.call(o,l[1])).done)return r;switch(o=0,r&&(l=[2&l[0],r.value]),l[0]){case 0:case 1:r=l;break;case 4:return i.label++,{value:l[1],done:!1};case 5:i.label++,o=l[1],l=[0];continue;case 7:l=i.ops.pop(),i.trys.pop();continue;default:if(!(r=(r=i.trys).length>0&&r[r.length-1])&&(6===l[0]||2===l[0])){i=0;continue}if(3===l[0]&&(!r||l[1]>r[0]&&l[1]<r[3])){i.label=l[1];break}if(6===l[0]&&i.label<r[1]){i.label=r[1],r=l;break}if(r&&i.label<r[2]){i.label=r[2],i.ops.push(l);break}r[2]&&i.ops.pop(),i.trys.pop();continue}l=n.call(e,i)}catch(e){l=[6,e],o=0}finally{t=r=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}([l,c])}}};define("src/utils/CEnum",["require","exports"],function(e,n){"use strict";let t;Object.defineProperty(n,"__esModule",{value:!0}),n.CEnum=void 0,function(e){e[e.test=0]="test",e[e.log=1]="log",e[e.allSVG=2]="allSVG",e[e.tscode=3]="tscode"}(t=n.CEnum||(n.CEnum={}))}),define("run/tscodeTemplate",["require","exports"],function(e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.tscodeTemplate=void 0;n.tscodeTemplate=function(e){return'<template>\n <div ref="iconRef" style="display: inline-flex;" :style="{ fontSize: `${size}px`, color: color as any }">\n </div>\n</template>\n\n<script lang="ts" setup>\n\nimport { onMounted, ref } from \'vue\';\nimport { '.concat(e,", ").concat(e,"Json, ").concat(e,"Name } from './").concat(e,"';\n\nconst val = {\n [").concat(e,"Name]: ").concat(e,"Json,\n}\n\nconst props = defineProps({\n name: { default: '").concat(e,"' as keyof typeof val },\n type: { default: 'up' as ").concat(e," },\n size: { default: '20' },\n color: { default: undefined as any },\n})\n\n\nconst iconRef = ref<HTMLDivElement>({} as any)\nconst viewBoxStr = '#{viewBox}'\nconst viewBoxDefault = '0 0 1024 1024'\nconst str = {\n svg: [\n `<svg style=\"width: 1em;height: 1em;vertical-align: middle;overflow: hidden;\" viewBox=\"${viewBoxStr}\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">`,\n '</svg>'\n ],\n get0: (replacestr: string) => {\n return str.svg[0].replace(viewBoxStr, replacestr)\n },\n getPath: (param: { d: string; fill?: string }) => {\n return `<path d=\"${param.d}\" fill=\"${param.fill ?? 'currentColor'}\" />`\n }\n}\nonMounted(() => {\n const color = ['color:black;', 'color:red;']\n const sobj = (val as any)[props.name]\n if (!sobj) {\n console.info(`%c sicon组件传入name<%c${props.name}%c> 不存在`, `${color[0]} font-size:12px`, color[1], color[0])\n return\n }\n let obj: any = sobj[props.type]\n if (!obj) {\n const color = ['color:black;', 'color:red;']\n console.info(`%c sicon组件传入name<%c${props.name}%c> => type<%c${props.type}%c> 不存在`, `${color[0]} font-size:12px`, color[1], color[0], color[1], color[0]);\n return\n }\n let res = ''\n if (typeof (obj) === 'string') {\n res = `${str.svg[0]}<path d=\"${obj}\" fill=\"currentColor\" />${str.svg[1]}`\n } else {\n res = str.svg[0]\n let objt: { d: string[]; fill: { [key: string]: number[] }; } = obj\n const getFill = (fill: { [key: string]: number[] }, index: number) => {\n const fillkeys = Object.keys(fill)\n const colors = props.color\n\n for (let i = 0; i < fillkeys.length; i++) {\n const key = fillkeys[i];\n const nums = fill[key]\n if (nums.includes(index)) {\n\n if (colors) {\n if (Array.isArray(colors))\n return colors[i] ?? colors[colors.length - 1]\n return colors\n } else {\n return key\n }\n\n }\n\n }\n\n return 'currentColor'\n }\n\n objt.d.forEach((item, index) => {\n res += str.getPath({\n d: item,\n fill: getFill(objt.fill, index)\n })\n })\n res += str.svg[1]\n }\n\n iconRef.value.innerHTML = res\n})\n<\/script>\n")}}),define("run/util",["require","exports"],function(e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.getZIP=void 0;n.getZIP=function(e){let n=new window.JSZip;return{addFile:function(e,t){n.file(e,t)},download:function(){n.generateAsync({type:"blob"}).then(function(n){let t=window.URL.createObjectURL(new Blob([n],{type:"application/zip"})),o=document.createElement("a");document.body.appendChild(o),o.setAttribute("class","svg-crowbar"),o.setAttribute("download",null!=e?e:"iconfont.zip"),o.setAttribute("href",t),o.style.display="none",o.click(),setTimeout(function(){window.URL.revokeObjectURL(t)},10)})}}}}),define("run/tscode",["require","exports","run/tscodeTemplate","run/util"],function(e,n,t,o){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.tscode=n.subpoint=void 0;n.subpoint=function(e,n){if(!n)return e;let t=/\d+(\.\d+)?/g[Symbol.matchAll](e);return Array.from(t,function(t){let o=t[0],r=parseFloat(o),l=parseFloat(r.toFixed(n));e=e.replaceAll(o,l)}),e};n.tscode=function(e){let r=document.querySelectorAll(".block-icon-list"),l=[];if(r.forEach(function(e){let n=e.children;for(let e=0;e<n.length;e++){let t=n[e];l.push(t)}}),0==l.length)return void console.log("此页面没有可转换的图标");let i=function(t){let o,r=t.getElementsByClassName("icon-name")[0].getAttribute("title");if("code"===e.filenametype){let e=null===(o=t.getElementsByClassName("icon-code")[1])||void 0===o?void 0:o.getAttribute("title");e&&(r=e)}let l=t.getElementsByTagName("svg")[0],i=l.innerHTML,c=l.getAttribute("viewBox");null===c&&(c="0 0 1024 1024");let s=function(e,t){let o="",r=function(e,n){let t=new RegExp("".concat(n,'="(.+?)"'));return Array.from(t[Symbol.matchAll](e)).map(function(e){return e[0]})},l=function(e){if(e){let n=e.split("=")[1];return n.substring(1,n.length-1)}},i=(c=e,Array.from(/<path(.+?)<\/path>/g[Symbol.matchAll](c)).map(function(e){return e[0]}));var c;let s=[],a={};return i.forEach(function(e,o){let i=l(r(e,"d")[0]),c=l(r(e,"fill")[0]);c||(c="currentColor"),i=(0,n.subpoint)(i,t),s.push(i),a[c]||(a[c]=[]),a[c].push(o)}),o={d:s,fill:a}}('<svg xmlns="http://www.w3.org/2000/svg" viewBox="'.concat(c,'" version="1.1">').concat(i,"</svg>"),e.fixed);return s.viewBox=c,{data:s,name:r}},c=(0,o.getZIP)(e.zipname),s={};for(let e=0;e<l.length;e++){let n=i(l[e]),t=n.data;s[n.name]=t}let a="\nexport const ".concat(e.tsname,"Json = ").concat(JSON.stringify(s),"\n\nexport const ").concat(e.tsname,"Name = '").concat(e.tsname,"'\n\nexport type ").concat(e.tsname," = keyof typeof ").concat(e.tsname,"Json\n \n ");c.addFile(e.tsname+".ts",a),c.addFile("sicon.vue",(0,t.tscodeTemplate)(e.tsname)),c.download()}}),define("run/svg",["require","exports","run/tscode","run/util"],function(e,n,t,o){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.createPNG=n.downloadAllSVG=void 0;n.downloadAllSVG=function(e){let n=document.querySelectorAll(".block-icon-list"),r=[];if(n.forEach(function(e){let n=e.children;for(let e=0;e<n.length;e++){let t=n[e];r.push(t)}}),0==r.length)return void console.log("此页面没有可下载文件");let l=function(n){let o,r=n.getElementsByClassName("icon-name")[0].getAttribute("title");if("code"===e.filenametype){let e=null===(o=n.getElementsByClassName("icon-code")[1])||void 0===o?void 0:o.getAttribute("title");e&&(r=e)}let l=n.getElementsByTagName("svg")[0],i=l.innerHTML;i=(0,t.subpoint)(i,e.fixed);let c=l.getAttribute("viewBox");return{data:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="'.concat(c,'" version="1.1">').concat(i,"</svg>"),name:r+".svg"}},i=(0,o.getZIP)(e.zipname);for(let e=0;e<r.length;e++){let n=l(r[e]),t=n.data,o=n.name;i.addFile(o,t)}i.download()};n.createPNG=function(e,n,t){return void 0===n&&(n=200),new Promise(function(o){let r=new Image,l=document.createElement("canvas");l.width=n,l.height=n;let i,c=l.getContext("2d");switch(c.imageSmoothingQuality="high",t){case"webp":i="webp";break;case"jpg":case"jpeg":i="jpeg";break;case"png":default:i="png"}i="image/"+i,r.onload=function(){c.drawImage(r,0,0,n,n),o(l.toDataURL(i))},r.src="data:image/svg+xml,".concat(encodeURIComponent(e))})}}),define("run/event",["require","exports","src/utils/CEnum","run/svg","run/tscode"],function(e,n,t,o,r){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.event=void 0;n.event=function(){chrome.runtime.onMessage.addListener(function(e,n,l){return __awaiter(void 0,void 0,void 0,function(){let n;return __generator(this,function(i){switch(n={ok:!0,data:null},e.type){case t.CEnum.log:console.log.apply(console,e.data);break;case t.CEnum.test:console.log("测试通讯");break;case t.CEnum.allSVG:(0,o.downloadAllSVG)(e.data);break;case t.CEnum.tscode:(0,r.tscode)(e.data)}return l(n),[2]})})})}}),define("run/main",["require","exports","run/event"],function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0});let o=window.location.href;/^https?:\/\/(www.)?iconfont.cn/.test(o)&&(console.log("成功加载iconfont插件"),(0,t.event)())}); |