From cb1ff53338db35916cb94010320d583e06b70d81 Mon Sep 17 00:00:00 2001 From: Bjorn Stromberg Date: Wed, 22 Jul 2020 11:15:16 +0900 Subject: [PATCH] Add TSLint to github actions, fix existing type errors --- .github/workflows/ci.yml | 4 ++++ src/css/states/main_menu.scss | 27 ------------------------ src/js/application.js | 2 +- src/js/game/hud/parts/entity_debugger.js | 2 ++ src/js/game/hud/parts/settings_menu.js | 20 ++++++++++++------ src/js/globals.d.ts | 12 ----------- src/js/platform/ad_providers/adinplay.js | 5 ++++- src/js/profile/setting_types.js | 4 ++-- src/js/states/main_menu.js | 20 +++--------------- src/js/states/preload.js | 10 ++++++--- src/js/states/settings.js | 1 + src/js/tsconfig.json | 2 +- translations/base-zh-CN.yaml | 1 - 13 files changed, 38 insertions(+), 72 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1da72dae..d4386ba7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,3 +44,7 @@ jobs: uses: ibiqlik/action-yamllint@v1.0.0 with: file_or_dir: translations/*.yaml + + - name: TSLint + run: | + yarn tslint diff --git a/src/css/states/main_menu.scss b/src/css/states/main_menu.scss index 07a47c2e..a2e0a81d 100644 --- a/src/css/states/main_menu.scss +++ b/src/css/states/main_menu.scss @@ -201,33 +201,6 @@ flex-grow: 1; @include S(margin-bottom, 10px); } - - .contest { - flex-grow: 1; - background: rgb(32, 187, 166); - @include S(padding, 15px); - - h3 { - @include Heading; - color: #fff; - font-weight: bold; - text-transform: uppercase; - @include S(margin-bottom, 5px); - } - p { - color: #fff; - @include Text; - strong { - font-weight: bold; - } - @include S(margin-bottom, 5px); - } - - button { - background: #fff; - color: #333538; - } - } } .mainContainer { diff --git a/src/js/application.js b/src/js/application.js index 1726bd2d..bf70239d 100644 --- a/src/js/application.js +++ b/src/js/application.js @@ -385,7 +385,7 @@ export class Application { } const scale = this.getEffectiveUiScale(); - waitNextFrame().then(() => document.documentElement.style.setProperty("--ui-scale", scale)); + waitNextFrame().then(() => document.documentElement.style.setProperty("--ui-scale", `${scale}`)); window.focus(); } } diff --git a/src/js/game/hud/parts/entity_debugger.js b/src/js/game/hud/parts/entity_debugger.js index 9fe1bd7c..80f15eea 100644 --- a/src/js/game/hud/parts/entity_debugger.js +++ b/src/js/game/hud/parts/entity_debugger.js @@ -15,7 +15,9 @@ export class HUDEntityDebugger extends BaseHUDPart { ` ); + /** @type {HTMLElement} */ this.mousePosElem = this.element.querySelector(".mousePos"); + /** @type {HTMLElement} */ this.chunkPosElem = this.element.querySelector(".chunkPos"); this.entityInfoElem = this.element.querySelector(".entityInfo"); } diff --git a/src/js/game/hud/parts/settings_menu.js b/src/js/game/hud/parts/settings_menu.js index c70d6afc..6034ab9d 100644 --- a/src/js/game/hud/parts/settings_menu.js +++ b/src/js/game/hud/parts/settings_menu.js @@ -23,7 +23,7 @@ export class HUDSettingsMenu extends BaseHUDPart { ${T.ingame.settingsMenu.beltsPlaced} ${T.ingame.settingsMenu.buildingsPlaced} ${T.ingame.settingsMenu.playtime} - + ` ); @@ -106,16 +106,22 @@ export class HUDSettingsMenu extends BaseHUDPart { this.root.app.inputMgr.makeSureAttachedAndOnTop(this.inputReciever); const totalMinutesPlayed = Math.ceil(this.root.time.now() / 60); - this.statsElement.querySelector(".playtime").innerText = T.global.time.xMinutes.replace( - "", - "" + totalMinutesPlayed - ); - this.statsElement.querySelector(".buildingsPlaced").innerText = formatBigNumberFull( + /** @type {HTMLElement} */ + const playtimeElement = this.statsElement.querySelector(".playtime"); + /** @type {HTMLElement} */ + const buildingsPlacedElement = this.statsElement.querySelector(".buildingsPlaced"); + /** @type {HTMLElement} */ + const beltsPlacedElement = this.statsElement.querySelector(".beltsPlaced"); + + playtimeElement.innerText = T.global.time.xMinutes.replace("", `${totalMinutesPlayed}`); + + buildingsPlacedElement.innerText = formatBigNumberFull( this.root.entityMgr.getAllWithComponent(StaticMapEntityComponent).length - this.root.entityMgr.getAllWithComponent(BeltComponent).length ); - this.statsElement.querySelector(".beltsPlaced").innerText = formatBigNumberFull( + + beltsPlacedElement.innerText = formatBigNumberFull( this.root.entityMgr.getAllWithComponent(BeltComponent).length ); } diff --git a/src/js/globals.d.ts b/src/js/globals.d.ts index bc99d55e..e1a8fad1 100644 --- a/src/js/globals.d.ts +++ b/src/js/globals.d.ts @@ -36,11 +36,6 @@ declare interface CanvasRenderingContext2D { webkitImageSmoothingEnabled: boolean; } -declare interface HTMLCanvasElement { - opaque: boolean; - webkitOpaque: boolean; -} - // Just for compatibility with the shared code declare interface Logger { log(...args); @@ -127,13 +122,6 @@ declare interface NodeRequire { context(src: string, flag: boolean, regexp: RegExp): WebpackContext; } -// HTML Element -declare interface Element { - style: any; - innerText: string; - innerHTML: string; -} - declare interface Object { entries(obj: object): Array<[string, any]>; } diff --git a/src/js/platform/ad_providers/adinplay.js b/src/js/platform/ad_providers/adinplay.js index 00a08fcb..3897ec04 100644 --- a/src/js/platform/ad_providers/adinplay.js +++ b/src/js/platform/ad_providers/adinplay.js @@ -102,7 +102,10 @@ export class AdinplayAdProvider extends AdProviderInterface { // Add the player const videoElement = this.adContainerMainElement.querySelector(".videoInner"); - this.adContainerMainElement.querySelector(".adInner").style.maxWidth = w + "px"; + /** @type {HTMLElement} */ + const adInnerElement = this.adContainerMainElement.querySelector(".adInner"); + + adInnerElement.style.maxWidth = w + "px"; const self = this; window.aiptag.cmd.player.push(function () { diff --git a/src/js/profile/setting_types.js b/src/js/profile/setting_types.js index 1255f961..9e361f66 100644 --- a/src/js/profile/setting_types.js +++ b/src/js/profile/setting_types.js @@ -40,7 +40,7 @@ export class BaseSetting { /** * @param {Application} app - * @param {Element} element + * @param {HTMLElement} element * @param {any} dialogs */ bind(app, element, dialogs) { @@ -188,7 +188,7 @@ export class BoolSetting extends BaseSetting { return `
${this.enabled ? "" : `${T.demo.settingNotAvailable}`} - +
diff --git a/src/js/states/main_menu.js b/src/js/states/main_menu.js index cf7a05ac..927f02f6 100644 --- a/src/js/states/main_menu.js +++ b/src/js/states/main_menu.js @@ -46,7 +46,7 @@ export class MainMenuState extends GameState { : "" }
- + @@ -92,10 +92,10 @@ export class MainMenuState extends GameState { ${T.mainMenu.subreddit} ${T.changelog.title} - + ${T.mainMenu.helpTranslate}
- +
${T.mainMenu.madeBy.replace( "", 'Tobias Springer' @@ -218,11 +218,6 @@ export class MainMenuState extends GameState { this.trackClicks(qs(".languageChoose"), this.onLanguageChooseClicked); this.trackClicks(qs(".helpTranslate"), this.onTranslationHelpLinkClicked); - const contestButton = qs(".participateContest"); - if (contestButton) { - this.trackClicks(contestButton, this.onContestClicked); - } - if (G_IS_STANDALONE) { this.trackClicks(qs(".exitAppButton"), this.onExitAppButtonClicked); } @@ -312,15 +307,6 @@ export class MainMenuState extends GameState { this.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.reddit); } - onContestClicked() { - this.app.analytics.trackUiClick("contest_click"); - - this.dialogs.showInfo( - T.mainMenu.contests.contest_01_03062020.title, - T.mainMenu.contests.contest_01_03062020.longDesc - ); - } - onLanguageChooseClicked() { this.app.analytics.trackUiClick("choose_language"); const setting = /** @type {EnumSetting} */ (getApplicationSettingById("language")); diff --git a/src/js/states/preload.js b/src/js/states/preload.js index eee57f05..f1551893 100644 --- a/src/js/states/preload.js +++ b/src/js/states/preload.js @@ -37,7 +37,7 @@ export class PreloadState extends GameState { return false; } - onEnter(payload) { + onEnter() { this.htmlElement.classList.add("prefab_LoadingState"); const elementsToRemove = ["#loadingPreload", "#fontPreload"]; @@ -52,9 +52,13 @@ export class PreloadState extends GameState { const dialogsElement = document.body.querySelector(".modalDialogParent"); this.dialogs.initializeToElement(dialogsElement); + /** @type {HTMLElement} */ this.statusText = this.htmlElement.querySelector(".loadingStatus > .desc"); + /** @type {HTMLElement} */ this.statusBar = this.htmlElement.querySelector(".loadingStatus > .bar > .inner"); + /** @type {HTMLElement} */ this.statusBarText = this.htmlElement.querySelector(".loadingStatus > .bar > .status"); + this.currentStatus = "booting"; this.currentIndex = 0; @@ -251,12 +255,12 @@ export class PreloadState extends GameState { ${this.currentStatus} failed:
${text}
- +
Please send me an email with steps to reproduce and what you did before this happened:
- +
Build ${G_BUILD_VERSION} @ ${G_BUILD_COMMIT_HASH} diff --git a/src/js/states/settings.js b/src/js/states/settings.js index 4dce1fa3..413645cc 100644 --- a/src/js/states/settings.js +++ b/src/js/states/settings.js @@ -94,6 +94,7 @@ export class SettingsState extends TextualGameState { initSettings() { allApplicationSettings.forEach(setting => { + /** @type {HTMLElement} */ const element = this.htmlElement.querySelector("[data-setting='" + setting.id + "']"); setting.bind(this.app, element, this.dialogs); setting.syncValueToElement(); diff --git a/src/js/tsconfig.json b/src/js/tsconfig.json index 5184bc42..a5d95517 100644 --- a/src/js/tsconfig.json +++ b/src/js/tsconfig.json @@ -3,7 +3,7 @@ /* Basic Options */ "target": "es6" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */, "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, - // "lib": [], /* Specify library files to be included in the compilation. */ + "lib": ["DOM","ES2018"], /* Specify library files to be included in the compilation. */ "allowJs": true /* Allow javascript files to be compiled. */, "checkJs": true /* Report errors in .js files. */, // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ diff --git a/translations/base-zh-CN.yaml b/translations/base-zh-CN.yaml index 411bdde4..5d8fa5f3 100644 --- a/translations/base-zh-CN.yaml +++ b/translations/base-zh-CN.yaml @@ -181,7 +181,6 @@ mainMenu: savegameLevel: 第关 savegameLevelUnknown: 未知关卡 - # contestOver: This contest has ended - Join the discord to get noticed about new contests! continue: 继续游戏 newGame: 新游戏 madeBy: 作者: