Show
Ignore:
Timestamp:
11/29/08 07:00:13 (6 weeks ago)
Author:
suVene
Message:

*引数のサイトをカンマ区切りで同時に指定できるように対応
ex.) :mr alc,goo ANY_TEXT → 英辞朗とgoo辞書を同時に検索

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

Legend:

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

    r25005 r25308  
    55 * @description-ja   リクエストの結果をバッファに出力する。 
    66 * @author           suVene suvene@zeromemory.info 
    7  * @version          0.2.3 
     7 * @version          0.3.0 
    88 * @minVersion       1.2 
    99 * @maxVersion       1.2 
     10 * Last Change:      29-Nov-2008. 
    1011 * ==/VimperatorPlugin== 
    1112 * 
     
    1617 *     ANY_TEXT         your input text 
    1718 * 
    18  *   :mr  alc ANY_TEXT           -> request by the input text, and display to the buffer. 
    19  *   :mr! goo {window.selection} -> request by the selected text, and display to the new tab. 
    20  * 
     19 *   :mr  alc[,goo,any1,any2…] ANY_TEXT           -> request by the input text, and display to the buffer. 
     20 *   :mr! goo[,any1,any2,…]    {window.selection} -> request by the selected text, and display to the new tab. 
     21 * 
     22 *   other siteinfo by wedata. 
     23 *     @see http://wedata.net/databases/Multi%20Requester/items 
    2124 * 
    2225 * CUSTOMIZE .vimperatorrc: 
     
    4346 *   EOM 
    4447 * 
    45  *   other siteinfo by wedata. 
    46  *     @see http://wedata.net/databases/Multi%20Requester/items 
    47  * 
    4848 * [MAPPINGS] 
    4949 *   ex.) 
     
    6262 * TODO: 
    6363 *    - wedata local cache. 
    64  *    - 複数リクエスト対応。 
    6564 */ 
    6665(function() { 
     
    7372        url:         'http://eow.alc.co.jp/%s/UTF-8/', 
    7473        xpath:       'id("resultList")' 
    75      }, 
    76      { 
     74    }, 
     75    { 
    7776        name:        'goo', 
    7877        description: 'goo \u8F9E\u66F8', 
     
    8180        srcEncode:   'EUC-JP', 
    8281        urlEncode:   'UTF-8' 
    83      }, 
     82    } 
    8483]; 
    8584 
     
    8988var $U = { 
    9089    log: function(msg, level) { 
    91         liberator.log(msg, (level || 9)); 
     90        liberator.log(msg, (level || 8)); 
    9291    }, 
    9392    debug: function(msg) { 
    94         this.log(msg, 9); 
     93        this.log(msg, 8); 
    9594        liberator.echo(msg); 
    9695    }, 
     
    163162            $U.bind(cmdClass, cmdClass.cmdAction), 
    164163            { 
    165                 completer: cmdClass.cmdCompleter || function(filter, special) { 
    166                     var allSuggestions = siteinfo.map(function(s) [s.name, s.description]); 
     164                completer: cmdClass.cmdCompleter || function(filter, bang) { 
     165                    let filters = filter.split(','); 
     166                    let prefilters = filters.slice(0, filters.length - 1); 
     167                    let prefilter = !prefilters.length ? '' : prefilters.join(',') + ','; 
     168                    let subfilters = siteinfo.filter(function(s) prefilters.every(function(p) s.name != p)); 
     169                    var allSuggestions = subfilters.map(function(s) [prefilter + s.name, s.description]); 
    167170                    if (!filter) return [0, allSuggestions]; 
    168                     var suggestions = allSuggestions.filter(function(s) { 
    169                         return s[0].indexOf(filter) == 0; 
    170                     }); 
    171                     return [0, suggestions]; 
     171                    return [0, allSuggestions.filter(function(s) s[0].indexOf(filter) == 0)] 
    172172                }, 
    173173                options: cmdClass.cmdOptions, 
     
    467467    name: DataAccess.getCommand(), 
    468468    description: 'request, and display to the buffer', 
    469     cmdAction: function(args, special, count) { 
     469    cmdAction: function(args, bang, count) { 
    470470 
    471471        var parsedArgs = this.parseArgs(args); 
    472         if (!parsedArgs || !parsedArgs.siteinfo) { return; } // do nothing 
    473  
     472        if (parsedArgs.count == 0) { return; } // do nothing 
    474473        var siteinfo = parsedArgs.siteinfo; 
    475         var url = siteinfo.url; 
    476         // see: http://fifnel.com/2008/11/14/1980/ 
    477         var srcEncode = siteinfo.srcEncode || 'UTF-8'; 
    478         var urlEncode = siteinfo.urlEncode || srcEncode; 
    479  
    480         var idxRepStr = url.indexOf('%s'); 
    481         if (idxRepStr > -1 && !parsedArgs.str) return; 
    482  
    483         // via. lookupDictionary.js 
    484         var ttbu = Components.classes['@mozilla.org/intl/texttosuburi;1'] 
    485                              .getService(Components.interfaces.nsITextToSubURI); 
    486  
    487  
    488         url = url.replace(/%s/g, ttbu.ConvertAndEscape(urlEncode, parsedArgs.str)); 
    489         $U.log(url + '::' + siteinfo.xpath); 
    490  
    491         if (special) { 
    492             liberator.open(url, liberator.NEW_TAB); 
    493         } else { 
    494             let req = new Request(url, null, { 
    495                 encoding: srcEncode, 
    496                 siteinfo: siteinfo, 
    497                 args: { 
    498                     args: args, 
    499                     special: special, 
    500                     count: count 
    501                 } 
    502             }); 
    503             req.addEventListener('onException', $U.bind(this, this.onException)); 
    504             req.addEventListener('onSuccess', $U.bind(this, this.onSuccess)); 
    505             req.addEventListener('onFailure', $U.bind(this, this.onFailure)); 
    506             req.get(); 
    507  
    508             $U.echo('Loading ' + parsedArgs.name + ' ...', liberator.commandline.FORCE_SINGLELINE); 
    509         } 
    510     }, 
    511     // return {name: '', siteinfo: {}, str: ''} or null 
     474        for (let i = 0, len = parsedArgs.count; i < len; i++) { 
     475 
     476            let info = siteinfo[i]; 
     477            var url = info.url; 
     478            // see: http://fifnel.com/2008/11/14/1980/ 
     479            var srcEncode = info.srcEncode || 'UTF-8'; 
     480            var urlEncode = info.urlEncode || srcEncode; 
     481 
     482            var idxRepStr = url.indexOf('%s'); 
     483            if (idxRepStr > -1 && !parsedArgs.str) continue; 
     484 
     485            // via. lookupDictionary.js 
     486            var ttbu = Components.classes['@mozilla.org/intl/texttosuburi;1'] 
     487                                 .getService(Components.interfaces.nsITextToSubURI); 
     488            url = url.replace(/%s/g, ttbu.ConvertAndEscape(urlEncode, parsedArgs.str)); 
     489            $U.log(url + '[' + srcEncode + '][' + urlEncode + ']::' + info.xpath); 
     490 
     491            if (bang) { 
     492                liberator.open(url, liberator.NEW_TAB); 
     493            } else { 
     494                let req = new Request(url, null, { 
     495                    encoding: srcEncode, 
     496                    siteinfo: info, 
     497                    args: { 
     498                        args: args, 
     499                        bang: bang, 
     500                        count: count 
     501                    } 
     502                }); 
     503                req.addEventListener('onException', $U.bind(this, this.onException)); 
     504                req.addEventListener('onSuccess', $U.bind(this, this.onSuccess)); 
     505                req.addEventListener('onFailure', $U.bind(this, this.onFailure)); 
     506                req.get(); 
     507            } 
     508            $U.echo('Loading ' + parsedArgs.names + ' ...', commandline.FORCE_SINGLELINE); 
     509         } 
     510    }, 
     511    // return {names: '', str: '', count: 0, siteinfo: [{}]} 
    512512    parseArgs: function(args) { 
    513513 
    514         if (!args) return null; 
     514        var self = this; 
     515        var ret = {}; 
     516        ret.names = ''; 
     517        ret.str = ''; 
     518        ret.count = 0; 
     519        ret.siteinfo = []; 
     520 
     521        if (!args) return ret; 
    515522 
    516523        var arguments = args.split(/ +/); 
    517524        var sel = $U.getSelectedString(); 
    518525 
    519         if (arguments.length < 1) return null; 
    520  
    521         var siteName = arguments.shift(); 
    522         var str = (arguments.length < 1 ? sel : arguments.join()).replace(/[\n\r]+/g, ''); 
    523         var siteinfo = this.getSite(siteName); 
    524  
    525         return {name: siteName, siteinfo: siteinfo, str: str}; 
     526        if (arguments.length < 1) return ret; 
     527 
     528        ret.names = arguments.shift(); 
     529        ret.str = (arguments.length < 1 ? sel : arguments.join()).replace(/[\n\r]+/g, ''); 
     530 
     531        ret.names.split(',').forEach(function(name) { 
     532            let site = self.getSite(name); 
     533            if (site) { 
     534                ret.count++; 
     535                ret.siteinfo.push(site); 
     536            } 
     537        }); 
     538 
     539        return ret; 
    526540    }, 
    527541    getSite: function(name) { 
  • lang/javascript/vimperator-plugins/trunk/multi_requester.js

    r25005 r25308  
    55 * @description-ja   リクエストの結果をバッファに出力する。 
    66 * @author           suVene suvene@zeromemory.info 
    7  * @version          0.2.4 
     7 * @version          0.3.0 
    88 * @minVersion       2.0pre 
    99 * @maxVersion       2.0pre 
     10 * Last Change:      29-Nov-2008. 
    1011 * ==/VimperatorPlugin== 
    1112 * 
     
    1617 *     ANY_TEXT         your input text 
    1718 * 
    18  *   :mr  alc ANY_TEXT           -> request by the input text, and display to the buffer. 
    19  *   :mr! goo {window.selection} -> request by the selected text, and display to the new tab. 
    20  * 
     19 *   :mr  alc[,goo,any1,any2…] ANY_TEXT           -> request by the input text, and display to the buffer. 
     20 *   :mr! goo[,any1,any2,…]    {window.selection} -> request by the selected text, and display to the new tab. 
     21 * 
     22 *   other siteinfo by wedata. 
     23 *     @see http://wedata.net/databases/Multi%20Requester/items 
    2124 * 
    2225 * CUSTOMIZE .vimperatorrc: 
     
    4346 *   EOM 
    4447 * 
    45  *   other siteinfo by wedata. 
    46  *     @see http://wedata.net/databases/Multi%20Requester/items 
    47  * 
    4848 * [MAPPINGS] 
    4949 *   ex.) 
     
    6262 * TODO: 
    6363 *    - wedata local cache. 
    64  *    - 複数リクエスト対応。 
    6564 */ 
    6665(function() { 
     
    8180        srcEncode:   'EUC-JP', 
    8281        urlEncode:   'UTF-8' 
    83     }, 
    84     { 
    85         name: 'metalarchive-band', 
    86         url: 'http://www.metal-archives.com/search.php?string=%s&type=band', 
    87         description: 'Metal Archive (band)', 
    88         xpath: '//table', 
    8982    } 
    9083]; 
     
    9588var $U = { 
    9689    log: function(msg, level) { 
    97         liberator.log(msg, (level || 9)); 
     90        liberator.log(msg, (level || 8)); 
    9891    }, 
    9992    debug: function(msg) { 
    100         this.log(msg, 9); 
     93        this.log(msg, 8); 
    10194        liberator.echo(msg); 
    10295    }, 
     
    169162            $U.bind(cmdClass, cmdClass.cmdAction), 
    170163            { 
    171                 completer: cmdClass.cmdCompleter || function(context, arg, bang) { 
    172                     var allSuggestions = siteinfo.map(function(s) [s.name, s.description]); 
     164                completer: cmdClass.cmdCompleter || function(context, arg) { 
    173165                    context.title = ['Name', 'Descprition']; 
    174                     context.completions = 
    175                         context.filter ? allSuggestions.filter(function(s) s[0].indexOf(context.filter) == 0) 
    176                                        : allSuggestions; 
     166                    let filters = context.filter.split(','); 
     167                    let prefilters = filters.slice(0, filters.length - 1); 
     168                    let prefilter = !prefilters.length ? '' : prefilters.join(',') + ','; 
     169                    let subfilters = siteinfo.filter(function(s) prefilters.every(function(p) s.name != p)); 
     170                    var allSuggestions = subfilters.map(function(s) [prefilter + s.name, s.description]); 
     171                    context.completions = context.filter 
     172                        ? allSuggestions.filter(function(s) s[0].indexOf(context.filter) == 0) 
     173                        : allSuggestions; 
    177174                }, 
    178175                options: cmdClass.cmdOptions, 
     
    472469    name: DataAccess.getCommand(), 
    473470    description: 'request, and display to the buffer', 
    474     cmdAction: function(args, special, count) { 
    475  
    476         args = args.string; 
    477         var parsedArgs = this.parseArgs(args); 
    478         if (!parsedArgs || !parsedArgs.siteinfo) { return; } // do nothing 
     471    cmdAction: function(args) { 
     472 
     473        var argstr = args.string; 
     474        var bang = args.bang; 
     475        var count = args.count; 
     476 
     477        var parsedArgs = this.parseArgs(argstr); 
     478        if (parsedArgs.count == 0) { return; } // do nothing 
    479479 
    480480        var siteinfo = parsedArgs.siteinfo; 
    481         var url = siteinfo.url; 
    482         // see: http://fifnel.com/2008/11/14/1980/ 
    483         var srcEncode = siteinfo.srcEncode || 'UTF-8'; 
    484         var urlEncode = siteinfo.urlEncode || srcEncode; 
    485  
    486         var idxRepStr = url.indexOf('%s'); 
    487         if (idxRepStr > -1 && !parsedArgs.str) return; 
    488  
    489         // via. lookupDictionary.js 
    490         var ttbu = Components.classes['@mozilla.org/intl/texttosuburi;1'] 
    491                              .getService(Components.interfaces.nsITextToSubURI); 
    492         url = url.replace(/%s/g, ttbu.ConvertAndEscape(urlEncode, parsedArgs.str)); 
    493         $U.log(url + '::' + siteinfo.xpath); 
    494  
    495         if (special) { 
    496             liberator.open(url, liberator.NEW_TAB); 
    497         } else { 
    498             let req = new Request(url, null, { 
    499                 encoding: srcEncode, 
    500                 siteinfo: siteinfo, 
    501                 args: { 
    502                     args: args, 
    503                     special: special, 
    504                     count: count 
    505                 } 
    506             }); 
    507             req.addEventListener('onException', $U.bind(this, this.onException)); 
    508             req.addEventListener('onSuccess', $U.bind(this, this.onSuccess)); 
    509             req.addEventListener('onFailure', $U.bind(this, this.onFailure)); 
    510             req.get(); 
    511  
    512             $U.echo('Loading ' + parsedArgs.name + ' ...', commandline.FORCE_SINGLELINE); 
    513         } 
    514     }, 
    515     // return {name: '', siteinfo: {}, str: ''} or null 
     481        for (let i = 0, len = parsedArgs.count; i < len; i++) { 
     482 
     483            let info = siteinfo[i]; 
     484            var url = info.url; 
     485            // see: http://fifnel.com/2008/11/14/1980/ 
     486            var srcEncode = info.srcEncode || 'UTF-8'; 
     487            var urlEncode = info.urlEncode || srcEncode; 
     488 
     489            var idxRepStr = url.indexOf('%s'); 
     490            if (idxRepStr > -1 && !parsedArgs.str) continue; 
     491 
     492            // via. lookupDictionary.js 
     493            var ttbu = Components.classes['@mozilla.org/intl/texttosuburi;1'] 
     494                                 .getService(Components.interfaces.nsITextToSubURI); 
     495            url = url.replace(/%s/g, ttbu.ConvertAndEscape(urlEncode, parsedArgs.str)); 
     496            $U.log(url + '[' + srcEncode + '][' + urlEncode + ']::' + info.xpath); 
     497 
     498            if (bang) { 
     499                liberator.open(url, liberator.NEW_TAB); 
     500            } else { 
     501                let req = new Request(url, null, { 
     502                    encoding: srcEncode, 
     503                    siteinfo: info, 
     504                    args: { 
     505                        args: args, 
     506                        bang: bang, 
     507                        count: count 
     508                    } 
     509                }); 
     510                req.addEventListener('onException', $U.bind(this, this.onException)); 
     511                req.addEventListener('onSuccess', $U.bind(this, this.onSuccess)); 
     512                req.addEventListener('onFailure', $U.bind(this, this.onFailure)); 
     513                req.get(); 
     514            } 
     515            $U.echo('Loading ' + parsedArgs.names + ' ...', commandline.FORCE_SINGLELINE); 
     516         } 
     517    }, 
     518    // return {names: '', str: '', count: 0, siteinfo: [{}]} 
    516519    parseArgs: function(args) { 
    517520 
    518         if (!args) return null; 
     521        var self = this; 
     522        var ret = {}; 
     523        ret.names = ''; 
     524        ret.str = ''; 
     525        ret.count = 0; 
     526        ret.siteinfo = []; 
     527 
     528        if (!args) return ret; 
    519529 
    520530        var arguments = args.split(/ +/); 
    521531        var sel = $U.getSelectedString(); 
    522532 
    523         if (arguments.length < 1) return null; 
    524  
    525         var siteName = arguments.shift(); 
    526         var str = (arguments.length < 1 ? sel : arguments.join()).replace(/[\n\r]+/g, ''); 
    527         var siteinfo = this.getSite(siteName); 
    528  
    529         return {name: siteName, siteinfo: siteinfo, str: str}; 
     533        if (arguments.length < 1) return ret; 
     534 
     535        ret.names = arguments.shift(); 
     536        ret.str = (arguments.length < 1 ? sel : arguments.join()).replace(/[\n\r]+/g, ''); 
     537 
     538        ret.names.split(',').forEach(function(name) { 
     539            let site = self.getSite(name); 
     540            if (site) { 
     541                ret.count++; 
     542                ret.siteinfo.push(site); 
     543            } 
     544        }); 
     545 
     546        return ret; 
    530547    }, 
    531548    getSite: function(name) { 
     
    540557 
    541558        var url, escapedUrl, xpath, doc, html; 
     559        $U.debug('success!!!' + res.request.url); 
    542560 
    543561        try {