aboutsummaryrefslogtreecommitdiffstats
path: root/web_src/js/utils.ts
diff options
context:
space:
mode:
Diffstat (limited to 'web_src/js/utils.ts')
-rw-r--r--web_src/js/utils.ts50
1 files changed, 36 insertions, 14 deletions
diff --git a/web_src/js/utils.ts b/web_src/js/utils.ts
index b825a9339d..5e2f4d5106 100644
--- a/web_src/js/utils.ts
+++ b/web_src/js/utils.ts
@@ -1,19 +1,20 @@
import {decode, encode} from 'uint8-to-base64';
import type {IssuePageInfo, IssuePathInfo, RepoOwnerPathInfo} from './types.ts';
+import {toggleElemClass, toggleElem} from './utils/dom.ts';
-// transform /path/to/file.ext to /path/to
+/** transform /path/to/file.ext to /path/to */
export function dirname(path: string): string {
const lastSlashIndex = path.lastIndexOf('/');
return lastSlashIndex < 0 ? '' : path.substring(0, lastSlashIndex);
}
-// transform /path/to/file.ext to file.ext
+/** transform /path/to/file.ext to file.ext */
export function basename(path: string): string {
const lastSlashIndex = path.lastIndexOf('/');
return lastSlashIndex < 0 ? path : path.substring(lastSlashIndex + 1);
}
-// transform /path/to/file.ext to .ext
+/** transform /path/to/file.ext to .ext */
export function extname(path: string): string {
const lastSlashIndex = path.lastIndexOf('/');
const lastPointIndex = path.lastIndexOf('.');
@@ -21,18 +22,18 @@ export function extname(path: string): string {
return lastPointIndex < 0 ? '' : path.substring(lastPointIndex);
}
-// test whether a variable is an object
+/** test whether a variable is an object */
export function isObject(obj: any): boolean {
return Object.prototype.toString.call(obj) === '[object Object]';
}
-// returns whether a dark theme is enabled
+/** returns whether a dark theme is enabled */
export function isDarkTheme(): boolean {
const style = window.getComputedStyle(document.documentElement);
return style.getPropertyValue('--is-dark-theme').trim().toLowerCase() === 'true';
}
-// strip <tags> from a string
+/** strip <tags> from a string */
export function stripTags(text: string): string {
return text.replace(/<[^>]*>?/g, '');
}
@@ -61,27 +62,27 @@ export function parseIssuePageInfo(): IssuePageInfo {
};
}
-// parse a URL, either relative '/path' or absolute 'https://localhost/path'
+/** parse a URL, either relative '/path' or absolute 'https://localhost/path' */
export function parseUrl(str: string): URL {
return new URL(str, str.startsWith('http') ? undefined : window.location.origin);
}
-// return current locale chosen by user
+/** return current locale chosen by user */
export function getCurrentLocale(): string {
return document.documentElement.lang;
}
-// given a month (0-11), returns it in the documents language
+/** given a month (0-11), returns it in the documents language */
export function translateMonth(month: number) {
return new Date(Date.UTC(2022, month, 12)).toLocaleString(getCurrentLocale(), {month: 'short', timeZone: 'UTC'});
}
-// given a weekday (0-6, Sunday to Saturday), returns it in the documents language
+/** given a weekday (0-6, Sunday to Saturday), returns it in the documents language */
export function translateDay(day: number) {
return new Date(Date.UTC(2022, 7, day)).toLocaleString(getCurrentLocale(), {weekday: 'short', timeZone: 'UTC'});
}
-// convert a Blob to a DataURI
+/** convert a Blob to a DataURI */
export function blobToDataURI(blob: Blob): Promise<string> {
return new Promise((resolve, reject) => {
try {
@@ -99,7 +100,7 @@ export function blobToDataURI(blob: Blob): Promise<string> {
});
}
-// convert image Blob to another mime-type format.
+/** convert image Blob to another mime-type format. */
export function convertImage(blob: Blob, mime: string): Promise<Blob> {
return new Promise(async (resolve, reject) => {
try {
@@ -142,7 +143,7 @@ export function toAbsoluteUrl(url: string): string {
return `${window.location.origin}${url}`;
}
-// Encode an Uint8Array into a URLEncoded base64 string.
+/** Encode an Uint8Array into a URLEncoded base64 string. */
export function encodeURLEncodedBase64(uint8Array: Uint8Array): string {
return encode(uint8Array)
.replace(/\+/g, '-')
@@ -150,7 +151,7 @@ export function encodeURLEncodedBase64(uint8Array: Uint8Array): string {
.replace(/=/g, '');
}
-// Decode a URLEncoded base64 to an Uint8Array.
+/** Decode a URLEncoded base64 to an Uint8Array. */
export function decodeURLEncodedBase64(base64url: string): Uint8Array {
return decode(base64url
.replace(/_/g, '/')
@@ -179,3 +180,24 @@ export function isImageFile({name, type}: {name?: string, type?: string}): boole
export function isVideoFile({name, type}: {name?: string, type?: string}): boolean {
return /\.(mpe?g|mp4|mkv|webm)$/i.test(name || '') || type?.startsWith('video/');
}
+
+export function toggleFullScreen(fullscreenElementsSelector: string, isFullScreen: boolean, sourceParentSelector?: string): void {
+ // hide other elements
+ const headerEl = document.querySelector('#navbar');
+ const contentEl = document.querySelector('.page-content');
+ const footerEl = document.querySelector('.page-footer');
+ toggleElem(headerEl, !isFullScreen);
+ toggleElem(contentEl, !isFullScreen);
+ toggleElem(footerEl, !isFullScreen);
+
+ const sourceParentEl = sourceParentSelector ? document.querySelector(sourceParentSelector) : contentEl;
+
+ const fullScreenEl = document.querySelector(fullscreenElementsSelector);
+ const outerEl = document.querySelector('.full.height');
+ toggleElemClass(fullscreenElementsSelector, 'fullscreen', isFullScreen);
+ if (isFullScreen) {
+ outerEl.append(fullScreenEl);
+ } else {
+ sourceParentEl.append(fullScreenEl);
+ }
+}