aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsuVene2008-11-30 21:16:56 +0000
committersuVene2008-11-30 21:16:56 +0000
commit012007ff0648c2b486e17b5a645e6c3d85df9e92 (patch)
treecb9c9164756f7e6a2b7ba0d5a61b2ea61e8eacec
parentbe36e7955cfa61aebf65aa70b680f2f4fc87f9c4 (diff)
downloadvimperator-plugins-012007ff0648c2b486e17b5a645e6c3d85df9e92.tar.bz2
*複数リクエスト時のechoが2.0preでうまく出力できないのでbufferして1度で出力。
*XPathがうまく取れないことがあるので、DocumentFragmentを通すのをやめ。 git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/branches/1.2@25491 d0d07461-0603-4401-acd4-de1884942a52
-rw-r--r--multi_requester.js61
1 files changed, 35 insertions, 26 deletions
diff --git a/multi_requester.js b/multi_requester.js
index f2a31a1..a1b4301 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.1
+ * @version 0.3.3
* @minVersion 1.2
* @maxVersion 1.2
* Last Change: 01-Dec-2008.
@@ -79,7 +79,7 @@ var SITEINFO = [
xpath: 'id("incontents")/*[@class="ch04" or @class="fs14" or contains(@class, "diclst")]',
srcEncode: 'EUC-JP',
urlEncode: 'UTF-8'
- }
+ },
];
var mergedSiteinfo = {};
@@ -365,26 +365,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);
@@ -465,12 +446,21 @@ var DataAccess = {
// main controller.
var MultiRequester = {
+ doProcess: false,
+ requestCount: 0,
+ echoList: [],
name: DataAccess.getCommand(),
description: 'request, and display to the buffer',
cmdAction: function(args, bang, count) {
+ if (MultiRequester.doProcess) return;
+
var parsedArgs = this.parseArgs(args);
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++) {
@@ -505,9 +495,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) {
@@ -549,7 +541,14 @@ var MultiRequester = {
},
onSuccess: function(res) {
+ if (!MultiRequester.doProcess) {
+ MultiRequester.requestCount = 0;
+ return;
+ }
+
var url, escapedUrl, xpath, doc, html;
+ $U.log('success!!!' + res.request.url);
+ MultiRequester.requestCount--;
try {
@@ -565,16 +564,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);
}
};