/* SMOKE.JS - 0.1.3 (c) 2011-2013 Jonathan Youngblood demos / documentation: http://smoke-js.com/ */ ; (function (window, document) { /*jslint browser: true, onevar: true, undef: true, nomen: false, eqeqeq: true, bitwise: true, regexp: true, newcap: true, immed: true */ var smoke = { smoketimeout: [], init: false, zindex: 1000, i: 0, bodyload: function (id) { var ff = document.createElement('div'); ff.setAttribute('id', 'smoke-out-' + id); ff.className = 'smoke-base'; ff.style.zIndex = smoke.zindex; smoke.zindex++; document.body.appendChild(ff); }, newdialog: function () { var newid = new Date().getTime(); newid = Math.random(1, 99) + newid; if (!smoke.init) { smoke.listen(window, "load", function () { smoke.bodyload(newid); }); } else { smoke.bodyload(newid); } return newid; }, forceload: function () {}, build: function (e, f) { smoke.i++; f.stack = smoke.i; e = e.replace(/\n/g, '
'); e = e.replace(/\r/g, '
'); var prompt = '', ok = 'OK', cancel = 'Cancel', classname = '', buttons = '', box; if (f.type === 'prompt') { prompt = '
' + '' + '
'; } if (f.params.ok) { ok = f.params.ok; } if (f.params.cancel) { cancel = f.params.cancel; } if (f.params.classname) { classname = f.params.classname; } if (f.type !== 'signal') { buttons = '
'; if (f.type === 'alert') { buttons += ''; } else if (f.type === 'quiz') { if (f.params.button_1) { buttons += ''; } if (f.params.button_2) { buttons += ''; } if (f.params.button_3) { buttons += ''; } if (f.params.button_cancel) { buttons += ''; } } else if (f.type === 'prompt' || f.type === 'confirm') { if (f.params.reverseButtons) { buttons += '' + ''; } else { buttons += '' + ''; } } buttons += '
'; } box = '
' + '
' + '
' + e + prompt + buttons + '
' + '
'; if (!smoke.init) { smoke.listen(window, "load", function () { smoke.finishbuild(e, f, box); }); } else { smoke.finishbuild(e, f, box); } }, finishbuild: function (e, f, box) { var ff = document.getElementById('smoke-out-' + f.newid); ff.className = 'smoke-base smoke-visible smoke-' + f.type; ff.innerHTML = box; while (ff.innerHTML === "") { ff.innerHTML = box; } if (smoke.smoketimeout[f.newid]) { clearTimeout(smoke.smoketimeout[f.newid]); } smoke.listen( document.getElementById('smoke-bg-' + f.newid), "click", function () { smoke.destroy(f.type, f.newid); if (f.type === 'prompt' || f.type === 'confirm' || f.type === 'quiz') { f.callback(false); } else if (f.type === 'alert' && typeof f.callback !== 'undefined') { f.callback(); } } ); switch (f.type) { case 'alert': smoke.finishbuildAlert(e, f, box); break; case 'confirm': smoke.finishbuildConfirm(e, f, box); break; case 'quiz': smoke.finishbuildQuiz(e, f, box); break; case 'prompt': smoke.finishbuildPrompt(e, f, box); break; case 'signal': smoke.finishbuildSignal(e, f, box); break; default: throw "Unknown type: " + f.type; } }, finishbuildAlert: function (e, f, box) { smoke.listen( document.getElementById('alert-ok-' + f.newid), "click", function () { smoke.destroy(f.type, f.newid); if (typeof f.callback !== 'undefined') { f.callback(); } } ); document.onkeyup = function (e) { if (!e) { e = window.event; } if (e.keyCode === 13 || e.keyCode === 32 || e.keyCode === 27) { smoke.destroy(f.type, f.newid); if (typeof f.callback !== 'undefined') { f.callback(); } } }; }, finishbuildConfirm: function (e, f, box) { smoke.listen( document.getElementById('confirm-cancel-' + f.newid), "click", function () { smoke.destroy(f.type, f.newid); f.callback(false); } ); smoke.listen( document.getElementById('confirm-ok-' + f.newid), "click", function () { smoke.destroy(f.type, f.newid); f.callback(true); } ); document.onkeyup = function (e) { if (!e) { e = window.event; } /*if (e.keyCode === 13 || e.keyCode === 32) { smoke.destroy(f.type, f.newid); f.callback(true); } else*/ if (e.keyCode === 27) { smoke.destroy(f.type, f.newid); f.callback(false); } }; }, finishbuildQuiz: function (e, f, box) { var a, b, c; smoke.listen( document.getElementById('quiz-cancel-' + f.newid), "click", function () { smoke.destroy(f.type, f.newid); f.callback(false); } ); if (a = document.getElementById('quiz-ok1-' + f.newid)) smoke.listen( a, "click", function () { smoke.destroy(f.type, f.newid); f.callback(a.innerHTML); } ); if (b = document.getElementById('quiz-ok2-' + f.newid)) smoke.listen( b, "click", function () { smoke.destroy(f.type, f.newid); f.callback(b.innerHTML); } ); if (c = document.getElementById('quiz-ok3-' + f.newid)) smoke.listen( c, "click", function () { smoke.destroy(f.type, f.newid); f.callback(c.innerHTML); } ); document.onkeyup = function (e) { if (!e) { e = window.event; } if (e.keyCode === 27) { smoke.destroy(f.type, f.newid); f.callback(false); } }; }, finishbuildPrompt: function (e, f, box) { var pi = document.getElementById('dialog-input-' + f.newid); setTimeout(function () { pi.focus(); pi.select(); }, 100); smoke.listen( document.getElementById('prompt-cancel-' + f.newid), "click", function () { smoke.destroy(f.type, f.newid); f.callback(false); } ); smoke.listen( document.getElementById('prompt-ok-' + f.newid), "click", function () { smoke.destroy(f.type, f.newid); f.callback(pi.value); } ); document.onkeyup = function (e) { if (!e) { e = window.event; } if (e.keyCode === 13) { smoke.destroy(f.type, f.newid); f.callback(pi.value); } else if (e.keyCode === 27) { smoke.destroy(f.type, f.newid); f.callback(false); } }; }, finishbuildSignal: function (e, f, box) { document.onkeyup = function (e) { if (!e) { e = window.event; } if (e.keyCode === 27) { smoke.destroy(f.type, f.newid); if (typeof f.callback !== 'undefined') { f.callback(); } } }; smoke.smoketimeout[f.newid] = setTimeout(function () { smoke.destroy(f.type, f.newid); if (typeof f.callback !== 'undefined') { f.callback(); } }, f.timeout); }, destroy: function (type, id) { var box = document.getElementById('smoke-out-' + id); if (type !== 'quiz') { var okButton = document.getElementById(type + '-ok-' + id); } var cancelButton = document.getElementById(type + '-cancel-' + id); box.className = 'smoke-base'; if (okButton) { smoke.stoplistening(okButton, "click", function () {}); document.onkeyup = null; } if (type === 'quiz') { var quiz_buttons = document.getElementsByClassName("quiz-button"); for (var i = 0; i < quiz_buttons.length; i++) { smoke.stoplistening(quiz_buttons[i], "click", function () {}); document.onkeyup = null; } } if (cancelButton) { smoke.stoplistening(cancelButton, "click", function () {}); } smoke.i = 0; document.body.removeChild(box); }, alert: function (e, f, g) { if (typeof g !== 'object') { g = false; } var id = smoke.newdialog(); smoke.build(e, { type: 'alert', callback: f, params: g, newid: id }); }, signal: function (e, f, g) { if (typeof g !== 'object') { g = false; } var duration = 5000; if (g.duration !== 'undefined') { duration = g.duration; } var id = smoke.newdialog(); smoke.build(e, { type: 'signal', callback: f, timeout: duration, params: g, newid: id }); }, confirm: function (e, f, g) { if (typeof g !== 'object') { g = false; } var id = smoke.newdialog(); smoke.build(e, { type: 'confirm', callback: f, params: g, newid: id }); }, quiz: function (e, f, g) { if (typeof g !== 'object') { g = false; } var id = smoke.newdialog(); smoke.build(e, { type: 'quiz', callback: f, params: g, newid: id }); }, prompt: function (e, f, g) { if (typeof g !== 'object') { g = false; } var id = smoke.newdialog(); return smoke.build(e, {type: 'prompt', callback: f, params: g, newid: id}); }, listen: function (e, f, g) { if (e.addEventListener) { return e.addEventListener(f, g, false); } if (e.attachEvent) { return e.attachEvent('on' + f, g); } return false; }, stoplistening: function (e, f, g) { if (e.removeEventListener) { return e.removeEventListener(f, g, false); } if (e.detachEvent) { return e.detachEvent('on' + f, g); } return false; } }; smoke.init = true; if (typeof module != 'undefined' && module.exports) { module.exports = smoke; } else if (typeof define === 'function' && define.amd) { define('smoke', [], function () { return smoke; }); } else { this.smoke = smoke; } })(window, document);