From 23f52da95525e0b78053d5d44c3d2c47f9bf7e25 Mon Sep 17 00:00:00 2001 From: teramako Date: Sun, 8 Jun 2008 01:31:08 +0000 Subject: フォーカス移動の追加 「タブで全て開く」に対応 選択されているアイテムのツールチップにスタイルを適用 git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@13457 d0d07461-0603-4401-acd4-de1884942a52 --- bookmarktoolbar-hint.js | 142 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 98 insertions(+), 44 deletions(-) (limited to 'bookmarktoolbar-hint.js') diff --git a/bookmarktoolbar-hint.js b/bookmarktoolbar-hint.js index 0749a30..77646ee 100644 --- a/bookmarktoolbar-hint.js +++ b/bookmarktoolbar-hint.js @@ -2,7 +2,7 @@ // @name BookmarksToolbar-Hint // @description Feature the BookmarksToolbar-Hint // @description-ja ブックマークツールバーのヒント機能を提供 -// @version 0.2a +// @version 0.2b // ==/VimperatorPlugin== // // Usage: @@ -10,17 +10,20 @@ // f -> open current tab // F -> open new tab // -// Note: はデフォルトでは`\'になっています +// Note: is `\' by default +// +// duaing BookmarksToolbar-Hint, numbering tooltip is appear. +// the item of matched number will open when type the number +// and remove pending number or backward to parent (at opening a folder) +// liberator.plugins.bookmarkToolbarHints = (function(){ - function $(id){ - return document.getElementById(id); - } function createTooltip(){ var tooltip = document.createElement('tooltip'); - tooltip.setAttribute('style','padding:0'); + tooltip.setAttribute('style','padding:0;margin:0;'); var label = document.createElement('label'); label.setAttribute('value',tooltipbox.childNodes.length+1); + label.setAttribute('style','padding:0;margin:0 2px;'); tooltip.appendChild(label); tooltipbox.appendChild(tooltip); return tooltip; @@ -35,26 +38,44 @@ liberator.plugins.bookmarkToolbarHints = (function(){ if (toolbar) return toolbar; else - toolbar = $('bookmarksBarContent'); + toolbar = document.getElementById('bookmarksBarContent'); return toolbar; } function onKeyPress(event){ manager.onEvent(event); + event.stopPropagation(); + event.preventDefault(); + } + function updateSelector(){ + for (var i=0; i": case "": - allHidePopup(current); - liberator.options.guioptions = liberator.plugins.bookmarkToolbarHints.go; + closeMenus(current); + liberator.options.guioptions = this.go; break; case "": - if (toolbarOpen(hints[focusNum])) return; + if (toolbarOpen(hints[currentNum])) return; break; + case "f": + this.where = liberator.CURRENT_TAB; + return; + case "F": + case "t": + this.where = liberator.NEW_TAB; + return; case "": + case "j": case "": - break; + case "k": + if (key == "j" || key == ""){ + currentNum = hints.length -1 == currentNum ? 0 : currentNum + 1; + } else { + currentNum = currentNum == 0 ? hints.length -1 : currentNum - 1; + } + useShift = true; + updateSelector(); + return; + case "l": + if (hints[currentNum].getAttribute("container") == "true"){ + folderOpen(hints[currentNum]); + } + return; + case "h": + case "": + if (key == "" && currentNum > 0){ + currentNum = Math.floor(currentNum / 10); + updateSelector(); + } else { + if (current == this.toolbar){ + closeMenus(current); + liberator.options.guioptions = this.go; + this.quit(); + } else { + current.hidePopup(); + clearTooltips(); + this.show(current.parentNode.parentNode); + } + } + return; default: if (/^[0-9]$/.test(key)){ - num = parseInt(key,10); - if (currentNum) num += currentNum * 10; + var num = parseInt(key,10); + if (!useShift && currentNum) num += currentNum * 10; if (hints.length >= num*10){ - currentNum = num; - forcusNum = num; + currentNum = num - 1; + updateSelector(); return; } if (hints[num-1]){ @@ -112,15 +178,14 @@ liberator.plugins.bookmarkToolbarHints = (function(){ } } } - liberator.plugins.bookmarkToolbarHints.hide(); + liberator.plugins.bookmarkToolbarHints.quit(); }, - hide: function(){ + quit: function(){ currentNum = 0; - focusNum = 0; + useShift = false; window.removeEventListener('keypress',onKeyPress,true); liberator.modes.reset(true); - var tooltipbox = document.getElementById('liberator-tooltip-container'); while(tooltipbox.hasChildNodes()){ tooltipbox.firstChild.hidePopup(); tooltipbox.removeChild(tooltipbox.firstChild); @@ -129,27 +194,16 @@ liberator.plugins.bookmarkToolbarHints = (function(){ }; var tooltipbox = document.createElement('box'); tooltipbox.setAttribute('id','liberator-tooltip-container'); - $('liberator-container').appendChild(tooltipbox); + document.getElementById('liberator-container').appendChild(tooltipbox); return manager; })(); -liberator.modes.setCustomMode('BookmarksToolbar-Hint', plugins.bookmarkToolbarHints.onEvent, plugins.bookmarkToolbarHints.hide); liberator.mappings.addUserMap([liberator.modes.NORMAL], ['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(); - } + function(){ plugins.bookmarkToolbarHints.startup(liberator.CURRENT_TAB); } ); liberator.mappings.addUserMap([liberator.modes.NORMAL], ['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(); - } + function(){ plugins.bookmarkToolbarHints.startup(liberator.NEW_TAB); } ); -- cgit v1.2.3