Packages
drab
0.7.1
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.live.js
// Drab.add_payload(function (sender, event) {
// return {
// __assigns: __drab.assigns,
// __amperes: __drab.amperes,
// __index: __drab.index
// };
// });
Drab.on_load(function (resp, drab) {
// extract information from all drabbed nodes and store it in global __drab
if (typeof window.__drab == 'undefined') {
window.__drab = { assigns: {} };
};
var d = window.__drab;
set_properties(document);
});
Drab.on_connect(function(resp, drab) {
save_assigns();
})
Drab.on_change(function(node) {
// var node = document.querySelector(selector);
if (node) {
// search_for_drab(node);
run_drab_scripts_on(node);
set_properties(node);
}
});
function save_assigns() {
var payload = {
__assigns: __drab.assigns,
__amperes: __drab.amperes,
__index: __drab.index
};
Drab.exec_elixir("Drab.Live.Commander.save_assigns", payload);
}
function run_drab_scripts_on(node) {
var scripts = node.querySelectorAll("script[drab-script]");
for (var i = 0; i < scripts.length; i++) {
var script = scripts[i];
eval(script.innerText);
}
save_assigns();
}
function set_properties(where) {
var d = window.__drab;
for (var ampere in d.properties) {
var properties = d.properties[ampere];
for (var property in properties) {
var nodes = ampere_nodes(ampere);
for (var i = 0; i < nodes.length; i++) {
var node = nodes[i];
set_property(node, ampere, property, properties[property]);
}
}
}
}
function set_property(node, ampere, property, new_value) {
var path = property.split(".");
var full = node;
var prev, last;
for (var i = 0; i < path.length; i++) {
var part = path[i];
prev = full;
full = full[part];
last = part;
}
prev[last] = new_value;
window.__drab.properties[ampere][property] = new_value;
}
function selector(ampere) {
return "[drab-ampere='" + ampere + "']";
}
function ampere_nodes(ampere) {
return document.querySelectorAll(selector(ampere));
}
Drab.update_attribute = function(ampere, attribute, new_value) {
var nodes = ampere_nodes(ampere);
for (var i = 0; i < nodes.length; i++) {
var node = nodes[i];
// a corner case for <input value="">
if ((node.tagName == "INPUT" || node.tagName == "TEXAREA") && attribute.toLowerCase() == "value") {
node.value = new_value;
}
node.setAttribute(attribute, new_value);
}
}
Drab.update_property = function(ampere, property, new_value) {
var nodes = ampere_nodes(ampere);
for (var i = 0; i < nodes.length; i++) {
var node = nodes[i];
set_property(node, ampere, property, new_value);
}
}
Drab.update_tag = function(tag, ampere, new_value) {
switch(tag) {
case "script":
eval(new_value);
break;
default:
var s = selector(ampere);
var nodes = document.querySelectorAll(s);
for (var i = 0; i < nodes.length; i++) {
var node = nodes[i];
node.innerHTML = new_value;
}
Drab.enable_drab_on(s);
}
};