// ==VimperatorPlugin== // @name BookmarksToolbar-Hint // @description Feature the BookmarksToolbar-Hint // @description-ja ブックマークツールバーのヒント機能を提供 // @version 0.2b // ==/VimperatorPlugin== // // Usage: // // f -> open current tab // F -> open new tab // // 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 createTooltip(){ var tooltip = document.createElement('tooltip'); 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; } function clearTooltips(){ while(tooltipbox.hasChildNodes()){ tooltipbox.firstChild.hidePopup(); tooltipbox.removeChild(tooltipbox.firstChild); } } function getToolbar(){ if (toolbar) return toolbar; else toolbar = document.getElementById('bookmarksBarContent'); return toolbar; } function onKeyPress(event){ manager.onEvent(event); event.stopPropagation(); event.preventDefault(); } function updateSelector(){ for (var i=0; i": case "": closeMenus(current); liberator.options.guioptions = this.go; break; case "": 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 "": 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)){ var num = parseInt(key,10); if (!useShift && currentNum) num += currentNum * 10; if (hints.length >= num*10){ currentNum = num - 1; updateSelector(); return; } if (hints[num-1]){ if (toolbarOpen(hints[num-1])) return; } } } liberator.plugins.bookmarkToolbarHints.quit(); }, quit: function(){ currentNum = 0; useShift = false; window.removeEventListener('keypress',onKeyPress,true); liberator.modes.reset(true); while(tooltipbox.hasChildNodes()){ tooltipbox.firstChild.hidePopup(); tooltipbox.removeChild(tooltipbox.firstChild); } } }; var tooltipbox = document.createElement('box'); tooltipbox.setAttribute('id','liberator-tooltip-container'); document.getElementById('liberator-container').appendChild(tooltipbox); return manager; })(); liberator.mappings.addUserMap([liberator.modes.NORMAL], ['f'], 'Start Toolbar-HINTS (open current tab)', function(){ plugins.bookmarkToolbarHints.startup(liberator.CURRENT_TAB); } ); liberator.mappings.addUserMap([liberator.modes.NORMAL], ['F'], 'Start Toolbar-HINTS (open new tab)', function(){ plugins.bookmarkToolbarHints.startup(liberator.NEW_TAB); } );