mirror of https://git.openwrt.org/project/luci.git
luci-base: luci.js: add L.dom.data()
Add a new data() function which allows to attach arbitrary JS data to DOM elements. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
parent
4a9f784a2a
commit
e4c29c6db4
|
@ -761,6 +761,11 @@
|
||||||
if (!this.elem(node))
|
if (!this.elem(node))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
var dataNodes = node.querySelectorAll('[data-idref]');
|
||||||
|
|
||||||
|
for (var i = 0; i < dataNodes.length; i++)
|
||||||
|
delete this.registry[dataNodes[i].getAttribute('data-idref')];
|
||||||
|
|
||||||
while (node.firstChild)
|
while (node.firstChild)
|
||||||
node.removeChild(node.firstChild);
|
node.removeChild(node.firstChild);
|
||||||
|
|
||||||
|
@ -828,6 +833,92 @@
|
||||||
this.append(elem, data);
|
this.append(elem, data);
|
||||||
|
|
||||||
return elem;
|
return elem;
|
||||||
|
},
|
||||||
|
|
||||||
|
registry: {},
|
||||||
|
|
||||||
|
data: function(node, key, val) {
|
||||||
|
var id = node.getAttribute('data-idref');
|
||||||
|
|
||||||
|
/* clear all data */
|
||||||
|
if (arguments.length > 1 && key == null) {
|
||||||
|
if (id != null) {
|
||||||
|
node.removeAttribute('data-idref');
|
||||||
|
val = this.registry[id]
|
||||||
|
delete this.registry[id];
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* clear a key */
|
||||||
|
else if (arguments.length > 2 && key != null && val == null) {
|
||||||
|
if (id != null) {
|
||||||
|
val = this.registry[id][key];
|
||||||
|
delete this.registry[id][key];
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set a key */
|
||||||
|
else if (arguments.length > 2 && key != null && val != null) {
|
||||||
|
if (id == null) {
|
||||||
|
do { id = Math.floor(Math.random() * 0xffffffff).toString(16) }
|
||||||
|
while (this.registry.hasOwnProperty(id));
|
||||||
|
|
||||||
|
node.setAttribute('data-idref', id);
|
||||||
|
this.registry[id] = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
return (this.registry[id][key] = val);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* get all data */
|
||||||
|
else if (arguments.length == 1) {
|
||||||
|
if (id != null)
|
||||||
|
return this.registry[id];
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* get a key */
|
||||||
|
else if (arguments.length == 2) {
|
||||||
|
if (id != null)
|
||||||
|
return this.registry[id][key];
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
|
||||||
|
bindClassInstance: function(node, inst) {
|
||||||
|
if (!(inst instanceof Class))
|
||||||
|
L.error('TypeError', 'Argument must be a class instance');
|
||||||
|
|
||||||
|
return this.data(node, '_class', inst);
|
||||||
|
},
|
||||||
|
|
||||||
|
findClassInstance: function(node) {
|
||||||
|
var inst = null;
|
||||||
|
|
||||||
|
do {
|
||||||
|
inst = this.data(node, '_class');
|
||||||
|
node = node.parentNode;
|
||||||
|
}
|
||||||
|
while (!(inst instanceof Class) && node != null);
|
||||||
|
|
||||||
|
return inst;
|
||||||
|
},
|
||||||
|
|
||||||
|
callClassMethod: function(node, method /*, ... */) {
|
||||||
|
var inst = this.findClassInstance(node);
|
||||||
|
|
||||||
|
if (inst == null || typeof(inst[method]) != 'function')
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return inst[method].apply(inst, inst.varargs(arguments, 2));
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue