- ${title}Ext.
+ ${title}Ext.
@@ -463,10 +636,10 @@ var addTheme = function (title, collapsed, themeid, icon, url, layersvisibility)
`);
} else {
$("#themes-list").append(
- `
+ `
+
-
-
+
+
`
);
- sortableElement("themeLayers-" + themeid, sortLayers);
+ initializeNestedSortables();
}
config.themes[themeid] = {
title: title,
@@ -494,6 +671,15 @@ var addTheme = function (title, collapsed, themeid, icon, url, layersvisibility)
};
};
+// Display groups div if at least one group in
+const displayGroupsPanel = (themeId) => {
+ if ($(`#${themeId} .group_list`).children().length !== 0) {
+ $(`#${themeId} .group_list`).removeClass("hideBlock").addClass("showBlock");
+ } else {
+ $(`#${themeId} .group_list`).removeClass("showBlock").addClass("hideBlock");
+ }
+};
+
// Only one checkbox "collapsed" checked
$("#themes-list").on("change", ".custom-control-input", function () {
if ($(this).is(":checked")) {
@@ -539,6 +725,29 @@ var saveThemes = function () {
}
};
+var saveGroups = () => {
+ const themes = $(".themes-list-item");
+ for (i = 0; i < themes.length; i++) {
+ const theme = themes[i];
+ const themeId = theme.getAttribute("data-themeid");
+ const groups = $(`#${themeId}`).find(".group-item");
+
+ for (j = 0; j < groups.length; j++) {
+ const group = groups[j];
+ const groupId = group.id;
+
+ const gr = $(`div[id="${groupId}"]`);
+ const groupName = gr.find(".group-name").val();
+
+ if (config.themes[themeId].groups) {
+ config.themes[themeId].groups.find((group) => group.id === groupId).id = groupId;
+ config.themes[themeId].groups.find((group) => group.id === groupId).name =
+ groupName;
+ }
+ }
+ }
+};
+
var editThemeExt = function (item) {
$("#themes-list .list-group-item").removeClass("active");
$(item).parent().parent().addClass("active");
@@ -571,11 +780,29 @@ var deleteTheme = function (themeid) {
delete config.themes[themeid];
};
-var deleteLayer = function (layerid, themeid) {
- var index = config.themes[themeid].layers.findIndex(function (l) {
- return l.id === layerid;
+var deleteLayer = function (layerid, themeid, groupid) {
+ if (groupid == undefined || !groupid || groupid == "undefined") {
+ var index = config.themes[themeid].layers.findIndex(function (l) {
+ return l.id === layerid;
+ });
+ config.themes[themeid].layers.splice(index, 1);
+ } else {
+ var index = config.themes[themeid].groups
+ .find((group) => group.id === groupid)
+ .layers.findIndex(function (l) {
+ return l.id === layerid;
+ });
+ config.themes[themeid].groups
+ .find((group) => group.id === groupid)
+ .layers.splice(index, 1);
+ }
+};
+
+var deleteGroup = function (groupid, themeid) {
+ var index = config.themes[themeid].groups.findIndex(function (g) {
+ return g.id === groupid;
});
- config.themes[themeid].layers.splice(index, 1);
+ config.themes[themeid].groups.splice(index, 1);
};
var createId = function (obj) {
@@ -848,6 +1075,7 @@ var getConfig = () => {
// Respect theme order
$(".themes-list-item").each(function (id, theme) {
saveThemes();
+ saveGroups();
var themeid = $(theme).attr("data-themeid");
if (config.themes[themeid]) {
var t = config.themes[themeid];
@@ -883,10 +1111,17 @@ var getConfig = () => {
'">',
];
}
+ // push groupes
+ $(t.groups).each((i, g) => {
+ var group = mv.writeGroupNode(g);
+ theme.push(group);
+ });
+ // push layers hors groupes
$(t.layers).each(function (i, l) {
var layer = mv.writeLayerNode(l);
theme.push(layer);
});
+
themes.push(theme.join(" "));
themes.push(padding(4) + "");
}
@@ -912,7 +1147,6 @@ var getConfig = () => {
themes.join(" "),
padding(0) + "",
];
-
return conf;
};
@@ -1099,6 +1333,7 @@ var saveAppWithPython = (exists, conf, url, close) => {
var saveApplicationsConfig = (close, message = "") => {
const conf = getConfig();
+
if (!conf || !mv.validateXML(conf.join(""))) {
return alertCustom(mviewer.tr("msg.xml_doc_invalid"), "danger");
}
@@ -1175,6 +1410,9 @@ var loadApplicationParametersFromFile = function () {
};
var loadApplicationParametersFromRemoteFile = function (url) {
+ // bug fix - clean all instances to avoid to dupplicate Sortable instance
+ mv.sortableInstances.forEach((x) => x.destroy());
+ mv.sortableInstances = [];
const waitRequests = [
fetch(url, {
method: "GET",
diff --git a/lib/Sortable.min.js b/lib/Sortable.min.js
index e95d2a30..abe4ddbf 100755
--- a/lib/Sortable.min.js
+++ b/lib/Sortable.min.js
@@ -1,2 +1,2 @@
-/*! Sortable 1.4.2 - MIT | git://github.com/rubaxa/Sortable.git */
-!function(a){"use strict";"function"==typeof define&&define.amd?define(a):"undefined"!=typeof module&&"undefined"!=typeof module.exports?module.exports=a():"undefined"!=typeof Package?Sortable=a():window.Sortable=a()}(function(){"use strict";function a(a,b){if(!a||!a.nodeType||1!==a.nodeType)throw"Sortable: `el` must be HTMLElement, and not "+{}.toString.call(a);this.el=a,this.options=b=r({},b),a[L]=this;var c={group:Math.random(),sort:!0,disabled:!1,store:null,handle:null,scroll:!0,scrollSensitivity:30,scrollSpeed:10,draggable:/[uo]l/i.test(a.nodeName)?"li":">*",ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",ignore:"a, img",filter:null,animation:0,setData:function(a,b){a.setData("Text",b.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1};for(var d in c)!(d in b)&&(b[d]=c[d]);V(b);for(var f in this)"_"===f.charAt(0)&&(this[f]=this[f].bind(this));this.nativeDraggable=b.forceFallback?!1:P,e(a,"mousedown",this._onTapStart),e(a,"touchstart",this._onTapStart),this.nativeDraggable&&(e(a,"dragover",this),e(a,"dragenter",this)),T.push(this._onDragOver),b.store&&this.sort(b.store.get(this))}function b(a){v&&v.state!==a&&(h(v,"display",a?"none":""),!a&&v.state&&w.insertBefore(v,s),v.state=a)}function c(a,b,c){if(a){c=c||N,b=b.split(".");var d=b.shift().toUpperCase(),e=new RegExp("\\s("+b.join("|")+")(?=\\s)","g");do if(">*"===d&&a.parentNode===c||(""===d||a.nodeName.toUpperCase()==d)&&(!b.length||((" "+a.className+" ").match(e)||[]).length==b.length))return a;while(a!==c&&(a=a.parentNode))}return null}function d(a){a.dataTransfer&&(a.dataTransfer.dropEffect="move"),a.preventDefault()}function e(a,b,c){a.addEventListener(b,c,!1)}function f(a,b,c){a.removeEventListener(b,c,!1)}function g(a,b,c){if(a)if(a.classList)a.classList[c?"add":"remove"](b);else{var d=(" "+a.className+" ").replace(K," ").replace(" "+b+" "," ");a.className=(d+(c?" "+b:"")).replace(K," ")}}function h(a,b,c){var d=a&&a.style;if(d){if(void 0===c)return N.defaultView&&N.defaultView.getComputedStyle?c=N.defaultView.getComputedStyle(a,""):a.currentStyle&&(c=a.currentStyle),void 0===b?c:c[b];b in d||(b="-webkit-"+b),d[b]=c+("string"==typeof c?"":"px")}}function i(a,b,c){if(a){var d=a.getElementsByTagName(b),e=0,f=d.length;if(c)for(;f>e;e++)c(d[e],e);return d}return[]}function j(a,b,c,d,e,f,g){var h=N.createEvent("Event"),i=(a||b[L]).options,j="on"+c.charAt(0).toUpperCase()+c.substr(1);h.initEvent(c,!0,!0),h.to=b,h.from=e||b,h.item=d||b,h.clone=v,h.oldIndex=f,h.newIndex=g,b.dispatchEvent(h),i[j]&&i[j].call(a,h)}function k(a,b,c,d,e,f){var g,h,i=a[L],j=i.options.onMove;return g=N.createEvent("Event"),g.initEvent("move",!0,!0),g.to=b,g.from=a,g.dragged=c,g.draggedRect=d,g.related=e||b,g.relatedRect=f||b.getBoundingClientRect(),a.dispatchEvent(g),j&&(h=j.call(i,g)),h}function l(a){a.draggable=!1}function m(){R=!1}function n(a,b){var c=a.lastElementChild,d=c.getBoundingClientRect();return(b.clientY-(d.top+d.height)>5||b.clientX-(d.right+d.width)>5)&&c}function o(a){for(var b=a.tagName+a.className+a.src+a.href+a.textContent,c=b.length,d=0;c--;)d+=b.charCodeAt(c);return d.toString(36)}function p(a){var b=0;if(!a||!a.parentNode)return-1;for(;a&&(a=a.previousElementSibling);)"TEMPLATE"!==a.nodeName.toUpperCase()&&b++;return b}function q(a,b){var c,d;return function(){void 0===c&&(c=arguments,d=this,setTimeout(function(){1===c.length?a.call(d,c[0]):a.apply(d,c),c=void 0},b))}}function r(a,b){if(a&&b)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}var s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J={},K=/\s+/g,L="Sortable"+(new Date).getTime(),M=window,N=M.document,O=M.parseInt,P=!!("draggable"in N.createElement("div")),Q=function(a){return a=N.createElement("x"),a.style.cssText="pointer-events:auto","auto"===a.style.pointerEvents}(),R=!1,S=Math.abs,T=([].slice,[]),U=q(function(a,b,c){if(c&&b.scroll){var d,e,f,g,h=b.scrollSensitivity,i=b.scrollSpeed,j=a.clientX,k=a.clientY,l=window.innerWidth,m=window.innerHeight;if(z!==c&&(y=b.scroll,z=c,y===!0)){y=c;do if(y.offsetWidth
=l-j)-(h>=j),g=(h>=m-k)-(h>=k),(f||g)&&(d=M)),(J.vx!==f||J.vy!==g||J.el!==d)&&(J.el=d,J.vx=f,J.vy=g,clearInterval(J.pid),d&&(J.pid=setInterval(function(){d===M?M.scrollTo(M.pageXOffset+f*i,M.pageYOffset+g*i):(g&&(d.scrollTop+=g*i),f&&(d.scrollLeft+=f*i))},24)))}},30),V=function(a){var b=a.group;b&&"object"==typeof b||(b=a.group={name:b}),["pull","put"].forEach(function(a){a in b||(b[a]=!0)}),a.groups=" "+b.name+(b.put.join?" "+b.put.join(" "):"")+" "};return a.prototype={constructor:a,_onTapStart:function(a){var b=this,d=this.el,e=this.options,f=a.type,g=a.touches&&a.touches[0],h=(g||a).target,i=h,k=e.filter;if(!("mousedown"===f&&0!==a.button||e.disabled)&&(h=c(h,e.draggable,d))){if(D=p(h),"function"==typeof k){if(k.call(this,a,h,this))return j(b,i,"filter",h,d,D),void a.preventDefault()}else if(k&&(k=k.split(",").some(function(a){return a=c(i,a.trim(),d),a?(j(b,a,"filter",h,d,D),!0):void 0})))return void a.preventDefault();(!e.handle||c(i,e.handle,d))&&this._prepareDragStart(a,g,h)}},_prepareDragStart:function(a,b,c){var d,f=this,h=f.el,j=f.options,k=h.ownerDocument;c&&!s&&c.parentNode===h&&(G=a,w=h,s=c,t=s.parentNode,x=s.nextSibling,F=j.group,d=function(){f._disableDelayedDrag(),s.draggable=!0,g(s,f.options.chosenClass,!0),f._triggerDragStart(b)},j.ignore.split(",").forEach(function(a){i(s,a.trim(),l)}),e(k,"mouseup",f._onDrop),e(k,"touchend",f._onDrop),e(k,"touchcancel",f._onDrop),j.delay?(e(k,"mouseup",f._disableDelayedDrag),e(k,"touchend",f._disableDelayedDrag),e(k,"touchcancel",f._disableDelayedDrag),e(k,"mousemove",f._disableDelayedDrag),e(k,"touchmove",f._disableDelayedDrag),f._dragStartTimer=setTimeout(d,j.delay)):d())},_disableDelayedDrag:function(){var a=this.el.ownerDocument;clearTimeout(this._dragStartTimer),f(a,"mouseup",this._disableDelayedDrag),f(a,"touchend",this._disableDelayedDrag),f(a,"touchcancel",this._disableDelayedDrag),f(a,"mousemove",this._disableDelayedDrag),f(a,"touchmove",this._disableDelayedDrag)},_triggerDragStart:function(a){a?(G={target:s,clientX:a.clientX,clientY:a.clientY},this._onDragStart(G,"touch")):this.nativeDraggable?(e(s,"dragend",this),e(w,"dragstart",this._onDragStart)):this._onDragStart(G,!0);try{N.selection?N.selection.empty():window.getSelection().removeAllRanges()}catch(b){}},_dragStarted:function(){w&&s&&(g(s,this.options.ghostClass,!0),a.active=this,j(this,w,"start",s,w,D))},_emulateDragOver:function(){if(H){if(this._lastX===H.clientX&&this._lastY===H.clientY)return;this._lastX=H.clientX,this._lastY=H.clientY,Q||h(u,"display","none");var a=N.elementFromPoint(H.clientX,H.clientY),b=a,c=" "+this.options.group.name,d=T.length;if(b)do{if(b[L]&&b[L].options.groups.indexOf(c)>-1){for(;d--;)T[d]({clientX:H.clientX,clientY:H.clientY,target:a,rootEl:b});break}a=b}while(b=b.parentNode);Q||h(u,"display","")}},_onTouchMove:function(b){if(G){a.active||this._dragStarted(),this._appendGhost();var c=b.touches?b.touches[0]:b,d=c.clientX-G.clientX,e=c.clientY-G.clientY,f=b.touches?"translate3d("+d+"px,"+e+"px,0)":"translate("+d+"px,"+e+"px)";I=!0,H=c,h(u,"webkitTransform",f),h(u,"mozTransform",f),h(u,"msTransform",f),h(u,"transform",f),b.preventDefault()}},_appendGhost:function(){if(!u){var a,b=s.getBoundingClientRect(),c=h(s),d=this.options;u=s.cloneNode(!0),g(u,d.ghostClass,!1),g(u,d.fallbackClass,!0),h(u,"top",b.top-O(c.marginTop,10)),h(u,"left",b.left-O(c.marginLeft,10)),h(u,"width",b.width),h(u,"height",b.height),h(u,"opacity","0.8"),h(u,"position","fixed"),h(u,"zIndex","100000"),h(u,"pointerEvents","none"),d.fallbackOnBody&&N.body.appendChild(u)||w.appendChild(u),a=u.getBoundingClientRect(),h(u,"width",2*b.width-a.width),h(u,"height",2*b.height-a.height)}},_onDragStart:function(a,b){var c=a.dataTransfer,d=this.options;this._offUpEvents(),"clone"==F.pull&&(v=s.cloneNode(!0),h(v,"display","none"),w.insertBefore(v,s)),b?("touch"===b?(e(N,"touchmove",this._onTouchMove),e(N,"touchend",this._onDrop),e(N,"touchcancel",this._onDrop)):(e(N,"mousemove",this._onTouchMove),e(N,"mouseup",this._onDrop)),this._loopId=setInterval(this._emulateDragOver,50)):(c&&(c.effectAllowed="move",d.setData&&d.setData.call(this,c,s)),e(N,"drop",this),setTimeout(this._dragStarted,0))},_onDragOver:function(a){var d,e,f,g=this.el,i=this.options,j=i.group,l=j.put,o=F===j,p=i.sort;if(void 0!==a.preventDefault&&(a.preventDefault(),!i.dragoverBubble&&a.stopPropagation()),I=!0,F&&!i.disabled&&(o?p||(f=!w.contains(s)):F.pull&&l&&(F.name===j.name||l.indexOf&&~l.indexOf(F.name)))&&(void 0===a.rootEl||a.rootEl===this.el)){if(U(a,i,this.el),R)return;if(d=c(a.target,i.draggable,g),e=s.getBoundingClientRect(),f)return b(!0),void(v||x?w.insertBefore(s,v||x):p||w.appendChild(s));if(0===g.children.length||g.children[0]===u||g===a.target&&(d=n(g,a))){if(d){if(d.animated)return;r=d.getBoundingClientRect()}b(o),k(w,g,s,e,d,r)!==!1&&(s.contains(g)||(g.appendChild(s),t=g),this._animate(e,s),d&&this._animate(r,d))}else if(d&&!d.animated&&d!==s&&void 0!==d.parentNode[L]){A!==d&&(A=d,B=h(d),C=h(d.parentNode));var q,r=d.getBoundingClientRect(),y=r.right-r.left,z=r.bottom-r.top,D=/left|right|inline/.test(B.cssFloat+B.display)||"flex"==C.display&&0===C["flex-direction"].indexOf("row"),E=d.offsetWidth>s.offsetWidth,G=d.offsetHeight>s.offsetHeight,H=(D?(a.clientX-r.left)/y:(a.clientY-r.top)/z)>.5,J=d.nextElementSibling,K=k(w,g,s,e,d,r);if(K!==!1){if(R=!0,setTimeout(m,30),b(o),1===K||-1===K)q=1===K;else if(D){var M=s.offsetTop,N=d.offsetTop;q=M===N?d.previousElementSibling===s&&!E||H&&E:N>M}else q=J!==s&&!G||H&&G;s.contains(g)||(q&&!J?g.appendChild(s):d.parentNode.insertBefore(s,q?J:d)),t=s.parentNode,this._animate(e,s),this._animate(r,d)}}}},_animate:function(a,b){var c=this.options.animation;if(c){var d=b.getBoundingClientRect();h(b,"transition","none"),h(b,"transform","translate3d("+(a.left-d.left)+"px,"+(a.top-d.top)+"px,0)"),b.offsetWidth,h(b,"transition","all "+c+"ms"),h(b,"transform","translate3d(0,0,0)"),clearTimeout(b.animated),b.animated=setTimeout(function(){h(b,"transition",""),h(b,"transform",""),b.animated=!1},c)}},_offUpEvents:function(){var a=this.el.ownerDocument;f(N,"touchmove",this._onTouchMove),f(a,"mouseup",this._onDrop),f(a,"touchend",this._onDrop),f(a,"touchcancel",this._onDrop)},_onDrop:function(b){var c=this.el,d=this.options;clearInterval(this._loopId),clearInterval(J.pid),clearTimeout(this._dragStartTimer),f(N,"mousemove",this._onTouchMove),this.nativeDraggable&&(f(N,"drop",this),f(c,"dragstart",this._onDragStart)),this._offUpEvents(),b&&(I&&(b.preventDefault(),!d.dropBubble&&b.stopPropagation()),u&&u.parentNode.removeChild(u),s&&(this.nativeDraggable&&f(s,"dragend",this),l(s),g(s,this.options.ghostClass,!1),g(s,this.options.chosenClass,!1),w!==t?(E=p(s),E>=0&&(j(null,t,"sort",s,w,D,E),j(this,w,"sort",s,w,D,E),j(null,t,"add",s,w,D,E),j(this,w,"remove",s,w,D,E))):(v&&v.parentNode.removeChild(v),s.nextSibling!==x&&(E=p(s),E>=0&&(j(this,w,"update",s,w,D,E),j(this,w,"sort",s,w,D,E)))),a.active&&((null===E||-1===E)&&(E=D),j(this,w,"end",s,w,D,E),this.save())),w=s=t=u=x=v=y=z=G=H=I=E=A=B=F=a.active=null)},handleEvent:function(a){var b=a.type;"dragover"===b||"dragenter"===b?s&&(this._onDragOver(a),d(a)):("drop"===b||"dragend"===b)&&this._onDrop(a)},toArray:function(){for(var a,b=[],d=this.el.children,e=0,f=d.length,g=this.options;f>e;e++)a=d[e],c(a,g.draggable,this.el)&&b.push(a.getAttribute(g.dataIdAttr)||o(a));return b},sort:function(a){var b={},d=this.el;this.toArray().forEach(function(a,e){var f=d.children[e];c(f,this.options.draggable,d)&&(b[a]=f)},this),a.forEach(function(a){b[a]&&(d.removeChild(b[a]),d.appendChild(b[a]))})},save:function(){var a=this.options.store;a&&a.set(this)},closest:function(a,b){return c(a,b||this.options.draggable,this.el)},option:function(a,b){var c=this.options;return void 0===b?c[a]:(c[a]=b,void("group"===a&&V(c)))},destroy:function(){var a=this.el;a[L]=null,f(a,"mousedown",this._onTapStart),f(a,"touchstart",this._onTapStart),this.nativeDraggable&&(f(a,"dragover",this),f(a,"dragenter",this)),Array.prototype.forEach.call(a.querySelectorAll("[draggable]"),function(a){a.removeAttribute("draggable")}),T.splice(T.indexOf(this._onDragOver),1),this._onDrop(),this.el=a=null}},a.utils={on:e,off:f,css:h,find:i,is:function(a,b){return!!c(a,b,a)},extend:r,throttle:q,closest:c,toggleClass:g,index:p},a.create=function(b,c){return new a(b,c)},a.version="1.4.2",a});
\ No newline at end of file
+/*! Sortable 1.15.3 - MIT | git://github.com/SortableJS/Sortable.git */
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Sortable=e()}(this,function(){"use strict";function e(e,t){var n,o=Object.keys(e);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(e),t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),o.push.apply(o,n)),o}function I(o){for(var t=1;tt.length)&&(e=t.length);for(var n=0,o=new Array(e);n"===e[0]&&(e=e.substring(1)),t))try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return}}function g(t){return t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode}function P(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"!==e[0]||t.parentNode===n)&&p(t,e)||o&&t===n)return t}while(t!==n&&(t=g(t)))}return null}var m,v=/\s+/g;function k(t,e,n){var o;t&&e&&(t.classList?t.classList[n?"add":"remove"](e):(o=(" "+t.className+" ").replace(v," ").replace(" "+e+" "," "),t.className=(o+(n?" "+e:"")).replace(v," ")))}function R(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];o[e=!(e in o||-1!==e.indexOf("webkit"))?"-webkit-"+e:e]=n+("string"==typeof n?"":"px")}}function b(t,e){var n="";if("string"==typeof t)n=t;else do{var o=R(t,"transform")}while(o&&"none"!==o&&(n=o+" "+n),!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(n)}function E(t,e,n){if(t){var o=t.getElementsByTagName(e),i=0,r=o.length;if(n)for(;i=n.left-e&&i<=n.right+e,e=r>=n.top-e&&r<=n.bottom+e;return o&&e?a=t:void 0}}),a);if(e){var n,o={};for(n in t)t.hasOwnProperty(n)&&(o[n]=t[n]);o.target=o.rootEl=e,o.preventDefault=void 0,o.stopPropagation=void 0,e[K]._onDragOver(o)}}var i,r,a}function Ft(t){Z&&Z.parentNode[K]._isOutsideThisEl(t.target)}function jt(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=a({},e),t[K]=this;var n,o,i={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return kt(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==jt.supportPointer&&"PointerEvent"in window&&!u,emptyInsertThreshold:5};for(n in z.initializePlugins(this,t,i),i)n in e||(e[n]=i[n]);for(o in Rt(e),this)"_"===o.charAt(0)&&"function"==typeof this[o]&&(this[o]=this[o].bind(this));this.nativeDraggable=!e.forceFallback&&It,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?h(t,"pointerdown",this._onTapStart):(h(t,"mousedown",this._onTapStart),h(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(h(t,"dragover",this),h(t,"dragenter",this)),St.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),a(this,A())}function Ht(t,e,n,o,i,r,a,l){var s,c,u=t[K],d=u.options.onMove;return!window.CustomEvent||y||w?(s=document.createEvent("Event")).initEvent("move",!0,!0):s=new CustomEvent("move",{bubbles:!0,cancelable:!0}),s.to=e,s.from=t,s.dragged=n,s.draggedRect=o,s.related=i||e,s.relatedRect=r||X(e),s.willInsertAfter=l,s.originalEvent=a,t.dispatchEvent(s),c=d?d.call(u,s,a):c}function Lt(t){t.draggable=!1}function Kt(){xt=!1}function Wt(t){return setTimeout(t,0)}function zt(t){return clearTimeout(t)}jt.prototype={constructor:jt,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(vt=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,Z):this.options.direction},_onTapStart:function(e){if(e.cancelable){var n=this,o=this.el,t=this.options,i=t.preventOnFilter,r=e.type,a=e.touches&&e.touches[0]||e.pointerType&&"touch"===e.pointerType&&e,l=(a||e).target,s=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||l,c=t.filter;if(!function(t){Ot.length=0;var e=t.getElementsByTagName("input"),n=e.length;for(;n--;){var o=e[n];o.checked&&Ot.push(o)}}(o),!Z&&!(/mousedown|pointerdown/.test(r)&&0!==e.button||t.disabled)&&!s.isContentEditable&&(this.nativeDraggable||!u||!l||"SELECT"!==l.tagName.toUpperCase())&&!((l=P(l,t.draggable,o,!1))&&l.animated||et===l)){if(it=j(l),at=j(l,t.draggable),"function"==typeof c){if(c.call(this,e,l,this))return V({sortable:n,rootEl:s,name:"filter",targetEl:l,toEl:o,fromEl:o}),U("filter",n,{evt:e}),void(i&&e.cancelable&&e.preventDefault())}else if(c=c&&c.split(",").some(function(t){if(t=P(s,t.trim(),o,!1))return V({sortable:n,rootEl:t,name:"filter",targetEl:l,fromEl:o,toEl:o}),U("filter",n,{evt:e}),!0}))return void(i&&e.cancelable&&e.preventDefault());t.handle&&!P(s,t.handle,o,!1)||this._prepareDragStart(e,a,l)}}},_prepareDragStart:function(t,e,n){var o,i=this,r=i.el,a=i.options,l=r.ownerDocument;n&&!Z&&n.parentNode===r&&(o=X(n),J=r,$=(Z=n).parentNode,tt=Z.nextSibling,et=n,st=a.group,ut={target:jt.dragged=Z,clientX:(e||t).clientX,clientY:(e||t).clientY},pt=ut.clientX-o.left,gt=ut.clientY-o.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,Z.style["will-change"]="all",o=function(){U("delayEnded",i,{evt:t}),jt.eventCanceled?i._onDrop():(i._disableDelayedDragEvents(),!s&&i.nativeDraggable&&(Z.draggable=!0),i._triggerDragStart(t,e),V({sortable:i,name:"choose",originalEvent:t}),k(Z,a.chosenClass,!0))},a.ignore.split(",").forEach(function(t){E(Z,t.trim(),Lt)}),h(l,"dragover",Bt),h(l,"mousemove",Bt),h(l,"touchmove",Bt),h(l,"mouseup",i._onDrop),h(l,"touchend",i._onDrop),h(l,"touchcancel",i._onDrop),s&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Z.draggable=!0),U("delayStart",this,{evt:t}),!a.delay||a.delayOnTouchOnly&&!e||this.nativeDraggable&&(w||y)?o():jt.eventCanceled?this._onDrop():(h(l,"mouseup",i._disableDelayedDrag),h(l,"touchend",i._disableDelayedDrag),h(l,"touchcancel",i._disableDelayedDrag),h(l,"mousemove",i._delayedDragTouchMoveHandler),h(l,"touchmove",i._delayedDragTouchMoveHandler),a.supportPointer&&h(l,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(o,a.delay)))},_delayedDragTouchMoveHandler:function(t){t=t.touches?t.touches[0]:t;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){Z&&Lt(Z),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;f(t,"mouseup",this._disableDelayedDrag),f(t,"touchend",this._disableDelayedDrag),f(t,"touchcancel",this._disableDelayedDrag),f(t,"mousemove",this._delayedDragTouchMoveHandler),f(t,"touchmove",this._delayedDragTouchMoveHandler),f(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?h(document,"pointermove",this._onTouchMove):h(document,e?"touchmove":"mousemove",this._onTouchMove):(h(Z,"dragend",this),h(J,"dragstart",this._onDragStart));try{document.selection?Wt(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){var n;Et=!1,J&&Z?(U("dragStarted",this,{evt:e}),this.nativeDraggable&&h(document,"dragover",Ft),n=this.options,t||k(Z,n.dragClass,!1),k(Z,n.ghostClass,!0),jt.active=this,t&&this._appendGhost(),V({sortable:this,name:"start",originalEvent:e})):this._nulling()},_emulateDragOver:function(){if(dt){this._lastX=dt.clientX,this._lastY=dt.clientY,Xt();for(var t=document.elementFromPoint(dt.clientX,dt.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(dt.clientX,dt.clientY))!==e;)e=t;if(Z.parentNode[K]._isOutsideThisEl(t),e)do{if(e[K])if(e[K]._onDragOver({clientX:dt.clientX,clientY:dt.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break}while(e=g(t=e));Yt()}},_onTouchMove:function(t){if(ut){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,i=t.touches?t.touches[0]:t,r=Q&&b(Q,!0),a=Q&&r&&r.a,l=Q&&r&&r.d,e=At&&wt&&D(wt),a=(i.clientX-ut.clientX+o.x)/(a||1)+(e?e[0]-Tt[0]:0)/(a||1),l=(i.clientY-ut.clientY+o.y)/(l||1)+(e?e[1]-Tt[1]:0)/(l||1);if(!jt.active&&!Et){if(n&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))D.right+10||S.clientY>x.bottom&&S.clientX>x.left:S.clientY>D.bottom+10||S.clientX>x.right&&S.clientY>x.top)||m.animated)){if(m&&(t=n,e=r,C=X(B((_=this).el,0,_.options,!0)),_=L(_.el,_.options,Q),e?t.clientX<_.left-10||t.clientY {
+ document.querySelectorAll(".layers-list-item.active").forEach((el) => {
+ el.classList.remove("active");
+ });
+ };
+
+ const layerAsObject = (layerInfos) => {
+ const layerObject = {
+ id: $(layerInfos).attr("id"),
+ type: $(layerInfos).attr("type") || "wms",
+ tiled: $(layerInfos).attr("tiled") === "true",
+ scalemin: $(layerInfos).attr("scalemin"),
+ scalemax: $(layerInfos).attr("scalemax"),
+ title: $(layerInfos).attr("name"),
+ name: $(layerInfos).attr("name"),
+ url: $(layerInfos).attr("url"),
+ queryable: $(layerInfos).attr("queryable") === "true",
+ featurecount: $(layerInfos).attr("featurecount"),
+ infopanel: $(layerInfos).attr("infopanel") || "right-panel",
+ searchable: $(layerInfos).attr("searchable") === "true",
+ searchengine: $(layerInfos).attr("searchengine"),
+ fusesearchkeys: $(layerInfos).attr("fusesearchkeys"),
+ fusesearchresult: $(layerInfos).attr("fusesearchresult"),
+ secure: $(layerInfos).attr("secure") || "public",
+ useproxy: $(layerInfos).attr("useproxy") === "true",
+ infoformat: $(layerInfos).attr("infoformat"),
+ metadata: $(layerInfos).attr("metadata"),
+ "metadata-csw": $(layerInfos).attr("metadata-csw"),
+ attribution: $(layerInfos).attr("attribution"),
+ filter: $(layerInfos).attr("filter"),
+ visible: $(layerInfos).attr("visible") === "true",
+ opacity: $(layerInfos).attr("opacity"),
+ template: $(layerInfos).find("template").text(),
+ useexternaltemplate:
+ ($(layerInfos).find("template") &&
+ $(layerInfos).find("template").text().length > 3) ||
+ ($(layerInfos).find("template").attr("url") &&
+ $(layerInfos).find("template").attr("url").length > 1),
+ templateurl: false,
+ fields: $(layerInfos).attr("fields"),
+ fieldsoptions: false,
+ aliases: $(layerInfos).attr("aliases"),
+ style: $(layerInfos).attr("style"),
+ styleurl: $(layerInfos).attr("styleurl"),
+ filterstyle: $(layerInfos).attr("filterstyle"),
+ stylesalias: $(layerInfos).attr("stylesalias"),
+ sld: $(layerInfos).attr("sld"),
+ legendurl: $(layerInfos).attr("legendurl"),
+ attributefilter: $(layerInfos).attr("attributefilter") === "true",
+ showintoc: $(layerInfos).attr("showintoc") != "false",
+ exclusive: $(layerInfos).attr("exclusive") === "true",
+ toplayer: $(layerInfos).attr("toplayer") === "true",
+ expanded: $(layerInfos).attr("expanded") === "true",
+ dynamiclegend: $(layerInfos).attr("dynamiclegend") === "true",
+ styletitle: $(layerInfos).attr("styletitle"),
+ index: $(layerInfos).attr("index"),
+ jsonfields: $(layerInfos).attr("jsonfields"),
+ };
+ return layerObject;
+ };
+
function uuid() {
var dt = new Date().getTime();
var uuid = "xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
@@ -18,6 +80,8 @@ var mv = (function () {
var _currentThemeId = "";
var _currentLayerId = "";
+ var _currentGroupId = "undefined";
+ var _newTheme = false;
var _userInfo = {
userName: "",
@@ -27,7 +91,16 @@ var mv = (function () {
};
return {
+ setNewTheme: (newTheme) => {
+ _newTheme = newTheme;
+ },
+
+ getNewTheme: () => {
+ return _newTheme;
+ },
+
setCurrentThemeId: (themeId) => {
+ resetActive();
_currentThemeId = themeId;
},
@@ -36,6 +109,7 @@ var mv = (function () {
},
setCurrentLayerId: (layerId) => {
+ resetActive();
_currentLayerId = layerId;
},
@@ -43,22 +117,52 @@ var mv = (function () {
return _currentLayerId;
},
- getLayerById: (layerid = null) => {
- if (!layerid) {
+ setCurrentGroupId: (btn) => {
+ const parent = $(btn).closest(".layer_item");
+ const groupId = parent ? $(parent).attr("data-groupid") : "undefined";
+ _currentGroupId = groupId;
+ },
+
+ getCurrentGroupId: () => {
+ return _currentGroupId && _currentGroupId != "undefined" ? _currentGroupId : null;
+ },
+
+ getCurrentLayers: (themeId) => {
+ let themeData = config.themes[themeId || mv.getCurrentThemeId()];
+ let groupId = mv.getCurrentGroupId();
+ return groupId
+ ? themeData.groups.find((g) => g.id === groupId)?.layers
+ : themeData.layers;
+ },
+
+ /**
+ * Return layer (parse also theme or group)
+ * @param {string} layerId optionnal
+ * @returns
+ */
+ getLayerById: (layerId = null) => {
+ if (!layerId) {
var el = $(".layers-list-item.active");
- layerid = el.attr("data-layerid");
+ layerId = el.attr("data-layerid");
}
- var themeid = mv.getCurrentThemeId();
- if (!themeid) {
+ let themeId = mv.getCurrentThemeId();
+ let groupeId = mv.getCurrentGroupId();
+ if (!themeId) {
// search theme id from config object
- themeid = Object.keys(config.themes)
+ themeId = Object.keys(config.themes)
.filter((f) => {
const them = config.themes[f];
- return them.layers.filter((l) => l.id === layerid)?.length;
+ return them.layers.filter((l) => l.id === layerId)?.length;
})
.filter((x) => x)[0];
}
- return config.themes[themeid].layers.find((l) => l.id === layerid);
+
+ let source = config.themes[themeId];
+ // get layer from concerned group
+ let layers = groupeId
+ ? source.groups.find((g) => g.id === groupeId)?.layers
+ : source.layers;
+ return layers.find((l) => l.id === layerId);
},
uuid: uuid,
@@ -227,14 +331,10 @@ var mv = (function () {
});
},
- showStyles: function (styles, layerid) {
+ showStyles: function (styles, layerId) {
$("#frm-lis-styles .layer-style").remove();
$("#frm-sld").val("");
- const themeid = mv.getCurrentThemeId();
- function getLayerbyId(l) {
- return l.id === layerid;
- }
- var layer = config.themes[themeid].layers.find(getLayerbyId);
+ var layer = mv.getLayerById(layerId);
if (layer.sld) {
$("#frm-sld").val(layer.sld);
}
@@ -248,7 +348,7 @@ var mv = (function () {
'" data-stylename="' +
style.name +
'" data-layerid="' +
- layerid +
+ layerId +
'" >',
'',
'
',
@@ -344,15 +444,11 @@ var mv = (function () {
$("#filter_wizard").hide();
},
- showFields: function (fields, layerid) {
+ showFields: function (fields, layerId) {
$("#frm-lis-fields .row.fld").remove();
$("#attribute_filter_fields option").remove();
$("#opt-attributefield option").remove();
- const themeid = mv.getCurrentThemeId();
- function getLayerbyId(l) {
- return l.id === layerid;
- }
- var layer = config.themes[themeid].layers.find(getLayerbyId);
+ var layer = mv.getLayerById(layerId);
//re-order fields if they have been ordered, putting unused ones to the end
if (layer.fields) {
var sortedFields = layer.fields.split(",");
@@ -363,7 +459,7 @@ var mv = (function () {
});
}
$(fields).each(function (id, fld) {
- if (config.temp.layers[layerid].fields[fld]) {
+ if (config.temp.layers[layerId].fields[fld]) {
$("#attribute_filter_fields, #opt-attributefield").append(
'
"
);
@@ -562,6 +658,22 @@ var mv = (function () {
$(".ogc-result input[type='checkbox']:checked").prop("checked", false);
},
+ getConfGroups: function () {
+ const themeid = mv.getCurrentThemeId();
+ const groupId = `group-${mv.uuid()}`;
+ const groupName = "Nouveau groupe";
+ const group = {
+ id: groupId,
+ name: groupName,
+ layers: [],
+ };
+ if (!config.themes[themeid].groups) {
+ config.themes[themeid].groups = [];
+ }
+ config.themes[themeid].groups.push(group);
+ addGroup(themeid, groupName, groupId);
+ },
+
resetConfLayer: function () {
// Reset input
document.getElementById("newlayer-type").value = "";
@@ -616,7 +728,13 @@ var mv = (function () {
function getLayerbyId(l) {
return l.id === layerid;
}
- var layer = config.themes[themeid].layers.find(getLayerbyId);
+ const groupid = el.attr("data-groupid") || "undefined";
+ var layer =
+ groupid === "undefined"
+ ? config.themes[themeid].layers.find(getLayerbyId)
+ : config.themes[themeid].groups
+ .find((group) => group.id === groupid)
+ .layers.find(getLayerbyId);
document.getElementById("layerTypeLabel").append(layer.type);
@@ -661,8 +779,11 @@ var mv = (function () {
$("#frm-layer-exclusive").prop("checked", layer.exclusive);
$("#frm-layer-toplayer").prop("checked", layer.toplayer);
$("#frm-layer-expanded").prop("checked", layer.expanded);
- let showintoc = !(layer?.showintoc || layer?.showintoc == undefined);
- $("#frm-layer-showintoc").prop("checked", showintoc);
+
+ $("#frm-layer-showintoc").prop(
+ "checked",
+ layer?.showintoc == "false" || !layer?.showintoc
+ );
if (layer.useexternaltemplate && layer.templateurl) {
$("#frm-template").prop("checked", true);
@@ -792,10 +913,17 @@ var mv = (function () {
saveLayerOptions: function (layerid = null) {
var layerid = mv.getCurrentLayerId();
const themeid = mv.getCurrentThemeId();
+ const groupid = mv.getCurrentGroupId();
+
function getLayerbyId(l) {
return l.id === layerid;
}
- var layer = config.themes[themeid].layers.find(getLayerbyId);
+ var layer =
+ !groupid || groupid === "undefined"
+ ? config.themes[themeid].layers.find(getLayerbyId)
+ : config.themes[themeid].groups
+ .find((group) => group.id === groupid)
+ .layers.find(getLayerbyId);
// Commons params
layer.type = $("#frm-type").val();
@@ -905,6 +1033,7 @@ var mv = (function () {
$(`div[data-layerid="${layerid}"] .layer-name`).text(layer.name);
mv.writeFieldsOptions(layer);
+ mv.saveAllThemes();
},
form2xml: function () {
@@ -914,7 +1043,7 @@ var mv = (function () {
function getLayerbyId(l) {
return l.id === layerid;
}
- var layer = config.themes[themeid].layers.find(getLayerbyId);
+ var layer = config.themes[themeid].layers.find(mv.getLayerById);
var xml = mv.writeLayerNode(layer);
$("#mod-codeview pre").text(xml);
},
@@ -1019,6 +1148,33 @@ var mv = (function () {
return layer.join("");
},
+ writeGroupNode: function (g) {
+ var padding = function (n) {
+ return "\r\n" + " ".repeat(n);
+ };
+ var groupParameters = {};
+ //require parameters
+ var requireParameters = ["id", "name"];
+ requireParameters.forEach(function (p, i) {
+ var value = g[p];
+ groupParameters[p] = [p, '="', value, '"'].join("");
+ });
+
+ var group = [padding(8) + "
");
+ //push layers dans le groupe
+ $(g.layers).each(function (i, l) {
+ var layer = mv.writeLayerNode(l);
+ group.push(layer);
+ });
+ group.push(padding(8) + "");
+
+ return group.join(" ");
+ },
+
escapeXml: function (unsafe) {
var rep = "";
if (unsafe) {
@@ -1316,19 +1472,19 @@ var mv = (function () {
});
return `
-
-
- ${data.title}
- ${creator}
- ${UUID}
- ${keyworkds}
- ${publisher}
- ${description}
- ${dataDate}
- ${relation}
- ${themes.length ? themes.join("\r\n") : ""}
-
- `;
+
+
+ ${data.title}
+ ${creator}
+ ${UUID}
+ ${keyworkds}
+ ${publisher}
+ ${description}
+ ${dataDate}
+ ${relation}
+ ${themes.length ? themes.join("\r\n") : ""}
+
+ `;
},
parseWMC(xml) {
@@ -1566,7 +1722,7 @@ var mv = (function () {
var baseLayersMode = $(xml).find("baselayers").attr("style") || "default";
$("#frm-bl-mode option[value='" + baseLayersMode + "']").prop("selected", true);
var baselayers = $(xml).find("baselayer");
- //Reinitialisation
+ //reset
$(".bl input").prop("checked", false);
$("#frm-bl-visible option").attr("disabled", "disabled");
baselayers.each(function (i, bl) {
@@ -1590,11 +1746,13 @@ var mv = (function () {
$("#frm-bl .custom-bl input").prop("checked", true).trigger("change");
var visibleBaselayer = $(xml).find('baselayer[visible="true"]').attr("id");
$("#frm-bl-visible").val(visibleBaselayer).trigger("change");
+
//tHEMES & layers
var themePanel = $(xml).find("themes");
if (themePanel.attr("mini") === "true") {
$("#opt-mini").prop("checked", true);
}
+
var themes = $(xml).find("theme");
themes.each(function (id, th) {
addTheme(
@@ -1605,68 +1763,24 @@ var mv = (function () {
$(th).attr("url"),
$(th).attr("layersvisibility")
);
- var layers = $(th).find("layer");
- var counter = 0;
- layers.each(function (id, l) {
- counter += 1;
- var layer = {
- id: $(l).attr("id"),
- type: $(l).attr("type") || "wms",
- tiled: $(l).attr("tiled") === "true",
- scalemin: $(l).attr("scalemin"),
- scalemax: $(l).attr("scalemax"),
- title: $(l).attr("name"),
- name: $(l).attr("name"),
- url: $(l).attr("url"),
- queryable: $(l).attr("queryable") === "true",
- featurecount: $(l).attr("featurecount"),
- infopanel: $(l).attr("infopanel") || "right-panel",
- searchable: $(l).attr("searchable") === "true",
- searchengine: $(l).attr("searchengine"),
- fusesearchkeys: $(l).attr("fusesearchkeys"),
- fusesearchresult: $(l).attr("fusesearchresult"),
- secure: $(l).attr("secure") || "public",
- useproxy: $(l).attr("useproxy") === "true",
- infoformat: $(l).attr("infoformat"),
- metadata: $(l).attr("metadata"),
- "metadata-csw": $(l).attr("metadata-csw"),
- attribution: $(l).attr("attribution"),
- filter: $(l).attr("filter"),
- visible: $(l).attr("visible") === "true",
- opacity: $(l).attr("opacity"),
- template: $(l).find("template").text(),
- useexternaltemplate:
- ($(l).find("template") && $(l).find("template").text().length > 3) ||
- ($(l).find("template").attr("url") &&
- $(l).find("template").attr("url").length > 1),
- templateurl: false,
- fields: $(l).attr("fields"),
- fieldsoptions: false,
- aliases: $(l).attr("aliases"),
- style: $(l).attr("style"),
- styleurl: $(l).attr("styleurl"),
- filterstyle: $(l).attr("filterstyle"),
- stylesalias: $(l).attr("stylesalias"),
- sld: $(l).attr("sld"),
- legendurl: $(l).attr("legendurl"),
- attributefilter: $(l).attr("attributefilter") === "true",
- showintoc: $(l).attr("showintoc") === "true",
- exclusive: $(l).attr("exclusive") === "true",
- toplayer: $(l).attr("toplayer") === "true",
- expanded: $(l).attr("expanded") === "true",
- dynamiclegend: $(l).attr("dynamiclegend") === "true",
- styletitle: $(l).attr("styletitle"),
- index: $(l).attr("index"),
- jsonfields: $(l).attr("jsonfields"),
- };
- addLayer(layer.title, layer.id, $(th).attr("id"));
+ // Add group and contains layers
+ var groups = $(th).find("group");
+ // If no groups in theme, hide groups panel
+ if (groups.length === 0) $(`#${th.id} .group_list`).addClass("hideBlock");
+
+ const addAndConfigLayer = (layer, group, layerFromXml) => {
+ addLayer(layer.title, layer.id, $(th).attr("id"), group?.id);
if (layer.attributefilter) {
- layer.attributefield = $(l).attr("attributefield");
- layer.attributelabel = $(l).attr("attributelabel");
- layer.attributevalues = $(l).attr("attributevalues");
+ layer.attributefield = $(layerFromXml).attr("attributefield");
+ layer.attributelabel = $(layerFromXml).attr("attributelabel");
+ layer.attributevalues = $(layerFromXml).attr("attributevalues");
}
- if (layer.useexternaltemplate === true && $(l).find("template").attr("url")) {
- layer.templateurl = $(l).find("template").attr("url");
+ if (
+ layer.useexternaltemplate === true &&
+ layerFromXml &&
+ $(layerFromXml).find("template").attr("url")
+ ) {
+ layer.templateurl = $(layerFromXml).find("template").attr("url");
}
$("#frm-template").prop("checked", layer.useexternaltemplate);
if (layer.fields && layer.aliases) {
@@ -1674,9 +1788,55 @@ var mv = (function () {
$(layer.fields.split(",")).each(function (index, fld) {
var type = "text";
var alias = layer.aliases.split(",")[index];
- layer.fieldsoptions[fld] = { name: fld, alias: alias, type: type };
+ layer.fieldsoptions[fld] = {
+ name: fld,
+ alias: alias,
+ type: type,
+ };
});
}
+ };
+
+ groups.each((id, g) => {
+ var group = {
+ id: $(g).attr("id"),
+ name: $(g).attr("name"),
+ };
+
+ addGroup($(th).attr("id"), group.name, group.id);
+ //Si le thème n'a pas de groupes, on set theme.group à []
+ if (!config.themes[$(th).attr("id")].groups) {
+ config.themes[$(th).attr("id")].groups = [];
+ }
+ config.themes[$(th).attr("id")].groups.push(group);
+
+ var layers = $(g).find("layer");
+ if (layers)
+ layers.each(function (id, l) {
+ counter += 1;
+ let layer = layerAsObject(l);
+ addAndConfigLayer(layer, group, l);
+ //Si le groupe n'a pas de layers, on set group.layers à []
+ if (
+ !config.themes[$(th).attr("id")].groups.find((g) => g.id === group.id)
+ .layers
+ )
+ config.themes[$(th).attr("id")].groups.find(
+ (g) => g.id === group.id
+ ).layers = [];
+
+ config.themes[$(th).attr("id")].groups
+ .find((g) => g.id === group.id)
+ .layers.push(layer);
+ });
+ });
+ // Ajout des layers hors groupes
+ var layers = $(th).children("layer");
+ var counter = 0;
+ layers.each(function (id, l) {
+ counter += 1;
+ let layer = layerAsObject(l);
+ addAndConfigLayer(layer, null, l);
config.themes[$(th).attr("id")].layers.push(layer);
});
if ($(th).attr("url")) {
@@ -1770,37 +1930,37 @@ var mv = (function () {
{
show: !_conf.is_php,
html: `
-
- ${mviewer.tr(
- "preview"
- )}
- `,
+
+ ${mviewer.tr(
+ "preview"
+ )}
+ `,
},
{
show: !_conf.is_php ? app.creator == _userInfo.userName : true,
html: `
-
- ${mviewer.tr(
- "modify"
- )}
- `,
+
+ ${mviewer.tr(
+ "modify"
+ )}
+ `,
},
{
show: !_conf.is_php && app.creator == _userInfo.userName,
html: `
-
- ${mviewer.tr(
- "delete"
- )}
- `,
+
+ ${mviewer.tr(
+ "delete"
+ )}
+ `,
},
];
@@ -1810,58 +1970,58 @@ var mv = (function () {
? ""
: `
${badgeLabel}`;
const items = `
-
-
-
-
${
- app.title
- } ${badge}
-
Thématiques : ${app.subjects}
-
Groupe : ${app.group}
-
Identifiant : ${app.id}
-
Mots clés : ${app.keywords}
-
Auteur : ${app.creator}
-
Date : ${app.date}
-
-
-
- ${navButtons
- .filter((x) => x.show)
- .map((x) => x.html)
- .join("")}
-
-
-
-
`;
+
+
+
+
${
+ app.title
+ } ${badge}
+
Thématiques : ${app.subjects}
+
Groupe : ${app.group}
+
Identifiant : ${app.id}
+
Mots clés : ${app.keywords}
+
Auteur : ${app.creator}
+
Date : ${app.date}
+
+
+
+ ${navButtons
+ .filter((x) => x.show)
+ .map((x) => x.html)
+ .join("")}
+
+
+
+
`;
applications.push(items);
});
if (!applications.length && search) {
document.querySelector("#liste_applications").innerHTML = `
-
-
-
-
${mviewer.tr("noresult")}
-
-
`;
+
+
+
+
${mviewer.tr("noresult")}
+
+
`;
}
if (!applications.length && !search) {
document.querySelector("#liste_applications").innerHTML =
`
-
-
-
${mviewer.tr("load.app.any")}
-
-
`;
+
+
+
${mviewer.tr("load.app.any")}
+
+
`;
}
$("#liste_applications").append(applications);
// can't delete all with Python backend
@@ -1957,24 +2117,24 @@ var mv = (function () {
const userFullName = `${data.first_name} ${data.last_name}`;
var items = `
-
- ${userGroup.full_name}
-
-
${mviewer.tr("auth.group.type")} : ${
- userGroup.group_type
- }
-
${"auth.group.role"} : ${mviewer.tr(
- _userRole
- )}
-
- `;
+
+ ${userGroup.full_name}
+
+
${mviewer.tr("auth.group.type")} : ${
+ userGroup.group_type
+ }
+
${"auth.group.role"} : ${mviewer.tr(
+ _userRole
+ )}
+
+ `;
userGroupsAsHtml.push(items.join(" "));
});
@@ -2012,15 +2172,15 @@ var mv = (function () {
document.querySelector("#appsListTable").innerHTML = "";
$("#appsListTable").append(
`
`
+
+
+
+
+
`
);
},
cleanVersionHistoryUI: () => {
@@ -2029,34 +2189,34 @@ var mv = (function () {
showAlertChangeVersion: (id, version) => {
genericModalContent.innerHTML = "";
genericModalContent.innerHTML = `
-
-
+ `;
},
createVersion: (id) => {
id = id || config?.id;
@@ -2138,20 +2298,20 @@ var mv = (function () {
actionVersionFormatter: (value, row, index) => {
const flag = ``;
return `
- ${mviewer.tr(
- "release.preview"
- )}
- ${mviewer.tr(
- "release.restore"
- )}
- ${row?.version ? flag : ""}
- `;
+ ${mviewer.tr(
+ "release.preview"
+ )}
+ ${mviewer.tr(
+ "release.restore"
+ )}
+ ${row?.version ? flag : ""}
+ `;
},
appsTableToolbar: () => {
const toolbar = document.querySelector(".toolbar");
@@ -2173,29 +2333,29 @@ var mv = (function () {
},
];
return `
-
- `;
+
+ `;
},
showTagsOnly: (el) => {
config.showTags = el.checked;
@@ -2250,41 +2410,41 @@ var mv = (function () {
});
mv.getApps = () => apps;
const tableDom = `
- ${mv.appsTableToolbar()}
-
-
-
- ${mviewer.tr("release.active")} |
- Description |
-
- ${mviewer.tr("release.date")}
- |
-
- ${mviewer.tr("release.actions")}
- |
-
-
-
- `;
+ ${mv.appsTableToolbar()}
+
+
+
+ ${mviewer.tr("release.active")} |
+ Description |
+
+ ${mviewer.tr("release.date")}
+ |
+
+ ${mviewer.tr("release.actions")}
+ |
+
+
+
+ `;
$("#appsListTable").append(tableDom);
const $table = $("#tableVersions");
$table.bootstrapTable({ data: data });
@@ -2319,37 +2479,37 @@ var mv = (function () {
}));
mv.getApps = () => theme;
const tableDom = `
-
-
-
- |
- ${mviewer.tr(
- "table.title"
- )} |
- ${mviewer.tr(
- "table.description"
- )} |
- ${mviewer.tr(
- "table.publisher"
- )} |
- ${mviewer.tr(
- "table.identify"
- )} |
- ${mviewer.tr(
- "table.id"
- )} |
-
-
-
- `;
+
+
+
+ |
+ ${mviewer.tr(
+ "table.title"
+ )} |
+ ${mviewer.tr(
+ "table.description"
+ )} |
+ ${mviewer.tr(
+ "table.publisher"
+ )} |
+ ${mviewer.tr(
+ "table.identify"
+ )} |
+ ${mviewer.tr(
+ "table.id"
+ )} |
+
+
+
+ `;
$("#themesListTable").append(tableDom);
const $table = $("#tableThemaExt");
$table.bootstrapTable({ data: data });
@@ -2390,90 +2550,90 @@ var mv = (function () {
: mviewer.tr("publish.name.wich");
genericModalContent.innerHTML = "";
genericModalContent.innerHTML = `
-
-
- `;
+
+
+ `;
publishAppModal.show();
},
showPublishModal: (shareLink = "", iframeLink = "", draftLink = "") => {
const publishModal = new bootstrap.Modal("#genericModal");
genericModalContent.innerHTML = "";
genericModalContent.innerHTML = `
-
-
-
-
- ${mviewer.tr("publish.available.app")}
-
-
-
-
-
-
-
-
-
-
-
-
-
${mviewer.tr("publish.choice")}
-
-
- ${mviewer.tr(
- "modal.exit.nextChange"
- )}
-
-
-
- ${mviewer.tr(
- "modal.exit.goHome"
- )}
-
-
${mviewer.tr(
- "modal.exit.previous"
- )}
-
- `;
+
+
+
+
+ ${mviewer.tr("publish.available.app")}
+
+
+
+
+
+
+
+
+
+
+
+
+
${mviewer.tr("publish.choice")}
+
+
+ ${mviewer.tr(
+ "modal.exit.nextChange"
+ )}
+
+
+
+ ${mviewer.tr(
+ "modal.exit.goHome"
+ )}
+
+
${mviewer.tr(
+ "modal.exit.previous"
+ )}
+
+ `;
publishModal.show();
},
publish: (id, name = "", message = "") => {
@@ -2684,5 +2844,11 @@ var mv = (function () {
saveThemes();
saveStudio();
},
+
+ resetActive: resetActive,
+ sortableInstances: [],
+ cleanSortableInstances: () => {
+ sortableInstances.forEach((x) => x.destroy());
+ },
};
})();
diff --git a/mviewerstudio.i18n.json b/mviewerstudio.i18n.json
index 8c1d21ea..475b130f 100644
--- a/mviewerstudio.i18n.json
+++ b/mviewerstudio.i18n.json
@@ -164,8 +164,8 @@
"tabs.data.title": "Thématiques & données",
"tabs.data.themespanel.title": "Panneau des thématiques",
"tabs.data.themespanel.subtitle": "Créer, importer et gérer vos thématiques et données",
- "tabs.data.themespanel.create": "Créer",
- "tabs.data.themespanel.import": "Importer",
+ "tabs.data.themespanel.create": "Ajouter une thématique",
+ "tabs.data.themespanel.import": "Importer une thématique",
"tabs.data.themespanel.options": "Réduire le panneau des thématiques au démarrage",
"modal.theme.paramspanel.title": "Paramètres de la thématique sélectionnée",
"modal.theme.paramspanel.name": "Nom",
@@ -497,8 +497,8 @@
"tabs.data.help_title": "Selection, configuration and organization of the data",
"tabs.data.help_text": "Create several themes (folders) then put some data in them, coming from several platforms. You can also add some external themes",
"tabs.data.themespanel.title": "Themes panel",
- "tabs.data.themespanel.create": "Create",
- "tabs.data.themespanel.import": "Import",
+ "tabs.data.themespanel.create": "Add a theme",
+ "tabs.data.themespanel.import": "Import a theme",
"tabs.data.themespanel.options": "Display option: shrink the themes panel on startup",
"tabs.data.paramspanel.title": "Configure the selected Theme",
"tabs.data.paramspanel.name": "Name",
diff --git a/srv/python/.vscode/launch.json b/srv/python/.vscode/launch.json
new file mode 100644
index 00000000..4efb0c14
--- /dev/null
+++ b/srv/python/.vscode/launch.json
@@ -0,0 +1,31 @@
+{
+ // Use IntelliSense to learn about possible attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "Python Debugger: Flask",
+ "type": "python",
+ "request": "launch",
+ "module": "flask",
+ "env": {
+ "FLASK_APP": "mviewerstudio_backend/app.py",
+ "FLASK_DEBUG": "1",
+ "CONF_PATH_FROM_MVIEWER":"apps/store",
+ "EXPORT_CONF_FOLDER":"/home/user/git/mviewer/apps/store/",
+ "MVIEWERSTUDIO_PUBLISH_PATH":"/home/user/git/mviewer/apps/public",
+ "CONF_PUBLISH_PATH_FROM_MVIEWER":"apps/public",
+ "DEFAULT_ORG":"geobretagne",
+
+ },
+ "args": [
+ "run",
+ "--no-debugger",
+ "--no-reload"
+ ],
+ "jinja": true,
+ "autoStartBrowser": false
+ }
+ ]
+}
diff --git a/srv/python/sync.sh b/srv/python/sync.sh
index 82d7d756..087e8bb4 100644
--- a/srv/python/sync.sh
+++ b/srv/python/sync.sh
@@ -53,7 +53,7 @@ cp -pr "${src}/css/mviewerstudio.css" "${target}/css/mviewerstudio.css"
cp -pr "${src}/mviewerstudio.i18n.json" "${target}/mviewerstudio.i18n.json"
echo "....END."
-exit 0
+#exit 0