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