@teipublisher/pb-components 2.25.5 → 2.25.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/.github/workflows/main.yml +3 -3
  2. package/.github/workflows/node.js.yml +3 -3
  3. package/.github/workflows/release.js.yml +3 -3
  4. package/CHANGELOG.md +8 -0
  5. package/Dockerfile +78 -70
  6. package/css/components.css +5 -5
  7. package/dist/demo/pb-drawer2.html +1 -1
  8. package/dist/demo/pb-leaflet-map.html +1 -1
  9. package/dist/demo/pb-repeat.html +1 -3
  10. package/dist/demo/pb-view3.html +1 -1
  11. package/dist/{paper-icon-button-0fb125c4.js → paper-icon-button-72125e67.js} +1 -1
  12. package/dist/pb-code-editor.js +25 -20
  13. package/dist/pb-component-docs.js +58 -54
  14. package/dist/pb-components-bundle.js +1827 -1520
  15. package/dist/pb-edit-app.js +167 -107
  16. package/dist/pb-elements.json +54 -54
  17. package/dist/{pb-i18n-0611135a.js → pb-i18n-4cc00bfe.js} +1 -1
  18. package/dist/pb-leaflet-map.js +23 -23
  19. package/dist/pb-mei.js +56 -41
  20. package/dist/{pb-mixin-b1caa22e.js → pb-mixin-886ece32.js} +1 -1
  21. package/dist/pb-odd-editor.js +925 -758
  22. package/dist/pb-tify.js +2 -2
  23. package/dist/{vaadin-element-mixin-859a0132.js → vaadin-element-mixin-ad07ba25.js} +88 -61
  24. package/gh-pages.js +5 -3
  25. package/package.json +2 -2
  26. package/pb-elements.json +54 -54
  27. package/src/assets/components.css +5 -5
  28. package/src/authority/airtable.js +20 -21
  29. package/src/authority/anton.js +129 -129
  30. package/src/authority/custom.js +23 -21
  31. package/src/authority/geonames.js +38 -32
  32. package/src/authority/gnd.js +47 -42
  33. package/src/authority/kbga.js +137 -134
  34. package/src/authority/metagrid.js +44 -46
  35. package/src/authority/reconciliation.js +66 -67
  36. package/src/authority/registry.js +4 -4
  37. package/src/docs/pb-component-docs.js +2 -2
  38. package/src/docs/pb-component-view.js +5 -5
  39. package/src/docs/pb-components-list.js +2 -2
  40. package/src/docs/pb-demo-snippet.js +2 -2
  41. package/src/dts-client.js +299 -297
  42. package/src/dts-select-endpoint.js +90 -82
  43. package/src/parse-date-service.js +184 -135
  44. package/src/pb-ajax.js +171 -167
  45. package/src/pb-authority-lookup.js +96 -81
  46. package/src/pb-autocomplete.js +292 -280
  47. package/src/pb-blacklab-highlight.js +264 -259
  48. package/src/pb-blacklab-results.js +236 -221
  49. package/src/pb-browse-docs.js +540 -475
  50. package/src/pb-browse.js +68 -65
  51. package/src/pb-clipboard.js +79 -76
  52. package/src/pb-code-editor.js +110 -102
  53. package/src/pb-code-highlight.js +209 -204
  54. package/src/pb-codepen.js +79 -72
  55. package/src/pb-collapse.js +149 -146
  56. package/src/pb-combo-box.js +190 -190
  57. package/src/pb-components-bundle.js +1 -1
  58. package/src/pb-custom-form.js +150 -149
  59. package/src/pb-document.js +89 -90
  60. package/src/pb-download.js +208 -195
  61. package/src/pb-drawer.js +145 -148
  62. package/src/pb-edit-app.js +301 -229
  63. package/src/pb-edit-xml.js +99 -96
  64. package/src/pb-events.js +114 -107
  65. package/src/pb-facs-link.js +104 -102
  66. package/src/pb-facsimile.js +411 -413
  67. package/src/pb-formula.js +151 -153
  68. package/src/pb-geolocation.js +129 -131
  69. package/src/pb-grid-action.js +53 -56
  70. package/src/pb-grid.js +231 -228
  71. package/src/pb-highlight.js +140 -140
  72. package/src/pb-hotkeys.js +40 -42
  73. package/src/pb-i18n.js +101 -104
  74. package/src/pb-image-strip.js +84 -78
  75. package/src/pb-lang.js +83 -70
  76. package/src/pb-leaflet-map.js +488 -485
  77. package/src/pb-link.js +126 -124
  78. package/src/pb-load.js +431 -426
  79. package/src/pb-login.js +275 -254
  80. package/src/pb-manage-odds.js +364 -318
  81. package/src/pb-map-icon.js +89 -89
  82. package/src/pb-map-layer.js +85 -85
  83. package/src/pb-markdown.js +90 -99
  84. package/src/pb-media-query.js +74 -72
  85. package/src/pb-mei.js +306 -295
  86. package/src/pb-message.js +143 -130
  87. package/src/pb-mixin.js +269 -264
  88. package/src/pb-navigation.js +80 -82
  89. package/src/pb-observable.js +38 -38
  90. package/src/pb-odd-editor.js +1056 -958
  91. package/src/pb-odd-elementspec-editor.js +348 -297
  92. package/src/pb-odd-model-editor.js +1058 -898
  93. package/src/pb-odd-parameter-editor.js +200 -178
  94. package/src/pb-odd-rendition-editor.js +136 -124
  95. package/src/pb-page.js +432 -422
  96. package/src/pb-paginate.js +202 -190
  97. package/src/pb-panel.js +191 -179
  98. package/src/pb-popover-themes.js +7 -5
  99. package/src/pb-popover.js +296 -287
  100. package/src/pb-print-preview.js +127 -127
  101. package/src/pb-progress.js +49 -49
  102. package/src/pb-repeat.js +105 -104
  103. package/src/pb-restricted.js +84 -77
  104. package/src/pb-search.js +238 -221
  105. package/src/pb-select-feature.js +127 -120
  106. package/src/pb-select-odd.js +132 -124
  107. package/src/pb-select-template.js +89 -78
  108. package/src/pb-select.js +251 -227
  109. package/src/pb-split-list.js +179 -174
  110. package/src/pb-svg.js +80 -79
  111. package/src/pb-table-column.js +54 -54
  112. package/src/pb-table-grid.js +221 -203
  113. package/src/pb-tabs.js +61 -63
  114. package/src/pb-tify.js +154 -154
  115. package/src/pb-timeline.js +271 -229
  116. package/src/pb-toggle-feature.js +198 -185
  117. package/src/pb-upload.js +184 -174
  118. package/src/pb-version.js +30 -30
  119. package/src/pb-view-annotate.js +132 -98
  120. package/src/pb-view.js +1282 -1263
  121. package/src/pb-zoom.js +40 -40
  122. package/src/polymer-hack.js +1 -1
  123. package/src/search-result-service.js +256 -223
  124. package/src/seed-element.js +13 -20
  125. package/src/settings.js +4 -4
  126. package/src/theming.js +91 -91
  127. package/src/urls.js +289 -289
  128. package/src/utils.js +53 -51
