| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 | // Generated by CoffeeScript 1.12.7(function() {  "use strict";  var builder, defaults, escapeCDATA, requiresCDATA, wrapCDATA,    hasProp = {}.hasOwnProperty;  builder = require('xmlbuilder');  defaults = require('./defaults').defaults;  requiresCDATA = function(entry) {    return typeof entry === "string" && (entry.indexOf('&') >= 0 || entry.indexOf('>') >= 0 || entry.indexOf('<') >= 0);  };  wrapCDATA = function(entry) {    return "<![CDATA[" + (escapeCDATA(entry)) + "]]>";  };  escapeCDATA = function(entry) {    return entry.replace(']]>', ']]]]><![CDATA[>');  };  exports.Builder = (function() {    function Builder(opts) {      var key, ref, value;      this.options = {};      ref = defaults["0.2"];      for (key in ref) {        if (!hasProp.call(ref, key)) continue;        value = ref[key];        this.options[key] = value;      }      for (key in opts) {        if (!hasProp.call(opts, key)) continue;        value = opts[key];        this.options[key] = value;      }    }    Builder.prototype.buildObject = function(rootObj) {      var attrkey, charkey, render, rootElement, rootName;      attrkey = this.options.attrkey;      charkey = this.options.charkey;      if ((Object.keys(rootObj).length === 1) && (this.options.rootName === defaults['0.2'].rootName)) {        rootName = Object.keys(rootObj)[0];        rootObj = rootObj[rootName];      } else {        rootName = this.options.rootName;      }      render = (function(_this) {        return function(element, obj) {          var attr, child, entry, index, key, value;          if (typeof obj !== 'object') {            if (_this.options.cdata && requiresCDATA(obj)) {              element.raw(wrapCDATA(obj));            } else {              element.txt(obj);            }          } else if (Array.isArray(obj)) {            for (index in obj) {              if (!hasProp.call(obj, index)) continue;              child = obj[index];              for (key in child) {                entry = child[key];                element = render(element.ele(key), entry).up();              }            }          } else {            for (key in obj) {              if (!hasProp.call(obj, key)) continue;              child = obj[key];              if (key === attrkey) {                if (typeof child === "object") {                  for (attr in child) {                    value = child[attr];                    element = element.att(attr, value);                  }                }              } else if (key === charkey) {                if (_this.options.cdata && requiresCDATA(child)) {                  element = element.raw(wrapCDATA(child));                } else {                  element = element.txt(child);                }              } else if (Array.isArray(child)) {                for (index in child) {                  if (!hasProp.call(child, index)) continue;                  entry = child[index];                  if (typeof entry === 'string') {                    if (_this.options.cdata && requiresCDATA(entry)) {                      element = element.ele(key).raw(wrapCDATA(entry)).up();                    } else {                      element = element.ele(key, entry).up();                    }                  } else {                    element = render(element.ele(key), entry).up();                  }                }              } else if (typeof child === "object") {                element = render(element.ele(key), child).up();              } else {                if (typeof child === 'string' && _this.options.cdata && requiresCDATA(child)) {                  element = element.ele(key).raw(wrapCDATA(child)).up();                } else {                  if (child == null) {                    child = '';                  }                  element = element.ele(key, child.toString()).up();                }              }            }          }          return element;        };      })(this);      rootElement = builder.create(rootName, this.options.xmldec, this.options.doctype, {        headless: this.options.headless,        allowSurrogateChars: this.options.allowSurrogateChars      });      return render(rootElement, rootObj).end(this.options.renderOpts);    };    return Builder;  })();}).call(this);
 |