var Apps = function(core, target, data, returnCB){ var events = new EventManager, template = new Template(), element = null, elements = null, data = null; this.exit = exit; new ApiManager({ 'apps' : { 'source' : 'apps/byUid' } }, core.userID, init); function Data(d){ this.apps = getApps(); this.isAdmin = core.isAdmin; function getApps(){ if(!d.apps){ return []; } var a = []; loop(d.apps, p); return a; function p(k ,v){ a.push(v); } } } function App(o){ this.id = get('id', 'N/A'); this.name = get('name', ''); this.cost = get('cost', 0) === 0 ? 'Free' : 'Paid'; function get(k, r){ if(!!o[k]) return o[k]; else if(r === undefined) return null; else return r; } } function Template(){ var header = '
Create App
', edit = 'Edit', media = 'Manage Media', del = '{{# isAdmin }}{{/ isAdmin }}', manageRow = '

Manage Apps

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

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

'; } function init(error, d){ data = new Data(d); element = getElementFromString(render(template.index, data)); initHeader(); setElements(); if(!error && !!d && !!d.apps && d.apps.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'); elements.table = NewMTable(element.querySelector('.manageTable'), { "columns" : { "id" : { "title" : "ID", "valueType" : "number", "sortable" : true, "width" : "72" }, "name" : { "title" : "Name", "valueType" : "string", "sortable" : true, "width" : "348" }, "cost" : { "title" : "Cost", "valueType" : "string", "sortable" : true, "width" : "348" } }, "rows" : data.apps, "maxPerPage" : 10 }, tableUpdate); tableUpdate(); } function initFresh(){ elements.fresh = getElementFromString(template.fresh); hideManage(); element.appendChild(elements.fresh); } function insertElement(){ target.appendChild(element); } function setElements(){ elements = new Elements(element, { 'fresh' : {}, 'table' : {}, 'actions' : {}, 'rows' : {}, 'delV' : {}, 'del' : { 'selector' : '.delBtn' }, 'edit' : { 'selector' : '.editBtn' }, 'media' : { 'selector' : '.mediaBtn' } }); } function setButtons(buttonsObj){ events.add(elements.edit, 'click', editAction); events.add(elements.media, 'click', mediaAction); if(!!elements.del) elements.delV = new ConfirmationButton(elements.del, buttonsObj.del, delAction); } function hideManage(){ element.querySelector('.manageRow').classList.add('noDisplay'); } function editAction(e){ preventDefault(e); var id = elements.table.getSelectedRows()[0].getData().id; pop("Pop!", "Dashboard - Edit App", "/dashboard/apps/edit/" + id) } function mediaAction(e){ preventDefault(e); var id = elements.table.getSelectedRows()[0].getData().id; pop("Pop!", "Dashboard - Edit Media", "/dashboard/apps/media/edit/" + id) } function delAction(e){ preventDefault(e); new ApiDelete({'table' : { 'rows' : data.apps } }, elements.table.getSelectedRows(), 'apps/byId', null, 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({ 'apps' : { 'source' : 'apps/byUid' } }, core.userID, updateAppsList); } 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 updateAppsList(e, o){ data = new Data(o); refreshTable(); } function showActions(){ setAction('edit'); setAction('media'); setAction('del'); } function hideActions(){ setAction('edit', true); setAction('media', true); setAction('del', true); } function hideSingleActions(){ setAction('edit', true); setAction('media', true); setAction('del'); } function setAction(k, rmv){ var t = elements[k]; if(!!t){ t.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; } };