More AMDificatioN

This commit is contained in:
Egil Moeller 2015-04-11 23:08:09 +02:00
parent 4234681efd
commit 7a1f065702
18 changed files with 233 additions and 290 deletions

View file

@ -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"
]
} }

View file

@ -30,7 +30,7 @@ Ace2Editor.registry = {
nextId: 1 nextId: 1
}; };
var hooks = require('./pluginfw/hooks'); var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
var _ = require('./underscore'); var _ = require('./underscore');
function scriptTag(source) { function scriptTag(source) {
@ -245,18 +245,30 @@ Ace2Editor.EMBEDED[KERNEL_SOURCE] + '\n\
require.setRootURI("../javascripts/src");\n\ require.setRootURI("../javascripts/src");\n\
require.setLibraryURI("../javascripts/lib");\n\ require.setLibraryURI("../javascripts/lib");\n\
require.setGlobalKeyPath("require");\n\ require.setGlobalKeyPath("require");\n\
'));
iframeHTML.push('<script type="text/javascript" src="../static/plugins/requirejs/require.js"></script>');
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\ \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\ 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\ 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\ \n\
plugins.ensure(function () {\n\ plugins.ensure(function () {\n\
Ace2Inner.init();\n\ Ace2Inner.init();\n\
});\n\ });\n\
});\n\
});\n\
')); '));
iframeHTML.push('<style type="text/css" title="dynamicsyntax"></style>'); iframeHTML.push('<style type="text/css" title="dynamicsyntax"></style>');

View file

@ -19,7 +19,9 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
var _, $, jQuery, plugins, Ace2Common;
define(["ep_etherpad-lite/static/js/rjquery", "underscore"], function ($, _) {
var exports = {};
var browser = require('./browser').browser; var browser = require('./browser').browser;
if(browser.msie){ if(browser.msie){
@ -32,11 +34,7 @@ if(browser.msie){
} }
} }
Ace2Common = require('./ace2_common'); var Ace2Common = require('./ace2_common');
plugins = require('ep_etherpad-lite/static/js/pluginfw/client_plugins');
$ = jQuery = require('./rjquery').$;
_ = require("./underscore");
var isNodeText = Ace2Common.isNodeText, var isNodeText = Ace2Common.isNodeText,
getAssoc = Ace2Common.getAssoc, getAssoc = Ace2Common.getAssoc,
@ -45,7 +43,7 @@ var isNodeText = Ace2Common.isNodeText,
binarySearchInfinite = Ace2Common.binarySearchInfinite, binarySearchInfinite = Ace2Common.binarySearchInfinite,
htmlPrettyEscape = Ace2Common.htmlPrettyEscape, htmlPrettyEscape = Ace2Common.htmlPrettyEscape,
noop = Ace2Common.noop; noop = Ace2Common.noop;
var hooks = require('./pluginfw/hooks'); var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
function Ace2Inner(){ function Ace2Inner(){
@ -5470,3 +5468,6 @@ exports.init = function () {
var editor = new Ace2Inner() var editor = new Ace2Inner()
editor.init(); editor.init();
}; };
return exports;
});

View file

@ -27,7 +27,7 @@ var Changeset = require('./Changeset');
var linestylefilter = require('./linestylefilter').linestylefilter; var linestylefilter = require('./linestylefilter').linestylefilter;
var colorutils = require('./colorutils').colorutils; var colorutils = require('./colorutils').colorutils;
var _ = require('./underscore'); 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 // These parameters were global, now they are injected. A reference to the
// Timeslider controller would probably be more appropriate. // Timeslider controller would probably be more appropriate.

View file

