jclic 2.1.21 → 2.1.22

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 (173) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/jclic-node.js +1 -1
  3. package/dist/jclic-node.js.map +1 -1
  4. package/dist/jclic.min.js +2 -2
  5. package/dist/jclic.min.js.map +1 -1
  6. package/package.json +1 -1
  7. package/src/GlobalData.js +1 -1
  8. package/dist/1078.jclic-node.js +0 -282
  9. package/dist/1078.jclic-node.js.map +0 -1
  10. package/dist/1196.jclic-node.js +0 -808
  11. package/dist/1196.jclic-node.js.map +0 -1
  12. package/dist/1253.jclic-node.js +0 -1432
  13. package/dist/1253.jclic-node.js.map +0 -1
  14. package/dist/13.jclic-node.js +0 -103
  15. package/dist/13.jclic-node.js.map +0 -1
  16. package/dist/1567.jclic-node.js +0 -2313
  17. package/dist/1567.jclic-node.js.map +0 -1
  18. package/dist/1588.jclic-node.js +0 -602
  19. package/dist/1588.jclic-node.js.map +0 -1
  20. package/dist/1725.jclic-node.js +0 -836
  21. package/dist/1725.jclic-node.js.map +0 -1
  22. package/dist/1731.jclic-node.js +0 -438
  23. package/dist/1731.jclic-node.js.map +0 -1
  24. package/dist/1842.jclic-node.js +0 -651
  25. package/dist/1842.jclic-node.js.map +0 -1
  26. package/dist/2160.jclic-node.js +0 -1016
  27. package/dist/2160.jclic-node.js.map +0 -1
  28. package/dist/222.jclic-node.js +0 -129
  29. package/dist/222.jclic-node.js.map +0 -1
  30. package/dist/2316.jclic-node.js +0 -949
  31. package/dist/2316.jclic-node.js.map +0 -1
  32. package/dist/2355.jclic-node.js +0 -371
  33. package/dist/2355.jclic-node.js.map +0 -1
  34. package/dist/2366.jclic-node.js +0 -431
  35. package/dist/2366.jclic-node.js.map +0 -1
  36. package/dist/2379.jclic-node.js +0 -202
  37. package/dist/2379.jclic-node.js.map +0 -1
  38. package/dist/2437.jclic-node.js +0 -450
  39. package/dist/2437.jclic-node.js.map +0 -1
  40. package/dist/2531.jclic-node.js +0 -869
  41. package/dist/2531.jclic-node.js.map +0 -1
  42. package/dist/2608.jclic-node.js +0 -160
  43. package/dist/2608.jclic-node.js.map +0 -1
  44. package/dist/2715.jclic-node.js +0 -554
  45. package/dist/2715.jclic-node.js.map +0 -1
  46. package/dist/277.jclic-node.js +0 -22
  47. package/dist/277.jclic-node.js.map +0 -1
  48. package/dist/2921.jclic-node.js +0 -660
  49. package/dist/2921.jclic-node.js.map +0 -1
  50. package/dist/2952.jclic-node.js +0 -101
  51. package/dist/2952.jclic-node.js.map +0 -1
  52. package/dist/3018.jclic-node.js +0 -421
  53. package/dist/3018.jclic-node.js.map +0 -1
  54. package/dist/3019.jclic-node.js +0 -682
  55. package/dist/3019.jclic-node.js.map +0 -1
  56. package/dist/3231.jclic-node.js +0 -274
  57. package/dist/3231.jclic-node.js.map +0 -1
  58. package/dist/331.jclic-node.js +0 -115
  59. package/dist/331.jclic-node.js.map +0 -1
  60. package/dist/3391.jclic-node.js +0 -276
  61. package/dist/3391.jclic-node.js.map +0 -1
  62. package/dist/3502.jclic-node.js +0 -671
  63. package/dist/3502.jclic-node.js.map +0 -1
  64. package/dist/3653.jclic-node.js +0 -982
  65. package/dist/3653.jclic-node.js.map +0 -1
  66. package/dist/371.jclic.min.js +0 -2
  67. package/dist/371.jclic.min.js.map +0 -1
  68. package/dist/3856.jclic-node.js +0 -575
  69. package/dist/3856.jclic-node.js.map +0 -1
  70. package/dist/4112.jclic-node.js +0 -659
  71. package/dist/4112.jclic-node.js.map +0 -1
  72. package/dist/4123.jclic-node.js +0 -910
  73. package/dist/4123.jclic-node.js.map +0 -1
  74. package/dist/427.jclic-node.js +0 -894
  75. package/dist/427.jclic-node.js.map +0 -1
  76. package/dist/4483.jclic-node.js +0 -327
  77. package/dist/4483.jclic-node.js.map +0 -1
  78. package/dist/4548.jclic-node.js +0 -1078
  79. package/dist/4548.jclic-node.js.map +0 -1
  80. package/dist/466.jclic-node.js +0 -99
  81. package/dist/466.jclic-node.js.map +0 -1
  82. package/dist/485.jclic-node.js +0 -783
  83. package/dist/485.jclic-node.js.map +0 -1
  84. package/dist/4921.jclic-node.js +0 -500
  85. package/dist/4921.jclic-node.js.map +0 -1
  86. package/dist/5091.jclic-node.js +0 -239
  87. package/dist/5091.jclic-node.js.map +0 -1
  88. package/dist/520.jclic-node.js +0 -550
  89. package/dist/520.jclic-node.js.map +0 -1
  90. package/dist/5312.jclic-node.js +0 -1126
  91. package/dist/5312.jclic-node.js.map +0 -1
  92. package/dist/5338.jclic-node.js +0 -212
  93. package/dist/5338.jclic-node.js.map +0 -1
  94. package/dist/5344.jclic-node.js +0 -229
  95. package/dist/5344.jclic-node.js.map +0 -1
  96. package/dist/5550.jclic-node.js +0 -238
  97. package/dist/5550.jclic-node.js.map +0 -1
  98. package/dist/5626.jclic-node.js +0 -614
  99. package/dist/5626.jclic-node.js.map +0 -1
  100. package/dist/5977.jclic-node.js +0 -1081
  101. package/dist/5977.jclic-node.js.map +0 -1
  102. package/dist/6148.jclic-node.js +0 -345
  103. package/dist/6148.jclic-node.js.map +0 -1
  104. package/dist/6176.jclic-node.js +0 -481
  105. package/dist/6176.jclic-node.js.map +0 -1
  106. package/dist/6221.jclic-node.js +0 -1072
  107. package/dist/6221.jclic-node.js.map +0 -1
  108. package/dist/6238.jclic-node.js +0 -718
  109. package/dist/6238.jclic-node.js.map +0 -1
  110. package/dist/6454.jclic-node.js +0 -1413
  111. package/dist/6454.jclic-node.js.map +0 -1
  112. package/dist/6565.jclic-node.js +0 -294
  113. package/dist/6565.jclic-node.js.map +0 -1
  114. package/dist/6579.jclic-node.js +0 -719
  115. package/dist/6579.jclic-node.js.map +0 -1
  116. package/dist/6715.jclic-node.js +0 -148
  117. package/dist/6715.jclic-node.js.map +0 -1
  118. package/dist/6777.jclic-node.js +0 -171
  119. package/dist/6777.jclic-node.js.map +0 -1
  120. package/dist/6782.jclic-node.js +0 -1611
  121. package/dist/6782.jclic-node.js.map +0 -1
  122. package/dist/6847.jclic-node.js +0 -601
  123. package/dist/6847.jclic-node.js.map +0 -1
  124. package/dist/6856.jclic-node.js +0 -252
  125. package/dist/6856.jclic-node.js.map +0 -1
  126. package/dist/696.jclic-node.js +0 -1821
  127. package/dist/696.jclic-node.js.map +0 -1
  128. package/dist/698.jclic-node.js +0 -583
  129. package/dist/698.jclic-node.js.map +0 -1
  130. package/dist/704.jclic-node.js +0 -80
  131. package/dist/704.jclic-node.js.map +0 -1
  132. package/dist/7046.jclic-node.js +0 -735
  133. package/dist/7046.jclic-node.js.map +0 -1
  134. package/dist/7220.jclic-node.js +0 -156
  135. package/dist/7220.jclic-node.js.map +0 -1
  136. package/dist/7257.jclic-node.js +0 -931
  137. package/dist/7257.jclic-node.js.map +0 -1
  138. package/dist/743.jclic-node.js +0 -583
  139. package/dist/743.jclic-node.js.map +0 -1
  140. package/dist/757.jclic-node.js +0 -1072
  141. package/dist/757.jclic-node.js.map +0 -1
  142. package/dist/7781.jclic-node.js +0 -202
  143. package/dist/7781.jclic-node.js.map +0 -1
  144. package/dist/7912.jclic-node.js +0 -2103
  145. package/dist/7912.jclic-node.js.map +0 -1
  146. package/dist/827.jclic-node.js +0 -708
  147. package/dist/827.jclic-node.js.map +0 -1
  148. package/dist/8276.jclic-node.js +0 -409
  149. package/dist/8276.jclic-node.js.map +0 -1
  150. package/dist/8322.jclic-node.js +0 -498
  151. package/dist/8322.jclic-node.js.map +0 -1
  152. package/dist/8641.jclic-node.js +0 -360
  153. package/dist/8641.jclic-node.js.map +0 -1
  154. package/dist/8837.jclic-node.js +0 -651
  155. package/dist/8837.jclic-node.js.map +0 -1
  156. package/dist/8895.jclic-node.js +0 -151
  157. package/dist/8895.jclic-node.js.map +0 -1
  158. package/dist/9072.jclic-node.js +0 -1285
  159. package/dist/9072.jclic-node.js.map +0 -1
  160. package/dist/9078.jclic-node.js +0 -935
  161. package/dist/9078.jclic-node.js.map +0 -1
  162. package/dist/9103.jclic-node.js +0 -718
  163. package/dist/9103.jclic-node.js.map +0 -1
  164. package/dist/9359.jclic-node.js +0 -145
  165. package/dist/9359.jclic-node.js.map +0 -1
  166. package/dist/9409.jclic-node.js +0 -921
  167. package/dist/9409.jclic-node.js.map +0 -1
  168. package/dist/9513.jclic-node.js +0 -720
  169. package/dist/9513.jclic-node.js.map +0 -1
  170. package/dist/9704.jclic-node.js +0 -81
  171. package/dist/9704.jclic-node.js.map +0 -1
  172. package/dist/9950.jclic-node.js +0 -827
  173. package/dist/9950.jclic-node.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"5312.jclic-node.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEuB;AACqC;AACf;AACF;AACI;AACM;AACJ;AACD;AACI;;AAEpD;AACsC;AACA;;AAEtC;AACA,kBAAkB,yCAAyC,SAAS,+CAA+C;AACnH;AACA;AACA;AACA;AACA,iDAAiD,kDAAkD;AACnG,IAAI,8CAA8C;AAClD;AACA;AACA;AACA;AACA;AACA;AACO,wBAAwB,wBAAQ;AACvC;AACA;AACA,aAAa,0CAA0C;AACvD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iCAAiC,+CAA+C;AAChF;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA,iDAAiD,+CAA+C;AAChG;AACA,YAAY,SAAS;AACrB;AACA,CAAC;;AAED;AACA,QAAQ,mDAAmD,OAAO,gEAAgE;AAClI;AACA;AACO,6BAA6B,6BAAa;AACjD;AACA;AACA,aAAa,0BAA0B,WAAW,yCAAyC;AAC3F,aAAa,gCAAgC;AAC7C;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,yCAAyC,kDAAkD;AAC3G;AACA,aAAa,QAAQ;AACrB,eAAe;AACf;AACA;AACA;AACA,gBAAgB,iBAAM;AACtB,eAAe,sBAAW;;AAE1B;AACA,iBAAiB,yBAAC,gBAAgB,mBAAmB;AACrD;AACA;AACA,iCAAiC,iDAAiD;AAClF;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;;AAEA,mBAAmB,oBAAS,4BAA4B,qBAAS;AACjE;AACA;;AAEA,kCAAkC;AAClC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAkB,mBAAQ;AAC1B,uBAAuB,iBAAM;AAC7B;AACA;AACA;AACA;AACA,wBAAwB,iBAAK;AAC7B;AACA,wBAAwB,iBAAK;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,mCAAmC;AACzE;AACA,aAAa,sBAAsB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,qBAAS;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,sBAAsB;AACnC,eAAe;AACf;AACA;AACA;AACA;AACA,MAAM,iBAAM;AACZ;;AAEA;AACA;AACA;AACA,aAAa,sBAAsB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,yBAAC,mBAAmB,eAAe,YAAY,gBAAgB;AACpF;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,gBAAgB;AAC7B,eAAe,SAAS;AACxB,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAK;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAQ;AAC1B;AACA;AACA,6CAA6C,+BAA+B;AAC5E;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,sBAAQ;AACzB;AACA;AACA,iBAAiB,sBAAQ;AACzB;AACA;AACA,iBAAiB,sBAAQ;AACzB;AACA;AACA,iBAAiB,sBAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,sBAAsB,gBAAgB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,OAAO,IAAI,MAAM;AAC7E;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA,YAAY,gCAAgC;AAC5C;AACA;AACA;AACA;AACA,YAAY,4BAA4B;AACxC;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA,YAAY,kCAAkC;AAC9C;AACA;AACA;AACA;AACA,YAAY,kCAAkC;AAC9C;AACA;AACA;AACA;AACA,YAAY,kCAAkC;AAC9C;AACA;AACA;AACA;AACA,YAAY,kCAAkC;AAC9C;AACA;AACA;AACA;AACA;AACA,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,SAAS,0BAAQ,CAAC,qBAAK;AACvB;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,SAAS,0BAAQ,CAAC,qBAAK;AACvB;AACA;AACA;AACA,YAAY,QAAQ;AACpB,aAAa,cAAc;AAC3B;AACA;AACA;AACA,YAAY,8BAA8B;AAC1C,aAAa,kBAAO;AACpB,CAAC;;AAED;AACA,qDAAqD;AACrD,UAAU,OAAO;AACjB;;AAEA;AACA,yDAAe,wBAAQ,gDAAgD,EAAC;;;;;;;;;;;;;;;ACpjBxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAE2C;AACa;AACjB;;AAEvC;AACA,mCAAmC,wDAAwD;AAC3F,+BAA+B,uDAAuD;AACtF;AACA;AACA;AACO,qBAAqB,uDAAW;AACvC;AACA;AACA,aAAa,sCAAsC;AACnD,aAAa,sBAAsB;AACnC,aAAa,8BAA8B;AAC3C;AACA;AACA;AACA;AACA,+BAA+B,wDAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA,aAAa,sBAAsB;AACnC,aAAa,WAAW;AACxB,MAAM;AACN,sCAAsC,yCAAyC,IAAI,8CAA8C;AACjI,aAAa,QAAQ;AACrB,eAAe,sBAAsB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAa,sBAAsB;AACnC,aAAa,WAAW;AACxB,MAAM;AACN,sCAAsC,yCAAyC,IAAI,8CAA8C;AACjI,aAAa,WAAW;AACxB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe,sBAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kBAAkB,wDAAS;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,wDAAS;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,wDAAS;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,eAAe,wDAAS;AACxB,eAAe,yDAAQ;AACvB,eAAe,yDAAQ;AACvB;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe;AACf;AACA;AACA;AACA,eAAe,wDAAS;AACxB;;AAEA;AACA,cAAc,wDAAwD;AACtE,aAAa,sCAAsC;AACnD;AACA;AACA;AACA;;AAEA;AACA,MAAM,wDAAS;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAa,sCAAsC;AACnD,eAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,sCAAsC;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,wDAAS;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,wDAAS;AAC9C;AACA;AACA,gBAAgB,wDAAS;AACzB;AACA;AACA,KAAK;AACL;AACA,cAAc,wDAAS;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,sDAAsD;AACtE;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,uDAAuD;AACvE;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,2DAA2D;AAC3E;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,sDAAsD;AACtE;AACA,aAAa,wBAAwB;AACrC;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,iBAAiB,wDAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oDAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,kBAAkB,oDAAK;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA,aAAa,mCAAmC;AAChD;AACA,aAAa,sBAAsB;AACnC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA,8BAA8B,wDAAwD;AACtF,aAAa,kBAAkB;AAC/B,eAAe;AACf;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,wCAAwC;AACpD;AACA;AACA;AACA;AACA,YAAY,sBAAsB;AAClC,uBAAuB,wDAAS;AAChC;AACA;AACA;AACA,YAAY,sCAAsC;AAClD;AACA,CAAC;;AAED,iEAAe,MAAM,EAAC","sources":["webpack://jclic/./src/activities/textGrid/CrossWord.js","webpack://jclic/./src/boxes/BoxBag.js"],"sourcesContent":["/**\n * File : activities/textGrid/CrossWord.js\n * Created : 17/06/2015\n * By : Francesc Busquets <francesc@gmail.com>\n *\n * JClic.js\n * An HTML5 player of JClic activities\n * https://projectestac.github.io/jclic.js\n *\n * @source https://github.com/projectestac/jclic.js\n *\n * @license EUPL-1.2\n * @licstart\n * (c) 2000-2020 Educational Telematic Network of Catalonia (XTEC)\n *\n * Licensed under the EUPL, Version 1.1 or -as soon they will be approved by\n * the European Commission- subsequent versions of the EUPL (the \"Licence\");\n * You may not use this work except in compliance with the Licence.\n *\n * You may obtain a copy of the Licence at:\n * https://joinup.ec.europa.eu/software/page/eupl\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the Licence is distributed on an \"AS IS\" basis, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * Licence for the specific language governing permissions and limitations\n * under the Licence.\n * @licend\n * @module\n */\n\n/* global window */\n\nimport $ from 'jquery';\nimport { Activity, ActivityPanel } from '../../Activity.js';\nimport BoxBase from '../../boxes/BoxBase.js';\nimport BoxBag from '../../boxes/BoxBag.js';\nimport TextGrid from '../../boxes/TextGrid.js';\nimport AbstractBox from '../../boxes/AbstractBox.js';\nimport ActiveBox from '../../boxes/ActiveBox.js';\nimport { Rectangle, Point } from '../../AWT.js';\nimport { settings, svgToURI } from '../../Utils.js';\n\n// Use Webpack to import SVG files\nimport hIcon from './icons/hIcon.svg';\nimport vIcon from './icons/vIcon.svg';\n\n/**\n * This class of {@link module:Activity.Activity Activity} shows a {@link module:boxes/TextGrid.TextGrid TextGrid} initially empty, with some cells\n * marked in negative color that act as word stoppers. A blinking \"cursor\" indicates the cell that\n * will receive the next character entered by the user on the keyboard.\n *\n * The letter in each cell of the grid is always shared by two words: one in horizontal direction\n * and the other one in vertical direction. Two {@link module:boxes/ActiveBox.ActiveBox ActiveBox} objects are placed next to the\n * {@link module:boxes/TextGrid.TextGrid TextGrid}, hosting the definitions of the horizontal and vertical words crossing at the\n * cell currently marked by the cursor.\n *\n * Two special buttons placed near this boxes allow to write on the grid horizontally or vertically.\n * The aim of the activity is to fill all the text grid with the correct words.\n * @extends module:Activity.Activity\n */\nexport class CrossWord extends Activity {\n /**\n * CrossWord constructor\n * @param {module:project/JClicProject.JClicProject} project - The JClic project to which this activity belongs\n */\n constructor(project) {\n super(project);\n }\n\n /**\n * Retrieves the minimum number of actions needed to solve this activity\n * @override\n * @returns {number}\n */\n getMinNumActions() {\n return this.tgc.getNumChars() - this.tgc.countWildChars();\n }\n\n /**\n * Crossword activities always make use of the keyboard\n * @override\n * @returns {boolean}\n */\n needsKeyboard() {\n return true;\n }\n}\n\nObject.assign(CrossWord.prototype, {\n /**\n * Whether all letters of the {@link module:boxes/TextGrid.TextGrid TextGrid} should be displayed in upper case\n * @name module:activities/textGrid/CrossWord.CrossWord#upperCase\n * @type {boolean} */\n upperCase: true,\n /**\n * Whether the case is significant to evaluate answers\n * @name module:activities/textGrid/CrossWord.CrossWord#checkCase\n * @type {boolean} */\n checkCase: true,\n /**\n * When `true`, the wildcard character of the {@link module:boxes/TextGrid.TextGrid TextGrid} will be transparent.\n * @name module:activities/textGrid/CrossWord.CrossWord#wildTransparent\n * @type {boolean} */\n wildTransparent: false,\n});\n\n/**\n * The {@link module:Activity.ActivityPanel ActivityPanel} where {@link module:activities/textGrid/CrossWord.CrossWord CrossWord} activities are played.\n * @extends module:Activity.ActivityPanel\n */\nexport class CrossWordPanel extends ActivityPanel {\n /**\n * CrossWordPanel constructor\n * @param {module:Activity.Activity} act - The {@link module:Activity.Activity Activity} to which this Panel belongs\n * @param {module:JClicPlayer.JClicPlayer} ps - Any object implementing the methods defined in the\n * [PlayStation](http://projectestac.github.io/jclic/apidoc/edu/xtec/jclic/PlayStation.html) Java interface.\n * @param {external:jQuery} [$div] - The jQuery DOM element where this Panel will deploy\n */\n constructor(act, ps, $div) {\n super(act, ps, $div);\n }\n\n /**\n * Performs miscellaneous cleaning operations\n * @override\n */\n clear() {\n if (this.grid) {\n this.grid.end();\n this.grid = null;\n }\n if (this.style) {\n this.style.end();\n this.style = null;\n }\n }\n\n /**\n * Creates a {@link module:boxes/BoxBag.BoxBag BoxBag} with a label (\"Horizontal\" or \"Vertical\") and an {@link module:boxes/ActiveBox.ActiveBox ActiveBox}\n * that will be used to display clues.\n * @param {string} type - `acrossClues` for horizontal clues, 'downClues' for vertical.\n * @returns {module:boxes/BoxBag.BoxBag}\n */\n createBoxBag(type) {\n const\n bxb = new BoxBag(null, this, null),\n sb = new AbstractBox(bxb, this, this.icoBB);\n\n sb.setBounds(0, 0, this.LABEL_WIDTH, this.act.abc[type].h);\n const $btn = $('<button/>', { class: 'StockBtn' }).css({\n 'width': this.LABEL_WIDTH,\n 'height': this.act.abc[type].h,\n 'background-image': `url(${type === 'acrossClues' ? this.hIcon : this.vIcon})`,\n 'background-repeat': 'no-repeat',\n 'background-position': 'center',\n 'border-radius': 6,\n 'z-index': 10\n }).on('click', () => {\n this.advance = type === 'acrossClues' ?\n this.advance === 'ADVANCE_RIGHT' ?\n 'NO_ADVANCE' : 'ADVANCE_RIGHT' :\n this.advance === 'ADVANCE_DOWN' ?\n 'NO_ADVANCE' : 'ADVANCE_DOWN';\n this.setBtnStatus();\n }).on('keypress', event => {\n if (String.fromCharCode(event.charCode || event.keyCode) === ' ')\n event.stopPropagation();\n }).appendTo(this.$div);\n\n sb.setHostedComponent($btn);\n bxb.addBox(sb);\n\n const ab = new ActiveBox(bxb, null, null, type, new Rectangle(this.LABEL_WIDTH + this.act.margin, 0, this.act.abc[type].w, this.act.abc[type].h));\n bxb.addBox(ab);\n bxb.setBoxBase(this.act.abc[type].style);\n\n if (type === 'acrossClues') { // Horizontal\n this.hClue = ab;\n this.hClueBtn = sb;\n } else {\n this.vClue = ab;\n this.vClueBtn = sb;\n }\n return bxb;\n }\n\n /**\n * Prepares the visual components of the activity\n * @override\n */\n buildVisualComponents() {\n if (this.firstRun)\n super.buildVisualComponents();\n this.clear();\n\n const\n tgc = this.act.tgc,\n abcH = this.act.abc['acrossClues'],\n abcV = this.act.abc['downClues'];\n\n if (abcH.image)\n abcH.setImgContent(this.act.project.mediaBag, null, false);\n if (abcV.image)\n abcV.setImgContent(this.act.project.mediaBag, null, false);\n\n if (this.act.acp !== null) {\n this.act.acp.generateContent(0, 0, this.act.abc, false);\n }\n\n if (tgc) {\n this.grid = TextGrid.createEmptyGrid(null, this, this.act.margin, this.act.margin, tgc, this.act.wildTransparent);\n this.style = new BoxBag(null, this, null);\n const\n bxbh = this.createBoxBag('acrossClues'),\n bxbv = this.createBoxBag('downClues');\n if (this.act.boxGridPos === 'AUB' || this.act.boxGridPos === 'BUA')\n bxbv.moveTo(new Point(bxbh.dim.width + this.act.margin, 0));\n else\n bxbv.moveTo(new Point(0, bxbh.dim.height + this.act.margin));\n this.style.addBox(bxbh);\n this.style.addBox(bxbv);\n this.grid.setVisible(true);\n this.style.setVisible(true);\n }\n }\n\n /**\n * Basic initialization procedure\n * @override\n */\n initActivity() {\n super.initActivity();\n if (!this.firstRun)\n this.buildVisualComponents();\n else\n this.firstRun = false;\n\n if (this.grid) {\n this.grid.setChars(this.act.tgc.text);\n this.numLetters = this.act.getMinNumActions();\n this.grid.setCellAttributes(true, true);\n this.grid.setCursorEnabled(true);\n this.setCursorAt(0, 0);\n this.advance = 'ADVANCE_RIGHT';\n this.setBtnStatus();\n this.setAndPlayMsg('initial', 'start');\n this.invalidate().update();\n this.$div.attr(\"tabindex\", 0);\n this.$div.focus();\n this.playing = true;\n }\n }\n\n /**\n * Calculates the current score\n * @returns {number}\n */\n getCurrentScore() {\n return this.grid ? this.grid.countCoincidences(this.act.checkCase) : 0;\n }\n\n /**\n * Updates the graphic content of this panel.\n * This method will be called from {@link module:AWT.Container#update} when needed.\n * @override\n * @param {module:AWT.Rectangle} dirtyRegion - Specifies the area to be updated. When `null`,\n * it's the whole panel.\n */\n updateContent(dirtyRegion) {\n super.updateContent(dirtyRegion);\n if (this.grid && this.$canvas) {\n const\n canvas = this.$canvas.get(-1),\n ctx = canvas.getContext('2d');\n if (!dirtyRegion)\n dirtyRegion = new Rectangle(0, 0, canvas.width, canvas.height);\n ctx.clearRect(dirtyRegion.pos.x, dirtyRegion.pos.y, dirtyRegion.dim.width, dirtyRegion.dim.height);\n this.grid.update(ctx, dirtyRegion);\n this.style.update(ctx, dirtyRegion);\n }\n return this;\n }\n\n /**\n * Sets the real dimension of this panel.\n * @override\n * @param {module:AWT.Dimension} preferredMaxSize - The maximum surface available for the activity panel\n * @returns {module:AWT.Dimension}\n */\n setDimension(preferredMaxSize) {\n return !this.grid || !this.style || this.getBounds().equals(preferredMaxSize) ?\n preferredMaxSize :\n BoxBag.layoutDouble(preferredMaxSize, this.grid, this.style, this.act.boxGridPos, this.act.margin);\n }\n\n /**\n * Sets the size and position of this activity panel\n * @override\n * @param {module:AWT.Rectangle} rect\n */\n setBounds(rect) {\n if (this.$canvas) {\n this.$canvas.remove();\n this.$canvas = null;\n }\n super.setBounds(rect);\n\n if (this.grid) {\n // Create the main canvas\n this.$canvas = $(`<canvas width=\"${rect.dim.width}\" height=\"${rect.dim.height}\"/>`).css({\n position: 'absolute',\n top: 0,\n left: 0\n });\n this.$div.append(this.$canvas);\n // Repaint all\n this.invalidate().update();\n }\n }\n\n /**\n * Main handler used to process mouse, touch, keyboard and edit events\n * @override\n * @param {external:Event} event - The HTML event to be processed\n * @returns {boolean} - When this event handler returns `false`, jQuery will stop its\n * propagation through the DOM tree. See: {@link http://api.jquery.com/on}\n */\n processEvent(event) {\n if (this.playing) {\n switch (event.type) {\n case 'click':\n //\n // The [AWT.Point](AWT.html#Point) where the mouse or touch event has been originated\n // Touch events can have more than one touch, so `pageX` must be obtained from `touches[0]`\n const\n x = event.originalEvent && event.originalEvent.touches ? event.originalEvent.touches[0].pageX : event.pageX,\n y = event.originalEvent && event.originalEvent.touches ? event.originalEvent.touches[0].pageY : event.pageY,\n p = new Point(x - this.$div.offset().left, y - this.$div.offset().top),\n // Array to be filled with actions to be executed at the end of event processing\n delayedActions = [];\n\n this.ps.stopMedia(1);\n if (this.grid.contains(p)) {\n const pt = this.grid.getLogicalCoords(p);\n if (pt !== null) {\n this.setCursorAt(pt.x, pt.y);\n if (settings.TOUCH_DEVICE) {\n // We are in a touch device, so prompt user to write text:\n const d = this.advance === 'ADVANCE_DOWN';\n const txt = window.prompt(`${d ? 'Vertical' : 'Horizontal'} word:`, '');\n this.writeChars(txt);\n }\n }\n } else if (this.hClue.contains(p))\n this.hClue.playMedia(this.ps, delayedActions);\n else if (this.vClue.contains(p))\n this.vClue.playMedia(this.ps, delayedActions);\n else\n break;\n\n this.update();\n delayedActions.forEach(action => action());\n break;\n\n case 'keypress':\n const code = event.charCode || event.keyCode;\n if (code && this.grid.getCursor()) {\n event.preventDefault();\n this.writeChars(String.fromCharCode(code));\n }\n break;\n\n case 'keydown':\n let dx = 0, dy = 0;\n switch (event.keyCode) {\n case settings.VK.RIGHT:\n dx = 1;\n break;\n case settings.VK.LEFT:\n dx = -1;\n break;\n case settings.VK.DOWN:\n dy = 1;\n break;\n case settings.VK.UP:\n dy = -1;\n break;\n }\n if (dx || dy) {\n event.preventDefault();\n this.moveCursor(dx, dy);\n this.update();\n }\n break;\n }\n }\n }\n\n /**\n * Moves the cursor the specified `dx` and `dy` amount (in logical coordinates)\n * @param {number} dx - Amount of cells to horizontally move on\n * @param {number} dy - Amount of cells to vertically move on\n */\n moveCursor(dx, dy) {\n if (this.grid) {\n this.grid.moveCursor(dx, dy, true);\n this.cursorPosChanged();\n }\n }\n\n /**\n * Places the cursor at the specified location (in logical coordinates)\n * @param {number} x\n * @param {number} y\n */\n setCursorAt(x, y) {\n this.grid.setCursorAt(x, y, true);\n this.cursorPosChanged();\n }\n\n /**\n * Method called when the cursor moves to a different location\n */\n cursorPosChanged() {\n const pt = this.grid.getCursor();\n if (pt !== null && this.style !== null) {\n const items = this.grid.getItemFor(pt.x, pt.y);\n if (items !== null) {\n this.hClue.setContent(this.act.abc['acrossClues'].getActiveBoxContentWith(pt.y, items.x));\n this.vClue.setContent(this.act.abc['downClues'].getActiveBoxContentWith(pt.x, items.y));\n }\n }\n }\n\n /**\n * Writes a string on the grid starting at the current cursor position and\n * following the direction marked by the `advance` field\n * @param {string} txt - Text to write\n */\n writeChars(txt) {\n if (txt && txt.length > 0) {\n for (let i = 0; i < txt.length; i++) {\n const cur = this.grid.getCursor();\n let ch = txt.charAt(i);\n if (this.act.upperCase)\n ch = ch.toLocaleUpperCase();\n this.grid.setCharAt(cur.x, cur.y, ch);\n const\n ok = this.grid.isCellOk(cur.x, cur.y, this.act.checkCase),\n r = this.getCurrentScore();\n this.ps.reportNewAction(this.act, 'WRITE', ch, `X:${cur.x} Y:${cur.y}`, ok, r);\n // End activity or play event sound\n if (r === this.numLetters) {\n this.grid.setCursorEnabled(false);\n this.grid.stopCursorBlink();\n this.finishActivity(true);\n } else {\n this.playEvent('click');\n if (this.advance === 'ADVANCE_DOWN')\n this.moveCursor(0, 1);\n else if (this.advance === 'ADVANCE_RIGHT')\n this.moveCursor(1, 0);\n }\n }\n }\n this.update();\n }\n\n /**\n * Sets the status of horizontal and vertical buttons based on the value of `advance`\n */\n setBtnStatus() {\n if (this.hClueBtn)\n this.hClueBtn.setInactive(this.advance !== 'ADVANCE_RIGHT');\n if (this.vClueBtn)\n this.vClueBtn.setInactive(this.advance !== 'ADVANCE_DOWN');\n }\n}\n\nObject.assign(CrossWordPanel.prototype, {\n /**\n * The default width of the 'Horizontal' and 'Vertical' buttons (currently 40 pixels)\n * @name module:activities/textGrid/CrossWord.CrossWordPanel#LABEL_WIDTH\n * @type {number} */\n LABEL_WIDTH: 40,\n /**\n * The text grid of this ActivityPanel\n * @name module:activities/textGrid/CrossWord.CrossWordPanel#grid\n * @type {module:boxes/TextGrid.TextGrid} */\n grid: null,\n /**\n * A BoxBag used to place the across and down clues, and the `toggle direction` button.\n * @name module:activities/textGrid/CrossWord.CrossWordPanel#style\n * @type {module:boxes/BoxBag.BoxBag} */\n style: null,\n /**\n * The total number of letters of this cross word\n * @name module:activities/textGrid/CrossWord.CrossWordPanel#numLetters\n * @type {number} */\n numLetters: 0,\n /**\n * Flag indicating the type of automatic advance of the cursor.\n * Possible values are: `NO_ADVANCE` (default), 'ADVANCE_RIGHT' and 'ADVANCE_DOWN'.\n * TODO: Implement 'ADVANCE_LEFT' for LTR languages\n * @name module:activities/textGrid/CrossWord.CrossWordPanel#advance\n * @type {string} */\n advance: 'NO_ADVANCE',\n /**\n * The ActiveBox object used to display the 'across' clues\n * @name module:activities/textGrid/CrossWord.CrossWordPanel#hClue\n * @type {module:boxes/ActiveBox.ActiveBox} */\n hClue: null,\n /**\n * The ActiveBox object used to display the 'down' clues\n * @name module:activities/textGrid/CrossWord.CrossWordPanel#vClue\n * @type {module:boxes/ActiveBox.ActiveBox} */\n vClue: null,\n /**\n * Button used to set the advance mode to 'ADVANCE_RIGHT'\n * @name module:activities/textGrid/CrossWord.CrossWordPanel#hClueBtn\n * @type {module:boxes/ActiveBox.ActiveBox} */\n hClueBtn: null,\n /**\n * Button used to set the advance mode to 'ADVANCE_BOTTOM'\n * @name module:activities/textGrid/CrossWord.CrossWordPanel#vClueBtn\n * @type {module:boxes/ActiveBox.ActiveBox} */\n vClueBtn: null,\n /**\n * Mouse and touch events intercepted by this panel\n * @override\n * @name module:activities/textGrid/CrossWord.CrossWordPanel#events\n * @type {string[]} */\n events: ['click', 'keydown', 'keypress'],\n /**\n * Graphic icon for the horizontal direction button, represented as a string containing\n * an SVG file codified in base64.\n * @name module:activities/textGrid/CrossWord.CrossWordPanel#hIcon\n * @type {string} */\n hIcon: svgToURI(hIcon),\n /**\n * Graphic icon for the vertical direction button, represented as a string containing\n * an SVG file codified in base64.\n * @name module:activities/textGrid/CrossWord.CrossWordPanel#vIcon\n * @type {string} */\n vIcon: svgToURI(vIcon),\n /**\n * Sizes of the icons (currently 36 x 36 pixel)\n * @name module:activities/textGrid/CrossWord.CrossWordPanel#icoSize\n * @type {object} */\n icoSize: { w: 36, h: 36 },\n /**\n * BoxBase with the style to be used by the direction buttons.\n * @name module:activities/textGrid/CrossWord.CrossWordPanel#icoBB\n * @type {module:boxes/BoxBase.BoxBase} */\n icoBB: new BoxBase().set('backColor', '#4285F4').set('inactiveColor', '#70A2F6').set('dontFill', true)\n});\n\n/**\n * Panel class associated to this type of activity: {@link module:activities/textGrid/CrossWord.CrossWordPanel CrossWordPanel}\n * @type {class} */\nCrossWord.Panel = CrossWordPanel;\n\n// Register activity class\nexport default Activity.registerClass('@textGrid.CrossWord', CrossWord);\n","/**\n * File : boxes/BoxBag.js\n * Created : 21/04/2015\n * By : Francesc Busquets <francesc@gmail.com>\n *\n * JClic.js\n * An HTML5 player of JClic activities\n * https://projectestac.github.io/jclic.js\n *\n * @source https://github.com/projectestac/jclic.js\n *\n * @license EUPL-1.2\n * @licstart\n * (c) 2000-2020 Catalan Educational Telematic Network (XTEC)\n *\n * Licensed under the EUPL, Version 1.1 or -as soon they will be approved by\n * the European Commission- subsequent versions of the EUPL (the \"Licence\");\n * You may not use this work except in compliance with the Licence.\n *\n * You may obtain a copy of the Licence at:\n * https://joinup.ec.europa.eu/software/page/eupl\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the Licence is distributed on an \"AS IS\" basis, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * Licence for the specific language governing permissions and limitations\n * under the Licence.\n * @licend\n * @module\n */\n\nimport AbstractBox from './AbstractBox.js';\nimport { Rectangle, Dimension, Point } from '../AWT.js';\nimport { settings } from '../Utils.js';\n\n/**\n * BoxBag is a class derived from {@link module:boxes/AbstractBox.AbstractBox AbstractBox} that contains a collection of \"boxes\"\n * (objects also derived from {@link module:boxes/AbstractBox.AbstractBox AbstractBox}). This class implements methods to add, remove\n * and retrieve boxes, and to manage some of its properties like visibility, status, location and size.\n * @extends module:boxes/AbstractBox.AbstractBox\n */\nexport class BoxBag extends AbstractBox {\n /**\n * BoxBag constructor\n * @param {module:boxes/AbstractBox.AbstractBox} [parent] - The AbstractBox to which this box bag belongs\n * @param {module:AWT.Container} [container] - The container where this box bag is placed.\n * @param {module:boxes/BoxBase.BoxBase} [boxBase] - The object where colors, fonts, border and other graphic properties\n */\n constructor(parent, container, boxBase) {\n // BoxBag extends AbstractBox\n super(parent, container, boxBase);\n this.preferredBounds = new Rectangle();\n this.cells = [];\n }\n\n /**\n * Static method that sets the position and dimension of a `Resizable` object based on a\n * preferred maximum dimension and a margin.\n * @param {module:AWT.Dimension} preferredMaxSize - The preferred maximum size\n * @param {Resizable} rs - A resizable object implementing the methods described in the\n * {@link http://projectestac.github.io/jclic/apidoc/edu/xtec/jclic/boxes/Resizable.html Resizable}\n * interface of JClic. Currently a {@link module:boxes/BoxBag.BoxBag BoxBag} or {@link module:boxes/TextGrid.TextGrid TextGrid}.\n * @param {number} margin - The margin between the available area and the BoxBag\n * @returns {module:AWT.Dimension} - The resulting size of the container\n */\n static layoutSingle(preferredMaxSize, rs, margin) {\n\n // Avoid exceptions when rs is null\n if (!rs)\n return preferredMaxSize;\n\n // optimal, maximal and minimal dimensions\n let\n d = rs.getPreferredSize(),\n minSize = rs.getMinimumSize(),\n maxSize = preferredMaxSize;\n\n // remove margins\n maxSize.width -= 2 * margin;\n maxSize.height -= 2 * margin;\n // correct maxSize if less than minSize\n if (minSize.width > maxSize.width || minSize.height > maxSize.height) {\n maxSize = minSize;\n }\n // compute scale factor\n let scale = d.width > maxSize.width ? maxSize.width / d.width : 1;\n if (scale * d.height > maxSize.height)\n scale = maxSize.height / d.height;\n\n // resize the `Resizable` object\n d = rs.getScaledSize(scale);\n rs.setBounds(margin, margin, d.width, d.height);\n\n // restore margins\n d.width += 2 * margin;\n d.height += 2 * margin;\n\n return d;\n }\n\n /**\n * Static method that sets the position and dimension of two `Resizable` objects based on a\n * preferred maximum size, a layout schema and a margin.\n * @param {module:AWT.Dimension} desiredMaxSize - The preferred maximum size\n * @param {Resizable} rsA - First resizable object implementing the methods described in the\n * {@link http://projectestac.github.io/jclic/apidoc/edu/xtec/jclic/boxes/Resizable.html Resizable}\n * interface of JClic. Currently a {@link module:boxes/BoxBag.BoxBag BoxBag} or {@link module:boxes/TextGrid.TextGrid TextGrid}.\n * @param {Resizable} rsB - Second resizable object\n * @param {string} boxGridPos - The layout schema. Possible values are:\n * - \"AB\" (_A_ at left, _B_ at right)\n * - \"BA\" (_B_ at left, _A_ at right)\n * - \"AUB\" (_A_ above _B_)\n * - \"BUA\" (_A_ below _B_).\n * @param {number} margin - The margin between the available area and the BoxBag\n * @returns {module:AWT.Dimension} - The resulting size of the container\n */\n static layoutDouble(desiredMaxSize, rsA, rsB, boxGridPos, margin) {\n // number of horizontal and vertical grid lines\n let\n isHLayout = false,\n nbh = 1,\n nbv = 1;\n switch (boxGridPos) {\n case 'AB':\n case 'BA':\n nbh = 2;\n nbv = 1;\n isHLayout = true;\n break;\n case 'AUB':\n case 'BUA':\n nbh = 1;\n nbv = 2;\n isHLayout = false;\n break;\n }\n const\n ra = rsA.getBounds(),\n rb = rsB.getBounds();\n\n // optimal dimensions\n let\n da = rsA.getPreferredSize(),\n db = rsB.getPreferredSize();\n\n const d = new Dimension(\n isHLayout ? da.width + db.width : Math.max(da.width, db.width),\n isHLayout ? Math.max(da.height, db.height) : da.height + db.height\n );\n\n // minimal dimensions\n const\n minSizeA = rsA.getMinimumSize(),\n minSizeB = rsB.getMinimumSize(),\n minSize = new Dimension(\n isHLayout ? minSizeA.width + minSizeB.width : Math.max(minSizeA.width, minSizeB.width),\n isHLayout ? Math.max(minSizeA.height, minSizeB.height) : minSizeA.height + minSizeB.height\n ),\n maxSize = desiredMaxSize;\n\n // remove margins\n maxSize.width -= (1 + nbh) * margin;\n maxSize.height -= (1 + nbv) * margin;\n\n // correct maxSize if less than minSize\n if (minSize.width > maxSize.width || minSize.height > maxSize.height)\n maxSize.setDimension(minSize);\n\n // compute scale factor\n let scale = d.width > maxSize.width ? maxSize.width / d.width : 1;\n if (scale * d.height > maxSize.height)\n scale = maxSize.height / d.height;\n\n //\n // correct possible minimal infractions\n // ...\n // resize\n da = rsA.getScaledSize(scale);\n db = rsB.getScaledSize(scale);\n\n // set margins to center one box relative to the other\n let\n dah = db.width > da.width ? (db.width - da.width) / 2 : 0,\n dbh = da.width > db.width ? (da.width - db.width) / 2 : 0,\n dav = db.height > da.height ? (db.height - da.height) / 2 : 0,\n dbv = da.height > db.height ? (da.height - db.height) / 2 : 0;\n\n switch (boxGridPos) {\n case 'AB':\n rsA.setBounds(margin, margin + dav, da.width, da.height);\n rsB.setBounds(2 * margin + da.width, margin + dbv, db.width, db.height);\n break;\n case 'BA':\n rsB.setBounds(margin, margin + dbv, db.width, db.height);\n rsA.setBounds(2 * margin + db.width, margin + dav, da.width, da.height);\n break;\n case 'AUB':\n rsA.setBounds(margin + dah, margin, da.width, da.height);\n rsB.setBounds(margin + dbh, 2 * margin + da.height, db.width, db.height);\n break;\n case 'BUA':\n rsB.setBounds(margin + dbh, margin, db.width, db.height);\n rsA.setBounds(margin + dah, 2 * margin + db.height, da.width, da.height);\n break;\n default:\n rsA.setBounds(\n Math.round(margin + scale * ra.pos.x),\n Math.round(margin + scale * ra.pos.y),\n da.width, da.height);\n rsB.setBounds(\n Math.round(margin + scale * rb.pos.x),\n Math.round(margin + scale * rb.pos.y),\n da.width, da.height);\n break;\n }\n\n // recompute 'd' adding margins\n const r = new Rectangle(rsA.getBounds());\n r.add(rsB.getBounds());\n d.width = r.dim.width + 2 * margin;\n d.height = r.dim.height + 2 * margin;\n\n return d;\n }\n\n /**\n * Gets the preferred size of this `BoxBag`\n * @returns {module:AWT.Dimension}\n */\n getPreferredSize() {\n return this.preferredBounds.dim;\n }\n\n /**\n * Gets the minimum size requested by this `BoxBag`\n * @returns {module:AWT.Dimension}\n */\n getMinimumSize() {\n const d = this.getPreferredSize();\n return new Dimension(\n Math.max(settings.MIN_CELL_SIZE, d.width),\n Math.max(settings.MIN_CELL_SIZE, d.height));\n }\n\n /**\n * Scales the current size of this box bag, multiplying all values by a specific factor\n * @param {number} scale - The scale factor\n * @returns {module:AWT.Dimension}\n */\n getScaledSize(scale) {\n const d = this.getPreferredSize();\n return new Dimension(Math.round(scale * d.width), Math.round(scale * d.height));\n }\n\n /**\n * Adds an {@link module:boxes/AbstractBox.AbstractBox AbstractBox} to the collection of cells\n * @param {module:boxes/AbstractBox.AbstractBox} bx - The box to add\n */\n addBox(bx) {\n this.cells.push(bx);\n bx.setParent(this);\n\n if (this.cells.length === 1)\n Rectangle.prototype.setBounds.call(this, bx);\n else\n this.add(bx);\n\n this.preferredBounds.setBounds(this.getBounds());\n }\n\n /**\n * Returns the index of a specific box in the `cells` array\n * @param {module:boxes/AbstractBox.AbstractBox} bx\n * @returns {number}\n */\n boxIndex(bx) {\n return bx === null ? -1 : this.cells.indexOf(bx);\n }\n\n /**\n * Returns the box at a specific index in the `cells` array\n * @param {number} n - The index\n * @returns {module:boxes/AbstractBox.AbstractBox}\n */\n getBox(n) {\n return n < 0 || n >= this.cells.length ? null : this.cells[n];\n }\n\n /**\n * Gets the background box\n * @returns {module:boxes/AbstractBox.AbstractBox}\n */\n getBackgroundBox() {\n return this.backgroundBox;\n }\n\n /**\n * Sets the background box\n * @param {module:boxes/AbstractBox.AbstractBox} bx\n */\n setBackgroundBox(bx) {\n this.backgroundBox = bx;\n if (bx !== null) {\n bx.setParent(this);\n bx.isBackground = true;\n }\n // Add the `backgroundbox` rectangle to the global BoxBag rectangle\n Rectangle.prototype.add.call(this, bx);\n this.preferredBounds.setBounds(this.getBounds());\n }\n\n /**\n * Recalculates the total size of this BoxBag (useful after direct additions o deletions of\n * elements in the `cells` array).\n * Updates `preferredBounds` and the current position and size of the box bag.\n */\n recalcSize() {\n let r = this.backgroundBox ? new Rectangle(this.backgroundBox.pos, this.backgroundBox.dim) : null;\n this.cells.forEach(cell => {\n if (!r)\n r = new Rectangle(cell.pos, cell.dim);\n else\n r.add(cell);\n });\n if (!r)\n r = new Rectangle(this.pos.x, this.pos.y, 0, 0);\n this.preferredBounds.setRect(r);\n this.x = r.pos.x;\n this.y = r.pos.y;\n this.dim.width = r.dim.width;\n this.dim.height = r.dim.height;\n }\n\n /**\n * Returns the number of cells stored in this BoxBag\n * @returns {number}\n */\n getNumCells() {\n return this.cells.length;\n }\n\n /**\n * Sets the specified key - value pair to all cells of this bag.\n * @param {string} key - The key to be established\n * @param {any} value - The value, of any type\n */\n setCellAttr(key, value) {\n this.cells.forEach(bx => bx[key] = value);\n if (this.backgroundBox)\n this.backgroundBox[key] = value;\n }\n\n /**\n * Overrides {@link module:boxes/AbstractBox.AbstractBox#setBorder} iterating over all the cells stored in this box bag.\n * @override\n * @param {boolean} newVal - Whether to set or unset the border\n */\n setBorder(newVal) {\n this.cells.forEach(bx => bx.setBorder(newVal));\n }\n\n /**\n * Overrides {@link module:boxes/AbstractBox.AbstractBox#setVisible} iterating over all the cells stored in this box bag.\n * @override\n * @param {boolean} newVal - Whether to set the cells visible or not\n */\n setVisible(newVal) {\n this.cells.forEach(bx => bx.setVisible(newVal));\n }\n\n /**\n * Overrides {@link module:boxes/AbstractBox.AbstractBox#setAlternative} iterating over all the cells stored in this box bag.\n * @override\n * @param {boolean} newVal - Whether to set or unset the cells in \"alternative\" mode\n */\n setAlternative(newVal) {\n super.setAlternative(newVal);\n this.cells.forEach(bx => bx.setAlternative(newVal));\n }\n\n /**\n * Overrides {@link module:boxes/AbstractBox.AbstractBox#setBounds} adjusting the position and size of all cells\n * @override\n * @param {(AWT.Rectangle|number)} rect - An AWT.Rectangle object, or the `x` coordinate of the\n * upper-left corner of a new rectangle.\n * @param {number} [ry] - `y` coordinate of the upper-left corner of the new rectangle.\n * @param {number} [rw] - Width of the new rectangle.\n * @param {number} [rh] - Height of the new rectangle.\n */\n setBounds(rect, ry, rw, rh) {\n if (typeof rect === 'number') {\n // Arguments are co-ordinates and size\n rect = new Rectangle(rect, ry, rw, rh);\n }\n if (rect.getSurface() > 0 && !rect.equals(this)) {\n const\n scaleW = rect.dim.width / this.dim.width,\n scaleH = rect.dim.height / this.dim.height,\n dx = rect.pos.x - this.pos.x,\n dy = rect.pos.y - this.pos.y;\n this.cells.forEach(bx => {\n const p = new Point(bx.pos.x - this.pos.x, bx.pos.y - this.pos.y);\n bx.setBounds(\n dx + this.pos.x + scaleW * p.x,\n dy + this.pos.y + scaleH * p.y,\n scaleW * bx.dim.width,\n scaleH * bx.dim.height);\n // Clear pos0\n bx.pos0 = null;\n });\n if (this.backgroundBox !== null) {\n const\n bx = this.backgroundBox,\n p = new Point(bx.pos.x - this.pos.x, bx.pos.y - this.pos.y);\n bx.setBounds(\n dx + this.pos.x + scaleW * p.x,\n dy + this.pos.y + scaleH * p.y,\n scaleW * bx.dim.width,\n scaleH * bx.dim.height);\n }\n }\n super.setBounds(rect);\n }\n\n /**\n * Performs graphics operations for each cell.\n * Overrides {@link module:boxes/AbstractBox.AbstractBox#update}\n * @override\n * @param {external:CanvasRenderingContext2D} ctx - The canvas rendering context used to draw the\n * box contents.\n * @param {module:AWT.Rectangle} [dirtyRegion] - The area that must be repainted. `null` refers to the whole box.\n */\n update(ctx, dirtyRegion) {\n if (this.isEmpty() || !this.isVisible() || this.isTemporaryHidden())\n return false;\n\n if (dirtyRegion && !this.intersects(dirtyRegion))\n return false;\n\n if (this.backgroundBox !== null)\n this.backgroundBox.update(ctx, dirtyRegion);\n\n this.cells.forEach(bx => {\n if (!bx.isMarked())\n bx.update(ctx, dirtyRegion);\n });\n\n // Make a second loop to repaint marked cells\n this.cells.forEach(bx => {\n if (bx.isMarked())\n bx.update(ctx, dirtyRegion);\n });\n return true;\n }\n\n /**\n * Finds the first visible {@link module:boxes/AbstractBox.AbstractBox AbstractBox} located under the specified point\n * @param {module:AWT.Point} p\n * @returns {module:boxes/AbstractBox.AbstractBox}\n */\n findBox(p) {\n let result = null;\n for (let i = this.cells.length - 1; i >= 0; i--) {\n const bx = this.getBox(i);\n if (bx.isVisible() && bx.contains(p)) {\n result = bx;\n break;\n }\n }\n return result;\n }\n\n /**\n * Count the number of cells of this BoxBag that are in \"inactive\" state\n * @returns {number}\n */\n countInactiveCells() {\n return this.cells.reduce((n, bx) => bx.isInactive() ? ++n : n, 0);\n }\n}\n\nObject.assign(BoxBag.prototype, {\n /**\n * The array of cells\n * @name module:boxes/BoxBag.BoxBag#cells\n * @type {module:boxes/AbstractBox.AbstractBox[]} */\n cells: [],\n /**\n * Rectangle containing the preferred bounds of the BoxBag\n * @name module:boxes/BoxBag.BoxBag#preferredBounds\n * @type {module:AWT.Rectangle} */\n preferredBounds: new Rectangle(),\n /**\n * An optional box used as a background by this BoxBag\n * @name module:boxes/BoxBag.BoxBag#backgroundBox\n * @type {module:boxes/AbstractBox.AbstractBox} */\n backgroundBox: null,\n});\n\nexport default BoxBag;\n"],"names":[],"sourceRoot":""}
