Plugins settings working
Former-commit-id: bf510f9474baf82d86f56447595f11df8bab37af [formerly f66ec9d1e271bf7167086986e82002bf7007f184] [formerly 6df52279a22f6d91503b74e7c6f18f2c6a825207 [formerly b86d9b16b9
]]
Former-commit-id: 3d2b4d2c4e7004c8e704044d669eec07418825a5 [formerly 18ee8c63b9b50dc26c36e0acdb9bda8cc7069d1e]
Former-commit-id: b9d487d62ea901fc627e74a50b98666f6831fd4e
pull/726/head
parent
66382a7f6b
commit
9c205c928e
|
@ -117,7 +117,7 @@ export default {
|
||||||
mounted () {
|
mounted () {
|
||||||
window.addEventListener('keydown', this.keyEvent)
|
window.addEventListener('keydown', this.keyEvent)
|
||||||
window.addEventListener('scroll', event => {
|
window.addEventListener('scroll', event => {
|
||||||
if (this.req.kind !== 'listing') return
|
if (this.req.kind !== 'listing' || this.$store.state.req.display === 'mosaic') return
|
||||||
|
|
||||||
let top = 112 - window.scrollY
|
let top = 112 - window.scrollY
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,21 @@
|
||||||
<li><router-link to="/users">Go to User Management</router-link></li>
|
<li><router-link to="/users">Go to User Management</router-link></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
<form @submit="savePlugin">
|
||||||
|
<template v-for="plugin in plugins">
|
||||||
|
<h2>{{ capitalize(plugin.name) }}</h2>
|
||||||
|
|
||||||
|
<p v-for="field in plugin.fields" :key="field.name">
|
||||||
|
<label v-if="field.type !== 'checkbox'">{{ field.name }}</label>
|
||||||
|
<input v-if="field.type === 'text'" type="text" v-model.trim="field.value">
|
||||||
|
<input v-else-if="field.type === 'checkbox'" type="checkbox" v-model.trim="field.value">
|
||||||
|
<template v-if="field.type === 'checkbox'">{{ capitalize(field.name, 'caps') }}</template>
|
||||||
|
</p>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<p><input type="submit" value="Save"></p>
|
||||||
|
</form>
|
||||||
|
|
||||||
<form @submit="saveCommands">
|
<form @submit="saveCommands">
|
||||||
<h2>Commands</h2>
|
<h2>Commands</h2>
|
||||||
|
|
||||||
|
@ -34,8 +49,7 @@ export default {
|
||||||
data: function () {
|
data: function () {
|
||||||
return {
|
return {
|
||||||
commands: [],
|
commands: [],
|
||||||
beforeSave: '',
|
plugins: []
|
||||||
afterSave: ''
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
@ -56,13 +70,55 @@ export default {
|
||||||
api.getPlugins()
|
api.getPlugins()
|
||||||
.then(plugins => {
|
.then(plugins => {
|
||||||
console.log(plugins)
|
console.log(plugins)
|
||||||
|
let plugin = {}
|
||||||
|
|
||||||
|
for (let key in plugins) {
|
||||||
|
plugin.name = key
|
||||||
|
plugin.fields = []
|
||||||
|
|
||||||
|
for (let field in plugins[key]) {
|
||||||
|
let value = plugins[key][field]
|
||||||
|
|
||||||
|
if (Array.isArray(value)) {
|
||||||
|
plugin.fields.push({
|
||||||
|
name: field,
|
||||||
|
type: 'text',
|
||||||
|
original: 'array',
|
||||||
|
value: value.join(' ')
|
||||||
|
})
|
||||||
|
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (typeof value) {
|
||||||
|
case 'boolean':
|
||||||
|
plugin.fields.push({
|
||||||
|
name: field,
|
||||||
|
type: 'checkbox',
|
||||||
|
original: 'boolean',
|
||||||
|
value: value
|
||||||
|
})
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
plugin.fields.push({
|
||||||
|
name: field,
|
||||||
|
type: 'text',
|
||||||
|
original: 'text',
|
||||||
|
value: value
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.plugins.push(plugin)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.catch(error => { this.showError(error) })
|
.catch(error => { this.showError(error) })
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
...mapMutations([ 'showSuccess', 'showError' ]),
|
...mapMutations([ 'showSuccess', 'showError' ]),
|
||||||
capitalize (name) {
|
capitalize (name, where = '_') {
|
||||||
let splitted = name.split('_')
|
if (where === 'caps') where = /(?=[A-Z])/
|
||||||
|
let splitted = name.split(where)
|
||||||
name = ''
|
name = ''
|
||||||
|
|
||||||
for (let i = 0; i < splitted.length; i++) {
|
for (let i = 0; i < splitted.length; i++) {
|
||||||
|
@ -88,6 +144,35 @@ export default {
|
||||||
api.updateCommands(commands)
|
api.updateCommands(commands)
|
||||||
.then(() => { this.showSuccess('Commands updated!') })
|
.then(() => { this.showSuccess('Commands updated!') })
|
||||||
.catch(error => { this.showError(error) })
|
.catch(error => { this.showError(error) })
|
||||||
|
},
|
||||||
|
savePlugin (event) {
|
||||||
|
event.preventDefault()
|
||||||
|
let plugins = {}
|
||||||
|
|
||||||
|
for (let plugin of this.plugins) {
|
||||||
|
let p = {}
|
||||||
|
|
||||||
|
for (let field of plugin.fields) {
|
||||||
|
p[field.name] = field.value
|
||||||
|
|
||||||
|
if (field.original === 'array') {
|
||||||
|
let val = field.value.split(' ')
|
||||||
|
if (val[0] === '') {
|
||||||
|
val.shift()
|
||||||
|
}
|
||||||
|
|
||||||
|
p[field.name] = val
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
plugins[plugin.name] = p
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(plugins)
|
||||||
|
|
||||||
|
api.updatePlugins(plugins)
|
||||||
|
.then(() => { this.showSuccess('Plugins settings updated!') })
|
||||||
|
.catch(error => { this.showError(error) })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -101,6 +101,9 @@ nav .action {
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
font-size: 1.1em;
|
font-size: 1.1em;
|
||||||
padding: .5em;
|
padding: .5em;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
}
|
}
|
||||||
|
|
||||||
nav>div {
|
nav>div {
|
||||||
|
|
|
@ -379,6 +379,27 @@ function getPlugins () {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updatePlugins (data) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let request = new window.XMLHttpRequest()
|
||||||
|
request.open('PUT', `${store.state.baseURL}/api/plugins/`, true)
|
||||||
|
request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
|
||||||
|
|
||||||
|
request.onload = () => {
|
||||||
|
switch (request.status) {
|
||||||
|
case 200:
|
||||||
|
resolve()
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
reject(request.responseText)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
request.onerror = (error) => reject(error)
|
||||||
|
request.send(JSON.stringify(data))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
delete: rm,
|
delete: rm,
|
||||||
fetch,
|
fetch,
|
||||||
|
@ -398,5 +419,6 @@ export default {
|
||||||
getCommands,
|
getCommands,
|
||||||
updateCommands,
|
updateCommands,
|
||||||
removePrefix,
|
removePrefix,
|
||||||
getPlugins
|
getPlugins,
|
||||||
|
updatePlugins
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,7 +132,7 @@
|
||||||
data.router.push({ path: '/files/settings' })
|
data.router.push({ path: '/files/settings' })
|
||||||
},
|
},
|
||||||
icon: 'settings',
|
icon: 'settings',
|
||||||
name: 'Hugo settings'
|
name: 'Hugo Settings'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
click: function (event, data, route) {
|
click: function (event, data, route) {
|
||||||
|
@ -142,7 +142,7 @@
|
||||||
return data.store.state.user.allowNew
|
return data.store.state.user.allowNew
|
||||||
},
|
},
|
||||||
icon: 'merge_type',
|
icon: 'merge_type',
|
||||||
name: 'Hugo new'
|
name: 'Hugo New'
|
||||||
} /* ,
|
} /* ,
|
||||||
{
|
{
|
||||||
click: function (event, data, route) {
|
click: function (event, data, route) {
|
||||||
|
|
23
settings.go
23
settings.go
|
@ -4,6 +4,8 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/mitchellh/mapstructure"
|
||||||
)
|
)
|
||||||
|
|
||||||
func commandsHandler(c *RequestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
func commandsHandler(c *RequestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
||||||
|
@ -78,6 +80,25 @@ func pluginsPutHandler(c *RequestContext, w http.ResponseWriter, r *http.Request
|
||||||
return http.StatusBadGateway, errors.New("Empty request body")
|
return http.StatusBadGateway, errors.New("Empty request body")
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
var raw map[string]map[string]interface{}
|
||||||
|
|
||||||
|
// Parses the user and checks for error.
|
||||||
|
err := json.NewDecoder(r.Body).Decode(&raw)
|
||||||
|
if err != nil {
|
||||||
|
return http.StatusBadRequest, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for name, plugin := range raw {
|
||||||
|
err = mapstructure.Decode(plugin, c.FM.Plugins[name])
|
||||||
|
if err != nil {
|
||||||
|
return http.StatusInternalServerError, err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = c.FM.db.Set("plugins", name, c.FM.Plugins[name])
|
||||||
|
if err != nil {
|
||||||
|
return http.StatusInternalServerError, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return http.StatusOK, nil
|
return http.StatusOK, nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue