diff options
Diffstat (limited to 'multi_requester.js')
-rw-r--r-- | multi_requester.js | 144 |
1 files changed, 81 insertions, 63 deletions
diff --git a/multi_requester.js b/multi_requester.js index fdd6994..6096c9d 100644 --- a/multi_requester.js +++ b/multi_requester.js @@ -4,9 +4,10 @@ * @description request, and the result is displayed to the buffer. * @description-ja リクエストの結果をバッファに出力する。 * @author suVene suvene@zeromemory.info - * @version 0.2.4 + * @version 0.3.0 * @minVersion 2.0pre * @maxVersion 2.0pre + * Last Change: 29-Nov-2008. * ==/VimperatorPlugin== * * Usage: @@ -15,9 +16,11 @@ * ! create new tab. * ANY_TEXT your input text * - * :mr alc ANY_TEXT -> request by the input text, and display to the buffer. - * :mr! goo {window.selection} -> request by the selected text, and display to the new tab. + * :mr alc[,goo,any1,any2…] ANY_TEXT -> request by the input text, and display to the buffer. + * :mr! goo[,any1,any2,…] {window.selection} -> request by the selected text, and display to the new tab. * + * other siteinfo by wedata. + * @see http://wedata.net/databases/Multi%20Requester/items * * CUSTOMIZE .vimperatorrc: * @@ -42,9 +45,6 @@ * ]; * EOM * - * other siteinfo by wedata. - * @see http://wedata.net/databases/Multi%20Requester/items - * * [MAPPINGS] * ex.) * javascript <<EOM @@ -61,7 +61,6 @@ * * TODO: * - wedata local cache. - * - 複数リクエスト対応。 */ (function() { @@ -80,12 +79,6 @@ var SITEINFO = [ xpath: 'id("incontents")/*[@class="ch04" or @class="fs14" or contains(@class, "diclst")]', srcEncode: 'EUC-JP', urlEncode: 'UTF-8' - }, - { - name: 'metalarchive-band', - url: 'http://www.metal-archives.com/search.php?string=%s&type=band', - description: 'Metal Archive (band)', - xpath: '//table', } ]; @@ -94,10 +87,10 @@ var mergedSiteinfo = {}; // utilities var $U = { log: function(msg, level) { - liberator.log(msg, (level || 9)); + liberator.log(msg, (level || 8)); }, debug: function(msg) { - this.log(msg, 9); + this.log(msg, 8); liberator.echo(msg); }, echo: function(msg, flg) { @@ -168,12 +161,16 @@ var CommandRegister = { cmdClass.description, $U.bind(cmdClass, cmdClass.cmdAction), { - completer: cmdClass.cmdCompleter || function(context, arg, bang) { - var allSuggestions = siteinfo.map(function(s) [s.name, s.description]); + completer: cmdClass.cmdCompleter || function(context, arg) { context.title = ['Name', 'Descprition']; - context.completions = - context.filter ? allSuggestions.filter(function(s) s[0].indexOf(context.filter) == 0) - : allSuggestions; + let filters = context.filter.split(','); + let prefilters = filters.slice(0, filters.length - 1); + let prefilter = !prefilters.length ? '' : prefilters.join(',') + ','; + let subfilters = siteinfo.filter(function(s) prefilters.every(function(p) s.name != p)); + var allSuggestions = subfilters.map(function(s) [prefilter + s.name, s.description]); + context.completions = context.filter + ? allSuggestions.filter(function(s) s[0].indexOf(context.filter) == 0) + : allSuggestions; }, options: cmdClass.cmdOptions, argCount: cmdClass.argCount || undefined, @@ -471,62 +468,82 @@ var DataAccess = { var MultiRequester = { name: DataAccess.getCommand(), description: 'request, and display to the buffer', - cmdAction: function(args, special, count) { + cmdAction: function(args) { + + var argstr = args.string; + var bang = args.bang; + var count = args.count; - args = args.string; - var parsedArgs = this.parseArgs(args); - if (!parsedArgs || !parsedArgs.siteinfo) { return; } // do nothing + var parsedArgs = this.parseArgs(argstr); + if (parsedArgs.count == 0) { return; } // do nothing var siteinfo = parsedArgs.siteinfo; - var url = siteinfo.url; - // see: http://fifnel.com/2008/11/14/1980/ - var srcEncode = siteinfo.srcEncode || 'UTF-8'; - var urlEncode = siteinfo.urlEncode || srcEncode; - - var idxRepStr = url.indexOf('%s'); - if (idxRepStr > -1 && !parsedArgs.str) return; - - // via. lookupDictionary.js - var ttbu = Components.classes['@mozilla.org/intl/texttosuburi;1'] - .getService(Components.interfaces.nsITextToSubURI); - url = url.replace(/%s/g, ttbu.ConvertAndEscape(urlEncode, parsedArgs.str)); - $U.log(url + '::' + siteinfo.xpath); - - if (special) { - liberator.open(url, liberator.NEW_TAB); - } else { - let req = new Request(url, null, { - encoding: srcEncode, - siteinfo: siteinfo, - args: { - args: args, - special: special, - count: count - } - }); - req.addEventListener('onException', $U.bind(this, this.onException)); - req.addEventListener('onSuccess', $U.bind(this, this.onSuccess)); - req.addEventListener('onFailure', $U.bind(this, this.onFailure)); - req.get(); + for (let i = 0, len = parsedArgs.count; i < len; i++) { - $U.echo('Loading ' + parsedArgs.name + ' ...', commandline.FORCE_SINGLELINE); - } + let info = siteinfo[i]; + var url = info.url; + // see: http://fifnel.com/2008/11/14/1980/ + var srcEncode = info.srcEncode || 'UTF-8'; + var urlEncode = info.urlEncode || srcEncode; + + var idxRepStr = url.indexOf('%s'); + if (idxRepStr > -1 && !parsedArgs.str) continue; + + // via. lookupDictionary.js + var ttbu = Components.classes['@mozilla.org/intl/texttosuburi;1'] + .getService(Components.interfaces.nsITextToSubURI); + url = url.replace(/%s/g, ttbu.ConvertAndEscape(urlEncode, parsedArgs.str)); + $U.log(url + '[' + srcEncode + '][' + urlEncode + ']::' + info.xpath); + + if (bang) { + liberator.open(url, liberator.NEW_TAB); + } else { + let req = new Request(url, null, { + encoding: srcEncode, + siteinfo: info, + args: { + args: args, + bang: bang, + count: count + } + }); + req.addEventListener('onException', $U.bind(this, this.onException)); + req.addEventListener('onSuccess', $U.bind(this, this.onSuccess)); + req.addEventListener('onFailure', $U.bind(this, this.onFailure)); + req.get(); + } + $U.echo('Loading ' + parsedArgs.names + ' ...', commandline.FORCE_SINGLELINE); + } }, - // return {name: '', siteinfo: {}, str: ''} or null + // return {names: '', str: '', count: 0, siteinfo: [{}]} parseArgs: function(args) { - if (!args) return null; + var self = this; + var ret = {}; + ret.names = ''; + ret.str = ''; + ret.count = 0; + ret.siteinfo = []; + + if (!args) return ret; var arguments = args.split(/ +/); var sel = $U.getSelectedString(); - if (arguments.length < 1) return null; + if (arguments.length < 1) return ret; + + ret.names = arguments.shift(); + ret.str = (arguments.length < 1 ? sel : arguments.join()).replace(/[\n\r]+/g, ''); - var siteName = arguments.shift(); - var str = (arguments.length < 1 ? sel : arguments.join()).replace(/[\n\r]+/g, ''); - var siteinfo = this.getSite(siteName); + ret.names.split(',').forEach(function(name) { + let site = self.getSite(name); + if (site) { + ret.count++; + ret.siteinfo.push(site); + } + }); - return {name: siteName, siteinfo: siteinfo, str: str}; + return ret; }, getSite: function(name) { if (!name) this.siteinfo[0]; @@ -539,6 +556,7 @@ var MultiRequester = { onSuccess: function(res) { var url, escapedUrl, xpath, doc, html; + $U.debug('success!!!' + res.request.url); try { |