refactor(frontend): 非推奨となったReactivity Transformを使わないように (#12539)
* refactor(frontend): 非推奨となったReactivity Transformを使わないように * refactor: 不要な括弧を除去 * fix: 不要なアノテーションを除去 * fix: Refの配列をrefしている部分の対応 * refactor: 不要な括弧を除去 * fix: lint * refactor: Ref、ShallowRef、ComputedRefの変数の宣言をletからconstに置換 * fix: type error * chore: drop reactivity transform from eslint configuration * refactor: remove unnecessary import * fix: 対応漏れ
This commit is contained in:
@@ -34,18 +34,19 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref } from 'vue';
|
||||
const props = defineProps<{
|
||||
activity: any[]
|
||||
}>();
|
||||
|
||||
let viewBoxX: number = $ref(147);
|
||||
let viewBoxY: number = $ref(60);
|
||||
let zoom: number = $ref(1);
|
||||
let pos: number = $ref(0);
|
||||
let pointsNote: any = $ref(null);
|
||||
let pointsReply: any = $ref(null);
|
||||
let pointsRenote: any = $ref(null);
|
||||
let pointsTotal: any = $ref(null);
|
||||
const viewBoxX = ref(147);
|
||||
const viewBoxY = ref(60);
|
||||
const zoom = ref(1);
|
||||
const pos = ref(0);
|
||||
const pointsNote = ref<any>(null);
|
||||
const pointsReply = ref<any>(null);
|
||||
const pointsRenote = ref<any>(null);
|
||||
const pointsTotal = ref<any>(null);
|
||||
|
||||
function dragListen(fn) {
|
||||
window.addEventListener('mousemove', fn);
|
||||
@@ -62,17 +63,17 @@ function dragClear(fn) {
|
||||
function onMousedown(ev) {
|
||||
const clickX = ev.clientX;
|
||||
const clickY = ev.clientY;
|
||||
const baseZoom = zoom;
|
||||
const basePos = pos;
|
||||
const baseZoom = zoom.value;
|
||||
const basePos = pos.value;
|
||||
|
||||
// 動かした時
|
||||
dragListen(me => {
|
||||
let moveLeft = me.clientX - clickX;
|
||||
let moveTop = me.clientY - clickY;
|
||||
|
||||
zoom = Math.max(1, baseZoom + (-moveTop / 20));
|
||||
pos = Math.min(0, basePos + moveLeft);
|
||||
if (pos < -(((props.activity.length - 1) * zoom) - viewBoxX)) pos = -(((props.activity.length - 1) * zoom) - viewBoxX);
|
||||
zoom.value = Math.max(1, baseZoom + (-moveTop / 20));
|
||||
pos.value = Math.min(0, basePos + moveLeft);
|
||||
if (pos.value < -(((props.activity.length - 1) * zoom.value) - viewBoxX.value)) pos.value = -(((props.activity.length - 1) * zoom.value) - viewBoxX.value);
|
||||
|
||||
render();
|
||||
});
|
||||
@@ -82,10 +83,10 @@ function render() {
|
||||
const peak = Math.max(...props.activity.map(d => d.total));
|
||||
if (peak !== 0) {
|
||||
const activity = props.activity.slice().reverse();
|
||||
pointsNote = activity.map((d, i) => `${(i * zoom) + pos},${(1 - (d.notes / peak)) * viewBoxY}`).join(' ');
|
||||
pointsReply = activity.map((d, i) => `${(i * zoom) + pos},${(1 - (d.replies / peak)) * viewBoxY}`).join(' ');
|
||||
pointsRenote = activity.map((d, i) => `${(i * zoom) + pos},${(1 - (d.renotes / peak)) * viewBoxY}`).join(' ');
|
||||
pointsTotal = activity.map((d, i) => `${(i * zoom) + pos},${(1 - (d.total / peak)) * viewBoxY}`).join(' ');
|
||||
pointsNote.value = activity.map((d, i) => `${(i * zoom.value) + pos.value},${(1 - (d.notes / peak)) * viewBoxY.value}`).join(' ');
|
||||
pointsReply.value = activity.map((d, i) => `${(i * zoom.value) + pos.value},${(1 - (d.replies / peak)) * viewBoxY.value}`).join(' ');
|
||||
pointsRenote.value = activity.map((d, i) => `${(i * zoom.value) + pos.value},${(1 - (d.renotes / peak)) * viewBoxY.value}`).join(' ');
|
||||
pointsTotal.value = activity.map((d, i) => `${(i * zoom.value) + pos.value},${(1 - (d.total / peak)) * viewBoxY.value}`).join(' ');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
@@ -52,7 +52,7 @@ const { widgetProps, configure } = useWidgetPropsManager(name,
|
||||
const parser = new Parser();
|
||||
|
||||
const root = ref<AsUiRoot>();
|
||||
const components: Ref<AsUiComponent>[] = $ref([]);
|
||||
const components = ref<Ref<AsUiComponent>[]>([]);
|
||||
|
||||
async function run() {
|
||||
const aiscript = new Interpreter({
|
||||
@@ -60,7 +60,7 @@ async function run() {
|
||||
storageKey: 'widget',
|
||||
token: $i?.token,
|
||||
}),
|
||||
...registerAsUiLib(components, (_root) => {
|
||||
...registerAsUiLib(components.value, (_root) => {
|
||||
root.value = _root.value;
|
||||
}),
|
||||
}, {
|
||||
|
@@ -29,7 +29,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { } from 'vue';
|
||||
import { computed } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import MkContainer from '@/components/MkContainer.vue';
|
||||
@@ -134,15 +134,15 @@ const { widgetProps, configure } = useWidgetPropsManager(name,
|
||||
emit,
|
||||
);
|
||||
|
||||
const tzAbbrev = $computed(() => (widgetProps.timezone === null
|
||||
const tzAbbrev = computed(() => (widgetProps.timezone === null
|
||||
? timezones.find((tz) => tz.name.toLowerCase() === Intl.DateTimeFormat().resolvedOptions().timeZone.toLowerCase())?.abbrev
|
||||
: timezones.find((tz) => tz.name.toLowerCase() === widgetProps.timezone)?.abbrev) ?? '?');
|
||||
|
||||
const tzOffset = $computed(() => widgetProps.timezone === null
|
||||
const tzOffset = computed(() => widgetProps.timezone === null
|
||||
? 0 - new Date().getTimezoneOffset()
|
||||
: timezones.find((tz) => tz.name.toLowerCase() === widgetProps.timezone)?.offset ?? 0);
|
||||
|
||||
const tzOffsetLabel = $computed(() => (tzOffset >= 0 ? '+' : '-') + Math.floor(tzOffset / 60).toString().padStart(2, '0') + ':' + (tzOffset % 60).toString().padStart(2, '0'));
|
||||
const tzOffsetLabel = computed(() => (tzOffset.value >= 0 ? '+' : '-') + Math.floor(tzOffset.value / 60).toString().padStart(2, '0') + ':' + (tzOffset.value % 60).toString().padStart(2, '0'));
|
||||
|
||||
defineExpose<WidgetComponentExpose>({
|
||||
name,
|
||||
|
@@ -14,6 +14,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import { timezones } from '@/scripts/timezones.js';
|
||||
@@ -63,15 +64,15 @@ const { widgetProps, configure } = useWidgetPropsManager(name,
|
||||
emit,
|
||||
);
|
||||
|
||||
const tzAbbrev = $computed(() => (widgetProps.timezone === null
|
||||
const tzAbbrev = computed(() => (widgetProps.timezone === null
|
||||
? timezones.find((tz) => tz.name.toLowerCase() === Intl.DateTimeFormat().resolvedOptions().timeZone.toLowerCase())?.abbrev
|
||||
: timezones.find((tz) => tz.name.toLowerCase() === widgetProps.timezone)?.abbrev) ?? '?');
|
||||
|
||||
const tzOffset = $computed(() => widgetProps.timezone === null
|
||||
const tzOffset = computed(() => widgetProps.timezone === null
|
||||
? 0 - new Date().getTimezoneOffset()
|
||||
: timezones.find((tz) => tz.name.toLowerCase() === widgetProps.timezone)?.offset ?? 0);
|
||||
|
||||
const tzOffsetLabel = $computed(() => (tzOffset >= 0 ? '+' : '-') + Math.floor(tzOffset / 60).toString().padStart(2, '0') + ':' + (tzOffset % 60).toString().padStart(2, '0'));
|
||||
const tzOffsetLabel = computed(() => (tzOffset.value >= 0 ? '+' : '-') + Math.floor(tzOffset.value / 60).toString().padStart(2, '0') + ':' + (tzOffset.value % 60).toString().padStart(2, '0'));
|
||||
|
||||
defineExpose<WidgetComponentExpose>({
|
||||
name,
|
||||
|
@@ -18,7 +18,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { } from 'vue';
|
||||
import { shallowRef } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import MkContainer from '@/components/MkContainer.vue';
|
||||
@@ -47,8 +47,8 @@ const { widgetProps, configure } = useWidgetPropsManager(name,
|
||||
emit,
|
||||
);
|
||||
|
||||
let cloud = $shallowRef<InstanceType<typeof MkTagCloud> | null>();
|
||||
let activeInstances = $shallowRef(null);
|
||||
const cloud = shallowRef<InstanceType<typeof MkTagCloud> | null>();
|
||||
const activeInstances = shallowRef(null);
|
||||
|
||||
function onInstanceClick(i) {
|
||||
os.pageWindow(`/instance-info/${i.host}`);
|
||||
@@ -59,8 +59,8 @@ useInterval(() => {
|
||||
sort: '+latestRequestReceivedAt',
|
||||
limit: 25,
|
||||
}).then(res => {
|
||||
activeInstances = res;
|
||||
if (cloud) cloud.update();
|
||||
activeInstances.value = res;
|
||||
if (cloud.value) cloud.value.update();
|
||||
});
|
||||
}, 1000 * 60 * 3, {
|
||||
immediate: true,
|
||||
|
@@ -51,7 +51,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onUnmounted, reactive } from 'vue';
|
||||
import { onUnmounted, reactive, ref } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import { useStream } from '@/stream.js';
|
||||
@@ -100,8 +100,8 @@ const current = reactive({
|
||||
},
|
||||
});
|
||||
const prev = reactive({} as typeof current);
|
||||
let jammedAudioBuffer: AudioBuffer | null = $ref(null);
|
||||
let jammedSoundNodePlaying: boolean = $ref(false);
|
||||
const jammedAudioBuffer = ref<AudioBuffer | null>(null);
|
||||
const jammedSoundNodePlaying = ref<boolean>(false);
|
||||
|
||||
if (defaultStore.state.sound_masterVolume) {
|
||||
sound.loadAudio({
|
||||
@@ -109,7 +109,7 @@ if (defaultStore.state.sound_masterVolume) {
|
||||
volume: 1,
|
||||
}).then(buf => {
|
||||
if (!buf) throw new Error('[WidgetJobQueue] Failed to initialize AudioBuffer');
|
||||
jammedAudioBuffer = buf;
|
||||
jammedAudioBuffer.value = buf;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -125,11 +125,11 @@ const onStats = (stats) => {
|
||||
current[domain].waiting = stats[domain].waiting;
|
||||
current[domain].delayed = stats[domain].delayed;
|
||||
|
||||
if (current[domain].waiting > 0 && widgetProps.sound && jammedAudioBuffer && !jammedSoundNodePlaying) {
|
||||
const soundNode = sound.createSourceNode(jammedAudioBuffer, 1);
|
||||
if (current[domain].waiting > 0 && widgetProps.sound && jammedAudioBuffer.value && !jammedSoundNodePlaying.value) {
|
||||
const soundNode = sound.createSourceNode(jammedAudioBuffer.value, 1);
|
||||
if (soundNode) {
|
||||
jammedSoundNodePlaying = true;
|
||||
soundNode.onended = () => jammedSoundNodePlaying = false;
|
||||
jammedSoundNodePlaying.value = true;
|
||||
soundNode.onended = () => jammedSoundNodePlaying.value = false;
|
||||
soundNode.start();
|
||||
}
|
||||
}
|
||||
|
@@ -72,7 +72,7 @@ const fetchEndpoint = computed(() => {
|
||||
url.searchParams.set('url', widgetProps.url);
|
||||
return url;
|
||||
});
|
||||
let intervalClear = $ref<(() => void) | undefined>();
|
||||
const intervalClear = ref<(() => void) | undefined>();
|
||||
|
||||
const tick = () => {
|
||||
if (document.visibilityState === 'hidden' && rawItems.value.length !== 0) return;
|
||||
@@ -87,10 +87,10 @@ const tick = () => {
|
||||
|
||||
watch(() => fetchEndpoint, tick);
|
||||
watch(() => widgetProps.refreshIntervalSec, () => {
|
||||
if (intervalClear) {
|
||||
intervalClear();
|
||||
if (intervalClear.value) {
|
||||
intervalClear.value();
|
||||
}
|
||||
intervalClear = useInterval(tick, Math.max(10000, widgetProps.refreshIntervalSec * 1000), {
|
||||
intervalClear.value = useInterval(tick, Math.max(10000, widgetProps.refreshIntervalSec * 1000), {
|
||||
immediate: true,
|
||||
afterMounted: true,
|
||||
});
|
||||
|
@@ -101,9 +101,9 @@ const fetchEndpoint = computed(() => {
|
||||
url.searchParams.set('url', widgetProps.url);
|
||||
return url;
|
||||
});
|
||||
let intervalClear = $ref<(() => void) | undefined>();
|
||||
const intervalClear = ref<(() => void) | undefined>();
|
||||
|
||||
let key = $ref(0);
|
||||
const key = ref(0);
|
||||
|
||||
const tick = () => {
|
||||
if (document.visibilityState === 'hidden' && rawItems.value.length !== 0) return;
|
||||
@@ -113,16 +113,16 @@ const tick = () => {
|
||||
.then(feed => {
|
||||
rawItems.value = feed.items ?? [];
|
||||
fetching.value = false;
|
||||
key++;
|
||||
key.value++;
|
||||
});
|
||||
};
|
||||
|
||||
watch(() => fetchEndpoint, tick);
|
||||
watch(() => widgetProps.refreshIntervalSec, () => {
|
||||
if (intervalClear) {
|
||||
intervalClear();
|
||||
if (intervalClear.value) {
|
||||
intervalClear.value();
|
||||
}
|
||||
intervalClear = useInterval(tick, Math.max(10000, widgetProps.refreshIntervalSec * 1000), {
|
||||
intervalClear.value = useInterval(tick, Math.max(10000, widgetProps.refreshIntervalSec * 1000), {
|
||||
immediate: true,
|
||||
afterMounted: true,
|
||||
});
|
||||
|
@@ -24,6 +24,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import MkContainer from '@/components/MkContainer.vue';
|
||||
@@ -57,9 +58,9 @@ const { widgetProps, configure, save } = useWidgetPropsManager(name,
|
||||
emit,
|
||||
);
|
||||
|
||||
let list = $ref();
|
||||
let users = $ref([]);
|
||||
let fetching = $ref(true);
|
||||
const list = ref();
|
||||
const users = ref([]);
|
||||
const fetching = ref(true);
|
||||
|
||||
async function chooseList() {
|
||||
const lists = await os.api('users/lists/list');
|
||||
@@ -79,19 +80,19 @@ async function chooseList() {
|
||||
|
||||
const fetch = () => {
|
||||
if (widgetProps.listId == null) {
|
||||
fetching = false;
|
||||
fetching.value = false;
|
||||
return;
|
||||
}
|
||||
|
||||
os.api('users/lists/show', {
|
||||
listId: widgetProps.listId,
|
||||
}).then(_list => {
|
||||
list = _list;
|
||||
list.value = _list;
|
||||
os.api('users/show', {
|
||||
userIds: list.userIds,
|
||||
userIds: list.value.userIds,
|
||||
}).then(_users => {
|
||||
users = _users;
|
||||
fetching = false;
|
||||
users.value = _users;
|
||||
fetching.value = false;
|
||||
});
|
||||
});
|
||||
};
|
||||
|
@@ -75,7 +75,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, onBeforeUnmount } from 'vue';
|
||||
import { onMounted, onBeforeUnmount, ref } from 'vue';
|
||||
import { v4 as uuid } from 'uuid';
|
||||
|
||||
const props = defineProps<{
|
||||
@@ -83,23 +83,23 @@ const props = defineProps<{
|
||||
meta: any
|
||||
}>();
|
||||
|
||||
let viewBoxX: number = $ref(50);
|
||||
let viewBoxY: number = $ref(30);
|
||||
let stats: any[] = $ref([]);
|
||||
const viewBoxX = ref<number>(50);
|
||||
const viewBoxY = ref<number>(30);
|
||||
const stats = ref<any[]>([]);
|
||||
const cpuGradientId = uuid();
|
||||
const cpuMaskId = uuid();
|
||||
const memGradientId = uuid();
|
||||
const memMaskId = uuid();
|
||||
let cpuPolylinePoints: string = $ref('');
|
||||
let memPolylinePoints: string = $ref('');
|
||||
let cpuPolygonPoints: string = $ref('');
|
||||
let memPolygonPoints: string = $ref('');
|
||||
let cpuHeadX: any = $ref(null);
|
||||
let cpuHeadY: any = $ref(null);
|
||||
let memHeadX: any = $ref(null);
|
||||
let memHeadY: any = $ref(null);
|
||||
let cpuP: string = $ref('');
|
||||
let memP: string = $ref('');
|
||||
const cpuPolylinePoints = ref<string>('');
|
||||
const memPolylinePoints = ref<string>('');
|
||||
const cpuPolygonPoints = ref<string>('');
|
||||
const memPolygonPoints = ref<string>('');
|
||||
const cpuHeadX = ref<any>(null);
|
||||
const cpuHeadY = ref<any>(null);
|
||||
const memHeadX = ref<any>(null);
|
||||
const memHeadY = ref<any>(null);
|
||||
const cpuP = ref<string>('');
|
||||
const memP = ref<string>('');
|
||||
|
||||
onMounted(() => {
|
||||
props.connection.on('stats', onStats);
|
||||
@@ -115,24 +115,24 @@ onBeforeUnmount(() => {
|
||||
});
|
||||
|
||||
function onStats(connStats) {
|
||||
stats.push(connStats);
|
||||
if (stats.length > 50) stats.shift();
|
||||
stats.value.push(connStats);
|
||||
if (stats.value.length > 50) stats.value.shift();
|
||||
|
||||
let cpuPolylinePointsStats = stats.map((s, i) => [viewBoxX - ((stats.length - 1) - i), (1 - s.cpu) * viewBoxY]);
|
||||
let memPolylinePointsStats = stats.map((s, i) => [viewBoxX - ((stats.length - 1) - i), (1 - (s.mem.active / props.meta.mem.total)) * viewBoxY]);
|
||||
cpuPolylinePoints = cpuPolylinePointsStats.map(xy => `${xy[0]},${xy[1]}`).join(' ');
|
||||
memPolylinePoints = memPolylinePointsStats.map(xy => `${xy[0]},${xy[1]}`).join(' ');
|
||||
let cpuPolylinePointsStats = stats.value.map((s, i) => [viewBoxX.value - ((stats.value.length - 1) - i), (1 - s.cpu) * viewBoxY.value]);
|
||||
let memPolylinePointsStats = stats.value.map((s, i) => [viewBoxX.value - ((stats.value.length - 1) - i), (1 - (s.mem.active / props.meta.mem.total)) * viewBoxY.value]);
|
||||
cpuPolylinePoints.value = cpuPolylinePointsStats.map(xy => `${xy[0]},${xy[1]}`).join(' ');
|
||||
memPolylinePoints.value = memPolylinePointsStats.map(xy => `${xy[0]},${xy[1]}`).join(' ');
|
||||
|
||||
cpuPolygonPoints = `${viewBoxX - (stats.length - 1)},${viewBoxY} ${cpuPolylinePoints} ${viewBoxX},${viewBoxY}`;
|
||||
memPolygonPoints = `${viewBoxX - (stats.length - 1)},${viewBoxY} ${memPolylinePoints} ${viewBoxX},${viewBoxY}`;
|
||||
cpuPolygonPoints.value = `${viewBoxX.value - (stats.value.length - 1)},${viewBoxY.value} ${cpuPolylinePoints.value} ${viewBoxX.value},${viewBoxY.value}`;
|
||||
memPolygonPoints.value = `${viewBoxX.value - (stats.value.length - 1)},${viewBoxY.value} ${memPolylinePoints.value} ${viewBoxX.value},${viewBoxY.value}`;
|
||||
|
||||
cpuHeadX = cpuPolylinePointsStats.at(-1)![0];
|
||||
cpuHeadY = cpuPolylinePointsStats.at(-1)![1];
|
||||
memHeadX = memPolylinePointsStats.at(-1)![0];
|
||||
memHeadY = memPolylinePointsStats.at(-1)![1];
|
||||
cpuHeadX.value = cpuPolylinePointsStats.at(-1)![0];
|
||||
cpuHeadY.value = cpuPolylinePointsStats.at(-1)![1];
|
||||
memHeadX.value = memPolylinePointsStats.at(-1)![0];
|
||||
memHeadY.value = memPolylinePointsStats.at(-1)![1];
|
||||
|
||||
cpuP = (connStats.cpu * 100).toFixed(0);
|
||||
memP = (connStats.mem.active / props.meta.mem.total * 100).toFixed(0);
|
||||
cpuP.value = (connStats.cpu * 100).toFixed(0);
|
||||
memP.value = (connStats.mem.active / props.meta.mem.total * 100).toFixed(0);
|
||||
}
|
||||
|
||||
function onStatsLog(statsLog) {
|
||||
|
@@ -15,7 +15,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, onBeforeUnmount } from 'vue';
|
||||
import { onMounted, onBeforeUnmount, ref } from 'vue';
|
||||
import XPie from './pie.vue';
|
||||
|
||||
const props = defineProps<{
|
||||
@@ -23,10 +23,10 @@ const props = defineProps<{
|
||||
meta: any
|
||||
}>();
|
||||
|
||||
let usage: number = $ref(0);
|
||||
const usage = ref<number>(0);
|
||||
|
||||
function onStats(stats) {
|
||||
usage = stats.cpu;
|
||||
usage.value = stats.cpu;
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
|
@@ -16,7 +16,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { } from 'vue';
|
||||
import { computed } from 'vue';
|
||||
import XPie from './pie.vue';
|
||||
import bytes from '@/filters/bytes.js';
|
||||
|
||||
@@ -24,10 +24,10 @@ const props = defineProps<{
|
||||
meta: any; // TODO
|
||||
}>();
|
||||
|
||||
const usage = $computed(() => props.meta.fs.used / props.meta.fs.total);
|
||||
const total = $computed(() => props.meta.fs.total);
|
||||
const used = $computed(() => props.meta.fs.used);
|
||||
const available = $computed(() => props.meta.fs.total - props.meta.fs.used);
|
||||
const usage = computed(() => props.meta.fs.used / props.meta.fs.total);
|
||||
const total = computed(() => props.meta.fs.total);
|
||||
const used = computed(() => props.meta.fs.used);
|
||||
const available = computed(() => props.meta.fs.total - props.meta.fs.used);
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
@@ -16,7 +16,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, onBeforeUnmount } from 'vue';
|
||||
import { onMounted, onBeforeUnmount, ref } from 'vue';
|
||||
import XPie from './pie.vue';
|
||||
import bytes from '@/filters/bytes.js';
|
||||
|
||||
@@ -25,16 +25,16 @@ const props = defineProps<{
|
||||
meta: any
|
||||
}>();
|
||||
|
||||
let usage: number = $ref(0);
|
||||
let total: number = $ref(0);
|
||||
let used: number = $ref(0);
|
||||
let free: number = $ref(0);
|
||||
const usage = ref<number>(0);
|
||||
const total = ref<number>(0);
|
||||
const used = ref<number>(0);
|
||||
const free = ref<number>(0);
|
||||
|
||||
function onStats(stats) {
|
||||
usage = stats.mem.active / props.meta.mem.total;
|
||||
total = props.meta.mem.total;
|
||||
used = stats.mem.active;
|
||||
free = total - used;
|
||||
usage.value = stats.mem.active / props.meta.mem.total;
|
||||
total.value = props.meta.mem.total;
|
||||
used.value = stats.mem.active;
|
||||
free.value = total.value - used.value;
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
|
@@ -49,7 +49,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, onBeforeUnmount } from 'vue';
|
||||
import { onMounted, onBeforeUnmount, ref } from 'vue';
|
||||
import bytes from '@/filters/bytes.js';
|
||||
|
||||
const props = defineProps<{
|
||||
@@ -57,19 +57,19 @@ const props = defineProps<{
|
||||
meta: any
|
||||
}>();
|
||||
|
||||
let viewBoxX: number = $ref(50);
|
||||
let viewBoxY: number = $ref(30);
|
||||
let stats: any[] = $ref([]);
|
||||
let inPolylinePoints: string = $ref('');
|
||||
let outPolylinePoints: string = $ref('');
|
||||
let inPolygonPoints: string = $ref('');
|
||||
let outPolygonPoints: string = $ref('');
|
||||
let inHeadX: any = $ref(null);
|
||||
let inHeadY: any = $ref(null);
|
||||
let outHeadX: any = $ref(null);
|
||||
let outHeadY: any = $ref(null);
|
||||
let inRecent: number = $ref(0);
|
||||
let outRecent: number = $ref(0);
|
||||
const viewBoxX = ref<number>(50);
|
||||
const viewBoxY = ref<number>(30);
|
||||
const stats = ref<any[]>([]);
|
||||
const inPolylinePoints = ref<string>('');
|
||||
const outPolylinePoints = ref<string>('');
|
||||
const inPolygonPoints = ref<string>('');
|
||||
const outPolygonPoints = ref<string>('');
|
||||
const inHeadX = ref<any>(null);
|
||||
const inHeadY = ref<any>(null);
|
||||
const outHeadX = ref<any>(null);
|
||||
const outHeadY = ref<any>(null);
|
||||
const inRecent = ref<number>(0);
|
||||
const outRecent = ref<number>(0);
|
||||
|
||||
onMounted(() => {
|
||||
props.connection.on('stats', onStats);
|
||||
@@ -85,27 +85,27 @@ onBeforeUnmount(() => {
|
||||
});
|
||||
|
||||
function onStats(connStats) {
|
||||
stats.push(connStats);
|
||||
if (stats.length > 50) stats.shift();
|
||||
stats.value.push(connStats);
|
||||
if (stats.value.length > 50) stats.value.shift();
|
||||
|
||||
const inPeak = Math.max(1024 * 64, Math.max(...stats.map(s => s.net.rx)));
|
||||
const outPeak = Math.max(1024 * 64, Math.max(...stats.map(s => s.net.tx)));
|
||||
const inPeak = Math.max(1024 * 64, Math.max(...stats.value.map(s => s.net.rx)));
|
||||
const outPeak = Math.max(1024 * 64, Math.max(...stats.value.map(s => s.net.tx)));
|
||||
|
||||
let inPolylinePointsStats = stats.map((s, i) => [viewBoxX - ((stats.length - 1) - i), (1 - (s.net.rx / inPeak)) * viewBoxY]);
|
||||
let outPolylinePointsStats = stats.map((s, i) => [viewBoxX - ((stats.length - 1) - i), (1 - (s.net.tx / outPeak)) * viewBoxY]);
|
||||
inPolylinePoints = inPolylinePointsStats.map(xy => `${xy[0]},${xy[1]}`).join(' ');
|
||||
outPolylinePoints = outPolylinePointsStats.map(xy => `${xy[0]},${xy[1]}`).join(' ');
|
||||
let inPolylinePointsStats = stats.value.map((s, i) => [viewBoxX.value - ((stats.value.length - 1) - i), (1 - (s.net.rx / inPeak)) * viewBoxY.value]);
|
||||
let outPolylinePointsStats = stats.value.map((s, i) => [viewBoxX.value - ((stats.value.length - 1) - i), (1 - (s.net.tx / outPeak)) * viewBoxY.value]);
|
||||
inPolylinePoints.value = inPolylinePointsStats.map(xy => `${xy[0]},${xy[1]}`).join(' ');
|
||||
outPolylinePoints.value = outPolylinePointsStats.map(xy => `${xy[0]},${xy[1]}`).join(' ');
|
||||
|
||||
inPolygonPoints = `${viewBoxX - (stats.length - 1)},${viewBoxY} ${inPolylinePoints} ${viewBoxX},${viewBoxY}`;
|
||||
outPolygonPoints = `${viewBoxX - (stats.length - 1)},${viewBoxY} ${outPolylinePoints} ${viewBoxX},${viewBoxY}`;
|
||||
inPolygonPoints.value = `${viewBoxX.value - (stats.value.length - 1)},${viewBoxY.value} ${inPolylinePoints.value} ${viewBoxX.value},${viewBoxY.value}`;
|
||||
outPolygonPoints.value = `${viewBoxX.value - (stats.value.length - 1)},${viewBoxY.value} ${outPolylinePoints.value} ${viewBoxX.value},${viewBoxY.value}`;
|
||||
|
||||
inHeadX = inPolylinePointsStats.at(-1)![0];
|
||||
inHeadY = inPolylinePointsStats.at(-1)![1];
|
||||
outHeadX = outPolylinePointsStats.at(-1)![0];
|
||||
outHeadY = outPolylinePointsStats.at(-1)![1];
|
||||
inHeadX.value = inPolylinePointsStats.at(-1)![0];
|
||||
inHeadY.value = inPolylinePointsStats.at(-1)![1];
|
||||
outHeadX.value = outPolylinePointsStats.at(-1)![0];
|
||||
outHeadY.value = outPolylinePointsStats.at(-1)![1];
|
||||
|
||||
inRecent = connStats.net.rx;
|
||||
outRecent = connStats.net.tx;
|
||||
inRecent.value = connStats.net.rx;
|
||||
outRecent.value = connStats.net.tx;
|
||||
}
|
||||
|
||||
function onStatsLog(statsLog) {
|
||||
|
@@ -28,7 +28,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { } from 'vue';
|
||||
import { computed } from 'vue';
|
||||
|
||||
const props = defineProps<{
|
||||
value: number;
|
||||
@@ -36,8 +36,8 @@ const props = defineProps<{
|
||||
|
||||
const r = 0.45;
|
||||
|
||||
const color = $computed(() => `hsl(${180 - (props.value * 180)}, 80%, 70%)`);
|
||||
const strokeDashoffset = $computed(() => (1 - props.value) * (Math.PI * (r * 2)));
|
||||
const color = computed(() => `hsl(${180 - (props.value * 180)}, 80%, 70%)`);
|
||||
const strokeDashoffset = computed(() => (1 - props.value) * (Math.PI * (r * 2)));
|
||||
</script>
|
||||
|
||||
<style lang="scss" module>
|
||||
|
Reference in New Issue
Block a user