feat(new-tool): device information
This commit is contained in:
		
							parent
							
								
									09abffbcf9
								
							
						
					
					
						commit
						277bd5f0da
					
				
							
								
								
									
										114
									
								
								src/tools/device-information/device-information.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								src/tools/device-information/device-information.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,114 @@ | ||||
| <template> | ||||
|   <n-card | ||||
|     v-for="{name, information} in sections" | ||||
|     :key="name" | ||||
|     :title="name" | ||||
|     style="margin-bottom: 15px;" | ||||
|   > | ||||
|     <n-grid | ||||
|       cols="1 400:2" | ||||
|       x-gap="12" | ||||
|       y-gap="12" | ||||
|     > | ||||
|       <n-gi | ||||
|         v-for="{label, value} in information" | ||||
|         :key="label" | ||||
|         class="information" | ||||
|       > | ||||
|         <n-card | ||||
|           :bordered="false" | ||||
|           embedded | ||||
|         > | ||||
|           <div class="label"> | ||||
|             {{ label }} | ||||
|           </div> | ||||
| 
 | ||||
|           <div class="value"> | ||||
|             <n-ellipsis> | ||||
|               {{ value.value }} | ||||
|             </n-ellipsis> | ||||
|           </div> | ||||
|         </n-card> | ||||
|       </n-gi> | ||||
|     </n-grid> | ||||
|   </n-card> | ||||
| </template> | ||||
| 
 | ||||
| <script setup lang="ts"> | ||||
| import { useWindowSize } from '@vueuse/core' | ||||
| import { computed } from 'vue'; | ||||
| 
 | ||||
| const { width, height } = useWindowSize() | ||||
| 
 | ||||
| const sections = [ | ||||
|   { | ||||
|     name: 'Screen', | ||||
|     information: [ | ||||
|       { | ||||
|         label: 'Screen size', | ||||
|         value: computed(() => `${window.screen.availWidth} x ${window.screen.availHeight}`) | ||||
|       }, | ||||
|       { | ||||
|         label: 'Orientation', | ||||
|         value:  computed(() => window.screen.orientation.type) | ||||
|       }, | ||||
|       { | ||||
|         label: 'Orientation angle', | ||||
|         value:  computed(() => `${window.screen.orientation.angle}°`) | ||||
|       }, | ||||
|       { | ||||
|         label: 'Color depth', | ||||
|         value:  computed(() => `${window.screen.colorDepth} bits`) | ||||
|       }, | ||||
|       { | ||||
|         label: 'Pixel ratio', | ||||
|         value:  computed(() => `${window.devicePixelRatio} dppx`) | ||||
|       }, | ||||
|       { | ||||
|         label: 'Window size', | ||||
|         value: computed(() => `${width.value} x ${height.value}`) | ||||
|       } | ||||
|     ] | ||||
|   }, | ||||
|   { | ||||
|     name: 'Device', | ||||
|     information: [ | ||||
|       { | ||||
|         label: 'Browser vendor', | ||||
|         value: computed(() => navigator.vendor) | ||||
|       }, | ||||
|             { | ||||
|         label: 'Languages', | ||||
|         value: computed(() => navigator.languages.join(', ')) | ||||
|       }, | ||||
|             { | ||||
|         label: 'Plateform', | ||||
|         value: computed(() => navigator.platform) | ||||
|       }, | ||||
|       { | ||||
|         label: 'User agent', | ||||
|         value: computed(() => navigator.userAgent) | ||||
|       } | ||||
|     ] | ||||
|   } | ||||
| ] | ||||
| 
 | ||||
| 
 | ||||
| </script> | ||||
| 
 | ||||
| <style lang="less" scoped> | ||||
| .information { | ||||
| 
 | ||||
|   .label {   | ||||
|     font-size: 14px; | ||||
|     opacity: 0.8; | ||||
|     line-height: 1; | ||||
|     margin-bottom: 5px; | ||||
|   } | ||||
|   .value { | ||||
|     font-size: 20px; | ||||
|     font-weight: 400; | ||||
|     line-height: 1; | ||||
|   } | ||||
| } | ||||
| </style> | ||||
							
								
								
									
										11
									
								
								src/tools/device-information/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/tools/device-information/index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | ||||
| import { DeviceDesktop } from '@vicons/tabler'; | ||||
| import type { ITool } from './../Tool'; | ||||
| 
 | ||||
| export const tool: ITool = { | ||||
|   name: 'Device information', | ||||
|   path: '/device-information', | ||||
|   description: 'Get information about your current device (screen size, pixel-ratio, user agent, ...)', | ||||
|   keywords: ['device', 'information', 'screen', 'pixel', 'ratio', 'status', 'data', 'computer', 'size', 'user', 'agent'], | ||||
|   component: () => import('./device-information.vue'), | ||||
|   icon: DeviceDesktop, | ||||
| }; | ||||
| @ -1,6 +1,7 @@ | ||||
| import { LockOpen } from '@vicons/tabler'; | ||||
| import type { ToolCategory } from './Tool'; | ||||
| 
 | ||||
| import { tool as deviceInformation } from './device-information'; | ||||
| import { tool as bcrypt } from './bcrypt'; | ||||
| import { tool as caseConverter } from './case-converter'; | ||||
| import { tool as colorConverter } from './color-converter'; | ||||
| @ -35,7 +36,7 @@ export const toolsByCategory: ToolCategory[] = [ | ||||
|   { | ||||
|     name: 'Web', | ||||
|     icon: LockOpen, | ||||
|     components: [urlEncoder, qrCodeGenerator], | ||||
|     components: [urlEncoder, qrCodeGenerator, deviceInformation], | ||||
|   }, | ||||
|   { | ||||
|     name: 'Development', | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user