@hostlink/nuxt-light 1.8.0 → 1.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/module.json
CHANGED
|
@@ -3,6 +3,17 @@ import { Dialog, Notify } from "quasar"
|
|
|
3
3
|
import { computed, ref, reactive } from "vue";
|
|
4
4
|
import { q, m } from "#imports";
|
|
5
5
|
|
|
6
|
+
import * as Diff2Html from 'diff2html';
|
|
7
|
+
import 'diff2html/bundles/css/diff2html.min.css';
|
|
8
|
+
|
|
9
|
+
/* const diffs = '--- a/server/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go\n+++ b/server/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go\n@@ -1035,6 +1035,17 @@ func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (\n \n // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n \n+func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n+\tr0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)))\n+\tn = int(r0)\n+\tif e1 != 0 {\n+\t\terr = errnoErr(e1)\n+\t}\n+\treturn\n+}\n+\n+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n+\n func read(fd int, p []byte) (n int, err error) {\n \tvar _p0 unsafe.Pointer\n \tif len(p) > 0 {\n';
|
|
10
|
+
const html = Diff2Html.html(diffs, {
|
|
11
|
+
drawFileList: true,
|
|
12
|
+
matching: 'lines',
|
|
13
|
+
outputFormat: 'side-by-side',
|
|
14
|
+
});
|
|
15
|
+
*/
|
|
16
|
+
|
|
6
17
|
const props = defineProps({
|
|
7
18
|
modelId: {
|
|
8
19
|
type: String,
|
|
@@ -25,7 +36,8 @@ const { revisionsByModel } = await q({
|
|
|
25
36
|
revisionBy: true,
|
|
26
37
|
createdTime: true,
|
|
27
38
|
content: true,
|
|
28
|
-
delta: true
|
|
39
|
+
delta: true,
|
|
40
|
+
diff: true
|
|
29
41
|
}
|
|
30
42
|
})
|
|
31
43
|
|
|
@@ -102,28 +114,50 @@ const getFilteredContent = computed(() => {
|
|
|
102
114
|
} else {
|
|
103
115
|
return selectedRevision.value.content;
|
|
104
116
|
}
|
|
105
|
-
|
|
106
117
|
})
|
|
118
|
+
|
|
119
|
+
const outputFormat = ref('side-by-side');
|
|
120
|
+
const getDiffHtml = (diffs) => {
|
|
121
|
+
if (!diffs) {
|
|
122
|
+
return '';
|
|
123
|
+
}
|
|
124
|
+
return Diff2Html.html(diffs, {
|
|
125
|
+
drawFileList: false,
|
|
126
|
+
matching: 'lines',
|
|
127
|
+
outputFormat: outputFormat.value,
|
|
128
|
+
highlight: true
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
|
|
107
133
|
</script>
|
|
134
|
+
|
|
108
135
|
<template>
|
|
109
136
|
<div>
|
|
110
137
|
|
|
111
|
-
|
|
138
|
+
<div v-html="html"></div>
|
|
112
139
|
<q-dialog v-model="showDialog" full-height full-width>
|
|
113
140
|
<q-card>
|
|
114
141
|
<q-toolbar>
|
|
115
142
|
<l-btn label="Restore" icon="sym_o_restore" permission="revision.restore" @click="onRestore"
|
|
116
143
|
:disabled="!isAllowRestore" />
|
|
117
144
|
|
|
118
|
-
<q-checkbox label="Show
|
|
145
|
+
<q-checkbox label="Show changed only" v-model="showOnlyDelta" :color="$light.color"></q-checkbox>
|
|
146
|
+
|
|
147
|
+
<q-btn-toggle class="q-mx-md" v-model="outputFormat" :toggle-color="$light.color" :options="[
|
|
148
|
+
{ label: 'side-by-side', value: 'side-by-side' }, { label: 'line-by-line', value: 'line-by-line' }
|
|
149
|
+
]" />
|
|
119
150
|
<q-space />
|
|
120
151
|
<q-btn flat round dense icon="close" @click="showDialog = false" />
|
|
121
152
|
</q-toolbar>
|
|
122
153
|
|
|
123
154
|
|
|
124
155
|
<div class="q-pa-md">
|
|
125
|
-
|
|
126
|
-
|
|
156
|
+
|
|
157
|
+
<div class="text-h6 q-mb-md">
|
|
158
|
+
Revision by: {{ selectedRevision.revisionBy }} <br>
|
|
159
|
+
Created at: {{ selectedRevision.createdTime }}
|
|
160
|
+
|
|
127
161
|
</div>
|
|
128
162
|
|
|
129
163
|
<q-markup-table dense separator="cell" flat bordered>
|
|
@@ -135,23 +169,34 @@ const getFilteredContent = computed(() => {
|
|
|
135
169
|
</th>
|
|
136
170
|
<th>Field</th>
|
|
137
171
|
<th>Value</th>
|
|
138
|
-
<th>
|
|
172
|
+
<th>Changed</th>
|
|
139
173
|
</tr>
|
|
140
174
|
</thead>
|
|
141
175
|
<tbody>
|
|
142
|
-
<
|
|
143
|
-
|
|
144
|
-
<
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
<
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
176
|
+
<template v-for="(value, key) in getFilteredContent" :key="key">
|
|
177
|
+
|
|
178
|
+
<tr>
|
|
179
|
+
|
|
180
|
+
<td><q-checkbox v-model="restore_fields" :val="key"
|
|
181
|
+
:color="$light.color"></q-checkbox>
|
|
182
|
+
</td>
|
|
183
|
+
<td :class="{ 'bg-yellow-3': selectedRevision.delta[key] != undefined }">{{ key }}
|
|
184
|
+
</td>
|
|
185
|
+
<td>
|
|
186
|
+
<pre>{{ value }}</pre>
|
|
187
|
+
</td>
|
|
188
|
+
<td>
|
|
189
|
+
<pre>{{ selectedRevision.delta[key] }}</pre>
|
|
190
|
+
</td>
|
|
191
|
+
|
|
192
|
+
</tr>
|
|
193
|
+
|
|
194
|
+
<tr v-if="getDiffHtml(selectedRevision.diff[key])">
|
|
195
|
+
<td colspan="4">
|
|
196
|
+
<div v-html="getDiffHtml(selectedRevision.diff[key])"></div>
|
|
197
|
+
</td>
|
|
198
|
+
</tr>
|
|
199
|
+
</template>
|
|
155
200
|
</tbody>
|
|
156
201
|
|
|
157
202
|
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { computed } from 'vue';
|
|
3
|
+
import { format } from "quasar"
|
|
4
|
+
const { humanStorageSize } = format
|
|
5
|
+
const props = defineProps({
|
|
6
|
+
storage: {
|
|
7
|
+
type: Object,
|
|
8
|
+
required: true
|
|
9
|
+
},
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
const usagePercent = computed(() => {
|
|
14
|
+
return Math.round((props.storage.totalSpace - props.storage.freeSpace) / props.storage.totalSpace)
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
const progressColor = computed(() => {
|
|
18
|
+
if (usagePercent.value > 0.95) {
|
|
19
|
+
return "negative"
|
|
20
|
+
}
|
|
21
|
+
if (usagePercent.value > 0.9) {
|
|
22
|
+
return "warning"
|
|
23
|
+
}
|
|
24
|
+
return "primary"
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
</script>
|
|
28
|
+
<template>
|
|
29
|
+
<q-card>
|
|
30
|
+
<q-card-section>
|
|
31
|
+
{{ $t("Storage") }}
|
|
32
|
+
<q-linear-progress rounded size="20px" :value="usagePercent" :color="progressColor" class="q-mt-sm" />
|
|
33
|
+
{{ $t('storage_usage', [humanStorageSize(storage.freeSpace), humanStorageSize(storage.totalSpace)]) }}
|
|
34
|
+
</q-card-section>
|
|
35
|
+
</q-card>
|
|
36
|
+
</template>
|
|
@@ -3,29 +3,56 @@ import { useRoute, useRouter } from 'vue-router';
|
|
|
3
3
|
import { useLight, q, m } from "#imports";
|
|
4
4
|
import { useQuasar, Loading, Dialog } from 'quasar';
|
|
5
5
|
import { useI18n } from 'vue-i18n';
|
|
6
|
-
import { ref, computed, reactive, provide, watch, toRaw
|
|
6
|
+
import { ref, computed, reactive, provide, watch, toRaw } from 'vue';
|
|
7
7
|
import { useRuntimeConfig } from 'nuxt/app';
|
|
8
8
|
|
|
9
9
|
Loading.show()
|
|
10
|
-
|
|
11
|
-
/* import { download } from './../lib/SystemValue'
|
|
12
|
-
await download();
|
|
13
|
-
*/
|
|
10
|
+
|
|
14
11
|
const config = useRuntimeConfig();
|
|
15
12
|
|
|
16
13
|
const appVersion = config.public.appVersion ?? '0.0.1';
|
|
17
14
|
|
|
18
15
|
const quasar = useQuasar();
|
|
19
16
|
const tt = await q({
|
|
20
|
-
system:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
17
|
+
system: {
|
|
18
|
+
devMode: true,
|
|
19
|
+
time: true,
|
|
20
|
+
storage: {
|
|
21
|
+
freeSpace: true,
|
|
22
|
+
usageSpace: true,
|
|
23
|
+
totalSpace: true,
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
app: {
|
|
27
|
+
menus: true,
|
|
28
|
+
viewAsMode: true,
|
|
29
|
+
languages: true,
|
|
30
|
+
copyrightName: true,
|
|
31
|
+
copyrightYear: true,
|
|
32
|
+
hasFavorite: true,
|
|
33
|
+
i18nMessages: {
|
|
34
|
+
name: true,
|
|
35
|
+
value: true
|
|
36
|
+
}
|
|
37
|
+
}, my: {
|
|
38
|
+
username: true,
|
|
39
|
+
first_name: true,
|
|
40
|
+
last_name: true,
|
|
41
|
+
roles: true,
|
|
42
|
+
styles: true,
|
|
43
|
+
language: true,
|
|
44
|
+
permissions: true,
|
|
45
|
+
default_page: true,
|
|
46
|
+
myFavorites: {
|
|
47
|
+
my_favorite_id: true,
|
|
48
|
+
label: true,
|
|
49
|
+
path: true,
|
|
50
|
+
icon: true
|
|
51
|
+
}
|
|
52
|
+
}
|
|
27
53
|
})
|
|
28
54
|
|
|
55
|
+
|
|
29
56
|
let app = tt.app
|
|
30
57
|
let my = reactive(tt.my)
|
|
31
58
|
|
|
@@ -54,13 +81,6 @@ i18n.locale = my.language || 'en';
|
|
|
54
81
|
|
|
55
82
|
let system = tt.system;
|
|
56
83
|
|
|
57
|
-
if (light.isGranted("system.storage")) {
|
|
58
|
-
let s = await q("system", ["diskFreeSpace", "diskUsageSpace", "diskTotalSpace", "diskFreeSpacePercent"]);
|
|
59
|
-
//merge system value
|
|
60
|
-
system = { ...system, ...s };
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
|
|
64
84
|
// message
|
|
65
85
|
let messages = i18n.messages.value[i18n.locale];
|
|
66
86
|
for (let t of app.i18nMessages) {
|
|
@@ -168,35 +188,17 @@ const exitViewAs = async () => {
|
|
|
168
188
|
}
|
|
169
189
|
|
|
170
190
|
const storageColor = computed(() => {
|
|
171
|
-
if (system) {
|
|
172
|
-
|
|
191
|
+
if (system.storage) {
|
|
192
|
+
const percent = system.storage.freeSpace / system.storage.totalSpace;
|
|
193
|
+
if (percent < 0.05) {
|
|
173
194
|
return "negative"
|
|
174
195
|
}
|
|
175
|
-
if (
|
|
196
|
+
if (percent < 0.1) {
|
|
176
197
|
return "warning"
|
|
177
198
|
}
|
|
178
199
|
}
|
|
179
200
|
})
|
|
180
201
|
|
|
181
|
-
const storageProgressColor = computed(() => {
|
|
182
|
-
if (system) {
|
|
183
|
-
if (system.diskFreeSpacePercent < 0.05) {
|
|
184
|
-
return "negative"
|
|
185
|
-
}
|
|
186
|
-
if (system.diskFreeSpacePercent < 0.1) {
|
|
187
|
-
return "warning"
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
return "primary"
|
|
191
|
-
})
|
|
192
|
-
|
|
193
|
-
const storageUsagePercent = computed(() => {
|
|
194
|
-
if (system) {
|
|
195
|
-
return 1 - system.diskFreeSpacePercent;
|
|
196
|
-
}
|
|
197
|
-
return 0;
|
|
198
|
-
})
|
|
199
|
-
|
|
200
202
|
const containerClass = computed(() => {
|
|
201
203
|
return (light.theme == 'dark') ? {} : { 'bg-grey-2': true }
|
|
202
204
|
})
|
|
@@ -223,8 +225,6 @@ const onToggleFav = async () => {
|
|
|
223
225
|
|
|
224
226
|
//reload my.myFavorites
|
|
225
227
|
light.reloadMyFavorites();
|
|
226
|
-
|
|
227
|
-
|
|
228
228
|
return;
|
|
229
229
|
}
|
|
230
230
|
|
|
@@ -320,24 +320,13 @@ if (route.fullPath == "/" && my.default_page) {
|
|
|
320
320
|
</q-item>
|
|
321
321
|
</q-list>
|
|
322
322
|
</q-menu>
|
|
323
|
-
|
|
324
|
-
|
|
325
323
|
</q-btn>
|
|
326
324
|
|
|
327
|
-
<q-btn icon="sym_o_storage" flat round dense class="q-mr-sm" v-if="system"
|
|
325
|
+
<q-btn icon="sym_o_storage" flat round dense class="q-mr-sm" v-if="system.storage"
|
|
326
|
+
:color="storageColor">
|
|
328
327
|
<q-menu>
|
|
329
|
-
<
|
|
330
|
-
<q-card-section>
|
|
331
|
-
{{ $t("Storage") }}
|
|
332
|
-
<q-linear-progress rounded size="20px" :value="storageUsagePercent"
|
|
333
|
-
:color="storageProgressColor" class="q-mt-sm" />
|
|
334
|
-
{{ $t('storage_usage', [system.diskFreeSpace, system.diskTotalSpace]) }}
|
|
335
|
-
</q-card-section>
|
|
336
|
-
|
|
337
|
-
</q-card>
|
|
328
|
+
<l-storage :storage="system.storage" style="width:250px" />
|
|
338
329
|
</q-menu>
|
|
339
|
-
|
|
340
|
-
|
|
341
330
|
</q-btn>
|
|
342
331
|
|
|
343
332
|
<div class="q-mx-sm" v-if="$q.screen.gt.xs">
|
|
@@ -422,7 +411,8 @@ if (route.fullPath == "/" && my.default_page) {
|
|
|
422
411
|
</q-scroll-area>
|
|
423
412
|
</q-drawer>
|
|
424
413
|
|
|
425
|
-
<q-page-container :class="containerClass" :style="containerStyle">
|
|
414
|
+
<q-page-container :class="containerClass" :style="containerStyle"> <!-- Error message -->
|
|
415
|
+
<slot name="header"></slot>
|
|
426
416
|
<q-banner dense inline-actions class="bg-grey-4 q-ma-md" v-for=" error in errors " rounded>
|
|
427
417
|
{{ error }}
|
|
428
418
|
|
|
@@ -448,9 +438,8 @@ if (route.fullPath == "/" && my.default_page) {
|
|
|
448
438
|
<q-item>
|
|
449
439
|
<q-item-section>
|
|
450
440
|
{{ light.getCompany() }} {{ appVersion }} - Copyright {{ app.copyrightYear }} {{ app.copyrightName
|
|
451
|
-
}}.
|
|
452
|
-
|
|
453
|
-
light.getVersion() }}
|
|
441
|
+
}}. Build
|
|
442
|
+
{{ light.getVersion() }}
|
|
454
443
|
</q-item-section>
|
|
455
444
|
</q-item>
|
|
456
445
|
</q-footer>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hostlink/nuxt-light",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.1",
|
|
4
4
|
"description": "HostLink Nuxt Light Framework",
|
|
5
5
|
"repository": "@hostlink/nuxt-light",
|
|
6
6
|
"license": "MIT",
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
"@nuxt/module-builder": "^0.5.2",
|
|
41
41
|
"@quasar/extras": "^1.16.6",
|
|
42
42
|
"axios": "^1.5.0",
|
|
43
|
+
"diff2html": "^3.4.47",
|
|
43
44
|
"formkit-quasar": "^0.0.15",
|
|
44
45
|
"json-to-graphql-query": "^2.2.5",
|
|
45
46
|
"quasar": "^2.12.5",
|