aboutsummaryrefslogtreecommitdiffstats
path: root/bookmarktoolbar-hint.js
diff options
context:
space:
mode:
authorteramako2008-06-04 15:46:31 +0000
committerteramako2008-06-04 15:46:31 +0000
commit1043888af805f0b200771bec96b270af0154c27b (patch)
tree304111f45cc4985dbd19e957f941678dda0b98c6 /bookmarktoolbar-hint.js
parent5ec727c96bbf74a74a83172761928a8029ffb1b8 (diff)
downloadvimperator-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.js100
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();
}
);