svgedit
Version:
Powerful SVG-Editor for your browser
11 lines (10 loc) • 14.1 kB
JavaScript
/**
* @file ext-imagelib.js
*
* @license MIT
*
* @copyright 2010 Alexis Deveria
*
*/
const e="imagelib",loadExtensionTranslation=async function(t){let d;const b=t.configObj.pref("lang");try{d=await function __variableDynamicImportRuntime0__(e){switch(e){case"./locale/de.js":return Promise.resolve().then((function(){return i}));case"./locale/en.js":return Promise.resolve().then((function(){return n}));case"./locale/fr.js":return Promise.resolve().then((function(){return o}));case"./locale/pl.js":return Promise.resolve().then((function(){return r}));case"./locale/pt-BR.js":return Promise.resolve().then((function(){return s}));case"./locale/ro.js":return Promise.resolve().then((function(){return l}));case"./locale/sk.js":return Promise.resolve().then((function(){return a}));case"./locale/sl.js":return Promise.resolve().then((function(){return c}));case"./locale/zh-CN.js":return Promise.resolve().then((function(){return m}));default:return new Promise((function(t,i){("function"==typeof queueMicrotask?queueMicrotask:setTimeout)(i.bind(null,new Error("Unknown variable dynamic import: "+e)))}))}}("./locale/".concat(b,".js"))}catch(t){console.warn("Missing translation (".concat(b,") for ").concat(e," - using 'en'")),d=await Promise.resolve().then((function(){return n}))}t.i18next.addResourceBundle(b,e,d.default)};var t={name:e,async init(t){let{decode64:i,dropXMLInternalSubset:n}=t;const o=this,{$id:r}=o.svgCanvas,{$svgEditor:s}=o,{imgPath:l}=o.configObj.curConfig;await loadExtensionTranslation(o);const{svgCanvas:a}=o,c=[{name:o.i18next.t("".concat(e,":imgLibs_0_name")),url:"extensions/ext-imagelib/index.html",description:o.i18next.t("".concat(e,":imgLibs_0_description"))},{name:o.i18next.t("".concat(e,":imgLibs_1_name")),url:"https://ian.umces.edu/symbols/catalog/svgedit/album_chooser.php?svgedit=3",description:o.i18next.t("".concat(e,":imgLibs_1_description"))}],m=c.map((e=>{let{url:t}=e;try{return new URL(t).origin}catch(e){return location.origin}})),closeBrowser=()=>{r("imgbrowse_holder").style.display="none",document.activeElement.blur()},importImage=e=>{const t=a.addSVGElementFromJson({element:"image",attr:{x:0,y:0,width:0,height:0,id:a.getNextId(),style:"pointer-events:inherit"}});a.clearSelection(),a.addToSelection([t]),a.setImageURL(e)},d={};let b,p,u="s",g=[],_=!1;window.addEventListener("message",(async function onMessage(e){let t,r,s,l,c,h,{origin:y,data:f}=e,v=f;if(v&&["string","object"].includes(typeof v)){try{if(v="object"==typeof v?v:JSON.parse(v),"imagelib"!==v.namespace)return;if(!m.includes("*")&&!m.includes(y))return void console.error("Origin ".concat(y," not whitelisted for posting to ").concat(window.origin));const e="name"in v;if(!e&&_)return void(_=!1);"href"in v&&(t=v.href,v=v.data),document.querySelector("se-elix-alert-dialog")&&document.querySelector("se-elix-alert-dialog").remove(),r=e?"meta":v.charAt(0)}catch(e){if("string"==typeof v){const e=v.charAt(0);if("{"!==e&&_)return void(_=!1);if("|"===e){const e=v.indexOf("|",1);t=v.substr(1,e-1),v=v.substr(e+1),r=v.charAt(0)}}}switch(r){case"meta":{_=!1,l=v,d[l.id]=l;const e=l.name||"file",t=o.i18next.t("notification.retrieving").replace("%s",e);return void("m"!==u?(await seConfirm(t),_=!0):(s=document.createElement("div"),s.textContent=t,s.dataset.id=l.id,b.appendChild(s),l.entry=s))}case"<":c=!0;break;case"d":if(v.startsWith("data:image/svg+xml")){const e="data:image/svg+xml;base64,",t=v.substring(e.length);v=i(t),c=!0;break}if(v.startsWith("data:image/")){h=!0;break}default:return void("m"!==u?closeBrowser():d[t].entry.remove())}switch(u){case"s":c?o.svgCanvas.importSvgString(v):h&&importImage(v),closeBrowser();break;case"m":{let e;if(g.push([c?"svg":"img",v]),l=d[t],c){if(l&&l.name)e=l.name;else{const t=(new DOMParser).parseFromString(n(v),"text/xml").documentElement;e=t.querySelector("title").textContent||"(SVG #"+v.length+")"}if(l)Array.from(b.children).forEach((function(i){if(i.dataset.id===t){if(l.preview_url){const e=document.createElement("img");e.src=l.preview_url;const t=document.createElement("span");t.appendChild(e),i.append(t)}else i.textContent=e;p.removeAttribute("disabled")}}));else{const t=document.createElement("div");t.textContent=e,b.appendChild(t),p.removeAttribute("disabled")}}else{if(l&&l.preview_url){e=l.name||"",s=document.createElement("span");const t=document.createElement("img");t.src=l.preview_url,s.appendChild(t),s.appendChild(document.createTextNode(e))}else s=document.createElement("img"),s.src=v;if(l)Array.from(b.children).forEach((function(e){e.dataset.id===t&&(e.appendChild(s),p.removeAttribute("disabled"))}));else{const e=document.createElement("div");e.appendChild(s),b.appendChild(e),p.removeAttribute("disabled")}}break}case"o":if(!c)break;closeBrowser();if(!await o.openPrep())return;a.clear(),a.setSvgString(v);break}}}),!0);const insertAfter=(e,t)=>{e.parentNode.insertBefore(t,e.nextSibling)},toggleMultiLoop=()=>{for(g.forEach((function(e,t){const i=e[0],n=e[1];"svg"===i?a.importSvgString(n):importImage(n),a.moveSelectedElements(20*t,20*t,!1)}));b.firstChild;)b.removeChild(b.firstChild);g=[],r("imgbrowse_holder").style.display="none"},toggleMulti=e=>{r("lib_framewrap").style.right=e?200:10,r("imglib_opts").style.right=e?200:10,b||(b=document.createElement("div"),b.setAttribute("id","imglib_preview"),b.setAttribute("style","position: absolute;top: 45px;right: 10px;width: 180px;bottom: 45px;background: #fff;overflow: auto;"),insertAfter(r("lib_framewrap"),b),p=document.createElement("button"),p.setAttribute("content","Import selected"),p.setAttribute("disabled",!0),p.textContent="Import selected",p.setAttribute("style","position: absolute;bottom: 10px;right: -10px;"),r("imgbrowse").appendChild(p),p.addEventListener("click",toggleMultiLoop),p.addEventListener("touchend",toggleMultiLoop)),p.style.display=e?"block":"none",b.style.display=e?"block":"none"},showBrowser=()=>{let t=r("imgbrowse");if(t)r("imgbrowse_holder").style.display="block";else{const i=document.createElement("div");i.id="imgbrowse_holder",i.innerHTML="<div id=imgbrowse class=toolbar_button></div>",insertAfter(s,i),t=r("imgbrowse");const n=o.i18next.t("".concat(e,":select_lib")),a=document.createElement("div");a.id="lib_framewrap";const m=document.createElement("ul");m.id="imglib_opts",t.append(m);const d=document.createElement("iframe");d.src="javascript:0",d.style.display="none",a.append(d),t.prepend(a);const b=document.createElement("h1");t.prepend(b),b.textContent=n,b.setAttribute("style","position: absolute;top: 0px;left: 0px;width: 100%;");const p=document.createElement("button");p.innerHTML=o.i18next.t("common.cancel"),t.appendChild(p),p.addEventListener("click",(function(){r("imgbrowse_holder").style.display="none"})),p.addEventListener("touchend",(function(){r("imgbrowse_holder").style.display="none"})),p.setAttribute("style","position: absolute;top: 5px;right: 10px;");const g=document.createElement("span");g.setAttribute("style","position: absolute;top: 5px;left: 10px;display: inline-flex;"),t.appendChild(g);const _=document.createElement("button");_.style.visibility="hidden",_.innerHTML='<img class="svg_icon" src="'.concat(l,'/library.svg" alt="icon" width="16" height="16" />')+o.i18next.t("".concat(e,":show_list")),g.appendChild(_),_.addEventListener("click",(function(){d.setAttribute("src","about:blank"),d.style.display="none",m.style.display="block",b.textContent=n,_.style.display="none"})),_.addEventListener("touchend",(function(){d.setAttribute("src","about:blank"),d.style.display="none",m.style.display="block",b.textContent=n,_.style.display="none"})),_.setAttribute("style","margin-right: 5px;"),_.style.display="none";const h=document.createElement("select");h.innerHTML="<select><option value=s>"+o.i18next.t("".concat(e,":import_single"))+"</option><option value=m>"+o.i18next.t("".concat(e,":import_multi"))+"</option><option value=o>"+o.i18next.t("".concat(e,":open"))+"</option>",g.appendChild(h),h.addEventListener("change",(function(){switch(u=this.value,u){case"s":case"o":toggleMulti(!1);break;case"m":toggleMulti(!0)}})),h.setAttribute("style","margin-top: 10px;"),c.forEach((function(e){let{name:t,url:i,description:n}=e;const o=document.createElement("li");m.appendChild(o),o.textContent=t,o.addEventListener("click",(function(){d.setAttribute("src",i),d.style.display="block",b.textContent=t,m.style.display="none",_.style.display="block"})),o.addEventListener("touchend",(function(){d.setAttribute("src",i),d.style.display="block",b.textContent=t,m.style.display="none",_.style.display="block"}));const r=document.createElement("span");r.textContent=n,o.appendChild(r)}))}};return{svgicons:"ext-imagelib.xml",callback(){const e=document.createElement("template");e.innerHTML='\n <se-menu-item id="tool_imagelib" label="'.concat("imagelib:buttons.0.title",'" src="library.svg"></se-menu-item>\n '),insertAfter(r("tool_export"),e.content.cloneNode(!0)),r("tool_imagelib").addEventListener("click",(()=>{showBrowser()}));const t=document.createElement("style");t.textContent="#imgbrowse_holder {position: absolute;top: 0;left: 0;width: 100%;height: 100%;background-color: rgba(0, 0, 0, .5);z-index: 5;}#imgbrowse {position: absolute;top: 25px;left: 25px;right: 25px;bottom: 25px;min-width: 300px;min-height: 200px;background: #5a6162;border: 1px outset #777;}#imgbrowse h1 {font-size: 20px;margin: .4em;text-align: center;}#lib_framewrap,#imgbrowse > ul {position: absolute;top: 45px;left: 10px;right: 10px;bottom: 10px;background: white;margin: 0;padding: 0;}#imgbrowse > ul {overflow: auto;}#imgbrowse > div {border: 1px solid #666;}#imglib_preview > div {padding: 5px;font-size: 12px;}#imglib_preview img {display: block;margin: 0 auto;max-height: 100px;}#imgbrowse li {list-style: none;padding: .5em;background: #E8E8E8;border-bottom: 1px solid #5a6162;line-height: 1.2em;font-style: sans-serif;}#imgbrowse li > span {color: #666;font-size: 15px;display: block;}#imgbrowse li:hover {background: #FFC;cursor: pointer;}#imgbrowse iframe {width: 100%;height: 100%;border: 0;}",document.head.appendChild(t)}}}},i=Object.freeze({__proto__:null,default:{select_lib:"Select an image library",show_list:"Show library list",import_single:"Import single",import_multi:"Import multiple",open:"Open as new document",buttons:[{title:"Bilder-Bibliothek"}],imgLibs_0_name:"Demo library (local)",imgLibs_0_description:"Demonstration library for SVG-edit on this server",imgLibs_1_name:"IAN Symbol Libraries",imgLibs_1_description:"Free library of illustrations"}}),n=Object.freeze({__proto__:null,default:{select_lib:"Select an image library",show_list:"Show library list",import_single:"Import single",import_multi:"Import multiple",open:"Open as new document",buttons:[{title:"Image library"}],imgLibs_0_name:"Demo library (local)",imgLibs_0_description:"Demonstration library for SVG-edit on this server",imgLibs_1_name:"IAN Symbol Libraries",imgLibs_1_description:"Free library of illustrations"}}),o=Object.freeze({__proto__:null,default:{select_lib:"Choisir une bibliothèque d'images",show_list:"show_list",import_single:"import_single",import_multi:"import_multi",open:"open",buttons:[{title:"Bibliothèque d'images"}],imgLibs_0_name:"Demo library (local)",imgLibs_0_description:"Demonstration library for SVG-edit on this server",imgLibs_1_name:"IAN Symbol Libraries",imgLibs_1_description:"Free library of illustrations"}}),r=Object.freeze({__proto__:null,default:{select_lib:"Select an image library",show_list:"Show library list",import_single:"Import single",import_multi:"Import multiple",open:"Open as new document",buttons:[{title:"Biblioteka obrazów"}],imgLibs_0_name:"Demo library (local)",imgLibs_0_description:"Demonstration library for SVG-edit on this server",imgLibs_1_name:"IAN Symbol Libraries",imgLibs_1_description:"Free library of illustrations"}}),s=Object.freeze({__proto__:null,default:{select_lib:"Select an image library",show_list:"Show library list",import_single:"Import single",import_multi:"Import multiple",open:"Open as new document",buttons:[{title:"Biblioteca de Imagens"}],imgLibs_0_name:"Demo library (local)",imgLibs_0_description:"Demonstration library for SVG-edit on this server",imgLibs_1_name:"IAN Symbol Libraries",imgLibs_1_description:"Free library of illustrations"}}),l=Object.freeze({__proto__:null,default:{select_lib:"Select an image library",show_list:"Show library list",import_single:"Import single",import_multi:"Import multiple",open:"Open as new document",buttons:[{title:"Bibliotecă de Imagini"}],imgLibs_0_name:"Demo library (local)",imgLibs_0_description:"Demonstration library for SVG-edit on this server",imgLibs_1_name:"IAN Symbol Libraries",imgLibs_1_description:"Free library of illustrations"}}),a=Object.freeze({__proto__:null,default:{select_lib:"Select an image library",show_list:"Show library list",import_single:"Import single",import_multi:"Import multiple",open:"Open as new document",buttons:[{title:"Knižnica obrázkov"}],imgLibs_0_name:"Demo library (local)",imgLibs_0_description:"Demonstration library for SVG-edit on this server",imgLibs_1_name:"IAN Symbol Libraries",imgLibs_1_description:"Free library of illustrations"}}),c=Object.freeze({__proto__:null,default:{select_lib:"Select an image library",show_list:"Show library list",import_single:"Import single",import_multi:"Import multiple",open:"Open as new document",buttons:[{title:"Knjižnica slik"}],imgLibs_0_name:"Demo library (local)",imgLibs_0_description:"Demonstration library for SVG-edit on this server",imgLibs_1_name:"IAN Symbol Libraries",imgLibs_1_description:"Free library of illustrations"}}),m=Object.freeze({__proto__:null,default:{select_lib:"Select an image library",show_list:"Show library list",import_single:"Import single",import_multi:"Import multiple",open:"Open as new document",buttons:[{title:"图像库"}],imgLibs_0_name:"Demo library (local)",imgLibs_0_description:"Demonstration library for SVG-edit on this server",imgLibs_1_name:"IAN Symbol Libraries",imgLibs_1_description:"Free library of illustrations"}});export{t as default};
//# sourceMappingURL=ext-imagelib.js.map