@@ -1,4 +1,4 @@
1
- import{f as e,N as t,j as o,k as i,l as s,A as r,L as a,c as n,h as l,b as d,w as c,p}from"./pb-mixin-b1caa22e.js";import{E as h,T as m,D as u,p as b}from"./vaadin-element-mixin-859a0132.js";import{h as g,g as v,F as f,D as y,z as w,A as _,c as x}from"./paper-checkbox-4f410b1f.js";import{a as E}from"./paper-listbox-5f42cff5.js";import"./paper-icon-button-0fb125c4.js";import"./jinn-codemirror-da0e2d1f.js";import{t as $,g as S}from"./pb-i18n-0611135a.js";const k=(()=>{if("undefined"==typeof self)return!1;if("top"in self&&self!==top)try{top}catch(e){return!1}return"showOpenFilePicker"in self})();k?Promise.resolve().then((function(){return P})):Promise.resolve().then((function(){return z})),k?Promise.resolve().then((function(){return T})):Promise.resolve().then((function(){return B}));const C=k?Promise.resolve().then((function(){return O})):Promise.resolve().then((function(){return j}));async function A(...e){return(await C).default(...e)}const R=async e=>{const t=await e.getFile();return t.handle=e,t};var P={__proto__:null,default:async(e=[{}])=>{Array.isArray(e)||(e=[e]);const t=[];e.forEach((e,o)=>{t[o]={description:e.description||"Files",accept:{}},e.mimeTypes?e.mimeTypes.map(i=>{t[o].accept[i]=e.extensions||[]}):t[o].accept["*/*"]=e.extensions||[]});const o=await window.showOpenFilePicker({id:e[0].id,startIn:e[0].startIn,types:t,multiple:e[0].multiple||!1,excludeAcceptAllOption:e[0].excludeAcceptAllOption||!1}),i=await Promise.all(o.map(R));return e[0].multiple?i:i[0]}};function M(e){function t(e){if(Object(e)!==e)return Promise.reject(new TypeError(e+" is not an object."));var t=e.done;return Promise.resolve(e.value).then((function(e){return{value:e,done:t}}))}return(M=function(e){this.s=e,this.n=e.next}).prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var o=this.s.return;return void 0===o?Promise.resolve({value:e,done:!0}):t(o.apply(this.s,arguments))},throw:function(e){var o=this.s.return;return void 0===o?Promise.reject(e):t(o.apply(this.s,arguments))}},new M(e)}const I=async(e,t,o=e.name,i)=>{const s=[],r=[];var a,n=!1,l=!1;try{for(var d,c=function(e){var t,o,i,s=2;for("undefined"!=typeof Symbol&&(o=Symbol.asyncIterator,i=Symbol.iterator);s--;){if(o&&null!=(t=e[o]))return t.call(e);if(i&&null!=(t=e[i]))return new M(t.call(e));o="@@asyncIterator",i="@@iterator"}throw new TypeError("Object is not async iterable")}(e.values());n=!(d=await c.next()).done;n=!1){const a=d.value,n=`${o}/${a.name}`;"file"===a.kind?r.push(a.getFile().then(t=>(t.directoryHandle=e,t.handle=a,Object.defineProperty(t,"webkitRelativePath",{configurable:!0,enumerable:!0,get:()=>n})))):"directory"!==a.kind||!t||i&&i(a)||s.push(I(a,t,n,i))}}catch(e){l=!0,a=e}finally{try{n&&null!=c.return&&await c.return()}finally{if(l)throw a}}return[...(await Promise.all(s)).flat(),...await Promise.all(r)]};var T={__proto__:null,default:async(e={})=>{e.recursive=e.recursive||!1,e.mode=e.mode||"read";const t=await window.showDirectoryPicker({id:e.id,startIn:e.startIn,mode:e.mode});return(await(await t.values()).next()).done?[t]:I(t,e.recursive,void 0,e.skipDirectory)}},O={__proto__:null,default:async(e,t=[{}],o=null,i=!1,s=null)=>{Array.isArray(t)||(t=[t]),t[0].fileName=t[0].fileName||"Untitled";const r=[];let a=null;if(e instanceof Blob&&e.type?a=e.type:e.headers&&e.headers.get("content-type")&&(a=e.headers.get("content-type")),t.forEach((e,t)=>{r[t]={description:e.description||"Files",accept:{}},e.mimeTypes?(0===t&&a&&e.mimeTypes.push(a),e.mimeTypes.map(o=>{r[t].accept[o]=e.extensions||[]})):a?r[t].accept[a]=e.extensions||[]:r[t].accept["*/*"]=e.extensions||[]}),o)try{await o.getFile()}catch(e){if(o=null,i)throw e}const n=o||await window.showSaveFilePicker({suggestedName:t[0].fileName,id:t[0].id,startIn:t[0].startIn,types:r,excludeAcceptAllOption:t[0].excludeAcceptAllOption||!1});!o&&s&&s(n);const l=await n.createWritable();if("stream"in e){const t=e.stream();return await t.pipeTo(l),n}return"body"in e?(await e.body.pipeTo(l),n):(await l.write(await e),await l.close(),n)}},z={__proto__:null,default:async(e=[{}])=>(Array.isArray(e)||(e=[e]),new Promise((t,o)=>{const i=document.createElement("input");i.type="file";const s=[...e.map(e=>e.mimeTypes||[]),...e.map(e=>e.extensions||[])].join();i.multiple=e[0].multiple||!1,i.accept=s||"",i.style.display="none",document.body.append(i);const r=e=>{"function"==typeof a&&a(),t(e)},a=e[0].legacySetup&&e[0].legacySetup(r,()=>a(o),i),n=()=>{window.removeEventListener("focus",n),i.remove()};i.addEventListener("click",()=>{window.addEventListener("focus",n)}),i.addEventListener("change",()=>{window.removeEventListener("focus",n),i.remove(),r(i.multiple?Array.from(i.files):i.files[0])}),"showPicker"in HTMLInputElement.prototype?i.showPicker():i.click()}))},B={__proto__:null,default:async(e=[{}])=>(Array.isArray(e)||(e=[e]),e[0].recursive=e[0].recursive||!1,new Promise((t,o)=>{const i=document.createElement("input");i.type="file",i.webkitdirectory=!0;const s=e=>{"function"==typeof r&&r(),t(e)},r=e[0].legacySetup&&e[0].legacySetup(s,()=>r(o),i);i.addEventListener("change",()=>{let t=Array.from(i.files);e[0].recursive?e[0].recursive&&e[0].skipDirectory&&(t=t.filter(t=>t.webkitRelativePath.split("/").every(t=>!e[0].skipDirectory({name:t,kind:"directory"})))):t=t.filter(e=>2===e.webkitRelativePath.split("/").length),s(t)}),"showPicker"in HTMLInputElement.prototype?i.showPicker():i.click()}))},j={__proto__:null,default:async(e,t={})=>{Array.isArray(t)&&(t=t[0]);const o=document.createElement("a");let i=e;"body"in e&&(i=await async function(e,t){const o=e.getReader(),i=new ReadableStream({start:e=>async function t(){return o.read().then(({done:o,value:i})=>{if(!o)return e.enqueue(i),t();e.close()})}()}),s=new Response(i),r=await s.blob();return o.releaseLock(),new Blob([r],{type:t})}(e.body,e.headers.get("content-type"))),o.download=t.fileName||"Untitled",o.href=URL.createObjectURL(await i);const s=()=>{"function"==typeof r&&r()},r=t.legacySetup&&t.legacySetup(s,()=>r(),o);return o.addEventListener("click",()=>{setTimeout(()=>URL.revokeObjectURL(o.href),3e4),s()}),o.click(),null}};
1
+ import{f as e,N as t,j as o,k as i,l as s,A as r,L as a,c as n,h as l,b as d,w as c,p}from"./pb-mixin-886ece32.js";import{E as h,T as m,D as u,p as b}from"./vaadin-element-mixin-ad07ba25.js";import{h as g,g as v,F as f,D as y,z as w,A as _,c as x}from"./paper-checkbox-4f410b1f.js";import{a as $}from"./paper-listbox-5f42cff5.js";import"./paper-icon-button-72125e67.js";import"./jinn-codemirror-da0e2d1f.js";import{t as E,g as S}from"./pb-i18n-4cc00bfe.js";const k=(()=>{if("undefined"==typeof self)return!1;if("top"in self&&self!==top)try{top}catch(e){return!1}return"showOpenFilePicker"in self})();k?Promise.resolve().then((function(){return P})):Promise.resolve().then((function(){return j})),k?Promise.resolve().then((function(){return O})):Promise.resolve().then((function(){return z}));const C=k?Promise.resolve().then((function(){return T})):Promise.resolve().then((function(){return B}));async function A(...e){return(await C).default(...e)}const R=async e=>{const t=await e.getFile();return t.handle=e,t};var P={__proto__:null,default:async(e=[{}])=>{Array.isArray(e)||(e=[e]);const t=[];e.forEach((e,o)=>{t[o]={description:e.description||"Files",accept:{}},e.mimeTypes?e.mimeTypes.map(i=>{t[o].accept[i]=e.extensions||[]}):t[o].accept["*/*"]=e.extensions||[]});const o=await window.showOpenFilePicker({id:e[0].id,startIn:e[0].startIn,types:t,multiple:e[0].multiple||!1,excludeAcceptAllOption:e[0].excludeAcceptAllOption||!1}),i=await Promise.all(o.map(R));return e[0].multiple?i:i[0]}};function M(e){function t(e){if(Object(e)!==e)return Promise.reject(new TypeError(e+" is not an object."));var t=e.done;return Promise.resolve(e.value).then((function(e){return{value:e,done:t}}))}return(M=function(e){this.s=e,this.n=e.next}).prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var o=this.s.return;return void 0===o?Promise.resolve({value:e,done:!0}):t(o.apply(this.s,arguments))},throw:function(e){var o=this.s.return;return void 0===o?Promise.reject(e):t(o.apply(this.s,arguments))}},new M(e)}const I=async(e,t,o=e.name,i)=>{const s=[],r=[];var a,n=!1,l=!1;try{for(var d,c=function(e){var t,o,i,s=2;for("undefined"!=typeof Symbol&&(o=Symbol.asyncIterator,i=Symbol.iterator);s--;){if(o&&null!=(t=e[o]))return t.call(e);if(i&&null!=(t=e[i]))return new M(t.call(e));o="@@asyncIterator",i="@@iterator"}throw new TypeError("Object is not async iterable")}(e.values());n=!(d=await c.next()).done;n=!1){const a=d.value,n=`${o}/${a.name}`;"file"===a.kind?r.push(a.getFile().then(t=>(t.directoryHandle=e,t.handle=a,Object.defineProperty(t,"webkitRelativePath",{configurable:!0,enumerable:!0,get:()=>n})))):"directory"!==a.kind||!t||i&&i(a)||s.push(I(a,t,n,i))}}catch(e){l=!0,a=e}finally{try{n&&null!=c.return&&await c.return()}finally{if(l)throw a}}return[...(await Promise.all(s)).flat(),...await Promise.all(r)]};var O={__proto__:null,default:async(e={})=>{e.recursive=e.recursive||!1,e.mode=e.mode||"read";const t=await window.showDirectoryPicker({id:e.id,startIn:e.startIn,mode:e.mode});return(await(await t.values()).next()).done?[t]:I(t,e.recursive,void 0,e.skipDirectory)}},T={__proto__:null,default:async(e,t=[{}],o=null,i=!1,s=null)=>{Array.isArray(t)||(t=[t]),t[0].fileName=t[0].fileName||"Untitled";const r=[];let a=null;if(e instanceof Blob&&e.type?a=e.type:e.headers&&e.headers.get("content-type")&&(a=e.headers.get("content-type")),t.forEach((e,t)=>{r[t]={description:e.description||"Files",accept:{}},e.mimeTypes?(0===t&&a&&e.mimeTypes.push(a),e.mimeTypes.map(o=>{r[t].accept[o]=e.extensions||[]})):a?r[t].accept[a]=e.extensions||[]:r[t].accept["*/*"]=e.extensions||[]}),o)try{await o.getFile()}catch(e){if(o=null,i)throw e}const n=o||await window.showSaveFilePicker({suggestedName:t[0].fileName,id:t[0].id,startIn:t[0].startIn,types:r,excludeAcceptAllOption:t[0].excludeAcceptAllOption||!1});!o&&s&&s(n);const l=await n.createWritable();if("stream"in e){const t=e.stream();return await t.pipeTo(l),n}return"body"in e?(await e.body.pipeTo(l),n):(await l.write(await e),await l.close(),n)}},j={__proto__:null,default:async(e=[{}])=>(Array.isArray(e)||(e=[e]),new Promise((t,o)=>{const i=document.createElement("input");i.type="file";const s=[...e.map(e=>e.mimeTypes||[]),...e.map(e=>e.extensions||[])].join();i.multiple=e[0].multiple||!1,i.accept=s||"",i.style.display="none",document.body.append(i);const r=e=>{"function"==typeof a&&a(),t(e)},a=e[0].legacySetup&&e[0].legacySetup(r,()=>a(o),i),n=()=>{window.removeEventListener("focus",n),i.remove()};i.addEventListener("click",()=>{window.addEventListener("focus",n)}),i.addEventListener("change",()=>{window.removeEventListener("focus",n),i.remove(),r(i.multiple?Array.from(i.files):i.files[0])}),"showPicker"in HTMLInputElement.prototype?i.showPicker():i.click()}))},z={__proto__:null,default:async(e=[{}])=>(Array.isArray(e)||(e=[e]),e[0].recursive=e[0].recursive||!1,new Promise((t,o)=>{const i=document.createElement("input");i.type="file",i.webkitdirectory=!0;const s=e=>{"function"==typeof r&&r(),t(e)},r=e[0].legacySetup&&e[0].legacySetup(s,()=>r(o),i);i.addEventListener("change",()=>{let t=Array.from(i.files);e[0].recursive?e[0].recursive&&e[0].skipDirectory&&(t=t.filter(t=>t.webkitRelativePath.split("/").every(t=>!e[0].skipDirectory({name:t,kind:"directory"})))):t=t.filter(e=>2===e.webkitRelativePath.split("/").length),s(t)}),"showPicker"in HTMLInputElement.prototype?i.showPicker():i.click()}))},B={__proto__:null,default:async(e,t={})=>{Array.isArray(t)&&(t=t[0]);const o=document.createElement("a");let i=e;"body"in e&&(i=await async function(e,t){const o=e.getReader(),i=new ReadableStream({start:e=>async function t(){return o.read().then(({done:o,value:i})=>{if(!o)return e.enqueue(i),t();e.close()})}()}),s=new Response(i),r=await s.blob();return o.releaseLock(),new Blob([r],{type:t})}(e.body,e.headers.get("content-type"))),o.download=t.fileName||"Untitled",o.href=URL.createObjectURL(await i);const s=()=>{"function"==typeof r&&r()},r=t.legacySetup&&t.legacySetup(s,()=>r(),o);return o.addEventListener("click",()=>{setTimeout(()=>URL.revokeObjectURL(o.href),3e4),s()}),o.click(),null}};
2
2
  /**
3
3
  * @license
4
4
  * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
@@ -487,7 +487,7 @@ const Y=e=>class extends e{static get properties(){return{_hasVaadinListMixin:{v
487
487
  @license
488
488
  Copyright (c) 2017 Vaadin Ltd.
489
489
  This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
490
- */,Q=/Apple.* Version\/(9|10)/.test(navigator.userAgent);class ee extends(h(Y(m(_([E],v))))){static get template(){return g`
490
+ */,Q=/Apple.* Version\/(9|10)/.test(navigator.userAgent);class ee extends(h(Y(m(_([$],v))))){static get template(){return g`
491
491
  <style>
492
492
  :host {
493
493
  display: flex;
@@ -574,297 +574,323 @@ This program is available under Apache License Version 2.0, available at https:/
574
574
 
575
575
  <div on-click="_scrollForward" part="forward-button"></div>
576
576
  `}static get is(){return"vaadin-tabs"}static get version(){return"3.2.0"}static get properties(){return{orientation:{value:"horizontal",type:String},selected:{value:0,type:Number}}}static get observers(){return["_updateOverflow(items.*, vertical)"]}ready(){super.ready(),this.addEventListener("iron-resize",()=>this._updateOverflow()),this._scrollerElement.addEventListener("scroll",()=>this._updateOverflow()),this.setAttribute("role","tablist"),x(this,()=>{this._updateOverflow()})}_scrollForward(){this._scroll(-this.__direction*this._scrollOffset)}_scrollBack(){this._scroll(this.__direction*this._scrollOffset)}get _scrollOffset(){return this._vertical?this._scrollerElement.offsetHeight:this._scrollerElement.offsetWidth}get _scrollerElement(){return this.$.scroll}get __direction(){return this._vertical||"rtl"!==this.getAttribute("dir")?-1:1}_updateOverflow(){const e=this._vertical?this._scrollerElement.scrollTop:this.__getNormalizedScrollLeft(this._scrollerElement);let t=this._vertical?this._scrollerElement.scrollHeight:this._scrollerElement.scrollWidth;t-=1;let o=e>0?"start":"";o+=e+this._scrollOffset<t?" end":"",1==this.__direction&&(o=o.replace(/start|end/gi,e=>"start"===e?"end":"start")),o?this.setAttribute("overflow",o.trim()):this.removeAttribute("overflow"),this._repaintShadowNodesHack()}_repaintShadowNodesHack(){if(Q&&this.root){const e="-webkit-backface-visibility";this.root.querySelectorAll("*").forEach(t=>{t.style[e]="visible",t.style[e]=""})}}}customElements.define(ee.is,ee);class te extends a{static get styles(){return n`
577
- :host {
578
- display: block;
579
- }
580
- .wrapper{
581
- display:grid;
582
- grid-template-columns:150px auto 50px;
583
- grid-column-gap:20px;
584
- grid-row-gap:20px;
585
- margin-bottom:10px;
586
- }
587
-
588
- .editor label {
589
- margin-bottom:5px;
590
- font-size: 12px;
591
- font-weight: 400;
592
- color: var(--paper-grey-500);
593
- }
594
-
595
- paper-dropdown-menu{
596
- }
597
-
598
- paper-icon-button{
599
- align-self:center;
600
- }
601
- `}render(){return l`
602
- <div class="wrapper">
603
- <paper-dropdown-menu label="Scope">
604
- <paper-listbox id="scopeList" slot="dropdown-content" selected="${this.scope}" attr-for-selected="value"
605
- @iron-select="${this._listchanged}">
606
- ${this.scopes.map(e=>l`
607
- <paper-item value="${e}">${e}</paper-item>
608
- `)}
609
- </paper-listbox>
610
- </paper-dropdown-menu>
611
- <div class="editor">
612
- <label>Rendition</label>
613
- <jinn-codemirror
614
- id="editor"
615
- label="Rendition"
616
- code="${this.css||""}"
617
- mode="css"
618
- @update="${this._handleCodeChange}"></jinn-codemirror>
619
- </div>
620
- <paper-icon-button @click="${this._remove}" icon="delete" title="delete this rendition"></paper-icon-button>
577
+ :host {
578
+ display: block;
579
+ }
580
+ .wrapper {
581
+ display: grid;
582
+ grid-template-columns: 150px auto 50px;
583
+ grid-column-gap: 20px;
584
+ grid-row-gap: 20px;
585
+ margin-bottom: 10px;
586
+ }
587
+
588
+ .editor label {
589
+ margin-bottom: 5px;
590
+ font-size: 12px;
591
+ font-weight: 400;
592
+ color: var(--paper-grey-500);
593
+ }
594
+
595
+ paper-dropdown-menu {
596
+ }
597
+
598
+ paper-icon-button {
599
+ align-self: center;
600
+ }
601
+ `}render(){return l`
602
+ <div class="wrapper">
603
+ <paper-dropdown-menu label="Scope">
604
+ <paper-listbox
605
+ id="scopeList"
606
+ slot="dropdown-content"
607
+ selected="${this.scope}"
608
+ attr-for-selected="value"
609
+ @iron-select="${this._listchanged}"
610
+ >
611
+ ${this.scopes.map(e=>l` <paper-item value="${e}">${e}</paper-item> `)}
612
+ </paper-listbox>
613
+ </paper-dropdown-menu>
614
+ <div class="editor">
615
+ <label>Rendition</label>
616
+ <jinn-codemirror
617
+ id="editor"
618
+ label="Rendition"
619
+ code="${this.css||""}"
620
+ mode="css"
621
+ @update="${this._handleCodeChange}"
622
+ ></jinn-codemirror>
623
+ </div>
624
+ <paper-icon-button
625
+ @click="${this._remove}"
626
+ icon="delete"
627
+ title="delete this rendition"
628
+ ></paper-icon-button>
629
+ </div>
630
+
631
+ <slot></slot>
632
+ `}static get properties(){return{scopes:{type:Array},css:{type:String,reflect:!0},scope:{type:String,reflect:!0},selected:{type:String}}}constructor(){super(),this.scopes=["","before","after"],this.css="",this.scope="",this.selected="",this._initialized=!1}connectedCallback(){super.connectedCallback(),this.css=this.css.trim(),this.dispatchEvent(new CustomEvent("rendition-connected",{composed:!0,bubbles:!0,detail:{target:this}}))}firstUpdated(e){this.refreshEditor(),this._initialized=!0}refreshEditor(){console.log("refreshEditor"),this.shadowRoot.getElementById("editor")}_remove(e){e.preventDefault(),this.dispatchEvent(new CustomEvent("remove-rendition",{}))}_handleCodeChange(){this.css=this.shadowRoot.getElementById("editor").value,this.dispatchEvent(new CustomEvent("rendition-changed",{composed:!0,bubbles:!0,detail:{name:this.name,css:this.css,scope:this.scope}}))}_listchanged(e){const t=this.shadowRoot.getElementById("scopeList");this.scope=t.selected}}customElements.define("pb-odd-rendition-editor",te);class oe extends a{static get styles(){return n`
633
+ :host {
634
+ display: block;
635
+ }
636
+ .wrapper {
637
+ display: grid;
638
+ grid-template-columns: 150px auto 50px 50px;
639
+ grid-column-gap: 20px;
640
+ grid-row-gap: 20px;
641
+ margin-bottom: 10px;
642
+ }
643
+ paper-dropdown-menu {
644
+ align-self: start;
645
+ }
646
+ paper-icon-button,
647
+ paper-checkbox {
648
+ align-self: center;
649
+ margin-top: 16px;
650
+ }
651
+
652
+ .editor label {
653
+ margin-bottom: 5px;
654
+ font-size: 12px;
655
+ font-weight: 400;
656
+ color: var(--paper-grey-500);
657
+ }
658
+ `}render(){return l`
659
+ <div class="wrapper">
660
+ <paper-autocomplete
661
+ id="combo"
662
+ text="${this.name}"
663
+ placeholder="${E("odd.editor.model.param-name-placeholder")}"
664
+ label="Name"
665
+ .source="${this._currentParameters}"
666
+ ></paper-autocomplete>
667
+
668
+ <div class="editor">
669
+ <label>Parameter</label>
670
+ <jinn-codemirror
671
+ id="editor"
672
+ mode="xquery"
673
+ code="${this.value}"
674
+ linter="${this.endpoint}/${d(this.apiVersion,"1.0.0")?"modules/editor.xql":"api/lint"}"
675
+ ></jinn-codemirror>
621
676
  </div>
677
+ <paper-checkbox id="set" ?checked="${this.setParam}" @change="${this._handleCodeChange}"
678
+ >${E("odd.editor.model.set-param")}</paper-checkbox
679
+ >
680
+ <paper-icon-button
681
+ @click="${this._delete}"
682
+ icon="delete"
683
+ title="delete this parameter"
684
+ ></paper-icon-button>
685
+ </div>
686
+ `}static get properties(){return{name:{type:String,reflect:!0},value:{type:String,reflect:!0},behaviour:{type:String},parameters:{type:Object},setParam:{type:Boolean,attribute:"set"},_currentParameters:{type:Array},endpoint:{type:String},apiVersion:{type:String}}}constructor(){super(),this.name="",this.value="",this.setParam=!1,this.behaviour="",this.currentParameters=[],this.parameters={"":[],alternate:["default","alternate","persistent"],anchor:["content","id"],block:["content"],body:["content"],break:["content","type","label"],cell:["content"],cit:["content","source"],document:["content"],figure:["content","title"],graphic:["content","url","width","height","scale","title"],heading:["content","level"],inline:["content"],link:["content","uri","target"],list:["content","type"],listItem:["content","n"],metadata:["content"],note:["content","place","label"],omit:[],paragraph:["content"],row:["content"],section:["content"],table:["content"],text:["content"],title:["content"],webcomponent:["content","name"]},this.selected="",this.endpoint=""}connectedCallback(){super.connectedCallback(),this.value=this.value.trim(),this.dispatchEvent(new CustomEvent("parameter-connected",{composed:!0,bubbles:!0,detail:{target:this}}))}attributeChangedCallback(e,t,o){super.attributeChangedCallback(e,t,o),"behaviour"===e&&(this._currentParameters=this.parameters[o])}firstUpdated(e){this.selected=this.parameters[this.behaviour]||[],this.requestUpdate(),this.shadowRoot.getElementById("combo").addEventListener("focused-changed",this._handleCodeChange.bind(this)),this.shadowRoot.getElementById("editor").addEventListener("update",this._handleCodeChange.bind(this))}refreshEditor(){this.shadowRoot.getElementById("editor")}_delete(e){console.log("parameter delete ",e),e.preventDefault(),this.dispatchEvent(new CustomEvent("parameter-remove",{}))}_handleCodeChange(e){console.log("_handleCodeChange ",e),this.value=this.shadowRoot.getElementById("editor").content||"",console.log("value %s",this.value),this.name=this.shadowRoot.getElementById("combo").text,this.setParam=this.shadowRoot.getElementById("set").checked,this.dispatchEvent(new CustomEvent("parameter-changed",{composed:!0,bubbles:!0,detail:{name:this.name,value:this.value,set:this.setParam}}))}}customElements.define("pb-odd-parameter-editor",oe);class ie extends a{static get styles(){return n`
687
+ :host {
688
+ display: flex;
689
+ flex-direction: column;
690
+ }
691
+ h1,
692
+ h2,
693
+ h3,
694
+ h4,
695
+ h5,
696
+ h6 {
697
+ font-family: 'Oswald', Verdana, 'Helvetica', sans-serif;
698
+ font-weight: 400 !important;
699
+ }
622
700
 
701
+ form {
702
+ margin-bottom: 8px;
703
+ }
623
704
 
705
+ paper-input,
706
+ paper-autocomplete {
707
+ margin-bottom: 16px;
708
+ }
624
709
 
625
- <slot></slot>
626
-
627
- `}static get properties(){return{scopes:{type:Array},css:{type:String,reflect:!0},scope:{type:String,reflect:!0},selected:{type:String}}}constructor(){super(),this.scopes=["","before","after"],this.css="",this.scope="",this.selected="",this._initialized=!1}connectedCallback(){super.connectedCallback(),this.css=this.css.trim(),this.dispatchEvent(new CustomEvent("rendition-connected",{composed:!0,bubbles:!0,detail:{target:this}}))}firstUpdated(e){this.refreshEditor(),this._initialized=!0}refreshEditor(){console.log("refreshEditor");this.shadowRoot.getElementById("editor")}_remove(e){e.preventDefault(),this.dispatchEvent(new CustomEvent("remove-rendition",{}))}_handleCodeChange(){this.css=this.shadowRoot.getElementById("editor").value,this.dispatchEvent(new CustomEvent("rendition-changed",{composed:!0,bubbles:!0,detail:{name:this.name,css:this.css,scope:this.scope}}))}_listchanged(e){const t=this.shadowRoot.getElementById("scopeList");this.scope=t.selected}}customElements.define("pb-odd-rendition-editor",te);class oe extends a{static get styles(){return n`
628
- :host {
629
- display: block;
630
- }
631
- .wrapper{
632
- display:grid;
633
- grid-template-columns:150px auto 50px 50px;
634
- grid-column-gap:20px;
635
- grid-row-gap:20px;
636
- margin-bottom:10px;
637
- }
638
- paper-dropdown-menu{
639
- align-self:start;
640
- }
641
- paper-icon-button, paper-checkbox {
642
- align-self: center;
643
- margin-top: 16px;
644
- }
645
-
646
- .editor label {
647
- margin-bottom:5px;
648
- font-size: 12px;
649
- font-weight: 400;
650
- color: var(--paper-grey-500);
651
- }
652
- `}render(){return l`
653
- <div class="wrapper">
654
-
655
- <paper-autocomplete id="combo" text="${this.name}" placeholder="${$("odd.editor.model.param-name-placeholder")}" label="Name"
656
- .source="${this._currentParameters}"></paper-autocomplete>
710
+ .models {
711
+ margin-left: 20px;
712
+ margin-top: 10px;
713
+ }
657
714
 
658
- <div class="editor">
659
- <label>Parameter</label>
660
- <jinn-codemirror id="editor"
661
- mode="xquery"
662
- code="${this.value}"
663
- linter="${this.endpoint}/${d(this.apiVersion,"1.0.0")?"modules/editor.xql":"api/lint"}"></jinn-codemirror>
664
- </div>
665
- <paper-checkbox id="set" ?checked="${this.setParam}" @change="${this._handleCodeChange}">${$("odd.editor.model.set-param")}</paper-checkbox>
666
- <paper-icon-button @click="${this._delete}" icon="delete" title="delete this parameter"></paper-icon-button>
667
- </div>
715
+ .btn,
716
+ .btn-group {
717
+ margin-top: 0;
718
+ margin-bottom: 0;
719
+ }
668
720
 
669
-
670
- `}static get properties(){return{name:{type:String,reflect:!0},value:{type:String,reflect:!0},behaviour:{type:String},parameters:{type:Object},setParam:{type:Boolean,attribute:"set"},_currentParameters:{type:Array},endpoint:{type:String},apiVersion:{type:String}}}constructor(){super(),this.name="",this.value="",this.setParam=!1,this.behaviour="",this.currentParameters=[],this.parameters={"":[],alternate:["default","alternate","persistent"],anchor:["content","id"],block:["content"],body:["content"],break:["content","type","label"],cell:["content"],cit:["content","source"],document:["content"],figure:["content","title"],graphic:["content","url","width","height","scale","title"],heading:["content","level"],inline:["content"],link:["content","uri","target"],list:["content","type"],listItem:["content","n"],metadata:["content"],note:["content","place","label"],omit:[],paragraph:["content"],row:["content"],section:["content"],table:["content"],text:["content"],title:["content"],webcomponent:["content","name"]},this.selected="",this.endpoint=""}connectedCallback(){super.connectedCallback(),this.value=this.value.trim(),this.dispatchEvent(new CustomEvent("parameter-connected",{composed:!0,bubbles:!0,detail:{target:this}}))}attributeChangedCallback(e,t,o){super.attributeChangedCallback(e,t,o),"behaviour"===e&&(this._currentParameters=this.parameters[o])}firstUpdated(e){this.selected=this.parameters[this.behaviour]||[],this.requestUpdate(),this.shadowRoot.getElementById("combo").addEventListener("focused-changed",this._handleCodeChange.bind(this)),this.shadowRoot.getElementById("editor").addEventListener("update",this._handleCodeChange.bind(this))}refreshEditor(){this.shadowRoot.getElementById("editor")}_delete(e){console.log("parameter delete ",e),e.preventDefault(),this.dispatchEvent(new CustomEvent("parameter-remove",{}))}_handleCodeChange(e){console.log("_handleCodeChange ",e),this.value=this.shadowRoot.getElementById("editor").content||"",console.log("value %s",this.value),this.name=this.shadowRoot.getElementById("combo").text,this.setParam=this.shadowRoot.getElementById("set").checked,this.dispatchEvent(new CustomEvent("parameter-changed",{composed:!0,bubbles:!0,detail:{name:this.name,value:this.value,set:this.setParam}}))}}customElements.define("pb-odd-parameter-editor",oe);class ie extends a{static get styles(){return n`
671
- :host {
672
- display: flex;
673
- flex-direction:column;
674
- }
675
- h1, h2, h3, h4, h5, h6 {
676
- font-family: "Oswald", Verdana, "Helvetica", sans-serif;
677
- font-weight: 400 !important;
678
- }
679
-
680
- form {
681
- margin-bottom: 8px;
682
- }
683
-
684
- paper-input, paper-autocomplete {
685
- margin-bottom: 16px;
686
- }
687
-
688
- .models {
689
- margin-left:20px;
690
- margin-top:10px;
691
- }
692
-
693
- .btn, .btn-group {
694
- margin-top: 0;
695
- margin-bottom: 0;
696
- }
697
-
698
- header {
699
- // background-color: #d1dae0;
700
- background:var(--paper-grey-300);
701
- margin:0;
702
- }
703
-
704
- header div {
705
- display: flex;
706
- flex-direction: row;
707
- justify-content: space-between;
708
- align-items: center;
709
- }
710
-
711
- header h4 {
712
- padding: 4px 8px;
713
- margin: 0;
714
- display: grid;
715
- grid-template-columns: 40px 40% auto;
716
- }
717
- h4 .btn-group{
718
- text-align: right;
719
- display: none;
720
- }
721
-
722
- #toggle, .modelType{
723
- align-self:center;
724
- }
725
-
726
- header div.info {
727
- padding: 0 16px 4px;
728
- margin: 0;
729
- font-size: 85%;
730
- display: block;
731
- margin:0 0 0 32px;
732
- }
733
- header div.info *{
734
- display: block;
735
- line-height: 1.2;
736
- }
737
-
738
- header .outputDisplay{
739
- text-transform: uppercase ;
740
- }
741
- header .description{
742
- font-style: italic;
743
- }
744
-
745
- header .predicate {
746
- color: #ff5722;
747
- }
748
-
749
- .predicate label, .template label {
750
- display: block;
751
- font-size: 12px;
752
- font-weight: 300;
753
- color: rgb(115, 115, 115);
754
- }
755
-
756
- .model-collapse {
757
- color: #000000;
758
- cursor: pointer;
759
- }
760
-
761
- .model-collapse:hover {
762
- text-decoration: none;
763
- }
764
-
765
- .behaviour {
766
- color: #ff5722;
767
- }
768
-
769
- .behaviour:before {
770
- content: ' [';
771
- }
772
-
773
- .behaviour:after {
774
- content: ']';
775
- }
776
-
777
- .behaviourWrapper{
778
- display:grid;
779
- grid-template-columns: 140px 40px 140px auto;
780
- }
781
- .behaviourWrapper > *{
782
- display:inline;
783
- align-self:stretch;
784
- }
785
-
786
- .group {
787
- margin: 0;
788
- font-size: 16px;
789
- font-weight: bold;
790
- }
791
-
792
- .group .title {
793
- /*text-decoration: underline;*/
794
- }
795
-
796
- .renditions, .parameters {
797
- padding-left: 16px;
798
- border-left: 3px solid #e0e0e0;
799
- margin-bottom:20px;
800
- }
801
-
802
- .renditions .group {
803
- display: flex;
804
- flex-direction: row;
805
- justify-content: space-between;
806
- align-items: center;
807
- }
808
-
809
- .predicate .form-control {
810
- width: 100%;
811
- }
812
-
813
- .source {
814
- text-decoration: none;
815
- margin-bottom: 8px;
816
- }
817
-
818
- .selectOutput {
819
- margin-right: 10px;
820
- }
821
-
822
- :host([currentselection]) > form > header{
823
- @apply --shadow-elevation-4dp;
824
- border-left:3px solid var(--paper-blue-500);
825
- }
826
-
827
- paper-menu-button paper-icon-button{
828
- margin-left:-10px;
829
- }
830
-
831
- /* need to play it save for FF */
832
- :host([currentselection]) > form > header > h4 > .btn-group{
833
- display: inline-block;
834
- }
835
- iron-collapse{
836
- }
837
-
838
- .renditions{
839
- margin-top:10px;
840
- }
841
-
842
- .details{
843
- padding:0px 50px 20px 20px;
844
- background:var(--paper-grey-200);
845
- }
846
-
847
- .editor {
848
- margin-bottom: 20px;
849
- }
850
-
851
- .editor label {
852
- margin-bottom:5px;
853
- font-size: 12px;
854
- font-weight: 400;
855
- color: var(--paper-grey-500);
856
- }
857
-
858
- .horizontal {
859
- display: flex;
860
- flex-wrap: wrap;
861
- justify-content: space-between;
862
- }
863
-
864
- #mode {
865
- min-width: 18em;
866
- }
867
- `}static get properties(){return{behaviour:{type:String},predicate:{type:String,reflect:!0,converter:(e,t)=>"null"===e.toLowerCase()?"":e},type:{type:String,reflect:!0},template:{type:String,reflect:!0,converter:(e,t)=>"null"===e.toLowerCase()?"":e},output:{type:String,reflect:!0,converter:(e,t)=>"null"===e.toLowerCase()?"":e},css:{type:String,converter:(e,t)=>"null"===e.toLowerCase()?"":e},mode:{type:String},model:{type:Object},models:{type:Array},parameters:{type:Array},renditions:{type:Array},desc:{type:String,converter:(e,t)=>"null"===e.toLowerCase()?"":e},sourcerend:{type:String},show:{type:Boolean,reflect:!0},outputs:{type:Array},behaviours:{type:Array},icon:{type:String},open:{type:String},hasCustomBehaviour:{type:Boolean},endpoint:{type:String},apiVersion:{type:String}}}constructor(){super(),this.behaviour="inline",this.predicate="",this.type="",this.template="",this.output="",this.css="",this.mode="",this.model={},this.model.models=[],this.parameters=[],this.renditions=[],this.desc="",this.sourcerend="",this.show=!1,this.outputs=["","web","print","epub","fo","latex","plain"],this.parentModel=[],this.behaviours=["alternate","anchor","block","body","break","cell","cit","document","figure","graphic","heading","inline","link","list","listItem","metadata","note","omit","paragraph","pass-through","row","section","table","text","title","webcomponent"],this.icon="expand-more",this.hasCustomBehaviour=!1}render(){let e;switch(this.output){case"web":case"epub":e="html";break;case"latex":e="tex";break;case"plain":e="default";break;case"fo":case"print":e="xml";break;default:e="html"}return l`
721
+ header {
722
+ // background-color: #d1dae0;
723
+ background: var(--paper-grey-300);
724
+ margin: 0;
725
+ }
726
+
727
+ header div {
728
+ display: flex;
729
+ flex-direction: row;
730
+ justify-content: space-between;
731
+ align-items: center;
732
+ }
733
+
734
+ header h4 {
735
+ padding: 4px 8px;
736
+ margin: 0;
737
+ display: grid;
738
+ grid-template-columns: 40px 40% auto;
739
+ }
740
+ h4 .btn-group {
741
+ text-align: right;
742
+ display: none;
743
+ }
744
+
745
+ #toggle,
746
+ .modelType {
747
+ align-self: center;
748
+ }
749
+
750
+ header div.info {
751
+ padding: 0 16px 4px;
752
+ margin: 0;
753
+ font-size: 85%;
754
+ display: block;
755
+ margin: 0 0 0 32px;
756
+ }
757
+ header div.info * {
758
+ display: block;
759
+ line-height: 1.2;
760
+ }
761
+
762
+ header .outputDisplay {
763
+ text-transform: uppercase;
764
+ }
765
+ header .description {
766
+ font-style: italic;
767
+ }
768
+
769
+ header .predicate {
770
+ color: #ff5722;
771
+ }
772
+
773
+ .predicate label,
774
+ .template label {
775
+ display: block;
776
+ font-size: 12px;
777
+ font-weight: 300;
778
+ color: rgb(115, 115, 115);
779
+ }
780
+
781
+ .model-collapse {
782
+ color: #000000;
783
+ cursor: pointer;
784
+ }
785
+
786
+ .model-collapse:hover {
787
+ text-decoration: none;
788
+ }
789
+
790
+ .behaviour {
791
+ color: #ff5722;
792
+ }
793
+
794
+ .behaviour:before {
795
+ content: ' [';
796
+ }
797
+
798
+ .behaviour:after {
799
+ content: ']';
800
+ }
801
+
802
+ .behaviourWrapper {
803
+ display: grid;
804
+ grid-template-columns: 140px 40px 140px auto;
805
+ }
806
+ .behaviourWrapper > * {
807
+ display: inline;
808
+ align-self: stretch;
809
+ }
810
+
811
+ .group {
812
+ margin: 0;
813
+ font-size: 16px;
814
+ font-weight: bold;
815
+ }
816
+
817
+ .group .title {
818
+ /*text-decoration: underline;*/
819
+ }
820
+
821
+ .renditions,
822
+ .parameters {
823
+ padding-left: 16px;
824
+ border-left: 3px solid #e0e0e0;
825
+ margin-bottom: 20px;
826
+ }
827
+
828
+ .renditions .group {
829
+ display: flex;
830
+ flex-direction: row;
831
+ justify-content: space-between;
832
+ align-items: center;
833
+ }
834
+
835
+ .predicate .form-control {
836
+ width: 100%;
837
+ }
838
+
839
+ .source {
840
+ text-decoration: none;
841
+ margin-bottom: 8px;
842
+ }
843
+
844
+ .selectOutput {
845
+ margin-right: 10px;
846
+ }
847
+
848
+ :host([currentselection]) > form > header {
849
+ @apply --shadow-elevation-4dp;
850
+ border-left: 3px solid var(--paper-blue-500);
851
+ }
852
+
853
+ paper-menu-button paper-icon-button {
854
+ margin-left: -10px;
855
+ }
856
+
857
+ /* need to play it save for FF */
858
+ :host([currentselection]) > form > header > h4 > .btn-group {
859
+ display: inline-block;
860
+ }
861
+ iron-collapse {
862
+ }
863
+
864
+ .renditions {
865
+ margin-top: 10px;
866
+ }
867
+
868
+ .details {
869
+ padding: 0px 50px 20px 20px;
870
+ background: var(--paper-grey-200);
871
+ }
872
+
873
+ .editor {
874
+ margin-bottom: 20px;
875
+ }
876
+
877
+ .editor label {
878
+ margin-bottom: 5px;
879
+ font-size: 12px;
880
+ font-weight: 400;
881
+ color: var(--paper-grey-500);
882
+ }
883
+
884
+ .horizontal {
885
+ display: flex;
886
+ flex-wrap: wrap;
887
+ justify-content: space-between;
888
+ }
889
+
890
+ #mode {
891
+ min-width: 18em;
892
+ }
893
+ `}static get properties(){return{behaviour:{type:String},predicate:{type:String,reflect:!0,converter:(e,t)=>"null"===e.toLowerCase()?"":e},type:{type:String,reflect:!0},template:{type:String,reflect:!0,converter:(e,t)=>"null"===e.toLowerCase()?"":e},output:{type:String,reflect:!0,converter:(e,t)=>"null"===e.toLowerCase()?"":e},css:{type:String,converter:(e,t)=>"null"===e.toLowerCase()?"":e},mode:{type:String},model:{type:Object},models:{type:Array},parameters:{type:Array},renditions:{type:Array},desc:{type:String,converter:(e,t)=>"null"===e.toLowerCase()?"":e},sourcerend:{type:String},show:{type:Boolean,reflect:!0},outputs:{type:Array},behaviours:{type:Array},icon:{type:String},open:{type:String},hasCustomBehaviour:{type:Boolean},endpoint:{type:String},apiVersion:{type:String}}}constructor(){super(),this.behaviour="inline",this.predicate="",this.type="",this.template="",this.output="",this.css="",this.mode="",this.model={},this.model.models=[],this.parameters=[],this.renditions=[],this.desc="",this.sourcerend="",this.show=!1,this.outputs=["","web","print","epub","fo","latex","plain"],this.parentModel=[],this.behaviours=["alternate","anchor","block","body","break","cell","cit","document","figure","graphic","heading","inline","link","list","listItem","metadata","note","omit","paragraph","pass-through","row","section","table","text","title","webcomponent"],this.icon="expand-more",this.hasCustomBehaviour=!1}render(){let e;switch(this.output){case"web":case"epub":e="html";break;case"latex":e="tex";break;case"plain":e="default";break;case"fo":case"print":e="xml";break;default:e="html"}return l`
868
894
  <form>
