linny-r 1.9.2 → 2.0.1

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.
Files changed (37) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +4 -4
  3. package/package.json +1 -1
  4. package/server.js +1 -1
  5. package/static/images/eq-negated.png +0 -0
  6. package/static/images/power.png +0 -0
  7. package/static/images/tex.png +0 -0
  8. package/static/index.html +225 -10
  9. package/static/linny-r.css +458 -8
  10. package/static/scripts/linny-r-ctrl.js +6 -4
  11. package/static/scripts/linny-r-gui-actor-manager.js +1 -1
  12. package/static/scripts/linny-r-gui-chart-manager.js +20 -13
  13. package/static/scripts/linny-r-gui-constraint-editor.js +410 -50
  14. package/static/scripts/linny-r-gui-controller.js +127 -12
  15. package/static/scripts/linny-r-gui-dataset-manager.js +28 -20
  16. package/static/scripts/linny-r-gui-documentation-manager.js +11 -3
  17. package/static/scripts/linny-r-gui-equation-manager.js +1 -1
  18. package/static/scripts/linny-r-gui-experiment-manager.js +1 -1
  19. package/static/scripts/linny-r-gui-expression-editor.js +7 -1
  20. package/static/scripts/linny-r-gui-file-manager.js +31 -13
  21. package/static/scripts/linny-r-gui-finder.js +1 -1
  22. package/static/scripts/linny-r-gui-model-autosaver.js +1 -1
  23. package/static/scripts/linny-r-gui-monitor.js +1 -1
  24. package/static/scripts/linny-r-gui-paper.js +108 -25
  25. package/static/scripts/linny-r-gui-power-grid-manager.js +529 -0
  26. package/static/scripts/linny-r-gui-receiver.js +1 -1
  27. package/static/scripts/linny-r-gui-repository-browser.js +1 -1
  28. package/static/scripts/linny-r-gui-scale-unit-manager.js +1 -1
  29. package/static/scripts/linny-r-gui-sensitivity-analysis.js +1 -1
  30. package/static/scripts/linny-r-gui-tex-manager.js +110 -0
  31. package/static/scripts/linny-r-gui-undo-redo.js +1 -1
  32. package/static/scripts/linny-r-milp.js +1 -1
  33. package/static/scripts/linny-r-model.js +1016 -155
  34. package/static/scripts/linny-r-utils.js +3 -3
  35. package/static/scripts/linny-r-vm.js +714 -248
  36. package/static/show-diff.html +1 -1
  37. package/static/show-png.html +1 -1
@@ -10,7 +10,7 @@ file that implements the graphical user interface for Linny-R.
10
10
  */
11
11
 
