svgedit
Version:
Powerful SVG-Editor for your browser
3 lines (2 loc) • 13 kB
JavaScript
const e=(()=>{if("undefined"==typeof self)return!1;if("top"in self&&self!==top)try{top.window.document._=0}catch(e){return!1}return"showOpenFilePicker"in self})(),a=e?Promise.resolve().then((function(){return l})):Promise.resolve().then((function(){return m}));e?Promise.resolve().then((function(){return c})):Promise.resolve().then((function(){return v}));const r=e?Promise.resolve().then((function(){return d})):Promise.resolve().then((function(){return f}));async function o(){return(await r).default(...arguments)}const s=async e=>{const a=await e.getFile();return a.handle=e,a};var l={__proto__:null,default:async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[{}];Array.isArray(e)||(e=[e]);const a=[];e.forEach(((e,r)=>{a[r]={description:e.description||"Files",accept:{}},e.mimeTypes?e.mimeTypes.map((l=>{a[r].accept[l]=e.extensions||[]})):a[r].accept["*/*"]=e.extensions||[]}));const r=await window.showOpenFilePicker({id:e[0].id,startIn:e[0].startIn,types:a,multiple:e[0].multiple||!1,excludeAcceptAllOption:e[0].excludeAcceptAllOption||!1}),l=await Promise.all(r.map(s));return e[0].multiple?l:l[0]}};function u(e){function t(e){if(Object(e)!==e)return Promise.reject(new TypeError(e+" is not an object."));var a=e.done;return Promise.resolve(e.value).then((function(e){return{value:e,done:a}}))}return u=function(e){this.s=e,this.n=e.next},u.prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var a=this.s.return;return void 0===a?Promise.resolve({value:e,done:!0}):t(a.apply(this.s,arguments))},throw:function(e){var a=this.s.return;return void 0===a?Promise.reject(e):t(a.apply(this.s,arguments))}},new u(e)}const p=async function(e,a){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.name,l=arguments.length>3?arguments[3]:void 0;const c=[],d=[];var m,v=!1,f=!1;try{for(var g,h=function(e){var a,r,l,c=2;for("undefined"!=typeof Symbol&&(r=Symbol.asyncIterator,l=Symbol.iterator);c--;){if(r&&null!=(a=e[r]))return a.call(e);if(l&&null!=(a=e[l]))return new u(a.call(e));r="@@asyncIterator",l="@@iterator"}throw new TypeError("Object is not async iterable")}(e.values());v=!(g=await h.next()).done;v=!1){const m=g.value,v=`${r}/${m.name}`;"file"===m.kind?d.push(m.getFile().then((a=>(a.directoryHandle=e,a.handle=m,Object.defineProperty(a,"webkitRelativePath",{configurable:!0,enumerable:!0,get:()=>v}))))):"directory"!==m.kind||!a||l&&l(m)||c.push(p(m,a,v,l))}}catch(e){f=!0,m=e}finally{try{v&&null!=h.return&&await h.return()}finally{if(f)throw m}}return[...(await Promise.all(c)).flat(),...await Promise.all(d)]};var c={__proto__:null,default:async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e.recursive=e.recursive||!1,e.mode=e.mode||"read";const a=await window.showDirectoryPicker({id:e.id,startIn:e.startIn,mode:e.mode});return(await(await a.values()).next()).done?[a]:p(a,e.recursive,void 0,e.skipDirectory)}},d={__proto__:null,default:async function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[{}],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,l=arguments.length>3&&void 0!==arguments[3]&&arguments[3],c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;Array.isArray(a)||(a=[a]),a[0].fileName=a[0].fileName||"Untitled";const d=[];let m=null;if(e instanceof Blob&&e.type?m=e.type:e.headers&&e.headers.get("content-type")&&(m=e.headers.get("content-type")),a.forEach(((e,a)=>{d[a]={description:e.description||"Files",accept:{}},e.mimeTypes?(0===a&&m&&e.mimeTypes.push(m),e.mimeTypes.map((r=>{d[a].accept[r]=e.extensions||[]}))):m?d[a].accept[m]=e.extensions||[]:d[a].accept["*/*"]=e.extensions||[]})),r)try{await r.getFile()}catch(e){if(r=null,l)throw e}const v=r||await window.showSaveFilePicker({suggestedName:a[0].fileName,id:a[0].id,startIn:a[0].startIn,types:d,excludeAcceptAllOption:a[0].excludeAcceptAllOption||!1});!r&&c&&c(v);const f=await v.createWritable();if("stream"in e){const a=e.stream();return await a.pipeTo(f),v}return"body"in e?(await e.body.pipeTo(f),v):(await f.write(await e),await f.close(),v)}},m={__proto__:null,default:async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[{}];return Array.isArray(e)||(e=[e]),new Promise(((a,r)=>{const l=document.createElement("input");l.type="file";const c=[...e.map((e=>e.mimeTypes||[])),...e.map((e=>e.extensions||[]))].join();l.multiple=e[0].multiple||!1,l.accept=c||"",l.style.display="none",document.body.append(l),l.addEventListener("cancel",(()=>{l.remove(),r(new DOMException("The user aborted a request.","AbortError"))})),l.addEventListener("change",(()=>{l.remove(),a(l.multiple?Array.from(l.files):l.files[0])})),"showPicker"in HTMLInputElement.prototype?l.showPicker():l.click()}))}},v={__proto__:null,default:async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[{}];return Array.isArray(e)||(e=[e]),e[0].recursive=e[0].recursive||!1,new Promise(((a,r)=>{const l=document.createElement("input");l.type="file",l.webkitdirectory=!0,l.style.display="none",document.body.append(l),l.addEventListener("cancel",(()=>{l.remove(),r(new DOMException("The user aborted a request.","AbortError"))})),l.addEventListener("change",(()=>{l.remove();let r=Array.from(l.files);e[0].recursive?e[0].recursive&&e[0].skipDirectory&&(r=r.filter((a=>a.webkitRelativePath.split("/").every((a=>!e[0].skipDirectory({name:a,kind:"directory"})))))):r=r.filter((e=>2===e.webkitRelativePath.split("/").length)),a(r)})),"showPicker"in HTMLInputElement.prototype?l.showPicker():l.click()}))}},f={__proto__:null,default:async function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};Array.isArray(a)&&(a=a[0]);const r=document.createElement("a");let l=e;"body"in e&&(l=await async function(e,a){const r=e.getReader(),l=new ReadableStream({start:e=>async function t(){return r.read().then((a=>{let{done:r,value:l}=a;if(!r)return e.enqueue(l),t();e.close()}))}()}),c=new Response(l),d=await c.blob();return r.releaseLock(),new Blob([d],{type:a})}(e.body,e.headers.get("content-type"))),r.download=a.fileName||"Untitled",r.href=URL.createObjectURL(await l);const i=()=>{"function"==typeof c&&c()},c=a.legacySetup&&a.legacySetup(i,(()=>c()),r);return r.addEventListener("click",(()=>{setTimeout((()=>URL.revokeObjectURL(r.href)),3e4),i()})),r.click(),null}};const g="opensave";let h=null;const loadExtensionTranslation=async function(e){let a;const r=e.configObj.pref("lang");try{a=await function __variableDynamicImportRuntime0__(e){switch(e){case"./locale/en.js":return Promise.resolve().then((function(){return _}));case"./locale/fr.js":return Promise.resolve().then((function(){return w}));case"./locale/sv.js":return Promise.resolve().then((function(){return b}));case"./locale/tr.js":return Promise.resolve().then((function(){return P}));case"./locale/uk.js":return Promise.resolve().then((function(){return S}));case"./locale/zh-CN.js":return Promise.resolve().then((function(){return A}));default:return new Promise((function(a,r){("function"==typeof queueMicrotask?queueMicrotask:setTimeout)(r.bind(null,new Error("Unknown variable dynamic import: "+e)))}))}}(`./locale/${r}.js`)}catch(e){console.warn(`Missing translation (${r}) for ${g} - using 'en'`),a=await Promise.resolve().then((function(){return _}))}e.i18next.addResourceBundle(r,"translation",a.default,!0,!0)};var y={name:g,async init(e){const r=this,{svgCanvas:l}=r,{$id:c,$click:d}=l;await loadExtensionTranslation(r);const importImage=e=>{if(!e.dataTransfer.types.includes("Files"))return;c("se-prompt-dialog").title=this.i18next.t("notification.loadingImage"),c("se-prompt-dialog").setAttribute("close",!1),e.stopPropagation(),e.preventDefault();const a="drop"===e.type?e.dataTransfer.files[0]:e.currentTarget.files[0];if(!a)return void c("se-prompt-dialog").setAttribute("close",!0);if(!a.type.includes("image"))return;let r;a.type.includes("svg")?(r=new FileReader,r.onloadend=e=>{const a=this.svgCanvas.importSvgString(e.target.result,m.shiftKey);this.svgCanvas.alignSelectedElements("m","page"),this.svgCanvas.alignSelectedElements("c","page"),this.svgCanvas.selectOnly([a]),c("se-prompt-dialog").setAttribute("close",!0)},r.readAsText(a)):(r=new FileReader,r.onloadend=e=>{let{target:{result:a}}=e;const insertNewImage=(e,r)=>{const l=this.svgCanvas.addSVGElementsFromJson({element:"image",attr:{x:0,y:0,width:e,height:r,id:this.svgCanvas.getNextId(),style:"pointer-events:inherit"}});this.svgCanvas.setHref(l,a),this.svgCanvas.selectOnly([l]),this.svgCanvas.alignSelectedElements("m","page"),this.svgCanvas.alignSelectedElements("c","page"),this.topPanel.updateContextPanel(),c("se-prompt-dialog").setAttribute("close",!0)};let r=100,l=100;const d=new Image;d.style.opacity=0,d.addEventListener("load",(()=>{r=d.offsetWidth||d.naturalWidth||d.width,l=d.offsetHeight||d.naturalHeight||d.height,insertNewImage(r,l)})),d.src=a},r.readAsDataURL(a))},m=document.createElement("input");m.type="file",m.addEventListener("change",importImage),this.workarea.addEventListener("drop",importImage);const clickClear=async function(){const[e,a]=r.configObj.curConfig.dimensions;"Cancel"!==await seConfirm(r.i18next.t("notification.QwantToClear"))&&(r.leftPanel.clickSelect(),r.svgCanvas.clear(),r.svgCanvas.setResolution(e,a),r.updateCanvas(!0),r.zoomImage(),r.layersPanel.populateLayers(),r.topPanel.updateContextPanel(),r.topPanel.updateTitle("untitled.svg"))},clickOpen=async function(){if("Cancel"!==await r.openPrep()){l.clear();try{const e=await async function n(){return(await a).default(...arguments)}({mimeTypes:["image/*"]}),l=await e.text();await r.loadSvgString(l),r.updateCanvas(),h=e.handle,r.topPanel.updateTitle(e.name),r.svgCanvas.runExtensions("onOpenedDocument",{name:e.name,lastModified:e.lastModified,size:e.size,type:e.type}),r.layersPanel.populateLayers()}catch(e){if("AbortError"!==e.name)return console.error(e)}}},clickSave=async function(e){if("open"===c("se-svg-editor-dialog").getAttribute("dialog"))r.saveSourceEditor();else{const a={images:r.configObj.pref("img_save"),round_digits:2};if(l.clearSelection(),a){const e=l.mergeDeep(l.getSvgOption(),a);for(const[a,r]of Object.entries(e))l.setSvgOption(a,r)}l.setSvgOption("apply",!0);const c='<?xml version="1.0"?>\n'+l.svgCanvasToString(),d=function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:512;const l=atob(e),c=[];for(let e=0;e<l.length;e+=r){const a=l.slice(e,e+r),d=new Array(a.length);for(let e=0;e<a.length;e++)d[e]=a.charCodeAt(e);const m=new Uint8Array(d);c.push(m)}return new Blob(c,{type:a})}(l.encode64(c),"image/svg+xml");try{if("save"===e&&null!==h){const e=!1;h=await o(d,{fileName:"untitled.svg",extensions:[".svg"]},h,e)}else h=await o(d,{fileName:r.title,extensions:[".svg"]});r.topPanel.updateTitle(h.name),l.runExtensions("onSavedDocument",{name:h.name,kind:h.kind})}catch(e){if("AbortError"!==e.name)return console.error(e)}}};return{name:r.i18next.t(`${g}:name`),callback(){l.insertChildAtIndex(c("main_button"),'\n <se-menu-item id="tool_clear" label="opensave.new_doc" shortcut="N" src="new.svg"></se-menu-item>',0);l.insertChildAtIndex(c("main_button"),'<se-menu-item id="tool_open" label="opensave.open_image_doc" src="open.svg"></se-menu-item>',1);l.insertChildAtIndex(c("main_button"),'<se-menu-item id="tool_save" label="opensave.save_doc" shortcut="S" src="saveImg.svg"></se-menu-item>',2);l.insertChildAtIndex(c("main_button"),'<se-menu-item id="tool_save_as" label="opensave.save_as_doc" src="saveImg.svg"></se-menu-item>',3);l.insertChildAtIndex(c("main_button"),'<se-menu-item id="tool_import" label="tools.import_doc" src="importImg.svg"></se-menu-item>',4),d(c("tool_clear"),clickClear.bind(this)),d(c("tool_open"),clickOpen.bind(this)),d(c("tool_save"),clickSave.bind(this,"save")),d(c("tool_save_as"),clickSave.bind(this,"saveas")),d(c("tool_import"),(e=>{m.shiftKey=e.shiftKey,m.click()}))}}}},_=Object.freeze({__proto__:null,default:{opensave:{new_doc:"New Image",open_image_doc:"Open SVG",save_doc:"Save SVG",save_as_doc:"Save as SVG"}}}),w=Object.freeze({__proto__:null,default:{opensave:{new_doc:"Nouvelle image",open_image_doc:"Ouvrir le SVG",save_doc:"Enregistrer l'image",save_as_doc:"Enregistrer en tant qu'image"}}}),b=Object.freeze({__proto__:null,default:{opensave:{new_doc:"Ny bild",open_image_doc:"Öppna SVG",save_doc:"Spara SVG",save_as_doc:"Spara som SVG"}}}),P=Object.freeze({__proto__:null,default:{opensave:{new_doc:"Yeni Resim",open_image_doc:"SVG Aç",save_doc:"SVG Kaydet",save_as_doc:"SVG olarak Kaydet"}}}),S=Object.freeze({__proto__:null,default:{opensave:{new_doc:"Нове Зображення",open_image_doc:"Відкрити SVG",save_doc:"Зберегти SVG",save_as_doc:"Зберегти SVG як"}}}),A=Object.freeze({__proto__:null,default:{opensave:{new_doc:"新图片",open_image_doc:"打开 SVG",save_doc:"保存图像",save_as_doc:"另存为图像"}}});export{y as default};
//# sourceMappingURL=ext-opensave.js.map