siyuan/app/src/protyle/render/av/number.ts
Vanessa 2ac751dead 🚨
2023-08-03 23:47:34 +08:00

200 lines
5.6 KiB
TypeScript

import {Menu} from "../../../plugin/Menu";
import {transaction} from "../../wysiwyg/transaction";
const addFormatItem = (options: {
menu: Menu,
protyle: IProtyle,
colId: string,
avID: string,
format: string,
oldFormat: string
avPanelElement: Element
}) => {
options.menu.addItem({
iconHTML: "",
label: getLabelByNumberFormat(options.format),
click() {
transaction(options.protyle, [{
action: "updateAttrViewColNumberFormat",
id: options.colId,
avID: options.avID,
format: options.format,
type: "number",
}], [{
action: "updateAttrViewColNumberFormat",
id: options.colId,
avID: options.avID,
format: options.oldFormat,
type: "number",
}]);
options.avPanelElement.remove();
}
});
};
export const formatNumber = (options: {
avPanelElement: Element,
element: HTMLElement,
protyle: IProtyle,
colId: string,
avID: string,
oldFormat: string
}) => {
const menu = new Menu("av-col-format-number");
addFormatItem({
menu,
protyle: options.protyle,
colId: options.colId,
avID: options.avID,
format: "",
oldFormat: options.oldFormat,
avPanelElement: options.avPanelElement,
});
addFormatItem({
menu,
protyle: options.protyle,
colId: options.colId,
avID: options.avID,
format: "commas",
oldFormat: options.oldFormat,
avPanelElement: options.avPanelElement,
});
addFormatItem({
menu,
protyle: options.protyle,
colId: options.colId,
avID: options.avID,
format: "percent",
oldFormat: options.oldFormat,
avPanelElement: options.avPanelElement,
});
addFormatItem({
menu,
protyle: options.protyle,
colId: options.colId,
avID: options.avID,
format: "usDollar",
oldFormat: options.oldFormat,
avPanelElement: options.avPanelElement,
});
addFormatItem({
menu,
protyle: options.protyle,
colId: options.colId,
avID: options.avID,
format: "yuan",
oldFormat: options.oldFormat,
avPanelElement: options.avPanelElement,
});
addFormatItem({
menu,
protyle: options.protyle,
colId: options.colId,
avID: options.avID,
format: "euro",
oldFormat: options.oldFormat,
avPanelElement: options.avPanelElement,
});
addFormatItem({
menu,
protyle: options.protyle,
colId: options.colId,
avID: options.avID,
format: "pound",
oldFormat: options.oldFormat,
avPanelElement: options.avPanelElement,
});
addFormatItem({
menu,
protyle: options.protyle,
colId: options.colId,
avID: options.avID,
format: "yen",
oldFormat: options.oldFormat,
avPanelElement: options.avPanelElement,
});
addFormatItem({
menu,
protyle: options.protyle,
colId: options.colId,
avID: options.avID,
format: "ruble",
oldFormat: options.oldFormat,
avPanelElement: options.avPanelElement,
});
addFormatItem({
menu,
protyle: options.protyle,
colId: options.colId,
avID: options.avID,
format: "rupee",
oldFormat: options.oldFormat,
avPanelElement: options.avPanelElement,
});
addFormatItem({
menu,
protyle: options.protyle,
colId: options.colId,
avID: options.avID,
format: "won",
oldFormat: options.oldFormat,
avPanelElement: options.avPanelElement,
});
addFormatItem({
menu,
protyle: options.protyle,
colId: options.colId,
avID: options.avID,
format: "canadianDollar",
oldFormat: options.oldFormat,
avPanelElement: options.avPanelElement,
});
addFormatItem({
menu,
protyle: options.protyle,
colId: options.colId,
avID: options.avID,
format: "franc",
oldFormat: options.oldFormat,
avPanelElement: options.avPanelElement,
});
const rect = options.element.getBoundingClientRect();
menu.open({
x: rect.left,
y: rect.bottom,
h: rect.height,
w: rect.width,
isLeft: true,
});
};
export const getLabelByNumberFormat = (format: string) => {
switch (format) {
case "":
return window.siyuan.languages.numberFormatNone;
case "commas":
return window.siyuan.languages.numberFormatCommas;
case "percent":
return window.siyuan.languages.numberFormatPercent;
case "usDollar":
return window.siyuan.languages.numberFormatUSDollar;
case "yuan":
return window.siyuan.languages.numberFormatYuan;
case "euro":
return window.siyuan.languages.numberFormatEuro;
case "pound":
return window.siyuan.languages.numberFormatPound;
case "yen":
return window.siyuan.languages.numberFormatYen;
case "ruble":
return window.siyuan.languages.numberFormatRuble;
case "rupee":
return window.siyuan.languages.numberFormatRupee;
case "won":
return window.siyuan.languages.numberFormatWon;
case "canadianDollar":
return window.siyuan.languages.numberFormatCanadianDollar;
case "franc":
return window.siyuan.languages.numberFormatFranc;
}
};