2015-02-10 19:41:24 +00:00
|
|
|
define(function(require, exports, module) {
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
main.consumes = ["Plugin", "ui"];
|
|
|
|
main.provides = ["dialog.error"];
|
|
|
|
return main;
|
|
|
|
|
|
|
|
function main(options, imports, register) {
|
|
|
|
var Plugin = imports.Plugin;
|
|
|
|
var ui = imports.ui;
|
|
|
|
|
|
|
|
/***** Initialization *****/
|
|
|
|
|
|
|
|
var plugin = new Plugin("Ajax.org", main.consumes);
|
|
|
|
|
|
|
|
var topPx = 0;
|
2015-02-11 10:39:18 +00:00
|
|
|
var error, hideTimeout;
|
2015-02-10 19:41:24 +00:00
|
|
|
var lastCookie = 0;
|
|
|
|
|
2015-02-11 10:39:18 +00:00
|
|
|
var loaded = false;
|
2015-02-10 19:41:24 +00:00
|
|
|
function load() {
|
2015-02-11 10:39:18 +00:00
|
|
|
if (loaded) return false;
|
|
|
|
loaded = true;
|
|
|
|
|
2015-02-10 19:41:24 +00:00
|
|
|
ui.insertCss(require("text!./error.css"),
|
|
|
|
options.staticPrefix, plugin);
|
|
|
|
}
|
|
|
|
|
|
|
|
/***** Methods *****/
|
|
|
|
|
|
|
|
function show(message, timeout) {
|
|
|
|
// Error message container
|
|
|
|
if (!error) {
|
|
|
|
error = document.body.appendChild(document.createElement("div"));
|
|
|
|
error.className = "errorlabel";
|
|
|
|
error.addEventListener("mouseup", function(e) {
|
|
|
|
if (e.target.tagName == "U")
|
|
|
|
hide();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!message) {
|
|
|
|
console.trace();
|
|
|
|
return console.error("empty error message", message);
|
|
|
|
}
|
|
|
|
|
|
|
|
console.error("Error:",
|
|
|
|
message.stack || message.html || message.message || message);
|
|
|
|
|
|
|
|
hide(function () {
|
|
|
|
var messageString;
|
|
|
|
if (typeof message == "string") {
|
|
|
|
messageString = apf.escapeXML(message);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (message.message)
|
|
|
|
messageString = apf.escapeXML(message.message);
|
|
|
|
else if (message.html)
|
|
|
|
messageString = message.html;
|
|
|
|
else
|
|
|
|
messageString = "Error: " + message.toString();
|
|
|
|
}
|
|
|
|
error.innerHTML = "<div><u class='close'></u>"
|
|
|
|
+ messageString + "</div>";
|
|
|
|
|
|
|
|
error.style.display = "block";
|
2015-02-11 10:39:18 +00:00
|
|
|
error.style.top = (-1 * error.offsetHeight - 10 + topPx) + "px";
|
2015-02-10 19:41:24 +00:00
|
|
|
|
|
|
|
// Start anim
|
|
|
|
setTimeout(function() {
|
2015-02-11 10:39:18 +00:00
|
|
|
error.className = "errorlabel anim";
|
|
|
|
error.style.top = topPx + "px";
|
2015-02-10 19:41:24 +00:00
|
|
|
}, 10);
|
|
|
|
|
|
|
|
clearTimeout(hideTimeout);
|
|
|
|
if (!(timeout < 0))
|
2015-02-11 10:39:18 +00:00
|
|
|
setTimeout(hide, timeout || 15000);
|
2015-02-10 19:41:24 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
return ++lastCookie;
|
|
|
|
}
|
|
|
|
|
|
|
|
function hide(cookie, callback) {
|
|
|
|
if (typeof cookie === "function")
|
|
|
|
return hide(null, cookie);
|
|
|
|
|
|
|
|
if (cookie && lastCookie !== cookie)
|
|
|
|
return callback && callback();
|
|
|
|
if (!error || error.style.display === "none")
|
|
|
|
return callback && callback();
|
|
|
|
|
2015-02-11 10:39:18 +00:00
|
|
|
error.className = "errorlabel anim";
|
|
|
|
error.style.top = (-1 * error.offsetHeight - 10 + topPx) + "px";
|
2015-02-10 19:41:24 +00:00
|
|
|
setTimeout(function() {
|
|
|
|
error.style.display = "none";
|
|
|
|
callback && callback();
|
|
|
|
}, 220);
|
|
|
|
}
|
|
|
|
|
|
|
|
/***** Lifecycle *****/
|
|
|
|
|
|
|
|
plugin.on("load", function() {
|
|
|
|
load();
|
|
|
|
});
|
|
|
|
|
|
|
|
/***** Register and define API *****/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Show error messages to the user
|
|
|
|
*
|
|
|
|
* This plugin provides a way to display error messages to the user.
|
|
|
|
*
|
|
|
|
* @singleton
|
|
|
|
**/
|
|
|
|
plugin.freezePublicAPI({
|
|
|
|
get top(){ return topPx; },
|
|
|
|
set top(value){ topPx = value; },
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Displays an error message in the main error reporting UI.
|
|
|
|
* @param {String} message The message to display.
|
|
|
|
*/
|
|
|
|
show: show,
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hides the main error reporting UI.
|
|
|
|
*/
|
|
|
|
hide: hide,
|
|
|
|
});
|
|
|
|
|
|
|
|
register(null, { "dialog.error" : plugin });
|
|
|
|
}
|
|
|
|
});
|