diff options
author | Rogan Creswick <creswick@gmail.com> | 2013-12-19 13:31:29 -0800 |
---|---|---|
committer | Rogan Creswick <creswick@gmail.com> | 2013-12-19 13:31:29 -0800 |
commit | aa2a7b34b64be8daf1a9d50f589563275284d50e (patch) | |
tree | da898aabcbca0191a57140e635e167b88aaa84e0 /src/js/fiveui/injected/compute.js | |
parent | 3b53cef842cf0288ad55fe55ae2f578f75b40ae7 (diff) | |
parent | 15a644f91a8b6e80bbd24a824b91c24547b80035 (diff) |
merge
Diffstat (limited to 'src/js/fiveui/injected/compute.js')
-rw-r--r-- | src/js/fiveui/injected/compute.js | 59 |
1 files changed, 33 insertions, 26 deletions
diff --git a/src/js/fiveui/injected/compute.js b/src/js/fiveui/injected/compute.js index d8ae9e8..8fada15 100644 --- a/src/js/fiveui/injected/compute.js +++ b/src/js/fiveui/injected/compute.js @@ -19,6 +19,8 @@ * limitations under the License. */ +/*jshint evil:true */ + (function(){ var guidGenerator = function () { @@ -331,38 +333,43 @@ /** * @param {{rules: [string], dependencies: [string]}} ruleDescr */ - var assembleRules = function(ruleDescr) { - var ruleList = []; - - _.each(ruleDescr.dependencies, - function(dep){ - try { - eval(dep.content); - } catch (x) { - console.error('Could not evaluate rule dependency: ' + dep.url); - console.error(x); - } - }); - - var ruleStrList = ruleDescr.rules; - for(var i=0; i<ruleStrList.length; ++i) { - var moduleStr = - [ '(function(){' - , 'var exports = {};' - , ruleStrList[i] - , 'return exports;' - , '})()' - ].join('\n'); + var assembleRules = function(__assembleRules_ruleDescr) { + // Use long variable names: top-level variables in eval'ed + // dependencies will be created in the scope of this function and + // we want to avoid collisions. + var __assembleRules_ruleList = [] + , __assembleRules_deps = __assembleRules_ruleDescr.dependencies + , __assembleRules_i; + + // Use for loop instead of _.each so that top-level variables in + // eval'ed dependencies will be created in the scope of the + // `assembleRules` function. The goal is to run rules in the + // same scope so that rules have access to top-level variables + // from defined in dependency scripts. + for (__assembleRules_i = 0; __assembleRules_i < __assembleRules_deps.length; __assembleRules_i += 1) { + try { + eval(__assembleRules_deps[__assembleRules_i].content); + } catch (x) { + console.error('Could not evaluate rule dependency: ' + + __assembleRules_deps[__assembleRules_i].url); + console.error(x); + } + } + + var ruleStrList = __assembleRules_ruleDescr.rules; + for(__assembleRules_i=0; __assembleRules_i<ruleStrList.length; ++__assembleRules_i) { + var __assembleRules_moduleFunc = new Function('exports', ruleStrList[__assembleRules_i]); try { - var evaled = eval(moduleStr); - ruleList.push(evaled); + var __assembleRules_exported = {}; + __assembleRules_moduleFunc(__assembleRules_exported); + __assembleRules_ruleList.push(__assembleRules_exported); } catch (x) { console.error('Could not evaluate rule module: ' + x); - console.error(moduleStr); + console.error(__assembleRules_moduleFunc); } } - return ruleList; + return __assembleRules_ruleList; }; port.on('SetRules', function(payload) { |