toolkit/mozapps/extensions/content/extensions.xul
author Dave Townsend <dtownsend@oxymoronical.com>
Tue, 30 Nov 2010 14:18:00 -0800
changeset 58517 6ad26f209603a7c7775828ecf071ccfc411cf6ac
parent 58126 367398a8cbfe92969021d926cf0beb4d64bca337
child 58529 2afc36a5499c1bfb03fcd5982b8fe0f2d491e3f5
permissions -rw-r--r--
Bug 614416: Building add-on lists is too slow. r=Unfocused, a=blocks-final

<?xml version="1.0"?>
<!-- ***** BEGIN LICENSE BLOCK *****
   - Version: MPL 1.1/GPL 2.0/LGPL 2.1
   -
   - The contents of this file are subject to the Mozilla Public License Version
   - 1.1 (the "License"); you may not use this file except in compliance with
   - the License. You may obtain a copy of the License at
   - http://www.mozilla.org/MPL/
   -
   - Software distributed under the License is distributed on an "AS IS" basis,
   - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
   - for the specific language governing rights and limitations under the
   - License.
   -
   - The Original Code is the Extension Manager UI.
   -
   - The Initial Developer of the Original Code is
   - the Mozilla Foundation.
   - Portions created by the Initial Developer are Copyright (C) 2010
   - the Initial Developer. All Rights Reserved.
   -
   - Contributor(s):
   -   Blair McBride <bmcbride@mozilla.com>
   -   David Dahl <ddahl@mozilla.com>
   -
   - Alternatively, the contents of this file may be used under the terms of
   - either the GNU General Public License Version 2 or later (the "GPL"), or
   - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
   - in which case the provisions of the GPL or the LGPL are applicable instead
   - of those above. If you wish to allow use of your version of this file only
   - under the terms of either the GPL or the LGPL, and not to allow others to
   - use your version of this file under the terms of the MPL, indicate your
   - decision by deleting the provisions above and replace them with the notice
   - and other provisions required by the LGPL or the GPL. If you do not delete
   - the provisions above, a recipient may use your version of this file under
   - the terms of any one of the MPL, the GPL or the LGPL.
   -
   - ***** END LICENSE BLOCK ***** -->

<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="chrome://mozapps/content/extensions/extensions.css"?>
<?xml-stylesheet href="chrome://mozapps/skin/extensions/extensions.css"?>

<!DOCTYPE page [
<!ENTITY % extensionsDTD SYSTEM "chrome://mozapps/locale/extensions/extensions.dtd">
%extensionsDTD;
]>

<page xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
      xmlns:xhtml="http://www.w3.org/1999/xhtml"
      id="addons-page" title="&addons.windowTitle;" disablechrome="true"
      role="application" windowtype="Addons:Manager"
      ondragenter="gDragDrop.onDragOver(event)"
      ondragover="gDragDrop.onDragOver(event)"
      ondrop="gDragDrop.onDrop(event)">

  <xhtml:link rel="shortcut icon"
              href="chrome://mozapps/skin/extensions/extensionGeneric-16.png"/>

  <script type="application/javascript"
          src="chrome://mozapps/content/extensions/extensions.js"/>
  <script type="application/javascript"
          src="chrome://global/content/contentAreaUtils.js"/>

  <popupset>
    <!-- menu for an addon item -->
    <menupopup id="addonitem-popup">
      <menuitem id="menuitem_showDetails" command="cmd_showItemDetails"
                default="true" label="&cmd.showDetails.label;"
                accesskey="&cmd.showDetails.accesskey;"/>
      <menuitem id="menuitem_enableItem" command="cmd_enableItem"
                label="&cmd.enableAddon.label;"
                accesskey="&cmd.enableAddon.accesskey;"/>
      <menuitem id="menuitem_disableItem" command="cmd_disableItem"
                label="&cmd.disableAddon.label;"
                accesskey="&cmd.disableAddon.accesskey;"/>
      <menuitem id="menuitem_enableTheme" command="cmd_enableItem"
                label="&cmd.enableTheme.label;"
                accesskey="&cmd.enableTheme.accesskey;"/>
      <menuitem id="menuitem_disableTheme" command="cmd_disableItem"
                label="&cmd.disableTheme.label;"
                accesskey="&cmd.disableTheme.accesskey;"/>
      <menuitem id="menuitem_installItem" command="cmd_installItem"
                label="&cmd.installAddon.label;"
                accesskey="&cmd.installAddon.accesskey;"/>
      <menuitem id="menuitem_uninstallItem" command="cmd_uninstallItem"
                label="&cmd.uninstallAddon.label;"
                accesskey="&cmd.uninstallAddon.accesskey;"/>
      <menuseparator id="addonitem-menuseparator" />
      <menuitem id="menuitem_preferences" command="cmd_showItemPreferences"