869
895
  <header>
870
896
  <h4>
@@ -884,20 +910,27 @@ This program is available under Apache License Version 2.0, available at https:/
884
910
  <paper-icon-button @click="${this._paste}" icon="content-paste"></paper-icon-button>
885
911
 
886
912
  ${this._isGroupOrSequence()?l`
887
- <paper-menu-button horizontal-align="right">
888
- <paper-icon-button icon="add" slot="dropdown-trigger"></paper-icon-button>
889
- <paper-listbox id="modelType" slot="dropdown-content" @iron-select="${this._addNested}"
890
- attr-for-selected="value">
891
- ${"modelSequence"===this.type?l`
892
- <paper-item value="model">model</paper-item>
893
- `:""}
894
- ${"modelGrp"===this.type?l`
895
- <paper-item value="modelSequence">modelSequence</paper-item>
896
- <paper-item value="model">model</paper-item>
913
+ <paper-menu-button horizontal-align="right">
914
+ <paper-icon-button
915
+ icon="add"
916
+ slot="dropdown-trigger"
917
+ ></paper-icon-button>
918
+ <paper-listbox
919
+ id="modelType"
920
+ slot="dropdown-content"
921
+ @iron-select="${this._addNested}"
922
+ attr-for-selected="value"
923
+ >
924
+ ${"modelSequence"===this.type?l` <paper-item value="model">model</paper-item> `:""}
925
+ ${"modelGrp"===this.type?l`
926
+ <paper-item value="modelSequence"
927
+ >modelSequence</paper-item
928
+ >
929
+ <paper-item value="model">model</paper-item>
897
930
  `:""}
898
- </paper-listbox>
899
- </paper-menu-button>
900
- `:""}
931
+ </paper-listbox>
932
+ </paper-menu-button>
933
+ `:""}
901
934
  </span>
902
935
  </h4>
903
936
  <div class="info">
@@ -912,18 +945,16 @@ This program is available under Apache License Version 2.0, available at https:/
912
945
  <paper-listbox id="output" slot="dropdown-content" attr-for-selected="value"
913
946
  selected="${this.output}" @iron-select="${this._selectOutput}">
914
947
 
915
- ${this.outputs.map(e=>l`
916
- <paper-item value="${e}">${e}</paper-item>
917
- `)}
948
+ ${this.outputs.map(e=>l` <paper-item value="${e}">${e}</paper-item> `)}
918
949
 
919
950
  </paper-listbox>
920
951
  </paper-dropdown-menu>
921
952
  <paper-input id="mode" .value="${this.mode}"
922
- placeholder="${$("odd.editor.model.mode-placeholder")}"
953
+ placeholder="${E("odd.editor.model.mode-placeholder")}"
923
954
  label="Mode"
924
955
  @change="${this._inputMode}"></paper-input>
925
956
  </div>
926
- <paper-input id="desc" .value="${this.desc}" placeholder="${$("odd.editor.model.description-placeholder")}"
957
+ <paper-input id="desc" .value="${this.desc}" placeholder="${E("odd.editor.model.description-placeholder")}"
927
958
  label="Description" @change="${this._inputDesc}"></paper-input>
928
959
 
929
960
  <div class="editor">
@@ -932,487 +963,623 @@ This program is available under Apache License Version 2.0, available at https:/
932
963
  code="${this.predicate}"
933
964
  mode="xquery"
934
965
  linter="${this.endpoint}/${d(this.apiVersion,"1.0.0")<0?"modules/editor.xql":"api/lint"}"
935
- placeholder="${$("odd.editor.model.predicate-placeholder")}"
966
+ placeholder="${E("odd.editor.model.predicate-placeholder")}"
936
967
  @update="${this._updatePredicate}"></jinn-codemirror>
937
968
  </div>
938
969
 
