www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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:
M.gitignore | 3++-
MMJLite.js | 210+++++++++++++++++++++++++++++++++++++++----------------------------------------
MMakefile | 5++++-
Abuild/.gitkeep | 0
Mindex.html | 3+--
Mpackage.json | 3++-
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" } }