@cgboiler/biz-basic 1.0.27 → 1.0.29
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/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/rich-text-editor/RichTextEditor.js +64 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/rich-text-editor/RichTextEditor.js +64 -0
- package/package.json +3 -2
package/es/index.d.ts
CHANGED
package/es/index.js
CHANGED
|
@@ -1,3 +1,23 @@
|
|
|
1
|
+
var __async = (__this, __arguments, generator) => {
|
|
2
|
+
return new Promise((resolve, reject) => {
|
|
3
|
+
var fulfilled = (value) => {
|
|
4
|
+
try {
|
|
5
|
+
step(generator.next(value));
|
|
6
|
+
} catch (e) {
|
|
7
|
+
reject(e);
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
var rejected = (value) => {
|
|
11
|
+
try {
|
|
12
|
+
step(generator.throw(value));
|
|
13
|
+
} catch (e) {
|
|
14
|
+
reject(e);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
18
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
1
21
|
import { createVNode as _createVNode } from "vue";
|
|
2
22
|
import "./_atomic.css";
|
|
3
23
|
import { defineComponent, onMounted, onBeforeUnmount, ref, watch, nextTick } from "vue";
|
|
@@ -5,6 +25,7 @@ import { Editor, EditorContent } from "@tiptap/vue-3";
|
|
|
5
25
|
import Viewer from "viewerjs";
|
|
6
26
|
import "viewerjs/dist/viewer.css";
|
|
7
27
|
import { useExtensions } from "./useExtensions";
|
|
28
|
+
import localforage from "localforage";
|
|
8
29
|
import { richTextEditorProps } from "./types";
|
|
9
30
|
import "./index.css";
|
|
10
31
|
var stdin_default = defineComponent({
|
|
@@ -118,8 +139,48 @@ var stdin_default = defineComponent({
|
|
|
118
139
|
event.preventDefault();
|
|
119
140
|
}
|
|
120
141
|
};
|
|
142
|
+
const HISTORY_METADATA_KEY = "rich_text_editor_history_metadata";
|
|
143
|
+
const MAX_HISTORY_ITEMS = 10;
|
|
144
|
+
let saveTimeoutId = null;
|
|
145
|
+
const noteId = ref("");
|
|
146
|
+
const historyStore = localforage.createInstance({
|
|
147
|
+
name: "RichTextEditorHistory",
|
|
148
|
+
storeName: "notes"
|
|
149
|
+
});
|
|
150
|
+
const saveLoop = () => __async(this, null, function* () {
|
|
151
|
+
if (editor.value && !editor.value.isDestroyed && editor.value.isEditable) {
|
|
152
|
+
const content = editor.value.getHTML();
|
|
153
|
+
const now = /* @__PURE__ */ new Date();
|
|
154
|
+
const formattedTime = `${now.toLocaleDateString()} ${now.toLocaleTimeString()}`;
|
|
155
|
+
const noteTitle = `\u7B14\u8BB0 at ${formattedTime}`;
|
|
156
|
+
yield historyStore.setItem(noteId.value, {
|
|
157
|
+
title: noteTitle,
|
|
158
|
+
content
|
|
159
|
+
});
|
|
160
|
+
let metadata = (yield historyStore.getItem(HISTORY_METADATA_KEY)) || [];
|
|
161
|
+
const existingNoteIndex = metadata.findIndex((meta) => meta.id === noteId.value);
|
|
162
|
+
if (existingNoteIndex === -1) {
|
|
163
|
+
metadata.push({
|
|
164
|
+
id: noteId.value,
|
|
165
|
+
timestamp: now.getTime()
|
|
166
|
+
});
|
|
167
|
+
metadata.sort((a, b) => b.timestamp - a.timestamp);
|
|
168
|
+
if (metadata.length > MAX_HISTORY_ITEMS) {
|
|
169
|
+
const itemsToRemove = metadata.splice(MAX_HISTORY_ITEMS);
|
|
170
|
+
for (const item of itemsToRemove) {
|
|
171
|
+
yield historyStore.removeItem(item.id);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
yield historyStore.setItem(HISTORY_METADATA_KEY, metadata);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
saveTimeoutId = setTimeout(saveLoop, 1e4);
|
|
178
|
+
});
|
|
121
179
|
onMounted(() => {
|
|
122
180
|
initEditor();
|
|
181
|
+
const now = /* @__PURE__ */ new Date();
|
|
182
|
+
noteId.value = `note-${now.getTime()}`;
|
|
183
|
+
saveLoop();
|
|
123
184
|
nextTick(() => {
|
|
124
185
|
var _a, _b;
|
|
125
186
|
const editorElement = (_b = (_a = editor.value) == null ? void 0 : _a.view) == null ? void 0 : _b.dom;
|
|
@@ -130,6 +191,9 @@ var stdin_default = defineComponent({
|
|
|
130
191
|
});
|
|
131
192
|
onBeforeUnmount(() => {
|
|
132
193
|
var _a, _b, _c;
|
|
194
|
+
if (saveTimeoutId) {
|
|
195
|
+
clearTimeout(saveTimeoutId);
|
|
196
|
+
}
|
|
133
197
|
const editorElement = (_b = (_a = editor.value) == null ? void 0 : _a.view) == null ? void 0 : _b.dom;
|
|
134
198
|
if (editorElement) {
|
|
135
199
|
editorElement.removeEventListener("click", imageClickHandler);
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -36,7 +36,7 @@ __export(stdin_exports, {
|
|
|
36
36
|
module.exports = __toCommonJS(stdin_exports);
|
|
37
37
|
var import_rich_text_editor = __toESM(require("./rich-text-editor"));
|
|
38
38
|
__reExport(stdin_exports, require("./rich-text-editor"), module.exports);
|
|
39
|
-
const version = "1.0.
|
|
39
|
+
const version = "1.0.28";
|
|
40
40
|
function install(app) {
|
|
41
41
|
const components = [
|
|
42
42
|
import_rich_text_editor.default
|
|
@@ -25,6 +25,26 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
25
25
|
mod
|
|
26
26
|
));
|
|
27
27
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
var __async = (__this, __arguments, generator) => {
|
|
29
|
+
return new Promise((resolve, reject) => {
|
|
30
|
+
var fulfilled = (value) => {
|
|
31
|
+
try {
|
|
32
|
+
step(generator.next(value));
|
|
33
|
+
} catch (e) {
|
|
34
|
+
reject(e);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var rejected = (value) => {
|
|
38
|
+
try {
|
|
39
|
+
step(generator.throw(value));
|
|
40
|
+
} catch (e) {
|
|
41
|
+
reject(e);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
45
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
46
|
+
});
|
|
47
|
+
};
|
|
28
48
|
var stdin_exports = {};
|
|
29
49
|
__export(stdin_exports, {
|
|
30
50
|
default: () => stdin_default
|
|
@@ -37,6 +57,7 @@ var import_vue_3 = require("@tiptap/vue-3");
|
|
|
37
57
|
var import_viewerjs = __toESM(require("viewerjs"));
|
|
38
58
|
var import_viewer = require("viewerjs/dist/viewer.css");
|
|
39
59
|
var import_useExtensions = require("./useExtensions");
|
|
60
|
+
var import_localforage = __toESM(require("localforage"));
|
|
40
61
|
var import_types = require("./types");
|
|
41
62
|
var import_index = require("./index.css");
|
|
42
63
|
var stdin_default = (0, import_vue2.defineComponent)({
|
|
@@ -150,8 +171,48 @@ var stdin_default = (0, import_vue2.defineComponent)({
|
|
|
150
171
|
event.preventDefault();
|
|
151
172
|
}
|
|
152
173
|
};
|
|
174
|
+
const HISTORY_METADATA_KEY = "rich_text_editor_history_metadata";
|
|
175
|
+
const MAX_HISTORY_ITEMS = 10;
|
|
176
|
+
let saveTimeoutId = null;
|
|
177
|
+
const noteId = (0, import_vue2.ref)("");
|
|
178
|
+
const historyStore = import_localforage.default.createInstance({
|
|
179
|
+
name: "RichTextEditorHistory",
|
|
180
|
+
storeName: "notes"
|
|
181
|
+
});
|
|
182
|
+
const saveLoop = () => __async(this, null, function* () {
|
|
183
|
+
if (editor.value && !editor.value.isDestroyed && editor.value.isEditable) {
|
|
184
|
+
const content = editor.value.getHTML();
|
|
185
|
+
const now = /* @__PURE__ */ new Date();
|
|
186
|
+
const formattedTime = `${now.toLocaleDateString()} ${now.toLocaleTimeString()}`;
|
|
187
|
+
const noteTitle = `\u7B14\u8BB0 at ${formattedTime}`;
|
|
188
|
+
yield historyStore.setItem(noteId.value, {
|
|
189
|
+
title: noteTitle,
|
|
190
|
+
content
|
|
191
|
+
});
|
|
192
|
+
let metadata = (yield historyStore.getItem(HISTORY_METADATA_KEY)) || [];
|
|
193
|
+
const existingNoteIndex = metadata.findIndex((meta) => meta.id === noteId.value);
|
|
194
|
+
if (existingNoteIndex === -1) {
|
|
195
|
+
metadata.push({
|
|
196
|
+
id: noteId.value,
|
|
197
|
+
timestamp: now.getTime()
|
|
198
|
+
});
|
|
199
|
+
metadata.sort((a, b) => b.timestamp - a.timestamp);
|
|
200
|
+
if (metadata.length > MAX_HISTORY_ITEMS) {
|
|
201
|
+
const itemsToRemove = metadata.splice(MAX_HISTORY_ITEMS);
|
|
202
|
+
for (const item of itemsToRemove) {
|
|
203
|
+
yield historyStore.removeItem(item.id);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
yield historyStore.setItem(HISTORY_METADATA_KEY, metadata);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
saveTimeoutId = setTimeout(saveLoop, 1e4);
|
|
210
|
+
});
|
|
153
211
|
(0, import_vue2.onMounted)(() => {
|
|
154
212
|
initEditor();
|
|
213
|
+
const now = /* @__PURE__ */ new Date();
|
|
214
|
+
noteId.value = `note-${now.getTime()}`;
|
|
215
|
+
saveLoop();
|
|
155
216
|
(0, import_vue2.nextTick)(() => {
|
|
156
217
|
var _a, _b;
|
|
157
218
|
const editorElement = (_b = (_a = editor.value) == null ? void 0 : _a.view) == null ? void 0 : _b.dom;
|
|
@@ -162,6 +223,9 @@ var stdin_default = (0, import_vue2.defineComponent)({
|
|
|
162
223
|
});
|
|
163
224
|
(0, import_vue2.onBeforeUnmount)(() => {
|
|
164
225
|
var _a, _b, _c;
|
|
226
|
+
if (saveTimeoutId) {
|
|
227
|
+
clearTimeout(saveTimeoutId);
|
|
228
|
+
}
|
|
165
229
|
const editorElement = (_b = (_a = editor.value) == null ? void 0 : _a.view) == null ? void 0 : _b.dom;
|
|
166
230
|
if (editorElement) {
|
|
167
231
|
editorElement.removeEventListener("click", imageClickHandler);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cgboiler/biz-basic",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.29",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "es/index.js",
|
|
@@ -52,7 +52,8 @@
|
|
|
52
52
|
"@tiptap/starter-kit": "3.3.0",
|
|
53
53
|
"@tiptap/vue-3": "3.3.0",
|
|
54
54
|
"tiptap-markdown": "^0.8.10",
|
|
55
|
-
"viewerjs": "^1.11.7"
|
|
55
|
+
"viewerjs": "^1.11.7",
|
|
56
|
+
"localforage": "^1.10.0"
|
|
56
57
|
},
|
|
57
58
|
"browserslist": [
|
|
58
59
|
"Chrome >= 51",
|