зеркало из https://github.com/mozilla/gecko-dev.git
Backed out 5 changesets (bug 1488730, bug 1490366, bug 1488727) for bc failures in | toolkit/mozapps/extensions/test/browser/browser_details.js and browser/components/enterprisepolicies/tests/browser/browser_policy_disable_flash_plugin.js CLOSED TREE
Backed out changeset 9cd889824b1c (bug 1488730) Backed out changeset 4d076c865471 (bug 1488727) Backed out changeset 0b8bcd97f254 (bug 1490366) Backed out changeset 448672780572 (bug 1490366) Backed out changeset 7e0abd16a50b (bug 1490366)
This commit is contained in:
Родитель
747e547262
Коммит
27d0f9d0d2
|
@ -250,82 +250,45 @@ button {
|
|||
}
|
||||
|
||||
.addon-target-container {
|
||||
background: #fff;
|
||||
box-shadow: 0 0 1px rgba(0, 0, 0, 0.12);
|
||||
list-style-type: none;
|
||||
margin: 16px 0;
|
||||
font-size: 13px;
|
||||
margin: 0 0 8px;
|
||||
padding: 4px 16px;
|
||||
transition: box-shadow 150ms;
|
||||
}
|
||||
|
||||
.target-card-heading {
|
||||
margin: 0;
|
||||
.addon-target-container:hover {
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.24);
|
||||
}
|
||||
|
||||
.target-card-heading {
|
||||
.addon-target-container .target {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
margin: 0;
|
||||
padding: 0 0 16px;
|
||||
padding: 16px 0;
|
||||
}
|
||||
|
||||
.addon-target-name {
|
||||
font-size: 15px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.target-card-heading-icon {
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
margin-inline-end: 16px;
|
||||
}
|
||||
|
||||
.target-card-actions {
|
||||
.addon-target-actions {
|
||||
border-top: 1px solid rgba(0, 0, 0, 0.2);
|
||||
padding-top: 16px;
|
||||
}
|
||||
|
||||
.target-card-action-link {
|
||||
background: none;
|
||||
border: none;
|
||||
color: #0087ff;
|
||||
font-size: 13px;
|
||||
/* Use some negative top margin to account for the padding and keep the
|
||||
* button vertically centred. */
|
||||
margin: -4px 0 0 12px;
|
||||
min-width: auto;
|
||||
padding: 4px;
|
||||
transition: color 150ms;
|
||||
}
|
||||
|
||||
.target-card-action-link:first-of-type {
|
||||
/* Other action buttons will have 12px of margin to space between each other,
|
||||
* but for the first button subtract the start padding to align with the border. */
|
||||
margin-inline-start: -4px;
|
||||
}
|
||||
|
||||
.target-card-action-link:active,
|
||||
.target-card-action-link:hover,
|
||||
.target-card-action-link:enabled:hover:active {
|
||||
background: none;
|
||||
}
|
||||
|
||||
.target-card-action-link:disabled {
|
||||
color: #999;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.target-card-action-link:enabled:focus,
|
||||
.target-card-action-link:enabled:hover {
|
||||
background: none;
|
||||
color: #0052cc;
|
||||
cursor: pointer;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.target-card-action-link:enabled:hover:active {
|
||||
color: #003399;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.addon-target-icon.target-icon {
|
||||
.addon-target-container .target-icon {
|
||||
margin-inline-end: 16px;
|
||||
}
|
||||
|
||||
.addon-target-container .name {
|
||||
align-self: center;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.addon-target-info {
|
||||
display: grid;
|
||||
grid-template-columns: 128px 1fr;
|
||||
|
@ -348,6 +311,47 @@ button {
|
|||
padding-left: 1ch;
|
||||
}
|
||||
|
||||
.addon-target-button {
|
||||
background: none;
|
||||
border: none;
|
||||
color: #0087ff;
|
||||
font-size: 13px;
|
||||
margin: 12px;
|
||||
min-width: auto;
|
||||
padding: 4px;
|
||||
transition: color 150ms;
|
||||
}
|
||||
|
||||
.addon-target-button:active,
|
||||
.addon-target-button:hover,
|
||||
.addon-target-button:enabled:hover:active {
|
||||
background: none;
|
||||
}
|
||||
|
||||
.addon-target-button:disabled {
|
||||
color: #999;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.addon-target-button:enabled:focus,
|
||||
.addon-target-button:enabled:hover {
|
||||
background: none;
|
||||
color: #0052cc;
|
||||
cursor: pointer;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.addon-target-button:enabled:hover:active {
|
||||
color: #003399;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.addon-target-button:first-of-type {
|
||||
/* Subtract the start padding so the button is still a bigger click target but
|
||||
* lines up with the icon. */
|
||||
margin-inline-start: -4px;
|
||||
}
|
||||
|
||||
.addon-target-messages {
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.2);
|
||||
margin-bottom: 16px;
|
||||
|
|
|
@ -209,10 +209,10 @@ class AddonTarget extends Component {
|
|||
const { target, debugDisabled } = this.props;
|
||||
|
||||
return dom.li(
|
||||
{ className: "card addon-target-container", "data-addon-id": target.addonID },
|
||||
dom.div({ className: "target-card-heading target" },
|
||||
{ className: "addon-target-container", "data-addon-id": target.addonID },
|
||||
dom.div({ className: "target" },
|
||||
dom.img({
|
||||
className: "target-icon addon-target-icon",
|
||||
className: "target-icon",
|
||||
role: "presentation",
|
||||
src: target.icon
|
||||
}),
|
||||
|
@ -227,21 +227,21 @@ class AddonTarget extends Component {
|
|||
...addonIDforTarget(target),
|
||||
...internalIDForTarget(target),
|
||||
),
|
||||
dom.div({className: "target-card-actions"},
|
||||
dom.div({className: "addon-target-actions"},
|
||||
dom.button({
|
||||
className: "target-card-action-link debug-button addon-target-button",
|
||||
className: "debug-button addon-target-button",
|
||||
onClick: this.debug,
|
||||
disabled: debugDisabled,
|
||||
}, Strings.GetStringFromName("debug")),
|
||||
target.temporarilyInstalled
|
||||
? dom.button({
|
||||
className: "target-card-action-link reload-button addon-target-button",
|
||||
className: "reload-button addon-target-button",
|
||||
onClick: this.reload,
|
||||
}, Strings.GetStringFromName("reload"))
|
||||
: null,
|
||||
target.temporarilyInstalled
|
||||
? dom.button({
|
||||
className: "target-card-action-link uninstall-button addon-target-button",
|
||||
className: "uninstall-button addon-target-button",
|
||||
onClick: this.uninstall,
|
||||
}, Strings.GetStringFromName("remove"))
|
||||
: null,
|
||||
|
|
|
@ -888,10 +888,6 @@
|
|||
if (this.getRowCount() > 0) {
|
||||
if (this.currentIndex == -1) {
|
||||
this.currentIndex = this.getIndexOfFirstVisibleRow();
|
||||
let currentItem = this.getItemAtIndex(this.currentIndex);
|
||||
if (currentItem) {
|
||||
this.selectItem(currentItem);
|
||||
}
|
||||
} else {
|
||||
this.currentItem._fireEvent("DOMMenuItemActive");
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<!ENTITY addons.windowTitle "Add-ons Manager">
|
||||
|
||||
<!ENTITY search.placeholder3 "Search addons.mozilla.org">
|
||||
<!ENTITY search.placeholder2 "Search on addons.mozilla.org">
|
||||
<!ENTITY search.buttonlabel "Search">
|
||||
<!-- LOCALIZATION NOTE (search.commandkey):
|
||||
The search command key should match findOnCmd.commandkey from browser.dtd -->
|
||||
|
|
|
@ -107,12 +107,3 @@ type.unsupported.name=Unsupported
|
|||
legacyWarning.description=Missing something? Some extensions are no longer supported by %S.
|
||||
#LOCALIZATION NOTE(legacyThemeWarning.description) %S is the brandShortName
|
||||
legacyThemeWarning.description=Missing something? Some themes are no longer supported by %S.
|
||||
|
||||
listHeading.extension=Manage your extensions
|
||||
listHeading.theme=Manage your themes
|
||||
listHeading.plugin=Manage your plugins
|
||||
listHeading.locale=Manage your languages
|
||||
listHeading.dictionary=Manage your dictionaries
|
||||
|
||||
searchLabel.extension=Find more extensions
|
||||
searchLabel.theme=Find more themes
|
||||
|
|
|
@ -125,6 +125,14 @@ function initialize(event) {
|
|||
gViewController.doCommand(event.target.id);
|
||||
});
|
||||
|
||||
let detailScreenshot = document.getElementById("detail-screenshot");
|
||||
detailScreenshot.addEventListener("load", function(event) {
|
||||
this.removeAttribute("loading");
|
||||
});
|
||||
detailScreenshot.addEventListener("error", function(event) {
|
||||
this.setAttribute("loading", "error");
|
||||
});
|
||||
|
||||
let addonPage = document.getElementById("addons-page");
|
||||
addonPage.addEventListener("dragenter", function(event) {
|
||||
gDragDrop.onDragOver(event);
|
||||
|
@ -278,18 +286,6 @@ function isDiscoverEnabled() {
|
|||
return true;
|
||||
}
|
||||
|
||||
function setSearchLabel(type) {
|
||||
let searchLabel = document.getElementById("search-label");
|
||||
if (type == "extension" || type == "theme") {
|
||||
searchLabel
|
||||
.textContent = gStrings.ext.GetStringFromName(`searchLabel.${type}`);
|
||||
searchLabel.hidden = false;
|
||||
} else {
|
||||
searchLabel.textContent = "";
|
||||
searchLabel.hidden = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtain the main DOMWindow for the current context.
|
||||
*/
|
||||
|
@ -1477,7 +1473,7 @@ function shouldShowVersionNumber(aAddon) {
|
|||
function createItem(aObj, aIsInstall) {
|
||||
let item = document.createXULElement("richlistitem");
|
||||
|
||||
item.setAttribute("class", "addon addon-view card");
|
||||
item.setAttribute("class", "addon addon-view");
|
||||
item.setAttribute("name", aObj.name);
|
||||
item.setAttribute("type", aObj.type);
|
||||
|
||||
|
@ -2392,14 +2388,6 @@ var gListView = {
|
|||
this.node.setAttribute("type", aType);
|
||||
this.showEmptyNotice(false);
|
||||
|
||||
try {
|
||||
document.getElementById("list-view-heading-name")
|
||||
.textContent = gStrings.ext.GetStringFromName(`listHeading.${aType}`);
|
||||
setSearchLabel(aType);
|
||||
} catch (e) {
|
||||
// In tests we sometimes render this view with a type we don't support, that's fine.
|
||||
}
|
||||
|
||||
this._listBox.textContent = "";
|
||||
|
||||
if (aType == "plugin") {
|
||||
|
@ -2598,8 +2586,6 @@ var gDetailView = {
|
|||
},
|
||||
|
||||
_updateView(aAddon, aIsRemote, aScrollToPreferences) {
|
||||
setSearchLabel(aAddon.type);
|
||||
|
||||
AddonManager.addManagerListener(this);
|
||||
this.clearLoading();
|
||||
|
||||
|
@ -2634,6 +2620,24 @@ var gDetailView = {
|
|||
version.hidden = true;
|
||||
}
|
||||
|
||||
var screenshotbox = document.getElementById("detail-screenshot-box");
|
||||
var screenshot = document.getElementById("detail-screenshot");
|
||||
if (aAddon.screenshots && aAddon.screenshots.length > 0) {
|
||||
if (aAddon.screenshots[0].thumbnailURL) {
|
||||
screenshot.src = aAddon.screenshots[0].thumbnailURL;
|
||||
screenshot.width = aAddon.screenshots[0].thumbnailWidth;
|
||||
screenshot.height = aAddon.screenshots[0].thumbnailHeight;
|
||||
} else {
|
||||
screenshot.src = aAddon.screenshots[0].url;
|
||||
screenshot.width = aAddon.screenshots[0].width;
|
||||
screenshot.height = aAddon.screenshots[0].height;
|
||||
}
|
||||
screenshot.setAttribute("loading", "true");
|
||||
screenshotbox.hidden = false;
|
||||
} else {
|
||||
screenshotbox.hidden = true;
|
||||
}
|
||||
|
||||
var desc = document.getElementById("detail-desc");
|
||||
desc.textContent = aAddon.description;
|
||||
|
||||
|
|
|
@ -625,6 +625,21 @@
|
|||
|
||||
<xul:hbox class="advancedinfo-container" flex="1">
|
||||
<xul:vbox class="description-outer-container" flex="1">
|
||||
<xul:hbox class="description-container">
|
||||
<xul:label anonid="description" class="description" crop="end" flex="1"/>
|
||||
<xul:button anonid="details-btn" class="details button-link"
|
||||
label="&addon.details.label;"
|
||||
tooltiptext="&addon.details.tooltip;"
|
||||
oncommand="document.getBindingParent(this).showInDetailView();"/>
|
||||
<xul:spacer flex="5000"/> <!-- Necessary to make the description crop -->
|
||||
</xul:hbox>
|
||||
<xul:vbox anonid="relnotes-container" class="relnotes-container">
|
||||
<xul:label class="relnotes-header" value="&addon.releaseNotes.label;"/>
|
||||
<xul:label anonid="relnotes-loading" value="&addon.loadingReleaseNotes.label;"/>
|
||||
<xul:label anonid="relnotes-error" hidden="true"
|
||||
value="&addon.errorLoadingReleaseNotes.label;"/>
|
||||
<xul:vbox anonid="relnotes" class="relnotes"/>
|
||||
</xul:vbox>
|
||||
<xul:hbox class="relnotes-toggle-container">
|
||||
<xul:button anonid="relnotes-toggle-btn" class="relnotes-toggle"
|
||||
hidden="true" label="&cmd.showReleaseNotes.label;"
|
||||
|
@ -635,13 +650,6 @@
|
|||
hidetooltip="&cmd.hideReleaseNotes.tooltip;"
|
||||
oncommand="document.getBindingParent(this).toggleReleaseNotes();"/>
|
||||
</xul:hbox>
|
||||
<xul:vbox anonid="relnotes-container" class="relnotes-container">
|
||||
<xul:label class="relnotes-header" value="&addon.releaseNotes.label;"/>
|
||||
<xul:label anonid="relnotes-loading" value="&addon.loadingReleaseNotes.label;"/>
|
||||
<xul:label anonid="relnotes-error" hidden="true"
|
||||
value="&addon.errorLoadingReleaseNotes.label;"/>
|
||||
<xul:vbox anonid="relnotes" class="relnotes"/>
|
||||
</xul:vbox>
|
||||
</xul:vbox>
|
||||
</xul:hbox>
|
||||
</xul:vbox>
|
||||
|
@ -786,6 +794,10 @@
|
|||
document.getAnonymousElementByAttribute(this, "anonid",
|
||||
"date-updated");
|
||||
</field>
|
||||
<field name="_description">
|
||||
document.getAnonymousElementByAttribute(this, "anonid",
|
||||
"description");
|
||||
</field>
|
||||
<field name="_stateMenulist">
|
||||
document.getAnonymousElementByAttribute(this, "anonid",
|
||||
"state-menulist");
|
||||
|
@ -907,6 +919,11 @@
|
|||
else
|
||||
this._icon.src = "";
|
||||
|
||||
if (this.mAddon.description)
|
||||
this._description.value = this.mAddon.description;
|
||||
else
|
||||
this._description.hidden = true;
|
||||
|
||||
let legacyWarning = legacyExtensionsEnabled && !this.mAddon.install &&
|
||||
isLegacyExtension(this.mAddon);
|
||||
this.setAttribute("legacy", legacyWarning);
|
||||
|
@ -1488,9 +1505,18 @@
|
|||
|
||||
<handlers>
|
||||
<handler event="click" button="0"><![CDATA[
|
||||
if (!["button", "checkbox"].includes(event.originalTarget.localName) &&
|
||||
!event.originalTarget.classList.contains("text-link")) {
|
||||
this.showInDetailView();
|
||||
switch (event.detail) {
|
||||
case 1:
|
||||
// Prevent double-click where the UI changes on the first click
|
||||
this._lastClickTarget = event.originalTarget;
|
||||
break;
|
||||
case 2:
|
||||
if (event.originalTarget.localName != "button" &&
|
||||
!event.originalTarget.classList.contains("text-link") &&
|
||||
event.originalTarget == this._lastClickTarget) {
|
||||
this.showInDetailView();
|
||||
}
|
||||
break;
|
||||
}
|
||||
]]></handler>
|
||||
</handlers>
|
||||
|
|
|
@ -215,139 +215,76 @@
|
|||
<!-- container for views with the search/tools header -->
|
||||
<vbox id="headered-views" flex="1">
|
||||
<!-- main header -->
|
||||
<hbox id="header">
|
||||
<hbox id="header-inner" align="center">
|
||||
<button id="show-all-extensions" hidden="true"
|
||||
label="&showAllExtensions.button.label;"
|
||||
command="cmd_showAllExtensions"/>
|
||||
<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>
|
||||
<button id="show-disabled-unsigned-extensions" hidden="true"
|
||||
class="warning"
|
||||
label="&showUnsignedExtensions.button.label;"
|
||||
command="cmd_showUnsignedExtensions"/>
|
||||
<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"/>
|
||||
<menuitem id="utils-debugAddons"
|
||||
label="&debugAddons.label;"
|
||||
accesskey="&debugAddons.accesskey;"
|
||||
command="cmd_debugAddons"/>
|
||||
<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"
|
||||
searchbuttonlabel="&search.buttonlabel;"
|
||||
placeholder="&search.placeholder2;" maxlength="100"/>
|
||||
<hbox id="header" align="center">
|
||||
<button id="show-all-extensions" hidden="true"
|
||||
label="&showAllExtensions.button.label;"
|
||||
command="cmd_showAllExtensions"/>
|
||||
<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>
|
||||
<button id="show-disabled-unsigned-extensions" hidden="true"
|
||||
class="warning"
|
||||
label="&showUnsignedExtensions.button.label;"
|
||||
command="cmd_showUnsignedExtensions"/>
|
||||
<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"/>
|
||||
<menuitem id="utils-debugAddons"
|
||||
label="&debugAddons.label;"
|
||||
accesskey="&debugAddons.accesskey;"
|
||||
command="cmd_debugAddons"/>
|
||||
<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"
|
||||
searchbuttonlabel="&search.buttonlabel;"
|
||||
placeholder="&search.placeholder2;" maxlength="100"/>
|
||||
</hbox>
|
||||
|
||||
<deck id="headered-views-content" flex="1" selectedIndex="0">
|
||||
<!-- list view -->
|
||||
<vbox id="list-view" flex="1" class="view-pane" align="stretch" tabindex="0">
|
||||
<hbox id="list-view-heading">
|
||||
<hbox class="list-view-heading-inner">
|
||||
<label id="list-view-heading-name" class="header-name" 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"/>
|
||||
<menuitem id="utils-debugAddons"
|
||||
label="&debugAddons.label;"
|
||||
accesskey="&debugAddons.accesskey;"
|
||||
command="cmd_debugAddons"/>
|
||||
<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>
|
||||
</hbox>
|
||||
</hbox>
|
||||
|
||||
<!-- info UI for add-ons that have been disabled for being unsigned -->
|
||||
<vbox id="disabled-unsigned-addons-info" hidden="true">
|
||||
<label id="disabled-unsigned-addons-heading" value="&disabledUnsigned.heading;"/>
|
||||
|
@ -493,7 +430,7 @@
|
|||
</vbox>
|
||||
|
||||
<!-- detail view -->
|
||||
<scrollbox id="detail-view" class="view-pane addon-view" orient="vertical" tabindex="0"
|
||||
<scrollbox id="detail-view" flex="1" class="view-pane addon-view" orient="vertical" tabindex="0"
|
||||
role="document">
|
||||
<!-- global warnings -->
|
||||
<hbox class="global-warning-container global-warning">
|
||||
|
@ -525,7 +462,8 @@
|
|||
command="cmd_enableUpdateSecurity"/>
|
||||
<spacer flex="5000"/> <!-- Necessary to allow the message to wrap -->
|
||||
</hbox>
|
||||
<hbox class="detail-view-wrapper">
|
||||
<hbox flex="1">
|
||||
<spacer flex="1"/>
|
||||
<!-- "loading" splash screen -->
|
||||
<vbox class="alert-container">
|
||||
<spacer class="alert-spacer-before"/>
|
||||
|
@ -536,7 +474,7 @@
|
|||
<spacer class="alert-spacer-after"/>
|
||||
</vbox>
|
||||
<!-- actual detail view -->
|
||||
<vbox class="detail-view-container" contextmenu="addonitem-popup">
|
||||
<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"/>
|
||||
|
@ -563,29 +501,32 @@
|
|||
<spacer flex="5000"/> <!-- Necessary to allow the message to wrap -->
|
||||
</hbox>
|
||||
</vbox>
|
||||
<hbox class="card addon-detail" align="start">
|
||||
<hbox align="start">
|
||||
<vbox id="detail-icon-container" align="end">
|
||||
<image id="detail-icon" class="icon"/>
|
||||
</vbox>
|
||||
<vbox flex="1">
|
||||
<hbox align="start">
|
||||
<vbox id="detail-icon-container" align="end">
|
||||
<image id="detail-icon" class="icon"/>
|
||||
<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 id="detail-legacy-warning" class="legacy-warning text-link" value="&addon.legacy.label;"/>
|
||||
<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">
|
||||
<vbox id="detail-screenshot-box" pack="center" hidden="true"> <!-- Necessary to work around bug 394738 -->
|
||||
<image id="detail-screenshot"/>
|
||||
</vbox>
|
||||
<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 id="detail-legacy-warning" class="legacy-warning text-link" value="&addon.legacy.label;"/>
|
||||
<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 flex="1">
|
||||
<description id="detail-desc"/>
|
||||
<description id="detail-fulldesc"/>
|
||||
</vbox>
|
||||
</hbox>
|
||||
<vbox id="detail-desc-container" align="start" flex="1">
|
||||
<description id="detail-desc"/>
|
||||
<description id="detail-fulldesc"/>
|
||||
</vbox>
|
||||
<vbox id="detail-contributions">
|
||||
<description id="detail-contrib-description">
|
||||
&detail.contributions.description;
|
||||
|
|
|
@ -31,6 +31,7 @@ support-files =
|
|||
tags = blocklist
|
||||
[browser_bug523784.js]
|
||||
[browser_bug562797.js]
|
||||
[browser_bug562854.js]
|
||||
[browser_bug562890.js]
|
||||
skip-if = os == 'win' && !debug # Disabled on Windows opt/PGO builds due to intermittent failures (bug 1135866)
|
||||
[browser_bug562899.js]
|
||||
|
|
|
@ -108,7 +108,9 @@ add_task(async function() {
|
|||
|
||||
BrowserTestUtils.removeTab(pluginTab);
|
||||
|
||||
EventUtils.synthesizeMouseAtCenter(pluginEl, {}, managerWindow);
|
||||
let details = managerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "details-btn");
|
||||
is_element_visible(details, "part7: details link should be visible");
|
||||
EventUtils.synthesizeMouseAtCenter(details, {}, managerWindow);
|
||||
await BrowserTestUtils.waitForEvent(managerWindow.document, "ViewChanged");
|
||||
|
||||
is_element_hidden(enableButton, "part8: detail enable button should be hidden");
|
||||
|
@ -159,7 +161,8 @@ add_task(async function() {
|
|||
menu = managerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "state-menulist");
|
||||
is(menu.disabled, true, "part12: state menu should be disabled");
|
||||
|
||||
EventUtils.synthesizeMouseAtCenter(pluginEl, {}, managerWindow);
|
||||
details = managerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "details-btn");
|
||||
EventUtils.synthesizeMouseAtCenter(details, {}, managerWindow);
|
||||
await BrowserTestUtils.waitForEvent(managerWindow.document, "ViewChanged");
|
||||
|
||||
menu = managerWindow.document.getElementById("detail-state-menulist");
|
||||
|
|
|
@ -0,0 +1,123 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/
|
||||
*/
|
||||
|
||||
/**
|
||||
* Tests that double-click does not go to detail view if the target is a link or button.
|
||||
*/
|
||||
|
||||
function test() {
|
||||
requestLongerTimeout(2);
|
||||
|
||||
waitForExplicitFinish();
|
||||
|
||||
var gProvider = new MockProvider();
|
||||
gProvider.createAddons([{
|
||||
id: "test1@tests.mozilla.org",
|
||||
name: "Test add-on 1",
|
||||
description: "foo",
|
||||
operationsRequiringRestart: AddonManager.OP_NEEDS_RESTART_NONE,
|
||||
}]);
|
||||
|
||||
run_next_test();
|
||||
}
|
||||
|
||||
function end_test() {
|
||||
finish();
|
||||
}
|
||||
|
||||
function is_in_list(aManager, view) {
|
||||
var doc = aManager.document;
|
||||
|
||||
is(doc.getElementById("categories").selectedItem.value, view, "Should be on the right category");
|
||||
is(get_current_view(aManager).id, "list-view", "Should be on the right view");
|
||||
}
|
||||
|
||||
function is_in_detail(aManager, view) {
|
||||
var doc = aManager.document;
|
||||
|
||||
is(doc.getElementById("categories").selectedItem.value, view, "Should be on the right category");
|
||||
is(get_current_view(aManager).id, "detail-view", "Should be on the right view");
|
||||
}
|
||||
|
||||
// Check that double-click does something.
|
||||
add_test(async function() {
|
||||
let aManager = await open_manager("addons://list/extension");
|
||||
info("Part 1");
|
||||
is_in_list(aManager, "addons://list/extension");
|
||||
|
||||
var addon = get_addon_element(aManager, "test1@tests.mozilla.org");
|
||||
addon.parentNode.ensureElementIsVisible(addon);
|
||||
EventUtils.synthesizeMouseAtCenter(addon, { clickCount: 1 }, aManager);
|
||||
EventUtils.synthesizeMouseAtCenter(addon, { clickCount: 2 }, aManager);
|
||||
|
||||
aManager = await wait_for_view_load(aManager);
|
||||
info("Part 2");
|
||||
is_in_detail(aManager, "addons://list/extension");
|
||||
|
||||
close_manager(aManager, run_next_test);
|
||||
});
|
||||
|
||||
// Check that double-click does nothing when over the disable button.
|
||||
add_test(async function() {
|
||||
let aManager = await open_manager("addons://list/extension");
|
||||
info("Part 1");
|
||||
is_in_list(aManager, "addons://list/extension");
|
||||
|
||||
var addon = get_addon_element(aManager, "test1@tests.mozilla.org");
|
||||
addon.parentNode.ensureElementIsVisible(addon);
|
||||
EventUtils.synthesizeMouseAtCenter(
|
||||
aManager.document.getAnonymousElementByAttribute(addon, "anonid", "disable-btn"),
|
||||
{ clickCount: 1 },
|
||||
aManager
|
||||
);
|
||||
// The disable button is replaced by the enable button when clicked on.
|
||||
EventUtils.synthesizeMouseAtCenter(
|
||||
aManager.document.getAnonymousElementByAttribute(addon, "anonid", "enable-btn"),
|
||||
{ clickCount: 2 },
|
||||
aManager
|
||||
);
|
||||
|
||||
aManager = await wait_for_view_load(aManager);
|
||||
info("Part 2");
|
||||
is_in_list(aManager, "addons://list/extension");
|
||||
|
||||
close_manager(aManager, run_next_test);
|
||||
});
|
||||
|
||||
// Check that double-click does nothing when over the undo button.
|
||||
add_test(async function() {
|
||||
let aManager = await open_manager("addons://list/extension");
|
||||
info("Part 1");
|
||||
is_in_list(aManager, "addons://list/extension");
|
||||
|
||||
var addon = get_addon_element(aManager, "test1@tests.mozilla.org");
|
||||
addon.parentNode.ensureElementIsVisible(addon);
|
||||
EventUtils.synthesizeMouseAtCenter(
|
||||
aManager.document.getAnonymousElementByAttribute(addon, "anonid", "remove-btn"),
|
||||
{ clickCount: 1 },
|
||||
aManager
|
||||
);
|
||||
|
||||
// The undo button is removed when clicked on.
|
||||
// We need to wait for the UI to catch up.
|
||||
setTimeout(async function() {
|
||||
var target = aManager.document.getAnonymousElementByAttribute(addon, "anonid", "undo-btn");
|
||||
var rect = target.getBoundingClientRect();
|
||||
var addonRect = addon.getBoundingClientRect();
|
||||
|
||||
EventUtils.synthesizeMouse(target, rect.width / 2, rect.height / 2, { clickCount: 1 }, aManager);
|
||||
EventUtils.synthesizeMouse(addon,
|
||||
rect.left - addonRect.left + rect.width / 2,
|
||||
rect.top - addonRect.top + rect.height / 2,
|
||||
{ clickCount: 2 },
|
||||
aManager
|
||||
);
|
||||
|
||||
aManager = await wait_for_view_load(aManager);
|
||||
info("Part 2");
|
||||
is_in_list(aManager, "addons://list/extension");
|
||||
|
||||
close_manager(aManager, run_next_test);
|
||||
}, 0);
|
||||
});
|
|
@ -63,7 +63,8 @@ add_task(async function() {
|
|||
}
|
||||
|
||||
// Click down to the details page.
|
||||
EventUtils.synthesizeMouseAtCenter(item, {}, mgrWin);
|
||||
let detailsButton = document.getAnonymousElementByAttribute(item, "anonid", "details-btn");
|
||||
EventUtils.synthesizeMouseAtCenter(detailsButton, {}, mgrWin);
|
||||
await new Promise(resolve => wait_for_view_load(mgrWin, resolve));
|
||||
|
||||
// And check the badge
|
||||
|
|
|
@ -385,6 +385,8 @@ add_task(async function() {
|
|||
is(get_node(addon, "name").value, "Test add-on replacement", "Name should be correct");
|
||||
is(name, "Test add-on replacement", "Tooltip name should be correct");
|
||||
is(version, "2.0", "Tooltip version should be correct");
|
||||
is_element_visible(get_node(addon, "description"), "Description should be visible");
|
||||
is(get_node(addon, "description").value, "A test add-on with a new description", "Description should be correct");
|
||||
is_element_hidden(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be hidden");
|
||||
is_element_hidden(get_class_node(addon, "update-postfix"), "Update postfix should be hidden");
|
||||
is(get_node(addon, "date-updated").value, formatDate(gDate), "Update date should be correct");
|
||||
|
@ -422,9 +424,12 @@ add_task(async function() {
|
|||
|
||||
let addon = items["Test add-on 6"];
|
||||
addon.parentNode.ensureElementIsVisible(addon);
|
||||
addon.parentNode.focus();
|
||||
EventUtils.synthesizeMouseAtCenter(addon, { }, gManagerWindow);
|
||||
is(Services.focus.focusedElement, addon.parentNode, "Focus should have moved to the list");
|
||||
|
||||
EventUtils.synthesizeKey("VK_TAB", { }, gManagerWindow);
|
||||
is(Services.focus.focusedElement, get_node(addon, "details-btn"), "Focus should have moved to the more button");
|
||||
|
||||
EventUtils.synthesizeKey("VK_TAB", { }, gManagerWindow);
|
||||
is(Services.focus.focusedElement, get_node(addon, "disable-btn"), "Focus should have moved to the disable button");
|
||||
|
||||
|
@ -438,7 +443,8 @@ add_task(async function() {
|
|||
is(Services.focus.focusedElement, get_node(addon, "remove-btn"), "Focus should have moved to the remove button");
|
||||
|
||||
EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow);
|
||||
is(Services.focus.focusedElement, get_node(addon, "disable-btn"), "Focus should have moved to the disable button");
|
||||
EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow);
|
||||
is(Services.focus.focusedElement, get_node(addon, "details-btn"), "Focus should have moved to the more button");
|
||||
|
||||
EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow);
|
||||
is(Services.focus.focusedElement, addon.parentNode, "Focus should have moved to the list");
|
||||
|
|
|
@ -67,7 +67,9 @@ function checkStateMenuDetail(locked) {
|
|||
"Preference should be " + (locked === true ? "" : "un") + "locked.");
|
||||
|
||||
// open details menu
|
||||
EventUtils.synthesizeMouseAtCenter(gPluginElement, {}, gManagerWindow);
|
||||
let details = gManagerWindow.document.getAnonymousElementByAttribute(gPluginElement, "anonid", "details-btn");
|
||||
is_element_visible(details, "Details link should be visible.");
|
||||
EventUtils.synthesizeMouseAtCenter(details, {}, gManagerWindow);
|
||||
|
||||
return new Promise(async resolve => {
|
||||
await wait_for_view_load(gManagerWindow);
|
||||
|
|
|
@ -39,7 +39,8 @@ add_test(async function() {
|
|||
let button = gManagerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "preferences-btn");
|
||||
is_element_visible(button, "Preferences button should be visible");
|
||||
|
||||
EventUtils.synthesizeMouseAtCenter(pluginEl, { clickCount: 1 }, gManagerWindow);
|
||||
button = gManagerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "details-btn");
|
||||
EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow);
|
||||
|
||||
Services.obs.addObserver(async function observer(subject, topic, data) {
|
||||
Services.obs.removeObserver(observer, topic);
|
||||
|
|
|
@ -240,7 +240,8 @@ add_test(async function() {
|
|||
var item = get_item_in_list(ID, list);
|
||||
isnot(item, null, "Should have found the add-on in the list");
|
||||
|
||||
item.click();
|
||||
EventUtils.synthesizeMouseAtCenter(item, { clickCount: 1 }, gManagerWindow);
|
||||
EventUtils.synthesizeMouseAtCenter(item, { clickCount: 2 }, gManagerWindow);
|
||||
await wait_for_view_load(gManagerWindow);
|
||||
|
||||
// Test the uninstall.
|
||||
|
@ -286,7 +287,8 @@ add_test(async function() {
|
|||
var item = get_item_in_list(ID, list);
|
||||
isnot(item, null, "Should have found the add-on in the list");
|
||||
|
||||
item.click();
|
||||
EventUtils.synthesizeMouseAtCenter(item, { clickCount: 1 }, gManagerWindow);
|
||||
EventUtils.synthesizeMouseAtCenter(item, { clickCount: 2 }, gManagerWindow);
|
||||
await wait_for_view_load(gManagerWindow);
|
||||
is(get_current_view(gManagerWindow).id, "detail-view", "Should be in the detail view");
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
list-style-image: url("chrome://mozapps/skin/extensions/utilities.svg");
|
||||
-moz-context-properties: fill;
|
||||
fill: #424f5a;
|
||||
margin-inline-end: 18px;
|
||||
}
|
||||
|
||||
#header-utils-btn > .toolbarbutton-menu-dropmarker {
|
||||
|
|
|
@ -14,8 +14,8 @@
|
|||
}
|
||||
|
||||
.view-pane > .list > scrollbox {
|
||||
padding-right: 24px;
|
||||
padding-left: 24px;
|
||||
padding-right: 48px;
|
||||
padding-left: 48px;
|
||||
}
|
||||
|
||||
|
||||
|
@ -226,26 +226,11 @@ button.warning {
|
|||
|
||||
/*** header ***/
|
||||
|
||||
#header-inner {
|
||||
margin: 20px 4px 4px;
|
||||
width: 692px;
|
||||
}
|
||||
|
||||
#header-search {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
min-height: 32px;
|
||||
}
|
||||
|
||||
#header-search > moz-input-box > .textbox-search-sign {
|
||||
list-style-image: url(chrome://global/skin/icons/search-textbox.svg);
|
||||
margin-inline-end: 5px;
|
||||
}
|
||||
|
||||
#search-label {
|
||||
margin: 0;
|
||||
margin-inline-end: 4px;
|
||||
margin-bottom: 2px;
|
||||
#header {
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
margin-right: 48px;
|
||||
margin-left: 48px;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
|
@ -254,18 +239,18 @@ button.warning {
|
|||
}
|
||||
}
|
||||
|
||||
.list-view-heading-inner {
|
||||
width: 664px;
|
||||
.view-header {
|
||||
margin: 0 48px;
|
||||
border-bottom: 1px solid var(--in-content-box-border-color);
|
||||
}
|
||||
|
||||
#header-utils-btn {
|
||||
height: 30px;
|
||||
line-height: 20px;
|
||||
border-color: var(--in-content-box-border-color);
|
||||
background-color: var(--in-content-page-background);
|
||||
padding-right: 10px;
|
||||
padding-left: 10px;
|
||||
/* This button is too tall, adding margin-bottom shrinks it. */
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
#header-utils-btn:not([disabled="true"]):active:hover,
|
||||
|
@ -295,12 +280,6 @@ button.warning {
|
|||
display: none;
|
||||
}
|
||||
|
||||
#list-view-heading {
|
||||
margin-top: 24px;
|
||||
margin-bottom: 16px;
|
||||
margin-inline-start: 28px;
|
||||
}
|
||||
|
||||
/*** discover view ***/
|
||||
|
||||
.discover-spacer-before,
|
||||
|
@ -344,16 +323,43 @@ button.warning {
|
|||
background-color: transparent;
|
||||
}
|
||||
|
||||
.list > scrollbox > .scrollbox-innerbox {
|
||||
border: 1px dotted transparent;
|
||||
}
|
||||
|
||||
.list:-moz-focusring > scrollbox > .scrollbox-innerbox {
|
||||
border-color: var(--in-content-border-focus);
|
||||
}
|
||||
|
||||
richlistbox.list > richlistitem.addon {
|
||||
color: var(--in-content-text-color);
|
||||
border-bottom: 1px solid var(--in-content-box-border-color);
|
||||
padding: 5px;
|
||||
background-origin: border-box;
|
||||
}
|
||||
|
||||
.addon:not(:only-child):last-child {
|
||||
border-bottom-width: 0;
|
||||
}
|
||||
|
||||
.details {
|
||||
cursor: pointer;
|
||||
margin: 0;
|
||||
margin-inline-start: 10px;
|
||||
}
|
||||
|
||||
.icon-container {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
margin: 3px 7px;
|
||||
-moz-box-align: center;
|
||||
-moz-box-pack: center;
|
||||
}
|
||||
|
||||
.icon {
|
||||
list-style-image: url("chrome://mozapps/skin/extensions/extensionGeneric.svg");
|
||||
max-width: 24px;
|
||||
max-height: 24px;
|
||||
margin-inline-end: 16px;
|
||||
max-width: 32px;
|
||||
max-height: 32px;
|
||||
}
|
||||
|
||||
.content-inner-container {
|
||||
|
@ -364,11 +370,6 @@ richlistbox.list > richlistitem.addon {
|
|||
filter: grayscale(1);
|
||||
}
|
||||
|
||||
.addon label,
|
||||
.addon {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.addon-view[type="theme"] .icon {
|
||||
list-style-image: url("chrome://mozapps/skin/extensions/themeGeneric.svg");
|
||||
}
|
||||
|
@ -390,7 +391,8 @@ richlistbox.list > richlistitem.addon {
|
|||
}
|
||||
|
||||
.name-container {
|
||||
font-weight: 600;
|
||||
font-size: 1.3rem;
|
||||
font-weight: bold;
|
||||
-moz-box-align: end;
|
||||
-moz-box-flex: 1;
|
||||
}
|
||||
|
@ -423,7 +425,7 @@ richlistbox.list > richlistitem.addon {
|
|||
}
|
||||
|
||||
.creator {
|
||||
font-size: 1.2rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.description-container {
|
||||
|
@ -475,7 +477,8 @@ richlistbox.list > richlistitem.addon {
|
|||
-moz-box-pack: start;
|
||||
}
|
||||
|
||||
.status-container {
|
||||
.status-container,
|
||||
.control-container {
|
||||
-moz-box-pack: end;
|
||||
}
|
||||
|
||||
|
@ -556,15 +559,10 @@ richlistbox.list > richlistitem.addon {
|
|||
}
|
||||
|
||||
.list > .addon[selected] {
|
||||
background-color: var(--in-content-box-background);
|
||||
}
|
||||
|
||||
.list:focus > .addon[selected] {
|
||||
box-shadow: var(--card-shadow-focus);
|
||||
}
|
||||
|
||||
.list > .addon {
|
||||
margin: 8px;
|
||||
background-color: var(--in-content-page-background);
|
||||
color: var(--in-content-page-color);
|
||||
padding-inline-start: 1px; /* compensate the 4px border */
|
||||
border-inline-start: solid 4px var(--in-content-border-focus);
|
||||
}
|
||||
|
||||
#addon-list .addon[active="false"] > .content-container > .content-inner-container {
|
||||
|
@ -598,7 +596,8 @@ richlistbox.list > richlistitem.addon {
|
|||
/*** detail view ***/
|
||||
|
||||
#detail-view > .scrollbox-innerbox {
|
||||
margin: 32px;
|
||||
margin-right: 48px;
|
||||
margin-left: 48px;
|
||||
}
|
||||
|
||||
#detail-view .loading {
|
||||
|
@ -612,7 +611,10 @@ richlistbox.list > richlistitem.addon {
|
|||
}
|
||||
|
||||
.detail-view-container {
|
||||
width: 664px;
|
||||
padding-inline-end: 2em;
|
||||
padding-bottom: 2em;
|
||||
font-size: 1.25rem;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
#detail-notifications {
|
||||
|
@ -620,10 +622,6 @@ richlistbox.list > richlistitem.addon {
|
|||
margin-bottom: 2em;
|
||||
}
|
||||
|
||||
#detail-view:not([notification="warning"]):not([notification="error"]):not([pending]) #detail-notifications {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#detail-notifications .warning,
|
||||
#detail-notifications .pending,
|
||||
#detail-notifications .error {
|
||||
|
@ -632,23 +630,22 @@ richlistbox.list > richlistitem.addon {
|
|||
|
||||
#detail-icon-container {
|
||||
width: 64px;
|
||||
margin-inline-end: 10px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
#detail-icon {
|
||||
max-width: 32px;
|
||||
max-height: 32px;
|
||||
max-width: 64px;
|
||||
max-height: 64px;
|
||||
}
|
||||
|
||||
.name-container > label,
|
||||
#detail-creator,
|
||||
#detail-name-container > label {
|
||||
margin-inline-start: 0;
|
||||
#detail-summary {
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
|
||||
#detail-controls {
|
||||
margin-inline-start: -4px;
|
||||
margin-inline-end: -4px;
|
||||
#detail-name-container {
|
||||
font-size: 2.5rem;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
#detail-screenshot-box {
|
||||
|
@ -682,27 +679,11 @@ richlistbox.list > richlistitem.addon {
|
|||
}
|
||||
|
||||
#detail-desc-container {
|
||||
line-height: 1.3;
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
#detail-controls > button {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.addon.card {
|
||||
max-width: 664px;
|
||||
/* The .addon-control element on the end has 4px of margin, remove it
|
||||
* from the padding to stay balanced. */
|
||||
padding-inline-end: 12px;
|
||||
}
|
||||
|
||||
.addon-detail.card:hover {
|
||||
box-shadow: none;
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
|
||||
#detail-desc, #detail-fulldesc {
|
||||
margin-inline-start: 0;
|
||||
margin-inline-start: 6px;
|
||||
/* This is necessary to fix layout issues with multi-line descriptions, see
|
||||
bug 592712*/
|
||||
outline: solid transparent;
|
||||
|
@ -776,6 +757,10 @@ richlistbox.list > richlistitem.addon {
|
|||
text-shadow: 0 1px 1px #fefffe;
|
||||
}
|
||||
|
||||
#detail-controls {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.inline-options-browser {
|
||||
margin-top: 2em;
|
||||
}
|
||||
|
@ -939,15 +924,6 @@ richlistbox.list > richlistitem.addon {
|
|||
display: none;
|
||||
}
|
||||
|
||||
.addon-control {
|
||||
cursor: default;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
min-height: auto;
|
||||
min-width: auto;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
|
||||
.no-auto-hide .addon-control {
|
||||
display: block !important;
|
||||
}
|
||||
|
|
|
@ -40,24 +40,13 @@
|
|||
--in-content-table-background: #ebebeb;
|
||||
--in-content-table-border-dark-color: #d1d1d1;
|
||||
--in-content-table-header-background: #0a84ff;
|
||||
|
||||
--blue-50: #0a84ff;
|
||||
--blue-50-a30: rgba(10, 132, 255, 0.3);
|
||||
--grey-20: #ededf0;
|
||||
--grey-30: #d7d7db;
|
||||
--grey-60: #4a4a4f;
|
||||
--grey-90: #0c0c0d;
|
||||
--grey-90-a10: rgba(12, 12, 13, 0.1);
|
||||
--grey-90-a20: rgba(12, 12, 13, 0.2);
|
||||
--grey-90-a30: rgba(12, 12, 13, 0.3);
|
||||
--yellow-50: #ffe900;
|
||||
--yellow-90: #3e2800;
|
||||
|
||||
--shadow-10: 0 1px 4px var(--grey-90-a10);
|
||||
--card-shadow: var(--shadow-10);
|
||||
--card-outline-color: var(--grey-30);
|
||||
--card-shadow-hover: var(--card-shadow), 0 0 0 5px var(--card-outline-color);
|
||||
--card-shadow-focus: 0 0 0 2px var(--blue-50), 0 0 0 6px var(--blue-50-a30);
|
||||
}
|
||||
|
||||
html|html,
|
||||
|
@ -857,19 +846,6 @@ xul|treechildren::-moz-tree-image(selected) {
|
|||
list-style-image: url("chrome://browser/skin/warning.svg");
|
||||
}
|
||||
|
||||
.card {
|
||||
background: var(--in-content-box-background);
|
||||
border-radius: 4px;
|
||||
box-shadow: var(--card-shadow);
|
||||
margin: 0 0 8px;
|
||||
padding: 16px;
|
||||
transition: box-shadow 150ms;
|
||||
}
|
||||
|
||||
.card:hover {
|
||||
box-shadow: var(--card-shadow-hover);
|
||||
}
|
||||
|
||||
.sidebar-footer-button {
|
||||
padding: 1px; /* Adding padding around help label in order to make entire keyboard focusing outline visible */
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
list-style-image: url("chrome://mozapps/skin/extensions/utilities.svg");
|
||||
-moz-context-properties: fill;
|
||||
fill: #424f5a;
|
||||
margin-inline-end: 16px;
|
||||
}
|
||||
|
||||
@media (-moz-windows-default-theme: 0) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче