aboutsummaryrefslogtreecommitdiffstats
path: root/tinymenu.js
blob: 60e7b3c56b7cb20f949d182f4a1109e229ebd1a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
var PLUGIN_INFO =
<VimperatorPlugin>
<name>{NAME}</name>
<description>Tiny Menu for Vimperator</description>
<minVersion>2.0pre</minVersion>
<maxVersion>2.0</maxVersion>
<updateURL>http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/tinymenu.js</updateURL>
<author mail="hotchpotch@gmail.com" homepage="http://d.hatena.ne.jp/secondlife/">Yuichi Tateno</author>
<license>MPL 1.1/GPL 2.0/LGPL 2.1</license>
<version>0.2</version>
<detail><![CDATA[
append statusbar's menuicon like Tiny Menu [ https://addons.mozilla.org/firefox/addon/1455 ].

thx icon id:tnx.

== Commands ==
  :opentinymenu:
    Open the tiny menu.
]]></detail>
</VimperatorPlugin>;

(function() {
    if (!liberator.plugins.tinymenu)
        liberator.plugins.tinymenu = {};

    let tinymenu = liberator.plugins.tinymenu;
    if (tinymenu.menu) return;

    let p = function(msg) {
        Application.console.log(msg);
    };

    const ICON = 'data:image/png;base64,'+
                 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK'+
                 '6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGiSURBVHja'+
                 'jFPLSsNQEJ30kZK+Nkk3zUoQuhKErK0gCHHlN5SCUFoImEU3LgVBiFAQhIIf4UIo'+
                 'CIJ/oO3KbWm7aLorJTQg9UxsYxKi7cDhPuaec+femRFqtRpFrAJcAMfA4XrvHXgD'+
                 'usBn8HAqQr4ErlVVlXK5HEmS5G06jqMtFgttPB43sLwC7qICIvCkKIpeKpUok8mE'+
                 'VLPZrIdisSjZtm3NZrNTbJ8D7kbgFkQdN5Miy/SfqeUyffT7OoRusDRZ4ABoleFg'+
                 'O6pWyTTNEMmyrNB6atsEAQPTRxao4+akIAg/zumU2u12mIC9oCUSCWIO/qTOAjre'+
                 '5js1TYsNvdls/qapUqFCocBTnQX2RFEMHTYMI7TudDoeKWjpdNr7klTcbUzYZusn'+
                 'J1lg6LrufjB1cRFEDRwehizQm8/nraDALhGAw8MLC3RHo1FDlmU/E9siWK1WhAx8'+
                 'bdI4AB4mk0mLC2mXCHCWh3vmCutm8ksZNR9L4iwsl0suIEIp96KlzD9yBoffTPl8'+
                 'PthMHhFhO38108bY8YyD3M4nkXZ+jWvnbwEGAKqdlwtH3ubkAAAAAElFTkSuQmCC';

    if (!tinymenu.popup) {
        let menus = Array.slice(document.getElementById('main-menubar').childNodes);
        let popup = document.createElement('menupopup');
        menus.reverse().forEach(function(elem) popup.appendChild(elem.cloneNode(true)));
        popup.setAttribute('id', 'gimperator-tinymenu-popup');
        tinymenu.popup = popup;
    }

    if (!tinymenu.menu) {
        let menu = document.createElement('statusbarpanel');
        menu.setAttribute('id', 'vimperator-tinymenu');
        menu.setAttribute('class','statusbarpanel-iconic');
        menu.setAttribute('src', ICON);
        tinymenu.menu = menu;
    }

    let menu = tinymenu.menu;
    let popup = tinymenu.popup;

    menu.addEventListener('click', function(event) {
        if (popup.state == 'closed')
            popup.openPopup(menu, 'before_end', 0, 0, false, true);
    }, false);

    commands.addUserCommand(
        ['opentinymenu'],
        'Open the tiny menu ',
        function () {
            popup.openPopup(menu, 'before_end', 0, 0, false, true);
        },
        true
    );

    //document.getElementById('status-bar').insertBefore(menu, document.getElementById('security-button').nextSibling);
    document.getElementById('status-bar').appendChild(popup);
    document.getElementById('status-bar').appendChild(menu);
})();