diff options
Diffstat (limited to 'browser/components/downloads/content/downloads.css')
-rw-r--r-- | browser/components/downloads/content/downloads.css | 267 |
1 files changed, 267 insertions, 0 deletions
diff --git a/browser/components/downloads/content/downloads.css b/browser/components/downloads/content/downloads.css new file mode 100644 index 000000000..dd47c6f91 --- /dev/null +++ b/browser/components/downloads/content/downloads.css @@ -0,0 +1,267 @@ +/* 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/. */ + +/*** Downloads Panel ***/ + +richlistitem[type="download"] { + -moz-binding: url('chrome://browser/content/downloads/download.xml#download'); +} + +richlistitem[type="download"]:not([selected]) button { + /* Only focus buttons in the selected item. */ + -moz-user-focus: none; +} + +.downloadsHideDropmarker > #downloadsFooterButtonsSplitter, +.downloadsHideDropmarker > #downloadsFooterDropmarker { + display: none; +} + +richlistitem[type="download"].download-state[state="1"]:not([exists]) > .downloadButtonArea, +richlistitem[type="download"].download-state[state="1"]:not([exists]) > toolbarseparator { + display: none; +} + +#downloadsSummary:not([inprogress]) > vbox > #downloadsSummaryProgress, +#downloadsSummary:not([inprogress]) > vbox > #downloadsSummaryDetails, +#downloadsFooter:not([showingsummary]) #downloadsSummary { + display: none; +} + +#downloadsFooter[showingdropdown] > stack > #downloadsSummary, +#downloadsFooter[showingsummary] > stack:hover > #downloadsSummary, +#downloadsFooter[showingsummary]:not([showingdropdown]) > stack:not(:hover) > #downloadsFooterButtons { + /* If we used "visibility: hidden;" then the mouseenter event of + #downloadsHistory wouldn't be triggered immediately, and the hover styling + of the button would not apply until the mouse is moved again. + + "-moz-user-focus: ignore;" prevents the elements with "opacity: 0;" from + being focused with the keyboard. */ + opacity: 0; + -moz-user-focus: ignore; +} + +/*** Downloads View ***/ + +/** + * 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"); +} + +richlistitem.download button { + /* These buttons should never get focus, as that would "disable" + the downloads view controller (it's only used when the richlistbox + is focused). */ + -moz-user-focus: none; +} + +/*** Visibility of controls inside download items ***/ +.download-state:not(:-moz-any([state="6"], /* Blocked (parental) */ + [state="8"], /* Blocked (dirty) */ + [state="9"]) /* Blocked (policy) */) + .downloadBlockedBadge, + +.download-state:not(:-moz-any([state="-1"],/* Starting (initial) */ + [state="5"], /* Starting (queued) */ + [state="0"], /* Downloading */ + [state="4"], /* Paused */ + [state="7"]) /* Scanning */) + .downloadProgress, + +.download-state:not( [state="0"] /* Downloading */) + .downloadPauseMenuItem, + +.download-state:not( [state="4"] /* Paused */) + .downloadResumeMenuItem, + +/* Blocked (dirty) downloads that have not been confirmed and + have temporary data. */ +.download-state:not( [state="8"] /* Blocked (dirty) */) + .downloadUnblockMenuItem, +.download-state[state="8"]:not(.temporary-block) + .downloadUnblockMenuItem, + +.download-state:not(:-moz-any([state="2"], /* Failed */ + [state="4"]) /* Paused */) + .downloadCancelMenuItem, + +.download-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"] .downloadCommandsSeparator + +{ + display: none; +} + +/*** Visibility of download buttons ***/ + +.download-state:not(:-moz-any([state="-1"],/* Starting (initial) */ + [state="5"], /* Starting (queued) */ + [state="0"], /* Downloading */ + [state="4"]) /* Paused */) + .downloadCancel, + +/* Blocked (dirty) downloads that have not been confirmed and + have temporary data, for the Malware case. */ +.download-state:not( [state="8"] /* Blocked (dirty) */) + .downloadConfirmBlock, +.download-state[state="8"]:not(.temporary-block) + .downloadConfirmBlock, +.download-state[state="8"].temporary-block:not([verdict="Malware"]) + .downloadConfirmBlock, + +/* Blocked (dirty) downloads that have not been confirmed and + have temporary data, for the Potentially Unwanted case. */ +.download-state:not( [state="8"] /* Blocked (dirty) */) + .downloadChooseUnblock, +.download-state[state="8"]:not(.temporary-block) + .downloadChooseUnblock, +.download-state[state="8"].temporary-block:not([verdict="PotentiallyUnwanted"]) + .downloadChooseUnblock, + +/* Blocked (dirty) downloads that have not been confirmed and + have temporary data, for the Uncommon case. */ +.download-state:not( [state="8"] /* Blocked (dirty) */) + .downloadChooseOpen, +.download-state[state="8"]:not(.temporary-block) + .downloadChooseOpen, +.download-state[state="8"].temporary-block:not([verdict="Uncommon"]) + .downloadChooseOpen, + +.download-state:not(:-moz-any([state="2"], /* Failed */ + [state="3"]) /* Canceled */) + .downloadRetry, + +.download-state:not( [state="1"] /* Finished */) + .downloadShow, + +.download-state:-moz-any( [state="6"], /* Blocked (parental) */ + [state="7"], /* Scanning */ + [state="9"]) /* Blocked (policy) */ + > toolbarseparator, + +/* The "show blocked info" button is shown only in the downloads panel. */ +.downloadShowBlockedInfo +{ + display: none; +} + +/*** Downloads panel ***/ + +#downloadsPanel[hasdownloads] #emptyDownloads, +#downloadsPanel:not([hasdownloads]) #downloadsListBox { + display: none; +} + +/*** Downloads panel multiview (main view and blocked-downloads subview) ***/ + +/* Hide all the usual buttons. */ +#downloadsPanel-mainView .download-state[state="8"] .downloadCancel, +#downloadsPanel-mainView .download-state[state="8"] .downloadConfirmBlock, +#downloadsPanel-mainView .download-state[state="8"] .downloadChooseUnblock, +#downloadsPanel-mainView .download-state[state="8"] .downloadChooseOpen, +#downloadsPanel-mainView .download-state[state="8"] .downloadRetry, +#downloadsPanel-mainView .download-state[state="8"] .downloadShow { + display: none; +} + +/* Make the panel wide enough to show the download list items without improperly + truncating them. */ +#downloadsPanel-multiView > .panel-viewcontainer, +#downloadsPanel-multiView > .panel-viewcontainer > .panel-viewstack, +#downloadsPanel-multiView > .panel-viewcontainer > .panel-viewstack > .panel-mainview { + max-width: unset; +} + +/* Show the "show blocked info" button. */ +#downloadsPanel-mainView .download-state[state="8"] .downloadShowBlockedInfo { + display: inline; +} + +/** When the main view is showing... **/ + +/* The subview should be off to the right and not visible at all. */ +#downloadsPanel-multiView > .panel-viewcontainer > .panel-viewstack[viewtype=main] > .panel-subviews { + transform: translateX(101%); + transition: transform var(--panelui-subview-transition-duration); +} + +#downloadsPanel-multiView > .panel-viewcontainer > .panel-viewstack[viewtype=main] > .panel-subviews:-moz-locale-dir(rtl) { + transform: translateX(-101%); +} + +/** When the subview is showing... **/ + +/* Hide the buttons of all downloads except the one that triggered the + subview. */ +#downloadsPanel-multiView > .panel-viewcontainer > .panel-viewstack[viewtype="subview"] .download-state:not([showingsubview]) .downloadButton { + visibility: hidden; +} + +/* For the download that triggered the subview, move its button farther to the + right by removing padding so that a minimum amount of the main view's right + edge needs to be shown. */ +#downloadsPanel-multiView > .panel-viewcontainer > .panel-viewstack[viewtype="subview"] .download-state[showingsubview] { + padding: 0; +} + +/* The main view should slide to the left and its right edge should remain + visible. */ +#downloadsPanel-multiView > .panel-viewcontainer > .panel-viewstack[viewtype=subview] > .panel-mainview { + transform: translateX(calc(-100% + 38px)); + transition: transform var(--panelui-subview-transition-duration); +} + +#downloadsPanel-multiView > .panel-viewcontainer > .panel-viewstack[viewtype=subview] > .panel-mainview:-moz-locale-dir(rtl) { + transform: translateX(calc(100% - 38px)); +} + +/* The subview should leave the right edge of the main view uncovered. */ +#downloadsPanel-multiView > .panel-viewcontainer > .panel-viewstack > .panel-subviews { + /* Use a margin instead of a transform like above so that the subview's width + isn't wider than the panel. */ + -moz-margin-start: 38px !important; +} + +/* Prevent keyboard interaction in the main view by preventing all elements in + the main view from being focused... */ +#downloadsPanel-multiView > .panel-viewcontainer > .panel-viewstack[viewtype="subview"] > .panel-mainview #downloadsListBox, +#downloadsPanel-multiView > .panel-viewcontainer > .panel-viewstack[viewtype="subview"] > .panel-mainview richlistitem, +#downloadsPanel-multiView > .panel-viewcontainer > .panel-viewstack[viewtype="subview"] > .panel-mainview .downloadButton, +#downloadsPanel-multiView > .panel-viewcontainer > .panel-viewstack[viewtype="subview"] > .panel-mainview .downloadsPanelFooterButton, +#downloadsPanel-multiView > .panel-viewcontainer > .panel-viewstack[viewtype="subview"] > .panel-mainview #downloadsSummary { + -moz-user-focus: ignore; +} +/* ... except for the downloadShowBlockedInfo button in the blocked download. + Selecting it with the keyboard should show the main view again. */ +#downloadsPanel-multiView > .panel-viewcontainer > .panel-viewstack[viewtype="subview"] .download-state[showingsubview] .downloadShowBlockedInfo { + -moz-user-focus: normal; +} |