/ cloudformation-templates / node_modules / aws-cdk / node_modules / xmlbuilder / lib / XMLDocumentCB.js
XMLDocumentCB.js
1 // Generated by CoffeeScript 1.12.7 2 (function() { 3 var XMLAttribute, XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDocumentCB, XMLElement, XMLProcessingInstruction, XMLRaw, XMLStringWriter, XMLStringifier, XMLText, isFunction, isObject, isPlainObject, ref, 4 hasProp = {}.hasOwnProperty; 5 6 ref = require('./Utility'), isObject = ref.isObject, isFunction = ref.isFunction, isPlainObject = ref.isPlainObject; 7 8 XMLElement = require('./XMLElement'); 9 10 XMLCData = require('./XMLCData'); 11 12 XMLComment = require('./XMLComment'); 13 14 XMLRaw = require('./XMLRaw'); 15 16 XMLText = require('./XMLText'); 17 18 XMLProcessingInstruction = require('./XMLProcessingInstruction'); 19 20 XMLDeclaration = require('./XMLDeclaration'); 21 22 XMLDocType = require('./XMLDocType'); 23 24 XMLDTDAttList = require('./XMLDTDAttList'); 25 26 XMLDTDEntity = require('./XMLDTDEntity'); 27 28 XMLDTDElement = require('./XMLDTDElement'); 29 30 XMLDTDNotation = require('./XMLDTDNotation'); 31 32 XMLAttribute = require('./XMLAttribute'); 33 34 XMLStringifier = require('./XMLStringifier'); 35 36 XMLStringWriter = require('./XMLStringWriter'); 37 38 module.exports = XMLDocumentCB = (function() { 39 function XMLDocumentCB(options, onData, onEnd) { 40 var writerOptions; 41 options || (options = {}); 42 if (!options.writer) { 43 options.writer = new XMLStringWriter(options); 44 } else if (isPlainObject(options.writer)) { 45 writerOptions = options.writer; 46 options.writer = new XMLStringWriter(writerOptions); 47 } 48 this.options = options; 49 this.writer = options.writer; 50 this.stringify = new XMLStringifier(options); 51 this.onDataCallback = onData || function() {}; 52 this.onEndCallback = onEnd || function() {}; 53 this.currentNode = null; 54 this.currentLevel = -1; 55 this.openTags = {}; 56 this.documentStarted = false; 57 this.documentCompleted = false; 58 this.root = null; 59 } 60 61 XMLDocumentCB.prototype.node = function(name, attributes, text) { 62 var ref1; 63 if (name == null) { 64 throw new Error("Missing node name"); 65 } 66 if (this.root && this.currentLevel === -1) { 67 throw new Error("Document can only have one root node"); 68 } 69 this.openCurrent(); 70 name = name.valueOf(); 71 if (attributes == null) { 72 attributes = {}; 73 } 74 attributes = attributes.valueOf(); 75 if (!isObject(attributes)) { 76 ref1 = [attributes, text], text = ref1[0], attributes = ref1[1]; 77 } 78 this.currentNode = new XMLElement(this, name, attributes); 79 this.currentNode.children = false; 80 this.currentLevel++; 81 this.openTags[this.currentLevel] = this.currentNode; 82 if (text != null) { 83 this.text(text); 84 } 85 return this; 86 }; 87 88 XMLDocumentCB.prototype.element = function(name, attributes, text) { 89 if (this.currentNode && this.currentNode instanceof XMLDocType) { 90 return this.dtdElement.apply(this, arguments); 91 } else { 92 return this.node(name, attributes, text); 93 } 94 }; 95 96 XMLDocumentCB.prototype.attribute = function(name, value) { 97 var attName, attValue; 98 if (!this.currentNode || this.currentNode.children) { 99 throw new Error("att() can only be used immediately after an ele() call in callback mode"); 100 } 101 if (name != null) { 102 name = name.valueOf(); 103 } 104 if (isObject(name)) { 105 for (attName in name) { 106 if (!hasProp.call(name, attName)) continue; 107 attValue = name[attName]; 108 this.attribute(attName, attValue); 109 } 110 } else { 111 if (isFunction(value)) { 112 value = value.apply(); 113 } 114 if (!this.options.skipNullAttributes || (value != null)) { 115 this.currentNode.attributes[name] = new XMLAttribute(this, name, value); 116 } 117 } 118 return this; 119 }; 120 121 XMLDocumentCB.prototype.text = function(value) { 122 var node; 123 this.openCurrent(); 124 node = new XMLText(this, value); 125 this.onData(this.writer.text(node, this.currentLevel + 1)); 126 return this; 127 }; 128 129 XMLDocumentCB.prototype.cdata = function(value) { 130 var node; 131 this.openCurrent(); 132 node = new XMLCData(this, value); 133 this.onData(this.writer.cdata(node, this.currentLevel + 1)); 134 return this; 135 }; 136 137 XMLDocumentCB.prototype.comment = function(value) { 138 var node; 139 this.openCurrent(); 140 node = new XMLComment(this, value); 141 this.onData(this.writer.comment(node, this.currentLevel + 1)); 142 return this; 143 }; 144 145 XMLDocumentCB.prototype.raw = function(value) { 146 var node; 147 this.openCurrent(); 148 node = new XMLRaw(this, value); 149 this.onData(this.writer.raw(node, this.currentLevel + 1)); 150 return this; 151 }; 152 153 XMLDocumentCB.prototype.instruction = function(target, value) { 154 var i, insTarget, insValue, len, node; 155 this.openCurrent(); 156 if (target != null) { 157 target = target.valueOf(); 158 } 159 if (value != null) { 160 value = value.valueOf(); 161 } 162 if (Array.isArray(target)) { 163 for (i = 0, len = target.length; i < len; i++) { 164 insTarget = target[i]; 165 this.instruction(insTarget); 166 } 167 } else if (isObject(target)) { 168 for (insTarget in target) { 169 if (!hasProp.call(target, insTarget)) continue; 170 insValue = target[insTarget]; 171 this.instruction(insTarget, insValue); 172 } 173 } else { 174 if (isFunction(value)) { 175 value = value.apply(); 176 } 177 node = new XMLProcessingInstruction(this, target, value); 178 this.onData(this.writer.processingInstruction(node, this.currentLevel + 1)); 179 } 180 return this; 181 }; 182 183 XMLDocumentCB.prototype.declaration = function(version, encoding, standalone) { 184 var node; 185 this.openCurrent(); 186 if (this.documentStarted) { 187 throw new Error("declaration() must be the first node"); 188 } 189 node = new XMLDeclaration(this, version, encoding, standalone); 190 this.onData(this.writer.declaration(node, this.currentLevel + 1)); 191 return this; 192 }; 193 194 XMLDocumentCB.prototype.doctype = function(root, pubID, sysID) { 195 this.openCurrent(); 196 if (root == null) { 197 throw new Error("Missing root node name"); 198 } 199 if (this.root) { 200 throw new Error("dtd() must come before the root node"); 201 } 202 this.currentNode = new XMLDocType(this, pubID, sysID); 203 this.currentNode.rootNodeName = root; 204 this.currentNode.children = false; 205 this.currentLevel++; 206 this.openTags[this.currentLevel] = this.currentNode; 207 return this; 208 }; 209 210 XMLDocumentCB.prototype.dtdElement = function(name, value) { 211 var node; 212 this.openCurrent(); 213 node = new XMLDTDElement(this, name, value); 214 this.onData(this.writer.dtdElement(node, this.currentLevel + 1)); 215 return this; 216 }; 217 218 XMLDocumentCB.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) { 219 var node; 220 this.openCurrent(); 221 node = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue); 222 this.onData(this.writer.dtdAttList(node, this.currentLevel + 1)); 223 return this; 224 }; 225 226 XMLDocumentCB.prototype.entity = function(name, value) { 227 var node; 228 this.openCurrent(); 229 node = new XMLDTDEntity(this, false, name, value); 230 this.onData(this.writer.dtdEntity(node, this.currentLevel + 1)); 231 return this; 232 }; 233 234 XMLDocumentCB.prototype.pEntity = function(name, value) { 235 var node; 236 this.openCurrent(); 237 node = new XMLDTDEntity(this, true, name, value); 238 this.onData(this.writer.dtdEntity(node, this.currentLevel + 1)); 239 return this; 240 }; 241 242 XMLDocumentCB.prototype.notation = function(name, value) { 243 var node; 244 this.openCurrent(); 245 node = new XMLDTDNotation(this, name, value); 246 this.onData(this.writer.dtdNotation(node, this.currentLevel + 1)); 247 return this; 248 }; 249 250 XMLDocumentCB.prototype.up = function() { 251 if (this.currentLevel < 0) { 252 throw new Error("The document node has no parent"); 253 } 254 if (this.currentNode) { 255 if (this.currentNode.children) { 256 this.closeNode(this.currentNode); 257 } else { 258 this.openNode(this.currentNode); 259 } 260 this.currentNode = null; 261 } else { 262 this.closeNode(this.openTags[this.currentLevel]); 263 } 264 delete this.openTags[this.currentLevel]; 265 this.currentLevel--; 266 return this; 267 }; 268 269 XMLDocumentCB.prototype.end = function() { 270 while (this.currentLevel >= 0) { 271 this.up(); 272 } 273 return this.onEnd(); 274 }; 275 276 XMLDocumentCB.prototype.openCurrent = function() { 277 if (this.currentNode) { 278 this.currentNode.children = true; 279 return this.openNode(this.currentNode); 280 } 281 }; 282 283 XMLDocumentCB.prototype.openNode = function(node) { 284 if (!node.isOpen) { 285 if (!this.root && this.currentLevel === 0 && node instanceof XMLElement) { 286 this.root = node; 287 } 288 this.onData(this.writer.openNode(node, this.currentLevel)); 289 return node.isOpen = true; 290 } 291 }; 292 293 XMLDocumentCB.prototype.closeNode = function(node) { 294 if (!node.isClosed) { 295 this.onData(this.writer.closeNode(node, this.currentLevel)); 296 return node.isClosed = true; 297 } 298 }; 299 300 XMLDocumentCB.prototype.onData = function(chunk) { 301 this.documentStarted = true; 302 return this.onDataCallback(chunk); 303 }; 304 305 XMLDocumentCB.prototype.onEnd = function() { 306 this.documentCompleted = true; 307 return this.onEndCallback(); 308 }; 309 310 XMLDocumentCB.prototype.ele = function() { 311 return this.element.apply(this, arguments); 312 }; 313 314 XMLDocumentCB.prototype.nod = function(name, attributes, text) { 315 return this.node(name, attributes, text); 316 }; 317 318 XMLDocumentCB.prototype.txt = function(value) { 319 return this.text(value); 320 }; 321 322 XMLDocumentCB.prototype.dat = function(value) { 323 return this.cdata(value); 324 }; 325 326 XMLDocumentCB.prototype.com = function(value) { 327 return this.comment(value); 328 }; 329 330 XMLDocumentCB.prototype.ins = function(target, value) { 331 return this.instruction(target, value); 332 }; 333 334 XMLDocumentCB.prototype.dec = function(version, encoding, standalone) { 335 return this.declaration(version, encoding, standalone); 336 }; 337 338 XMLDocumentCB.prototype.dtd = function(root, pubID, sysID) { 339 return this.doctype(root, pubID, sysID); 340 }; 341 342 XMLDocumentCB.prototype.e = function(name, attributes, text) { 343 return this.element(name, attributes, text); 344 }; 345 346 XMLDocumentCB.prototype.n = function(name, attributes, text) { 347 return this.node(name, attributes, text); 348 }; 349 350 XMLDocumentCB.prototype.t = function(value) { 351 return this.text(value); 352 }; 353 354 XMLDocumentCB.prototype.d = function(value) { 355 return this.cdata(value); 356 }; 357 358 XMLDocumentCB.prototype.c = function(value) { 359 return this.comment(value); 360 }; 361 362 XMLDocumentCB.prototype.r = function(value) { 363 return this.raw(value); 364 }; 365 366 XMLDocumentCB.prototype.i = function(target, value) { 367 return this.instruction(target, value); 368 }; 369 370 XMLDocumentCB.prototype.att = function() { 371 if (this.currentNode && this.currentNode instanceof XMLDocType) { 372 return this.attList.apply(this, arguments); 373 } else { 374 return this.attribute.apply(this, arguments); 375 } 376 }; 377 378 XMLDocumentCB.prototype.a = function() { 379 if (this.currentNode && this.currentNode instanceof XMLDocType) { 380 return this.attList.apply(this, arguments); 381 } else { 382 return this.attribute.apply(this, arguments); 383 } 384 }; 385 386 XMLDocumentCB.prototype.ent = function(name, value) { 387 return this.entity(name, value); 388 }; 389 390 XMLDocumentCB.prototype.pent = function(name, value) { 391 return this.pEntity(name, value); 392 }; 393 394 XMLDocumentCB.prototype.not = function(name, value) { 395 return this.notation(name, value); 396 }; 397 398 return XMLDocumentCB; 399 400 })(); 401 402 }).call(this);