// College/University targeting app // =============================================== // Takes in data obj, an element to append to, and utility functions // // Data set: // - status bool // - targets []string // // Example data: // { // "status" : true, // "targets": ["harvard university", "duke university"] // } // var college = (function(){ 'use strict' var template = getTemplate(), collegesLoc = '/api/v1/collegeSearch'; return newCollege; function newCollege(d, t, fns){ return new College(d, t, fns); } function College(d, t, fns) { var e = getElementFromString(template, { 'name' : fns.getAppName('college') }), eles = new Elements(e, { 'cc' : { 'selector' : '.view' }, 'status': {}, 'list': {}, "remove" : { 'target' : new ConfirmationButton(e.querySelector('.remove'), { 'text' : 'Remove app', 'noClass' : true, 'confirmText' : 'Confirm?' }, removeAction) }, }); eles.status = new ToggleInput(e.querySelector('.toggle'), updateStatus, { 'initialValue' : d.status === true }); eles.list = new CheckboxList(e.querySelector('.tar'), { 'title' : 'Include', 'api' : collegesLoc, 'query' : null, 'apiData' : d.targets, 'apiFn' : getCollegeData, 'config' : { 'placeholder' : 'Search Colleges / Universities' } }, updateColleges); this.getList = eles.list.getList; this.exit = exit; t.appendChild(e); function updateColleges(e){ d.targets = getArrayOfValues(e); fns.refreshSidePanel(); } function updateStatus(e) { d.status = e; if(e) { eles.cc.classList.remove('noDisplay'); } else { eles.cc.classList.add('noDisplay'); d.targets = null; } if(!!fns && !!fns.refreshSidePanel) fns.refreshSidePanel(); } function removeAction(e){ fns.removeApp('college'); } function exit(){ if(!!e) removeChild(t, e); if(eles) eles.exit(); housekeeping(); } function housekeeping(){ e = eles = null; } } function getTemplate(){ var h = '

{{ name }}:

', r = '
', t = '
', cc = '
'; return '' + h + t + r + cc + ''; } function getArrayOfValues(d){ var a = []; forEach(d, p); return a; function p(t, d, i){ a[i] = t.value; } } function getCollegeData(e){ var a = []; forEach(e, p); return a; function Item(t, v, i){ this.title = t; this.value = v; this.index = i; } function p(item, data, i){ a.push(new Item(item, item.toLowerCase(), i)); } } })();