diff options
| author | Michael Williamson <mike@zwobble.org> | 2014-01-06 22:32:27 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2014-01-06 22:32:27 +0000 |
| commit | 723a7d54bd4823b2a9876fdea7b8b08cde74f669 (patch) | |
| tree | 048096d0bfbdaa9ff889143aff5f8f150e0267cc | |
| parent | 278082b9fe502ce1ca083db66beb2c25c4a6ca5f (diff) | |
Use same module for node.js and browsers
| -rw-r--r-- | browser-demo/demo.js | 45 | ||||
| -rw-r--r-- | browser/unzip.js | 32 | ||||
| -rw-r--r-- | lib/browser.js | 98 | ||||
| -rw-r--r-- | makefile | 2 | ||||
| -rw-r--r-- | package.json | 3 |
5 files changed, 69 insertions, 111 deletions
diff --git a/browser-demo/demo.js b/browser-demo/demo.js index 20dcda0..3126192 100644 --- a/browser-demo/demo.js +++ b/browser-demo/demo.js @@ -1,16 +1,37 @@ (function() { - mammoth.fileInput( - document.getElementById("document"), - function(result) { - document.getElementById("output").innerHTML = result.value; - - var messageHtml = result.messages.map(function(message) { - return '<li class="' + message.type + '">' + escapeHtml(message.message) + "</li>"; - }).join(""); - - document.getElementById("messages").innerHTML = "<ul>" + messageHtml + "</ul>"; - } - ); + document.getElementById("document") + .addEventListener("change", handleFileSelect, false); + + function handleFileSelect(event) { + readFileInputEventAsArrayBuffer(event, function(arrayBuffer) { + mammoth.convertToHtml({arrayBuffer: arrayBuffer}) + .then(displayResult) + .done(); + }); + } + + function displayResult(result) { + document.getElementById("output").innerHTML = result.value; + + var messageHtml = result.messages.map(function(message) { + return '<li class="' + message.type + '">' + escapeHtml(message.message) + "</li>"; + }).join(""); + + document.getElementById("messages").innerHTML = "<ul>" + messageHtml + "</ul>"; + } + + function readFileInputEventAsArrayBuffer(event, callback) { + var file = event.target.files[0]; + + var reader = new FileReader(); + + reader.onload = function(loadEvent) { + var arrayBuffer = loadEvent.target.result; + callback(arrayBuffer); + }; + + reader.readAsArrayBuffer(file); + } function escapeHtml(value) { return value diff --git a/browser/unzip.js b/browser/unzip.js new file mode 100644 index 0000000..97fcdb1 --- /dev/null +++ b/browser/unzip.js @@ -0,0 +1,32 @@ +var q = require("q"); + +exports.openZip = openZip; + +function openZip(options) { + if (options.arrayBuffer) { + return openArrayBuffer(options.arrayBuffer); + } else { + return q.reject(new Error("Could not find file in options")); + } +} + +function openArrayBuffer(arrayBuffer) { + var zipFile = new JSZip(arrayBuffer); + function exists(name) { + return zipFile.file(name) !== null; + } + + function read(name, encoding) { + var array = zipFile.file(name).asUint8Array(); + var buffer = new Buffer(array); + if (encoding) { + return q.when(buffer.toString(encoding)); + } else { + return q.when(buffer); + } + } + return { + exists: exists, + read: read + }; +} diff --git a/lib/browser.js b/lib/browser.js deleted file mode 100644 index a9b9dbd..0000000 --- a/lib/browser.js +++ /dev/null @@ -1,98 +0,0 @@ -var q = require("q"); -var mammoth = require("./"); - - -exports.fileInput = fileInput; -exports.readFileInputOnChange = readFileInputOnChange; -exports.standardOptions = mammoth.standardOptions; -exports.htmlPaths = mammoth.htmlPaths; -exports.style = mammoth.style; - -exports.convertDocumentToHtml = callbackify(mammoth.convertDocumentToHtml); -exports.convertArrayBufferToHtml = convertArrayBufferToHtml; - -function callbackify(func) { - return function() { - var args = Array.prototype.slice.call(arguments, 0, arguments.length - 1); - var callback = arguments[arguments.length - 1]; - satisfyCallback(func.apply(this, args), callback); - }; -} - -function convertArrayBufferToHtml(arrayBuffer, options, callback) { - try { - var file = openFile(arrayBuffer); - var result = mammoth.read({file: file}).then(function(documentResult) { - options = options || mammoth.standardOptions; - return mammoth.convertDocumentToHtml(documentResult, options); - }); - satisfyCallback(result, callback); - } catch (error) { - callback({error: error}); - } -} - -function readFileInputOnChange(inputElement, callback) { - function handleFileSelect(event) { - var file = event.target.files[0]; - - var reader = new FileReader(); - - reader.onload = function(loadEvent) { - var arrayBuffer = loadEvent.target.result; - try { - var file = openFile(arrayBuffer); - satisfyCallback(mammoth.read({file: file}), callback); - } catch (error) { - callback({error: error}); - } - }; - - reader.readAsArrayBuffer(file); - } - inputElement.addEventListener('change', handleFileSelect, false); -} - -function fileInput(inputElement, callback) { - readFileInputOnChange(inputElement, function(documentResult) { - if (documentResult.error) { - callback(documentResult); - } else { - var options = mammoth.standardOptions; - satisfyCallback( - mammoth.convertDocumentToHtml(documentResult, options), - callback - ); - } - - }); -} - - -function openFile(arrayBuffer) { - var zipFile = new JSZip(arrayBuffer); - function exists(name) { - return zipFile.file(name) !== null; - } - - function read(name, encoding) { - var array = zipFile.file(name).asUint8Array(); - var buffer = new Buffer(array); - if (encoding) { - return q.when(buffer.toString(encoding)); - } else { - return q.when(buffer); - } - } - return { - exists: exists, - read: read - }; -} - - -function satisfyCallback(promise, callback) { - promise.then(callback, function(error) { - callback({error: error}); - }).done(); -} @@ -24,7 +24,7 @@ browser-demo/bundle.js: cat static/jszip/jszip-inflate.js >> $@ cat static/jszip/jszip-load.js >> $@ node_modules/.bin/node-license-sniffer . --recurse --js-comment >> $@ - node_modules/.bin/browserify lib/browser.js --standalone mammoth >> $@ + node_modules/.bin/browserify lib/index.js --standalone mammoth >> $@ browser-demo/bundle.min.js: browser-demo/bundle.js node_modules/.bin/uglifyjs browser-demo/bundle.js -c > $@ diff --git a/package.json b/package.json index 544f3e3..394c43f 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,9 @@ "duck": "~0.1.11", "uglify-js": "~2.4.8" }, + "browser": { + "./lib/unzip.js": "./browser/unzip.js" + }, "scripts": { "test": "mocha tests" }, |