#ifdef XP_WIN
                label="&cmd.preferencesWin.label;"
                accesskey="&cmd.preferencesWin.accesskey;"/>
#else
                label="&cmd.preferencesUnix.label;"
                accesskey="&cmd.preferencesUnix.accesskey;"/>
#endif
      <menuitem id="menuitem_findUpdates" command="cmd_findItemUpdates"
                label="&cmd.findUpdates.label;"
                accesskey="&cmd.findUpdates.accesskey;"/>
      <menuitem id="menuitem_about" command="cmd_showItemAbout"
                label="&cmd.about.label;"
                accesskey="&cmd.about.accesskey;"/>
    </menupopup>
  </popupset>

  <!-- global commands - these act on all addons, or affect the addons manager
       in some other way -->
  <commandset id="globalCommandSet"
              oncommand="gViewController.doCommand(event.target.id);">
    <command id="cmd_findAllUpdates"/>
    <command id="cmd_restartApp"/>
    <command id="cmd_goToDiscoverPane"/>
    <command id="cmd_goToRecentUpdates"/>
    <command id="cmd_goToAvailableUpdates"/>
    <command id="cmd_installFromFile"/>
    <command id="cmd_back"/>
    <command id="cmd_forward"/>
    <command id="cmd_enableCheckCompatibility"/>
    <command id="cmd_enableUpdateSecurity"/>
    <command id="cmd_toggleAutoUpdateDefault"/>
    <command id="cmd_resetAddonAutoUpdate"/>
  </commandset>

  <!-- view commands - these act on the selected addon -->
  <commandset id="viewCommandSet"
              events="richlistbox-select" commandupdater="true"
              oncommandupdate="gViewController.updateCommands();"
              oncommand="gViewController.doCommand(event.target.id);">
    <command id="cmd_showItemDetails"/>
    <command id="cmd_findItemUpdates"/>
    <command id="cmd_showItemPreferences"/>
    <command id="cmd_showItemAbout"/>
    <command id="cmd_enableItem"/>
    <command id="cmd_disableItem"/>
    <command id="cmd_installItem"/>
    <command id="cmd_uninstallItem"/>
    <command id="cmd_cancelUninstallItem"/>
    <command id="cmd_cancelOperation"/>
    <command id="cmd_contribute"/>
  </commandset>

  <!-- main header -->
  <hbox id="header" align="center">
    <toolbarbutton id="back-btn" class="nav-button header-button" command="cmd_back"
            tooltiptext="&cmd.back.tooltip;" hidden="true" disabled="true"/>
    <toolbarbutton id="forward-btn" class="nav-button header-button" command="cmd_forward"
            tooltiptext="&cmd.forward.tooltip;" hidden="true" disabled="true"/>
    <spacer flex="1"/>
    <hbox id="updates-container" align="center">
      <image class="spinner"/>
      <label id="updates-noneFound" hidden="true"
             value="&updates.noneFound.label;"/>
      <button id="updates-manualUpdatesFound-btn" class="button-link"
              hidden="true" label="&updates.manualUpdatesFound.label;"
              command="cmd_goToAvailableUpdates"/>
      <label id="updates-progress" hidden="true"
             value="&updates.updating.label;"/>
      <label id="updates-installed" hidden="true"
             value="&updates.installed.label;"/>
      <label id="updates-downloaded" hidden="true"
             value="&updates.downloaded.label;"/>
      <button id="updates-restart-btn" class="button-link" hidden="true"
              label="&updates.restart.label;"
              command="cmd_restartApp"/>
    </hbox>
    <toolbarbutton id="header-utils-btn" class="header-button" type="menu"
            tooltiptext="&toolsMenu.tooltip;">
      <menupopup id="utils-menu">
        <menuitem id="utils-updateNow"
                  label="&updates.checkForUpdates.label;"
                  accesskey="&updates.checkForUpdates.accesskey;"
                  command="cmd_findAllUpdates"/>
        <menuitem id="utils-viewUpdates"
                  label="&updates.viewUpdates.label;"
                  accesskey="&updates.viewUpdates.accesskey;"
                  command="cmd_goToRecentUpdates"/>
        <menuseparator id="utils-installFromFile-separator"/>
        <menuitem id="utils-installFromFile"
                  label="&installAddonFromFile.label;"
                  accesskey="&installAddonFromFile.accesskey;"
                  command="cmd_installFromFile"/>
        <menuseparator/>
        <menuitem id="utils-autoUpdateDefault"
                  label="&updates.updateAddonsAutomatically.label;"
                  accesskey="&updates.updateAddonsAutomatically.accesskey;"
                  type="checkbox" autocheck="false"
                  command="cmd_toggleAutoUpdateDefault"/>
        <menuitem id="utils-resetAddonUpdatesToAutomatic"
                  label="&updates.resetUpdatesToAutomatic.label;"
                  accesskey="&updates.resetUpdatesToAutomatic.accesskey;"
                  command="cmd_resetAddonAutoUpdate"/>
        <menuitem id="utils-resetAddonUpdatesToManual"
                  label="&updates.resetUpdatesToManual.label;"
                  accesskey="&updates.resetUpdatesToManual.accesskey;"
                  command="cmd_resetAddonAutoUpdate"/>
      </menupopup>
    </toolbarbutton>
    <textbox id="header-search" type="search" searchbutton="true"
             placeholder="&search.placeholder;"/>
  </hbox>

  <hbox flex="1">

    <!-- category list -->
    <richlistbox id="categories" persist="last-selected">
      <richlistitem id="category-search" value="addons://search/"
                    class="category"
                    name="&view.search.label;"
                    tooltiptext="&view.search.label;" disabled="true"/>
      <richlistitem id="category-discover" value="addons://discover/"
                    class="category"
                    name="&view.discover.label;"
                    tooltiptext="&view.discover.label;"/>
      <richlistitem id="category-languages" value="addons://list/locale"
                    class="category"
                    name="&view.locales.label;"
                    tooltiptext="&view.locales.label;"
                    hidden="true" persist="hidden"/>
      <richlistitem id="category-searchengines"
                    value="addons://list/searchengine"
                    class="category"
                    name="&view.searchengines.label;"
                    tooltiptext="&view.searchengines.label;"
                    hidden="true" persist="hidden"/>
      <richlistitem id="category-extensions" value="addons://list/extension"
                    class="category"
                    name="&view.features.label;"
                    tooltiptext="&view.features.label;"/>
      <richlistitem id="category-themes" value="addons://list/theme"
                    class="category"
                    name="&view.appearance2.label;"
                    tooltiptext="&view.appearance2.label;"/>
      <richlistitem id="category-plugins" value="addons://list/plugin"
                    class="category"
                    name="&view.plugins.label;"
                    tooltiptext="&view.plugins.label;"/>
      <richlistitem id="category-availableUpdates" value="addons://updates/available"
                    class="category"
                    name="&view.availableUpdates.label;"
                    tooltiptext="&view.availableUpdates.label;"
                    disabled="true"/>
      <richlistitem id="category-recentUpdates" value="addons://updates/recent"
                    class="category"
                    name="&view.recentUpdates.label;"
                    tooltiptext="&view.recentUpdates.label;" disabled="true"/>
    </richlistbox>

    <box id="view-port-container" flex="1">

      <!-- view port -->
      <deck id="view-port" flex="1">

        <!-- discover view -->
        <vbox id="discover-view" flex="1" class="view-pane">
          <browser id="discover-browser" type="content" flex="1"
                   disablehistory="true" homepage="about:blank"/>
        </vbox>

        <!-- search view -->
        <vbox id="search-view" flex="1" class="view-pane">
          <hbox class="view-header global-warning-container" align="center">
            <!-- global warnings -->
            <hbox class="global-warning" flex="1">
              <hbox class="global-warning-safemode" flex="1" align="center"
                    tooltiptext="&warning.safemode.label;">
                <image class="warning-icon"/>
                <label class="global-warning-text" flex="1" crop="end"
                       value="&warning.safemode.label;"/>
              </hbox>
              <hbox class="global-warning-checkcompatibility" flex="1" align="center"
                    tooltiptext="&warning.checkcompatibility.label;">
                <image class="warning-icon"/>
                <label class="global-warning-text" flex="1" crop="end"
                       value="&warning.checkcompatibility.label;"/>
              </hbox>
              <button class="button-link global-warning-checkcompatibility"
                      label="&warning.checkcompatibility.enable.label;"
                      tooltiptext="&warning.checkcompatibility.enable.tooltip;"
                      command="cmd_enableCheckCompatibility"/>
              <hbox class="global-warning-updatesecurity" flex="1" align="center"
                    tooltiptext="&warning.updatesecurity.label;">
                <image class="warning-icon"/>
                <label class="global-warning-text" flex="1" crop="end"
                       value="&warning.updatesecurity.label;"/>
              </hbox>
              <button class="button-link global-warning-updatesecurity"
                      label="&warning.updatesecurity.enable.label;"
                      tooltiptext="&warning.updatesecurity.enable.tooltip;"
                      command="cmd_enableUpdateSecurity"/>
              <spacer flex="5000"/> <!-- Necessary to allow the message to wrap -->
            </hbox>
            <spacer flex="1"/>
            <hbox id="search-sorters" class="sort-controls"
                  showrelevance="true" sortby="relevancescore" ascending="false"/>
          </hbox>
          <hbox id="search-filter" align="center">
            <label id="search-filter-label" value="&search.filter2.label;"/>
            <radiogroup id="search-filter-radiogroup" orient="horizontal"
                        align="center" persist="value" value="local">
              <radio id="search-filter-local" class="search-filter-radio"
                     label="&search.filter2.installed.label;" value="local"
                     tooltiptext="&search.filter2.installed.tooltip;"/>
              <radio id="search-filter-remote" class="search-filter-radio"
                     label="&search.filter2.available.label;" value="remote"
                     tooltiptext="&search.filter2.available.tooltip;"/>
            </radiogroup>
          </hbox>
          <vbox id="search-loading" class="alert-container"
                flex="1" hidden="true">
            <spacer class="alert-spacer-before"/>
            <hbox class="alert loading" align="center">
              <image/>
              <label value="&loading.label;"/>
            </hbox>
            <spacer class="alert-spacer-after"/>
          </vbox>
          <vbox id="search-list-empty" class="alert-container"
                flex="1" hidden="true">
            <spacer class="alert-spacer-before"/>
            <vbox class="alert">
              <label value="&listEmpty.search.label;"/>
              <button label="&listEmpty.button.label;" class="addon-control"
                      command="cmd_goToDiscoverPane"/>
            </vbox>
            <spacer class="alert-spacer-after"/>
          </vbox>
          <richlistbox id="search-list" class="list" flex="1">
            <hbox pack="center">
              <label id="search-allresults-link" class="text-link"/>
            </hbox>
          </richlistbox>
        </vbox>

        <!-- list view -->
        <vbox id="list-view" flex="1" class="view-pane" align="stretch">
          <hbox class="view-header global-warning-container">
            <!-- global warnings -->
            <hbox class="global-warning" flex="1">
              <hbox class="global-warning-safemode" flex="1" align="center"
                    tooltiptext="&warning.safemode.label;">
                <image class="warning-icon"/>
                <label class="global-warning-text" flex="1" crop="end"
                       value="&warning.safemode.label;"/>
              </hbox>
              <hbox class="global-warning-checkcompatibility" flex="1" align="center"
                    tooltiptext="&warning.checkcompatibility.label;">
                <image class="warning-icon"/>
                <label class="global-warning-text" flex="1" crop="end"
                       value="&warning.checkcompatibility.label;"/>
              </hbox>
              <button class="button-link global-warning-checkcompatibility"
                      label="&warning.checkcompatibility.enable.label;"
                      tooltiptext="&warning.checkcompatibility.enable.tooltip;"
                      command="cmd_enableCheckCompatibility"/>
              <hbox class="global-warning-updatesecurity" flex="1" align="center"
                    tooltiptext="&warning.updatesecurity.label;">
                <image class="warning-icon"/>
                <label class="global-warning-text" flex="1" crop="end"
                       value="&warning.updatesecurity.label;"/>
              </hbox>
              <button class="button-link global-warning-updatesecurity"
                      label="&warning.updatesecurity.enable.label;"
                      tooltiptext="&warning.updatesecurity.enable.tooltip;"
                      command="cmd_enableUpdateSecurity"/>
              <spacer flex="5000"/> <!-- Necessary to allow the message to wrap -->
            </hbox>
            <spacer flex="1"/>
            <hbox id="list-sorters" class="sort-controls" sortby="name"
                  ascending="true"/>
          </hbox>
          <vbox id="addon-list-empty" class="alert-container"
                flex="1" hidden="true">
            <spacer class="alert-spacer-before"/>
            <vbox class="alert">
              <label value="&listEmpty.installed.label;"/>
              <button label="&listEmpty.button.label;" class="addon-control"
                      command="cmd_goToDiscoverPane"/>
            </vbox>
            <spacer class="alert-spacer-after"/>
          </vbox>
          <richlistbox id="addon-list" class="list" flex="1"/>
        </vbox>

        <!-- updates view -->
        <vbox id="updates-view" flex="1" class="view-pane">
          <hbox class="view-header global-warning-container" align="center">
            <!-- global warnings -->
            <hbox class="global-warning" flex="1">
              <hbox class="global-warning-safemode" flex="1" align="center"
                    tooltiptext="&warning.safemode.label;">
                <image class="warning-icon"/>
                <label class="global-warning-text" flex="1" crop="end"
                       value="&warning.safemode.label;"/>
              </hbox>
              <hbox class="global-warning-checkcompatibility" flex="1" align="center"
                    tooltiptext="&warning.checkcompatibility.label;">
                <image class="warning-icon"/>
                <label class="global-warning-text" flex="1" crop="end"
                       value="&warning.checkcompatibility.label;"/>
              </hbox>
              <button class="button-link global-warning-checkcompatibility"
                      label="&warning.checkcompatibility.enable.label;"
                      tooltiptext="&warning.checkcompatibility.enable.tooltip;"
                      command="cmd_enableCheckCompatibility"/>
              <hbox class="global-warning-updatesecurity" flex="1" align="center"
                    tooltiptext="&warning.updatesecurity.label;">
                <image class="warning-icon"/>
                <label class="global-warning-text" flex="1" crop="end"
                       value="&warning.updatesecurity.label;"/>
              </hbox>
              <button class="button-link global-warning-updatesecurity"
                      label="&warning.updatesecurity.enable.label;"
                      tooltiptext="&warning.updatesecurity.enable.tooltip;"
                      command="cmd_enableUpdateSecurity"/>
              <spacer flex="5000"/> <!-- Necessary to allow the message to wrap -->
            </hbox>
            <spacer flex="1"/>
            <hbox id="updates-sorters" class="sort-controls" sortby="updateDate"
                  ascending="false"/>
          </hbox>
          <vbox id="updates-list-empty" class="alert-container"
                flex="1" hidden="true">
            <spacer class="alert-spacer-before"/>
            <vbox class="alert">
              <label id="empty-availableUpdates-msg" value="&listEmpty.availableUpdates.label;"/>
              <label id="empty-recentUpdates-msg" value="&listEmpty.recentUpdates.label;"/>
              <button label="&listEmpty.findUpdates.label;" class="addon-control"
                      command="cmd_findAllUpdates"/>
            </vbox>
            <spacer class="alert-spacer-after"/>
          </vbox>
          <hbox id="update-actions" pack="center">
            <button id="update-selected-btn" hidden="true"
                    label="&updates.updateSelected.label;"
                    tooltiptext="&updates.updateSelected.tooltip;"/>
          </hbox>
          <richlistbox id="updates-list" class="list" flex="1"/>
        </vbox>

        <!-- detail view -->
        <scrollbox id="detail-view" flex="1" class="view-pane addon-view" orient="vertical">
          <!-- global warnings -->
          <hbox class="global-warning-container global-warning">
            <hbox class="global-warning-safemode" flex="1" align="center"
                  tooltiptext="&warning.safemode.label;">
              <image class="warning-icon"/>
              <label class="global-warning-text" flex="1" crop="end"
                     value="&warning.safemode.label;"/>
            </hbox>
            <hbox class="global-warning-checkcompatibility" flex="1" align="center"
                  tooltiptext="&warning.checkcompatibility.label;">
              <image class="warning-icon"/>
              <label class="global-warning-text" flex="1" crop="end"
                     value="&warning.checkcompatibility.label;"/>
            </hbox>
            <button class="button-link global-warning-checkcompatibility"
                    label="&warning.checkcompatibility.enable.label;"
                    tooltiptext="&warning.checkcompatibility.enable.tooltip;"
                    command="cmd_enableCheckCompatibility"/>
            <hbox class="global-warning-updatesecurity" flex="1" align="center"
                  tooltiptext="&warning.updatesecurity.label;">
              <image class="warning-icon"/>
              <label class="global-warning-text" flex="1" crop="end"
                     value="&warning.updatesecurity.label;"/>
            </hbox>
            <button class="button-link global-warning-updatesecurity"
                    label="&warning.updatesecurity.enable.label;"
                    tooltiptext="&warning.updatesecurity.enable.tooltip;"
                    command="cmd_enableUpdateSecurity"/>
            <spacer flex="5000"/> <!-- Necessary to allow the message to wrap -->
          </hbox>
          <hbox flex="1">
            <spacer flex="1"/>
            <!-- "loading" splash screen -->
            <vbox class="alert-container">
              <spacer class="alert-spacer-before"/>
              <hbox class="alert loading">
                <image/>
                <label value="&loading.label;"/>
              </hbox>
              <spacer class="alert-spacer-after"/>
            </vbox>
            <!-- actual detail view -->
            <vbox class="detail-view-container" flex="3" contextmenu="addonitem-popup">
              <vbox id="detail-notifications">
                <hbox id="warning-container" align="center" class="warning">
                  <image class="warning-icon"/>
                  <label id="detail-warning" flex="1"/>
                  <label id="detail-warning-link" class="text-link"/>
                  <spacer flex="5000"/> <!-- Necessary to allow the message to wrap -->
                </hbox>
                <hbox id="error-container" align="center" class="error">
                  <image class="error-icon"/>
                  <label id="detail-error" flex="1"/>
                  <label id="detail-error-link" class="text-link"/>
                  <spacer flex="5000"/> <!-- Necessary to allow the message to wrap -->
                </hbox>
                <hbox id="pending-container" align="center" class="pending">
                  <image class="pending-icon"/>
                  <label id="detail-pending" flex="1"/>
                  <button id="detail-restart-btn" class="button-link"
                          label="&addon.restartNow.label;"
                          command="cmd_restartApp"/>
                  <button id="detail-undo-btn" class="button-link"
                          label="&addon.undoAction.label;"
                          tooltipText="&addon.undoAction.tooltip;"
                          command="cmd_cancelOperation"/>
                  <spacer flex="5000"/> <!-- Necessary to allow the message to wrap -->
                </hbox>
              </vbox>
              <hbox align="start">
                <image id="detail-icon" class="icon"/>
                <vbox flex="1">
                  <vbox id="detail-summary">
                    <hbox id="detail-name-container" class="name-container"
                          align="start">
                      <label id="detail-name" flex="1"/>
                      <label id="detail-version"/>
                      <label class="disabled-postfix" value="&addon.disabled.postfix;"/>
                      <label class="update-postfix" value="&addon.update.postfix;"/>
                      <spacer flex="5000"/> <!-- Necessary to allow the name to wrap -->
                    </hbox>
                    <label id="detail-creator" class="creator"/>
                  </vbox>
                  <hbox id="detail-desc-container" align="start">
                    <image id="detail-screenshot" hidden="true"/>
                    <description id="detail-desc" flex="1"/>
                  </hbox>
                  <vbox id="detail-contributions">
                    <description id="detail-contrib-description">
                      &detail.contributions.description;
                    </description>
                    <hbox align="center">
                      <label id="detail-contrib-suggested"/>
                      <spacer flex="1"/>
                      <button id="detail-contrib-btn"
                              label="&cmd.contribute.label;"
                              accesskey="&cmd.contribute.accesskey;"
                              tooltiptext="&cmd.contribute.tooltip;"
                              command="cmd_contribute"/>
                    </hbox>
                  </vbox>
                  <grid id="detail-grid">
                    <columns>
                       <column flex="1"/>
                       <column flex="2"/>
                    </columns>
                    <rows>
                      <row class="detail-row" id="detail-dateUpdated" label="&detail.lastupdated.label;"/>
                      <row class="detail-row-complex" id="detail-updates-row">
                        <label class="detail-row-label" value="&detail.updateType;"/>
                        <hbox align="center">
                          <radiogroup id="detail-autoUpdate" orient="horizontal">
                            <!-- The values here need to match the values of
                                 AddonManager.AUTOUPDATE_* -->
                            <radio label="&detail.updateDefault.label;"
                                   tooltiptext="&detail.updateDefault.tooltip;"
                                   value="1"/>
                            <radio label="&detail.updateAutomatic.label;"
                                   tooltiptext="&detail.updateAutomatic.tooltip;"
                                   value="2"/>
                            <radio label="&detail.updateManual.label;"
                                   tooltiptext="&detail.updateManual.tooltip;"
                                   value="0"/>
                          </radiogroup>
                          <button id="detail-findUpdates-btn" class="button-link"
                                  label="&detail.checkForUpdates.label;"
                                  accesskey="&detail.checkForUpdates.accesskey;"
                                  tooltiptext="&detail.checkForUpdates.tooltip;"
                                  command="cmd_findItemUpdates"/>
                        </hbox>
                      </row>
                      <row class="detail-row-complex" id="detail-homepage-row" label="&detail.home;">
                        <label class="detail-row-label" value="&detail.home;"/>
                        <label id="detail-homepage" class="detail-row-value text-link" crop="end"/>
                      </row>
                      <row class="detail-row-complex" id="detail-repository-row" label="&detail.repository;">
                        <label class="detail-row-label" value="&detail.repository;"/>
                        <label id="detail-repository" class="detail-row-value text-link"/>
                      </row>
                      <row class="detail-row" id="detail-size" label="&detail.size;"/>
                      <row class="detail-row-complex" id="detail-rating-row">
                        <label class="detail-row-label" value="&rating2.label;"/>
                        <hbox>
                          <label id="detail-rating" class="meta-value meta-rating"
                                 showrating="average"/>
                          <label id="detail-reviews" class="text-link"/>
                        </hbox>
                      </row>
                      <row class="detail-row" id="detail-downloads" label="&detail.numberOfDownloads.label;"/>
                    </rows>
                  </grid>
                  <hbox id="detail-controls">
                    <button id="detail-prefs-btn" class="addon-control preferences"
