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 =...