domma-cms 0.36.7 → 0.36.8
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.
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(c,l){typeof module<"u"&&module.exports?module.exports=l():c.FormLogicEngine=l()})(typeof globalThis<"u"?globalThis:this,function(){"use strict";function c(e){return e===""||e===null||e===void 0?"":String(e)}function l(e){const
|
|
1
|
+
(function(c,l){typeof module<"u"&&module.exports?module.exports=l():c.FormLogicEngine=l()})(typeof globalThis<"u"?globalThis:this,function(){"use strict";function c(e){return e===""||e===null||e===void 0?"":String(e)}function l(e){const i=parseFloat(e);return isNaN(i)?null:i}function f(e){return e==null?!0:typeof e=="string"?e.trim()==="":Array.isArray(e)?e.length===0:!1}function p(e,i){if(!e||!e.field||!e.operator)return!0;const n=i[e.field],t=c(n),r=c(e.value);switch(e.operator){case"equals":return t===r;case"not_equals":return t!==r;case"contains":return t.toLowerCase().includes(r.toLowerCase());case"not_contains":return!t.toLowerCase().includes(r.toLowerCase());case"starts_with":return t.toLowerCase().startsWith(r.toLowerCase());case"ends_with":return t.toLowerCase().endsWith(r.toLowerCase());case"greater_than":{const s=l(n),a=l(e.value);return s!==null&&a!==null&&s>a}case"less_than":{const s=l(n),a=l(e.value);return s!==null&&a!==null&&s<a}case"is_empty":return f(n);case"is_not_empty":return!f(n);case"in":return(Array.isArray(e.value)?e.value.map(c):String(e.value).split(",").map(a=>a.trim())).includes(t);case"not_in":return!(Array.isArray(e.value)?e.value.map(c):String(e.value).split(",").map(a=>a.trim())).includes(t);case"matches_regex":try{const s=e.flags||"";return new RegExp(e.value,s).test(t)}catch(s){return typeof console<"u"&&console.warn&&console.warn('[FormLogicEngine] Invalid regex in condition for field "'+e.field+'": '+e.value,s&&s.message),!1}default:return!0}}function u(e,i){return e?Array.isArray(e.all)?e.all.every(n=>n.all||n.any?u(n,i):p(n,i)):Array.isArray(e.any)?e.any.some(n=>n.all||n.any?u(n,i):p(n,i)):e.field&&e.operator?p(e,i):!0:!0}function y(e,i){const n=e.logic;if(!n||!n.visibility)return"visible";const t=n.visibility,r=t.conditions||[];for(const s of r)if(s.when&&u(s.when,i))return s.then==="hidden"?"hidden":"visible";return t.default==="hidden"?"hidden":"visible"}function h(e,i){const n=e.logic;if(!n||!n.requirement)return e.required||!1;const t=n.requirement,r=t.conditions||[];for(const s of r)if(s.when&&u(s.when,i))return s.then===!0;return t.default===!0}function m(e,i,n){const t=e.logic;if(!t||!Array.isArray(t.validation))return[];const r=[];for(const s of t.validation)switch(s.type){case"regex":{if(!f(i))try{new RegExp(s.pattern||"",s.flags||"").test(c(i))||r.push({message:s.message||"Invalid format."})}catch{}break}case"match":{const a=n[s.field];!f(i)&&c(i)!==c(a)&&r.push({message:s.message||"Fields do not match."});break}}return r}function _(e,i){const n=e.logic;if(!n||!n.cascade||!n.cascade.sourceField)return null;const t=n.cascade,r=c(i[t.sourceField]),s=t.mapping||{};return Object.prototype.hasOwnProperty.call(s,r)?s[r]||[]:t.defaultOptions||null}function v(e,i){i==="fade"?(e.style.transition="opacity 0.25s ease",e.style.opacity="1",requestAnimationFrame(function(){e.style.opacity="0",setTimeout(function(){e.classList.add("fb-field-hidden"),e.style.transition="",e.style.opacity=""},260)})):i==="slide"?(e.style.overflow="hidden",e.style.maxHeight=e.scrollHeight+"px",e.style.transition="max-height 0.3s ease, opacity 0.2s ease",requestAnimationFrame(function(){e.style.maxHeight="0",e.style.opacity="0",setTimeout(function(){e.classList.add("fb-field-hidden"),e.style.transition="",e.style.maxHeight="",e.style.opacity="",e.style.overflow=""},320)})):i==="scale"&&(e.style.transition="opacity 0.2s ease, transform 0.2s ease",e.style.transform="scale(1)",e.style.opacity="1",requestAnimationFrame(function(){e.style.transform="scale(0.95)",e.style.opacity="0",setTimeout(function(){e.classList.add("fb-field-hidden"),e.style.transition="",e.style.transform="",e.style.opacity=""},220)}))}function g(e,i){e.classList.remove("fb-field-hidden"),i==="fade"?(e.style.opacity="0",e.style.transition="opacity 0.25s ease",requestAnimationFrame(function(){e.style.opacity="1",setTimeout(function(){e.style.transition="",e.style.opacity=""},260)})):i==="slide"?(e.style.overflow="hidden",e.style.maxHeight="0",e.style.opacity="0",e.style.transition="max-height 0.3s ease, opacity 0.2s ease",requestAnimationFrame(function(){e.style.maxHeight=e.scrollHeight+"px",e.style.opacity="1",setTimeout(function(){e.style.transition="",e.style.maxHeight="",e.style.opacity="",e.style.overflow=""},320)})):i==="scale"&&(e.style.transform="scale(0.95)",e.style.opacity="0",e.style.transition="opacity 0.2s ease, transform 0.2s ease",requestAnimationFrame(function(){e.style.transform="scale(1)",e.style.opacity="1",setTimeout(function(){e.style.transition="",e.style.transform="",e.style.opacity=""},220)}))}function o(e,i){this._form=e,this._wrapper=i,this._fields=(e.fields||[]).filter(n=>n.type!=="page-break"),this._listeners=[],this._depMap=new Map,this._initialEval=!1}return o.prototype._buildDepMap=function(){this._depMap.clear();const e=this;e._fields.forEach(function(i){const n=i.logic;if(!n)return;function t(r){if(!r)return;(r.all||r.any||[]).forEach(function(a){a.field?(e._depMap.has(a.field)||e._depMap.set(a.field,new Set),e._depMap.get(a.field).add(i.name)):t(a)})}if(n.visibility&&(n.visibility.conditions||[]).forEach(function(r){t(r.when)}),n.requirement&&(n.requirement.conditions||[]).forEach(function(r){t(r.when)}),n.cascade&&n.cascade.sourceField){const r=n.cascade.sourceField;e._depMap.has(r)||e._depMap.set(r,new Set),e._depMap.get(r).add(i.name)}})},o.prototype._getValues=function(){const e={};return this._fields.forEach(function(i){const n=this._wrapper.querySelector('[name="'+i.name+'"]');if(n)if(n.type==="radio"){const t=this._wrapper.querySelector('[name="'+i.name+'"]:checked');e[i.name]=t?t.value:""}else if(n.type==="checkbox"){const t=this._wrapper.querySelectorAll('input[type="checkbox"][name="'+i.name+'"]');if(t.length>1){const r=[];t.forEach(function(s){s.checked&&r.push(s.value)}),e[i.name]=r}else e[i.name]=n.checked?n.value||"true":""}else e[i.name]=n.value},this),e},o.prototype._applyVisibility=function(e,i){const t=y(e,i)==="hidden",r=this._findFieldWrapper(e.name);if(!r)return;r.setAttribute("aria-hidden",String(t));const s=this._initialEval?"none":e.logic?.visibility?.transition||"none";if(s==="none"){r.classList.toggle("fb-field-hidden",t);return}r.style.transition="",t?v(r,s):g(r,s)},o.prototype._applyRequirement=function(e,i){const n=h(e,i),t=this._wrapper.querySelector('[name="'+e.name+'"]');t&&(n?t.setAttribute("required",""):t.removeAttribute("required"))},o.prototype._applyCascade=function(e,i){const n=_(e,i);if(n===null)return;const t=this._wrapper.querySelector('select[name="'+e.name+'"]');if(!t)return;const r=t.value;t.textContent="",n.forEach(function(s){const a=document.createElement("option");a.value=s.value,a.textContent=s.label||s.value,s.value===r&&(a.selected=!0),t.appendChild(a)})},o.prototype._applyValidation=function(e,i){const n=this._wrapper.querySelector('[name="'+e.name+'"]');if(!n)return;const t=n.type==="checkbox"?n.checked?n.value||"true":"":n.value,r=m(e,t,i);let s=n.parentNode.querySelector(".fb-validation-error");r.length?(s||(s=document.createElement("div"),s.className="fb-validation-error",n.parentNode.appendChild(s)),s.textContent=r[0].message):s&&s.remove()},o.prototype._findFieldWrapper=function(e){const i=this._wrapper.querySelector('[name="'+e+'"]');if(!i)return null;const n=i.closest("form")||this._wrapper;let t=i;for(;t.parentNode&&t.parentNode!==n;)t=t.parentNode;return t},o.prototype.evaluate=function(e){const i=this._getValues(),n=this;let t;if(e&&this._depMap.has(e)){const r=this._depMap.get(e);t=this._fields.filter(function(s){return r.has(s.name)})}else t=this._fields;t.forEach(function(r){r.logic&&(n._applyVisibility(r,i),n._applyRequirement(r,i),n._applyCascade(r,i))})},o.prototype.init=function(){this._buildDepMap();const e=this;this._wrapper.querySelectorAll("input, select, textarea").forEach(function(t){const r=t.getAttribute("name");if(!r)return;const s=function(){e.evaluate(r)};t.addEventListener("input",s),t.addEventListener("change",s),e._listeners.push({el:t,event:"input",fn:s}),e._listeners.push({el:t,event:"change",fn:s});const a=e._fields.find(function(d){return d.name===r});if(a&&a.logic&&Array.isArray(a.logic.validation)&&a.logic.validation.length){const d=function(){const w=e._getValues();e._applyValidation(a,w)};t.addEventListener("blur",d),e._listeners.push({el:t,event:"blur",fn:d})}}),this._wrapper.querySelectorAll("[data-chooser-field]").forEach(function(t){const r=t.getAttribute("data-chooser-field");if(!r)return;const s=function(){setTimeout(function(){e.evaluate(r)},0)};t.addEventListener("click",s),e._listeners.push({el:t,event:"click",fn:s})}),this._initialEval=!0,this.evaluate(),this._initialEval=!1},o.prototype.destroy=function(){this._listeners.forEach(function(e){e.el.removeEventListener(e.event,e.fn)}),this._listeners=[]},{evaluateCondition:p,evaluateConditionGroup:u,evaluateFieldVisibility:y,evaluateFieldRequirement:h,validateField:m,getCascadeOptions:_,FormLogicRuntime:o}});
|
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
<script src="/public/js/collection-browser.js?v=20260523-browser"></script>
|
|
124
124
|
|
|
125
125
|
<!-- Core Forms (logic engine must load before renderer) -->
|
|
126
|
-
<script src="/public/js/form-logic-engine.js?v=
|
|
126
|
+
<script src="/public/js/form-logic-engine.js?v=20260704-chooser-events"></script>
|
|
127
127
|
<script src="/public/js/forms.js?v=20260509-chooser" type="module"></script>
|
|
128
128
|
|
|
129
129
|
<!-- Core effects runtime -->
|