18
18
19
19
import {
20
20
ChangeDetectionStrategy ,
21
- Component , Inject ,
21
+ Component , effect , Inject ,
22
22
OnDestroy , OnInit , Renderer2 ,
23
23
signal ,
24
24
Signal ,
25
25
ViewChild ,
26
26
WritableSignal
27
27
} from '@angular/core' ;
28
- import { CommonModule , NgOptimizedImage } from '@angular/common' ;
28
+ import { CommonModule , DOCUMENT , NgOptimizedImage } from '@angular/common' ;
29
29
import { LoadingState } from '../../shared/LoadingState' ;
30
30
import { LoadingComponent } from '../../shared/components/loading/loading.component' ;
31
31
import { MonacoEditorModule } from 'ngx-monaco-editor-v2' ;
@@ -46,7 +46,7 @@ import { PlatformInfoPopupComponent } from './shared/platform-info-popup/platfor
46
46
import { SearchablePage } from '../../shared/components/site-wide-search/SearchablePage' ;
47
47
import { StateService } from '../../shared/services/state.service' ;
48
48
import { toSignal } from '@angular/core/rxjs-interop' ;
49
- import { ActivatedRoute } from '@angular/router' ;
49
+ import { ActivatedRoute , Params , Router } from '@angular/router' ;
50
50
import { SharePopupComponent } from './shared/share-popup/share-popup.component' ;
51
51
import { LoadAndSavePopupComponent } from './shared/load-and-save-popup/load-and-save-popup.component' ;
52
52
import { LOCAL_STORAGE , StorageService } from 'ngx-webstorage-service' ;
@@ -105,6 +105,9 @@ export class PlaygroundComponent implements SearchablePage, OnInit, OnDestroy {
105
105
* @param stateService
106
106
* @param activatedRoute
107
107
* @param storageService
108
+ * @param document
109
+ * @param renderer
110
+ * @param router
108
111
*/
109
112
constructor (
110
113
protected titleService : Title ,
@@ -115,7 +118,9 @@ export class PlaygroundComponent implements SearchablePage, OnInit, OnDestroy {
115
118
protected stateService : StateService ,
116
119
protected activatedRoute : ActivatedRoute ,
117
120
@Inject ( LOCAL_STORAGE ) protected storageService : StorageService ,
118
- protected renderer : Renderer2
121
+ @Inject ( DOCUMENT ) protected document : Document ,
122
+ protected renderer : Renderer2 ,
123
+ protected router : Router
119
124
) {
120
125
this . titleService . setTitle ( 'Playground - SYCL.tech' ) ;
121
126
this . meta . addTag ( { name : 'keywords' , content : this . getKeywords ( ) . join ( ', ' ) } ) ;
@@ -124,6 +129,31 @@ export class PlaygroundComponent implements SearchablePage, OnInit, OnDestroy {
124
129
this . showMonacoEditor . set ( this . platformService . isClient ( ) ) ;
125
130
this . compilationResult$ = new BehaviorSubject < CompilationResultModel | undefined > ( undefined ) ;
126
131
this . compilationResult = toSignal ( this . compilationResult$ , { initialValue : undefined } ) ;
132
+
133
+ // Effect to handle full screen mode
134
+ effect ( ( ) => {
135
+ const fs = this . fullscreenMode ( ) ;
136
+
137
+ const topNav = document . body . querySelectorAll ( 'nav' ) ;
138
+ const topFooter = document . body . querySelectorAll ( 'footer' ) ;
139
+
140
+ if ( topNav . length == 0 || topFooter . length == 0 ) {
141
+ return ;
142
+ }
143
+
144
+ if ( fs ) {
145
+ this . renderer . addClass ( topNav [ 0 ] , 'hidden' ) ;
146
+ this . renderer . addClass ( topFooter [ 0 ] , 'hidden' ) ;
147
+ } else {
148
+ this . renderer . removeClass ( topNav [ 0 ] , 'hidden' ) ;
149
+ this . renderer . removeClass ( topFooter [ 0 ] , 'hidden' ) ;
150
+ }
151
+
152
+ // Update query params with fs value
153
+ const queryParams : Params = { fs : fs ? true : null } ;
154
+ this . router . navigate ( [ ] , {
155
+ relativeTo : this . activatedRoute , queryParams, queryParamsHandling : 'merge' } ) . then ( ) ;
156
+ } ) ;
127
157
}
128
158
129
159
/**
@@ -159,6 +189,11 @@ export class PlaygroundComponent implements SearchablePage, OnInit, OnDestroy {
159
189
take ( 1 )
160
190
) . subscribe ( ) ;
161
191
}
192
+
193
+ // Enable full screen mode if its set via params
194
+ if ( params [ 'fs' ] === 'true' ) {
195
+ this . fullscreenMode . set ( true ) ;
196
+ }
162
197
} ) ,
163
198
take ( 1 )
164
199
) . subscribe ( ) ;
@@ -439,7 +474,8 @@ export class PlaygroundComponent implements SearchablePage, OnInit, OnDestroy {
439
474
*/
440
475
onShareSample ( ) {
441
476
this . popupReference = this . popupService . create ( SharePopupComponent , {
442
- 'code' : this . code ( )
477
+ 'code' : this . code ( ) ,
478
+ 'fullScreen' : this . fullscreenMode ( )
443
479
} , true ) ;
444
480
}
445
481
@@ -475,20 +511,5 @@ export class PlaygroundComponent implements SearchablePage, OnInit, OnDestroy {
475
511
*/
476
512
onToggleFullscreen ( ) {
477
513
this . fullscreenMode . set ( ! this . fullscreenMode ( ) ) ;
478
-
479
- const topNav = document . body . querySelectorAll ( 'nav' ) ;
480
- const topFooter = document . body . querySelectorAll ( 'footer' ) ;
481
-
482
- if ( topNav . length == 0 || topFooter . length == 0 ) {
483
- return ;
484
- }
485
-
486
- if ( this . fullscreenMode ( ) ) {
487
- this . renderer . addClass ( topNav [ 0 ] , 'hidden' ) ;
488
- this . renderer . addClass ( topFooter [ 0 ] , 'hidden' ) ;
489
- } else {
490
- this . renderer . removeClass ( topNav [ 0 ] , 'hidden' ) ;
491
- this . renderer . removeClass ( topFooter [ 0 ] , 'hidden' ) ;
492
- }
493
514
}
494
515
}
0 commit comments