diff --git a/src/node/utils/tar.json b/src/node/utils/tar.json
index 05d764a79..2c63c0851 100644
--- a/src/node/utils/tar.json
+++ b/src/node/utils/tar.json
@@ -1,79 +1,2 @@
{
- "pad.js": [
- "pad.js"
- , "pad_utils.js"
- , "browser.js"
- , "pad_cookie.js"
- , "pad_editor.js"
- , "pad_editbar.js"
- , "pad_docbar.js"
- , "pad_modals.js"
- , "ace.js"
- , "collab_client.js"
- , "pad_userlist.js"
- , "pad_impexp.js"
- , "pad_savedrevs.js"
- , "pad_connectionstatus.js"
- , "chat.js"
- , "gritter.js"
- , "$tinycon/tinycon.js"
- , "excanvas.js"
- , "farbtastic.js"
- ]
-, "timeslider.js": [
- "timeslider.js"
- , "colorutils.js"
- , "draggable.js"
- , "pad_utils.js"
- , "browser.js"
- , "pad_cookie.js"
- , "pad_editor.js"
- , "pad_editbar.js"
- , "pad_docbar.js"
- , "pad_modals.js"
- , "pad_savedrevs.js"
- , "pad_impexp.js"
- , "AttributePool.js"
- , "Changeset.js"
- , "domline.js"
- , "linestylefilter.js"
- , "cssmanager.js"
- , "broadcast.js"
- , "broadcast_slider.js"
- , "broadcast_revisions.js"
- ]
-, "ace2_inner.js": [
- "ace2_inner.js"
- , "browser.js"
- , "AttributePool.js"
- , "Changeset.js"
- , "ChangesetUtils.js"
- , "skiplist.js"
- , "cssmanager.js"
- , "colorutils.js"
- , "undomodule.js"
- , "$unorm.js"
- , "contentcollector.js"
- , "changesettracker.js"
- , "linestylefilter.js"
- , "domline.js"
- , "AttributeManager.js"
- ]
-, "ace2_common.js": [
- "ace2_common.js"
- , "browser.js"
- , "jquery.js"
- , "rjquery.js"
- , "$async.js"
- , "$async/lib/async.js"
- , "underscore.js"
- , "$underscore.js"
- , "$underscore/underscore.js"
- , "security.js"
- , "$security.js"
- , "json2.js"
- , "pluginfw/client_plugins.js"
- , "pluginfw/shared.js"
- , "pluginfw/hooks.js"
- ]
}
diff --git a/src/static/js/ace.js b/src/static/js/ace.js
index c446939a3..fe33c7406 100644
--- a/src/static/js/ace.js
+++ b/src/static/js/ace.js
@@ -30,7 +30,7 @@ Ace2Editor.registry = {
nextId: 1
};
-var hooks = require('./pluginfw/hooks');
+var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
var _ = require('./underscore');
function scriptTag(source) {
@@ -241,23 +241,35 @@ function Ace2Editor()
}
iframeHTML.push(scriptTag(
-Ace2Editor.EMBEDED[KERNEL_SOURCE] + '\n\
-require.setRootURI("../javascripts/src");\n\
-require.setLibraryURI("../javascripts/lib");\n\
-require.setGlobalKeyPath("require");\n\
-\n\
-var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks");\n\
-var plugins = require("ep_etherpad-lite/static/js/pluginfw/client_plugins");\n\
-hooks.plugins = plugins;\n\
-plugins.adoptPluginsFromAncestorsOf(window);\n\
-\n\
-$ = jQuery = require("ep_etherpad-lite/static/js/rjquery").jQuery; // Expose jQuery #HACK\n\
-var Ace2Inner = require("ep_etherpad-lite/static/js/ace2_inner");\n\
-\n\
-plugins.ensure(function () {\n\
- Ace2Inner.init();\n\
-});\n\
-'));
+ Ace2Editor.EMBEDED[KERNEL_SOURCE] + '\n\
+ require.setRootURI("../javascripts/src");\n\
+ require.setLibraryURI("../javascripts/lib");\n\
+ require.setGlobalKeyPath("require");\n\
+ '));
+
+ iframeHTML.push('');
+
+ iframeHTML.push(scriptTag('\n\
+ var pathComponents = parent.parent.location.pathname.split("/");\n\
+ var baseURL = pathComponents.slice(0,pathComponents.length-2).join("/") + "/";\n\
+ requirejs.config({\n\
+ baseUrl: baseURL + "static/plugins",\n\
+ paths: {underscore: baseURL + "static/plugins/underscore/underscore"}\n\
+ });\n\
+ \n\
+ requirejs(["ep_etherpad-lite/static/js/rjquery", "ep_etherpad-lite/static/js/pluginfw/client_plugins", "ep_etherpad-lite/static/js/ace2_inner"], function (j, plugins, Ace2Inner) {\n\
+ jQuery = $ = window.jQuery = window.$ = j; // Expose jQuery #HACK\n\
+ \n\
+ plugins.adoptPluginsFromAncestorsOf(window, function () {\n\
+ var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks");\n\
+ hooks.plugins = plugins;\n\
+ \n\
+ plugins.ensure(function () {\n\
+ Ace2Inner.init();\n\
+ });\n\
+ });\n\
+ });\n\
+ '));
iframeHTML.push('');
diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js
index 555512118..f4af21c7a 100644
--- a/src/static/js/ace2_inner.js
+++ b/src/static/js/ace2_inner.js
@@ -19,7 +19,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-var _, $, jQuery, plugins, Ace2Common;
+
+define(["ep_etherpad-lite/static/js/rjquery", "underscore"], function ($, _) {
+ var exports = {};
var browser = require('./browser').browser;
if(browser.msie){
@@ -32,11 +34,7 @@ if(browser.msie){
}
}
-Ace2Common = require('./ace2_common');
-
-plugins = require('ep_etherpad-lite/static/js/pluginfw/client_plugins');
-$ = jQuery = require('./rjquery').$;
-_ = require("./underscore");
+var Ace2Common = require('./ace2_common');
var isNodeText = Ace2Common.isNodeText,
getAssoc = Ace2Common.getAssoc,
@@ -45,7 +43,7 @@ var isNodeText = Ace2Common.isNodeText,
binarySearchInfinite = Ace2Common.binarySearchInfinite,
htmlPrettyEscape = Ace2Common.htmlPrettyEscape,
noop = Ace2Common.noop;
-var hooks = require('./pluginfw/hooks');
+ var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
function Ace2Inner(){
@@ -5470,3 +5468,6 @@ exports.init = function () {
var editor = new Ace2Inner()
editor.init();
};
+
+ return exports;
+});
diff --git a/src/static/js/broadcast.js b/src/static/js/broadcast.js
index 817155b55..983402683 100644
--- a/src/static/js/broadcast.js
+++ b/src/static/js/broadcast.js
@@ -27,7 +27,7 @@ var Changeset = require('./Changeset');
var linestylefilter = require('./linestylefilter').linestylefilter;
var colorutils = require('./colorutils').colorutils;
var _ = require('./underscore');
-var hooks = require('./pluginfw/hooks');
+var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
// These parameters were global, now they are injected. A reference to the
// Timeslider controller would probably be more appropriate.
diff --git a/src/static/js/chat.js b/src/static/js/chat.js
index 42cd50f4b..6479fd17d 100644
--- a/src/static/js/chat.js
+++ b/src/static/js/chat.js
@@ -17,7 +17,7 @@
var padutils = require('./pad_utils').padutils;
var padcookie = require('./pad_cookie').padcookie;
var Tinycon = require('tinycon/tinycon');
-var hooks = require('./pluginfw/hooks');
+var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
var padeditor = require('./pad_editor').padeditor;
var chat = (function()
diff --git a/src/static/js/collab_client.js b/src/static/js/collab_client.js
index e5c0ec8b2..b1bc0c53c 100644
--- a/src/static/js/collab_client.js
+++ b/src/static/js/collab_client.js
@@ -21,7 +21,7 @@
*/
var chat = require('./chat').chat;
-var hooks = require('./pluginfw/hooks');
+var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
// Dependency fill on init. This exists for `pad.socket` only.
// TODO: bind directly to the socket.
diff --git a/src/static/js/contentcollector.js b/src/static/js/contentcollector.js
index 857e171fb..792102c84 100644
--- a/src/static/js/contentcollector.js
+++ b/src/static/js/contentcollector.js
@@ -27,7 +27,7 @@ var _MAX_LIST_LEVEL = 16;
var UNorm = require('unorm');
var Changeset = require('./Changeset');
-var hooks = require('./pluginfw/hooks');
+var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
var _ = require('./underscore');
function sanitizeUnicode(s)
diff --git a/src/static/js/domline.js b/src/static/js/domline.js
index 03f1b9c89..c40c6e204 100644
--- a/src/static/js/domline.js
+++ b/src/static/js/domline.js
@@ -27,7 +27,7 @@
// requires: undefined
var Security = require('./security');
-var hooks = require('./pluginfw/hooks');
+var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
var _ = require('./underscore');
var lineAttributeMarker = require('./linestylefilter').lineAttributeMarker;
var noop = function(){};
diff --git a/src/static/js/linestylefilter.js b/src/static/js/linestylefilter.js
index 17ab993b1..82efe2d98 100644
--- a/src/static/js/linestylefilter.js
+++ b/src/static/js/linestylefilter.js
@@ -29,7 +29,7 @@
// requires: undefined
var Changeset = require('./Changeset');
-var hooks = require('./pluginfw/hooks');
+var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
var linestylefilter = {};
var _ = require('./underscore');
var AttributeManager = require('./AttributeManager');
diff --git a/src/static/js/pad.js b/src/static/js/pad.js
index f1de80f0f..557a9cd91 100644
--- a/src/static/js/pad.js
+++ b/src/static/js/pad.js
@@ -48,7 +48,7 @@ var readCookie = require('./pad_utils').readCookie;
var randomString = require('./pad_utils').randomString;
var gritter = require('./gritter').gritter;
-var hooks = require('./pluginfw/hooks');
+var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
var receivedClientVars = false;
diff --git a/src/static/js/pad_editbar.js b/src/static/js/pad_editbar.js
index e418969ea..d0b020706 100644
--- a/src/static/js/pad_editbar.js
+++ b/src/static/js/pad_editbar.js
@@ -20,7 +20,7 @@
* limitations under the License.
*/
-var hooks = require('./pluginfw/hooks');
+var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
var padutils = require('./pad_utils').padutils;
var padeditor = require('./pad_editor').padeditor;
var padsavedrevs = require('./pad_savedrevs');
diff --git a/src/static/js/pad_userlist.js b/src/static/js/pad_userlist.js
index 22dab40a9..b5f231998 100644
--- a/src/static/js/pad_userlist.js
+++ b/src/static/js/pad_userlist.js
@@ -21,7 +21,7 @@
*/
var padutils = require('./pad_utils').padutils;
-var hooks = require('./pluginfw/hooks');
+var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
var myUserInfo = {};
diff --git a/src/static/js/pluginfw/client_plugins.js b/src/static/js/pluginfw/client_plugins.js
index 062a2d8a8..702f4f104 100644
--- a/src/static/js/pluginfw/client_plugins.js
+++ b/src/static/js/pluginfw/client_plugins.js
@@ -1,72 +1,83 @@
-var $, jQuery;
-$ = jQuery = require("ep_etherpad-lite/static/js/rjquery").$;
-var _ = require("underscore");
+define(["ep_etherpad-lite/static/js/rjquery", "underscore", './shared'], function ($, _, pluginUtils) {
+ var exports = {};
-var pluginUtils = require('./shared');
+ exports.loaded = false;
+ exports.plugins = {};
+ exports.parts = [];
+ exports.hooks = {};
+ exports.baseURL = '';
-exports.loaded = false;
-exports.plugins = {};
-exports.parts = [];
-exports.hooks = {};
-exports.baseURL = '';
-
-exports.ensure = function (cb) {
- if (!exports.loaded)
- exports.update(cb);
- else
- cb();
-};
-
-exports.update = function (cb) {
- // It appears that this response (see #620) may interrupt the current thread
- // of execution on Firefox. This schedules the response in the run-loop,
- // which appears to fix the issue.
- var callback = function () {setTimeout(cb, 0);};
-
- jQuery.getJSON(exports.baseURL + 'pluginfw/plugin-definitions.json', function(data) {
- exports.plugins = data.plugins;
- exports.parts = data.parts;
- pluginUtils.extractHooks(exports.parts, "client_hooks", undefined, function (err, hooks) {
- exports.hooks = hooks;
- exports.loaded = true;
- callback();
- });
- }).error(function(xhr, s, err){
- console.error("Failed to load plugin-definitions: " + err);
- callback();
- });
-};
-
-function adoptPlugins(plugins) {
- var keys = [
- 'loaded', 'plugins', 'parts', 'hooks', 'baseURL', 'ensure', 'update'];
-
- for (var i = 0, ii = keys.length; i < ii; i++) {
- var key = keys[i];
- exports[key] = plugins[key];
+ exports.loadModule = function(path, cb) {
+ requirejs([path], cb);
}
-}
-function adoptPluginsFromAncestorsOf(frame) {
- // Bind plugins with parent;
- var parentRequire = null;
- try {
- while (frame = frame.parent) {
- if (typeof (frame.require) !== "undefined") {
- parentRequire = frame.require;
- break;
- }
+ exports.ensure = function (cb) {
+ if (!exports.loaded)
+ exports.update(cb);
+ else
+ cb();
+ };
+
+ exports.update = function (cb) {
+ // It appears that this response (see #620) may interrupt the current thread
+ // of execution on Firefox. This schedules the response in the run-loop,
+ // which appears to fix the issue.
+ var callback = function () {setTimeout(cb, 0);};
+
+ $.getJSON(exports.baseURL + 'pluginfw/plugin-definitions.json', function(data) {
+ exports.plugins = data.plugins;
+ exports.parts = data.parts;
+ pluginUtils.extractHooks(exports.parts, "client_hooks", exports.loadModule, function (err, hooks) {
+ exports.hooks = hooks;
+ exports.loaded = true;
+ callback();
+ });
+ }).error(function(xhr, s, err){
+ console.error("Failed to load plugin-definitions: " + err);
+ callback();
+ });
+ };
+
+ function adoptPlugins(plugins) {
+ var keys = [
+ 'loaded', 'plugins', 'parts', 'hooks', 'baseURL', 'ensure', 'update'];
+
+ for (var i = 0, ii = keys.length; i < ii; i++) {
+ var key = keys[i];
+ exports[key] = plugins[key];
}
- } catch (error) {
- // Silence (this can only be a XDomain issue).
}
- if (parentRequire) {
- var ancestorPlugins = parentRequire("ep_etherpad-lite/static/js/pluginfw/client_plugins");
- exports.adoptPlugins(ancestorPlugins);
- } else {
- throw new Error("Parent plugins could not be found.")
- }
-}
-exports.adoptPlugins = adoptPlugins;
-exports.adoptPluginsFromAncestorsOf = adoptPluginsFromAncestorsOf;
+ function adoptPluginsFromAncestorsOf(frame, cb) {
+ // Bind plugins with parent;
+ var parentRequire = null;
+ try {
+ while (frame = frame.parent) {
+ if (typeof (frame.require) !== "undefined") {
+ parentRequire = frame.requirejs;
+ break;
+ }
+ }
+ } catch (error) {
+ // Silence (this can only be a XDomain issue).
+ }
+ if (parentRequire) {
+ parentRequire(["ep_etherpad-lite/static/js/pluginfw/client_plugins"], function (ancestorPlugins) {
+ exports.adoptPlugins(ancestorPlugins);
+ cb();
+ });
+ } else {
+ throw new Error("Parent plugins could not be found.")
+ }
+ }
+
+ exports.adoptPlugins = adoptPlugins;
+ exports.adoptPluginsFromAncestorsOf = adoptPluginsFromAncestorsOf;
+
+ out = {};
+ Object.keys(exports).map(function(key) {
+ out[key] = typeof(exports[key]);
+ });
+
+ return exports;
+});
diff --git a/src/static/js/pluginfw/plugins.js b/src/static/js/pluginfw/plugins.js
index 83185158d..25c0cffe5 100644
--- a/src/static/js/pluginfw/plugins.js
+++ b/src/static/js/pluginfw/plugins.js
@@ -8,8 +8,6 @@ var util = require("util");
var _ = require("underscore");
var requirejs = require('requirejs');
-var pluginUtils = require('./shared');
-
exports.prefix = 'ep_';
exports.loaded = false;
exports.plugins = {};
@@ -76,8 +74,13 @@ exports.callInit = function (cb) {
);
}
-exports.pathNormalization = function (part, hook_fn_name) {
- return path.normalize(path.join(path.dirname(exports.plugins[part.plugin].package.path), hook_fn_name));
+exports.loadModule = function(path, cb) {
+ try {
+ cb(require(path));
+ console.warn("Module uses old CommonJS format: " + path);
+ } catch (e) {
+ requirejs([path], cb);
+ }
}
exports.update = function (cb) {
@@ -94,13 +97,16 @@ exports.update = function (cb) {
if (err) cb(err);
exports.plugins = plugins;
exports.parts = sortParts(parts);
- pluginUtils.extractHooks(exports.parts, "hooks", exports.pathNormalization, function (err, hooks) {
- exports.hooks = hooks;
- // Load client side hooks here too, so we don't have to call it from formatHooks (which is synchronous)
- pluginUtils.extractHooks(exports.parts, "client_hooks", exports.pathNormalization, function (err, hooks) {
- exports.client_hooks = hooks;
- exports.loaded = true;
- exports.callInit(cb);
+
+ requirejs(["ep_etherpad-lite/static/js/pluginfw/shared"], function (pluginUtils) {
+ pluginUtils.extractHooks(exports.parts, "hooks", exports.loadModule, function (err, hooks) {
+ exports.hooks = hooks;
+ // Load client side hooks here too, so we don't have to call it from formatHooks (which is synchronous)
+ pluginUtils.extractHooks(exports.parts, "client_hooks", exports.loadModule, function (err, hooks) {
+ exports.client_hooks = hooks;
+ exports.loaded = true;
+ exports.callInit(cb);
+ });
});
});
}
diff --git a/src/static/js/pluginfw/shared.js b/src/static/js/pluginfw/shared.js
index 6dc763501..6f8bc111f 100644
--- a/src/static/js/pluginfw/shared.js
+++ b/src/static/js/pluginfw/shared.js
@@ -1,85 +1,67 @@
-var _ = require("underscore");
-var async = require("async/lib/async");
-if (typeof(requirejs) == "undefined") {
- if (typeof(window) != "undefined") {
- var requirejs = window.requirejs;
- } else {
- var requirejs = require('requirejs');
- }
-}
+define(["underscore", "async/lib/async"], function (_, async) {
+ var exports = {};
-function loadFn(path, hookName, cb) {
- var functionName
- , parts = path.split(":");
-
- // on windows: C:\foo\bar:xyz
- if (parts[0].length == 1) {
- if (parts.length == 3) {
- functionName = parts.pop();
+ if (typeof(requirejs) == "undefined") {
+ if (typeof(window) != "undefined") {
+ var requirejs = window.requirejs;
+ } else {
+ var requirejs = require('requirejs');
}
- path = parts.join(":");
- } else {
- path = parts[0];
- functionName = parts[1];
}
- var handleFunction = function (fn) {
- functionName = functionName ? functionName : hookName;
+ function loadFn(path, hookName, loadModule, cb) {
+ var functionName
+ , parts = path.split(":");
- _.each(functionName.split("."), function (name) {
- fn = fn[name];
+ // on windows: C:\foo\bar:xyz
+ if (parts[0].length == 1) {
+ if (parts.length == 3) {
+ functionName = parts.pop();
+ }
+ path = parts.join(":");
+ } else {
+ path = parts[0];
+ functionName = parts[1];
+ }
+
+ loadModule(path, function (fn) {
+ functionName = functionName ? functionName : hookName;
+
+ _.each(functionName.split("."), function (name) {
+ fn = fn[name];
+ });
+ cb(null, fn);
});
- cb(null, fn);
};
- if (require.resolve != undefined) {
- /* We're apparently in NodeJS, so try to load using the built-in require first */
- try {
- handleFunction(require(path));
- console.warn("Module uses old CommonJS format: " + path);
- } catch (e) {
- requirejs([path], handleFunction);
- }
- } else {
- requirejs([path], handleFunction);
- }
-};
+ function extractHooks(parts, hook_set_name, loadModule, cb) {
+ var hooks = {};
-function extractHooks(parts, hook_set_name, normalizer, cb) {
- var hooks = {};
+ async.each(parts, function (part, cb) {
+ if (part[hook_set_name] == undefined) {
+ cb(null);
+ } else {
+ async.each(Object.keys(part[hook_set_name]), function (hook_name, cb) {
+ if (hooks[hook_name] === undefined) hooks[hook_name] = [];
- async.each(parts, function (part, cb) {
- if (part[hook_set_name] == undefined) {
- cb(null);
- } else {
- async.each(Object.keys(part[hook_set_name]), function (hook_name, cb) {
- if (hooks[hook_name] === undefined) hooks[hook_name] = [];
+ var hook_fn_name = part[hook_set_name][hook_name];
- var hook_fn_name = part[hook_set_name][hook_name];
+ loadFn(hook_fn_name, hook_name, loadModule, function (err, hook_fn) {
+ if (hook_fn) {
+ hooks[hook_name].push({"hook_name": hook_name, "hook_fn": hook_fn, "hook_fn_name": hook_fn_name, "part": part});
+ } else {
+ console.error("Failed to load '" + hook_fn_name + "' for '" + part.full_name + "/" + hook_set_name + "/" + hook_name + ":" + err.toString());
+ }
+ cb(err);
+ });
+ }, cb);
+ }
+ }, function (err) {
+ cb(err, hooks);
+ });
+ };
- /* On the server side, you can't just
- * require("pluginname/whatever") if the plugin is installed as
- * a dependency of another plugin! Bah, pesky little details of
- * npm... */
-/*
- if (normalizer) {
- hook_fn_name = normalizer(part, hook_fn_name);
- }
-*/
+ exports.extractHooks = extractHooks;
- loadFn(hook_fn_name, hook_name, function (err, hook_fn) {
- if (hook_fn) {
- hooks[hook_name].push({"hook_name": hook_name, "hook_fn": hook_fn, "hook_fn_name": hook_fn_name, "part": part});
- } else {
- console.error("Failed to load '" + hook_fn_name + "' for '" + part.full_name + "/" + hook_set_name + "/" + hook_name + ":" + err.toString());
- }
- cb(err);
- });
- }, cb);
- }
- }, function (err) {
- cb(err, hooks);
- });
-};
-
-exports.extractHooks = extractHooks;
+ return exports;
+});
diff --git a/src/static/js/rjquery.js b/src/static/js/rjquery.js
index 1c0d98e64..2be3d442e 100644
--- a/src/static/js/rjquery.js
+++ b/src/static/js/rjquery.js
@@ -1,5 +1,7 @@
-
-// Proviedes a require'able version of jQuery without leaking $ and jQuery;
-require('./jquery');
-var jq = window.$.noConflict(true);
-exports.jQuery = exports.$ = jq;
+/* Proviedes a require'able version of jQuery without leaking $ and jQuery;
+ * works around wierdnesses in jquerys own packaging that makes dummy be undefined in the call below
+ */
+define.amd.jQuery = true;
+define(["ep_etherpad-lite/static/js/jquery"], function (dummy) {
+ return window.$.noConflict(true);
+});
diff --git a/src/static/js/timeslider.js b/src/static/js/timeslider.js
index 75c200224..71ec7b392 100644
--- a/src/static/js/timeslider.js
+++ b/src/static/js/timeslider.js
@@ -28,7 +28,7 @@ JSON = require('./json2');
var createCookie = require('./pad_utils').createCookie;
var readCookie = require('./pad_utils').readCookie;
var randomString = require('./pad_utils').randomString;
-var hooks = require('./pluginfw/hooks');
+var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
var token, padId, export_links;
diff --git a/src/templates/pad.html b/src/templates/pad.html
index f8bca095a..8afffce16 100644
--- a/src/templates/pad.html
+++ b/src/templates/pad.html
@@ -371,8 +371,8 @@
-
-
+
<% e.begin_block("customScripts"); %>
@@ -391,38 +391,44 @@
require.setLibraryURI(baseURL + "javascripts/lib");
require.setGlobalKeyPath("require");
+ window.requireKernel = require;
+
requirejs.config({
- baseUrl: baseURL + "static/plugins"
+ baseUrl: baseURL + "static/plugins",
+paths: {'underscore': baseURL + "static/plugins/underscore/underscore"}
});
- $ = jQuery = require('ep_etherpad-lite/static/js/rjquery').jQuery; // Expose jQuery #HACK
- browser = require('ep_etherpad-lite/static/js/browser').browser;
- if ((!browser.msie) && (!(browser.mozilla && browser.version.indexOf("1.8.") == 0))) {
- document.domain = document.domain; // for comet
- }
+ requirejs(["ep_etherpad-lite/static/js/rjquery", 'ep_etherpad-lite/static/js/pluginfw/client_plugins'], function ($, plugins) {
+ window.$ = $; // Expose jQuery #HACK
+ window.jQuery = $;
- var plugins = require('ep_etherpad-lite/static/js/pluginfw/client_plugins');
- var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
+ browser = require('ep_etherpad-lite/static/js/browser').browser;
+ if ((!browser.msie) && (!(browser.mozilla && browser.version.indexOf("1.8.") == 0))) {
+ document.domain = document.domain; // for comet
+ }
- plugins.baseURL = baseURL;
- plugins.update(function () {
- hooks.plugins = plugins;
+ var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
- // Call documentReady hook
- $(function() {
- hooks.aCallAll('documentReady');
+ plugins.baseURL = baseURL;
+ plugins.update(function () {
+ hooks.plugins = plugins;
+
+ // Call documentReady hook
+ $(function() {
+ hooks.aCallAll('documentReady');
+ });
+
+ var pad = require('ep_etherpad-lite/static/js/pad');
+ pad.baseURL = baseURL;
+ pad.init();
});
- var pad = require('ep_etherpad-lite/static/js/pad');
- pad.baseURL = baseURL;
- pad.init();
+ /* TODO: These globals shouldn't exist. */
+ pad = require('ep_etherpad-lite/static/js/pad').pad;
+ chat = require('ep_etherpad-lite/static/js/chat').chat;
+ padeditbar = require('ep_etherpad-lite/static/js/pad_editbar').padeditbar;
+ padimpexp = require('ep_etherpad-lite/static/js/pad_impexp').padimpexp;
});
-
- /* TODO: These globals shouldn't exist. */
- pad = require('ep_etherpad-lite/static/js/pad').pad;
- chat = require('ep_etherpad-lite/static/js/chat').chat;
- padeditbar = require('ep_etherpad-lite/static/js/pad_editbar').padeditbar;
- padimpexp = require('ep_etherpad-lite/static/js/pad_impexp').padimpexp;
}());
<% e.end_block(); %>