mirror of
https://github.com/CorentinTh/it-tools.git
synced 2025-05-06 06:17:11 -04:00
150 lines
6.8 KiB
JavaScript
150 lines
6.8 KiB
JavaScript
![]() |
import { useThemeVars, NTable, NCheckbox } from 'naive-ui';
|
||
|
import { defineComponent, ref, computed, unref, mergeProps, withCtx, createVNode, openBlock, createBlock, Fragment, renderList, toDisplayString, useSSRContext } from 'vue';
|
||
|
import { ssrRenderAttrs, ssrRenderComponent, ssrRenderList, ssrInterpolate } from 'vue/server-renderer';
|
||
|
import { _ as _sfc_main$1 } from './chunk-de61ec1c.js';
|
||
|
import _ from 'lodash';
|
||
|
import { _ as _export_sfc } from './chunk-6003391e.js';
|
||
|
import './chunk-95ec8cf7.js';
|
||
|
import './chunk-8109fd17.js';
|
||
|
import '@vueuse/core';
|
||
|
import './chunk-4e7a6a8d.js';
|
||
|
import './chunk-11f44f81.js';
|
||
|
import './chunk-35c3d701.js';
|
||
|
import './chunk-77c5cc16.js';
|
||
|
import 'pinia';
|
||
|
|
||
|
function computeChmodOctalRepresentation({ permissions }) {
|
||
|
const permissionValue = { read: 4, write: 2, execute: 1 };
|
||
|
const getGroupPermissionValue = (permission) => _.reduce(permission, (acc, isPermSet, key) => acc + (isPermSet ? _.get(permissionValue, key, 0) : 0), 0);
|
||
|
return [
|
||
|
getGroupPermissionValue(permissions.owner),
|
||
|
getGroupPermissionValue(permissions.group),
|
||
|
getGroupPermissionValue(permissions.public)
|
||
|
].join("");
|
||
|
}
|
||
|
function computeChmodSymbolicRepresentation({ permissions }) {
|
||
|
const permissionValue = { read: "r", write: "w", execute: "x" };
|
||
|
const getGroupPermissionValue = (permission) => _.reduce(permission, (acc, isPermSet, key) => acc + (isPermSet ? _.get(permissionValue, key, "") : "-"), "");
|
||
|
return [
|
||
|
getGroupPermissionValue(permissions.owner),
|
||
|
getGroupPermissionValue(permissions.group),
|
||
|
getGroupPermissionValue(permissions.public)
|
||
|
].join("");
|
||
|
}
|
||
|
|
||
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||
|
__name: "chmod-calculator",
|
||
|
__ssrInlineRender: true,
|
||
|
setup(__props) {
|
||
|
const themeVars = useThemeVars();
|
||
|
const scopes = [
|
||
|
{ scope: "read", title: "Read (4)" },
|
||
|
{ scope: "write", title: "Write (2)" },
|
||
|
{ scope: "execute", title: "Execute (1)" }
|
||
|
];
|
||
|
const groups = ["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 }));
|
||
|
const symbolic = computed(() => computeChmodSymbolicRepresentation({ permissions: permissions.value }));
|
||
|
return (_ctx, _push, _parent, _attrs) => {
|
||
|
const _component_n_table = NTable;
|
||
|
const _component_n_checkbox = NCheckbox;
|
||
|
const _cssVars = { style: {
|
||
|
"--383ee3da": unref(themeVars).primaryColor
|
||
|
} };
|
||
|
_push(`<div${ssrRenderAttrs(mergeProps(_attrs, _cssVars))} data-v-55b63c39>`);
|
||
|
_push(ssrRenderComponent(_component_n_table, {
|
||
|
bordered: false,
|
||
|
"bottom-bordered": false,
|
||
|
"single-column": "",
|
||
|
class: "permission-table"
|
||
|
}, {
|
||
|
default: withCtx((_, _push2, _parent2, _scopeId) => {
|
||
|
if (_push2) {
|
||
|
_push2(`<thead data-v-55b63c39${_scopeId}><tr data-v-55b63c39${_scopeId}><th class="text-center" scope="col" data-v-55b63c39${_scopeId}></th><th class="text-center" scope="col" data-v-55b63c39${_scopeId}> Owner (u) </th><th class="text-center" scope="col" data-v-55b63c39${_scopeId}> Group (g) </th><th class="text-center" scope="col" data-v-55b63c39${_scopeId}> Public (o) </th></tr></thead><tbody data-v-55b63c39${_scopeId}><!--[-->`);
|
||
|
ssrRenderList(scopes, ({ scope, title }) => {
|
||
|
_push2(`<tr data-v-55b63c39${_scopeId}><td class="line-header" data-v-55b63c39${_scopeId}>${ssrInterpolate(title)}</td><!--[-->`);
|
||
|
ssrRenderList(groups, (group) => {
|
||
|
_push2(`<td class="text-center" data-v-55b63c39${_scopeId}>`);
|
||
|
_push2(ssrRenderComponent(_component_n_checkbox, {
|
||
|
checked: unref(permissions)[group][scope],
|
||
|
"onUpdate:checked": ($event) => unref(permissions)[group][scope] = $event,
|
||
|
size: "large"
|
||
|
}, null, _parent2, _scopeId));
|
||
|
_push2(`</td>`);
|
||
|
});
|
||
|
_push2(`<!--]--></tr>`);
|
||
|
});
|
||
|
_push2(`<!--]--></tbody>`);
|
||
|
} else {
|
||
|
return [
|
||
|
createVNode("thead", null, [
|
||
|
createVNode("tr", null, [
|
||
|
createVNode("th", {
|
||
|
class: "text-center",
|
||
|
scope: "col"
|
||
|
}),
|
||
|
createVNode("th", {
|
||
|
class: "text-center",
|
||
|
scope: "col"
|
||
|
}, " Owner (u) "),
|
||
|
createVNode("th", {
|
||
|
class: "text-center",
|
||
|
scope: "col"
|
||
|
}, " Group (g) "),
|
||
|
createVNode("th", {
|
||
|
class: "text-center",
|
||
|
scope: "col"
|
||
|
}, " Public (o) ")
|
||
|
])
|
||
|
]),
|
||
|
createVNode("tbody", null, [
|
||
|
(openBlock(), createBlock(Fragment, null, renderList(scopes, ({ scope, title }) => {
|
||
|
return createVNode("tr", { key: scope }, [
|
||
|
createVNode("td", { class: "line-header" }, toDisplayString(title), 1),
|
||
|
(openBlock(), createBlock(Fragment, null, renderList(groups, (group) => {
|
||
|
return createVNode("td", {
|
||
|
key: group,
|
||
|
class: "text-center"
|
||
|
}, [
|
||
|
createVNode(_component_n_checkbox, {
|
||
|
checked: unref(permissions)[group][scope],
|
||
|
"onUpdate:checked": ($event) => unref(permissions)[group][scope] = $event,
|
||
|
size: "large"
|
||
|
}, null, 8, ["checked", "onUpdate:checked"])
|
||
|
]);
|
||
|
}), 64))
|
||
|
]);
|
||
|
}), 64))
|
||
|
])
|
||
|
];
|
||
|
}
|
||
|
}),
|
||
|
_: 1
|
||
|
}, _parent));
|
||
|
_push(`<div class="octal-result" data-v-55b63c39>${ssrInterpolate(unref(octal))}</div><div class="octal-result" data-v-55b63c39>${ssrInterpolate(unref(symbolic))}</div>`);
|
||
|
_push(ssrRenderComponent(_sfc_main$1, {
|
||
|
value: `chmod ${unref(octal)} path`,
|
||
|
readonly: ""
|
||
|
}, null, _parent));
|
||
|
_push(`</div>`);
|
||
|
};
|
||
|
}
|
||
|
});
|
||
|
|
||
|
/* unplugin-vue-components disabled */const chmodCalculator_vue_vue_type_style_index_0_scoped_55b63c39_lang = '';
|
||
|
|
||
|
const _sfc_setup = _sfc_main.setup;
|
||
|
_sfc_main.setup = (props, ctx) => {
|
||
|
const ssrContext = useSSRContext();
|
||
|
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("src/tools/chmod-calculator/chmod-calculator.vue");
|
||
|
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
|
||
|
};
|
||
|
const chmodCalculator = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-55b63c39"]]);
|
||
|
|
||
|
export { chmodCalculator as default };
|