Pass full rendered file path into diff

This commit is contained in:
MattIPv4 2021-07-27 10:23:38 +01:00
parent 2cb70d908c
commit 90fdd62406
1 changed files with 22 additions and 11 deletions

View File

@ -193,6 +193,9 @@ THE SOFTWARE.
confFiles() {
return generators(this.$data.domains.filter(d => d !== null), this.$data.global);
},
fullConfFiles() {
return this.addConfigDirectory(this.confFiles);
},
lang: {
get() {
return this.$data.global.app.lang.value;
@ -212,7 +215,7 @@ THE SOFTWARE.
},
},
watch: {
confFiles(newConf, oldConf) {
fullConfFiles(newConf, oldConf) {
if (this.$data.confWatcherWaiting) return;
// Set that we're waiting for changes to stop
@ -318,22 +321,28 @@ THE SOFTWARE.
},
checkChange(oldConf) {
// If nothing has changed for a tick, we can use the config files
if (oldConf === this.confFiles) {
if (oldConf === this.fullConfFiles) {
// If this is the initial data load on app start, run the diff logic
// but with previous as this so that we don't highlight any changes
if (!this.$data.ready) {
this.$data.confFilesPrevious = this.confFiles;
this.$data.confFilesPrevious = this.fullConfFiles;
this.$nextTick(() => { this.$data.ready = true; });
}
// Do the diff!
this.updateDiff(this.confFiles, this.$data.confFilesPrevious);
this.updateDiff(this.fullConfFiles, this.$data.confFilesPrevious);
return;
}
// Check next tick to see if anything has changed again
this.$nextTick(() => this.checkChange(this.confFiles));
},
addConfigDirectory(conf) {
return Object.entries(conf).reduce((obj, [ file, content ]) => ({
...obj,
[`${this.$data.global.nginx.nginxConfigDirectory.computed}/${file}`]: content,
}), {});
},
updateDiff(newConf, oldConf) {
try {
// Calculate the diff & highlight after render
@ -341,14 +350,14 @@ THE SOFTWARE.
highlightFunction: value => `<mark>${value}</mark>`,
});
this.$data.confFilesOutput = Object.entries(diffConf).map(([ file, { name, content } ]) => {
console.log(file, name);
const diffName = name.filter(x => !x.removed).map(x => x.value).join('');
const confName = `${escape(this.$data.global.nginx.nginxConfigDirectory.computed)}/${diffName}`;
const diffContent = content.filter(x => !x.removed).map(x => x.value).join('');
return [
confName,
diffName,
diffContent,
`${sha2_256(confName)}-${sha2_256(diffContent)}`,
`${sha2_256(diffName)}-${sha2_256(diffContent)}`,
file,
];
});
@ -356,11 +365,13 @@ THE SOFTWARE.
// If diff generation goes wrong, don't show any diff
console.error(e);
this.$data.confFilesOutput = Object.entries(newConf).map(([ name, content ]) => {
const confName = `${escape(this.$data.global.nginx.nginxConfigDirectory.computed)}/${name}`;
const safeName = escape(name);
const safeContent = escape(content);
return [
confName,
content,
`${sha2_256(confName)}-${sha2_256(content)}`,
safeName,
safeContent,
`${sha2_256(safeName)}-${sha2_256(safeContent)}`,
name,
];
});