Skip to content

Commit

Permalink
feat(script): 新增题库开关功能
Browse files Browse the repository at this point in the history
  • Loading branch information
enncy committed May 11, 2023
1 parent 6613973 commit 07f3cfc
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 4 deletions.
45 changes: 43 additions & 2 deletions packages/scripts/src/projects/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,12 @@ export const CommonProject = Project.create({
answererWrappers: {
defaultValue: [] as AnswererWrapper[]
},
/**
* 禁用的题库
*/
disabledAnswererWrapperNames: {
defaultValue: [] as string[]
},
enableQuestionCaches: {
label: '题库缓存功能',
defaultValue: true,
Expand All @@ -133,14 +139,17 @@ export const CommonProject = Project.create({

this.onclick = () => {
const aw: any[] = CommonProject.scripts.settings.cfg.answererWrappers || [];
const copy = $creator.copy('复制题库配置', JSON.stringify(aw));
const copy = $creator.copy('复制题库配置', JSON.stringify(aw, null, 4));

const list = el('div', [
el('div', aw.length ? ['以下是已经解析过的题库配置:', copy] : ''),
...createAnswererWrapperList(aw)
]);

const modal = $modal('prompt', {
width: 600,
modalInputType: 'textarea',
inputDefaultValue: JSON.stringify(aw, null, 4),
content: $creator.notes([
[
el('div', [
Expand Down Expand Up @@ -170,6 +179,7 @@ export const CommonProject = Project.create({
CommonProject.scripts.settings.cfg.answererWrappers = aw;
this.value = '当前有' + aw.length + '个可用题库';
$modal('alert', {
width: 600,
content: el('div', [
el('div', ['🎉 配置成功,刷新网页后重新答题即可。', '解析到的题库如下所示:']),
...createAnswererWrapperList(aw)
Expand Down Expand Up @@ -1145,7 +1155,38 @@ function createAnswererWrapperList(aw: AnswererWrapper[]) {
el(
'details',
[
el('summary', [item.name]),
el('summary', [
$creator.space([
el('span', item.name),
(() => {
let isDisabled = CommonProject.scripts.settings.cfg.disabledAnswererWrapperNames.includes(item.name);
const btn = $creator.button(
isDisabled ? '启用此题库' : '停用此题库',
{ className: isDisabled ? 'base-style-button' : 'base-style-button-secondary' },
(controlsBtn) => {
controlsBtn.onclick = () => {
isDisabled = !isDisabled;
controlsBtn.value = isDisabled ? '启用此题库' : '停用此题库';
controlsBtn.className = isDisabled ? 'base-style-button' : 'base-style-button-secondary';
if (isDisabled) {
CommonProject.scripts.settings.cfg.disabledAnswererWrapperNames = [
...CommonProject.scripts.settings.cfg.disabledAnswererWrapperNames,
item.name
];
} else {
CommonProject.scripts.settings.cfg.disabledAnswererWrapperNames =
CommonProject.scripts.settings.cfg.disabledAnswererWrapperNames.filter(
(name) => name !== item.name
);
}
};
}
);

return btn;
})()
])
]),
el('ul', [
el('li', ['名字\t', item.name]),
el('li', { innerHTML: `官网\t<a target="_blank" href=${item.homepage}>${item.homepage || '无'}</a>` }),
Expand Down
18 changes: 16 additions & 2 deletions packages/scripts/src/utils/work.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,18 +83,32 @@ export function commonWork(
);
});

// 使用 json 深拷贝,防止修改原始配置
const workOptions: typeof CommonProject.scripts.settings.cfg = JSON.parse(
JSON.stringify(CommonProject.scripts.settings.cfg)
);
/**
* 过滤掉被禁用的题库
*/
workOptions.answererWrappers = workOptions.answererWrappers.filter(
(aw) => CommonProject.scripts.settings.cfg.disabledAnswererWrapperNames.find((daw) => daw === aw.name) === undefined
);

/**
* 检查题库是否配置,并询问是否开始答题
*/
let checkMessage = workPreCheckMessage({
onrun: () => startBtnPressed === false && start(),
onclose: (_, closedMsg) => (checkMessage = closedMsg),
onNoAnswererWrappers: () => {
checkFailed = true;
},
...CommonProject.scripts.settings.cfg
...workOptions
});

const start = async () => {
await options.beforeRunning?.();
worker = options.workerProvider(CommonProject.scripts.settings.cfg);
worker = options.workerProvider(workOptions);

const { container, controlBtn } = createControls();
// 更新状态
Expand Down

0 comments on commit 07f3cfc

Please sign in to comment.