Use new delegation for all tabs
parent
10c7ced0b7
commit
1df3ab88f6
|
@ -33,6 +33,7 @@
|
|||
"dependencies": {
|
||||
"@babel/runtime": "^7.9.2",
|
||||
"babel-polyfill": "^6.26.0",
|
||||
"clone": "^2.1.2",
|
||||
"do-bulma": "git+https://github.com/do-community/do-bulma.git",
|
||||
"do-vue": "git+https://github.com/do-community/do-vue.git",
|
||||
"parcel-bundler": "^1.12.4",
|
||||
|
|
|
@ -30,7 +30,7 @@ limitations under the License.
|
|||
<div class="tabs">
|
||||
<ul>
|
||||
<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>
|
||||
</ul>
|
||||
</div>
|
||||
|
@ -48,6 +48,7 @@ limitations under the License.
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import clone from 'clone';
|
||||
import i18n from '../i18n';
|
||||
import Header from 'do-vue/src/templates/header';
|
||||
import Footer from 'do-vue/src/templates/footer';
|
||||
|
@ -64,7 +65,8 @@ limitations under the License.
|
|||
return {
|
||||
i18n,
|
||||
domains: [
|
||||
Domain.delegated,
|
||||
clone(Domain.delegated),
|
||||
clone(Domain.delegated),
|
||||
],
|
||||
active: 0,
|
||||
};
|
||||
|
@ -72,8 +74,9 @@ limitations under the License.
|
|||
methods: {
|
||||
changes(index) {
|
||||
const data = this.$data.domains[index];
|
||||
const changes = Object.values(data).reduce((prev, current) => {
|
||||
prev += Object.values(current).filter(d => d.default !== d.computed).length;
|
||||
const changes = Object.entries(data).reduce((prev, current) => {
|
||||
if (current[0] === 'presets') return prev; // Ignore changes from presets
|
||||
prev += Object.values(current[1]).filter(d => d.default !== d.computed).length;
|
||||
return prev;
|
||||
}, 0);
|
||||
if (changes) return ` (${changes.toLocaleString()})`;
|
||||
|
|
|
@ -34,9 +34,9 @@ limitations under the License.
|
|||
</template>
|
||||
|
||||
<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) => {
|
||||
prev[tab.key] = tab.delegated;
|
||||
return prev;
|
||||
|
@ -56,6 +56,7 @@ limitations under the License.
|
|||
},
|
||||
methods: {
|
||||
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;
|
||||
if (changes) return ` (${changes.toLocaleString()})`;
|
||||
return '';
|
||||
|
|
|
@ -4,51 +4,66 @@
|
|||
|
||||
<script>
|
||||
import i18n from '../../i18n';
|
||||
import delegatedFromDefaults from '../../util/delegated_from_defaults';
|
||||
import computedFromDefaults from '../../util/computed_from_defaults';
|
||||
|
||||
const defaults = {
|
||||
https: true,
|
||||
http2: true,
|
||||
forceHttps: true,
|
||||
hsts: true,
|
||||
hstsSubdomains: true,
|
||||
hstsPreload: true,
|
||||
certType: 'letsEncrypt',
|
||||
letsEncryptEmail: '',
|
||||
sslCertificate: '',
|
||||
sslCertificateKey: '',
|
||||
https: {
|
||||
default: true,
|
||||
enabled: true,
|
||||
},
|
||||
http2: {
|
||||
default: true,
|
||||
enabled: true,
|
||||
},
|
||||
forceHttps: {
|
||||
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 {
|
||||
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: {
|
||||
data: Object,
|
||||
data: Object, // Data delegated back to us from parent
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
i18n,
|
||||
defaults,
|
||||
...defaults,
|
||||
};
|
||||
},
|
||||
created () {
|
||||
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;
|
||||
},
|
||||
computed: computedFromDefaults(defaults), // Getters & setters for the delegated data
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -4,43 +4,33 @@
|
|||
|
||||
<script>
|
||||
import i18n from '../../i18n';
|
||||
import delegatedFromDefaults from '../../util/delegated_from_defaults';
|
||||
import computedFromDefaults from '../../util/computed_from_defaults';
|
||||
|
||||
const defaults = {
|
||||
accessLog: false,
|
||||
errorLog: false,
|
||||
accessLog: {
|
||||
default: false,
|
||||
enabled: true,
|
||||
},
|
||||
errorLog: {
|
||||
default: false,
|
||||
enabled: true,
|
||||
},
|
||||
};
|
||||
|
||||
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: {
|
||||
data: Object,
|
||||
data: Object, // Data delegated back to us from parent
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
i18n,
|
||||
defaults,
|
||||
...defaults,
|
||||
};
|
||||
},
|
||||
created () {
|
||||
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;
|
||||
},
|
||||
},
|
||||
computed: computedFromDefaults(defaults), // Getters & setters for the delegated data
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -4,45 +4,41 @@
|
|||
|
||||
<script>
|
||||
import i18n from '../../i18n';
|
||||
import delegatedFromDefaults from '../../util/delegated_from_defaults';
|
||||
import computedFromDefaults from '../../util/computed_from_defaults';
|
||||
|
||||
const defaults = {
|
||||
php: true,
|
||||
wordPressRules: false,
|
||||
drupalRules: false,
|
||||
magentoRules: false,
|
||||
php: {
|
||||
default: true,
|
||||
enabled: true,
|
||||
},
|
||||
wordPressRules: {
|
||||
default: false,
|
||||
enabled: true,
|
||||
},
|
||||
drupalRules: {
|
||||
default: false,
|
||||
enabled: true,
|
||||
},
|
||||
magentoRules: {
|
||||
default: false,
|
||||
enabled: true,
|
||||
},
|
||||
};
|
||||
|
||||
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: {
|
||||
data: Object,
|
||||
data: Object, // Data delegated back to us from parent
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
i18n,
|
||||
defaults,
|
||||
...defaults,
|
||||
};
|
||||
},
|
||||
created () {
|
||||
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;
|
||||
},
|
||||
computed: computedFromDefaults(defaults), // Getters & setters for the delegated data
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -4,49 +4,57 @@
|
|||
|
||||
<script>
|
||||
import i18n from '../../i18n';
|
||||
import delegatedFromDefaults from '../../util/delegated_from_defaults';
|
||||
import computedFromDefaults from '../../util/computed_from_defaults';
|
||||
|
||||
const defaults = {
|
||||
frontend: false,
|
||||
php: true,
|
||||
django: false,
|
||||
nodejs: false,
|
||||
singlePageApplication: false,
|
||||
wordPress: false,
|
||||
drupal: false,
|
||||
magento: false,
|
||||
frontend: {
|
||||
default: false,
|
||||
enabled: true,
|
||||
},
|
||||
php: {
|
||||
default: true,
|
||||
enabled: true,
|
||||
},
|
||||
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 {
|
||||
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: {
|
||||
data: Object,
|
||||
data: Object, // Data delegated back to us from parent
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
i18n,
|
||||
defaults,
|
||||
...defaults,
|
||||
};
|
||||
},
|
||||
created () {
|
||||
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;
|
||||
},
|
||||
},
|
||||
computed: computedFromDefaults(defaults), // Getters & setters for the delegated data
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<template>
|
||||
<div>
|
||||
Hello world python
|
||||
<input v-model="test" type="text" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
@ -17,11 +16,7 @@
|
|||
},
|
||||
djangoRules: {
|
||||
default: false,
|
||||
enabled: true,
|
||||
},
|
||||
test: {
|
||||
default: '',
|
||||
enabled: true,
|
||||
enabled: false,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -4,44 +4,37 @@
|
|||
|
||||
<script>
|
||||
import i18n from '../../i18n';
|
||||
import delegatedFromDefaults from '../../util/delegated_from_defaults';
|
||||
import computedFromDefaults from '../../util/computed_from_defaults';
|
||||
|
||||
const defaults = {
|
||||
reverseProxy: false,
|
||||
path: '/',
|
||||
proxyPass: '',
|
||||
reverseProxy: {
|
||||
default: false,
|
||||
enabled: true,
|
||||
},
|
||||
path: {
|
||||
default: '/',
|
||||
enabled: false,
|
||||
},
|
||||
proxyPass: {
|
||||
default: 'http://127.0.0.1:3000',
|
||||
enabled: false,
|
||||
},
|
||||
};
|
||||
|
||||
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: {
|
||||
data: Object,
|
||||
data: Object, // Data delegated back to us from parent
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
i18n,
|
||||
defaults,
|
||||
...defaults,
|
||||
};
|
||||
},
|
||||
created () {
|
||||
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;
|
||||
},
|
||||
computed: computedFromDefaults(defaults), // Getters & setters for the delegated data
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -4,45 +4,43 @@
|
|||
|
||||
<script>
|
||||
import i18n from '../../i18n';
|
||||
import delegatedFromDefaults from '../../util/delegated_from_defaults';
|
||||
import computedFromDefaults from '../../util/computed_from_defaults';
|
||||
|
||||
const defaults = {
|
||||
root: true,
|
||||
index: 'index.php',
|
||||
fallbackRouting: ['index.php'],
|
||||
legacyPhpRouting: false,
|
||||
root: {
|
||||
default: true,
|
||||
enabled: true,
|
||||
},
|
||||
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 {
|
||||
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: {
|
||||
data: Object,
|
||||
data: Object, // Data delegated back to us from parent
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
i18n,
|
||||
defaults,
|
||||
...defaults,
|
||||
};
|
||||
},
|
||||
created () {
|
||||
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;
|
||||
},
|
||||
},
|
||||
computed: computedFromDefaults(defaults), // Getters & setters for the delegated data
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -7,47 +7,57 @@
|
|||
|
||||
<script>
|
||||
import i18n from '../../i18n';
|
||||
import delegatedFromDefaults from '../../util/delegated_from_defaults';
|
||||
import computedFromDefaults from '../../util/computed_from_defaults';
|
||||
|
||||
const defaults = {
|
||||
domain: 'example.com',
|
||||
path: '',
|
||||
documentRoot: '',
|
||||
wwwSubdomain: false,
|
||||
cdnSubdomain: false,
|
||||
redirectSubdomains: true,
|
||||
domain: {
|
||||
default: 'example.com',
|
||||
enabled: true,
|
||||
},
|
||||
path: {
|
||||
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 {
|
||||
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: {
|
||||
data: Object,
|
||||
data: Object, // Data delegated back to us from parent
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
i18n,
|
||||
defaults,
|
||||
...defaults,
|
||||
};
|
||||
},
|
||||
created () {
|
||||
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;
|
||||
},
|
||||
},
|
||||
computed: computedFromDefaults(defaults), // Getters & setters for the delegated data
|
||||
};
|
||||
</script>
|
||||
|
|
Loading…
Reference in New Issue