12
12
  /*
13
- Copyright (c) 2017-2023 Delft University of Technology
13
+ Copyright (c) 2017-2024 Delft University of Technology
14
14
 
15
15
  Permission is hereby granted, free of charge, to any person obtaining a copy
16
16
  of this software and associated documentation files (the "Software"), to deal
@@ -947,6 +947,157 @@ img.inline-cancel-btn {
947
947
  border-top: 1px solid Silver;
948
948
  }
949
949
 
950
+ /* styles for the NEW POWER GRID dialog */
951
+ #new-power-grid-modal {
952
+ z-index: 115; /* on top of the POWER GRIDS modal */
953
+ }
954
+
955
+ #new-power-grid-dlg {
956
+ width: 225px;
957
+ height: min-content;
958
+ max-height: 450px;
959
+ }
960
+
961
+ #new-power-grid-name {
962
+ width: 170px;
963
+ }
964
+
965
+ #new-power-grid-voltage {
966
+ width: 45px;
967
+ }
968
+
969
+ #new-power-grid-color {
970
+ display: inline-block;
971
+ width: 24px;
972
+ height: 22px;
973
+ }
974
+
975
+ #new-power-grid-unit {
976
+ font-size: 12px;
977
+ margin-left: 3px;
978
+ }
979
+
980
+ #new-power-grid-losses {
981
+ font-size: 12px;
982
+ }
983
+
984
+ /* styles for the POWER GRIDS dialog */
985
+ #power-grids-modal {
986
+ z-index: 110; /* on top of the SETTINGS dialog */
987
+ }
988
+
989
+ #power-grids-dlg {
990
+ width: 280px;
991
+ height: min-content;
992
+ max-height: 250px;
993
+ }
994
+
995
+ #power-grids-buttons > img.btn {
996
+ height: 20px;
997
+ width: 20px;
998
+ }
999
+
1000
+ #power-grids-scroll-area {
1001
+ margin: 2px;
1002
+ width: calc(100% - 4px);
1003
+ max-height: 250px;
1004
+ overflow-y: auto;
1005
+ border-top: 1px solid Silver;
1006
+ }
1007
+
1008
+ div.menu-plate,
1009
+ div.no-grid-plate,
1010
+ div.grid-kV-plate {
1011
+ display: inline-block;
1012
+ height: 17px;
1013
+ min-width: 30px;
1014
+ color: White;
1015
+ text-shadow: 1px 1px 1px Black;
1016
+ background-color: #0000ff;
1017
+ font-size: 9px;
1018
+ text-align: center;
1019
+ padding: 1px;
1020
+ padding-bottom: 0px;
1021
+ border-radius: 3px;
1022
+ margin-right: 3px;
1023
+ }
1024
+
1025
+ div.no-grid-plate {
1026
+ color: Gray;
1027
+ border: 1px solid Gray !important;
1028
+ box-shadow: Gray 0px 0px 3px 1px inset;
1029
+ margin: 1px !important;
1030
+ padding: 0px !important;
1031
+ text-shadow: none;
1032
+ background-color: #f4f0f2 !important;
1033
+ font-size: 10px;
1034
+ height: 16px;
1035
+ max-height: 17px !important;
1036
+ }
1037
+
1038
+ div.menu-plate {
1039
+ width: calc(100% - 4px);
1040
+ margin: 1px;
1041
+ border: 1px solid silver;
1042
+ padding-top: 3px;
1043
+ max-height: 14px;
1044
+ }
1045
+
1046
+ div.menu-plate:hover {
1047
+ border: 1px solid black;
1048
+ box-shadow: black 0px 0px 1px 2px;
1049
+ }
1050
+
1051
+ div.grid-watts {
1052
+ display: inline-block;
1053
+ vertical-align: middle;
1054
+ height: 15px;
1055
+ min-width: 18px;
1056
+ color: gray;
1057
+ border: 1px solid #b8b8b8;
1058
+ background-color: #f0f0f0;
1059
+ font-size: 9px;
1060
+ text-align: center;
1061
+ padding: 1px;
1062
+ padding-bottom: 0px;
1063
+ margin-right: 3px;
1064
+ }
1065
+
1066
+ div.grid-kcl-symbol {
1067
+ display: inline-block;
1068
+ height: 17px;
1069
+ font-size: 19px;
1070
+ color: #0000a0;
1071
+ text-shadow: 0px 0px 2px #00c0f0;
1072
+ margin-right: 3px;
1073
+ vertical-align: top;
1074
+ }
1075
+
1076
+ div.grid-loss-symbol {
1077
+ background-color: #202020;
1078
+ color: white;
1079
+ display: inline-block;
1080
+ vertical-align: middle;
1081
+ font-size: 12px;
1082
+ padding-left: 2px;
1083
+ padding-right: 2px;
1084
+ border-radius: 3px;
1085
+ margin-right: 3px;
1086
+ }
1087
+
1088
+ table.power-flow th {
1089
+ text-align: left;
1090
+ }
1091
+
1092
+ table.power-flow td:not(:first-child) {
1093
+ text-align: right;
1094
+ }
1095
+
1096
+ table.power-flow th:not(:first-child) {
1097
+ text-align: right;
1098
+ min-width: 40px;
1099
+ }
1100
+
950
1101
  /* styles for the MODEL SETTINGS dialog */
951
1102
  #settings-dlg {
952
1103
  width: min-content;
@@ -967,6 +1118,17 @@ img.inline-cancel-btn {
967
1118
  filter: brightness(200%);
968
1119
  }
969
1120
 
1121
+ #settings-power-btn {
1122
+ margin-left: 0px;
1123
+ margin-right: 7px;
1124
+ margin-top: -3px;
1125
+ cursor: pointer;
1126
+ }
1127
+
1128
+ #settings-power-btn:hover {
1129
+ filter: brightness(160%);
1130
+ }
1131
+
970
1132
  #password-dlg {
971
1133
  width: min-content;
972
1134
  height: min-content;
@@ -1208,7 +1370,7 @@ td.import {
1208
1370
  }
1209
1371
 
