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
bfbb64a7
Unverified
Commit
bfbb64a7
authored
Dec 30, 2022
by
Nicolas Giard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: file manager improvements + admin user edit fixes
parent
b4769b9a
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
288 additions
and
91 deletions
+288
-91
tree.js
server/graph/resolvers/tree.js
+49
-0
user.js
server/graph/resolvers/user.js
+6
-2
tree.graphql
server/graph/schemas/tree.graphql
+1
-1
package.json
ux/package.json
+1
-0
fileman-page.svg
ux/public/_assets/illustrations/fileman-page.svg
+13
-0
FileManager.vue
ux/src/components/FileManager.vue
+143
-29
FolderCreateDialog.vue
ux/src/components/FolderCreateDialog.vue
+2
-0
TreeNav.vue
ux/src/components/TreeNav.vue
+6
-2
UserEditOverlay.vue
ux/src/components/UserEditOverlay.vue
+33
-31
en.json
ux/src/i18n/locales/en.json
+2
-1
AdminLayout.vue
ux/src/layouts/AdminLayout.vue
+28
-25
Index.vue
ux/src/pages/Index.vue
+4
-0
yarn.lock
ux/yarn.lock
+0
-0
No files found.
server/graph/resolvers/tree.js
View file @
bfbb64a7
...
...
@@ -91,6 +91,9 @@ module.exports = {
}
},
Mutation
:
{
/**
* CREATE FOLDER
*/
async
createFolder
(
obj
,
args
,
context
)
{
try
{
// Get parent path
...
...
@@ -138,6 +141,52 @@ module.exports = {
}
catch
(
err
)
{
return
graphHelper
.
generateError
(
err
)
}
},
/**
* DELETE FOLDER
*/
async
deleteFolder
(
obj
,
args
,
context
)
{
try
{
// Get folder
const
folder
=
await
WIKI
.
db
.
knex
(
'tree'
).
where
(
'id'
,
args
.
folderId
).
first
()
const
folderPath
=
folder
.
folderPath
?
`
${
folder
.
folderPath
}
.
${
folder
.
fileName
}
`
:
folder
.
fileName
WIKI
.
logger
.
debug
(
`Deleting folder
${
folder
.
id
}
at path
${
folderPath
}
...`
)
// Delete all children
const
deletedNodes
=
await
WIKI
.
db
.
knex
(
'tree'
).
where
(
'folderPath'
,
'~'
,
`
${
folderPath
}
.*`
).
del
().
returning
([
'id'
,
'type'
])
// Delete folders
const
deletedFolders
=
deletedNodes
.
filter
(
n
=>
n
.
type
===
'folder'
).
map
(
n
=>
n
.
id
)
if
(
deletedFolders
.
length
>
0
)
{
WIKI
.
logger
.
debug
(
`Deleted
${
deletedFolders
.
length
}
children folders.`
)
}
// Delete pages
const
deletedPages
=
deletedNodes
.
filter
(
n
=>
n
.
type
===
'page'
).
map
(
n
=>
n
.
id
)
if
(
deletedPages
.
length
>
0
)
{
WIKI
.
logger
.
debug
(
`Deleting
${
deletedPages
.
length
}
children pages...`
)
// TODO: Delete page
}
// Delete assets
const
deletedAssets
=
deletedNodes
.
filter
(
n
=>
n
.
type
===
'asset'
).
map
(
n
=>
n
.
id
)
if
(
deletedAssets
.
length
>
0
)
{
WIKI
.
logger
.
debug
(
`Deleting
${
deletedPages
.
length
}
children assets...`
)
// TODO: Delete asset
}
// Delete the folder itself
await
WIKI
.
db
.
knex
(
'tree'
).
where
(
'id'
,
folder
.
id
).
del
()
WIKI
.
logger
.
debug
(
`Deleting folder
${
folder
.
id
}
successfully.`
)
return
{
operation
:
graphHelper
.
generateSuccess
(
'Folder deleted successfully'
)
}
}
catch
(
err
)
{
return
graphHelper
.
generateError
(
err
)
}
}
},
TreeItem
:
{
...
...
server/graph/resolvers/user.js
View file @
bfbb64a7
...
...
@@ -352,8 +352,12 @@ module.exports = {
strategyKey
:
authStrategy
.
module
,
strategyIcon
:
authModule
.
icon
,
config
:
authStrategy
.
module
===
'local'
?
{
isTfaSetup
:
value
.
tfaSecret
?.
length
>
0
}
:
{}
isPasswordSet
:
value
.
password
?.
length
>
0
,
isTfaSetup
:
value
.
tfaSecret
?.
length
>
0
,
isTfaRequired
:
value
.
tfaRequired
??
false
,
mustChangePwd
:
value
.
mustChangePwd
??
false
,
restrictLogin
:
value
.
restrictLogin
??
false
}
:
value
})
},
[])
},
...
...
server/graph/schemas/tree.graphql
View file @
bfbb64a7
...
...
@@ -76,7 +76,7 @@ type TreeItemPage {
depth
:
Int
fileName
:
String
folderPath
:
String
pageE
ditor
:
String
e
ditor
:
String
pageType
:
String
title
:
String
updatedAt
:
Date
...
...
ux/package.json
View file @
bfbb64a7
...
...
@@ -63,6 +63,7 @@
"codemirror"
:
"6.0.1"
,
"filesize"
:
"10.0.5"
,
"filesize-parser"
:
"1.5.0"
,
"fuse.js"
:
"6.6.2"
,
"graphql"
:
"16.6.0"
,
"graphql-tag"
:
"2.12.6"
,
"js-cookie"
:
"3.0.1"
,
...
...
ux/public/_assets/illustrations/fileman-page.svg
0 → 100644
View file @
bfbb64a7
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
width=
"100%"
height=
"100%"
viewBox=
"0 0 320 200"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
xml:space=
"preserve"
xmlns:serif=
"http://www.serif.com/"
style=
"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"
>
<rect
x=
"0"
y=
"0"
width=
"320"
height=
"200"
style=
"fill:url(#_Linear1);"
/>
<path
d=
"M203.194,73.306L175.694,45.806C175.18,45.289 174.481,45 173.75,45L129.75,45C122.168,45 116,51.168 116,58.75L116,141.25C116,148.832 122.168,155 129.75,155L190.25,155C197.832,155 204,148.832 204,141.25L204,75.25C204,74.521 203.711,73.82 203.194,73.306Z"
style=
"fill:rgb(107,227,162);fill-rule:nonzero;"
/>
<path
d=
"M204,78L184.75,78C177.168,78 171,71.832 171,64.25L171,45C171,43.482 172.229,42.25 173.75,42.25C175.271,42.25 176.5,43.482 176.5,45L176.5,64.25C176.5,68.798 180.202,72.5 184.75,72.5L204,72.5C205.521,72.5 206.75,73.732 206.75,75.25C206.75,76.768 205.521,78 204,78Z"
style=
"fill:rgb(50,69,97);fill-rule:nonzero;"
/>
<path
d=
"M182,102.75L138,102.75C136.479,102.75 135.25,101.518 135.25,100C135.25,98.482 136.479,97.25 138,97.25L182,97.25C183.521,97.25 184.75,98.482 184.75,100C184.75,101.518 183.521,102.75 182,102.75Z"
style=
"fill:rgb(50,69,97);fill-rule:nonzero;"
/>
<path
d=
"M182,116.5L138,116.5C136.479,116.5 135.25,115.268 135.25,113.75C135.25,112.232 136.479,111 138,111L182,111C183.521,111 184.75,112.232 184.75,113.75C184.75,115.268 183.521,116.5 182,116.5Z"
style=
"fill:rgb(50,69,97);fill-rule:nonzero;"
/>
<path
d=
"M165.5,130.25L138,130.25C136.479,130.25 135.25,129.018 135.25,127.5C135.25,125.982 136.479,124.75 138,124.75L165.5,124.75C167.021,124.75 168.25,125.982 168.25,127.5C168.25,129.018 167.021,130.25 165.5,130.25Z"
style=
"fill:rgb(50,69,97);fill-rule:nonzero;"
/>
<defs>
<linearGradient
id=
"_Linear1"
x1=
"0"
y1=
"0"
x2=
"1"
y2=
"0"
gradientUnits=
"userSpaceOnUse"
gradientTransform=
"matrix(320,100,-62.5,200,0,100)"
><stop
offset=
"0"
style=
"stop-color:rgb(38,43,49);stop-opacity:1"
/><stop
offset=
"1"
style=
"stop-color:rgb(22,27,33);stop-opacity:1"
/></linearGradient>
</defs>
</svg>
ux/src/components/FileManager.vue
View file @
bfbb64a7
This diff is collapsed.
Click to expand it.
ux/src/components/FolderCreateDialog.vue
View file @
bfbb64a7
...
...
@@ -19,6 +19,7 @@ q-dialog(ref='dialogRef', @hide='onDialogHide')
lazy-rules='ondemand'
autofocus
ref='iptTitle'
@keyup.enter='create'
)
q-item
blueprint-icon.self-start(icon='file-submodule')
...
...
@@ -34,6 +35,7 @@ q-dialog(ref='dialogRef', @hide='onDialogHide')
:hint='t(`fileman.folderFileNameHint`)'
lazy-rules='ondemand'
@focus='state.pathDirty = true'
@keyup.enter='create'
)
q-card-actions.card-actions
q-space
...
...
ux/src/components/TreeNav.vue
View file @
bfbb64a7
...
...
@@ -126,8 +126,11 @@ function setOpened (nodeId) {
function
isLoaded
(
nodeId
)
{
return
state
.
loaded
[
nodeId
]
}
function
resetLoaded
(
nodeId
)
{
state
.
loaded
[
nodeId
]
=
false
function
setLoaded
(
nodeId
,
value
)
{
state
.
loaded
[
nodeId
]
=
value
}
function
resetLoaded
()
{
state
.
loaded
=
{}
}
// PROVIDE
...
...
@@ -146,6 +149,7 @@ provide('emitContextAction', emitContextAction)
defineExpose
({
setOpened
,
isLoaded
,
setLoaded
,
resetLoaded
})
...
...
ux/src/components/UserEditOverlay.vue
View file @
bfbb64a7
...
...
@@ -38,17 +38,20 @@ q-layout(view='hHh lpR fFf', container)
)
q-drawer.bg-dark-6(:model-value='true', :width='250', dark)
q-list(padding, v-if='state.loading < 1')
q-item
(
template
(
v-for='sc of sections'
:key='`section-` + sc.key'
clickable
:to='{ params: { section: sc.key } }'
active-class='bg-primary text-white'
:disabled='sc.disabled'
)
q-item-section(side)
q-icon(:name='sc.icon', color='white')
q-item-section
{{
sc
.
text
}}
q-item(
v-if='!sc.disabled || flagsStore.experimental'
clickable
:to='{ params: { section: sc.key } }'
active-class='bg-primary text-white'
:disabled='sc.disabled'
)
q-item-section(side)
q-icon(:name='sc.icon', color='white')
q-item-section
{{
sc
.
text
}}
q-page-container
q-page(v-if='state.loading > 0')
.flex.q-pa-lg.items-center
...
...
@@ -268,7 +271,7 @@ q-layout(view='hHh lpR fFf', container)
q-item-section
q-item-label
{{
t
(
`admin.users.changePassword`
)
}}
q-item-label(caption)
{{
t
(
`admin.users.changePasswordHint`
)
}}
q-item-label(caption): strong(:class='localAuth.
password ? `text-positive` : `text-negative`')
{{
localAuth
.
password
?
t
(
`admin.users.pwdSet`
)
:
t
(
`admin.users.pwdNotSet`
)
}}
q-item-label(caption): strong(:class='localAuth.
isPasswordSet ? `text-positive` : `text-negative`')
{{
localAuth
.
isPasswordSet
?
t
(
`admin.users.pwdSet`
)
:
t
(
`admin.users.pwdNotSet`
)
}}
q-item-section(side)
q-btn.acrylic-btn(
flat
...
...
@@ -316,7 +319,7 @@ q-layout(view='hHh lpR fFf', container)
q-item-label(caption)
{{
t
(
`admin.users.tfaRequiredHint`
)
}}
q-item-section(avatar)
q-toggle(
v-model='localAuth.
t
faRequired'
v-model='localAuth.
isT
faRequired'
color='primary'
checked-icon='las la-check'
unchecked-icon='las la-times'
...
...
@@ -328,7 +331,7 @@ q-layout(view='hHh lpR fFf', container)
q-item-section
q-item-label
{{
t
(
`admin.users.tfaInvalidate`
)
}}
q-item-label(caption)
{{
t
(
`admin.users.tfaInvalidateHint`
)
}}
q-item-label(caption): strong(:class='localAuth.
tfaSecret ? `text-positive` : `text-negative`')
{{
localAuth
.
tfaSecret
?
t
(
`admin.users.tfaSet`
)
:
t
(
`admin.users.tfaNotSet`
)
}}
q-item-label(caption): strong(:class='localAuth.
isTfaSetup ? `text-positive` : `text-negative`')
{{
localAuth
.
isTfaSetup
?
t
(
`admin.users.tfaSet`
)
:
t
(
`admin.users.tfaNotSet`
)
}}
q-item-section(side)
q-btn.acrylic-btn(
flat
...
...
@@ -348,14 +351,14 @@ q-layout(view='hHh lpR fFf', container)
)
{{
t
(
'admin.users.noLinkedProviders'
)
}}
template(
v-for='(prv, idx) in linkedAuthProviders'
:key='prv.
_i
d'
:key='prv.
authI
d'
)
q-separator.q-my-sm(inset, v-if='idx > 0')
q-item
blueprint-icon(
icon='google
', :hue-rotate='-45')
blueprint-icon(
:icon='prv.strategyIcon
', :hue-rotate='-45')
q-item-section
q-item-label
{{
prv
.
_module
Name
}}
q-item-label(caption)
{{
prv
.
key
}}
q-item-label
{{
prv
.
auth
Name
}}
q-item-label(caption)
{{
prv
.
config
.
key
}}
q-page(v-else-if='route.params.section === `groups`')
.q-pa-md
...
...
@@ -506,7 +509,7 @@ q-layout(view='hHh lpR fFf', container)
<
script
setup
>
import
gql
from
'graphql-tag'
import
{
cloneDeep
,
find
,
findKey
,
map
,
some
}
from
'lodash-es'
import
{
cloneDeep
,
find
,
map
,
some
}
from
'lodash-es'
import
{
DateTime
}
from
'luxon'
import
{
useI18n
}
from
'vue-i18n'
...
...
@@ -515,6 +518,7 @@ import { computed, onMounted, reactive, watch } from 'vue'
import
{
useRouter
,
useRoute
}
from
'vue-router'
import
{
useAdminStore
}
from
'src/stores/admin'
import
{
useFlagsStore
}
from
'src/stores/flags'
import
UserChangePwdDialog
from
'./UserChangePwdDialog.vue'
import
UtilCodeEditor
from
'./UtilCodeEditor.vue'
...
...
@@ -526,6 +530,7 @@ const $q = useQuasar()
// STORES
const
adminStore
=
useAdminStore
()
const
flagsStore
=
useFlagsStore
()
// ROUTER
...
...
@@ -553,7 +558,7 @@ const state = reactive({
const
sections
=
[
{
key
:
'overview'
,
text
:
t
(
'admin.users.overview'
),
icon
:
'las la-user'
},
{
key
:
'activity'
,
text
:
t
(
'admin.users.activity'
),
icon
:
'las la-chart-area'
},
{
key
:
'activity'
,
text
:
t
(
'admin.users.activity'
),
icon
:
'las la-chart-area'
,
disabled
:
true
},
{
key
:
'auth'
,
text
:
t
(
'admin.users.auth'
),
icon
:
'las la-key'
},
{
key
:
'groups'
,
text
:
t
(
'admin.users.groups'
),
icon
:
'las la-users'
},
{
key
:
'metadata'
,
text
:
t
(
'admin.users.metadata'
),
icon
:
'las la-clipboard-list'
},
...
...
@@ -576,17 +581,13 @@ const metadata = computed({
}
})
const
localAuthId
=
computed
(()
=>
{
return
findKey
(
state
.
user
.
auth
,
[
'module'
,
'local'
])
})
const
localAuth
=
computed
({
get
()
{
return
localAuthId
.
value
?
state
.
user
.
auth
?.[
localAuthId
.
value
]
||
{}
:
{}
return
find
(
state
.
user
?.
auth
,
[
'strategyKey'
,
'local'
])?.
config
??
{}
},
set
(
val
)
{
if
(
localAuth
Id
.
value
)
{
state
.
user
.
auth
[
localAuthId
.
value
]
=
val
if
(
localAuth
.
value
.
authId
)
{
find
(
state
.
user
.
auth
,
[
'strategyKey'
,
'local'
]).
config
=
val
}
}
})
...
...
@@ -594,12 +595,7 @@ const localAuth = computed({
const
linkedAuthProviders
=
computed
(()
=>
{
if
(
!
state
.
user
?.
auth
)
{
return
[]
}
return
map
(
state
.
user
.
auth
,
(
obj
,
key
)
=>
{
return
{
...
obj
,
_id
:
key
}
}).
filter
(
prv
=>
prv
.
module
!==
'local'
)
return
state
.
user
.
auth
.
filter
(
prv
=>
prv
.
strategyKey
!==
'local'
)
})
// WATCHERS
...
...
@@ -630,7 +626,13 @@ async function fetchUser () {
isSystem
isVerified
isActive
auth
auth {
authId
authName
strategyKey
strategyIcon
config
}
meta
prefs
lastLoginAt
...
...
ux/src/i18n/locales/en.json
View file @
bfbb64a7
...
...
@@ -1610,5 +1610,6 @@
"admin.flags.experimental.hint"
:
"Enable unstable / unfinished features. DO NOT enable in a production environment!"
,
"admin.flags.advanced.label"
:
"Custom Configuration"
,
"admin.flags.advanced.hint"
:
"Set custom configuration flags. Note that all values are public to all users! Do not insert senstive data."
,
"admin.flags.saveSuccess"
:
"Flags have been updated successfully."
"admin.flags.saveSuccess"
:
"Flags have been updated successfully."
,
"fileman.copyURLSuccess"
:
"URL has been copied to the clipboard."
}
ux/src/layouts/AdminLayout.vue
View file @
bfbb64a7
...
...
@@ -70,26 +70,27 @@ q-layout.admin(view='hHh Lpr lff')
q-item-section(avatar)
q-icon(name='img:/_assets/icons/fluent-web.svg')
q-item-section
{{
t
(
'admin.general.title'
)
}}
q-item(:to='`/_admin/` + adminStore.currentSiteId + `/analytics`', v-ripple, active-class='bg-primary text-white', disabled)
q-item-section(avatar)
q-icon(name='img:/_assets/icons/fluent-bar-chart.svg')
q-item-section
{{
t
(
'admin.analytics.title'
)
}}
q-item(:to='`/_admin/` + adminStore.currentSiteId + `/approvals`', v-ripple, active-class='bg-primary text-white', disabled)
q-item-section(avatar)
q-icon(name='img:/_assets/icons/fluent-inspection.svg')
q-item-section
{{
t
(
'admin.approval.title'
)
}}
q-item(:to='`/_admin/` + adminStore.currentSiteId + `/comments`', v-ripple, active-class='bg-primary text-white', disabled)
q-item-section(avatar)
q-icon(name='img:/_assets/icons/fluent-comments.svg')
q-item-section
{{
t
(
'admin.comments.title'
)
}}
q-item(:to='`/_admin/` + adminStore.currentSiteId + `/blocks`', v-ripple, active-class='bg-primary text-white', disabled)
q-item-section(avatar)
q-icon(name='img:/_assets/icons/fluent-rfid-tag.svg')
q-item-section
{{
t
(
'admin.blocks.title'
)
}}
q-item(:to='`/_admin/` + adminStore.currentSiteId + `/editors`', v-ripple, active-class='bg-primary text-white', disabled)
q-item-section(avatar)
q-icon(name='img:/_assets/icons/fluent-cashbook.svg')
q-item-section
{{
t
(
'admin.editors.title'
)
}}
template(v-if='flagsStore.experimental')
q-item(:to='`/_admin/` + adminStore.currentSiteId + `/analytics`', v-ripple, active-class='bg-primary text-white', disabled)
q-item-section(avatar)
q-icon(name='img:/_assets/icons/fluent-bar-chart.svg')
q-item-section
{{
t
(
'admin.analytics.title'
)
}}
q-item(:to='`/_admin/` + adminStore.currentSiteId + `/approvals`', v-ripple, active-class='bg-primary text-white', disabled)
q-item-section(avatar)
q-icon(name='img:/_assets/icons/fluent-inspection.svg')
q-item-section
{{
t
(
'admin.approval.title'
)
}}
q-item(:to='`/_admin/` + adminStore.currentSiteId + `/comments`', v-ripple, active-class='bg-primary text-white', disabled)
q-item-section(avatar)
q-icon(name='img:/_assets/icons/fluent-comments.svg')
q-item-section
{{
t
(
'admin.comments.title'
)
}}
q-item(:to='`/_admin/` + adminStore.currentSiteId + `/blocks`', v-ripple, active-class='bg-primary text-white', disabled)
q-item-section(avatar)
q-icon(name='img:/_assets/icons/fluent-rfid-tag.svg')
q-item-section
{{
t
(
'admin.blocks.title'
)
}}
q-item(:to='`/_admin/` + adminStore.currentSiteId + `/editors`', v-ripple, active-class='bg-primary text-white', disabled)
q-item-section(avatar)
q-icon(name='img:/_assets/icons/fluent-cashbook.svg')
q-item-section
{{
t
(
'admin.editors.title'
)
}}
q-item(:to='`/_admin/` + adminStore.currentSiteId + `/locale`', v-ripple, active-class='bg-primary text-white')
q-item-section(avatar)
q-icon(name='img:/_assets/icons/fluent-language.svg')
...
...
@@ -134,7 +135,7 @@ q-layout.admin(view='hHh Lpr lff')
q-item-section
{{
t
(
'admin.api.title'
)
}}
q-item-section(side)
status-light(:color='adminStore.info.isApiEnabled ? `positive` : `negative`')
q-item(to='/_admin/audit', v-ripple, active-class='bg-primary text-white', disabled)
q-item(to='/_admin/audit', v-ripple, active-class='bg-primary text-white', disabled
, v-if='flagsStore.experimental'
)
q-item-section(avatar)
q-icon(name='img:/_assets/icons/fluent-event-log.svg')
q-item-section
{{
t
(
'admin.audit.title'
)
}}
...
...
@@ -156,7 +157,7 @@ q-layout.admin(view='hHh Lpr lff')
q-item-section
{{
t
(
'admin.mail.title'
)
}}
q-item-section(side)
status-light(:color='adminStore.info.isMailConfigured ? `positive` : `warning`')
q-item(to='/_admin/rendering', v-ripple, active-class='bg-primary text-white', disabled)
q-item(to='/_admin/rendering', v-ripple, active-class='bg-primary text-white', disabled
, v-if='flagsStore.experimental'
)
q-item-section(avatar)
q-icon(name='img:/_assets/icons/fluent-rich-text-converter.svg')
q-item-section
{{
t
(
'admin.rendering.title'
)
}}
...
...
@@ -170,7 +171,7 @@ q-layout.admin(view='hHh Lpr lff')
q-item-section(avatar)
q-icon(name='img:/_assets/icons/fluent-protect.svg')
q-item-section
{{
t
(
'admin.security.title'
)
}}
q-item(to='/_admin/ssl', v-ripple, active-class='bg-primary text-white', disabled)
q-item(to='/_admin/ssl', v-ripple, active-class='bg-primary text-white', disabled
, v-if='flagsStore.experimental'
)
q-item-section(avatar)
q-icon(name='img:/_assets/icons/fluent-security-ssl.svg')
q-item-section
{{
t
(
'admin.ssl.title'
)
}}
...
...
@@ -218,8 +219,9 @@ import { defineAsyncComponent, onMounted, reactive, ref, watch } from 'vue'
import
{
useRouter
,
useRoute
}
from
'vue-router'
import
{
useI18n
}
from
'vue-i18n'
import
{
useAdminStore
}
from
'../stores/admin'
import
{
useSiteStore
}
from
'../stores/site'
import
{
useAdminStore
}
from
'src/stores/admin'
import
{
useFlagsStore
}
from
'src/stores/flags'
import
{
useSiteStore
}
from
'src/stores/site'
// COMPONENTS
...
...
@@ -237,6 +239,7 @@ const $q = useQuasar()
// STORES
const
adminStore
=
useAdminStore
()
const
flagsStore
=
useFlagsStore
()
const
siteStore
=
useSiteStore
()
// ROUTER
...
...
ux/src/pages/Index.vue
View file @
bfbb64a7
...
...
@@ -234,6 +234,7 @@ q-page.column
aria-label='Page Data'
@click='togglePageData'
disable
v-if='flagsStore.experimental'
)
q-tooltip(anchor='center left' self='center right') Page Data
q-separator.q-my-sm(inset)
...
...
@@ -322,6 +323,7 @@ import { useI18n } from 'vue-i18n'
import
{
DateTime
}
from
'luxon'
import
{
useEditorStore
}
from
'src/stores/editor'
import
{
useFlagsStore
}
from
'src/stores/flags'
import
{
usePageStore
}
from
'src/stores/page'
import
{
useSiteStore
}
from
'src/stores/site'
...
...
@@ -349,6 +351,7 @@ const $q = useQuasar()
// STORES
const
editorStore
=
useEditorStore
()
const
flagsStore
=
useFlagsStore
()
const
pageStore
=
usePageStore
()
const
siteStore
=
useSiteStore
()
...
...
@@ -702,6 +705,7 @@ async function saveChanges () {
width
:
40px
;
border-radius
:
4px
!
important
;
background-color
:
rgba
(
0
,
0
,
0
,.
75
);
backdrop-filter
:
blur
(
5px
);
color
:
#FFF
;
position
:
fixed
;
right
:
486px
;
...
...
ux/yarn.lock
View file @
bfbb64a7
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