Use new delegation for all tabs
parent
10c7ced0b7
commit
1df3ab88f6
|
@ -33,6 +33,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.9.2",
|
"@babel/runtime": "^7.9.2",
|
||||||
"babel-polyfill": "^6.26.0",
|
"babel-polyfill": "^6.26.0",
|
||||||
|
"clone": "^2.1.2",
|
||||||
"do-bulma": "git+https://github.com/do-community/do-bulma.git",
|
"do-bulma": "git+https://github.com/do-community/do-bulma.git",
|
||||||
"do-vue": "git+https://github.com/do-community/do-vue.git",
|
"do-vue": "git+https://github.com/do-community/do-vue.git",
|
||||||
"parcel-bundler": "^1.12.4",
|
"parcel-bundler": "^1.12.4",
|
||||||
|
|
|
@ -30,7 +30,7 @@ limitations under the License.
|
||||||
<div class="tabs">
|
<div class="tabs">
|
||||||
<ul>
|
<ul>
|
||||||
<li v-for="(data, index) in domains" :class="index === active ? 'is-active' : undefined">
|
<li v-for="(data, index) in domains" :class="index === active ? 'is-active' : undefined">
|
||||||
<a @click="active = index">{{ data.python.test.value }}{{ changes(index) }}</a>
|
<a @click="active = index">{{ data.server.domain.computed }}{{ changes(index) }}</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -48,6 +48,7 @@ limitations under the License.
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import clone from 'clone';
|
||||||
import i18n from '../i18n';
|
import i18n from '../i18n';
|
||||||
import Header from 'do-vue/src/templates/header';
|
import Header from 'do-vue/src/templates/header';
|
||||||
import Footer from 'do-vue/src/templates/footer';
|
import Footer from 'do-vue/src/templates/footer';
|
||||||
|
@ -64,7 +65,8 @@ limitations under the License.
|
||||||
return {
|
return {
|
||||||
i18n,
|
i18n,
|
||||||
domains: [
|
domains: [
|
||||||
Domain.delegated,
|
clone(Domain.delegated),
|
||||||
|
clone(Domain.delegated),
|
||||||
],
|
],
|
||||||
active: 0,
|
active: 0,
|
||||||
};
|
};
|
||||||
|
@ -72,8 +74,9 @@ limitations under the License.
|
||||||
methods: {
|
methods: {
|
||||||
changes(index) {
|
changes(index) {
|
||||||
const data = this.$data.domains[index];
|
const data = this.$data.domains[index];
|
||||||
const changes = Object.values(data).reduce((prev, current) => {
|
const changes = Object.entries(data).reduce((prev, current) => {
|
||||||
prev += Object.values(current).filter(d => d.default !== d.computed).length;
|
if (current[0] === 'presets') return prev; // Ignore changes from presets
|
||||||
|
prev += Object.values(current[1]).filter(d => d.default !== d.computed).length;
|
||||||
return prev;
|
return prev;
|
||||||
}, 0);
|
}, 0);
|
||||||
if (changes) return ` (${changes.toLocaleString()})`;
|
if (changes) return ` (${changes.toLocaleString()})`;
|
||||||
|
|
|
@ -34,9 +34,9 @@ limitations under the License.
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { Python } from './domain_sections';
|
import * as Sections from './domain_sections';
|
||||||
|
|
||||||
const tabs = [ Python ];
|
const tabs = Object.values(Sections);
|
||||||
const delegated = tabs.reduce((prev, tab) => {
|
const delegated = tabs.reduce((prev, tab) => {
|
||||||
prev[tab.key] = tab.delegated;
|
prev[tab.key] = tab.delegated;
|
||||||
return prev;
|
return prev;
|
||||||
|
@ -56,6 +56,7 @@ limitations under the License.
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
changes(tab) {
|
changes(tab) {
|
||||||
|
if (tab === 'presets') return ''; // Ignore changes from presets
|
||||||
const changes = Object.values(this.$props.data[tab]).filter(d => d.default !== d.computed).length;
|
const changes = Object.values(this.$props.data[tab]).filter(d => d.default !== d.computed).length;
|
||||||
if (changes) return ` (${changes.toLocaleString()})`;
|
if (changes) return ` (${changes.toLocaleString()})`;
|
||||||
return '';
|
return '';
|
||||||
|
|
|
@ -4,51 +4,66 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import i18n from '../../i18n';
|
import i18n from '../../i18n';
|
||||||
|
import delegatedFromDefaults from '../../util/delegated_from_defaults';
|
||||||
|
import computedFromDefaults from '../../util/computed_from_defaults';
|
||||||
|
|
||||||
const defaults = {
|
const defaults = {
|
||||||
https: true,
|
https: {
|
||||||
http2: true,
|
default: true,
|
||||||
forceHttps: true,
|
enabled: true,
|
||||||
hsts: true,
|
},
|
||||||
hstsSubdomains: true,
|
http2: {
|
||||||
hstsPreload: true,
|
default: true,
|
||||||
certType: 'letsEncrypt',
|
enabled: true,
|
||||||
letsEncryptEmail: '',
|
},
|
||||||
sslCertificate: '',
|
forceHttps: {
|
||||||
sslCertificateKey: '',
|
default: true,
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
hsts: {
|
||||||
|
default: true,
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
hstsSubdomains: {
|
||||||
|
default: true,
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
hstsPreload: {
|
||||||
|
default: true,
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
certType: {
|
||||||
|
default: 'letsEncrypt',
|
||||||
|
options: ['letsEncrypt', 'custom'],
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
letsEncryptEmail: {
|
||||||
|
default: '',
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
sslCertificate: {
|
||||||
|
default: '',
|
||||||
|
enabled: false,
|
||||||
|
},
|
||||||
|
sslCertificateKey: {
|
||||||
|
default: '',
|
||||||
|
enabled: false,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'DomainHTTPS',
|
name: 'DomainHTTPS', // Component name
|
||||||
|
display: 'HTTPS', // Display name for tab
|
||||||
|
key: 'https', // Key for data in parent
|
||||||
|
delegated: delegatedFromDefaults(defaults), // Data the parent will present here
|
||||||
props: {
|
props: {
|
||||||
data: Object,
|
data: Object, // Data delegated back to us from parent
|
||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
i18n,
|
i18n,
|
||||||
defaults,
|
|
||||||
...defaults,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
created () {
|
computed: computedFromDefaults(defaults), // Getters & setters for the delegated data
|
||||||
if (this.$props.data) {
|
|
||||||
for (const key in this.$props.data) {
|
|
||||||
if (key in defaults) {
|
|
||||||
this.$data[key] = this.$props.data[key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
exports() {
|
|
||||||
return Object.keys(defaults).reduce((prev, key) => {
|
|
||||||
prev[key] = this.$data[key];
|
|
||||||
return prev;
|
|
||||||
}, {});
|
|
||||||
},
|
|
||||||
},
|
|
||||||
changes() {
|
|
||||||
return Object.keys(defaults).filter(key => defaults[key] !== this.$data[key]).length;
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -4,43 +4,33 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import i18n from '../../i18n';
|
import i18n from '../../i18n';
|
||||||
|
import delegatedFromDefaults from '../../util/delegated_from_defaults';
|
||||||
|
import computedFromDefaults from '../../util/computed_from_defaults';
|
||||||
|
|
||||||
const defaults = {
|
const defaults = {
|
||||||
accessLog: false,
|
accessLog: {
|
||||||
errorLog: false,
|
default: false,
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
errorLog: {
|
||||||
|
default: false,
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'DomainLogging',
|
name: 'DomainLogging', // Component name
|
||||||
|
display: 'Logging', // Display name for tab
|
||||||
|
key: 'logging', // Key for data in parent
|
||||||
|
delegated: delegatedFromDefaults(defaults), // Data the parent will present here
|
||||||
props: {
|
props: {
|
||||||
data: Object,
|
data: Object, // Data delegated back to us from parent
|
||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
i18n,
|
i18n,
|
||||||
defaults,
|
|
||||||
...defaults,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
created () {
|
computed: computedFromDefaults(defaults), // Getters & setters for the delegated data
|
||||||
if (this.$props.data) {
|
|
||||||
for (const key in this.$props.data) {
|
|
||||||
if (key in defaults) {
|
|
||||||
this.$data[key] = this.$props.data[key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
exports() {
|
|
||||||
return Object.keys(defaults).reduce((prev, key) => {
|
|
||||||
prev[key] = this.$data[key];
|
|
||||||
return prev;
|
|
||||||
}, {});
|
|
||||||
},
|
|
||||||
changes() {
|
|
||||||
return Object.keys(defaults).filter(key => defaults[key] !== this.$data[key]).length;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -4,45 +4,41 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import i18n from '../../i18n';
|
import i18n from '../../i18n';
|
||||||
|
import delegatedFromDefaults from '../../util/delegated_from_defaults';
|
||||||
|
import computedFromDefaults from '../../util/computed_from_defaults';
|
||||||
|
|
||||||
const defaults = {
|
const defaults = {
|
||||||
php: true,
|
php: {
|
||||||
wordPressRules: false,
|
default: true,
|
||||||
drupalRules: false,
|
enabled: true,
|
||||||
magentoRules: false,
|
},
|
||||||
|
wordPressRules: {
|
||||||
|
default: false,
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
drupalRules: {
|
||||||
|
default: false,
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
magentoRules: {
|
||||||
|
default: false,
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'DomainPHP',
|
name: 'DomainPHP', // Component name
|
||||||
|
display: 'PHP', // Display name for tab
|
||||||
|
key: 'php', // Key for data in parent
|
||||||
|
delegated: delegatedFromDefaults(defaults), // Data the parent will present here
|
||||||
props: {
|
props: {
|
||||||
data: Object,
|
data: Object, // Data delegated back to us from parent
|
||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
i18n,
|
i18n,
|
||||||
defaults,
|
|
||||||
...defaults,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
created () {
|
computed: computedFromDefaults(defaults), // Getters & setters for the delegated data
|
||||||
if (this.$props.data) {
|
|
||||||
for (const key in this.$props.data) {
|
|
||||||
if (key in defaults) {
|
|
||||||
this.$data[key] = this.$props.data[key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
exports() {
|
|
||||||
return Object.keys(defaults).reduce((prev, key) => {
|
|
||||||
prev[key] = this.$data[key];
|
|
||||||
return prev;
|
|
||||||
}, {});
|
|
||||||
},
|
|
||||||
},
|
|
||||||
changes() {
|
|
||||||
return Object.keys(defaults).filter(key => defaults[key] !== this.$data[key]).length;
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -4,49 +4,57 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import i18n from '../../i18n';
|
import i18n from '../../i18n';
|
||||||
|
import delegatedFromDefaults from '../../util/delegated_from_defaults';
|
||||||
|
import computedFromDefaults from '../../util/computed_from_defaults';
|
||||||
|
|
||||||
const defaults = {
|
const defaults = {
|
||||||
frontend: false,
|
frontend: {
|
||||||
php: true,
|
default: false,
|
||||||
django: false,
|
enabled: true,
|
||||||
nodejs: false,
|
},
|
||||||
singlePageApplication: false,
|
php: {
|
||||||
wordPress: false,
|
default: true,
|
||||||
drupal: false,
|
enabled: true,
|
||||||
magento: false,
|
},
|
||||||
|
django: {
|
||||||
|
default: false,
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
nodejs: {
|
||||||
|
default: false,
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
singlePageApplication: {
|
||||||
|
default: false,
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
wordPress: {
|
||||||
|
default: false,
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
drupal: {
|
||||||
|
default: false,
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
magento: {
|
||||||
|
default: false,
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'DomainPresets',
|
name: 'DomainPresets', // Component name
|
||||||
|
display: 'Presets', // Display name for tab
|
||||||
|
key: 'presets', // Key for data in parent
|
||||||
|
delegated: delegatedFromDefaults(defaults), // Data the parent will present here
|
||||||
props: {
|
props: {
|
||||||
data: Object,
|
data: Object, // Data delegated back to us from parent
|
||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
i18n,
|
i18n,
|
||||||
defaults,
|
|
||||||
...defaults,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
created () {
|
computed: computedFromDefaults(defaults), // Getters & setters for the delegated data
|
||||||
if (this.$props.data) {
|
|
||||||
for (const key in this.$props.data) {
|
|
||||||
if (key in defaults) {
|
|
||||||
this.$data[key] = this.$props.data[key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
exports() {
|
|
||||||
return Object.keys(defaults).reduce((prev, key) => {
|
|
||||||
prev[key] = this.$data[key];
|
|
||||||
return prev;
|
|
||||||
}, {});
|
|
||||||
},
|
|
||||||
changes() {
|
|
||||||
return Object.keys(defaults).filter(key => defaults[key] !== this.$data[key]).length;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
Hello world python
|
Hello world python
|
||||||
<input v-model="test" type="text" />
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -17,11 +16,7 @@
|
||||||
},
|
},
|
||||||
djangoRules: {
|
djangoRules: {
|
||||||
default: false,
|
default: false,
|
||||||
enabled: true,
|
enabled: false,
|
||||||
},
|
|
||||||
test: {
|
|
||||||
default: '',
|
|
||||||
enabled: true,
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -4,44 +4,37 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import i18n from '../../i18n';
|
import i18n from '../../i18n';
|
||||||
|
import delegatedFromDefaults from '../../util/delegated_from_defaults';
|
||||||
|
import computedFromDefaults from '../../util/computed_from_defaults';
|
||||||
|
|
||||||
const defaults = {
|
const defaults = {
|
||||||
reverseProxy: false,
|
reverseProxy: {
|
||||||
path: '/',
|
default: false,
|
||||||
proxyPass: '',
|
enabled: true,
|
||||||
|
},
|
||||||
|
path: {
|
||||||
|
default: '/',
|
||||||
|
enabled: false,
|
||||||
|
},
|
||||||
|
proxyPass: {
|
||||||
|
default: 'http://127.0.0.1:3000',
|
||||||
|
enabled: false,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'DomainReverseProxy',
|
name: 'DomainReverseProxy', // Component name
|
||||||
|
display: 'Reverse proxy', // Display name for tab
|
||||||
|
key: 'reverseProxy', // Key for data in parent
|
||||||
|
delegated: delegatedFromDefaults(defaults), // Data the parent will present here
|
||||||
props: {
|
props: {
|
||||||
data: Object,
|
data: Object, // Data delegated back to us from parent
|
||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
i18n,
|
i18n,
|
||||||
defaults,
|
|
||||||
...defaults,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
created () {
|
computed: computedFromDefaults(defaults), // Getters & setters for the delegated data
|
||||||
if (this.$props.data) {
|
|
||||||
for (const key in this.$props.data) {
|
|
||||||
if (key in defaults) {
|
|
||||||
this.$data[key] = this.$props.data[key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
exports() {
|
|
||||||
return Object.keys(defaults).reduce((prev, key) => {
|
|
||||||
prev[key] = this.$data[key];
|
|
||||||
return prev;
|
|
||||||
}, {});
|
|
||||||
},
|
|
||||||
},
|
|
||||||
changes() {
|
|
||||||
return Object.keys(defaults).filter(key => defaults[key] !== this.$data[key]).length;
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -4,45 +4,43 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import i18n from '../../i18n';
|
import i18n from '../../i18n';
|
||||||
|
import delegatedFromDefaults from '../../util/delegated_from_defaults';
|
||||||
|
import computedFromDefaults from '../../util/computed_from_defaults';
|
||||||
|
|
||||||
const defaults = {
|
const defaults = {
|
||||||
root: true,
|
root: {
|
||||||
index: 'index.php',
|
default: true,
|
||||||
fallbackRouting: ['index.php'],
|
enabled: true,
|
||||||
legacyPhpRouting: false,
|
},
|
||||||
|
index: {
|
||||||
|
default: 'index.php',
|
||||||
|
options: ['index.html', 'index.php'],
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
fallbackRouting: {
|
||||||
|
default: ['index.php'],
|
||||||
|
options: ['index.html', 'index.php'],
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
legacyPhpRouting: {
|
||||||
|
default: false,
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'DomainRouting',
|
name: 'DomainRouting', // Component name
|
||||||
|
display: 'Routing', // Display name for tab
|
||||||
|
key: 'routing', // Key for data in parent
|
||||||
|
delegated: delegatedFromDefaults(defaults), // Data the parent will present here
|
||||||
props: {
|
props: {
|
||||||
data: Object,
|
data: Object, // Data delegated back to us from parent
|
||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
i18n,
|
i18n,
|
||||||
defaults,
|
|
||||||
...defaults,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
created () {
|
computed: computedFromDefaults(defaults), // Getters & setters for the delegated data
|
||||||
if (this.$props.data) {
|
|
||||||
for (const key in this.$props.data) {
|
|
||||||
if (key in defaults) {
|
|
||||||
this.$data[key] = this.$props.data[key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
exports() {
|
|
||||||
return Object.keys(defaults).reduce((prev, key) => {
|
|
||||||
prev[key] = this.$data[key];
|
|
||||||
return prev;
|
|
||||||
}, {});
|
|
||||||
},
|
|
||||||
changes() {
|
|
||||||
return Object.keys(defaults).filter(key => defaults[key] !== this.$data[key]).length;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -7,47 +7,57 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import i18n from '../../i18n';
|
import i18n from '../../i18n';
|
||||||
|
import delegatedFromDefaults from '../../util/delegated_from_defaults';
|
||||||
|
import computedFromDefaults from '../../util/computed_from_defaults';
|
||||||
|
|
||||||
const defaults = {
|
const defaults = {
|
||||||
domain: 'example.com',
|
domain: {
|
||||||
path: '',
|
default: 'example.com',
|
||||||
documentRoot: '',
|
enabled: true,
|
||||||
wwwSubdomain: false,
|
},
|
||||||
cdnSubdomain: false,
|
path: {
|
||||||
redirectSubdomains: true,
|
default: '',
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
documentRoot: {
|
||||||
|
default: '/public',
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
wwwSubdomain: {
|
||||||
|
default: false,
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
cdnSubdomain: {
|
||||||
|
default: false,
|
||||||
|
enabled: false,
|
||||||
|
},
|
||||||
|
redirectSubdomains: {
|
||||||
|
default: true,
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
listenIpv4: {
|
||||||
|
default: '*',
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
listenIpv6: {
|
||||||
|
default: '::',
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'DomainServer',
|
name: 'DomainServer', // Component name
|
||||||
|
display: 'Server', // Display name for tab
|
||||||
|
key: 'server', // Key for data in parent
|
||||||
|
delegated: delegatedFromDefaults(defaults), // Data the parent will present here
|
||||||
props: {
|
props: {
|
||||||
data: Object,
|
data: Object, // Data delegated back to us from parent
|
||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
i18n,
|
i18n,
|
||||||
defaults,
|
|
||||||
...defaults,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
created () {
|
computed: computedFromDefaults(defaults), // Getters & setters for the delegated data
|
||||||
if (this.$props.data) {
|
|
||||||
for (const key in this.$props.data) {
|
|
||||||
if (key in defaults) {
|
|
||||||
this.$data[key] = this.$props.data[key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
exports() {
|
|
||||||
return Object.keys(defaults).reduce((prev, key) => {
|
|
||||||
prev[key] = this.$data[key];
|
|
||||||
return prev;
|
|
||||||
}, {});
|
|
||||||
},
|
|
||||||
changes() {
|
|
||||||
return Object.keys(defaults).filter(key => defaults[key] !== this.$data[key]).length;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
Reference in New Issue