First EditorJS implementation

This commit is contained in:
Florian Sylvain
2022-12-30 19:30:23 +01:00
parent 80b1364486
commit 44ae2ef43f
8 changed files with 639 additions and 165 deletions
+12 -1
View File
@@ -1,2 +1,13 @@
/// <reference types="vite/client" />
declare const __APP_ENV__: Record<string, string>
declare const __APP_ENV__: Record<string, string>
declare module '@editorjs/paragraph';
declare module '@editorjs/list';
declare module '@editorjs/warning';
declare module '@editorjs/delimiter';
declare module '@editorjs/nested-list';
declare module '@editorjs/checklist';
declare module '@editorjs/quote';
declare module '@editorjs/marker';
declare module '@editorjs/code';
declare module '@editorjs/table';
declare module '@editorjs/underline';
+362 -104
View File
@@ -8,12 +8,25 @@
"name": "admin-gui",
"version": "0.0.0",
"dependencies": {
"@editorjs/checklist": "^1.4.0",
"@editorjs/code": "^2.8.0",
"@editorjs/delimiter": "^1.3.0",
"@editorjs/editorjs": "^2.26.4",
"@editorjs/header": "^2.7.0",
"@editorjs/list": "^1.8.0",
"@editorjs/marker": "^1.3.0",
"@editorjs/nested-list": "^1.2.0",
"@editorjs/paragraph": "^2.9.0",
"@editorjs/quote": "^2.5.0",
"@editorjs/table": "^2.2.0",
"@editorjs/underline": "^1.1.0",
"@editorjs/warning": "^1.3.0",
"pinia": "^2.0.28",
"vue": "^3.2.38",
"vue-editor-js": "^2.0.2",
"vue-router": "^4.1.5"
},
"devDependencies": {
"@types/editorjs__header": "^2.6.0",
"@types/node": "^16.11.56",
"@vitejs/plugin-vue": "^3.0.3",
"@vue/tsconfig": "^0.1.3",
@@ -39,6 +52,45 @@
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.1.0.tgz",
"integrity": "sha512-jW1fWnwtWzcP4FBGsaodbJY3s1ZaRU+IJy1pvJ7ygNQxkQinybJcwXoyt0a5mWwu/4w30A42EWhCrZn8lp4fdw=="
},
"node_modules/@editorjs/checklist": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@editorjs/checklist/-/checklist-1.4.0.tgz",
"integrity": "sha512-KmkgWFYwkcFFvh7oBaUiqg8NBmJSnB87EC0P6obfqo3uDjCXXnen+KJfP+7JBcQx/OsiDlOS/lTxkyhxNtKtsA==",
"dependencies": {
"@codexteam/icons": "^0.0.4"
}
},
"node_modules/@editorjs/checklist/node_modules/@codexteam/icons": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.4.tgz",
"integrity": "sha512-V8N/TY2TGyas4wLrPIFq7bcow68b3gu8DfDt1+rrHPtXxcexadKauRJL6eQgfG7Z0LCrN4boLRawR4S9gjIh/Q=="
},
"node_modules/@editorjs/code": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/@editorjs/code/-/code-2.8.0.tgz",
"integrity": "sha512-qlv1OqSEPKnLv/ZQgNFmVgqsMbGDkh/qgTEnbVWsS+yujo1nlwgVkqCB8tOkQGVsrpmAYLiWRlA413nKxxCN5w==",
"dependencies": {
"@codexteam/icons": "^0.0.5"
}
},
"node_modules/@editorjs/code/node_modules/@codexteam/icons": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.5.tgz",
"integrity": "sha512-s6H2KXhLz2rgbMZSkRm8dsMJvyUNZsEjxobBEg9ztdrb1B2H3pEzY6iTwI4XUPJWJ3c3qRKwV4TrO3J5jUdoQA=="
},
"node_modules/@editorjs/delimiter": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@editorjs/delimiter/-/delimiter-1.3.0.tgz",
"integrity": "sha512-/qz+3yRSPmx6dJpBcwnDfgKtCjOrCsQRoDhXR+wLWirGOchOifhYwQ/6JZyTvcgmY84UEoYY29/dgdWOGVPEEQ==",
"dependencies": {
"@codexteam/icons": "^0.0.5"
}
},
"node_modules/@editorjs/delimiter/node_modules/@codexteam/icons": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.5.tgz",
"integrity": "sha512-s6H2KXhLz2rgbMZSkRm8dsMJvyUNZsEjxobBEg9ztdrb1B2H3pEzY6iTwI4XUPJWJ3c3qRKwV4TrO3J5jUdoQA=="
},
"node_modules/@editorjs/editorjs": {
"version": "2.26.4",
"resolved": "https://registry.npmjs.org/@editorjs/editorjs/-/editorjs-2.26.4.tgz",
@@ -51,6 +103,123 @@
"nanoid": "^3.1.22"
}
},
"node_modules/@editorjs/header": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/@editorjs/header/-/header-2.7.0.tgz",
"integrity": "sha512-4fGKGe2ZYblVqR/P/iw5ieG00uXInFgNMftBMqJRYcB2hUPD30kuu7Sn6eJDcLXoKUMOeqi8Z2AlUxYAmvw7zQ==",
"dependencies": {
"@codexteam/icons": "^0.0.5"
}
},
"node_modules/@editorjs/header/node_modules/@codexteam/icons": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.5.tgz",
"integrity": "sha512-s6H2KXhLz2rgbMZSkRm8dsMJvyUNZsEjxobBEg9ztdrb1B2H3pEzY6iTwI4XUPJWJ3c3qRKwV4TrO3J5jUdoQA=="
},
"node_modules/@editorjs/list": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/@editorjs/list/-/list-1.8.0.tgz",
"integrity": "sha512-Vq6cjyTXBzgegYv/MtTfuDdiz59yGhDEc/yAVXr6lmvoWAFs9cJ4TLuh4/9SbrbhIptcQLDvUjMDKmRrV6v2NQ==",
"dependencies": {
"@codexteam/icons": "^0.0.4"
}
},
"node_modules/@editorjs/list/node_modules/@codexteam/icons": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.4.tgz",
"integrity": "sha512-V8N/TY2TGyas4wLrPIFq7bcow68b3gu8DfDt1+rrHPtXxcexadKauRJL6eQgfG7Z0LCrN4boLRawR4S9gjIh/Q=="
},
"node_modules/@editorjs/marker": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@editorjs/marker/-/marker-1.3.0.tgz",
"integrity": "sha512-RYWYDnFPjNBJgR7KIGjB9gPnUwGvn2aIoRevAm422Wx1mg5eT4gcvwc0T5V76pYPSoD2Z0T2GPkzl9d1hl398w==",
"dependencies": {
"@codexteam/icons": "^0.0.5"
}
},
"node_modules/@editorjs/marker/node_modules/@codexteam/icons": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.5.tgz",
"integrity": "sha512-s6H2KXhLz2rgbMZSkRm8dsMJvyUNZsEjxobBEg9ztdrb1B2H3pEzY6iTwI4XUPJWJ3c3qRKwV4TrO3J5jUdoQA=="
},
"node_modules/@editorjs/nested-list": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@editorjs/nested-list/-/nested-list-1.2.0.tgz",
"integrity": "sha512-e2EBqWiR2rg4WSH18psQt14wGvwCPrnZ1RhG+M99ru27ETqjMb+W79+1M8Bm3VXBRLkANTpxJGXwnJxluBp/GA==",
"dependencies": {
"@codexteam/icons": "^0.0.2"
}
},
"node_modules/@editorjs/nested-list/node_modules/@codexteam/icons": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.2.tgz",
"integrity": "sha512-KdeKj3TwaTHqM3IXd5YjeJP39PBUZTb+dtHjGlf5+b0VgsxYD4qzsZkb11lzopZbAuDsHaZJmAYQ8LFligIT6Q=="
},
"node_modules/@editorjs/paragraph": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/@editorjs/paragraph/-/paragraph-2.9.0.tgz",
"integrity": "sha512-lI6x1eiqFx2X3KmMak6gBlimFqXhG35fQpXMxzrjIphNLr4uPsXhVbyMPimPoLUnS9rM6Q00vptXmP2QNDd0zg==",
"dependencies": {
"@codexteam/icons": "^0.0.4"
}
},
"node_modules/@editorjs/paragraph/node_modules/@codexteam/icons": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.4.tgz",
"integrity": "sha512-V8N/TY2TGyas4wLrPIFq7bcow68b3gu8DfDt1+rrHPtXxcexadKauRJL6eQgfG7Z0LCrN4boLRawR4S9gjIh/Q=="
},
"node_modules/@editorjs/quote": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/@editorjs/quote/-/quote-2.5.0.tgz",
"integrity": "sha512-24Mu8cESaj34a0kg1Enj7qiZ3yiCOsZI59+8xpfXLO/NkO7hBYWNForVcBy5yIWs/VLlEZK11FP37f/mHrKugQ==",
"dependencies": {
"@codexteam/icons": "^0.0.5"
}
},
"node_modules/@editorjs/quote/node_modules/@codexteam/icons": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.5.tgz",
"integrity": "sha512-s6H2KXhLz2rgbMZSkRm8dsMJvyUNZsEjxobBEg9ztdrb1B2H3pEzY6iTwI4XUPJWJ3c3qRKwV4TrO3J5jUdoQA=="
},
"node_modules/@editorjs/table": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@editorjs/table/-/table-2.2.0.tgz",
"integrity": "sha512-vVfiNEk1EHFj1ohObX4g7iB/mVhPkx0o8yMb+v5gV/XnOysbRk46hiLmntJfgYp/NZvbYxcZk3mPvrE/NAe+pg==",
"dependencies": {
"@codexteam/icons": "^0.0.6"
}
},
"node_modules/@editorjs/table/node_modules/@codexteam/icons": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.6.tgz",
"integrity": "sha512-L7Q5PET8PjKcBT5wp7VR+FCjwCi5PUp7rd/XjsgQ0CI5FJz0DphyHGRILMuDUdCW2MQT9NHbVr4QP31vwAkS/A=="
},
"node_modules/@editorjs/underline": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@editorjs/underline/-/underline-1.1.0.tgz",
"integrity": "sha512-vQj2ROW1KreD31QHlhaPikmDJGWYzRBusN4Zyfwl9nIIQCByt4S8fZQpsrRvH4sct5mkirsHllNT00rJlqHK7Q==",
"dependencies": {
"@codexteam/icons": "^0.0.6"
}
},
"node_modules/@editorjs/underline/node_modules/@codexteam/icons": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.6.tgz",
"integrity": "sha512-L7Q5PET8PjKcBT5wp7VR+FCjwCi5PUp7rd/XjsgQ0CI5FJz0DphyHGRILMuDUdCW2MQT9NHbVr4QP31vwAkS/A=="
},
"node_modules/@editorjs/warning": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@editorjs/warning/-/warning-1.3.0.tgz",
"integrity": "sha512-b03oXNTxeqLXEH8Sqtzy0OXY3+Bbx6jpl2UnfFw9bN4KxTgrx3sIf5YtkavZmhZRmOFRFYdrl7bHxvr6KstO9Q==",
"dependencies": {
"@codexteam/icons": "^0.0.4"
}
},
"node_modules/@editorjs/warning/node_modules/@codexteam/icons": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.4.tgz",
"integrity": "sha512-V8N/TY2TGyas4wLrPIFq7bcow68b3gu8DfDt1+rrHPtXxcexadKauRJL6eQgfG7Z0LCrN4boLRawR4S9gjIh/Q=="
},
"node_modules/@esbuild/android-arm": {
"version": "0.15.18",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz",
@@ -83,6 +252,12 @@
"node": ">=12"
}
},
"node_modules/@types/editorjs__header": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/@types/editorjs__header/-/editorjs__header-2.6.0.tgz",
"integrity": "sha512-J9TyO/BjNVddi+syyXpvMRMtVz5Z62pwmFKynWsgP+wnJYdWF8ABqgomokIsAvuEwH5NHa/YxsTltYcPPGCRRQ==",
"dev": true
},
"node_modules/@types/node": {
"version": "16.18.10",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.10.tgz",
@@ -1785,11 +1960,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
},
"node_modules/typescript": {
"version": "4.7.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz",
@@ -1889,53 +2059,6 @@
"@vue/shared": "3.2.45"
}
},
"node_modules/vue-editor-js": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/vue-editor-js/-/vue-editor-js-2.0.2.tgz",
"integrity": "sha512-Y07q/Nj4/BJOQlvlKN5R4UFCMUVgnDbJxDSZvMGXNCnMJyT1TEQmS2HAuc9euCp8EDGo/sJnm3y0NUQ+gonx2w==",
"dependencies": {
"@editorjs/editorjs": "^2.18.0",
"@vue/composition-api": "^0.5.0"
}
},
"node_modules/vue-editor-js/node_modules/@vue/compiler-sfc": {
"version": "2.7.14",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz",
"integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==",
"peer": true,
"dependencies": {
"@babel/parser": "^7.18.4",
"postcss": "^8.4.14",
"source-map": "^0.6.1"
}
},
"node_modules/vue-editor-js/node_modules/@vue/composition-api": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/@vue/composition-api/-/composition-api-0.5.0.tgz",
"integrity": "sha512-9QDFWq7q839G1CTTaxeruPOTrrVOPSaVipJ2TxxK9QAruePNTHOGbOOFRpc8WLl4YPsu1/c29yBhMVmrXz8BZw==",
"dependencies": {
"tslib": "^1.9.3"
},
"peerDependencies": {
"vue": "^2.5.22"
}
},
"node_modules/vue-editor-js/node_modules/csstype": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
"integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==",
"peer": true
},
"node_modules/vue-editor-js/node_modules/vue": {
"version": "2.7.14",
"resolved": "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz",
"integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==",
"peer": true,
"dependencies": {
"@vue/compiler-sfc": "2.7.14",
"csstype": "^3.1.0"
}
},
"node_modules/vue-router": {
"version": "4.1.6",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.6.tgz",
@@ -2016,6 +2139,51 @@
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.1.0.tgz",
"integrity": "sha512-jW1fWnwtWzcP4FBGsaodbJY3s1ZaRU+IJy1pvJ7ygNQxkQinybJcwXoyt0a5mWwu/4w30A42EWhCrZn8lp4fdw=="
},
"@editorjs/checklist": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@editorjs/checklist/-/checklist-1.4.0.tgz",
"integrity": "sha512-KmkgWFYwkcFFvh7oBaUiqg8NBmJSnB87EC0P6obfqo3uDjCXXnen+KJfP+7JBcQx/OsiDlOS/lTxkyhxNtKtsA==",
"requires": {
"@codexteam/icons": "^0.0.4"
},
"dependencies": {
"@codexteam/icons": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.4.tgz",
"integrity": "sha512-V8N/TY2TGyas4wLrPIFq7bcow68b3gu8DfDt1+rrHPtXxcexadKauRJL6eQgfG7Z0LCrN4boLRawR4S9gjIh/Q=="
}
}
},
"@editorjs/code": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/@editorjs/code/-/code-2.8.0.tgz",
"integrity": "sha512-qlv1OqSEPKnLv/ZQgNFmVgqsMbGDkh/qgTEnbVWsS+yujo1nlwgVkqCB8tOkQGVsrpmAYLiWRlA413nKxxCN5w==",
"requires": {
"@codexteam/icons": "^0.0.5"
},
"dependencies": {
"@codexteam/icons": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.5.tgz",
"integrity": "sha512-s6H2KXhLz2rgbMZSkRm8dsMJvyUNZsEjxobBEg9ztdrb1B2H3pEzY6iTwI4XUPJWJ3c3qRKwV4TrO3J5jUdoQA=="
}
}
},
"@editorjs/delimiter": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@editorjs/delimiter/-/delimiter-1.3.0.tgz",
"integrity": "sha512-/qz+3yRSPmx6dJpBcwnDfgKtCjOrCsQRoDhXR+wLWirGOchOifhYwQ/6JZyTvcgmY84UEoYY29/dgdWOGVPEEQ==",
"requires": {
"@codexteam/icons": "^0.0.5"
},
"dependencies": {
"@codexteam/icons": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.5.tgz",
"integrity": "sha512-s6H2KXhLz2rgbMZSkRm8dsMJvyUNZsEjxobBEg9ztdrb1B2H3pEzY6iTwI4XUPJWJ3c3qRKwV4TrO3J5jUdoQA=="
}
}
},
"@editorjs/editorjs": {
"version": "2.26.4",
"resolved": "https://registry.npmjs.org/@editorjs/editorjs/-/editorjs-2.26.4.tgz",
@@ -2028,6 +2196,141 @@
"nanoid": "^3.1.22"
}
},
"@editorjs/header": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/@editorjs/header/-/header-2.7.0.tgz",
"integrity": "sha512-4fGKGe2ZYblVqR/P/iw5ieG00uXInFgNMftBMqJRYcB2hUPD30kuu7Sn6eJDcLXoKUMOeqi8Z2AlUxYAmvw7zQ==",
"requires": {
"@codexteam/icons": "^0.0.5"
},
"dependencies": {
"@codexteam/icons": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.5.tgz",
"integrity": "sha512-s6H2KXhLz2rgbMZSkRm8dsMJvyUNZsEjxobBEg9ztdrb1B2H3pEzY6iTwI4XUPJWJ3c3qRKwV4TrO3J5jUdoQA=="
}
}
},
"@editorjs/list": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/@editorjs/list/-/list-1.8.0.tgz",
"integrity": "sha512-Vq6cjyTXBzgegYv/MtTfuDdiz59yGhDEc/yAVXr6lmvoWAFs9cJ4TLuh4/9SbrbhIptcQLDvUjMDKmRrV6v2NQ==",
"requires": {
"@codexteam/icons": "^0.0.4"
},
"dependencies": {
"@codexteam/icons": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.4.tgz",
"integrity": "sha512-V8N/TY2TGyas4wLrPIFq7bcow68b3gu8DfDt1+rrHPtXxcexadKauRJL6eQgfG7Z0LCrN4boLRawR4S9gjIh/Q=="
}
}
},
"@editorjs/marker": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@editorjs/marker/-/marker-1.3.0.tgz",
"integrity": "sha512-RYWYDnFPjNBJgR7KIGjB9gPnUwGvn2aIoRevAm422Wx1mg5eT4gcvwc0T5V76pYPSoD2Z0T2GPkzl9d1hl398w==",
"requires": {
"@codexteam/icons": "^0.0.5"
},
"dependencies": {
"@codexteam/icons": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.5.tgz",
"integrity": "sha512-s6H2KXhLz2rgbMZSkRm8dsMJvyUNZsEjxobBEg9ztdrb1B2H3pEzY6iTwI4XUPJWJ3c3qRKwV4TrO3J5jUdoQA=="
}
}
},
"@editorjs/nested-list": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@editorjs/nested-list/-/nested-list-1.2.0.tgz",
"integrity": "sha512-e2EBqWiR2rg4WSH18psQt14wGvwCPrnZ1RhG+M99ru27ETqjMb+W79+1M8Bm3VXBRLkANTpxJGXwnJxluBp/GA==",
"requires": {
"@codexteam/icons": "^0.0.2"
},
"dependencies": {
"@codexteam/icons": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.2.tgz",
"integrity": "sha512-KdeKj3TwaTHqM3IXd5YjeJP39PBUZTb+dtHjGlf5+b0VgsxYD4qzsZkb11lzopZbAuDsHaZJmAYQ8LFligIT6Q=="
}
}
},
"@editorjs/paragraph": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/@editorjs/paragraph/-/paragraph-2.9.0.tgz",
"integrity": "sha512-lI6x1eiqFx2X3KmMak6gBlimFqXhG35fQpXMxzrjIphNLr4uPsXhVbyMPimPoLUnS9rM6Q00vptXmP2QNDd0zg==",
"requires": {
"@codexteam/icons": "^0.0.4"
},
"dependencies": {
"@codexteam/icons": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.4.tgz",
"integrity": "sha512-V8N/TY2TGyas4wLrPIFq7bcow68b3gu8DfDt1+rrHPtXxcexadKauRJL6eQgfG7Z0LCrN4boLRawR4S9gjIh/Q=="
}
}
},
"@editorjs/quote": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/@editorjs/quote/-/quote-2.5.0.tgz",
"integrity": "sha512-24Mu8cESaj34a0kg1Enj7qiZ3yiCOsZI59+8xpfXLO/NkO7hBYWNForVcBy5yIWs/VLlEZK11FP37f/mHrKugQ==",
"requires": {
"@codexteam/icons": "^0.0.5"
},
"dependencies": {
"@codexteam/icons": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.5.tgz",
"integrity": "sha512-s6H2KXhLz2rgbMZSkRm8dsMJvyUNZsEjxobBEg9ztdrb1B2H3pEzY6iTwI4XUPJWJ3c3qRKwV4TrO3J5jUdoQA=="
}
}
},
"@editorjs/table": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@editorjs/table/-/table-2.2.0.tgz",
"integrity": "sha512-vVfiNEk1EHFj1ohObX4g7iB/mVhPkx0o8yMb+v5gV/XnOysbRk46hiLmntJfgYp/NZvbYxcZk3mPvrE/NAe+pg==",
"requires": {
"@codexteam/icons": "^0.0.6"
},
"dependencies": {
"@codexteam/icons": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.6.tgz",
"integrity": "sha512-L7Q5PET8PjKcBT5wp7VR+FCjwCi5PUp7rd/XjsgQ0CI5FJz0DphyHGRILMuDUdCW2MQT9NHbVr4QP31vwAkS/A=="
}
}
},
"@editorjs/underline": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@editorjs/underline/-/underline-1.1.0.tgz",
"integrity": "sha512-vQj2ROW1KreD31QHlhaPikmDJGWYzRBusN4Zyfwl9nIIQCByt4S8fZQpsrRvH4sct5mkirsHllNT00rJlqHK7Q==",
"requires": {
"@codexteam/icons": "^0.0.6"
},
"dependencies": {
"@codexteam/icons": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.6.tgz",
"integrity": "sha512-L7Q5PET8PjKcBT5wp7VR+FCjwCi5PUp7rd/XjsgQ0CI5FJz0DphyHGRILMuDUdCW2MQT9NHbVr4QP31vwAkS/A=="
}
}
},
"@editorjs/warning": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@editorjs/warning/-/warning-1.3.0.tgz",
"integrity": "sha512-b03oXNTxeqLXEH8Sqtzy0OXY3+Bbx6jpl2UnfFw9bN4KxTgrx3sIf5YtkavZmhZRmOFRFYdrl7bHxvr6KstO9Q==",
"requires": {
"@codexteam/icons": "^0.0.4"
},
"dependencies": {
"@codexteam/icons": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.4.tgz",
"integrity": "sha512-V8N/TY2TGyas4wLrPIFq7bcow68b3gu8DfDt1+rrHPtXxcexadKauRJL6eQgfG7Z0LCrN4boLRawR4S9gjIh/Q=="
}
}
},
"@esbuild/android-arm": {
"version": "0.15.18",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz",
@@ -2042,6 +2345,12 @@
"dev": true,
"optional": true
},
"@types/editorjs__header": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/@types/editorjs__header/-/editorjs__header-2.6.0.tgz",
"integrity": "sha512-J9TyO/BjNVddi+syyXpvMRMtVz5Z62pwmFKynWsgP+wnJYdWF8ABqgomokIsAvuEwH5NHa/YxsTltYcPPGCRRQ==",
"dev": true
},
"@types/node": {
"version": "16.18.10",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.10.tgz",
@@ -3220,11 +3529,6 @@
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true
},
"tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
},
"typescript": {
"version": "4.7.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz",
@@ -3278,52 +3582,6 @@
"@vue/shared": "3.2.45"
}
},
"vue-editor-js": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/vue-editor-js/-/vue-editor-js-2.0.2.tgz",
"integrity": "sha512-Y07q/Nj4/BJOQlvlKN5R4UFCMUVgnDbJxDSZvMGXNCnMJyT1TEQmS2HAuc9euCp8EDGo/sJnm3y0NUQ+gonx2w==",
"requires": {
"@editorjs/editorjs": "^2.18.0",
"@vue/composition-api": "^0.5.0"
},
"dependencies": {
"@vue/compiler-sfc": {
"version": "2.7.14",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz",
"integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==",
"peer": true,
"requires": {
"@babel/parser": "^7.18.4",
"postcss": "^8.4.14",
"source-map": "^0.6.1"
}
},
"@vue/composition-api": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/@vue/composition-api/-/composition-api-0.5.0.tgz",
"integrity": "sha512-9QDFWq7q839G1CTTaxeruPOTrrVOPSaVipJ2TxxK9QAruePNTHOGbOOFRpc8WLl4YPsu1/c29yBhMVmrXz8BZw==",
"requires": {
"tslib": "^1.9.3"
}
},
"csstype": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
"integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==",
"peer": true
},
"vue": {
"version": "2.7.14",
"resolved": "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz",
"integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==",
"peer": true,
"requires": {
"@vue/compiler-sfc": "2.7.14",
"csstype": "^3.1.0"
}
}
}
},
"vue-router": {
"version": "4.1.6",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.6.tgz",
+14 -1
View File
@@ -9,12 +9,25 @@
"type-check": "vue-tsc --noEmit"
},
"dependencies": {
"@editorjs/checklist": "^1.4.0",
"@editorjs/code": "^2.8.0",
"@editorjs/delimiter": "^1.3.0",
"@editorjs/editorjs": "^2.26.4",
"@editorjs/header": "^2.7.0",
"@editorjs/list": "^1.8.0",
"@editorjs/marker": "^1.3.0",
"@editorjs/nested-list": "^1.2.0",
"@editorjs/paragraph": "^2.9.0",
"@editorjs/quote": "^2.5.0",
"@editorjs/table": "^2.2.0",
"@editorjs/underline": "^1.1.0",
"@editorjs/warning": "^1.3.0",
"pinia": "^2.0.28",
"vue": "^3.2.38",
"vue-editor-js": "^2.0.2",
"vue-router": "^4.1.5"
},
"devDependencies": {
"@types/editorjs__header": "^2.6.0",
"@types/node": "^16.11.56",
"@vitejs/plugin-vue": "^3.0.3",
"@vue/tsconfig": "^0.1.3",
+30 -9
View File
@@ -34,18 +34,39 @@ h1 {
font-family: 'Frank Ruhl Libre', serif;
font-size: 40px;
}
h2 { font-size: 32px; }
h3 { font-size: 24px; }
h4 { font-size: 18px; }
h2, h3, h4, h5, h6 {
h2 {
font-size: 32px;
}
h3 {
font-size: 24px;
}
h4 {
font-size: 18px;
}
h2,
h3,
h4,
h5,
h6 {
font-family: 'Nunito', sans-serif;
}
* {
box-sizing: border-box;
}
p,
a,
input,
label,
button,
span {
font-family: 'Hind', sans-serif;
color: var(--neutral-dark);
box-sizing: border-box;
}
.label-input,
@@ -89,13 +110,13 @@ h2, h3, h4, h5, h6 {
.button-disabled {
border-radius: var(--radius);
border: none;
padding: 3px 16px;
font-size: var(--font-body);
font-weight: var(--medium-weight);
background-color: var(--primary);
transition: background-color 150ms;
cursor: pointer;
@@ -0,0 +1,28 @@
{
"time": 1672423262433,
"blocks": [
{
"id": "SsMzvSlYdr",
"type": "Header",
"data": {
"text": "Bienvenue sur l'éditeur d'article !",
"level": 2
}
},
{
"id": "SCdiyR3ZLh",
"type": "paragraph",
"data": {
"text": "<b>Ici</b>, vous pouvez <u class=\"cdx-underline\">créer</u> votre <i>article</i>."
}
},
{
"id": "PYzhBNCoxo",
"type": "paragraph",
"data": {
"text": "Supprimez ces blocks pour commencer.<br>"
}
}
],
"version": "2.26.4"
}
@@ -0,0 +1,69 @@
{
"messages": {
"ui": {
"blockTunes": {
"toggler": {
"Click to tune": "Cliquez pour régler",
"or drag to move": "ou glissez pour déplacer"
}
},
"inlineToolbar": {
"converter": {
"Convert to": "Convertir en"
}
},
"toolbar": {
"toolbox": {
"Add": "Ajouter"
}
}
},
"toolNames": {
"Text": "Paragraphe",
"Heading": "Titre",
"List": "Liste",
"Warning": "Avertissement",
"Checklist": "Checklist",
"Quote": "Citation",
"Code": "Code",
"Delimiter": "Délimiteur",
"Table": "Tableau",
"Link": "Lien",
"Marker": "Surligner",
"Bold": "Gras",
"Italic": "Italique",
"Underline": "Sousligner"
},
"tools": {
"Header": {
"Heading 1": "Titre 1",
"Heading 2": "Titre 2",
"Heading 3": "Titre 3",
"Heading 4": "Titre 4",
"Heading 5": "Titre 5",
"Heading 6": "Titre 6"
},
"Warning": {
"Title": "Titre",
"Message": "Message"
},
"stub": {
"The block can not be displayed correctly.": "Le block ne peut pas être affiché correctement :(."
},
"Code": {
"Enter a code": "Entrez votre code"
}
},
"blockTunes": {
"delete": {
"Delete": "Supprimer"
},
"moveUp": {
"Move up": "Vers le haut"
},
"moveDown": {
"Move down": "Vers le bas"
}
}
}
}
+83
View File
@@ -0,0 +1,83 @@
<script setup lang="ts">
import i18n from "@/assets/editor_translation.json";
import defaultData from '@/assets/editor_default_content.json'
import EditorJS, { type EditorConfig, type OutputData } from "@editorjs/editorjs";
import Header from "@editorjs/header";
import List from "@editorjs/list";
import NestedList from "@editorjs/nested-list";
import CheckList from "@editorjs/checklist";
import Quote from "@editorjs/quote";
import Warning from "@editorjs/warning";
import Marker from "@editorjs/marker";
import Code from "@editorjs/code";
import Table from "@editorjs/table";
import Underline from "@editorjs/underline";
import Delimiter from "@editorjs/delimiter";
const props = defineProps<{
showDefaultData: boolean
}>()
function getEditorConfig(): EditorConfig {
let editorConfig: EditorConfig = {
tools: {
Header,
Quote,
NestedList,
Code,
Table,
Warning,
Delimiter,
Marker,
Underline
},
i18n
}
if (!props.showDefaultData) return editorConfig
editorConfig = {
...editorConfig,
data: defaultData
}
return editorConfig
}
const editor = new EditorJS(getEditorConfig())
async function getEditorData(): Promise<OutputData | undefined> {
let data = undefined
await editor.save()
.then(outputData => {
data = outputData
})
.catch((error) => {
console.error(error)
})
return data
}
</script>
<template>
<div class="container">
<div id="editorjs"></div>
<button @click="getEditorData()" class="button-primary">Enregistrer</button>
</div>
</template>
<style scoped>
.container {
display: flex;
flex-direction: column;
justify-content: center;
width: 100%;
}
#editorjs {
font-family: 'Hind', sans-serif;
}
button {
margin: auto;
}
</style>
+41 -50
View File
@@ -1,71 +1,62 @@
<script setup lang="ts">
// import EditorJS from '@editorjs/editorjs';
import { useAuthStore, type jwtFormat } from '@/stores/AuthStore';
import Editor from '@/components/Editor.vue';
import { useAuthStore } from '@/stores/AuthStore';
import { ref } from 'vue';
const email = ref('')
const password = ref('')
const baseURL = `http://${__APP_ENV__.APP_HOST_ADDRESS}:${__APP_ENV__.APP_API_PORT}`
const articleID = ref('')
function getArticles() {
fetch(`${baseURL}/articles/`, {
function getArticles(id?: string) {
fetch(`${baseURL}/articles/${id ?? ''}`, {
headers: { "Authorization": `Bearer ${useAuthStore().token}` }
})
.then(response => response.json())
.then(result => console.log(result))
.then(response => response.json())
.then(result => console.log(result))
}
function ping() {
fetch(`${baseURL}/ping/`, {
headers: { "Authorization": `Bearer ${useAuthStore().token}` }
})
.then(response => response.json())
.then(result => console.log(result))
}
function jwtHandler(apiResponse: jwtFormat): void {
if (apiResponse.code !== 200) {
console.log(apiResponse)
return
}
useAuthStore().token = apiResponse.token
useAuthStore().expire = apiResponse.expire
console.log('success! logged in.')
}
function login(email: string, password: string): void {
fetch(`${baseURL}/login/`, {
method: "POST",
body: JSON.stringify({
email: email,
password: password
})
})
.then(response => response.json())
.then(result => jwtHandler(result))
.then(response => response.json())
.then(result => console.log(result))
}
</script>
<template>
<h2>Connexion</h2>
<form @submit.prevent="login(email, password)">
<div class="inputs-group">
<div>
<label for="email">Email address</label>
<input id="email" name="email" placeholder="email" type="text" v-model="email">
</div>
<div>
<label for="password">Password</label>
<input id="password" name="password" placeholder="password" type="password" v-model="password">
</div>
<button type="submit">Se connecter</button>
</form>
<div>
<div>
<button class="button-primary" @click="getArticles()">get all articles</button>
<button class="button-primary" @click="ping()">ping</button>
<input type="text" placeholder="article ID" v-model="articleID">
<button class="button-primary" @click="getArticles(articleID)">get article</button>
</div>
</div>
<div class="buttons-group">
<button class="button-primary" @click="ping()">ping</button>
</div>
<div class="editor">
<Editor :show-default-data="true"></Editor>
</div>
</template>
<style scoped>
.buttons-group,
.inputs-group {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin: 32px;
}
.inputs-group {
flex-direction: column;
}
.inputs-group div {
flex-direction: row;
gap: 8px;
}
.editor {
border: solid black 2px;
}
</style>