| 1 | var PLUGIN_INFO = |
|---|
| 2 | <VimperatorPlugin> |
|---|
| 3 | <name>{NAME}</name> |
|---|
| 4 | <description>Tiny Menu for Vimperator</description> |
|---|
| 5 | <minVersion>2.0pre</minVersion> |
|---|
| 6 | <maxVersion>2.0</maxVersion> |
|---|
| 7 | <updateURL>http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/tinymenu.js</updateURL> |
|---|
| 8 | <author mail="hotchpotch@gmail.com" homepage="http://d.hatena.ne.jp/secondlife/">Yuichi Tateno</author> |
|---|
| 9 | <license>MPL 1.1/GPL 2.0/LGPL 2.1</license> |
|---|
| 10 | <version>0.2</version> |
|---|
| 11 | <detail><![CDATA[ |
|---|
| 12 | append statusbar's menuicon like Tiny Menu [ https://addons.mozilla.org/firefox/addon/1455 ]. |
|---|
| 13 | |
|---|
| 14 | thx icon id:tnx. |
|---|
| 15 | |
|---|
| 16 | == Commands == |
|---|
| 17 | :opentinymenu: |
|---|
| 18 | Open the tiny menu. |
|---|
| 19 | ]]></detail> |
|---|
| 20 | </VimperatorPlugin>; |
|---|
| 21 | |
|---|
| 22 | (function() { |
|---|
| 23 | if (!liberator.plugins.tinymenu) |
|---|
| 24 | liberator.plugins.tinymenu = {}; |
|---|
| 25 | |
|---|
| 26 | let tinymenu = liberator.plugins.tinymenu; |
|---|
| 27 | if (tinymenu.menu) return; |
|---|
| 28 | |
|---|
| 29 | let p = function(msg) { |
|---|
| 30 | Application.console.log(msg); |
|---|
| 31 | }; |
|---|
| 32 | |
|---|
| 33 | const ICON = 'data:image/png;base64,'+ |
|---|
| 34 | 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK'+ |
|---|
| 35 | '6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGiSURBVHja'+ |
|---|
| 36 | 'jFPLSsNQEJ30kZK+Nkk3zUoQuhKErK0gCHHlN5SCUFoImEU3LgVBiFAQhIIf4UIo'+ |
|---|
| 37 | 'CIJ/oO3KbWm7aLorJTQg9UxsYxKi7cDhPuaec+femRFqtRpFrAJcAMfA4XrvHXgD'+ |
|---|
| 38 | 'usBn8HAqQr4ErlVVlXK5HEmS5G06jqMtFgttPB43sLwC7qICIvCkKIpeKpUok8mE'+ |
|---|
| 39 | 'VLPZrIdisSjZtm3NZrNTbJ8D7kbgFkQdN5Miy/SfqeUyffT7OoRusDRZ4ABoleFg'+ |
|---|
| 40 | 'O6pWyTTNEMmyrNB6atsEAQPTRxao4+akIAg/zumU2u12mIC9oCUSCWIO/qTOAjre'+ |
|---|
| 41 | '5js1TYsNvdls/qapUqFCocBTnQX2RFEMHTYMI7TudDoeKWjpdNr7klTcbUzYZusn'+ |
|---|
| 42 | 'J1lg6LrufjB1cRFEDRwehizQm8/nraDALhGAw8MLC3RHo1FDlmU/E9siWK1WhAx8'+ |
|---|
| 43 | 'bdI4AB4mk0mLC2mXCHCWh3vmCutm8ksZNR9L4iwsl0suIEIp96KlzD9yBoffTPl8'+ |
|---|
| 44 | 'PthMHhFhO38108bY8YyD3M4nkXZ+jWvnbwEGAKqdlwtH3ubkAAAAAElFTkSuQmCC'; |
|---|
| 45 | |
|---|
| 46 | if (!tinymenu.popup) { |
|---|
| 47 | let menus = Array.slice(document.getElementById('main-menubar').childNodes); |
|---|
| 48 | let popup = document.createElement('menupopup'); |
|---|
| 49 | menus.reverse().forEach(function(elem) popup.appendChild(elem.cloneNode(true))); |
|---|
| 50 | popup.setAttribute('id', 'gimperator-tinymenu-popup'); |
|---|
| 51 | tinymenu.popup = popup; |
|---|
| 52 | } |
|---|
| 53 | |
|---|
| 54 | if (!tinymenu.menu) { |
|---|
| 55 | let menu = document.createElement('statusbarpanel'); |
|---|
| 56 | menu.setAttribute('id', 'vimperator-tinymenu'); |
|---|
| 57 | menu.setAttribute('class','statusbarpanel-iconic'); |
|---|
| 58 | menu.setAttribute('src', ICON); |
|---|
| 59 | tinymenu.menu = menu; |
|---|
| 60 | } |
|---|
| 61 | |
|---|
| 62 | let menu = tinymenu.menu; |
|---|
| 63 | let popup = tinymenu.popup; |
|---|
| 64 | |
|---|
| 65 | menu.addEventListener('click', function(event) { |
|---|
| 66 | if (popup.state == 'closed') |
|---|
| 67 | popup.openPopup(menu, 'before_end', 0, 0, false, true); |
|---|
| 68 | }, false); |
|---|
| 69 | |
|---|
| 70 | commands.addUserCommand( |
|---|
| 71 | ['opentinymenu'], |
|---|
| 72 | 'Open the tiny menu ', |
|---|
| 73 | function () { |
|---|
| 74 | popup.openPopup(menu, 'before_end', 0, 0, false, true); |
|---|
| 75 | }, |
|---|
| 76 | true |
|---|
| 77 | ); |
|---|
| 78 | |
|---|
| 79 | //document.getElementById('status-bar').insertBefore(menu, document.getElementById('security-button').nextSibling); |
|---|
| 80 | document.getElementById('status-bar').appendChild(popup); |
|---|
| 81 | document.getElementById('status-bar').appendChild(menu); |
|---|
| 82 | })(); |
|---|