939
970
  ${this._isModel()?l`
940
971
  <div>
941
- <div class="behaviourWrapper">
942
- <paper-dropdown-menu label="behaviour" id="behaviourMenu" ?disabled="${this.hasCustomBehaviour}">
943
- <paper-listbox id="behaviour" slot="dropdown-content" attr-for-selected="value"
944
- selected="${this.behaviour}" @iron-select="${this._selectBehaviour}">
945
- ${this.behaviours.map(e=>l`
946
- <paper-item value="${e}">${e}</paper-item>
947
- `)}
948
- </paper-listbox>
949
- </paper-dropdown-menu>
950
- <span style="align-self:center;justify-self: center;"> ${$("odd.editor.model.link-with-or")} </span>
951
- <paper-input id="custombehaviour" label="" @input="${this._handleCustomBehaviour}" placeHolder="${$("odd.editor.model.custom-behaviour-placeholder")}"></paper-input>
952
- <span></span>
953
- </div>
954
-
955
-
956
-
957
- <paper-input id="css" .value="${this.css}"
958
- placeholder="${$("odd.editor.model.css-class-placeholder")}"
959
- label="CSS Class"
960
- @change="${this._inputCss}"></paper-input>
961
-
962
- <div class="editor">
963
- <label>Template</label>
964
- <jinn-codemirror id="template"
965
- code="${this.template}"
966
- mode="${e}"
967
- placeholder="${$("odd.editor.model.template-placeholder")}"
968
- @update="${this._updateTemplate}">
969
- <div slot="toolbar">
970
- <paper-button data-mode="xml" data-command="selectElement" data-key="mod-e mod-s"
971
- title="Select element around current cursor position">&lt;|></paper-button>
972
- <paper-button data-mode="xml" data-command="encloseWith" data-key="mod-e mod-e"
973
- title="Enclose selection in new element">&lt;...&gt;</paper-button>
974
- <paper-button data-mode="xml" data-command="removeEnclosing" title="Remove enclosing tags"
975
- data-key="mod-e mod-r" class="sep">&lt;X></paper-button>
976
- <paper-button data-mode="html" data-command="selectElement" data-key="mod-e mod-s"
977
- title="Select element around current cursor position">&lt;|></paper-button>
978
- <paper-button data-mode="html" data-command="encloseWith" data-key="mod-e mod-e"
979
- title="Enclose selection in new element">&lt;...&gt;</paper-button>
980
- <paper-button data-mode="html" data-command="removeEnclosing" title="Remove enclosing tags"
981
- data-key="mod-e mod-r" class="sep">&lt;X></paper-button>
982
- <paper-button data-key="mod-e mod-p" data-command="snippet" data-params="[[\${_}]]" title="Insert template variable">[[...]]</paper-button>
983
- </div>
984
- </jinn-codemirror>
985
- </div>
972
+ <div class="behaviourWrapper">
973
+ <paper-dropdown-menu
974
+ label="behaviour"
975
+ id="behaviourMenu"
976
+ ?disabled="${this.hasCustomBehaviour}"
977
+ >
978
+ <paper-listbox
979
+ id="behaviour"
980
+ slot="dropdown-content"
981
+ attr-for-selected="value"
982
+ selected="${this.behaviour}"
983
+ @iron-select="${this._selectBehaviour}"
984
+ >
985
+ ${this.behaviours.map(e=>l` <paper-item value="${e}">${e}</paper-item> `)}
986
+ </paper-listbox>
987
+ </paper-dropdown-menu>
988
+ <span style="align-self:center;justify-self: center;">
989
+ ${E("odd.editor.model.link-with-or")}
990
+ </span>
991
+ <paper-input
992
+ id="custombehaviour"
993
+ label=""
994
+ @input="${this._handleCustomBehaviour}"
995
+ placeHolder="${E("odd.editor.model.custom-behaviour-placeholder")}"
996
+ ></paper-input>
997
+ <span></span>
998
+ </div>
999
+
1000
+ <paper-input
1001
+ id="css"
1002
+ .value="${this.css}"
1003
+ placeholder="${E("odd.editor.model.css-class-placeholder")}"
1004
+ label="CSS Class"
1005
+ @change="${this._inputCss}"
1006
+ ></paper-input>
1007
+
1008
+ <div class="editor">
1009
+ <label>Template</label>
1010
+ <jinn-codemirror
1011
+ id="template"
1012
+ code="${this.template}"
1013
+ mode="${e}"
1014
+ placeholder="${E("odd.editor.model.template-placeholder")}"
1015
+ @update="${this._updateTemplate}"
1016
+ >
1017
+ <div slot="toolbar">
1018
+ <paper-button
1019
+ data-mode="xml"
1020
+ data-command="selectElement"
1021
+ data-key="mod-e mod-s"
1022
+ title="Select element around current cursor position"
1023
+ >&lt;|></paper-button
1024
+ >
1025
+ <paper-button
1026
+ data-mode="xml"
1027
+ data-command="encloseWith"
1028
+ data-key="mod-e mod-e"
1029
+ title="Enclose selection in new element"
1030
+ >&lt;...&gt;</paper-button
1031
+ >
1032
+ <paper-button
1033
+ data-mode="xml"
1034
+ data-command="removeEnclosing"
1035
+ title="Remove enclosing tags"
1036
+ data-key="mod-e mod-r"
1037
+ class="sep"
1038
+ >&lt;X></paper-button
1039
+ >
1040
+ <paper-button
1041
+ data-mode="html"
1042
+ data-command="selectElement"
1043
+ data-key="mod-e mod-s"
1044
+ title="Select element around current cursor position"
1045
+ >&lt;|></paper-button
1046
+ >
1047
+ <paper-button
1048
+ data-mode="html"
1049
+ data-command="encloseWith"
1050
+ data-key="mod-e mod-e"
1051
+ title="Enclose selection in new element"
1052
+ >&lt;...&gt;</paper-button
1053
+ >
1054
+ <paper-button
1055
+ data-mode="html"
1056
+ data-command="removeEnclosing"
1057
+ title="Remove enclosing tags"
1058
+ data-key="mod-e mod-r"
1059
+ class="sep"
1060
+ >&lt;X></paper-button
1061
+ >
1062
+ <paper-button
1063
+ data-key="mod-e mod-p"
1064
+ data-command="snippet"
1065
+ data-params="[[\${_}]]"
1066
+ title="Insert template variable"
1067
+ >[[...]]</paper-button
1068
+ >
1069
+ </div>
1070
+ </jinn-codemirror>
1071
+ </div>
986
1072
  </div>
987
-
1073
+
988
1074
  <div class="parameters">
989
- <div class="group">
990
- <span class="title">Parameters</span>
991
- <paper-icon-button icon="add"
992
- @click="${this._addParameter}"></paper-icon-button>
993
- </div>
994
- ${H(this.parameters,e=>e.name,(e,t)=>l`
995
- <pb-odd-parameter-editor
996
- behaviour="${this.behaviour}"
997
- name="${e.name}"
998
- value="${e.value}"
999
- ?set="${e.set}"
1000
- endpoint="${this.endpoint}"
1001
- apiVersion="${this.apiVersion}"
1002
- @parameter-remove="${e=>this._removeParam(e,t)}"
1003
- @parameter-changed="${e=>this._updateParam(e,t)}"
1004
- ></pb-odd-parameter-editor>
1005
- `)}
1075
+ <div class="group">
1076
+ <span class="title">Parameters</span>
1077
+ <paper-icon-button
1078
+ icon="add"
1079
+ @click="${this._addParameter}"
1080
+ ></paper-icon-button>
1081
+ </div>
1082
+ ${H(this.parameters,e=>e.name,(e,t)=>l`
1083
+ <pb-odd-parameter-editor
1084
+ behaviour="${this.behaviour}"
1085
+ name="${e.name}"
1086
+ value="${e.value}"
1087
+ ?set="${e.set}"
1088
+ endpoint="${this.endpoint}"
1089
+ apiVersion="${this.apiVersion}"
1090
+ @parameter-remove="${e=>this._removeParam(e,t)}"
1091
+ @parameter-changed="${e=>this._updateParam(e,t)}"
1092
+ ></pb-odd-parameter-editor>
1093
+ `)}
1006
1094
  </div>
1007
1095
 
1008
1096
  <div class="renditions">
1009
- <div class="group">
1010
- <div>
1011
- <span class="title">Renditions</span>
1012
- <paper-icon-button icon="add" @click="${this._addRendition}"></paper-icon-button>
1013
- </div>
1014
- <div class="source">
1015
- <paper-checkbox ?checked="${this.sourcerend}" id="sourcerend">Use source rendition</paper-checkbox>
1016
- </div>
1097
+ <div class="group">
1098
+ <div>
1099
+ <span class="title">Renditions</span>
1100
+ <paper-icon-button
1101
+ icon="add"
1102
+ @click="${this._addRendition}"
1103
+ ></paper-icon-button>
1017
1104
  </div>
1018
-
1019
- ${H(this.renditions,e=>e.name,(e,t)=>l`
1020
- <pb-odd-rendition-editor scope="${e.scope}"
1021
- css="${e.css}"
1022
- @remove-rendition="${e=>this._removeRendition(e,t)}"
1023
- @rendition-changed="${e=>this._updateRendition(e,t)}"
1024
- ></pb-odd-rendition-editor>
1025
- `)}
1026
-
1105
+ <div class="source">
1106
+ <paper-checkbox ?checked="${this.sourcerend}" id="sourcerend"
1107
+ >Use source rendition</paper-checkbox
1108
+ >
1109
+ </div>
1110
+ </div>
1111
+
1112
+ ${H(this.renditions,e=>e.name,(e,t)=>l`
1113
+ <pb-odd-rendition-editor
1114
+ scope="${e.scope}"
1115
+ css="${e.css}"
1116
+ @remove-rendition="${e=>this._removeRendition(e,t)}"
1117
+ @rendition-changed="${e=>this._updateRendition(e,t)}"
1118
+ ></pb-odd-rendition-editor>
1119
+ `)}
1027
1120
  </div>
1028
- `:""}
1121
+ `:""}
1029
1122
  </iron-collapse>
1030
1123
 
1031
1124
  <div class="models">
1032
1125
  ${H(this.model.models,(e,t)=>l`
1033
- <pb-odd-model-editor
1034
- behaviour="${e.behaviour||"inline"}"
1035
- predicate="${e.predicate}"
1036
- type="${e.type}"
1037
- output="${e.output}"
1038
- css="${e.css}"
1039
- mode="${e.mode}"
1040
- .model="${e}"
1041
- .parameters="${e.parameters}"
1042
- desc="${e.desc}"
1043
- sourcerend="${e.sourcerend}"
1044
- .renditions="${e.renditions}"
1045
- .template="${e.template}"
1046
- .show="${e.show}"
1047
- endpoint="${this.endpoint}"
1048
- apiVersion="${this.apiVersion}"
1049
- @model-remove="${this._removeModel}"
1050
- @model-move-down="${this._moveModelDown}"
1051
- @model-move-up="${this._moveModelUp}"
1052
- @model-changed="${this.handleModelChanged}"
1053
- @click="${e=>this.setCurrentSelection(e,t)}"
1054
- hasParent
1126
+ <pb-odd-model-editor
1127
+ behaviour="${e.behaviour||"inline"}"
1128
+ predicate="${e.predicate}"
1129
+ type="${e.type}"
1130
+ output="${e.output}"
1131
+ css="${e.css}"
1132
+ mode="${e.mode}"
1133
+ .model="${e}"
1134
+ .parameters="${e.parameters}"
1135
+ desc="${e.desc}"
1136
+ sourcerend="${e.sourcerend}"
1137
+ .renditions="${e.renditions}"
1138
+ .template="${e.template}"
1139
+ .show="${e.show}"
1140
+ endpoint="${this.endpoint}"
1141
+ apiVersion="${this.apiVersion}"
1142
+ @model-remove="${this._removeModel}"
1143
+ @model-move-down="${this._moveModelDown}"
1144
+ @model-move-up="${this._moveModelUp}"
1145
+ @model-changed="${this.handleModelChanged}"
1146
+ @click="${e=>this.setCurrentSelection(e,t)}"
1147
+ hasParent
1055
1148
  ></pb-odd-model-editor>
1056
- `)}
1149
+ `)}
1057
1150
 
1058
1151
  </div>
1059
1152
  </form>
1060
1153
  <pb-message id="dialog"></pb-message>
1061
- `}firstUpdated(){super.firstUpdated(),this.hasCustomBehaviour=this.behaviours.indexOf(this.behaviour)<0,this.hasCustomBehaviour&&(this.shadowRoot.getElementById("custombehaviour").value=this.behaviour)}updated(e){e.has("show")&&this.show&&this.refreshEditors()}refreshEditors(){if(console.log("refreshEditors"),this._isGroupOrSequence())return console.log("asfdfa");const e=this.shadowRoot.querySelectorAll("pb-odd-model-editor");for(let t=0;t<e.length;t++)e[t].refreshEditors();const t=this.shadowRoot.querySelectorAll("pb-odd-rendition-editor");for(let e=0;e<t.length;e++)t[e].refreshEditor();const o=this.shadowRoot.querySelectorAll("pb-odd-parameter-editor");for(let e=0;e<o.length;e++)o[e].refreshEditor()}toggle(e){this.show=!this.show,this.toggleButtonIcon();const t=this.model,o=Object.assign({},t,{show:this.show});this.model=o,this.refreshEditors(),this.dispatchEvent(new CustomEvent("model-changed",{composed:!0,bubbles:!0,detail:{oldModel:t,newModel:o}}))}toggleButtonIcon(){this.show?this.icon="expand-less":this.icon="expand-more"}_isModel(){return"model"===this.type}_isGroupOrSequence(){return"model"!==this.type}static _templateMode(e){switch(e){case"latex":return"latex";case"web":default:return"xml"}}_changeSelection(e){if(e.detail.target==this)return;e.preventDefault(),e.stopPropagation(),null!=this.currentSelection&&this.currentSelection.removeAttribute("currentselection");const t=e.detail.target;t.setAttribute("currentselection","true"),this.currentSelection=t}_requestRemoval(e){e.preventDefault(),this.dispatchEvent(new CustomEvent("model-remove"))}_moveDown(e){e.preventDefault(),e.stopPropagation(),this.dispatchEvent(new CustomEvent("model-move-down",{composed:!0,bubbles:!0,detail:{model:this}}))}_moveUp(e){e.preventDefault(),e.stopPropagation(),this.dispatchEvent(new CustomEvent("model-move-up"))}_addNested(e){const t={behaviour:"inline",css:"",desc:"",predicate:"",type:e instanceof Event?e.detail.item.getAttribute("value"):e,output:"",sourcerend:!1,models:[],mode:"",parameters:[],renditions:[],template:"",show:!0},o=this.model,i=Array.from(this.model.models);i.unshift(t),this.model=Object.assign({},o,{models:i});this.shadowRoot.querySelector("#modelType").select(""),this.dispatchEvent(new CustomEvent("model-changed",{composed:!0,bubbles:!0,detail:{oldModel:o,newModel:this.model}}))}addModel(e){"model"===e.type?(this.model.models.unshift(e),this.requestUpdate()):console.error("only models can be added to modelSequence or modelGrp")}_removeModel(e){console.log("_removeModel ",e),e.stopPropagation();const{model:t}=e.target,o=this.model.models.indexOf(t);this.shadowRoot.getElementById("dialog").confirm(S("odd.editor.model.delete-model-label"),S("odd.editor.model.delete-model-message")).then(()=>{const e=this.model,t=Array.from(this.model.models);t.splice(o,1),this.model=Object.assign({},e,{models:t}),this.models=t,this.dispatchEvent(new CustomEvent("model-changed",{composed:!0,bubbles:!0,detail:{oldModel:e,newModel:this.model}}))},()=>null)}_moveModelDown(e){console.log("MODEL._moveModelDown ",e),e.stopPropagation();const{model:t}=e.target,o=this.model.models.indexOf(t);if(o===this.model.models.length)return;const i=this.model,s=Array.from(this.model.models);s.splice(o,1),s.splice(o+1,0,t),this.model=Object.assign({},i,{models:s});const r=this.shadowRoot.querySelectorAll("pb-odd-model-editor")[o+1];this._setCurrentSelection(o+1,r),this.dispatchEvent(new CustomEvent("model-changed",{composed:!0,bubbles:!0,detail:{oldModel:i,newModel:this.model}})),this.requestUpdate()}_moveModelUp(e){e.stopPropagation();const{model:t}=e.target,o=this.model.models.indexOf(t);if(0===o)return;const i=this.model,s=Array.from(this.model.models);s.splice(o,1),s.splice(o-1,0,t),this.model=Object.assign({},i,{models:s});const r=this.shadowRoot.querySelectorAll("pb-odd-model-editor")[o-1];this._setCurrentSelection(o-1,r),this.dispatchEvent(new CustomEvent("model-changed",{composed:!0,bubbles:!0,detail:{oldModel:i,newModel:this.model}}))}handleModelChanged(e){console.log("handleModelChanged ",e,this),e.stopPropagation();const t=this.model,o=this.model.models.indexOf(e.detail.oldModel),i=Array.from(this.model.models);i.splice(o,1,e.detail.newModel),this.model=Object.assign({},t,{models:i}),this.dispatchEvent(new CustomEvent("model-changed",{composed:!0,bubbles:!0,detail:{oldModel:t,newModel:this.model}}))}setCurrentSelection(e,t){e.preventDefault(),e.stopPropagation(),this._setCurrentSelection(t,e.target)}_setCurrentSelection(e,t){const o=this.shadowRoot.querySelectorAll("pb-odd-model-editor")[e];o&&(o.hasAttribute("currentselection")||(this.dispatchEvent(new CustomEvent("current-changed",{composed:!0,bubbles:!0,detail:{target:t}})),this.requestUpdate()))}_inputDesc(e){this.desc=e.composedPath()[0].value,this._fireModelChanged("desc",this.desc)}_selectOutput(e){this.output=e.composedPath()[0].selected,this._fireModelChanged("output",this.output)}_updatePredicate(){this.predicate=this.shadowRoot.getElementById("predicate").value,console.log("_updatePredicate ",this.predicate),this._fireModelChanged("predicate",this.predicate)}_selectBehaviour(e){this.behaviour=e.composedPath()[0].selected,this._fireModelChanged("behaviour",this.behaviour)}_inputCss(e){this.css=e.composedPath()[0].value,this._fireModelChanged("css",this.css)}_inputMode(e){this.mode=e.composedPath()[0].value,this._fireModelChanged("mode",this.mode)}_updateTemplate(e){this.template=this.shadowRoot.getElementById("template").content,this._fireModelChanged("template",this.template)}_addParameter(e){this.parameters.push({name:"",value:""}),this._fireModelChanged("parameters",this.parameters)}_updateParam(e,t){this.parameters[t].name=e.detail.name,this.parameters[t].value=e.detail.value,this.parameters[t].set=e.detail.set,this._fireModelChanged("parameters",this.parameters)}_removeParam(e,t){this.parameters.splice(t,1),this._fireModelChanged("parameters",this.parameters)}_addRendition(e){this.renditions.push({scope:"",css:""}),this._fireModelChanged("renditions",this.renditions)}_updateRendition(e,t){this.renditions[t].css=e.detail.css,this.renditions[t].scope=e.detail.scope,this._fireModelChanged("renditions",this.renditions)}_removeRendition(e,t){this.renditions.splice(t,1),this._fireModelChanged("renditions",this.renditions)}_fireModelChanged(e,t){const o=this.model;this.model=Object.assign({},this.model,{[e]:t}),console.log("model changed for %s: %o - %o",e,t,this.model),this.dispatchEvent(new CustomEvent("model-changed",{composed:!0,bubbles:!0,detail:{oldModel:o,newModel:this.model}})),this.requestUpdate()}_copy(e){e.preventDefault(),e.stopPropagation(),console.log("odd-model.copy ",e),console.log("odd-model.copy data",this.model),this.dispatchEvent(new CustomEvent("odd-copy",{composed:!0,bubbles:!0,detail:{model:this.model}}))}_paste(e){console.log("model _paste ",e),this.dispatchEvent(new CustomEvent("odd-paste",{composed:!0,bubbles:!0,detail:{target:this}}))}_handleCustomBehaviour(e){this.behaviour=e.composedPath()[0].value,this._fireModelChanged("behaviour",this.behaviour),""===this.behaviour?(this.behaviour="inline",this.hasCustomBehaviour=!1):this.hasCustomBehaviour=!0,this.requestUpdate()}}customElements.define("pb-odd-model-editor",ie);class se extends a{static get styles(){return n`
1062
- :host {
1063
- display: block;
1064
- padding: 4px 10px;
1065
- height: auto;
1066
- }
1067
-
1068
- h1, h2, h3, h4, h5, h6 {
1069
- font-family: "Oswald", Verdana, "Helvetica", sans-serif;
1070
- font-weight: 400 !important;
1071
- }
1072
-
1154
+ `}firstUpdated(){super.firstUpdated(),this.hasCustomBehaviour=this.behaviours.indexOf(this.behaviour)<0,this.hasCustomBehaviour&&(this.shadowRoot.getElementById("custombehaviour").value=this.behaviour)}updated(e){e.has("show")&&this.show&&this.refreshEditors()}refreshEditors(){if(console.log("refreshEditors"),this._isGroupOrSequence())return console.log("asfdfa");const e=this.shadowRoot.querySelectorAll("pb-odd-model-editor");for(let t=0;t<e.length;t++)e[t].refreshEditors();const t=this.shadowRoot.querySelectorAll("pb-odd-rendition-editor");for(let e=0;e<t.length;e++)t[e].refreshEditor();const o=this.shadowRoot.querySelectorAll("pb-odd-parameter-editor");for(let e=0;e<o.length;e++)o[e].refreshEditor()}toggle(e){this.show=!this.show,this.toggleButtonIcon();const t=this.model,o=Object.assign(Object.assign({},t),{},{show:this.show});this.model=o,this.refreshEditors(),this.dispatchEvent(new CustomEvent("model-changed",{composed:!0,bubbles:!0,detail:{oldModel:t,newModel:o}}))}toggleButtonIcon(){this.show?this.icon="expand-less":this.icon="expand-more"}_isModel(){return"model"===this.type}_isGroupOrSequence(){return"model"!==this.type}static _templateMode(e){switch(e){case"latex":return"latex";case"web":default:return"xml"}}_changeSelection(e){if(e.detail.target==this)return;e.preventDefault(),e.stopPropagation(),null!=this.currentSelection&&this.currentSelection.removeAttribute("currentselection");const t=e.detail.target;t.setAttribute("currentselection","true"),this.currentSelection=t}_requestRemoval(e){e.preventDefault(),this.dispatchEvent(new CustomEvent("model-remove"))}_moveDown(e){e.preventDefault(),e.stopPropagation(),this.dispatchEvent(new CustomEvent("model-move-down",{composed:!0,bubbles:!0,detail:{model:this}}))}_moveUp(e){e.preventDefault(),e.stopPropagation(),this.dispatchEvent(new CustomEvent("model-move-up"))}_addNested(e){const t={behaviour:"inline",css:"",desc:"",predicate:"",type:e instanceof Event?e.detail.item.getAttribute("value"):e,output:"",sourcerend:!1,models:[],mode:"",parameters:[],renditions:[],template:"",show:!0},o=this.model,i=Array.from(this.model.models);i.unshift(t),this.model=Object.assign(Object.assign({},o),{},{models:i});this.shadowRoot.querySelector("#modelType").select(""),this.dispatchEvent(new CustomEvent("model-changed",{composed:!0,bubbles:!0,detail:{oldModel:o,newModel:this.model}}))}addModel(e){"model"===e.type?(this.model.models.unshift(e),this.requestUpdate()):console.error("only models can be added to modelSequence or modelGrp")}_removeModel(e){console.log("_removeModel ",e),e.stopPropagation();const{model:t}=e.target,o=this.model.models.indexOf(t);this.shadowRoot.getElementById("dialog").confirm(S("odd.editor.model.delete-model-label"),S("odd.editor.model.delete-model-message")).then(()=>{const e=this.model,t=Array.from(this.model.models);t.splice(o,1),this.model=Object.assign(Object.assign({},e),{},{models:t}),this.models=t,this.dispatchEvent(new CustomEvent("model-changed",{composed:!0,bubbles:!0,detail:{oldModel:e,newModel:this.model}}))},()=>null)}_moveModelDown(e){console.log("MODEL._moveModelDown ",e),e.stopPropagation();const{model:t}=e.target,o=this.model.models.indexOf(t);if(o===this.model.models.length)return;const i=this.model,s=Array.from(this.model.models);s.splice(o,1),s.splice(o+1,0,t),this.model=Object.assign(Object.assign({},i),{},{models:s});const r=this.shadowRoot.querySelectorAll("pb-odd-model-editor")[o+1];this._setCurrentSelection(o+1,r),this.dispatchEvent(new CustomEvent("model-changed",{composed:!0,bubbles:!0,detail:{oldModel:i,newModel:this.model}})),this.requestUpdate()}_moveModelUp(e){e.stopPropagation();const{model:t}=e.target,o=this.model.models.indexOf(t);if(0===o)return;const i=this.model,s=Array.from(this.model.models);s.splice(o,1),s.splice(o-1,0,t),this.model=Object.assign(Object.assign({},i),{},{models:s});const r=this.shadowRoot.querySelectorAll("pb-odd-model-editor")[o-1];this._setCurrentSelection(o-1,r),this.dispatchEvent(new CustomEvent("model-changed",{composed:!0,bubbles:!0,detail:{oldModel:i,newModel:this.model}}))}handleModelChanged(e){console.log("handleModelChanged ",e,this),e.stopPropagation();const t=this.model,o=this.model.models.indexOf(e.detail.oldModel),i=Array.from(this.model.models);i.splice(o,1,e.detail.newModel),this.model=Object.assign(Object.assign({},t),{},{models:i}),this.dispatchEvent(new CustomEvent("model-changed",{composed:!0,bubbles:!0,detail:{oldModel:t,newModel:this.model}}))}setCurrentSelection(e,t){e.preventDefault(),e.stopPropagation(),this._setCurrentSelection(t,e.target)}_setCurrentSelection(e,t){const o=this.shadowRoot.querySelectorAll("pb-odd-model-editor")[e];o&&(o.hasAttribute("currentselection")||(this.dispatchEvent(new CustomEvent("current-changed",{composed:!0,bubbles:!0,detail:{target:t}})),this.requestUpdate()))}_inputDesc(e){this.desc=e.composedPath()[0].value,this._fireModelChanged("desc",this.desc)}_selectOutput(e){this.output=e.composedPath()[0].selected,this._fireModelChanged("output",this.output)}_updatePredicate(){this.predicate=this.shadowRoot.getElementById("predicate").value,console.log("_updatePredicate ",this.predicate),this._fireModelChanged("predicate",this.predicate)}_selectBehaviour(e){this.behaviour=e.composedPath()[0].selected,this._fireModelChanged("behaviour",this.behaviour)}_inputCss(e){this.css=e.composedPath()[0].value,this._fireModelChanged("css",this.css)}_inputMode(e){this.mode=e.composedPath()[0].value,this._fireModelChanged("mode",this.mode)}_updateTemplate(e){this.template=this.shadowRoot.getElementById("template").content,this._fireModelChanged("template",this.template)}_addParameter(e){this.parameters.push({name:"",value:""}),this._fireModelChanged("parameters",this.parameters)}_updateParam(e,t){this.parameters[t].name=e.detail.name,this.parameters[t].value=e.detail.value,this.parameters[t].set=e.detail.set,this._fireModelChanged("parameters",this.parameters)}_removeParam(e,t){this.parameters.splice(t,1),this._fireModelChanged("parameters",this.parameters)}_addRendition(e){this.renditions.push({scope:"",css:""}),this._fireModelChanged("renditions",this.renditions)}_updateRendition(e,t){this.renditions[t].css=e.detail.css,this.renditions[t].scope=e.detail.scope,this._fireModelChanged("renditions",this.renditions)}_removeRendition(e,t){this.renditions.splice(t,1),this._fireModelChanged("renditions",this.renditions)}_fireModelChanged(e,t){const o=this.model;this.model=Object.assign(Object.assign({},this.model),{},{[e]:t}),console.log("model changed for %s: %o - %o",e,t,this.model),this.dispatchEvent(new CustomEvent("model-changed",{composed:!0,bubbles:!0,detail:{oldModel:o,newModel:this.model}})),this.requestUpdate()}_copy(e){e.preventDefault(),e.stopPropagation(),console.log("odd-model.copy ",e),console.log("odd-model.copy data",this.model),this.dispatchEvent(new CustomEvent("odd-copy",{composed:!0,bubbles:!0,detail:{model:this.model}}))}_paste(e){console.log("model _paste ",e),this.dispatchEvent(new CustomEvent("odd-paste",{composed:!0,bubbles:!0,detail:{target:this}}))}_handleCustomBehaviour(e){this.behaviour=e.composedPath()[0].value,this._fireModelChanged("behaviour",this.behaviour),""===this.behaviour?(this.behaviour="inline",this.hasCustomBehaviour=!1):this.hasCustomBehaviour=!0,this.requestUpdate()}}customElements.define("pb-odd-model-editor",ie);class se extends a{static get styles(){return n`
1155
+ :host {
1156
+ display: block;
1157
+ padding: 4px 10px;
1158
+ height: auto;
1159
+ }
1073
1160
 
