/* expected: // [{ // "id": "23", // "apps": { // "ipTargeting": { // "values": ["0.0.0.0"], // "negatives": ["1.1.1.1"] // } // } // ... // }] */ var ipTargeting = (function(){ 'use strict' var template = getTemplate(), ipRe = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; function filterFn(v) { return ipRe.test(v); } return newIPTargeting; function newIPTargeting(d, t, uf){ return new IPTargeting(d, t, uf); } function IPTargeting(d, t, fns){ populateMissing(d); var e = getElementFromString(template, fns.getAppName('ipTargeting')), ele = new Elements(e, { 'status' : { 'target' : new ToggleInput(e.querySelector('.tgl'), updateStatus, { 'initialValue' : d.status === true }) }, "remove" : { 'target' : new ConfirmationButton(e.querySelector('.remove'), { 'text' : 'Remove app', 'noClass' : true, 'confirmText' : 'Confirm?' }, removeAction) }, 'ips' : { 'target' : new TagContainer(e.querySelector('.inputs'), { 'limit' : 15000, 'data' : d.values, 'filter': filterFn, 'label': 'Enter IP Address' }, updateipTargeting) }, 'negips' : { 'target' : new TagContainer(e.querySelector('.negInputs'), { 'limit' : 15000, 'data' : d.negatives, 'filter': filterFn, 'label': 'Enter IP Address' }, updateNegipTargeting) }, }); this.show = function(){ e.classList.remove('noDisplay'); }; this.hide = function(){ e.classList.add('noDisplay'); }; this.exit = function(){ if(!!e) removeChild(t, e); if(!!ele) ele.exit(); e = ele = null; }; t.appendChild(e); function updateStatus(v){ d.status = v; if(!v){ d.values = d.negatives = []; e.querySelector('.ipTargeting').classList.add('noDisplay'); } else { e.querySelector('.ipTargeting').classList.remove('noDisplay'); } fns.refreshSidePanel(); } function updateipTargeting(e){ d.values = sanitize(e); fns.refreshSidePanel(); } function updateNegipTargeting(e){ d.negatives = sanitize(e); fns.refreshSidePanel(); } function removeAction(e){ fns.removeApp('ipTargeting'); } } function getTemplate(){ var note = '

*Note: You can have a max of 15,000 IPs

', inputs = '
Include:
', negInputs = '
Exclude:
', kw = '
' + inputs + negInputs + note + '
', h = '

{{ . }}:

', tgl = '
', rem = '
'; return '' + h + tgl + rem + kw + ''; } function sanitize(e){ var a = []; loop(e, p); return a; function p(_, v){ if(ipRe.test(v)) a.push(v); } } function populateMissing(d){ if(!isDefined(d.values)){ d.values = []; } if(!isDefined(d.negatives)){ d.negatives = []; } } })();