refactor: establish standalone application boundary
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
window.XiaobaiPageModules.register("screener", ["screenerView"], {
|
||||
bind: bindScreenerEvents,
|
||||
enter: ["loadScreener"],
|
||||
});
|
||||
|
||||
window.XiaobaiPageModules.register("screener", ["screenerTrackingView"]);
|
||||
|
||||
/* PRESERVATION-SOURCE-BEGIN app.js:3490-4336 */
|
||||
function screenerStrategyKey(strategyId, strategyName) {
|
||||
return strategyId != null && strategyId !== 0 ? `id:${strategyId}` : `name:${strategyName || ""}`;
|
||||
}
|
||||
@@ -841,8 +841,6 @@ async function executeScreenerFormula({ mode, formula, strategyName, strategyId
|
||||
}
|
||||
}
|
||||
|
||||
/* PRESERVATION-SOURCE-END app.js:3490-4336 */
|
||||
/* PRESERVATION-SOURCE-BEGIN app.js:6668-6892 */
|
||||
function renderScreenerResult() {
|
||||
const mode = state.screenerMode || "smart";
|
||||
const result = activeScreenerResult(mode);
|
||||
@@ -1068,4 +1066,74 @@ function regimeLabel(regime) {
|
||||
return state.screenerSetup?.regimes?.find((item) => item.id === regime)?.label || regime;
|
||||
}
|
||||
|
||||
/* PRESERVATION-SOURCE-END app.js:6668-6892 */
|
||||
|
||||
function bindScreenerEvents() {
|
||||
document.querySelector("#openStrategyDrawerButton").addEventListener("click", openCustomStrategyDrawer);
|
||||
document.querySelector("#closeStrategyDrawerButton").addEventListener("click", () => document.querySelector("#strategyDrawer").close());
|
||||
document.querySelector("#strategyDrawer").addEventListener("click", (event) => {
|
||||
if (event.target === event.currentTarget) event.currentTarget.close();
|
||||
});
|
||||
document.querySelector("#openScreenerTrackingButton").addEventListener("click", async () => {
|
||||
await loadScreenerTracking(true);
|
||||
openView("screenerTrackingView");
|
||||
});
|
||||
document.querySelector("#closeScreenerTrackingButton").addEventListener("click", () => openView("screenerView"));
|
||||
document.querySelector("#refreshTrackingButton").addEventListener("click", refreshScreenerTracking);
|
||||
document.querySelector("#trackingTableBody").addEventListener("click", handleTrackingTableAction);
|
||||
document.querySelectorAll("[data-screener-mobile-view]").forEach((button) => {
|
||||
button.addEventListener("click", () => selectScreenerMobileView(button.dataset.screenerMobileView));
|
||||
});
|
||||
document.querySelector("#compileStrategyButton").addEventListener("click", compileStrategy);
|
||||
document.querySelector("#saveStrategyButton").addEventListener("click", saveCurrentStrategy);
|
||||
document.querySelector("#deleteStrategyButton").addEventListener("click", deleteCurrentStrategy);
|
||||
document.querySelector("#screenerExportButton").addEventListener("click", exportScreenerResults);
|
||||
document.querySelector("#runBacktestToggle").addEventListener("change", updateBacktestTaskStatus);
|
||||
document.querySelectorAll("[data-screener-mode]").forEach((button) => {
|
||||
button.addEventListener("click", () => selectScreenerMode(button.dataset.screenerMode));
|
||||
});
|
||||
document.querySelector("#curatedStrategyList").addEventListener("click", (event) => {
|
||||
if (event.target.closest("button")) return;
|
||||
const card = event.target.closest("[data-curated-strategy]");
|
||||
if (!card) return;
|
||||
state.selectedCuratedStrategyId = number(card.dataset.curatedStrategy);
|
||||
renderCuratedStrategyLibrary();
|
||||
renderScreenerResult();
|
||||
});
|
||||
document.querySelector("#curatedStrategySearch").addEventListener("input", (event) => {
|
||||
state.curatedQuery = event.target.value.trim().toLocaleLowerCase("zh-CN");
|
||||
renderCuratedStrategyLibrary();
|
||||
});
|
||||
document.querySelector("#curatedCategoryFilter").addEventListener("change", (event) => {
|
||||
state.curatedCategory = event.target.value;
|
||||
renderCuratedStrategyLibrary();
|
||||
});
|
||||
document.querySelector("#curatedSchoolFilters").addEventListener("click", (event) => {
|
||||
const button = event.target.closest("[data-curated-school]");
|
||||
if (!button) return;
|
||||
state.curatedSchool = button.dataset.curatedSchool;
|
||||
renderCuratedStrategyLibrary();
|
||||
});
|
||||
document.querySelectorAll("[data-curated-view]").forEach((button) => {
|
||||
button.addEventListener("click", () => {
|
||||
state.curatedViewMode = button.dataset.curatedView === "grid" ? "grid" : "list";
|
||||
localStorage.setItem("xiaobaiCuratedViewMode", state.curatedViewMode);
|
||||
renderCuratedStrategyLibrary();
|
||||
});
|
||||
});
|
||||
document.querySelector("#quantResetButton").addEventListener("click", resetQuantBuilder);
|
||||
document.querySelector("#addQuantFilterButton").addEventListener("click", () => addQuantFilter());
|
||||
document.querySelector("#addQuantScoreButton").addEventListener("click", () => addQuantScore());
|
||||
document.querySelector("#quantFilterRows").addEventListener("input", handleQuantBuilderInput);
|
||||
document.querySelector("#quantFilterRows").addEventListener("change", handleQuantBuilderInput);
|
||||
document.querySelector("#quantFilterRows").addEventListener("click", handleQuantBuilderClick);
|
||||
document.querySelector("#quantScoreRows").addEventListener("input", handleQuantBuilderInput);
|
||||
document.querySelector("#quantScoreRows").addEventListener("change", handleQuantBuilderInput);
|
||||
document.querySelector("#quantScoreRows").addEventListener("click", handleQuantBuilderClick);
|
||||
["quantListedDays", "quantLimit", "quantMinScore", "quantExcludeSt"].forEach((id) => {
|
||||
document.querySelector(`#${id}`).addEventListener("input", renderQuantSummary);
|
||||
document.querySelector(`#${id}`).addEventListener("change", renderQuantSummary);
|
||||
});
|
||||
document.querySelector("#quantRunButton").addEventListener("click", runQuantStrategy);
|
||||
document.querySelector("#quantSaveButton").addEventListener("click", saveQuantAsStrategy);
|
||||
document.querySelector("#quantBacktestToggle").addEventListener("change", updateBacktestTaskStatus);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user