1074
- input {
1075
- vertical-align: middle;
1076
- }
1077
-
1078
- .ident {
1079
- display: inline-block;
1080
- font-size:26px;
1081
- position:relative;
1082
- }
1083
- .mode{
1084
- font-size:10px;
1085
- display:inline-block;
1086
- text-transform:uppercase;
1087
- border-radius:12px;
1088
- color:var(--paper-grey-700);
1089
- background:var(--paper-grey-300);
1090
- padding:2px 6px;
1091
- border:thin solid var(--paper-grey-500);
1092
- margin-left:6px;
1093
- position:absolute;
1094
- top:8px;
1095
- }
1096
-
1097
- :host([currentselection]){
1098
- box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14),
1099
- 0 1px 18px 0 rgba(0, 0, 0, 0.12),
1100
- 0 3px 5px -1px rgba(0, 0, 0, 0.4);
1161
+ h1,
1162
+ h2,
1163
+ h3,
1164
+ h4,
1165
+ h5,
1166
+ h6 {
1167
+ font-family: 'Oswald', Verdana, 'Helvetica', sans-serif;
1168
+ font-weight: 400 !important;
1169
+ }
1101
1170
 
1102
- }
1171
+ input {
1172
+ vertical-align: middle;
1173
+ }
1103
1174
 
1104
- :host([currentSelection]) > h3, :host([currentSelection]) > header{
1105
- border-left:thin solid var(--paper-blue-500);
1106
- }
1107
-
1175
+ .ident {
1176
+ display: inline-block;
1177
+ font-size: 26px;
1178
+ position: relative;
1179
+ }
1180
+ .mode {
1181
+ font-size: 10px;
1182
+ display: inline-block;
1183
+ text-transform: uppercase;
1184
+ border-radius: 12px;
1185
+ color: var(--paper-grey-700);
1186
+ background: var(--paper-grey-300);
1187
+ padding: 2px 6px;
1188
+ border: thin solid var(--paper-grey-500);
1189
+ margin-left: 6px;
1190
+ position: absolute;
1191
+ top: 8px;
1192
+ }
1108
1193
 
1109
- h3{
1110
- display:grid;
1111
- grid-template-columns:260px auto 160px;
1112
- align-items:center;
1113
- }
1114
- h3 .controls{
1115
- text-align: right;
1116
- margin-right: 10px;
1117
- }
1118
-
1119
- h3 .ident{
1120
- align-self: center;
1121
- }
1122
-
1123
- paper-menu-button paper-icon-button{
1124
- margin-left:-10px;
1125
- }
1126
-
1127
- /*todo: this does not take effect*/
1128
- iron-collapse.models{
1129
- --iron-collapse-transition-duration:0.4s;
1130
- }
1131
-
1132
- .models{
1133
- padding:10px;
1134
- }
1135
- `}static get properties(){return{ident:{type:String},mode:{type:String},models:{type:Array},endpoint:{type:String},apiVersion:{type:String}}}constructor(){super(),this.ident="",this.mode="",this.models=[],this.icon="expand-more"}render(){return l`
1136
- <h3>
1137
- <span class="ident">${this.ident}<span class="mode">mode: ${this.mode}</span></span>
1138
- <span class="spacer"></span>
1139
-
1140
- <span class="controls">
1141
- <paper-icon-button @click="${this._remove}" icon="delete"></paper-icon-button>
1142
- <paper-icon-button @click="${this._paste}" icon="content-paste"></paper-icon-button>
1143
- <paper-menu-button horizontal-align="right">
1144
- <paper-icon-button icon="add" slot="dropdown-trigger"></paper-icon-button>
1145
- <paper-listbox id="addModel" slot="dropdown-content" @iron-select="${this._addModel}"
1146
- attr-for-selected="value">
1147
- <paper-item value="model">model</paper-item>
1148
- <paper-item value="modelSequence">modelSequence</paper-item>
1149
- <paper-item value="modelGrp">modelGrp</paper-item>
1150
- </paper-listbox>
1151
- </paper-menu-button>
1194
+ :host([currentselection]) {
1195
+ box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12),
1196
+ 0 3px 5px -1px rgba(0, 0, 0, 0.4);
1197
+ }
1152
1198
 
1199
+ :host([currentSelection]) > h3,
1200
+ :host([currentSelection]) > header {
1201
+ border-left: thin solid var(--paper-blue-500);
1202
+ }
1153
1203
 
1154
- </span>
1155
- </h3>
1204
+ h3 {
1205
+ display: grid;
1206
+ grid-template-columns: 260px auto 160px;
1207
+ align-items: center;
1208
+ }
1209
+ h3 .controls {
1210
+ text-align: right;
1211
+ margin-right: 10px;
1212
+ }
1213
+
1214
+ h3 .ident {
1215
+ align-self: center;
1216
+ }
1156
1217
 
