@oat-sa/tao-core-ui 1.67.0 → 2.0.0

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 (239) hide show
  1. package/README.md +17 -16
  2. package/dist/animable/absorbable/css/absorb.css +25 -29
  3. package/dist/animable/absorbable/css/absorb.css.map +1 -1
  4. package/dist/animable/pulsable/css/pulse.css +20 -23
  5. package/dist/animable/pulsable/css/pulse.css.map +1 -1
  6. package/dist/autocomplete/css/autocomplete.css +20 -21
  7. package/dist/autocomplete/css/autocomplete.css.map +1 -1
  8. package/dist/badge/css/badge.css +67 -79
  9. package/dist/badge/css/badge.css.map +1 -1
  10. package/dist/breadcrumbs/css/breadcrumbs.css +54 -61
  11. package/dist/breadcrumbs/css/breadcrumbs.css.map +1 -1
  12. package/dist/bulkActionPopup/css/bulkActionPopup.css +27 -42
  13. package/dist/bulkActionPopup/css/bulkActionPopup.css.map +1 -1
  14. package/dist/calculator/css/calculator.css +91 -112
  15. package/dist/calculator/css/calculator.css.map +1 -1
  16. package/dist/class/css/selector.css +83 -97
  17. package/dist/class/css/selector.css.map +1 -1
  18. package/dist/component/css/components.css +351 -406
  19. package/dist/component/css/components.css.map +1 -1
  20. package/dist/component/css/windowComponent.css +19 -28
  21. package/dist/component/css/windowComponent.css.map +1 -1
  22. package/dist/contextualPopup/css/contextualPopup.css +42 -55
  23. package/dist/contextualPopup/css/contextualPopup.css.map +1 -1
  24. package/dist/dashboard/css/dashboard.css +43 -57
  25. package/dist/dashboard/css/dashboard.css.map +1 -1
  26. package/dist/datalist/css/datalist.css +63 -88
  27. package/dist/datalist/css/datalist.css.map +1 -1
  28. package/dist/datatable/css/datatable.css +84 -113
  29. package/dist/datatable/css/datatable.css.map +1 -1
  30. package/dist/dateRange/css/dateRange.css +1 -2
  31. package/dist/dateRange/css/dateRange.css.map +1 -1
  32. package/dist/datetime/css/picker.css +71 -103
  33. package/dist/datetime/css/picker.css.map +1 -1
  34. package/dist/destination/css/selector.css +17 -24
  35. package/dist/destination/css/selector.css.map +1 -1
  36. package/dist/documentViewer/css/documentViewer.css +137 -162
  37. package/dist/documentViewer/css/documentViewer.css.map +1 -1
  38. package/dist/dropdown/css/dropdown.css +55 -72
  39. package/dist/dropdown/css/dropdown.css.map +1 -1
  40. package/dist/dynamicComponent/css/dynamicComponent.css +78 -91
  41. package/dist/dynamicComponent/css/dynamicComponent.css.map +1 -1
  42. package/dist/form/css/dropdownForm.css +36 -45
  43. package/dist/form/css/dropdownForm.css.map +1 -1
  44. package/dist/form/css/form.css +12 -16
  45. package/dist/form/css/form.css.map +1 -1
  46. package/dist/form/validator/css/validator.css +5 -7
  47. package/dist/form/validator/css/validator.css.map +1 -1
  48. package/dist/form/widget/css/widget.css +26 -34
  49. package/dist/form/widget/css/widget.css.map +1 -1
  50. package/dist/generis/form/css/form.css +14 -18
  51. package/dist/generis/form/css/form.css.map +1 -1
  52. package/dist/generis/validator/css/validator.css +5 -7
  53. package/dist/generis/validator/css/validator.css.map +1 -1
  54. package/dist/generis/widget/css/widget.css +29 -38
  55. package/dist/generis/widget/css/widget.css.map +1 -1
  56. package/dist/itemButtonList/css/item-button-list.css +135 -172
  57. package/dist/itemButtonList/css/item-button-list.css.map +1 -1
  58. package/dist/listbox/css/listbox.css +64 -84
  59. package/dist/listbox/css/listbox.css.map +1 -1
  60. package/dist/loadingButton/css/button.css +20 -29
  61. package/dist/loadingButton/css/button.css.map +1 -1
  62. package/dist/maths/calculator/basicCalculator.js +4 -4
  63. package/dist/maths/calculator/calculatorComponent.js +22 -25
  64. package/dist/maths/calculator/core/board.js +12327 -720
  65. package/dist/maths/calculator/core/labels.js +7918 -138
  66. package/dist/maths/calculator/core/plugin.js +4 -5
  67. package/dist/maths/calculator/css/calculator.css +224 -270
  68. package/dist/maths/calculator/css/calculator.css.map +1 -1
  69. package/dist/maths/calculator/defaultCalculator.js +10 -6
  70. package/dist/maths/calculator/plugins/keyboard/templateKeyboard/templateKeyboard.js +23 -25
  71. package/dist/maths/calculator/plugins/screen/simpleScreen/simpleScreen.js +7973 -194
  72. package/dist/maths/calculator/scientificCalculator.js +7 -12
  73. package/dist/mediaplayer/css/player.css +281 -370
  74. package/dist/mediaplayer/css/player.css.map +1 -1
  75. package/dist/pagination/css/pagination.css +38 -49
  76. package/dist/pagination/css/pagination.css.map +1 -1
  77. package/dist/propertySelector/css/propertySelector.css +34 -44
  78. package/dist/propertySelector/css/propertySelector.css.map +1 -1
  79. package/dist/resource/css/selector.css +400 -490
  80. package/dist/resource/css/selector.css.map +1 -1
  81. package/dist/resourcemgr/css/resourcemgr.css +192 -237
  82. package/dist/resourcemgr/css/resourcemgr.css.map +1 -1
  83. package/dist/searchModal/css/advancedSearch.css +92 -121
  84. package/dist/searchModal/css/advancedSearch.css.map +1 -1
  85. package/dist/searchModal/css/searchModal.css +261 -333
  86. package/dist/searchModal/css/searchModal.css.map +1 -1
  87. package/dist/switch/css/switch.css +36 -47
  88. package/dist/switch/css/switch.css.map +1 -1
  89. package/dist/tabs/css/tabs.css +32 -40
  90. package/dist/tabs/css/tabs.css.map +1 -1
  91. package/dist/taskQueue/css/taskQueue.css +17 -27
  92. package/dist/taskQueue/css/taskQueue.css.map +1 -1
  93. package/dist/taskQueueButton/css/taskable.css +1 -2
  94. package/dist/taskQueueButton/css/taskable.css.map +1 -1
  95. package/dist/taskQueueButton/css/treeButton.css +20 -26
  96. package/dist/taskQueueButton/css/treeButton.css.map +1 -1
  97. package/dist/tristateCheckboxGroup/css/tristateCheckboxGroup.css +3 -5
  98. package/dist/tristateCheckboxGroup/css/tristateCheckboxGroup.css.map +1 -1
  99. package/dist/waitingDialog/css/waitingDialog.css +18 -23
  100. package/dist/waitingDialog/css/waitingDialog.css.map +1 -1
  101. package/package.json +20 -24
  102. package/scss/inc/_base.scss +9 -8
  103. package/scss/inc/_flex-grid.scss +1 -1
  104. package/scss/inc/_forms.scss +5 -5
  105. package/scss/inc/_functions.scss +8 -8
  106. package/scss/inc/fonts/_tao-icon-classes.scss +230 -230
  107. package/src/animable/absorbable/css/absorb.css +25 -29
  108. package/src/animable/absorbable/css/absorb.css.map +1 -1
  109. package/src/animable/pulsable/css/pulse.css +20 -23
  110. package/src/animable/pulsable/css/pulse.css.map +1 -1
  111. package/src/autocomplete/css/autocomplete.css +20 -21
  112. package/src/autocomplete/css/autocomplete.css.map +1 -1
  113. package/src/badge/css/badge.css +67 -79
  114. package/src/badge/css/badge.css.map +1 -1
  115. package/src/breadcrumbs/css/breadcrumbs.css +54 -61
  116. package/src/breadcrumbs/css/breadcrumbs.css.map +1 -1
  117. package/src/bulkActionPopup/css/bulkActionPopup.css +27 -42
  118. package/src/bulkActionPopup/css/bulkActionPopup.css.map +1 -1
  119. package/src/calculator/css/calculator.css +91 -112
  120. package/src/calculator/css/calculator.css.map +1 -1
  121. package/src/calculator/scss/calculator.scss +1 -1
  122. package/src/class/css/selector.css +83 -97
  123. package/src/class/css/selector.css.map +1 -1
  124. package/src/component/css/components.css +351 -406
  125. package/src/component/css/components.css.map +1 -1
  126. package/src/component/css/windowComponent.css +19 -28
  127. package/src/component/css/windowComponent.css.map +1 -1
  128. package/src/contextualPopup/css/contextualPopup.css +42 -55
  129. package/src/contextualPopup/css/contextualPopup.css.map +1 -1
  130. package/src/css/basic.css +4000 -4374
  131. package/src/css/basic.css.map +1 -1
  132. package/src/dashboard/css/dashboard.css +43 -57
  133. package/src/dashboard/css/dashboard.css.map +1 -1
  134. package/src/datalist/css/datalist.css +63 -88
  135. package/src/datalist/css/datalist.css.map +1 -1
  136. package/src/datatable/css/datatable.css +84 -113
  137. package/src/datatable/css/datatable.css.map +1 -1
  138. package/src/dateRange/css/dateRange.css +1 -2
  139. package/src/dateRange/css/dateRange.css.map +1 -1
  140. package/src/datetime/css/picker.css +71 -103
  141. package/src/datetime/css/picker.css.map +1 -1
  142. package/src/destination/css/selector.css +17 -24
  143. package/src/destination/css/selector.css.map +1 -1
  144. package/src/documentViewer/css/documentViewer.css +137 -162
  145. package/src/documentViewer/css/documentViewer.css.map +1 -1
  146. package/src/dropdown/css/dropdown.css +55 -72
  147. package/src/dropdown/css/dropdown.css.map +1 -1
  148. package/src/dynamicComponent/css/dynamicComponent.css +78 -91
  149. package/src/dynamicComponent/css/dynamicComponent.css.map +1 -1
  150. package/src/form/css/dropdownForm.css +36 -45
  151. package/src/form/css/dropdownForm.css.map +1 -1
  152. package/src/form/css/form.css +12 -16
  153. package/src/form/css/form.css.map +1 -1
  154. package/src/form/validator/css/validator.css +5 -7
  155. package/src/form/validator/css/validator.css.map +1 -1
  156. package/src/form/widget/css/widget.css +26 -34
  157. package/src/form/widget/css/widget.css.map +1 -1
  158. package/src/generis/form/css/form.css +14 -18
  159. package/src/generis/form/css/form.css.map +1 -1
  160. package/src/generis/validator/css/validator.css +5 -7
  161. package/src/generis/validator/css/validator.css.map +1 -1
  162. package/src/generis/widget/css/widget.css +29 -38
  163. package/src/generis/widget/css/widget.css.map +1 -1
  164. package/src/itemButtonList/css/item-button-list.css +135 -172
  165. package/src/itemButtonList/css/item-button-list.css.map +1 -1
  166. package/src/listbox/css/listbox.css +64 -84
  167. package/src/listbox/css/listbox.css.map +1 -1
  168. package/src/listbox/scss/listbox.scss +8 -8
  169. package/src/loadingButton/css/button.css +20 -29
  170. package/src/loadingButton/css/button.css.map +1 -1
  171. package/src/maths/calculator/basicCalculator.js +1 -4
  172. package/src/maths/calculator/calculatorComponent.js +49 -60
  173. package/src/maths/calculator/core/board.js +372 -493
  174. package/src/maths/calculator/core/labels.js +46 -48
  175. package/src/maths/calculator/core/plugin.js +3 -5
  176. package/src/maths/calculator/core/tpl/terms.tpl +7 -1
  177. package/src/maths/calculator/css/calculator.css +224 -270
  178. package/src/maths/calculator/css/calculator.css.map +1 -1
  179. package/src/maths/calculator/defaultCalculator.js +7 -9
  180. package/src/maths/calculator/plugins/keyboard/templateKeyboard/defaultTemplate.tpl +3 -3
  181. package/src/maths/calculator/plugins/keyboard/templateKeyboard/templateKeyboard.js +17 -20
  182. package/src/maths/calculator/plugins/screen/simpleScreen/simpleScreen.js +102 -108
  183. package/src/maths/calculator/scientificCalculator.js +2 -10
  184. package/src/maths/calculator/scss/calculator.scss +20 -7
  185. package/src/maths/calculator/tpl/basicKeyboard.tpl +3 -3
  186. package/src/maths/calculator/tpl/scientificKeyboard.tpl +4 -4
  187. package/src/mediaplayer/css/player.css +281 -370
  188. package/src/mediaplayer/css/player.css.map +1 -1
  189. package/src/pagination/css/pagination.css +38 -49
  190. package/src/pagination/css/pagination.css.map +1 -1
  191. package/src/propertySelector/css/propertySelector.css +34 -44
  192. package/src/propertySelector/css/propertySelector.css.map +1 -1
  193. package/src/resource/css/selector.css +400 -490
  194. package/src/resource/css/selector.css.map +1 -1
  195. package/src/resourcemgr/css/resourcemgr.css +192 -237
  196. package/src/resourcemgr/css/resourcemgr.css.map +1 -1
  197. package/src/searchModal/css/advancedSearch.css +92 -121
  198. package/src/searchModal/css/advancedSearch.css.map +1 -1
  199. package/src/searchModal/css/searchModal.css +261 -333
  200. package/src/searchModal/css/searchModal.css.map +1 -1
  201. package/src/searchModal/scss/searchModal.scss +1 -1
  202. package/src/switch/css/switch.css +36 -47
  203. package/src/switch/css/switch.css.map +1 -1
  204. package/src/tabs/css/tabs.css +32 -40
  205. package/src/tabs/css/tabs.css.map +1 -1
  206. package/src/taskQueue/css/taskQueue.css +17 -27
  207. package/src/taskQueue/css/taskQueue.css.map +1 -1
  208. package/src/taskQueueButton/css/taskable.css +1 -2
  209. package/src/taskQueueButton/css/taskable.css.map +1 -1
  210. package/src/taskQueueButton/css/treeButton.css +20 -26
  211. package/src/taskQueueButton/css/treeButton.css.map +1 -1
  212. package/src/tristateCheckboxGroup/css/tristateCheckboxGroup.css +3 -5
  213. package/src/tristateCheckboxGroup/css/tristateCheckboxGroup.css.map +1 -1
  214. package/src/waitingDialog/css/waitingDialog.css +18 -23
  215. package/src/waitingDialog/css/waitingDialog.css.map +1 -1
  216. package/dist/maths/calculator/core/areaBroker.js +0 -43
  217. package/dist/maths/calculator/core/expression.js +0 -463
  218. package/dist/maths/calculator/core/terms.js +0 -456
  219. package/dist/maths/calculator/core/tokenizer.js +0 -229
  220. package/dist/maths/calculator/core/tokens.js +0 -167
  221. package/dist/maths/calculator/plugins/core/degrad.js +0 -71
  222. package/dist/maths/calculator/plugins/core/history.js +0 -149
  223. package/dist/maths/calculator/plugins/core/remind.js +0 -76
  224. package/dist/maths/calculator/plugins/core/stepNavigation.js +0 -148
  225. package/dist/maths/calculator/plugins/modifiers/pow10.js +0 -136
  226. package/dist/maths/calculator/plugins/modifiers/sign.js +0 -314
  227. package/dist/maths/calculator/pluginsLoader.js +0 -47
  228. package/src/maths/calculator/core/areaBroker.js +0 -38
  229. package/src/maths/calculator/core/expression.js +0 -430
  230. package/src/maths/calculator/core/terms.js +0 -459
  231. package/src/maths/calculator/core/tokenizer.js +0 -245
  232. package/src/maths/calculator/core/tokens.js +0 -178
  233. package/src/maths/calculator/plugins/core/degrad.js +0 -90
  234. package/src/maths/calculator/plugins/core/history.js +0 -166
  235. package/src/maths/calculator/plugins/core/remind.js +0 -96
  236. package/src/maths/calculator/plugins/core/stepNavigation.js +0 -175
  237. package/src/maths/calculator/plugins/modifiers/pow10.js +0 -143
  238. package/src/maths/calculator/plugins/modifiers/sign.js +0 -339
  239. package/src/maths/calculator/pluginsLoader.js +0 -46
