Newer
Older
WebInquirer / merger / core.js
var merger = new function () {
    var sysicon = "data:image/gif;base64,R0lGODlhIAAgAOMAAP///zOZ/47N8FxqpgAAAMzM/7+/v9nu+QBjpAA9hP///////////////////////yH5BAEKAA8ALAAAAAAgACAAAATq8MlJH7k16y3JEQXGjZVXBGBIkKQpoEIqsuVRxHAsr3Rn6zndjuYCCo8F1ahoPCJDG2bTKbTxKNIpVWAbXH03atDZ9ZYKh49zXC0M3l/LKZA+Bthc99uMnd/rLzhBZXtxBH53dGpAKISFZ4mJCIpHjo99kQGTiWmdbgkJe3AGmJKZdwUPem+ghQavHX6bpyABoqyhBK+wh3ezpwGrtwMJurtymsCRwsPGpHK/ysyizhME0dLDo7DWBMqZ017HFQYX36jN4xrl3tnU6hzswMLVPfLLrtw9EvfB28/7KMhzUy9gBnYFDa6DtyECADs=";

    if (!Object.prototype.merge)
        Object.defineProperty(Object.prototype, "merge", {
            writable: true, value: function (src) {
                if (src != undefined)
                    for (var key in src)
                        this[key] = src[key];
                return this;
            }
        });

    var ui = {
        w: {}
    };

    this.ui = {

    };

    function desktop() {
        if (!ui.dsk) {
            ui.dsk = document.createElement("div");
            ui.dsk.style.merge({
                position: "absolute",
                zIndex: 510,
                top: 0,
                left: 0,
                width: "100%",
                height: "100%",
                fontFamily: "Verdana",
                fontSize: "10px",
                overflow: "hidden",
            });
            ui.bg = document.createElement("div");
            ui.bg.style.merge({
                backgroundColor: "gray",
                opacity: 0.3,
                position: "absolute",
                top: 0,
                left: 0,
                width: "100%",
                height: "100%",
            });
            ui.dsk.appendChild(ui.bg);
            ui.menu = document.createElement("div");
            ui.menu.style.merge({
                position: "absolute",
                zIndex: 512,
                top: 0,
                left: 0,
                width: "100%",
                height: "21px",
                padding: "2px 9px 2px 9px",
                backgroundColor: "white",
                borderBottom: "1px solid black",
                boxSizing: "border-box",
            });
            ui.menu.sysMenu = document.createElement("img");
            ui.menu.sysMenu.style.width = "16px";
            ui.menu.sysMenu.style.height = "16px";
            //ui.menu.sysMenu.src = "data:image/gif;base64," + jsTKicon;
            ui.menu.sysMenu.src = sysicon;
            ui.menu.appendChild(ui.menu.sysMenu);
            ui.dsk.appendChild(ui.menu);
        }
        if (!document.body.contains(ui.dsk))
            document.body.appendChild(ui.dsk);
    }

    function close() {
        if (document.body.contains(ui.dsk))
            document.body.removeChild(ui.dsk);
    }

    function control(id, def, c) {
        if (!c)
            c = document.createElement("div");
        c.setAttribute("id", id);
        c.setAttribute("name", id);
        c.style.position = "absolute";
        c.setTop = function (val) {
            def.top = val;
            this.style.top = val + "px";
        }
        c.setLeft = function (val) {
            def.left = val;
            this.style.left = val + "px";
        }
        c.setWidth = function (val) {
            def.width = val;
            this.style.width = val + "px";
        }
        c.setHeight = function (val) {
            def.height = val;
            this.style.height = val + "px";
        }
        c.setVisible = function (val) {
            this.style.display = val ? "" : "none";
        }
        c.setContent = function (ctt) {
            for (var i = 0; i < ctt.length; i++)
                this.appendChild(ctt[i]);
        }
        c.setStyle = function (style) {
            this.style.merge(style);
        }
        var settings = {};
        for (var key in def) {
            var mdata = def[key];
            if (typeof mdata == "function")
                c[key] = def[key];
            else {
                var fname = "set" + key[0].toUpperCase() + key.substring(1);
                var fnc = c[fname];
                if (fnc && typeof fnc == "function")
                    settings[key] = { f: fnc.bind(c), d: mdata };
            }
        }
        for (var key in settings) {
            var o = settings[key];
            o.f(o.d);
        }
        return c;
    }

    function window(id, def) {
        if (def.top == undefined)
            def.top = (ui.dsk.clientHeight - def.height) / 2;
        if (def.left == undefined)
            def.left = (ui.dsk.clientWidth - def.width) / 2;
        if (!def.content)
            def.content = [];
        var w;
        // Window Title
        var wt = control("title", {
            visible: !def.hideTitle,
            style: {
                borderBottom: "1px solid black",
                textAlign: "center",
                height: "18px",
                boxSizing: "border-box",
                fontFamily: "Chicago, Verdana",
                fontSize: "12px",
                fontWeight: "bold",
                backgroundColor: "#F0F0F6",
                position: "relative",
                boxShadow: "0 0 1px #A5A5D6 inset",
                paddingTop: "1px",
            },
            content: [
                control("closeButton", {
                    visible: !def.hideCloseButton,
                    style: {
                        top: "2px",
                        left: "6px",
                        width: "9px",
                        height: "9px",
                        border: "2px groove #EFEFEF",
                        backgroundColor: "#DFDFEF",
                        padding: 0,
                        boxSizing: "content-box",
                    },
                    onclick: function () {
                        w.close();
                    },
                }, document.createElement("button"))
            ],
            setTitle: function (title) {
                if (!this._textNode) {
                    this._textNode = document.createTextNode("");
                    this.appendChild(this._textNode);
                }
                this._textNode.textContent = title;
            }
        });
        // Window client
        var wc = control("client", {
            content: def.content,
            style: { position: "relative" }
        });
        def.content = [wt, wc];
        // Window root
        w = control(id, {
            setTitle: function (title) {
                wt.setTitle(title);
            },
            style: {
                backgroundColor: def.bg == undefined ? "white" : def.bg,
                border: "1px solid black",
                boxShadow: "1px 1px 0px rgba(0,0,0,0.5)",
                overflow: "hidden",
            },
            close: function () {
                var close = true;
                if (this.onClose)
                    close = this.onClose();
                if (close)
                    this.setVisible(false);
            }
        }.merge(def));
        ui.dsk.appendChild(w);
        ui.w[id] = w;
        return w;
    }

    function icon(id, def) {

    }

    function label(id, def) {
        var c = control(id, def);
        c.setText = function (text) {
            this.innerText = text;
        }
        c.setText(def.text);
        return c;
    }

    function list(id, def) {
        var c = control(id, def);
        c.style.border = "1px solid red";
        return c;
    }

    function get(id) {
        return ui.w[id];
    }

    this.desktop = desktop;
    this.close = close;
    this.window = window;
    this.get = get;
    this.list = list;
    this.label = list;
    this.button = list;
}