kokomadeyonda

  • /*
     * @title kokomadeyonda
     * @description This works as siori.
     * @include http://*
     * @license MIT License
     * @require 
     * @see http://tax4.blog115.fc2.com/blog-entry-35.html
     */
    (function (param_time)
    {
        var domainId = "tax4_blog115_fc2_com_siori";
        var ckk = domainId + "_cookie";
        var d = document;
        var de = d.documentElement;
        var db = d.body;
        var ac = function (x, y)
        {
            return x.appendChild(y);
        };
        var dd = function (x, id)
        {
            if (x) { }
            else {
                x = "div";
            };
            if (id)
            {
                var gomi = dd();
                gomi.innerHTML = "<" + x + " id=\"" + id + "\"></" + x + ">";
                return gomi.firstChild;
            }
            else {
                return d.createElement(x);
            };
        };
        /* save-load */
        var ck = 
        {
            set : function (key, val)
            {
                var dt = new Date();
                dt.setFullYear((Number(dt.getFullYear()) + 1) + "");
                d.cookie = key + "=" + escape(val) + ";" + "path=" + location.pathname + ";" + "expires=" + dt.toGMTString() + ";";
            },
            get : function (key)
            {
                var cs = d.cookie.split("; ");
                for (var i in cs)
                {
                    if ("string" == typeof (cs[i])) {
                        var c = cs[i].split("=");
                        var k = c[0];
                        var v = unescape(c[1]);
                        if (k == key) {
                            return v;
                        };
                    }
                };
                return null;
            }
        };
        var cb = function (v, f)
        {
            var x = dd();
            x.innerHTML = "<input type=\"button\"></input>";
            var b = x.firstChild;
            if (v) {
                b.value = v;
            };
            if (f) {
                b.onclick = f;
            };
            x.removeChild(b);
            return b;
        };
        var o = 
        {
            mdiv : null, _menudiv : null, _contentdiv : null,
            init : function ()
            {
                var me = this;
                var m = me.mdiv = dd();
                var ms = m.style;
                ms.position = "absolute";
                ms.width = "200px";
                ms.top = this.getTop() + "px";
                ms.left = this.getLeft() + "px";
                var menu = this._menudiv = dd();
                menu.style.backgroundColor = "LightCyan";
                var addb = cb("追加", function ()
                {
                    me.add();
                });
                var content = this._contentdiv = dd();
                ac(menu, addb);
                ac(m, menu);
                ac(m, content);
                ac(d.body, m);
                this.load();
            },
            add : function ()
            {
                var s = prompt("タイトル", "");
                var x = this.getLeft();
                var y = this.getTop();
                this.addSiori(s, x, y);
                this.save();
            },
            getTop : function ()
            {
                return de.scrollTop || db.scrollTop;
            },
            getLeft : function ()
            {
                return de.scrollLeft || db.scrollLeft;
            },
            addSiori : function (s, x, y)
            {
                var a = dd();
                a.siori = x + "_" + y + "_" + s;
                var disp = dd("span");
                disp.innerHTML = s;
                disp.title = a.siori;
                disp.style.fontColor = "gray";
                addEvent("click", disp, function ()
                {
                    window.scrollTo(x, y);
                } );
                var del = dd("span");
                del.innerHTML = "■";
                var me = this;
                addEvent("dblclick", del, function ()
                {
                    a.parentNode.removeChild(a);
                    me.save();
                } );
                a.style.backgroundColor = "AliceBlue";
                ac(a, del);
                ac(a, disp);
                ac(this._contentdiv, a);
            },
            save : function ()
            {
                var es = this._contentdiv.childNodes;
                var str = "";
                for (i in es) {
                    var e = es[i];
                    if (e.siori) {
                        str += e.siori + "\n";
                    };
                };
                ck.set(ckk, str);
            },
            load : function ()
            {
                var str = ck.get(ckk);
                if (!str) {
                    str = "";
                };
                var r = RegExp;
                for (var i = 0, strs = str.split("\n"), len = strs.length; i < len; i++)
                {
                    var data = strs[i];
                    if (data.match(new RegExp("(\\d+)_(\\d+)_(.*)"))) {
                        this.addSiori(r.$3, r.$1, r.$2);
                    };
                };
            }
        };
        o.init();
        var omd = o.mdiv;
        setTimeout(function ()
        {
            omd.parentNode.removeChild(omd);
        },
        parseInt(param_time * 1000));
        function addEvent(str, elem, f)
        {
            if (elem.addEventListener) {
                elem.addEventListener(str, f, false);
            }
            else {
                elem.attachEvent("on" + str, f);
            }
        }
    })(3)
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2010/07/19 13:38:46 - 2010-07-19
  2. 2010/07/19 13:35:48 - 2010-07-19