mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -05:00 
			
		
		
		
	Converting colors experiment
This commit is contained in:
		| @@ -1,7 +1,7 @@ | |||||||
| import { Component, Input, forwardRef } from '@angular/core'; | import { Component, Input, forwardRef } from '@angular/core'; | ||||||
| import { NG_VALUE_ACCESSOR } from '@angular/forms'; | import { NG_VALUE_ACCESSOR } from '@angular/forms'; | ||||||
| import { ColorEvent, ColorMode } from 'ngx-color'; | import { ColorEvent, ColorMode } from 'ngx-color'; | ||||||
| import { randomColor } from 'src/app/utils/color'; | import { randomColor, hslToHex } from 'src/app/utils/color'; | ||||||
| import { AbstractInputComponent } from '../abstract-input'; | import { AbstractInputComponent } from '../abstract-input'; | ||||||
|  |  | ||||||
| @Component({ | @Component({ | ||||||
| @@ -24,15 +24,18 @@ export class ColorComponent extends AbstractInputComponent<string> { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   randomize() { |   randomize() { | ||||||
|     this.colorChanged(randomColor()) |     const color = randomColor(this.colorMode) | ||||||
|  |     let colorHex = color | ||||||
|  |     if (this.colorMode == ColorMode.HSL) { | ||||||
|  |       const hsl = color.split(',') | ||||||
|  |       colorHex = hslToHex(+hsl[0], +hsl[1], +hsl[2]) | ||||||
|  |     } | ||||||
|  |     this.value = colorHex | ||||||
|  |     this.onChange(color) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   sliderChanged(colorEvent:ColorEvent) { |   sliderChanged(colorEvent:ColorEvent) { | ||||||
|     this.colorChanged(colorEvent.color[this.colorMode].toString()) |     this.value = colorEvent.color.hex | ||||||
|   } |     this.onChange(colorEvent.color[this.colorMode].toString()) | ||||||
|  |  | ||||||
|   colorChanged(color:string) { |  | ||||||
|     this.value = color |  | ||||||
|     this.onChange(color) |  | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -105,7 +105,7 @@ | |||||||
|             <span i18n>Theme Color</span> |             <span i18n>Theme Color</span> | ||||||
|           </div> |           </div> | ||||||
|           <div class="col-3"> |           <div class="col-3"> | ||||||
|             <app-input-color i18n-title title="" formControlName="themeColor" [error]="error?.color"></app-input-color> |             <app-input-color i18n-title colorMode="hsl" formControlName="themeColor" [error]="error?.color"></app-input-color> | ||||||
|           </div> |           </div> | ||||||
|           <div class="col-2"> |           <div class="col-2"> | ||||||
|             <button class="btn btn-link btn-sm pt-2 ps-0" [disabled]="!this.settingsForm.get('themeColor').value" (click)="clearThemeColor()"> |             <button class="btn btn-link btn-sm pt-2 ps-0" [disabled]="!this.settingsForm.get('themeColor').value" (click)="clearThemeColor()"> | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| import { DOCUMENT } from '@angular/common'; | import { DOCUMENT } from '@angular/common'; | ||||||
| import { Inject, Injectable, LOCALE_ID, Renderer2, RendererFactory2 } from '@angular/core'; | import { Inject, Injectable, LOCALE_ID, Renderer2, RendererFactory2, RendererStyleFlags2 } from '@angular/core'; | ||||||
| import { Meta } from '@angular/platform-browser'; | import { Meta } from '@angular/platform-browser'; | ||||||
| import { CookieService } from 'ngx-cookie-service'; | import { CookieService } from 'ngx-cookie-service'; | ||||||
|  |  | ||||||
| @@ -87,7 +87,12 @@ export class SettingsService { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (themeColor) { |     if (themeColor) { | ||||||
|       console.log('set theme color') |       const hsl = themeColor.split(',') | ||||||
|  |       this.renderer.setStyle(document.documentElement, '--pngx-primary',`${+hsl[0] * 360},${hsl[1] * 100}%`, RendererStyleFlags2.DashCase) | ||||||
|  |       this.renderer.setStyle(document.documentElement, '--pngx-primary-lightness',`${hsl[2] * 100}%`, RendererStyleFlags2.DashCase) | ||||||
|  |     } else { | ||||||
|  |       this.renderer.removeStyle(document.documentElement, '--pngx-primary', RendererStyleFlags2.DashCase) | ||||||
|  |       this.renderer.removeStyle(document.documentElement, '--pngx-primary-lightness', RendererStyleFlags2.DashCase) | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,3 +1,4 @@ | |||||||
|  | import { ColorMode } from "ngx-color" | ||||||
|  |  | ||||||
| function componentToHex(c) { | function componentToHex(c) { | ||||||
|   var hex = Math.floor(c).toString(16) |   var hex = Math.floor(c).toString(16) | ||||||
| @@ -42,7 +43,21 @@ function hslToRgb(h, s, l){ | |||||||
|   return [r * 255, g * 255, b * 255] |   return [r * 255, g * 255, b * 255] | ||||||
| } | } | ||||||
|  |  | ||||||
| export function randomColor() { | export function hslToHex(h: number, s: number, l:number): string { | ||||||
|   let rgb = hslToRgb(Math.random(), 0.6, Math.random() * 0.4 + 0.4) |   const rgb = hslToRgb(h,s,l) | ||||||
|   return `#${componentToHex(rgb[0])}${componentToHex(rgb[1])}${componentToHex(rgb[2])}` |   return `#${componentToHex(rgb[0])}${componentToHex(rgb[1])}${componentToHex(rgb[2])}` | ||||||
| } | } | ||||||
|  |  | ||||||
|  | export function randomColor(colorMode: ColorMode = ColorMode.HEX) { | ||||||
|  |   const h = Math.random() | ||||||
|  |   const s = 0.6 | ||||||
|  |   const l = Math.random() * 0.4 + 0.4 | ||||||
|  |   switch (colorMode) { | ||||||
|  |     case ColorMode.HSL: | ||||||
|  |       return `${h},${s},${l}` | ||||||
|  |       break; | ||||||
|  |     default: // HEX | ||||||
|  |       return hslToHex(h,s,l) | ||||||
|  |       break; | ||||||
|  |   } | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Michael Shamoon
					Michael Shamoon