for project changes, make the description into a colored diff that's easier to compare
This commit is contained in:
18
package-lock.json
generated
18
package-lock.json
generated
@@ -60,6 +60,7 @@
|
|||||||
"dexie-export-import": "^4.1.4",
|
"dexie-export-import": "^4.1.4",
|
||||||
"did-jwt": "^7.4.7",
|
"did-jwt": "^7.4.7",
|
||||||
"did-resolver": "^4.1.0",
|
"did-resolver": "^4.1.0",
|
||||||
|
"diff": "^8.0.2",
|
||||||
"dotenv": "^16.0.3",
|
"dotenv": "^16.0.3",
|
||||||
"electron-builder": "^26.0.12",
|
"electron-builder": "^26.0.12",
|
||||||
"ethereum-cryptography": "^2.1.3",
|
"ethereum-cryptography": "^2.1.3",
|
||||||
@@ -9883,6 +9884,15 @@
|
|||||||
"yargs": "^17.2.1"
|
"yargs": "^17.2.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@trapezedev/project/node_modules/diff": {
|
||||||
|
"version": "5.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
|
||||||
|
"integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.3.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@trapezedev/project/node_modules/env-paths": {
|
"node_modules/@trapezedev/project/node_modules/env-paths": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz",
|
||||||
@@ -15869,11 +15879,9 @@
|
|||||||
"license": "Apache-2.0"
|
"license": "Apache-2.0"
|
||||||
},
|
},
|
||||||
"node_modules/diff": {
|
"node_modules/diff": {
|
||||||
"version": "5.2.0",
|
"version": "8.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/diff/-/diff-8.0.2.tgz",
|
||||||
"integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
|
"integrity": "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==",
|
||||||
"dev": true,
|
|
||||||
"license": "BSD-3-Clause",
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.3.1"
|
"node": ">=0.3.1"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -189,6 +189,7 @@
|
|||||||
"dexie-export-import": "^4.1.4",
|
"dexie-export-import": "^4.1.4",
|
||||||
"did-jwt": "^7.4.7",
|
"did-jwt": "^7.4.7",
|
||||||
"did-resolver": "^4.1.0",
|
"did-resolver": "^4.1.0",
|
||||||
|
"diff": "^8.0.2",
|
||||||
"dotenv": "^16.0.3",
|
"dotenv": "^16.0.3",
|
||||||
"electron-builder": "^26.0.12",
|
"electron-builder": "^26.0.12",
|
||||||
"ethereum-cryptography": "^2.1.3",
|
"ethereum-cryptography": "^2.1.3",
|
||||||
|
|||||||
@@ -259,26 +259,40 @@
|
|||||||
>
|
>
|
||||||
{{ getDisplayFieldName(field) }}
|
{{ getDisplayFieldName(field) }}
|
||||||
</td>
|
</td>
|
||||||
|
<template v-if="field === 'description'">
|
||||||
|
<td
|
||||||
|
colspan="2"
|
||||||
|
class="border border-gray-300 px-3 py-2 break-words align-top"
|
||||||
|
>
|
||||||
|
<div class="w-3/5 mx-auto">
|
||||||
|
<div
|
||||||
|
v-for="(change, index) in getDescriptionDiff(
|
||||||
|
difference.old,
|
||||||
|
difference.new,
|
||||||
|
)"
|
||||||
|
:key="index"
|
||||||
|
>
|
||||||
|
<vue-markdown
|
||||||
|
:source="change.value"
|
||||||
|
:style="getDiffStyle(change)"
|
||||||
|
class="markdown-content inline-block"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
<td
|
<td
|
||||||
class="border border-gray-300 px-3 py-2 text-gray-600 break-words align-top"
|
class="border border-gray-300 px-3 py-2 text-gray-600 break-words align-top"
|
||||||
>
|
>
|
||||||
<vue-markdown
|
<span>{{ formatFieldValue(difference.old) }}</span>
|
||||||
v-if="field === 'description' && difference.old"
|
|
||||||
:source="formatFieldValue(difference.old)"
|
|
||||||
class="markdown-content"
|
|
||||||
/>
|
|
||||||
<span v-else>{{ formatFieldValue(difference.old) }}</span>
|
|
||||||
</td>
|
</td>
|
||||||
<td
|
<td
|
||||||
class="border border-gray-300 px-3 py-2 text-green-700 font-medium break-words align-top"
|
class="border border-gray-300 px-3 py-2 text-green-700 font-medium break-words align-top"
|
||||||
>
|
>
|
||||||
<vue-markdown
|
<span>{{ formatFieldValue(difference.new) }}</span>
|
||||||
v-if="field === 'description' && difference.new"
|
|
||||||
:source="formatFieldValue(difference.new)"
|
|
||||||
class="markdown-content"
|
|
||||||
/>
|
|
||||||
<span v-else>{{ formatFieldValue(difference.new) }}</span>
|
|
||||||
</td>
|
</td>
|
||||||
|
</template>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@@ -309,6 +323,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Component, Vue } from "vue-facing-decorator";
|
import { Component, Vue } from "vue-facing-decorator";
|
||||||
import VueMarkdown from "vue-markdown-render";
|
import VueMarkdown from "vue-markdown-render";
|
||||||
|
import { diffLines, Change } from "diff";
|
||||||
|
|
||||||
import GiftedDialog from "../components/GiftedDialog.vue";
|
import GiftedDialog from "../components/GiftedDialog.vue";
|
||||||
import QuickNav from "../components/QuickNav.vue";
|
import QuickNav from "../components/QuickNav.vue";
|
||||||
@@ -915,5 +930,34 @@ export default class NewActivityView extends Vue {
|
|||||||
return "New Location";
|
return "New Location";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Computes the line-by-line diff between two description strings
|
||||||
|
*
|
||||||
|
* @param oldValue The old description value
|
||||||
|
* @param newValue The new description value
|
||||||
|
* @returns An array of Change objects from the diff library
|
||||||
|
*/
|
||||||
|
getDescriptionDiff(oldValue: unknown, newValue: unknown): Change[] {
|
||||||
|
const oldStr = this.formatFieldValue(oldValue);
|
||||||
|
const newStr = this.formatFieldValue(newValue);
|
||||||
|
return diffLines(oldStr, newStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the background color style for a diff change
|
||||||
|
*
|
||||||
|
* @param change A Change object from the diff library
|
||||||
|
* @returns A CSS style object with background color
|
||||||
|
*/
|
||||||
|
getDiffStyle(change: Change): Record<string, string> {
|
||||||
|
if (change.added) {
|
||||||
|
return { backgroundColor: "#d4edda" }; // Light green
|
||||||
|
}
|
||||||
|
if (change.removed) {
|
||||||
|
return { backgroundColor: "#f8d7da" }; // Light red
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user