1210
1372
  td.export {
1211
- color: #0000b0;
1373
+ color: #00000b;
1212
1374
  }
1213
1375
 
1214
1376
  /* styles for the SERVER dialog */
@@ -1460,6 +1622,78 @@ td.export {
1460
1622
  width: 65px;
1461
1623
  }
1462
1624
 
1625
+ #process-grid-plate {
1626
+ position: absolute;
1627
+ top: 191px;
1628
+ left: 185px;
1629
+ margin: 1px;
1630
+ padding-top: 3px;
1631
+ max-height: 14px;
1632
+ cursor: pointer;
1633
+ }
1634
+
1635
+ #process-grid-plate-menu {
1636
+ position: absolute;
1637
+ top: 191px;
1638
+ left: 185px;
1639
+ width: 33px;
1640
+ cursor: pointer;
1641
+ }
1642
+
1643
+ #process-grid-overlay {
1644
+ position: absolute;
1645
+ background-color: inherit;
1646
+ top: 117px;
1647
+ left: 1px;
1648
+ width: calc(100% - 8px);
1649
+ height: 66px;
1650
+ padding: 3px;
1651
+ }
1652
+
1653
+ #process-negated {
1654
+ position: absolute;
1655
+ top: -38px;
1656
+ left: 0px;
1657
+ height: 32px;
1658
+ }
1659
+
1660
+ #process-negated-msg {
1661
+ position: absolute;
1662
+ top: -47px;
1663
+ left: 92px;
1664
+ max-height: 24px;
1665
+ width: 210px;
1666
+ padding: 5px;
1667
+ font-style: italic;
1668
+ color: #8050a0;
1669
+ background-color: #f4f0f2;
1670
+ }
1671
+
1672
+ #process-grid-msg {
1673
+ padding-left: 6px;
1674
+ font-style: italic;
1675
+ color: #8050a0;
1676
+ }
1677
+
1678
+ #process-length-div {
1679
+ margin-top: 4px;
1680
+ }
1681
+
1682
+ #process-length {
1683
+ width: 30px;
1684
+ margin-left: 2px;
1685
+ }
1686
+
1687
+ #process-tex-id {
1688
+ bottom: 3px;
1689
+ position: absolute;
1690
+ right: 3px;
1691
+ width: 45px;
1692
+ height: 14px !important;
1693
+ font-size: 11px;
1694
+ background: #ecd8ec;
1695
+ }
1696
+
1463
1697
  /* styles for the PRODUCT properties dialog */
1464
1698
  #product-dlg {
1465
1699
  width: 360px;
@@ -1634,6 +1868,15 @@ td.export {
1634
1868
  width: 120px;
1635
1869
  }
1636
1870
 
1871
+ #product-tex-id {
1872
+ bottom: 3px;
1873
+ position: absolute;
1874
+ left: 293px;
1875
+ width: 45px;
1876
+ height: 14px !important;
1877
+ font-size: 11px;
1878
+ background: #ecd8ec;
1879
+ }
1637
1880
 
1638
1881
  /* NOTE: actors, datasets and products have import/export toggle boxes */
1639
1882
  #actor-io {
@@ -2069,6 +2312,10 @@ div.menu-item:hover {
2069
2312
  }
2070
2313
 
2071
2314
  /* the BOUNDLINE POINT DIALOG allows entering precise coordinates */
2315
+ #boundline-point-modal {
2316
+ z-index: 101;
2317
+ }
2318
+
2072
2319
  #boundline-point-dlg {
2073
2320
  width: 200px;
2074
2321
  height: 67px;
@@ -2112,10 +2359,140 @@ div.menu-item:hover {
2112
2359
  left: 188px;
2113
2360
  }
2114
2361
 
2362
+ /* the BOUNDLINE DATA DIALOG allows entering series data for bound lines */
2363
+ #boundline-data-modal {
2364
+ z-index: 101;
2365
+ }
2366
+
2367
+ #boundline-data-dlg {
2368
+ width: 330px;
2369
+ height: 350px;
2370
+ margin-left: calc(50vw + 170px);
2371
+ }
2372
+
2373
+ #boundline-data-remote {
2374
+ position: absolute;
2375
+ top: 24px;
2376
+ left: 2px;
2377
+ width: calc(100% - 4px);
2378
+ }
2379
+
2380
+ #boundline-data-clip {
2381
+ height: 12px;
2382
+ width: 12px;
2383
+ vertical-align: middle;
2384
+ }
2385
+
2386
+ #boundline-data-url {
2387
+ width: calc(100% - 17px);
2388
+ font-size: 12px;
2389
+ }
2390
+
2391
+ #boundline-data-series-lbl {
2392
+ position: absolute;
2393
+ top: 47px;
2394
+ left: 2px;
2395
+ }
2396
+
2397
+ #boundline-data-edit-btn,
2398
+ #boundline-data-save-btn,
2399
+ #boundline-data-cancel-btn {
2400
+ position: absolute;
2401
+ top: 46px;
2402
+ left: 65px;
2403
+ width: 14px;
2404
+ height: 14px;
2405
+ }
2406
+
2407
+ #boundline-data-save-btn,
2408
+ #boundline-data-cancel-btn {
2409
+ top: 48px;
2410
+ }
2411
+
2412
+ #boundline-data-cancel-btn {
2413
+ left: 82px;
2414
+ }
2415
+
2416
+ #boundline-data-series,
2417
+ #boundline-data-series-area {
2418
+ position: absolute;
2419
+ top: 64px;
2420
+ left: 3px;
2421
+ width: calc(100% - 6px);
2422
+ height: 120px;
2423
+ }
2424
+
2425
+ #boundline-data-series-area {
2426
+ overflow: auto;
2427
+ }
2428
+
2429
+ #boundline-data-series-table {
2430
+ border-top: 1px solid Silver
2431
+ }
2432
+
2433
+ #boundline-data-series-table tr:first-child {
2434
+ background-color: #e0e0e0;
2435
+ }
2436
+
2437
+ td.bl-odnr {
2438
+ text-align: right;
2439
+ padding-left: 3px;
2440
+ padding-right: 6px;
2441
+ width: 1px;
2442
+ color: #a05090;
2443
+ font-weight: bold;
2444
+ }
2445
+
2446
+ td.bl-od {
2447
+ width: 100%;
2448
+ border-left: 1px solid silver;
2449
+ padding-left: 6px;
2450
+ }
2451
+
2452
+ span.grit {
2453
+ color: #a05090;
2454
+ font-style: italic;
2455
+ margin-left: 8px;
2456
+ }
2457
+
2458
+ #boundline-data-line {
2459
+ position: absolute;
2460
+ top: 52px;
2461
+ right: 4px;
2462
+ font-size: 10px;
2463
+ }
2464
+
2465
+ #boundline-data-sel-titles {
2466
+ position: absolute;
2467
+ top: 189px;
2468
+ left: 4px;
2469
+ }
2470
+
2471
+ #boundline-data-sel-area {
2472
+ position: absolute;
2473
+ top: 205px;
2474
+ left: 3px;
2475
+ overflow: scroll;
2476
+ width: calc(100% - 6px);
2477
+ height: 120px;
2478
+ border-top: 1px solid Silver;
2479
+ }
2480
+
2481
+ #boundline-data-sel-buttons {
2482
+ position: absolute;
2483
+ bottom: 2px;
2484
+ left: 2px;
2485
+ }
2486
+
2487
+ #boundline-data-sel-buttons > img.btn {
2488
+ height: 18px;
2489
+ width: 18px;
2490
+ }
2491
+
2115
2492
  /* NOTE: The following dialogs are not modal, but "stay-on-top",
2116
2493
  i.e., windows that remain open (until dismissed) and above
2117
2494
  the main window, and they are draggable and resizable.
2118
- The z-indices are lower (5-50) than those of modal dialogs. */
2495
+ The z-indices are lower (5-95) than those of modal dialogs. */
2119
2496
 
2120
2497
  /* all resizable dialogs have a striped triangle at the bottom right */
