diff --git a/node_modules/noname-typings/type.d.ts b/node_modules/noname-typings/type.d.ts index 847852a74..2ca05dbe7 100644 --- a/node_modules/noname-typings/type.d.ts +++ b/node_modules/noname-typings/type.d.ts @@ -31,6 +31,7 @@ declare type GameEvent = import('../../noname/library/index.js').GameEvent; declare type GameEventPromise = import('../../noname/library/index.js').GameEventPromise; declare type Player = import('../../noname/library/index.js').Player; declare type VCard = import('../../noname/library/index.js').VCard; +declare type Control = import('../../noname/library/index.js').Control; declare type Video = import('../../noname/game/index.js').Video; declare type Videos = import('../../noname/game/index.js').Videos; diff --git a/noname/library/element/dialog.js b/noname/library/element/dialog.js index ed819d971..5db38f405 100644 --- a/noname/library/element/dialog.js +++ b/noname/library/element/dialog.js @@ -6,6 +6,23 @@ import { status as _status } from '../../status/index.js'; import { UI as ui } from '../../ui/index.js'; export class Dialog extends HTMLDivElement { + /** @type { HTMLDivElement } */ + contentContainer; + /** @type { HTMLDivElement } */ + content; + /** @type { HTMLDivElement } */ + bar1; + /** @type { HTMLDivElement } */ + bar2; + /** @type { Button[] } */ + buttons; + /** @type { boolean } */ + static; + /** @type { boolean } */ + noforcebutton; + /** @type { boolean } */ + noopen; + // @ts-ignore constructor(...args) { if (args[0] instanceof Dialog) { @@ -18,7 +35,7 @@ export class Dialog extends HTMLDivElement { let noTouchScroll = false; let forceButton = false; let noForceButton = false; - /** @type {this} */ + /** @type { this } */ // @ts-ignore const dialog = ui.create.div('.dialog'); Object.setPrototypeOf(dialog, Dialog.prototype); @@ -40,6 +57,7 @@ export class Dialog extends HTMLDivElement { if (!noTouchScroll) { dialog.contentContainer.ontouchstart = ui.click.dialogtouchStart; dialog.contentContainer.ontouchmove = ui.click.touchScroll; + // @ts-ignore dialog.contentContainer.style.webkitOverflowScrolling = 'touch'; dialog.ontouchstart = ui.click.dragtouchdialog; } @@ -52,15 +70,21 @@ export class Dialog extends HTMLDivElement { dialog._args = args; return dialog; } + /** + * + * @param { string | HTMLDivElement | Card[] | Player[] } item + * @param {*} [noclick] + * @param { boolean } [zoom] + */ add(item, noclick, zoom) { if (typeof item == 'string') { if (item.startsWith('###')) { - var items = item.slice(3).split('###'); + const items = item.slice(3).split('###'); this.add(items[0], noclick, zoom); this.addText(items[1], items[1].length <= 20, zoom); } else if (noclick) { - var strstr = item; + const strstr = item; item = ui.create.div('', this.content); item.innerHTML = strstr; } @@ -68,17 +92,23 @@ export class Dialog extends HTMLDivElement { item = ui.create.caption(item, this.content); } } + // @ts-ignore else if (['div', 'fragment'].includes(get.objtype(item))) { + // @ts-ignore this.content.appendChild(item); } + // @ts-ignore else if (get.itemtype(item) == 'cards') { - var buttons = ui.create.div('.buttons', this.content); + const buttons = ui.create.div('.buttons', this.content); if (zoom) buttons.classList.add('smallzoom'); + // @ts-ignore this.buttons = this.buttons.concat(ui.create.buttons(item, 'card', buttons, noclick)); } + // @ts-ignore else if (get.itemtype(item) == 'players') { var buttons = ui.create.div('.buttons', this.content); if (zoom) buttons.classList.add('smallzoom'); + // @ts-ignore this.buttons = this.buttons.concat(ui.create.buttons(item, 'player', buttons, noclick)); } else if (item[1] == 'textbutton') { @@ -87,6 +117,7 @@ export class Dialog extends HTMLDivElement { else { var buttons = ui.create.div('.buttons', this.content); if (zoom) buttons.classList.add('smallzoom'); + // @ts-ignore this.buttons = this.buttons.concat(ui.create.buttons(item[0], item[1], buttons, noclick)); } if (this.buttons.length) { @@ -101,6 +132,10 @@ export class Dialog extends HTMLDivElement { ui.update(); return item; } + /** + * @param { string } str + * @param { boolean } [center] + */ addText(str, center) { if (str && str.startsWith(' 4 && !this._hovercustomed) { this.addSmall(content); } @@ -124,7 +161,7 @@ export class Dialog extends HTMLDivElement { } open() { if (this.noopen) return; - for (var i = 0; i < ui.dialogs.length; i++) { + for (let i = 0; i < ui.dialogs.length; i++) { if (ui.dialogs[i] == this) { this.show(); this.refocus(); @@ -137,7 +174,7 @@ export class Dialog extends HTMLDivElement { else ui.dialogs[i].hide(); } ui.dialog = this; - var translate; + let translate; if (lib.config.remember_dialog && lib.config.dialog_transform && !this.classList.contains('fixed')) { translate = lib.config.dialog_transform; this._dragtransform = translate; @@ -147,7 +184,7 @@ export class Dialog extends HTMLDivElement { this.style.transform = 'scale(0.8)'; } this.style.transitionProperty = 'opacity,transform'; - this.style.opacity = 0; + this.style.opacity = '0'; ui.arena.appendChild(this); ui.dialogs.unshift(this); ui.update(); @@ -158,10 +195,9 @@ export class Dialog extends HTMLDivElement { else { this.style.transform = 'scale(1)'; } - this.style.opacity = 1; - var that = this; - setTimeout(function () { - that.style.transitionProperty = ''; + this.style.opacity = '1'; + setTimeout(() => { + this.style.transitionProperty = ''; }, 500); return this; } @@ -179,7 +215,12 @@ export class Dialog extends HTMLDivElement { // } return this; } + /** + * @param { string } str + */ setCaption(str) { + + // @ts-ignore this.querySelector('.caption').innerHTML = str; return this; } diff --git a/noname/library/index.js b/noname/library/index.js index 033823204..4e78c58f9 100644 --- a/noname/library/index.js +++ b/noname/library/index.js @@ -7,6 +7,7 @@ * @typedef { InstanceType } GameEvent * @typedef { InstanceType & InstanceType & typeof Promise } GameEventPromise * @typedef { InstanceType } NodeWS + * @typedef { InstanceType } Control */ import { nonameInitialized, assetURL, userAgent, Uninstantable, GeneratorFunction, AsyncFunction, characterDefaultPicturePath } from "../util/index.js"; import { AI as ai } from '../ai/index.js'; diff --git a/noname/ui/index.js b/noname/ui/index.js index 744dd56c7..d233a7a42 100644 --- a/noname/ui/index.js +++ b/noname/ui/index.js @@ -14045,6 +14045,46 @@ export class UI extends Uninstantable { */ targets: [] } + /** + * @type { Dialog[] } + */ + static dialogs; + /** + * @type { Dialog } + */ + static dialog; + /** + * @type { HTMLDivElement } + */ + static arena; + /** + * @type { Control[] } + */ + static controls; + /** + * @type { Control } + */ + static control; + /** + * @type { Control | undefined } + */ + static confirm; + /** + * @type { Control | undefined } + */ + static skills; + /** + * @type { Control | undefined } + */ + static skills1; + /** + * @type { Control | undefined } + */ + static skills2; + /** + * @type { Control | undefined } + */ + static skills3; static refresh(node) { void window.getComputedStyle(node, null).getPropertyValue("opacity"); }