@@ -13,35 +13,29 @@
13
13
  * along with this program; if not, write to the Free Software
14
14
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15
15
  *
16
- * Copyright (c) 2018 Open Assessment Technologies SA ;
16
+ * Copyright (c) 2018-2023 Open Assessment Technologies SA ;
17
17
  */
18
18
  /**
19
19
  * Plugin that manages a simple screen for the calculator, with configurable layout.
20
- * @author Jean-Sébastien Conan <jean-sebastien@taotesting.com>
21
20
  */
22
21
  import $ from 'jquery';
23
- import _ from 'lodash';
24
22
  import nsHelper from 'util/namespace';
25
23
  import scrollHelper from 'ui/scroller';
26
- import registeredTerms from 'ui/maths/calculator/core/terms';
27
- import expressionHelper from 'ui/maths/calculator/core/expression';
24
+ import { terms, tokensHelper } from '@oat-sa/tao-calculator/dist';
28
25
  import pluginFactory from 'ui/maths/calculator/core/plugin';
29
26
  import historyTpl from 'ui/maths/calculator/plugins/screen/simpleScreen/history';
30
27
  import defaultScreenTpl from 'ui/maths/calculator/plugins/screen/simpleScreen/defaultTemplate';
31
28
 
32
- var pluginName = 'simpleScreen';
33
-
34
- /**
35
- * Default displayed value
36
- * @type {String}
37
- */
38
- var defaultExpression = '0';
29
+ const pluginName = 'simpleScreen';
30
+ const lastResultVariable = terms.VAR_ANS.value;
31
+ const errorValue = terms.ERROR.value;
32
+ const defaultExpression = '0';
39
33
 
