From 00efde8f2271cacf1e4084ae877c90347bb032ea Mon Sep 17 00:00:00 2001
From: Pacharapol Withayasakpunt
Date: Thu, 28 Apr 2022 11:06:25 +0700
Subject: [PATCH] fix template
---
package.json | 2 +
scripts/anki-template.ts | 82 +++++++++++
template/jp.takoboto/EJ/Back.html | 209 +++++++++++++++++++++++++++++
template/jp.takoboto/EJ/Front.html | 7 +
template/jp.takoboto/JE/Back.html | 197 +++++++++++++++++++++++++++
template/jp.takoboto/JE/Front.html | 1 +
template/jp.takoboto/style.css | 31 +++++
yarn.lock | 9 ++
8 files changed, 538 insertions(+)
create mode 100644 scripts/anki-template.ts
create mode 100644 template/jp.takoboto/EJ/Back.html
create mode 100644 template/jp.takoboto/EJ/Front.html
create mode 100644 template/jp.takoboto/JE/Back.html
create mode 100644 template/jp.takoboto/JE/Front.html
create mode 100644 template/jp.takoboto/style.css
diff --git a/package.json b/package.json
index 84348fc..efb867f 100644
--- a/package.json
+++ b/package.json
@@ -12,11 +12,13 @@
"dependencies": {
"axios": "^0.26.1",
"axios-rate-limit": "^1.3.0",
+ "fs-extra": "^10.1.0",
"js-yaml": "^4.1.0",
"nanoid": "^3.3.2",
"wanakana": "^4.0.2"
},
"devDependencies": {
+ "@types/fs-extra": "^9.0.13",
"@types/js-yaml": "^4.0.5",
"@types/node": "^17.0.23",
"@types/wanakana": "^4.0.3",
diff --git a/scripts/anki-template.ts b/scripts/anki-template.ts
new file mode 100644
index 0000000..1f0e352
--- /dev/null
+++ b/scripts/anki-template.ts
@@ -0,0 +1,82 @@
+import path from 'path';
+
+import { AnkiConnect, IAnkiConnectActions } from '@/ankiconnect';
+import {
+ ensureDirSync,
+ readFileSync,
+ readdirSync,
+ writeFileSync,
+} from 'fs-extra';
+
+export class AnkiTemplateEditor {
+ $connect = new AnkiConnect();
+
+ templateDir = 'template';
+ rootDir = path.resolve(this.templateDir, this.modelName);
+ styleFilename = 'style.css';
+
+ constructor(public modelName: string) {
+ ensureDirSync(this.rootDir);
+ }
+
+ async get() {
+ const d = await this.$connect.api('modelTemplates', {
+ modelName: this.modelName,
+ });
+
+ Object.entries(d).map(([cardName, sideDict]) => {
+ const folderDir = path.resolve(this.rootDir, cardName);
+ ensureDirSync(folderDir);
+ Object.entries(sideDict).map(([side, html]) => {
+ writeFileSync(path.resolve(folderDir, side + '.html'), html);
+ });
+ });
+
+ const s = await this.$connect.api('modelStyling', {
+ modelName: this.modelName,
+ });
+
+ writeFileSync(path.resolve(this.rootDir, this.styleFilename), s.css);
+ }
+
+ async set() {
+ const templates: IAnkiConnectActions['updateModelTemplates']['params']['model']['templates'] =
+ {};
+
+ for (const p of readdirSync(this.rootDir)) {
+ if (p === this.styleFilename) {
+ await this.$connect.api('updateModelStyling', {
+ model: {
+ name: this.modelName,
+ css: readFileSync(
+ path.resolve(this.rootDir, this.styleFilename),
+ 'utf-8',
+ ),
+ },
+ });
+ continue;
+ }
+
+ readdirSync(path.resolve(this.rootDir, p)).map((p1) => {
+ const side = p1.replace(/\.[^\.]+$/, '') as 'Front' | 'Back';
+ const sideMap = templates[p] || {};
+ sideMap[side] = readFileSync(
+ path.resolve(this.rootDir, p, p1),
+ 'utf-8',
+ );
+ templates[p] = sideMap;
+ });
+ }
+
+ await this.$connect.api('updateModelTemplates', {
+ model: {
+ name: this.modelName,
+ templates,
+ },
+ });
+ }
+}
+
+if (require.main === module) {
+ new AnkiTemplateEditor('jp.takoboto').set();
+}
diff --git a/template/jp.takoboto/EJ/Back.html b/template/jp.takoboto/EJ/Back.html
new file mode 100644
index 0000000..4c06113
--- /dev/null
+++ b/template/jp.takoboto/EJ/Back.html
@@ -0,0 +1,209 @@
+{{FrontSide}}
+
+
+
+{{#SentenceAudio}}
+{{SentenceAudio}}
+{{/SentenceAudio}}
+
+{{^SentenceAudio}}
+{{#Sentence}}
+[sound:https://peaceful-brushlands-36451.herokuapp.com/api/tts?lang=ja&is_sentence=true&q={{kanji:Sentence}}]
+{{/Sentence}}
+{{/SentenceAudio}}
+
+{{furigana:Japanese}}
+
+{{#JapaneseAlt}}
+{{JapaneseAlt}}
+{{/JapaneseAlt}}
+
+
+ {{#Pitch}}
+ {{Pitch}}
+ {{/Pitch}}
+
+ {{^Pitch}}
+ {{Reading}}
+ {{/Pitch}}
+
+ {{^JapaneseAudio}}
+
+ {{/JapaneseAudio}}
+
+ {{#JapaneseAudio}}
+
+ {{/JapaneseAudio}}
+
+
+{{#Sentence}}
+
+
+ {{Sentence}}
+
+ {{^SentenceAudio}}
+
+ {{/SentenceAudio}}
+
+ {{#SentenceAudio}}
+
+ {{/SentenceAudio}}
+
+{{SentenceMeaning}}
+
+{{/Sentence}}
+
+
+ References
+ {{#Takoboto}}
+ Takoboto・
+ {{/Takoboto}}
+ {{#Akebi}}
+ Akebi・
+ {{/Akebi}}
+ ALC・
+ Weblio・
+ Goo・
+ 用例・
+ YouGlish・
+ ImmersionKit・
+ Audios
+
+
+{{#Mnemonic}}
+
+ Mnemonic
+ {{Mnemonic}}
+
+{{/Mnemonic}}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/template/jp.takoboto/EJ/Front.html b/template/jp.takoboto/EJ/Front.html
new file mode 100644
index 0000000..8816cf7
--- /dev/null
+++ b/template/jp.takoboto/EJ/Front.html
@@ -0,0 +1,7 @@
+{{^MeaningQuiz}}
+{{Meaning}}
+{{/MeaningQuiz}}
+
+{{#MeaningQuiz}}
+{{MeaningQuiz}}
+{{/MeaningQuiz}}
\ No newline at end of file
diff --git a/template/jp.takoboto/JE/Back.html b/template/jp.takoboto/JE/Back.html
new file mode 100644
index 0000000..2895b1b
--- /dev/null
+++ b/template/jp.takoboto/JE/Back.html
@@ -0,0 +1,197 @@
+{{FrontSide}}
+
+
+
+{{#JapaneseAudio}}
+{{JapaneseAudio}}
+{{/JapaneseAudio}}
+
+{{^JapaneseAudio}}
+[sound:https://peaceful-brushlands-36451.herokuapp.com/api/tts?lang=ja&q={{kanji:Japanese}}]
+{{/JapaneseAudio}}
+
+{{JapaneseAlt}}
+
+
+ {{#Pitch}}
+ {{Pitch}}
+ {{/Pitch}}
+
+ {{^Pitch}}
+ {{Reading}}
+ {{/Pitch}}
+
+
+{{Meaning}}
+
+{{#Sentence}}
+
+
+ {{furigana:Sentence}}
+
+ {{^SentenceAudio}}
+
+ {{/SentenceAudio}}
+
+ {{#SentenceAudio}}
+
+ {{/SentenceAudio}}
+
+{{SentenceMeaning}}
+
+{{/Sentence}}
+
+
+ References
+ {{#Takoboto}}
+ Takoboto・
+ {{/Takoboto}}
+ {{#Akebi}}
+ Akebi・
+ {{/Akebi}}
+ ALC・
+ Weblio・
+ Goo・
+ 用例・
+ YouGlish・
+ ImmersionKit・
+ Audios
+
+
+{{#Mnemonic}}
+
+ Mnemonic
+ {{Mnemonic}}
+
+{{/Mnemonic}}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/template/jp.takoboto/JE/Front.html b/template/jp.takoboto/JE/Front.html
new file mode 100644
index 0000000..377fbec
--- /dev/null
+++ b/template/jp.takoboto/JE/Front.html
@@ -0,0 +1 @@
+{{furigana:Japanese}}
diff --git a/template/jp.takoboto/style.css b/template/jp.takoboto/style.css
new file mode 100644
index 0000000..f40653d
--- /dev/null
+++ b/template/jp.takoboto/style.css
@@ -0,0 +1,31 @@
+@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP&display=swap');
+
+.card {
+ font-family: 'Noto Sans JP';
+ font-size: 20px;
+ text-align: center;
+ color: black;
+ background-color: white;
+}
+
+.hidden {
+ display: none;
+}
+
+.low-pitch {
+ text-decoration: none;
+ border-bottom: 3px dashed #512da8;
+}
+
+.high-pitch {
+ font-weight: normal;
+ border-left: 3px dashed #512da8;
+ border-top: 3px dashed #512da8;
+ border-right: 3px dashed #512da8;
+}
+
+.high-pitch-unterminated {
+ font-weight: normal;
+ border-left: 3px dashed #512da8;
+ border-top: 3px dashed #512da8;
+}
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index e36a5ee..96c61ba 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -936,6 +936,15 @@ fs-extra@^10.0.1:
jsonfile "^6.0.1"
universalify "^2.0.0"
+fs-extra@^10.1.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
+ integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
fsevents@~2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"