feat: page css + scripts
This commit is contained in:
parent
53ddb50b51
commit
83b83a7510
@ -111,6 +111,14 @@ export default {
|
|||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: true
|
default: true
|
||||||
},
|
},
|
||||||
|
scriptCss: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
scriptJs: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
initEditor: {
|
initEditor: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null
|
||||||
@ -185,15 +193,17 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.$store.commit('page/SET_ID', this.pageId)
|
this.$store.set('page/id', this.pageId)
|
||||||
this.$store.commit('page/SET_DESCRIPTION', this.description)
|
this.$store.set('page/description', this.description)
|
||||||
this.$store.commit('page/SET_IS_PUBLISHED', this.isPublished)
|
this.$store.set('page/isPublished', this.isPublished)
|
||||||
this.$store.commit('page/SET_LOCALE', this.locale)
|
this.$store.set('page/locale', this.locale)
|
||||||
this.$store.commit('page/SET_PATH', this.path)
|
this.$store.set('page/path', this.path)
|
||||||
this.$store.commit('page/SET_TAGS', this.tags)
|
this.$store.set('page/tags', this.tags)
|
||||||
this.$store.commit('page/SET_TITLE', this.title)
|
this.$store.set('page/title', this.title)
|
||||||
|
this.$store.set('page/scriptCss', this.scriptCss)
|
||||||
|
this.$store.set('page/scriptJs', this.scriptJs)
|
||||||
|
|
||||||
this.$store.commit('page/SET_MODE', 'edit')
|
this.$store.set('page/mode', 'edit')
|
||||||
|
|
||||||
this.setCurrentSavedState()
|
this.setCurrentSavedState()
|
||||||
|
|
||||||
|
@ -189,11 +189,11 @@
|
|||||||
|
|
||||||
v-tab-item(:transition='false', :reverse-transition='false')
|
v-tab-item(:transition='false', :reverse-transition='false')
|
||||||
.editor-props-codeeditor-title
|
.editor-props-codeeditor-title
|
||||||
.overline {{$t('editor:props.js')}}
|
.overline {{$t('editor:props.html')}}
|
||||||
.editor-props-codeeditor
|
.editor-props-codeeditor
|
||||||
textarea(ref='codejs')
|
textarea(ref='codejs')
|
||||||
.editor-props-codeeditor-hint
|
.editor-props-codeeditor-hint
|
||||||
.caption {{$t('editor:props.jsHint')}}
|
.caption {{$t('editor:props.htmlHint')}}
|
||||||
|
|
||||||
v-tab-item(transition='fade-transition', reverse-transition='fade-transition')
|
v-tab-item(transition='fade-transition', reverse-transition='fade-transition')
|
||||||
v-card-text
|
v-card-text
|
||||||
@ -250,7 +250,7 @@ import gql from 'graphql-tag'
|
|||||||
|
|
||||||
import CodeMirror from 'codemirror'
|
import CodeMirror from 'codemirror'
|
||||||
import 'codemirror/lib/codemirror.css'
|
import 'codemirror/lib/codemirror.css'
|
||||||
import 'codemirror/mode/javascript/javascript.js'
|
import 'codemirror/mode/htmlmixed/htmlmixed.js'
|
||||||
import 'codemirror/mode/css/css.js'
|
import 'codemirror/mode/css/css.js'
|
||||||
|
|
||||||
/* global siteLangs, siteConfig */
|
/* global siteLangs, siteConfig */
|
||||||
@ -323,7 +323,7 @@ export default {
|
|||||||
if (newValue === 2) {
|
if (newValue === 2) {
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.loadEditor(this.$refs.codejs, 'javascript')
|
this.loadEditor(this.$refs.codejs, 'html')
|
||||||
}, 100)
|
}, 100)
|
||||||
})
|
})
|
||||||
} else if (newValue === 4) {
|
} else if (newValue === 4) {
|
||||||
@ -363,7 +363,7 @@ export default {
|
|||||||
direction: 'ltr'
|
direction: 'ltr'
|
||||||
})
|
})
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case 'javascript':
|
case 'html':
|
||||||
this.cm.setValue(this.scriptJs)
|
this.cm.setValue(this.scriptJs)
|
||||||
this.cm.on('change', c => {
|
this.cm.on('change', c => {
|
||||||
this.scriptJs = c.getValue()
|
this.scriptJs = c.getValue()
|
||||||
|
@ -2,6 +2,7 @@ const express = require('express')
|
|||||||
const router = express.Router()
|
const router = express.Router()
|
||||||
const pageHelper = require('../helpers/page')
|
const pageHelper = require('../helpers/page')
|
||||||
const _ = require('lodash')
|
const _ = require('lodash')
|
||||||
|
const CleanCSS = require('clean-css')
|
||||||
|
|
||||||
/* global WIKI */
|
/* global WIKI */
|
||||||
|
|
||||||
@ -153,6 +154,11 @@ router.get(['/e', '/e/*'], async (req, res, next) => {
|
|||||||
await page.$relatedQuery('tags')
|
await page.$relatedQuery('tags')
|
||||||
page.tags = _.map(page.tags, 'tag')
|
page.tags = _.map(page.tags, 'tag')
|
||||||
|
|
||||||
|
// -> Beautify Script CSS
|
||||||
|
if (!_.isEmpty(page.extra.css)) {
|
||||||
|
page.extra.css = new CleanCSS({ format: 'beautify' }).minify(page.extra.css).styles
|
||||||
|
}
|
||||||
|
|
||||||
_.set(res.locals, 'pageMeta.title', `Edit ${page.title}`)
|
_.set(res.locals, 'pageMeta.title', `Edit ${page.title}`)
|
||||||
_.set(res.locals, 'pageMeta.description', page.description)
|
_.set(res.locals, 'pageMeta.description', page.description)
|
||||||
page.mode = 'update'
|
page.mode = 'update'
|
||||||
@ -454,6 +460,14 @@ router.get('/*', async (req, res, next) => {
|
|||||||
body: WIKI.config.theming.injectBody
|
body: WIKI.config.theming.injectBody
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!_.isEmpty(page.extra.css)) {
|
||||||
|
injectCode.css = `${injectCode.css}\n${page.extra.css}`
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_.isEmpty(page.extra.js)) {
|
||||||
|
injectCode.body = `${injectCode.body}\n${page.extra.js}`
|
||||||
|
}
|
||||||
|
|
||||||
if (req.query.legacy || req.get('user-agent').indexOf('Trident') >= 0) {
|
if (req.query.legacy || req.get('user-agent').indexOf('Trident') >= 0) {
|
||||||
// -> Convert page TOC
|
// -> Convert page TOC
|
||||||
if (_.isString(page.toc)) {
|
if (_.isString(page.toc)) {
|
||||||
|
@ -51,6 +51,10 @@ module.exports = class Page extends Model {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static get jsonAttributes() {
|
||||||
|
return ['extra']
|
||||||
|
}
|
||||||
|
|
||||||
static get relationMappings() {
|
static get relationMappings() {
|
||||||
return {
|
return {
|
||||||
tags: {
|
tags: {
|
||||||
@ -139,6 +143,10 @@ module.exports = class Page extends Model {
|
|||||||
title: 'string'
|
title: 'string'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
extra: {
|
||||||
|
js: 'string',
|
||||||
|
css: 'string'
|
||||||
|
},
|
||||||
title: 'string',
|
title: 'string',
|
||||||
toc: 'string',
|
toc: 'string',
|
||||||
updatedAt: 'string'
|
updatedAt: 'string'
|
||||||
@ -248,7 +256,7 @@ module.exports = class Page extends Model {
|
|||||||
throw new WIKI.Error.PageEmptyContent()
|
throw new WIKI.Error.PageEmptyContent()
|
||||||
}
|
}
|
||||||
|
|
||||||
// -> Format JS Scripts
|
// -> Format CSS Scripts
|
||||||
let scriptCss = ''
|
let scriptCss = ''
|
||||||
if (WIKI.auth.checkAccess(opts.user, ['write:styles'], {
|
if (WIKI.auth.checkAccess(opts.user, ['write:styles'], {
|
||||||
locale: opts.locale,
|
locale: opts.locale,
|
||||||
@ -375,7 +383,7 @@ module.exports = class Page extends Model {
|
|||||||
ogPage.extra = {}
|
ogPage.extra = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
// -> Format JS Scripts
|
// -> Format CSS Scripts
|
||||||
let scriptCss = _.get(ogPage, 'extra.css', '')
|
let scriptCss = _.get(ogPage, 'extra.css', '')
|
||||||
if (WIKI.auth.checkAccess(opts.user, ['write:styles'], {
|
if (WIKI.auth.checkAccess(opts.user, ['write:styles'], {
|
||||||
locale: opts.locale,
|
locale: opts.locale,
|
||||||
@ -787,6 +795,7 @@ module.exports = class Page extends Model {
|
|||||||
'pages.localeCode',
|
'pages.localeCode',
|
||||||
'pages.authorId',
|
'pages.authorId',
|
||||||
'pages.creatorId',
|
'pages.creatorId',
|
||||||
|
'pages.extra',
|
||||||
{
|
{
|
||||||
authorName: 'author.name',
|
authorName: 'author.name',
|
||||||
authorEmail: 'author.email',
|
authorEmail: 'author.email',
|
||||||
@ -846,6 +855,10 @@ module.exports = class Page extends Model {
|
|||||||
creatorId: page.creatorId,
|
creatorId: page.creatorId,
|
||||||
creatorName: page.creatorName,
|
creatorName: page.creatorName,
|
||||||
description: page.description,
|
description: page.description,
|
||||||
|
extra: {
|
||||||
|
css: page.extra ? page.extra.css : '',
|
||||||
|
js: page.extra ? page.extra.js : ''
|
||||||
|
},
|
||||||
isPrivate: page.isPrivate === 1 || page.isPrivate === true,
|
isPrivate: page.isPrivate === 1 || page.isPrivate === true,
|
||||||
isPublished: page.isPublished === 1 || page.isPublished === true,
|
isPublished: page.isPublished === 1 || page.isPublished === true,
|
||||||
publishEndDate: page.publishEndDate,
|
publishEndDate: page.publishEndDate,
|
||||||
|
@ -14,6 +14,8 @@ block body
|
|||||||
description=page.description
|
description=page.description
|
||||||
:tags=page.tags
|
:tags=page.tags
|
||||||
:is-published=page.isPublished
|
:is-published=page.isPublished
|
||||||
|
script-css=page.extra.css
|
||||||
|
script-js=page.extra.js
|
||||||
init-mode=page.mode
|
init-mode=page.mode
|
||||||
init-editor=page.editorKey
|
init-editor=page.editorKey
|
||||||
init-content=page.content
|
init-content=page.content
|
||||||
|
@ -4,7 +4,7 @@ block body
|
|||||||
#root.is-fullscreen
|
#root.is-fullscreen
|
||||||
.app-error
|
.app-error
|
||||||
a(href='/')
|
a(href='/')
|
||||||
img(src='/svg/logo-wikijs.svg')
|
img(src='/_assets/svg/logo-wikijs.svg')
|
||||||
strong Oops, something went wrong...
|
strong Oops, something went wrong...
|
||||||
span= message
|
span= message
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user