@rugal.tu/vuemodel3 1.5.1 → 1.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1208,6 +1208,7 @@
1208
1208
  Model.AddStore(SetOption.Target);
1209
1209
  }
1210
1210
  }
1211
+ SetOption.FuncAction = true;
1211
1212
  this.$AddCommand(DomName, 'v-text', SetOption);
1212
1213
  return this;
1213
1214
  }
@@ -1240,16 +1241,19 @@
1240
1241
  let Target = Model.ToJoin(SetOption.Target);
1241
1242
  if (!/\b(in|of)\b/.test(Target))
1242
1243
  SetOption.TargetHead ??= '(item, index) in ';
1244
+ SetOption.FuncAction = true;
1243
1245
  this.$AddCommand(DomName, 'v-for', SetOption);
1244
1246
  return this;
1245
1247
  }
1246
1248
  AddV_If(DomName, Option) {
1247
1249
  let SetOption = this.$ConvertCommandOption(DomName, Option);
1250
+ SetOption.FuncAction = true;
1248
1251
  this.$AddCommand(DomName, 'v-if', SetOption);
1249
1252
  return this;
1250
1253
  }
1251
1254
  AddV_ElseIf(DomName, Option) {
1252
1255
  let SetOption = this.$ConvertCommandOption(DomName, Option);
1256
+ SetOption.FuncAction = true;
1253
1257
  this.$AddCommand(DomName, 'v-else-if', SetOption);
1254
1258
  return this;
1255
1259
  }
@@ -1261,22 +1265,18 @@
1261
1265
  }
1262
1266
  AddV_Show(DomName, Option) {
1263
1267
  let SetOption = this.$ConvertCommandOption(DomName, Option);
1268
+ SetOption.FuncAction = true;
1264
1269
  this.$AddCommand(DomName, 'v-show', SetOption);
1265
1270
  return this;
1266
1271
  }
1267
1272
  AddV_Bind(DomName, BindKey, Option, Args) {
1268
- let SetOption = this.$ConvertCommandOption(DomName, Option);
1269
- if (Args)
1270
- SetOption.FuncArgs = Args;
1273
+ let SetOption = this.$ConvertCommandOption(DomName, Option, Args);
1271
1274
  SetOption.CommandKey = BindKey;
1272
1275
  this.$AddCommand(DomName, 'v-bind', SetOption);
1273
1276
  return this;
1274
1277
  }
1275
1278
  AddV_On(DomName, EventName, Option, Args) {
1276
- let SetOption = this.$ConvertCommandOption(DomName, Option);
1277
- if (Args)
1278
- SetOption.FuncArgs = Args;
1279
- SetOption.FuncAction = false;
1279
+ let SetOption = this.$ConvertCommandOption(DomName, Option, Args);
1280
1280
  SetOption.CommandKey = EventName;
1281
1281
  this.$AddCommand(DomName, `v-on`, SetOption);
1282
1282
  return this;
@@ -1309,9 +1309,7 @@
1309
1309
  return this;
1310
1310
  }
1311
1311
  AddV_Click(DomName, Option, Args) {
1312
- let SetOption = this.$ConvertCommandOption(DomName, Option);
1313
- if (Args)
1314
- SetOption.FuncArgs = Args;
1312
+ let SetOption = this.$ConvertCommandOption(DomName, Option, Args);
1315
1313
  this.AddV_On(DomName, 'click', SetOption);
1316
1314
  return this;
1317
1315
  }
@@ -1368,6 +1366,10 @@
1368
1366
  Model.$Error(`${Info.Command} command is not allowed, path: ${this.ToJoin(Info.DomPaths)}`);
1369
1367
  continue;
1370
1368
  }
1369
+ if (Info.StoreValue == '' || Info.StoreValue == null && ActionSet.AcceptNull != true)
1370
+ continue;
1371
+ if (Info.StoreValue == '.' && ActionSet.AcceptSelf != true)
1372
+ continue;
1371
1373
  let NeedQuery = false;
1372
1374
  let QueryOption = {
1373
1375
  Mode: 'Multi',
@@ -1381,11 +1383,12 @@
1381
1383
  QueryOption.Mode = 'DeepMulti';
1382
1384
  }
