// Main (base function) // ================================================ // Takes in data obj, an element to append to, and utility functions // var baseMain = (function(){ 'use strict' return newMain; function newMain(d, cid, fns, bfns){ return new Main(d, cid, fns, bfns); } function Main(d, cid, fns, bfns){ var template = new Template(fns.core.isAdmin), events = new EventManager, e = getElementFromString(template.index, d), tt, ele = null; setTimeout(function(){ ele = new Elements(e, getElesObj(d, e)); tt = new Tooltip(e.querySelector('.budget'), template.tooltip, { 'showOnFocus' : true, 'onShow' : function() { updateBudgetTooltip(d.budget || d.impBudget, d.budgetType !== "credits"); } }); if(!!ele.notes){ events.add(ele.notes, 'change', updateNotes); } if(!!ele.budgetType){ ele.btToggle = new ToggleInput(ele.budgetType, updateBudgetType, { "trueLabel" : "Dollars", "falseLabel" : "Impressions", "transition" : "linearBlink", "initialValue" : core.brand.name !== 'Sito Mobile' && d.budgetType === "credits" }); } events.add(e.querySelector('.campaignName'), 'change', updateCampaignName); if(!!ele.budgetInput){ events.add(ele.budgetInput, 'change', updateBudget); events.add(ele.budgetInput, 'keyup', function() { setBudget(ele.budgetInput.value); }); } else { console.error("The fuck is going on here?") } }, 0); this.getE = function(){ return e; }; this.exit = function(){ if(!!tt) tt.exit(); if(!!events) events.reset(); if(!!ele) ele.exit(); events = e = ele = tt = null; }; function updateStatus(e){ d.active = e; if(e && d.archived && ele != null) ele.status.unset(); fns.refreshSidePanel(); } function updateArchived(e){ d.archived = e; if(e && d.active && ele != null) ele.status.unset(); } function updateCampaignName(e){ d.name = e.target.value; fns.refreshSidePanel(); } function updateNotes(e){ d.notes = e.target.value; fns.refreshSidePanel(); } function updateOpti(e){ d.optBucket = e; fns.refreshSidePanel(); } function updateBudget(e){ var v = getBudgetValue(e.target, fns); if(v == null) { e.target.value = ''; return } setBudget(v); fns.refreshSidePanel(); ga('send', 'event', 'Manage Campaign', 'Set campaign budget', v); } function setBudget(v){ switch(d.budgetType){ case "credits": d.budget = v; tt.resume(); updateBudgetTooltip(v); break; case "impressions": d.impBudget = v; tt.resume(); updateBudgetTooltip(v, true); break; } } function updateBudgetTooltip(v, imps) { var n = getSchedNumDays(); tt.update({ "daily" : (imps ? '' : '$') + v, "weekly" : (imps ? '' : '$') + (v * 7).toFixed(2), "monthly" : (imps ? '' : '$') + (v * 30).toFixed(2), "flight" : n ? (imps ? '' : '$') + (v * n).toFixed(2) : "N/A" }); } function updateBudgetType(v) { if(!v) { d.budgetType = "impressions"; ele.budgetInput.value = d.impBudget; tt.resume() d.budget = 0; updateBudgetTooltip(d.impBudget, true); return; } d.budgetType = "credits"; ele.budgetInput.value = d.budget; d.impBudget = 0; tt.resume() updateBudgetTooltip(v); } function getSchedNumDays() { var s = d.start, e = d.end; return Math.ceil((e-s) / 60 / 60 / 24); } function getElesObj(d, e){ var o = { 'archive': fns.core.isAdmin ? { 'target' : new ToggleInput(e.querySelector('.archiveToggle'), updateArchived, { 'initialValue' : !!d.archived }) } : {}, 'status' : { 'target' : new ToggleInput(e.querySelector('.statusToggle'), updateStatus, { 'initialValue' : d.active === true && !d.archived }) }, 'notes' : { 'selector' : '.notes' }, 'budgetType' : { 'selector' : '.budgetType' }, 'btToggle' : {}, 'budgetInput' : { 'selector' : '.budget' } }; if(d.isAdmin && !!cid) { o.archived = { 'target' : new ToggleInput(e.querySelector('.archiveToggle'), updateArchived, { 'initialValue' : d.archived === true }) }; } o.schedule = { 'target' : new Schedule(d, e) }; return o; } } function Template(isAdmin){ var achv = isAdmin ? '

Archived:

' : '', sts = '

Status:

', cmpName = '

Campaign Name:

', notesTa = '', notes = '

Notes:

' + notesTa + '
', bdgtType = '{{# ioState }}

Budget type:

{{/ ioState }}', bdgtIpt = '', bdgtCtrl = '

Daily Budget:

' + bdgtIpt + '
', unrstrcted = '

Schedule:

', sDate = '

Start Date:

', eDate = '

End Date:

'; this.index = '
' + achv + sts + cmpName + notes + bdgtType + bdgtCtrl + unrstrcted + sDate + eDate + '
'; this.tooltip = 'Daily: {{ daily }}Weekly: {{ weekly }}Monthly: {{ monthly }}Scheduled Total: {{ flight }}'; } function getBudgetValue(t, fns){ var v = t.value, n = parseFloat(v); if(v == 'tree fiddy'){ t.value = n = 350; fns.setError('Tree fiddy easter egg...'); } if(isNaN(n)) n = getDollarValue(v); return n; } })();