/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */

/**
 * The downloads richlistbox may list thousands of items, and it turns out
 * XBL binding attachment, and even more so detachment, is a performance hog.
 * This hack makes sure we don't apply any binding to inactive items (inactive
 * items are history downloads that haven't been in the visible area).
 * We can do this because the richlistbox implementation does not interact
 * much with the richlistitem binding.  However, this may turn out to have
 * some side effects (see bug 828111 for the details).
 *
 * We might be able to do away with this workaround once bug 653881 is fixed.
 */
richlistitem.download {
  -moz-binding: none;
}

richlistitem.download[active] {
  -moz-binding: url('chrome://browser/content/downloads/download.xml#download-full-ui');
}

richlistitem.download[active]:-moz-any([state="-1"],/* Starting (initial) */
                                       [state="0"], /* Downloading        */
                                       [state="4"], /* Paused             */
                                       [state="5"], /* Starting (queued)  */
                                       [state="7"]) /* Scanning           */
{
  -moz-binding: url('chrome://browser/content/downloads/download.xml#download-in-progress-full-ui');
}

.download-state:not(          [state="0"]  /* Downloading        */)
                                           .downloadPauseMenuItem,
.download-state:not(          [state="4"]  /* Paused             */)
                                           .downloadResumeMenuItem,
.download-state:not(:-moz-any([state="2"], /* Failed             */
                              [state="4"]) /* Paused             */)
                                           .downloadCancelMenuItem,
.download-state[state]:not(:-moz-any([state="1"], /* Finished           */
                                     [state="2"], /* Failed             */
                                     [state="3"], /* Canceled           */
                                     [state="6"], /* Blocked (parental) */
                                     [state="8"], /* Blocked (dirty)    */
                                     [state="9"]) /* Blocked (policy)   */)
                                           .downloadRemoveFromHistoryMenuItem,
.download-state:not(:-moz-any([state="-1"],/* Starting (initial) */
                              [state="0"], /* Downloading        */
                              [state="1"], /* Finished           */
                              [state="4"], /* Paused             */
                              [state="5"]) /* Starting (queued)  */)
                                           .downloadShowMenuItem,
.download-state[state="7"] /* Scanning */  .downloadCommandsSeparator
{
  display: none;
}