Skip to content

Commit ad82eea

Browse files
committed
fix: 优化设置页检索数据源展示
1 parent 85ea5ab commit ad82eea

File tree

3 files changed

+63
-77
lines changed

3 files changed

+63
-77
lines changed

addon/chrome/content/preferences-main.xhtml

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -65,33 +65,39 @@
6565
preference="metadataSource"
6666
disabled="true"
6767
></html:input>
68-
<html:div>
69-
<button
70-
id="zotero-prefpane-__addonRef__-metadata-source-button"
71-
data-l10n-id="label-choose-source"
72-
></button>
73-
<html:div id="metadata-source-dropdown" class="dropdown-content">
74-
<checkbox
75-
disabled="true"
76-
native="true"
77-
class="metadata-drop-item"
78-
value="CNKI"
79-
data-l10n-id="label-metadata-source-cnki"
80-
/>
81-
<checkbox
82-
class="metadata-drop-item"
83-
native="true"
84-
value="WanFangData"
85-
data-l10n-id="label-metadata-source-wanfangdata"
86-
/>
87-
<checkbox
88-
class="metadata-drop-item"
89-
native="true"
90-
value="Yiigle"
91-
data-l10n-id="label-metadata-source-yiigle"
92-
/>
93-
</html:div>
94-
</html:div>
68+
<button
69+
id="zotero-prefpane-__addonRef__-metadata-source-button"
70+
type="menu"
71+
data-l10n-id="label-choose-source"
72+
>
73+
<panel
74+
id="metadata-source-panel"
75+
position="after_start"
76+
noautohide="false"
77+
>
78+
<vbox style="padding: 8px;">
79+
<checkbox
80+
disabled="true"
81+
native="true"
82+
class="metadata-drop-item"
83+
value="CNKI"
84+
data-l10n-id="label-metadata-source-cnki"
85+
/>
86+
<checkbox
87+
class="metadata-drop-item"
88+
native="true"
89+
value="WanFangData"
90+
data-l10n-id="label-metadata-source-wanfangdata"
91+
/>
92+
<checkbox
93+
class="metadata-drop-item"
94+
native="true"
95+
value="Yiigle"
96+
data-l10n-id="label-metadata-source-yiigle"
97+
/>
98+
</vbox>
99+
</panel>
100+
</button>
95101
<image
96102
class="help-icon"
97103
src="chrome://jasminum/content/icons/help.svg"

addon/chrome/content/prefpanel.css

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,6 @@
1212
--dropdown-shadow-color: rgba(255, 255, 255, 0.2);
1313
}
1414
}
15-
.dropdown-content {
16-
display: none;
17-
position: absolute;
18-
background-color: var(--dropdown-bg-color);
19-
border: 1px solid var(--dropdown-border-color);
20-
box-shadow: 0px 8px 16px var(--dropdown-shadow-color);
21-
z-index: 1;
22-
padding: 8px 16px;
23-
font-size: 12px;
24-
cursor: pointer;
25-
border-radius: 4px;
26-
color: var(--dropdown-text-color);
27-
}
28-
.dropdown-content label {
29-
display: block;
30-
margin: 5px 0;
31-
cursor: pointer;
32-
color: var(--dropdown-text-color);
33-
}
34-
.show {
35-
display: block;
36-
}
3715

3816
.hidden {
3917
display: none;

src/modules/preferences/main.ts

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -214,37 +214,39 @@ function bindPrefEvents(doc: Document) {
214214
}
215215
});
216216

217-
// metadata source dropdown
218-
doc
219-
.querySelector(`#zotero-prefpane-${config.addonRef}-metadata-source-button`)
220-
?.addEventListener("click", (e) => {
221-
e.stopPropagation(); // 阻止事件冒泡
222-
const pvalues = (getPref("metadataSource") as string).split(", ");
223-
doc.querySelectorAll("checkbox.metadata-drop-item")!.forEach((e: any) => {
224-
e.checked = pvalues.includes(e.getAttribute("value")!);
225-
});
226-
doc.querySelector("#metadata-source-dropdown")?.classList.toggle("show");
217+
// metadata source panel
218+
const metadataButton = doc.querySelector(
219+
`#zotero-prefpane-${config.addonRef}-metadata-source-button`,
220+
);
221+
const metadataPanel = doc.querySelector("#metadata-source-panel");
222+
223+
// Update checkbox states when panel opens
224+
metadataPanel?.addEventListener("popupshowing", () => {
225+
const pvalues = (getPref("metadataSource") as string).split(", ");
226+
doc.querySelectorAll("checkbox.metadata-drop-item")!.forEach((e: any) => {
227+
e.checked = pvalues.includes(e.getAttribute("value")!);
227228
});
229+
});
228230

229-
doc
230-
.querySelector("#metadata-source-dropdown")
231-
?.addEventListener("click", (e) => {
232-
const checkbox = (e.target as HTMLElement).closest(
233-
".metadata-drop-item",
234-
)!;
235-
let pvalues = getPref("metadataSource").split(", ") || ["CNKI"];
236-
if (checkbox.getAttribute("checked") == "true") {
237-
const checkedSource = checkbox.getAttribute("value")!;
238-
if (!pvalues.includes(checkedSource)) {
239-
pvalues.push(checkedSource);
240-
}
241-
} else {
242-
pvalues = pvalues.filter(
243-
(option) => option !== checkbox.getAttribute("value")!,
244-
);
231+
// Handle checkbox changes
232+
metadataPanel?.addEventListener("command", (e) => {
233+
const checkbox = (e.target as HTMLElement).closest(
234+
".metadata-drop-item",
235+
) as any;
236+
if (!checkbox) return;
237+
238+
let pvalues = getPref("metadataSource").split(", ") || ["CNKI"];
239+
const value = checkbox.getAttribute("value")!;
240+
241+
if (checkbox.checked) {
242+
if (!pvalues.includes(value)) {
243+
pvalues.push(value);
245244
}
246-
setPref("metadataSource", pvalues.join(", "));
247-
});
245+
} else {
246+
pvalues = pvalues.filter((option) => option !== value);
247+
}
248+
setPref("metadataSource", pvalues.join(", "));
249+
});
248250

249251
doc
250252
.querySelector(

0 commit comments

Comments
 (0)