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
			| 
											3 years ago
										 | // 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); |