mirror of
https://github.com/ankitects/anki.git
synced 2025-09-24 08:46:37 -04:00
Move setTagsCollapsed()
This commit is contained in:
parent
51fcb86521
commit
15cbbeea24
7 changed files with 69 additions and 37 deletions
|
@ -34,7 +34,12 @@ service FrontendService {
|
|||
|
||||
// Profile config
|
||||
rpc GetProfileConfigJson(generic.String) returns (generic.Json);
|
||||
rpc SetProfileConfigJson(SetProfileConfigJsonRequest) returns (generic.Empty);
|
||||
rpc SetProfileConfigJson(SetSettingJsonRequest) returns (generic.Empty);
|
||||
|
||||
// Metadata
|
||||
rpc GetMetaJson(generic.String) returns (generic.Json);
|
||||
rpc SetMetaJson(SetSettingJsonRequest) returns (generic.Empty);
|
||||
|
||||
}
|
||||
|
||||
service BackendFrontendService {}
|
||||
|
@ -49,7 +54,7 @@ message SetSchedulingStatesRequest {
|
|||
scheduler.SchedulingStates states = 2;
|
||||
}
|
||||
|
||||
message SetProfileConfigJsonRequest {
|
||||
message SetSettingJsonRequest {
|
||||
string key = 1;
|
||||
bytes value_json = 2;
|
||||
}
|
||||
|
|
|
@ -181,13 +181,8 @@ class Editor:
|
|||
self.outerLayout.addWidget(self.web, 1)
|
||||
|
||||
def setupWeb(self) -> None:
|
||||
if self.editorMode == EditorMode.ADD_CARDS:
|
||||
mode = "add"
|
||||
elif self.editorMode == EditorMode.BROWSER:
|
||||
mode = "browse"
|
||||
else:
|
||||
mode = "review"
|
||||
self.web.load_sveltekit_page(f"editor/?mode={mode}")
|
||||
editor_key = self.mw.pm.editor_key(self.editorMode)
|
||||
self.web.load_sveltekit_page(f"editor/?mode={editor_key}")
|
||||
|
||||
def _set_ready(self) -> None:
|
||||
lefttopbtns: list[str] = []
|
||||
|
@ -460,11 +455,6 @@ require("anki/ui").loaded.then(() => require("anki/NoteEditor").instances[0].too
|
|||
elif cmd.startswith("saveTags"):
|
||||
gui_hooks.editor_did_update_tags(self.note)
|
||||
|
||||
elif cmd.startswith("setTagsCollapsed"):
|
||||
(type, collapsed_string) = cmd.split(":", 1)
|
||||
collapsed = collapsed_string == "true"
|
||||
self.setTagsCollapsed(collapsed)
|
||||
|
||||
elif cmd.startswith("editorState"):
|
||||
(_, new_state_id, old_state_id) = cmd.split(":", 2)
|
||||
self.signal_state_change(
|
||||
|
|
|
@ -18,6 +18,7 @@ from collections.abc import Callable
|
|||
from dataclasses import dataclass
|
||||
from errno import EPROTOTYPE
|
||||
from http import HTTPStatus
|
||||
from typing import Any
|
||||
|
||||
import flask
|
||||
import flask_cors
|
||||
|
@ -622,23 +623,37 @@ def editor_update_note() -> bytes:
|
|||
return output
|
||||
|
||||
|
||||
def get_profile_config_json() -> bytes:
|
||||
key = generic_pb2.String()
|
||||
key.ParseFromString(request.data)
|
||||
value = aqt.mw.pm.profile.get(key.val, None)
|
||||
def get_setting_json(getter: Callable[[str], Any]) -> bytes:
|
||||
req = generic_pb2.String()
|
||||
req.ParseFromString(request.data)
|
||||
value = getter(req.val)
|
||||
output = generic_pb2.Json(json=json.dumps(value).encode()).SerializeToString()
|
||||
|
||||
return output
|
||||
|
||||
|
||||
def set_profile_config_json() -> bytes:
|
||||
req = frontend_pb2.SetProfileConfigJsonRequest()
|
||||
def set_setting_json(setter: Callable[[str, Any], Any]) -> bytes:
|
||||
req = frontend_pb2.SetSettingJsonRequest()
|
||||
req.ParseFromString(request.data)
|
||||
aqt.mw.pm.profile[req.key] = json.loads(req.value_json)
|
||||
|
||||
setter(req.key, json.loads(req.value_json))
|
||||
return b""
|
||||
|
||||
|
||||
def get_profile_config_json() -> bytes:
|
||||
return get_setting_json(aqt.mw.pm.profile.get)
|
||||
|
||||
|
||||
def set_profile_config_json() -> bytes:
|
||||
return set_setting_json(aqt.mw.pm.profile.__setitem__)
|
||||
|
||||
|
||||
def get_meta_json() -> bytes:
|
||||
return get_setting_json(aqt.mw.pm.meta.get)
|
||||
|
||||
|
||||
def set_meta_json() -> bytes:
|
||||
return set_setting_json(aqt.mw.pm.meta.__setitem__)
|
||||
|
||||
|
||||
post_handler_list = [
|
||||
congrats_info,
|
||||
get_deck_configs_for_update,
|
||||
|
@ -657,6 +672,8 @@ post_handler_list = [
|
|||
editor_update_note,
|
||||
get_profile_config_json,
|
||||
set_profile_config_json,
|
||||
get_meta_json,
|
||||
set_meta_json,
|
||||
]
|
||||
|
||||
|
||||
|
|
|
@ -1,16 +1,36 @@
|
|||
// Copyright: Ankitects Pty Ltd and contributors
|
||||
// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||
|
||||
import { getProfileConfigJson, setProfileConfigJson } from "@generated/backend";
|
||||
import { getMetaJson, getProfileConfigJson, setMetaJson, setProfileConfigJson } from "@generated/backend";
|
||||
|
||||
export async function getProfileConfig(key: string): Promise<any> {
|
||||
async function getSettingJson(key: string, backendGetter: (key: string) => Promise<any>): Promise<any> {
|
||||
const decoder = new TextDecoder();
|
||||
const json = decoder.decode((await getProfileConfigJson({ val: key })).json);
|
||||
const json = decoder.decode((await backendGetter(key)).json);
|
||||
return JSON.parse(json);
|
||||
}
|
||||
|
||||
export async function setProfileConfig(key: string, value: any): Promise<void> {
|
||||
async function setSettingJson(
|
||||
key: string,
|
||||
value: any,
|
||||
backendSetter: (key: string, value: any) => Promise<any>,
|
||||
): Promise<void> {
|
||||
const encoder = new TextEncoder();
|
||||
const json = JSON.stringify(value);
|
||||
await setProfileConfigJson({ key: key, valueJson: encoder.encode(json) });
|
||||
await backendSetter(key, encoder.encode(json));
|
||||
}
|
||||
|
||||
export async function getProfileConfig(key: string): Promise<any> {
|
||||
return getSettingJson(key, async (k) => await getProfileConfigJson({ val: k }));
|
||||
}
|
||||
|
||||
export async function setProfileConfig(key: string, value: any): Promise<void> {
|
||||
return await setSettingJson(key, value, async (k, v) => await setProfileConfigJson({ key: k, valueJson: v }));
|
||||
}
|
||||
|
||||
export async function getMeta(key: string): Promise<any> {
|
||||
return getSettingJson(key, async (k) => await getMetaJson({ val: k }));
|
||||
}
|
||||
|
||||
export async function setMeta(key: string, value: any): Promise<void> {
|
||||
return await setSettingJson(key, value, async (k, v) => await setMetaJson({ key: k, valueJson: v }));
|
||||
}
|
||||
|
|
|
@ -222,13 +222,15 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|||
}
|
||||
|
||||
const tagsCollapsed = writable<boolean>();
|
||||
$: tagsCollapsedMetaKey = `${mode}TagsCollapsed`;
|
||||
|
||||
export function setTagsCollapsed(collapsed: boolean): void {
|
||||
$tagsCollapsed = collapsed;
|
||||
}
|
||||
|
||||
function updateTagsCollapsed(collapsed: boolean) {
|
||||
async function updateTagsCollapsed(collapsed: boolean) {
|
||||
$tagsCollapsed = collapsed;
|
||||
bridgeCommand(`setTagsCollapsed:${$tagsCollapsed}`);
|
||||
await setMeta(tagsCollapsedMetaKey, collapsed);
|
||||
}
|
||||
|
||||
let note: Note | null = null;
|
||||
|
@ -446,7 +448,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|||
decodeIriPaths,
|
||||
} from "@generated/backend";
|
||||
import { wrapInternal } from "@tslib/wrap";
|
||||
import { getProfileConfig } from "@tslib/profile";
|
||||
import { getProfileConfig, getMeta, setMeta } from "@tslib/profile";
|
||||
import Shortcut from "$lib/components/Shortcut.svelte";
|
||||
|
||||
import { mathjaxConfig } from "$lib/editable/mathjax-element.svelte";
|
||||
|
@ -465,7 +467,6 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|||
import ButtonGroupItem from "$lib/components/ButtonGroupItem.svelte";
|
||||
import PreviewButton from "./PreviewButton.svelte";
|
||||
import type { Note } from "@generated/anki/notes_pb";
|
||||
import InlineButtons from "./editor-toolbar/InlineButtons.svelte";
|
||||
|
||||
$: isIOImageLoaded = false;
|
||||
$: ioImageLoadedStore.set(isIOImageLoaded);
|
||||
|
@ -641,8 +642,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|||
focusField(focusTo);
|
||||
toolbar.inlineButtons?.setColorButtons([lastTextColor, lastHighlightColor]);
|
||||
setTags(tags);
|
||||
// TODO: mw.pm.tags_collapsed()
|
||||
setTagsCollapsed(false);
|
||||
setTagsCollapsed(await getMeta(tagsCollapsedMetaKey));
|
||||
// TODO: renderMathjax col config
|
||||
setMathjaxEnabled(true);
|
||||
// TODO: shrinkEditorImages col config
|
||||
|
@ -759,7 +759,7 @@ components and functionality for general note editing.
|
|||
<div class="note-editor" bind:this={noteEditor}>
|
||||
<EditorToolbar {size} {wrap} api={toolbar}>
|
||||
<svelte:fragment slot="notetypeButtons">
|
||||
{#if mode === "browse"}
|
||||
{#if mode === "browser"}
|
||||
<ButtonGroupItem>
|
||||
<PreviewButton />
|
||||
</ButtonGroupItem>
|
||||
|
|
|
@ -54,7 +54,7 @@ export const components = {
|
|||
export { editorToolbar } from "./editor-toolbar";
|
||||
|
||||
export async function setupEditor(mode: EditorMode) {
|
||||
if (!["add", "browse", "review"].includes(mode)) {
|
||||
if (!["add", "browser", "current"].includes(mode)) {
|
||||
alert("unexpected editor type");
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -28,4 +28,4 @@ export enum EditorState {
|
|||
ImageOcclusionFields = 3,
|
||||
}
|
||||
|
||||
export type EditorMode = "add" | "browse" | "review";
|
||||
export type EditorMode = "add" | "browser" | "current";
|
||||
|
|
Loading…
Reference in a new issue