Packages
drab
0.7.0
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.3
0.8.2
0.8.1
0.8.0
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.6.0-pre.1
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.1
0.1.0
Remote controlled frontend framework for Phoenix.
Current section
Files
Jump to
Current section
Files
priv/templates/drab/drab.element.js
function get_element_attributes(element) {
var ret = {};
for (var i = 0; i < element.attributes.length; i++) {
var att = element.attributes[i];
ret[att.name] = att.value;
}
return ret;
}
function to_array(dom_list) {
var ret = [];
for (var i = 0; i < dom_list.length; i++) {
ret.push(dom_list[i]);
}
return ret;
}
function to_map(element) {
var ret = {};
for (var key in element) {
if (element[key]) {
ret[key] = element[key];
}
}
return ret;
}
function default_properties(element) {
return {
drab_id: element.getAttribute("drab-id"),
id: element.id,
attributes: get_element_attributes(element),
className: element.className,
classList: to_array(element.classList),
// clientHeight: element.clientHeight, //int
// clientLeft: element.clientLeft,
// clientTop: element.clientTop,
// clientWidth: element.clientWidth,
// contentEditable: element.contentEditable,
dataset: element.dataset,
// dir: element.dir,
// lang: element.lang,
// offsetHeight: element.offsetHeight,
// offsetLeft: element.offsetLeft,
// offsetParent: element.offsetParent,
// offsetTop: element.offsetTop,
// offsetWidth: element.offsetWidth,
// id: element.id,
innerHTML: element.innerHTML,
innerText: element.innerText,
// localName: element.localName,
name: element.name,
// outerHTML: element.outerHTML,
// outerText: element.outerText,
// scrollHeight: element.scrollHeight,
// scrollLeft: element.scrollLeft,
// scrollTop: element.scrollTop,
// scrollWidth: element.scrollWidth,
style: to_map(element.style),
tagName: element.tagName,
// tabIndex: element.tabIndex,
// title: element.title,
// defaultValue: element.defaultValue,
// disabled: element.disabled,
// maxLength: element.maxLength,
// readOnly: element.readOnly,
// size: element.size,
// type: element.type,
value: element.value
};
}
Drab.query = function (selector, what, where) {
var searchie = where || document;
var ret = {};
var found = searchie.querySelectorAll(selector);
for (var i = 0; i < found.length; i++) {
var element = found[i];
var id = element.id;
var id_selector;
if (id) {
id_selector = "#" + id;
} else {
var drab_id = Drab.setid(element);
id_selector = "[drab-id='" + drab_id + "']";
}
ret[id_selector] = {};
if (what.length != 0) {
for (var j in what) {
var property = what[j];
switch (property) {
case "attributes":
ret[id_selector][property] = get_element_attributes(element);
break;
case "style":
ret[id_selector][property] = to_map(element.style);
break;
case "classList":
ret[id_selector][property] = to_array(element.classList);
break;
default:
ret[id_selector][property] = element[property];
break;
}
}
} else {
ret[id_selector] = default_properties(element);
}
};
return ret;
};
function isObject(val) {
if (val === null) {
return false;
}
return typeof val === 'function' || typeof val === 'object';
}
Drab.set_prop = function (selector, what, where) {
var searchie = where || document;
var i = 0;
var found = searchie.querySelectorAll(selector);
for (i = 0; i < found.length; i++) {
var element = found[i];
for (var property in what) {
var value = what[property];
switch (property) {
case "attributes":
for (var p in value) {
element.setAttribute(p, value[p]);
}
break;
case "style":
for (var p in value) {
element[property][p] = value[p];
}
break;
case "dataset":
for (var p in value) {
element[property][p] = value[p];
}
break;
case "innerHTML":
element[property] = what[property];
Drab.enable_drab_on(selector);
break;
default:
element[property] = what[property];
break;
}
}
};
return i;
};
Drab.insert_html = function (selector, position, html, where) {
var searchie = where || document;
var i = 0;
var found = searchie.querySelectorAll(selector);
for (i = 0; i < found.length; i++) {
var element = found[i];
element.insertAdjacentHTML(position, html);
};
Drab.enable_drab_on(selector);
return i;
};