@@ -1,212 +0,0 @@
1
- "use strict";
2
- exports.id = 5338;
3
- exports.ids = [5338];
4
- exports.modules = {
5
-
6
- /***/ 5338:
7
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
8
-
9
-
10
- // EXPORTS
11
- __webpack_require__.d(__webpack_exports__, {
12
- "default": () => (/* binding */ media_EventSounds)
13
- });
14
-
15
- // UNUSED EXPORTS: EventSounds
16
-
17
- // EXTERNAL MODULE: external "jquery"
18
- var external_jquery_ = __webpack_require__(7750);
19
- var external_jquery_default = /*#__PURE__*/__webpack_require__.n(external_jquery_);
20
- // EXTERNAL MODULE: ./src/media/EventSoundsElement.js
21
- var EventSoundsElement = __webpack_require__(6579);
22
- // EXTERNAL MODULE: ./src/Utils.js
23
- var Utils = __webpack_require__(1253);
24
- ;// ./src/media/sounds/start.mp3
25
- const start_namespaceObject = "data:audio/mpeg;base64,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";
26
- ;// ./src/media/sounds/click.mp3
27
- const click_namespaceObject = "data:audio/mpeg;base64,//NAxAASsyJgIUEQAY///gX8///yfyHO/8hCEafoRp3nPQgAAEUAABBCEIT//QhCKQhNGyEIQhCNITU5//OQhCN7f/yEZQAAIynOc5CEIhGnABGY/4gAIQZ4h4h4d3Z2Z9Jba5XWhWP/80LEEBhJOxcfiUAC9BEda+oiKFQsViiMpvHFC98pLjySjUNeKoYxMpwIT21HmHlEhx83A9K5vDAuZUQxzq7nJPgEVWKQZ1Iu5oJH3UpGObWV/MfAgLC4Z/yhP/ULKnqHd/syOQenhOL/80DEChZpZs7rzBgAT3bBWub0T/xNtn9nY5bvQdCA0TvnpXNC7EJ3iRPtebJ//7xK4IAqIii2AKbfkBAJxATDLN7wiUGv6VANBNjqQwGCayGoaBAJaNC79/z5wP2IuJbfZsNFgBVo7P/zQsQLF0lGxvRJhlQVDyEmYldHXJGadquTRs6aYmq9VY1hqqt6xmqts2zGTvGNrl+u1IMBHREJREbkpaFQkFRoa2FYSDvBp6DwSf1lgFqfkQ0JcRCYlKxKg0eEw8sKqgaEogGBH3EZpv/zQMQJEyEudaoIBoAf+HV2UBjoOsP2/IwrkezQ1Y4e2wVxgxlVAqDQUSRUBRU6LrBY1lvxEdUBWBIOnZWOCrvlVnTsltWNOqPP4seUBcKgKpW44m3GkHLjaBS4ohHZdTGi6FXXVo6+//NCxBcNYAYyWAhEAJ3U+j3uXdl1z1Du30fCySCGablvUTrhwggLTomAAmrWsmWY9ym89ZcvlwX/zf+a95ZLwXOar/LNrJ60LUl25Hs58yKRWIjSbt9DCIs0UtF/TOlm2cyNTpKysuCB//NAxD0Rw1YliAhHPdmd9nYYQOsGCgAfmqIAXlnhbNZeUBQvyL/y6NlP/r1LLlEiSPL/7lE9SirM5zxZEwCseMDL330yrtl8/8jJs6mt5dTloYsvNSGbmTkYQhpVpRpCG1yr9YSfr1b/80LEURFLZiWQCEc8v/rLXPzys+Z9z8v+H9qyCMpGLn3bla9qtcxYZXk9cbOUjb8t0q2ytz79ImM1R0ht3QdWK11myihIpt8SZBRAlbWq3CDpDKWUte/VHgJDH6k+lsqSPbRj+pHWWrL/80DEZxKjYh2ICIfhxIKhMBeLPjgKlFRIKjCxIKjCukkFAKCSCxFtgTAQFIkisqIg2EngUVFg8FQCQUxBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/zQsR3EnAF9kgARgBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==";
28
- ;// ./src/media/sounds/actionOk.mp3
29
- const actionOk_namespaceObject = "data:audio/mpeg;base64,//NAxAAT+gKmPUFoAI81KAANYQZECuQAASjAD820006kC+buYDgGEGEKIcsCYAUQYA6JeI2JmS5wcY5yXL6b1IJpp6kG////9X+h/oaaaadAvpvBA5/9QIDQQOQ+cbQllsQQAKTggvn/80LECxdCcupdjFACwA8cFoNFZuosRJUe3E48kEhWIRueePjSdR4T9XMQ4SwB/BZ1GQNAtHHOPzOFryImV2zlb//rZV/6MYp56IY00sPgvi5vp1NN///3Q4ZlSUVV6wAAHLn//b/+Bv3/80DEChbo7s5fmGgA8cDgPEdPslrmVdkwdsV66+p2vZktFECYbF0sxMc6XTyGfU7omIDWqTLdIdocopcSHkqkN/1OLnGEiTI5lQIHz6F//h8+Aw////SWn6Ai////RQCALJttttthGP/zQsQJFgLXBl+PUAJpUBpuDr/a/Bn7vbuBpTSaJu9C26HLGnV05pymMa+52rjwoQl9HX5xkseQEWn/zR+C+CGcTN1IQsr/O/6N///////zyotv//Ulb+WNu/4a/G/DAGASAsBQ86QpAv/zQMQNFyqWqFWaUACorGJ3w70JwQXdB1Iw8FBR6w8BkLlXmCwSQKbRFEDGyFEFw/LiWNeT8eOSG/++3///5oEpv5wrF/RmoYsz////+yuLZ55GT//yosfyqj5gugANMBv///+Bt0Bw//NCxAsWul7hv49QAIAcsuZ3XnIKHgXVwYS+wjbgGuEvA8WjfAsaQmNk2QkZh5517ceH7uZegsm5y///0VTDzzDz09dev/6IIMKcL8i/5CSjE3/oqRMBZpmk7R/RgAAbjwkkcZrZNKRG//NAxAwW4j6pudpoAwwbDspelxARGBQ5l21KTHGz7RkyVSuLZ5l3/S9SQ1CutfuvPzIvF4HUFzRXNkiXJVH+pv//mvMTVRJGyT6S29LRao2Wqj///UbLJxLHVPBVD9SWyADnc5p6REf/80LECxb6Uoxe3A7SY0MyGLYtINLEx4dXVEEvywRGZ7pcZEtrkjRpam6yOArCCRZNX/W3WOoGKq04z/0I/nt/UCYZf6GfovMahvTn21oZ7KnY4oNhuRFQuLsBID8cKC5qSQAC9j29EzH/80DECxNZYoT+xuAyRLbuBA8WRBNAN0Eq+mboAV7G62xjgCvi7cM0Ov1kOELDyoy/75RGdB8iaMZJ//S9SaPWe8oonsV4o5NO40K5FG2xNQZo78WcFOwcZjQQYvlIW6mGkh0f0ZiOBv/zQsQYE8jiVBDfVogDF7hUFzGQhTgpeTFkKEeXlL8syjVHZ03ZCDR2nSxR7Pq7np3LRaHB9adBZ07r018kdy3tjTX1KiSqekjtoMGlaAKNEYCZkOHzpZziA0FmwmEDZhMwfvxGWFAY3P/zQMQkE5DaRAjW1ohECprRK1TRrKRtJsNpyJrNfLvndF7g+gSnAyt351B5obyX8r/u//////rqgBmlYGs01hNdBQpEQyNoHhEMuUtgytPS01oLy0hu6NVNabzryYxwzfIqvKPaRFls//NCxDAQ+FYw8gjSKH7tHbMxfJlUtVpIB16SI0SEXBsf68/+/L//zfLll/nmj7F/1pcpZ/+Z3Ur5Eq5WpbM9MfPljxeb9Lamv/nXIuOSkVXJVRmzRxLpVUlMiBhOahamKCgmCgSwVXHX//NAxEgRU1YcAABGvSNI0Nzzp5SNpUj5aE3ZUqAvIkhEnnq1D3/yxFqrceAgEVIho8WKlhKVGBUJHjzvOh0JndVbtdYykkFQmdDoaDqCIaLKTEFNRTMuOTkuNaqqqqqqqqqqqqqqqqr/80LEXRFYBf5ICEYAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=";
30
- ;// ./src/media/sounds/actionError.mp3
31
- const actionError_namespaceObject = "data:audio/mpeg;base64,//M4xAAUuVJUAUgYARcXFz4DgFAeKHAeChiIie7u+iaIibgYuAYGcTz3OIhf/Xd38v+J6J7u+gGBiw8P8PDw8PDHRw8/+O6GADo/h78BEQz8HAHh5+v+A4A6H/8AAEfIiZmZBXlicwVCsWj1//M4xAwYWvL/H4goAHY5EADTzSBEDUpfz/OhTMPGC+NAMWAgfAcAgHFSjhZD1PCRAUQFBjMUxMhGGuOVyndnXzvlH2dGLp+jbHsUykMTTFkX/+ror2841v+k//+MIOdv/GUVmvrpkGSqAYta//M4xAkXMsLmN89oAg/iwxc/bCcqY374+ZYv8ms1WUWQHQlTUFCJgbIjvMcd6K1m71G+ttB9Pt32bR6OptTZxtV0l/ov20P3b9/1/1f0dSCkh7FjKTdSRbQKiRLyBKFroXi7uP0CAvGOAWNk//M4xAsXwr7a/mPUwS+O1HXtgEWD0qvqiuk8xOG4QoqkAU5eFUIMYl8WHoK3Hcq2dx5p5fTjLvlFtLucF2SuaciHhslc4JhNnm5XU2pCS6c3n6+3/9GyFsk+xwWUQmSTumm7e5ggAEWsUBor//M4xAsXCrLXHntO7NUoPTkrtfAzt+Vmc1QDhdvOk4mMiMaxzG9AERpgbNKfJVp0/lfOvjfl9SWj5XpoXfIYVep7R0WTaUAGDj1IkMHy1Oyrfnfq2e37/22fJduLdKpFmVawABglJaFVG03L//M4xA0XurK+5HnLTJeQXpCP4L6DAO1L6jOnPOCx/wVBu4nAIHEgOCbXJbP5R/74hGiwND1iw7BYtTsqM6viJ1aoa14o/kdXwsdo2K6nxravl7al1/t+rUDz4J+IDtW7bbVAX+3gDwiUL8lI//M4xA0Xgq7qVnoO+zaBvGmHeGt1WGsEPh7RWPKQT82FEhiWLGeUlRHjRERFE6UUhhATy9J5Lcv+PM+axpVIkaHDqqvi+yUHdjW3sp2vTv+rav9F/Kt+Lm9QJFdnwrvt7SXHLLMAFKoGoNaO//M4xA4UurLyXkDFT5XYo5iQ9ckoWFh61037WowPpb5NVRWlrUmVVqxmNV/b6q+xuJVfY1VVXfDHvnL7TGOFMb6ifdZf0etaP//lZH6FbyuK5MUAYWLKUvoamjS5tZpdNnrWz2ASUXdsckcS//M4xBoUcVJ4IisMydfHkiAUZzmoyajzSOzOf1T9qlFq+ORkFFeC//HxXOxf/PKPG/CNxYO4+WKbl+Lv4VBQU6KKhP/K/+vK3+WXVv/9SobSZ1b/lb9SshjN9S/Upahjf/LMahjv6qx/DpAR//M4xCcS40IEABDN5DMaqqrVVVjWLGPjH7GpWZ/7dqr47Eq/7HQds4duAxGfzkjUTpoLSIv///qn///YxTAwQIGhyP/u7O/3P2eqNZ2k4so4sp2NFAYhnZ2couBNTEFNRTMuOTkuNVVVVVVV//M4xDoKqz1wDACNy1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV";
32
- ;// ./src/media/sounds/finishedOk.mp3
33
- const finishedOk_namespaceObject = "data:audio/mpeg;base64,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";
34
- ;// ./src/media/sounds/finishedError.mp3
35
- const finishedError_namespaceObject = "data:audio/mpeg;base64,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";
36
- ;// ./src/media/EventSounds.js
37
- /**
38
- * File : media/EventSounds.js
39
- * Created : 01/04/2015
40
- * By : Francesc Busquets <francesc@gmail.com>
41
- *
42
- * JClic.js
43
- * An HTML5 player of JClic activities
44
- * https://projectestac.github.io/jclic.js
45
- *
46
- * @source https://github.com/projectestac/jclic.js
47
- *
48
- * @license EUPL-1.2
49
- * @licstart
50
- * (c) 2000-2020 Educational Telematic Network of Catalonia (XTEC)
51
- *
52
- * Licensed under the EUPL, Version 1.1 or -as soon they will be approved by
53
- * the European Commission- subsequent versions of the EUPL (the "Licence");
54
- * You may not use this work except in compliance with the Licence.
55
- *
56
- * You may obtain a copy of the Licence at:
57
- * https://joinup.ec.europa.eu/software/page/eupl
58
- *
59
- * Unless required by applicable law or agreed to in writing, software
60
- * distributed under the Licence is distributed on an "AS IS" basis, WITHOUT
61
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
62
- * Licence for the specific language governing permissions and limitations
63
- * under the Licence.
64
- * @licend
65
- * @module
66
- */
67
-
68
-
69
-
70
-
71
-
72
- // Use Webpack to import MP3 files
73
-
74
-
75
-
76
-
77
-
78
-
79
-
80
- /**
81
- * The EventSounds objects contains specific sounds to be played when JClic events are fired:
82
- * - start
83
- * - click
84
- * - actionError
85
- * - actionOk
86
- * - finishedError
87
- * - finishedOk
88
- *
89
- * The sounds are stored in an array of {@link module:media/EventSoundsElement EventSoundsElement} objects.
90
- */
91
- class EventSounds {
92
- /**
93
- * EventSounds constructor
94
- * @param {module:media/EventSounds.EventSounds} [parent] - Another EventSounds object that will act as a parent of this one,
95
- * used to resolve which sound must be played for events when not defined here.
96
- */
97
- constructor(parent) {
98
- if (parent) {
99
- this.elements = Object.assign({}, this.elements, parent.elements);
100
- this.enabled = parent.enabled;
101
- }
102
- }
103
-
104
- /**
105
- * Reads the object properties from an XML element
106
- * @param {external:jQuery} $xml - The XML element to be parsed
107
- */
108
- setProperties($xml) {
109
- this.enabled = (0,Utils/* getTriState */.PD)($xml.attr('enabled'), this.enabled);
110
- $xml.children().each((_n, child) => {
111
- const id = child.getAttribute('id');
112
- this.elements[id] = new EventSoundsElement["default"](id);
113
- this.elements[id].setProperties(external_jquery_default()(child));
114
- });
115
- return this;
116
- }
117
-
118
- /**
119
- * Gets a object with the basic attributes needed to rebuild this instance excluding functions,
120
- * parent references, constants and also attributes retaining the default value.
121
- * The resulting object is commonly usued to serialize elements in JSON format.
122
- * @returns {object} - The resulting object, with minimal attrributes
123
- */
124
- getAttributes() {
125
- return (0,Utils/* getAttr */.iu)(this, [
126
- `enabled|${Utils/* DEFAULT */.qN}`,
127
- 'elements',
128
- ]);
129
- }
130
-
131
- /**
132
- * Reads the properties of this EventSounds from a data object
133
- * @param {object} data - The data object to be parsed
134
- * @returns {module:media/EventSounds.EventSounds}
135
- */
136
- setAttributes(data) {
137
- return (0,Utils/* setAttr */.ob)(this, data, [
138
- 'enabled',
139
- { key: 'elements', fn: EventSoundsElement["default"], group: 'object' },
140
- ]);
141
- }
142
-
143
- /**
144
- * Instantiates the audio objects needed to play event sounds
145
- * @param {module:JClicPlayer.JClicPlayer} ps
146
- * @param {module:bags/MediaBag.MediaBag} mediaBag
147
- */
148
- realize(ps, mediaBag) {
149
- // Values are {EventSoundElement} objects
150
- external_jquery_default().each(this.elements, (key, value) => value.realize(ps, mediaBag));
151
- }
152
-
153
- /**
154
- * Plays a specific event sound
155
- * @param {string} eventName - The identifier of the event to be played
156
- */
157
- play(eventName) {
158
- if (this.globalEnabled && this.enabled) {
159
- const sound = this.elements[eventName];
160
- if (sound && sound.enabled)
161
- sound.play();
162
- }
163
- }
164
- }
165
-
166
- /**
167
- * Audio data for default event sounds
168
- * @name module:media/EventSounds.EventSounds.MEDIA
169
- * @type {object} */
170
- EventSounds.MEDIA = {
171
- start: start_namespaceObject,
172
- click: click_namespaceObject,
173
- actionOk: actionOk_namespaceObject,
174
- actionError: actionError_namespaceObject,
175
- finishedOk: finishedOk_namespaceObject,
176
- finishedError: finishedError_namespaceObject,
177
- };
178
-
179
- Object.assign(EventSounds.prototype, {
180
- /**
181
- * Collection of {@link module:media/EventSoundsElement EventSoundsElement} objects
182
- * @name module:media/EventSounds.EventSounds#elements
183
- * @type {object} */
184
- elements: {
185
- start: new EventSoundsElement["default"]('start', EventSounds.MEDIA.start),
186
- click: new EventSoundsElement["default"]('click', EventSounds.MEDIA.click),
187
- actionOk: new EventSoundsElement["default"]('actionOk', EventSounds.MEDIA.actionOk),
188
- actionError: new EventSoundsElement["default"]('actionError', EventSounds.MEDIA.actionError),
189
- finishedOk: new EventSoundsElement["default"]('finishedOk', EventSounds.MEDIA.finishedOk),
190
- finishedError: new EventSoundsElement["default"]('finishedError', EventSounds.MEDIA.finishedError)
191
- },
192
- /**
193
- * Whether this event sounds are enabled or not
194
- * @name module:media/EventSounds.EventSounds#enabled
195
- * @type {number} */
196
- enabled: Utils/* DEFAULT */.qN,
197
- /**
198
- * This attribute is intended to be used at prototype level, to indicate a globally disabled
199
- * or enabled state.
200
- * @name module:media/EventSounds.EventSounds#globalEnabled
201
- * @type {boolean} */
202
- globalEnabled: true,
203
- });
204
-
205
- /* harmony default export */ const media_EventSounds = (EventSounds);
206
-
207
-
208
- /***/ })
209
-
210
- };
211
- ;
212
- //# sourceMappingURL=5338.jclic-node.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"5338.jclic-node.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEuB;AACkC;AACY;;AAErE;AACuC;AACA;AACM;AACM;AACF;AACM;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,0DAA0D;AACnG;AACO;AACP;AACA;AACA,aAAa,sCAAsC;AACnD;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;;AAEA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA,mBAAmB,6BAAW;AAC9B;AACA;AACA,8BAA8B,6BAAkB;AAChD,sCAAsC,yBAAC;AACvC,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA,WAAW,yBAAO;AAClB,iBAAiB,qBAAO,CAAC;AACzB;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe;AACf;AACA;AACA,WAAW,yBAAO;AAClB;AACA,QAAQ,qBAAqB,6BAAkB,mBAAmB;AAClE;AACA;;AAEA;AACA;AACA,aAAa,gCAAgC;AAC7C,aAAa,+BAA+B;AAC5C;AACA;AACA,mBAAmB,mBAAmB;AACtC,IAAI,8BAAM;AACV;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU,QAAQ;AAClB;AACA,OAAO;AACP,OAAO;AACP,UAAU;AACV,aAAa;AACb,YAAY;AACZ,eAAe;AACf;;AAEA;AACA;AACA,oBAAoB,0DAA0D;AAC9E;AACA,YAAY,QAAQ;AACpB;AACA,eAAe,6BAAkB;AACjC,eAAe,6BAAkB;AACjC,kBAAkB,6BAAkB;AACpC,qBAAqB,6BAAkB;AACvC,oBAAoB,6BAAkB;AACtC,uBAAuB,6BAAkB;AACzC,GAAG;AACH;AACA;AACA;AACA,YAAY,QAAQ;AACpB,WAAW,qBAAO;AAClB;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA,CAAC;;AAED,wDAAe,WAAW,EAAC","sources":["webpack://jclic/./src/media/EventSounds.js"],"sourcesContent":["/**\n * File : media/EventSounds.js\n * Created : 01/04/2015\n * By : Francesc Busquets <francesc@gmail.com>\n *\n * JClic.js\n * An HTML5 player of JClic activities\n * https://projectestac.github.io/jclic.js\n *\n * @source https://github.com/projectestac/jclic.js\n *\n * @license EUPL-1.2\n * @licstart\n * (c) 2000-2020 Educational Telematic Network of Catalonia (XTEC)\n *\n * Licensed under the EUPL, Version 1.1 or -as soon they will be approved by\n * the European Commission- subsequent versions of the EUPL (the \"Licence\");\n * You may not use this work except in compliance with the Licence.\n *\n * You may obtain a copy of the Licence at:\n * https://joinup.ec.europa.eu/software/page/eupl\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the Licence is distributed on an \"AS IS\" basis, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * Licence for the specific language governing permissions and limitations\n * under the Licence.\n * @licend\n * @module\n */\n\nimport $ from 'jquery';\nimport EventSoundsElement from './EventSoundsElement.js';\nimport { getTriState, getAttr, setAttr, DEFAULT } from '../Utils.js';\n\n// Use Webpack to import MP3 files\nimport start from './sounds/start.mp3';\nimport click from './sounds/click.mp3';\nimport actionOk from './sounds/actionOk.mp3';\nimport actionError from './sounds/actionError.mp3';\nimport finishedOk from './sounds/finishedOk.mp3';\nimport finishedError from './sounds/finishedError.mp3';\n\n/**\n * The EventSounds objects contains specific sounds to be played when JClic events are fired:\n * - start\n * - click\n * - actionError\n * - actionOk\n * - finishedError\n * - finishedOk\n *\n * The sounds are stored in an array of {@link module:media/EventSoundsElement EventSoundsElement} objects.\n */\nexport class EventSounds {\n /**\n * EventSounds constructor\n * @param {module:media/EventSounds.EventSounds} [parent] - Another EventSounds object that will act as a parent of this one,\n * used to resolve which sound must be played for events when not defined here.\n */\n constructor(parent) {\n if (parent) {\n this.elements = Object.assign({}, this.elements, parent.elements);\n this.enabled = parent.enabled;\n }\n }\n\n /**\n * Reads the object properties from an XML element\n * @param {external:jQuery} $xml - The XML element to be parsed\n */\n setProperties($xml) {\n this.enabled = getTriState($xml.attr('enabled'), this.enabled);\n $xml.children().each((_n, child) => {\n const id = child.getAttribute('id');\n this.elements[id] = new EventSoundsElement(id);\n this.elements[id].setProperties($(child));\n });\n return this;\n }\n\n /**\n * Gets a object with the basic attributes needed to rebuild this instance excluding functions,\n * parent references, constants and also attributes retaining the default value.\n * The resulting object is commonly usued to serialize elements in JSON format.\n * @returns {object} - The resulting object, with minimal attrributes\n */\n getAttributes() {\n return getAttr(this, [\n `enabled|${DEFAULT}`,\n 'elements',\n ]);\n }\n\n /**\n * Reads the properties of this EventSounds from a data object\n * @param {object} data - The data object to be parsed\n * @returns {module:media/EventSounds.EventSounds}\n */\n setAttributes(data) {\n return setAttr(this, data, [\n 'enabled',\n { key: 'elements', fn: EventSoundsElement, group: 'object' },\n ]);\n }\n\n /**\n * Instantiates the audio objects needed to play event sounds\n * @param {module:JClicPlayer.JClicPlayer} ps\n * @param {module:bags/MediaBag.MediaBag} mediaBag\n */\n realize(ps, mediaBag) {\n // Values are {EventSoundElement} objects\n $.each(this.elements, (key, value) => value.realize(ps, mediaBag));\n }\n\n /**\n * Plays a specific event sound\n * @param {string} eventName - The identifier of the event to be played\n */\n play(eventName) {\n if (this.globalEnabled && this.enabled) {\n const sound = this.elements[eventName];\n if (sound && sound.enabled)\n sound.play();\n }\n }\n}\n\n/**\n * Audio data for default event sounds\n * @name module:media/EventSounds.EventSounds.MEDIA\n * @type {object} */\nEventSounds.MEDIA = {\n start,\n click,\n actionOk,\n actionError,\n finishedOk,\n finishedError,\n};\n\nObject.assign(EventSounds.prototype, {\n /**\n * Collection of {@link module:media/EventSoundsElement EventSoundsElement} objects\n * @name module:media/EventSounds.EventSounds#elements\n * @type {object} */\n elements: {\n start: new EventSoundsElement('start', EventSounds.MEDIA.start),\n click: new EventSoundsElement('click', EventSounds.MEDIA.click),\n actionOk: new EventSoundsElement('actionOk', EventSounds.MEDIA.actionOk),\n actionError: new EventSoundsElement('actionError', EventSounds.MEDIA.actionError),\n finishedOk: new EventSoundsElement('finishedOk', EventSounds.MEDIA.finishedOk),\n finishedError: new EventSoundsElement('finishedError', EventSounds.MEDIA.finishedError)\n },\n /**\n * Whether this event sounds are enabled or not\n * @name module:media/EventSounds.EventSounds#enabled\n * @type {number} */\n enabled: DEFAULT,\n /**\n * This attribute is intended to be used at prototype level, to indicate a globally disabled\n * or enabled state.\n * @name module:media/EventSounds.EventSounds#globalEnabled\n * @type {boolean} */\n globalEnabled: true,\n});\n\nexport default EventSounds;\n"],"names":[],"sourceRoot":""}
@@ -1,229 +0,0 @@
1
- "use strict";
2
- exports.id = 5344;
3
- exports.ids = [5344];
4
- exports.modules = {
5
-
6
- /***/ 5344:
7
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
8
-
9
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
10
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
11
- /* harmony export */ });
12
- /* unused harmony export Encryption */
13
- /**
14
- * File : report/Encryption.js
15
- * Created : 18/06/2015
16
- * By : Francesc Busquets <francesc@gmail.com>
17
- *
18
- * JClic.js
19
- * An HTML5 player of JClic activities
20
- * https://projectestac.github.io/jclic.js
21
- *
22
- * @source https://github.com/projectestac/jclic.js
23
- *
24
- * @license EUPL-1.2
25
- * @licstart
26
- * (c) 2000-2020 Educational Telematic Network of Catalonia (XTEC)
27
- *
28
- * Licensed under the EUPL, Version 1.1 or -as soon they will be approved by
29
- * the European Commission- subsequent versions of the EUPL (the "Licence");
30
- * You may not use this work except in compliance with the Licence.
31
- *
32
- * You may obtain a copy of the Licence at:
33
- * https://joinup.ec.europa.eu/software/page/eupl
34
- *
35
- * Unless required by applicable law or agreed to in writing, software
36
- * distributed under the Licence is distributed on an "AS IS" basis, WITHOUT
37
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
38
- * Licence for the specific language governing permissions and limitations
39
- * under the Licence.
40
- * @licend
41
- * @module
42
- */
43
-
44
- /**
45
- *
46
- * Utilities to encrypt and decrypt strings using simple methods, just to avoid write
47
- * passwords in plain text in data and configuration files. Do not use it as a
48
- * secure cryptographic system!
49
- *
50
- * Based on {@link https://github.com/projectestac/jclic/blob/master/src/utilities/edu/xtec/util/Encryption.java Encryption}
51
- * utilities, created by Albert Llastarri for {@link https://github.com/projectestac/jclic JClic}.
52
- *
53
- * IMPORTANT: This is a shortened version of Encryption with only the methods needed to decrypt
54
- * stored passwords. Full version is on file `src/misc/encryption/Encryption.js`
55
- *
56
- * @abstract
57
- */
58
- class Encryption {
59
- /**
60
- * Decrypts the given code
61
- * @param {string} txt - Code to be decrypted
62
- * @returns {string}
63
- */
64
- static Decrypt(txt) {
65
- if (txt === null || txt.length === 0)
66
- return null;
67
- const s = Encryption.decodify(txt);
68
- return s === Encryption.BLANK ? '' : s;
69
- }
70
-
71
- /**
72
- * @param {string} cA (was char[])
73
- * @param {number} fromIndex
74
- * @returns {string} (was char)
75
- */
76
- static hexCharArrayToChar(cA, fromIndex) {
77
- let n = 0;
78
- for (let i = 0; i <= 3; i++) {
79
- const j = Number.parseInt(cA[fromIndex + i], 16);
80
- if (isNaN(j))
81
- throw 'Invalid expression!';
82
- else
83
- n = n * 16 + j;
84
- }
85
- return String.fromCharCode(n);
86
- }
87
-
88
- /**
89
- * @param {string} cA - (was char[])
90
- * @param {number} fromIndex
91
- * @returns {number}
92
- */
93
- static hexCharArrayToInt(cA, fromIndex) {
94
- let n = 0;
95
- for (let i = 0; i <= 1; i++) {
96
- const j = Number.parseInt(cA[fromIndex + i], 16);
97
- if (isNaN(j))
98
- throw 'Invalid expression!';
99
- else
100
- n = n * 16 + j;
101
- }
102
- return n;
103
- }
104
-
105
- /**
106
- * @param {string} cA - (was char[])
107
- * @returns {string}
108
- */
109
- static decodifyZerosField(cA) {
110
- let
111
- sb = '',
112
- num = Number.parseInt(cA[0], 32),
113
- k = 0,
114
- i = 0;
115
-
116
- for (i = 0; num !== 0; i++) {
117
- while (num > 0) {
118
- sb = sb + cA[i * 3 + 1] + cA[i * 3 + 2];
119
- num--;
120
- k++;
121
- }
122
- if (cA.length > i * 3 + 3)
123
- num = Number.parseInt(cA[i * 3 + 3], 32);
124
- else
125
- num = 0;
126
- }
127
- for (let j = i * 3 + 1; j < cA.length; j++)
128
- sb = sb + cA[j];
129
-
130
- return Number.parseInt(k, 32) + sb;
131
- }
132
-
133
- /**
134
- * @param {string} cA - (was char[])
135
- * @returns {string} (was StringBuilder)
136
- */
137
- static decompressZeros(cA) {
138
- cA = Encryption.decodifyZerosField(cA);
139
- let
140
- numBytesZeros = Number.parseInt(cA[0], 32),
141
- iniNoZeros = numBytesZeros * 2 + 1,
142
- bFi = false,
143
- sb = '';
144
-
145
- for (let i = 0; i < numBytesZeros && !bFi; i++) {
146
- const zeros = Encryption.hexCharArrayToInt(cA, 1 + i * 2);
147
- let s = zeros.toString(2);
148
- while (s.length < 8)
149
- s = '0' + s;
150
- for (let j = 0; j <= 7 && !bFi; j++) {
151
- if (s[j] === '1')
152
- sb = sb + '0';
153
- else if (iniNoZeros < cA.length)
154
- sb = sb + cA[iniNoZeros++];
155
- else
156
- bFi = true;
157
- }
158
- }
159
- return sb;
160
- }
161
-
162
- /**
163
- * @param {string} sb1 - (was StringBuilder)
164
- * @returns {string}
165
- */
166
- static decodifyFromHex(sb1) {
167
- let sb = '', j = 0;
168
- for (let i = 0; j < sb1.length; i++) {
169
- const c = Encryption.hexCharArrayToChar(sb1, j);
170
- sb = sb + c;
171
- j += 4;
172
- }
173
- return sb;
174
- }
175
-
176
- /**
177
- * @param {string} s
178
- * @returns {string} (was char[])
179
- */
180
- static unchangeOrder(s) {
181
- let m = 0, n = s.length - 1;
182
- const cA = [];
183
- for (let p = 0; p < s.length; p++)
184
- cA[p] = '';
185
- for (let i = 0; i < s.length; i++)
186
- if (i % 2 === 0)
187
- cA[i] = s[m++];
188
- else
189
- cA[i] = s[n--];
190
- return cA.join('');
191
- }
192
-
193
- /**
194
- * @param {string} word
195
- * @returns {string}
196
- */
197
- static codify(word) {
198
- if (word.length > 24)
199
- throw 'Password is too large!';
200
- return Encryption.changeOrder(Encryption.compressZeros(Encryption.codifyToHexWord(word)));
201
- }
202
-
203
- /**
204
- * @param {string} word
205
- * @returns {string}
206
- */
207
- static decodify(word) {
208
- try {
209
- return Encryption.decodifyFromHex(Encryption.decompressZeros(Encryption.unchangeOrder(word)));
210
- } catch (_ex) { //The supplied word was not codified using this system
211
- return '';
212
- }
213
- }
214
- }
215
-
216
- /**
217
- * Default bank password
218
- * @type {string}
219
- */
220
- Encryption.BLANK = '___blank___##';
221
-
222
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Encryption);
223
-
224
-
225
- /***/ })
226
-
227
- };
228
- ;
229
- //# sourceMappingURL=5344.jclic-node.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"5344.jclic-node.js","mappings":";;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,+CAA+C,kDAAkD;AACjG;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,aAAa,QAAQ;AACrB,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB,eAAe;AACf;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,QAAQ;AACrB,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,eAAe;AAC3C;;AAEA;AACA;;AAEA;AACA,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,2BAA2B;AAC/C;AACA;AACA;AACA;AACA,sBAAsB,gBAAgB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,QAAQ;AACrB,eAAe;AACf;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,QAAQ;AACrB,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,QAAQ;AACrB,eAAe;AACf;AACA;AACA;AACA;AACA,MAAM,cAAc;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA,iEAAe,UAAU,EAAC","sources":["webpack://jclic/./src/report/EncryptMin.js"],"sourcesContent":["/**\n * File : report/Encryption.js\n * Created : 18/06/2015\n * By : Francesc Busquets <francesc@gmail.com>\n *\n * JClic.js\n * An HTML5 player of JClic activities\n * https://projectestac.github.io/jclic.js\n *\n * @source https://github.com/projectestac/jclic.js\n *\n * @license EUPL-1.2\n * @licstart\n * (c) 2000-2020 Educational Telematic Network of Catalonia (XTEC)\n *\n * Licensed under the EUPL, Version 1.1 or -as soon they will be approved by\n * the European Commission- subsequent versions of the EUPL (the \"Licence\");\n * You may not use this work except in compliance with the Licence.\n *\n * You may obtain a copy of the Licence at:\n * https://joinup.ec.europa.eu/software/page/eupl\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the Licence is distributed on an \"AS IS\" basis, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * Licence for the specific language governing permissions and limitations\n * under the Licence.\n * @licend\n * @module\n */\n\n/**\n *\n * Utilities to encrypt and decrypt strings using simple methods, just to avoid write\n * passwords in plain text in data and configuration files. Do not use it as a\n * secure cryptographic system!\n *\n * Based on {@link https://github.com/projectestac/jclic/blob/master/src/utilities/edu/xtec/util/Encryption.java Encryption}\n * utilities, created by Albert Llastarri for {@link https://github.com/projectestac/jclic JClic}.\n *\n * IMPORTANT: This is a shortened version of Encryption with only the methods needed to decrypt\n * stored passwords. Full version is on file `src/misc/encryption/Encryption.js`\n *\n * @abstract\n */\nexport class Encryption {\n /**\n * Decrypts the given code\n * @param {string} txt - Code to be decrypted\n * @returns {string}\n */\n static Decrypt(txt) {\n if (txt === null || txt.length === 0)\n return null;\n const s = Encryption.decodify(txt);\n return s === Encryption.BLANK ? '' : s;\n }\n\n /**\n * @param {string} cA (was char[])\n * @param {number} fromIndex\n * @returns {string} (was char)\n */\n static hexCharArrayToChar(cA, fromIndex) {\n let n = 0;\n for (let i = 0; i <= 3; i++) {\n const j = Number.parseInt(cA[fromIndex + i], 16);\n if (isNaN(j))\n throw 'Invalid expression!';\n else\n n = n * 16 + j;\n }\n return String.fromCharCode(n);\n }\n\n /**\n * @param {string} cA - (was char[])\n * @param {number} fromIndex\n * @returns {number}\n */\n static hexCharArrayToInt(cA, fromIndex) {\n let n = 0;\n for (let i = 0; i <= 1; i++) {\n const j = Number.parseInt(cA[fromIndex + i], 16);\n if (isNaN(j))\n throw 'Invalid expression!';\n else\n n = n * 16 + j;\n }\n return n;\n }\n\n /**\n * @param {string} cA - (was char[])\n * @returns {string}\n */\n static decodifyZerosField(cA) {\n let\n sb = '',\n num = Number.parseInt(cA[0], 32),\n k = 0,\n i = 0;\n\n for (i = 0; num !== 0; i++) {\n while (num > 0) {\n sb = sb + cA[i * 3 + 1] + cA[i * 3 + 2];\n num--;\n k++;\n }\n if (cA.length > i * 3 + 3)\n num = Number.parseInt(cA[i * 3 + 3], 32);\n else\n num = 0;\n }\n for (let j = i * 3 + 1; j < cA.length; j++)\n sb = sb + cA[j];\n\n return Number.parseInt(k, 32) + sb;\n }\n\n /**\n * @param {string} cA - (was char[])\n * @returns {string} (was StringBuilder)\n */\n static decompressZeros(cA) {\n cA = Encryption.decodifyZerosField(cA);\n let\n numBytesZeros = Number.parseInt(cA[0], 32),\n iniNoZeros = numBytesZeros * 2 + 1,\n bFi = false,\n sb = '';\n\n for (let i = 0; i < numBytesZeros && !bFi; i++) {\n const zeros = Encryption.hexCharArrayToInt(cA, 1 + i * 2);\n let s = zeros.toString(2);\n while (s.length < 8)\n s = '0' + s;\n for (let j = 0; j <= 7 && !bFi; j++) {\n if (s[j] === '1')\n sb = sb + '0';\n else if (iniNoZeros < cA.length)\n sb = sb + cA[iniNoZeros++];\n else\n bFi = true;\n }\n }\n return sb;\n }\n\n /**\n * @param {string} sb1 - (was StringBuilder)\n * @returns {string}\n */\n static decodifyFromHex(sb1) {\n let sb = '', j = 0;\n for (let i = 0; j < sb1.length; i++) {\n const c = Encryption.hexCharArrayToChar(sb1, j);\n sb = sb + c;\n j += 4;\n }\n return sb;\n }\n\n /**\n * @param {string} s\n * @returns {string} (was char[])\n */\n static unchangeOrder(s) {\n let m = 0, n = s.length - 1;\n const cA = [];\n for (let p = 0; p < s.length; p++)\n cA[p] = '';\n for (let i = 0; i < s.length; i++)\n if (i % 2 === 0)\n cA[i] = s[m++];\n else\n cA[i] = s[n--];\n return cA.join('');\n }\n\n /**\n * @param {string} word\n * @returns {string}\n */\n static codify(word) {\n if (word.length > 24)\n throw 'Password is too large!';\n return Encryption.changeOrder(Encryption.compressZeros(Encryption.codifyToHexWord(word)));\n }\n\n /**\n * @param {string} word\n * @returns {string}\n */\n static decodify(word) {\n try {\n return Encryption.decodifyFromHex(Encryption.decompressZeros(Encryption.unchangeOrder(word)));\n } catch (_ex) { //The supplied word was not codified using this system\n return '';\n }\n }\n}\n\n/**\n* Default bank password\n* @type {string}\n*/\nEncryption.BLANK = '___blank___##';\n\nexport default Encryption;\n"],"names":[],"sourceRoot":""}