From 723a7d54bd4823b2a9876fdea7b8b08cde74f669 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 6 Jan 2014 22:32:27 +0000 Subject: Use same module for node.js and browsers --- browser-demo/demo.js | 45 +++++++++++++++++------- browser/unzip.js | 32 +++++++++++++++++ lib/browser.js | 98 ---------------------------------------------------- makefile | 2 +- package.json | 3 ++ 5 files changed, 69 insertions(+), 111 deletions(-) create mode 100644 browser/unzip.js delete mode 100644 lib/browser.js 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 '
  • ' + escapeHtml(message.message) + "
  • "; - }).join(""); - - document.getElementById("messages").innerHTML = ""; - } - ); + 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 '
  • ' + escapeHtml(message.message) + "
  • "; + }).join(""); + + document.getElementById("messages").innerHTML = ""; + } + + 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(); -} diff --git a/makefile b/makefile index fb9ee7b..864914c 100644 --- a/makefile +++ b/makefile @@ -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" }, -- cgit v1.2.3