feat: Color Theme live preview

pull/166/head
NGPixel 8 years ago committed by Nicolas Giard
parent 06b49e037b
commit fc42fd21e5

@ -22,6 +22,7 @@ import 'jquery-sticky'
// ==================================== // ====================================
import helpers from './helpers' import helpers from './helpers'
import _ from './helpers/lodash'
// ==================================== // ====================================
// Load Vue Components // Load Vue Components
@ -62,7 +63,7 @@ import sourceViewComponent from './pages/source-view.component.js'
Vue.use(VueResource) Vue.use(VueResource)
Vue.use(VueClipboards) Vue.use(VueClipboards)
Vue.use(VueI18Next) Vue.use(VueI18Next)
Vue.use(VueLodash, helpers._) Vue.use(VueLodash, _)
Vue.use(helpers) Vue.use(helpers)
// ==================================== // ====================================
@ -142,6 +143,13 @@ $(() => {
store, store,
i18n, i18n,
el: '#root', el: '#root',
methods: {
changeTheme(opts) {
this.$el.className = `has-stickynav is-primary-${opts.primary} is-alternate-${opts.alt}`
this.$refs.header.className = `nav is-${opts.primary}`
this.$refs.footer.className = `footer is-${opts.footer}`
}
},
mounted() { mounted() {
$('a:not(.toc-anchor)').smoothScroll({ speed: 500, offset: -50 }) $('a:not(.toc-anchor)').smoothScroll({ speed: 500, offset: -50 })
$('#header').sticky({ topSpacing: 0 }) $('#header').sticky({ topSpacing: 0 })

@ -1,7 +1,6 @@
'use strict' 'use strict'
const helpers = { const helpers = {
_: require('./lodash'),
common: require('./common'), common: require('./common'),
form: require('./form'), form: require('./form'),
pages: require('./pages') pages: require('./pages')

@ -27,6 +27,7 @@ import reject from 'lodash/reject'
import slice from 'lodash/slice' import slice from 'lodash/slice'
import split from 'lodash/split' import split from 'lodash/split'
import startCase from 'lodash/startCase' import startCase from 'lodash/startCase'
import startsWith from 'lodash/startsWith'
import toString from 'lodash/toString' import toString from 'lodash/toString'
import toUpper from 'lodash/toUpper' import toUpper from 'lodash/toUpper'
import trim from 'lodash/trim' import trim from 'lodash/trim'
@ -35,7 +36,7 @@ import trim from 'lodash/trim'
// Build lodash object // Build lodash object
// ==================================== // ====================================
export default { module.exports = {
deburr, deburr,
concat, concat,
cloneDeep, cloneDeep,
@ -59,6 +60,7 @@ export default {
slice, slice,
split, split,
startCase, startCase,
startsWith,
toString, toString,
toUpper, toUpper,
trim trim

@ -12,6 +12,17 @@ export default {
codecolorize: 'true' codecolorize: 'true'
} }
}, },
watch: {
primary(val) {
this.$root.changeTheme(this.$data)
},
alt(val) {
this.$root.changeTheme(this.$data)
},
footer(val) {
this.$root.changeTheme(this.$data)
}
},
methods: { methods: {
saveTheme() { saveTheme() {
let self = this let self = this

@ -12,6 +12,7 @@
right: 0; right: 0;
bottom: 0; bottom: 0;
left: 0; left: 0;
transition: background-color 1s ease;
ul { ul {
padding: 0; padding: 0;

@ -9,6 +9,7 @@
box-shadow: 0 2px 3px rgba(mc($primary, '500'), 0.2); box-shadow: 0 2px 3px rgba(mc($primary, '500'), 0.2);
z-index: 2; z-index: 2;
color: #FFF; color: #FFF;
transition: background-color 1s ease;
/* THEME OVERRIDE - START */ /* THEME OVERRIDE - START */

@ -5,6 +5,7 @@
width: 250px; width: 250px;
max-width: 250px; max-width: 250px;
min-height: calc(100vh - 120px); min-height: calc(100vh - 120px);
transition: background-color 1s ease;
aside { aside {
padding: 1px 0 15px 0; padding: 1px 0 15px 0;
@ -23,6 +24,7 @@
margin: 0 0 15px 0; margin: 0 0 15px 0;
text-align: center; text-align: center;
box-shadow: 0 0 5px rgba(0,0,0,0.3); box-shadow: 0 0 5px rgba(0,0,0,0.3);
transition: background-color 1s ease;
i { i {
margin-right: 5px; margin-right: 5px;

@ -64,6 +64,26 @@ defaults:
code: code:
dark: true dark: true
colorize: true colorize: true
colors:
- red
- pink
- purple
- deep-purple
- indigo
- blue
- light-blue
- cyan
- teal
- green
- light-green
- lime
- yellow
- amber
- orange
- deep-orange
- brown
- grey
- blue-grey
langs: langs:
- -
id: en id: en

@ -271,4 +271,26 @@ router.get('/theme', (req, res) => {
res.render('pages/admin/theme', { adminTab: 'theme' }) res.render('pages/admin/theme', { adminTab: 'theme' })
}) })
router.post('/theme', (req, res) => {
if (res.locals.isGuest) {
return res.render('error-forbidden')
}
if (!validator.isIn(req.body.primary, appdata.colors)) {
return res.status(406).json({ msg: 'Primary color is invalid.' })
} else if (!validator.isIn(req.body.alt, appdata.colors)) {
return res.status(406).json({ msg: 'Alternate color is invalid.' })
} else if (!validator.isIn(req.body.footer, appdata.colors)) {
return res.status(406).json({ msg: 'Footer color is invalid.' })
}
appconfig.theme.primary = req.body.primary
appconfig.theme.alt = req.body.alt
appconfig.theme.footer = req.body.footer
appconfig.theme.code.dark = req.body.codedark === 'true'
appconfig.theme.code.colorize = req.body.codecolorize === 'true'
return res.json({ msg: 'OK' })
})
module.exports = router module.exports = router

@ -1,4 +1,4 @@
footer.footer(class=['is-' + appconfig.theme.footer]) footer.footer(class=['is-' + appconfig.theme.footer], ref='footer')
span span
= t('footer.poweredby') + ' ' = t('footer.poweredby') + ' '
a(href='https://github.com/Requarks/wiki') Wiki.js a(href='https://github.com/Requarks/wiki') Wiki.js

@ -1,6 +1,6 @@
#header-container #header-container
nav.nav#header(class=['is-' + appconfig.theme.primary]) nav.nav#header(class=['is-' + appconfig.theme.primary], ref='header')
.nav-left .nav-left
block rootNavLeft block rootNavLeft
a.nav-item(href='/') a.nav-item(href='/')

Loading…
Cancel
Save