diff options
author | teramako | 2008-06-04 15:46:31 +0000 |
---|---|---|
committer | teramako | 2008-06-04 15:46:31 +0000 |
commit | 1043888af805f0b200771bec96b270af0154c27b (patch) | |
tree | 304111f45cc4985dbd19e957f941678dda0b98c6 /bookmarktoolbar-hint.js | |
parent | 5ec727c96bbf74a74a83172761928a8029ffb1b8 (diff) | |
download | vimperator-plugins-1043888af805f0b200771bec96b270af0154c27b.tar.bz2 |
mapを<Leader>f or <Leader>Fに変更
新規タブに開くモード追加
10以上の数値に対応
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@13243 d0d07461-0603-4401-acd4-de1884942a52
Diffstat (limited to 'bookmarktoolbar-hint.js')
-rw-r--r-- | bookmarktoolbar-hint.js | 100 |
1 files changed, 80 insertions, 20 deletions
diff --git a/bookmarktoolbar-hint.js b/bookmarktoolbar-hint.js index 33f3df1..fcb7b15 100644 --- a/bookmarktoolbar-hint.js +++ b/bookmarktoolbar-hint.js @@ -1,3 +1,16 @@ +// ==VimperatorPlugin== +// @name BookmarksToolbar-Hint +// @description Feature the BookmarksToolbar-Hint +// @description-ja ブックマークツールバーのヒント機能を提供 +// @version 0.2a +// ==/VimperatorPlugin== +// +// Usage: +// +// <Leader>f -> open current tab +// <Leader>F -> open new tab +// +// Note: <Leader>はデフォルトでは`\'になっています liberator.plugins.bookmarkToolbarHints = (function(){ function $(id){ @@ -5,9 +18,8 @@ liberator.plugins.bookmarkToolbarHints = (function(){ } function createTooltip(){ var tooltip = document.createElement('tooltip'); - //tooltip.setAttribute('id','liberator-tooltip'); + tooltip.setAttribute('style','padding:0'); var label = document.createElement('label'); - //label.setAttribute('id','liberator-tooltip-text'); label.setAttribute('value',tooltipbox.childNodes.length+1); tooltip.appendChild(label); tooltipbox.appendChild(tooltip); @@ -34,20 +46,39 @@ liberator.plugins.bookmarkToolbarHints = (function(){ if (node.hidePopup) node.hidePopup(); if (node.parentNode) allHidePopup(node.parentNode); } + function toolbarOpen(target){ + if (target.getAttribute('container') == 'true'){ + target.firstChild.showPopup(); + liberator.plugins.bookmarkToolbarHints.hide(); + liberator.plugins.bookmarkToolbarHints.show(target.firstChild); + return true; + } else { + liberator.open(target.node.uri, where); + } + return false; + } var hints = []; var toolbar; var current; + var currentNum = 0; + var focusNum = 0; + var where = liberator.CURERNT_TAB; var manager = { get toolbar(){ return getToolbar(); }, go : null, + get where(){ return where; }, + set where(value){ where = value; }, show:function(node){ liberator.modes.set(liberator.modes.CUSTOM, liberator.modes.QUICK_HINT); + hints = []; window.addEventListener('keypress',onKeyPress,true); current = node || getToolbar(); for (var i=0; i<current.childNodes.length; i++){ var button = current.childNodes[i]; + if (button.localName == "menuseparator") continue; + hints.push(button); var tooltip = createTooltip(); //tooltip.showPopup(button, button.boxObject.screenX, button.boxObject.screenY); tooltip.showPopup(button, -1, -1,"tooltip","topright"); @@ -55,25 +86,44 @@ liberator.plugins.bookmarkToolbarHints = (function(){ }, onEvent: function(event){ var key = liberator.events.toString(event); - if (key == "<Esc>" || key == "<C-[>"){ - allHidePopup(current); - liberator.options.guioptions= liberator.plugins.bookmarkToolbarHints.go; - } - key = parseInt(key,10) - if (!isNaN(key) && key-1 in current.childNodes){ - key -= 1; - if(current.childNodes[key].getAttribute('container') == 'true'){ - current.childNodes[key].firstChild.showPopup(); - liberator.plugins.bookmarkToolbarHints.hide(); - liberator.plugins.bookmarkToolbarHints.show(current.childNodes[key].firstChild); - return; - } else { - current.childNodes[key].click(); - } + var num; + switch(key){ + case "<Esc>": + case "<C-[>": + allHidePopup(current); + liberator.options.guioptions= liberator.plugins.bookmarkToolbarHints.go; + break; + case "<Return>": + //if (toolbarOpen(current.childNodes[focusNum])) return; + if (toolbarOpen(hints[focusNum])) return; + break; + case "<Tab>": + case "<S-Tab>": + break; + default: + if (/^[0-9]$/.test(key)){ + num = parseInt(key,10); + if (currentNum) num += currentNum * 10; + + //if (current.childNodes.length >= num*10){ + if (hints.length >= num*10){ + currentNum = num; + forcusNum = num; + return; + } + //if (current.childNodes[num-1]){ + if (hints[num-1]){ + //if (toolbarOpen(current.childNodes[num-1])) return; + if (toolbarOpen(hints[num-1])) return; + } + } } liberator.plugins.bookmarkToolbarHints.hide(); + }, hide: function(){ + currentNum = 0; + focusNum = 0; window.removeEventListener('keypress',onKeyPress,true); liberator.modes.reset(true); var tooltipbox = document.getElementById('liberator-tooltip-container'); @@ -90,12 +140,22 @@ liberator.plugins.bookmarkToolbarHints = (function(){ return manager; })(); -liberator.modes.setCustomMode('Toolbar-HINTS', plugins.bookmarkToolbarHints.onEvent, plugins.bookmarkToolbarHints.hide); -liberator.mappings.addUserMap([liberator.modes.NORMAL], ['\\'], - 'Start Toolbar-HINTS', +liberator.modes.setCustomMode('BookmarksToolbar-Hint', plugins.bookmarkToolbarHints.onEvent, plugins.bookmarkToolbarHints.hide); +liberator.mappings.addUserMap([liberator.modes.NORMAL], ['<Leader>f'], + 'Start Toolbar-HINTS (open current tab)', + function(){ + plugins.bookmarkToolbarHints.go = options.guioptions; + options.guioptions += "b"; + plugins.bookmarkToolbarHints.where = liberator.CURRENT_TAB; + plugins.bookmarkToolbarHints.show(); + } +); +liberator.mappings.addUserMap([liberator.modes.NORMAL], ['<Leader>F'], + 'Start Toolbar-HINTS (open new tab)', function(){ plugins.bookmarkToolbarHints.go = options.guioptions; options.guioptions += "b"; + plugins.bookmarkToolbarHints.where = liberator.NEW_TAB; plugins.bookmarkToolbarHints.show(); } ); |