Skip to content
Snippets Groups Projects
Unverified Commit dbfd22d6 authored by Matthias Schiffer's avatar Matthias Schiffer
Browse files

gluon-web: simplify DynamicList data attributes, respect size option

parent bc75ce5c
Branches
Tags
No related merge requests found
<div<%=
attr("data-prefix", id) ..
attr("data-dynlist", {
prefix = id,
type = self.datatype,
optional = self.datatype and self.optional,
}) ..
attr("data-size", self.size) ..
attr("data-placeholder", self.placeholder)
size = self.size,
placeholder = self.placeholder,
})
%>>
<%
for i, val in ipairs(self:cfgvalue()) do
......
!function(){function e(e){return/^-?\d+$/.test(e)?+e:NaN}function t(e){return/^-?\d*\.?\d+?$/.test(e)?+e:NaN}function n(e){var t,n;return(n=e.match(/^([^\(]+)\(([^,]+),([^\)]+)\)$/))&&(t=s[n[1]])!==undefined?function(){return t.apply(this,[n[2],n[3]])}:(n=e.match(/^([^\(]+)\(([^,\)]+)\)$/))&&(t=s[n[1]])!==undefined?function(){return t.apply(this,[n[2]])}:s[e]}function a(e,t){var n,a=document.getElementById(e);return a&&(n="checkbox"==a.type?a.checked:a.value?a.value:""),n==t}function r(e){for(var t=0;t<e.length;t++){var n=!0;for(var r in e[t])n=n&&a(r,e[t][r]);if(n)return!0}return!1}function i(){var e=!1;for(var t in c){var n=c[t],a=document.getElementById(t),u=document.getElementById(n.parent);if(a&&a.parentNode&&!r(n.deps))a.parentNode.removeChild(a),e=!0;else if(u&&(!a||!a.parentNode)&&r(n.deps)){var d=undefined;for(d=u.firstChild;d&&!(d.getAttribute&&parseInt(d.getAttribute("data-index"),10)>n.index);d=d.nextSibling);d?u.insertBefore(n.node,d):u.appendChild(n.node),e=!0}u&&u.parentNode&&u.getAttribute("data-optionals")&&(u.parentNode.style.display=u.options.length<=1?"none":"")}e&&i()}function u(e,t,n,a){return e.addEventListener?e.addEventListener(t,n,!!a):e.attachEvent("on"+t,function(){var e=window.event;return!e.target&&e.srcElement&&(e.target=e.srcElement),!!n(e)}),e}function d(e,t,n){function a(a,s,f){for(var p=[];e.firstChild;){var h=e.firstChild,v=+h.index;v!=f&&("input"==h.nodeName.toLowerCase()?p.push(h.value||""):"select"==h.nodeName.toLowerCase()&&(p[p.length-1]=h.options[h.selectedIndex].value)),e.removeChild(h)}s>=0?(a=s+1,p.splice(s,0,"")):n||0!=p.length||p.push("");for(var v=1;v<=p.length;v++){var g=document.createElement("input");if(g.id=l+"."+v,g.name=l,g.value=p[v-1],g.type="text",g.index=v,g.className="gluon-input-text",c&&(g.placeholder=c),e.appendChild(g),t&&o(g,!1,t),u(g,"keydown",i),u(g,"keypress",r),v==a)g.focus();else if(-v==a){g.focus();var m=g.value;g.value=" ",g.value=m}if(n||p.length>1){var y=document.createElement("span");y.className="gluon-remove",e.appendChild(y),u(y,"click",d(!1)),e.appendChild(document.createElement("br"))}}var y=document.createElement("span");y.className="gluon-add",e.appendChild(y),u(y,"click",d(!0))}function r(e){e=e?e:window.event;var t=e.target?e.target:e.srcElement;switch(3==t.nodeType&&(t=t.parentNode),e.keyCode){case 8:case 46:return 0!=t.value.length||(e.preventDefault&&e.preventDefault(),!1);case 13:case 38:case 40:return e.preventDefault&&e.preventDefault(),!1}return!0}function i(e){e=e?e:window.event;var t,n,r=e.target?e.target:e.srcElement,i=0;if(r){for(3==r.nodeType&&(r=r.parentNode),i=r.index,t=r.previousSibling;t&&t.name!=l;)t=t.previousSibling;for(n=r.nextSibling;n&&n.name!=l;)n=n.nextSibling}switch(e.keyCode){case 8:case 46:if("select"==r.nodeName.toLowerCase()||0==r.value.length){e.preventDefault&&e.preventDefault();var u=r.index;return 8==e.keyCode&&(u=1-u),a(u,-1,i),!1}break;case 13:a(-1,i,-1);break;case 38:t&&t.focus();break;case 40:n&&n.focus()}return!0}function d(e){return function(t){t=t?t:window.event;for(var n=t.target?t.target:t.srcElement,a=n.previousSibling;a&&a.name!=l;)a=a.previousSibling;return e?i({target:a,keyCode:13}):(a.value="",i({target:a,keyCode:8})),!1}}var l=e.getAttribute("data-prefix"),c=e.getAttribute("data-placeholder");a(NaN,-1,-1)}function o(e,t,a){var r=n(a);if(r){var i=function(){if(e.form){e.className=e.className.replace(/ gluon-input-invalid/g,"");var n=e.options&&e.options.selectedIndex>-1?e.options[e.options.selectedIndex].value:e.value;0==n.length&&t||r.apply(n)||(e.className+=" gluon-input-invalid")}};u(e,"blur",i),u(e,"keyup",i),"SELECT"==e.nodeName&&(u(e,"change",i),u(e,"click",i)),i()}}function l(e,t,n){var a=c[e.id];a||(a={node:e,parent:e.parentNode.id,deps:[],index:n},c[e.id]=a),a.deps.push(t)}var c={},s={integer:function(){return!isNaN(e(this))},uinteger:function(){return e(this)>=0},"float":function(){return!isNaN(t(this))},ufloat:function(){return t(this)>=0},ipaddr:function(){return s.ip4addr.apply(this)||s.ip6addr.apply(this)},ip4addr:function(){var e;return!!(e=this.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/))&&(e[1]>=0&&e[1]<=255&&e[2]>=0&&e[2]<=255&&e[3]>=0&&e[3]<=255&&e[4]>=0&&e[4]<=255)},ip6addr:function(){return this.indexOf("::")<0?null!=this.match(/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i):!(this.indexOf(":::")>=0||this.match(/::.+::/)||this.match(/^:[^:]/)||this.match(/[^:]:$/))&&(!!this.match(/^(?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}$/i)||(!!this.match(/^(?:[a-f0-9]{1,4}:){7}:$/i)||!!this.match(/^:(?::[a-f0-9]{1,4}){7}$/i)))},wpakey:function(){var e=this;return 64==e.length?null!=e.match(/^[a-f0-9]{64}$/i):e.length>=8&&e.length<=63},range:function(e,n){var a=t(this);return a>=+e&&a<=+n},min:function(e){return t(this)>=+e},max:function(e){return t(this)<=+e},irange:function(t,n){var a=e(this);return a>=+t&&a<=+n},imin:function(t){return e(this)>=+t},imax:function(t){return e(this)<=+t},minlength:function(e){return(""+this).length>=+e},maxlength:function(e){return(""+this).length<=+e}};!function(){var e;e=document.querySelectorAll("[data-depends]");for(var t,n=0;(t=e[n])!==undefined;n++){var a=parseInt(t.getAttribute("data-index"),10),r=JSON.parse(t.getAttribute("data-depends"));if(!isNaN(a)&&r.length>0)for(var c=0;c<r.length;c++)l(t,r[c],a)}e=document.querySelectorAll("[data-update]");for(var t,n=0;(t=e[n])!==undefined;n++)for(var s,f=t.getAttribute("data-update").split(" "),p=0;(s=f[p])!==undefined;p++)u(t,s,i);e=document.querySelectorAll("[data-type]");for(var t,n=0;(t=e[n])!==undefined;n++)o(t,"true"===t.getAttribute("data-optional"),t.getAttribute("data-type"));e=document.querySelectorAll("[data-dynlist]");for(var t,n=0;(t=e[n])!==undefined;n++){var h=JSON.parse(t.getAttribute("data-dynlist"));d(t,h.type,h.optional)}i()}()}();
\ No newline at end of file
!function(){var e={};function t(e){return/^-?\d+$/.test(e)?+e:NaN}function n(e){return/^-?\d*\.?\d+?$/.test(e)?+e:NaN}var a={integer:function(){return!isNaN(t(this))},uinteger:function(){return t(this)>=0},float:function(){return!isNaN(n(this))},ufloat:function(){return n(this)>=0},ipaddr:function(){return a.ip4addr.apply(this)||a.ip6addr.apply(this)},ip4addr:function(){var e;return!!(e=this.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/))&&(e[1]>=0&&e[1]<=255&&e[2]>=0&&e[2]<=255&&e[3]>=0&&e[3]<=255&&e[4]>=0&&e[4]<=255)},ip6addr:function(){return this.indexOf("::")<0?null!=this.match(/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i):!(this.indexOf(":::")>=0||this.match(/::.+::/)||this.match(/^:[^:]/)||this.match(/[^:]:$/))&&(!!this.match(/^(?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}$/i)||(!!this.match(/^(?:[a-f0-9]{1,4}:){7}:$/i)||!!this.match(/^:(?::[a-f0-9]{1,4}){7}$/i)))},wpakey:function(){var e=this;return 64==e.length?null!=e.match(/^[a-f0-9]{64}$/i):e.length>=8&&e.length<=63},range:function(e,t){var a=n(this);return a>=+e&&a<=+t},min:function(e){return n(this)>=+e},max:function(e){return n(this)<=+e},irange:function(e,n){var a=t(this);return a>=+e&&a<=+n},imin:function(e){return t(this)>=+e},imax:function(e){return t(this)<=+e},minlength:function(e){return(""+this).length>=+e},maxlength:function(e){return(""+this).length<=+e}};function r(e){for(var t=0;t<e.length;t++){var n=!0;for(var a in e[t])n=n&&(r=a,i=e[t][a],o=void 0,void 0,(d=document.getElementById(r))&&(o="checkbox"==d.type?d.checked:d.value?d.value:""),o==i);if(n)return!0}var r,i,o,d;return!1}function i(){var t=!1;for(var n in e){var a=e[n],o=document.getElementById(n),d=document.getElementById(a.parent);if(o&&o.parentNode&&!r(a.deps))o.parentNode.removeChild(o),t=!0;else if(d&&(!o||!o.parentNode)&&r(a.deps)){var u=void 0;for(u=d.firstChild;u&&!(u.getAttribute&&parseInt(u.getAttribute("data-index"),10)>a.index);u=u.nextSibling);u?d.insertBefore(a.node,u):d.appendChild(a.node),t=!0}d&&d.parentNode&&d.getAttribute("data-optionals")&&(d.parentNode.style.display=d.options.length<=1?"none":"")}t&&i()}function o(e,t,n,a){return e.addEventListener?e.addEventListener(t,n,!!a):e.attachEvent("on"+t,function(){var e=window.event;return!e.target&&e.srcElement&&(e.target=e.srcElement),!!n(e)}),e}function d(e,t){var n=t.prefix;function a(a,l,s){for(var c=[];e.firstChild;){var p=e.firstChild;(f=+p.index)!=s&&("input"==p.nodeName.toLowerCase()?c.push(p.value||""):"select"==p.nodeName.toLowerCase()&&(c[c.length-1]=p.options[p.selectedIndex].value)),e.removeChild(p)}l>=0?(a=l+1,c.splice(l,0,"")):t.optional||0!=c.length||c.push("");for(var f=1;f<=c.length;f++){var v=document.createElement("input");if(v.id=n+"."+f,v.name=n,v.value=c[f-1],v.type="text",v.index=f,v.className="gluon-input-text",t.size&&(v.size=t.size),t.placeholder&&(v.placeholder=t.placeholder),e.appendChild(v),t.type&&u(v,!1,t.type),o(v,"keydown",i),o(v,"keypress",r),f==a)v.focus();else if(-f==a){v.focus();var h=v.value;v.value=" ",v.value=h}if(t.optional||c.length>1)(g=document.createElement("span")).className="gluon-remove",e.appendChild(g),o(g,"click",d(!1)),e.appendChild(document.createElement("br"))}var g;(g=document.createElement("span")).className="gluon-add",e.appendChild(g),o(g,"click",d(!0))}function r(e){var t=(e=e||window.event).target?e.target:e.srcElement;switch(3==t.nodeType&&(t=t.parentNode),e.keyCode){case 8:case 46:return 0!=t.value.length||(e.preventDefault&&e.preventDefault(),!1);case 13:case 38:case 40:return e.preventDefault&&e.preventDefault(),!1}return!0}function i(e){var t,r,i=(e=e||window.event).target?e.target:e.srcElement,o=0;if(i){for(3==i.nodeType&&(i=i.parentNode),o=i.index,t=i.previousSibling;t&&t.name!=n;)t=t.previousSibling;for(r=i.nextSibling;r&&r.name!=n;)r=r.nextSibling}switch(e.keyCode){case 8:case 46:if("select"==i.nodeName.toLowerCase()||0==i.value.length){e.preventDefault&&e.preventDefault();var d=i.index;return 8==e.keyCode&&(d=1-d),a(d,-1,o),!1}break;case 13:a(-1,o,-1);break;case 38:t&&t.focus();break;case 40:r&&r.focus()}return!0}function d(e){return function(t){for(var a=((t=t||window.event).target?t.target:t.srcElement).previousSibling;a&&a.name!=n;)a=a.previousSibling;return e?i({target:a,keyCode:13}):(a.value="",i({target:a,keyCode:8})),!1}}a(NaN,-1,-1)}function u(e,t,n){var r,i,d,u=(d=(r=n).match(/^([^\(]+)\(([^,]+),([^\)]+)\)$/))&&void 0!==(i=a[d[1]])?function(){return i.apply(this,[d[2],d[3]])}:(d=r.match(/^([^\(]+)\(([^,\)]+)\)$/))&&void 0!==(i=a[d[1]])?function(){return i.apply(this,[d[2]])}:a[r];if(u){var l=function(){if(e.form){e.className=e.className.replace(/ gluon-input-invalid/g,"");var n=e.options&&e.options.selectedIndex>-1?e.options[e.options.selectedIndex].value:e.value;0==n.length&&t||u.apply(n)||(e.className+=" gluon-input-invalid")}};o(e,"blur",l),o(e,"keyup",l),"SELECT"==e.nodeName&&(o(e,"change",l),o(e,"click",l)),l()}}!function(){var t,n,a,r,l;t=document.querySelectorAll("[data-depends]");for(var s=0;void 0!==(m=t[s]);s++){var c=parseInt(m.getAttribute("data-index"),10),p=JSON.parse(m.getAttribute("data-depends"));if(!isNaN(c)&&p.length>0)for(var f=0;f<p.length;f++)n=m,a=p[f],r=c,l=void 0,(l=e[n.id])||(l={node:n,parent:n.parentNode.id,deps:[],index:r},e[n.id]=l),l.deps.push(a)}t=document.querySelectorAll("[data-update]");for(s=0;void 0!==(m=t[s]);s++)for(var v,h=m.getAttribute("data-update").split(" "),g=0;void 0!==(v=h[g]);g++)o(m,v,i);t=document.querySelectorAll("[data-type]");for(s=0;void 0!==(m=t[s]);s++)u(m,"true"===m.getAttribute("data-optional"),m.getAttribute("data-type"));t=document.querySelectorAll("[data-dynlist]");var m;for(s=0;void 0!==(m=t[s]);s++){d(m,JSON.parse(m.getAttribute("data-dynlist")))}i()}()}();
\ No newline at end of file
......@@ -232,10 +232,8 @@
return obj;
}
function init_dynlist(parent, datatype, optional) {
var prefix = parent.getAttribute('data-prefix');
var holder = parent.getAttribute('data-placeholder');
function init_dynlist(parent, attr) {
var prefix = attr.prefix;
function dynlist_redraw(focus, add, del) {
var values = [];
......@@ -257,7 +255,7 @@
if (add >= 0) {
focus = add + 1;
values.splice(add, 0, '');
} else if (!optional && values.length == 0) {
} else if (!attr.optional && values.length == 0) {
values.push('');
}
......@@ -270,13 +268,15 @@
t.index = i;
t.className = 'gluon-input-text';
if (holder)
t.placeholder = holder;
if (attr.size)
t.size = attr.size;
if (attr.placeholder)
t.placeholder = attr.placeholder;
parent.appendChild(t);
if (datatype)
validate_field(t, false, datatype);
if (attr.type)
validate_field(t, false, attr.type);
bind(t, 'keydown', dynlist_keydown);
bind(t, 'keypress', dynlist_keypress);
......@@ -292,7 +292,7 @@
t.value = v;
}
if (optional || values.length > 1) {
if (attr.optional || values.length > 1) {
var b = document.createElement('span');
b.className = 'gluon-remove';
......@@ -522,9 +522,9 @@
nodes = document.querySelectorAll('[data-dynlist]');
for (var i = 0, node; (node = nodes[i]) !== undefined; i++) {
var list = JSON.parse(node.getAttribute('data-dynlist'));
var attr = JSON.parse(node.getAttribute('data-dynlist'));
init_dynlist(node, list.type, list.optional);
init_dynlist(node, attr);
}
update();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment