Skip to content

Commit 91fcc5e

Browse files
committed
feat: allow to force a pan when opening package menu
1 parent 97ff85c commit 91fcc5e

File tree

4 files changed

+124
-65
lines changed

4 files changed

+124
-65
lines changed

public/components/bundlephobia/bundlephobia.js

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -86,21 +86,16 @@ class Bundlephobia extends LitElement {
8686

8787
#bunldeTask = new Task(this, {
8888
task: async([name, version]) => {
89-
try {
90-
const {
91-
gzip, size, dependencySizes
92-
} = await getJSON(`/bundle/${this.#httpName(name)}/${version}`);
93-
const fullSize = dependencySizes.reduce((prev, curr) => prev + curr.approximateSize, 0);
94-
95-
return {
96-
gzip: prettyBytes(gzip),
97-
min: prettyBytes(size),
98-
full: prettyBytes(fullSize)
99-
};
100-
}
101-
catch {
102-
return null;
103-
}
89+
const {
90+
gzip, size, dependencySizes
91+
} = await getJSON(`/bundle/${this.#httpName(name)}/${version}`);
92+
const fullSize = dependencySizes.reduce((prev, curr) => prev + curr.approximateSize, 0);
93+
94+
return {
95+
gzip: prettyBytes(gzip),
96+
min: prettyBytes(size),
97+
full: prettyBytes(fullSize)
98+
};
10499
},
105100
args: () => [this.name, this.version]
106101
});

public/components/package/package.js

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ import { EVENTS } from "../../core/events.js";
66

