aboutsummaryrefslogtreecommitdiffstats
path: root/multi_requester.js
diff options
context:
space:
mode:
authorsuVene2008-11-30 21:16:56 +0000
committersuVene2008-11-30 21:16:56 +0000
commit63c98a20a59cc6bb30f96c96baa83fd96cd10339 (patch)
tree8fe74d31991f8e620545a39d200f46420124ab7a /multi_requester.js
parentb8fe24a3d6e9f0536e3f589f4bb89f1d0120dbb6 (diff)
downloadvimperator-plugins-63c98a20a59cc6bb30f96c96baa83fd96cd10339.tar.bz2
*複数リクエスト時のechoが2.0preでうまく出力できないのでbufferして1度で出力。
*XPathがうまく取れないことがあるので、DocumentFragmentを通すのをやめ。 git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@25491 d0d07461-0603-4401-acd4-de1884942a52
Diffstat (limited to 'multi_requester.js')
-rw-r--r--multi_requester.js59
1 files changed, 33 insertions, 26 deletions
diff --git a/multi_requester.js b/multi_requester.js
index 74ebbc0..8a91c5d 100644
--- a/multi_requester.js
+++ b/multi_requester.js
@@ -4,7 +4,7 @@
* @description request, and the result is displayed to the buffer.
* @description-ja リクエストの結果をバッファに出力する。
* @author suVene suvene@zeromemory.info
- * @version 0.3.2
+ * @version 0.3.3
* @minVersion 2.0pre
* @maxVersion 2.0pre
* Last Change: 01-Dec-2008.
@@ -367,26 +367,7 @@ Response.prototype = {
}
return ret;
},
- _createHTMLDocument: function(str, xmlns) {
- //str = '<html><title>hoge</title><body><span id="resultList">fuga</span></body></html>';
- var doc = (new DOMParser).parseFromString(
- '<root' + (xmlns ? ' xmlns="' + xmlns + '"' : '') + '>' + str + '</root>',
- 'application/xml');
- var imported = document.importNode(doc.documentElement, true);
- var range = document.createRange();
- range.selectNodeContents(imported);
- var fragment = range.extractContents();
- range.detach();
- var dom = fragment.lastChild;
- if (dom.tagName == 'parserError' || dom.namespaceURI == 'http://www.mozilla.org/newlayout/xml/parsererror.xml') {
- $U.log('retry parsing.');
- return this._createHTMLDocument2(str);
- } else {
- $U.log('return document fragment');
- return fragment.firstChild;
- }
- },
- _createHTMLDocument2: function(str) {
+ _createHTMLDocument: function(str) {
var htmlFragment = document.implementation.createDocument(null, 'html', null);
var range = document.createRange();
range.setStartAfter(window.content.document.body);
@@ -467,10 +448,15 @@ var DataAccess = {
// main controller.
var MultiRequester = {
+ doProcess: false,
+ requestCount: 0,
+ echoList: [],
name: DataAccess.getCommand(),
description: 'request, and display to the buffer',
cmdAction: function(args) {
+ if (MultiRequester.doProcess) return;
+
var argstr = args.string;
var bang = args.bang;
var count = args.count;
@@ -478,6 +464,9 @@ var MultiRequester = {
var parsedArgs = this.parseArgs(argstr);
if (parsedArgs.count == 0) { return; } // do nothing
+ MultiRequester.doProcess = true;
+ MultiRequester.requestCount = 0;
+ MultiRequester.echoList = [];
var siteinfo = parsedArgs.siteinfo;
for (let i = 0, len = parsedArgs.count; i < len; i++) {
@@ -512,9 +501,11 @@ var MultiRequester = {
req.addEventListener('onSuccess', $U.bind(this, this.onSuccess));
req.addEventListener('onFailure', $U.bind(this, this.onFailure));
req.get();
+ MultiRequester.requestCount++;
}
- $U.echo('Loading ' + parsedArgs.names + ' ...', commandline.FORCE_SINGLELINE);
- }
+ }
+
+ $U.echo('Loading ' + parsedArgs.names + ' ...', commandline.FORCE_SINGLELINE);
},
// return {names: '', str: '', count: 0, siteinfo: [{}]}
parseArgs: function(args) {
@@ -556,8 +547,14 @@ var MultiRequester = {
},
onSuccess: function(res) {
+ if (!MultiRequester.doProcess) {
+ MultiRequester.requestCount = 0;
+ return;
+ }
+
var url, escapedUrl, xpath, doc, html;
- $U.debug('success!!!' + res.request.url);
+ $U.log('success!!!' + res.request.url);
+ MultiRequester.requestCount--;
try {
@@ -573,16 +570,26 @@ var MultiRequester = {
'<a href="' + escapedUrl + '" class="hl-Title" target="_self">' + escapedUrl + '</a>' +
(new XMLSerializer()).serializeToString(doc).replace(/<[^>]+>/g, function(all) all.toLowerCase()) +
'</div>';
- try { $U.echo(new XMLList(html)); } catch (e) { $U.echo(html); }
+
+ MultiRequester.echoList.push(html);
+
+ if (MultiRequester.requestCount == 0) {
+ MultiRequester.doProcess = false;
+ let html = MultiRequester.echoList.join('');
+ try { $U.echo(new XMLList(html)); } catch (e) { $U.echo(html); }
+ }
} catch (e) {
- $U.echoerr('error!!: ' + e);
+ $U.log('error!!: ' + e);
+ MultiRequester.echoList.push('error!!:' + e);
}
},
onFailure: function(res) {
+ MultiRequester.doProcess = false;
$U.echoerr('request failure!!: ' + res.statusText);
},
onException: function(e) {
+ MultiRequester.doProcess = false;
$U.echoerr('exception!!: ' + e);
}
};