// Получаем выделенный текст
var getSel = function (w) {
var s, d = w.document;
// ie-шная модель удобнее, но поддерживается только в нём и opera < 10.5
if (d.selection) {
var r = d.selection.createRange();
s = r ? r.text : ''
} else {
// window.getSelection() в опере багнута, теряя переносы строк, поэтому используем document.getSelection()
// явное приведение к строке необходимо, потому что в webkit document.getSelection() возвращает объект, такой же как и window.getSelection()
s = d.getSelection().toString();
if (!s) {
// Ищем текст в инпутах и текстареах, отлавливая исключения при обращении к инпутам с недоступным selectionStart (ff и webkit).
var e, t = d.getElementsByTagName('textarea'), u = d.getElementsByTagName('input'), i = t.length;
while(e = (i > 0) ? t[--i] : u[-i--])try{
if (e.offsetHeight > 0 && (s = e.value.substring(e.selectionStart, e.selectionEnd))) break
}catch(x){}
}
};
// рекурсивно вызываем себя во всех фреймах
if (!s) for (var j = 0, f; f = w.frames[j]; j++) {
try {
if (s = getSel(f)) break
} catch(x) {}
};
return s
};
// var txt = getSel(window);
// Перевод с yandex translate
javascript:void(document.documentElement.appendChild(document.createElement('script')).src = 'http://translate.yandex.ru/tr.json/translate?srv=tr-text&id=adb7aca1-0-0&text='+document.getSelection()+'&lang=en-ru&callback=alert')
// чистка вредных обработчиков
javascript:(function(w){
var arr = ['contextmenu','copy','cut','paste','mousedown','mouseup','beforeunload','beforeprint'];
for(var i = 0, x; x = arr[i]; i++){
if(w['on' + x])w['on' + x] = null;
w.addEventListener(x, function(e){e.stopPropagation()}, true);
};
for(var j = 0, f; f = w.frames[j]; j++){try{arguments.callee(f)}catch(e){}}
})(window);
// fast Base64
function encodeBase64(str){
var chr1, chr2, chr3, rez = '', arr = [], i = 0, j = 0, code = 0;
var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='.split('');
while(code = str.charCodeAt(j++)){
if(code < 128){
arr[arr.length] = code;
}
else if(code < 2048){
arr[arr.length] = 192 | (code >> 6);
arr[arr.length] = 128 | (code & 63);
}
else if(code < 65536){
arr[arr.length] = 224 | (code >> 12);
arr[arr.length] = 128 | ((code >> 6) & 63);
arr[arr.length] = 128 | (code & 63);
}
else{
arr[arr.length] = 240 | (code >> 18);
arr[arr.length] = 128 | ((code >> 12) & 63);
arr[arr.length] = 128 | ((code >> 6) & 63);
arr[arr.length] = 128 | (code & 63);
}
};
while(i < arr.length){
chr1 = arr[i++];
chr2 = arr[i++];
chr3 = arr[i++];
rez += chars[chr1 >> 2];
rez += chars[((chr1 & 3) << 4) | (chr2 >> 4)];
rez += chars[chr2 === undefined ? 64 : ((chr2 & 15) << 2) | (chr3 >> 6)];
rez += chars[chr3 === undefined ? 64 : chr3 & 63];
};
return rez;
};
// Ссылки на видео
var getVideo = function(flashvars, src){
var getLink = function(s){var a = s.match(/[^\s\x22=&?]+\.[^\s\x22=&?\/]*(flv|mp4)/i); return a ? a[0] : ''};
var getQuery = function(s, q){var a = s.match(new RegExp('(^|[&?])'+q+'=([^&]+)')); return a ? a[2] : ''};
var getJson = function(s, q){var a = s.match(new RegExp('\x22'+q+'\x22:\\s*(\x22.+?\x22)')); return a ? eval(a[1]) : ''};
var getURL = function(f, s){return f.match(/^(\w+:\/\/|\/|$)/) ? f : s.replace(/[#?].*$/, '').replace(/[^\/]*$/, f)};
var decodeURL = function(s){try{return decodeURIComponent(s)}catch(e){return unescape(s)}};
var q = '', url = location.href, flv = decodeURL(flashvars);
if( url.indexOf('youtube.com/watch?') != -1 && (q = getQuery(flv, 'url')) )return decodeURL(q)+'&signature='+getQuery(flv, 'sig')+'&title='+encodeURIComponent(document.title);
if( url.indexOf('video.google.com/videoplay?') != -1 && (q = getQuery(src, 'videoUrl')) )return decodeURL(q);
if( url.indexOf('metacafe.com/watch/') != -1 && (q = getJson(flv, 'mediaURL')) )return q+'?__gda__='+getJson(flv, 'value');
if( url.indexOf('dailymotion.com/') != -1 && (q = getJson(flv, 'hqURL') || getJson(flv, 'sdURL')) )return q;
if( url.indexOf('www.break.com/') != -1 && (q = getQuery(flv, 'videoPath') ) )return q+'?'+getQuery(flv, 'icon');
if( url.indexOf('my-hit.ru/film/') != -1 && (q = getLink(flv)) )return q+'?start=0&id='+getQuery(flv, 'id');
return getURL(getLink(flv) || decodeURL(getLink(src)), src);
};
// Панель для закачки
javascript:(function(){
var c = 'ujs_max_upload', w = window, d = (w.document.body instanceof HTMLFrameSetElement ? w.frames[0] : w).document, e = d.getElementById(c);
if(e){e.del(); return};
e = d.createElement('div');
e.id = c;
e.setAttribute('style', 'display:none;position:fixed;right:0;bottom:0;width:auto;height:auto;border:1px solid #555;padding:10px;text-align:left;z-index:99999;background-color:#EEE;background:-o-skin(\x22Window Skin\x22);');
e.add = function(lnk, frm){
var d = this.ownerDocument, a = d.createElement('a');
a.href = lnk.href;
a.target = '_blank';
a.setAttribute('style', 'padding:0;margin:0;border:none;text-decoration:none;color:#00C;font:14px Times New Roman;');
a.appendChild(d.createTextNode(lnk.text));
this.appendChild(a);
var f = d.createElement('form');
f.action = lnk.action;
f.method = 'post';
f.enctype = 'multipart/form-data';
f.target = '_blank';
f.setAttribute('style', 'display:block;margin:5px;');
var t = d.createElement('input');
t.type = 'file';
t.name = lnk.name;
t.setAttribute('style', 'width:auto;height:auto;padding:1px;margin:0;border-color:#AAA;font:12px Arial;');
t.onchange = function(){this.nextSibling.disabled = !this.value};
f.appendChild(t);
var s = d.createElement('input');
s.type = 'submit';
s.value = 'Upload';
s.disabled = true;
s.setAttribute('style', 'width:auto;height:auto;padding:1px 4px;margin:0 0 0 2px;color:buttontext;font:12px Arial;');
f.appendChild(s);
if(frm)for(var name in frm){
var h = d.createElement('input');
h.type = 'hidden';
h.name = name;
h.value = frm[name];
f.appendChild(h);
};
this.appendChild(f);
};
e.vis = function(v){
this.style.display = v ? 'block' : 'none';
return this.offsetHeight * this.offsetWidth;
};
e.del = function(){
this.vis(false);
this.parentNode.removeChild(this);
};
var b = d.createElement('div');
b.title = 'Close';
b.setAttribute('style', 'display:block;float:right;height:18px;width:18px;padding:0;margin:-5px;border:none;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAQAAAD8x0bcAAAAZElEQVR42mNgGNyAGQixsVGU/AdCXjCbHczmxKaMFywlAlWiw6DAwIZNmQhYGqJEDWoqFiAGVmKKTwk73CRJ/Ep0GIyhbsPpO4hbIG4TwKaMk0EZ7hYBBk1cvmNDEmbDrmSwAADE8h10+qICXwAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=");background:-o-skin(\x22Caption Close Button Skin\x22);cursor:pointer');
b.onclick = function(){this.parentNode.del()};
e.appendChild(b);
e.add( {href:'http://www.imageshack.us', text:'Imageshack.us', action:'http://post.imageshack.us/', name:'fileupload'}, {MAX_FILE_SIZE:'1048576', key:'07AHPRSUb540e13d31461ec4d69d5fc122bd5ab7'} );
e.add( {href:'http://www.radikal.cc', text:'Радикал-Фото', action:'http://www.radikal.cc/action.aspx', name:'F'}, {upload:'yes', VM:'180'} );
e.add( {href:'http://fastpic.ru', text:'FastPic.ru', action:'http://fastpic.ru/uploadmulti', name:'file[]'}, {uploading:'1'} );
e.add( {href:'http://multi-up.com', text:'Multi-up.com', action:'http://multi-up.com/up.php', name:'upload'} );
e.add( {href:'http://zalil.ru', text:'Zalil.ru', action:'http://zalil.ru/upload/', name:'file'} );
e.add( {href:'http://rghost.ru/', text:'Rghost.ru', action:'http://kaon.rghost.ru/files', name:'file'}, {'data-max-file-size':'52428800'} );
d.documentElement.appendChild(e);
e.vis(true);
})();
// Сохранение страницы в файл
javascript: (function () {
var getSelWin = function (w) {
if (w.getSelection().toString()) return w;
for (var i = 0, f, r; f = w.frames[i]; i++) {
try {
if (r = getSelWin(f)) return r;
} catch(e) {}
}
};
var selWin = getSelWin(window);
var win = selWin || window, doc = win.document, loc = win.location;
var ele, pEle, clone;
if (selWin) {
var rng = win.getSelection().getRangeAt(0);
pEle = rng.commonAncestorContainer;
ele = rng.cloneContents();
} else {
pEle = doc.documentElement;
ele = (doc.body || doc.getElementsByTagName('body')[0]).cloneNode(true);
};
while (pEle) {
if (pEle.nodeType == 1) {
clone = pEle.cloneNode(false);
clone.appendChild(ele);
ele = clone;
};
pEle = pEle.parentNode;
};
var sel = doc.createElement('div');
sel.appendChild(ele);
for (var el, all = sel.getElementsByTagName('*'), i = all.length; i--;) {
el = all[i];
for (var att = el.attributes, j = att.length; j--;) {
if (att[j] && /^on[a-z]+$/i.test(att[j].name)) el.removeAttribute(att[j].name);
};
switch (el.nodeName.toLowerCase()) {
case 'link':
case 'style':
case 'script': el.parentNode.removeChild(el); break;
case 'a':
case 'area': if (el.hasAttribute('href') && el.getAttribute('href').charAt(0) != '#') el.href = el.href; break;
case 'img':
case 'input':
case 'audio':
case 'video':
case 'embed':
case 'frame':
case 'iframe': if (el.hasAttribute('src')) el.src = el.src; break;
case 'object': if (el.hasAttribute('data')) el.data = el.data; break;
case 'form': if (el.hasAttribute('action')) el.action = el.action; break;
}
};
var head = ele.insertBefore(doc.createElement('head'), ele.firstChild);
var meta = doc.createElement('meta');
meta.httpEquiv = 'content-type';
meta.content = 'text/html; charset=utf-8';
head.appendChild(meta);
var title = doc.getElementsByTagName('title')[0];
if (title) head.appendChild(title.cloneNode(true));
head.copyStyle = function (s) {
if (!s) return;
var style = doc.createElement('style');
style.type = 'text/css';
if (s.media && s.media.mediaText) style.media = s.media.mediaText;
try {
for (var i = 0, rule; rule = s.cssRules[i]; i++) {
if (rule.type != 3) {
if((!rule.selectorText || rule.selectorText.indexOf(':') != -1) || (!sel.querySelector || sel.querySelector(rule.selectorText))) {
style.appendChild(doc.createTextNode(rule.cssText + '\n'));
}
} else {
this.copyStyle(rule.styleSheet);
}
}
} catch(e) {
if (s.ownerNode) style = s.ownerNode.cloneNode(false);
};
this.appendChild(style);
};
var sheets = doc.styleSheets;
for (var j = 0; j < sheets.length; j++) head.copyStyle(sheets[j]);
head.appendChild(doc.createTextNode('\n'));
var doctype = '', dt = doc.doctype;
if (dt && dt.name) {
doctype += '<!DOCTYPE ' + dt.name;
if (dt.publicId) doctype += ' PUBLIC \x22' + dt.publicId + '\x22';
if (dt.systemId) doctype += ' \x22' + dt.systemId + '\x22';
doctype += '>\n';
};
loc.href = 'data:text/phf;charset=utf-8,' + encodeURIComponent(doctype + sel.innerHTML + '\n<!-- This document saved from ' + (loc.protocol != 'data:' ? loc.href : 'data:uri') + ' -->')
})();
// Служебное.
// get full URL
var qualifyURL = function (url, base) {
if (!url || /^([a-z]+:|#)/.test(url)) return url;
var a = document.createElement('a');
if (base) {
a.href = base;
a.href = a.protocol + (url.charAt(0) == '/' ? (url.charAt(1) == '/' ? '' : '//' + a.host) : '//' + a.host + a.pathname.slice(0, (url.charAt(0) != '?' && a.pathname.lastIndexOf('/') + 1) || a.pathname.length)) + url;
} else {
a.href = url;
};
return a.href;
};
// uneval/toSource
var toSrc = function (obj) {
var strToSrc = function (str) {
var chr, ret = '', i = 0, meta = {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\'};
while (chr = str.charAt(i++)) {
ret += meta[chr] || chr;
};
return '"' + ret + '"';
},
arrToSrc = function (arr) {
var ret = [];
for (var i = 0; i < arr.length; i++) {
ret[i] = toSrc(arr[i]) || 'null';
};
return '[' + ret.join(',') + ']';
},
objToSrc = function (obj) {
var val, ret = [];
for (var prop in obj) {
if (Object.prototype.hasOwnProperty.call(obj, prop) && (val = toSrc(obj[prop]))) ret.push(strToSrc(prop) + ': ' + val);
};
return '{' + ret.join(',') + '}';
};
switch (Object.prototype.toString.call(obj).slice(8, -1)) {
case 'Array': return arrToSrc(obj);
case 'Boolean':
case 'Function':
case 'RegExp': return obj.toString();
case 'Date': return 'new Date(' + obj.getTime() + ')';
case 'Math': return 'Math';
case 'Number': return isFinite(obj) ? String(obj) : 'null';
case 'Object': return objToSrc(obj);
case 'String': return strToSrc(obj);
default: return obj ? '{}' : 'null';
}
};
// перебор свойств объекта
javascript:alert( (function(obj){var name, ret = ''; for(name in obj){ret += '\n' + name + ' = '; try{ret += obj[name]}catch(e){ret += e}}; return ret})(window) )
// число свойств window. проверяем его до и после запуска нашего скрипта, чтобы убедиться, что не намусорили в глобальной видимости.
javascript:alert( (function(obj){var name, ret = 0; for(name in obj){ret++}; return ret})(window) )