This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
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.
212 lines
6.5 KiB
212 lines
6.5 KiB
// Generated by CoffeeScript 1.9.1 |
|
(function() { |
|
var XMLAttribute, XMLElement, XMLNode, XMLProcessingInstruction, create, every, isFunction, isObject, |
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, |
|
hasProp = {}.hasOwnProperty; |
|
|
|
create = require('lodash/object/create'); |
|
|
|
isObject = require('lodash/lang/isObject'); |
|
|
|
isFunction = require('lodash/lang/isFunction'); |
|
|
|
every = require('lodash/collection/every'); |
|
|
|
XMLNode = require('./XMLNode'); |
|
|
|
XMLAttribute = require('./XMLAttribute'); |
|
|
|
XMLProcessingInstruction = require('./XMLProcessingInstruction'); |
|
|
|
module.exports = XMLElement = (function(superClass) { |
|
extend(XMLElement, superClass); |
|
|
|
function XMLElement(parent, name, attributes) { |
|
XMLElement.__super__.constructor.call(this, parent); |
|
if (name == null) { |
|
throw new Error("Missing element name"); |
|
} |
|
this.name = this.stringify.eleName(name); |
|
this.children = []; |
|
this.instructions = []; |
|
this.attributes = {}; |
|
if (attributes != null) { |
|
this.attribute(attributes); |
|
} |
|
} |
|
|
|
XMLElement.prototype.clone = function() { |
|
var att, attName, clonedSelf, i, len, pi, ref, ref1; |
|
clonedSelf = create(XMLElement.prototype, this); |
|
if (clonedSelf.isRoot) { |
|
clonedSelf.documentObject = null; |
|
} |
|
clonedSelf.attributes = {}; |
|
ref = this.attributes; |
|
for (attName in ref) { |
|
if (!hasProp.call(ref, attName)) continue; |
|
att = ref[attName]; |
|
clonedSelf.attributes[attName] = att.clone(); |
|
} |
|
clonedSelf.instructions = []; |
|
ref1 = this.instructions; |
|
for (i = 0, len = ref1.length; i < len; i++) { |
|
pi = ref1[i]; |
|
clonedSelf.instructions.push(pi.clone()); |
|
} |
|
clonedSelf.children = []; |
|
this.children.forEach(function(child) { |
|
var clonedChild; |
|
clonedChild = child.clone(); |
|
clonedChild.parent = clonedSelf; |
|
return clonedSelf.children.push(clonedChild); |
|
}); |
|
return clonedSelf; |
|
}; |
|
|
|
XMLElement.prototype.attribute = function(name, value) { |
|
var attName, attValue; |
|
if (name != null) { |
|
name = name.valueOf(); |
|
} |
|
if (isObject(name)) { |
|
for (attName in name) { |
|
if (!hasProp.call(name, attName)) continue; |
|
attValue = name[attName]; |
|
this.attribute(attName, attValue); |
|
} |
|
} else { |
|
if (isFunction(value)) { |
|
value = value.apply(); |
|
} |
|
if (!this.options.skipNullAttributes || (value != null)) { |
|
this.attributes[name] = new XMLAttribute(this, name, value); |
|
} |
|
} |
|
return this; |
|
}; |
|
|
|
XMLElement.prototype.removeAttribute = function(name) { |
|
var attName, i, len; |
|
if (name == null) { |
|
throw new Error("Missing attribute name"); |
|
} |
|
name = name.valueOf(); |
|
if (Array.isArray(name)) { |
|
for (i = 0, len = name.length; i < len; i++) { |
|
attName = name[i]; |
|
delete this.attributes[attName]; |
|
} |
|
} else { |
|
delete this.attributes[name]; |
|
} |
|
return this; |
|
}; |
|
|
|
XMLElement.prototype.instruction = function(target, value) { |
|
var i, insTarget, insValue, instruction, len; |
|
if (target != null) { |
|
target = target.valueOf(); |
|
} |
|
if (value != null) { |
|
value = value.valueOf(); |
|
} |
|
if (Array.isArray(target)) { |
|
for (i = 0, len = target.length; i < len; i++) { |
|
insTarget = target[i]; |
|
this.instruction(insTarget); |
|
} |
|
} else if (isObject(target)) { |
|
for (insTarget in target) { |
|
if (!hasProp.call(target, insTarget)) continue; |
|
insValue = target[insTarget]; |
|
this.instruction(insTarget, insValue); |
|
} |
|
} else { |
|
if (isFunction(value)) { |
|
value = value.apply(); |
|
} |
|
instruction = new XMLProcessingInstruction(this, target, value); |
|
this.instructions.push(instruction); |
|
} |
|
return this; |
|
}; |
|
|
|
XMLElement.prototype.toString = function(options, level) { |
|
var att, child, i, indent, instruction, j, len, len1, name, newline, offset, pretty, r, ref, ref1, ref2, ref3, ref4, ref5, space; |
|
pretty = (options != null ? options.pretty : void 0) || false; |
|
indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; |
|
offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; |
|
newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; |
|
level || (level = 0); |
|
space = new Array(level + offset + 1).join(indent); |
|
r = ''; |
|
ref3 = this.instructions; |
|
for (i = 0, len = ref3.length; i < len; i++) { |
|
instruction = ref3[i]; |
|
r += instruction.toString(options, level); |
|
} |
|
if (pretty) { |
|
r += space; |
|
} |
|
r += '<' + this.name; |
|
ref4 = this.attributes; |
|
for (name in ref4) { |
|
if (!hasProp.call(ref4, name)) continue; |
|
att = ref4[name]; |
|
r += att.toString(options); |
|
} |
|
if (this.children.length === 0 || every(this.children, function(e) { |
|
return e.value === ''; |
|
})) { |
|
r += '/>'; |
|
if (pretty) { |
|
r += newline; |
|
} |
|
} else if (pretty && this.children.length === 1 && (this.children[0].value != null)) { |
|
r += '>'; |
|
r += this.children[0].value; |
|
r += '</' + this.name + '>'; |
|
r += newline; |
|
} else { |
|
r += '>'; |
|
if (pretty) { |
|
r += newline; |
|
} |
|
ref5 = this.children; |
|
for (j = 0, len1 = ref5.length; j < len1; j++) { |
|
child = ref5[j]; |
|
r += child.toString(options, level + 1); |
|
} |
|
if (pretty) { |
|
r += space; |
|
} |
|
r += '</' + this.name + '>'; |
|
if (pretty) { |
|
r += newline; |
|
} |
|
} |
|
return r; |
|
}; |
|
|
|
XMLElement.prototype.att = function(name, value) { |
|
return this.attribute(name, value); |
|
}; |
|
|
|
XMLElement.prototype.ins = function(target, value) { |
|
return this.instruction(target, value); |
|
}; |
|
|
|
XMLElement.prototype.a = function(name, value) { |
|
return this.attribute(name, value); |
|
}; |
|
|
|
XMLElement.prototype.i = function(target, value) { |
|
return this.instruction(target, value); |
|
}; |
|
|
|
return XMLElement; |
|
|
|
})(XMLNode); |
|
|
|
}).call(this);
|
|
|