11import { defaultSettings } from '../context/defaults' ;
22import type { Percentage } from '../types' ;
3+ import { isTauriEnvironment } from './environment' ;
34
45const MINIMUM_ZOOM_PERCENTAGE = 0 as Percentage ;
56const MAXIMUM_ZOOM_PERCENTAGE = 120 as Percentage ;
67const RECOMMENDED_ZOOM_PERCENTAGE = defaultSettings . zoomPercentage ;
78const MULTIPLIER = 2 ;
89const ZOOM_STEP = 10 as Percentage ;
910
11+ /**
12+ * Browser fallback for zoom using CSS zoom and localStorage
13+ */
14+ const browserZoom = {
15+ getLevel : ( ) : number => {
16+ if ( typeof window === 'undefined' ) {
17+ return 0 ;
18+ }
19+ const zoomLevel = localStorage . getItem ( 'zoomLevel' ) ;
20+ return zoomLevel ? Number . parseFloat ( zoomLevel ) : 0 ;
21+ } ,
22+ setLevel : ( zoomLevel : number ) => {
23+ if ( typeof window === 'undefined' ) {
24+ return ;
25+ }
26+ localStorage . setItem ( 'zoomLevel' , zoomLevel . toString ( ) ) ;
27+ const zoomFactor = 1.2 ** zoomLevel ;
28+ const rootElement = document . getElementById ( 'root' ) ;
29+ if ( rootElement ) {
30+ rootElement . style . zoom = zoomFactor . toString ( ) ;
31+ }
32+ } ,
33+ } ;
34+
35+ /**
36+ * Get zoom API - uses Tauri if available, otherwise browser fallback
37+ */
38+ function getZoomApi ( ) {
39+ return isTauriEnvironment ( ) ? window . gitify . zoom : browserZoom ;
40+ }
41+
1042/**
1143 * Zoom percentage to level. 100% is the recommended zoom level (0).
1244 * If somehow the percentage is not set, it will return 0, the default zoom level.
@@ -55,7 +87,7 @@ export function canIncreaseZoom(zoomPercentage: Percentage) {
5587 */
5688export function decreaseZoom ( zoomPercentage : Percentage ) {
5789 if ( canDecreaseZoom ( zoomPercentage ) ) {
58- window . gitify . zoom . setLevel (
90+ getZoomApi ( ) . setLevel (
5991 zoomPercentageToLevel ( ( zoomPercentage - ZOOM_STEP ) as Percentage ) ,
6092 ) ;
6193 }
@@ -66,7 +98,7 @@ export function decreaseZoom(zoomPercentage: Percentage) {
6698 */
6799export function increaseZoom ( zoomPercentage : Percentage ) {
68100 if ( canIncreaseZoom ( zoomPercentage ) ) {
69- window . gitify . zoom . setLevel (
101+ getZoomApi ( ) . setLevel (
70102 zoomPercentageToLevel ( ( zoomPercentage + ZOOM_STEP ) as Percentage ) ,
71103 ) ;
72104 }
@@ -76,7 +108,12 @@ export function increaseZoom(zoomPercentage: Percentage) {
76108 * Reset zoom level
77109 */
78110export function resetZoomLevel ( ) {
79- window . gitify . zoom . setLevel (
80- zoomPercentageToLevel ( RECOMMENDED_ZOOM_PERCENTAGE ) ,
81- ) ;
111+ getZoomApi ( ) . setLevel ( zoomPercentageToLevel ( RECOMMENDED_ZOOM_PERCENTAGE ) ) ;
112+ }
113+
114+ /**
115+ * Get current zoom level (browser-compatible)
116+ */
117+ export function getCurrentZoomLevel ( ) : number {
118+ return getZoomApi ( ) . getLevel ( ) ;
82119}
0 commit comments