1157
- <div>
1158
- ${H(this.models,(e,t)=>l`
1218
+ paper-menu-button paper-icon-button {
1219
+ margin-left: -10px;
1220
+ }
1221
+
1222
+ /*todo: this does not take effect*/
1223
+ iron-collapse.models {
1224
+ --iron-collapse-transition-duration: 0.4s;
1225
+ }
1226
+
1227
+ .models {
1228
+ padding: 10px;
1229
+ }
1230
+ `}static get properties(){return{ident:{type:String},mode:{type:String},models:{type:Array},endpoint:{type:String},apiVersion:{type:String}}}constructor(){super(),this.ident="",this.mode="",this.models=[],this.icon="expand-more"}render(){return l`
1231
+ <h3>
1232
+ <span class="ident">${this.ident}<span class="mode">mode: ${this.mode}</span></span>
1233
+ <span class="spacer"></span>
1234
+
1235
+ <span class="controls">
1236
+ <paper-icon-button @click="${this._remove}" icon="delete"></paper-icon-button>
1237
+ <paper-icon-button @click="${this._paste}" icon="content-paste"></paper-icon-button>
1238
+ <paper-menu-button horizontal-align="right">
1239
+ <paper-icon-button icon="add" slot="dropdown-trigger"></paper-icon-button>
1240
+ <paper-listbox
1241
+ id="addModel"
1242
+ slot="dropdown-content"
1243
+ @iron-select="${this._addModel}"
1244
+ attr-for-selected="value"
1245
+ >
1246
+ <paper-item value="model">model</paper-item>
1247
+ <paper-item value="modelSequence">modelSequence</paper-item>
1248
+ <paper-item value="modelGrp">modelGrp</paper-item>
1249
+ </paper-listbox>
1250
+ </paper-menu-button>
1251
+ </span>
1252
+ </h3>
1253
+
1254
+ <div>
1255
+ ${H(this.models,(e,t)=>l`
1159
1256
  <pb-odd-model-editor
1160
- behaviour="${e.behaviour||""}"
1161
- predicate="${e.predicate}"
1162
- type="${e.type}"
1163
- output="${e.output}"
1164
- css="${e.css}"
1165
- mode="${e.mode}"
1166
- .model="${e}"
1167
- .parameters="${e.parameters}"
1168
- desc="${e.desc}"
1169
- .sourcerend="${e.sourcerend}"
1170
- .renditions="${e.renditions}"
1171
- .template="${e.template}"
1172
- .show="${e.show}"
1173
- .endpoint="${this.endpoint}"
1174
- .apiVersion="${this.apiVersion}"
1175
- @model-remove="${this._removeModel}"
1176
- @model-move-down="${this._moveModelDown}"
1177
- @model-move-up="${this._moveModelUp}"
1178
- @model-changed="${this.handleModelChanged}"
1179
- @click="${e=>this.setCurrentSelection(e,t)}"
1180
- ></pb-odd-model-editor>
1181
- `)}
1182
- </div>
1183
- <pb-message id="dialog"></pb-message>
1184
- `}addModel(e){this.models.unshift(e),this.requestUpdate()}_addModel(e){console.log("ELEMENTSPEC._addModel ",e);const t=this.shadowRoot.getElementById("addModel"),o={behaviour:"inline",css:"",mode:"",predicate:"",desc:"",type:t.selected,output:"",template:"",sourcerend:!1,models:[],parameters:[],renditions:[],show:!0},i=Array.from(this.models);i.unshift(o),this.models=i,this.dispatchEvent(new CustomEvent("element-spec-changed",{composed:!0,bubbles:!0,detail:{action:"models",ident:this.ident,models:this.models}})),t.selected="",this.requestUpdate()}_remove(e){this.dispatchEvent(new CustomEvent("element-spec-removed",{composed:!0,bubbles:!0,detail:{target:this}}))}_paste(e){console.log("_paste ",e),this.dispatchEvent(new CustomEvent("odd-paste",{composed:!0,bubbles:!0,detail:{target:this}}))}setCurrentSelection(e,t){e.preventDefault(),e.stopPropagation(),this._setCurrentSelection(t,e.target)}_setCurrentSelection(e,t){const o=this.shadowRoot.querySelectorAll("pb-odd-model-editor")[e];o&&(o.hasAttribute("currentselection")||(this.dispatchEvent(new CustomEvent("current-changed",{composed:!0,bubbles:!0,detail:{target:t}})),this.requestUpdate()))}_removeModel(e){console.log("_removeModel ",e),e.stopPropagation();const{model:t}=e.target,o=this.models.indexOf(t);this.shadowRoot.getElementById("dialog").confirm(S("odd.editor.model.delete-model-label"),S("odd.editor.model.delete-model-message")).then(()=>{const e=Array.from(this.models);e.splice(o,1),this.models=e,this.dispatchEvent(new CustomEvent("element-spec-changed",{composed:!0,bubbles:!0,detail:{action:"models",ident:this.ident,models:this.models}}))},()=>null)}_moveModelDown(e){console.log("ELEMENTSPEC._moveModelDown ",e),e.stopPropagation();const{model:t}=e.target,o=this.models.indexOf(t);if(o===this.models.length)return;const i=Array.from(this.models);i.splice(o,1),i.splice(o+1,0,t),this.models=i;const s=this.shadowRoot.querySelectorAll("pb-odd-model-editor")[o+1];s&&(this._setCurrentSelection(o+1,s),this.dispatchEvent(new CustomEvent("element-spec-changed",{composed:!0,bubbles:!0,detail:{action:"models",ident:this.ident,models:this.models}})))}_moveModelUp(e){e.stopPropagation();const{model:t}=e.target,o=this.models.indexOf(t);if(0===o)return;const i=Array.from(this.models);i.splice(o,1),i.splice(o-1,0,t),this.models=i;const s=this.shadowRoot.querySelectorAll("pb-odd-model-editor")[o-1];this._setCurrentSelection(o-1,s),this.dispatchEvent(new CustomEvent("element-spec-changed",{composed:!0,bubbles:!0,detail:{action:"models",ident:this.ident,models:this.models}}))}handleModelChanged(e){e.stopPropagation();const t=this.models.indexOf(e.detail.oldModel),o=Array.from(this.models);o.splice(t,1,e.detail.newModel),this.models=o,this.dispatchEvent(new CustomEvent("element-spec-changed",{composed:!0,bubbles:!0,detail:{action:"models",ident:this.ident,models:this.models}})),this.requestUpdate()}}customElements.define("pb-odd-elementspec-editor",se);class re extends(b(p(a))){static get styles(){return n`
1185
- :host {
1186
- display: flex;
1187
- /*margin: 30px 20px;*/
1188
- margin:0;
1189
- padding:0;
1190
- height:auto;
1191
- }
1192
-
1193
- #layout {
1194
- width: 100%;
1195
- display: grid;
1196
- grid-template-columns: auto 1fr;
1197
- grid-template-rows: auto 1fr;
1198
- }
1199
-
1200
- #drawer {
1201
- grid-column: 1 / 1;
1202
- min-width: 320px;
1203
- }
1204
-
1205
- #navlist {
1206
- grid-column: 1 / 1;
1207
- grid-row: 2 / 2;
1208
- overflow: auto;
1209
- height: 100%;
1210
- }
1211
-
1212
- .specs {
1213
- grid-column: 2 / 2;
1214
- grid-row: 1 / span 2;
1215
- overflow: auto;
1216
- }
1217
-
1218
- section{
1219
- padding:20px;
1220
- }
1221
-
1222
- h3, h4 {
1223
- font-family: var(--pb-heading-font-family);
1224
- font-weight: var(--pb-heading-font-weight);
1225
- line-height: var(--pb-heading-line-height);
1226
- }
1227
-
1228
- /* ported over but not checked yet */
1229
-
1230
- .specs {
1231
- padding:6px;
1232
- }
1233
-
1234
- .metadata {
1235
- display: block;
1236
- }
1237
-
1238
- .metadata div {
1239
- padding: 0 16px 16px;
1240
- }
1241
-
1242
- .metadata paper-input {
1243
- margin-bottom: 10px;
1244
- }
1245
-
1246
- .metadata .extCssEdit {
1247
- display: flex;
1248
- align-items: center;
1249
- padding: 0;
1250
- }
1251
- .metadata .extCssEdit paper-input {
1252
- flex: 2;
1253
- }
1254
- .metadata .extCssEdit pb-edit-xml {
1255
- width: 40px;
1256
- }
1257
-
1258
- #jump-to {
1259
- margin-top: 1em;
1260
- }
1261
-
1262
- odd-model {
1263
- border-bottom: 1px solid #E0E0E0;
1264
- }
1265
- odd-model h4 {
1266
- margin-top: 15px;
1267
- padding-top: 5px;
1268
- border-top: 1px solid #E0E0E0;
1269
- }
1270
- .renditions {
1271
- margin-top: 10px;
1272
- }
1273
- .icons{
1274
- display:inline-block;
1275
- white-space: nowrap;
1276
- }
1277
-
1278
- /* todo: this doesn't work - should refactor to have the complete trigger exposed here (move out of pb-collapse) */
1279
- pb-collapse#meta ::slotted(.collapse-trigger){
1280
- /*height:56px;*/
1281
- }
1282
-
1283
- iron-collapse {
1284
- --iron-collapse-transition-duration:0.8s;
1285
- }
1286
-
1287
- pb-message#errorMsg{
1288
- background: var(--paper-red-500);
1289
- color:white;
1290
- }
1291
- .card-content{
1292
- height:100%;
1293
- overflow:auto;
1294
- }
1295
-
1296
- paper-tab{
1297
- width:100px;
1298
- }
1299
-
1300
- .editingView {
1301
- width:100%;
1302
- }
1303
-
1304
- vaadin-tabs{
1305
- margin-top:10px;
1306
- }
1307
-
1308
- vaadin-tab{
1309
- background:var(--paper-grey-200);
1310
- padding:0 6px;
1311
- border:thin solid var(--paper-grey-300);
1312
- border-bottom:none;
1313
- }
1314
- vaadin-tab[selected]{
1315
- background:white;
1316
- border-top-right-radius:20px;
1317
- box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),
1318
- 0 1px 5px 0 rgba(0, 0, 0, 0.12),
1319
- 0 3px 1px -2px rgba(0, 0, 0, 0.2);
1320
-
1321
- }
1322
-
1323
- `}static get properties(){return Object.assign(Object.assign({},super.properties),{},{ident:{type:String},mode:{type:String},models:{type:Array},odd:{type:String,reflect:!0},elementSpecs:{type:Array},source:{type:String},title:{type:String},titleShort:{type:String,reflect:!0,attribute:"title-short"},description:{type:String},namespace:{type:String},rootPath:{type:String,attribute:"root-path"},loading:{type:Boolean},indentString:{type:String},outputPrefix:{type:String,attribute:"output-prefix"},outputRoot:{type:String,attribute:"output-root"},currentSelection:{type:Object},useNamespace:{type:Boolean},loggedIn:{type:Boolean},tabs:{type:Array},tabIndex:{type:Number,reflect:!0}})}constructor(){super(),this.ident="",this.mode="",this.models=()=>[],this.odd="",this.elementSpecs=[],this.source="",this.title="",this.titleShort="",this.description="",this.namespace="",this.rootPath="",this.loading=!1,this.indentString=" ",this.outputPrefix="",this.outputRoot="",this.currentSelection={},this.useNamespace=!1,this.loggedIn=!0,this.tabs=[],this.tabIndex=void 0,this.selectedNavIndex=0,this.cssFile="",this.hotkeys={save:"ctrl+shift+s,command+shift+s"},this._hasChanges=!1}render(){return l`
1324
- <iron-ajax id="loadContent"
1325
- handle-as="json" content-type="application/x-www-form-urlencoded"
1326
- with-credentials
1327
- method="GET"></iron-ajax>
1328
-
1329
- <iron-ajax id="saveOdd"
1330
- handle-as="json"
1331
- with-credentials></iron-ajax>
1332
-
1333
- <div id="layout">
1334
- <div id="drawer">
1335
- <slot id="slot"></slot>
1336
- <h3>
1337
- <span>${this.odd}</span>
1338
-
1339
- <span class="icons">
1340
- <pb-edit-xml id="editSource"><paper-icon-button icon="code" title="${$("odd.editor.odd-source")}"></paper-icon-button></pb-edit-xml>
1341
- <paper-icon-button @click="${()=>this.save(!0)}" icon="icons:cloud-download" title="${$(k?"odd.editor.save-as":"odd.editor.download")}"></paper-icon-button>
1342
- <paper-icon-button @click="${this._reload}" icon="refresh" title="${$("odd.editor.reload")}"></paper-icon-button>
1343
- <paper-icon-button @click="${()=>this.save(!1)}" icon="save" title="${$("odd.editor.save")} ${this.display("save")}"
1344
- ?disabled="${!this.loggedIn}"></paper-icon-button>
1345
- </span>
1346
- </h3>
1347
- <div id="new-element" class="input-group">
1348
- <paper-input id="identNew" label="${$("odd.editor.add-element")}" always-float-label="always-float-label">
1349
- <paper-icon-button slot="suffix" @click="${this.addElementSpec}" icon="add" tabindex="-1"></paper-icon-button>
1350
- </paper-input>
1351
- </div>
1352
-
1353
- <div id="jump-to">
1354
- <paper-autocomplete id="jumpTo" label="${$("odd.editor.jump-to")}" always-float-label="always-float-label"></paper-autocomplete>
1355
- </div>
1356
-
1357
- <h3>${$("odd.editor.specs")}</h3>
1358
- </div>
1359
- <div id="navlist">
1360
- ${H(this.elementSpecs,e=>e.ident,(e,t)=>l`
1361
- <paper-item id="es_${e.ident}"
1362
- index="${t}"
1363
- @click="${e=>this._openElementSpec(e,t)}">${e.ident}</paper-item>
1364
- `)}
1365
- </div>
1366
- <section class="specs" id="specs">
1367
-
1368
- <paper-card class="metadata">
1369
- <pb-collapse id="meta">
1370
- <h4 slot="collapse-trigger" class="panel-title">
1371
- ${this._computedTitle()}
1372
- </h4>
1373
- <div slot="collapse-content">
1374
- <paper-input id="title" name="title" value="${this.title}" label="${$("odd.editor.title")}"
1375
- placeholder="[${$("odd.editor.title-placeholder")}]"
1376
- @change="${this._inputTitle}"></paper-input>
1377
- <paper-input id="titleShort" name="short-title" .value="${this.titleShort}" label="${$("odd.editor.title-short")}"
1378
- placeholder="[${$("odd.editor.title-short-placeholder")}]"
1379
- @change="${e=>this.titleShort=e.composedPath()[0].value}"></paper-input>
1380
- <paper-input id="description" name="description" .value="${W(this.description)}" label="${$("odd.editor.description-label")}"
1381
- placeholder="[${$("odd.editor.description-placeholder")}]"
1382
- @change="${e=>this.description=e.composedPath()[0].value}"></paper-input>
1383
- <paper-input id="source" name="source" ?value="${this.source}" label="${$("odd.editor.source-label")}"
1384
- placeholder="[${$("odd.editor.source-placeholder")}]"
1385
- @change="${e=>this.source=e.composedPath()[0].value}"></paper-input>
1386
- <paper-checkbox id="useNamespace" @change="${this.setUseNamespace}">${$("odd.editor.use-namespace")}</paper-checkbox>
1387
- <paper-input id="namespace" name="namespace" value="${this.namespace}" label="Namespace" ?disabled="${!this.useNamespace}"
1388
- placeholder="[${$("odd.editor.namespace-placeholder")}]"
1389
- @change="${e=>this.namespace=e.composedPath()[0].value}"></paper-input>
1390
- <div class="extCssEdit">
1391
- <paper-input name="cssFile" value="${this.cssFile}" label="External CSS File"
1392
- placeholder="[External CSS file with additional class definitions]"
1393
- @change="${this._cssFileChanged}"></paper-input>
1394
- <pb-edit-xml id="editCSS"><paper-icon-button icon="create" title="${$("odd.editor.css-source")}"></paper-icon-button></pb-edit-xml>
1395
- </div>
1396
- </div>
1397
- </pb-collapse>
1398
- </paper-card>
1399
-
1400
- <!-- todo: import elementspec to make it function -->
1401
-
1402
- <div class="editingView">
1403
- <vaadin-tabs id="tabs" selected="${this.tabIndex}">
1404
- ${H(this.tabs,e=>e.id,(e,t)=>l`
1405
- <vaadin-tab name="${e}" @click="${t=>this._selectTab(t,e)}"><span style="padding-right:20px;">${e}</span><paper-icon-button icon="close" @click="${e=>this._closeTabHandler(e,t)}"></paper-icon-button></vaadin-tab>
1406
- `)}
1407
- </vaadin-tabs>
1408
-
1409
- <div id="currentElement"></div>
1410
- </div>
1411
- </section>
1412
-
1413
- </div>
1257
+ behaviour="${e.behaviour||""}"
1258
+ predicate="${e.predicate}"
1259
+ type="${e.type}"
1260
+ output="${e.output}"
1261
+ css="${e.css}"
1262
+ mode="${e.mode}"
1263
+ .model="${e}"
1264
+ .parameters="${e.parameters}"
1265
+ desc="${e.desc}"
1266
+ .sourcerend="${e.sourcerend}"
1267
+ .renditions="${e.renditions}"
1268
+ .template="${e.template}"
1269
+ .show="${e.show}"
1270
+ .endpoint="${this.endpoint}"
1271
+ .apiVersion="${this.apiVersion}"
1272
+ @model-remove="${this._removeModel}"
1273
+ @model-move-down="${this._moveModelDown}"
1274
+ @model-move-up="${this._moveModelUp}"
1275
+ @model-changed="${this.handleModelChanged}"
1276
+ @click="${e=>this.setCurrentSelection(e,t)}"
1277
+ ></pb-odd-model-editor>
1278
+ `)}
1279
+ </div>
1280
+ <pb-message id="dialog"></pb-message>
1281
+ `}addModel(e){this.models.unshift(e),this.requestUpdate()}_addModel(e){console.log("ELEMENTSPEC._addModel ",e);const t=this.shadowRoot.getElementById("addModel"),o={behaviour:"inline",css:"",mode:"",predicate:"",desc:"",type:t.selected,output:"",template:"",sourcerend:!1,models:[],parameters:[],renditions:[],show:!0},i=Array.from(this.models);i.unshift(o),this.models=i,this.dispatchEvent(new CustomEvent("element-spec-changed",{composed:!0,bubbles:!0,detail:{action:"models",ident:this.ident,models:this.models}})),t.selected="",this.requestUpdate()}_remove(e){this.dispatchEvent(new CustomEvent("element-spec-removed",{composed:!0,bubbles:!0,detail:{target:this}}))}_paste(e){console.log("_paste ",e),this.dispatchEvent(new CustomEvent("odd-paste",{composed:!0,bubbles:!0,detail:{target:this}}))}setCurrentSelection(e,t){e.preventDefault(),e.stopPropagation(),this._setCurrentSelection(t,e.target)}_setCurrentSelection(e,t){const o=this.shadowRoot.querySelectorAll("pb-odd-model-editor")[e];o&&(o.hasAttribute("currentselection")||(this.dispatchEvent(new CustomEvent("current-changed",{composed:!0,bubbles:!0,detail:{target:t}})),this.requestUpdate()))}_removeModel(e){console.log("_removeModel ",e),e.stopPropagation();const{model:t}=e.target,o=this.models.indexOf(t);this.shadowRoot.getElementById("dialog").confirm(S("odd.editor.model.delete-model-label"),S("odd.editor.model.delete-model-message")).then(()=>{const e=Array.from(this.models);e.splice(o,1),this.models=e,this.dispatchEvent(new CustomEvent("element-spec-changed",{composed:!0,bubbles:!0,detail:{action:"models",ident:this.ident,models:this.models}}))},()=>null)}_moveModelDown(e){console.log("ELEMENTSPEC._moveModelDown ",e),e.stopPropagation();const{model:t}=e.target,o=this.models.indexOf(t);if(o===this.models.length)return;const i=Array.from(this.models);i.splice(o,1),i.splice(o+1,0,t),this.models=i;const s=this.shadowRoot.querySelectorAll("pb-odd-model-editor")[o+1];s&&(this._setCurrentSelection(o+1,s),this.dispatchEvent(new CustomEvent("element-spec-changed",{composed:!0,bubbles:!0,detail:{action:"models",ident:this.ident,models:this.models}})))}_moveModelUp(e){e.stopPropagation();const{model:t}=e.target,o=this.models.indexOf(t);if(0===o)return;const i=Array.from(this.models);i.splice(o,1),i.splice(o-1,0,t),this.models=i;const s=this.shadowRoot.querySelectorAll("pb-odd-model-editor")[o-1];this._setCurrentSelection(o-1,s),this.dispatchEvent(new CustomEvent("element-spec-changed",{composed:!0,bubbles:!0,detail:{action:"models",ident:this.ident,models:this.models}}))}handleModelChanged(e){e.stopPropagation();const t=this.models.indexOf(e.detail.oldModel),o=Array.from(this.models);o.splice(t,1,e.detail.newModel),this.models=o,this.dispatchEvent(new CustomEvent("element-spec-changed",{composed:!0,bubbles:!0,detail:{action:"models",ident:this.ident,models:this.models}})),this.requestUpdate()}}customElements.define("pb-odd-elementspec-editor",se);class re extends(b(p(a))){static get styles(){return n`
1282
+ :host {
1283
+ display: flex;
1284
+ /*margin: 30px 20px;*/
1285
+ margin: 0;
1286
+ padding: 0;
1287
+ height: auto;
1288
+ }
1289
+
1290
+ #layout {
1291
+ width: 100%;
1292
+ display: grid;
1293
+ grid-template-columns: auto 1fr;
1294
+ grid-template-rows: auto 1fr;
1295
+ }
1296
+
1297
+ #drawer {
1298
+ grid-column: 1 / 1;
1299
+ min-width: 320px;
1300
+ }
1301
+
1302
+ #navlist {
1303
+ grid-column: 1 / 1;
1304
+ grid-row: 2 / 2;
1305
+ overflow: auto;
1306
+ height: 100%;
1307
+ }
1308
+
1309
+ .specs {
1310
+ grid-column: 2 / 2;
1311
+ grid-row: 1 / span 2;
1312
+ overflow: auto;
1313
+ }
1314
+
1315
+ section {
1316
+ padding: 20px;
1317
+ }
1318
+
1319
+ h3,
1320
+ h4 {
1321
+ font-family: var(--pb-heading-font-family);
1322
+ font-weight: var(--pb-heading-font-weight);
1323
+ line-height: var(--pb-heading-line-height);
1324
+ }
1325
+
1326
+ /* ported over but not checked yet */
1327
+
1328
+ .specs {
1329
+ padding: 6px;
1330
+ }
1331
+
1332
+ .metadata {
1333
+ display: block;
1334
+ }
1335
+
1336
+ .metadata div {
1337
+ padding: 0 16px 16px;
1338
+ }
1339
+
1340
+ .metadata paper-input {
1341
+ margin-bottom: 10px;
1342
+ }
1343
+
1344
+ .metadata .extCssEdit {
1345
+ display: flex;
1346
+ align-items: center;
1347
+ padding: 0;
1348
+ }
1349
+ .metadata .extCssEdit paper-input {
1350
+ flex: 2;
1351
+ }
1352
+ .metadata .extCssEdit pb-edit-xml {
1353
+ width: 40px;
1354
+ }
1355
+
1356
+ #jump-to {
1357
+ margin-top: 1em;
1358
+ }
1359
+
1360
+ odd-model {
1361
+ border-bottom: 1px solid #e0e0e0;
1362
+ }
1363
+ odd-model h4 {
1364
+ margin-top: 15px;
1365
+ padding-top: 5px;
1366
+ border-top: 1px solid #e0e0e0;
1367
+ }
1368
+ .renditions {
1369
+ margin-top: 10px;
1370
+ }
1371
+ .icons {
1372
+ display: inline-block;
1373
+ white-space: nowrap;
1374
+ }
1414
1375
 
1376
+ /* todo: this doesn't work - should refactor to have the complete trigger exposed here (move out of pb-collapse) */
1377
+ pb-collapse#meta ::slotted(.collapse-trigger) {
1378
+ /*height:56px;*/
1379
+ }
1380
+
1381
+ iron-collapse {
1382
+ --iron-collapse-transition-duration: 0.8s;
1383
+ }
1415
1384
 
