@saltcorn/server 0.8.7-beta.4 → 0.8.7-beta.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.
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @popperjs/core v2.11.6 - MIT License
3
+ */
4
+
5
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){"use strict";function t(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function n(e){return e instanceof t(e).Element||e instanceof Element}function r(e){return e instanceof t(e).HTMLElement||e instanceof HTMLElement}function o(e){return"undefined"!=typeof ShadowRoot&&(e instanceof t(e).ShadowRoot||e instanceof ShadowRoot)}var i=Math.max,a=Math.min,s=Math.round;function f(){var e=navigator.userAgentData;return null!=e&&e.brands?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function c(){return!/^((?!chrome|android).)*safari/i.test(f())}function p(e,o,i){void 0===o&&(o=!1),void 0===i&&(i=!1);var a=e.getBoundingClientRect(),f=1,p=1;o&&r(e)&&(f=e.offsetWidth>0&&s(a.width)/e.offsetWidth||1,p=e.offsetHeight>0&&s(a.height)/e.offsetHeight||1);var u=(n(e)?t(e):window).visualViewport,l=!c()&&i,d=(a.left+(l&&u?u.offsetLeft:0))/f,h=(a.top+(l&&u?u.offsetTop:0))/p,m=a.width/f,v=a.height/p;return{width:m,height:v,top:h,right:d+m,bottom:h+v,left:d,x:d,y:h}}function u(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function l(e){return e?(e.nodeName||"").toLowerCase():null}function d(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function h(e){return p(d(e)).left+u(e).scrollLeft}function m(e){return t(e).getComputedStyle(e)}function v(e){var t=m(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function y(e,n,o){void 0===o&&(o=!1);var i,a,f=r(n),c=r(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,r=s(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(n),m=d(n),y=p(e,c,o),g={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(f||!f&&!o)&&(("body"!==l(n)||v(m))&&(g=(i=n)!==t(i)&&r(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:u(i)),r(n)?((b=p(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):m&&(b.x=h(m))),{x:y.left+g.scrollLeft-b.x,y:y.top+g.scrollTop-b.y,width:y.width,height:y.height}}function g(e){var t=p(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function b(e){return"html"===l(e)?e:e.assignedSlot||e.parentNode||(o(e)?e.host:null)||d(e)}function w(e){return["html","body","#document"].indexOf(l(e))>=0?e.ownerDocument.body:r(e)&&v(e)?e:w(b(e))}function x(e,n){var r;void 0===n&&(n=[]);var o=w(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=t(o),s=i?[a].concat(a.visualViewport||[],v(o)?o:[]):o,f=n.concat(s);return i?f:f.concat(x(b(s)))}function O(e){return["table","td","th"].indexOf(l(e))>=0}function j(e){return r(e)&&"fixed"!==m(e).position?e.offsetParent:null}function E(e){for(var n=t(e),i=j(e);i&&O(i)&&"static"===m(i).position;)i=j(i);return i&&("html"===l(i)||"body"===l(i)&&"static"===m(i).position)?n:i||function(e){var t=/firefox/i.test(f());if(/Trident/i.test(f())&&r(e)&&"fixed"===m(e).position)return null;var n=b(e);for(o(n)&&(n=n.host);r(n)&&["html","body"].indexOf(l(n))<0;){var i=m(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var D="top",A="bottom",L="right",P="left",M="auto",k=[D,A,L,P],W="start",B="end",H="viewport",T="popper",R=k.reduce((function(e,t){return e.concat([t+"-"+W,t+"-"+B])}),[]),S=[].concat(k,[M]).reduce((function(e,t){return e.concat([t,t+"-"+W,t+"-"+B])}),[]),V=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function q(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function C(e){return e.split("-")[0]}function N(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&o(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function I(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function _(e,r,o){return r===H?I(function(e,n){var r=t(e),o=d(e),i=r.visualViewport,a=o.clientWidth,s=o.clientHeight,f=0,p=0;if(i){a=i.width,s=i.height;var u=c();(u||!u&&"fixed"===n)&&(f=i.offsetLeft,p=i.offsetTop)}return{width:a,height:s,x:f+h(e),y:p}}(e,o)):n(r)?function(e,t){var n=p(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(r,o):I(function(e){var t,n=d(e),r=u(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=i(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=i(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),f=-r.scrollLeft+h(e),c=-r.scrollTop;return"rtl"===m(o||n).direction&&(f+=i(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:s,x:f,y:c}}(d(e)))}function F(e,t,o,s){var f="clippingParents"===t?function(e){var t=x(b(e)),o=["absolute","fixed"].indexOf(m(e).position)>=0&&r(e)?E(e):e;return n(o)?t.filter((function(e){return n(e)&&N(e,o)&&"body"!==l(e)})):[]}(e):[].concat(t),c=[].concat(f,[o]),p=c[0],u=c.reduce((function(t,n){var r=_(e,n,s);return t.top=i(r.top,t.top),t.right=a(r.right,t.right),t.bottom=a(r.bottom,t.bottom),t.left=i(r.left,t.left),t}),_(e,p,s));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function U(e){return e.split("-")[1]}function z(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function X(e){var t,n=e.reference,r=e.element,o=e.placement,i=o?C(o):null,a=o?U(o):null,s=n.x+n.width/2-r.width/2,f=n.y+n.height/2-r.height/2;switch(i){case D:t={x:s,y:n.y-r.height};break;case A:t={x:s,y:n.y+n.height};break;case L:t={x:n.x+n.width,y:f};break;case P:t={x:n.x-r.width,y:f};break;default:t={x:n.x,y:n.y}}var c=i?z(i):null;if(null!=c){var p="y"===c?"height":"width";switch(a){case W:t[c]=t[c]-(n[p]/2-r[p]/2);break;case B:t[c]=t[c]+(n[p]/2-r[p]/2)}}return t}function Y(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function G(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function J(e,t){void 0===t&&(t={});var r=t,o=r.placement,i=void 0===o?e.placement:o,a=r.strategy,s=void 0===a?e.strategy:a,f=r.boundary,c=void 0===f?"clippingParents":f,u=r.rootBoundary,l=void 0===u?H:u,h=r.elementContext,m=void 0===h?T:h,v=r.altBoundary,y=void 0!==v&&v,g=r.padding,b=void 0===g?0:g,w=Y("number"!=typeof b?b:G(b,k)),x=m===T?"reference":T,O=e.rects.popper,j=e.elements[y?x:m],E=F(n(j)?j:j.contextElement||d(e.elements.popper),c,l,s),P=p(e.elements.reference),M=X({reference:P,element:O,strategy:"absolute",placement:i}),W=I(Object.assign({},O,M)),B=m===T?W:P,R={top:E.top-B.top+w.top,bottom:B.bottom-E.bottom+w.bottom,left:E.left-B.left+w.left,right:B.right-E.right+w.right},S=e.modifiersData.offset;if(m===T&&S){var V=S[i];Object.keys(R).forEach((function(e){var t=[L,A].indexOf(e)>=0?1:-1,n=[D,A].indexOf(e)>=0?"y":"x";R[e]+=V[n]*t}))}return R}var K={placement:"bottom",modifiers:[],strategy:"absolute"};function Q(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return!t.some((function(e){return!(e&&"function"==typeof e.getBoundingClientRect)}))}function Z(e){void 0===e&&(e={});var t=e,r=t.defaultModifiers,o=void 0===r?[]:r,i=t.defaultOptions,a=void 0===i?K:i;return function(e,t,r){void 0===r&&(r=a);var i,s,f={placement:"bottom",orderedModifiers:[],options:Object.assign({},K,a),modifiersData:{},elements:{reference:e,popper:t},attributes:{},styles:{}},c=[],p=!1,u={state:f,setOptions:function(r){var i="function"==typeof r?r(f.options):r;l(),f.options=Object.assign({},a,f.options,i),f.scrollParents={reference:n(e)?x(e):e.contextElement?x(e.contextElement):[],popper:x(t)};var s,p,d=function(e){var t=q(e);return V.reduce((function(e,n){return e.concat(t.filter((function(e){return e.phase===n})))}),[])}((s=[].concat(o,f.options.modifiers),p=s.reduce((function(e,t){var n=e[t.name];return e[t.name]=n?Object.assign({},n,t,{options:Object.assign({},n.options,t.options),data:Object.assign({},n.data,t.data)}):t,e}),{}),Object.keys(p).map((function(e){return p[e]}))));return f.orderedModifiers=d.filter((function(e){return e.enabled})),f.orderedModifiers.forEach((function(e){var t=e.name,n=e.options,r=void 0===n?{}:n,o=e.effect;if("function"==typeof o){var i=o({state:f,name:t,instance:u,options:r}),a=function(){};c.push(i||a)}})),u.update()},forceUpdate:function(){if(!p){var e=f.elements,t=e.reference,n=e.popper;if(Q(t,n)){f.rects={reference:y(t,E(n),"fixed"===f.options.strategy),popper:g(n)},f.reset=!1,f.placement=f.options.placement,f.orderedModifiers.forEach((function(e){return f.modifiersData[e.name]=Object.assign({},e.data)}));for(var r=0;r<f.orderedModifiers.length;r++)if(!0!==f.reset){var o=f.orderedModifiers[r],i=o.fn,a=o.options,s=void 0===a?{}:a,c=o.name;"function"==typeof i&&(f=i({state:f,options:s,name:c,instance:u})||f)}else f.reset=!1,r=-1}}},update:(i=function(){return new Promise((function(e){u.forceUpdate(),e(f)}))},function(){return s||(s=new Promise((function(e){Promise.resolve().then((function(){s=void 0,e(i())}))}))),s}),destroy:function(){l(),p=!0}};if(!Q(e,t))return u;function l(){c.forEach((function(e){return e()})),c=[]}return u.setOptions(r).then((function(e){!p&&r.onFirstUpdate&&r.onFirstUpdate(e)})),u}}var $={passive:!0};var ee={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var n=e.state,r=e.instance,o=e.options,i=o.scroll,a=void 0===i||i,s=o.resize,f=void 0===s||s,c=t(n.elements.popper),p=[].concat(n.scrollParents.reference,n.scrollParents.popper);return a&&p.forEach((function(e){e.addEventListener("scroll",r.update,$)})),f&&c.addEventListener("resize",r.update,$),function(){a&&p.forEach((function(e){e.removeEventListener("scroll",r.update,$)})),f&&c.removeEventListener("resize",r.update,$)}},data:{}};var te={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=X({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},ne={top:"auto",right:"auto",bottom:"auto",left:"auto"};function re(e){var n,r=e.popper,o=e.popperRect,i=e.placement,a=e.variation,f=e.offsets,c=e.position,p=e.gpuAcceleration,u=e.adaptive,l=e.roundOffsets,h=e.isFixed,v=f.x,y=void 0===v?0:v,g=f.y,b=void 0===g?0:g,w="function"==typeof l?l({x:y,y:b}):{x:y,y:b};y=w.x,b=w.y;var x=f.hasOwnProperty("x"),O=f.hasOwnProperty("y"),j=P,M=D,k=window;if(u){var W=E(r),H="clientHeight",T="clientWidth";if(W===t(r)&&"static"!==m(W=d(r)).position&&"absolute"===c&&(H="scrollHeight",T="scrollWidth"),W=W,i===D||(i===P||i===L)&&a===B)M=A,b-=(h&&W===k&&k.visualViewport?k.visualViewport.height:W[H])-o.height,b*=p?1:-1;if(i===P||(i===D||i===A)&&a===B)j=L,y-=(h&&W===k&&k.visualViewport?k.visualViewport.width:W[T])-o.width,y*=p?1:-1}var R,S=Object.assign({position:c},u&&ne),V=!0===l?function(e){var t=e.x,n=e.y,r=window.devicePixelRatio||1;return{x:s(t*r)/r||0,y:s(n*r)/r||0}}({x:y,y:b}):{x:y,y:b};return y=V.x,b=V.y,p?Object.assign({},S,((R={})[M]=O?"0":"",R[j]=x?"0":"",R.transform=(k.devicePixelRatio||1)<=1?"translate("+y+"px, "+b+"px)":"translate3d("+y+"px, "+b+"px, 0)",R)):Object.assign({},S,((n={})[M]=O?b+"px":"",n[j]=x?y+"px":"",n.transform="",n))}var oe={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,r=n.gpuAcceleration,o=void 0===r||r,i=n.adaptive,a=void 0===i||i,s=n.roundOffsets,f=void 0===s||s,c={placement:C(t.placement),variation:U(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,re(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:a,roundOffsets:f})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,re(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:f})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}};var ie={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},o=t.attributes[e]||{},i=t.elements[e];r(i)&&l(i)&&(Object.assign(i.style,n),Object.keys(o).forEach((function(e){var t=o[e];!1===t?i.removeAttribute(e):i.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var o=t.elements[e],i=t.attributes[e]||{},a=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});r(o)&&l(o)&&(Object.assign(o.style,a),Object.keys(i).forEach((function(e){o.removeAttribute(e)})))}))}},requires:["computeStyles"]};var ae={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.offset,i=void 0===o?[0,0]:o,a=S.reduce((function(e,n){return e[n]=function(e,t,n){var r=C(e),o=[P,D].indexOf(r)>=0?-1:1,i="function"==typeof n?n(Object.assign({},t,{placement:e})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[P,L].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}(n,t.rects,i),e}),{}),s=a[t.placement],f=s.x,c=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=f,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=a}},se={left:"right",right:"left",bottom:"top",top:"bottom"};function fe(e){return e.replace(/left|right|bottom|top/g,(function(e){return se[e]}))}var ce={start:"end",end:"start"};function pe(e){return e.replace(/start|end/g,(function(e){return ce[e]}))}function ue(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=void 0===f?S:f,p=U(r),u=p?s?R:R.filter((function(e){return U(e)===p})):k,l=u.filter((function(e){return c.indexOf(e)>=0}));0===l.length&&(l=u);var d=l.reduce((function(t,n){return t[n]=J(e,{placement:n,boundary:o,rootBoundary:i,padding:a})[C(n)],t}),{});return Object.keys(d).sort((function(e,t){return d[e]-d[t]}))}var le={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0===a||a,f=n.fallbackPlacements,c=n.padding,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.flipVariations,h=void 0===d||d,m=n.allowedAutoPlacements,v=t.options.placement,y=C(v),g=f||(y===v||!h?[fe(v)]:function(e){if(C(e)===M)return[];var t=fe(e);return[pe(e),t,pe(t)]}(v)),b=[v].concat(g).reduce((function(e,n){return e.concat(C(n)===M?ue(t,{placement:n,boundary:p,rootBoundary:u,padding:c,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),w=t.rects.reference,x=t.rects.popper,O=new Map,j=!0,E=b[0],k=0;k<b.length;k++){var B=b[k],H=C(B),T=U(B)===W,R=[D,A].indexOf(H)>=0,S=R?"width":"height",V=J(t,{placement:B,boundary:p,rootBoundary:u,altBoundary:l,padding:c}),q=R?T?L:P:T?A:D;w[S]>x[S]&&(q=fe(q));var N=fe(q),I=[];if(i&&I.push(V[H]<=0),s&&I.push(V[q]<=0,V[N]<=0),I.every((function(e){return e}))){E=B,j=!1;break}O.set(B,I)}if(j)for(var _=function(e){var t=b.find((function(t){var n=O.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return E=t,"break"},F=h?3:1;F>0;F--){if("break"===_(F))break}t.placement!==E&&(t.modifiersData[r]._skip=!0,t.placement=E,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function de(e,t,n){return i(e,a(t,n))}var he={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=void 0===o||o,f=n.altAxis,c=void 0!==f&&f,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.padding,h=n.tether,m=void 0===h||h,v=n.tetherOffset,y=void 0===v?0:v,b=J(t,{boundary:p,rootBoundary:u,padding:d,altBoundary:l}),w=C(t.placement),x=U(t.placement),O=!x,j=z(w),M="x"===j?"y":"x",k=t.modifiersData.popperOffsets,B=t.rects.reference,H=t.rects.popper,T="function"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,R="number"==typeof T?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),S=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,V={x:0,y:0};if(k){if(s){var q,N="y"===j?D:P,I="y"===j?A:L,_="y"===j?"height":"width",F=k[j],X=F+b[N],Y=F-b[I],G=m?-H[_]/2:0,K=x===W?B[_]:H[_],Q=x===W?-H[_]:-B[_],Z=t.elements.arrow,$=m&&Z?g(Z):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[N],ne=ee[I],re=de(0,B[_],$[_]),oe=O?B[_]/2-G-re-te-R.mainAxis:K-re-te-R.mainAxis,ie=O?-B[_]/2+G+re+ne+R.mainAxis:Q+re+ne+R.mainAxis,ae=t.elements.arrow&&E(t.elements.arrow),se=ae?"y"===j?ae.clientTop||0:ae.clientLeft||0:0,fe=null!=(q=null==S?void 0:S[j])?q:0,ce=F+ie-fe,pe=de(m?a(X,F+oe-fe-se):X,F,m?i(Y,ce):Y);k[j]=pe,V[j]=pe-F}if(c){var ue,le="x"===j?D:P,he="x"===j?A:L,me=k[M],ve="y"===M?"height":"width",ye=me+b[le],ge=me-b[he],be=-1!==[D,P].indexOf(w),we=null!=(ue=null==S?void 0:S[M])?ue:0,xe=be?ye:me-B[ve]-H[ve]-we+R.altAxis,Oe=be?me+B[ve]+H[ve]-we-R.altAxis:ge,je=m&&be?function(e,t,n){var r=de(e,t,n);return r>n?n:r}(xe,me,Oe):de(m?xe:ye,me,m?Oe:ge);k[M]=je,V[M]=je-me}t.modifiersData[r]=V}},requiresIfExists:["offset"]};var me={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=C(n.placement),f=z(s),c=[P,L].indexOf(s)>=0?"height":"width";if(i&&a){var p=function(e,t){return Y("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:G(e,k))}(o.padding,n),u=g(i),l="y"===f?D:P,d="y"===f?A:L,h=n.rects.reference[c]+n.rects.reference[f]-a[f]-n.rects.popper[c],m=a[f]-n.rects.reference[f],v=E(i),y=v?"y"===f?v.clientHeight||0:v.clientWidth||0:0,b=h/2-m/2,w=p[l],x=y-u[c]-p[d],O=y/2-u[c]/2+b,j=de(w,O,x),M=f;n.modifiersData[r]=((t={})[M]=j,t.centerOffset=j-O,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&N(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ve(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function ye(e){return[D,L,A,P].some((function(t){return e[t]>=0}))}var ge={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,i=t.modifiersData.preventOverflow,a=J(t,{elementContext:"reference"}),s=J(t,{altBoundary:!0}),f=ve(a,r),c=ve(s,o,i),p=ye(f),u=ye(c);t.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:p,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":u})}},be=Z({defaultModifiers:[ee,te,oe,ie]}),we=[ee,te,oe,ie,ae,le,he,me,ge],xe=Z({defaultModifiers:we});e.applyStyles=ie,e.arrow=me,e.computeStyles=oe,e.createPopper=xe,e.createPopperLite=be,e.defaultModifiers=we,e.detectOverflow=J,e.eventListeners=ee,e.flip=le,e.hide=ge,e.offset=ae,e.popperGenerator=Z,e.popperOffsets=te,e.preventOverflow=he,Object.defineProperty(e,"__esModule",{value:!0})}));
6
+ //# sourceMappingURL=popper.min.js.map
@@ -0,0 +1,75 @@
1
+ var erHelper = (() => {
2
+ const parseHelper = (arr, parseFn, start) => {
3
+ return arr?.length === 2 ? parseFn(arr[1]) : start;
4
+ };
5
+
6
+ const parseTransform = () => {
7
+ const transform = $("svg[aria-roledescription='er']")[0].style.transform;
8
+ if (!transform)
9
+ return {
10
+ translateX: 0,
11
+ translateY: 0,
12
+ scale: 1.0,
13
+ };
14
+ else
15
+ return {
16
+ translateX: parseHelper(
17
+ /translateX\((.*)px\)/.exec(transform),
18
+ Number.parseInt,
19
+ 0
20
+ ),
21
+ translateY: parseHelper(
22
+ /translateY\((.*)px\)/.exec(transform),
23
+ Number.parseInt,
24
+ 0
25
+ ),
26
+ scale: parseHelper(
27
+ /scale\((.*)\)/.exec(transform),
28
+ Number.parseFloat,
29
+ 1.0
30
+ ),
31
+ };
32
+ };
33
+
34
+ const buildTransform = ({ translateX, translateY, scale } = {}) => {
35
+ $("svg[aria-roledescription='er']").css(
36
+ "transform",
37
+ `translateX(${translateX || 0}px) translateY(${
38
+ translateY || 0
39
+ }px) scale(${scale || 1.0})`
40
+ );
41
+ };
42
+
43
+ return {
44
+ translateY: (val) => {
45
+ const parsed = parseTransform();
46
+ parsed.translateY += val;
47
+ buildTransform(parsed);
48
+ },
49
+ translateX: (val) => {
50
+ const parsed = parseTransform();
51
+ parsed.translateX += val;
52
+ buildTransform(parsed);
53
+ },
54
+ zoom: (val) => {
55
+ const parsed = parseTransform();
56
+ parsed.scale += val;
57
+ buildTransform(parsed);
58
+ },
59
+ reset: () => {
60
+ buildTransform();
61
+ },
62
+ takePicture: () => {
63
+ // TODO as png, so that you can download it via right click
64
+ // right now, you can only print it to pdf
65
+ const svg = $("svg[aria-roledescription='er']")[0];
66
+ const DOMURL = self.URL || self.webkitURL || self;
67
+ const blob = new Blob([new XMLSerializer().serializeToString(svg)], {
68
+ type: "image/svg+xml;charset=utf-8",
69
+ });
70
+ const url = DOMURL.createObjectURL(blob);
71
+ window.open(url);
72
+ DOMURL.revokeObjectURL(url);
73
+ },
74
+ };
75
+ })();
@@ -419,3 +419,51 @@ div.unread-notify {
419
419
  .mt-6 {
420
420
  margin-top: 5rem;
421
421
  }
422
+
423
+ .er-navigation-panel {
424
+ position: absolute;
425
+ bottom: 1em;
426
+ right: 1em;
427
+ display: grid;
428
+ grid-template-columns: 1fr 1fr 1fr;
429
+ gap: 0.2em;
430
+ }
431
+
432
+ .er-screenshot-panel {
433
+ position: absolute;
434
+ top: 1em;
435
+ right: 1em;
436
+ z-index: 1;
437
+ }
438
+
439
+ .er-up {
440
+ grid-column: 2;
441
+ grid-row: 1;
442
+ }
443
+ .er-zoom-in {
444
+ grid-column: 3;
445
+ grid-row: 1;
446
+ }
447
+ .er-left {
448
+ grid-column: 1;
449
+ grid-row: 2;
450
+ }
451
+ .er-reset {
452
+ grid-column: 2;
453
+ grid-row: 2;
454
+ }
455
+ .er-right {
456
+ grid-column: 3;
457
+ grid-row: 2;
458
+ }
459
+ .er-down {
460
+ grid-column: 2;
461
+ grid-row: 3;
462
+ }
463
+ .er-zoom-out {
464
+ grid-column: 3;
465
+ grid-row: 3;
466
+ }
467
+ .sc-modal-linkout {
468
+ color: inherit;
469
+ }
@@ -149,6 +149,8 @@ function pjax_to(href, e) {
149
149
  success: function (res, textStatus, request) {
150
150
  if (!inModal && !localizer.length)
151
151
  window.history.pushState({ url: href }, "", href);
152
+ if (inModal && !localizer.length)
153
+ $(".sc-modal-linkout").attr("href", href);
152
154
  setTimeout(() => {
153
155
  loadPage = true;
154
156
  }, 0);
@@ -258,11 +260,14 @@ function ensure_modal_exists_and_closed() {
258
260
  <div class="modal-content">
259
261
  <div class="modal-header">
260
262
  <h5 class="modal-title">Modal title</h5>
261
- <span class="sc-ajax-indicator-wrapper">
262
- <span class="sc-ajax-indicator ms-2" style="display: none;"><i class="fas fa-save"></i></span>
263
- </span>
264
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close">
265
- </button>
263
+ <div class="">
264
+ <span class="sc-ajax-indicator-wrapper">
265
+ <span class="sc-ajax-indicator ms-2" style="display: none;"><i class="fas fa-save"></i></span>
266
+ </span>
267
+ <a class="sc-modal-linkout ms-2" href="" target="_blank"><i class="fas fa-expand-alt"></i></a>
268
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close">
269
+ </button>
270
+ </div>
266
271
  </div>
267
272
  <div class="modal-body">
268
273
  <p>Modal body text goes here.</p>
@@ -300,6 +305,9 @@ function ajax_modal(url, opts = {}) {
300
305
  );
301
306
  if (saveIndicate) $(".sc-ajax-indicator-wrapper").show();
302
307
  else $(".sc-ajax-indicator-wrapper").hide();
308
+ var linkOut = !!request.getResponseHeader("SaltcornModalLinkOut");
309
+ if (linkOut) $(".sc-modal-linkout").show().attr("href", url);
310
+ else $(".sc-modal-linkout").hide();
303
311
  if (width) $(".modal-dialog").css("max-width", width);
304
312
  else $(".modal-dialog").css("max-width", "");
305
313
  if (title) $("#scmodal .modal-title").html(decodeURIComponent(title));
@@ -44,7 +44,7 @@ const listClass = (tagId, showList) =>
44
44
 
45
45
  const tablesList = async (tables, req, { tagId, domId, showList } = {}) => {
46
46
  const roles = await User.get_roles();
47
- const getRole = (rid) => roles.find((r) => r.id === rid).role;
47
+ const getRole = (rid) => roles.find((r) => r.id === rid)?.role || "?";
48
48
  return tables.length > 0
49
49
  ? mkTable(
50
50
  [
package/routes/diagram.js CHANGED
@@ -22,6 +22,7 @@ const { isAdmin, error_catcher } = require("./utils.js");
22
22
  const Tag = require("@saltcorn/data/models/tag");
23
23
  const Router = require("express-promise-router");
24
24
  const User = require("@saltcorn/data/models/user");
25
+ const db = require("@saltcorn/data/db");
25
26
 
26
27
  const router = new Router();
27
28
  module.exports = router;
@@ -343,16 +344,13 @@ router.get(
343
344
  }`,
344
345
  },
345
346
  {
346
- script:
347
- "https://cdnjs.cloudflare.com/ajax/libs/popper.js/2.9.2/umd/popper.min.js",
347
+ script: `/static_assets/${db.connectObj.version_tag}/popper.min.js`,
348
348
  },
349
349
  {
350
- script:
351
- "https://cdnjs.cloudflare.com/ajax/libs/cytoscape/3.22.1/cytoscape.min.js",
350
+ script: `/static_assets/${db.connectObj.version_tag}/cytoscape.min.js`,
352
351
  },
353
352
  {
354
- script:
355
- "https://cdnjs.cloudflare.com/ajax/libs/cytoscape-popper/2.0.0/cytoscape-popper.min.js",
353
+ script: `/static_assets/${db.connectObj.version_tag}/cytoscape-popper.min.js`,
356
354
  },
357
355
  ],
358
356
  });
package/routes/list.js CHANGED
@@ -100,15 +100,7 @@ router.post(
100
100
  error_catcher(async (req, res) => {
101
101
  const { tableName, id, _version } = req.params;
102
102
  const table = Table.findOne({ name: tableName });
103
-
104
- const fields = table.getFields();
105
- const row = await db.selectOne(`${db.sqlsanitize(table.name)}__history`, {
106
- id,
107
- _version,
108
- });
109
- var r = {};
110
- fields.forEach((f) => (r[f.name] = row[f.name]));
111
- await table.updateRow(r, +id);
103
+ await table.restore_row_version(id, _version);
112
104
  req.flash("success", req.__("Version %s restored", _version));
113
105
  res.redirect(`/list/_versions/${table.name}/${id}`);
114
106
  })
package/routes/tables.js CHANGED
@@ -42,6 +42,7 @@ const {
42
42
  domReady,
43
43
  code,
44
44
  pre,
45
+ button,
45
46
  } = require("@saltcorn/markup/tags");
46
47
  const stringify = require("csv-stringify");
47
48
  const TableConstraint = require("@saltcorn/data/models/table_constraints");
@@ -54,8 +55,11 @@ const {
54
55
  const { getState } = require("@saltcorn/data/db/state");
55
56
  const { cardHeaderTabs } = require("@saltcorn/markup/layout_utils");
56
57
  const { tablesList } = require("./common_lists");
57
- const { InvalidConfiguration } = require("@saltcorn/data/utils");
58
- const { sleep } = require("@saltcorn/data/utils");
58
+ const {
59
+ InvalidConfiguration,
60
+ removeAllWhiteSpace,
61
+ } = require("@saltcorn/data/utils");
62
+ const { EOL } = require("os");
59
63
 
60
64
  const path = require("path");
61
65
  /**
@@ -421,6 +425,101 @@ router.post(
421
425
  })
422
426
  );
423
427
 
428
+ const indentString = (str, indent) => `${" ".repeat(indent)}${str}`;
429
+
430
+ const srcCardinality = (field) => (field.required ? "||" : "|o");
431
+
432
+ const buildTableMarkup = (table) => {
433
+ const fields = table.getFields();
434
+ const members = fields
435
+ // .filter((f) => !f.reftable_name)
436
+ .map((f) =>
437
+ indentString(`${removeAllWhiteSpace(f.type_name)} ${f.name}`, 6)
438
+ )
439
+ .join(EOL);
440
+ const keys = table
441
+ .getForeignKeys()
442
+ .map((f) =>
443
+ indentString(
444
+ `"${table.name}"${srcCardinality(f)}--|| "${f.reftable_name}" : "${
445
+ f.name
446
+ }"`,
447
+ 2
448
+ )
449
+ )
450
+ .join(EOL);
451
+ return `${keys}
452
+ "${table.name}" {${EOL}${members}${EOL} }`;
453
+ };
454
+
455
+ const buildMermaidMarkup = (tables) => {
456
+ const lines = tables.map((table) => buildTableMarkup(table)).join(EOL);
457
+ return `${indentString("erDiagram", 2)}${EOL}${lines}`;
458
+ };
459
+
460
+ const navigationPanel = () =>
461
+ div(
462
+ { class: "er-navigation-panel" },
463
+ button(
464
+ {
465
+ class: "btn btn-primary er-up",
466
+ onclick: "erHelper.translateY(-100)",
467
+ },
468
+ i({ class: "fas fa-chevron-up" })
469
+ ),
470
+ button(
471
+ {
472
+ class: "btn btn-primary er-zoom-in",
473
+ onclick: "erHelper.zoom(0.1)",
474
+ },
475
+ i({ class: "fas fa-search-plus" })
476
+ ),
477
+ button(
478
+ {
479
+ class: "btn btn-primary er-left",
480
+ onclick: "erHelper.translateX(-100)",
481
+ },
482
+ i({ class: "fas fa-chevron-left" })
483
+ ),
484
+ button(
485
+ { class: "btn btn-primary er-reset", onclick: "erHelper.reset()" },
486
+ i({ class: "fas fa-sync-alt" })
487
+ ),
488
+ button(
489
+ {
490
+ class: "btn btn-primary er-right",
491
+ onclick: "erHelper.translateX(100)",
492
+ },
493
+ i({ class: "fas fa-chevron-right" })
494
+ ),
495
+ button(
496
+ {
497
+ class: "btn btn-primary er-down",
498
+ onclick: "erHelper.translateY(100)",
499
+ },
500
+ i({ class: "fas fa-chevron-down" })
501
+ ),
502
+ button(
503
+ {
504
+ class: "btn btn-primary er-zoom-out",
505
+ onclick: "erHelper.zoom(-0.1)",
506
+ },
507
+ i({ class: "fas fa-search-minus" })
508
+ )
509
+ );
510
+
511
+ const screenshotPanel = () =>
512
+ div(
513
+ { class: "er-screenshot-panel" },
514
+ button(
515
+ {
516
+ class: "btn btn-primary",
517
+ onclick: "erHelper.takePicture()",
518
+ },
519
+ i({ class: "fas fa-camera" })
520
+ )
521
+ );
522
+
424
523
  /**
425
524
  * Show Relational Diagram (get)
426
525
  * @name get/relationship-diagram
@@ -433,34 +532,24 @@ router.get(
433
532
  isAdmin,
434
533
  error_catcher(async (req, res) => {
435
534
  const tables = await Table.find_with_external({}, { orderBy: "name" });
436
- const edges = [];
437
- for (const table of tables) {
438
- const fields = table.getFields();
439
- for (const field of fields) {
440
- if (field.reftable_name)
441
- edges.push({
442
- from: table.name,
443
- to: field.reftable_name,
444
- arrows: "to",
445
- });
446
- }
447
- }
448
- const data = {
449
- nodes: tables.map((t) => ({
450
- id: t.name,
451
- label: `<b>${t.name}</b>\n${t.fields
452
- .map((f) => `${f.name} : ${f.pretty_type}`)
453
- .join("\n")}`,
454
- title: t.description ? t.description : t.name,
455
- })),
456
- edges,
457
- };
458
535
  res.sendWrap(
459
536
  {
460
537
  title: req.__("Tables"),
461
538
  headers: [
462
539
  {
463
- script: `/static_assets/${db.connectObj.version_tag}/vis-network.min.js`,
540
+ script: `/static_assets/${db.connectObj.version_tag}/mermaid.min.js`,
541
+ },
542
+ {
543
+ headerTag: `
544
+ <script type="module">
545
+ mermaid.initialize({ startOnLoad: false });
546
+ await mermaid.run({
547
+ querySelector: ".mermaid",
548
+ postRenderCallback: (id) => {
549
+ $("#" + id).css("height", "calc(100vh - 250px)");
550
+ }
551
+ });
552
+ </script>`,
464
553
  },
465
554
  ],
466
555
  },
@@ -482,29 +571,19 @@ router.get(
482
571
  },
483
572
  ]),
484
573
  contents: [
485
- div({ id: "erdvis" }),
486
- script(
487
- domReady(`
488
- var container = document.getElementById('erdvis');
489
- var data = ${JSON.stringify(data)};
490
- var options = {
491
- edges: {length: 250},
492
- nodes: {
493
- font: { align: 'left', multi: "html", size: 20 },
494
- shape: "box"
495
- },
496
- physics: {
497
- // Even though it's disabled the options still apply to network.stabilize().
498
- enabled: false,
499
- solver: "repulsion",
500
- repulsion: {
501
- nodeDistance: 100 // Put more distance between the nodes.
502
- }
503
- }
504
- };
505
- var network = new vis.Network(container, data, options);
506
- network.stabilize();`)
574
+ div(
575
+ {
576
+ style: "height: calc(100vh - 250px);",
577
+ class: "overflow-scroll position-relative",
578
+ },
579
+ screenshotPanel(),
580
+ pre(
581
+ { class: "mermaid", style: "height: calc(100vh - 250px);" },
582
+ buildMermaidMarkup(tables)
583
+ ),
584
+ navigationPanel()
507
585
  ),
586
+ script({ src: "/relationship_diagram_utils.js" }),
508
587
  ],
509
588
  },
510
589
  ],
package/routes/view.js CHANGED
@@ -83,6 +83,8 @@ router.get(
83
83
  );
84
84
  if (isModal && view.attributes?.popup_save_indicator)
85
85
  res.set("SaltcornModalSaveIndicator", `true`);
86
+ if (isModal && view.attributes?.popup_link_out)
87
+ res.set("SaltcornModalLinkOut", `true`);
86
88
  if (tic) {
87
89
  const tock = new Date();
88
90
  const ms = tock.getTime() - tic.getTime();
@@ -250,6 +250,14 @@ const viewForm = async (req, tableOptions, roles, pages, values) => {
250
250
  parent_field: "attributes",
251
251
  tab: "Popup settings",
252
252
  },
253
+ {
254
+ name: "popup_link_out",
255
+ label: req.__("Link out?"),
256
+ sublabel: req.__("Show a link to open popup contents in new tab"),
257
+ type: "Bool",
258
+ parent_field: "attributes",
259
+ tab: "Popup settings",
260
+ },
253
261
  ...(isEdit
254
262
  ? [
255
263
  new Field({