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 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(/&nbsp;/g, " ").replace(/&amp;/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(/&nbsp;/g, " ").replace(/&amp;/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
- "게시판 설정 맨 위의 전체 설정에서 AI 기능, 국제화, 사용할 언어, 기본 언어를 한 번에 정하고 적용해요",
3233
- "게시판마다 국제화 스위치 하나로 이름·설명과 글·댓글 번역을 켜고 꺼요",
3234
- "새 글에서 제목을 비우면 AI가 글이나 사진을 보고 제목을 만들어 줘요",
3235
- "글쓰기 AI에서 언어를 하나 골라 번역을 저장 없이 미리 볼 수 있어요",
3236
- "게시판 설정에서 번역이 없거나 낡은 기존 글을 한꺼번에 번역해요",
3237
- "자동 번역은 AI 하루 사용 횟수를 차감하지 않아요",
3238
- "글 수정 때 원문이 바뀌면 번역도 다시 만들어요",
3239
- "Velog처럼 보이는 카드 목록을 고를 수 있어요",
3240
- "프로필에서 글·댓글 수와 내 AI 사용량을 볼 수 있어요",
3241
- "이미지 게시판 글에도 제목을 쓸 수 있어요",
3242
- "글 상세에서 첫 이미지에 생기던 선택 테두리를 없앴어요"
3248
+ "전체 설정에서 AI 기능, 국제화, 사용할 언어를 한 번에 정해요",
3249
+ "게시판마다 국제화 스위치 하나로 번역을 켜고 꺼요",
3250
+ "새 글의 제목을 비우면 AI가 만들어 줘요",
3251
+ "카드 모양 목록을 고를 수 있어요",
3252
+ "프로필에서 글·댓글 수와 AI 사용량을 볼 수 있어요"
3243
3253
  ],
3244
3254
  highlightsEn: [
3245
- "The site-wide settings at the top of board settings set AI features, internationalization, offered languages, and the default language in one Apply",
3246
- "Each board has one internationalization switch for translating its name, description, posts, and comments",
3247
- "Leave the title empty on a new post and AI writes one from the text or the photo",
3248
- "Pick one language in the writing AI to preview a translation without saving it",
3249
- "Board settings can translate existing posts whose translation is missing or outdated in one go",
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 ?? "") === n ? !hn(e.content) || e.contentI18nSource?.hash === pt(e.content) : !1;
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 = "";