2022-11-23 21:57:38 +01:00
|
|
|
<script setup lang="ts">
|
|
|
|
import { useThemeVars } from 'naive-ui';
|
|
|
|
import { computed, ref } from 'vue';
|
|
|
|
import InputCopyable from '../../components/InputCopyable.vue';
|
2023-05-28 23:13:24 +02:00
|
|
|
import { computeChmodOctalRepresentation } from './chmod-calculator.service';
|
2022-11-23 21:57:38 +01:00
|
|
|
|
|
|
|
import type { Group, Scope } from './chmod-calculator.types';
|
|
|
|
|
|
|
|
const themeVars = useThemeVars();
|
|
|
|
|
|
|
|
const scopes: { scope: Scope; title: string }[] = [
|
|
|
|
{ scope: 'read', title: 'Read (4)' },
|
|
|
|
{ scope: 'write', title: 'Write (2)' },
|
|
|
|
{ scope: 'execute', title: 'Execute (1)' },
|
|
|
|
];
|
|
|
|
const groups: Group[] = ['owner', 'group', 'public'];
|
|
|
|
|
|
|
|
const permissions = ref({
|
|
|
|
owner: { read: false, write: false, execute: false },
|
|
|
|
group: { read: false, write: false, execute: false },
|
|
|
|
public: { read: false, write: false, execute: false },
|
|
|
|
});
|
|
|
|
|
|
|
|
const octal = computed(() => computeChmodOctalRepresentation({ permissions: permissions.value }));
|
|
|
|
</script>
|
|
|
|
|
2023-05-28 23:13:24 +02:00
|
|
|
<template>
|
|
|
|
<div>
|
|
|
|
<n-table :bordered="false" :bottom-bordered="false" single-column class="permission-table">
|
|
|
|
<thead>
|
|
|
|
<tr>
|
|
|
|
<th class="text-center" scope="col" />
|
|
|
|
<th class="text-center" scope="col">
|
|
|
|
Owner (u)
|
|
|
|
</th>
|
|
|
|
<th class="text-center" scope="col">
|
|
|
|
Group (g)
|
|
|
|
</th>
|
|
|
|
<th class="text-center" scope="col">
|
|
|
|
Public (o)
|
|
|
|
</th>
|
|
|
|
</tr>
|
|
|
|
</thead>
|
|
|
|
<tbody>
|
|
|
|
<tr v-for="{ scope, title } of scopes" :key="scope">
|
|
|
|
<td class="line-header">
|
|
|
|
{{ title }}
|
|
|
|
</td>
|
|
|
|
<td v-for="group of groups" :key="group" class="text-center">
|
|
|
|
<!-- <n-switch v-model:value="permissions[group][scope]" /> -->
|
|
|
|
<n-checkbox v-model:checked="permissions[group][scope]" size="large" />
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</n-table>
|
|
|
|
|
|
|
|
<div class="octal-result">
|
|
|
|
{{ octal }}
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<InputCopyable :value="`chmod ${octal} path`" readonly />
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
2022-11-23 21:57:38 +01:00
|
|
|
<style lang="less" scoped>
|
|
|
|
.octal-result {
|
|
|
|
text-align: center;
|
|
|
|
font-size: 50px;
|
|
|
|
font-family: monospace;
|
|
|
|
color: v-bind('themeVars.primaryColor');
|
|
|
|
margin: 20px 0;
|
|
|
|
}
|
|
|
|
.permission-table {
|
|
|
|
td,
|
|
|
|
th {
|
|
|
|
padding: 15px;
|
|
|
|
|
|
|
|
@media screen and (max-width: 600px) {
|
|
|
|
padding: 5px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.line-header {
|
|
|
|
font-weight: bold;
|
|
|
|
text-align: right;
|
|
|
|
max-width: 80px;
|
|
|
|
}
|
|
|
|
.text-center {
|
|
|
|
text-align: center;
|
|
|
|
}
|
|
|
|
</style>
|