#ifdef XP_WIN
                            label="&detail.showPreferencesWin.label;"
                            accesskey="&detail.showPreferencesWin.accesskey;"
                            tooltiptext="&detail.showPreferencesWin.tooltip;"
#else
                            label="&detail.showPreferencesUnix.label;"
                            accesskey="&detail.showPreferencesUnix.accesskey;"
                            tooltiptext="&detail.showPreferencesUnix.tooltip;"
#endif
                            command="cmd_showItemPreferences"/>
                    <spacer flex="1"/>
                    <button id="detail-uninstall-btn" class="addon-control remove"
                            label="&cmd.uninstallAddon.label;"
                            accesskey="&cmd.uninstallAddon.accesskey;"
                            command="cmd_uninstallItem"/>
                    <button id="detail-enable-btn" class="addon-control enable"
                            label="&cmd.enableAddon.label;"
                            accesskey="&cmd.enableAddon.accesskey;"
                            command="cmd_enableItem"/>
                    <button id="detail-disable-btn" class="addon-control disable"
                            label="&cmd.disableAddon.label;"
                            accesskey="&cmd.disableAddon.accesskey;"
                            command="cmd_disableItem"/>
                    <button id="detail-install-btn" class="addon-control install"
                            label="&cmd.installAddon.label;"
                            accesskey="&cmd.installAddon.accesskey;"
                            command="cmd_installItem"/>
                  </hbox>
                </vbox>
              </hbox>
            </vbox>
            <spacer flex="1"/>
          </hbox>
        </scrollbox>

      </deck>

    </box>
  </hbox>

</page>