exceljs
Version:
Excel Workbook Manager - Read and Write xlsx and csv Files.
99 lines (88 loc) • 2.74 kB
JavaScript
/**
* Copyright (c) 2015 Guyon Roche
* LICENCE: MIT - please refer to LICENCE file included with this module
* or https://github.com/guyonroche/exceljs/blob/master/LICENSE
*/
;
var Sax = require('sax');
var PromishLib = require('../../utils/promish');
var XmlStream = require('../../utils/xml-stream');
// Base class for Xforms
var BaseXform = module.exports = function () /* model, name */{};
BaseXform.prototype = {
// ============================================================
// Virtual Interface
prepare: function prepare() /* model, options */{
// optional preparation (mutation) of model so it is ready for write
},
render: function render() /* xmlStream, model */{
// convert model to xml
},
parseOpen: function parseOpen() /* node */{
// Sax Open Node event
},
parseText: function parseText() /* node */{
// Sax Text event
},
parseClose: function parseClose() /* name */{
// Sax Close Node event
},
reconcile: function reconcile() /* model, options */{
// optional post-parse step (opposite to prepare)
},
// ============================================================
reset: function reset() {
// to make sure parses don't bleed to next iteration
this.model = null;
// if we have a map - reset them too
if (this.map) {
var keys = Object.keys(this.map);
for (var i = 0; i < keys.length; i++) {
this.map[keys[i]].reset();
}
}
},
mergeModel: function mergeModel(obj) {
// set obj's props to this.model
this.model = Object.assign(this.model || {}, obj);
},
parse: function parse(parser) {
var self = this;
return new PromishLib.Promish(function (resolve, reject) {
parser.on('opentag', function (node) {
self.parseOpen(node);
});
parser.on('text', function (text) {
self.parseText(text);
});
parser.on('closetag', function (name) {
if (!self.parseClose(name)) {
resolve(self.model);
}
});
parser.on('end', function () {
resolve(self.model);
});
parser.on('error', function (error) {
reject(error);
});
});
},
parseStream: function parseStream(stream) {
var parser = Sax.createStream(true, {});
var promise = this.parse(parser);
stream.pipe(parser);
return promise;
},
get xml() {
// convenience function to get the xml of this.model
// useful for manager types that are built during the prepare phase
return this.toXml(this.model);
},
toXml: function toXml(model) {
var xmlStream = new XmlStream();
this.render(xmlStream, model);
return xmlStream.xml;
}
};
//# sourceMappingURL=base-xform.js.map