// ISP targeting app // =============================================== // Takes in data obj, an element to append to, and utility functions // // Data set: // - targets []string // // Example data: // { // "targets": [ // "at&t", // "juno" // ] // } // var ispTargeting = (function(){ 'use strict' var template = new Template, targetTitlesArr = ['AT&T', 'Comcast', 'CenturyLink', 'Cox', 'Verizon', 'Time Warner Cable', 'Frontier', 'Charter Communications', 'Google Fiber', 'Optimum', 'SuddenLink', 'EarthLink', 'WindStream', 'Cable One', 'Juno', 'T-Mobile', 'Sprint', 'Boost'], targetsArr = targetTitlesArr.map((v) => v.toLowerCase()); return newIspTargeting; function newIspTargeting(d, t, fns){ return new IspTargeting(d, t, fns); } function IspTargeting(d, t, fns) { var data = [ new TargetingItem('Targets', createValues(targetTitlesArr), updateISPs, targetsArr) ], e = getElementFromString(template.index, fns.getAppName('ispTargeting')), eV = e.querySelector('.view'), eles = new Elements(e, { "status" : {}, "remove" : { 'target' : new ConfirmationButton(e.querySelector('.remove'), { 'text' : 'Remove app', 'noClass' : true, 'confirmText' : 'Confirm?' }, removeAction) }, }); this.exit = exit; setEles(); t.appendChild(e); function updateStatus(e) { d.status = e; if(e){ eV.classList.remove('noDisplay'); } else { eV.classList.add('noDisplay'); data.forEach(function(list){ d[list.name] = null; eles[list.name].setSelectedByValue(list.defaults); }); } } function updateISPs(e, ms) { d.targets = getValue(ms); } function removeAction(e){ fns.removeApp('IspTargeting'); } function createValues(arr){ var a = []; loop(arr, p); return a; function p(k, v){ a[k] = new Value(v); } } function getValue(ms) { return ms.getSelected().map(function(e) { return e.value; }); } function setEles(){ var isSelected = false, isSelectedEx = false; loop(data, set); eles.status = new ToggleInput(e.querySelector('.toggle'), updateStatus, { 'initialValue' : d.status === true }); function set(k, v){ var row = getElementFromString(render(template.selectRow, v)), sel = d[v.name]; eles[v.name] = new MultiSelect(row.querySelector('div'), v.cb, { "selected" : sel || v.defaults }) eV.appendChild(row); } } function exit(){ if(!!e) removeChild(t, e); if(!!eles) eles.exit(); e = eles = eV = null; } }; function TargetingItem(t, itms, cb, dflts){ this.name = t.toLowerCase(); this.title = t; this.items = itms; this.cb = cb; this.defaults = dflts; } function Value(v){ this.title = v; this.value = v.toLowerCase(); } function Template(){ var select = '
'; this.index = '

{{ name }}

'; this.selectRow = '

{{title}}

' + select + '
'; } })();