commit afb29f5df3046fa523b3bdd3f9a3936b855f05be
parent 97dc1bf1daa1221828bcaeaa24d5f878e626a313
Author: Ben Alpert <spicyjalapeno@gmail.com>
Date: Fri, 5 Jul 2013 21:44:44 -0700
Use browserify and "modules"
Reviewers: xymostech
Reviewed By: xymostech
Differential Revision: http://phabricator.benalpert.com/D37
Diffstat:
6 files changed, 113 insertions(+), 111 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -1,2 +1,3 @@
-parser.js
+build
node_modules
+parser.js
diff --git a/MJLite.js b/MJLite.js
@@ -1,111 +1,109 @@
-var MJLite = (function() {
+var parser = require("./parser");
- var buildExpression = function(expression) {
- return _.map(expression, function(ex, i) {
- var prev = i > 0 ? expression[i-1] : null;
+var buildExpression = function(expression) {
+ return _.map(expression, function(ex, i) {
+ var prev = i > 0 ? expression[i-1] : null;
- return buildGroup(ex, prev);
- });
- };
-
- var makeSpan = function(className, children) {
- var span = document.createElement("span");
- span.className = className;
-
- if (_.isArray(children)) {
- _.each(children, function(v) {
- span.appendChild(v);
- });
- } else if (children) {
- span.appendChild(children);
- }
-
- return span;
- };
-
- var buildGroup = function(group, prev) {
- if (group.type === "ord") {
- return makeSpan("mord", mathit(group.value));
- } else if (group.type === "bin") {
- var className = "mbin";
- if (prev == null || prev.type === "bin" || prev.type === "open") {
- group.type = "ord";
- className = "mord";
- }
- return makeSpan(className, textit(group.value));
- } else if (group.type === "sup") {
- var sup = makeSpan("msup", buildExpression(group.value.sup));
- return makeSpan("mord", buildExpression(group.value.base).concat(sup));
- } else if (group.type === "sub") {
- var sub = makeSpan("msub", buildExpression(group.value.sub, sub));
- return makeSpan("mord", buildExpression(group.value.base, elem).concat(sub));
- } else if (group.type === "supsub") {
- var sup = makeSpan("msup", buildExpression(group.value.sup, sup));
- var sub = makeSpan("msub", buildExpression(group.value.sub, sub));
-
- var supsub = makeSpan("msupsub", [sup, sub]);
-
- return makeSpan("mord", buildExpression(group.value.base, elem).concat(supsub));
- } else if (group.type === "open") {
- return makeSpan("mopen", textit(group.value));
- } else if (group.type === "close") {
- return makeSpan("mclose", textit(group.value));
- } else if (group.type === "frac") {
- var numer = makeSpan("mfracnum", buildExpression(group.value.numer, numer));
- var mid = makeSpan("mfracmid", makeSpan());
- var denom = makeSpan("mfracden", buildExpression(group.value.denom, denom));
-
- return makeSpan("mord mfrac", [numer, mid, denom]);
- } else {
- console.log("Unknown type:", group.type);
- }
- };
-
- var charLookup = {
- "*": "\u2217",
- "-": "\u2212",
- "cdot": "\u22C5",
- "lvert": "|",
- "rvert": "|",
- "pm": "\u00b1",
- "div": "\u00f7"
- };
-
- var textit = function(value) {
- if (value in charLookup) {
- value = charLookup[value];
- }
- return document.createTextNode(value);
- };
-
- var mathit = function(value) {
- var text = textit(value);
+ return buildGroup(ex, prev);
+ });
+};
- if (/[a-zA-Z]/.test(value)) {
- return makeSpan("mathit", text);
- } else {
- return text;
- }
- };
-
- var clearNode = function(node) {
- if ("textContent" in node) {
- node.textContent = "";
- } else {
- node.innerText = "";
- }
- };
+var makeSpan = function(className, children) {
+ var span = document.createElement("span");
+ span.className = className;
- var process = function(toParse, baseElem) {
- var tree = parser.parse(toParse);
- clearNode(baseElem);
- _.each(buildExpression(tree), function(elem) {
- baseElem.appendChild(elem);
+ if (_.isArray(children)) {
+ _.each(children, function(v) {
+ span.appendChild(v);
});
- };
-
- return {
- process: process
- };
-
-})();
+ } else if (children) {
+ span.appendChild(children);
+ }
+
+ return span;
+};
+
+var buildGroup = function(group, prev) {
+ if (group.type === "ord") {
+ return makeSpan("mord", mathit(group.value));
+ } else if (group.type === "bin") {
+ var className = "mbin";
+ if (prev == null || prev.type === "bin" || prev.type === "open") {
+ group.type = "ord";
+ className = "mord";
+ }
+ return makeSpan(className, textit(group.value));
+ } else if (group.type === "sup") {
+ var sup = makeSpan("msup", buildExpression(group.value.sup));
+ return makeSpan("mord", buildExpression(group.value.base).concat(sup));
+ } else if (group.type === "sub") {
+ var sub = makeSpan("msub", buildExpression(group.value.sub, sub));
+ return makeSpan("mord", buildExpression(group.value.base, elem).concat(sub));
+ } else if (group.type === "supsub") {
+ var sup = makeSpan("msup", buildExpression(group.value.sup, sup));
+ var sub = makeSpan("msub", buildExpression(group.value.sub, sub));
+
+ var supsub = makeSpan("msupsub", [sup, sub]);
+
+ return makeSpan("mord", buildExpression(group.value.base, elem).concat(supsub));
+ } else if (group.type === "open") {
+ return makeSpan("mopen", textit(group.value));
+ } else if (group.type === "close") {
+ return makeSpan("mclose", textit(group.value));
+ } else if (group.type === "frac") {
+ var numer = makeSpan("mfracnum", buildExpression(group.value.numer, numer));
+ var mid = makeSpan("mfracmid", makeSpan());
+ var denom = makeSpan("mfracden", buildExpression(group.value.denom, denom));
+
+ return makeSpan("mord mfrac", [numer, mid, denom]);
+ } else {
+ console.log("Unknown type:", group.type);
+ }
+};
+
+var charLookup = {
+ "*": "\u2217",
+ "-": "\u2212",
+ "cdot": "\u22C5",
+ "lvert": "|",
+ "rvert": "|",
+ "pm": "\u00b1",
+ "div": "\u00f7"
+};
+
+var textit = function(value) {
+ if (value in charLookup) {
+ value = charLookup[value];
+ }
+ return document.createTextNode(value);
+};
+
+var mathit = function(value) {
+ var text = textit(value);
+
+ if (/[a-zA-Z]/.test(value)) {
+ return makeSpan("mathit", text);
+ } else {
+ return text;
+ }
+};
+
+var clearNode = function(node) {
+ if ("textContent" in node) {
+ node.textContent = "";
+ } else {
+ node.innerText = "";
+ }
+};
+
+var process = function(toParse, baseElem) {
+ var tree = parser.parse(toParse);
+ clearNode(baseElem);
+ _.each(buildExpression(tree), function(elem) {
+ baseElem.appendChild(elem);
+ });
+};
+
+module.exports = {
+ process: process
+};
diff --git a/Makefile b/Makefile
@@ -1,6 +1,6 @@
FILES=parser.js style.css build.js index.html
-.PHONY: build ship copy
+.PHONY: build ship copy watch
build: parser.js
ship: build
@@ -13,3 +13,6 @@ copy: build
parser.js: parser.jison
./node_modules/.bin/jison parser.jison
+
+watch:
+ ./node_modules/.bin/watchify MJLite.js --standalone MJLite -o build/MJLite.js
diff --git a/build/.gitkeep b/build/.gitkeep
diff --git a/index.html b/index.html
@@ -3,8 +3,7 @@
<head>
<title>MJLite Test</title>
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min.js" type="text/javascript"></script>
- <script src="parser.js" type="text/javascript"></script>
- <script src="MJLite.js" type="text/javascript"></script>
+ <script src="build/MJLite.js" type="text/javascript"></script>
<script src="main.js" type="text/javascript"></script>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
diff --git a/package.json b/package.json
@@ -2,6 +2,7 @@
"name": "mjlite",
"version": "0.0.1",
"devDependencies": {
- "jison": "~0.4.6"
+ "jison": "~0.4.6",
+ "watchify": "~0.1.0"
}
}