From cc76a40ad3a001def2f2a9348bad82453d8fd5d6 Mon Sep 17 00:00:00 2001 From: drry Date: Fri, 21 Mar 2008 02:11:34 +0000 Subject: lang/javascript/vimperator-plugins/trunk/xpathBlink.js lang/javascript/vimperator-plugins/trunk/autoIgnoreKey.js lang/javascript/vimperator-plugins/trunk/copy.js lang/javascript/vimperator-plugins/trunk/lookupDictionary.js lang/javascript/vimperator-plugins/trunk/splitBrowser.js lang/javascript/vimperator-plugins/trunk/gmperator.js: * 消えたファイルを trunk にコピーしました。 * ほか。 git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@8235 d0d07461-0603-4401-acd4-de1884942a52 --- splitBrowser.js | 277 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 277 insertions(+) create mode 100644 splitBrowser.js (limited to 'splitBrowser.js') diff --git a/splitBrowser.js b/splitBrowser.js new file mode 100644 index 0000000..e87e99a --- /dev/null +++ b/splitBrowser.js @@ -0,0 +1,277 @@ +/** + * Vimperator Plugin For "Split Browser" + * For vimperator 0.5.3 + * @author teramako + */ + +(function(){ + +vimperator.commands.add(new vimperator.Command(['sp[lit]'], + function(args){ + var position = null; + if (args) { + args = args.split(/ -/); + switch (args[args.length-1].toLowerCase()) { + case 'l': + case 'left': position = SplitBrowser.POSITION_LEFT; break; + case 'r': + case 'right': position = SplitBrowser.POSITION_RIGHT; break; + case 't': + case 'top': position = SplitBrowser.POSITION_TOP; break; + case 'bottom': + case 'b': position = SplitBrowser.POSITION_BOTTOM; break; + } + if (position) { + args.pop(); + } + var urls = args.join(' -'); + if (urls){ + urls = vimperator.util.stringToURLArray(urls); + var url = typeof urls[0] == 'string' ? urls[0] : urls[0][0]; + openSubBrowser(url, position); + return; + } + } + vimperator.echo('Split and load current URL.'); + openSubBrowser(vimperator.buffer.URL, position); + },{ + usage: ['sp[lit] [URL] [-POSITION]'], + shortHelp: 'split browser', + help: 'Split browser and load the [URL].
' + + 'If you don\'t specify the [URL] argument, browser loads the current URL.
' + + '
You need install Split Browser.', + completer:function(filter){ return vimperator.completion.get_url_completions(filter); } + } +)); +vimperator.commands.add(new vimperator.Command(['on[ly]'], + function(){ + if (SplitBrowser.browsers.length > 0) { + SplitBrowser.removeAllSubBrowsers(); // 分割したブラウザをすべて閉じる + // 好みで↑↓選ぼう + // SplitBrowser.gatherSubBrowsers(); // すべての分割したブラウザをタブに集める + } else { + vimperator.echoerr('SubBrowser is none'); + } + },{ + usage: ['on[ly]'], + shortHelp: 'close split browsers', + help: 'Close all split browsers' + } +)); + +/** + * Close active browser + */ +vimperator.mappings.add(new vimperator.Map(vimperator.modes.NORMAL, ['sd'], //{{{ + function(){ + var b = SplitBrowser.activeBrowser; + if (b.mTabs.length > 1){ + b.removeTab(b.mCurrentTab); + } else { + if (b === gBrowser){ + vimperator.open('about:blank', vimperator.NEW_BACKGROUND_TAB); + gBrowser.removeTab(gBrowser.mCurrentTab); + } else { + SplitBrowser.activeBrowserCloseWindow(); + } + } + },{ + shortHelp: 'Close active browser' + } +)); //}}} +/** + * Switch browser focus + */ +vimperator.mappings.add(new vimperator.Map(vimperator.modes.NORMAL, [''], //{{{ + function(){ + var browsers = SplitBrowser.browsers; + if (SplitBrowser.activeBrowser === gBrowser) { + SplitBrowser.getSubBrowserById(browsers[0].id).browser.contentWindow.focus(); + } else { + var id = SplitBrowser.activeSubBrowser.id; + for (var i=0; i 1){ + for (var i=1, l=urls.length; i < l; subBrowser.browser.addTab(urls[i++],null,null,null)) + ; + } +} //}}} +/** + * create new subBrowser and load url + * @param {String} url + * @param {Number} aPosition split direction + */ +function openSubBrowser(url, aPosition){ // {{{ + var subBrowser = SplitBrowser.addSubBrowser(url, null, aPosition || SplitBrowser.POSITION_TOP); + subBrowser.addEventListener('load',function(){ + subBrowser.removeEventListener('load',arguments.callee,true); + subBrowser.browser.contentWindow.focus(); + },true); + return subBrowser; +} //}}} + +/** + * Overwrite vimperator.open for SplitBrowser + * @see vimperator.js::vimperaotr.open + */ +vimperator.open = function(urls, where, callback){ //{{{ + if (typeof urls == 'string') { urls = vimperator.util.stringToURLArray(urls); } + if (urls.length == 0) { return false; } + if (!where) { where = vimperator.CURRENT_TAB; } + + var url = typeof urls[0] == 'string' ? urls[0] : urls[0][0]; + var postdata = typeof urls[0] == 'string' ? null : urls[0][1]; + var whichwindow = window; + var activeBrowser = SplitBrowser.activeBrowser; + + switch (where) { + case vimperator.CURRENT_TAB: + activeBrowser.loadURI(url, null, postdata); + break; + case vimperator.NEW_TAB: + var firsttab = activeBrowser.addTab(url, null, null, postdata); + activeBrowser.selectedTab = firsttab; + break; + case vimperator.NEW_BACKGROUND_TAB: + activeBrowser.addTab(url, null, null, postdata); + break; + case vimperator.NEW_WINDOW: + window.open(); + var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] + .getService(Components.interfaces.nsIWindowMediator); + whichwindow = vm.getMostRecentWindow('navigator:browser'); + whichwindow.loadURI(url, null, postdata); + break; + default: + vimperator.echoerr("Exxx: Invalid 'where' directive in vimperator.open(...)"); + return false; + } + for (var i=1, l=urls.length; i < l; i++){ + url = typeof urls[i] == 'string' ? urls[i] : urls[i][0]; + postdata = typeof urls[i] == 'string' ? null : urls[i][1]; + whichwindow.SplitBrowser.activeBrowser.addTab(url, null, null, postdata); + } +}; //}}} +})(); + +// vim: set fdm=marker sw=4 ts=4 et: -- cgit v1.2.3