memi-board 0.55.0 → 0.55.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +31 -29
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -146,7 +146,7 @@ function St(e, t, n, r, i) {
|
|
|
146
146
|
return r;
|
|
147
147
|
}
|
|
148
148
|
function Ct(e, t, n, r, i) {
|
|
149
|
-
return r ? !t || t[n] !== r ? r : St(e, i, n, r, t.locale) : "";
|
|
149
|
+
return r ? !t || t[n]?.trim() !== r.trim() ? r : St(e, i, n, r, t.locale) : "";
|
|
150
150
|
}
|
|
151
151
|
function wt(e, t) {
|
|
152
152
|
return Ct(e.i18n, e.i18nSource, "title", e.title ?? "", t);
|
|
@@ -706,7 +706,7 @@ function Sn(e) {
|
|
|
706
706
|
function Cn(e, t = []) {
|
|
707
707
|
let n = e.match(/<img\b[^>]*\bsrc=["']([^"']+)["']/i), r = e.match(/<iframe\b[^>]*\bsrc=["']([^"']+)["']/i), i = t.find((e) => e.type.startsWith("image/"))?.url, a = t.find((e) => e.type.startsWith("video/"))?.url, o = r ? bn(r[1]) : a, s = o ? xn(o) : void 0, c = n ? bn(n[1]) : i || (s ? `https://i.ytimg.com/vi/${s}/hqdefault.jpg` : void 0);
|
|
708
708
|
return {
|
|
709
|
-
summary: e.replace(/<style[\s\S]*?<\/style>/gi, " ").replace(/<script[\s\S]*?<\/script>/gi, " ").replace(/<br\s*\/?>/gi, "\n").replace(/<\/(p|div|li|h[1-6]|blockquote)>/gi, "\n").replace(/<[^>]+>/g, " ").replace(/ /g, " ").replace(/&/g, "&").replace(/[^\S\n]+/g, " ").replace(/ *\n */g, "\n").replace(/\n{2,}/g, "\n").trim().slice(0, 160),
|
|
709
|
+
summary: e.replace(/<style[\s\S]*?<\/style>/gi, " ").replace(/<script[\s\S]*?<\/script>/gi, " ").replace(/<br\s*\/?>/gi, "\n").replace(/<\/(p|div|li|h[1-6]|blockquote)>/gi, "\n").replace(/<[^>]+>/g, " ").replace(/ /g, " ").replace(/&/g, "&").replace(/[^\S\n]+/g, " ").replace(/ *\n */g, "\n").replace(/\n{2,}/g, "\n").trim().slice(0, 160).trimEnd(),
|
|
710
710
|
...c ? { previewImage: c } : {},
|
|
711
711
|
...o ? { videoUrl: o } : {}
|
|
712
712
|
};
|
|
@@ -3225,34 +3225,38 @@ function Bi(e) {
|
|
|
3225
3225
|
//#endregion
|
|
3226
3226
|
//#region src/data/versionHistory.ts
|
|
3227
3227
|
var Vi = [
|
|
3228
|
+
{
|
|
3229
|
+
version: "0.55.2",
|
|
3230
|
+
date: "2026-11-08",
|
|
3231
|
+
highlights: ["목록에서 제목만 번역되고 요약은 원문으로 남던 문제를 고쳤어요", "이미 저장된 글도 다시 번역하지 않고 번역된 요약이 보여요"],
|
|
3232
|
+
highlightsEn: ["Fixed list summaries staying in the original language while the title was translated", "Posts saved earlier show their translated summary without translating again"],
|
|
3233
|
+
note: "Firestore 규칙·인덱스 변경은 없어요.",
|
|
3234
|
+
noteEn: "No Firestore rule or index changes are needed."
|
|
3235
|
+
},
|
|
3236
|
+
{
|
|
3237
|
+
version: "0.55.1",
|
|
3238
|
+
date: "2026-11-06",
|
|
3239
|
+
highlights: ["버전 히스토리는 굵직한 변경만 간단히 보여줘요"],
|
|
3240
|
+
highlightsEn: ["The version history now shows only the major changes"],
|
|
3241
|
+
note: "호스트는 코드를 바꾸지 않아도 돼요. Firestore 규칙·인덱스 변경은 없어요.",
|
|
3242
|
+
noteEn: "Hosts need no code changes. No Firestore rule or index changes are needed."
|
|
3243
|
+
},
|
|
3228
3244
|
{
|
|
3229
3245
|
version: "0.55.0",
|
|
3230
3246
|
date: "2026-11-06",
|
|
3231
3247
|
highlights: [
|
|
3232
|
-
"
|
|
3233
|
-
"게시판마다 국제화 스위치 하나로
|
|
3234
|
-
"새
|
|
3235
|
-
"
|
|
3236
|
-
"
|
|
3237
|
-
"자동 번역은 AI 하루 사용 횟수를 차감하지 않아요",
|
|
3238
|
-
"글 수정 때 원문이 바뀌면 번역도 다시 만들어요",
|
|
3239
|
-
"Velog처럼 보이는 카드 목록을 고를 수 있어요",
|
|
3240
|
-
"프로필에서 글·댓글 수와 내 AI 사용량을 볼 수 있어요",
|
|
3241
|
-
"이미지 게시판 글에도 제목을 쓸 수 있어요",
|
|
3242
|
-
"글 상세에서 첫 이미지에 생기던 선택 테두리를 없앴어요"
|
|
3248
|
+
"전체 설정에서 AI 기능, 국제화, 사용할 언어를 한 번에 정해요",
|
|
3249
|
+
"게시판마다 국제화 스위치 하나로 번역을 켜고 꺼요",
|
|
3250
|
+
"새 글의 제목을 비우면 AI가 만들어 줘요",
|
|
3251
|
+
"카드 모양 목록을 고를 수 있어요",
|
|
3252
|
+
"프로필에서 글·댓글 수와 AI 사용량을 볼 수 있어요"
|
|
3243
3253
|
],
|
|
3244
3254
|
highlightsEn: [
|
|
3245
|
-
"
|
|
3246
|
-
"
|
|
3247
|
-
"Leave
|
|
3248
|
-
"
|
|
3249
|
-
"
|
|
3250
|
-
"Automatic translation no longer uses the daily AI quota",
|
|
3251
|
-
"Editing a post translates it again when the original changed",
|
|
3252
|
-
"A Velog-style card list view is available",
|
|
3253
|
-
"Profiles show post and comment counts and your own AI usage",
|
|
3254
|
-
"Image board posts can have a title too",
|
|
3255
|
-
"Removed the selection outline around the first image in a post"
|
|
3255
|
+
"Site-wide settings control AI features, internationalization, and offered languages in one place",
|
|
3256
|
+
"One internationalization switch per board turns translation on or off",
|
|
3257
|
+
"Leave a new post's title empty and AI writes one",
|
|
3258
|
+
"A card-style list view is available",
|
|
3259
|
+
"Profiles show post and comment counts and your AI usage"
|
|
3256
3260
|
],
|
|
3257
3261
|
note: "호스트는 코드를 바꾸지 않아도 돼요. Firestore 규칙·인덱스 변경은 없어요.",
|
|
3258
3262
|
noteEn: "Hosts need no code changes. No Firestore rule or index changes are needed."
|
|
@@ -3264,15 +3268,13 @@ var Vi = [
|
|
|
3264
3268
|
"소개 팝업이 게시판 본문 정도의 폭으로 열려요",
|
|
3265
3269
|
"자세한 소개는 memi.dev/memi-board에서 볼 수 있어요",
|
|
3266
3270
|
"쓰고 있는 사이트는 memi.dev 게시판에 남기거나 이메일로 알려 주세요",
|
|
3267
|
-
"피드백은 소개 팝업에서 이메일로 보낼 수 있어요"
|
|
3268
|
-
"Safe ON 적용 사례는 safe-pedal.com으로 연결돼요"
|
|
3271
|
+
"피드백은 소개 팝업에서 이메일로 보낼 수 있어요"
|
|
3269
3272
|
],
|
|
3270
3273
|
highlightsEn: [
|
|
3271
3274
|
"The about popup opens at about the width of a board column",
|
|
3272
3275
|
"The detailed introduction is on memi.dev/memi-board",
|
|
3273
3276
|
"Share a site that uses memi-board on the memi.dev board, or by email",
|
|
3274
|
-
"Feedback can be sent by email from the about popup"
|
|
3275
|
-
"The Safe ON showcase links to safe-pedal.com"
|
|
3277
|
+
"Feedback can be sent by email from the about popup"
|
|
3276
3278
|
],
|
|
3277
3279
|
note: "Firestore 규칙·인덱스 변경은 없어요.",
|
|
3278
3280
|
noteEn: "No Firestore rule or index changes are needed."
|
|
@@ -4160,7 +4162,7 @@ function Xi(e) {
|
|
|
4160
4162
|
let t = e.i18nSource;
|
|
4161
4163
|
if (!t || !e.i18n) return !1;
|
|
4162
4164
|
let n = e.title?.trim() || gn(e.content);
|
|
4163
|
-
return (t.title ?? "")
|
|
4165
|
+
return (t.title ?? "") !== n || (t.summary ?? "").trim() !== (e.summary ?? "").trim() ? !1 : !hn(e.content) || e.contentI18nSource?.hash === pt(e.content);
|
|
4164
4166
|
}
|
|
4165
4167
|
async function m() {
|
|
4166
4168
|
c.value = !0, f.value = "";
|