@ -17,7 +17,7 @@
var padutils = require('./pad_utils').padutils; var padutils = require('./pad_utils').padutils;
var padcookie = require('./pad_cookie').padcookie; var padcookie = require('./pad_cookie').padcookie;
var Tinycon = require('tinycon/tinycon'); 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 padeditor = require('./pad_editor').padeditor;
var chat = (function() var chat = (function()

View file

@ -21,7 +21,7 @@
*/ */
var chat = require('./chat').chat; 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. // Dependency fill on init. This exists for `pad.socket` only.
// TODO: bind directly to the socket. // TODO: bind directly to the socket.

View file

@ -27,7 +27,7 @@ var _MAX_LIST_LEVEL = 16;
var UNorm = require('unorm'); var UNorm = require('unorm');
var Changeset = require('./Changeset'); var Changeset = require('./Changeset');
var hooks = require('./pluginfw/hooks'); var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
var _ = require('./underscore'); var _ = require('./underscore');
function sanitizeUnicode(s) function sanitizeUnicode(s)

View file

@ -27,7 +27,7 @@
// requires: undefined // requires: undefined
var Security = require('./security'); var Security = require('./security');
var hooks = require('./pluginfw/hooks'); var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
var _ = require('./underscore'); var _ = require('./underscore');
var lineAttributeMarker = require('./linestylefilter').lineAttributeMarker; var lineAttributeMarker = require('./linestylefilter').lineAttributeMarker;
var noop = function(){}; var noop = function(){};

View file

@ -29,7 +29,7 @@
// requires: undefined // requires: undefined
var Changeset = require('./Changeset'); var Changeset = require('./Changeset');
var hooks = require('./pluginfw/hooks'); var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
var linestylefilter = {}; var linestylefilter = {};
var _ = require('./underscore'); var _ = require('./underscore');
var AttributeManager = require('./AttributeManager'); var AttributeManager = require('./AttributeManager');

View file

@ -48,7 +48,7 @@ var readCookie = require('./pad_utils').readCookie;
var randomString = require('./pad_utils').randomString; var randomString = require('./pad_utils').randomString;
var gritter = require('./gritter').gritter; var gritter = require('./gritter').gritter;
var hooks = require('./pluginfw/hooks'); var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
var receivedClientVars = false; var receivedClientVars = false;

View file

@ -20,7 +20,7 @@
* limitations under the License. * 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 padutils = require('./pad_utils').padutils;
var padeditor = require('./pad_editor').padeditor; var padeditor = require('./pad_editor').padeditor;
var padsavedrevs = require('./pad_savedrevs'); var padsavedrevs = require('./pad_savedrevs');

View file

@ -21,7 +21,7 @@
*/ */
var padutils = require('./pad_utils').padutils; var padutils = require('./pad_utils').padutils;
var hooks = require('./pluginfw/hooks'); var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
var myUserInfo = {}; var myUserInfo = {};

View file

@ -1,8 +1,5 @@
var $, jQuery; define(["ep_etherpad-lite/static/js/rjquery", "underscore", './shared'], function ($, _, pluginUtils) {
$ = jQuery = require("ep_etherpad-lite/static/js/rjquery").$; var exports = {};
var _ = require("underscore");
var pluginUtils = require('./shared');
exports.loaded = false; exports.loaded = false;
exports.plugins = {}; exports.plugins = {};
@ -10,6 +7,10 @@ exports.parts = [];
exports.hooks = {}; exports.hooks = {};
exports.baseURL = ''; exports.baseURL = '';
exports.loadModule = function(path, cb) {
requirejs([path], cb);
}
exports.ensure = function (cb) { exports.ensure = function (cb) {
if (!exports.loaded) if (!exports.loaded)
exports.update(cb); exports.update(cb);
@ -23,10 +24,10 @@ exports.update = function (cb) {
// which appears to fix the issue. // which appears to fix the issue.
var callback = function () {setTimeout(cb, 0);}; var callback = function () {setTimeout(cb, 0);};
jQuery.getJSON(exports.baseURL + 'pluginfw/plugin-definitions.json', function(data) { $.getJSON(exports.baseURL + 'pluginfw/plugin-definitions.json', function(data) {
exports.plugins = data.plugins; exports.plugins = data.plugins;
exports.parts = data.parts; exports.parts = data.parts;
pluginUtils.extractHooks(exports.parts, "client_hooks", undefined, function (err, hooks) { pluginUtils.extractHooks(exports.parts, "client_hooks", exports.loadModule, function (err, hooks) {
exports.hooks = hooks; exports.hooks = hooks;
exports.loaded = true; exports.loaded = true;
callback(); callback();
@ -47,13 +48,13 @@ function adoptPlugins(plugins) {
} }
} }
function adoptPluginsFromAncestorsOf(frame) { function adoptPluginsFromAncestorsOf(frame, cb) {
// Bind plugins with parent; // Bind plugins with parent;
var parentRequire = null; var parentRequire = null;
try { try {
while (frame = frame.parent) { while (frame = frame.parent) {
if (typeof (frame.require) !== "undefined") { if (typeof (frame.require) !== "undefined") {
parentRequire = frame.require; parentRequire = frame.requirejs;
break; break;
} }
} }
@ -61,8 +62,10 @@ function adoptPluginsFromAncestorsOf(frame) {
// Silence (this can only be a XDomain issue). // Silence (this can only be a XDomain issue).
} }
if (parentRequire) { if (parentRequire) {
var ancestorPlugins = parentRequire("ep_etherpad-lite/static/js/pluginfw/client_plugins"); parentRequire(["ep_etherpad-lite/static/js/pluginfw/client_plugins"], function (ancestorPlugins) {
exports.adoptPlugins(ancestorPlugins); exports.adoptPlugins(ancestorPlugins);
cb();
});
} else { } else {
throw new Error("Parent plugins could not be found.") throw new Error("Parent plugins could not be found.")
} }
@ -70,3 +73,11 @@ function adoptPluginsFromAncestorsOf(frame) {
exports.adoptPlugins = adoptPlugins; exports.adoptPlugins = adoptPlugins;
exports.adoptPluginsFromAncestorsOf = adoptPluginsFromAncestorsOf; exports.adoptPluginsFromAncestorsOf = adoptPluginsFromAncestorsOf;
out = {};
Object.keys(exports).map(function(key) {
out[key] = typeof(exports[key]);
});
return exports;
});

View file

@ -8,8 +8,6 @@ var util = require("util");
var _ = require("underscore"); var _ = require("underscore");
var requirejs = require('requirejs'); var requirejs = require('requirejs');
var pluginUtils = require('./shared');
exports.prefix = 'ep_'; exports.prefix = 'ep_';
exports.loaded = false; exports.loaded = false;
exports.plugins = {}; exports.plugins = {};
@ -76,8 +74,13 @@ exports.callInit = function (cb) {
); );
} }
exports.pathNormalization = function (part, hook_fn_name) { exports.loadModule = function(path, cb) {
return path.normalize(path.join(path.dirname(exports.plugins[part.plugin].package.path), hook_fn_name)); try {
cb(require(path));
console.warn("Module uses old CommonJS format: " + path);
} catch (e) {
requirejs([path], cb);
}
} }
exports.update = function (cb) { exports.update = function (cb) {
@ -94,15 +97,18 @@ exports.update = function (cb) {
if (err) cb(err); if (err) cb(err);
exports.plugins = plugins; exports.plugins = plugins;
exports.parts = sortParts(parts); exports.parts = sortParts(parts);
pluginUtils.extractHooks(exports.parts, "hooks", exports.pathNormalization, function (err, hooks) {
requirejs(["ep_etherpad-lite/static/js/pluginfw/shared"], function (pluginUtils) {
pluginUtils.extractHooks(exports.parts, "hooks", exports.loadModule, function (err, hooks) {
exports.hooks = hooks; exports.hooks = hooks;
// Load client side hooks here too, so we don't have to call it from formatHooks (which is synchronous) // 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) { pluginUtils.extractHooks(exports.parts, "client_hooks", exports.loadModule, function (err, hooks) {
exports.client_hooks = hooks; exports.client_hooks = hooks;
exports.loaded = true; exports.loaded = true;
exports.callInit(cb); exports.callInit(cb);
}); });
}); });
});
} }
); );
}); });

View file

@ -1,5 +1,6 @@
var _ = require("underscore"); define(["underscore", "async/lib/async"], function (_, async) {
var async = require("async/lib/async"); var exports = {};
if (typeof(requirejs) == "undefined") { if (typeof(requirejs) == "undefined") {
if (typeof(window) != "undefined") { if (typeof(window) != "undefined") {
var requirejs = window.requirejs; var requirejs = window.requirejs;
@ -8,7 +9,7 @@ if (typeof(requirejs) == "undefined") {
} }
} }
function loadFn(path, hookName, cb) { function loadFn(path, hookName, loadModule, cb) {
var functionName var functionName
, parts = path.split(":"); , parts = path.split(":");
@ -23,29 +24,17 @@ function loadFn(path, hookName, cb) {
functionName = parts[1]; functionName = parts[1];
} }
var handleFunction = function (fn) { loadModule(path, function (fn) {
functionName = functionName ? functionName : hookName; functionName = functionName ? functionName : hookName;
_.each(functionName.split("."), function (name) { _.each(functionName.split("."), function (name) {
fn = fn[name]; fn = fn[name];
}); });
cb(null, fn); cb(null, fn);
});
}; };
if (require.resolve != undefined) { function extractHooks(parts, hook_set_name, loadModule, cb) {
/* 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, normalizer, cb) {
var hooks = {}; var hooks = {};
async.each(parts, function (part, cb) { async.each(parts, function (part, cb) {
@ -57,17 +46,7 @@ function extractHooks(parts, hook_set_name, normalizer, cb) {
var hook_fn_name = part[hook_set_name][hook_name]; var hook_fn_name = part[hook_set_name][hook_name];
/* On the server side, you can't just loadFn(hook_fn_name, hook_name, loadModule, function (err, hook_fn) {
* 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);
}
*/
loadFn(hook_fn_name, hook_name, function (err, hook_fn) {
if (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}); hooks[hook_name].push({"hook_name": hook_name, "hook_fn": hook_fn, "hook_fn_name": hook_fn_name, "part": part});
} else { } else {
@ -83,3 +62,6 @@ function extractHooks(parts, hook_set_name, normalizer, cb) {
}; };
exports.extractHooks = extractHooks; exports.extractHooks = extractHooks;
return exports;
});

View file

@ -1,5 +1,7 @@
/* Proviedes a require'able version of jQuery without leaking $ and jQuery;
// 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
require('./jquery'); */
var jq = window.$.noConflict(true); define.amd.jQuery = true;
exports.jQuery = exports.$ = jq; define(["ep_etherpad-lite/static/js/jquery"], function (dummy) {
return window.$.noConflict(true);
});

View file

@ -28,7 +28,7 @@ JSON = require('./json2');
var createCookie = require('./pad_utils').createCookie; var createCookie = require('./pad_utils').createCookie;
var readCookie = require('./pad_utils').readCookie; var readCookie = require('./pad_utils').readCookie;
var randomString = require('./pad_utils').randomString; 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; var token, padId, export_links;

View file

@ -371,8 +371,8 @@
<script type="text/javascript" src="../static/plugins/requirejs/require.js"></script> <script type="text/javascript" src="../static/plugins/requirejs/require.js"></script>
<!-- Include base packages manually (this help with debugging) --> <!-- Include base packages manually (this help with debugging) -->
<script type="text/javascript" src="../javascripts/lib/ep_etherpad-lite/static/js/pad.js?callback=require.define"></script> <!-- script type="text/javascript" src="../javascripts/lib/ep_etherpad-lite/static/js/pad.js?callback=require.define"></script>
<script type="text/javascript" src="../javascripts/lib/ep_etherpad-lite/static/js/ace2_common.js?callback=require.define"></script> <script type="text/javascript" src="../javascripts/lib/ep_etherpad-lite/static/js/ace2_common.js?callback=require.define"></script -->
<% e.begin_block("customScripts"); %> <% e.begin_block("customScripts"); %>
<script type="text/javascript" src="../static/custom/pad.js"></script> <script type="text/javascript" src="../static/custom/pad.js"></script>
@ -391,17 +391,22 @@
require.setLibraryURI(baseURL + "javascripts/lib"); require.setLibraryURI(baseURL + "javascripts/lib");
require.setGlobalKeyPath("require"); require.setGlobalKeyPath("require");
window.requireKernel = require;
requirejs.config({ 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 requirejs(["ep_etherpad-lite/static/js/rjquery", 'ep_etherpad-lite/static/js/pluginfw/client_plugins'], function ($, plugins) {
window.$ = $; // Expose jQuery #HACK
window.jQuery = $;
browser = require('ep_etherpad-lite/static/js/browser').browser; browser = require('ep_etherpad-lite/static/js/browser').browser;
if ((!browser.msie) && (!(browser.mozilla && browser.version.indexOf("1.8.") == 0))) { if ((!browser.msie) && (!(browser.mozilla && browser.version.indexOf("1.8.") == 0))) {
document.domain = document.domain; // for comet document.domain = document.domain; // for comet
} }
var plugins = require('ep_etherpad-lite/static/js/pluginfw/client_plugins');
var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks'); var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
plugins.baseURL = baseURL; plugins.baseURL = baseURL;
@ -423,6 +428,7 @@
chat = require('ep_etherpad-lite/static/js/chat').chat; chat = require('ep_etherpad-lite/static/js/chat').chat;
padeditbar = require('ep_etherpad-lite/static/js/pad_editbar').padeditbar; padeditbar = require('ep_etherpad-lite/static/js/pad_editbar').padeditbar;
padimpexp = require('ep_etherpad-lite/static/js/pad_impexp').padimpexp; padimpexp = require('ep_etherpad-lite/static/js/pad_impexp').padimpexp;
});
}()); }());
</script> </script>
<% e.end_block(); %> <% e.end_block(); %>