Author: sparky Date: Thu Aug 27 15:37:58 2009 New Revision: 10497 Added: toys/rsget.pl/rsget.pl.user.js Log: - greasemonkey script to quickly add links to rsget.pl
Added: toys/rsget.pl/rsget.pl.user.js ============================================================================== --- (empty file) +++ toys/rsget.pl/rsget.pl.user.js Thu Aug 27 15:37:58 2009 @@ -0,0 +1,141 @@ +// ==UserScript== +// @name rsget.pl helper +// @namespace http://rsget.pl/ +// @description quickly add links to rsget.pl +// @include http://*.*/* +// ==/UserScript== + +(function(){ + + var hostname = document.location.hostname; + function add_links( links, node ) + { + if ( ! node.nodeName ) + return; + var text; + if ( node.nodeName == 'A' ) { + text = node.getAttribute( 'href' ); + } else if ( node.nodeName == '#text' ) { + text = node.nodeValue; + } + if ( ! text ) + return; + var m = text.match( /http:\/\/\S+\/[\w#!:.?+=&%...@!\-\/]+/g ); + if ( !m ) + return; + for ( var i = 0; i < m.length; i++ ) { + var href = m[ i ]; + if ( href.match( "^http://[^/]*" + hostname + "(:\d+)?/" ) ) + continue; + var found = 0; + for ( var j = 0; j < links.length; j++ ) { + if ( links[ j ] == href ) { + found = 1; + break; + } + } + if ( ! found ) + links.push( href ); + } + } + + function crawl_nodes( links, node, end ) + { + while ( node != end ) { + if ( node.firstChild ) { + node = node.firstChild; + } else if ( node.nextSibling ) { + node = node.nextSibling; + } else { + do { + node = node.parentNode; + if ( node == end ) + return; + } while ( ! node.nextSibling ); + node = node.nextSibling; + } + if ( node == end ) + return; + add_links( links, node ); + } + } + + function fake_text( text ) + { + return { nodeName: '#text', nodeValue: text }; + } + + function extract_links() + { + var range; + try { + range = window.getSelection().getRangeAt( 0 ); + } catch ( e ) {} + var links = new Array; + + if ( !range || range.collapsed ) { + crawl_nodes( links, document.body, document ); + } else { + var node = range.startContainer; + var end = range.endContainer; + + if ( node == end ) { + add_links( links, fake_text( node.nodeValue.substring( range.startOffset, range.endOffset ) ) ); + } else { + if ( node.nodeValue ) + add_links( links, fake_text( node.nodeValue.substr( range.startOffset ) ) ); + crawl_nodes( links, node, end ); + if ( end.nodeValue ) + add_links( links, fake_text( end.nodeValue.substr( 0, range.endOffset ) ) ); + } + } + send( "links=" + escape( links.join( "\n" ) ) ); + } + GM_registerMenuCommand("Add links to rsget.pl", extract_links); + + function add_comment() + { + var range; + var sel; + try { + sel = window.getSelection(); + range = sel.getRangeAt( 0 ); + } catch ( e ) {} + var links = new Array; + + if ( !range || range.collapsed ) { + alert( "Can create comments only from selection" ); + return; + } + send( "comment=" + escape( sel ) ); + } + GM_registerMenuCommand("Add comments to rsget.pl", add_comment); + + + function onload( req ) + { + GM_log( req.responseText ); + } + + function onerror( req ) + { + } + + function send( post ) + { + var server = GM_getValue( "server", "http://localhost:8080/" ); + GM_setValue( "server", server ); + var uri = server + "add"; + + GM_xmlhttpRequest( { + method: "POST", + url: uri, + headers: { 'Content-type': 'application/x-www-form-urlencoded' }, + data: post, + onload: onload, + onerror: onerror + } ); + } +}()); + +// vim: ts=4:sw=4 _______________________________________________ pld-cvs-commit mailing list [email protected] http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit
