var Developers = function(core, target, data, returnCB){ var events = new EventManager, template = new Template(), element = getElementFromString(render(template.index, null)), elements = null, data = null; this.exit = exit; new ApiManager({ 'developersList' : null }, null, init); function Developer(o, i){ this.id = isDefined(o.id) ? o.id : null; this.name = isDefined(o.name) ? o.name : '[Not set]'; } function Template(){ var header = '
Create Developer
', swtch = 'Switch to Developer', edit = 'Edit', del = '', manageRow = '

Manage Developers

' + swtch + edit + del + '
', manageTable = '
'; this.index = '
' + header + manageRow + manageTable + '
'; this.fresh = '

Oh no! It appears that we have no developers here. We should add some. Try it out - it\'s simple!

'; } function init(error, d){ data = getDataObj(d); initHeader(); setElements(); if(!error && !!d && !!d.developersList && d.developersList.length > 0) initTable(); else initFresh(); setButtons(getSimpleJSONCopy(clientsButtonObj)); if(returnCB) returnCB(); insertElement(); } function initHeader(){ var h = element.querySelector('header'); events.add(h.querySelector('a'), 'click', popAnchor); } function initTable(){ elements.actions = element.querySelector('actions'); data.table.rows.sort(function(a, b) { return parseInt(a.id) < parseInt(b.id) ? -1 : 1; }); elements.table = NewMTable(element.querySelector('.manageTable'), data.table, tableUpdate); tableUpdate(); } function initFresh(){ elements.fresh = getElementFromString(template.fresh); hideManage(); data.table.rows = []; element.appendChild(elements.fresh); } function insertElement(){ target.appendChild(element); } function getDataObj(o){ var d = getSimpleJSONCopy(AgencyTemplateData); d.table.rows = getDeveloperList(o.developersList); return d; } function getDeveloperList(d){ var a = []; forEach(d, p); return a; function p(t, d, i){ a.push(new Developer(t, i)); } } function setElements(){ elements = new Elements(element, { 'fresh' : {}, 'table' : {}, 'actions' : {}, 'rows' : {}, 'delV' : {}, 'del' : { 'selector' : '.delBtn' }, 'swtch' : { 'selector' : '.switchBtn' }, 'edit' : { 'selector' : '.editBtn' } }); } function setButtons(buttonsObj){ events.add(elements.swtch, 'click', switchAction); events.add(elements.edit, 'click', editAction); elements.delV = new ConfirmationButton(elements.del, buttonsObj.del, delAction); } function hideManage(){ element.querySelector('.manageRow').classList.add('noDisplay'); } function switchAction(e){ preventDefault(e); var id = elements.table.getSelectedRows()[0].getData().id; ga('send', 'event', 'Admins', 'Switch to developer', id); core.switchUser(id); } function editAction(e){ preventDefault(e); var id = elements.table.getSelectedRows()[0].getData().id; pop("Pop!", core.brand.name + " - Edit Developer", "/dashboard/developers/edit/" + id) } function delAction(e){ preventDefault(e); new ApiDelete(data, elements.table.getSelectedRows(), 'developers', core.userID, updateActionCB); } function refreshTable(){ if(elements.table) elements.table.exit(); initTable(); } function tableUpdate(){ switch(elements.table.getSelectedRows().length){ case 0: hideActions(); break; case 1: showActions(); break; default: hideSingleActions(); break; } } function updateActionCB(e){ updateErrorCheck(e); new ApiManager({ 'developersList' : null }, null, updateDevelopersList); } function updateErrorCheck(e){ for(var k in e){ if(isDefined(e[k]) && isDefined(e[k].error)){ new core.notifications.setError(e[k].error); return true; } } } function updateDevelopersList(e, o){ data = getDataObj(o); refreshTable(); } function showActions(){ setAction('swtch'); setAction('edit'); setAction('del'); } function hideActions(){ setAction('swtch', true); setAction('edit', true); setAction('del', true); } function hideSingleActions(){ setAction('swtch', true); setAction('edit', true); } function setAction(k, rmv){ elements[k].classList[!rmv ? 'remove' : 'add']('noDisplay'); } function exit(){ if(element) removeChild(target, element); if(events) events.reset(); if(elements) elements.exit(); housekeeping(); } function housekeeping(){ core = target = data = returnCB = events = template = element = data = elements = null; } };