diff options
| author | Géry Debongnie <ged@odoo.com> | 2015-03-13 14:02:50 +0100 |
|---|---|---|
| committer | Géry Debongnie <ged@odoo.com> | 2015-03-18 09:23:37 +0100 |
| commit | 4fdf74fe21b9fb99ed9cdcb1a0ef2e21d34dafed (patch) | |
| tree | cfd1e48916e8ff130dd4bc6b60424e13fe1d4c9f /addons/web/static/src/js/boot.js | |
| parent | 59a4706dd97391772efa420a8c5c1f3b1334db7e (diff) | |
[IMP] web+addons: improvement to module system
The module system needs to know the dependencies of a given module
before executing the function. This is why the dependencies were
defined once in an array, and then were described one more times in the
call to require.
But a trick can simplify this: the boot function can parse the string
representation of the module and extract the calls to require from it.
It is more work for the processor, but it leads to simpler module
definitions.
Diffstat (limited to 'addons/web/static/src/js/boot.js')
| -rw-r--r-- | addons/web/static/src/js/boot.js | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/addons/web/static/src/js/boot.js b/addons/web/static/src/js/boot.js index 67834ebf6b2..28ed102005c 100644 --- a/addons/web/static/src/js/boot.js +++ b/addons/web/static/src/js/boot.js @@ -21,6 +21,9 @@ _: _, }); + var commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg; + var cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g; + var debug = ($.deparam($.param.querystring()).debug !== undefined); var odoo = window.odoo = { @@ -49,10 +52,20 @@ services: services, }, define: function () { - var args = Array.prototype.slice.call(arguments), - name = typeof args[0] === 'string' ? args.shift() : _.uniqueId('__job'), - deps = args[0] instanceof Array ? args.shift() : [], - factory = args[0]; + var args = Array.prototype.slice.call(arguments); + var name = typeof args[0] === 'string' ? args.shift() : _.uniqueId('__job'); + var factory = args[args.length - 1]; + var deps; + if (args[0] instanceof Array) { + deps = args[0]; + } else { + deps = []; + factory.toString() + .replace(commentRegExp, '') + .replace(cjsRequireRegExp, function (match, dep) { + deps.push(dep); + }); + } if (odoo.debug) { if (!(deps instanceof Array)) { |