1383
1385
  if (NeedQuery) {
1384
- let QueryNodes = exports.Queryer.Query(Info.DomPaths, QueryOption);
1386
+ let QueryNodes = [RootNode];
1387
+ if (Info.DomPaths.length > 0)
1388
+ QueryNodes = exports.Queryer.Query(Info.DomPaths, QueryOption);
1385
1389
  Info.Nodes = QueryNodes;
1386
1390
  }
1387
1391
  let TargetDom = NeedQuery ? Info.Nodes : Info.DomPaths;
1388
- let TargetPath = [];
1389
1392
  let TargetValue;
1390
1393
  if (typeof Info.StoreValue === 'function') {
1391
1394
  TargetValue = {
@@ -1395,36 +1398,28 @@
1395
1398
  }
1396
1399
  else {
1397
1400
  if (typeof Info.StoreValue === 'string' || Array.isArray(Info.StoreValue)) {
1398
- Info.StoreValue = Model.ToJoin(Info.StoreValue);
1399
- if (Option?.UseTreePath)
1400
- TargetPath = [...Info.TreePaths];
1401
- if (Option?.UseDomStore || Info.StoreValue == '.')
1402
- TargetPath.push(Info.DomName);
1401
+ if (Info.StoreValue == '.')
1402
+ TargetValue = this.Paths(Info.TreePaths, Info.DomName);
1403
1403
  else if (Info.StoreValue != null && Info.StoreValue != '')
1404
- TargetPath = this.Paths(TargetPath, Info.StoreValue);
1405
- TargetValue = TargetPath.length > 0 ? TargetPath : Info.StoreValue;
1404
+ TargetValue = Info.StoreValue;
1406
1405
  }
1407
1406
  else {
1408
- let NewStoreValue = {
1407
+ TargetValue = {
1409
1408
  Target: Info.StoreValue?.TargetFunc,
1410
1409
  FuncArgs: Info.StoreValue?.Args,
1411
1410
  };
1412
- TargetValue = NewStoreValue;
1413
1411
  if (Info.StoreValue?.Args != null) {
1414
- let Args = Model.ToJoin(Info.StoreValue.Args);
1415
- if (Info.Args == null || Info.CommandKey == '')
1416
- Info.Args = Args;
1412
+ let TargetArgs = Info.StoreValue.Args;
1413
+ if (Info.Args == null)
1414
+ Info.Args = Model.ToJoin(TargetArgs, ', ');
1417
1415
  else
1418
- Info.Args = Model.ToJoin([Info.CommandKey, Args], ', ');
1416
+ Info.Args = Model.ToJoin([Info.Args, TargetArgs], ', ');
1419
1417
  }
1420
1418
  }
1421
1419
  }
1422
- if (TargetValue == '')
1423
- continue;
1424
- ActionSet(Info, {
1425
- TargetDom: TargetDom,
1426
- TargetPath: TargetPath,
1427
- TargetValue: TargetValue,
1420
+ ActionSet.Execute(Info, {
1421
+ TargetDom,
1422
+ TargetValue,
1428
1423
  });
1429
1424
  }
1430
1425
  return this;
@@ -1512,71 +1507,118 @@
1512
1507
  }
1513
1508
  $SetupCommandMap() {
1514
1509
  this.$CommandMap = {
1515
- 'v-text': (Info, Option) => {
1516
- Model.AddV_Text(Option.TargetDom, Option.TargetValue);
1510
+ 'v-text': {
1511
+ Execute: (Info, Option) => {
1512
+ Model.AddV_Text(Option.TargetDom, Option.TargetValue);
1513
+ },
1514
+ AcceptSelf: true,
1517
1515
  },
1518
- 'v-model': (Info, Option) => {
1519
- if (typeof (Info.StoreValue) == 'function') {
1520
- Model.$Error(`v-model command value must be a string or string[], path: ${this.ToJoin(Info.DomPaths)}`);
1521
- return;
1522
- }
1523
- Model.AddV_Model(Option.TargetDom, Option.TargetPath, {
1524
- ModelValue: Info.CommandKey,
1525
- });
1516
+ 'v-model': {
1517
+ Execute: (Info, Option) => {
1518
+ if (typeof (Option.TargetValue) == 'function') {
1519
+ Model.$Error(`v-model command value must be a string or string[], path: ${this.ToJoin(Info.DomPaths)}`);
1520
+ return;
1521
+ }
1522
+ Model.AddV_Model(Option.TargetDom, Option.TargetValue, {
1523
+ ModelValue: Info.CommandKey,
1524
+ });
1525
+ },
1526
+ AcceptSelf: true,
1526
1527
  },
1527
- 'v-for': (Info, Option) => {
1528
- Model.AddV_For(Option.TargetDom, Option.TargetValue, Info.ForKey);
1528
+ 'v-for': {
1529
+ Execute: (Info, Option) => {
1530
+ Model.AddV_For(Option.TargetDom, Option.TargetValue, Info.ForKey);
1531
+ },
1532
+ AcceptSelf: true,
1529
1533
  },
1530
- 'v-if': (Info, Option) => {
1531
- Model.AddV_If(Option.TargetDom, Option.TargetValue);
1534
+ 'v-show': {
1535
+ Execute: (Info, Option) => {
1536
+ Model.AddV_Show(Option.TargetDom, Option.TargetValue);
1537
+ },
1538
+ AcceptSelf: true,
1532
1539
  },
1533
- 'v-else-if': (Info, Option) => {
1534
- Model.AddV_ElseIf(Option.TargetDom, Option.TargetValue);
1540
+ 'v-if': {
1541
+ Execute: (Info, Option) => {
1542
+ Model.AddV_If(Option.TargetDom, Option.TargetValue);
1543
+ },
1544
+ AcceptSelf: true,
1535
1545
  },
1536
- 'v-else': (Info, Option) => {
1537
- Model.AddV_Else(Option.TargetDom);
1546
+ 'v-else-if': {
1547
+ Execute: (Info, Option) => {
1548
+ Model.AddV_ElseIf(Option.TargetDom, Option.TargetValue);
1549
+ },
1550
+ AcceptSelf: true,
1538
1551
  },
1539
- 'v-show': (Info, Option) => {
1540
- Model.AddV_Show(Option.TargetDom, Option.TargetValue);
1552
+ 'v-else': {
1553
+ Execute: (Info, Option) => {
1554
+ Model.AddV_Else(Option.TargetDom);
1555
+ },
1556
+ AcceptNull: true,
1541
1557
  },
1542
- 'v-bind': (Info, Option) => {
1543
- if (!Option.TargetValue)
1544
- return;
1545
- Model.AddV_Bind(Option.TargetDom, Info.CommandKey, Option.TargetValue, Info.Args);
1558
+ 'v-bind': {
1559
+ Execute: (Info, Option) => {
1560
+ Model.AddV_Bind(Option.TargetDom, Info.CommandKey, Option.TargetValue, Info.Args);
1561
+ },
1546
1562
  },
1547
- 'v-on': (Info, Option) => {
1548
- Model.AddV_On(Option.TargetDom, Info.CommandKey, Option.TargetValue, Info.Args);
1563
+ 'v-on': {
1564
+ Execute: (Info, Option) => {
1565
+ Model.AddV_On(Option.TargetDom, Info.CommandKey, Option.TargetValue, Info.Args);
1566
+ },
1549
1567
  },
1550
- 'v-slot': (Info, Option) => {
1551
- Model.AddV_Slot(Option.TargetDom, Info.CommandKey, Option.TargetValue);
1568
+ 'v-slot': {
1569
+ Execute: (Info, Option) => {
1570
+ Model.AddV_Slot(Option.TargetDom, Info.CommandKey, Option.TargetValue);
1571
+ },
1552
1572
  },
1553
- 'v-on-mounted': (Info, Option) => {
1554
- Model.AddV_OnMounted(Option.TargetDom, Option.TargetValue, Info.Args);
1573
+ 'v-on-mounted': {
1574
+ Execute: (Info, Option) => {
1575
+ Model.AddV_OnMounted(Option.TargetDom, Option.TargetValue, Info.Args);
1576
+ },
1555
1577
  },
1556
- 'v-on-unmounted': (Info, Option) => {
1557
- Model.AddV_OnUnMounted(Option.TargetDom, Option.TargetValue, Info.Args);
1578
+ 'v-on-unmounted': {
1579
+ Execute: (Info, Option) => {
1580
+ Model.AddV_OnUnMounted(Option.TargetDom, Option.TargetValue, Info.Args);
1581
+ },
1558
1582
  },
1559
- 'v-on-ready': (Info, Option) => {
1560
- Model.AddV_OnReady(Option.TargetDom, Option.TargetValue, Info.Args);
1583
+ 'v-on-ready': {
1584
+ Execute: (Info, Option) => {
1585
+ Model.AddV_OnReady(Option.TargetDom, Option.TargetValue, Info.Args);
1586
+ },
1561
1587
  },
1562
- 'watch': (Info, Option) => {
1563
- if (typeof (Info.StoreValue) != 'function') {
1564
- Model.$Error(`watch command value must be a function, path: ${this.ToJoin(Info.DomPaths)}`);
1565
- return;
1566
- }
1567
- Model.AddV_Watch(Info.DomPaths, Info.StoreValue);
1588
+ 'watch': {
1589
+ Execute: (Info, Option) => {
1590
+ let WatchPaths = [Info.DomPaths];
1591
+ if (Info.CommandKey)
1592
+ WatchPaths.push(Info.CommandKey.split(':'));
1593
+ WatchPaths = Model.Paths(WatchPaths);
1594
+ if (typeof (Info.StoreValue) === 'function')
1595
+ Model.AddV_Watch(WatchPaths, Info.StoreValue);
1596
+ else {
1597
+ let Target = Info.StoreValue;
1598
+ Model.AddV_Watch(WatchPaths, Target?.CallBack, Target?.Option);
1599
+ }
1600
+ },
1568
1601
  },
1569
- 'func': (Info, Option) => {
1570
- if (typeof (Info.StoreValue) != 'function') {
1571
- Model.$Error(`func command value must be a function, path: ${this.ToJoin(Info.DomPaths)}`);
1572
- return;
1573
- }
1574
- Model.AddV_Function(Model.Paths(...Info.DomPaths, Info.CommandKey ?? 'func'), Info.StoreValue);
1602
+ 'func': {
1603
+ Execute: (Info, Option) => {
1604
+ if (typeof (Info.StoreValue) != 'function') {
1605
+ Model.$Error(`func command value must be a function, path: ${this.ToJoin(Info.DomPaths)}`);
1606
+ return;
1607
+ }
1608
+ Model.AddV_Function(Model.Paths(...Info.DomPaths, Info.CommandKey ?? 'func'), Info.StoreValue);
1609
+ },
1575
1610
  },
1576
- 'using': (Info, Option) => {
1577
- if (typeof (Info.StoreValue) === 'function') {
1578
- Info.StoreValue(Info.DomPaths, Info.Nodes);
1579
- }
1611
+ 'using': {
1612
+ Execute: (Info, Option) => {
1613
+ if (typeof (Info.StoreValue) === 'function') {
1614
+ Info.StoreValue(Info.DomPaths, Info.Nodes);
1615
+ }
1616
+ },
1617
+ },
1618
+ 'store': {
1619
+ Execute: (Info, Option) => {
1620
+ Model.UpdateStore(Info.DomPaths, Info.StoreValue);
1621
+ },
1580
1622
  }
1581
1623
  };
1582
1624
  }
@@ -1655,20 +1697,33 @@
1655
1697
  SetProperty[PropertyKey] = OriginalValue;
1656
1698
  return SetProperty;
1657
1699
  }
1658
- $ConvertCommandOption(DomName, Option) {
1659
- if (Option == null) {
1700
+ $ConvertCommandOption(DomName, Option, Args) {
1701
+ let Result;
1702
+ if (Option == null || Option == '.') {
1660
1703
  if (this.IsPathType(DomName))
1661
- return { Target: DomName, FuncAction: false };
1704
+ Result = {
1705
+ Target: DomName
1706
+ };
1662
1707
  else {
1663
1708
  let Nodes = DomName;
1664
1709
  let NodeNames = Nodes.map(Item => Item.DomName);
1665
- return { Target: NodeNames, FuncAction: false };
1710
+ Result = {
1711
+ Target: NodeNames
1712
+ };
1666
1713
  }
1667
1714
  }
1668
- if (typeof Option == 'string' || typeof Option == 'function' || Array.isArray(Option))
1669
- return { Target: Option, FuncAction: true };
1670
- Option.FuncAction ??= true;
1671
- return Option;
1715
+ else if (typeof Option == 'string' || typeof Option == 'function' || Array.isArray(Option))
1716
+ Result = {
1717
+ Target: Option
1718
+ };
1719
+ else
1720
+ Result = Option;
1721
+ if (Args)
1722
+ Result.FuncArgs = Args;
1723
+ Result.FuncAction ??= false;
1724
+ if (Result.FuncArgs)
1725
+ Result.FuncAction = true;
1726
+ return Result;
1672
1727
  }
1673
1728
  $AddCommand(DomName, Command, Option) {
1674
1729
  if (DomName == null)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rugal.tu/vuemodel3",
3
- "version": "1.5.1",
3
+ "version": "1.5.3",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
package/src/VueModel.d.ts CHANGED
@@ -290,38 +290,44 @@ type CommandOption = {
290
290
  FuncAction?: boolean;
291
291
  FuncArgs?: PathType;
292
292
  };
293
+ type TreeWatchOption = {
294
+ CallBack: WatchCallback;
295
+ Option?: WatchOptions;
296
+ };
293
297
  type TreeSetType = {
294
- 'watch'?: '' | WatchCallback;
295
- 'using'?: '' | UsingFunctionType;
298
+ 'using'?: UsingFunctionType;
299
+ 'store'?: any;
300
+ [DomName: `:${string}`]: UsingFunctionType | TreeSetType;
301
+ 'watch'?: WatchCallback | TreeWatchOption;
302
+ [WatchTargetCmd: `watch:${string}`]: WatchCallback | TreeWatchOption;
296
303
  'func'?: Function;
297
- [FuncCmd: `func:${string}`]: Function;
298
- [DomName: `:${string}`]: '' | UsingFunctionType | TreeSetType;
299
- 'v-model'?: '' | PathType;
300
- [VModelCmd: `v-model:${string}`]: '' | PathType;
301
- 'v-slot'?: '' | PathType | Function | TreeSetFuncOption;
302
- [VSlotArgsCmd: `v-slot(${string})`]: Function | TreeSetFuncOption;
303
- [VSlotKeyCmd: `v-slot:${string}`]: '' | PathType | Function | TreeSetFuncOption;
304
- [VSlotKeyArgsCmd: `v-slot:${string}(${string})`]: Function | TreeSetFuncOption;
305
- 'v-text'?: '' | PathType | Function | TreeSetFuncOption;
304
+ [FuncNameCmd: `func:${string}`]: Function;
305
+ 'v-text'?: '.' | PathType | Function | TreeSetFuncOption;
306
306
  [VForTextCmd: `v-text(${string})`]: Function | TreeSetFuncOption;
307
- 'v-for'?: '' | PathType | Function | TreeSetFuncOption;
307
+ 'v-model'?: '.' | PathType;
308
+ [VModelArgsCmd: `v-model:${string}`]: '.' | PathType;
309
+ 'v-for'?: '.' | PathType | Function | TreeSetFuncOption;
308
310
  [VForKeyCmd: `v-for<${string}>`]: PathType | Function | TreeSetFuncOption;
309
311
  [VForKeyArgsCmd: `v-for<${string}>(${string})`]: Function | TreeSetFuncOption;
310
312
  [VForArgsCmd: `v-for(${string})`]: Function | TreeSetFuncOption;
311
313
  [VForArgsKeyCmd: `v-for(${string})<${string}>`]: Function | TreeSetFuncOption;
312
- 'v-show'?: '' | PathType | Function | TreeSetFuncOption;
314
+ 'v-show'?: '.' | PathType | Function | TreeSetFuncOption;
313
315
  [VShowArgsCmd: `v-show(${string})`]: Function | TreeSetFuncOption;
314
- 'v-if'?: '' | PathType | Function | TreeSetFuncOption;
315
- 'v-else-if'?: '' | PathType | Function | TreeSetFuncOption;
316
- 'v-else'?: '' | null;
316
+ 'v-if'?: '.' | PathType | Function | TreeSetFuncOption;
317
+ 'v-else-if'?: '.' | PathType | Function | TreeSetFuncOption;
318
+ 'v-else'?: null;
317
319
  [VIfArgsCmd: `v-if(${string})`]: Function | TreeSetFuncOption;
318
320
  [VElseIfArgsCmd: `v-else-if(${string})`]: Function | TreeSetFuncOption;
319
- 'v-bind'?: '' | PathType | Function | TreeSetFuncOption;
320
- [VBindCmd: `v-bind:${string}`]: '' | PathType | Function | TreeSetFuncOption;
321
+ 'v-slot'?: PathType | Function | TreeSetFuncOption;
322
+ [VSlotArgsCmd: `v-slot(${string})`]: Function | TreeSetFuncOption;
323
+ [VSlotKeyCmd: `v-slot:${string}`]: PathType | Function | TreeSetFuncOption;
324
+ [VSlotKeyArgsCmd: `v-slot:${string}(${string})`]: Function | TreeSetFuncOption;
325
+ 'v-bind'?: PathType | Function | TreeSetFuncOption;
326
+ [VBindCmd: `v-bind:${string}`]: PathType | Function | TreeSetFuncOption;
321
327
  [VBindArgsCmd: `v-bind:${string}(${string})`]: Function | TreeSetFuncOption;
322
- 'v-on:change'?: '' | PathType | Function | TreeSetFuncOption;
323
- 'v-on:click'?: '' | PathType | Function | TreeSetFuncOption;
324
- [VOnCmd: `v-on:${string}`]: '' | PathType | Function | TreeSetFuncOption;
328
+ 'v-on:change'?: PathType | Function | TreeSetFuncOption;
329
+ 'v-on:click'?: PathType | Function | TreeSetFuncOption;
330
+ [VOnCmd: `v-on:${string}`]: PathType | Function | TreeSetFuncOption;
325
331
  [VOnArgsCmd: `v-on:${string}(${string})`]: Function | TreeSetFuncOption;
326
332
  'v-on-mounted'?: PathType | Function | TreeSetFuncOption;
327
333
  [VOnMountedArgsCmd: `v-on-mounted(${string})`]: Function | TreeSetFuncOption;
@@ -349,7 +355,6 @@ type TreeSetInfo = {
349
355
  type TreeSetInfoOption = {
350
356
  TargetDom: PathType | QueryNode[];
351
357
  TargetValue: PathType | Function | CommandOption;
352
- TargetPath: PathType;
353
358
  };
354
359
  type AddV_ModelOption = {
355
360
  ModelValue?: string;
@@ -363,12 +368,14 @@ type AddV_FilePickerOption = string | {
363
368
  };
364
369
  type AddV_TreeOption = {
365
370
  UseDeepQuery?: boolean;
366
- UseTreePath?: boolean;
367
- UseDomStore?: boolean;
368
371
  };
369
372
  export declare class VueCommand extends VueStore {
370
373
  protected $IsInited: boolean;
371
- protected $CommandMap: Record<string, (Info: TreeSetInfo, Option: TreeSetInfoOption) => void>;
374
+ protected $CommandMap: Record<string, {
375
+ Execute: (Info: TreeSetInfo, Option: TreeSetInfoOption) => void;
376
+ AcceptNull?: boolean;
377
+ AcceptSelf?: boolean;
378
+ }>;
372
379
  $QueryDomName: string;
373
380
  constructor();
374
381
  WithQueryDomName(QueryDomName: string): this;
@@ -394,7 +401,7 @@ export declare class VueCommand extends VueStore {
394
401
  AddV_Property(PropertyPath: PathType, Option: AddPropertyType): this;
395
402
  AddV_PropertyFrom(SourceStore: any, PropertyPath: PathType, Option: AddPropertyType): this;
396
403
  protected $BaseAddProperty(PropertyStore: StoreType, PropertyKey: string, Option: AddPropertyType): StoreType;
397
- protected $ConvertCommandOption(DomName: PathType | QueryNode[], Option?: AddCommandOption): CommandOption;
404
+ protected $ConvertCommandOption(DomName: PathType | QueryNode[], Option?: AddCommandOption, Args?: string): CommandOption;
398
405
  protected $AddCommand(DomName: PathType | QueryNode[], Command: string, Option: CommandOption): void;
399
406
  protected $SetAttribute(Dom: HTMLElement, AttrName: string, AttrValue: string): void;
400
407
  protected $RandomFuncName(BaseFuncName: string): string;