@cgboiler/biz-basic 1.0.27 → 1.0.28
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 +63 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/rich-text-editor/RichTextEditor.js +63 -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,47 @@ 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 saveIntervalId = null;
|
|
145
|
+
const noteId = ref("");
|
|
146
|
+
const historyStore = localforage.createInstance({
|
|
147
|
+
name: "RichTextEditorHistory",
|
|
148
|
+
storeName: "notes"
|
|
149
|
+
});
|
|
121
150
|
onMounted(() => {
|
|
122
151
|
initEditor();
|
|
152
|
+
const now = /* @__PURE__ */ new Date();
|
|
153
|
+
const formattedTime = `${now.toLocaleDateString()} ${now.toLocaleTimeString()}`;
|
|
154
|
+
noteId.value = `note-${now.getTime()}`;
|
|
155
|
+
const noteTitle = `\u7B14\u8BB0 at ${formattedTime}`;
|
|
156
|
+
saveIntervalId = setInterval(() => __async(this, null, function* () {
|
|
157
|
+
if (!editor.value || editor.value.isDestroyed || !editor.value.isEditable) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const content = editor.value.getHTML();
|
|
161
|
+
console.log("content: ", content);
|
|
162
|
+
yield historyStore.setItem(noteId.value, {
|
|
163
|
+
title: noteTitle,
|
|
164
|
+
content
|
|
165
|
+
});
|
|
166
|
+
let metadata = (yield historyStore.getItem(HISTORY_METADATA_KEY)) || [];
|
|
167
|
+
const existingNoteIndex = metadata.findIndex((meta) => meta.id === noteId.value);
|
|
168
|
+
if (existingNoteIndex === -1) {
|
|
169
|
+
metadata.push({
|
|
170
|
+
id: noteId.value,
|
|
171
|
+
timestamp: now.getTime()
|
|
172
|
+
});
|
|
173
|
+
metadata.sort((a, b) => b.timestamp - a.timestamp);
|
|
174
|
+
if (metadata.length > MAX_HISTORY_ITEMS) {
|
|
175
|
+
const itemsToRemove = metadata.splice(MAX_HISTORY_ITEMS);
|
|
176
|
+
for (const item of itemsToRemove) {
|
|
177
|
+
yield historyStore.removeItem(item.id);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
yield historyStore.setItem(HISTORY_METADATA_KEY, metadata);
|
|
181
|
+
}
|
|
182
|
+
}), 1e4);
|
|
123
183
|
nextTick(() => {
|
|
124
184
|
var _a, _b;
|
|
125
185
|
const editorElement = (_b = (_a = editor.value) == null ? void 0 : _a.view) == null ? void 0 : _b.dom;
|
|
@@ -130,6 +190,9 @@ var stdin_default = defineComponent({
|
|
|
130
190
|
});
|
|
131
191
|
onBeforeUnmount(() => {
|
|
132
192
|
var _a, _b, _c;
|
|
193
|
+
if (saveIntervalId) {
|
|
194
|
+
clearInterval(saveIntervalId);
|
|
195
|
+
}
|
|
133
196
|
const editorElement = (_b = (_a = editor.value) == null ? void 0 : _a.view) == null ? void 0 : _b.dom;
|
|
134
197
|
if (editorElement) {
|
|
135
198
|
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.27";
|
|
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,47 @@ 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 saveIntervalId = null;
|
|
177
|
+
const noteId = (0, import_vue2.ref)("");
|
|
178
|
+
const historyStore = import_localforage.default.createInstance({
|
|
179
|
+
name: "RichTextEditorHistory",
|
|
180
|
+
storeName: "notes"
|
|
181
|
+
});
|
|
153
182
|
(0, import_vue2.onMounted)(() => {
|
|
154
183
|
initEditor();
|
|
184
|
+
const now = /* @__PURE__ */ new Date();
|
|
185
|
+
const formattedTime = `${now.toLocaleDateString()} ${now.toLocaleTimeString()}`;
|
|
186
|
+
noteId.value = `note-${now.getTime()}`;
|
|
187
|
+
const noteTitle = `\u7B14\u8BB0 at ${formattedTime}`;
|
|
188
|
+
saveIntervalId = setInterval(() => __async(this, null, function* () {
|
|
189
|
+
if (!editor.value || editor.value.isDestroyed || !editor.value.isEditable) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
const content = editor.value.getHTML();
|
|
193
|
+
console.log("content: ", content);
|
|
194
|
+
yield historyStore.setItem(noteId.value, {
|
|
195
|
+
title: noteTitle,
|
|
196
|
+
content
|
|
197
|
+
});
|
|
198
|
+
let metadata = (yield historyStore.getItem(HISTORY_METADATA_KEY)) || [];
|
|
199
|
+
const existingNoteIndex = metadata.findIndex((meta) => meta.id === noteId.value);
|
|
200
|
+
if (existingNoteIndex === -1) {
|
|
201
|
+
metadata.push({
|
|
202
|
+
id: noteId.value,
|
|
203
|
+
timestamp: now.getTime()
|
|
204
|
+
});
|
|
205
|
+
metadata.sort((a, b) => b.timestamp - a.timestamp);
|
|
206
|
+
if (metadata.length > MAX_HISTORY_ITEMS) {
|
|
207
|
+
const itemsToRemove = metadata.splice(MAX_HISTORY_ITEMS);
|
|
208
|
+
for (const item of itemsToRemove) {
|
|
209
|
+
yield historyStore.removeItem(item.id);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
yield historyStore.setItem(HISTORY_METADATA_KEY, metadata);
|
|
213
|
+
}
|
|
214
|
+
}), 1e4);
|
|
155
215
|
(0, import_vue2.nextTick)(() => {
|
|
156
216
|
var _a, _b;
|
|
157
217
|
const editorElement = (_b = (_a = editor.value) == null ? void 0 : _a.view) == null ? void 0 : _b.dom;
|
|
@@ -162,6 +222,9 @@ var stdin_default = (0, import_vue2.defineComponent)({
|
|
|
162
222
|
});
|
|
163
223
|
(0, import_vue2.onBeforeUnmount)(() => {
|
|
164
224
|
var _a, _b, _c;
|
|
225
|
+
if (saveIntervalId) {
|
|
226
|
+
clearInterval(saveIntervalId);
|
|
227
|
+
}
|
|
165
228
|
const editorElement = (_b = (_a = editor.value) == null ? void 0 : _a.view) == null ? void 0 : _b.dom;
|
|
166
229
|
if (editorElement) {
|
|
167
230
|
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.28",
|
|
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",
|