Skip to content

Commit 31060ee

Browse files
committed
share the same fullscreen logic to utils
1 parent ac3c4df commit 31060ee

File tree

3 files changed

+27
-37
lines changed

3 files changed

+27
-37
lines changed

web_src/js/components/RepoActionView.vue

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {formatDatetime} from '../utils/time.ts';
77
import {renderAnsi} from '../render/ansi.ts';
88
import {POST, DELETE} from '../modules/fetch.ts';
99
import type {IntervalId} from '../types.ts';
10+
import {toggleFullScreen} from '../utils.ts';
1011
1112
// see "models/actions/status.go", if it needs to be used somewhere else, move it to a shared file like "types/actions.ts"
1213
type RunStatus = 'unknown' | 'waiting' | 'running' | 'success' | 'failure' | 'cancelled' | 'skipped' | 'blocked';
@@ -416,21 +417,7 @@ export default defineComponent({
416417
417418
toggleFullScreen() {
418419
this.isFullScreen = !this.isFullScreen;
419-
const fullScreenEl = document.querySelector('.action-view-right');
420-
const outerEl = document.querySelector('.full.height');
421-
const actionBodyEl = document.querySelector('.action-view-body');
422-
const headerEl = document.querySelector('#navbar');
423-
const contentEl = document.querySelector('.page-content');
424-
const footerEl = document.querySelector('.page-footer');
425-
toggleElem(headerEl, !this.isFullScreen);
426-
toggleElem(contentEl, !this.isFullScreen);
427-
toggleElem(footerEl, !this.isFullScreen);
428-
// move .action-view-right to new parent
429-
if (this.isFullScreen) {
430-
outerEl.append(fullScreenEl);
431-
} else {
432-
actionBodyEl.append(fullScreenEl);
433-
}
420+
toggleFullScreen('.action-view-right', this.isFullScreen, '.action-view-body');
434421
},
435422
async hashChangeListener() {
436423
const selectedLogStep = window.location.hash;

web_src/js/features/repo-projects.ts

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import {contrastColor} from '../utils/color.ts';
2-
import {toggleClass, toggleElem} from '../utils/dom.ts';
32
import {createSortable} from '../modules/sortable.ts';
43
import {POST, request} from '../modules/fetch.ts';
54
import {fomanticQuery} from '../modules/fomantic/base.ts';
6-
import {queryElemChildren, queryElems} from '../utils/dom.ts';
5+
import {queryElemChildren, queryElems, toggleElem} from '../utils/dom.ts';
76
import type {SortableEvent} from 'sortablejs';
7+
import {toggleFullScreen} from '../utils.ts';
88

99
function updateIssueCount(card: HTMLElement): void {
1010
const parent = card.parentElement;
@@ -140,25 +140,6 @@ function initRepoProjectColumnEdit(writableProjectBoard: Element): void {
140140
});
141141
}
142142

143-
function toggleProjectViewFullScreen(fullscreenElementsSelector: string, isFullScreen: boolean): void {
144-
// hide other elements
145-
const headerEl = document.querySelector('#navbar');
146-
const contentEl = document.querySelector('.page-content');
147-
const footerEl = document.querySelector('.page-footer');
148-
toggleElem(headerEl, !isFullScreen);
149-
toggleElem(contentEl, !isFullScreen);
150-
toggleElem(footerEl, !isFullScreen);
151-
152-
const fullScreenEls = document.querySelectorAll(fullscreenElementsSelector);
153-
const outerEl = document.querySelector('.full.height');
154-
toggleClass(fullscreenElementsSelector, 'fullscreen', isFullScreen);
155-
if (isFullScreen) {
156-
for (const e of fullScreenEls) outerEl.append(e);
157-
} else {
158-
for (const e of fullScreenEls) contentEl.append(e);
159-
}
160-
}
161-
162143
function initRepoProjectToggleFullScreen(): void {
163144
const enterFullscreenBtn = document.querySelector('.screen-full');
164145
const exitFullscreenBtn = document.querySelector('.screen-normal');
@@ -167,7 +148,7 @@ function initRepoProjectToggleFullScreen(): void {
167148
const fullscreenElementsSelector = enterFullscreenBtn.getAttribute('data-fullscreen-elements-selector');
168149

169150
const toggleFullscreenState = (isFullScreen: boolean) => {
170-
toggleProjectViewFullScreen(fullscreenElementsSelector, isFullScreen);
151+
toggleFullScreen(fullscreenElementsSelector, isFullScreen);
171152
toggleElem(enterFullscreenBtn);
172153
toggleElem(exitFullscreenBtn);
173154
};

web_src/js/utils.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {decode, encode} from 'uint8-to-base64';
22
import type {IssuePageInfo, IssuePathInfo, RepoOwnerPathInfo} from './types.ts';
3+
import {toggleClass, toggleElem} from './utils/dom.ts';
34

45
// transform /path/to/file.ext to /path/to
56
export function dirname(path: string): string {
@@ -179,3 +180,24 @@ export function isImageFile({name, type}: {name?: string, type?: string}): boole
179180
export function isVideoFile({name, type}: {name?: string, type?: string}): boolean {
180181
return /\.(mpe?g|mp4|mkv|webm)$/i.test(name || '') || type?.startsWith('video/');
181182
}
183+
184+
export function toggleFullScreen(fullscreenElementsSelector: string, isFullScreen: boolean, sourceParentSelector?: string): void {
185+
// hide other elements
186+
const headerEl = document.querySelector('#navbar');
187+
const contentEl = document.querySelector('.page-content');
188+
const footerEl = document.querySelector('.page-footer');
189+
toggleElem(headerEl, !isFullScreen);
190+
toggleElem(contentEl, !isFullScreen);
191+
toggleElem(footerEl, !isFullScreen);
192+
193+
const sourceParentEl = sourceParentSelector ? document.querySelector(sourceParentSelector) : contentEl;
194+
195+
const fullScreenEls = document.querySelectorAll(fullscreenElementsSelector);
196+
const outerEl = document.querySelector('.full.height');
197+
toggleClass(fullscreenElementsSelector, 'fullscreen', isFullScreen);
198+
if (isFullScreen) {
199+
for (const e of fullScreenEls) outerEl.append(e);
200+
} else {
201+
for (const e of fullScreenEls) sourceParentEl.append(e);
202+
}
203+
}

0 commit comments

Comments
 (0)