aboutsummaryrefslogtreecommitdiffstats
path: root/splitBrowser.js
diff options
context:
space:
mode:
authordrry2008-03-21 02:11:34 +0000
committerdrry2008-03-21 02:11:34 +0000
commitcc76a40ad3a001def2f2a9348bad82453d8fd5d6 (patch)
treed46fb40b49e9f5e3a2a3303fb5943ecfaef2c941 /splitBrowser.js
parent0d19a1e18f331d8a73a34839947209d1c58949b9 (diff)
downloadvimperator-plugins-cc76a40ad3a001def2f2a9348bad82453d8fd5d6.tar.bz2
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
Diffstat (limited to 'splitBrowser.js')
-rw-r--r--splitBrowser.js277
1 files changed, 277 insertions, 0 deletions
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 <code class="argument">[URL]</code>.<br/>' +
+ 'If you don\'t specify the <code class="argument">[URL]</code> argument, browser loads the current URL.<br/>' +
+ '<br/>You need install <a href="https://addons.mozilla.org/en-US/firefox/addon/4287">Split Browser</a>.',
+ 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, ['<C-w><C-w>'], //{{{
+ 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<browsers.length; i++){
+ if (browsers[i].id == id) {
+ if (browsers[i+1]){
+ SplitBrowser.getSubBrowserById(browsers[i+1].id).browser.contentWindow.focus();
+ } else {
+ gBrowser.contentWindow.focus();
+ }
+ return true;
+ }
+ }
+ }
+ },{
+ shortHelp: 'Switch focus',
+ help: 'Switch focus to splitted browser'
+ }
+)); //}}}
+
+/**
+ * Overwrite save hint `s' to `S'
+ */
+vimperator.mappings.add(new vimperator.Map(vimperator.modes.HINTS, ['S'], //{{{
+ function(){ vimperator.hints.saveHints(true); },
+ {
+ cancelMode: true,
+ alwaysActive: false
+ }
+)); //}}}
+/**
+ * ExtendedHint mode key mapping `s'
+ * This key mapping is prefix for open the urls to split browser
+ */
+vimperator.mappings.add(new vimperator.Map(vimperator.modes.HINTS, ['s'], //{{{
+ function(){
+ vimperator.input.buffer += 's';
+ vimperator.echo("-- HINTS (extended) -- Split: `t': TOP, `b': BOTTOM, `l':LEFT, `r':RIGHT");
+ },{
+ cancelMode:false,
+ alwaysActive:true
+ }
+)); // }}}
+/**
+ * ExtendedHint mode key mapping `t'
+ * Split to TOP
+ */
+vimperator.mappings.add(new vimperator.Map(vimperator.modes.HINTS, ['t'], //{{{
+ function(){
+ var input = vimperator.input.buffer;
+ if (input.charAt(input.length-1) == 's'){
+ openSubBrowserExtendedMode(SplitBrowser.POSITION_TOP);
+ } else {
+ vimperator.hints.openHints(true, false);
+ }
+ vimperator.hints.disableHahMode(null,true);
+ },{
+ cancelMode:true,
+ alwaysActive:false
+ }
+)); //}}}
+/**
+ * ExtendedHint mode key mapping `b'
+ * Split to BOTTOM
+ */
+vimperator.mappings.add(new vimperator.Map(vimperator.modes.HINTS, ['b'], //{{{
+ function(){
+ var input = vimperator.input.buffer;
+ if (input.charAt(input.length-1) == 's'){
+ openSubBrowserExtendedMode(SplitBrowser.POSITION_BOTTOM);
+ }
+ vimperator.hints.disableHahMode(null,true);
+ },{
+ cancelMode:true,
+ alwaysActive:false
+ }
+)); //}}}
+/**
+ * ExtendedHint mode key mapping `l'
+ * Split to LEFT
+ */
+vimperator.mappings.add(new vimperator.Map(vimperator.modes.HINTS, ['l'], //{{{
+ function(){
+ var input = vimperator.input.buffer;
+ if (input.charAt(input.length-1) == 's'){
+ openSubBrowserExtendedMode(SplitBrowser.POSITION_LEFT);
+ }
+ vimperator.hints.disableHahMode(null,true);
+ },{
+ cancelMode:true,
+ alwaysActive:false
+ }
+)); //}}}
+/**
+ * ExtendedHint mode key mapping `r'
+ * Split to RIGHT
+ */
+vimperator.mappings.add(new vimperator.Map(vimperator.modes.HINTS, ['r'], //{{{
+ function(){
+ var input = vimperator.input.buffer;
+ if (input.charAt(input.length-1) == 's'){
+ openSubBrowserExtendedMode(SplitBrowser.POSITION_RIGHT);
+ }
+ vimperator.hints.disableHahMode(null,true);
+ },{
+ cancelMode:true,
+ alwaysActive:false
+ }
+)); //}}}
+/**
+ * openSubBrowser at ExtendedHint mode
+ * @param {Number} aPosition split direction
+ */
+function openSubBrowserExtendedMode(aPosition){ //{{{
+ var elms = vimperator.hints.hintedElements();
+ var urls = [];
+ for (var i=0; i<elms.length; i++){
+ var url = elms[i].refElem.href;
+ if (typeof(url) == 'undefined' || !url.length){
+ continue;
+ }
+ urls.push(url);
+ }
+ if (urls.length == 0) { return; }
+ var subBrowser = openSubBrowser(urls[0], aPosition);
+ if (urls.length > 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: