Template:Stub

From GreaseSpot Wiki
Revision as of 02:53, 7 June 2010 by 58.186.48.70 (talk)
Jump to navigationJump to search

// ==UserScript== // @name g.e-hentai.org downloader // @namespace http://g.e-hentai.org // @include http://g.e-hentai.org/* // ==/UserScript==

function parse_html(html) {

   var m;
   var out = {};
   var re_next = /<a +href="([^"]*)"[^>]*>[ \t]*<img[^>]+alt="Next"/;
   m = re_next.exec(html);
   if (m)
   {
       out.next_url = m[1];
   }
   var re_img = /<img +id="mainimg"[^>]+src="([^"]+)"/
   m = re_img.exec(html);
   if (m)
   {
       out.img_url = m[1];
   }
   var re_page = /Page ([0-9]+)\/([0-9]+)/
   m = re_page.exec(html);
   if (m)
   {
       out.current = parseInt(m[1]);
       out.total = parseInt(m[2]);
   }
   return out;

}

function build_ui() {

   var main = document.getElementById('mainimg').parentNode;
   var main2 = document.createElement('div');

main2.innerHTML='

';

   main.parentNode.replaceChild(main2,main);

} function append_output(html) {

   document.getElementById('__output__').innerHTML += html;

} function set_status(html) {

   document.getElementById('__status__').innerHTML = html;

} function do_current() {

   var current_out = unsafeWindow.__currentout__;
   if ('img_url' in current_out)
   {
       append_output('<a href="'+current_out.img_url+'">'+current_out.current+'</a>  ');
   }
   //ajax next
   do_next();
   

} function do_next() {

   var current_out = unsafeWindow.__currentout__;
   if (current_out.current < current_out.total &&
       'next_url' in current_out)
   {
       var url = current_out.next_url;
       set_status('current:'+current_out.current+'/'+current_out.total+'
fetch:'+url); function onload(resp) { if (resp.status!=200){do_error('download error:'+resp.statusText);return;} var out = parse_html(resp.responseText); //todo::handle parse error var items = []; for (x in out){items.push(x);} if (items.length<4) { //GM_log('error url:'+resp.finalUrl); //GM_log('error html:'+resp.responseText); do_error('Parse error:'+resp.responseText); return; } unsafeWindow.__currentout__ = out; do_current(); } GM_xmlhttpRequest({ method:'GET', url:url, headers:{ 'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4', 'Referer':document.location.href, 'Cookie':document.cookie }, onload:onload, onerror:do_error }); }

} function do_error(reason) {

   GM_log('do_error='+reason);
   var html = '<button id="__continue__">continue</button>
'; var txt = document.createTextNode(reason); var div = document.createElement('div'); div.appendChild(txt); set_status(html+div.innerHTML); document.getElementById('__continue__').addEventListener('click',function(e){ set_status(); do_next(); },false)

} function btn_download_click(e) {

   document.getElementById('__btn_download__').disabled = true;
   unsafeWindow.__currentout__ = parse_html(document.documentElement.innerHTML);
   build_ui();
   do_current();
   

} var tmp = document.getElementById('imgtext_1'); if (tmp) {

   var div = document.createElement('div');
   div.innerHTML = '<button id="__btn_download__">download</button>';
   tmp.parentNode.insertBefore(div,tmp);
   var btn = document.getElementById('__btn_download__');
   btn.addEventListener('click',btn_download_click,false);

}