aboutsummaryrefslogtreecommitdiff
path: root/guidelines/wikipedia/specs/exports.js
diff options
context:
space:
mode:
Diffstat (limited to 'guidelines/wikipedia/specs/exports.js')
-rw-r--r--guidelines/wikipedia/specs/exports.js68
1 files changed, 68 insertions, 0 deletions
diff --git a/guidelines/wikipedia/specs/exports.js b/guidelines/wikipedia/specs/exports.js
new file mode 100644
index 0000000..7dcecbb
--- /dev/null
+++ b/guidelines/wikipedia/specs/exports.js
@@ -0,0 +1,68 @@
+/*
+ * Defines an `exports` object that can capture names and rules from
+ * multiple files. Requires a javascript runtime that supports
+ * ECMAScript 5.
+ */
+(function (global) {
+ 'use strict';
+
+ var exports = {};
+ var rules = {};
+ var unmatchedName, unmatchedDef;
+ var lastName, lastDef;
+
+ Object.defineProperty(exports, 'name', {
+ set: function(name) {
+ if (unmatchedDef) {
+ rules[name] = unmatchedDef;
+ unmatchedDef = null;
+ }
+ else {
+ unmatchedName = name;
+ }
+ lastName = name;
+ },
+
+ get: function() {
+ return lastName;
+ }
+ });
+
+ Object.defineProperty(exports, 'rule', {
+ set: function(def) {
+ if (unmatchedName) {
+ rules[unmatchedName] = def;
+ unmatchedName = null;
+ }
+ else {
+ unmatchedDef = def;
+ }
+ lastDef = def;
+ },
+
+ get: function() {
+ return lastDef;
+ }
+ });
+
+ Object.defineProperty(global, 'exports', {
+ get: function() {
+ return exports;
+ },
+
+ set: function(exp) {
+ if (exp && typeof exp === 'object' && exp.name && exp.rule) {
+ rules[exp.name] = exp.rule;
+ lastName = exp.name;
+ lastDef = exp.rule;
+ }
+ }
+ });
+
+ function rule(name) {
+ return rules[name];
+ }
+
+ global.rule = rule;
+
+}(this));