Merge branch 'main' into test

This commit is contained in:
Avnit Bambah 2024-05-24 17:08:29 -07:00 committed by GitHub
commit 1fd3077b7a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 107 additions and 125 deletions

View File

@ -1,12 +1,6 @@
![logo](.github/logo.png) ![logo](.github/logo.png)
Useful tools for developer and people working in IT. [Have a look !](https://it-tools.tech). Useful tools for developer and people working in IT. [Have a look !].
## Functionalities and roadmap
Please check the [issues](https://github.com/CorentinTh/it-tools/issues) to see if some feature listed to be implemented.
You have an idea of a tool? Submit a [feature request](https://github.com/CorentinTh/it-tools/issues/new/choose)!
## Self host ## Self host
@ -15,13 +9,7 @@ Self host solutions for your homelab
**From docker hub:** **From docker hub:**
```sh ```sh
docker run -d --name it-tools --restart unless-stopped -p 8080:80 corentinth/it-tools:latest docker run -d --name it-tools --restart unless-stopped -p 8080:80 abambah/it-tools:v3
```
**From github packages:**
```sh
docker run -d --name it-tools --restart unless-stopped -p 8080:80 ghcr.io/corentinth/it-tools:latest
``` ```
**Other solutions:** **Other solutions:**
@ -104,24 +92,3 @@ pnpm run script:create:tool my-tool-name
``` ```
It will create a directory in `src/tools` with the correct files, and a the import in `src/tools/index.ts`. You will just need to add the imported tool in the proper category and develop the tool. It will create a directory in `src/tools` with the correct files, and a the import in `src/tools/index.ts`. You will just need to add the imported tool in the proper category and develop the tool.
## Contributors
Big thanks to all the people who have already contributed!
[![contributors](https://contrib.rocks/image?repo=corentinth/it-tools)](https://github.com/corentinth/it-tools/graphs/contributors)
## Credits
Coded with ❤️ by [Corentin Thomasset](//corentin-thomasset.fr).
This project is continuously deployed using [vercel.com](https://vercel.com).
Contributor graph is generated using [contrib.rocks](https://contrib.rocks/preview?repo=corentinth/it-tools).
<a href="https://www.producthunt.com/posts/it-tools?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-it&#0045;tools" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=345793&theme=light" alt="IT&#0032;Tools - Collection&#0032;of&#0032;handy&#0032;online&#0032;tools&#0032;for&#0032;devs&#0044;&#0032;with&#0032;great&#0032;UX | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a>
<a href="https://www.producthunt.com/posts/it-tools?utm_source=badge-top-post-badge&utm_medium=badge&utm_souce=badge-it&#0045;tools" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=345793&theme=light&period=daily" alt="IT&#0032;Tools - Collection&#0032;of&#0032;handy&#0032;online&#0032;tools&#0032;for&#0032;devs&#0044;&#0032;with&#0032;great&#0032;UX | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a>
## License
This project is under the [GNU GPLv3](LICENSE).

5
components.d.ts vendored
View File

@ -10,7 +10,6 @@ export {}
declare module '@vue/runtime-core' { declare module '@vue/runtime-core' {
export interface GlobalComponents { export interface GlobalComponents {
'404.page': typeof import('./src/pages/404.page.vue')['default'] '404.page': typeof import('./src/pages/404.page.vue')['default']
About: typeof import('./src/pages/About.vue')['default']
App: typeof import('./src/App.vue')['default'] App: typeof import('./src/App.vue')['default']
AsciiTextDrawer: typeof import('./src/tools/ascii-text-drawer/ascii-text-drawer.vue')['default'] AsciiTextDrawer: typeof import('./src/tools/ascii-text-drawer/ascii-text-drawer.vue')['default']
'Base.layout': typeof import('./src/layouts/base.layout.vue')['default'] 'Base.layout': typeof import('./src/layouts/base.layout.vue')['default']
@ -90,6 +89,9 @@ declare module '@vue/runtime-core' {
IbanValidatorAndParser: typeof import('./src/tools/iban-validator-and-parser/iban-validator-and-parser.vue')['default'] IbanValidatorAndParser: typeof import('./src/tools/iban-validator-and-parser/iban-validator-and-parser.vue')['default']
'IconMdi:brushVariant': typeof import('~icons/mdi/brush-variant')['default'] 'IconMdi:brushVariant': typeof import('~icons/mdi/brush-variant')['default']
'IconMdi:kettleSteamOutline': typeof import('~icons/mdi/kettle-steam-outline')['default'] 'IconMdi:kettleSteamOutline': typeof import('~icons/mdi/kettle-steam-outline')['default']
IconMdiArrowDown: typeof import('~icons/mdi/arrow-down')['default']
IconMdiArrowRightBottom: typeof import('~icons/mdi/arrow-right-bottom')['default']
IconMdiCamera: typeof import('~icons/mdi/camera')['default']
IconMdiChevronDown: typeof import('~icons/mdi/chevron-down')['default'] IconMdiChevronDown: typeof import('~icons/mdi/chevron-down')['default']
IconMdiChevronRight: typeof import('~icons/mdi/chevron-right')['default'] IconMdiChevronRight: typeof import('~icons/mdi/chevron-right')['default']
IconMdiClose: typeof import('~icons/mdi/close')['default'] IconMdiClose: typeof import('~icons/mdi/close')['default']
@ -166,6 +168,7 @@ declare module '@vue/runtime-core' {
StringObfuscator: typeof import('./src/tools/string-obfuscator/string-obfuscator.vue')['default'] StringObfuscator: typeof import('./src/tools/string-obfuscator/string-obfuscator.vue')['default']
SvgPlaceholderGenerator: typeof import('./src/tools/svg-placeholder-generator/svg-placeholder-generator.vue')['default'] SvgPlaceholderGenerator: typeof import('./src/tools/svg-placeholder-generator/svg-placeholder-generator.vue')['default']
TemperatureConverter: typeof import('./src/tools/temperature-converter/temperature-converter.vue')['default'] TemperatureConverter: typeof import('./src/tools/temperature-converter/temperature-converter.vue')['default']
'Test.page': typeof import('./src/pages/test.page.vue')['default']
TextareaCopyable: typeof import('./src/components/TextareaCopyable.vue')['default'] TextareaCopyable: typeof import('./src/components/TextareaCopyable.vue')['default']
TextDiff: typeof import('./src/tools/text-diff/text-diff.vue')['default'] TextDiff: typeof import('./src/tools/text-diff/text-diff.vue')['default']
TextStatistics: typeof import('./src/tools/text-statistics/text-statistics.vue')['default'] TextStatistics: typeof import('./src/tools/text-statistics/text-statistics.vue')['default']

View File

@ -14,7 +14,7 @@
itemprop="description" itemprop="description"
content="Collection of handy online tools for developers, with great UX. IT Tools is a free and open-source collection of handy online tools for developers & people working in IT." content="Collection of handy online tools for developers, with great UX. IT Tools is a free and open-source collection of handy online tools for developers & people working in IT."
/> />
<link rel="author" href="humans.txt" /> <!-- <link rel="author" href="humans.txt" />
<link rel="canonical" href="https://it-tools.tech" /> <link rel="canonical" href="https://it-tools.tech" />
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png" /> <link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png" />
@ -44,6 +44,7 @@
/> />
<meta name="twitter:image" content="https://it-tools.tech/banner.png?v=2" /> <meta name="twitter:image" content="https://it-tools.tech/banner.png?v=2" />
<meta name="twitter:image:alt" content="IT Tools - Handy online tools for developers" /> <meta name="twitter:image:alt" content="IT Tools - Handy online tools for developers" />
-->
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>

View File

@ -3,7 +3,7 @@ home:
newestTools: Newest tools newestTools: Newest tools
favoriteTools: 'Your favorite tools' favoriteTools: 'Your favorite tools'
allTools: 'All the tools' allTools: 'All the tools'
subtitle: 'Handy tools for developers' subtitle: 'Avnit Testing Handy tools for developers'
toggleMenu: 'Toggle menu' toggleMenu: 'Toggle menu'
home: Home home: Home
uiLib: 'UI Lib' uiLib: 'UI Lib'
@ -30,20 +30,6 @@ about:
content: > content: >
# About IT-Tools # About IT-Tools
This wonderful website, made with ❤ by [Corentin Thomasset](https://github.com/CorentinTh) , aggregates useful tools for developer and people working in IT. If you find it useful, please feel free to share it to people you think may find it useful too and don't forget to bookmark it in your shortcut bar!
IT Tools is open-source (under the MIT license) and free, and will always be, but it costs me money to host and renew the domain name. If you want to support my work, and encourage me to add more tools, please consider supporting by [sponsoring me](https://www.buymeacoffee.com/cthmsst).
## Technologies
IT Tools is made in Vue.js (Vue 3) with the the Naive UI component library and is hosted and continuously deployed by Vercel. Third-party open-source libraries are used in some tools, you may find the complete list in the [package.json](https://github.com/CorentinTh/it-tools/blob/main/package.json) file of the repository.
## Found a bug? A tool is missing?
If you need a tool that is currently not present here, and you think can be useful, you are welcome to submit a feature request in the [issues section](https://github.com/CorentinTh/it-tools/issues/new/choose) in the GitHub repository.
And if you found a bug, or something doesn't work as expected, please file a bug report in the [issues section](https://github.com/CorentinTh/it-tools/issues/new/choose) in the GitHub repository.
404: 404:
notFound: '404 Not Found' notFound: '404 Not Found'
sorry: 'Sorry, this page does not seem to exist' sorry: 'Sorry, this page does not seem to exist'

5
run.sh Executable file
View File

@ -0,0 +1,5 @@
sudo docker build -t it-tools .
sudo docker tag it-tools:latest abambah/it-tools:v3
sudo docker push abambah/it-tools:v3
sudo docker rm --force it-tools
sudo docker run -d --name it-tools --restart unless-stopped -p 8081:80 abambah/it-tools:v3

View File

@ -7,43 +7,7 @@ const { isDarkTheme } = toRefs(styleStore);
</script> </script>
<template> <template>
<c-tooltip :tooltip="$t('home.nav.github')" position="bottom"> <p>test this too</p>
<c-button
circle
variant="text"
href="https://github.com/CorentinTh/it-tools"
target="_blank"
rel="noopener noreferrer"
:aria-label="$t('home.nav.githubRepository')"
>
<n-icon size="25" :component="BrandGithub" />
</c-button>
</c-tooltip>
<c-tooltip :tooltip="$t('home.nav.twitter')" position="bottom">
<c-button
circle
variant="text"
href="https://twitter.com/ittoolsdottech"
rel="noopener"
target="_blank"
:aria-label="$t('home.nav.twitterAccount')"
>
<n-icon size="25" :component="BrandTwitter" />
</c-button>
</c-tooltip>
<c-tooltip :tooltip="$t('home.nav.about')" position="bottom">
<c-button circle variant="text" to="/about" :aria-label="$t('home.nav.aboutLabel')">
<n-icon size="25" :component="InfoCircle" />
</c-button>
</c-tooltip>
<c-tooltip :tooltip="isDarkTheme ? $t('home.nav.lightMode') : $t('home.nav.darkMode')" position="bottom">
<c-button circle variant="text" :aria-label="$t('home.nav.mode')" @click="() => styleStore.toggleDark()">
<n-icon v-if="isDarkTheme" size="25" :component="Sun" />
<n-icon v-else size="25" :component="Moon" />
</c-button>
</c-tooltip>
</template> </template>
<style lang="less" scoped> <style lang="less" scoped>

View File

@ -63,7 +63,7 @@ const tools = computed<ToolCategory[]>(() => [
<div> <div>
IT-Tools IT-Tools
<c-link target="_blank" rel="noopener" :href="`https://github.com/CorentinTh/it-tools/tree/v${version}`"> <c-link target="_blank" rel="noopener" :href="`https://github.com/avnit/it-tools/tree/v${version}`">
v{{ version }} v{{ version }}
</c-link> </c-link>
@ -73,18 +73,12 @@ const tools = computed<ToolCategory[]>(() => [
target="_blank" target="_blank"
rel="noopener" rel="noopener"
type="primary" type="primary"
:href="`https://github.com/CorentinTh/it-tools/tree/${commitSha}`" :href="`https://github.com/avnit/it-tools/tree/${commitSha}`"
> >
{{ commitSha }} {{ commitSha }}
</c-link> </c-link>
</template> </template>
</div> </div>
<div>
© {{ new Date().getFullYear() }}
<c-link target="_blank" rel="noopener" href="https://github.com/CorentinTh">
Corentin Thomasset
</c-link>
</div>
</div> </div>
</div> </div>
</template> </template>
@ -111,29 +105,14 @@ const tools = computed<ToolCategory[]>(() => [
<icon-mdi:brush-variant text-20px /> <icon-mdi:brush-variant text-20px />
</c-button> </c-button>
</c-tooltip> </c-tooltip>
<command-palette /> <command-palette />
<!--
<locale-selector v-if="!styleStore.isSmallScreen" /> <locale-selector v-if="!styleStore.isSmallScreen" />
<div> <div>
<NavbarButtons v-if="!styleStore.isSmallScreen" /> <NavbarButtons v-if="!styleStore.isSmallScreen" />
</div> </div>
-->
<c-tooltip position="bottom" :tooltip="$t('home.support')">
<c-button
round
href="https://www.buymeacoffee.com/cthmsst"
rel="noopener"
target="_blank"
class="support-button"
:bordered="false"
@click="() => tracker.trackEvent({ eventName: 'Support button clicked' })"
>
{{ $t('home.buyMeACoffee') }}
<NIcon v-if="!styleStore.isSmallScreen" :component="Heart" ml-2 />
</c-button>
</c-tooltip>
</div> </div>
<slot /> <slot />
</template> </template>

View File

@ -1,9 +0,0 @@
<script setup lang="ts">
import { useHead } from '@vueuse/head';
useHead({ title: 'About - IT Tools' });
</script>
<template>
<c-markdown :markdown="$t('about.content')" mx-auto mt-50px max-w-600px />
</template>

View File

@ -35,6 +35,11 @@ const { t } = useI18n();
<n-icon :component="Heart" /> <n-icon :component="Heart" />
</ColoredCard> </ColoredCard>
</div> </div>
<n-grid v-if="config.showBanner" x-gap="12" y-gap="12" cols="1 400:2 800:3 1200:4 2000:8">
<n-gi>
<p>testing this </p>
</n-gi>
</n-grid>
<transition name="height"> <transition name="height">
<div v-if="toolStore.favoriteTools.length > 0"> <div v-if="toolStore.favoriteTools.length > 0">

80
src/pages/test.page.vue Normal file
View File

@ -0,0 +1,80 @@
<script setup lang="ts">
import { Heart } from '@vicons/tabler';
import { useHead } from '@vueuse/head';
import ColoredCard from '../components/ColoredCard.vue';
import ToolCard from '../components/ToolCard.vue';
import { useToolStore } from '@/tools/tools.store';
import { config } from '@/config';
const toolStore = useToolStore();
</script>
<template>
<div class="home-page">
<div class="grid-wrapper">
<n-grid v-if="config.showBanner" x-gap="12" y-gap="12" cols="1 400:2 800:3 1200:4 2000:8">
<n-gi>
<p>testing this </p>
</n-gi>
</n-grid>
<transition name="height">
<div v-if="toolStore.favoriteTools.length > 0">
<n-h3>{{ $t('home.categories.favoriteTools') }}</n-h3>
<n-grid x-gap="12" y-gap="12" cols="1 400:2 800:3 1200:4 2000:8">
<n-gi v-for="tool in toolStore.favoriteTools" :key="tool.name">
<ToolCard :tool="tool" />
</n-gi>
</n-grid>
</div>
</transition>
<div v-if="toolStore.newTools.length > 0">
<n-h3>{{ t('home.categories.newestTools') }}</n-h3>
<n-grid x-gap="12" y-gap="12" cols="1 400:2 800:3 1200:4 2000:8">
<n-gi v-for="tool in toolStore.newTools" :key="tool.name">
<ToolCard :tool="tool" />
</n-gi>
</n-grid>
</div>
<n-h3>{{ $t('home.categories.allTools') }}</n-h3>
<n-grid x-gap="12" y-gap="12" cols="1 400:2 800:3 1200:4 2000:8">
<n-gi v-for="tool in toolStore.tools" :key="tool.name">
<transition>
<ToolCard :tool="tool" />
</transition>
</n-gi>
</n-grid>
</div>
</div>
</template>
<style scoped lang="less">
.home-page {
padding-top: 50px;
}
.n-h3 {
margin-bottom: 10px;
}
::v-deep(.n-grid) {
margin-bottom: 30px;
}
.height-enter-active,
.height-leave-active {
transition: all 0.5s ease-in-out;
overflow: hidden;
max-height: 500px;
}
.height-enter-from,
.height-leave-to {
max-height: 42px;
overflow: hidden;
opacity: 0;
margin-bottom: 0;
}
</style>

View File

@ -2,6 +2,7 @@ import { createRouter, createWebHistory } from 'vue-router';
import { layouts } from './layouts/index'; import { layouts } from './layouts/index';
import HomePage from './pages/Home.page.vue'; import HomePage from './pages/Home.page.vue';
import NotFound from './pages/404.page.vue'; import NotFound from './pages/404.page.vue';
import test from './pages/test.page.vue';
import { tools } from './tools'; import { tools } from './tools';
import { config } from './config'; import { config } from './config';
import { routes as demoRoutes } from './ui/demo/demo.routes'; import { routes as demoRoutes } from './ui/demo/demo.routes';
@ -24,12 +25,12 @@ const router = createRouter({
{ {
path: '/', path: '/',
name: 'home', name: 'home',
component: HomePage, component: test,
}, },
{ {
path: '/about', path: '/about',
name: 'about', name: 'about',
component: () => import('./pages/About.vue'), component: HomePage,
}, },
...toolsRoutes, ...toolsRoutes,
...toolsRedirectRoutes, ...toolsRedirectRoutes,