77
export class PackageInfo {
88
static DOMElementName = "package-info";
9+
/**
10+
* Used to force a specific menu to open when focusing a package in the network
11+
*/
12+
static ForcedPackageMenu = null;
913

1014
static close() {
1115
const domElement = document.getElementById(PackageInfo.DOMElementName);
@@ -78,14 +82,6 @@ export class PackageInfo {
7882
packageHTMLElement.appendChild(
7983
this.render()
8084
);
81-
this.enableNavigation(
82-
window.settings.config.defaultPackageMenu
83-
);
84-
packageHTMLElement.setAttribute("class", "slide-in");
85-
86-
if (window.settings.config.disableExternalRequests) {
87-
return;
88-
}
8985

9086
const panFiles = packageHTMLElement.querySelector("#pan-files");
9187
const files = document.createElement("package-files");
@@ -117,6 +113,12 @@ export class PackageInfo {
117113
scripts.id = "pan-dependencies";
118114
scripts.classList.add("package-container", "hidden");
119115
panDependencies.parentElement.replaceChild(scripts, panDependencies);
116+
117+
const menuToOpen = PackageInfo.ForcedPackageMenu ??
118+
window.settings.config.defaultPackageMenu;
119+
this.enableNavigation(menuToOpen);
120+
PackageInfo.ForcedPackageMenu = null;
121+
packageHTMLElement.setAttribute("class", "slide-in");
120122
}
121123

122124
/**
@@ -153,7 +155,9 @@ export class PackageInfo {
153155
* @returns {void}
154156
*/
155157
enableNavigation(name) {
156-
const div = this.menus.has(name) ? this.menus.get(name) : this.menus.get("info");
158+
const div = this.menus.has(name) ?
159+
this.menus.get(name) :
160+
this.menus.get("info");
157161

158162
const isActive = div.classList.contains("active");
159163
const isDisabled = div.classList.contains("disabled");
@@ -166,10 +170,10 @@ export class PackageInfo {
166170
div.classList.add("active");
167171
this.activeNavigation.classList.remove("active");
168172

169-
const targetPan = document.getElementById(`pan-${name}`);
170173
const currentPan = document.getElementById(`pan-${this.activeNavigation.getAttribute("data-menu")}`);
171-
targetPan.classList.remove("hidden");
172174
currentPan.classList.add("hidden");
175+
const targetPan = document.getElementById(`pan-${name}`);
176+
targetPan.classList.remove("hidden");
173177
document.querySelector(".container-title").textContent = dataTitle;
174178

175179
this.activeNavigation = div;

public/components/package/pannels/files/files.js

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,39 +11,40 @@ import { scrollbarStyle } from "../../../../common/scrollbar-style.js";
1111
class Files extends LitElement {
1212
static styles = [scrollbarStyle, css`
1313
:host{
14-
display: block;
15-
overflow: hidden auto;
16-
height: calc(100vh - 315px);
17-
box-sizing: border-box;
14+
display: block;
15+
overflow: hidden auto;
16+
height: calc(100vh - 315px);
17+
box-sizing: border-box;
1818
}
1919
2020
.head-title {
21-
background: var(--primary-darker);
22-
height: 28px;
23-
flex-shrink: 0;
24-
display: flex;
25-
align-items: center;
26-
border-bottom: 2px solid var(--primary-lighter);
27-
border-radius: 2px 2px 0 0;
28-
}
21+
background: var(--primary-darker);
22+
height: 28px;
23+
flex-shrink: 0;
24+
display: flex;
25+
align-items: center;
26+
border-bottom: 2px solid var(--primary-lighter);
27+
border-radius: 2px 2px 0 0;
28+
}
2929
3030
.head-title.no-margin {
31-
margin-top: 0;
32-
}
31+
margin-top: 0;
32+
}
3333
3434
.head-title>p {
35-
text-shadow: 1px 1px 5px rgb(20 20 20 / 50%);
36-
font-size: 18px;
37-
font-variant: small-caps;
38-
39-
/* lowercase is needed with small-caps font variant */
40-
text-transform: lowercase;
41-
font-family: mononoki;
42-
font-weight: bold;
43-
letter-spacing: 1px;
44-
padding: 0 10px;
45-
}
35+
text-shadow: 1px 1px 5px rgb(20 20 20 / 50%);
36+
font-size: 18px;
37+
font-variant: small-caps;
38+
39+
/* lowercase is needed with small-caps font variant */
40+
text-transform: lowercase;
41+
font-family: mononoki;
42+
font-weight: bold;
43+
letter-spacing: 1px;
44+
padding: 0 10px;
45+
}
4646
`];
47+
4748
static properties = {
4849
package: { type: Object }
4950
};
@@ -107,7 +108,12 @@ class Files extends LitElement {
107108
`,
108109
() => nothing
109110
)}
110-
<bundle-phobia name=${name} version=${version}></bundle-phobia>
111+
112+
${when(
113+
window.settings.config.disableExternalRequests === false,
114+
() => html`<bundle-phobia name=${name} version=${version}></bundle-phobia>`,
115+
() => nothing
116+
)}
111117
`;
112118
}
113119

public/components/views/home/home.js

Lines changed: 67 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@ import * as utils from "../../../common/utils.js";
88
import "../../gauge/gauge.js";
99
import "../../expandable/expandable.js";
1010
import { EVENTS } from "../../../core/events.js";
11-
import { fetchScorecardData, getScorecardLink } from "../../../common/scorecard.js";
11+
import { PackageInfo } from "../../package/package.js";
12+
import {
13+
fetchScorecardData,
14+
getScorecardLink
15+
} from "../../../common/scorecard.js";
1216

1317
// Import Components
1418
import "./maintainers/maintainers.js";
@@ -22,11 +26,35 @@ const kFlagsToWatch = new Set([
2226
"hasScript"
2327
]);
2428

25-
const kEmojiDescription = {
26-
"📦": "scripts",
27-
"⚔️": "sensitive files",
28-
"🚨": "vulnerabilities",
29-
"⛔️": "deprecated"
29+
const kEmojiMetadata = {
30+
"📦": {
31+
description: "scripts",
32+
menu: {
33+
name: "dependencies",
34+
priority: 3
35+
}
36+
},
37+
"⚔️": {
38+
description: "sensitive files",
39+
menu: {
40+
name: "files",
41+
priority: 1
42+
}
43+
},
44+
"🚨": {
45+
description: "vulnerabilities",
46+
menu: {
47+
name: "vulnerabilities",
48+
priority: 2
49+
}
50+
},
51+
"⛔️": {
52+
description: "deprecated",
53+
menu: {
54+
name: "info",
55+
priority: 0
56+
}
57+
}
3058
};
3159

3260
export class HomeView {
@@ -207,10 +235,16 @@ export class HomeView {
207235
for (let id = 0; id < deps.length; id++) {
208236
const dependency = deps[id];
209237

210-
const element = this.renderPackage(dependency);
238+
const [element, menuToOpen] = this.renderPackage(dependency);
211239
element.addEventListener("click", () => {
212240
window.navigation.setNavByName("network--view");
213-
setTimeout(() => this.nsn.focusNodeByNameAndVersion(dependency.name, dependency.version), 25);
241+
setTimeout(() => {
242+
PackageInfo.ForcedPackageMenu = menuToOpen;
243+
this.nsn.focusNodeByNameAndVersion(
244+
dependency.name,
245+
dependency.version
246+
);
247+
}, 25);
214248
});
215249
if (hideItems && id >= maxPackages) {
216250
element.classList.add("hidden");
@@ -238,13 +272,30 @@ export class HomeView {
238272

239273
renderPackage(dependencyVer) {
240274
const { name, version, flags, deprecated } = dependencyVer;
275+
276+
const menuToOpen = {
277+
name: "info",
278+
priority: 0
279+
};
241280
const inlinedEmojis = getFlagsEmojisInlined(
242281
flags.filter((name) => kFlagsToWatch.has(name)),
243282
new Set(window.settings.config.ignore.flags)
244283
);
245284

246-
const childs = utils.extractEmojis(inlinedEmojis)
247-
.map((emoji) => utils.createDOMElement("p", { text: `${emoji} ${kEmojiDescription[emoji]}` }));
285+
const childs = [];
286+
for (const emoji of utils.extractEmojis(inlinedEmojis)) {
287+
const { menu, description } = kEmojiMetadata[emoji];
288+
if (menu.priority > menuToOpen.priority) {
289+
menuToOpen.name = menu.name;
290+
menuToOpen.priority = menu.priority;
291+
}
292+
293+
childs.push(
294+
utils.createDOMElement("p", {
295+
text: `${emoji} ${description}`
296+
})
297+
);
298+
}
248299

249300
const packageContents = [
250301
utils.createDOMElement("div", {
@@ -267,9 +318,12 @@ export class HomeView {
267318
packageContents.push(utils.createDOMElement("p", { text: deprecated }));
268319
}
269320

270-
return utils.createDOMElement("div", {
271-
childs: packageContents
272-
});
321+
return [
322+
utils.createDOMElement("div", {
323+
childs: packageContents
324+
}),
325+
menuToOpen.name
326+
];
273327
}
274328

275329
generateWarnings() {

0 commit comments

Comments
 (0)