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 = '',
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; }
};