Author: sparky Date: Thu Mar 11 03:07:12 2010 New Revision: 11244 Added: toys/rsget.pl/rsget_pl.user.js Log: - new userscript, still somewhat problematic, but it isn't limited to GreaseMonkey unlike the previous one; besides mozilla browsers also epiphany, chromium and opera are supported
Added: toys/rsget.pl/rsget_pl.user.js ============================================================================== --- (empty file) +++ toys/rsget.pl/rsget_pl.user.js Thu Mar 11 03:07:12 2010 @@ -0,0 +1,602 @@ +// ==UserScript== +// @name rsget.pl +// @namespace http://rsget.pl/ +// @description quickly add links to rsget.pl +// @include http://*/* +// @include https://*/* +// @include file://* +// ==/UserScript== + +var server = 'http://localhost:5666/'; + +/* supported links {{{ */ +var supported2 = { + "4gk.com": 1, "4shared.com": 1, "anonym.to": 1, + "archiv.to": 1, "badongo.com": 1, "bitroad.net": 1, + "break.com": 2, "crypted.biz": 1, "crypt-it.com": 1, + "dailymotion.com": 2, "dailymotion.pl": 2, "depositfiles.com": 1, + "extremetube.com": 2, "filefactory.com": 1, "flyfile.us": 1, + "freakshare.net": 1, "gigasize.com": 1, "goear.com": 2, + "hotfile.com": 1, "imageshack.us": 2, "linkhider.com": 1, + "link-protector.com": 1, "liveleak.com": 2, "lix.in": 1, + "mediafire.com": 1, "megaporn.com": 2, "megarotic.com": 1, + "megaupload.com": 1, "megavideo.com": 2, "metacafe.com": 2, + "netload.in": 1, "pornhub.com": 2, "protectlinks.com": 1, + "przeklej.pl": 1, "rapidshare.de": 1, "rapidshark.pl": 1, + "redtube.com": 2, "rapidshare.com": 1, "rsprotect.com": 1, + "secured.in": 1, "sendspace.com": 1, "sendspace.pl": 1, + "sexuploader.com": 1, "sharebee.com": 1, "shareplace.com": 1, + "sharingmatrix.com": 1, "spankwire.com": 2, "storage.to": 1, + "tinyurl.com": 1, "turbobit.net": 1, "turbobit.ru": 1, + "turboupload.com": 1, "ul.to": 1, "up-file.com": 1, + "uploaded.to": 1, "uploading.com": 1, "veoh.com": 2, + "vimeo.com": 2, "easy-share.com": 1, "zippyshare.com": 1, + "x7.to": 1, "xhamster.com": 2, "xurl.jp": 1, + "youporn.com": 2, "youtube.com": 2, "zshare.net": 1, +}; + +var supported3 = { + "d01.megashares.com": 1, "save.raidrush.ws": 1, + "tv.delfi.ee": 2, "video.banzaj.pl": 2, + "video.google.com": 2, "video.interia.pl": 2, + "vids.myspace.com": 2, +}; +/* }}} */ + +/* tools: async, el {{{ */ +function async( f ) +{ + window.setTimeout( f, 0 ); +} + +function el( tag, attrib ) +{ + var el = document.createElement( tag ); + + if ( attrib ) + for ( var name in attrib ) + el.setAttribute( name, attrib[ name ] ); + + return el; +} + +function stop_propagation( ev ) +{ + ev.stopPropagation(); +} + +var _cnt = 1; +function cnt() +{ + return ++_cnt; +} +/* }}} */ + +var finder = { /* {{{ */ + page_supported: false, + + _text_tags: [ "pre", "div", "td", "p", "span" ], + _text_i: 0, + _text_nodes: null, + _a_i: 0, + _a_nodes: 0, + links: [], + + init: function () + { + if ( finder.page_supported = finder._check_support( document.location.href ) ) { + menu.init(); + } + finder._get_text(); + }, + + _get_text: function () + { + finder._text_i = 0; + finder._text_nodes = null; + if ( ! finder._text_tags.length ) + return finder._get_a(); + + finder._text_nodes = document.getElementsByTagName( + finder._text_tags.shift() + ); + async( finder._check_text ); + }, + _check_text: function () + { + if ( finder._text_i >= finder._text_nodes.length ) + return finder._get_text(); + + var text_node = finder._text_nodes[ finder._text_i++ ]; + async( finder._check_text ); + + var node = text_node.firstChild; + if ( ! node ) + return; + + var found = false; + + do { + if ( node.nodeName != '#text' ) + continue; + var text = node.nodeValue; + if ( text == null || text.length < 15 ) + continue; + + var hrefs = text.match( /(http:\/\/\S+\/\S+)/g ); + + if ( ! hrefs || hrefs.length <= 0 ) + continue; + + for ( var i = 0; i < hrefs.length; i++ ) { + var href = hrefs[ i ]; + if ( ! finder._check_support( href ) ) + continue; + var start = text.indexOf( href ); + if ( start < 0 ) + continue; + + text_node.insertBefore( + document.createTextNode( text.substr( 0, start ) ), + node ); + + /* class is a special word, must have quotes */ + var a = el( 'a', { href: href, 'class': 'get_link_text' } ); + a.addEventListener( 'DOMActivate', finder._click, false ); + a.addEventListener( 'click', finder._click, false ); + a.appendChild( document.createTextNode( href ) ); + text_node.insertBefore( a, node ); + + text = text.substr( start + href.length ); + node.nodeValue = text; + + found = true; + } + } while ( node = node.nextSibling ); + + if ( found ) + menu.init(); + }, + + _get_a: function () + { + finder._a_i = 0; + finder._a_nodes = document.getElementsByTagName( 'a' ); + async( finder._check_a ); + }, + _check_a: function () + { + if ( finder._a_i + 10 < finder._a_nodes.length ) + async( finder._check_a ); + else { + async( finder._end ); + } + + for ( var i = 0; i < 10; i++, finder._a_i++ ) { + if ( finder._a_i >= finder._a_nodes.length ) + break; + + var a = finder._a_nodes[ finder._a_i ]; + var cl = a.getAttribute( 'class' ); + if ( cl && cl == 'get_link_text' ) { + finder._link( a ); + continue; + } + + var href = a.getAttribute( 'href' ); + if ( href == null ) + continue; + + if ( finder._check_support( href ) ) { + a.setAttribute( 'class', + cl == null ? 'get_link' : cl + ' get_link' ); + finder._link( a ); + } else if ( finder.page_supported ) { + var m = href.match( /^[a-zA-Z0-9]+:/ ); + if ( !m || m.length < 1 ) { + if ( href.indexOf( "/" ) == 0 ) { + m = document.location.href.match( /^(.*?\/\/.*?)\// ); + href = m[ 1 ] + href; + } else { + m = document.location.href.match( /^(.*?\/\/.*\/)/ ); + href = m[ 1 ] + href; + } + a.setAttribute( 'class', + cl == null ? 'get_link' : cl + ' get_link' ); + a.setAttribute( 'href', href ); + finder._link( a ); + } + } + } + }, + _end: function () + { + finder._a_i = 0; + finder._a_nodes = null; + if ( finder.page_supported == 1 ) + menu.open(); + }, + _link: function ( a ) + { + if ( finder.links.length == 0 ) + menu.init(); + + finder.links.push( a ); + }, + _check_support: function ( href ) + { + var m = href.match( /http:\/\/.*?([a-z0-9-]+\.[a-z]{2,3})\// ); + if ( m && m.length ) { + var s = supported2[ m[1] ]; + if ( s ) + return s; + + var m = href.match( /http:\/\/.*?([a-z0-9-]+\.[a-z0-9-]+\.[a-z]{2,3})\// ); + if ( m && m.length ) { + s = supported3[ m[1] ]; + return s; + } + } + + return 0; + }, + _click: function ( ev ) + { + ev.stopPropagation(); + ev.preventDefault(); + + var get = server + "add?links=" + escape( this.getAttribute( 'href' ) ) + + "&comment=" + escape( "source: " + document.location.href ); + try { + GM_openInTab( get ); + } catch ( e ) { + window.open( get, "_blank" ) + } + } +}; /* }}} */ + +var selection = { /* {{{ */ + init: function () + { + document.addEventListener( 'mouseup', selection._check_ev, false ); + document.addEventListener( 'keyup', selection._check_ev, false ); + }, + get: function () + { + var sel = window.getSelection(); + var links = []; + if ( sel.isCollapsed === true ) + return links; + var srclinks = finder.links; + var len = srclinks.length; + for ( var i = 0; i < len; i++ ) { + if ( sel.containsNode( srclinks[ i ], true ) ) + links.push( srclinks[ i ] ); + } + + return links; + }, + _check_ev: function ( ev ) + { + if ( menu.manual_open ) + async( menu.open ); + else + async( selection._check ); + }, + _check: function () + { + var l = selection.get(); + + if ( l.length ) + menu.open(); + else + menu.close(); + } +}; /* }}} */ + +var menu = { /* {{{ */ + _interval: null, // toggling interval + _opened: false, // is menu opened ? + _move: 10, // opening/closing movement + _width: 0, // actual menu width + _box: null, // container node + _initialized: false, // is menu shown ? + manual_open: false, + init: function () + { + if ( menu._initialized ) + return; + menu._initialized = true; + + var css = getCss(); + try { + GM_addStyle( css ); + } catch ( e ) { + var cssEl = el( 'link', { rel: 'stylesheet', type: 'text/css', + href: 'data:text/css,' + encodeURIComponent( css ) } ); + var head; + if ( head = document.getElementsByTagName('head')[0] ) { + head.appendChild( cssEl ); + } else { + var doc = document.documentElement; + doc.insertBefore( cssEl, doc.firstChild ); + } + } + + var body = document.getElementsByTagName( 'body' )[0]; + + menu._box = el( 'div', { id: 'rsget_pl' } ); + var button = el( 'span' ); + menu._box.appendChild( button ); + + body.appendChild( menu._box ); + + menu._box.addEventListener( 'DOMActivate', stop_propagation, false ); + menu._box.addEventListener( 'click', stop_propagation, false ); + button.addEventListener( 'DOMActivate', menu._toggle_ev, false ); + button.addEventListener( 'click', menu._toggle_ev, false ); + window.addEventListener( 'scroll', menu._update_position, false ); + + async( selection.init ); + async( menu._update_position ); + }, + _toggle_ev: function ( ev ) + { + ev.stopPropagation(); + ev.preventDefault(); + async( menu._toggle ); + }, + _toggle: function () + { + if ( menu._opened ) { + menu.manual_open = false; + menu.close(); + } else { + menu.manual_open = true; + menu.open(); + } + }, + open: function () + { + menu.init(); + + var rm = menu._box.lastChild; + if ( rm.nodeName == 'DIV' ) + menu._box.removeChild( rm ); + + var div = el( 'div' ); + var ul = el( 'ul' ); + + if ( finder.page_supported ) { + ul.appendChild( menu._li_form( + [ document.location.href ], + window.top.location.href, + "add this page to rsget.pl" + ) ); + } + if ( finder.links.length ) { + ul.appendChild( menu._li_form( + finder.links, + document.location.href, + "add the only link to rsget.pl", + "add all %d links to rsget.pl" + ) ); + + var l = selection.get(); + if ( l.length ) + ul.appendChild( menu._li_form( + l, + document.location.href, + "add selected link to rsget.pl", + "add %d selected links to rsget.pl" + ) ); + } + + div.appendChild( ul ); + menu._box.appendChild( div ); + + if ( menu._opened ) + return; + menu._move = +10; + if ( ! menu._interval ) + menu._interval = window.setInterval( menu._slide, 20 ); + menu._opened = true; + }, + close: function () + { + if ( ! menu._opened || menu.manual_open ) + return; + menu._move = -10; + if ( ! menu._interval ) + menu._interval = window.setInterval( menu._slide, 20 ); + menu._opened = false; + }, + _slide: function () + { + menu._width += menu._move; + if ( menu._move > 0 ) { + if ( menu._width >= 250 ) { + menu._width = 250; + window.clearInterval( menu._interval ); + menu._interval = null; + } + } else { + if ( menu._width <= 0 ) { + menu._width = 0; + window.clearInterval( menu._interval ); + menu._interval = null; + + var rm = menu._box.lastChild; + if ( rm.nodeName == 'DIV' ) + menu._box.removeChild( rm ); + } + } + + menu._box.style.width = ( 16 + menu._width ) + "px"; + menu._box.style.opacity = 0.2 + menu._width * 0.003; + }, + _update_position: function ( ev ) + { + var y = window.pageYOffset || document.documentElement.scrollTop || 0; + menu._box.style.top = ( y + 100 ) + "px"; + }, + _li_form: function ( links, source, text1, textN ) + { + var ltext = links.join( "\n" ); + var text = links.length == 1 ? text1 : textN.replace( /%d/, links.length ); + + var form = el( 'form', { action: server + "add#cnt_" + cnt(), + method: 'POST', target: '_blank' } ); + + form.appendChild( el( 'input', { type: 'hidden', + name: 'links', value: ltext } ) ); + form.appendChild( el( 'input', { type: 'hidden', + name: 'comment', value: "source: " + source } ) ); + form.appendChild( el( 'input', { type: 'submit', value: text } ) ); + + var li = el( 'li' ); + li.appendChild( form ); + + return li; + } +}; /* }}} */ + +function getCss() /* {{{ */ +{ + var png_hook = 'url(data:image/png;base64,' + + 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAAAXNSR0IArs4c6QAAAxVJREFUSMe9' + + 'lM9rFGcYxz/vZjbJxrWMeCjehlzMQdJAcijoRWRvxbOgsDc39paDRNmCJTXI/AHC5LinHARPHoQh' + + 'IJU9GTFYlMTDMhQstmXjJDtxdmdn3rcH39nOjLHuofiF4WWe98fzfJ/n+zxizTDKF9fWyks3bshp' + + '0yRFFAS4N2+y7ThCm9JV3VFKARJQ+gMQ3pMnpc3Ll1XU6+X2pk2TxosXmJZFARPG/LVrUxdu3/4G' + + 'qABlYAIQHdct7bRa6H8JlABMy0r0f5xdoyAQz+7fF1GvB5CekUIItbS8rLRzlXGufM+LjO9XVgzg' + + 'BHAKmAEM3/PEVrNJHIa5cIUQnLtyRWXYjVh2XJc3jx6NHtcZk9UzZ0qLjYbM2AGGURB027b9h/Ht' + + '/LwADGAKmIqCwGjbtuju7mYvCIDTc3MsNhoUUo/veWw1m8T9fj7gUonF69eLqVfA+47rvt9ptUKj' + + 'UF/RcV2x02rxscwjO0alwqX19fQxkd17vrFBd2+vWF9Onz3Ld/V60dz3Pe/vrWbz4KcwlKVsakZM' + + 'jkn9Qr3ObK32iRPf89h2HJSUOXsh4BQS6D7f2HjX3duLSYX1RSZzc5xfXWWyWs3ZoyCgbdv0ff+T' + + 'O8cErIAD3/PebjvOhztSKnTtlVak2nYcNSYTUuHpTslh2jSLAUugFwXB723b3r/l+yP9GJqJaNu2' + + '6Pu+GIMJXyrX0vIymbaLgB7wtuO6f/3gOHGOYIaJKvTpcUzGKpduuwQIgQPgXRQE+0/v3YuL57M9' + + 'n1N2gck4wpNGpaIura8PTcsaAEfAvv6Opk6eTDgGxq9379Ld3RWfYVIUUSo81f9Yx5RpAkQL9fpg' + + 'tlY7AgLgUGdgKIRQfAbG6wcPUP/O9hhQGeGlMz11knRcN9lptdKzMTAEwmnTHJxfXQ0nq9WBrrv8' + + 'L8ejAAaHhwnQ10IZABML9XoyW6tJ/Xik7dGfL18OH6+sxHEYxpl5n+h5L03LUuM4zYn2l8nJchJF' + + 'hp4JojwzI3589QrTsrLMJSAfXr2qftvcBKX4uSDY/xVKKaGUEnwF/AP+JrSClDIuFgAAAABJRU5E' + + 'rkJggg==' + + ')'; + + var png_rsget_red = 'url(data:image/png;base64,' + + 'iVBORw0KGgoAAAANSUhEUgAAABAAAABACAMAAAAkowekAAAAAXNSR0IArs4c6QAAAGBQTFRFdxAP' + + 'fBYYgBsggCMihCclhzAvizUyjjg6kEA/l0pLm1FRnVlXo19ho2VkqmtqrHNysHp7uY2Lw52fyaan' + + '0ba018PF2czM3tHS5NnZ5eDe6ubk6Orn8Orp6+7q7e/r8PLvnUVSCwAAAfFJREFUOMtNU4m2qyAQ' + + 'G9zrdsW2VKWE///LN4vax+nCic6QSQIlZABJv/ybiHeR/zOigIAAaBtbyYAEOpfUKDDx6p0bY+KH' + + '0oj7pvSmxXokqZSTmlJ7aG8+IX3b+tBjGdnDnvfXR97LJBQG2kJJ9NQS7oe6TX/kqJP2Qiy5AQ/a' + + 'OqdAToiuR1lhcNwk67E1PahHW8l4OsvCtNedMSMGHH703yNsCkQdOjyfISphwstvRy+z9rtoROjK' + + 'Y7TpRzmAwGc6Wt5vpgadhQaUtQzA04pAqSr3xW0ZW7EogJGq0RXDWLjJVA+Obk2NWJgu1XErpj7d' + + 'vogiYV1DypdR8TtJh+l7O+etp8fpLVryE62uUedEFNexJOidCiRDs6YLfZsiXz3qJi3UsGL5MpsC' + + 'q1iErOMz8PYv380fU8z4iQGaI34jWriAsb2JHX7mVdI8n8DwE0CcY2+p4uEdiQBqNjXSpuOH0Uo4' + + 'CCwHAxCA7Q8fIf1c72k1c9l2SmyeV2PFNaSoJCHrRwFU1ZQzv5HyGRhRXBPNgaWMnwVaDrWo1a/d' + + 'BvotA+RuuHIYaw7MKTI4DkhH8weLNjQwiIMFRuokUsE7p/mQA+/QXXHYH2csmRBZOCQOJrX2yMLc' + + '6FtgzkQJX7uV/5G1Szj91jn+FTztkc+tWM/bfzTpViSa6M6aAAAAAElFTkSuQmCC' + + ')'; + <<diff output has been trimmed to 500 lines, 103 line(s) remained.>> _______________________________________________ pld-cvs-commit mailing list [email protected] http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit
