Browse code

pli bona laborado inter kliento kaj stirad-kromajxo

Fenris Wolf authored on28/08/2016 23:11:36
Showing8 changed files
... ...
@@ -39,7 +39,7 @@ function alporti<tipo_valoro>(strukturo : Object, ernomo : string, kompensajxo :
39 39
 			}
40 40
 			case 1:
41 41
 			{
42
-				let mesagxo : string = "la ero kun la nomo '" + ernomo + "' ne trovigxas en la strukturo; la kompensa valoro '" + String(kompensajxo) + " eldonitos";
42
+				let mesagxo : string = "la ero kun la nomo '" + ernomo + "' ne trovigxas en la strukturo; la kompensa valoro '" + String(kompensajxo) + "' eldonitos";
43 43
 				console.warn(mesagxo);
44 44
 				return kompensajxo;
45 45
 				break;
... ...
@@ -19,6 +19,12 @@
19 19
 */
20 20
 
21 21
 
22
+/**
23
+ * @author fenris
24
+ */
25
+type tipo_plenumanto<tipo_rezulto, tipo_kauxzo> = (akcepti : (rezulto : tipo_rezulto)=>void, rifuzi : (kauxzo : tipo_kauxzo)=>void)=>void
26
+
27
+
22 28
 /**
23 29
  * @author fenris
24 30
  */
... ...
@@ -26,7 +26,8 @@ declare var process;
26 26
  */
27 27
 function cxefajxo() : void
28 28
 {
29
-	function malkonfesado() : void {
29
+	function malkonfesado() : void
30
+	{
30 31
 		console.info("Kvasir  Copyright (C) 2016  Fenris Wolf");
31 32
 		console.info("This program comes with ABSOLUTELY NO WARRANTY.");
32 33
 		console.info("This is free software, and you are welcome to redistribute it");
... ...
@@ -79,7 +80,7 @@ function cxefajxo() : void
79 80
 											{
80 81
 												if (eraro != null)
81 82
  												{
82
- 													throw (new Error("-- la kromajxo '" + ero["vojo"] + "' ne sxargeblas"));
83
+ 													throw (new Error("-- la kromajxo '" + ero["vojo"] + "' ne sxargeblas: " + String(eraro)));
83 84
 												}
84 85
 												else
85 86
 												{
... ...
@@ -78,115 +78,172 @@ abstract class klaso_kliento
78 78
 			(
79 79
 				permesuloj,
80 80
 				{
81
-					"anigxi": function (kanalo : string, modo : boolean = true) : void
81
+					"anigxi": function (kanalo : string, modo : boolean = true) : tipo_plenumanto<Array<string>, Error>
82 82
 					{
83
-						that.anigxi_rekte(kanalo, modo);
84
-					},
85
-					"listigi": function (celo : string) : void
86
-					{
87
-						let enhavo : string = Object.keys(that.kromajxoj).map(identigilo => (that.kromajxoj[identigilo].aktiva ? "+" : "-") + identigilo).join(", ");
88
-						that.eligi(new klaso_evento_eliga_mesagxo(celo, null, enhavo));
89
-					},
90
-					"detaloj": function (identigilo : string, celo : string) : void
91
-					{
92
-						if (identigilo in that.kromajxoj)
93
-						{
94
-							let ero : tipo_ero = that.kromajxoj[identigilo];
95
-							let enhavoj : Array<string> =
96
-							[
97
-								"-- nomo: " + ero.kromajxo.nomo_legi(),
98
-								"-- auxtoro: " + ero.kromajxo.auxtoro_legi(),
99
-								"-- priskribo: " + ero.kromajxo.priskribo_legi(),
100
-								"-- uzo: " + ero.kromajxo.uzo_legi(),
101
-								"-- aktiva: " + (ero.aktiva ? "jes" : "ne"),
102
-							];
103
-							enhavoj.forEach(enhavo => that.eligi(new klaso_evento_eliga_mesagxo(celo, null, enhavo)));
104
-						}
83
+						return (
84
+							(akcepti, rifuzi) =>
85
+							{
86
+								that.anigxi_rekte(kanalo, modo);
87
+								akcepti([]);
88
+							}
89
+						)
105 90
 					},
106
-					"sxalti": function (identigilo : string, aktiva : boolean = null, celo : string = null) : void
91
+					"listigi": function () : tipo_plenumanto<Array<string>, Error>
107 92
 					{
108
-						if (identigilo in that.kromajxoj)
109
-						{
110
-							if (identigilo != "stirado")
93
+						return (
94
+							(akcepti, rifuzi) =>
111 95
 							{
112
-								let aktiva_ : boolean = (aktiva != null) ? aktiva : (! that.kromajxoj[identigilo].aktiva);
113
-								that.kromajxoj[identigilo].aktiva = aktiva_;
114
-								if (celo != null) that.eligi(new klaso_evento_eliga_mesagxo(celo, null, "kromajxo '" + identigilo + "' " + (aktiva_ ? "aktivigita" : "malaktivigita") + ""));
96
+								let enhavo : string = Object.keys(that.kromajxoj).map(identigilo => (that.kromajxoj[identigilo].aktiva ? "+" : "-") + identigilo).join(", ");
97
+								akcepti([enhavo]);
115 98
 							}
116
-							else
99
+						);
100
+					},
101
+					"detaloj": function (identigilo : string) : tipo_plenumanto<Array<string>, Error>
102
+					{
103
+						return (
104
+							(akcepti, rifuzi) =>
117 105
 							{
118
-								if (celo != null) that.eligi(new klaso_evento_eliga_mesagxo(celo, null, "vi ne vere volas sxalti la stirad-kromajxon ..."));
106
+								if (identigilo in that.kromajxoj)
107
+								{
108
+									let ero : tipo_ero = that.kromajxoj[identigilo];
109
+									let linioj : Array<string> =
110
+									[
111
+										{"titolo": "nomo", "valoro": ero.kromajxo.nomo_legi()},
112
+										{"titolo": "auxtoro", "valoro": ero.kromajxo.auxtoro_legi()},
113
+										{"titolo": "priskribo", "valoro": ero.kromajxo.priskribo_legi()},
114
+										{"titolo": "uzo", "valoro": ero.kromajxo.uzo_legi()},
115
+										{"titolo": "aktiva", "valoro": (ero.aktiva ? "jes" : "ne")},
116
+									].map(x => ("--" + " " + x.titolo + ": " + x.valoro));
117
+									akcepti(linioj);
118
+								}
119
+								else
120
+								{
121
+									akcepti(["tia kromajxo ne ekzistas"]);
122
+								}
119 123
 							}
120
-						}
124
+						);
121 125
 					},
122
-					"resxargi": function (identigilo : string, celo : string = null) : void
126
+					"sxalti": function (identigilo : string, aktiva : boolean = null) : tipo_plenumanto<Array<string>, Error>
123 127
 					{
124
-						let ero : tipo_ero = that.kromajxoj[identigilo];
125
-						if (ero.kromajxo instanceof klaso_kromajxo_ekstera)
126
-						{
127
-							let kromajxo : klaso_kromajxo_ekstera = <klaso_kromajxo_ekstera>(ero.kromajxo);
128
-							kromajxo.resxargi
129
-							(
130
-								function (eraro : Error) : void
128
+						return (
129
+							(akcepti, rifuzi) =>
130
+							{
131
+								if (identigilo in that.kromajxoj)
131 132
 								{
132
-									if (eraro != null)
133
+									if (identigilo != "stirado")
133 134
 									{
134
-										console.warn(eraro);
135
-										if (celo != null) that.eligi(new klaso_evento_eliga_mesagxo(celo, null, "resxargado fiaskis; detaloj trovigxas je la konzolo"));
135
+										let aktiva_ : boolean = (aktiva != null) ? aktiva : (! that.kromajxoj[identigilo].aktiva);
136
+										that.kromajxoj[identigilo].aktiva = aktiva_;
137
+										akcepti(["kromajxo '" + identigilo + "' " + (aktiva_ ? "aktivigita" : "malaktivigita") + ""]);
136 138
 									}
137 139
 									else
138 140
 									{
139
-										if (celo != null) that.eligi(new klaso_evento_eliga_mesagxo(celo, null, "kromajxo '" + identigilo + "' resxargita"));
141
+										akcepti(["vi ne vere volas malsxalti la stirad-kromajxon ..."]);
140 142
 									}
141 143
 								}
142
-							);
143
-						}
144
+								else
145
+								{
146
+									akcepti(["tia kromajxo ne ekzistas"]);
147
+								}
148
+							}
149
+						);
144 150
 					},
145
-					"aldoni": function (nomo : string, celo : string= null) : void
151
+					"resxargi": function (identigilo : string) : tipo_plenumanto<Array<string>, Error>
146 152
 					{
147
-						if ((new RegExp("\\w")).test(nomo))
148
-						{
149
-							// let vojo : string = "kromajxoj/" + nomo + ".js";
150
-							let vojo : string = nomo;
151
-							klaso_kromajxo_ekstera.krei
152
-							(
153
-								vojo,
154
-								function (eraro : Error, kromajxo : klaso_kromajxo_ekstera) : void
153
+						return (
154
+							(akcepti, rifuzi) =>
155
+							{
156
+								let ero : tipo_ero = that.kromajxoj[identigilo];
157
+								if (ero.kromajxo instanceof klaso_kromajxo_ekstera)
155 158
 								{
156
-									if (eraro != null)
157
-									{
158
-										console.warn(eraro);
159
-										if (celo != null) that.eligi(new klaso_evento_eliga_mesagxo(celo, null, "aldoni kromajxon fiaskis"));
160
-									}
161
-									else
162
-									{
163
-										that.kromajxo_aldoni
164
-										(
165
-											kromajxo,
166
-											undefined,
167
-											undefined,
168
-											function (eraro_ : Error) : void
159
+									let kromajxo : klaso_kromajxo_ekstera = <klaso_kromajxo_ekstera>(ero.kromajxo);
160
+									kromajxo.resxargi
161
+									(
162
+										function (eraro : Error) : void
163
+										{
164
+											if (eraro != null)
169 165
 											{
170
-												if (eraro_ != null)
171
-												{
172
-													console.warn(eraro_);
173
-													if (celo != null) that.eligi(new klaso_evento_eliga_mesagxo(celo, null, "aldoni kromajxon fiaskis"));
174
-												}
175
-												else
176
-												{
177
-													if (celo != null) that.eligi(new klaso_evento_eliga_mesagxo(celo, null, "kromajxo sukcese aldonita"));
178
-												}
166
+												console.warn(eraro);
167
+												akcepti(["resxargado fiaskis; detaloj trovigxas je la konzolo"]);
179 168
 											}
180
-										);
181
-									}
169
+											else
170
+											{
171
+												akcepti(["kromajxo '" + identigilo + "' resxargita"]);
172
+											}
173
+										}
174
+									);
182 175
 								}
183
-							);
184
-						}
176
+								else
177
+								{
178
+									akcepti(["nur eksteraj kromajxoj resxargeblas"]);
179
+								}
180
+							}
181
+						);
185 182
 					},
186
-					"elmontri_helpon": function (celo : string) : void
183
+					"aldoni": function (nomo : string) : tipo_plenumanto<Array<string>, Error>
187 184
 					{
188
-						that.eligi(new klaso_evento_eliga_mesagxo(celo, null, "'!kromajxo listigi': listigi la nomojn de cxiuj kromajxoj kaj elmontri cxu ili estas sxaltitaj"));
189
-						that.eligi(new klaso_evento_eliga_mesagxo(celo, null, "'!kromajxo detaloj [nomo]': elmontri detalojn pri la kromajxo kun la nomo [nomo]"));
185
+						return (
186
+							(akcepti, rifuzi) =>
187
+							{
188
+								if ((new RegExp("\\S")).test(nomo))
189
+								{
190
+									// let vojo : string = "kromajxoj/" + nomo + ".js";
191
+									let vojo : string = nomo;
192
+									klaso_kromajxo_ekstera.krei
193
+									(
194
+										vojo,
195
+										function (eraro : Error, kromajxo : klaso_kromajxo_ekstera) : void
196
+										{
197
+											if (eraro != null)
198
+											{
199
+												console.warn(eraro);
200
+												akcepti(["aldoni kromajxon fiaskis"]);
201
+											}
202
+											else
203
+											{
204
+												that.kromajxo_aldoni
205
+												(
206
+													kromajxo,
207
+													undefined,
208
+													undefined,
209
+													function (eraro_ : Error) : void
210
+													{
211
+														if (eraro_ != null)
212
+														{
213
+															console.warn(eraro_);
214
+															akcepti(["kromajx-aldonado fiaskis"]);
215
+														}
216
+														else
217
+														{
218
+															akcepti(["kromajxo sukcese aldonita"]);
219
+														}
220
+													}
221
+												);
222
+											}
223
+										}
224
+									);
225
+								}
226
+								else
227
+								{
228
+									akcepti(["nevalida"]);
229
+								}
230
+							}
231
+						);
232
+					},
233
+					"elmontri_helpon": function () : tipo_plenumanto<Array<string>, Error>
234
+					{
235
+						return (
236
+							(akcepti, rifuzi) =>
237
+							{
238
+								akcepti
239
+								(
240
+									[
241
+										"'!kromajxo listigi': listigi la nomojn de cxiuj kromajxoj kaj elmontri cxu ili estas sxaltitaj",
242
+										"'!kromajxo detaloj [nomo]': elmontri detalojn pri la kromajxo kun la nomo [nomo]",
243
+									]
244
+								);
245
+							}
246
+						);
190 247
 					},
191 248
 				}
192 249
 			)
... ...
@@ -262,10 +319,12 @@ abstract class klaso_kliento
262 319
 							enigo,
263 320
 							function (eligo : klaso_evento_eliga) : void
264 321
 							{
322
+// console.info("--", "eniga fonto estis '" + enigo["fonto"] + "'");
265 323
 								try
266 324
 								{
267
-									if (enigo["fonto"].indexOf("#") < 0)
325
+									if (! enigo["fonto"].startsWith("#"))
268 326
 									{
327
+// console.info("--", "..., kiuj sxajne ne estas kanalo; la eliga celo estis '" + eligo["celo"] + "' kaj estos '" + enigo["sendinto"] + "' nun");
269 328
 										eligo["celo"] = enigo["sendinto"];
270 329
 									}
271 330
 								}
... ...
@@ -60,23 +60,31 @@ abstract class klaso_kromajxo
60 60
 	 */
61 61
 	public constructor
62 62
 	(
63
-		identigilo : string = null,
64
-		nomo : string = null,
65
-		priskribo : string = null,
66
-		uzo : string = null,
67
-		auxtoro : string = null
68
-	)
69
-	{
70
-		if (identigilo == null)
63
+		datumoj :
71 64
 		{
72
-			identigilo = cxeno_generi("kromajxo_");
73
-			console.warn("nenia identigilo donita; la jena estis generita: " + identigilo);
65
+			identigilo ?: string;
66
+			nomo ?: string;
67
+			priskribo ?: string;
68
+			uzo ?: string;
69
+			auxtoro ?: string;
74 70
 		}
75
-		this.identigilo = identigilo;
76
-		this.nomo = nomo;
77
-		this.priskribo = priskribo;
78
-		this.uzo = uzo;
79
-		this.auxtoro = auxtoro;
71
+		= {}
72
+	)
73
+	{
74
+		this.meti_valorojn(datumoj);
75
+	}
76
+	
77
+	
78
+	/**
79
+	 * @author fenris
80
+	 */
81
+	public meti_valorojn(datumoj : Object) : void
82
+	{
83
+		this.identigilo = alporti<string>(datumoj, "identigilo", cxeno_generi("kromajxo_"), 1);
84
+		this.nomo = alporti<string>(datumoj, "nomo", null, 0);
85
+		this.priskribo = alporti<string>(datumoj, "priskribo", null, 0);
86
+		this.uzo = alporti(datumoj, "uzo", null, 0);
87
+		this.auxtoro = alporti<string>(datumoj, "auxtoro", null, 0);
80 88
 	}
81 89
 	
82 90
 	
... ...
@@ -126,6 +134,7 @@ abstract class klaso_kromajxo
126 134
 	
127 135
 	
128 136
 	/**
137
+	 * @todo sekura respondado estus mojosa
129 138
 	 * @author fenris
130 139
 	 */
131 140
 	public enigi(enigo : klaso_evento_eniga, eligi : (eligo : klaso_evento_eliga)=>void) : void
... ...
@@ -136,6 +145,21 @@ abstract class klaso_kromajxo
136 145
 			enigo.kruda_al(),
137 146
 			eligo_kruda => eligi(klaso_evento_eliga_mesagxo.kruda_de(eligo_kruda))
138 147
 		)
148
+		/*
149
+		function respondi_sekure(linioj)
150
+		{
151
+			if (linioj.length <= 5)
152
+			{
153
+				linioj.forEach(linio => respondi({"tipo": "mesagxo", "parametroj": {"celo": enigo_kruda["parametroj"]["fonto"], "enhavo": linio}}));
154
+			}
155
+			else
156
+			{
157
+				var avizo = "Tro multe da rezultoj, ili senditos al vi private";
158
+				respondi({"tipo": "mesagxo", "parametroj": {"celo": enigo_kruda["parametroj"]["fonto"], "alparolato": enigo_kruda["parametroj"]["sendinto"], "enhavo": avizo}});
159
+				linioj.forEach(linio => respondi({"tipo": "mesagxo", "parametroj": {"celo": enigo_kruda["parametroj"]["sendinto"], "enhavo": linio}}));
160
+			}
161
+		}
162
+		 */
139 163
 	}
140 164
 		
141 165
 	
... ...
@@ -56,69 +56,42 @@ class klaso_kromajxo_ekstera extends klaso_kromajxo
56 56
 	 */
57 57
 	public constructor
58 58
 	(
59
-		identigilo : string = null,
60
-		nomo : string = null,
61
-		priskribo : string = null,
62
-		uzo : string = null,
63
-		auxtoro : string = null,
64
-		starigi_ : (finado : (eraro ?: Error)=>void, memoro ?: Object)=>void = (finado => finado(null)),
65
-		reagi_ : (enigo_kruda : Object, eligi : (eligo_kruda : Object)=>void)=>void = null
59
+		datumoj :
60
+		{
61
+			identigilo ?: string;
62
+			nomo ?: string;
63
+			priskribo ?: string;
64
+			uzo ?: string;
65
+			auxtoro ?: string;
66
+			starigi ?: (finado : (eraro ?: Error)=>void, memoro ?: Object)=>void;
67
+			reagi ?: (enigo_kruda : Object, eligi : (eligo_kruda : Object)=>void)=>void;
68
+			vojo ?: string;
69
+		}
70
+		= {}
66 71
 	)
67 72
 	{
68
-		super(identigilo, nomo, priskribo, uzo, auxtoro);
69
-		this.starigi_ = starigi_;
70
-		this.reagi_ = reagi_;
71
-		this.vojo = null;
73
+		super(datumoj);
74
+		this.meti_valorojn_(datumoj, false);
72 75
 		this.memoro = {};
73 76
 	}
74 77
 	
75 78
 	
76 79
 	/**
80
+	 * @override
77 81
 	 * @author fenris
78 82
 	 */
79
-	public resxargi(fino : (eraro : Error)=>void = function (eraro : Error) : void {}) : void
83
+	public meti_valorojn_(datumoj : Object, ankaux_supraj : boolean = false) : void
80 84
 	{
81
-		let that : klaso_kromajxo_ekstera = this;
82
-		klaso_kromajxo_ekstera.sxargi
83
-		(
84
-			this.vojo,
85
-			function (eraro : Error, datumoj : Object) : void
86
-			{
87
-				if (eraro != null)
88
-				{
89
-					fino(eraro);
90
-				}
91
-				else
92
-				{
93
-					that.nomo = datumoj["nomo"];
94
-					that.priskribo = datumoj["priskribo"];
95
-					that.uzo = datumoj["uzo"];
96
-					that.auxtoro = datumoj["auxtoro"];
97
-					that.starigi_ = datumoj["starigi"];
98
-					that.reagi_ = datumoj["reagi"];
99
-					that.starigi
100
-					(
101
-						function (eraro_ : Error) : void
102
-						{
103
-							if (eraro_ != null)
104
-							{
105
-								fino(eraro_);
106
-							}
107
-							else
108
-							{
109
-								fino(null);
110
-							}
111
-						}
112
-					);
113
-				}
114
-			}
115
-		);
85
+		if (ankaux_supraj) this.meti_valorojn(datumoj);
86
+		this.vojo = alporti(datumoj, "vojo", null, 1);
87
+		this.starigi_ = alporti<(finado : (eraro ?: Error)=>void, memoro ?: Object)=>void>(datumoj, "starigi", (finado => finado(null)), 0);
88
+		this.reagi_ = alporti<(enigo_kruda : Object, eligi : (eligo_kruda : Object)=>void)=>void>(datumoj, "reagi", null, 1);
116 89
 	}
117 90
 	
118 91
 	
119 92
 	/**
120
-	 * @author fenris
121 93
 	 * @override
94
+	 * @author fenris
122 95
 	 */
123 96
 	public starigi(finado : (eraro ?: Error)=>void) : void
124 97
 	{
... ...
@@ -127,8 +100,8 @@ class klaso_kromajxo_ekstera extends klaso_kromajxo
127 100
 	
128 101
 	
129 102
 	/**
130
-	 * @author fenris
131 103
 	 * @override
104
+	 * @author fenris
132 105
 	 */
133 106
 	protected reagi(enigo_kruda : Object, eligi : (eligo_kruda : Object)=>void) : void
134 107
 	{
... ...
@@ -168,6 +141,45 @@ class klaso_kromajxo_ekstera extends klaso_kromajxo
168 141
 	}
169 142
 	
170 143
 	
144
+	/**
145
+	 * @author fenris
146
+	 */
147
+	public resxargi(fino : (eraro : Error)=>void = (eraro => {})) : void
148
+	{
149
+		let that : klaso_kromajxo_ekstera = this;
150
+		klaso_kromajxo_ekstera.sxargi
151
+		(
152
+			this.vojo,
153
+			function (eraro : Error, datumoj : Object) : void
154
+			{
155
+				if (eraro != null)
156
+				{
157
+					fino(eraro);
158
+				}
159
+				else
160
+				{
161
+					datumoj["vojo"] = that.vojo;
162
+					that.meti_valorojn_(datumoj, true);
163
+					that.starigi
164
+					(
165
+						function (eraro_ : Error) : void
166
+						{
167
+							if (eraro_ != null)
168
+							{
169
+								fino(eraro_);
170
+							}
171
+							else
172
+							{
173
+								fino(null);
174
+							}
175
+						}
176
+					);
177
+				}
178
+			}
179
+		);
180
+	}
181
+	
182
+	
171 183
 	/**
172 184
 	 * @author fenris
173 185
 	 */
... ...
@@ -184,17 +196,8 @@ class klaso_kromajxo_ekstera extends klaso_kromajxo
184 196
 				}
185 197
 				else
186 198
 				{
187
-					let kromajxo : klaso_kromajxo_ekstera = new klaso_kromajxo_ekstera
188
-					(
189
-						datumoj["identigilo"],
190
-						datumoj["nomo"],
191
-						datumoj["priskribo"],
192
-						datumoj["uzo"],
193
-						datumoj["auxtoro"],
194
-						datumoj["starigi"],
195
-						datumoj["reagi"]
196
-					);
197
-					kromajxo.vojo = vojo;
199
+					datumoj["vojo"] = vojo;
200
+					let kromajxo : klaso_kromajxo_ekstera = new klaso_kromajxo_ekstera(datumoj);
198 201
 					uzado(null, kromajxo);
199 202
 				}
200 203
 			}
... ...
@@ -18,15 +18,16 @@
18 18
        
19 19
 */
20 20
 
21
-type tipo_agoj = {
22
-	anigxi ?: (kanalo : string, modo ?: boolean)=>void;
23
-	malanigxi ?: (kanalo : string)=>void;
24
-	listigi ?: (celo : string)=>void;
25
-	detaloj ?: (identigilo : string, celo : string)=>void;
26
-	sxalti ?: (identigilo : string, aktiva ?: boolean, celo ?: string)=>void;
27
-	resxargi ?: (identigilo : string, celo ?: string)=>void;
28
-	aldoni ?: (nomo : string, celo ?: string)=>void;
29
-	elmontri_helpon ?: (celo ?: string)=>void;
21
+type tipo_agoj =
22
+{
23
+	anigxi ?: (kanalo : string, modo ?: boolean)=>tipo_plenumanto<Array<string>, Error>;
24
+	malanigxi ?: (kanalo : string)=>tipo_plenumanto<Array<string>, Error>;
25
+	listigi ?: ()=>tipo_plenumanto<Array<string>, Error>;
26
+	detaloj ?: (identigilo : string)=>tipo_plenumanto<Array<string>, Error>;
27
+	sxalti ?: (identigilo : string, aktiva ?: boolean)=>tipo_plenumanto<Array<string>, Error>;
28
+	resxargi ?: (identigilo : string)=>tipo_plenumanto<Array<string>, Error>;
29
+	aldoni ?: (nomo : string)=>tipo_plenumanto<Array<string>, Error>;
30
+	elmontri_helpon ?: ()=>tipo_plenumanto<Array<string>, Error>;
30 31
 };
31 32
 
32 33
 
... ...
@@ -57,13 +58,24 @@ class klaso_kromajxo_stirado extends klaso_kromajxo
57 58
 		agoj : tipo_agoj
58 59
 	)
59 60
 	{
60
-		super("stirado", "Stirado", "stiras aliajn kromajxojn kaj elmontras informojn pri ili", null, "fenris");
61
+		super
62
+		(
63
+			{
64
+				"identigilo": "stirado",
65
+				"nomo": "Stirado",
66
+				"priskribo": "stiras aliajn kromajxojn kaj elmontras informojn pri ili",
67
+				"uzo": null,
68
+				"auxtoro": "fenris",
69
+			}
70
+		);
61 71
 		this.permesuloj = permesuloj;
62 72
 		this.agoj = agoj;
63 73
 	}
64 74
 	
65 75
 	
66 76
 	/**
77
+	 * @override
78
+	 * @todo la principo de "listigi" uzendas
67 79
 	 * @author fenris
68 80
 	 */
69 81
 	public reagi(enigo_kruda : Object, eligi : (eligo_kruda : Object)=>void) : void
... ...
@@ -91,6 +103,14 @@ class klaso_kromajxo_stirado extends klaso_kromajxo
91 103
 				);
92 104
 			}
93 105
 		}
106
+		function eligi_(linioj : Array<string>) : void
107
+		{
108
+			linioj.forEach(linio => eligi({"tipo": "mesagxo", "parametroj": {"celo": enigo_kruda["parametroj"]["sendinto"], "enhavo": linio}}));
109
+		}
110
+		function erari(x : Error) : void
111
+		{
112
+			console.warn(x);
113
+		}
94 114
 		switch (enigo_kruda["tipo"])
95 115
 		{
96 116
 			case "mesagxo":
... ...
@@ -99,43 +119,43 @@ class klaso_kromajxo_stirado extends klaso_kromajxo
99 119
 				[
100 120
 					{
101 121
 						"skemoj": [new RegExp("^!\\s*(?:kanalo|k)\\s*(?:anigxi|a|>)\\s*(#\\S+)$")],
102
-						"ago": x => ujumi(() => this.agoj.anigxi(x[0], true)),
122
+						"ago": x => ujumi(() => this.agoj.anigxi(x[0], true)(eligi_, erari)),
103 123
 					},
104 124
 					{
105 125
 						"skemoj": [new RegExp("^!\\s*(?:kanalo|k)\\s*(?:malanigxi|m|<)\\s*(#\\S+)$")],
106
-						"ago": x => ujumi(() => this.agoj.anigxi(x[0], false)),
126
+						"ago": x => ujumi(() => this.agoj.anigxi(x[0], false)(eligi_, erari)),
107 127
 					},
108 128
 					{
109 129
 						"skemoj": [new RegExp("^!\\s*(?:kromaĵo|kromajxo|krom|x)\\s*(?:listigi|l)$")/*, new RegExp("$\|")*/],
110
-						"ago": x => this.agoj.listigi(enigo_kruda["parametroj"]["fonto"]),
130
+						"ago": x => ujumi(() => this.agoj.listigi()(eligi_, erari)),
111 131
 					},
112 132
 					{
113 133
 						"skemoj": [new RegExp("^!\\s*(?:kromaĵo|kromajxo|krom|x)\\s*(?:detaloj|d|\\?)\\s*(\\w+)$")/*, new RegExp("$#(\\w+)")*/],
114
-						"ago": x => this.agoj.detaloj(x[0], enigo_kruda["parametroj"]["fonto"]),
115
-					},
116
-					{
117
-						"skemoj": [new RegExp("^!\\s*(?:kromaĵo|kromajxo|krom|x)\\s*(?:sxalti|s|toggle|t|%)\\s*(\\w+)$")/*, new RegExp("$~(\\w+)")*/],
118
-						"ago": x => ujumi(() => this.agoj.sxalti(x[0], undefined, enigo_kruda["parametroj"]["fonto"])),
134
+						"ago": x => this.agoj.detaloj(x[0])(eligi_, erari),
119 135
 					},
120 136
 					{
121 137
 						"skemoj": [new RegExp("^!\\s*(?:kromaĵo|kromajxo|krom|x)\\s*(?:aktivigi|a|\\+)\\s*(\\w+)$")/*, new RegExp("$\+(\\w+)")*/],
122
-						"ago": x => ujumi(() => this.agoj.sxalti(x[0], true, enigo_kruda["parametroj"]["fonto"])),
138
+						"ago": x => ujumi(() => this.agoj.sxalti(x[0], true)(eligi_, erari)),
123 139
 					},
124 140
 					{
125 141
 						"skemoj": [new RegExp("^!\\s*(?:kromaĵo|kromajxo|krom|x)\\s*(?:malaktivigi|m|-)\\s*(\\w+)$")/*, new RegExp("$-(\\w+)")*/],
126
-						"ago": x => ujumi(() => this.agoj.sxalti(x[0], false, enigo_kruda["parametroj"]["fonto"])),
142
+						"ago": x => ujumi(() => this.agoj.sxalti(x[0], false)(eligi_, erari)),
143
+					},
144
+					{
145
+						"skemoj": [new RegExp("^!\\s*(?:kromaĵo|kromajxo|krom|x)\\s*(?:sxalti|s|toggle|t|%)\\s*(\\w+)$")/*, new RegExp("$~(\\w+)")*/],
146
+						"ago": x => ujumi(() => this.agoj.sxalti(x[0])(eligi_, erari)),
127 147
 					},
128 148
 					{
129 149
 						"skemoj": [new RegExp("^!\\s*(?:kromaĵo|kromajxo|krom|x)\\s*(?:resxargi|r|\\$)\\s*(\\w+)$")/*, new RegExp("$#(\\w+)")*/],
130
-						"ago": x => ujumi(() => this.agoj.resxargi(x[0], enigo_kruda["parametroj"]["fonto"])),
150
+						"ago": x => ujumi(() => this.agoj.resxargi(x[0])(eligi_, erari)),
131 151
 					},
132 152
 					{
133
-						"skemoj": [new RegExp("^!\\s*(?:kromaĵo|kromajxo|krom|x)\\s*(?:aldoni|\\*)\\s*(\\w+)$")/*, new RegExp("$\*(\\w+)")*/],
134
-						"ago": x => ujumi(() => that.agoj.aldoni(x[0], enigo_kruda["parametroj"]["fonto"])),
153
+						"skemoj": [new RegExp("^!\\s*(?:kromaĵo|kromajxo|krom|x)\\s*(?:aldoni|\\*)\\s*(\\S+)$")/*, new RegExp("$\*(\\w+)")*/],
154
+						"ago": x => ujumi(() => this.agoj.aldoni(x[0])(eligi_, erari)),
135 155
 					},
136 156
 					{
137 157
 						"skemoj": [new RegExp("^!\\s*(?:helpo|help|h)$")],
138
-						"ago": x => this.agoj.elmontri_helpon(enigo_kruda["parametroj"]["fonto"]),
158
+						"ago": x => this.agoj.elmontri_helpon()(eligi_, erari),
139 159
 					},
140 160
 				].forEach
141 161
 				(
... ...
@@ -22,7 +22,7 @@ defauxlto: kompili
22 22
 
23 23
 lancxi: kreajxo/kvasir.js
24 24
 	@ echo ">> lancxado ..."
25
-	@ nodejs kreajxo/kvasir.js
25
+	@ node kreajxo/kvasir.js
26 26
 .PHONY: lancxi
27 27
 
28 28
 kompili: kreajxo/kvasir.js