diff --git a/core/src/plugin_api.mts b/core/src/plugin_api.mts index 04e917c5..2c3a6958 100644 --- a/core/src/plugin_api.mts +++ b/core/src/plugin_api.mts @@ -2,9 +2,10 @@ * @fileOverview プラグインAPIの型定義 */ -export type NakoVariables = Map; -export type NakoCallbackEvent = (e: any)=>any; +export type NakoVariables = Map; +export type NakoCallbackEvent = ((e: object) => boolean) | ((e: object, sys: any) => boolean); export type NakoCallback = string | NakoCallbackEvent; +export type NakoValue = string | number | boolean | bigint | object | null | undefined; // NakoSystem export interface NakoSystem { @@ -12,15 +13,15 @@ export interface NakoSystem { coreVersion: string; isDebug: boolean; tags: any; // 何を設定しても良い自由なタグ領域 - __interval: any[]; // setIntervalのIDを保持する配列 - __timeout: any[]; // setTimeoutのIDを保持する配列 + __interval: string|number[]; // setIntervalのIDを保持する配列 + __timeout: string|number[]; // setTimeoutのIDを保持する配列 __reisetu: number; // 礼節レベル(ジョーク機能) __printPool: string; // 『継続表示』のための一時変数(『表示』実行で初期化) - __getSysVar (name: string, defaultValue?: any): any; // システム変数の参照 - __setSysVar (name: string, value: any): void; // システム変数の設定 - __findVar (name: NakoCallback, defaultValue?: any): any; - __findFunc (nameStr: any, parentFunc: string): any; - __exec (func: string, params: any[]): any; + __getSysVar(name: string, defaultValue?: NakoValue): any; // システム変数の参照 + __setSysVar(name: string, value: NakoValue): void; // システム変数の設定 + __findVar(name: NakoCallback, defaultValue?: NakoValue): any; // 変数を探す + __findFunc(nameStr: string, parentFunc: string): NakoCallback | any; + __exec(func: string, params: NakoValue[]): any; __setSore(v: any): void; __getSore(): any; __loadScript(url: string): Promise; // JSのスクリプトを読み込む (ex) グラフ描画(plguin_browser_chart.mts) @@ -32,9 +33,9 @@ export interface NakoSystem { __formatDate (t: Date): string; __formatTime (t: Date): string; __str2date(s: string): Date; - __parseFloatOrBigint(v: any): number | bigint; - __evalJS(code: string, sys?: NakoSystem): any; - __evalSafe(code: string): any; + __parseFloatOrBigint(v: NakoValue): number | bigint; + __evalJS(code: string, sys?: NakoSystem): NakoValue; + __evalSafe(code: string): NakoValue; josiList: string[]; reservedWords: string[]; // 実際には存在するが利用が非推奨なメソッドやプロパティ diff --git a/src/cnako3.mts b/src/cnako3.mts index 0e9715cf..17e6d656 100755 --- a/src/cnako3.mts +++ b/src/cnako3.mts @@ -9,7 +9,7 @@ import { CNako3 } from './cnako3mod.mjs' const cnako3: CNako3 = new CNako3() try { await cnako3.execCommand() - } catch (err: any) { + } catch (err: unknown) { // 何かしらのエラーがあればコンソールに返す // ここで出るエラーは致命的なエラー console.error('[cnako3のエラー]', err) diff --git a/src/plugin_browser.mts b/src/plugin_browser.mts index 2bb1b633..c3231e12 100644 --- a/src/plugin_browser.mts +++ b/src/plugin_browser.mts @@ -1,5 +1,9 @@ -// plugin_browser -// @ts-nocheck +/** + * @fileOverview ブラウザプラグイン + */ +import { NakoValue, NakoCallback, NakoCallbackEvent } from '../core/src/plugin_api.mjs' +import { NakoBrowsesrSystem, IBrowserDocument, IBrowserWindow, IBrowserLocation } from './plugin_browser_api.mjs' + import PartBrowserColor from './plugin_browser_color.mjs' import PartBrowserSystem from './plugin_browser_system.mjs' import PartBrowserDialog from './plugin_browser_dialog.mjs' @@ -55,20 +59,20 @@ const PluginBrowser = { type: 'func', josi: [], pure: true, - fn: function (sys: any) { + fn: function (sys: NakoBrowsesrSystem) { /* eslint no-global-assign: 0 */ - const doc: any = (typeof document === 'undefined') ? { 'body': {} } : document - const win: any = (typeof window === 'undefined') ? { 'location': { 'href': 'http://localhost/' } } : window - const nav: any = (typeof navigator === 'undefined') ? {} : navigator - const loc: any = (typeof win.location === 'undefined') ? { 'href': 'http://localhost/' } : win.location + const doc: IBrowserDocument = (typeof document === 'undefined') ? { 'body': {}, 'querySelector': ()=>null } : document + const win: IBrowserWindow = (typeof window === 'undefined') ? { 'location': { 'href': 'http://localhost/' } } : window + const nav: object = (typeof navigator === 'undefined') ? {} : navigator + const loc: IBrowserLocation = (typeof win.location === 'undefined') ? { 'href': 'http://localhost/' } : win.location // 定数を初期化 - sys.__setSysVar('AJAX:ONERROR', (err: any) => { console.log(err) }) + sys.__setSysVar('AJAX:ONERROR', (err: unknown) => { console.log(err) }) // オブジェクトを初期化 - sys.__setSysVar('DOCUMENT', doc) - sys.__setSysVar('WINDOW', win) - sys.__setSysVar('NAVIGATOR', nav) - sys.__setSysVar('DOM親要素', doc.body) + sys.__setSysVar('DOCUMENT', doc as unknown as NakoValue) + sys.__setSysVar('WINDOW', win as unknown as NakoValue) + sys.__setSysVar('NAVIGATOR', nav as unknown as NakoValue) + sys.__setSysVar('DOM親要素', doc.body as NakoValue) sys.__setSysVar('ブラウザURL', loc.href) // 便利なメソッドを定義 @@ -87,69 +91,86 @@ const PluginBrowser = { // 「!クリア」でDOMイベントを削除するため sys.__dom_events = [] // [{}, {}, {} ...] // DOM追加イベント - sys.__addEvent = (dom: any, event: any, func: any, setHandler: any) => { - // dom + sys.__addEvent = (dom: HTMLElement|string, event: string, func: NakoCallback, setHandler: NakoCallbackEvent) => { + // dom element + let domElement: HTMLElement|null = null if (typeof (dom) === 'string') { - dom = doc.querySelector(dom) - if (!dom) { throw new Error('DOMイベントが追加できません。要素が見当たりません。') } + domElement = doc.querySelector(dom) + if (!domElement) { throw new Error('DOMイベントが追加できません。要素が見当たりません。') } + } else { + domElement = dom } // func if (typeof (func) === 'string') { - func = sys.__findVar(func, null) + func = sys.__findVar(func, null) as NakoCallback if (!func) { throw new Error('DOMイベントが追加できません。関数が見当たりません。') } } // make wrapper func - const wrapperFunc = (e: any) => { + const wrapperFunc = (e: Event) => { sys.__setSysVar('対象', e.target) sys.__setSysVar('対象イベント', e) // 追加データが得られる場合 if (setHandler) { setHandler(e, sys) } - if (sys.__genMode === '非同期モード') { sys.newenv = true } - return func(e, sys) + if (typeof func == 'function') { + return func(e, sys) + } + return false } // add - sys.__dom_events.push({ dom, event, func: wrapperFunc, rawFunc: func }) - dom.addEventListener(event, wrapperFunc) + sys.__dom_events.push({ dom: domElement, event, func: wrapperFunc, rawFunc: func }) + const domWithEventListenr = dom as { addEventListener: (event: string, func: (e: Event) => void) => void } + if (typeof domWithEventListenr.addEventListener === 'function') { + domWithEventListenr.addEventListener(event, wrapperFunc) + } } // キーイベントハンドラ - sys.__keyHandler = (e: any, sys: any) => { + sys.__keyHandler = (e: KeyboardEvent, sys: NakoBrowsesrSystem) => { sys.__setSysVar('押キー', e.key) } // マウスイベントハンドラ - sys.__mouseHandler = (e, sys) => { - const box = e.target.getBoundingClientRect() - sys.__setSysVar('マウスX', e.clientX - box.left) - sys.__setSysVar('マウスY', e.clientY - box.top) - if (e.button !== undefined) { - const buttonLabels = ['左', '中央', '右'] - sys.__setSysVar('押ボタン', buttonLabels[e.button]) + sys.__mouseHandler = (e: MouseEvent, sys: NakoBrowsesrSystem) => { + const target = e.target as HTMLElement; + if (target && target instanceof HTMLElement) { + const box = target.getBoundingClientRect() + sys.__setSysVar('マウスX', e.clientX - box.left) + sys.__setSysVar('マウスY', e.clientY - box.top) + if (e.button !== undefined) { + const buttonLabels = ['左', '中央', '右'] + sys.__setSysVar('押ボタン', buttonLabels[e.button]) + } } } // タッチイベントハンドラ - sys.__touchHandler = (e, sys) => { - const box = e.target.getBoundingClientRect() - const touches = e.changedTouches - if (touches.length <= 0) { return } - const ts = [] - for (let i = 0; i < touches.length; i++) { - const t = touches[i] - const tx = t.clientX - box.left - const ty = t.clientY - box.top - if (i === 0) { - sys.__setSysVar('タッチX', tx) - sys.__setSysVar('タッチY', ty) + sys.__touchHandler = (e: TouchEvent, sys: NakoBrowsesrSystem) => { + const target = e.target as HTMLElement; + if (target && target instanceof HTMLElement) { + const box = target.getBoundingClientRect() + const touches = e.changedTouches + if (touches.length <= 0) { return } + const ts = [] + for (let i = 0; i < touches.length; i++) { + const t = touches[i] + const tx = t.clientX - box.left + const ty = t.clientY - box.top + if (i === 0) { + sys.__setSysVar('タッチX', tx) + sys.__setSysVar('タッチY', ty) + } + ts.push([tx, ty]) } - ts.push([tx, ty]) + sys.__setSysVar('タッチ配列', ts) + return ts } - sys.__setSysVar('タッチ配列', ts) - return ts } // DOMイベント削除 (探して削除) sys.__removeEvent = (dom, event, func) => { // dom + let domElement: HTMLElement|null = null if (typeof (dom) === 'string') { - dom = doc.querySelector(dom) - if (!dom) { throw new Error('DOMイベントが削除できません。要素が見当たりません。') } + domElement = doc.querySelector(dom) + if (!domElement) { throw new Error('DOMイベントが削除できません。要素が見当たりません。') } + } else { + domElement = dom } // func if (typeof (func) === 'string') { @@ -169,19 +190,19 @@ const PluginBrowser = { // requestAnimationFrame のためのid sys.__requestAnimationFrameLastId = 0 // DOMイベント全クリア - sys.__removeAllDomEvent = () => { + sys.__removeAllDomEvents = () => { sys.__dom_events.forEach(e => { e.dom.removeEventListener(e.event, e.func) }) sys.__dom_events = [] // requestAnimationFrame if (sys.__requestAnimationFrameLastId > 0) { - win.cancelAnimationFrame(sys.__requestAnimationFrameLastId) + (win as Window).cancelAnimationFrame(sys.__requestAnimationFrameLastId) sys.__requestAnimationFrameLastId = 0 } } // DOM取得のために使う - sys.__query = (dom, commandName, isGetFunc) => { + sys.__query = (dom: object|string, commandName: string, isGetFunc: boolean) => { const elm = (typeof dom === 'string') ? document.querySelector(dom) : dom if (!elm) { if (isGetFunc) { @@ -201,7 +222,7 @@ const PluginBrowser = { const script = document.createElement('script') script.type = 'text/javascript' script.src = url - script.onload = resolve + script.onload = () => { resolve() } script.onerror = () => { reject(new Error(`Failed to load script at url: ${url}`)) } @@ -214,13 +235,16 @@ const PluginBrowser = { type: 'func', josi: [], pure: true, - fn: function (sys) { + fn: function (sys: NakoBrowsesrSystem) { // chart.jsを破棄 if (sys.__chartjs) { - sys.__chartjs.destroy() + const chartjs = sys.__chartjs as { destroy: () => void } + if (typeof chartjs.destroy === 'function') { + chartjs.destroy() + } } // 全DOMイベントをクリア - sys.__removeAllDomEvent() + sys.__removeAllDomEvents() } } } diff --git a/src/plugin_browser_api.mts b/src/plugin_browser_api.mts new file mode 100644 index 00000000..30dd7f1a --- /dev/null +++ b/src/plugin_browser_api.mts @@ -0,0 +1,46 @@ +import { NakoSystem, NakoCallback, NakoCallbackEvent } from '../core/src/plugin_api.mjs' + +export interface IKeyEvent extends Event { + key: string + code: string + shiftKey: boolean + ctrlKey: boolean + altKey: boolean + metaKey: boolean +} +export interface ITouchEvent extends Event { + touches: object +} +export interface IBrowserLocation { // 暫定型 (window.location) + href: string +} +export interface IBrowserWindow { // 暫定型 - 本来は Window (ブラウザ以外の環境でもなんとなく動かすために定義) + location: IBrowserLocation +} +export interface IBrowserDocument { // 暫定型 - 本来は Document + body: object + querySelector: (selector: string) => HTMLElement|null +} +export interface NakoDomEvent { + dom: HTMLElement + event: string + func: (e: Event) => void + rawFunc: NakoCallback +} +export type NakoDom = HTMLElement|string + +export interface NakoBrowsesrSystem extends NakoSystem { + __query(dom: NakoDom, commandName: string, isGetFunc: boolean): object|null + __addEvent(dom: NakoDom, event: string, func: NakoCallback, setHandler: NakoCallbackEvent|null): void + __keyHandler(e: KeyboardEvent, sys: NakoBrowsesrSystem): void + __mouseHandler(e: MouseEvent, sys: NakoBrowsesrSystem): void + __touchHandler(e: TouchEvent, sys: NakoBrowsesrSystem): void + __removeEvent(dom: NakoDom, event: string, funcStr: NakoCallback): void + __removeAllDomEvents(): void + __tohtml(text: string): string + __tohtmlQ(text: string): string + __dom_events: NakoDomEvent[] + __requestAnimationFrameLastId: number + __chartjs: object +} + diff --git a/src/plugin_browser_dom_event.mts b/src/plugin_browser_dom_event.mts index a8936174..8377443e 100644 --- a/src/plugin_browser_dom_event.mts +++ b/src/plugin_browser_dom_event.mts @@ -1,4 +1,5 @@ -// @ts-nocheck +import { NakoCallback, NakoCallbackEvent } from '../core/src/plugin_api.mjs' +import { NakoBrowsesrSystem, NakoDom } from './plugin_browser_api.mjs' export default { // @DOM操作とイベント '対象イベント': { type: 'const', value: '' }, // @たいしょういべんと @@ -6,7 +7,7 @@ export default { type: 'func', josi: [['の'], ['に', 'へ'], ['を']], pure: true, - fn: function (dom: any, event: any, funcStr: any, sys: any) { + fn: function (dom: NakoDom, event: string, funcStr: string, sys: NakoBrowsesrSystem) { sys.__addEvent(dom, event, funcStr, null) }, return_none: true @@ -15,7 +16,7 @@ export default { type: 'func', josi: [['の'], ['から'], ['を']], pure: true, - fn: function (dom: any, event: any, funcStr: any, sys: any) { + fn: function (dom: NakoDom, event: string, funcStr: NakoCallback, sys: NakoBrowsesrSystem) { sys.__removeEvent(dom, event, funcStr) }, return_none: true @@ -24,7 +25,7 @@ export default { type: 'func', josi: [['で'], ['の'], ['が']], pure: true, - fn: function (callback: any, dom: any, event: any, sys: any) { + fn: function (callback: NakoCallback, dom: NakoDom, event: string, sys: NakoBrowsesrSystem) { sys.__addEvent(dom, event, callback, null) }, return_none: true @@ -33,8 +34,14 @@ export default { type: 'func', josi: [['を', 'の']], pure: true, - fn: function (event: any, sys: any) { - event.preventDefault() + // eslint-disable-next-line @typescript-eslint/no-unused-vars + fn: function (event: unknown, sys: NakoBrowsesrSystem) { + if (event !== null && typeof event == 'object' && 'preventDefault' in event) { + const objWithFn = event as { preventDefault: () => void } + if (typeof objWithFn.preventDefault === 'function') { + objWithFn.preventDefault() + } + } }, return_none: true }, @@ -42,8 +49,8 @@ export default { type: 'func', josi: [['で'], ['を', 'の']], pure: true, - fn: function (func: any, dom: any, sys: any) { - sys.__addEvent(dom, 'click', func, sys.__mouseHandler) + fn: function (func: NakoCallback, dom: NakoDom, sys: NakoBrowsesrSystem) { + sys.__addEvent(dom, 'click', func, sys.__mouseHandler as NakoCallbackEvent) }, return_none: true }, @@ -51,8 +58,8 @@ export default { type: 'func', josi: [['で'], ['を', 'の']], pure: true, - fn: function (func: any, dom: any, sys: any) { - sys.__addEvent(dom, 'dblclick', func, sys.__mouseHandler) + fn: function (func: NakoCallback, dom: NakoDom, sys: NakoBrowsesrSystem) { + sys.__addEvent(dom, 'dblclick', func, sys.__mouseHandler as NakoCallbackEvent) }, return_none: true }, @@ -60,7 +67,7 @@ export default { type: 'func', josi: [['で'], ['を', 'の']], pure: true, - fn: function (func: any, dom: any, sys: any) { + fn: function (func: NakoCallback, dom: NakoDom, sys: NakoBrowsesrSystem) { sys.__addEvent(dom, 'click', func, null) }, return_none: true @@ -69,7 +76,7 @@ export default { type: 'func', josi: [['で'], ['を', 'の']], pure: true, - fn: function (func: any, dom: any, sys: any) { + fn: function (func: NakoCallback, dom: NakoDom, sys: NakoBrowsesrSystem) { sys.__addEvent(dom, 'load', func, null) }, return_none: true @@ -78,7 +85,7 @@ export default { type: 'func', josi: [['で'], ['を', 'の']], pure: true, - fn: function (func: any, dom: any, sys: any) { + fn: function (func: NakoCallback, dom: NakoDom, sys: NakoBrowsesrSystem) { sys.__addEvent(dom, 'submit', func, null) }, return_none: true @@ -88,8 +95,8 @@ export default { type: 'func', josi: [['で'], ['を', 'の']], pure: true, - fn: function (func: any, dom: any, sys: any) { - sys.__addEvent(dom, 'keydown', func, sys.__keyHandler) + fn: function (func: NakoCallback, dom: NakoDom, sys: NakoBrowsesrSystem) { + sys.__addEvent(dom, 'keydown', func, sys.__keyHandler as NakoCallbackEvent) }, return_none: true }, @@ -97,8 +104,8 @@ export default { type: 'func', josi: [['で'], ['を', 'の']], pure: true, - fn: function (func: any, dom: any, sys: any) { - sys.__addEvent(dom, 'keyup', func, sys.__keyHandler) + fn: function (func: NakoCallback, dom: NakoDom, sys: NakoBrowsesrSystem) { + sys.__addEvent(dom, 'keyup', func, sys.__keyHandler as NakoCallbackEvent) }, return_none: true }, @@ -106,8 +113,8 @@ export default { type: 'func', josi: [['で'], ['を', 'の']], pure: true, - fn: function (func: any, dom: any, sys: any) { - sys.__addEvent(dom, 'keypress', func, sys.__keyHandler) + fn: function (func: NakoCallback, dom: NakoDom, sys: NakoBrowsesrSystem) { + sys.__addEvent(dom, 'keypress', func, sys.__keyHandler as NakoCallbackEvent) }, return_none: true }, @@ -118,8 +125,8 @@ export default { type: 'func', josi: [['で'], ['を', 'の']], pure: true, - fn: function (func: any, dom: any, sys: any) { - sys.__addEvent(dom, 'mousedown', func, sys.__mouseHandler) + fn: function (func: NakoCallback, dom: NakoDom, sys: NakoBrowsesrSystem) { + sys.__addEvent(dom, 'mousedown', func, sys.__mouseHandler as NakoCallbackEvent) }, return_none: true }, @@ -127,8 +134,8 @@ export default { type: 'func', josi: [['で'], ['を', 'の']], pure: true, - fn: function (func: any, dom: any, sys: any) { - sys.__addEvent(dom, 'mousemove', func, sys.__mouseHandler) + fn: function (func: NakoCallback, dom: NakoDom, sys: NakoBrowsesrSystem) { + sys.__addEvent(dom, 'mousemove', func, sys.__mouseHandler as NakoCallbackEvent) }, return_none: true }, @@ -136,8 +143,8 @@ export default { type: 'func', josi: [['で'], ['を', 'の']], pure: true, - fn: function (func: any, dom: any, sys: any) { - sys.__addEvent(dom, 'mouseup', func, sys.__mouseHandler) + fn: function (func: NakoCallback, dom: NakoDom, sys: NakoBrowsesrSystem) { + sys.__addEvent(dom, 'mouseup', func, sys.__mouseHandler as NakoCallbackEvent) }, return_none: true }, @@ -145,8 +152,8 @@ export default { type: 'func', josi: [['で'], ['を', 'の']], pure: true, - fn: function (func: any, dom: any, sys: any) { - sys.__addEvent(dom, 'mouseover', func, sys.__mouseHandler) + fn: function (func: NakoCallback, dom: NakoDom, sys: NakoBrowsesrSystem) { + sys.__addEvent(dom, 'mouseover', func, sys.__mouseHandler as NakoCallbackEvent) }, return_none: true }, @@ -154,8 +161,8 @@ export default { type: 'func', josi: [['で'], ['を', 'の']], pure: true, - fn: function (func: any, dom: any, sys: any) { - sys.__addEvent(dom, 'mouseout', func, sys.__mouseHandler) + fn: function (func: NakoCallback, dom: NakoDom, sys: NakoBrowsesrSystem) { + sys.__addEvent(dom, 'mouseout', func, sys.__mouseHandler as NakoCallbackEvent) }, return_none: true }, @@ -164,10 +171,13 @@ export default { type: 'func', josi: [['で'], ['を', 'の']], pure: true, - fn: function (func: any, dom: any, sys: any) { - sys.__addEvent(dom, 'wheel', func, (e) => { - sys.__setSysVar('マウスホイール値', e.deltaY) - }) + fn: function (func: NakoCallback, dom: NakoDom, sys: NakoBrowsesrSystem) { + sys.__addEvent(dom, 'wheel', func, ((e: object) => { + const objWithDeltaY = e as { deltaY: number } + if (typeof objWithDeltaY.deltaY === 'number') { + sys.__setSysVar('マウスホイール値', objWithDeltaY.deltaY) + } + }) as NakoCallbackEvent) }, return_none: true }, @@ -178,7 +188,7 @@ export default { type: 'func', josi: [['の']], pure: true, - fn: function (e: any, sys: any) { + fn: function (e: TouchEvent, sys: NakoBrowsesrSystem) { return sys.__touchHandler(e, sys) } }, @@ -186,8 +196,8 @@ export default { type: 'func', josi: [['で'], ['を', 'の']], pure: true, - fn: function (func: any, dom: any, sys: any) { - sys.__addEvent(dom, 'touchstart', func, sys.__touchHandler) + fn: function (func: NakoCallback, dom: NakoDom, sys: NakoBrowsesrSystem) { + sys.__addEvent(dom, 'touchstart', func, sys.__touchHandler as NakoCallbackEvent) }, return_none: true }, @@ -195,8 +205,8 @@ export default { type: 'func', josi: [['で'], ['を', 'の']], pure: true, - fn: function (func: any, dom: any, sys: any) { - sys.__addEvent(dom, 'touchmove', func, sys.__touchHandler) + fn: function (func: NakoCallback, dom: NakoDom, sys: NakoBrowsesrSystem) { + sys.__addEvent(dom, 'touchmove', func, sys.__touchHandler as NakoCallbackEvent) }, return_none: true }, @@ -204,8 +214,8 @@ export default { type: 'func', josi: [['で'], ['を', 'の']], pure: true, - fn: function (func: any, dom: any, sys: any) { - sys.__addEvent(dom, 'touchend', func, sys.__touchHandler) + fn: function (func: NakoCallback, dom: NakoDom, sys: NakoBrowsesrSystem) { + sys.__addEvent(dom, 'touchend', func, sys.__touchHandler as NakoCallbackEvent) }, return_none: true }, @@ -213,8 +223,8 @@ export default { type: 'func', josi: [['で'], ['を', 'の']], pure: true, - fn: function (func: any, dom: any, sys: any) { - sys.__addEvent(dom, 'touchcancel', func, sys.__touchHandler) + fn: function (func: NakoCallback, dom: NakoDom, sys: NakoBrowsesrSystem) { + sys.__addEvent(dom, 'touchcancel', func, sys.__touchHandler as NakoCallbackEvent) }, return_none: true }, @@ -222,10 +232,10 @@ export default { type: 'func', josi: [['を']], pure: true, - fn: function (func: any, sys: any) { - func = sys.__findVar(func, null) // 文字列指定なら関数に変換 + fn: function (func: unknown, sys: NakoBrowsesrSystem) { + func = sys.__findVar(func as NakoCallback, null) // 文字列指定なら関数に変換 if (!func) { throw new Error('『画面更新時実行』で関数の取得に失敗しました。') } - sys.__requestAnimationFrameLastId = window.requestAnimationFrame(func) + sys.__requestAnimationFrameLastId = window.requestAnimationFrame(func as unknown as FrameRequestCallback) return sys.__requestAnimationFrameLastId } }, @@ -233,7 +243,7 @@ export default { type: 'func', josi: [['の', 'を']], pure: true, - fn: function (id: any, sys: any) { + fn: function (id: number, sys: NakoBrowsesrSystem) { window.cancelAnimationFrame(id) if (sys.__requestAnimationFrameLastId === id) { sys.__requestAnimationFrameLastId = 0 } }, diff --git a/src/plugin_turtle.mts b/src/plugin_turtle.mts index b2983e91..b44c0451 100644 --- a/src/plugin_turtle.mts +++ b/src/plugin_turtle.mts @@ -700,9 +700,9 @@ const PluginTurtle = { if (typeof func !== 'function') { return } const tid = sys.tags.turtles.target const tt = sys.tags.turtles.list[tid] - tt.canvas.onclick = (e: any) => { + tt.canvas.onclick = (e: Event) => { sys.__setSysVar('対象', e.target) - return func(e) + return func(e, sys) } }, return_none: true