// Content category app // =============================================== // Takes in data obj, an element to append to, and utility functions // // Data set: // - status bool // - values []string // - titles []string // // Example data: // { // "status" : true, // "values" : ["IAB17-22"], // "titles" : ["Nascar Racing"] // } // var contentCategories = (function(){ 'use strict' var template = getTemplate(), contentCatLoc = '/api/v1/contentCategoriesSearch'; return newContentCategories; function newContentCategories(d, t, fns){ return new ContentCategories(d, t, fns); } function ContentCategories(d, t, fns) { var e = getElementFromString(template, { 'name' : fns.getAppName('contentCategories') }), 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('.inc'), { 'title' : 'Include', 'api' : contentCatLoc, 'query' : null, 'apiData' : d.values, 'apiFn' : getContentCategoryData, 'config' : { 'placeholder' : 'Search categories' } }, updateContentCategory); eles.neg = new CheckboxList(e.querySelector('.exc'), { 'title' : 'Exclude', 'api' : contentCatLoc, 'query' : null, 'apiData' : d.negatives, 'apiFn' : getContentCategoryData, 'config' : { 'placeholder' : 'Search categories' } }, updateNegContentCategory); this.getList = eles.list.getList; this.exit = exit; t.appendChild(e); function updateContentCategory(e){ d.titles = getArrayOfTitles(e); d.values = getArrayOfValues(e); fns.refreshSidePanel(); } function updateNegContentCategory(e){d.negatives = getArrayOfValues(e); fns.refreshSidePanel(); } function updateStatus(e) { d.status = e; if(e) { eles.cc.classList.remove('noDisplay'); } else { eles.cc.classList.add('noDisplay'); d.titles = d.values = d.negatives = null; } if(!!fns && !!fns.refreshSidePanel) fns.refreshSidePanel(); } function removeAction(e){ fns.removeApp('contentCategories'); } 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 getArrayOfTitles(d){ var a = []; forEach(d, p); return a; function p(t, d, i){ a[i] = t.title; } } function getArrayOfValues(d){ var a = []; forEach(d, p); return a; function p(t, d, i){ a[i] = t.value; } } function getContentCategoryData(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.description, item.value, i)); } } })();