1416
- <pb-message id="dialog" hidden></pb-message>
1417
- <pb-message id="errorMsg"></pb-message>
1418
- `}firstUpdated(e){this.shadowRoot.getElementById("useNamespace").checked=this.useNamespace,this.jumpCtrl=this.shadowRoot.getElementById("jumpTo"),this.jumpCtrl.addEventListener("autocomplete-selected",this.jumpTo.bind(this));const t=this.querySelector("odd-selector");this.odd&&t&&(t.selected=this.odd,t.addEventListener("odd-selected",e=>{confirm("Any unsaved changes will be lost. Continue?")&&(this.odd=e.detail.odd,window.history.pushState({},"","?odd="+this.odd)),t.selected=this.odd})),this.addEventListener("current-changed",this._changeSelection),this.addEventListener("odd-copy",e=>this._copy(e)),this.addEventListener("odd-paste",e=>this._paste(e)),this.addEventListener("element-spec-removed",this.removeElementSpec.bind(this)),window.addEventListener("beforeunload",()=>"Any unsaved changes will be lost. Continue?"),this.subscribeTo("pb-login",e=>{this.loggedIn=null!=e.detail.user}),this.focus(),this.loadContent=this.shadowRoot.getElementById("loadContent"),this.rootPath=this.getAttribute("root-path"),c("pb-page-ready",()=>{this.load(),this.inited=!0}),this.registerHotkey("save",()=>this.save(!1))}setUseNamespace(){this.useNamespace=this.shadowRoot.getElementById("useNamespace").checked}async load(){if(this.loading)return;if(this.loading=!0,""===this.rootPath||""===this.odd)return;this.elementSpecs=[],document.dispatchEvent(new CustomEvent("pb-start-update"));this.shadowRoot.getElementById("editSource").setPath(this.rootPath+"/"+this.odd);const e={odd:this.odd,root:this.rootPath};this.loadContent.params=e,this.loadContent.url=`${this.getEndpoint()}/${this.lessThanApiVersion("1.0.0")?"modules/editor.xql":"api/odd/"+this.odd}`;const t=this.loadContent.generateRequest();this._hasChanges=!1,t.completes.then(e=>this.handleOdd(e))}handleOdd(e){const t=e.response;if(this.loggedIn=t.canWrite,this.source=t.source,this.title=t.title,this.titleShort=t.titleShort,this.description=t.description,this.cssFile=null==t.cssFile?"":t.cssFile,this.namespace=null!=t.namespace?t.namespace:"",this.useNamespace=null!=t.namespace,this.cssFile){this.shadowRoot.getElementById("editCSS").setPath(this.rootPath+"/"+this.cssFile)}this.elementSpecs=t.elementSpecs.map(e=>this.mapElementSpec(e)),this._updateAutoComplete(),this.requestUpdate(),this.loading=!1,document.dispatchEvent(new CustomEvent("pb-end-update")),document.title=this.titleShort||this.title}_updateAutoComplete(){this.shadowRoot.getElementById("jumpTo").source=this.elementSpecs.map(this._specMapper)}_cssFileChanged(e){if(this.cssFile=e.composedPath()[0].value,this.cssFile){this.shadowRoot.getElementById("editCSS").setPath(this.rootPath+"/"+this.cssFile)}}_navlistActiveChanged(e,t){this.selectedNavIndex=t,this.requestUpdate()}_returnTabs(){return this.tabs}_selectTab(e,t){const o=this.elementSpecs.find(e=>e.ident===t);this._updateElementspec(o)}_openElementSpec(e,t){console.log("_openElementSpec ",e,t);const o=this.elementSpecs[t];this._updateElementspec(o);const i=o.ident;if(this.tabs.indexOf(i)>=0)return this.tabIndex=this.tabs.indexOf(i),void this.requestUpdate();this.tabs.push(i),this.tabIndex=this.tabs.length-1,this.requestUpdate()}_updateElementspec(e){const t=this.shadowRoot.getElementById("currentElement");t.innerHTML="";const o=new se;o.addEventListener("element-spec-changed",this.handleElementSpecChanged.bind(this)),o.ident=e.ident,o.models=e.models,o.mode=e.mode,o.endpoint=this._endpoint,o.apiVersion=this._apiVersion,o.hotkeys=this.hotkeys,t.appendChild(o)}_closeTabHandler(e,t){return console.log("_closeTabHandler ",t),e.preventDefault(),e.stopPropagation(),this._closeTab(t),!1}_closeTab(e){if(this.tabs.splice(e,1),0===this.tabs.length)this.shadowRoot.getElementById("currentElement").innerHTML="",this.tabIndex=0,this.tabs=[];else if(this.tabIndex>0&&this.tabIndex>=e){this.tabIndex-=1;const e=this.tabs[this.tabIndex];this._selectTab(null,e)}}attributeChangedCallback(e,t,o){super.attributeChangedCallback(e,t,o),"odd"==e&&t!==o&&this.inited&&this.load()}static get replaceCharMap(){return{'"':"&quot;","&":"&amp;","<":"&lt;",">":"&gt;"}}static get replaceCharRegexp(){return/"|&|<|>/g}static replaceChars(e){return re.replaceCharMap[e]}jumpTo(e){const t="#es_"+this.shadowRoot.getElementById("jumpTo").text,o=this.shadowRoot.querySelector(t);o&&(this.jumpCtrl.clear(),o.click())}_computedTitle(){return this.odd?this.title||this.titleShort||this.odd||"Loading ...":""}_copy(e){this.clipboard=e.detail.model;const t=JSON.parse(JSON.stringify(e.detail.model));this.clipboard=t}_paste(e){if(console.log("_paste ",e),console.log("_paste clipboard",this.clipboard),this.clipboard=={}||null==this.clipboard)return;const t=e.detail.target;t.addModel(this.clipboard),t.render()}_specMapper(e){return{text:e.ident,value:e.ident}}_specObserver(e){const t=this.elementSpecs.map(this._specMapper);this.jumpCtrl.source=t}mapElementSpec(e){return Object.assign({},e,{models:e.models.map(e=>this.addShowToModel(e))})}addShowToModel(e){if(e.models){const t=e.models.map(e=>this.addShowToModel(e));return Object.assign({},e,{models:t,show:!1})}return Object.assign({},e,{show:!1})}addElementSpec(e){const t=this.shadowRoot.getElementById("identNew").value;if(!t||0===t.length)return;if(this.elementSpecs.find(e=>e.ident===t)){console.log("<pb-odd-editor> element spec to be added already exists: %s",t);const e="#es_"+t,o=this.shadowRoot.querySelector(e);if(!o)return;return void o.click()}const o={action:"find",odd:this.odd,root:this.rootPath,ident:t},i={root:this.rootPath,ident:t},s=this.lessThanApiVersion("1.0.0")?o:i;this.loadContent.params=s,this.loadContent.url=`${this.getEndpoint()}/${this.lessThanApiVersion("1.0.0")?"modules/editor.xql":"api/odd/"+this.odd}`,this.loadContent.generateRequest().completes.then(this._handleElementSpecResponse.bind(this))}_handleElementSpecResponse(e){const t=this.shadowRoot.getElementById("identNew"),o=e.response,i=t.value,s={ident:i,mode:"not-found"===o.status?"add":"change",models:o.models||[]};this.elementSpecs.unshift(s),t.value="",this.tabs.push(i),this.tabIndex=this.tabs.length-1,this.elementSpecs.sort((e,t)=>e.ident.localeCompare(t.ident)),this.requestUpdate().then(()=>{const e=this.shadowRoot.querySelectorAll("paper-item"),t=this.elementSpecs.indexOf(s);this._updateAutoComplete(),e[t].click(),e[t].focus()})}removeElementSpec(e){const t=e.detail.target.ident;this.shadowRoot.getElementById("dialog").confirm(S("browse.delete"),S("odd.editor.delete-spec",{ident:t})).then(()=>{const e=this.elementSpecs.findIndex(e=>e.ident===t);this.elementSpecs.splice(e,1),this.requestUpdate();const o=this.shadowRoot.querySelector("vaadin-tab[selected]").getAttribute("name"),i=this.tabs.indexOf(o);this._closeTab(i)},()=>null)}serializeOdd(){const e=this.useNamespace?` ns="${this.namespace}"`:"",t=this.source?` source="${this.source}"`:"",o=this.description?` <desc>${this.description}</desc>`:"";return`<schemaSpec xmlns="http://www.tei-c.org/ns/1.0" xmlns:pb="http://teipublisher.com/1.0"${e}${t}>\n${`${this.indentString}<title>${this.title}${o}</title>\n`}${this.titleShort?`${this.indentString}<title type="short">${this.titleShort}</title>\n`:""}${this.cssFile?`${this.indentString}<rendition source="${this.cssFile}"/>\n`:""}\n${this.elementSpecs.map(e=>this.serializeElementSpec(this.indentString,e)).join("")}</schemaSpec>\n`}serializeElementSpec(e,t){const o=t.mode?` mode="${t.mode}"`:"",i=e+this.indentString,s=t.models.map(e=>this.serializeModel(i,e)).join("");return`${e}<elementSpec ident="${t.ident}"${o}>\n${s}${e}</elementSpec>\n`}serializeModel(e,t){if("model"===t.type&&!t.behaviour)return"";const o=e+this.indentString,i=[this.serializeAttribute("output",t.output),this.serializeAttribute("predicate",t.predicate),"model"===t.type?this.serializeAttribute("behaviour",t.behaviour):"",this.serializeAttribute("cssClass",t.css),this.serializeAttribute("useSourceRendition",t.sourcerend),this.serializeAttribute("pb:mode",t.mode)].join(""),s=t.desc?o+"<desc>"+t.desc+"</desc>\n":"",r=t.models.map(e=>this.serializeModel(o,e)).join(""),a=t.parameters.map(e=>this.serializeParameter(o,e)).join(""),n=t.renditions.map(e=>this.serializeRendition(o,e)).join(""),l=`${s}${r}${a}${re.serializeTemplate(o,t.template)}${n}`,d=l.length>0?`>\n${l}${e}</${t.type}`:"/";return`${e}<${t.type}${i}${d}>\n`}serializeParameter(e,t){if(!t.name)return"";const o=this.serializeAttribute("name",t.name),i=this.serializeAttribute("value",t.value);return t.set?`${e}<pb:set-param xmlns=""${o}${i}/>\n`:`${e}<param${o}${i}/>\n`}serializeRendition(e,t){return`${e}<outputRendition xml:space="preserve" ${t.scope&&"null"!==t.scope?this.serializeAttribute("scope",t.scope):""}>\n${e}${re.escape(t.css)}\n${e}</outputRendition>\n`}static serializeTemplate(e,t){return t?`${e}<pb:template xml:space="preserve" xmlns="">${t}</pb:template>\n`:""}serializeAttribute(e,t){return t?` ${e}="${re.escape(t)}"`:""}static escape(e){return e?"string"==typeof e?e.replace(re.replaceCharRegexp,re.replaceChars):e:""}save(e=!1){document.dispatchEvent(new CustomEvent("pb-start-update"));const t=this.serializeOdd();this.shadowRoot.getElementById("dialog").show(S("odd.editor.save"),S("odd.editor.saving"));const o=this.shadowRoot.getElementById("saveOdd");o.url=`${this.getEndpoint()}/${this.lessThanApiVersion("1.0.0")?"modules/editor.xql":"api/odd/"+this.odd}`,this.lessThanApiVersion("1.0.0")?(o.contentType="application/x-www-form-urlencoded",o.method="POST",o.params=null,o.body={action:"save",root:this.rootPath,"output-prefix":this.outputPrefix,"output-root":this.outputRoot,odd:this.odd,data:t}):(o.contentType="application/xml",o.method="PUT",o.params={root:this.rootPath,"output-prefix":this.outputPrefix,"output-root":this.outputRoot},o.body=t);o.generateRequest().completes.then(t=>{this.handleSaveComplete(t,e)}).catch(this.handleSaveError.bind(this))}static _renderReport(e){return e.error?`\n <div class="list-group-item-danger">\n <h4 class="list-group-item-heading">${e.file}</h4>\n <h5 class="list-group-item-heading">Compilation error on line ${e.line}:</h5>\n <pre class="list-group-item-text">${e.error}</pre>\n <pre class="list-group-item-text">${e.message}</pre>\n </div>\n `:`\n <div class="list-group-item-success">\n <p class="list-group-item-text">Generated ${e.file}</p>\n </div>\n `}handleSaveComplete(e,t=!1){const o=e.response;if("denied"===o.status)return this.shadowRoot.getElementById("dialog").set(S("odd.editor.denied"),S("odd.editor.denied-message",{odd:this.odd})),void document.dispatchEvent(new CustomEvent("pb-end-update"));let i;if(this.lessThanApiVersion("1.0.0")){i=`<div class="list-group">${o.report.map(re._renderReport).join("")}</div>`}else{i=`<div class="list-group">${o.report}</div>`}if(this.shadowRoot.getElementById("dialog").set(S("odd.editor.saved"),i),this._hasChanges=!1,document.dispatchEvent(new CustomEvent("pb-end-update")),t){A(new Blob([o.source],{type:"application/xml"}),{fileName:this.odd,extensions:[".odd"]}).then(()=>console.log(`<pb-odd-editor> ${this.odd} exported`),()=>console.log("<pb-odd-editor> export aborted"))}}handleSaveError(e){this.shadowRoot.getElementById("dialog").set("Error",e.error),document.dispatchEvent(new CustomEvent("pb-end-update"))}_reload(){this.shadowRoot.getElementById("dialog").confirm(S("odd.editor.reload"),S("odd.editor.reload-confirm")).then(()=>{this.load(),this.tabs=[],this.tabIndex=0,this.shadowRoot.getElementById("currentElement").innerHTML=""},()=>null)}_setCurrentSelection(e){null!=this.currentSelection&&this.currentSelection.removeAttribute("currentselection"),this.currentSelection=e.target,this.currentSelection.setAttribute("currentselection","true")}_changeSelection(e){if(e.preventDefault(),e.stopPropagation(),e.detail.target===this)return;let t;this.currentSelection&&void 0!==this.currentSelection.tagName&&this.currentSelection.removeAttribute("currentselection"),t=e.detail.target?e.detail.target:e.target,t.setAttribute("currentselection","true"),this.currentSelection=t}_selectElementspec(e){this.currentElementSpec&&"PB-ODD-ELEMENTSPEC-EDITOR"===this.currentElementSpec.tagName&&this.currentElementSpec.removeAttribute("currentselection");const t=e.target;t.setAttribute("currentselection","true"),this.currentElementSpec=t}nsDisabled(){return!this.useNamespace}_handleLoadError(e){console.log("loading error occurred: ",e);const t=this.shadowRoot.getElementById("errorMsg");t.style.background="red";const o=this.shadowRoot.getElementById("loadContent").url;console.log("url ",o),t.show("Error: ","ODD file could not be loaded from "+o)}handleElementSpecChanged(e){this._hasChanges=!0;const t=this.elementSpecs.find(t=>t.ident===e.detail.ident),o=this.elementSpecs.indexOf(t),i=Object.assign({},t,{models:e.detail.models}),s=Array.from(this.elementSpecs);s.splice(o,1,i),this.elementSpecs=s}_inputTitle(e){this.title=e.composedPath()[0].value}}customElements.define("pb-odd-editor",re);export{re as PbOddEditor};
1385
+ pb-message#errorMsg {
1386
+ background: var(--paper-red-500);
1387
+ color: white;
1388
+ }
1389
+ .card-content {
1390
+ height: 100%;
1391
+ overflow: auto;
1392
+ }
1393
+
1394
+ paper-tab {
1395
+ width: 100px;
1396
+ }
1397
+
1398
+ .editingView {
1399
+ width: 100%;
1400
+ }
1401
+
1402
+ vaadin-tabs {
1403
+ margin-top: 10px;
1404
+ }
1405
+
1406
+ vaadin-tab {
1407
+ background: var(--paper-grey-200);
1408
+ padding: 0 6px;
1409
+ border: thin solid var(--paper-grey-300);
1410
+ border-bottom: none;
1411
+ }
1412
+ vaadin-tab[selected] {
1413
+ background: white;
1414
+ border-top-right-radius: 20px;
1415
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12),
1416
+ 0 3px 1px -2px rgba(0, 0, 0, 0.2);
1417
+ }
1418
+ `}static get properties(){return Object.assign(Object.assign({},super.properties),{},{ident:{type:String},mode:{type:String},models:{type:Array},odd:{type:String,reflect:!0},elementSpecs:{type:Array},source:{type:String},title:{type:String},titleShort:{type:String,reflect:!0,attribute:"title-short"},description:{type:String},namespace:{type:String},rootPath:{type:String,attribute:"root-path"},loading:{type:Boolean},indentString:{type:String},outputPrefix:{type:String,attribute:"output-prefix"},outputRoot:{type:String,attribute:"output-root"},currentSelection:{type:Object},useNamespace:{type:Boolean},loggedIn:{type:Boolean},tabs:{type:Array},tabIndex:{type:Number,reflect:!0}})}constructor(){super(),this.ident="",this.mode="",this.models=()=>[],this.odd="",this.elementSpecs=[],this.source="",this.title="",this.titleShort="",this.description="",this.namespace="",this.rootPath="",this.loading=!1,this.indentString=" ",this.outputPrefix="",this.outputRoot="",this.currentSelection={},this.useNamespace=!1,this.loggedIn=!0,this.tabs=[],this.tabIndex=void 0,this.selectedNavIndex=0,this.cssFile="",this.hotkeys={save:"ctrl+shift+s,command+shift+s"},this._hasChanges=!1}render(){return l`
1419
+ <iron-ajax
1420
+ id="loadContent"
1421
+ handle-as="json"
1422
+ content-type="application/x-www-form-urlencoded"
1423
+ with-credentials
1424
+ method="GET"
1425
+ ></iron-ajax>
1426
+
1427
+ <iron-ajax id="saveOdd" handle-as="json" with-credentials></iron-ajax>
1428
+
1429
+ <div id="layout">
1430
+ <div id="drawer">
1431
+ <slot id="slot"></slot>
1432
+ <h3>
1433
+ <span>${this.odd}</span>
1434
+
1435
+ <span class="icons">
1436
+ <pb-edit-xml id="editSource"
1437
+ ><paper-icon-button
1438
+ icon="code"
1439
+ title="${E("odd.editor.odd-source")}"
1440
+ ></paper-icon-button
1441
+ ></pb-edit-xml>
1442
+ <paper-icon-button
1443
+ @click="${()=>this.save(!0)}"
1444
+ icon="icons:cloud-download"
1445
+ title="${E(k?"odd.editor.save-as":"odd.editor.download")}"
1446
+ ></paper-icon-button>
1447
+ <paper-icon-button
1448
+ @click="${this._reload}"
1449
+ icon="refresh"
1450
+ title="${E("odd.editor.reload")}"
1451
+ ></paper-icon-button>
1452
+ <paper-icon-button
1453
+ @click="${()=>this.save(!1)}"
1454
+ icon="save"
1455
+ title="${E("odd.editor.save")} ${this.display("save")}"
1456
+ ?disabled="${!this.loggedIn}"
1457
+ ></paper-icon-button>
1458
+ </span>
1459
+ </h3>
1460
+ <div id="new-element" class="input-group">
1461
+ <paper-input
1462
+ id="identNew"
1463
+ label="${E("odd.editor.add-element")}"
1464
+ always-float-label="always-float-label"
1465
+ >
1466
+ <paper-icon-button
1467
+ slot="suffix"
1468
+ @click="${this.addElementSpec}"
1469
+ icon="add"
1470
+ tabindex="-1"
1471
+ ></paper-icon-button>
1472
+ </paper-input>
1473
+ </div>
1474
+
1475
+ <div id="jump-to">
1476
+ <paper-autocomplete
1477
+ id="jumpTo"
1478
+ label="${E("odd.editor.jump-to")}"
1479
+ always-float-label="always-float-label"
1480
+ ></paper-autocomplete>
1481
+ </div>
1482
+
1483
+ <h3>${E("odd.editor.specs")}</h3>
1484
+ </div>
1485
+ <div id="navlist">
1486
+ ${H(this.elementSpecs,e=>e.ident,(e,t)=>l`
1487
+ <paper-item
1488
+ id="es_${e.ident}"
1489
+ index="${t}"
1490
+ @click="${e=>this._openElementSpec(e,t)}"
1491
+ >${e.ident}</paper-item
1492
+ >
1493
+ `)}
1494
+ </div>
1495
+ <section class="specs" id="specs">
1496
+ <paper-card class="metadata">
1497
+ <pb-collapse id="meta">
1498
+ <h4 slot="collapse-trigger" class="panel-title">${this._computedTitle()}</h4>
1499
+ <div slot="collapse-content">
1500
+ <paper-input
1501
+ id="title"
1502
+ name="title"
1503
+ value="${this.title}"
1504
+ label="${E("odd.editor.title")}"
1505
+ placeholder="[${E("odd.editor.title-placeholder")}]"
1506
+ @change="${this._inputTitle}"
1507
+ ></paper-input>
1508
+ <paper-input
1509
+ id="titleShort"
1510
+ name="short-title"
1511
+ .value="${this.titleShort}"
1512
+ label="${E("odd.editor.title-short")}"
1513
+ placeholder="[${E("odd.editor.title-short-placeholder")}]"
1514
+ @change="${e=>this.titleShort=e.composedPath()[0].value}"
1515
+ ></paper-input>
1516
+ <paper-input
1517
+ id="description"
1518
+ name="description"
1519
+ .value="${W(this.description)}"
1520
+ label="${E("odd.editor.description-label")}"
1521
+ placeholder="[${E("odd.editor.description-placeholder")}]"
1522
+ @change="${e=>this.description=e.composedPath()[0].value}"
1523
+ ></paper-input>
1524
+ <paper-input
1525
+ id="source"
1526
+ name="source"
1527
+ ?value="${this.source}"
1528
+ label="${E("odd.editor.source-label")}"
1529
+ placeholder="[${E("odd.editor.source-placeholder")}]"
1530
+ @change="${e=>this.source=e.composedPath()[0].value}"
1531
+ ></paper-input>
1532
+ <paper-checkbox id="useNamespace" @change="${this.setUseNamespace}"
1533
+ >${E("odd.editor.use-namespace")}</paper-checkbox
1534
+ >
1535
+ <paper-input
1536
+ id="namespace"
1537
+ name="namespace"
1538
+ value="${this.namespace}"
1539
+ label="Namespace"
1540
+ ?disabled="${!this.useNamespace}"
1541
+ placeholder="[${E("odd.editor.namespace-placeholder")}]"
1542
+ @change="${e=>this.namespace=e.composedPath()[0].value}"
1543
+ ></paper-input>
1544
+ <div class="extCssEdit">
1545
+ <paper-input
1546
+ name="cssFile"
1547
+ value="${this.cssFile}"
1548
+ label="External CSS File"
1549
+ placeholder="[External CSS file with additional class definitions]"
1550
+ @change="${this._cssFileChanged}"
1551
+ ></paper-input>
1552
+ <pb-edit-xml id="editCSS"
1553
+ ><paper-icon-button
1554
+ icon="create"
1555
+ title="${E("odd.editor.css-source")}"
1556
+ ></paper-icon-button
1557
+ ></pb-edit-xml>
1558
+ </div>
1559
+ </div>
1560
+ </pb-collapse>
1561
+ </paper-card>
1562
+
1563
+ <!-- todo: import elementspec to make it function -->
1564
+
1565
+ <div class="editingView">
1566
+ <vaadin-tabs id="tabs" selected="${this.tabIndex}">
1567
+ ${H(this.tabs,e=>e.id,(e,t)=>l`
1568
+ <vaadin-tab name="${e}" @click="${t=>this._selectTab(t,e)}"
1569
+ ><span style="padding-right:20px;">${e}</span
1570
+ ><paper-icon-button
1571
+ icon="close"
1572
+ @click="${e=>this._closeTabHandler(e,t)}"
1573
+ ></paper-icon-button
1574
+ ></vaadin-tab>
1575
+ `)}
1576
+ </vaadin-tabs>
1577
+
1578
+ <div id="currentElement"></div>
1579
+ </div>
1580
+ </section>
1581
+ </div>
1582
+
1583
+ <pb-message id="dialog" hidden></pb-message>
1584
+ <pb-message id="errorMsg"></pb-message>
1585
+ `}firstUpdated(e){this.shadowRoot.getElementById("useNamespace").checked=this.useNamespace,this.jumpCtrl=this.shadowRoot.getElementById("jumpTo"),this.jumpCtrl.addEventListener("autocomplete-selected",this.jumpTo.bind(this));const t=this.querySelector("odd-selector");this.odd&&t&&(t.selected=this.odd,t.addEventListener("odd-selected",e=>{confirm("Any unsaved changes will be lost. Continue?")&&(this.odd=e.detail.odd,window.history.pushState({},"","?odd="+this.odd)),t.selected=this.odd})),this.addEventListener("current-changed",this._changeSelection),this.addEventListener("odd-copy",e=>this._copy(e)),this.addEventListener("odd-paste",e=>this._paste(e)),this.addEventListener("element-spec-removed",this.removeElementSpec.bind(this)),window.addEventListener("beforeunload",()=>"Any unsaved changes will be lost. Continue?"),this.subscribeTo("pb-login",e=>{this.loggedIn=null!=e.detail.user}),this.focus(),this.loadContent=this.shadowRoot.getElementById("loadContent"),this.rootPath=this.getAttribute("root-path"),c("pb-page-ready",()=>{this.load(),this.inited=!0}),this.registerHotkey("save",()=>this.save(!1))}setUseNamespace(){this.useNamespace=this.shadowRoot.getElementById("useNamespace").checked}async load(){if(this.loading)return;if(this.loading=!0,""===this.rootPath||""===this.odd)return;this.elementSpecs=[],document.dispatchEvent(new CustomEvent("pb-start-update"));this.shadowRoot.getElementById("editSource").setPath(`${this.rootPath}/${this.odd}`);const e={odd:this.odd,root:this.rootPath};this.loadContent.params=e,this.loadContent.url=`${this.getEndpoint()}/${this.lessThanApiVersion("1.0.0")?"modules/editor.xql":"api/odd/"+this.odd}`;const t=this.loadContent.generateRequest();this._hasChanges=!1,t.completes.then(e=>this.handleOdd(e))}handleOdd(e){const t=e.response;if(this.loggedIn=t.canWrite,this.source=t.source,this.title=t.title,this.titleShort=t.titleShort,this.description=t.description,this.cssFile=null==t.cssFile?"":t.cssFile,this.namespace=null!=t.namespace?t.namespace:"",this.useNamespace=null!=t.namespace,this.cssFile){this.shadowRoot.getElementById("editCSS").setPath(`${this.rootPath}/${this.cssFile}`)}this.elementSpecs=t.elementSpecs.map(e=>this.mapElementSpec(e)),this._updateAutoComplete(),this.requestUpdate(),this.loading=!1,document.dispatchEvent(new CustomEvent("pb-end-update")),document.title=this.titleShort||this.title}_updateAutoComplete(){this.shadowRoot.getElementById("jumpTo").source=this.elementSpecs.map(this._specMapper)}_cssFileChanged(e){if(this.cssFile=e.composedPath()[0].value,this.cssFile){this.shadowRoot.getElementById("editCSS").setPath(`${this.rootPath}/${this.cssFile}`)}}_navlistActiveChanged(e,t){this.selectedNavIndex=t,this.requestUpdate()}_returnTabs(){return this.tabs}_selectTab(e,t){const o=this.elementSpecs.find(e=>e.ident===t);this._updateElementspec(o)}_openElementSpec(e,t){console.log("_openElementSpec ",e,t);const o=this.elementSpecs[t];this._updateElementspec(o);const{ident:i}=o;if(this.tabs.indexOf(i)>=0)return this.tabIndex=this.tabs.indexOf(i),void this.requestUpdate();this.tabs.push(i),this.tabIndex=this.tabs.length-1,this.requestUpdate()}_updateElementspec(e){const t=this.shadowRoot.getElementById("currentElement");t.innerHTML="";const o=new se;o.addEventListener("element-spec-changed",this.handleElementSpecChanged.bind(this)),o.ident=e.ident,o.models=e.models,o.mode=e.mode,o.endpoint=this._endpoint,o.apiVersion=this._apiVersion,o.hotkeys=this.hotkeys,t.appendChild(o)}_closeTabHandler(e,t){return console.log("_closeTabHandler ",t),e.preventDefault(),e.stopPropagation(),this._closeTab(t),!1}_closeTab(e){if(this.tabs.splice(e,1),0===this.tabs.length)this.shadowRoot.getElementById("currentElement").innerHTML="",this.tabIndex=0,this.tabs=[];else if(this.tabIndex>0&&this.tabIndex>=e){this.tabIndex-=1;const e=this.tabs[this.tabIndex];this._selectTab(null,e)}}attributeChangedCallback(e,t,o){super.attributeChangedCallback(e,t,o),"odd"==e&&t!==o&&this.inited&&this.load()}static get replaceCharMap(){return{'"':"&quot;","&":"&amp;","<":"&lt;",">":"&gt;"}}static get replaceCharRegexp(){return/"|&|<|>/g}static replaceChars(e){return re.replaceCharMap[e]}jumpTo(e){const t="#es_"+this.shadowRoot.getElementById("jumpTo").text,o=this.shadowRoot.querySelector(t);o&&(this.jumpCtrl.clear(),o.click())}_computedTitle(){return this.odd?this.title||this.titleShort||this.odd||"Loading ...":""}_copy(e){this.clipboard=e.detail.model;const t=JSON.parse(JSON.stringify(e.detail.model));this.clipboard=t}_paste(e){if(console.log("_paste ",e),console.log("_paste clipboard",this.clipboard),this.clipboard=={}||null==this.clipboard)return;const t=e.detail.target;t.addModel(this.clipboard),t.render()}_specMapper(e){return{text:e.ident,value:e.ident}}_specObserver(e){const t=this.elementSpecs.map(this._specMapper);this.jumpCtrl.source=t}mapElementSpec(e){return Object.assign(Object.assign({},e),{},{models:e.models.map(e=>this.addShowToModel(e))})}addShowToModel(e){if(e.models){const t=e.models.map(e=>this.addShowToModel(e));return Object.assign(Object.assign({},e),{},{models:t,show:!1})}return Object.assign(Object.assign({},e),{},{show:!1})}addElementSpec(e){const t=this.shadowRoot.getElementById("identNew").value;if(!t||0===t.length)return;if(this.elementSpecs.find(e=>e.ident===t)){console.log("<pb-odd-editor> element spec to be added already exists: %s",t);const e="#es_"+t,o=this.shadowRoot.querySelector(e);if(!o)return;return void o.click()}const o={action:"find",odd:this.odd,root:this.rootPath,ident:t},i={root:this.rootPath,ident:t},s=this.lessThanApiVersion("1.0.0")?o:i;this.loadContent.params=s,this.loadContent.url=`${this.getEndpoint()}/${this.lessThanApiVersion("1.0.0")?"modules/editor.xql":"api/odd/"+this.odd}`;this.loadContent.generateRequest().completes.then(this._handleElementSpecResponse.bind(this))}_handleElementSpecResponse(e){const t=this.shadowRoot.getElementById("identNew"),o=e.response,i=t.value,s={ident:i,mode:"not-found"===o.status?"add":"change",models:o.models||[]};this.elementSpecs.unshift(s),t.value="",this.tabs.push(i),this.tabIndex=this.tabs.length-1,this.elementSpecs.sort((e,t)=>e.ident.localeCompare(t.ident)),this.requestUpdate().then(()=>{const e=this.shadowRoot.querySelectorAll("paper-item"),t=this.elementSpecs.indexOf(s);this._updateAutoComplete(),e[t].click(),e[t].focus()})}removeElementSpec(e){const{ident:t}=e.detail.target;this.shadowRoot.getElementById("dialog").confirm(S("browse.delete"),S("odd.editor.delete-spec",{ident:t})).then(()=>{const e=this.elementSpecs.findIndex(e=>e.ident===t);this.elementSpecs.splice(e,1),this.requestUpdate();const o=this.shadowRoot.querySelector("vaadin-tab[selected]").getAttribute("name"),i=this.tabs.indexOf(o);this._closeTab(i)},()=>null)}serializeOdd(){const e=this.useNamespace?` ns="${this.namespace}"`:"",t=this.source?` source="${this.source}"`:"",o=this.description?` <desc>${this.description}</desc>`:"";return`<schemaSpec xmlns="http://www.tei-c.org/ns/1.0" xmlns:pb="http://teipublisher.com/1.0"${e}${t}>\n${`${this.indentString}<title>${this.title}${o}</title>\n`}${this.titleShort?`${this.indentString}<title type="short">${this.titleShort}</title>\n`:""}${this.cssFile?`${this.indentString}<rendition source="${this.cssFile}"/>\n`:""}\n${this.elementSpecs.map(e=>this.serializeElementSpec(this.indentString,e)).join("")}</schemaSpec>\n`}serializeElementSpec(e,t){const o=t.mode?` mode="${t.mode}"`:"",i=e+this.indentString,s=t.models.map(e=>this.serializeModel(i,e)).join("");return`${e}<elementSpec ident="${t.ident}"${o}>\n${s}${e}</elementSpec>\n`}serializeModel(e,t){if("model"===t.type&&!t.behaviour)return"";const o=e+this.indentString,i=[this.serializeAttribute("output",t.output),this.serializeAttribute("predicate",t.predicate),"model"===t.type?this.serializeAttribute("behaviour",t.behaviour):"",this.serializeAttribute("cssClass",t.css),this.serializeAttribute("useSourceRendition",t.sourcerend),this.serializeAttribute("pb:mode",t.mode)].join(""),s=t.desc?`${o}<desc>${t.desc}</desc>\n`:"",r=t.models.map(e=>this.serializeModel(o,e)).join(""),a=t.parameters.map(e=>this.serializeParameter(o,e)).join(""),n=t.renditions.map(e=>this.serializeRendition(o,e)).join(""),l=`${s}${r}${a}${re.serializeTemplate(o,t.template)}${n}`,d=l.length>0?`>\n${l}${e}</${t.type}`:"/";return`${e}<${t.type}${i}${d}>\n`}serializeParameter(e,t){if(!t.name)return"";const o=this.serializeAttribute("name",t.name),i=this.serializeAttribute("value",t.value);return t.set?`${e}<pb:set-param xmlns=""${o}${i}/>\n`:`${e}<param${o}${i}/>\n`}serializeRendition(e,t){return`${e}<outputRendition xml:space="preserve" ${t.scope&&"null"!==t.scope?this.serializeAttribute("scope",t.scope):""}>\n${e}${re.escape(t.css)}\n${e}</outputRendition>\n`}static serializeTemplate(e,t){return t?`${e}<pb:template xml:space="preserve" xmlns="">${t}</pb:template>\n`:""}serializeAttribute(e,t){return t?` ${e}="${re.escape(t)}"`:""}static escape(e){return e?"string"==typeof e?e.replace(re.replaceCharRegexp,re.replaceChars):e:""}save(e=!1){document.dispatchEvent(new CustomEvent("pb-start-update"));const t=this.serializeOdd();this.shadowRoot.getElementById("dialog").show(S("odd.editor.save"),S("odd.editor.saving"));const o=this.shadowRoot.getElementById("saveOdd");o.url=`${this.getEndpoint()}/${this.lessThanApiVersion("1.0.0")?"modules/editor.xql":"api/odd/"+this.odd}`,this.lessThanApiVersion("1.0.0")?(o.contentType="application/x-www-form-urlencoded",o.method="POST",o.params=null,o.body={action:"save",root:this.rootPath,"output-prefix":this.outputPrefix,"output-root":this.outputRoot,odd:this.odd,data:t}):(o.contentType="application/xml",o.method="PUT",o.params={root:this.rootPath,"output-prefix":this.outputPrefix,"output-root":this.outputRoot},o.body=t);o.generateRequest().completes.then(t=>{this.handleSaveComplete(t,e)}).catch(this.handleSaveError.bind(this))}static _renderReport(e){return e.error?`\n <div class="list-group-item-danger">\n <h4 class="list-group-item-heading">${e.file}</h4>\n <h5 class="list-group-item-heading">Compilation error on line ${e.line}:</h5>\n <pre class="list-group-item-text">${e.error}</pre>\n <pre class="list-group-item-text">${e.message}</pre>\n </div>\n `:`\n <div class="list-group-item-success">\n <p class="list-group-item-text">Generated ${e.file}</p>\n </div>\n `}handleSaveComplete(e,t=!1){const o=e.response;if("denied"===o.status)return this.shadowRoot.getElementById("dialog").set(S("odd.editor.denied"),S("odd.editor.denied-message",{odd:this.odd})),void document.dispatchEvent(new CustomEvent("pb-end-update"));let i;if(this.lessThanApiVersion("1.0.0")){i=`<div class="list-group">${o.report.map(re._renderReport).join("")}</div>`}else{const{report:e}=o;i=`<div class="list-group">${e}</div>`}if(this.shadowRoot.getElementById("dialog").set(S("odd.editor.saved"),i),this._hasChanges=!1,document.dispatchEvent(new CustomEvent("pb-end-update")),t){A(new Blob([o.source],{type:"application/xml"}),{fileName:this.odd,extensions:[".odd"]}).then(()=>console.log(`<pb-odd-editor> ${this.odd} exported`),()=>console.log("<pb-odd-editor> export aborted"))}}handleSaveError(e){this.shadowRoot.getElementById("dialog").set("Error",e.error),document.dispatchEvent(new CustomEvent("pb-end-update"))}_reload(){this.shadowRoot.getElementById("dialog").confirm(S("odd.editor.reload"),S("odd.editor.reload-confirm")).then(()=>{this.load(),this.tabs=[],this.tabIndex=0,this.shadowRoot.getElementById("currentElement").innerHTML=""},()=>null)}_setCurrentSelection(e){null!=this.currentSelection&&this.currentSelection.removeAttribute("currentselection"),this.currentSelection=e.target,this.currentSelection.setAttribute("currentselection","true")}_changeSelection(e){if(e.preventDefault(),e.stopPropagation(),e.detail.target===this)return;let t;this.currentSelection&&void 0!==this.currentSelection.tagName&&this.currentSelection.removeAttribute("currentselection"),t=e.detail.target?e.detail.target:e.target,t.setAttribute("currentselection","true"),this.currentSelection=t}_selectElementspec(e){this.currentElementSpec&&"PB-ODD-ELEMENTSPEC-EDITOR"===this.currentElementSpec.tagName&&this.currentElementSpec.removeAttribute("currentselection");const t=e.target;t.setAttribute("currentselection","true"),this.currentElementSpec=t}nsDisabled(){return!this.useNamespace}_handleLoadError(e){console.log("loading error occurred: ",e);const t=this.shadowRoot.getElementById("errorMsg");t.style.background="red";const{url:o}=this.shadowRoot.getElementById("loadContent");console.log("url ",o),t.show("Error: ","ODD file could not be loaded from "+o)}handleElementSpecChanged(e){this._hasChanges=!0;const t=this.elementSpecs.find(t=>t.ident===e.detail.ident),o=this.elementSpecs.indexOf(t),i=Object.assign(Object.assign({},t),{},{models:e.detail.models}),s=Array.from(this.elementSpecs);s.splice(o,1,i),this.elementSpecs=s}_inputTitle(e){this.title=e.composedPath()[0].value}}customElements.define("pb-odd-editor",re);export{re as PbOddEditor};