2121
2498
  div.resizer {
@@ -2225,6 +2602,7 @@ div.io-box {
2225
2602
  }
2226
2603
 
2227
2604
  #scale-units-table,
2605
+ #power-grids-table,
2228
2606
  #dataset-table,
2229
2607
  #dataset-modif-table,
2230
2608
  #equation-table,
@@ -2237,6 +2615,8 @@ div.io-box {
2237
2615
  #finder-table,
2238
2616
  #finder-item-table,
2239
2617
  #finder-expression-table,
2618
+ #boundline-data-series-table,
2619
+ #boundline-data-sel-table,
2240
2620
  #restore-table {
2241
2621
  width: 100%;
2242
2622
  max-width: 100%;
@@ -2310,7 +2690,7 @@ div.io-box {
2310
2690
  top: 60px;
2311
2691
  left: calc(40% + 4px);
2312
2692
  width: calc(60% - 6px);
2313
- height: calc(100% - 122px);
2693
+ height: calc(100% - 85px);
2314
2694
  overflow-y: auto;
2315
2695
  border-top: 1px solid Silver;
2316
2696
  }
@@ -2377,6 +2757,18 @@ div.modif::before {
2377
2757
  margin-right: 2px;
2378
2758
  }
2379
2759
 
2760
+ span.blpoints {
2761
+ color: #8020a0;
2762
+ text-shadow: #b9c 0.5px 0.5px;
2763
+ }
2764
+
2765
+ span.blpoints::before {
2766
+ content: ' \2234';
2767
+ color: #b00080;
2768
+ font-weight: bolder;
2769
+ margin-right: 2px;
2770
+ }
2771
+
2380
2772
  div.outcome::before,
2381
2773
  span.outcome::before {
2382
2774
  content: ' \25C8';
@@ -2603,6 +2995,12 @@ td.equation-expression-multi {
2603
2995
  width: calc(100% - 6px);
2604
2996
  }
2605
2997
 
2998
+ /* NOTE: New and Rename modals must be above boundline data modal */
2999
+ #new-selector-modal,
3000
+ #rename-selector-modal {
3001
+ z-index: 102;
3002
+ }
3003
+
2606
3004
  #new-selector-dlg,
2607
3005
  #rename-selector-dlg {
2608
3006
  width: 215px;
@@ -2755,7 +3153,7 @@ td.equation-expression-multi {
2755
3153
 
2756
3154
  #series-clip {
2757
3155
  height: 12px;
2758
- width: 132x;
3156
+ width: 12px;
2759
3157
  vertical-align: middle;
2760
3158
  }
2761
3159
 
@@ -3256,7 +3654,7 @@ img.v-disab {
3256
3654
  /* the SENSITIVITY DIALOG displays the sensitivity analysis */
3257
3655
  #sensitivity-dlg {
3258
3656
  display: none;
3259
- z-index: 15;
3657
+ z-index: 20;
3260
3658
  margin: 0;
3261
3659
  width: 500px;
3262
3660
  height: 265px;
@@ -3296,7 +3694,7 @@ td.sa-ds-sel {
3296
3694
  }
3297
3695
 
3298
3696
  td.sa-ds-sel:hover {
3299
- text-decoration: underline solid #b00090;
3697
+ text-decoration: underline solid #b00080;
3300
3698
  text-decoration-thickness: 1.5px;
3301
3699
  }
3302
3700
 
@@ -3541,7 +3939,7 @@ td.sa-not-run {
3541
3939
  /* the EXPERIMENT DIALOG displays the experiment manager */
3542
3940
  #experiment-dlg {
3543
3941
  display: none;
3544
- z-index: 20;
3942
+ z-index: 25;
3545
3943
  margin: 0;
3546
3944
  width: 450px;
3547
3945
  height: 275px;
@@ -3755,6 +4153,7 @@ td.sa-not-run {
3755
4153
  margin-left: 2px;
3756
4154
  font-weight: 600;
3757
4155
  font-style: italic;
4156
+ width: calc(100% - 120px);
3758
4157
  white-space: nowrap;
3759
4158
  overflow: hidden;
3760
4159
  text-overflow: ellipsis;
@@ -4836,6 +5235,53 @@ div.sel-tab {
4836
5235
  box-shadow: inset #bfc0e2 0 0 7px 2px;
4837
5236
  }
4838
5237
 
5238
+ /* the TEX DIALOG displays mathematical formulas */
5239
+ #tex-dlg {
5240
+ display: none;
5241
+ z-index: 45;
5242
+ margin: 0;
5243
+ width: 300px;
5244
+ height: 200px;
5245
+ min-width: 250px;
5246
+ min-height: 150px;
5247
+ max-height: 99vh;
5248
+ max-width: 99vw;
5249
+ }
5250
+
5251
+ #tex-entity {
5252
+ position: absolute;
5253
+ left: 3px;
5254
+ bottom: 2px;
5255
+ width: calc(100% - 24px);
5256
+ white-space: nowrap;
5257
+ }
5258
+
5259
+ #tex-tabs {
5260
+ width: calc(100% - 6px);
5261
+ }
5262
+
5263
+ #tex-formula {
5264
+ position: absolute;
5265
+ left: 3px;
5266
+ top: 43px;
5267
+ padding: 6px;
5268
+ width: calc(100% - 20px);
5269
+ height: calc(100% - 73px);
5270
+ border: 1px solid silver;
5271
+ background-color: white;
5272
+ overflow: scroll;
5273
+ }
5274
+
5275
+ #tex-code {
5276
+ position: absolute;
5277
+ left: 3px;
5278
+ top: 42px;
5279
+ width: calc(100% - 6px);
5280
+ height: calc(100% - 60px);
5281
+ font: 12px monospace;
5282
+ border: 1px solid Black;
5283
+ }
5284
+
4839
5285
  /* the CHANNEL DIALOG configures and activates the receiver */
