// Advanced bidding app // =============================================== // Takes in data obj, an element to append to, and utility functions // // Data set: // - baseCpm uint8 // - maxCpm uint8 // // Example data: // { // "baseCpm" : 0, // "maxCpm" : 0 // } // var advancedBidding = (function(){ 'use strict' var template = getTemplate(), newLines = /\r\n|\n|\r/; return newAdvancedBidding; function newAdvancedBidding(d, t, fns){ return new AdvancedBidding(d, t, fns); } function AdvancedBidding(d, t, fns) { var dc = getSimpleJSONCopy(d); dc.name = fns.getAppName('advancedBidding'); var events = new EventManager, e = getElementFromString(template, dc), eles = new Elements(e, { 'base' : { 'selector' : 'input[name="baseCPM"]' }, 'max' : { 'selector' : 'input[name="maxCPM"]' }, 'view' : { 'selector' : '.view' }, 'status': {}, '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.baseCpm > 0 || d.maxCpm > 0 }); events.add(eles.base, 'change', updateBase); events.add(eles.max, 'change', updateMax); t.appendChild(e); this.exit = exit; function updateStatus(e) { if(e) { eles.view.classList.remove('noDisplay'); } else { eles.view.classList.add('noDisplay'); d.baseCpm = d.maxCpm = 0; } } function updateBase(e){ var v = parseFloat(e.target.value); if(isValid('Base CPM', v)) { d.baseCpm = v; } } function updateMax(e){ var v = parseFloat(e.target.value); if(isValid('Max CPM', v)) { d.maxCpm = v; } } function removeAction(e){ fns.removeApp('advancedBidding'); } function isValid(n,v){ if(isNaN(v)) return setNaNError(n); if (v === 0) return setMinError(n); return true; } function setNaNError(n){ if(!!fns && !!fns.setError) fns.setError('Sorry, please set ' + n + ' limit to a valid number.'); return false; } function setMinError(n){ if(!!fns && !!fns.setError) fns.setError('Sorry, please set ' + n + ' limit to a number greater than 0.'); return false; } function exit(){ if(!!e) removeChild(t, e); if(!!events) events.reset(); if(!!eles) eles.exit(); housekeeping(); } function housekeeping(){ events = e = eles = null; } } function getTemplate(){ var base = '

Base CPM:

', max = '

Max CPM:

', toggle = '
', remove = '
', view = '
' + base + max + '
', h = '

{{ name }}:

'; return '' + h + toggle + remove + view + ''; } })();