Use new delegation for all tabs

pull/111/head
MattIPv4 2020-04-28 12:26:46 +01:00
parent 10c7ced0b7
commit 1df3ab88f6
11 changed files with 227 additions and 217 deletions

View File

@ -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",

View File

@ -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()})`;

View File

@ -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 '';

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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,
}, },
}; };

View File

@ -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>

View File

@ -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>

View File

@ -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>