1 /* See license.txt for terms of usage */
  2 
  3 define([
  4     "firebug/lib/trace",
  5     "firebug/lib/options",
  6     "firebug/lib/locale",
  7     "firebug/firefox/browserOverlayLib",
  8 ],
  9 function(FBTrace, Options, Locale, BrowserOverlayLib) {
 10 with (BrowserOverlayLib) {
 11 
 12 // ********************************************************************************************* //
 13 // Constants
 14 
 15 // ********************************************************************************************* //
 16 // Firefox Toolbar Buttons
 17 
 18 var BrowserToolbar =
 19 {
 20     overlay: function(doc, version)
 21     {
 22         this.overlayToolbarButtons(doc, version);
 23         this.customizeToolbar(doc);
 24     },
 25 
 26     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 27     // Firebug Start Button Popup Menu
 28 
 29     overlayToolbarButtons: function(doc, version)
 30     {
 31         $toolbarButton(doc, "firebug-inspectorButton", {
 32             label: "firebug.Inspect",
 33             tooltiptext: "firebug.InspectElement",
 34             observes: "cmd_firebug_toggleInspecting",
 35             style: "list-style-image: url(chrome://firebug/skin/inspect.png);" +
 36                 "-moz-image-region: rect(0, 16px, 16px, 0);"
 37         });
 38 
 39         // Start Button Tooltip. As soon as Firebug is fully loaded, the tooltip content will be
 40         // generated by firebug/firefox/start-button/startButtonOverlay module.
 41         $menupopupOverlay(doc, $(doc, "mainPopupSet"), [
 42             $tooltip(doc, {
 43                 "class": "firebugButtonTooltip",
 44                 id: "firebug-buttonTooltip",
 45                 orient: "vertical",
 46             }, [
 47                 $label(doc, {
 48                     "class": "version",
 49                     "value": "Firebug " + version
 50                 }),
 51                 $label(doc, {
 52                     "class": "status",
 53                     "value": Locale.$STR("startbutton.tip.deactivated")
 54                 })
 55             ])
 56         ]);
 57 
 58         // TODO: why contextmenu doesn't work without cloning
 59         $toolbarButton(doc, "firebug-button", {
 60             label: "firebug.Firebug",
 61             tooltip: "firebug-buttonTooltip",
 62             type: "menu-button",
 63             command: "cmd_firebug_toggleFirebug",
 64             contextmenu: "fbStatusContextMenu",
 65             observes: "firebugStatus",
 66             style: "list-style-image: url(chrome://firebug/skin/firebug16.png)"
 67         }, [$(doc, "fbStatusContextMenu").cloneNode(true)]);
 68     },
 69 
 70     customizeToolbar: function(doc)
 71     {
 72         // Appends Firebug start button into Firefox toolbar automatically after installation.
 73         // The button is appended only once - if the user removes it, it isn't appended again.
 74         // TODO: merge into $toolbarButton?
 75         // toolbarpalette check is for seamonkey, where it is in the document
 76         if ((!$(doc, "firebug-button") ||
 77             $(doc, "firebug-button").parentNode.tagName == "toolbarpalette")
 78             && !Options.get("toolbarCustomizationDone"))
 79         {
 80             Options.set("toolbarCustomizationDone", true);
 81 
 82             // Get the current navigation bar button set (a string of button IDs) and append
 83             // ID of the Firebug start button into it.
 84             var startButtonId = "firebug-button";
 85             var navBarId = "nav-bar";
 86             var navBar = $(doc, navBarId);
 87             var currentSet = navBar.currentSet;
 88 
 89             if (FBTrace.DBG_INITIALIZE)
 90                 FBTrace.sysout("Startbutton; curSet (before modification): " + currentSet);
 91 
 92             // Append only if the button is not already there.
 93             var curSet = currentSet.split(",");
 94             if (curSet.indexOf(startButtonId) == -1)
 95             {
 96                 navBar.insertItem(startButtonId);
 97                 navBar.setAttribute("currentset", navBar.currentSet);
 98                 navBar.ownerDocument.persist("nav-bar", "currentset");
 99 
100                 // Check whether insertItem really works
101                 var curSet = navBar.currentSet.split(",");
102                 if (curSet.indexOf(startButtonId) == -1)
103                     FBTrace.sysout("Startbutton; navBar.insertItem doesn't work", curSet);
104 
105                 if (FBTrace.DBG_INITIALIZE)
106                 {
107                     FBTrace.sysout("Startbutton; curSet (after modification): " +
108                         navBar.currentSet);
109                 }
110 
111                 try
112                 {
113                     // The current global scope is browser.xul.
114                     BrowserToolboxCustomizeDone(true);
115                 }
116                 catch (e)
117                 {
118                     if (FBTrace.DBG_ERRORS)
119                         FBTrace.sysout("startButton; appendToToolbar EXCEPTION " + e, e);
120                 }
121             }
122 
123             // Don't forget to show the navigation bar - just in case it's hidden.
124             navBar.removeAttribute("collapsed");
125             doc.persist(navBarId, "collapsed");
126         }
127     },
128 }
129 
130 // ********************************************************************************************* //
131 // Registration
132 
133 return BrowserToolbar;
134 
135 // ********************************************************************************************* //
136 }});
137