mirror of
https://github.com/zadam/trilium.git
synced 2025-12-01 04:54:25 +01:00
Merge branch 'main' of https://github.com/TriliumNext/Trilium
Some checks are pending
Checks / main (push) Waiting to run
CodeQL Advanced / Analyze (actions) (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Deploy Documentation / Build and Deploy Documentation (push) Waiting to run
Dev / Test development (push) Waiting to run
Dev / Build Docker image (push) Blocked by required conditions
Dev / Check Docker build (Dockerfile) (push) Blocked by required conditions
Dev / Check Docker build (Dockerfile.alpine) (push) Blocked by required conditions
/ Check Docker build (Dockerfile) (push) Waiting to run
/ Check Docker build (Dockerfile.alpine) (push) Waiting to run
/ Build Docker images (Dockerfile, ubuntu-24.04-arm, linux/arm64) (push) Blocked by required conditions
/ Build Docker images (Dockerfile.alpine, ubuntu-latest, linux/amd64) (push) Blocked by required conditions
/ Build Docker images (Dockerfile.legacy, ubuntu-24.04-arm, linux/arm/v7) (push) Blocked by required conditions
/ Build Docker images (Dockerfile.legacy, ubuntu-24.04-arm, linux/arm/v8) (push) Blocked by required conditions
/ Merge manifest lists (push) Blocked by required conditions
playwright / E2E tests on linux-arm64 (push) Waiting to run
playwright / E2E tests on linux-x64 (push) Waiting to run
Deploy website / Build & deploy website (push) Waiting to run
Some checks are pending
Checks / main (push) Waiting to run
CodeQL Advanced / Analyze (actions) (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Deploy Documentation / Build and Deploy Documentation (push) Waiting to run
Dev / Test development (push) Waiting to run
Dev / Build Docker image (push) Blocked by required conditions
Dev / Check Docker build (Dockerfile) (push) Blocked by required conditions
Dev / Check Docker build (Dockerfile.alpine) (push) Blocked by required conditions
/ Check Docker build (Dockerfile) (push) Waiting to run
/ Check Docker build (Dockerfile.alpine) (push) Waiting to run
/ Build Docker images (Dockerfile, ubuntu-24.04-arm, linux/arm64) (push) Blocked by required conditions
/ Build Docker images (Dockerfile.alpine, ubuntu-latest, linux/amd64) (push) Blocked by required conditions
/ Build Docker images (Dockerfile.legacy, ubuntu-24.04-arm, linux/arm/v7) (push) Blocked by required conditions
/ Build Docker images (Dockerfile.legacy, ubuntu-24.04-arm, linux/arm/v8) (push) Blocked by required conditions
/ Merge manifest lists (push) Blocked by required conditions
playwright / E2E tests on linux-arm64 (push) Waiting to run
playwright / E2E tests on linux-x64 (push) Waiting to run
Deploy website / Build & deploy website (push) Waiting to run
This commit is contained in:
commit
a77e76d5c6
@ -1686,46 +1686,6 @@ body:not(.mobile) #launcher-pane.horizontal .dropdown-submenu > .dropdown-menu {
|
|||||||
body.mobile .modal-dialog.modal-dialog-scrollable {
|
body.mobile .modal-dialog.modal-dialog-scrollable {
|
||||||
height: unset;
|
height: unset;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.mobile .revisions-dialog .modal-dialog {
|
|
||||||
height: 95vh;
|
|
||||||
}
|
|
||||||
|
|
||||||
body.mobile .revisions-dialog .modal-body {
|
|
||||||
height: 100% !important;
|
|
||||||
flex-direction: column;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
body.mobile .revisions-dialog .revision-list {
|
|
||||||
height: unset;
|
|
||||||
max-height: 20vh;
|
|
||||||
border-bottom: 1px solid var(--main-border-color) !important;
|
|
||||||
padding: 0 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
body.mobile .revisions-dialog .modal-body > .revision-content-wrapper {
|
|
||||||
flex-grow: 1;
|
|
||||||
height: 100%;
|
|
||||||
overflow: auto;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
body.mobile .revisions-dialog .modal-body > .revision-content-wrapper > div:first-of-type {
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
body.mobile .revisions-dialog .revision-title {
|
|
||||||
font-size: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
body.mobile .revisions-dialog .revision-title-buttons {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
body.mobile .revisions-dialog .revision-content {
|
|
||||||
padding: 0.5em;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mobile, tablet mode */
|
/* Mobile, tablet mode */
|
||||||
|
|||||||
@ -2107,5 +2107,8 @@
|
|||||||
"clear-color": "Clear note color",
|
"clear-color": "Clear note color",
|
||||||
"set-color": "Set note color",
|
"set-color": "Set note color",
|
||||||
"set-custom-color": "Set custom note color"
|
"set-custom-color": "Set custom note color"
|
||||||
|
},
|
||||||
|
"popup-editor": {
|
||||||
|
"maximize": "Switch to full editor"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -77,6 +77,7 @@ export const LOCALE_MAPPINGS: Record<DISPLAYABLE_LOCALE_IDS, (() => Promise<{ de
|
|||||||
"pt_br": () => import("@fullcalendar/core/locales/pt-br"),
|
"pt_br": () => import("@fullcalendar/core/locales/pt-br"),
|
||||||
uk: () => import("@fullcalendar/core/locales/uk"),
|
uk: () => import("@fullcalendar/core/locales/uk"),
|
||||||
en: null,
|
en: null,
|
||||||
|
"en-GB": () => import("@fullcalendar/core/locales/en-gb"),
|
||||||
"en_rtl": null,
|
"en_rtl": null,
|
||||||
ar: () => import("@fullcalendar/core/locales/ar")
|
ar: () => import("@fullcalendar/core/locales/ar")
|
||||||
};
|
};
|
||||||
|
|||||||
@ -19,6 +19,8 @@ import tree from "../../services/tree";
|
|||||||
import froca from "../../services/froca";
|
import froca from "../../services/froca";
|
||||||
import ReadOnlyNoteInfoBar from "../ReadOnlyNoteInfoBar";
|
import ReadOnlyNoteInfoBar from "../ReadOnlyNoteInfoBar";
|
||||||
import MobileEditorToolbar from "../type_widgets/text/mobile_editor_toolbar";
|
import MobileEditorToolbar from "../type_widgets/text/mobile_editor_toolbar";
|
||||||
|
import { t } from "../../services/i18n";
|
||||||
|
import appContext from "../../components/app_context";
|
||||||
|
|
||||||
export default function PopupEditor() {
|
export default function PopupEditor() {
|
||||||
const [ shown, setShown ] = useState(false);
|
const [ shown, setShown ] = useState(false);
|
||||||
@ -62,8 +64,13 @@ export default function PopupEditor() {
|
|||||||
title={<TitleRow />}
|
title={<TitleRow />}
|
||||||
customTitleBarButtons={[{
|
customTitleBarButtons={[{
|
||||||
iconClassName: "bx-expand-alt",
|
iconClassName: "bx-expand-alt",
|
||||||
title: "Switch to full editor",
|
title: t("popup-editor.maximize"),
|
||||||
onClick: () => {/* TO DO */}
|
onClick: async () => {
|
||||||
|
if (!noteContext.noteId) return;
|
||||||
|
const { noteId, hoistedNoteId } = noteContext;
|
||||||
|
await appContext.tabManager.openInNewTab(noteId, hoistedNoteId, true);
|
||||||
|
setShown(false);
|
||||||
|
}
|
||||||
}]}
|
}]}
|
||||||
className="popup-editor-dialog"
|
className="popup-editor-dialog"
|
||||||
size="lg"
|
size="lg"
|
||||||
|
|||||||
63
apps/client/src/widgets/dialogs/revisions.css
Normal file
63
apps/client/src/widgets/dialogs/revisions.css
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
body.mobile .revisions-dialog {
|
||||||
|
.modal-dialog {
|
||||||
|
height: 95vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-header {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 0.25em;
|
||||||
|
font-size: 0.9em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-title {
|
||||||
|
flex-grow: 1;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-body {
|
||||||
|
height: fit-content !important;
|
||||||
|
flex-direction: column;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-footer {
|
||||||
|
font-size: 0.9em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.revision-list {
|
||||||
|
height: fit-content !important;
|
||||||
|
max-height: 20vh;
|
||||||
|
border-bottom: 1px solid var(--main-border-color) !important;
|
||||||
|
padding: 0 1em;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-body > .revision-content-wrapper {
|
||||||
|
flex-grow: 1;
|
||||||
|
max-width: unset !important;
|
||||||
|
height: 100%;
|
||||||
|
margin: 0;
|
||||||
|
display: block !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-body > .revision-content-wrapper > div:first-of-type {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.revision-title {
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.revision-title-buttons {
|
||||||
|
text-align: center;
|
||||||
|
display: flex;
|
||||||
|
gap: 0.25em;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.revision-content {
|
||||||
|
padding: 0.5em;
|
||||||
|
height: fit-content;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -20,6 +20,7 @@ import ActionButton from "../react/ActionButton";
|
|||||||
import options from "../../services/options";
|
import options from "../../services/options";
|
||||||
import { useTriliumEvent } from "../react/hooks";
|
import { useTriliumEvent } from "../react/hooks";
|
||||||
import { diffWords } from "diff";
|
import { diffWords } from "diff";
|
||||||
|
import "./revisions.css";
|
||||||
|
|
||||||
export default function RevisionsDialog() {
|
export default function RevisionsDialog() {
|
||||||
const [ note, setNote ] = useState<FNote>();
|
const [ note, setNote ] = useState<FNote>();
|
||||||
@ -137,7 +138,7 @@ export default function RevisionsDialog() {
|
|||||||
|
|
||||||
function RevisionsList({ revisions, onSelect, currentRevision }: { revisions: RevisionItem[], onSelect: (val: string) => void, currentRevision?: RevisionItem }) {
|
function RevisionsList({ revisions, onSelect, currentRevision }: { revisions: RevisionItem[], onSelect: (val: string) => void, currentRevision?: RevisionItem }) {
|
||||||
return (
|
return (
|
||||||
<FormList onSelect={onSelect} fullHeight>
|
<FormList onSelect={onSelect} fullHeight wrapperClassName="revision-list">
|
||||||
{revisions.map((item) =>
|
{revisions.map((item) =>
|
||||||
<FormListItem
|
<FormListItem
|
||||||
value={item.revisionId}
|
value={item.revisionId}
|
||||||
|
|||||||
@ -6,15 +6,17 @@ import "./FormList.css";
|
|||||||
import { CommandNames } from "../../components/app_context";
|
import { CommandNames } from "../../components/app_context";
|
||||||
import { useStaticTooltip } from "./hooks";
|
import { useStaticTooltip } from "./hooks";
|
||||||
import { handleRightToLeftPlacement, isMobile } from "../../services/utils";
|
import { handleRightToLeftPlacement, isMobile } from "../../services/utils";
|
||||||
|
import clsx from "clsx";
|
||||||
|
|
||||||
interface FormListOpts {
|
interface FormListOpts {
|
||||||
children: ComponentChildren;
|
children: ComponentChildren;
|
||||||
onSelect?: (value: string) => void;
|
onSelect?: (value: string) => void;
|
||||||
style?: CSSProperties;
|
style?: CSSProperties;
|
||||||
|
wrapperClassName?: string;
|
||||||
fullHeight?: boolean;
|
fullHeight?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function FormList({ children, onSelect, style, fullHeight }: FormListOpts) {
|
export default function FormList({ children, onSelect, style, fullHeight, wrapperClassName }: FormListOpts) {
|
||||||
const wrapperRef = useRef<HTMLDivElement | null>(null);
|
const wrapperRef = useRef<HTMLDivElement | null>(null);
|
||||||
const triggerRef = useRef<HTMLButtonElement | null>(null);
|
const triggerRef = useRef<HTMLButtonElement | null>(null);
|
||||||
|
|
||||||
@ -43,7 +45,7 @@ export default function FormList({ children, onSelect, style, fullHeight }: Form
|
|||||||
}, [ fullHeight ]);
|
}, [ fullHeight ]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="dropdownWrapper" ref={wrapperRef} style={builtinStyles}>
|
<div className={clsx("dropdownWrapper", wrapperClassName)} ref={wrapperRef} style={builtinStyles}>
|
||||||
<div className="dropdown" style={builtinStyles}>
|
<div className="dropdown" style={builtinStyles}>
|
||||||
<button
|
<button
|
||||||
ref={triggerRef}
|
ref={triggerRef}
|
||||||
|
|||||||
@ -28,6 +28,7 @@ const LOCALE_MAPPINGS: Record<DISPLAYABLE_LOCALE_IDS, Options["locale"] | null>
|
|||||||
de: null,
|
de: null,
|
||||||
en: "en",
|
en: "en",
|
||||||
en_rtl: "en",
|
en_rtl: "en",
|
||||||
|
"en-GB": "en",
|
||||||
es: "es",
|
es: "es",
|
||||||
fr: "fr",
|
fr: "fr",
|
||||||
it: "it",
|
it: "it",
|
||||||
|
|||||||
@ -22,6 +22,7 @@ describe("Canvas i18n", () => {
|
|||||||
if (locale.contentOnly || locale.devOnly) continue;
|
if (locale.contentOnly || locale.devOnly) continue;
|
||||||
const languageCode = LANGUAGE_MAPPINGS[locale.id];
|
const languageCode = LANGUAGE_MAPPINGS[locale.id];
|
||||||
if (!supportedLanguageCodes.has(languageCode)) {
|
if (!supportedLanguageCodes.has(languageCode)) {
|
||||||
|
console.log("Supported locales:", Array.from(supportedLanguageCodes.values()).join(", "));
|
||||||
expect.fail(`Unable to find locale for ${locale.id} -> ${languageCode}.`)
|
expect.fail(`Unable to find locale for ${locale.id} -> ${languageCode}.`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,10 +1,12 @@
|
|||||||
|
import { Language } from "@excalidraw/excalidraw/i18n";
|
||||||
import type { DISPLAYABLE_LOCALE_IDS } from "@triliumnext/commons";
|
import type { DISPLAYABLE_LOCALE_IDS } from "@triliumnext/commons";
|
||||||
|
|
||||||
export const LANGUAGE_MAPPINGS: Record<DISPLAYABLE_LOCALE_IDS, string | null> = {
|
export const LANGUAGE_MAPPINGS: Record<DISPLAYABLE_LOCALE_IDS, Language["code"] | null> = {
|
||||||
ar: "ar-SA",
|
ar: "ar-SA",
|
||||||
cn: "zh-CN",
|
cn: "zh-CN",
|
||||||
de: "de-DE",
|
de: "de-DE",
|
||||||
en: "en",
|
en: "en",
|
||||||
|
"en-GB": "en",
|
||||||
en_rtl: "en",
|
en_rtl: "en",
|
||||||
es: "es-ES",
|
es: "es-ES",
|
||||||
fr: "fr-FR",
|
fr: "fr-FR",
|
||||||
|
|||||||
@ -7,11 +7,13 @@ import hidden_subtree from "./hidden_subtree.js";
|
|||||||
import { LOCALES, type Locale, type LOCALE_IDS } from "@triliumnext/commons";
|
import { LOCALES, type Locale, type LOCALE_IDS } from "@triliumnext/commons";
|
||||||
import dayjs, { Dayjs } from "dayjs";
|
import dayjs, { Dayjs } from "dayjs";
|
||||||
|
|
||||||
|
// When adding a new locale, prefer the version with hyphen instead of underscore.
|
||||||
export const DAYJS_LOADER: Record<LOCALE_IDS, () => Promise<typeof import("dayjs/locale/en.js")>> = {
|
export const DAYJS_LOADER: Record<LOCALE_IDS, () => Promise<typeof import("dayjs/locale/en.js")>> = {
|
||||||
"ar": () => import("dayjs/locale/ar.js"),
|
"ar": () => import("dayjs/locale/ar.js"),
|
||||||
"cn": () => import("dayjs/locale/zh-cn.js"),
|
"cn": () => import("dayjs/locale/zh-cn.js"),
|
||||||
"de": () => import("dayjs/locale/de.js"),
|
"de": () => import("dayjs/locale/de.js"),
|
||||||
"en": () => import("dayjs/locale/en.js"),
|
"en": () => import("dayjs/locale/en.js"),
|
||||||
|
"en-GB": () => import("dayjs/locale/en-gb.js"),
|
||||||
"en_rtl": () => import("dayjs/locale/en.js"),
|
"en_rtl": () => import("dayjs/locale/en.js"),
|
||||||
"es": () => import("dayjs/locale/es.js"),
|
"es": () => import("dayjs/locale/es.js"),
|
||||||
"fa": () => import("dayjs/locale/fa.js"),
|
"fa": () => import("dayjs/locale/fa.js"),
|
||||||
|
|||||||
@ -10,6 +10,11 @@ interface LocaleMapping {
|
|||||||
const LOCALE_MAPPINGS: Record<DISPLAYABLE_LOCALE_IDS, LocaleMapping | null> = {
|
const LOCALE_MAPPINGS: Record<DISPLAYABLE_LOCALE_IDS, LocaleMapping | null> = {
|
||||||
en: null,
|
en: null,
|
||||||
en_rtl: null,
|
en_rtl: null,
|
||||||
|
"en-GB": {
|
||||||
|
languageCode: "en-GB",
|
||||||
|
coreTranslation: () => import("ckeditor5/translations/en-gb.js"),
|
||||||
|
premiumFeaturesTranslation: () => import("ckeditor5-premium-features/translations/en-gb.js"),
|
||||||
|
},
|
||||||
ar: {
|
ar: {
|
||||||
languageCode: "ar",
|
languageCode: "ar",
|
||||||
coreTranslation: () => import("ckeditor5/translations/ar.js"),
|
coreTranslation: () => import("ckeditor5/translations/ar.js"),
|
||||||
|
|||||||
@ -15,6 +15,7 @@ const UNSORTED_LOCALES = [
|
|||||||
{ id: "cn", name: "简体中文", electronLocale: "zh_CN" },
|
{ id: "cn", name: "简体中文", electronLocale: "zh_CN" },
|
||||||
{ id: "de", name: "Deutsch", electronLocale: "de" },
|
{ id: "de", name: "Deutsch", electronLocale: "de" },
|
||||||
{ id: "en", name: "English", electronLocale: "en" },
|
{ id: "en", name: "English", electronLocale: "en" },
|
||||||
|
{ id: "en-GB", name: "English (United Kingdom)", electronLocale: "en_GB" },
|
||||||
{ id: "es", name: "Español", electronLocale: "es" },
|
{ id: "es", name: "Español", electronLocale: "es" },
|
||||||
{ id: "fr", name: "Français", electronLocale: "fr" },
|
{ id: "fr", name: "Français", electronLocale: "fr" },
|
||||||
{ id: "it", name: "Italiano", electronLocale: "it" },
|
{ id: "it", name: "Italiano", electronLocale: "it" },
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user