##// END OF EJS Templates
Added 'Attrs', 'Events' type parameters to DjxWidgetBase, typed 'on' and 'emit' methods
cin -
r30:a46488b209e8 v1.0.0-rc14 default
parent child
Show More
@@ -58,9 +58,9
58 "dev": true
58 "dev": true
59 },
59 },
60 "acorn": {
60 "acorn": {
61 "version": "7.1.0",
61 "version": "7.4.0",
62 "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz",
62 "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz",
63 "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==",
63 "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==",
64 "dev": true
64 "dev": true
65 },
65 },
66 "acorn-jsx": {
66 "acorn-jsx": {
@@ -697,9 +697,9
697 }
697 }
698 },
698 },
699 "lodash": {
699 "lodash": {
700 "version": "4.17.15",
700 "version": "4.17.20",
701 "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
701 "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
702 "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
702 "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
703 "dev": true
703 "dev": true
704 },
704 },
705 "mimic-fn": {
705 "mimic-fn": {
@@ -717,19 +717,21
717 "brace-expansion": "^1.1.7"
717 "brace-expansion": "^1.1.7"
718 }
718 }
719 },
719 },
720 "minimist": {
721 "version": "0.0.8",
722 "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
723 "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
724 "dev": true
725 },
726 "mkdirp": {
720 "mkdirp": {
727 "version": "0.5.1",
721 "version": "0.5.5",
728 "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
722 "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
729 "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
723 "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
730 "dev": true,
724 "dev": true,
731 "requires": {
725 "requires": {
732 "minimist": "0.0.8"
726 "minimist": "^1.2.5"
727 },
728 "dependencies": {
729 "minimist": {
730 "version": "1.2.5",
731 "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
732 "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
733 "dev": true
734 }
733 }
735 }
734 },
736 },
735 "ms": {
737 "ms": {
@@ -858,9 +860,9
858 "dev": true
860 "dev": true
859 },
861 },
860 "resolve": {
862 "resolve": {
861 "version": "1.15.0",
863 "version": "1.17.0",
862 "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz",
864 "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
863 "integrity": "sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==",
865 "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
864 "dev": true,
866 "dev": true,
865 "requires": {
867 "requires": {
866 "path-parse": "^1.0.6"
868 "path-parse": "^1.0.6"
@@ -1086,9 +1088,9
1086 "dev": true
1088 "dev": true
1087 },
1089 },
1088 "tslint": {
1090 "tslint": {
1089 "version": "6.0.0",
1091 "version": "6.1.3",
1090 "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.0.0.tgz",
1092 "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz",
1091 "integrity": "sha512-9nLya8GBtlFmmFMW7oXXwoXS1NkrccqTqAtwXzdPV9e2mqSEvCki6iHL/Fbzi5oqbugshzgGPk7KBb2qNP1DSA==",
1093 "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==",
1092 "dev": true,
1094 "dev": true,
1093 "requires": {
1095 "requires": {
1094 "@babel/code-frame": "^7.0.0",
1096 "@babel/code-frame": "^7.0.0",
@@ -1099,10 +1101,10
1099 "glob": "^7.1.1",
1101 "glob": "^7.1.1",
1100 "js-yaml": "^3.13.1",
1102 "js-yaml": "^3.13.1",
1101 "minimatch": "^3.0.4",
1103 "minimatch": "^3.0.4",
1102 "mkdirp": "^0.5.1",
1104 "mkdirp": "^0.5.3",
1103 "resolve": "^1.3.2",
1105 "resolve": "^1.3.2",
1104 "semver": "^5.3.0",
1106 "semver": "^5.3.0",
1105 "tslib": "^1.10.0",
1107 "tslib": "^1.13.0",
1106 "tsutils": "^2.29.0"
1108 "tsutils": "^2.29.0"
1107 },
1109 },
1108 "dependencies": {
1110 "dependencies": {
@@ -1111,6 +1113,12
1111 "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
1113 "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
1112 "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
1114 "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
1113 "dev": true
1115 "dev": true
1116 },
1117 "tslib": {
1118 "version": "1.13.0",
1119 "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
1120 "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==",
1121 "dev": true
1114 }
1122 }
1115 }
1123 }
1116 },
1124 },
@@ -1145,9 +1153,9
1145 "dev": true
1153 "dev": true
1146 },
1154 },
1147 "typescript": {
1155 "typescript": {
1148 "version": "3.8.3",
1156 "version": "4.0.2",
1149 "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz",
1157 "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz",
1150 "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==",
1158 "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==",
1151 "dev": true
1159 "dev": true
1152 },
1160 },
1153 "uri-js": {
1161 "uri-js": {
@@ -19,16 +19,16
19 "@implab/core-amd": "^1.3.2"
19 "@implab/core-amd": "^1.3.2"
20 },
20 },
21 "devDependencies": {
21 "devDependencies": {
22 "@implab/core-amd": "^1.3.2",
23 "@types/chai": "4.1.3",
22 "@types/requirejs": "2.1.31",
24 "@types/requirejs": "2.1.31",
23 "dojo": "1.16.0",
24 "typescript": "~3.8.3",
25 "eslint": "6.8.0",
26 "tslint": "6.0.0",
27 "@implab/core-amd": "^1.3.2",
28 "yaml": "~1.7.2",
29 "@types/yaml": "1.2.0",
25 "@types/yaml": "1.2.0",
30 "chai": "4.2.0",
26 "chai": "4.2.0",
31 "@types/chai": "4.1.3",
27 "dojo": "1.16.0",
32 "dojo-typings": "~1.11.9"
28 "dojo-typings": "~1.11.9",
29 "eslint": "6.8.0",
30 "tslint": "^6.1.3",
31 "typescript": "4.0.2",
32 "yaml": "~1.7.2"
33 }
33 }
34 }
34 }
@@ -240,7 +240,7 export function bind(params: NodeBindSpe
240 }
240 }
241 }
241 }
242
242
243 /** Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ Π² ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ свойство со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ `undefined`, Π΄Π°Π½Π½Ρ‹ΠΉ
243 /** Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ Π² ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ свойство со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ `undefined`, Π΄Π°Π½Π½Ρ‹ΠΉ
244 * Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для свойств, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ значСния ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
244 * Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для свойств, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ значСния ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
245 * ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ `null | undefined`
245 * ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ `null | undefined`
246 */
246 */
@@ -6,8 +6,26 import registry = require("dijit/registr
6
6
7 // type Handle = dojo.Handle;
7 // type Handle = dojo.Handle;
8
8
9 export interface EventArgs {
10 bubbles?: boolean;
11
12 cancelable?: boolean;
13
14 composed?: boolean;
15 }
16
17 export interface DjxWidgetBase<Attrs = any, Events extends { [name in keyof Events]: Event } = any> {
18 set<K extends keyof Attrs & string>(key: K, value: Attrs[K]): this;
19 set(props: Partial<Attrs>): this;
20 get<K extends keyof Attrs & string>(key: K): Attrs[K];
21
22 on<K extends keyof Events & string>(eventName: K, cb: (evt: Events[K]) => void): dojo.WatchHandle;
23
24 emit<K extends keyof Events & string>(eventName: K, evt: Omit<Events[K], keyof Event> & EventArgs ): void;
25 }
26
9 @djclass
27 @djclass
10 export abstract class DjxWidgetBase extends djbase(_WidgetBase, _AttachMixin) {
28 export abstract class DjxWidgetBase<Attrs = any, Events = any> extends djbase(_WidgetBase, _AttachMixin) {
11
29
12 buildRendering() {
30 buildRendering() {
13 this.domNode = this.render().getDomNode();
31 this.domNode = this.render().getDomNode();
@@ -8,3 +8,18 declare namespace JSX {
8 [name: string]: any;
8 [name: string]: any;
9 }
9 }
10 }
10 }
11
12 declare namespace dijit {
13 interface _WidgetBase {
14
15 _started?: boolean;
16
17 _set<K extends keyof this>(key: K, value: this[K]): void;
18 }
19
20 interface TooltipDialog {
21
22 content: any;
23
24 }
25 } No newline at end of file
@@ -1,11 +1,23
1 import { djbase, djclass, bind, prototype } from "../declare";
1 import { djbase, djclass, bind, prototype, AbstractConstructor } from "../declare";
2
2
3 import { DjxWidgetBase } from "../tsx/DjxWidgetBase";
3 import { DjxWidgetBase } from "../tsx/DjxWidgetBase";
4 import { createElement } from "../tsx";
4 import { createElement } from "../tsx";
5
5
6 interface MyWidgetAttrs {
7 title: string;
8
9 counter: number;
10 }
11
12 interface MyWidgetEvents {
13 "count-inc": Event;
14
15 "count-dec": Event;
16 }
17
6
18
7 @djclass
19 @djclass
8 export class MyWidget extends djbase(DjxWidgetBase) {
20 export class MyWidget extends djbase(DjxWidgetBase as AbstractConstructor<DjxWidgetBase<MyWidgetAttrs, MyWidgetEvents>>) {
9
21
10 @bind({node: "titleNode", type:"innerHTML"})
22 @bind({node: "titleNode", type:"innerHTML"})
11 title = "";
23 title = "";
@@ -16,7 +28,16 export class MyWidget extends djbase(Djx
16 render() {
28 render() {
17 return <div>
29 return <div>
18 <h1 data-dojo-attach-point="titleNode"></h1>
30 <h1 data-dojo-attach-point="titleNode"></h1>
31 <span onclick={() => this._onIncClick()}>[+]</span>
32 <span onclick={() => this._onDecClick()}>[-]</span>
19 </div>;
33 </div>;
20 }
34 }
21
35
36 _onIncClick() {
37 this.emit("count-inc", { bubbles: false } );
38 }
39
40 _onDecClick() {
41 this.emit("count-dec", { bubbles: false } );
42 }
22 }
43 }
General Comments 0
You need to be logged in to leave comments. Login now