Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wiki-js
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
wiki-js
Commits
7634bd26
Commit
7634bd26
authored
Sep 08, 2019
by
Nick
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: ckeditor
parent
04193dbc
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
278 additions
and
45 deletions
+278
-45
admin.vue
client/components/admin.vue
+1
-1
editor.vue
client/components/editor.vue
+5
-4
editor-ckeditor.vue
client/components/editor/editor-ckeditor.vue
+187
-0
editor-markdown.vue
client/components/editor/editor-markdown.vue
+7
-0
editor-modal-editorselect.vue
client/components/editor/editor-modal-editorselect.vue
+16
-6
editor-modal-properties.vue
client/components/editor/editor-modal-properties.vue
+0
-1
editor-modal-unsaved.vue
client/components/editor/editor-modal-unsaved.vue
+4
-4
base.scss
client/scss/base/base.scss
+1
-0
editor.js
client/store/editor.js
+1
-0
app.scss
client/themes/default/scss/app.scss
+21
-1
package.json
package.json
+29
-28
definition.yml
server/modules/editor/ckeditor/definition.yml
+6
-0
yarn.lock
yarn.lock
+0
-0
No files found.
client/components/admin.vue
View file @
7634bd26
...
...
@@ -128,7 +128,7 @@ import { get, sync } from 'vuex-pathify'
import
statsQuery
from
'gql/admin/dashboard/dashboard-query-stats.gql'
import
adminStore
from
'
@
/store/admin'
import
adminStore
from
'
..
/store/admin'
/* global WIKI */
...
...
client/components/editor.vue
View file @
7634bd26
...
...
@@ -51,7 +51,7 @@ import { Base64 } from 'js-base64'
import
createPageMutation
from
'gql/editor/create.gql'
import
updatePageMutation
from
'gql/editor/update.gql'
import
editorStore
from
'
@
/store/editor'
import
editorStore
from
'
..
/store/editor'
/* global WIKI */
...
...
@@ -62,6 +62,7 @@ export default {
components
:
{
AtomSpinner
,
editorCode
:
()
=>
import
(
/* webpackChunkName: "editor-code", webpackMode: "lazy" */
'./editor/editor-code.vue'
),
editorCkeditor
:
()
=>
import
(
/* webpackChunkName: "editor-ckeditor", webpackMode: "lazy" */
'./editor/editor-ckeditor.vue'
),
editorMarkdown
:
()
=>
import
(
/* webpackChunkName: "editor-markdown", webpackMode: "lazy" */
'./editor/editor-markdown.vue'
),
editorWysiwyg
:
()
=>
import
(
/* webpackChunkName: "editor-wysiwyg", webpackMode: "lazy" */
'./editor/editor-wysiwyg.vue'
),
editorModalEditorselect
:
()
=>
import
(
/* webpackChunkName: "editor", webpackMode: "eager" */
'./editor/editor-modal-editorselect.vue'
),
...
...
@@ -153,7 +154,7 @@ export default {
mounted
()
{
this
.
$store
.
set
(
'editor/mode'
,
this
.
initMode
||
'create'
)
this
.
initContentParsed
=
this
.
initContent
?
Base64
.
decode
(
this
.
initContent
)
:
'
# Header
\
n
\
nYour content here
'
this
.
initContentParsed
=
this
.
initContent
?
Base64
.
decode
(
this
.
initContent
)
:
''
this
.
$store
.
set
(
'editor/content'
,
this
.
initContentParsed
)
if
(
this
.
mode
===
'create'
)
{
_
.
delay
(()
=>
{
...
...
@@ -194,7 +195,7 @@ export default {
variables
:
{
content
:
this
.
$store
.
get
(
'editor/content'
),
description
:
this
.
$store
.
get
(
'page/description'
),
editor
:
'markdown'
,
editor
:
this
.
$store
.
get
(
'editor/editorKey'
)
,
locale
:
this
.
$store
.
get
(
'page/locale'
),
isPrivate
:
false
,
isPublished
:
this
.
$store
.
get
(
'page/isPublished'
),
...
...
@@ -230,7 +231,7 @@ export default {
id
:
this
.
$store
.
get
(
'page/id'
),
content
:
this
.
$store
.
get
(
'editor/content'
),
description
:
this
.
$store
.
get
(
'page/description'
),
editor
:
'markdown'
,
editor
:
this
.
$store
.
get
(
'editor/editorKey'
)
,
locale
:
this
.
$store
.
get
(
'page/locale'
),
isPrivate
:
false
,
isPublished
:
this
.
$store
.
get
(
'page/isPublished'
),
...
...
client/components/editor/editor-ckeditor.vue
0 → 100644
View file @
7634bd26
<
template
lang=
'pug'
>
.editor-ckeditor
div(ref='toolbarContainer')
div.contents(ref='editor')
v-system-bar.editor-ckeditor-sysbar(dark, status, color='grey darken-3')
.caption.editor-ckeditor-sysbar-locale
{{
locale
.
toUpperCase
()
}}
.caption.px-3 /
{{
path
}}
template(v-if='$vuetify.breakpoint.mdAndUp')
v-spacer
.caption Visual Editor
v-spacer
.caption
{{
stats
.
characters
}}
Chars,
{{
stats
.
words
}}
Words
</
template
>
<
script
>
import
_
from
'lodash'
import
{
get
,
sync
}
from
'vuex-pathify'
import
DecoupledEditor
from
'@requarks/ckeditor5'
export
default
{
props
:
{
save
:
{
type
:
Function
,
default
:
()
=>
{}
}
},
data
()
{
return
{
editor
:
null
,
stats
:
{
characters
:
0
,
words
:
0
},
content
:
''
}
},
computed
:
{
isMobile
()
{
return
this
.
$vuetify
.
breakpoint
.
smAndDown
},
locale
:
get
(
'page/locale'
),
path
:
get
(
'page/path'
),
activeModal
:
sync
(
'editor/activeModal'
)
},
methods
:
{
},
async
mounted
()
{
this
.
$store
.
set
(
'editor/editorKey'
,
'ckeditor'
)
this
.
editor
=
await
DecoupledEditor
.
create
(
this
.
$refs
.
editor
,
{
placeholder
:
'Type the page content here'
,
wordCount
:
{
onUpdate
:
stats
=>
{
this
.
stats
=
{
characters
:
stats
.
characters
,
words
:
stats
.
words
}
}
}
})
this
.
$refs
.
toolbarContainer
.
appendChild
(
this
.
editor
.
ui
.
view
.
toolbar
.
element
)
if
(
this
.
mode
!==
'create'
)
{
this
.
editor
.
setData
(
this
.
$store
.
get
(
'editor/content'
))
}
this
.
editor
.
model
.
document
.
on
(
'change:data'
,
_
.
debounce
(
evt
=>
{
this
.
$store
.
set
(
'editor/content'
,
this
.
editor
.
getData
())
},
300
))
this
.
$root
.
$on
(
'editorInsert'
,
opts
=>
{
console
.
info
(
opts
)
switch
(
opts
.
kind
)
{
case
'IMAGE'
:
this
.
editor
.
execute
(
'imageInsert'
,
{
source
:
opts
.
path
})
break
case
'BINARY'
:
this
.
insertAtCursor
({
content
:
`[
${
opts
.
text
}
](
${
opts
.
path
}
)`
})
break
}
})
},
beforeDestroy
()
{
if
(
this
.
editor
)
{
this
.
editor
.
destroy
()
this
.
editor
=
null
}
}
}
</
script
>
<
style
lang=
"scss"
>
$editor-height
:
calc
(
100vh
-
64px
-
24px
);
$editor-height-mobile
:
calc
(
100vh
-
56px
-
16px
);
.editor-ckeditor
{
background-color
:
mc
(
'grey'
,
'200'
);
flex
:
1
1
50%
;
display
:
flex
;
flex-flow
:
column
nowrap
;
height
:
$editor-height
;
max-height
:
$editor-height
;
position
:
relative
;
@at-root
.theme--dark
&
{
background-color
:
mc
(
'grey'
,
'900'
);
}
@include
until
(
$tablet
)
{
height
:
$editor-height-mobile
;
max-height
:
$editor-height-mobile
;
}
&
-sysbar
{
padding-left
:
0
;
&
-locale
{
background-color
:
rgba
(
255
,
255
,
255
,.
25
);
display
:inline-flex
;
padding
:
0
12px
;
height
:
24px
;
width
:
63px
;
justify-content
:
center
;
align-items
:
center
;
}
}
.ck.ck-toolbar
{
border
:
none
;
justify-content
:
center
;
background-color
:
mc
(
'grey'
,
'300'
);
color
:
#FFF
;
}
>
.ck-editor__editable
{
background-color
:
mc
(
'grey'
,
'100'
);
overflow-y
:
auto
;
overflow-x
:
hidden
;
padding
:
2rem
;
box-shadow
:
0
0
5px
hsla
(
0
,
0
,
0
,
.1
);
margin
:
1rem
auto
0
;
width
:
calc
(
100vw
-
256px
-
16vw
);
min-height
:
calc
(
100vh
-
64px
-
24px
-
1rem
-
40px
);
border-radius
:
5px
;
@at-root
.theme--dark
&
{
background-color
:
#303030
;
color
:
#FFF
;
}
@include
until
(
$widescreen
)
{
width
:
calc
(
100vw
-
2rem
);
margin
:
1rem
1rem
0
1rem
;
min-height
:
calc
(
100vh
-
64px
-
24px
-
1rem
-
40px
);
}
@include
until
(
$tablet
)
{
width
:
100%
;
margin
:
0
;
min-height
:
calc
(
100vh
-
56px
-
24px
-
76px
);
}
&
.ck.ck-editor__editable
:not
(
.ck-editor__nested-editable
)
.ck-focused
{
border-color
:
#FFF
;
box-shadow
:
0
0
10px
rgba
(
mc
(
'blue'
,
'700'
)
,
.25
);
@at-root
.theme--dark
&
{
border-color
:
#444
;
border-bottom
:
none
;
box-shadow
:
0
0
10px
rgba
(
#000
,
.25
);
}
}
&
.ck
.ck-editor__nested-editable.ck-editor__nested-editable_focused
,
&
.ck
.ck-editor__nested-editable
:focus
,
.ck-widget.table
td
.ck-editor__nested-editable.ck-editor__nested-editable_focused
,
.ck-widget.table
th
.ck-editor__nested-editable.ck-editor__nested-editable_focused
{
background-color
:
mc
(
'grey'
,
'900'
);
}
}
}
</
style
>
client/components/editor/editor-markdown.vue
View file @
7634bd26
...
...
@@ -296,6 +296,7 @@ export default {
}
,
locale
:
get
(
'page/locale'
),
path
:
get
(
'page/path'
),
mode
:
get
(
'editor/mode'
),
activeModal
:
sync
(
'editor/activeModal'
)
}
,
methods
:
{
...
...
@@ -456,6 +457,12 @@ export default {
}
}
,
mounted
()
{
this
.
$store
.
set
(
'editor/editorKey'
,
'markdown'
)
if
(
this
.
mode
===
'create'
)
{
this
.
$store
.
set
(
'editor/content'
,
'# Header
\
nYour content here'
)
}
// Initialize CodeMirror
this
.
cm
=
CodeMirror
.
fromTextArea
(
this
.
$refs
.
cm
,
{
...
...
client/components/editor/editor-modal-editorselect.vue
View file @
7634bd26
...
...
@@ -48,17 +48,27 @@
img(src='/svg/icon-table.svg', alt='Tabular', style='width: 36px;')
.body-2.grey--text.mt-2.text--darken-2 Tabular
.caption.grey--text.text--darken-1 Excel-like
//- v-flex(xs4)
//- v-card.radius-7.grey(
//- hover
//- light
//- ripple
//- disabled
//- )
//- v-card-text.text-center(@click='selectEditor("wysiwyg")')
//- img(src='/svg/icon-open-in-browser.svg', alt='Visual Builder', style='width: 36px;')
//- .body-2.mt-2.grey--text.text--darken-2 Visual Builder
//- .caption.grey--text.text--darken-1 Drag-n-drop
v-flex(xs4)
v-card.radius-7
.grey
(
v-card.radius-7(
hover
light
ripple
disabled
)
v-card-text.text-center(@click='selectEditor("
wysiwyg
")')
img(src='/svg/icon-open-in-browser.svg', alt='Visual
Builde
r', style='width: 36px;')
.body-2.mt-2.
grey--text.text--darken-2 Visual Builde
r
.caption.grey--text
.text--darken-1 Drag-n-drop
v-card-text.text-center(@click='selectEditor("
ckeditor
")')
img(src='/svg/icon-open-in-browser.svg', alt='Visual
Edito
r', style='width: 36px;')
.body-2.mt-2.
primary--text Visual Edito
r
.caption.grey--text
Rich-text WYSIWYG
v-flex(xs4)
v-card.radius-7.grey(
hover
...
...
client/components/editor/editor-modal-properties.vue
View file @
7634bd26
...
...
@@ -144,7 +144,6 @@
:close-on-content-click='false'
v-model='isPublishEndShown'
:return-value.sync='publishEndDate'
full-width
width='460px'
:disabled='!isPublished || true'
)
...
...
client/components/editor/editor-modal-unsaved.vue
View file @
7634bd26
...
...
@@ -2,14 +2,14 @@
v-dialog(v-model='isShown', max-width='550')
v-card.wiki-form
.dialog-header.is-short.is-red
v-icon.mr-2(color='white')
warning
v-icon.mr-2(color='white')
mdi-alert
span
{{
$t
(
'editor:unsaved.title'
)
}}
v-card-text
v-card-text
.pt-4
.body-2
{{
$t
(
'editor:unsaved.body'
)
}}
v-card-chin
v-spacer
v-btn(
fla
t, @click='isShown = false')
{{
$t
(
'common:actions.cancel'
)
}}
v-btn(color='red', @click='discard', dark)
{{
$t
(
'common:actions.discardChanges'
)
}}
v-btn(
tex
t, @click='isShown = false')
{{
$t
(
'common:actions.cancel'
)
}}
v-btn
.px-4
(color='red', @click='discard', dark)
{{
$t
(
'common:actions.discardChanges'
)
}}
</
template
>
<
script
>
...
...
client/scss/base/base.scss
View file @
7634bd26
html
{
box-sizing
:
border-box
;
height
:
100%
;
overflow-y
:
auto
!
important
;
}
*,
*
:before
,
*
:after
{
box-sizing
:
inherit
;
...
...
client/store/editor.js
View file @
7634bd26
...
...
@@ -2,6 +2,7 @@ import { make } from 'vuex-pathify'
const
state
=
{
editor
:
''
,
editorKey
:
''
,
content
:
''
,
mode
:
'create'
,
activeModal
:
''
,
...
...
client/themes/default/scss/app.scss
View file @
7634bd26
...
...
@@ -32,7 +32,7 @@
padding-right
:
3px
;
&
:
:
after
{
font-family
:
'Material Design Icons'
;
font-family
:
'Material Design Icons'
,
sans-serif
;
font-size
:
24px
/
1
;
padding-left
:
3px
;
display
:
inline-block
;
...
...
@@ -605,6 +605,26 @@
}
}
figure
.image
{
margin
:
1rem
24px
0
24px
;
img
{
margin
:
0
auto
;
}
figcaption
{
padding
:
4px
1rem
;
text-align
:
center
;
font-size
:
12px
;
color
:
mc
(
'grey'
,
'700'
);
background-color
:
mc
(
'grey'
,
'100'
);
@at-root
.theme--dark
&
{
color
:
mc
(
'grey'
,
'400'
);
background-color
:
mc
(
'grey'
,
'800'
);
}
}
}
// ---------------------------------
// DETAILS
// ---------------------------------
...
...
package.json
View file @
7634bd26
...
...
@@ -39,10 +39,10 @@
"
@exlinc/keycloak-passport
"
:
"1.0.2"
,
"
algoliasearch
"
:
"3.34.0"
,
"
apollo-fetch
"
:
"0.7.0"
,
"
apollo-server
"
:
"2.9.
2
"
,
"
apollo-server-express
"
:
"2.9.
2
"
,
"
apollo-server
"
:
"2.9.
3
"
,
"
apollo-server-express
"
:
"2.9.
3
"
,
"
auto-load
"
:
"3.0.4"
,
"
aws-sdk
"
:
"2.52
1
.0"
,
"
aws-sdk
"
:
"2.52
4
.0"
,
"
axios
"
:
"0.19.0"
,
"
azure-search-client
"
:
"3.1.5"
,
"
bcryptjs-then
"
:
"1.0.1"
,
...
...
@@ -60,7 +60,7 @@
"
custom-error-instance
"
:
"2.1.1"
,
"
dependency-graph
"
:
"0.8.0"
,
"
diff
"
:
"4.0.1"
,
"
diff2html
"
:
"2.11.
2
"
,
"
diff2html
"
:
"2.11.
3
"
,
"
dotize
"
:
"0.3.0"
,
"
elasticsearch6
"
:
"
npm:@elastic/elasticsearch@6
"
,
"
elasticsearch7
"
:
"
npm:@elastic/elasticsearch@7
"
,
...
...
@@ -68,7 +68,7 @@
"
express
"
:
"4.17.1"
,
"
express-brute
"
:
"1.0.1"
,
"
express-session
"
:
"1.16.2"
,
"
file-type
"
:
"12.
2
.0"
,
"
file-type
"
:
"12.
3
.0"
,
"
filesize
"
:
"4.1.2"
,
"
fs-extra
"
:
"8.1.0"
,
"
getos
"
:
"3.1.1"
,
...
...
@@ -79,7 +79,7 @@
"
graphql-tools
"
:
"4.0.5"
,
"
highlight.js
"
:
"9.15.10"
,
"
i18next
"
:
"17.0.13"
,
"
i18next-express-middleware
"
:
"1.8.
1
"
,
"
i18next-express-middleware
"
:
"1.8.
2
"
,
"
i18next-node-fs-backend
"
:
"2.1.3"
,
"
image-size
"
:
"0.7.4"
,
"
js-base64
"
:
"2.5.1"
,
...
...
@@ -167,10 +167,10 @@
"
yargs
"
:
"14.0.0"
},
"devDependencies"
:
{
"
@babel/cli
"
:
"^7.
5
.0"
,
"
@babel/core
"
:
"^7.
5.4
"
,
"
@babel/cli
"
:
"^7.
6
.0"
,
"
@babel/core
"
:
"^7.
6.0
"
,
"
@babel/plugin-proposal-class-properties
"
:
"^7.5.0"
,
"
@babel/plugin-proposal-decorators
"
:
"^7.
4.4
"
,
"
@babel/plugin-proposal-decorators
"
:
"^7.
6.0
"
,
"
@babel/plugin-proposal-export-namespace-from
"
:
"^7.5.2"
,
"
@babel/plugin-proposal-function-sent
"
:
"^7.5.0"
,
"
@babel/plugin-proposal-json-strings
"
:
"^7.2.0"
,
...
...
@@ -178,21 +178,22 @@
"
@babel/plugin-proposal-throw-expressions
"
:
"^7.2.0"
,
"
@babel/plugin-syntax-dynamic-import
"
:
"^7.2.0"
,
"
@babel/plugin-syntax-import-meta
"
:
"^7.2.0"
,
"
@babel/polyfill
"
:
"^7.
4.4
"
,
"
@babel/preset-env
"
:
"^7.
5.4
"
,
"
@mdi/font
"
:
"4.
2
.95"
,
"
@babel/polyfill
"
:
"^7.
6.0
"
,
"
@babel/preset-env
"
:
"^7.
6.0
"
,
"
@mdi/font
"
:
"4.
3
.95"
,
"
@panter/vue-i18next
"
:
"0.15.1"
,
"
@requarks/ckeditor5
"
:
"12.4.0-wiki.11"
,
"
@vue/babel-preset-app
"
:
"3.11.0"
,
"
animate-sass
"
:
"0.8.2"
,
"
animated-number-vue
"
:
"1.0.0"
,
"
apollo-cache-inmemory
"
:
"1.6.3"
,
"
apollo-client
"
:
"2.6.4"
,
"
apollo-link
"
:
"1.2.1
2
"
,
"
apollo-link-batch-http
"
:
"1.2.1
2
"
,
"
apollo-link-error
"
:
"1.1.1
1
"
,
"
apollo-link-http
"
:
"1.5.1
5
"
,
"
apollo-link
"
:
"1.2.1
3
"
,
"
apollo-link-batch-http
"
:
"1.2.1
3
"
,
"
apollo-link-error
"
:
"1.1.1
2
"
,
"
apollo-link-http
"
:
"1.5.1
6
"
,
"
apollo-link-persisted-queries
"
:
"0.2.2"
,
"
apollo-link-ws
"
:
"1.0.1
8
"
,
"
apollo-link-ws
"
:
"1.0.1
9
"
,
"
apollo-utilities
"
:
"1.3.2"
,
"
autoprefixer
"
:
"9.6.1"
,
"
babel-eslint
"
:
"10.0.3"
,
...
...
@@ -217,20 +218,20 @@
"
eslint-config-requarks
"
:
"1.0.7"
,
"
eslint-config-standard
"
:
"14.1.0"
,
"
eslint-plugin-import
"
:
"2.18.2"
,
"
eslint-plugin-node
"
:
"
9.2
.0"
,
"
eslint-plugin-node
"
:
"
10.0
.0"
,
"
eslint-plugin-promise
"
:
"4.2.1"
,
"
eslint-plugin-standard
"
:
"4.0.1"
,
"
eslint-plugin-vue
"
:
"5.2.3"
,
"
fibers
"
:
"4.0.1"
,
"
file-loader
"
:
"4.2.0"
,
"
filepond
"
:
"4.
5
.1"
,
"
filepond
"
:
"4.
6
.1"
,
"
filepond-plugin-file-validate-type
"
:
"1.2.4"
,
"
filesize.js
"
:
"1.0.2"
,
"
grapesjs
"
:
"0.15.
3
"
,
"
grapesjs
"
:
"0.15.
5
"
,
"
graphiql
"
:
"0.14.2"
,
"
graphql-persisted-document-loader
"
:
"1.0.1"
,
"
graphql-tag
"
:
"^2.10.1"
,
"
graphql-voyager
"
:
"1.0.0-rc.2
7
"
,
"
graphql-voyager
"
:
"1.0.0-rc.2
8
"
,
"
hammerjs
"
:
"2.0.8"
,
"
html-webpack-plugin
"
:
"4.0.0-beta.8"
,
"
html-webpack-pug-plugin
"
:
"2.0.0"
,
...
...
@@ -265,7 +266,7 @@
"
script-ext-html-webpack-plugin
"
:
"2.1.4"
,
"
simple-progress-webpack-plugin
"
:
"1.1.2"
,
"
style-loader
"
:
"1.0.0"
,
"
terser
"
:
"4.
2.1
"
,
"
terser
"
:
"4.
3.0
"
,
"
twemoji-awesome
"
:
"1.0.6"
,
"
url-loader
"
:
"2.1.0"
,
"
vee-validate
"
:
"2.2.15"
,
...
...
@@ -287,19 +288,19 @@
"
vue-tour
"
:
"1.1.0"
,
"
vue2-animate
"
:
"2.1.2"
,
"
vuedraggable
"
:
"2.23.0"
,
"
vuescroll
"
:
"4.14.
0
"
,
"
vuetify
"
:
"2.0.1
1
"
,
"
vuescroll
"
:
"4.14.
3
"
,
"
vuetify
"
:
"2.0.1
5
"
,
"
vuetify-loader
"
:
"1.3.0"
,
"
vuex
"
:
"3.1.1"
,
"
vuex-pathify
"
:
"1.
2.4
"
,
"
vuex-pathify
"
:
"1.
4.0
"
,
"
vuex-persistedstate
"
:
"2.5.4"
,
"
webpack
"
:
"4.39.3"
,
"
webpack-bundle-analyzer
"
:
"3.4.1"
,
"
webpack-cli
"
:
"3.3.
7
"
,
"
webpack-dev-middleware
"
:
"3.7.
0
"
,
"
webpack-cli
"
:
"3.3.
8
"
,
"
webpack-dev-middleware
"
:
"3.7.
1
"
,
"
webpack-hot-middleware
"
:
"2.25.0"
,
"
webpack-merge
"
:
"4.2.2"
,
"
webpack-subresource-integrity
"
:
"1.3.
2
"
,
"
webpack-subresource-integrity
"
:
"1.3.
3
"
,
"
webpackbar
"
:
"4.0.0"
,
"
whatwg-fetch
"
:
"3.0.0"
,
"
write-file-webpack-plugin
"
:
"4.5.1"
,
...
...
server/modules/editor/ckeditor/definition.yml
0 → 100644
View file @
7634bd26
key
:
ckeditor
title
:
Visual Editor
description
:
Rich-text WYSIWYG Editor
contentType
:
html
author
:
requarks.io
props
:
{}
yarn.lock
View file @
7634bd26
This diff was suppressed by a .gitattributes entry.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment