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
8715cd69
You need to sign in or sign up before continuing.
Unverified
Commit
8715cd69
authored
Sep 20, 2022
by
NGPixel
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: edit shortcuts
parent
fa35f3a2
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
246 additions
and
10 deletions
+246
-10
admin-general.vue
client/components/admin/admin-general.vue
+108
-3
page.js
client/store/page.js
+10
-1
page.vue
client/themes/default/components/page.vue
+79
-3
app.scss
client/themes/default/scss/app.scss
+4
-0
data.yml
server/app/data.yml
+8
-0
common.js
server/controllers/common.js
+6
-1
site.js
server/graph/resolvers/site.js
+12
-1
site.graphql
server/graph/schemas/site.graphql
+14
-0
pages.js
server/models/pages.js
+3
-1
page.pug
server/views/page.pug
+2
-0
No files found.
client/components/admin/admin-general.vue
View file @
8715cd69
...
...
@@ -144,7 +144,7 @@
//- )
//- v-divider.mt-3
v-switch(
v-switch
.mt-0
(
inset
label='Comments'
color='indigo'
...
...
@@ -177,6 +177,76 @@
persistent-hint
)
v-card.mt-5.animated.fadeInUp.wait-p7s
v-toolbar(color='primary', dark, dense, flat)
v-toolbar-title.subtitle-1
{{
$t
(
'admin:general.editShortcuts'
)
}}
v-card-text
v-switch.mt-0(
inset
:label='$t(`admin:general.editFab`)'
color='primary'
v-model='config.editFab'
persistent-hint
:hint='$t(`admin:general.editFabHint`)'
)
v-divider
.overline.grey--text.pa-4
{{
$t
(
'admin:general.editMenuBar'
)
}}
.px-3.pb-3
v-switch.mt-0.ml-1(
inset
:label='$t(`admin:general.displayEditMenuBar`)'
color='primary'
v-model='config.editMenuBar'
persistent-hint
:hint='$t(`admin:general.displayEditMenuBarHint`)'
)
v-switch.mt-4.ml-1(
v-if='config.editMenuBar'
inset
:label='$t(`admin:general.displayEditMenuBtn`)'
color='primary'
v-model='config.editMenuBtn'
persistent-hint
:hint='$t(`admin:general.displayEditMenuBtnHint`)'
)
v-switch.mt-4.ml-1(
v-if='config.editMenuBar'
inset
:label='$t(`admin:general.displayEditMenuExternalBtn`)'
color='primary'
v-model='config.editMenuExternalBtn'
persistent-hint
:hint='$t(`admin:general.displayEditMenuExternalBtnHint`)'
)
template(v-if='config.editMenuBar && config.editMenuExternalBtn')
v-divider
.overline.grey--text.pa-4 External Edit Button
.px-3.pb-3
v-text-field(
outlined
:label='$t(`admin:general.editMenuExternalName`)'
v-model='config.editMenuExternalName'
prepend-icon='mdi-format-title'
:hint='$t(`admin:general.editMenuExternalNameHint`)'
persistent-hint
)
v-text-field.mt-3(
outlined
:label='$t(`admin:general.editMenuExternalIcon`)'
v-model='config.editMenuExternalIcon'
prepend-icon='mdi-dice-5'
:hint='$t(`admin:general.editMenuExternalIconHint`)'
persistent-hint
)
v-text-field.mt-3(
outlined
:label='$t(`admin:general.editMenuExternalUrl`)'
v-model='config.editMenuExternalUrl'
prepend-icon='mdi-near-me'
:hint='$t(`admin:general.editMenuExternalUrlHint`)'
persistent-hint
)
component(:is='activeModal')
</
template
>
...
...
@@ -216,7 +286,14 @@ export default {
featurePageComments
:
false
,
featurePersonalWikis
:
false
,
featureTinyPNG
:
false
,
pageExtensions
:
''
pageExtensions
:
''
,
editFab
:
false
,
editMenuBar
:
false
,
editMenuBtn
:
false
,
editMenuExternalBtn
:
false
,
editMenuExternalName
:
''
,
editMenuExternalIcon
:
''
,
editMenuExternalUrl
:
''
},
metaRobots
:
[
{
text
:
'Index'
,
value
:
'index'
},
...
...
@@ -274,6 +351,13 @@ export default {
$featurePageRatings: Boolean
$featurePageComments: Boolean
$featurePersonalWikis: Boolean
$editFab: Boolean
$editMenuBar: Boolean
$editMenuBtn: Boolean
$editMenuExternalBtn: Boolean
$editMenuExternalName: String
$editMenuExternalIcon: String
$editMenuExternalUrl: String
) {
site {
updateConfig(
...
...
@@ -290,6 +374,13 @@ export default {
featurePageRatings: $featurePageRatings
featurePageComments: $featurePageComments
featurePersonalWikis: $featurePersonalWikis
editFab: $editFab
editMenuBar: $editMenuBar
editMenuBtn: $editMenuBtn
editMenuExternalBtn: $editMenuExternalBtn
editMenuExternalName: $editMenuExternalName
editMenuExternalIcon: $editMenuExternalIcon
editMenuExternalUrl: $editMenuExternalUrl
) {
responseResult {
succeeded
...
...
@@ -314,7 +405,14 @@ export default {
pageExtensions
:
_
.
get
(
this
.
config
,
'pageExtensions'
,
''
),
featurePageRatings
:
_
.
get
(
this
.
config
,
'featurePageRatings'
,
false
),
featurePageComments
:
_
.
get
(
this
.
config
,
'featurePageComments'
,
false
),
featurePersonalWikis
:
_
.
get
(
this
.
config
,
'featurePersonalWikis'
,
false
)
featurePersonalWikis
:
_
.
get
(
this
.
config
,
'featurePersonalWikis'
,
false
),
editFab
:
_
.
get
(
this
.
config
,
'editFab'
,
false
),
editMenuBar
:
_
.
get
(
this
.
config
,
'editMenuBar'
,
false
),
editMenuBtn
:
_
.
get
(
this
.
config
,
'editMenuBtn'
,
false
),
editMenuExternalBtn
:
_
.
get
(
this
.
config
,
'editMenuExternalBtn'
,
false
),
editMenuExternalName
:
_
.
get
(
this
.
config
,
'editMenuExternalName'
,
''
),
editMenuExternalIcon
:
_
.
get
(
this
.
config
,
'editMenuExternalIcon'
,
''
),
editMenuExternalUrl
:
_
.
get
(
this
.
config
,
'editMenuExternalUrl'
,
''
)
},
watchLoading
(
isLoading
)
{
this
.
$store
.
commit
(
`loading
${
isLoading
?
'Start'
:
'Stop'
}
`
,
'admin-site-update'
)
...
...
@@ -368,6 +466,13 @@ export default {
featurePageRatings
featurePageComments
featurePersonalWikis
editFab
editMenuBar
editMenuBtn
editMenuExternalBtn
editMenuExternalName
editMenuExternalIcon
editMenuExternalUrl
}
}
}
...
...
client/store/page.js
View file @
8715cd69
...
...
@@ -41,7 +41,16 @@ const state = {
manage
:
false
}
},
commentsCount
:
0
commentsCount
:
0
,
editShortcuts
:
{
editFab
:
false
,
editMenuBar
:
false
,
editMenuBtn
:
false
,
editMenuExternalBtn
:
false
,
editMenuExternalName
:
''
,
editMenuExternalIcon
:
''
,
editMenuExternalUrl
:
''
}
}
export
default
{
...
...
client/themes/default/components/page.vue
View file @
8715cd69
...
...
@@ -49,10 +49,28 @@
status-indicator.ml-3(negative, pulse)
v-divider
v-container.grey.pa-0(fluid, :class='$vuetify.theme.dark ? `darken-4-l3` : `lighten-4`')
v-row(no-gutters, align-content='center', style='height: 90px;')
v-row
.page-header-section
(no-gutters, align-content='center', style='height: 90px;')
v-col.page-col-content.is-page-header(offset-xl='2', offset-lg='3', style='margin-top: auto; margin-bottom: auto;', :class='$vuetify.rtl ? `pr-4` : `pl-4`')
.headline.grey--text(:class='$vuetify.theme.dark ? `text--lighten-2` : `text--darken-3`')
{{
title
}}
.caption.grey--text.text--darken-1
{{
description
}}
.page-edit-shortcuts(v-if='editShortcutsObj.editMenuBar')
v-btn(
v-if='editShortcutsObj.editMenuBtn'
@click='pageEdit'
depressed
small
)
v-icon.mr-2(small) mdi-pencil
span.text-none
{{
$t
(
`common:actions.edit`
)
}}
v-btn(
v-if='editShortcutsObj.editMenuExternalBtn'
:href='editMenuExternalUrl'
target='_blank'
depressed
small
)
v-icon.mr-2(small)
{{
editShortcutsObj
.
editMenuExternalIcon
}}
span.text-none
{{
$t
(
`common:page.editExternal`
,
{
name
:
editShortcutsObj
.
editMenuExternalName
}
)
}}
v
-
divider
v
-
container
.
pl
-
5
.
pt
-
4
(
fluid
,
grid
-
list
-
xl
)
v
-
layout
(
row
)
...
...
@@ -186,7 +204,7 @@
v
-
spacer
v
-
flex
.
page
-
col
-
content
(
xs12
,
lg9
,
xl10
)
v-tooltip(:right='$vuetify.rtl', :left='!$vuetify.rtl', v-if='hasAnyPagePermissions')
v
-
tooltip
(:
right
=
'$vuetify.rtl'
,
:
left
=
'!$vuetify.rtl'
,
v
-
if
=
'hasAnyPagePermissions
&& editShortcutsObj.editFab
'
)
template
(
v
-
slot
:
activator
=
'{ on: onEditActivator
}
'
)
v
-
speed
-
dial
(
v
-
model
=
'pageEditFab'
...
...
@@ -440,6 +458,14 @@ export default {
commentsExternal
:
{
type
:
Boolean
,
default
:
false
}
,
editShortcuts
:
{
type
:
String
,
default
:
''
}
,
filename
:
{
type
:
String
,
default
:
''
}
}
,
data
()
{
...
...
@@ -478,6 +504,7 @@ export default {
isAuthenticated
:
get
(
'user/authenticated'
),
commentsCount
:
get
(
'page/commentsCount'
),
commentsPerms
:
get
(
'page/effectivePermissions@comments'
),
editShortcutsObj
:
get
(
'page/editShortcuts'
),
rating
:
{
get
()
{
return
3.5
...
...
@@ -519,7 +546,14 @@ export default {
return
this
.
hasAdminPermission
||
this
.
hasWritePagesPermission
||
this
.
hasManagePagesPermission
||
this
.
hasDeletePagesPermission
||
this
.
hasReadSourcePermission
||
this
.
hasReadHistoryPermission
}
,
printView
:
sync
(
'site/printView'
)
printView
:
sync
(
'site/printView'
),
editMenuExternalUrl
()
{
if
(
this
.
editShortcutsObj
.
editMenuBar
&&
this
.
editShortcutsObj
.
editMenuExternalBtn
)
{
return
this
.
editShortcutsObj
.
editMenuExternalUrl
.
replace
(
'{filename
}
'
,
this
.
filename
)
}
else
{
return
''
}
}
}
,
created
()
{
this
.
$store
.
set
(
'page/authorId'
,
this
.
authorId
)
...
...
@@ -537,6 +571,9 @@ export default {
if
(
this
.
effectivePermissions
)
{
this
.
$store
.
set
(
'page/effectivePermissions'
,
JSON
.
parse
(
Buffer
.
from
(
this
.
effectivePermissions
,
'base64'
).
toString
()))
}
if
(
this
.
editShortcuts
)
{
this
.
$store
.
set
(
'page/editShortcuts'
,
JSON
.
parse
(
Buffer
.
from
(
this
.
editShortcuts
,
'base64'
).
toString
()))
}
this
.
$store
.
set
(
'page/mode'
,
'view'
)
}
,
...
...
@@ -676,4 +713,43 @@ export default {
display
:
none
;
}
.
page
-
header
-
section
{
position
:
relative
;
.
page
-
edit
-
shortcuts
{
position
:
absolute
;
bottom
:
-
14
px
;
right
:
10
px
;
.
v
-
btn
{
border
-
right
:
1
px
solid
#
DDD
!
important
;
border
-
bottom
:
1
px
solid
#
DDD
!
important
;
border
-
radius
:
0
;
color
:
#
777
;
background
-
color
:
#
FFF
!
important
;
@
at
-
root
.
theme
--
dark
&
{
background
-
color
:
#
222
!
important
;
border
-
right
-
color
:
#
444
!
important
;
border
-
bottom
-
color
:
#
444
!
important
;
color
:
#
CCC
;
}
.
v
-
icon
{
color
:
mc
(
'blue'
,
'700'
);
}
&
:
first
-
child
{
border
-
top
-
left
-
radius
:
5
px
;
border
-
bottom
-
left
-
radius
:
5
px
;
}
&
:
last
-
child
{
border
-
top
-
right
-
radius
:
5
px
;
border
-
bottom
-
right
-
radius
:
5
px
;
}
}
}
}
<
/style
>
client/themes/default/scss/app.scss
View file @
8715cd69
...
...
@@ -1036,4 +1036,8 @@
.comments-container
{
display
:
none
;
}
.page-edit-shortcuts
{
display
:
none
;
}
}
server/app/data.yml
View file @
8715cd69
...
...
@@ -67,6 +67,14 @@ defaults:
audience
:
'
urn:wiki.js'
tokenExpiration
:
'
30m'
tokenRenewal
:
'
14d'
editShortcuts
:
editFab
:
true
editMenuBar
:
false
editMenuBtn
:
true
editMenuExternalBtn
:
true
editMenuExternalName
:
'
GitHub'
editMenuExternalIcon
:
'
mdi-github'
editMenuExternalUrl
:
'
https://github.com/org/repo/blob/main/{filename}'
features
:
featurePageRatings
:
true
featurePageComments
:
true
...
...
server/controllers/common.js
View file @
8715cd69
...
...
@@ -542,13 +542,18 @@ router.get('/*', async (req, res, next) => {
})
}
// -> Page Filename (for edit on external repo button)
let
pageFilename
=
WIKI
.
config
.
lang
.
namespacing
?
`
${
pageArgs
.
locale
}
/
${
page
.
path
}
`
:
page
.
path
pageFilename
+=
page
.
contentType
===
'markdown'
?
'.md'
:
'.html'
// -> Render view
res
.
render
(
'page'
,
{
page
,
sidebar
,
injectCode
,
comments
:
commentTmpl
,
effectivePermissions
effectivePermissions
,
pageFilename
})
}
}
else
if
(
pageArgs
.
path
===
'home'
)
{
...
...
server/graph/resolvers/site.js
View file @
8715cd69
...
...
@@ -20,6 +20,7 @@ module.exports = {
logoUrl
:
WIKI
.
config
.
logoUrl
,
pageExtensions
:
WIKI
.
config
.
pageExtensions
.
join
(
', '
),
...
WIKI
.
config
.
seo
,
...
WIKI
.
config
.
editShortcuts
,
...
WIKI
.
config
.
features
,
...
WIKI
.
config
.
security
,
authAutoLogin
:
WIKI
.
config
.
auth
.
autoLogin
,
...
...
@@ -84,6 +85,16 @@ module.exports = {
tokenRenewal
:
_
.
get
(
args
,
'authJwtRenewablePeriod'
,
WIKI
.
config
.
auth
.
tokenRenewal
)
}
WIKI
.
config
.
editShortcuts
=
{
editFab
:
_
.
get
(
args
,
'editFab'
,
WIKI
.
config
.
editShortcuts
.
editFab
),
editMenuBar
:
_
.
get
(
args
,
'editMenuBar'
,
WIKI
.
config
.
editShortcuts
.
editMenuBar
),
editMenuBtn
:
_
.
get
(
args
,
'editMenuBtn'
,
WIKI
.
config
.
editShortcuts
.
editMenuBtn
),
editMenuExternalBtn
:
_
.
get
(
args
,
'editMenuExternalBtn'
,
WIKI
.
config
.
editShortcuts
.
editMenuExternalBtn
),
editMenuExternalName
:
_
.
get
(
args
,
'editMenuExternalName'
,
WIKI
.
config
.
editShortcuts
.
editMenuExternalName
),
editMenuExternalIcon
:
_
.
get
(
args
,
'editMenuExternalIcon'
,
WIKI
.
config
.
editShortcuts
.
editMenuExternalIcon
),
editMenuExternalUrl
:
_
.
get
(
args
,
'editMenuExternalUrl'
,
WIKI
.
config
.
editShortcuts
.
editMenuExternalUrl
)
}
WIKI
.
config
.
features
=
{
featurePageRatings
:
_
.
get
(
args
,
'featurePageRatings'
,
WIKI
.
config
.
features
.
featurePageRatings
),
featurePageComments
:
_
.
get
(
args
,
'featurePageComments'
,
WIKI
.
config
.
features
.
featurePageComments
),
...
...
@@ -109,7 +120,7 @@ module.exports = {
forceDownload
:
_
.
get
(
args
,
'uploadForceDownload'
,
WIKI
.
config
.
uploads
.
forceDownload
)
}
await
WIKI
.
configSvc
.
saveToDb
([
'host'
,
'title'
,
'company'
,
'contentLicense'
,
'seo'
,
'logoUrl'
,
'pageExtensions'
,
'auth'
,
'features'
,
'security'
,
'uploads'
])
await
WIKI
.
configSvc
.
saveToDb
([
'host'
,
'title'
,
'company'
,
'contentLicense'
,
'seo'
,
'logoUrl'
,
'pageExtensions'
,
'auth'
,
'
editShortcuts'
,
'
features'
,
'security'
,
'uploads'
])
if
(
WIKI
.
config
.
security
.
securityTrustProxy
)
{
WIKI
.
app
.
enable
(
'trust proxy'
)
...
...
server/graph/schemas/site.graphql
View file @
8715cd69
...
...
@@ -41,6 +41,13 @@ type SiteMutation {
authJwtAudience
:
String
authJwtExpiration
:
String
authJwtRenewablePeriod
:
String
editFab
:
Boolean
editMenuBar
:
Boolean
editMenuBtn
:
Boolean
editMenuExternalBtn
:
Boolean
editMenuExternalName
:
String
editMenuExternalIcon
:
String
editMenuExternalUrl
:
String
featurePageRatings
:
Boolean
featurePageComments
:
Boolean
featurePersonalWikis
:
Boolean
...
...
@@ -83,6 +90,13 @@ type SiteConfig {
authJwtAudience
:
String
authJwtExpiration
:
String
authJwtRenewablePeriod
:
String
editFab
:
Boolean
editMenuBar
:
Boolean
editMenuBtn
:
Boolean
editMenuExternalBtn
:
Boolean
editMenuExternalName
:
String
editMenuExternalIcon
:
String
editMenuExternalUrl
:
String
featurePageRatings
:
Boolean
featurePageComments
:
Boolean
featurePersonalWikis
:
Boolean
...
...
server/models/pages.js
View file @
8715cd69
...
...
@@ -148,6 +148,7 @@ module.exports = class Page extends Model {
isPublished
:
'boolean'
,
publishEndDate
:
'string'
,
publishStartDate
:
'string'
,
contentType
:
'string'
,
render
:
'string'
,
tags
:
[
{
...
...
@@ -787,7 +788,7 @@ module.exports = class Page extends Model {
* @returns {Promise} Promise with no value
*/
static
async
deletePage
(
opts
)
{
const
page
=
await
WIKI
.
models
.
pages
.
getPageFromDb
(
_
.
has
(
opts
,
'id'
)
?
opts
.
id
:
opts
)
;
const
page
=
await
WIKI
.
models
.
pages
.
getPageFromDb
(
_
.
has
(
opts
,
'id'
)
?
opts
.
id
:
opts
)
if
(
!
page
)
{
throw
new
WIKI
.
Error
.
PageNotFound
()
}
...
...
@@ -1067,6 +1068,7 @@ module.exports = class Page extends Model {
isPublished
:
page
.
isPublished
===
1
||
page
.
isPublished
===
true
,
publishEndDate
:
page
.
publishEndDate
,
publishStartDate
:
page
.
publishStartDate
,
contentType
:
page
.
contentType
,
render
:
page
.
render
,
tags
:
page
.
tags
.
map
(
t
=>
_
.
pick
(
t
,
[
'tag'
,
'title'
])),
title
:
page
.
title
,
...
...
server/views/page.pug
View file @
8715cd69
...
...
@@ -29,6 +29,8 @@ block body
comments-enabled=config.features.featurePageComments
effective-permissions=Buffer.from(JSON.stringify(effectivePermissions)).toString('base64')
comments-external=comments.codeTemplate
edit-shortcuts=Buffer.from(JSON.stringify(config.editShortcuts)).toString('base64')
filename=pageFilename
)
template(slot='contents')
div!= page.render
...
...
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