diff --git a/generateCacheAssetsList.js b/generateCacheAssetsList.js new file mode 100644 index 0000000..e398b37 --- /dev/null +++ b/generateCacheAssetsList.js @@ -0,0 +1,21 @@ +import { readdirSync, statSync, writeFileSync } from 'fs'; +import { join } from 'path'; + +const directoryPath = join(import.meta.dirname, 'public'); // Adjust the path to your assets folder + +function getFiles(dir, files_) { + files_ = files_ || []; + const files = readdirSync(dir); + for (let i in files) { + const name = dir + '/' + files[i]; + if (statSync(name).isDirectory()) { + getFiles(name, files_); + } else { + files_.push(name.replace(`${import.meta.dirname}/public`, '')); // Adjust the path to match your public folder + } + } + return files_; +} + +const cacheAssets = getFiles(directoryPath); +writeFileSync(join(import.meta.dirname, '/public/cacheAssets.json'), JSON.stringify(cacheAssets, null, 2)); diff --git a/package.json b/package.json index 3e439e6..239d46a 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,9 @@ "main": "./server.js", "scripts": { "start": "node ./server.js", - "build": "npm run build:clean && npm run build:compile && npm run build:obfuscate", - "build:clean": "rimraf ./public/resources/scripts", + "build": "npm run build:clean && npm run build:generateCacheAssetsList && npm run build:compile && npm run build:obfuscate", + "build:clean": "rimraf ./public/resources/scripts ./public/cacheAssets.json", + "build:generateCacheAssetsList": "node ./generateCacheAssetsList.js", "build:compile": "tsc", "build:obfuscate": "javascript-obfuscator ./public/resources/scripts --output ./public/resources/scripts --options-preset high-obfuscation", "lint": "eslint ./src", diff --git a/public/cacheAssets.json b/public/cacheAssets.json new file mode 100644 index 0000000..e5fd5bf --- /dev/null +++ b/public/cacheAssets.json @@ -0,0 +1,685 @@ +[ + "/404.html", + "/game/offline/clients/Astra_Client.html", + "/game/offline/clients/EaglerForge.html", + "/game/offline/clients/Resent_Client.html", + "/game/offline/clients/Shadow_Client.html", + "/game/offline/clients/Starlike_Client.html", + "/game/offline/main/EaglercraftL_1.9.html", + "/game/offline/main/EaglercraftX_1.8.html", + "/game/offline/main/Eaglercraft_1.2.5.html", + "/game/offline/main/Eaglercraft_1.5.html", + "/game/offline/main/Eaglercraft_Indev.html", + "/game/offline/main/Eaglercraft_a1.2.6.html", + "/game/offline/main/Eaglercraft_b1.3.html", + "/game/offline/main/Eaglercraft_b1.7.3.html", + "/game/offline/mobile/EaglerPocketMobile_1.8.8.html", + "/game/web/clients/astra/assets.epk", + "/game/web/clients/astra/classes.js", + "/game/web/clients/astra/index.html", + "/game/web/clients/astra/lang/af_ZA.lang", + "/game/web/clients/astra/lang/ar_SA.lang", + "/game/web/clients/astra/lang/ast_ES.lang", + "/game/web/clients/astra/lang/az_AZ.lang", + "/game/web/clients/astra/lang/bg_BG.lang", + "/game/web/clients/astra/lang/ca_ES.lang", + "/game/web/clients/astra/lang/cs_CZ.lang", + "/game/web/clients/astra/lang/cy_GB.lang", + "/game/web/clients/astra/lang/da_DK.lang", + "/game/web/clients/astra/lang/de_DE.lang", + "/game/web/clients/astra/lang/el_GR.lang", + "/game/web/clients/astra/lang/en_AU.lang", + "/game/web/clients/astra/lang/en_CA.lang", + "/game/web/clients/astra/lang/en_GB.lang", + "/game/web/clients/astra/lang/en_PT.lang", + "/game/web/clients/astra/lang/eo_UY.lang", + "/game/web/clients/astra/lang/es_AR.lang", + "/game/web/clients/astra/lang/es_ES.lang", + "/game/web/clients/astra/lang/es_MX.lang", + "/game/web/clients/astra/lang/es_UY.lang", + "/game/web/clients/astra/lang/es_VE.lang", + "/game/web/clients/astra/lang/et_EE.lang", + "/game/web/clients/astra/lang/eu_ES.lang", + "/game/web/clients/astra/lang/fa_IR.lang", + "/game/web/clients/astra/lang/fi_FI.lang", + "/game/web/clients/astra/lang/fil_PH.lang", + "/game/web/clients/astra/lang/fr_CA.lang", + "/game/web/clients/astra/lang/fr_FR.lang", + "/game/web/clients/astra/lang/ga_IE.lang", + "/game/web/clients/astra/lang/gl_ES.lang", + "/game/web/clients/astra/lang/gv_IM.lang", + "/game/web/clients/astra/lang/he_IL.lang", + "/game/web/clients/astra/lang/hi_IN.lang", + "/game/web/clients/astra/lang/hr_HR.lang", + "/game/web/clients/astra/lang/hu_HU.lang", + "/game/web/clients/astra/lang/hy_AM.lang", + "/game/web/clients/astra/lang/id_ID.lang", + "/game/web/clients/astra/lang/is_IS.lang", + "/game/web/clients/astra/lang/it_IT.lang", + "/game/web/clients/astra/lang/ja_JP.lang", + "/game/web/clients/astra/lang/ka_GE.lang", + "/game/web/clients/astra/lang/ko_KR.lang", + "/game/web/clients/astra/lang/kw_GB.lang", + "/game/web/clients/astra/lang/la_LA.lang", + "/game/web/clients/astra/lang/lb_LU.lang", + "/game/web/clients/astra/lang/lt_LT.lang", + "/game/web/clients/astra/lang/lv_LV.lang", + "/game/web/clients/astra/lang/mi_NZ.lang", + "/game/web/clients/astra/lang/ms_MY.lang", + "/game/web/clients/astra/lang/mt_MT.lang", + "/game/web/clients/astra/lang/nds_DE.lang", + "/game/web/clients/astra/lang/nl_NL.lang", + "/game/web/clients/astra/lang/nn_NO.lang", + "/game/web/clients/astra/lang/no_NO.lang", + "/game/web/clients/astra/lang/oc_FR.lang", + "/game/web/clients/astra/lang/pl_PL.lang", + "/game/web/clients/astra/lang/pt_BR.lang", + "/game/web/clients/astra/lang/pt_PT.lang", + "/game/web/clients/astra/lang/qya_AA.lang", + "/game/web/clients/astra/lang/ro_RO.lang", + "/game/web/clients/astra/lang/ru_RU.lang", + "/game/web/clients/astra/lang/se_NO.lang", + "/game/web/clients/astra/lang/sk_SK.lang", + "/game/web/clients/astra/lang/sl_SI.lang", + "/game/web/clients/astra/lang/sr_SP.lang", + "/game/web/clients/astra/lang/sv_SE.lang", + "/game/web/clients/astra/lang/th_TH.lang", + "/game/web/clients/astra/lang/tlh_AA.lang", + "/game/web/clients/astra/lang/tr_TR.lang", + "/game/web/clients/astra/lang/uk_UA.lang", + "/game/web/clients/astra/lang/val_ES.lang", + "/game/web/clients/astra/lang/vi_VN.lang", + "/game/web/clients/astra/lang/zh_CN.lang", + "/game/web/clients/astra/lang/zh_TW.lang", + "/game/web/clients/eaglerforge/ModAPI.js", + "/game/web/clients/eaglerforge/ModGUI.js", + "/game/web/clients/eaglerforge/ModLoader.js", + "/game/web/clients/eaglerforge/assets.epk", + "/game/web/clients/eaglerforge/classes.js", + "/game/web/clients/eaglerforge/index.html", + "/game/web/clients/eaglerforge/lang/af_ZA.lang", + "/game/web/clients/eaglerforge/lang/ar_SA.lang", + "/game/web/clients/eaglerforge/lang/ast_ES.lang", + "/game/web/clients/eaglerforge/lang/az_AZ.lang", + "/game/web/clients/eaglerforge/lang/bg_BG.lang", + "/game/web/clients/eaglerforge/lang/ca_ES.lang", + "/game/web/clients/eaglerforge/lang/cs_CZ.lang", + "/game/web/clients/eaglerforge/lang/cy_GB.lang", + "/game/web/clients/eaglerforge/lang/da_DK.lang", + "/game/web/clients/eaglerforge/lang/de_DE.lang", + "/game/web/clients/eaglerforge/lang/el_GR.lang", + "/game/web/clients/eaglerforge/lang/en_AU.lang", + "/game/web/clients/eaglerforge/lang/en_CA.lang", + "/game/web/clients/eaglerforge/lang/en_GB.lang", + "/game/web/clients/eaglerforge/lang/en_PT.lang", + "/game/web/clients/eaglerforge/lang/eo_UY.lang", + "/game/web/clients/eaglerforge/lang/es_AR.lang", + "/game/web/clients/eaglerforge/lang/es_ES.lang", + "/game/web/clients/eaglerforge/lang/es_MX.lang", + "/game/web/clients/eaglerforge/lang/es_UY.lang", + "/game/web/clients/eaglerforge/lang/es_VE.lang", + "/game/web/clients/eaglerforge/lang/et_EE.lang", + "/game/web/clients/eaglerforge/lang/eu_ES.lang", + "/game/web/clients/eaglerforge/lang/fa_IR.lang", + "/game/web/clients/eaglerforge/lang/fi_FI.lang", + "/game/web/clients/eaglerforge/lang/fil_PH.lang", + "/game/web/clients/eaglerforge/lang/fr_CA.lang", + "/game/web/clients/eaglerforge/lang/fr_FR.lang", + "/game/web/clients/eaglerforge/lang/ga_IE.lang", + "/game/web/clients/eaglerforge/lang/gl_ES.lang", + "/game/web/clients/eaglerforge/lang/gv_IM.lang", + "/game/web/clients/eaglerforge/lang/he_IL.lang", + "/game/web/clients/eaglerforge/lang/hi_IN.lang", + "/game/web/clients/eaglerforge/lang/hr_HR.lang", + "/game/web/clients/eaglerforge/lang/hu_HU.lang", + "/game/web/clients/eaglerforge/lang/hy_AM.lang", + "/game/web/clients/eaglerforge/lang/id_ID.lang", + "/game/web/clients/eaglerforge/lang/is_IS.lang", + "/game/web/clients/eaglerforge/lang/it_IT.lang", + "/game/web/clients/eaglerforge/lang/ja_JP.lang", + "/game/web/clients/eaglerforge/lang/ka_GE.lang", + "/game/web/clients/eaglerforge/lang/ko_KR.lang", + "/game/web/clients/eaglerforge/lang/kw_GB.lang", + "/game/web/clients/eaglerforge/lang/la_LA.lang", + "/game/web/clients/eaglerforge/lang/lb_LU.lang", + "/game/web/clients/eaglerforge/lang/lt_LT.lang", + "/game/web/clients/eaglerforge/lang/lv_LV.lang", + "/game/web/clients/eaglerforge/lang/mi_NZ.lang", + "/game/web/clients/eaglerforge/lang/ms_MY.lang", + "/game/web/clients/eaglerforge/lang/mt_MT.lang", + "/game/web/clients/eaglerforge/lang/nds_DE.lang", + "/game/web/clients/eaglerforge/lang/nl_NL.lang", + "/game/web/clients/eaglerforge/lang/nn_NO.lang", + "/game/web/clients/eaglerforge/lang/no_NO.lang", + "/game/web/clients/eaglerforge/lang/oc_FR.lang", + "/game/web/clients/eaglerforge/lang/pl_PL.lang", + "/game/web/clients/eaglerforge/lang/pt_BR.lang", + "/game/web/clients/eaglerforge/lang/pt_PT.lang", + "/game/web/clients/eaglerforge/lang/qya_AA.lang", + "/game/web/clients/eaglerforge/lang/ro_RO.lang", + "/game/web/clients/eaglerforge/lang/ru_RU.lang", + "/game/web/clients/eaglerforge/lang/se_NO.lang", + "/game/web/clients/eaglerforge/lang/sk_SK.lang", + "/game/web/clients/eaglerforge/lang/sl_SI.lang", + "/game/web/clients/eaglerforge/lang/sr_SP.lang", + "/game/web/clients/eaglerforge/lang/sv_SE.lang", + "/game/web/clients/eaglerforge/lang/th_TH.lang", + "/game/web/clients/eaglerforge/lang/tlh_AA.lang", + "/game/web/clients/eaglerforge/lang/tr_TR.lang", + "/game/web/clients/eaglerforge/lang/uk_UA.lang", + "/game/web/clients/eaglerforge/lang/val_ES.lang", + "/game/web/clients/eaglerforge/lang/vi_VN.lang", + "/game/web/clients/eaglerforge/lang/zh_CN.lang", + "/game/web/clients/eaglerforge/lang/zh_TW.lang", + "/game/web/clients/resent/assets.epk", + "/game/web/clients/resent/classes.js", + "/game/web/clients/resent/index.html", + "/game/web/clients/resent/lang/af_ZA.lang", + "/game/web/clients/resent/lang/ar_SA.lang", + "/game/web/clients/resent/lang/ast_ES.lang", + "/game/web/clients/resent/lang/az_AZ.lang", + "/game/web/clients/resent/lang/bg_BG.lang", + "/game/web/clients/resent/lang/ca_ES.lang", + "/game/web/clients/resent/lang/cs_CZ.lang", + "/game/web/clients/resent/lang/cy_GB.lang", + "/game/web/clients/resent/lang/da_DK.lang", + "/game/web/clients/resent/lang/de_DE.lang", + "/game/web/clients/resent/lang/el_GR.lang", + "/game/web/clients/resent/lang/en_AU.lang", + "/game/web/clients/resent/lang/en_CA.lang", + "/game/web/clients/resent/lang/en_GB.lang", + "/game/web/clients/resent/lang/en_PT.lang", + "/game/web/clients/resent/lang/eo_UY.lang", + "/game/web/clients/resent/lang/es_AR.lang", + "/game/web/clients/resent/lang/es_ES.lang", + "/game/web/clients/resent/lang/es_MX.lang", + "/game/web/clients/resent/lang/es_UY.lang", + "/game/web/clients/resent/lang/es_VE.lang", + "/game/web/clients/resent/lang/et_EE.lang", + "/game/web/clients/resent/lang/eu_ES.lang", + "/game/web/clients/resent/lang/fa_IR.lang", + "/game/web/clients/resent/lang/fi_FI.lang", + "/game/web/clients/resent/lang/fil_PH.lang", + "/game/web/clients/resent/lang/fr_CA.lang", + "/game/web/clients/resent/lang/fr_FR.lang", + "/game/web/clients/resent/lang/ga_IE.lang", + "/game/web/clients/resent/lang/gl_ES.lang", + "/game/web/clients/resent/lang/gv_IM.lang", + "/game/web/clients/resent/lang/he_IL.lang", + "/game/web/clients/resent/lang/hi_IN.lang", + "/game/web/clients/resent/lang/hr_HR.lang", + "/game/web/clients/resent/lang/hu_HU.lang", + "/game/web/clients/resent/lang/hy_AM.lang", + "/game/web/clients/resent/lang/id_ID.lang", + "/game/web/clients/resent/lang/is_IS.lang", + "/game/web/clients/resent/lang/it_IT.lang", + "/game/web/clients/resent/lang/ja_JP.lang", + "/game/web/clients/resent/lang/ka_GE.lang", + "/game/web/clients/resent/lang/ko_KR.lang", + "/game/web/clients/resent/lang/kw_GB.lang", + "/game/web/clients/resent/lang/la_LA.lang", + "/game/web/clients/resent/lang/lb_LU.lang", + "/game/web/clients/resent/lang/lt_LT.lang", + "/game/web/clients/resent/lang/lv_LV.lang", + "/game/web/clients/resent/lang/mi_NZ.lang", + "/game/web/clients/resent/lang/ms_MY.lang", + "/game/web/clients/resent/lang/mt_MT.lang", + "/game/web/clients/resent/lang/nds_DE.lang", + "/game/web/clients/resent/lang/nl_NL.lang", + "/game/web/clients/resent/lang/nn_NO.lang", + "/game/web/clients/resent/lang/no_NO.lang", + "/game/web/clients/resent/lang/oc_FR.lang", + "/game/web/clients/resent/lang/pl_PL.lang", + "/game/web/clients/resent/lang/pt_BR.lang", + "/game/web/clients/resent/lang/pt_PT.lang", + "/game/web/clients/resent/lang/qya_AA.lang", + "/game/web/clients/resent/lang/ro_RO.lang", + "/game/web/clients/resent/lang/ru_RU.lang", + "/game/web/clients/resent/lang/se_NO.lang", + "/game/web/clients/resent/lang/sk_SK.lang", + "/game/web/clients/resent/lang/sl_SI.lang", + "/game/web/clients/resent/lang/sr_SP.lang", + "/game/web/clients/resent/lang/sv_SE.lang", + "/game/web/clients/resent/lang/th_TH.lang", + "/game/web/clients/resent/lang/tlh_AA.lang", + "/game/web/clients/resent/lang/tr_TR.lang", + "/game/web/clients/resent/lang/uk_UA.lang", + "/game/web/clients/resent/lang/val_ES.lang", + "/game/web/clients/resent/lang/vi_VN.lang", + "/game/web/clients/resent/lang/zh_CN.lang", + "/game/web/clients/resent/lang/zh_TW.lang", + "/game/web/clients/shadow/assets.epk", + "/game/web/clients/shadow/classes.js", + "/game/web/clients/shadow/index.html", + "/game/web/clients/shadow/lang/af_ZA.lang", + "/game/web/clients/shadow/lang/ar_SA.lang", + "/game/web/clients/shadow/lang/ast_ES.lang", + "/game/web/clients/shadow/lang/az_AZ.lang", + "/game/web/clients/shadow/lang/bg_BG.lang", + "/game/web/clients/shadow/lang/ca_ES.lang", + "/game/web/clients/shadow/lang/cs_CZ.lang", + "/game/web/clients/shadow/lang/cy_GB.lang", + "/game/web/clients/shadow/lang/da_DK.lang", + "/game/web/clients/shadow/lang/de_DE.lang", + "/game/web/clients/shadow/lang/el_GR.lang", + "/game/web/clients/shadow/lang/en_AU.lang", + "/game/web/clients/shadow/lang/en_CA.lang", + "/game/web/clients/shadow/lang/en_GB.lang", + "/game/web/clients/shadow/lang/en_PT.lang", + "/game/web/clients/shadow/lang/eo_UY.lang", + "/game/web/clients/shadow/lang/es_AR.lang", + "/game/web/clients/shadow/lang/es_ES.lang", + "/game/web/clients/shadow/lang/es_MX.lang", + "/game/web/clients/shadow/lang/es_UY.lang", + "/game/web/clients/shadow/lang/es_VE.lang", + "/game/web/clients/shadow/lang/et_EE.lang", + "/game/web/clients/shadow/lang/eu_ES.lang", + "/game/web/clients/shadow/lang/fa_IR.lang", + "/game/web/clients/shadow/lang/fi_FI.lang", + "/game/web/clients/shadow/lang/fil_PH.lang", + "/game/web/clients/shadow/lang/fr_CA.lang", + "/game/web/clients/shadow/lang/fr_FR.lang", + "/game/web/clients/shadow/lang/ga_IE.lang", + "/game/web/clients/shadow/lang/gl_ES.lang", + "/game/web/clients/shadow/lang/gv_IM.lang", + "/game/web/clients/shadow/lang/he_IL.lang", + "/game/web/clients/shadow/lang/hi_IN.lang", + "/game/web/clients/shadow/lang/hr_HR.lang", + "/game/web/clients/shadow/lang/hu_HU.lang", + "/game/web/clients/shadow/lang/hy_AM.lang", + "/game/web/clients/shadow/lang/id_ID.lang", + "/game/web/clients/shadow/lang/is_IS.lang", + "/game/web/clients/shadow/lang/it_IT.lang", + "/game/web/clients/shadow/lang/ja_JP.lang", + "/game/web/clients/shadow/lang/ka_GE.lang", + "/game/web/clients/shadow/lang/ko_KR.lang", + "/game/web/clients/shadow/lang/kw_GB.lang", + "/game/web/clients/shadow/lang/la_LA.lang", + "/game/web/clients/shadow/lang/lb_LU.lang", + "/game/web/clients/shadow/lang/lt_LT.lang", + "/game/web/clients/shadow/lang/lv_LV.lang", + "/game/web/clients/shadow/lang/mi_NZ.lang", + "/game/web/clients/shadow/lang/ms_MY.lang", + "/game/web/clients/shadow/lang/mt_MT.lang", + "/game/web/clients/shadow/lang/nds_DE.lang", + "/game/web/clients/shadow/lang/nl_NL.lang", + "/game/web/clients/shadow/lang/nn_NO.lang", + "/game/web/clients/shadow/lang/no_NO.lang", + "/game/web/clients/shadow/lang/oc_FR.lang", + "/game/web/clients/shadow/lang/pl_PL.lang", + "/game/web/clients/shadow/lang/pt_BR.lang", + "/game/web/clients/shadow/lang/pt_PT.lang", + "/game/web/clients/shadow/lang/qya_AA.lang", + "/game/web/clients/shadow/lang/ro_RO.lang", + "/game/web/clients/shadow/lang/ru_RU.lang", + "/game/web/clients/shadow/lang/se_NO.lang", + "/game/web/clients/shadow/lang/sk_SK.lang", + "/game/web/clients/shadow/lang/sl_SI.lang", + "/game/web/clients/shadow/lang/sr_SP.lang", + "/game/web/clients/shadow/lang/sv_SE.lang", + "/game/web/clients/shadow/lang/th_TH.lang", + "/game/web/clients/shadow/lang/tlh_AA.lang", + "/game/web/clients/shadow/lang/tr_TR.lang", + "/game/web/clients/shadow/lang/uk_UA.lang", + "/game/web/clients/shadow/lang/val_ES.lang", + "/game/web/clients/shadow/lang/vi_VN.lang", + "/game/web/clients/shadow/lang/zh_CN.lang", + "/game/web/clients/shadow/lang/zh_TW.lang", + "/game/web/clients/starlike/assets.epk", + "/game/web/clients/starlike/classes.js", + "/game/web/clients/starlike/index.html", + "/game/web/clients/starlike/lang/af_ZA.lang", + "/game/web/clients/starlike/lang/ar_SA.lang", + "/game/web/clients/starlike/lang/ast_ES.lang", + "/game/web/clients/starlike/lang/az_AZ.lang", + "/game/web/clients/starlike/lang/bg_BG.lang", + "/game/web/clients/starlike/lang/ca_ES.lang", + "/game/web/clients/starlike/lang/cs_CZ.lang", + "/game/web/clients/starlike/lang/cy_GB.lang", + "/game/web/clients/starlike/lang/da_DK.lang", + "/game/web/clients/starlike/lang/de_DE.lang", + "/game/web/clients/starlike/lang/el_GR.lang", + "/game/web/clients/starlike/lang/en_AU.lang", + "/game/web/clients/starlike/lang/en_CA.lang", + "/game/web/clients/starlike/lang/en_GB.lang", + "/game/web/clients/starlike/lang/en_PT.lang", + "/game/web/clients/starlike/lang/eo_UY.lang", + "/game/web/clients/starlike/lang/es_AR.lang", + "/game/web/clients/starlike/lang/es_ES.lang", + "/game/web/clients/starlike/lang/es_MX.lang", + "/game/web/clients/starlike/lang/es_UY.lang", + "/game/web/clients/starlike/lang/es_VE.lang", + "/game/web/clients/starlike/lang/et_EE.lang", + "/game/web/clients/starlike/lang/eu_ES.lang", + "/game/web/clients/starlike/lang/fa_IR.lang", + "/game/web/clients/starlike/lang/fi_FI.lang", + "/game/web/clients/starlike/lang/fil_PH.lang", + "/game/web/clients/starlike/lang/fr_CA.lang", + "/game/web/clients/starlike/lang/fr_FR.lang", + "/game/web/clients/starlike/lang/ga_IE.lang", + "/game/web/clients/starlike/lang/gl_ES.lang", + "/game/web/clients/starlike/lang/gv_IM.lang", + "/game/web/clients/starlike/lang/he_IL.lang", + "/game/web/clients/starlike/lang/hi_IN.lang", + "/game/web/clients/starlike/lang/hr_HR.lang", + "/game/web/clients/starlike/lang/hu_HU.lang", + "/game/web/clients/starlike/lang/hy_AM.lang", + "/game/web/clients/starlike/lang/id_ID.lang", + "/game/web/clients/starlike/lang/is_IS.lang", + "/game/web/clients/starlike/lang/it_IT.lang", + "/game/web/clients/starlike/lang/ja_JP.lang", + "/game/web/clients/starlike/lang/ka_GE.lang", + "/game/web/clients/starlike/lang/ko_KR.lang", + "/game/web/clients/starlike/lang/kw_GB.lang", + "/game/web/clients/starlike/lang/la_LA.lang", + "/game/web/clients/starlike/lang/lb_LU.lang", + "/game/web/clients/starlike/lang/lt_LT.lang", + "/game/web/clients/starlike/lang/lv_LV.lang", + "/game/web/clients/starlike/lang/mi_NZ.lang", + "/game/web/clients/starlike/lang/ms_MY.lang", + "/game/web/clients/starlike/lang/mt_MT.lang", + "/game/web/clients/starlike/lang/nds_DE.lang", + "/game/web/clients/starlike/lang/nl_NL.lang", + "/game/web/clients/starlike/lang/nn_NO.lang", + "/game/web/clients/starlike/lang/no_NO.lang", + "/game/web/clients/starlike/lang/oc_FR.lang", + "/game/web/clients/starlike/lang/pl_PL.lang", + "/game/web/clients/starlike/lang/pt_BR.lang", + "/game/web/clients/starlike/lang/pt_PT.lang", + "/game/web/clients/starlike/lang/qya_AA.lang", + "/game/web/clients/starlike/lang/ro_RO.lang", + "/game/web/clients/starlike/lang/ru_RU.lang", + "/game/web/clients/starlike/lang/se_NO.lang", + "/game/web/clients/starlike/lang/sk_SK.lang", + "/game/web/clients/starlike/lang/sl_SI.lang", + "/game/web/clients/starlike/lang/sr_SP.lang", + "/game/web/clients/starlike/lang/sv_SE.lang", + "/game/web/clients/starlike/lang/th_TH.lang", + "/game/web/clients/starlike/lang/tlh_AA.lang", + "/game/web/clients/starlike/lang/tr_TR.lang", + "/game/web/clients/starlike/lang/uk_UA.lang", + "/game/web/clients/starlike/lang/val_ES.lang", + "/game/web/clients/starlike/lang/vi_VN.lang", + "/game/web/clients/starlike/lang/zh_CN.lang", + "/game/web/clients/starlike/lang/zh_TW.lang", + "/game/web/main/1.5.2/assets.epk", + "/game/web/main/1.5.2/classes.js", + "/game/web/main/1.5.2/classes_server.js", + "/game/web/main/1.5.2/eagswebrtc.js", + "/game/web/main/1.5.2/index.html", + "/game/web/main/1.5.2/worker_bootstrap.js", + "/game/web/main/1.8.8/assets.epk", + "/game/web/main/1.8.8/classes.js", + "/game/web/main/1.8.8/index.html", + "/game/web/main/1.8.8/lang/af_ZA.lang", + "/game/web/main/1.8.8/lang/ar_SA.lang", + "/game/web/main/1.8.8/lang/ast_ES.lang", + "/game/web/main/1.8.8/lang/az_AZ.lang", + "/game/web/main/1.8.8/lang/bg_BG.lang", + "/game/web/main/1.8.8/lang/ca_ES.lang", + "/game/web/main/1.8.8/lang/cs_CZ.lang", + "/game/web/main/1.8.8/lang/cy_GB.lang", + "/game/web/main/1.8.8/lang/da_DK.lang", + "/game/web/main/1.8.8/lang/de_DE.lang", + "/game/web/main/1.8.8/lang/el_GR.lang", + "/game/web/main/1.8.8/lang/en_AU.lang", + "/game/web/main/1.8.8/lang/en_CA.lang", + "/game/web/main/1.8.8/lang/en_GB.lang", + "/game/web/main/1.8.8/lang/en_PT.lang", + "/game/web/main/1.8.8/lang/eo_UY.lang", + "/game/web/main/1.8.8/lang/es_AR.lang", + "/game/web/main/1.8.8/lang/es_ES.lang", + "/game/web/main/1.8.8/lang/es_MX.lang", + "/game/web/main/1.8.8/lang/es_UY.lang", + "/game/web/main/1.8.8/lang/es_VE.lang", + "/game/web/main/1.8.8/lang/et_EE.lang", + "/game/web/main/1.8.8/lang/eu_ES.lang", + "/game/web/main/1.8.8/lang/fa_IR.lang", + "/game/web/main/1.8.8/lang/fi_FI.lang", + "/game/web/main/1.8.8/lang/fil_PH.lang", + "/game/web/main/1.8.8/lang/fr_CA.lang", + "/game/web/main/1.8.8/lang/fr_FR.lang", + "/game/web/main/1.8.8/lang/ga_IE.lang", + "/game/web/main/1.8.8/lang/gl_ES.lang", + "/game/web/main/1.8.8/lang/gv_IM.lang", + "/game/web/main/1.8.8/lang/he_IL.lang", + "/game/web/main/1.8.8/lang/hi_IN.lang", + "/game/web/main/1.8.8/lang/hr_HR.lang", + "/game/web/main/1.8.8/lang/hu_HU.lang", + "/game/web/main/1.8.8/lang/hy_AM.lang", + "/game/web/main/1.8.8/lang/id_ID.lang", + "/game/web/main/1.8.8/lang/is_IS.lang", + "/game/web/main/1.8.8/lang/it_IT.lang", + "/game/web/main/1.8.8/lang/ja_JP.lang", + "/game/web/main/1.8.8/lang/ka_GE.lang", + "/game/web/main/1.8.8/lang/ko_KR.lang", + "/game/web/main/1.8.8/lang/kw_GB.lang", + "/game/web/main/1.8.8/lang/la_LA.lang", + "/game/web/main/1.8.8/lang/lb_LU.lang", + "/game/web/main/1.8.8/lang/lt_LT.lang", + "/game/web/main/1.8.8/lang/lv_LV.lang", + "/game/web/main/1.8.8/lang/mi_NZ.lang", + "/game/web/main/1.8.8/lang/ms_MY.lang", + "/game/web/main/1.8.8/lang/mt_MT.lang", + "/game/web/main/1.8.8/lang/nds_DE.lang", + "/game/web/main/1.8.8/lang/nl_NL.lang", + "/game/web/main/1.8.8/lang/nn_NO.lang", + "/game/web/main/1.8.8/lang/no_NO.lang", + "/game/web/main/1.8.8/lang/oc_FR.lang", + "/game/web/main/1.8.8/lang/pl_PL.lang", + "/game/web/main/1.8.8/lang/pt_BR.lang", + "/game/web/main/1.8.8/lang/pt_PT.lang", + "/game/web/main/1.8.8/lang/qya_AA.lang", + "/game/web/main/1.8.8/lang/ro_RO.lang", + "/game/web/main/1.8.8/lang/ru_RU.lang", + "/game/web/main/1.8.8/lang/se_NO.lang", + "/game/web/main/1.8.8/lang/sk_SK.lang", + "/game/web/main/1.8.8/lang/sl_SI.lang", + "/game/web/main/1.8.8/lang/sr_SP.lang", + "/game/web/main/1.8.8/lang/sv_SE.lang", + "/game/web/main/1.8.8/lang/th_TH.lang", + "/game/web/main/1.8.8/lang/tlh_AA.lang", + "/game/web/main/1.8.8/lang/tr_TR.lang", + "/game/web/main/1.8.8/lang/uk_UA.lang", + "/game/web/main/1.8.8/lang/val_ES.lang", + "/game/web/main/1.8.8/lang/vi_VN.lang", + "/game/web/main/1.8.8/lang/zh_CN.lang", + "/game/web/main/1.8.8/lang/zh_TW.lang", + "/game/web/main/1.9.4/assets.epk", + "/game/web/main/1.9.4/classes.js", + "/game/web/main/1.9.4/index.html", + "/game/web/main/1.9.4/lang/af_ZA.lang", + "/game/web/main/1.9.4/lang/ar_SA.lang", + "/game/web/main/1.9.4/lang/ast_ES.lang", + "/game/web/main/1.9.4/lang/az_AZ.lang", + "/game/web/main/1.9.4/lang/bg_BG.lang", + "/game/web/main/1.9.4/lang/ca_ES.lang", + "/game/web/main/1.9.4/lang/cs_CZ.lang", + "/game/web/main/1.9.4/lang/cy_GB.lang", + "/game/web/main/1.9.4/lang/da_DK.lang", + "/game/web/main/1.9.4/lang/de_DE.lang", + "/game/web/main/1.9.4/lang/el_GR.lang", + "/game/web/main/1.9.4/lang/en_AU.lang", + "/game/web/main/1.9.4/lang/en_CA.lang", + "/game/web/main/1.9.4/lang/en_GB.lang", + "/game/web/main/1.9.4/lang/en_PT.lang", + "/game/web/main/1.9.4/lang/eo_UY.lang", + "/game/web/main/1.9.4/lang/es_AR.lang", + "/game/web/main/1.9.4/lang/es_ES.lang", + "/game/web/main/1.9.4/lang/es_MX.lang", + "/game/web/main/1.9.4/lang/es_UY.lang", + "/game/web/main/1.9.4/lang/es_VE.lang", + "/game/web/main/1.9.4/lang/et_EE.lang", + "/game/web/main/1.9.4/lang/eu_ES.lang", + "/game/web/main/1.9.4/lang/fa_IR.lang", + "/game/web/main/1.9.4/lang/fi_FI.lang", + "/game/web/main/1.9.4/lang/fil_PH.lang", + "/game/web/main/1.9.4/lang/fr_CA.lang", + "/game/web/main/1.9.4/lang/fr_FR.lang", + "/game/web/main/1.9.4/lang/ga_IE.lang", + "/game/web/main/1.9.4/lang/gl_ES.lang", + "/game/web/main/1.9.4/lang/gv_IM.lang", + "/game/web/main/1.9.4/lang/he_IL.lang", + "/game/web/main/1.9.4/lang/hi_IN.lang", + "/game/web/main/1.9.4/lang/hr_HR.lang", + "/game/web/main/1.9.4/lang/hu_HU.lang", + "/game/web/main/1.9.4/lang/hy_AM.lang", + "/game/web/main/1.9.4/lang/id_ID.lang", + "/game/web/main/1.9.4/lang/is_IS.lang", + "/game/web/main/1.9.4/lang/it_IT.lang", + "/game/web/main/1.9.4/lang/ja_JP.lang", + "/game/web/main/1.9.4/lang/ka_GE.lang", + "/game/web/main/1.9.4/lang/ko_KR.lang", + "/game/web/main/1.9.4/lang/kw_GB.lang", + "/game/web/main/1.9.4/lang/la_LA.lang", + "/game/web/main/1.9.4/lang/lb_LU.lang", + "/game/web/main/1.9.4/lang/lt_LT.lang", + "/game/web/main/1.9.4/lang/lv_LV.lang", + "/game/web/main/1.9.4/lang/mi_NZ.lang", + "/game/web/main/1.9.4/lang/ms_MY.lang", + "/game/web/main/1.9.4/lang/mt_MT.lang", + "/game/web/main/1.9.4/lang/nds_DE.lang", + "/game/web/main/1.9.4/lang/nl_NL.lang", + "/game/web/main/1.9.4/lang/nn_NO.lang", + "/game/web/main/1.9.4/lang/no_NO.lang", + "/game/web/main/1.9.4/lang/oc_FR.lang", + "/game/web/main/1.9.4/lang/pl_PL.lang", + "/game/web/main/1.9.4/lang/pt_BR.lang", + "/game/web/main/1.9.4/lang/pt_PT.lang", + "/game/web/main/1.9.4/lang/qya_AA.lang", + "/game/web/main/1.9.4/lang/ro_RO.lang", + "/game/web/main/1.9.4/lang/ru_RU.lang", + "/game/web/main/1.9.4/lang/se_NO.lang", + "/game/web/main/1.9.4/lang/sk_SK.lang", + "/game/web/main/1.9.4/lang/sl_SI.lang", + "/game/web/main/1.9.4/lang/sr_SP.lang", + "/game/web/main/1.9.4/lang/sv_SE.lang", + "/game/web/main/1.9.4/lang/th_TH.lang", + "/game/web/main/1.9.4/lang/tlh_AA.lang", + "/game/web/main/1.9.4/lang/tr_TR.lang", + "/game/web/main/1.9.4/lang/uk_UA.lang", + "/game/web/main/1.9.4/lang/val_ES.lang", + "/game/web/main/1.9.4/lang/vi_VN.lang", + "/game/web/main/1.9.4/lang/zh_CN.lang", + "/game/web/main/1.9.4/lang/zh_TW.lang", + "/game/web/main/a1.2.6/index.html", + "/game/web/main/a1.2.6/js/app.js", + "/game/web/main/a1.2.6/resources.mc", + "/game/web/main/b1.3/assets.epk", + "/game/web/main/b1.3/classes.js", + "/game/web/main/b1.3/index.html", + "/game/web/main/b1.7.3/index.html", + "/game/web/main/b1.7.3/js/app.js", + "/game/web/main/b1.7.3/js/app.js.map", + "/game/web/main/b1.7.3/resources.mc", + "/game/web/main/classic/app.js", + "/game/web/main/classic/index.html", + "/game/web/main/classic/resources.mc", + "/game/web/main/indev/app.js", + "/game/web/main/indev/index.html", + "/game/web/main/indev/resources.mc", + "/game/web/main/infdev/app.js", + "/game/web/main/infdev/index.html", + "/game/web/main/infdev/resources.epk", + "/home/archive/index.html", + "/home/clients/index.html", + "/home/downloads/index.html", + "/home/game/index.html", + "/index.html", + "/manifest.json", + "/mobile/index.html", + "/mods/client/index.html", + "/mods/mods/index.html", + "/mods/resourcepacks/index.html", + "/offline.html", + "/resources/fonts/Minecraftia-Regular.ttf", + "/resources/images/backgrounds/themes/campfire.webp", + "/resources/images/backgrounds/themes/cherry-blossom.webp", + "/resources/images/backgrounds/themes/nether.webp", + "/resources/images/backgrounds/themes/overworld.webp", + "/resources/images/backgrounds/themes/retro.webp", + "/resources/images/backgrounds/themes/starfall.webp", + "/resources/images/backgrounds/themes/the-end.webp", + "/resources/images/covers/clients.webp", + "/resources/images/covers/eaglerforge.webp", + "/resources/images/covers/minecraft.webp", + "/resources/images/icons/clients/1.9.4.webp", + "/resources/images/icons/clients/all.webp", + "/resources/images/icons/clients/astra.webp", + "/resources/images/icons/clients/eagler.webp", + "/resources/images/icons/clients/eaglerforge.webp", + "/resources/images/icons/clients/eaglermobile.webp", + "/resources/images/icons/clients/eaglerpocketmobile.webp", + "/resources/images/icons/clients/resent.webp", + "/resources/images/icons/clients/shadow.webp", + "/resources/images/icons/clients/starlike.webp", + "/resources/images/icons/favicon.webp", + "/resources/images/icons/loading.webp", + "/resources/images/icons/minexlauncher.webp", + "/resources/images/icons/nav/game.webp", + "/resources/images/icons/nav/mods.webp", + "/resources/images/icons/nav/servers.webp", + "/resources/images/icons/nav/settings.webp", + "/resources/images/icons/nav/updates.webp", + "/resources/manifest/icons/any/192x192.webp", + "/resources/manifest/icons/any/512x512.webp", + "/resources/manifest/icons/maskable/2275x2275.webp", + "/resources/manifest/screenshots/home.webp", + "/resources/mods/data.json", + "/resources/mods/downloads/autoclicker.js", + "/resources/mods/downloads/autofish.js", + "/resources/mods/downloads/barebones-bossbars.zip", + "/resources/mods/downloads/barneys-music-mod.js", + "/resources/mods/downloads/blink.js", + "/resources/mods/downloads/blur.js", + "/resources/mods/downloads/burmod.js", + "/resources/mods/downloads/chat-commands-mod.js", + "/resources/mods/downloads/chat-shortcuts.js", + "/resources/mods/downloads/daggers.zip", + "/resources/mods/downloads/faithful-32x.zip", + "/resources/mods/downloads/fresheaglerui.js", + "/resources/mods/downloads/fullbright.js", + "/resources/mods/downloads/grapplehook.js", + "/resources/mods/downloads/jetpack.js", + "/resources/mods/downloads/low-on-fire.zip", + "/resources/mods/downloads/nofall.js", + "/resources/mods/downloads/semiautologin.js", + "/resources/mods/downloads/serified-font.zip", + "/resources/mods/downloads/speed-mod.js", + "/resources/mods/downloads/statshud.js", + "/resources/mods/downloads/xray.js", + "/resources/mods/icons/all.webp", + "/resources/mods/icons/autoclicker.webp", + "/resources/mods/icons/barebones-bossbars.webp", + "/resources/mods/icons/barneys-music-mod.webp", + "/resources/mods/icons/blur.webp", + "/resources/mods/icons/daggers.webp", + "/resources/mods/icons/faithful-32x.webp", + "/resources/mods/icons/fullbright.webp", + "/resources/mods/icons/grapplehook.webp", + "/resources/mods/icons/jetpack.webp", + "/resources/mods/icons/low-on-fire.webp", + "/resources/mods/icons/serified-font.webp", + "/resources/mods/icons/speed-mod.webp", + "/resources/mods/icons/statshud.webp", + "/resources/mods/icons/xray.webp", + "/resources/styles/eagler.css", + "/resources/styles/index.css", + "/resources/styles/mobile.css", + "/resources/styles/themes/campfire.css", + "/resources/styles/themes/cherry-blossom.css", + "/resources/styles/themes/default.css", + "/resources/styles/themes/hyperdark.css", + "/resources/styles/themes/light.css", + "/resources/styles/themes/nether.css", + "/resources/styles/themes/overworld.css", + "/resources/styles/themes/retro.css", + "/resources/styles/themes/starfall.css", + "/resources/styles/themes/the-end.css", + "/servers/index.html", + "/service-worker.js", + "/settings/index.html", + "/sw-register.js", + "/updates/index.html", + "/welcome.html" +] \ No newline at end of file diff --git a/public/index.html b/public/index.html index 71657b2..2e9c939 100644 --- a/public/index.html +++ b/public/index.html @@ -9,7 +9,7 @@ - + - + diff --git a/public/manifest.json b/public/manifest.json index 8322dde..c423b12 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,7 +1,7 @@ { "name": "MineXLauncher", "short_name": "MineX", - "description": "Custom launcher for Eaglercraft, which contains many versions and clients.", + "description": "MineXLauncher is a custom launcher for Eaglercraft that has many versions and clients.", "id": "/", "start_url": "/", "theme_color": "#333", @@ -12,29 +12,28 @@ "categories": ["games"], "icons": [ { - "src": "/resources/images/icons/minexlauncher.webp", - "sizes": "192x192 512x512 2048x2048", + "src": "/resources/manifest/icons/any/192x192.webp", + "sizes": "192x192", "type": "image/webp" }, { - "src": "/resources/manifest/icons/maskable-2275x2275.webp", - "sizes": "192x192 512x512 2275x2275", + "src": "/resources/manifest/icons/any/512x512.webp", + "sizes": "512x512", + "type": "image/webp" + }, + { + "src": "/resources/manifest/icons/maskable/2275x2275.webp", + "sizes": "2275x2275", "type": "image/webp", "purpose": "maskable" } ], "screenshots": [ { - "src": "/resources/manifest/screenshots/desktop/later.webp", - "sizes": "1280x720", + "src": "/resources/manifest/screenshots/home.webp", + "sizes": "1366x768", "type": "image/webp", "form_factor": "wide" - }, - { - "src": "/resources/manifest/screenshots/mobile/later.webp", - "sizes": "1280x720", - "type": "image/webp", - "form_factor": "narrow" } ] } diff --git a/public/resources/manifest/icons/any/192x192.webp b/public/resources/manifest/icons/any/192x192.webp new file mode 100644 index 0000000..03e378c Binary files /dev/null and b/public/resources/manifest/icons/any/192x192.webp differ diff --git a/public/resources/manifest/icons/any/512x512.webp b/public/resources/manifest/icons/any/512x512.webp new file mode 100644 index 0000000..1008f6c Binary files /dev/null and b/public/resources/manifest/icons/any/512x512.webp differ diff --git a/public/resources/manifest/icons/maskable-2275x2275.webp b/public/resources/manifest/icons/maskable/2275x2275.webp similarity index 100% rename from public/resources/manifest/icons/maskable-2275x2275.webp rename to public/resources/manifest/icons/maskable/2275x2275.webp diff --git a/public/resources/manifest/screenshots/home.webp b/public/resources/manifest/screenshots/home.webp new file mode 100644 index 0000000..946241e Binary files /dev/null and b/public/resources/manifest/screenshots/home.webp differ diff --git a/public/service-worker.js b/public/service-worker.js index 6a74a56..cb99fa4 100644 --- a/public/service-worker.js +++ b/public/service-worker.js @@ -1,49 +1,34 @@ -const cacheAssets = [ - '/offline.html', - '/resources/images/icons/favicon.webp', - '/resources/scripts/google-tag.js', - '/resources/scripts/main.js', - '/resources/styles/mobile.css', - '/resources/styles/themes/default.css', - '/resources/styles/themes/light.css', - '/resources/styles/themes/hyperdark.css', - '/resources/styles/themes/overworld.css', - '/resources/styles/themes/nether.css', - '/resources/styles/themes/the-end.css', - '/resources/styles/themes/cherry-blossom.css', - '/resources/styles/themes/retro.css', - '/resources/styles/themes/starfall.css', - '/resources/styles/themes/campfire.css', - '/resources/images/backgrounds/themes/overworld.webp', - '/resources/images/backgrounds/themes/nether.webp', - '/resources/images/backgrounds/themes/the-end.webp', - '/resources/images/backgrounds/themes/cherry-blossom.webp', - '/resources/images/backgrounds/themes/retro.webp', - '/resources/images/backgrounds/themes/starfall.webp', - '/resources/images/backgrounds/themes/campfire.webp', -]; +const cacheVersion = 'v1.5'; +const cacheName = `minexlauncher-${cacheVersion}`; self.addEventListener('install', (event) => { event.waitUntil( - caches.delete('minexlauncher'), - caches.open('minexlauncher').then(async (cache) => { + caches.open(cacheName).then(async (cache) => { + const response = await fetch('/cacheAssets.json'); + const cacheAssets = await response.json(); return await cache.addAll(cacheAssets); }) ); }); -self.addEventListener('fetch', (event) => { - if (event.request.mode === 'navigate') { - event.respondWith( - fetch(event.request).catch(() => { - return caches.match('/offline.html'); - }) - ); - } else { - event.respondWith( - fetch(event.request).catch(() => { - return caches.match(event.request); - }) - ); - } +self.addEventListener('activate', (event) => { + event.waitUntil( + caches.keys().then((keyList) => { + return Promise.all( + keyList.map((key) => { + if (key !== cacheName) { + return caches.delete(key); + } + }) + ); + }) + ); +}); + +self.addEventListener('fetch', (event) => { + event.respondWith( + caches.open(cacheName).then(async (cache) => { + return (await cache.match(event.request)) || fetch(event.request); + }) + ); }); diff --git a/src/resources/scripts/main.ts b/src/resources/scripts/main.ts index 49d2935..8f58c6c 100644 --- a/src/resources/scripts/main.ts +++ b/src/resources/scripts/main.ts @@ -1,5 +1,13 @@ +interface BeforeInstallPromptEvent extends Event { + readonly platforms: string[]; + readonly userChoice: Promise<{ outcome: 'accepted' | 'dismissed'; platform: string }>; + prompt(): Promise<{ outcome: 'accepted' | 'dismissed'; platform: string }>; +} + let selectedVersion: string | undefined; const launcherVersion = '1.5'; +// eslint-disable-next-line @typescript-eslint/no-unused-vars +let installPwaEvent: BeforeInstallPromptEvent; const theme = { load: function (themeToLoad?: string) { @@ -265,23 +273,22 @@ const detect = { }, }; -if (detect.mobile()) { - const link = document.createElement('link'); - link.rel = 'stylesheet'; - link.href = '/resources/styles/mobile.css'; - document.head.appendChild(link); -} -theme.load(); +if (window.location.pathname === '/') { + window.addEventListener('beforeinstallprompt', (event) => { + installPwaEvent = event as BeforeInstallPromptEvent; + }); +} else { + document.addEventListener('DOMContentLoaded', () => { + // @ts-expect-error 123 + delete window.installPwaEvent; -if (window.location.pathname !== '/') { - document.addEventListener('DOMContentLoaded', function () { const profileName = document.getElementById('profile-name'); if (profileName) { profileName.textContent = storage.local.get('username'); } }); - document.addEventListener('DOMContentLoaded', function () { + document.addEventListener('DOMContentLoaded', () => { const lastVersion = storage.local.get('lastVersion'); if (lastVersion !== null && lastVersion < launcherVersion) { alert(`MineXLauncher has been updated to v${launcherVersion}! @@ -292,3 +299,11 @@ Changes in v${launcherVersion}: } }); } + +if (detect.mobile()) { + const link = document.createElement('link'); + link.rel = 'stylesheet'; + link.href = '/resources/styles/mobile.css'; + document.head.appendChild(link); +} +theme.load(); \ No newline at end of file diff --git a/src/resources/scripts/settings.ts b/src/resources/scripts/settings.ts index 3ffa3b0..f9c4871 100644 --- a/src/resources/scripts/settings.ts +++ b/src/resources/scripts/settings.ts @@ -1,5 +1,5 @@ if (window.location.pathname === '/settings/') { - document.addEventListener('DOMContentLoaded', function () { + document.addEventListener('DOMContentLoaded', () => { const profileName = document.getElementById('profile-name'); const usernameInput = document.getElementById('username-input') as HTMLInputElement; const themeSelect = document.getElementById('theme-select') as HTMLSelectElement; @@ -7,7 +7,7 @@ if (window.location.pathname === '/settings/') { usernameInput.placeholder = storage.local.get('username') ?? ''; themeSelect.value = storage.local.get('theme') ?? ''; - usernameInput.addEventListener('input', function () { + usernameInput.addEventListener('input', () => { let username = usernameInput.value.replace(/[^A-Za-z0-9]/g, '_').substring(0, 16); usernameInput.value = username; while (username.length < 3) { @@ -19,28 +19,28 @@ if (window.location.pathname === '/settings/') { } }); - themeSelect.addEventListener('change', function () { + themeSelect.addEventListener('change', () => { theme.set(themeSelect.value); }); }); } if (window.location.pathname === '/welcome.html') { - document.addEventListener('DOMContentLoaded', function () { + document.addEventListener('DOMContentLoaded', () => { const setupForm = document.getElementById('setup-form') as HTMLFormElement; const usernameInput = document.getElementById('username-input') as HTMLInputElement; const themeSelect = document.getElementById('theme-select') as HTMLSelectElement; - usernameInput.addEventListener('input', function () { + usernameInput.addEventListener('input', () => { const username = usernameInput.value.replace(/[^A-Za-z0-9]/g, '_').substring(0, 16); usernameInput.value = username; }); - themeSelect.addEventListener('change', function () { + themeSelect.addEventListener('change', () => { theme.load(themeSelect.value); }); - setupForm.addEventListener('submit', function (event) { + setupForm.addEventListener('submit', (event) => { event.preventDefault(); let username = usernameInput.value.replace(/[^A-Za-z0-9]/g, '_').substring(0, 16); @@ -56,6 +56,12 @@ if (window.location.pathname === '/welcome.html') { storage.local.set('username', username); storage.local.set('theme', themeSelect.value); storage.local.set('lastVersion', launcherVersion); + try { + // @ts-expect-error 123 + window.top?.installPwaEvent.prompt(); + } catch (error) { + console.warn('Failed to prompt PWA install:', error); + } // @ts-expect-error 123 window.top.location.href = '/'; }