4840
5286
  #channel-dlg {
4841
5287
  width: 258px;
@@ -5096,6 +5542,10 @@ div.call-stack-expr {
5096
5542
  }
5097
5543
 
5098
5544
  /* the CHECK UPDATE modal asks for permission to update the software */
5545
+ #check-update-modal {
5546
+ z-index: 150;
5547
+ }
5548
+
5099
5549
  #check-update-dlg {
5100
5550
  width: 500px;
5101
5551
  height: min-content;
@@ -12,7 +12,7 @@ file all have their graphical extensions in file linny-r-gui.js.
12
12
  */
13
13
 
14
14
  /*
15
- Copyright (c) 2017-2023 Delft University of Technology
15
+ Copyright (c) 2017-2024 Delft University of Technology
16
16
 
17
17
  Permission is hereby granted, free of charge, to any person obtaining a copy
18
18
  of this software and associated documentation files (the "Software"), to deal
@@ -124,6 +124,7 @@ class Controller {
124
124
  decimal_comma: 'Use decimal comma',
125
125
  grid_pixels: 'Grid resolution',
126
126
  align_to_grid: 'Align to grid',
127
+ with_power_flow: 'Add power flow constraints',
127
128
  infer_cost_prices: 'Infer cost prices',
128
129
  show_block_arrows: 'Show block arrows',
129
130
  timeout_period: 'Solver time-out',
@@ -135,13 +136,14 @@ class Controller {
135
136
  ENTITY_PROPS: ['units', 'actors', 'clusters', 'processes', 'products',
136
137
  'datasets', 'equations', 'links', 'constraints'],
137
138
  UNIT_PROPS: ['multiplier', 'base_unit'],
138
- ACTOR_PROPS: ['weight', 'comments'],
139
+ ACTOR_PROPS: ['weight', 'comments', 'TEX_id'],
139
140
  CLUSTER_PROPS: ['comments', 'collapsed', 'ignore'],
140
141
  PROCESS_PROPS: ['comments', 'lower_bound', 'upper_bound', 'initial_level',
141
- 'pace_expression', 'equal_bounds', 'level_to_zero', 'integer_level', 'collapsed'],
142
+ 'pace_expression', 'equal_bounds', 'level_to_zero', 'integer_level',
143
+ 'collapsed', 'TEX_id'],
142
144
  PRODUCT_PROPS: ['comments', 'lower_bound', 'upper_bound', 'initial_level',
143
145
  'scale_unit', 'equal_bounds', 'price', 'is_source', 'is_sink', 'is_buffer',
144
- 'is_data', 'integer_level', 'no_slack'],
146
+ 'is_data', 'integer_level', 'no_slack', 'TEX_id'],
145
147
  DATASET_PROPS: ['comments', 'default_value', 'scale_unit', 'time_scale',
146
148
  'time_unit', 'method', 'periodic', 'array', 'url', 'default_selector'],
147
149
  LINK_PROPS: ['comments', 'multiplier', 'relative_rate', 'share_of_cost',
@@ -11,7 +11,7 @@ functionality for the Linny-R Actor Manager dialog.
11
11
  */
12
12
 
13
13
  /*
14
- Copyright (c) 2017-2023 Delft University of Technology
14
+ Copyright (c) 2017-2024 Delft University of Technology
15
15
 
16
16
  Permission is hereby granted, free of charge, to any person obtaining a copy
17
17
  of this software and associated documentation files (the "Software"), to deal