129 lines
3.6 KiB
JavaScript
129 lines
3.6 KiB
JavaScript
var Repeated, _base, _base2;
|
|
|
|
window.console || (window.console = {});
|
|
|
|
(_base = window.console).log || (_base.log = function() {});
|
|
|
|
(_base2 = window.console).error || (_base2.error = function() {});
|
|
|
|
window.Dytem = {
|
|
init: function() {
|
|
return Dytem.addChildrenField($("body"), null, Dytem);
|
|
},
|
|
assign: function(obj, elem) {
|
|
var childElem, childObj, name, _i, _len, _results, _results2;
|
|
elem || (elem = Dytem);
|
|
if (typeof obj === "string") {
|
|
return elem.text(obj);
|
|
} else if (obj instanceof Array) {
|
|
elem.clear();
|
|
_results = [];
|
|
for (_i = 0, _len = obj.length; _i < _len; _i++) {
|
|
childObj = obj[_i];
|
|
childElem = elem.append();
|
|
_results.push(Dytem.assign(childObj, childElem));
|
|
}
|
|
return _results;
|
|
} else {
|
|
_results2 = [];
|
|
for (name in obj) {
|
|
childObj = obj[name];
|
|
if (name === "text") {
|
|
_results2.push(elem.text(childObj));
|
|
} else if (name === "html") {
|
|
_results2.push(elem.html(childObj));
|
|
} else if (elem[name]) {
|
|
_results2.push(Dytem.assign(childObj, elem[name]));
|
|
} else if (elem.attr) {
|
|
_results2.push(elem.attr(name, childObj));
|
|
} else {
|
|
throw "unknown field: " + name;
|
|
}
|
|
}
|
|
return _results2;
|
|
}
|
|
},
|
|
addChildrenField: function(elem, prefix, target) {
|
|
var _this = this;
|
|
return elem.find("[id]").each(function(i, child) {
|
|
var childId, escPrefix, name;
|
|
childId = $(child).attr("id");
|
|
if (prefix) $(child).removeAttr("id");
|
|
escPrefix = prefix ? prefix.replace(/\./, "\\.") : "";
|
|
if (childId.match(new RegExp("^" + escPrefix + "([^\\.]+)$"))) {
|
|
name = RegExp.$1;
|
|
if ($(child).hasClass("repeated")) {
|
|
return target[name] = new Repeated(childId, $(child));
|
|
} else {
|
|
return target[name] = $(child);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
Repeated = (function() {
|
|
|
|
function Repeated(__id, __placeholder) {
|
|
this.__id = __id;
|
|
this.__placeholder = __placeholder;
|
|
this.__template = $(document.getElementById(this.__id));
|
|
this.__elems = [];
|
|
}
|
|
|
|
Repeated.prototype.append = function() {
|
|
var lastElem, newElem;
|
|
if (this.__elems.length > 0) {
|
|
lastElem = this.__elems[this.__elems.length - 1];
|
|
} else {
|
|
lastElem = this.__placeholder;
|
|
}
|
|
newElem = this.__template.clone();
|
|
newElem.removeAttr("id");
|
|
Dytem.addChildrenField(newElem, "" + this.__id + ".", newElem);
|
|
newElem.show();
|
|
lastElem.after(newElem);
|
|
this.__elems.push(newElem);
|
|
return newElem;
|
|
};
|
|
|
|
Repeated.prototype.at = function(idx) {
|
|
return this.__elems[idx];
|
|
};
|
|
|
|
Repeated.prototype.size = function() {
|
|
return this.__elems.length;
|
|
};
|
|
|
|
Repeated.prototype.resize = function(n) {
|
|
var elem, i, _i, _len, _ref, _ref2, _ref3, _results;
|
|
if (n < this.__elems.length) {
|
|
_ref = this.__elems.slice(n);
|
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
|
elem = _ref[_i];
|
|
elem.remove();
|
|
}
|
|
return ([].splice.apply(this.__elems, [n, 9e9].concat(_ref2 = [])), _ref2);
|
|
} else if (n > this.__elems.length) {
|
|
_results = [];
|
|
for (i = _ref3 = this.__elems.length; _ref3 <= n ? i < n : i > n; _ref3 <= n ? i++ : i--) {
|
|
_results.push(this.append());
|
|
}
|
|
return _results;
|
|
}
|
|
};
|
|
|
|
Repeated.prototype.clear = function() {
|
|
var elem, _i, _len, _ref;
|
|
_ref = this.__elems;
|
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
|
elem = _ref[_i];
|
|
elem.remove();
|
|
}
|
|
return this.__elems = [];
|
|
};
|
|
|
|
return Repeated;
|
|
|
|
})();
|