40
34
  /**
41
35
  * Default plugin config
42
- * @type {Object}
36
+ * @type {object}
43
37
  */
44
- var defaultConfig = {
38
+ const defaultConfig = {
45
39
  // the layout of the screen
46
40
  layout: defaultScreenTpl,
47
41
 
@@ -49,6 +43,26 @@ var defaultConfig = {
49
43
  decimalDigits: 5
50
44
  };
51
45
 
46
+ /**
47
+ * Auto scroll to the last child of a container
48
+ * @param {jQuery} $container
49
+ * @param {string} [sel]
50
+ */
51
+ function autoScroll($container, sel) {
52
+ scrollHelper.scrollTo($container.find(':last-child ' + (sel || '')), $container);
53
+ }
54
+
55
+ /**
56
+ * Renders HTML into a container and make sure the last child is visible.
57
+ * @param {jQuery} $container
58
+ * @param {string} html
59
+ * @param {string} [sel]
60
+ */
61
+ function renderHtml($container, html, sel) {
62
+ $container.html(html);
63
+ autoScroll($container, sel);
64
+ }
65
+
52
66
  export default pluginFactory(
53
67
  {
54
68
  name: pluginName,
@@ -56,134 +70,114 @@ export default pluginFactory(
56
70
  /**
57
71
  * Called when the plugin should be initialized.
58
72
  */
59
- init: function init() {
60
- var calculator = this.getCalculator();
61
-
62
- /**
63
- * Reset the current expression
64
- */
65
- function reset() {
66
- calculator.replace(calculator.getConfig().expression || defaultExpression);
67
- }
68
-
69
- reset();
70
-
71
- calculator
72
- .after(nsHelper.namespaceAll('expressionchange', pluginName), function (expression) {
73
- // ensure the displayed expression is at least a 0 (never be an empty string)
74
- if (!expression.trim()) {
75
- _.defer(reset);
76
- }
77
- })
78
- .after(nsHelper.namespaceAll('evaluate', pluginName), function () {
79
- // when the expression is computed, replace it with the result as a variable
80
- calculator.replace(registeredTerms.ANS.value);
81
- })
82
- .on(nsHelper.namespaceAll('clear', pluginName), reset);
73
+ init() {
74
+ // required by the plugin factory to validate this plugin
83
75
  },
84
76
 
85
77
  /**
86
78
  * Called when the plugin should be rendered.
87
79
  */
88
- render: function render() {
89
- var self = this;
90
- var calculator = this.getCalculator();
91
- var areaBroker = calculator.getAreaBroker();
92
- var pluginConfig = this.getConfig();
93
- var tokenizer = calculator.getTokenizer();
94
-
95
- /**
96
- * Auto scroll to the last child of a container
97
- * @param {jQuery} $container
98
- * @param {String} [sel]
99
- */
100
- function autoScroll($container, sel) {
101
- scrollHelper.scrollTo($container.find(':last-child ' + (sel || '')), $container);
102
- }
80
+ render() {
81
+ const calculator = this.getCalculator();
82
+ const engine = calculator.getCalculator();
83
+ const areaBroker = calculator.getAreaBroker();
84
+ const pluginConfig = this.getConfig();
103
85
 
104
- /**
105
- * Renders the expression into a string
106
- * @param {String|Object|token[]} expression
107
- * @returns {String}
108
- */
109
- function renderExpression(expression) {
110
- var variables = expressionHelper.roundLastResultVariable(
111
- calculator.getVariables(),
112
- pluginConfig.decimalDigits
113
- );
114
- return expressionHelper.render(expression, variables, tokenizer);
115
- }
116
-
117
- /**
118
- * Updates the expression area
119
- * @param {String|Object|token[]} tokens
120
- */
121
- function showExpression(tokens) {
122
- self.controls.$expression.html(renderExpression(tokens));
123
- autoScroll(self.controls.$expression);
86
+ if ('function' !== typeof pluginConfig.layout) {
87
+ throw new TypeError('The screen plugin requires a template to render!');
124
88
  }
125
89
 
126
- if (!_.isFunction(pluginConfig.layout)) {
127
- throw new TypeError('The screen plugin requires a template to render!');
90
+ if (!calculator.getExpression().trim()) {
91
+ calculator.replace(defaultExpression);
128
92
  }
129
93
 
130
94
  this.$layout = $(
131
95
  pluginConfig.layout(
132
- _.defaults(
133
- {
134
- expression: renderExpression(calculator.getTokens())
135
- },
136
- pluginConfig
137
- )
96
+ Object.assign({}, pluginConfig, {
97
+ expression: calculator.renderExpression()
98
+ })
138
99
  )
139
100
  );
101
+ areaBroker.getScreenArea().append(this.$layout);
140
102
 
141
- this.controls = {
142
- $history: this.$layout.find('.history'),
143
- $expression: this.$layout.find('.expression')
144
- };
103
+ const $history = this.$layout.find('.history');
104
+ const $expression = this.$layout.find('.expression');
105
+ const showExpression = tokens => renderHtml($expression, calculator.renderExpression(tokens));
106
+ let active = false;
145
107
 
146
108
  calculator
147
- .on(nsHelper.namespaceAll('command-clearAll', pluginName), function () {
148
- self.controls.$history.empty();
149
- })
150
- .on(nsHelper.namespaceAll('expressionchange', pluginName), function () {
151
- calculator.setState('error', false);
109
+ .on(nsHelper.namespaceAll('expressionchange', pluginName), () => {
152
110
  showExpression(calculator.getTokens());
153
111
  })
154
- .on(nsHelper.namespaceAll('evaluate', pluginName), function (result) {
155
- self.controls.$history.html(
112
+ .on(nsHelper.namespaceAll('result', pluginName), result => {
113
+ const { error } = engine;
114
+ calculator.setState('error', error);
115
+ active = false;
116
+
117
+ renderHtml(
118
+ $history,
156
119
  historyTpl({
157
- expression: renderExpression(calculator.getTokens()),
158
- result: renderExpression(result)
159
- })
120
+ expression: calculator.renderExpression(),
121
+ result: calculator.renderExpression(result)
122
+ }),
123
+ '.history-result'
160
124
  );
161
- autoScroll(self.controls.$history, '.history-result');
162
- })
163
- .after(nsHelper.namespaceAll('evaluate', pluginName), function (result) {
164
- if (expressionHelper.containsError(result.value)) {
125
+ calculator.replace(lastResultVariable);
126
+
127
+ if (error) {
165
128
  showExpression(result);
166
129
  }
167
130
  })
168
- .on(nsHelper.namespaceAll('syntaxerror', pluginName), function () {
131
+ .on(nsHelper.namespaceAll('command', pluginName), (name, parameter) => {
132
+ if (active || calculator.is('error')) {
133
+ return;
134
+ }
135
+
136
+ if (engine.isInstantMode()) {
137
+ if (name === 'execute') {
138
+ calculator.replace(lastResultVariable);
139
+ }
140
+ return;
141
+ }
142
+
143
+ // The expression is inactive.
144
+ // The result was just calculated, any command invoked now would start a new expression.
145
+ let expr = '';
146
+
147
+ if (name === 'term') {
148
+ // If the invoked command introduces an operator, we want to apply it on the last result.
149
+ const [token] = parameter.split(/\s+/);
150
+ if (tokensHelper.isOperator(terms[token])) {
151
+ expr = lastResultVariable;
152
+ }
153
+ }
154
+
155
+ calculator.replace(expr);
156
+ })
157
+ .on(nsHelper.namespaceAll('clear', pluginName), () => {
158
+ $history.empty();
159
+ calculator.replace(defaultExpression);
160
+ })
161
+ .on(nsHelper.namespaceAll('command clear', pluginName), () => {
162
+ calculator.setState('error', false);
163
+ active = true;
164
+ })
165
+ .on(nsHelper.namespaceAll('syntaxerror', pluginName), () => {
166
+ showExpression(calculator.getExpression() + errorValue);
169
167
  calculator.setState('error', true);
170
- showExpression(calculator.getExpression() + registeredTerms.ERROR.value);
168
+ active = false;
171
169
  });
172
-
173
- areaBroker.getScreenArea().append(this.$layout);
174
170
  },
175
171
 
176
172
  /**
177
173
  * Called when the plugin is destroyed. Mostly when the host is destroyed itself.
178
174
  */
179
- destroy: function destroy() {
180
- var calculator = this.getCalculator();
175
+ destroy() {
181
176
  if (this.$layout) {
182
- this.$layout.off('.' + pluginName).remove();
177
+ this.$layout.off(`.${pluginName}`).remove();
183
178
  this.$layout = null;
184
179
  }
185
- this.controls = null;
186
- calculator.off('.' + pluginName);
180
+ this.getCalculator().off(`.${pluginName}`);
187
181
  }
188
182
  },
189
183
  defaultConfig
@@ -13,16 +13,11 @@
13
13
  * along with this program; if not, write to the Free Software
14
14
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15
15
  *
16
- * Copyright (c) 2018 Open Assessment Technologies SA ;
17
- */
18
- /**
19
- * @author Jean-Sébastien Conan <jean-sebastien@taotesting.com>
16
+ * Copyright (c) 2018-2023 Open Assessment Technologies SA ;
20
17
  */
21
18
  import _ from 'lodash';
22
19
  import __ from 'i18n';
23
20
  import defaultCalculatorFactory from 'ui/maths/calculator/defaultCalculator';
24
- import pluginSign from 'ui/maths/calculator/plugins/modifiers/sign';
25
- import pluginPow10 from 'ui/maths/calculator/plugins/modifiers/pow10';
26
21
  import keyboardTpl from 'ui/maths/calculator/tpl/scientificKeyboard';
27
22
  import screenTpl from 'ui/maths/calculator/tpl/scientificScreen';
28
23
 
@@ -30,7 +25,7 @@ import screenTpl from 'ui/maths/calculator/tpl/scientificScreen';
30
25
  * Default config values
31
26
  * @type {Object}
32
27
  */
33
- var defaultConfig = {
28
+ const defaultConfig = {
34
29
  title: __('Scientific Calculator'),
35
30
  width: 450,
36
31
  height: 400,
@@ -53,9 +48,6 @@ export default function scientificCalculator(config) {
53
48
  return defaultCalculatorFactory(
54
49
  _.merge(
55
50
  {
56
- loadedPlugins: {
57
- modifiers: [pluginSign, pluginPow10]
58
- },
59
51
  calculator: {
60
52
  plugins: {
61
53
  templateKeyboard: {
@@ -67,6 +67,19 @@
67
67
  bottom: -0.5em;
68
68
  }
69
69
 
70
+ [data-type='exponent'] {
71
+ vertical-align: super;
72
+ font-size: 0.75em;
73
+ }
74
+
75
+ [data-type='variable'] {
76
+ font-weight: bold;
77
+ }
78
+
79
+ [data-type='function']:not([data-value*='rt']) {
80
+ padding-right: 0.3em;
81
+ }
82
+
70
83
  .screen,
71
84
  .input {
72
85
  position: relative;
@@ -142,8 +155,8 @@
142
155
  display: inline-block;
143
156
  position: absolute;
144
157
  z-index: 0;
145
- top: calc(50% - #{$calculatorButtonSize / 2} + #{$calculatorButtonPadding});
146
- left: calc(50% - #{$calculatorButtonSize / 2} + #{$calculatorButtonPadding});
158
+ top: calc(50% - #{calc($calculatorButtonSize / 2)} + #{$calculatorButtonPadding});
159
+ left: calc(50% - #{calc($calculatorButtonSize / 2)} + #{$calculatorButtonPadding});
147
160
  width: calc(#{$calculatorButtonSize} - #{$calculatorButtonPadding * 2});
148
161
  height: calc(#{$calculatorButtonSize} - #{$calculatorButtonPadding * 2});
149
162
  }
@@ -190,8 +203,8 @@
190
203
  display: inline-block;
191
204
  position: absolute;
192
205
  z-index: 0;
193
- top: calc(50% - #{$calculatorFontSizeBtnSwitch / 2}em - #{$calculatorSwitchPadding});
194
- bottom: calc(50% - #{$calculatorFontSizeBtnSwitch / 2}em - #{$calculatorSwitchPadding});
206
+ top: calc(50% - #{calc($calculatorFontSizeBtnSwitch / 2)}em - #{$calculatorSwitchPadding});
207
+ bottom: calc(50% - #{calc($calculatorFontSizeBtnSwitch / 2)}em - #{$calculatorSwitchPadding});
195
208
  left: 3px;
196
209
  right: 3px;
197
210
  }
@@ -318,8 +331,8 @@
318
331
  }
319
332
  &.term-operator[data-token='FAC'],
320
333
  &.term-operator[data-token='NEG'] {
321
- margin-left: -$calculatorTermSpace / 2;
322
- margin-right: -$calculatorTermSpace / 2;
334
+ margin-left: calc(-1 * $calculatorTermSpace / 2);
335
+ margin-right: calc(-1 * $calculatorTermSpace / 2);
323
336
  }
324
337
  &.term-operator[data-token='POS'] {
325
338
  display: none;
@@ -341,7 +354,7 @@
341
354
  font-weight: bold;
342
355
  color: $calculatorScreenSpecialTxt;
343
356
  }
344
- &.term-variable[data-token='ANS'] {
357
+ &.term-variable[data-token='VAR_ANS'] {
345
358
  background: $calculatorScreenSpecialBg;
346
359
  padding: 0;
347
360
  margin: 0 #{$calculatorTermSpace * 2};
@@ -2,8 +2,8 @@
2
2
  <div class="row">
3
3
  <button class="key command" data-command="historyUp"><span>{{{labels.HISTORYUP}}}</span></button>
4
4
  <button class="key command" data-command="historyDown"><span>{{{labels.HISTORYDOWN}}}</span></button>
5
- <button class="key command" data-command="stepDeleteLeft"><span>{{{labels.BACKSPACE}}}</span></button>
6
- <button class="key command" data-command="clear"><span>{{{labels.CLEARALL}}}</span></button>
5
+ <button class="key command" data-command="deleteLeft"><span>{{{labels.BACKSPACE}}}</span></button>
6
+ <button class="key command" data-command="clear"><span>{{{labels.RESET}}}</span></button>
7
7
  </div>
8
8
  <div class="row">
9
9
  <button class="key operator" data-command="term" data-param="LPAR"><span>{{{labels.LPAR}}}</span></button>
@@ -35,4 +35,4 @@
35
35
  <button class="key execute" data-command="execute"><span>{{{labels.EXECUTE}}}</span></button>
36
36
  <button class="key operator" data-command="term" data-param="ADD"><span>{{{labels.ADD}}}</span></button>
37
37
  </div>
38
- </div>
38
+ </div>
@@ -6,8 +6,8 @@
6
6
  <span class="spacer">{{{labels.SPACER}}}</span>
7
7
  <button class="key command" data-command="historyUp"><span>{{{labels.HISTORYUP}}}</span></button>
8
8
  <button class="key command" data-command="historyDown"><span>{{{labels.HISTORYDOWN}}}</span></button>
9
- <button class="key command" data-command="stepDeleteLeft"><span>{{{labels.BACKSPACE}}}</span></button>
10
- <button class="key command" data-command="clear"><span>{{{labels.CLEARALL}}}</span></button>
9
+ <button class="key command" data-command="deleteLeft"><span>{{{labels.BACKSPACE}}}</span></button>
10
+ <button class="key command" data-command="clear"><span>{{{labels.RESET}}}</span></button>
11
11
  </div>
12
12
  <div class="row">
13
13
  <button class="key operator" data-command="term" data-param="SIN"><span>{{{labels.SIN}}}</span></button>
@@ -43,7 +43,7 @@
43
43
  <button class="key operator" data-command="term" data-param="SQRT"><span>{{{labels.SQRT}}}</span></button>
44
44
  <button class="key operator" data-command="term" data-param="CBRT"><span>{{{labels.CBRT}}}</span></button>
45
45
  <button class="key operator" data-command="term" data-param="@NTHRT"><span>{{{labels.NTHRT}}}</span></button>
46
- <button class="key operator" data-command="pow10"><span>{{{labels.POW10}}}</span></button>
46
+ <button class="key operator" data-command="term" data-param="TEN POW"><span>{{{labels.POW10}}}</span></button>
47
47
  <button class="key operand" data-command="term" data-param="NUM1"><span>{{{labels.NUM1}}}</span></button>
48
48
  <button class="key operand" data-command="term" data-param="NUM2"><span>{{{labels.NUM2}}}</span></button>
49
49
  <button class="key operand" data-command="term" data-param="NUM3"><span>{{{labels.NUM3}}}</span></button>
@@ -59,4 +59,4 @@
59
59
  <button class="key operand" data-command="term" data-param="DOT"><span>{{{labels.DOT}}}</span></button>
60
60
  <button class="key execute" data-command="execute"><span>{{{labels.EXECUTE}}}</span></button>
61
61
  </div>
62
- </div>
62
+ </div>