Skip to content

Commit 3b9f696

Browse files
New richtext render (#6)
* Update .gitignore * Sync pltxt2htm binary from its release page * Integrated fixedadv_parser - requires bugfix of jmp to other experiment * Sync pltxt2htm v0.6.1 * fix memory leak issue * fix issue of jmp to another experiment * Small improvment * impl common_parser * done * format & lint fix * Feat highlight & dompurify --------- Co-authored-by: Arendelle <Arendelle_@outlook.com>
1 parent 768132c commit 3b9f696

19 files changed

Lines changed: 2286 additions & 29 deletions

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,10 @@ dist-ssr
2222
*.njsproj
2323
*.sln
2424
*.sw?
25+
26+
# Archives
27+
**/*.zip
28+
**/*.tar
29+
**/*.gz
30+
**/*.xz
31+
**/*.zstd

package-lock.json

Lines changed: 31 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
"dependencies": {
1414
"@fingerprintjs/fingerprintjs": "^5.0.1",
1515
"date-fns": "^4.1.0",
16+
"dompurify": "^3.3.1",
17+
"highlight.js": "^11.11.1",
1618
"prettier": "^3.6.2",
1719
"vue": "^3.5.24",
1820
"vue-i18n": "^11.1.12",

src/components/messages/MessageItem.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
<div id="notification_message" class="notification_message">
2323
<div
2424
id="notification_text"
25+
v-richText="() => parse(message.msg)"
2526
class="notification_text"
26-
v-html="parse(message.msg, true)"
2727
></div>
2828
</div>
2929
</div>
@@ -32,7 +32,7 @@
3232

3333
<script setup lang="ts">
3434
import { ref, onMounted, watch } from "vue";
35-
import parse from "@services/advancedParser.ts";
35+
import parse from "@services/pltxt2htm/advancedParser";
3636
import showUserCard from "@popup/userProfileDialog.ts";
3737
import { getAvatarUrl } from "@services/getUserCurentAvatarByID";
3838
import storageManager from "@storage/index.ts";

src/components/messages/NotificationItem.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
<div id="notification" class="notification" @click="showComment">
77
<div
88
id="notification_title"
9+
v-richText="() => parse(notification.msg_title)"
910
class="notification_title"
10-
v-html="parse(notification.msg_title, true)"
1111
></div>
1212
<div id="notification_message" class="notification_message">
1313
<div id="notification_icon" class="notification_icon">
@@ -17,10 +17,10 @@
1717
<!-- 我认为是在没必要专门像APP一样渲染邮件,所以暂时这样 -->
1818
<!-- I think it's unnecessary to render emails like an app, so I'll do it this way for now -->
1919
<n-ellipsis
20+
v-richText="() => parse(notification.msg)"
2021
expand-trigger="click"
2122
line-clamp="2"
2223
:tooltip="false"
23-
v-html="parse(notification.msg, true)"
2424
>
2525
</n-ellipsis>
2626
</div>
@@ -31,7 +31,7 @@
3131

3232
<script setup lang="ts">
3333
import { ref, computed, onMounted, watch } from "vue";
34-
import parse from "@services/commonParser.ts";
34+
import parse from "@services/pltxt2htm/commonParser";
3535
import { NEllipsis } from "naive-ui";
3636
import showUserCard from "@popup/userProfileDialog.ts";
3737
import { getAvatarUrl } from "@services/getUserCurentAvatarByID";

src/components/projects/brief.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<div class="card" :type="type">
99
<img :src="imgUrl" class="icon" />
1010
<div class="text">
11-
<p class="title" v-html="parse(data.Subject)"></p>
11+
<p v-richText="() => parse(data.Subject)" class="title"></p>
1212
<p class="subtitle">
1313
{{ data.User.Nickname + "&nbsp;&nbsp;-" + formattedDate }}
1414
</p>
@@ -19,7 +19,7 @@
1919

2020
<script setup>
2121
import { computed } from "vue";
22-
import parse from "@services/commonParser.ts";
22+
import parse from "@services/pltxt2htm/commonParser";
2323
import { getCoverUrl, formatDate } from "@services/utils.ts";
2424
2525
window.formtDate = formatDate;

src/components/projects/detailed.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<div class="card">
66
<img :src="imgUrl" class="icon" />
77
<div class="text">
8-
<p class="title" v-html="parse(data.Subject)"></p>
8+
<p v-richText="() => parse(data.Subject)" class="title"></p>
99
<p class="subtitle">{{ data.User.Nickname }}</p>
1010
<div class="subtitle">
1111
<Tag v-for="i in data.Tags" :category="data.Category" :tag="i" />
@@ -17,7 +17,7 @@
1717

1818
<script setup lang="ts">
1919
import Tag from "../utils/Tag.vue";
20-
import parse from "@services/commonParser.ts";
20+
import parse from "@services/pltxt2htm/commonParser";
2121
import { getCoverUrl, getPath } from "@services/utils";
2222
import { useRouter } from "vue-router";
2323

src/main.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import router from "./router/index";
44
import i18n from "@i18n/index";
55
import ErrorLogger from "./services/errorLogger.ts";
66
import { LogManager } from "@api/logWriter.ts";
7+
import type { DirectiveBinding } from "vue";
8+
import "highlight.js/styles/github.css";
79

810
const app = createApp(App);
911
app.use(router);
@@ -22,6 +24,21 @@ app.use(i18n);
2224
// }
2325
// setVh();
2426

27+
// Richtext Render
28+
app.directive("richText", {
29+
mounted(el, binding: DirectiveBinding<() => Promise<string>>) {
30+
el.innerHTML = "rendering...";
31+
Promise.resolve(binding.value()).then((html) => {
32+
el.innerHTML = html;
33+
});
34+
},
35+
updated(el: HTMLElement, binding: DirectiveBinding<any>) {
36+
Promise.resolve(binding.value()).then((html) => {
37+
el.innerHTML = html;
38+
});
39+
},
40+
});
41+
2542
app.mount("#app");
2643
window.$ErrorLogger = new ErrorLogger(app);
2744
window.$Logger = LogManager;

src/services/advancedParser.ts

Lines changed: 0 additions & 7 deletions
This file was deleted.

src/services/commonParser.ts

Lines changed: 0 additions & 7 deletions
This file was deleted.

0 commit comments

Comments
 (0)