JSFiddle - React, Tailwind, and code Playground
by mayorovp
HTML
<ol>
<li>Hello, <span>anybody<script>$this.bindings.add(null, "name");</script></span>!</li>
</ol>
JavaScript
function view_setter(value) {
switch (typeof value) {
case "null":
case "undefined":
return function(data) { this.innerText = data; };
case "function":
return value;
case "string":
return function(data) { this.setAttribute(value, data); }
};
throw new TypeError("Неверный тип параметра: " + typeof value);
}
function view_getter(value) {
switch (typeof value) {
case "null":
case "undefined":
return function(data) { return data; };
case "function":
return value;
case "number":
value = value.toString();
case "string":
value = value.split('.');
};
throw new TypeError("Неверный тип параметра: " + typeof value);
}
function set_text(node, value) {
node.innerText = value;
}
function set_attrib(name, node, value) {
node.setAttribute(name, value);
}
function get_property(name, data) {
return data[name];
}
function Bindings(parent, base) {
if (base)
{
var props = Object.getOwnPropertyNames(base);
for (var i = 0; i<props.length; i++)
{
var name = props[i];
var descr = Object.getOwnPropertyDescriptor(this, name);
if (descr)
Object.defineProperty(this, name, descr);
this[name] = base[name];
}
}
this._node = parent;
}
Bindings.prototype = {
add : function(setter, getter) {
var binding;
if (getter) {
if (setter === null)
setter = set_text;
if (typeof setter != "function")
setter = set_attrib.bind(null, setter);
if (typeof getter != "function")
getter = get_property.bind(null, getter);
binding = function(data) { setter(this, getter(data)); }
} else
binding =...