blob: 09c6015bec86e132fe979fd575bddb54ddc04edc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
/* 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/. */
"use strict";
// This is loaded into chrome windows with the subscript loader. Wrap in
// a block to prevent accidentally leaking globals onto `window`.
{
const SHOPPING_SIDEBAR_WIDTH_PREF =
"browser.shopping.experience2023.sidebarWidth";
class ShoppingSidebar extends MozXULElement {
#initialized;
static get markup() {
return `
<browser
class="shopping-sidebar"
autoscroll="false"
disablefullscreen="true"
disablehistory="true"
flex="1"
message="true"
manualactiveness="true"
remoteType="privilegedabout"
maychangeremoteness="true"
remote="true"
src="about:shoppingsidebar"
type="content"
/>
`;
}
constructor() {
super();
}
connectedCallback() {
this.initialize();
}
initialize() {
if (this.#initialized) {
return;
}
this.resizeObserverFn = this.resizeObserverFn.bind(this);
this.appendChild(this.constructor.fragment);
let previousWidth = Services.prefs.getIntPref(
SHOPPING_SIDEBAR_WIDTH_PREF,
0
);
if (previousWidth > 0) {
this.style.width = `${previousWidth}px`;
}
this.resizeObserver = new ResizeObserver(this.resizeObserverFn);
this.resizeObserver.observe(this);
this.#initialized = true;
}
resizeObserverFn(entries) {
for (let entry of entries) {
if (entry.contentBoxSize[0].inlineSize < 1) {
return;
}
Services.prefs.setIntPref(
SHOPPING_SIDEBAR_WIDTH_PREF,
entry.contentBoxSize[0].inlineSize
);
}
}
}
customElements.define("shopping-sidebar", ShoppingSidebar);
}
|