Bug 1944690 - Local model managment landing page skeleton and navigation r=rpl,fluent-reviewers,bolsson
Introduce lit components to about:addons with special rendering of mlmodel list intro. Conditionally show this and not empty list message. Differential Revision: https://phabricator.services.mozilla.com/D239881
This commit is contained in:
@@ -8,4 +8,9 @@
|
|||||||
addon-category-mlmodel = On-device AI
|
addon-category-mlmodel = On-device AI
|
||||||
addon-category-mlmodel-title =
|
addon-category-mlmodel-title =
|
||||||
.title = On-device AI
|
.title = On-device AI
|
||||||
|
|
||||||
mlmodel-heading = Manage Local AI Models
|
mlmodel-heading = Manage Local AI Models
|
||||||
|
mlmodel-description =
|
||||||
|
Placeholder text. On-device AI Models are optional components that get added to { -brand-short-name } when they are first needed by a feature or extension you use.
|
||||||
|
|
||||||
|
They process your queries on your device, meaning they are more private than online AI providers, but sometimes slower depending on the performance of your device. <a data-l10n-name="learn-more">Learn more</a>
|
||||||
|
|||||||
@@ -58,6 +58,10 @@
|
|||||||
defer
|
defer
|
||||||
src="chrome://mozapps/content/extensions/aboutaddons.js"
|
src="chrome://mozapps/content/extensions/aboutaddons.js"
|
||||||
></script>
|
></script>
|
||||||
|
<script
|
||||||
|
src="chrome://mozapps/content/extensions/components/mlmodel-list-intro.mjs"
|
||||||
|
type="module"
|
||||||
|
></script>
|
||||||
<script
|
<script
|
||||||
type="module"
|
type="module"
|
||||||
src="chrome://global/content/elements/moz-message-bar.mjs"
|
src="chrome://global/content/elements/moz-message-bar.mjs"
|
||||||
|
|||||||
@@ -3695,18 +3695,26 @@ class AddonList extends HTMLElement {
|
|||||||
}
|
}
|
||||||
frag.appendChild(this.pendingUninstallStack);
|
frag.appendChild(this.pendingUninstallStack);
|
||||||
|
|
||||||
|
if (this.type == "mlmodel") {
|
||||||
|
frag.appendChild(document.createElement("mlmodel-list-intro"));
|
||||||
|
}
|
||||||
|
|
||||||
// Render the sections.
|
// Render the sections.
|
||||||
for (let i = 0; i < sectionedAddons.length; i++) {
|
for (let i = 0; i < sectionedAddons.length; i++) {
|
||||||
this.sections[i].node = this.renderSection(sectionedAddons[i], i);
|
this.sections[i].node = this.renderSection(sectionedAddons[i], i);
|
||||||
frag.appendChild(this.sections[i].node);
|
frag.appendChild(this.sections[i].node);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Render the placeholder that is shown when all sections are empty.
|
// Add the "empty list message" elements (but omit it in the list view
|
||||||
// This call is after rendering the sections, because its visibility
|
// related to the "mlmodel" type).
|
||||||
// is controlled through the general sibling combinator relative to
|
if (this.type != "mlmodel") {
|
||||||
// the sections (section ~).
|
// Render the placeholder that is shown when all sections are empty.
|
||||||
let message = this.createEmptyListMessage();
|
// This call is after rendering the sections, because its visibility
|
||||||
frag.appendChild(message);
|
// is controlled through the general sibling combinator relative to
|
||||||
|
// the sections (section ~).
|
||||||
|
let message = this.createEmptyListMessage();
|
||||||
|
frag.appendChild(message);
|
||||||
|
}
|
||||||
|
|
||||||
// Make sure fluent has set all the strings before we render. This will
|
// Make sure fluent has set all the strings before we render. This will
|
||||||
// avoid the height changing as strings go from 0 height to having text.
|
// avoid the height changing as strings go from 0 height to having text.
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
/* 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/. */
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin-bottom: var(--space-xxlarge);
|
||||||
|
white-space: pre-wrap;
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
/* 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 https://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
import { html } from "chrome://global/content/vendor/lit.all.mjs";
|
||||||
|
import { MozLitElement } from "chrome://global/content/lit-utils.mjs";
|
||||||
|
|
||||||
|
export class MLModelListIntro extends MozLitElement {
|
||||||
|
render() {
|
||||||
|
return this.template;
|
||||||
|
}
|
||||||
|
|
||||||
|
get template() {
|
||||||
|
return html`
|
||||||
|
<link
|
||||||
|
href="chrome://mozapps/content/extensions/components/mlmodel-list-intro.css"
|
||||||
|
rel="stylesheet"
|
||||||
|
/>
|
||||||
|
<header>
|
||||||
|
<p data-l10n-id="mlmodel-description">
|
||||||
|
<a
|
||||||
|
data-l10n-name="learn-more"
|
||||||
|
is="moz-support-link"
|
||||||
|
support-page="local-models"
|
||||||
|
></a>
|
||||||
|
</p>
|
||||||
|
</header>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
customElements.define("mlmodel-list-intro", MLModelListIntro);
|
||||||
@@ -11,6 +11,8 @@ toolkit.jar:
|
|||||||
content/mozapps/extensions/aboutaddonsCommon.js (content/aboutaddonsCommon.js)
|
content/mozapps/extensions/aboutaddonsCommon.js (content/aboutaddonsCommon.js)
|
||||||
content/mozapps/extensions/aboutaddons.css (content/aboutaddons.css)
|
content/mozapps/extensions/aboutaddons.css (content/aboutaddons.css)
|
||||||
content/mozapps/extensions/abuse-reports.js (content/abuse-reports.js)
|
content/mozapps/extensions/abuse-reports.js (content/abuse-reports.js)
|
||||||
|
content/mozapps/extensions/components (content/components/*.css)
|
||||||
|
content/mozapps/extensions/components (content/components/*.mjs)
|
||||||
content/mozapps/extensions/drag-drop-addon-installer.js (content/drag-drop-addon-installer.js)
|
content/mozapps/extensions/drag-drop-addon-installer.js (content/drag-drop-addon-installer.js)
|
||||||
content/mozapps/extensions/shortcuts.css (content/shortcuts.css)
|
content/mozapps/extensions/shortcuts.css (content/shortcuts.css)
|
||||||
content/mozapps/extensions/shortcuts.js (content/shortcuts.js)
|
content/mozapps/extensions/shortcuts.js (content/shortcuts.js)
|
||||||
|
|||||||
@@ -56,6 +56,11 @@ add_task(async function testModelHubProvider() {
|
|||||||
!enabledSection.querySelector(".list-section-heading"),
|
!enabledSection.querySelector(".list-section-heading"),
|
||||||
"No heading for mlmodel"
|
"No heading for mlmodel"
|
||||||
);
|
);
|
||||||
|
is(
|
||||||
|
enabledSection.previousSibling.localName,
|
||||||
|
"mlmodel-list-intro",
|
||||||
|
"Model hub custom section is shown"
|
||||||
|
);
|
||||||
|
|
||||||
let promiseListUpdated = BrowserTestUtils.waitForEvent(
|
let promiseListUpdated = BrowserTestUtils.waitForEvent(
|
||||||
enabledSection.closest("addon-list"),
|
enabledSection.closest("addon-list"),
|
||||||
@@ -77,5 +82,32 @@ add_task(async function testModelHubProvider() {
|
|||||||
"Got the expected number of mlmodel entries"
|
"Got the expected number of mlmodel entries"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
promiseListUpdated = BrowserTestUtils.waitForEvent(
|
||||||
|
enabledSection.closest("addon-list"),
|
||||||
|
"remove"
|
||||||
|
);
|
||||||
|
info("Uninstall the last one of the mlmodel entries");
|
||||||
|
const mlmodelmock1 = await AddonManager.getAddonByID(
|
||||||
|
"mockmodel1@tests.mozilla.org"
|
||||||
|
);
|
||||||
|
|
||||||
|
await mlmodelmock1.uninstall();
|
||||||
|
info("Wait for the list of mlmodel entries to be updated");
|
||||||
|
await promiseListUpdated;
|
||||||
|
|
||||||
|
enabledSection = getSection(doc, "mlmodel-enabled-section");
|
||||||
|
is(
|
||||||
|
enabledSection.children.length,
|
||||||
|
0,
|
||||||
|
"Expect mlmodel add-ons list view to be empty"
|
||||||
|
);
|
||||||
|
|
||||||
|
let emptyMessageFindModeOnAMO = doc.querySelector("#empty-addons-message");
|
||||||
|
is(
|
||||||
|
emptyMessageFindModeOnAMO,
|
||||||
|
null,
|
||||||
|
"Expect no #empty-addons-message element in the empty mlmodel list view"
|
||||||
|
);
|
||||||
|
|
||||||
await closeView(win);
|
await closeView(win);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user