Skip to content

Commit 952f69a

Browse files
committed
Merge branch 'feat/npm-display' into chore/all-my-stuffs
# Conflicts: # components.d.ts # package.json # pnpm-lock.yaml
2 parents 0e1cc03 + 48b8a7f commit 952f69a

File tree

47 files changed

+93
-5
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+93
-5
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@
197197
"vue-color-wheel": "^0.1.1",
198198
"vue-i18n": "^9.9.1",
199199
"vue-mathjax-next": "^0.0.6",
200+
"vue-markdown-render": "^2.2.1",
200201
"vue-router": "^4.1.6",
201202
"vue-shadow-dom": "^4.2.0",
202203
"vue-tsc": "^1.8.1",

pnpm-lock.yaml

Lines changed: 12 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/layouts/tool.layout.vue

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
import { useRoute } from 'vue-router';
33
import { useHead } from '@vueuse/head';
44
import type { HeadObject } from '@vueuse/head';
5+
import VueMarkdown from 'vue-markdown-render';
56
7+
import { useThemeVars } from 'naive-ui';
68
import BaseLayout from './base.layout.vue';
79
import FavoriteButton from '@/components/FavoriteButton.vue';
810
import type { Tool } from '@/tools/tools.types';
@@ -28,6 +30,23 @@ const { t } = useI18n();
2830
const i18nKey = computed<string>(() => route.path.trim().replace('/', ''));
2931
const toolTitle = computed<string>(() => t(`tools.${i18nKey.value}.title`, String(route.meta.name)));
3032
const toolDescription = computed<string>(() => t(`tools.${i18nKey.value}.description`, String(route.meta.description)));
33+
const toolFooter = computed<string>(() => {
34+
const createLink = (linkText: string, url: string) => {
35+
return `[${linkText.replace('[', '\\[').replace(']', '\\]')}](${url.replace('(', '%28').replace(')', '%29')})`;
36+
};
37+
let footer = t(`tools.${i18nKey.value}.footer`, String(route.meta.footer));
38+
if (footer === 'undefined') {
39+
footer = '';
40+
}
41+
const npmPackages = (route.meta.npmPackages as string[] || [])
42+
.map(
43+
packageName => createLink(
44+
packageName,
45+
packageName.includes('://') ? packageName : `https://www.npmjs.com/package/${packageName}`),
46+
);
47+
return ((npmPackages.length > 0 ? `Made with ${npmPackages.join(', ')}\n` : '') + footer).trim();
48+
});
49+
const themeVars = useThemeVars();
3150
</script>
3251

3352
<template>
@@ -55,6 +74,10 @@ const toolDescription = computed<string>(() => t(`tools.${i18nKey.value}.descrip
5574
<div class="tool-content">
5675
<slot />
5776
</div>
77+
78+
<div class="tool-footer">
79+
<VueMarkdown :source="toolFooter" />
80+
</div>
5881
</BaseLayout>
5982
</template>
6083

@@ -66,9 +89,11 @@ const toolDescription = computed<string>(() => t(`tools.${i18nKey.value}.descrip
6689
align-items: flex-start;
6790
flex-wrap: wrap;
6891
gap: 16px;
92+
overflow-x: auto;
6993
7094
::v-deep(& > *) {
7195
flex: 0 1 600px;
96+
min-width:0;
7297
}
7398
}
7499
@@ -105,4 +130,14 @@ const toolDescription = computed<string>(() => t(`tools.${i18nKey.value}.descrip
105130
}
106131
}
107132
}
133+
.tool-footer {
134+
opacity: 0.7;
135+
font-size: 12px;
136+
text-align: center;
137+
138+
::v-deep(a) {
139+
color: v-bind('themeVars.textColor1');
140+
font-style: italic;
141+
}
142+
}
108143
</style>

src/tools/ascii-text-drawer/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ export const tool = defineTool({
99
component: () => import('./ascii-text-drawer.vue'),
1010
icon: Artboard,
1111
createdAt: new Date('2024-03-03'),
12+
npmPackages: ['figlet'],
1213
});

src/tools/base64-file-converter/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ export const tool = defineTool({
99
keywords: ['base64', 'converter', 'upload', 'image', 'file', 'conversion', 'web', 'data', 'format'],
1010
component: () => import('./base64-file-converter.vue'),
1111
icon: FileDigit,
12+
npmPackages: ['js-base64'],
1213
});

src/tools/base64-string-converter/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ export const tool = defineTool({
1010
component: () => import('./base64-string-converter.vue'),
1111
icon: FileDigit,
1212
redirectFrom: ['/file-to-base64', '/base64-converter'],
13+
npmPackages: ['js-base64'],
1314
});

src/tools/bcrypt/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ export const tool = defineTool({
99
keywords: ['bcrypt', 'hash', 'compare', 'password', 'salt', 'round', 'storage', 'crypto'],
1010
component: () => import('./bcrypt.vue'),
1111
icon: LockSquare,
12+
npmPackages: ['bcryptjs'],
1213
});

src/tools/bip39-generator/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ export const tool = defineTool({
99
keywords: ['BIP39', 'passphrase', 'generator', 'mnemonic', 'entropy'],
1010
component: () => import('./bip39-generator.vue'),
1111
icon: AlignJustified,
12+
npmPackages: ['@it-tools/bip39'],
1213
});

src/tools/case-converter/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,5 @@ export const tool = defineTool({
2323
],
2424
component: () => import('./case-converter.vue'),
2525
icon: LetterCaseToggle,
26+
npmPackages: ['change-case'],
2627
});

src/tools/color-converter/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ export const tool = defineTool({
1010
component: () => import('./color-converter.vue'),
1111
icon: Palette,
1212
redirectFrom: ['/color-picker-converter'],
13+
npmPackages: ['colord'],
1314
});

0 commit comments

Comments
 (0)