Add % of number tool

This commit is contained in:
Illya Marchenko 2024-10-23 19:21:21 +03:00
parent 770e676c5b
commit e6a23f8a19
Signed by: stuzer05
GPG Key ID: A6ABAAA9268F9F4F
3 changed files with 116 additions and 36 deletions

@ -3,19 +3,15 @@ import { createRouter, createWebHistory } from "vue-router";
const router = createRouter({ const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL), history: createWebHistory(import.meta.env.BASE_URL),
routes: [ routes: [
/**
* General
*/
{ {
path: "/", path: "/",
name: "home", name: "home",
component: () => import("../views/HomeView.vue"), component: () => import("../views/HomeView.vue"),
}, },
{
path: "/explain_crontab", /**
name: "explain_crontab", * General
component: () => import("../views/unix/ExplainCrontab.vue"), */
},
{ {
path: "/table_to_markdown_table", path: "/table_to_markdown_table",
name: "table_to_markdown_table", name: "table_to_markdown_table",
@ -26,40 +22,15 @@ const router = createRouter({
name: "table_to_mediawiki_table", name: "table_to_mediawiki_table",
component: () => import("../views/general/TableToMediawikiTable.vue"), component: () => import("../views/general/TableToMediawikiTable.vue"),
}, },
{
path: "/dummy_image",
name: "dummy_image",
component: () => import("../views/generators/DummyImage.vue"),
},
{ {
path: "/humans_txt", path: "/humans_txt",
name: "humans_txt", name: "humans_txt",
component: () => import("../views/general/HumansTxt.vue"), component: () => import("../views/general/HumansTxt.vue"),
}, },
{ {
path: "/qr_code", path: "/percent_of_number",
name: "qr_code", name: "%_of_number",
component: () => import("../views/generators/QRCode.vue"), component: () => import("../views/general/PercentOfNumber.vue"),
},
{
path: "/unix_timestamp",
name: "unix_timestamp",
component: () => import("../views/unix/UnixTimestamp.vue"),
},
{
path: "/file_base64_encode_decode",
name: "file_base64_encode_decode",
component: () => import("../views/unix/FileBase64EncodeDecode.vue"),
},
{
path: "/sed_generator",
name: "sed_generator",
component: () => import("../views/unix/SedGenerator.vue"),
},
{
path: "/htaccess_generator",
name: "htaccess_generator",
component: () => import("../views/unix/HtaccessGenerator.vue"),
}, },
/** /**
@ -191,6 +162,49 @@ const router = createRouter({
component: () => import("../views/sql/Formatter.vue"), component: () => import("../views/sql/Formatter.vue"),
}, },
/**
* Generators
*/
{
path: "/dummy_image",
name: "dummy_image",
component: () => import("../views/generators/DummyImage.vue"),
},
{
path: "/qr_code",
name: "qr_code",
component: () => import("../views/generators/QRCode.vue"),
},
/**
* Unix
*/
{
path: "/unix_timestamp",
name: "unix_timestamp",
component: () => import("../views/unix/UnixTimestamp.vue"),
},
{
path: "/file_base64_encode_decode",
name: "file_base64_encode_decode",
component: () => import("../views/unix/FileBase64EncodeDecode.vue"),
},
{
path: "/sed_generator",
name: "sed_generator",
component: () => import("../views/unix/SedGenerator.vue"),
},
{
path: "/htaccess_generator",
name: "htaccess_generator",
component: () => import("../views/unix/HtaccessGenerator.vue"),
},
{
path: "/explain_crontab",
name: "explain_crontab",
component: () => import("../views/unix/ExplainCrontab.vue"),
},
/** /**
* Other * Other
*/ */

@ -24,6 +24,7 @@ export const useToolsStore = defineStore("tools", {
table_to_markdown_table: "Table to Markdown table", table_to_markdown_table: "Table to Markdown table",
table_to_mediawiki_table: "Table to Mediawiki table", table_to_mediawiki_table: "Table to Mediawiki table",
humans_txt: "humans.txt generator", humans_txt: "humans.txt generator",
"%_of_number": "% of number",
}, },
Docker: { Docker: {
docker_rename_volume: "Rename volume", docker_rename_volume: "Rename volume",

@ -0,0 +1,65 @@
<template>
<h2 class="tool-title">Percent of number</h2>
<hr class="mt-5 mb-5" />
<div class="input-group">
<label for="number">Calculate what percentage is</label>
<div>
<input
id="number"
v-model.number="toolData.number1"
v-on:keyup="result"
type="number"
/>
of
<input
id="number"
v-model.number="toolData.number2"
v-on:keyup="result"
type="number"
/>
</div>
</div>
<hr class="mt-5 mb-5" />
<div class="input-group">
<label for="result">Result</label>
<MonacoEditor
name="result"
language="php"
:value="toolResult"
></MonacoEditor>
</div>
</template>
<script>
import MonacoEditor from "@/components/MonacoEditor.vue";
export default {
components: { MonacoEditor },
data() {
return {
toolData: {
number1: null,
number2: null,
},
toolResult: '',
};
},
methods: {
result() {
if (
this.toolData.number1 === null ||
this.toolData.number2 === null ||
this.toolData.number2 === 0 // Prevent division by zero
) {
this.toolResult = null;
return;
}
this.toolResult = ((this.toolData.number1 / this.toolData.number2) * 100).toFixed(2);
},
},
};
</script>