| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- import * as zstd from "zstddec";
- import { KeyEvent, controlKeyFromJSON, ControlKey } from "./message";
- import { KEY_MAP, LANGS } from "./gen_js_from_hbb";
- let decompressor: zstd.ZSTDDecoder;
- export async function initZstd() {
- const tmp = new zstd.ZSTDDecoder();
- await tmp.init();
- console.log("zstd ready");
- decompressor = tmp;
- }
- export async function decompress(compressedArray: Uint8Array) {
- const MAX = 1024 * 1024 * 64;
- const MIN = 1024 * 1024;
- let n = 30 * compressedArray.length;
- if (n > MAX) {
- n = MAX;
- }
- if (n < MIN) {
- n = MIN;
- }
- try {
- if (!decompressor) {
- await initZstd();
- }
- return decompressor.decode(compressedArray, n);
- } catch (e) {
- console.error("decompress failed: " + e);
- return undefined;
- }
- }
- const LANG = getLang();
- export function translate(locale: string, text: string): string {
- const lang = LANG || locale.substring(locale.length - 2).toLowerCase();
- let en = LANGS.en as any;
- let dict = (LANGS as any)[lang];
- if (!dict) dict = en;
- let res = dict[text];
- if (!res && lang != "en") res = en[text];
- return res || text;
- }
- const zCode = "z".charCodeAt(0);
- const aCode = "a".charCodeAt(0);
- export function mapKey(name: string, isDesktop: Boolean) {
- const tmp = KEY_MAP[name] || name;
- if (tmp.length == 1) {
- const chr = tmp.charCodeAt(0);
- if (!isDesktop && (chr > zCode || chr < aCode))
- return KeyEvent.fromPartial({ unicode: chr });
- else return KeyEvent.fromPartial({ chr });
- }
- const control_key = controlKeyFromJSON(tmp);
- if (control_key == ControlKey.UNRECOGNIZED) {
- console.error("Unknown control key " + tmp);
- }
- return KeyEvent.fromPartial({ control_key });
- }
- export async function sleep(ms: number) {
- await new Promise((r) => setTimeout(r, ms));
- }
- function getLang(): string {
- try {
- const queryString = window.location.search;
- const urlParams = new URLSearchParams(queryString);
- return urlParams.get("lang") || "";
- } catch (e) {
- return "";
- }
- }
|