hon.gy bookmarklet

by davidhong

HTML

<a href='javascript:(function(a){function j(a){var b="",c,d=encodeURIComponent,e=function(a,c){b+=d(a)+"="+d(c)+"&"};if(Object.prototype.toString.call(a)=="[object Array]")for(c=0;a&&c<a.length;c++)e(a[c].name,a[c].value);else for(var f in a){if(!Object.hasOwnProperty.call(a,f))continue;var g=a[f];if(Object.prototype.toString.call(g)=="[object Array]")for(c=0;c<g.length;c++)e(f,g[c]);else e(f,a[f])}return b.replace(/&$/,"").replace(/%20/g,"+")}var b=a.document,c=b.body,d=b.location,e=function(a){return function(){/ded|co/.test(this.readyState)&&a()}},f=function(a,d){var f=b.createElement("script");f.src=a,c.appendChild(f),f.onreadystatechange===null?f.onreadystatechange=e(d):f.onload=d},g=new XMLHttpRequest,h={"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json, text/javascript","X-Requested-With":"XMLHttpRequest"};g.open("POST","http://hon.gy",!0);var i;for(i in h)h.hasOwnProperty(i)&&g.setRequestHeader(i,h[i]);g.send(j({url:d.href})),g.onreadystatechange=function(){if(g.readyState===4){var a=JSON.parse(g.responseText);alert(a.short)}}})(this)'>hon.gy Bookmarklet</a>

JavaScript

(function(window) {
    var document = window.document,
        body = document.body,
        url = document.location,

        watch = function(callback) {
            return function() {
                if (/ded|co/.test(this.readyState)) {
                    callback();
                }
            };
        },

        js = function(src, callback) {
            var script = document.createElement('scr' + 'ipt');
            script.src = src;
            body.appendChild(script);

            if (script.onreadystatechange === null) {
                script.onreadystatechange = watch(callback);
            } else {
                script.onload = callback;
            }
        };

    // The server needs: Access-Control-Allow-Origin: *
    var request = new XMLHttpRequest(),
        headers = {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Accept': 'application/json, text/javascript',
            'X-Requested-With': 'XMLHttpRequest'
        };

    request.open('POST', 'http://hon.gy', true);

    // Set HTTP Headers
    var h;
    for (h in headers)
    headers.hasOwnProperty(h) && request.setRequestHeader(h, headers[h]);

    request.send(serialize({
        url: url.href
    }));
    request.onreadystatechange = function() {
        if (request.readyState === 4) {
            var res = JSON.parse(request.responseText);
            alert(res.short);
        }
    };

    function serialize(o) {
        var qs = '',
            i, enc = encodeURIComponent,
            push = function(k, v) {
                qs += enc(k) + '=' + enc(v) + '&'
            }

            if (Object.prototype.toString.call(o) == '[object Array]') {
                for (i = 0; o && i < o.length; i++) push(o[i].name, o[i].value)
            } else {
                for (var k in o) {
                    if (!Object.hasOwnProperty.call(o, k)) continue;
                    var v = o[k]
                    if (Object.prototype.toString.call(v) ==...