import {fetchPost} from "../../util/fetch";
import {getEventName, writeText} from "../../protyle/util/compatibility";
import {popSearch} from "./search";
import {initAppearance} from "../settings/appearance";
import {closePanel} from "./closePanel";
import {Constants} from "../../constants";
import {setAccessAuthCode} from "../../config/util";
import {mountHelp, newDailyNote, newNotebook} from "../../util/mount";
import {needSubscribe} from "../../util/needSubscribe";
import {repos} from "../../config/repos";
import * as md5 from "blueimp-md5";
import {showMessage} from "../../dialog/message";
import {exitSiYuan} from "../../dialog/processSystem";
import {confirmDialog} from "../../dialog/confirmDialog";
import {openHistory} from "../../util/history";
const showAccountInfo = (modelElement: HTMLElement, modelMainElement: Element) => {
closePanel();
let userTitlesHTML = "";
if (window.siyuan.user.userTitles.length > 0) {
userTitlesHTML = '
';
window.siyuan.user.userTitles.forEach((item) => {
userTitlesHTML += `
${item.icon} ${item.name}
`;
});
userTitlesHTML += "
";
}
modelElement.style.top = "0";
modelElement.querySelector(".toolbar__icon").innerHTML = ' ';
modelElement.querySelector(".toolbar__text").textContent = window.siyuan.languages.accountManage;
modelMainElement.innerHTML = ``;
modelMainElement.querySelector("#logout").addEventListener(getEventName(), () => {
fetchPost("/api/setting/logoutCloudUser", {}, () => {
window.siyuan.user = null;
closePanel();
document.getElementById("menuAccount").innerHTML = `${window.siyuan.languages.login} `;
});
});
modelMainElement.querySelector("#deactivateUser").addEventListener(getEventName(), () => {
confirmDialog("⚠️ " + window.siyuan.languages.deactivateUser, window.siyuan.languages.deactivateUserTip, () => {
fetchPost("/api/account/deactivate", {}, () => {
window.siyuan.user = null;
closePanel();
document.getElementById("menuAccount").innerHTML = `${window.siyuan.languages.login} `;
});
});
});
const refreshElement = modelMainElement.querySelector("#refresh");
refreshElement.addEventListener("click", () => {
const svgElement = refreshElement.firstElementChild;
if (svgElement.classList.contains("fn__rotate")) {
return;
}
svgElement.classList.add("fn__rotate");
fetchPost("/api/setting/getCloudUser", {
token: window.siyuan.user.userToken,
}, response => {
window.siyuan.user = response.data;
showMessage(window.siyuan.languages.refreshUser, 3000);
showAccountInfo(modelElement, modelMainElement);
const menuAccountElement = document.getElementById("menuAccount");
if (window.siyuan.user) {
menuAccountElement.innerHTML = `${window.siyuan.user.userName} `;
} else {
menuAccountElement.innerHTML = `${window.siyuan.languages.login} `;
}
});
});
};
export const popMenu = () => {
const modelElement = document.getElementById("model");
const modelMainElement = document.getElementById("modelMain");
const scrimElement = document.querySelector(".scrim");
const menuElement = document.getElementById("menu");
if (menuElement.innerHTML !== "") {
menuElement.style.right = "0";
scrimElement.classList.remove("fn__none");
return;
}
fetchPost("/api/setting/getCloudUser", {}, userResponse => {
window.siyuan.user = userResponse.data;
let accountHTML = "";
if (window.siyuan.user) {
accountHTML = ``;
} else {
accountHTML = ``;
}
menuElement.innerHTML = `
${accountHTML}
`;
menuElement.addEventListener(getEventName(), (event) => {
let target = event.target as HTMLElement;
while (target && !target.isEqualNode(menuElement)) {
if (target.id === "menuSearch") {
popSearch(modelElement, modelMainElement);
event.preventDefault();
event.stopPropagation();
break;
} else if (target.id === "menuAppearance") {
initAppearance(modelElement, modelMainElement);
event.preventDefault();
event.stopPropagation();
break;
} else if (target.id === "menuSafeQuit") {
exitSiYuan();
event.preventDefault();
event.stopPropagation();
break;
} else if (target.id === "menuAbout") {
closePanel();
if (!window.siyuan.config.localIPs || window.siyuan.config.localIPs.length === 0 ||
(window.siyuan.config.localIPs.length === 1 && window.siyuan.config.localIPs[0] === "")) {
window.siyuan.config.localIPs = ["127.0.0.1"];
}
modelElement.style.top = "0";
modelElement.querySelector(".toolbar__icon").innerHTML = ' ';
modelElement.querySelector(".toolbar__text").textContent = window.siyuan.languages.about;
modelMainElement.innerHTML = `
${window.siyuan.languages.about11}
${window.siyuan.languages.about12}
${window.siyuan.languages.about2}
${window.siyuan.languages.about3}
${window.siyuan.config.localIPs.join(" ")}
${window.siyuan.languages.about5}
${window.siyuan.languages.config}
${window.siyuan.languages.about6}
${window.siyuan.languages.about13}
${window.siyuan.config.api.token}
${window.siyuan.languages.copy}
${window.siyuan.languages.about14}
${window.siyuan.languages.export}
${window.siyuan.languages.export} Data
${window.siyuan.languages.exportDataTip}
${window.siyuan.languages.import}
${window.siyuan.languages.import} Data
${window.siyuan.languages.importDataTip}
会泽百家 至公天下
${window.siyuan.languages.about1}
`;
const authCodeElement = modelMainElement.querySelector("#authCode") as HTMLInputElement;
authCodeElement.addEventListener("click", () => {
setAccessAuthCode();
});
modelMainElement.querySelector("#token").addEventListener("click", () => {
writeText(window.siyuan.config.api.token);
});
modelMainElement.querySelector("#exportData").addEventListener("click", () => {
fetchPost("/api/export/exportData", {}, response => {
if (window.JSAndroid) {
window.JSAndroid.openExternal(response.data.zip);
return;
}
window.location.href = response.data.zip;
});
});
modelMainElement.querySelector("#importData").addEventListener("change", (event: InputEvent & { target: HTMLInputElement }) => {
const formData = new FormData();
formData.append("file", event.target.files[0]);
fetchPost("/api/import/importData", formData);
});
const networkServeElement = modelMainElement.querySelector("#networkServe") as HTMLInputElement;
networkServeElement.addEventListener("change", () => {
fetchPost("/api/system/setNetworkServe", {networkServe: networkServeElement.checked}, () => {
exitSiYuan();
});
});
event.preventDefault();
event.stopPropagation();
break;
} else if (target.id === "menuNewDaily") {
newDailyNote();
event.preventDefault();
event.stopPropagation();
break;
} else if (target.id === "menuNewNotebook") {
newNotebook();
event.preventDefault();
event.stopPropagation();
break;
} else if (target.id === "menuHelp") {
mountHelp();
event.preventDefault();
event.stopPropagation();
break;
} else if (target.id === "menuLock") {
fetchPost("/api/system/logoutAuth", {}, () => {
window.location.href = "/";
});
event.preventDefault();
event.stopPropagation();
break;
} else if (target.id === "menuSync") {
if (!needSubscribe()) {
closePanel();
modelElement.style.top = "0";
modelElement.querySelector(".toolbar__icon").innerHTML = ' ';
modelElement.querySelector(".toolbar__text").textContent = window.siyuan.languages.cloud;
modelMainElement.innerHTML = repos.genHTML();
repos.element = modelMainElement;
repos.bindEvent();
}
event.preventDefault();
event.stopPropagation();
break;
} else if (target.id === "menuSyncNow") {
if (needSubscribe()) {
return;
}
if (!window.siyuan.config.sync.enabled) {
showMessage(window.siyuan.languages._kernel[124]);
return;
}
fetchPost("/api/sync/performSync", {});
event.preventDefault();
event.stopPropagation();
break;
} else if (target.id === "menuHistory" && !window.siyuan.config.readonly) {
openHistory();
event.preventDefault();
event.stopPropagation();
break;
} else if (target.id === "menuAccount") {
event.preventDefault();
event.stopPropagation();
closePanel();
if (document.querySelector("#menuAccount img")) {
showAccountInfo(modelElement, modelMainElement);
return;
}
modelElement.style.top = "0";
modelElement.querySelector(".toolbar__icon").innerHTML = ' ';
modelElement.querySelector(".toolbar__text").textContent = window.siyuan.languages.login;
modelMainElement.innerHTML = `
`;
const agreeLoginElement = modelMainElement.querySelector("#agreeLogin") as HTMLInputElement;
const userNameElement = modelMainElement.querySelector("#userName") as HTMLInputElement;
const userPasswordElement = modelMainElement.querySelector("#userPassword") as HTMLInputElement;
const captchaImgElement = modelMainElement.querySelector("#captchaImg") as HTMLInputElement;
const captchaElement = modelMainElement.querySelector("#captcha") as HTMLInputElement;
const twofactorAuthCodeElement = modelMainElement.querySelector("#twofactorAuthCode") as HTMLInputElement;
const loginBtnElement = modelMainElement.querySelector("#login") as HTMLButtonElement;
const login2BtnElement = modelMainElement.querySelector("#login2") as HTMLButtonElement;
userNameElement.focus();
let token: string;
let needCaptcha: string;
agreeLoginElement.addEventListener("click", () => {
if (agreeLoginElement.checked) {
loginBtnElement.removeAttribute("disabled");
} else {
loginBtnElement.setAttribute("disabled", "disabled");
}
});
captchaImgElement.addEventListener("click", () => {
captchaImgElement.setAttribute("src", `https://ld246.com/captcha/login?needCaptcha=${needCaptcha}&t=${new Date().getTime()}`);
});
loginBtnElement.addEventListener("click", () => {
fetchPost("/api/account/login", {
userName: userNameElement.value.replace(/(^\s*)|(\s*$)/g, ""),
userPassword: md5(userPasswordElement.value),
captcha: captchaElement.value.replace(/(^\s*)|(\s*$)/g, ""),
}, (data) => {
if (data.code === 1) {
showMessage(data.msg);
if (data.data.needCaptcha) {
// 验证码
needCaptcha = data.data.needCaptcha;
captchaElement.parentElement.classList.remove("fn__none");
captchaElement.previousElementSibling.setAttribute("src",
`https://ld246.com/captcha/login?needCaptcha=${data.data.needCaptcha}`);
captchaElement.value = "";
return;
}
return;
}
if (data.code === 10) {
// 两步验证
modelMainElement.querySelector("#form1").classList.add("fn__none");
modelMainElement.querySelector("#form2").classList.remove("fn__none");
twofactorAuthCodeElement.focus();
token = data.data.token;
return;
}
fetchPost("/api/setting/getCloudUser", {
token: data.data.token,
}, response => {
window.siyuan.user = response.data;
closePanel();
document.getElementById("menuAccount").innerHTML = `
${window.siyuan.user.userName} `;
});
});
});
login2BtnElement.addEventListener("click", () => {
fetchPost("/api/setting/login2faCloudUser", {
code: twofactorAuthCodeElement.value,
token,
}, faResponse => {
fetchPost("/api/setting/getCloudUser", {
token: faResponse.data.token,
}, response => {
window.siyuan.user = response.data;
closePanel();
document.getElementById("menuAccount").innerHTML = `
${window.siyuan.user.userName} `;
});
});
});
break;
}
target = target.parentElement;
}
});
menuElement.style.right = "0";
scrimElement.classList.remove("fn__none");
});
};