UNPKG

epub3

Version:

Create Epub3 Files. Also includes a Scarfolding tool

123 lines (116 loc) 3.86 kB
/** * Created by epublica on 16/08/2014. */ var mkdirp = require("mkdirp"), admzip = require("adm-zip"), sax = require("sax"), fs = require("fs"), path = require("path"), uuid = require("node-uuid"), structureObject = { "META-INF": ['container.xml'], "OEPBS": ['coverImg.png', 'coverPage.html'], "css":[], "js":[], "content.opf": "content.opf", "encryption.xml": "encryption.xml", "manifest.xml": "manifest.xml", "metadata.xml": "metadata.xml", "rights.xml": "rights.xml", "signatures.xml": "signatures.xml", "mimetype": "mimetype", "assets": { "images": [], "fonts": [] } } var createContentFile = function(inputDir, name){ var stream = fs.createWriteStream(inputDir + "/" + name); stream.once('open', function (fd) { stream.write("<?xml version='1.0' encoding='utf-8'?>\n"); stream.write("" + "<package xmlns='http://www.idpf.org/2007/opf' " + "xmlns:dc='http://purl.org/dc/elements/1.1/' " + "unique-identifier='bookid' " + "version='2.0'></package>\n"); stream.end(); }); } var createMimetypeFile = function(inputDir, name){ var stream = fs.createWriteStream(inputDir + "/" + name); stream.once('open', function (fd) { stream.write("application/epub+zip"); stream.end(); }); } var createOrdinaryFile = function(inputDir, name){ var stream = fs.createWriteStream(inputDir + "/" + name); stream.once('open', function (fd) { stream.write(""); stream.end(); }); } var createFile = function(inputDir, name){ console.log("created file: "+ name); //since we are creating various file type with different basic content lets have this in a switch switch(name){ case "mimetype": createMimetypeFile(inputDir,name); break; case "content.opf": createContentFile(inputDir,name); break; default: createOrdinaryFile(inputDir,name); break; } }; var createFolder = function(inputDir, name){ mkdirp(inputDir + "/" + name, function (err) { if(err) throw err console.log("created folder: "+name); }) } //using the above JSON configuration, create a folder structure for an epub package var createStructure = function (parent, structObj) { for (var prop in structObj){ if(structObj[prop] instanceof Array || structObj[prop] instanceof Object){ //console.log(prop+" is array, creating folder...") createFolder(parent ,prop) createStructure(parent+"/"+prop , structObj[prop]); } else if(typeof structObj[prop] === 'string'){ //console.log(structObj[prop]+" is string, creating file") createFile(parent ,structObj[prop]); } else{ //console.log("dont know what to do with "+structObj[prop]); } } } var scarfold = function(inputDir,pubId) { //workspace + user's email + publication ID var inputDir = inputDir + "/" + pubId; console.log("scarfolded called"); console.log(inputDir); //create parent directory mkdirp(inputDir, function (err) { if(err) throw err fs.exists(inputDir,function(exists){ if(exists){ createStructure(inputDir, structureObject) } process.exit(); }); process.send('scarfolding:done'); }) } process.on('message', function (message) { switch(message.msgType) { case 'scarfold': scarfold (message.inputDir, uuid.v1()); //time based uuid generation. Used as publication ID break; default: console.log('this is default'); } });