You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							128 lines
						
					
					
						
							4.3 KiB
						
					
					
				
			
		
		
	
	
							128 lines
						
					
					
						
							4.3 KiB
						
					
					
				// 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);
 |