diff --git a/resource/require.js b/resource/require.js index b944d2a398..85b4784e06 100644 --- a/resource/require.js +++ b/resource/require.js @@ -6,6 +6,56 @@ var require = (function() { var { Loader, Require, Module } = Components.utils.import('resource://gre/modules/commonjs/toolkit/loader.js'); var requirer = Module('/', '/'); var _runningTimers = {}; + var window = {}; + + window.setTimeout = function (func, ms) { + var id = Math.floor(Math.random() * (1000000000000 - 1)) + 1 + var useMethodjit = Components.utils.methodjit; + var timer = Components.classes["@mozilla.org/timer;1"] + .createInstance(Components.interfaces.nsITimer); + timer.initWithCallback({"notify":function() { + // Remove timer from object so it can be garbage collected + delete _runningTimers[id]; + + // Execute callback function + try { + func(); + } catch(err) { + // Rethrow errors that occur so that they appear in the error + // console with the appropriate name and line numbers. While the + // the errors appear without this, the line numbers get eaten. + var scriptError = Components.classes["@mozilla.org/scripterror;1"] + .createInstance(Components.interfaces.nsIScriptError); + scriptError.init( + err.message || err.toString(), + err.fileName || err.filename || null, + null, + err.lineNumber || null, + null, + scriptError.errorFlag, + 'component javascript' + ); + Components.classes["@mozilla.org/consoleservice;1"] + .getService(Components.interfaces.nsIConsoleService) + .logMessage(scriptError); + typeof Zotero !== 'undefined' && Zotero.debug(err.stack, 1); + } + }}, ms, Components.interfaces.nsITimer.TYPE_ONE_SHOT); + _runningTimers[id] = timer; + return id; + }; + + window.clearTimeout = function (id) { + var timer = _runningTimers[id]; + if (timer) { + timer.cancel(); + } + delete _runningTimers[id]; + }; + + window.debug = function (msg) { + dump(msg + "\n\n"); + }; var loader = Loader({ id: 'zotero/require', @@ -17,6 +67,8 @@ var require = (function() { console: typeof console !== 'undefined' && console || {}, navigator: typeof navigator !== 'undefined' && navigator || {}, window, + setTimeout: window.setTimeout, + clearTimeout: window.clearTimeout, Zotero: typeof Zotero !== 'undefined' && Zotero || {} } });