Show
Ignore:
Timestamp:
12/01/08 06:16:56 (6 weeks ago)
Author:
suVene
Message:

*複数リクエスト時のechoが2.0preでうまく出力できないのでbufferして1度で出力。
*XPathがうまく取れないことがあるので、DocumentFragmentを通すのをやめ。

Location:
lang/javascript/vimperator-plugins
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/javascript/vimperator-plugins/branches/1.2/multi_requester.js

    r25486 r25491  
    55 * @description-ja   リクエストの結果をバッファに出力する。 
    66 * @author           suVene suvene@zeromemory.info 
    7  * @version          0.3.1 
     7 * @version          0.3.3 
    88 * @minVersion       1.2 
    99 * @maxVersion       1.2 
     
    8080        srcEncode:   'EUC-JP', 
    8181        urlEncode:   'UTF-8' 
    82     } 
     82    }, 
    8383]; 
    8484 
     
    366366        return ret; 
    367367    }, 
    368     _createHTMLDocument: function(str, xmlns) { 
    369         //str = '<html><title>hoge</title><body><span id="resultList">fuga</span></body></html>'; 
    370         var doc = (new DOMParser).parseFromString( 
    371             '<root' + (xmlns ? ' xmlns="' + xmlns + '"' : '') + '>' + str + '</root>', 
    372             'application/xml'); 
    373         var imported = document.importNode(doc.documentElement, true); 
    374         var range = document.createRange(); 
    375         range.selectNodeContents(imported); 
    376         var fragment = range.extractContents(); 
    377         range.detach(); 
    378         var dom = fragment.lastChild; 
    379         if (dom.tagName == 'parserError' || dom.namespaceURI == 'http://www.mozilla.org/newlayout/xml/parsererror.xml') { 
    380             $U.log('retry parsing.'); 
    381             return this._createHTMLDocument2(str); 
    382         } else { 
    383             $U.log('return document fragment'); 
    384             return fragment.firstChild; 
    385         } 
    386     }, 
    387     _createHTMLDocument2: function(str) { 
     368    _createHTMLDocument: function(str) { 
    388369        var htmlFragment = document.implementation.createDocument(null, 'html', null); 
    389370        var range = document.createRange(); 
     
    466447// main controller. 
    467448var MultiRequester = { 
     449    doProcess: false, 
     450    requestCount: 0, 
     451    echoList: [], 
    468452    name: DataAccess.getCommand(), 
    469453    description: 'request, and display to the buffer', 
    470454    cmdAction: function(args, bang, count) { 
    471455 
     456        if (MultiRequester.doProcess) return; 
     457 
    472458        var parsedArgs = this.parseArgs(args); 
    473459        if (parsedArgs.count == 0) { return; } // do nothing 
     460 
     461        MultiRequester.doProcess = true; 
     462        MultiRequester.requestCount = 0; 
     463        MultiRequester.echoList = []; 
    474464        var siteinfo = parsedArgs.siteinfo; 
    475465        for (let i = 0, len = parsedArgs.count; i < len; i++) { 
     
    506496                req.addEventListener('onFailure', $U.bind(this, this.onFailure)); 
    507497                req.get(); 
    508             } 
    509             $U.echo('Loading ' + parsedArgs.names + ' ...', commandline.FORCE_SINGLELINE); 
    510          } 
     498                MultiRequester.requestCount++; 
     499            } 
     500        } 
     501 
     502        $U.echo('Loading ' + parsedArgs.names + ' ...', commandline.FORCE_SINGLELINE); 
    511503    }, 
    512504    // return {names: '', str: '', count: 0, siteinfo: [{}]} 
     
    550542    onSuccess: function(res) { 
    551543 
     544        if (!MultiRequester.doProcess) { 
     545            MultiRequester.requestCount = 0; 
     546            return; 
     547        } 
     548 
    552549        var url, escapedUrl, xpath, doc, html; 
     550        $U.log('success!!!' + res.request.url); 
     551        MultiRequester.requestCount--; 
    553552 
    554553        try { 
     
    566565                   (new XMLSerializer()).serializeToString(doc).replace(/<[^>]+>/g, function(all) all.toLowerCase()) + 
    567566                   '</div>'; 
    568             try { $U.echo(new XMLList(html)); } catch (e) { $U.echo(html); } 
     567 
     568            MultiRequester.echoList.push(html); 
     569 
     570            if (MultiRequester.requestCount == 0) { 
     571                MultiRequester.doProcess = false; 
     572                let html = MultiRequester.echoList.join(''); 
     573                try { $U.echo(new XMLList(html)); } catch (e) { $U.echo(html); } 
     574            } 
    569575 
    570576        } catch (e) { 
    571             $U.echoerr('error!!: ' + e); 
     577            $U.log('error!!: ' + e); 
     578            MultiRequester.echoList.push('error!!:' + e); 
    572579        } 
    573580    }, 
    574581    onFailure: function(res) { 
     582        MultiRequester.doProcess = false; 
    575583        $U.echoerr('request failure!!: ' + res.statusText); 
    576584    }, 
    577585    onException: function(e) { 
     586        MultiRequester.doProcess = false; 
    578587        $U.echoerr('exception!!: ' + e); 
    579588    } 
  • lang/javascript/vimperator-plugins/trunk/multi_requester.js

    r25485 r25491  
    55 * @description-ja   リクエストの結果をバッファに出力する。 
    66 * @author           suVene suvene@zeromemory.info 
    7  * @version          0.3.2 
     7 * @version          0.3.3 
    88 * @minVersion       2.0pre 
    99 * @maxVersion       2.0pre 
     
    368368        return ret; 
    369369    }, 
    370     _createHTMLDocument: function(str, xmlns) { 
    371         //str = '<html><title>hoge</title><body><span id="resultList">fuga</span></body></html>'; 
    372         var doc = (new DOMParser).parseFromString( 
    373             '<root' + (xmlns ? ' xmlns="' + xmlns + '"' : '') + '>' + str + '</root>', 
    374             'application/xml'); 
    375         var imported = document.importNode(doc.documentElement, true); 
    376         var range = document.createRange(); 
    377         range.selectNodeContents(imported); 
    378         var fragment = range.extractContents(); 
    379         range.detach(); 
    380         var dom = fragment.lastChild; 
    381         if (dom.tagName == 'parserError' || dom.namespaceURI == 'http://www.mozilla.org/newlayout/xml/parsererror.xml') { 
    382             $U.log('retry parsing.'); 
    383             return this._createHTMLDocument2(str); 
    384         } else { 
    385             $U.log('return document fragment'); 
    386             return fragment.firstChild; 
    387         } 
    388     }, 
    389     _createHTMLDocument2: function(str) { 
     370    _createHTMLDocument: function(str) { 
    390371        var htmlFragment = document.implementation.createDocument(null, 'html', null); 
    391372        var range = document.createRange(); 
     
    468449// main controller. 
    469450var MultiRequester = { 
     451    doProcess: false, 
     452    requestCount: 0, 
     453    echoList: [], 
    470454    name: DataAccess.getCommand(), 
    471455    description: 'request, and display to the buffer', 
    472456    cmdAction: function(args) { 
    473457 
     458        if (MultiRequester.doProcess) return; 
     459 
    474460        var argstr = args.string; 
    475461        var bang = args.bang; 
     
    479465        if (parsedArgs.count == 0) { return; } // do nothing 
    480466 
     467        MultiRequester.doProcess = true; 
     468        MultiRequester.requestCount = 0; 
     469        MultiRequester.echoList = []; 
    481470        var siteinfo = parsedArgs.siteinfo; 
    482471        for (let i = 0, len = parsedArgs.count; i < len; i++) { 
     
    513502                req.addEventListener('onFailure', $U.bind(this, this.onFailure)); 
    514503                req.get(); 
    515             } 
    516             $U.echo('Loading ' + parsedArgs.names + ' ...', commandline.FORCE_SINGLELINE); 
    517          } 
     504                MultiRequester.requestCount++; 
     505            } 
     506        } 
     507 
     508        $U.echo('Loading ' + parsedArgs.names + ' ...', commandline.FORCE_SINGLELINE); 
    518509    }, 
    519510    // return {names: '', str: '', count: 0, siteinfo: [{}]} 
     
    557548    onSuccess: function(res) { 
    558549 
     550        if (!MultiRequester.doProcess) { 
     551            MultiRequester.requestCount = 0; 
     552            return; 
     553        } 
     554 
    559555        var url, escapedUrl, xpath, doc, html; 
    560         $U.debug('success!!!' + res.request.url); 
     556        $U.log('success!!!' + res.request.url); 
     557        MultiRequester.requestCount--; 
    561558 
    562559        try { 
     
    574571                   (new XMLSerializer()).serializeToString(doc).replace(/<[^>]+>/g, function(all) all.toLowerCase()) + 
    575572                   '</div>'; 
    576             try { $U.echo(new XMLList(html)); } catch (e) { $U.echo(html); } 
     573 
     574            MultiRequester.echoList.push(html); 
     575 
     576            if (MultiRequester.requestCount == 0) { 
     577                MultiRequester.doProcess = false; 
     578                let html = MultiRequester.echoList.join(''); 
     579                try { $U.echo(new XMLList(html)); } catch (e) { $U.echo(html); } 
     580            } 
    577581 
    578582        } catch (e) { 
    579             $U.echoerr('error!!: ' + e); 
     583            $U.log('error!!: ' + e); 
     584            MultiRequester.echoList.push('error!!:' + e); 
    580585        } 
    581586    }, 
    582587    onFailure: function(res) { 
     588        MultiRequester.doProcess = false; 
    583589        $U.echoerr('request failure!!: ' + res.statusText); 
    584590    }, 
    585591    onException: function(e) { 
     592        MultiRequester.doProcess = false; 
    586593        $U.echoerr('exception!!: ' + e); 
    587594    }