// 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 CPM: