@oat-sa/tao-core-ui 1.60.2 → 1.62.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.
- package/LICENSE +339 -339
- package/README.md +23 -18
- package/dist/actionbar.js +393 -410
- package/dist/adder.js +143 -156
- package/dist/animable/absorbable/absorbable.js +208 -211
- package/dist/animable/absorbable/css/absorb.css +7 -8
- package/dist/animable/absorbable/css/absorb.css.map +1 -1
- package/dist/animable/pulsable/css/pulse.css +7 -7
- package/dist/animable/pulsable/css/pulse.css.map +1 -1
- package/dist/animable/pulsable/pulsable.js +174 -174
- package/dist/areaBroker.js +59 -72
- package/dist/autocomplete/css/autocomplete.css +7 -8
- package/dist/autocomplete/css/autocomplete.css.map +1 -1
- package/dist/autocomplete.js +494 -604
- package/dist/autoscroll.js +23 -25
- package/dist/badge/badge.js +201 -199
- package/dist/badge/css/badge.css +7 -8
- package/dist/badge/css/badge.css.map +1 -1
- package/dist/breadcrumbs/css/breadcrumbs.css +7 -7
- package/dist/breadcrumbs/css/breadcrumbs.css.map +1 -1
- package/dist/breadcrumbs.js +286 -285
- package/dist/btngrouper.js +83 -95
- package/dist/bulkActionPopup/css/bulkActionPopup.css +7 -7
- package/dist/bulkActionPopup/css/bulkActionPopup.css.map +1 -1
- package/dist/bulkActionPopup.js +503 -503
- package/dist/button.js +300 -293
- package/dist/calculator/css/calculator.css +10 -10
- package/dist/calculator/css/calculator.css.map +1 -1
- package/dist/calculator.js +59 -72
- package/dist/cascadingComboBox.js +257 -256
- package/dist/ckeditor/ckConfigurator.js +130 -154
- package/dist/ckeditor/dtdHandler.js +305 -345
- package/dist/class/css/selector.css +7 -7
- package/dist/class/css/selector.css.map +1 -1
- package/dist/class/selector.js +437 -470
- package/dist/component/alignable.js +97 -121
- package/dist/component/containable.js +53 -58
- package/dist/component/css/components.css +7 -7
- package/dist/component/css/components.css.map +1 -1
- package/dist/component/css/windowComponent.css +7 -7
- package/dist/component/css/windowComponent.css.map +1 -1
- package/dist/component/draggable.js +34 -36
- package/dist/component/placeable.js +84 -102
- package/dist/component/resizable.js +79 -89
- package/dist/component/stackable.js +21 -27
- package/dist/component/windowed.js +284 -297
- package/dist/component.js +439 -467
- package/dist/container.js +79 -98
- package/dist/contextualPopup/css/contextualPopup.css +7 -7
- package/dist/contextualPopup/css/contextualPopup.css.map +1 -1
- package/dist/contextualPopup.js +417 -436
- package/dist/dashboard/css/dashboard.css +7 -7
- package/dist/dashboard/css/dashboard.css.map +1 -1
- package/dist/dashboard.js +302 -305
- package/dist/datalist/css/datalist.css +7 -7
- package/dist/datalist/css/datalist.css.map +1 -1
- package/dist/datalist.js +783 -791
- package/dist/datatable/css/datatable.css +11 -7
- package/dist/datatable/css/datatable.css.map +1 -1
- package/dist/datatable/filterStrategy/filterStrategy.js +28 -30
- package/dist/datatable/filterStrategy/multiple.js +26 -45
- package/dist/datatable/filterStrategy/single.js +28 -40
- package/dist/datatable.js +1591 -1616
- package/dist/dateRange/css/dateRange.css +7 -7
- package/dist/dateRange/css/dateRange.css.map +1 -1
- package/dist/dateRange/dateRange.js +398 -412
- package/dist/datetime/css/picker.css +7 -7
- package/dist/datetime/css/picker.css.map +1 -1
- package/dist/datetime/picker.js +670 -703
- package/dist/deleter.js +383 -398
- package/dist/destination/css/selector.css +7 -7
- package/dist/destination/css/selector.css.map +1 -1
- package/dist/destination/selector.js +295 -293
- package/dist/dialog/alert.js +30 -32
- package/dist/dialog/confirm.js +29 -32
- package/dist/dialog/confirmDelete.js +223 -221
- package/dist/dialog.js +651 -695
- package/dist/disabler.js +108 -119
- package/dist/documentViewer/css/documentViewer.css +7 -7
- package/dist/documentViewer/css/documentViewer.css.map +1 -1
- package/dist/documentViewer/providers/pdfViewer/fallback/viewer.js +172 -169
- package/dist/documentViewer/providers/pdfViewer/pdfjs/areaBroker.js +32 -29
- package/dist/documentViewer/providers/pdfViewer/pdfjs/findBar.js +523 -564
- package/dist/documentViewer/providers/pdfViewer/pdfjs/pageView.js +376 -393
- package/dist/documentViewer/providers/pdfViewer/pdfjs/pagesManager.js +53 -68
- package/dist/documentViewer/providers/pdfViewer/pdfjs/searchEngine.js +517 -567
- package/dist/documentViewer/providers/pdfViewer/pdfjs/textManager.js +73 -96
- package/dist/documentViewer/providers/pdfViewer/pdfjs/viewer.js +381 -392
- package/dist/documentViewer/providers/pdfViewer/pdfjs/wrapper.js +125 -152
- package/dist/documentViewer/providers/pdfViewer.js +189 -191
- package/dist/documentViewer/viewerFactory.js +76 -81
- package/dist/documentViewer.js +303 -311
- package/dist/dropdown/css/dropdown.css +7 -7
- package/dist/dropdown/css/dropdown.css.map +1 -1
- package/dist/dropdown.js +392 -412
- package/dist/durationer.js +77 -85
- package/dist/dynamicComponent/css/dynamicComponent.css +7 -7
- package/dist/dynamicComponent/css/dynamicComponent.css.map +1 -1
- package/dist/dynamicComponent.js +595 -630
- package/dist/feedback.js +365 -375
- package/dist/figure/FigureStateActive.js +246 -296
- package/dist/filesender.js +44 -54
- package/dist/filter.js +244 -240
- package/dist/form/css/dropdownForm.css +7 -7
- package/dist/form/css/dropdownForm.css.map +1 -1
- package/dist/form/css/form.css +7 -7
- package/dist/form/css/form.css.map +1 -1
- package/dist/form/dropdownForm.js +357 -362
- package/dist/form/form.js +703 -984
- package/dist/form/simpleForm.js +74 -77
- package/dist/form/validator/css/validator.css +7 -7
- package/dist/form/validator/css/validator.css.map +1 -1
- package/dist/form/validator/renderer.js +235 -241
- package/dist/form/validator/validator.js +181 -267
- package/dist/form/widget/css/widget.css +7 -7
- package/dist/form/widget/css/widget.css.map +1 -1
- package/dist/form/widget/definitions.js +27 -28
- package/dist/form/widget/loader.js +16 -16
- package/dist/form/widget/providers/checkBox.js +257 -264
- package/dist/form/widget/providers/comboBox.js +194 -193
- package/dist/form/widget/providers/default.js +44 -50
- package/dist/form/widget/providers/hidden.js +179 -176
- package/dist/form/widget/providers/hiddenBox.js +262 -272
- package/dist/form/widget/providers/radioBox.js +222 -223
- package/dist/form/widget/providers/textArea.js +197 -193
- package/dist/form/widget/providers/textBox.js +36 -37
- package/dist/form/widget/widget.js +480 -508
- package/dist/form.js +12 -17
- package/dist/formValidator/formValidator.js +74 -91
- package/dist/formValidator/highlighters/highlighter.js +43 -51
- package/dist/formValidator/highlighters/message.js +31 -32
- package/dist/formValidator/highlighters/tooltip.js +33 -35
- package/dist/generis/form/css/form.css +7 -7
- package/dist/generis/form/css/form.css.map +1 -1
- package/dist/generis/form/form.js +323 -331
- package/dist/generis/validator/css/validator.css +7 -7
- package/dist/generis/validator/css/validator.css.map +1 -1
- package/dist/generis/validator/validator.js +215 -216
- package/dist/generis/widget/checkBox/checkBox.js +227 -225
- package/dist/generis/widget/comboBox/comboBox.js +189 -183
- package/dist/generis/widget/css/widget.css +7 -7
- package/dist/generis/widget/css/widget.css.map +1 -1
- package/dist/generis/widget/hiddenBox/hiddenBox.js +231 -232
- package/dist/generis/widget/loader.js +21 -23
- package/dist/generis/widget/textBox/textBox.js +178 -172
- package/dist/generis/widget/widget.js +255 -266
- package/dist/groupedComboBox.js +231 -226
- package/dist/groupvalidator.js +30 -34
- package/dist/hider.js +43 -50
- package/dist/highlighter.js +946 -1057
- package/dist/image/ImgStateActive/extractLabel.js +20 -21
- package/dist/image/ImgStateActive/helper.js +21 -25
- package/dist/image/ImgStateActive/initHelper.js +133 -162
- package/dist/image/ImgStateActive/initMediaEditor.js +72 -92
- package/dist/image/ImgStateActive/mediaSizer.js +48 -58
- package/dist/image/ImgStateActive.js +185 -215
- package/dist/incrementer.js +91 -110
- package/dist/inplacer.js +108 -132
- package/dist/interactUtils.js +56 -67
- package/dist/itemButtonList/css/item-button-list.css +23 -24
- package/dist/itemButtonList/css/item-button-list.css.map +1 -1
- package/dist/itemButtonList.js +444 -469
- package/dist/keyNavigation/navigableDomElement.js +124 -158
- package/dist/keyNavigation/navigator.js +235 -312
- package/dist/listbox/css/listbox.css +7 -7
- package/dist/listbox/css/listbox.css.map +1 -1
- package/dist/listbox.js +463 -476
- package/dist/liststyler.js +75 -76
- package/dist/loadingButton/css/button.css +7 -7
- package/dist/loadingButton/css/button.css.map +1 -1
- package/dist/loadingButton/loadingButton.js +219 -218
- package/dist/lock.js +484 -509
- package/dist/login/login.js +471 -486
- package/dist/maths/calculator/basicCalculator.js +247 -242
- package/dist/maths/calculator/calculatorComponent.js +34 -36
- package/dist/maths/calculator/core/areaBroker.js +30 -28
- package/dist/maths/calculator/core/board.js +805 -872
- package/dist/maths/calculator/core/expression.js +500 -518
- package/dist/maths/calculator/core/labels.js +240 -235
- package/dist/maths/calculator/core/plugin.js +20 -20
- package/dist/maths/calculator/core/terms.js +27 -27
- package/dist/maths/calculator/core/tokenizer.js +119 -132
- package/dist/maths/calculator/core/tokens.js +157 -168
- package/dist/maths/calculator/css/calculator.css +7 -7
- package/dist/maths/calculator/css/calculator.css.map +1 -1
- package/dist/maths/calculator/defaultCalculator.js +24 -27
- package/dist/maths/calculator/plugins/core/degrad.js +22 -30
- package/dist/maths/calculator/plugins/core/history.js +55 -67
- package/dist/maths/calculator/plugins/core/remind.js +22 -25
- package/dist/maths/calculator/plugins/core/stepNavigation.js +33 -49
- package/dist/maths/calculator/plugins/keyboard/templateKeyboard/templateKeyboard.js +255 -258
- package/dist/maths/calculator/plugins/modifiers/pow10.js +47 -52
- package/dist/maths/calculator/plugins/modifiers/sign.js +103 -130
- package/dist/maths/calculator/plugins/screen/simpleScreen/simpleScreen.js +288 -293
- package/dist/maths/calculator/pluginsLoader.js +22 -22
- package/dist/maths/calculator/scientificCalculator.js +339 -334
- package/dist/mediaEditor/mediaEditorComponent.js +244 -249
- package/dist/mediaEditor/plugins/mediaAlignment/helper.js +28 -33
- package/dist/mediaEditor/plugins/mediaAlignment/mediaAlignmentComponent.js +228 -236
- package/dist/mediaEditor/plugins/mediaAlignment/style.css +7 -7
- package/dist/mediaEditor/plugins/mediaDimension/helper.js +81 -106
- package/dist/mediaEditor/plugins/mediaDimension/mediaDimensionComponent.js +597 -635
- package/dist/mediaEditor/plugins/mediaDimension/style.css +141 -141
- package/dist/mediaplayer/css/player.css +7 -7
- package/dist/mediaplayer/css/player.css.map +1 -1
- package/dist/mediaplayer/players/html5.js +646 -706
- package/dist/mediaplayer/players/youtube.js +393 -438
- package/dist/mediaplayer/players.js +19 -19
- package/dist/mediaplayer/support.js +66 -79
- package/dist/mediaplayer/utils/reminder.js +117 -128
- package/dist/mediaplayer/utils/timeObserver.js +106 -109
- package/dist/mediaplayer/youtubeManager.js +142 -170
- package/dist/mediaplayer.js +1484 -1774
- package/dist/mediasizer.js +633 -676
- package/dist/modal.js +137 -153
- package/dist/movableComponent.js +37 -37
- package/dist/pageSizeSelector.js +231 -224
- package/dist/pageStatus.js +43 -46
- package/dist/pagination/css/pagination.css +7 -7
- package/dist/pagination/css/pagination.css.map +1 -1
- package/dist/pagination/paginationStrategy.js +24 -25
- package/dist/pagination/providers/pages.js +281 -291
- package/dist/pagination/providers/simple.js +202 -196
- package/dist/pagination.js +49 -72
- package/dist/previewer.js +113 -138
- package/dist/progressbar.js +70 -80
- package/dist/propertySelector/css/propertySelector.css +74 -0
- package/dist/propertySelector/css/propertySelector.css.map +1 -0
- package/dist/propertySelector/propertySelector.js +489 -0
- package/dist/report.js +356 -359
- package/dist/resource/css/selector.css +7 -7
- package/dist/resource/css/selector.css.map +1 -1
- package/dist/resource/filters.js +275 -289
- package/dist/resource/list.js +1589 -1371
- package/dist/resource/selectable.js +101 -136
- package/dist/resource/selector.js +855 -914
- package/dist/resource/tree.js +1796 -1612
- package/dist/resourcemgr/css/resourcemgr.css +7 -7
- package/dist/resourcemgr/css/resourcemgr.css.map +1 -1
- package/dist/resourcemgr/fileBrowser.js +540 -587
- package/dist/resourcemgr/filePreview.js +16 -25
- package/dist/resourcemgr/fileSelector.js +520 -547
- package/dist/resourcemgr/util/updatePermissions.js +10 -18
- package/dist/resourcemgr.js +325 -332
- package/dist/scroller.js +29 -33
- package/dist/searchModal/advancedSearch.js +949 -833
- package/dist/searchModal/css/advancedSearch.css +7 -14
- package/dist/searchModal/css/advancedSearch.css.map +1 -1
- package/dist/searchModal/css/searchModal.css +28 -8
- package/dist/searchModal/css/searchModal.css.map +1 -1
- package/dist/searchModal.js +616 -335
- package/dist/selecter.js +21 -28
- package/dist/stacker.js +52 -60
- package/dist/switch/css/switch.css +7 -7
- package/dist/switch/css/switch.css.map +1 -1
- package/dist/switch/switch.js +305 -311
- package/dist/tableModel.js +39 -49
- package/dist/tabs/css/tabs.css +12 -12
- package/dist/tabs/css/tabs.css.map +1 -1
- package/dist/tabs.js +588 -639
- package/dist/taskQueue/css/taskQueue.css +7 -7
- package/dist/taskQueue/css/taskQueue.css.map +1 -1
- package/dist/taskQueue/status.js +317 -322
- package/dist/taskQueue/table.js +383 -394
- package/dist/taskQueue/taskQueue.js +19 -19
- package/dist/taskQueue/taskQueueModel.js +459 -538
- package/dist/taskQueue.js +49 -67
- package/dist/taskQueueButton/css/taskable.css +7 -7
- package/dist/taskQueueButton/css/taskable.css.map +1 -1
- package/dist/taskQueueButton/css/treeButton.css +7 -7
- package/dist/taskQueueButton/css/treeButton.css.map +1 -1
- package/dist/taskQueueButton/standardButton.js +45 -43
- package/dist/taskQueueButton/taskable.js +267 -272
- package/dist/taskQueueButton/treeButton.js +200 -198
- package/dist/themeLoader.js +109 -129
- package/dist/themes.js +86 -100
- package/dist/toggler.js +76 -88
- package/dist/tooltip.js +296 -311
- package/dist/tooltipster.js +17 -17
- package/dist/transformer.js +140 -169
- package/dist/tristateCheckboxGroup/css/tristateCheckboxGroup.css +7 -7
- package/dist/tristateCheckboxGroup/css/tristateCheckboxGroup.css.map +1 -1
- package/dist/tristateCheckboxGroup.js +319 -325
- package/dist/uploader.js +691 -724
- package/dist/validator/Report.js +1 -2
- package/dist/validator/Validator.js +6 -25
- package/dist/validator/validators.js +66 -80
- package/dist/validator.js +218 -254
- package/dist/waitForMedia.js +45 -51
- package/dist/waitingDialog/css/waitingDialog.css +7 -7
- package/dist/waitingDialog/css/waitingDialog.css.map +1 -1
- package/dist/waitingDialog/waitingDialog.js +59 -77
- package/package.json +109 -107
- package/scss/basic.scss +16 -16
- package/scss/ckeditor/skins/tao/scss/inc/_ck-icons.scss +59 -59
- package/scss/ckeditor/skins/tao/scss/inc/_tao.scss +59 -59
- package/scss/font/tao/tao.svg +234 -234
- package/scss/inc/_base.scss +495 -495
- package/scss/inc/_bootstrap.scss +6 -6
- package/scss/inc/_buttons.scss +114 -114
- package/scss/inc/_colors.scss +93 -88
- package/scss/inc/_feedback.scss +150 -150
- package/scss/inc/_flex-grid.scss +15 -15
- package/scss/inc/_fonts.scss +4 -4
- package/scss/inc/_forms.scss +832 -832
- package/scss/inc/_functions.scss +283 -283
- package/scss/inc/_jquery.nouislider.scss +254 -254
- package/scss/inc/_normalize.scss +528 -528
- package/scss/inc/_report.scss +67 -67
- package/scss/inc/_secondary-properties.scss +89 -89
- package/scss/inc/_select2.scss +634 -634
- package/scss/inc/_toolbars.scss +155 -155
- package/scss/inc/_tooltip.scss +312 -312
- package/scss/inc/_variables.scss +21 -21
- package/scss/inc/base/_highlight.scss +5 -5
- package/scss/inc/base/_list-style.scss +58 -58
- package/scss/inc/base/_svg.scss +3 -3
- package/scss/inc/base/_table.scss +62 -62
- package/scss/inc/fonts/_source-sans-pro.scss +29 -29
- package/scss/inc/fonts/_tao-icon-classes.scss +226 -226
- package/scss/inc/fonts/_tao-icon-def.scss +12 -12
- package/scss/inc/fonts/_tao-icon-vars.scss +240 -240
- package/src/actionbar/tpl/main.tpl +8 -8
- package/src/actionbar.js +251 -251
- package/src/adder.js +250 -250
- package/src/animable/absorbable/absorbable.js +134 -134
- package/src/animable/absorbable/css/absorb.css +7 -8
- package/src/animable/absorbable/css/absorb.css.map +1 -1
- package/src/animable/absorbable/scss/absorb.scss +37 -37
- package/src/animable/pulsable/css/pulse.css +7 -7
- package/src/animable/pulsable/css/pulse.css.map +1 -1
- package/src/animable/pulsable/pulsable.js +90 -90
- package/src/animable/pulsable/scss/pulse.scss +22 -22
- package/src/areaBroker.js +160 -160
- package/src/autocomplete/css/autocomplete.css +7 -8
- package/src/autocomplete/css/autocomplete.css.map +1 -1
- package/src/autocomplete/scss/autocomplete.scss +37 -37
- package/src/autocomplete.js +1029 -1029
- package/src/autoscroll.js +57 -57
- package/src/badge/badge.js +119 -119
- package/src/badge/css/badge.css +7 -8
- package/src/badge/css/badge.css.map +1 -1
- package/src/badge/scss/badge.scss +92 -92
- package/src/badge/tpl/badge.tpl +4 -4
- package/src/breadcrumbs/css/breadcrumbs.css +7 -7
- package/src/breadcrumbs/css/breadcrumbs.css.map +1 -1
- package/src/breadcrumbs/scss/breadcrumbs.scss +52 -52
- package/src/breadcrumbs/tpl/breadcrumbs.tpl +20 -20
- package/src/breadcrumbs.js +99 -99
- package/src/btngrouper.js +213 -213
- package/src/bulkActionPopup/css/bulkActionPopup.css +7 -7
- package/src/bulkActionPopup/css/bulkActionPopup.css.map +1 -1
- package/src/bulkActionPopup/scss/bulkActionPopup.scss +63 -63
- package/src/bulkActionPopup/tpl/layout.tpl +76 -76
- package/src/bulkActionPopup/tpl/select.tpl +8 -8
- package/src/bulkActionPopup.js +274 -274
- package/src/button/tpl/button.tpl +4 -4
- package/src/button.js +135 -135
- package/src/calculator/css/calculator.css +10 -10
- package/src/calculator/css/calculator.css.map +1 -1
- package/src/calculator/scss/calculator.scss +139 -139
- package/src/calculator.js +188 -188
- package/src/cascadingComboBox.js +126 -126
- package/src/ckeditor/ckConfigurator.js +736 -736
- package/src/ckeditor/dtdHandler.js +1030 -1030
- package/src/class/css/selector.css +7 -7
- package/src/class/css/selector.css.map +1 -1
- package/src/class/scss/selector.scss +101 -101
- package/src/class/selector.js +329 -329
- package/src/class/tpl/listItem.tpl +9 -9
- package/src/class/tpl/selector.tpl +10 -10
- package/src/component/alignable.js +274 -274
- package/src/component/containable.js +122 -122
- package/src/component/css/components.css +7 -7
- package/src/component/css/components.css.map +1 -1
- package/src/component/css/windowComponent.css +7 -7
- package/src/component/css/windowComponent.css.map +1 -1
- package/src/component/draggable.js +104 -104
- package/src/component/placeable.js +233 -233
- package/src/component/resizable.js +195 -195
- package/src/component/scss/components.scss +507 -507
- package/src/component/scss/windowComponent.scss +62 -62
- package/src/component/stackable.js +67 -67
- package/src/component/tpl/window.tpl +7 -7
- package/src/component/windowed.js +206 -206
- package/src/component.js +401 -401
- package/src/container.js +200 -200
- package/src/contextualPopup/css/contextualPopup.css +7 -7
- package/src/contextualPopup/css/contextualPopup.css.map +1 -1
- package/src/contextualPopup/scss/contextualPopup.scss +78 -78
- package/src/contextualPopup/tpl/popup.tpl +10 -10
- package/src/contextualPopup.js +297 -297
- package/src/css/basic.css +103 -106
- package/src/css/basic.css.map +1 -1
- package/src/dashboard/css/dashboard.css +7 -7
- package/src/dashboard/css/dashboard.css.map +1 -1
- package/src/dashboard/scss/dashboard.scss +93 -93
- package/src/dashboard/tpl/dashboard.tpl +16 -16
- package/src/dashboard/tpl/dashboardMetricsList.tpl +15 -15
- package/src/dashboard.js +184 -184
- package/src/datalist/css/datalist.css +7 -7
- package/src/datalist/css/datalist.css.map +1 -1
- package/src/datalist/scss/datalist.scss +116 -116
- package/src/datalist/tpl/list.tpl +24 -24
- package/src/datalist/tpl/main.tpl +44 -44
- package/src/datalist.js +500 -500
- package/src/datatable/css/datatable.css +11 -7
- package/src/datatable/css/datatable.css.map +1 -1
- package/src/datatable/filterStrategy/filterStrategy.js +70 -70
- package/src/datatable/filterStrategy/multiple.js +126 -126
- package/src/datatable/filterStrategy/single.js +108 -108
- package/src/datatable/scss/datatable.scss +149 -146
- package/src/datatable/tpl/button.tpl +6 -6
- package/src/datatable/tpl/layout.tpl +158 -158
- package/src/datatable.js +1056 -1056
- package/src/dateRange/css/dateRange.css +7 -7
- package/src/dateRange/css/dateRange.css.map +1 -1
- package/src/dateRange/dateRange.js +341 -341
- package/src/dateRange/scss/dateRange.scss +7 -7
- package/src/dateRange/tpl/select.tpl +18 -18
- package/src/datetime/css/picker.css +7 -7
- package/src/datetime/css/picker.css.map +1 -1
- package/src/datetime/picker.js +576 -576
- package/src/datetime/scss/picker.scss +192 -192
- package/src/datetime/tpl/picker.tpl +18 -18
- package/src/deleter/undo.tpl +6 -6
- package/src/deleter.js +296 -296
- package/src/destination/css/selector.css +7 -7
- package/src/destination/css/selector.css.map +1 -1
- package/src/destination/scss/selector.scss +36 -36
- package/src/destination/selector.js +195 -195
- package/src/destination/tpl/selector.tpl +13 -13
- package/src/dialog/alert.js +70 -70
- package/src/dialog/confirm.js +85 -85
- package/src/dialog/confirmDelete.js +95 -95
- package/src/dialog/tpl/body.tpl +24 -24
- package/src/dialog/tpl/buttons.tpl +6 -6
- package/src/dialog/tpl/checkbox.tpl +5 -5
- package/src/dialog.js +517 -517
- package/src/disabler.js +230 -230
- package/src/documentViewer/css/documentViewer.css +7 -7
- package/src/documentViewer/css/documentViewer.css.map +1 -1
- package/src/documentViewer/providers/pdfViewer/fallback/viewer.js +69 -69
- package/src/documentViewer/providers/pdfViewer/pdfjs/areaBroker.js +41 -41
- package/src/documentViewer/providers/pdfViewer/pdfjs/findBar.js +475 -475
- package/src/documentViewer/providers/pdfViewer/pdfjs/findBar.tpl +20 -20
- package/src/documentViewer/providers/pdfViewer/pdfjs/match.tpl +1 -1
- package/src/documentViewer/providers/pdfViewer/pdfjs/page.tpl +4 -4
- package/src/documentViewer/providers/pdfViewer/pdfjs/pageView.js +318 -318
- package/src/documentViewer/providers/pdfViewer/pdfjs/pagesManager.js +167 -167
- package/src/documentViewer/providers/pdfViewer/pdfjs/searchEngine.js +451 -451
- package/src/documentViewer/providers/pdfViewer/pdfjs/textManager.js +252 -252
- package/src/documentViewer/providers/pdfViewer/pdfjs/viewer.js +299 -299
- package/src/documentViewer/providers/pdfViewer/pdfjs/viewer.tpl +16 -16
- package/src/documentViewer/providers/pdfViewer/pdfjs/wrapper.js +351 -351
- package/src/documentViewer/providers/pdfViewer.js +93 -93
- package/src/documentViewer/scss/documentViewer.scss +184 -184
- package/src/documentViewer/viewerFactory.js +191 -191
- package/src/documentViewer.js +238 -238
- package/src/dropdown/css/dropdown.css +7 -7
- package/src/dropdown/css/dropdown.css.map +1 -1
- package/src/dropdown/scss/dropdown.scss +99 -99
- package/src/dropdown/tpl/dropdown.tpl +8 -8
- package/src/dropdown/tpl/list-item.tpl +4 -4
- package/src/dropdown.js +255 -255
- package/src/durationer.js +222 -222
- package/src/dynamicComponent/css/dynamicComponent.css +7 -7
- package/src/dynamicComponent/css/dynamicComponent.css.map +1 -1
- package/src/dynamicComponent/scss/dynamicComponent.scss +98 -98
- package/src/dynamicComponent/tpl/layout.tpl +17 -17
- package/src/dynamicComponent.js +554 -554
- package/src/feedback/feedback.tpl +7 -7
- package/src/feedback.js +295 -295
- package/src/figure/FigureStateActive.js +174 -174
- package/src/filesender.js +114 -114
- package/src/filter/template.tpl +5 -5
- package/src/filter.js +135 -135
- package/src/form/css/dropdownForm.css +7 -7
- package/src/form/css/dropdownForm.css.map +1 -1
- package/src/form/css/form.css +7 -7
- package/src/form/css/form.css.map +1 -1
- package/src/form/dropdownForm.js +281 -281
- package/src/form/form.js +688 -688
- package/src/form/scss/dropdownForm.scss +60 -60
- package/src/form/scss/form.scss +25 -25
- package/src/form/simpleForm.js +125 -125
- package/src/form/tpl/dropdownForm.tpl +4 -4
- package/src/form/tpl/form.tpl +7 -7
- package/src/form/validator/css/validator.css +7 -7
- package/src/form/validator/css/validator.css.map +1 -1
- package/src/form/validator/renderer.js +118 -118
- package/src/form/validator/scss/validator.scss +14 -14
- package/src/form/validator/tpl/message.tpl +1 -1
- package/src/form/validator/tpl/validator.tpl +1 -1
- package/src/form/validator/validator.js +220 -220
- package/src/form/widget/css/widget.css +7 -7
- package/src/form/widget/css/widget.css.map +1 -1
- package/src/form/widget/definitions.js +51 -51
- package/src/form/widget/loader.js +40 -40
- package/src/form/widget/providers/checkBox.js +138 -138
- package/src/form/widget/providers/comboBox.js +63 -63
- package/src/form/widget/providers/default.js +90 -90
- package/src/form/widget/providers/hidden.js +62 -62
- package/src/form/widget/providers/hiddenBox.js +152 -152
- package/src/form/widget/providers/radioBox.js +99 -99
- package/src/form/widget/providers/textArea.js +52 -52
- package/src/form/widget/providers/textBox.js +48 -48
- package/src/form/widget/scss/widget.scss +55 -55
- package/src/form/widget/tpl/checkBox.tpl +25 -25
- package/src/form/widget/tpl/comboBox.tpl +13 -13
- package/src/form/widget/tpl/hidden.tpl +1 -1
- package/src/form/widget/tpl/hiddenBox.tpl +17 -17
- package/src/form/widget/tpl/label.tpl +6 -6
- package/src/form/widget/tpl/radioBox.tpl +25 -25
- package/src/form/widget/tpl/textArea.tpl +8 -8
- package/src/form/widget/tpl/widget.tpl +8 -8
- package/src/form/widget/widget.js +372 -372
- package/src/form.js +53 -53
- package/src/formValidator/formValidator.js +253 -253
- package/src/formValidator/highlighters/highlighter.js +102 -102
- package/src/formValidator/highlighters/message.js +70 -70
- package/src/formValidator/highlighters/tooltip.js +78 -78
- package/src/generis/form/css/form.css +7 -7
- package/src/generis/form/css/form.css.map +1 -1
- package/src/generis/form/form.js +239 -239
- package/src/generis/form/readme.md +70 -70
- package/src/generis/form/scss/form.scss +23 -23
- package/src/generis/form/tpl/form.tpl +16 -16
- package/src/generis/validator/css/validator.css +7 -7
- package/src/generis/validator/css/validator.css.map +1 -1
- package/src/generis/validator/readme.md +46 -46
- package/src/generis/validator/scss/validator.scss +13 -13
- package/src/generis/validator/validator.js +128 -128
- package/src/generis/widget/checkBox/checkBox.js +112 -112
- package/src/generis/widget/checkBox/checkBox.tpl +18 -18
- package/src/generis/widget/comboBox/comboBox.js +67 -67
- package/src/generis/widget/comboBox/comboBox.tpl +12 -12
- package/src/generis/widget/css/widget.css +7 -7
- package/src/generis/widget/css/widget.css.map +1 -1
- package/src/generis/widget/hiddenBox/hiddenBox.js +132 -132
- package/src/generis/widget/hiddenBox/hiddenBox.tpl +16 -16
- package/src/generis/widget/loader.js +49 -49
- package/src/generis/widget/readme.md +59 -59
- package/src/generis/widget/scss/widget.scss +61 -61
- package/src/generis/widget/textBox/textBox.js +65 -65
- package/src/generis/widget/textBox/textBox.tpl +7 -7
- package/src/generis/widget/widget.js +164 -164
- package/src/generis/widget/widget.tpl +5 -5
- package/src/groupedComboBox.js +99 -99
- package/src/groupvalidator.js +84 -84
- package/src/hider.js +88 -88
- package/src/highlighter.js +1166 -1166
- package/src/image/ImgStateActive/extractLabel.js +29 -29
- package/src/image/ImgStateActive/helper.js +36 -36
- package/src/image/ImgStateActive/initHelper.js +137 -137
- package/src/image/ImgStateActive/initMediaEditor.js +92 -92
- package/src/image/ImgStateActive/mediaSizer.js +63 -63
- package/src/image/ImgStateActive.js +115 -115
- package/src/incrementer.js +319 -319
- package/src/inplacer.js +316 -316
- package/src/interactUtils.js +140 -140
- package/src/itemButtonList/css/item-button-list.css +23 -24
- package/src/itemButtonList/css/item-button-list.css.map +1 -1
- package/src/itemButtonList/scss/item-button-list.scss +236 -236
- package/src/itemButtonList/tpl/itemButtonList.tpl +21 -21
- package/src/itemButtonList.js +274 -274
- package/src/keyNavigation/navigableDomElement.js +282 -282
- package/src/keyNavigation/navigator.js +543 -543
- package/src/listbox/css/listbox.css +7 -7
- package/src/listbox/css/listbox.css.map +1 -1
- package/src/listbox/scss/listbox.scss +116 -116
- package/src/listbox/tpl/list.tpl +14 -14
- package/src/listbox/tpl/main.tpl +9 -9
- package/src/listbox.js +251 -251
- package/src/liststyler.js +155 -155
- package/src/loadingButton/css/button.css +7 -7
- package/src/loadingButton/css/button.css.map +1 -1
- package/src/loadingButton/loadingButton.js +110 -110
- package/src/loadingButton/scss/button.scss +41 -41
- package/src/loadingButton/tpl/button.tpl +5 -5
- package/src/lock/lock.tpl +16 -16
- package/src/lock.js +395 -395
- package/src/login/login.js +322 -322
- package/src/login/tpl/login.tpl +29 -29
- package/src/login/tpl/passwordReveal.tpl +7 -7
- package/src/maths/calculator/basicCalculator.js +55 -55
- package/src/maths/calculator/calculatorComponent.js +128 -128
- package/src/maths/calculator/core/areaBroker.js +38 -38
- package/src/maths/calculator/core/board.js +841 -841
- package/src/maths/calculator/core/expression.js +430 -430
- package/src/maths/calculator/core/labels.js +116 -116
- package/src/maths/calculator/core/plugin.js +40 -40
- package/src/maths/calculator/core/terms.js +459 -459
- package/src/maths/calculator/core/tokenizer.js +245 -245
- package/src/maths/calculator/core/tokens.js +178 -178
- package/src/maths/calculator/core/tpl/board.tpl +4 -4
- package/src/maths/calculator/css/calculator.css +7 -7
- package/src/maths/calculator/css/calculator.css.map +1 -1
- package/src/maths/calculator/defaultCalculator.js +66 -66
- package/src/maths/calculator/plugins/core/degrad.js +90 -90
- package/src/maths/calculator/plugins/core/history.js +166 -166
- package/src/maths/calculator/plugins/core/remind.js +96 -96
- package/src/maths/calculator/plugins/core/stepNavigation.js +175 -175
- package/src/maths/calculator/plugins/keyboard/templateKeyboard/defaultTemplate.tpl +36 -36
- package/src/maths/calculator/plugins/keyboard/templateKeyboard/templateKeyboard.js +91 -91
- package/src/maths/calculator/plugins/modifiers/pow10.js +143 -143
- package/src/maths/calculator/plugins/modifiers/sign.js +339 -339
- package/src/maths/calculator/plugins/screen/simpleScreen/defaultTemplate.tpl +3 -3
- package/src/maths/calculator/plugins/screen/simpleScreen/history.tpl +3 -3
- package/src/maths/calculator/plugins/screen/simpleScreen/simpleScreen.js +191 -191
- package/src/maths/calculator/pluginsLoader.js +46 -46
- package/src/maths/calculator/scientificCalculator.js +74 -74
- package/src/maths/calculator/scss/calculator.scss +396 -396
- package/src/maths/calculator/tpl/basicKeyboard.tpl +37 -37
- package/src/maths/calculator/tpl/basicScreen.tpl +2 -2
- package/src/maths/calculator/tpl/scientificKeyboard.tpl +61 -61
- package/src/maths/calculator/tpl/scientificScreen.tpl +3 -3
- package/src/mediaEditor/mediaEditorComponent.js +141 -141
- package/src/mediaEditor/plugins/mediaAlignment/helper.js +62 -62
- package/src/mediaEditor/plugins/mediaAlignment/mediaAlignmentComponent.js +99 -99
- package/src/mediaEditor/plugins/mediaAlignment/style.css +7 -7
- package/src/mediaEditor/plugins/mediaAlignment/tpl/mediaAlignment.tpl +25 -25
- package/src/mediaEditor/plugins/mediaDimension/helper.js +189 -189
- package/src/mediaEditor/plugins/mediaDimension/mediaDimensionComponent.js +561 -561
- package/src/mediaEditor/plugins/mediaDimension/style.css +141 -141
- package/src/mediaEditor/plugins/mediaDimension/tpl/mediaDimension.tpl +55 -55
- package/src/mediaEditor/tpl/editor.tpl +4 -4
- package/src/mediaplayer/css/player.css +7 -7
- package/src/mediaplayer/css/player.css.map +1 -1
- package/src/mediaplayer/players/html5.js +564 -564
- package/src/mediaplayer/players/youtube.js +323 -323
- package/src/mediaplayer/players.js +29 -29
- package/src/mediaplayer/readme.md +305 -305
- package/src/mediaplayer/scss/player.scss +569 -569
- package/src/mediaplayer/support.js +126 -126
- package/src/mediaplayer/tpl/audio.tpl +6 -6
- package/src/mediaplayer/tpl/player.tpl +37 -37
- package/src/mediaplayer/tpl/source.tpl +1 -1
- package/src/mediaplayer/tpl/video.tpl +6 -6
- package/src/mediaplayer/tpl/youtube.tpl +1 -1
- package/src/mediaplayer/utils/reminder.js +184 -184
- package/src/mediaplayer/utils/timeObserver.js +143 -143
- package/src/mediaplayer/youtubeManager.js +161 -161
- package/src/mediaplayer.js +1606 -1606
- package/src/mediasizer/mediasizer.tpl +55 -55
- package/src/mediasizer.js +635 -635
- package/src/modal.js +365 -365
- package/src/movableComponent.js +78 -78
- package/src/pageSizeSelector/tpl/pageSizeSelector.tpl +9 -9
- package/src/pageSizeSelector.js +107 -107
- package/src/pageStatus.js +147 -147
- package/src/pagination/css/pagination.css +7 -7
- package/src/pagination/css/pagination.css.map +1 -1
- package/src/pagination/paginationStrategy.js +53 -53
- package/src/pagination/providers/pages.js +161 -161
- package/src/pagination/providers/simple.js +74 -74
- package/src/pagination/providers/tpl/pages/page.tpl +1 -1
- package/src/pagination/providers/tpl/pages.tpl +8 -8
- package/src/pagination/providers/tpl/simple.tpl +7 -7
- package/src/pagination/scss/pagination.scss +111 -111
- package/src/pagination.js +237 -237
- package/src/previewer.js +300 -300
- package/src/progressbar.js +165 -165
- package/src/propertySelector/css/propertySelector.css +74 -0
- package/src/propertySelector/css/propertySelector.css.map +1 -0
- package/src/propertySelector/propertySelector.js +286 -0
- package/src/propertySelector/scss/propertySelector.scss +66 -0
- package/src/propertySelector/tpl/highlighted-text.tpl +1 -0
- package/src/propertySelector/tpl/property-description.tpl +13 -0
- package/src/propertySelector/tpl/property-selector.tpl +7 -0
- package/src/report/feedback.tpl +11 -11
- package/src/report/layout.tpl +10 -10
- package/src/report.js +184 -184
- package/src/resource/css/selector.css +7 -7
- package/src/resource/css/selector.css.map +1 -1
- package/src/resource/filters.js +208 -208
- package/src/resource/list.js +200 -200
- package/src/resource/scss/_filters.scss +26 -26
- package/src/resource/scss/_resource-list.scss +107 -107
- package/src/resource/scss/_resource-tree.scss +205 -205
- package/src/resource/scss/selector.scss +187 -187
- package/src/resource/selectable.js +322 -322
- package/src/resource/selector.js +871 -871
- package/src/resource/tpl/filters.tpl +2 -2
- package/src/resource/tpl/list.tpl +7 -7
- package/src/resource/tpl/listNode.tpl +4 -4
- package/src/resource/tpl/selector.tpl +46 -46
- package/src/resource/tpl/tree.tpl +4 -4
- package/src/resource/tpl/treeNode.tpl +30 -30
- package/src/resource/tree.js +400 -400
- package/src/resourcemgr/css/resourcemgr.css +7 -7
- package/src/resourcemgr/css/resourcemgr.css.map +1 -1
- package/src/resourcemgr/fileBrowser.js +381 -381
- package/src/resourcemgr/filePreview.js +73 -73
- package/src/resourcemgr/fileSelector.js +348 -348
- package/src/resourcemgr/scss/resourcemgr.scss +254 -254
- package/src/resourcemgr/tpl/fileSelect.tpl +39 -39
- package/src/resourcemgr/tpl/folder.tpl +11 -11
- package/src/resourcemgr/tpl/layout.tpl +84 -84
- package/src/resourcemgr/tpl/rootFolder.tpl +13 -13
- package/src/resourcemgr/util/updatePermissions.js +53 -53
- package/src/resourcemgr.js +216 -216
- package/src/scroller.js +94 -94
- package/src/scss/basic.scss +16 -16
- package/src/searchModal/advancedSearch.js +638 -601
- package/src/searchModal/css/advancedSearch.css +7 -14
- package/src/searchModal/css/advancedSearch.css.map +1 -1
- package/src/searchModal/css/searchModal.css +28 -8
- package/src/searchModal/css/searchModal.css.map +1 -1
- package/src/searchModal/scss/advancedSearch.scss +171 -177
- package/src/searchModal/scss/searchModal.scss +393 -375
- package/src/searchModal/tpl/advanced-search.tpl +9 -9
- package/src/searchModal/tpl/criteria-alias.tpl +1 -0
- package/src/searchModal/tpl/criteria-class-label.tpl +1 -0
- package/src/searchModal/tpl/criteria-label.tpl +1 -0
- package/src/searchModal/tpl/highlighted-text.tpl +1 -0
- package/src/searchModal/tpl/info-message.tpl +3 -3
- package/src/searchModal/tpl/invalid-criteria-warning.tpl +10 -10
- package/src/searchModal/tpl/layout.tpl +27 -25
- package/src/searchModal/tpl/list-checkbox-criterion.tpl +17 -12
- package/src/searchModal/tpl/list-select-criterion.tpl +12 -6
- package/src/searchModal/tpl/property-select-button.tpl +1 -0
- package/src/searchModal/tpl/results-container.tpl +1 -0
- package/src/searchModal/tpl/text-criterion.tpl +11 -6
- package/src/searchModal.js +761 -496
- package/src/selecter.js +43 -43
- package/src/stacker.js +133 -133
- package/src/switch/css/switch.css +7 -7
- package/src/switch/css/switch.css.map +1 -1
- package/src/switch/scss/switch.scss +83 -83
- package/src/switch/switch.js +195 -195
- package/src/switch/tpl/switch.tpl +7 -7
- package/src/tableModel.js +112 -112
- package/src/tabs/css/tabs.css +12 -12
- package/src/tabs/css/tabs.css.map +1 -1
- package/src/tabs/scss/tabs.scss +50 -50
- package/src/tabs/tpl/panel.tpl +3 -3
- package/src/tabs/tpl/tabs.tpl +10 -10
- package/src/tabs.js +528 -528
- package/src/taskQueue/css/taskQueue.css +7 -7
- package/src/taskQueue/css/taskQueue.css.map +1 -1
- package/src/taskQueue/scss/taskQueue.scss +47 -47
- package/src/taskQueue/status.js +228 -228
- package/src/taskQueue/table.js +350 -350
- package/src/taskQueue/taskQueue.js +33 -33
- package/src/taskQueue/taskQueueModel.js +548 -548
- package/src/taskQueue/tpl/statusMessage.tpl +7 -7
- package/src/taskQueue.js +218 -218
- package/src/taskQueueButton/css/taskable.css +7 -7
- package/src/taskQueueButton/css/taskable.css.map +1 -1
- package/src/taskQueueButton/css/treeButton.css +7 -7
- package/src/taskQueueButton/css/treeButton.css.map +1 -1
- package/src/taskQueueButton/scss/taskable.scss +4 -4
- package/src/taskQueueButton/scss/treeButton.scss +34 -34
- package/src/taskQueueButton/standardButton.js +108 -108
- package/src/taskQueueButton/taskable.js +202 -202
- package/src/taskQueueButton/tpl/report.tpl +5 -5
- package/src/taskQueueButton/tpl/treeButton.tpl +6 -6
- package/src/taskQueueButton/treeButton.js +109 -109
- package/src/themeLoader.js +252 -252
- package/src/themes.js +162 -162
- package/src/toggler.js +200 -200
- package/src/tooltip/default.tpl +3 -3
- package/src/tooltip.js +160 -160
- package/src/tooltipster.js +25 -25
- package/src/transformer.js +327 -327
- package/src/tristateCheckboxGroup/css/tristateCheckboxGroup.css +7 -7
- package/src/tristateCheckboxGroup/css/tristateCheckboxGroup.css.map +1 -1
- package/src/tristateCheckboxGroup/scss/tristateCheckboxGroup.scss +15 -15
- package/src/tristateCheckboxGroup/tpl/li.tpl +6 -6
- package/src/tristateCheckboxGroup.js +207 -207
- package/src/uploader/fileEntry.tpl +6 -6
- package/src/uploader/uploader.tpl +32 -32
- package/src/uploader.js +594 -594
- package/src/validator/Report.js +10 -10
- package/src/validator/Validator.js +108 -108
- package/src/validator/validators.js +220 -220
- package/src/validator.js +264 -264
- package/src/waitForMedia.js +82 -82
- package/src/waitingDialog/css/waitingDialog.css +7 -7
- package/src/waitingDialog/css/waitingDialog.css.map +1 -1
- package/src/waitingDialog/scss/waitingDialog.scss +34 -34
- package/src/waitingDialog/waitingDialog.js +240 -240
|
@@ -1,947 +1,880 @@
|
|
|
1
1
|
define(['lodash', 'i18n', 'core/collections', 'ui/component', 'ui/maths/calculator/core/areaBroker', 'ui/maths/calculator/core/terms', 'ui/maths/calculator/core/tokens', 'ui/maths/calculator/core/expression', 'ui/maths/calculator/core/tokenizer', 'util/mathsEvaluator', 'handlebars', 'lib/dompurify/purify'], function (_, __, collections, componentFactory, areaBrokerFactory, registeredTerms, tokensHelper, expressionHelper, tokenizerFactory, mathsEvaluatorFactory, Handlebars, DOMPurify) { 'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* https://github.com/cure53/DOMPurify
|
|
35
|
-
* with config SAFE_FOR_TEMPLATES: true
|
|
36
|
-
* to make output safe for template systems
|
|
3
|
+
_ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;
|
|
4
|
+
__ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;
|
|
5
|
+
collections = collections && Object.prototype.hasOwnProperty.call(collections, 'default') ? collections['default'] : collections;
|
|
6
|
+
componentFactory = componentFactory && Object.prototype.hasOwnProperty.call(componentFactory, 'default') ? componentFactory['default'] : componentFactory;
|
|
7
|
+
areaBrokerFactory = areaBrokerFactory && Object.prototype.hasOwnProperty.call(areaBrokerFactory, 'default') ? areaBrokerFactory['default'] : areaBrokerFactory;
|
|
8
|
+
registeredTerms = registeredTerms && Object.prototype.hasOwnProperty.call(registeredTerms, 'default') ? registeredTerms['default'] : registeredTerms;
|
|
9
|
+
tokensHelper = tokensHelper && Object.prototype.hasOwnProperty.call(tokensHelper, 'default') ? tokensHelper['default'] : tokensHelper;
|
|
10
|
+
expressionHelper = expressionHelper && Object.prototype.hasOwnProperty.call(expressionHelper, 'default') ? expressionHelper['default'] : expressionHelper;
|
|
11
|
+
tokenizerFactory = tokenizerFactory && Object.prototype.hasOwnProperty.call(tokenizerFactory, 'default') ? tokenizerFactory['default'] : tokenizerFactory;
|
|
12
|
+
mathsEvaluatorFactory = mathsEvaluatorFactory && Object.prototype.hasOwnProperty.call(mathsEvaluatorFactory, 'default') ? mathsEvaluatorFactory['default'] : mathsEvaluatorFactory;
|
|
13
|
+
Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;
|
|
14
|
+
DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* This program is free software; you can redistribute it and/or
|
|
18
|
+
* modify it under the terms of the GNU General Public License
|
|
19
|
+
* as published by the Free Software Foundation; under version 2
|
|
20
|
+
* of the License (non-upgradable).
|
|
21
|
+
*
|
|
22
|
+
* This program is distributed in the hope that it will be useful,
|
|
23
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
24
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
25
|
+
* GNU General Public License for more details.
|
|
26
|
+
*
|
|
27
|
+
* You should have received a copy of the GNU General Public License
|
|
28
|
+
* along with this program; if not, write to the Free Software
|
|
29
|
+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
30
|
+
*
|
|
31
|
+
* Copyright (c) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
|
|
32
|
+
*
|
|
33
|
+
*
|
|
37
34
|
*/
|
|
35
|
+
function Helpers0 (hb) {
|
|
36
|
+
//register a i18n helper
|
|
37
|
+
hb.registerHelper('__', function (key) {
|
|
38
|
+
return __(key);
|
|
39
|
+
});
|
|
38
40
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
*/
|
|
50
|
-
|
|
51
|
-
hb.registerHelper('join', function (arr, keyValueGlue, fragmentGlue, wrapper) {
|
|
52
|
-
var fragments = [];
|
|
53
|
-
keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;
|
|
54
|
-
fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';
|
|
55
|
-
wrapper = typeof wrapper === 'string' ? wrapper : '"';
|
|
56
|
-
|
|
57
|
-
_.forIn(arr, function (value, key) {
|
|
58
|
-
var fragment = '';
|
|
41
|
+
/**
|
|
42
|
+
* Register dompurify helper
|
|
43
|
+
*
|
|
44
|
+
* https://github.com/cure53/DOMPurify
|
|
45
|
+
* with config SAFE_FOR_TEMPLATES: true
|
|
46
|
+
* to make output safe for template systems
|
|
47
|
+
*/
|
|
48
|
+
hb.registerHelper('dompurify', function (context) {
|
|
49
|
+
return DOMPurify.sanitize(context);
|
|
50
|
+
});
|
|
59
51
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
52
|
+
/**
|
|
53
|
+
* Register join helper
|
|
54
|
+
*
|
|
55
|
+
* Example :
|
|
56
|
+
* var values = {a:v1, b:v2, c:v3};
|
|
57
|
+
* Using {{{join attributes '=' ' ' '"'}}} will return : a="v1" b="v2" c="v3"
|
|
58
|
+
* Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*
|
|
59
|
+
*/
|
|
60
|
+
hb.registerHelper('join', function (arr, keyValueGlue, fragmentGlue, wrapper) {
|
|
61
|
+
var fragments = [];
|
|
62
|
+
keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;
|
|
63
|
+
fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';
|
|
64
|
+
wrapper = typeof wrapper === 'string' ? wrapper : '"';
|
|
65
|
+
_.forIn(arr, function (value, key) {
|
|
66
|
+
var fragment = '';
|
|
67
|
+
if (value !== null || value !== undefined) {
|
|
68
|
+
if (typeof value === 'boolean') {
|
|
69
|
+
value = value ? 'true' : 'false';
|
|
70
|
+
} else if (typeof value === 'object') {
|
|
71
|
+
value = _.values(value).join(' ');
|
|
72
|
+
}
|
|
73
|
+
} else {
|
|
74
|
+
value = '';
|
|
65
75
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
76
|
+
if (keyValueGlue !== undefined) {
|
|
77
|
+
fragment += key + keyValueGlue;
|
|
78
|
+
}
|
|
79
|
+
fragment += wrapper + value + wrapper;
|
|
80
|
+
fragments.push(fragment);
|
|
81
|
+
});
|
|
82
|
+
return fragments.join(fragmentGlue);
|
|
83
|
+
});
|
|
69
84
|
|
|
70
|
-
|
|
71
|
-
|
|
85
|
+
//register a classic "for loop" helper
|
|
86
|
+
//it also adds a local variable "i" as the index in each iteration loop
|
|
87
|
+
hb.registerHelper('for', function (startIndex, stopIndex, increment, options) {
|
|
88
|
+
var ret = '';
|
|
89
|
+
startIndex = parseInt(startIndex);
|
|
90
|
+
stopIndex = parseInt(stopIndex);
|
|
91
|
+
increment = parseInt(increment);
|
|
92
|
+
for (var i = startIndex; i < stopIndex; i += increment) {
|
|
93
|
+
ret += options.fn(_.extend({}, this, {
|
|
94
|
+
i: i
|
|
95
|
+
}));
|
|
72
96
|
}
|
|
97
|
+
return ret;
|
|
98
|
+
});
|
|
99
|
+
hb.registerHelper('equal', function (var1, var2, options) {
|
|
100
|
+
if (var1 == var2) {
|
|
101
|
+
return options.fn(this);
|
|
102
|
+
} else {
|
|
103
|
+
return options.inverse(this);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
73
106
|
|
|
74
|
-
|
|
75
|
-
|
|
107
|
+
// register a "get property" helper
|
|
108
|
+
// it gets the named property from the provided context
|
|
109
|
+
hb.registerHelper('property', function (name, context) {
|
|
110
|
+
return context[name] || '';
|
|
76
111
|
});
|
|
77
112
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
increment = parseInt(increment);
|
|
87
|
-
|
|
88
|
-
for (var i = startIndex; i < stopIndex; i += increment) {
|
|
89
|
-
ret += options.fn(_.extend({}, this, {
|
|
90
|
-
i: i
|
|
91
|
-
}));
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
return ret;
|
|
95
|
-
});
|
|
96
|
-
hb.registerHelper('equal', function (var1, var2, options) {
|
|
97
|
-
if (var1 == var2) {
|
|
98
|
-
return options.fn(this);
|
|
99
|
-
} else {
|
|
100
|
-
return options.inverse(this);
|
|
101
|
-
}
|
|
102
|
-
}); // register a "get property" helper
|
|
103
|
-
// it gets the named property from the provided context
|
|
104
|
-
|
|
105
|
-
hb.registerHelper('property', function (name, context) {
|
|
106
|
-
return context[name] || '';
|
|
107
|
-
}); // register an 'includes' helper
|
|
108
|
-
// it checks if value is in array
|
|
109
|
-
|
|
110
|
-
hb.registerHelper('includes', function (haystack, needle, options) {
|
|
111
|
-
if (_.contains(haystack, needle)) {
|
|
112
|
-
return options.fn(this);
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if (!Helpers0.__initialized) {
|
|
118
|
-
Helpers0(Handlebars);
|
|
119
|
-
Helpers0.__initialized = true;
|
|
120
|
-
}
|
|
121
|
-
var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
|
|
122
|
-
this.compilerInfo = [4,'>= 1.0.0'];
|
|
123
|
-
helpers = this.merge(helpers, Handlebars.helpers);
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
return "<div class=\"calculator\">\r\n <div class=\"screen\"></div>\r\n <div class=\"input\"></div>\r\n <div class=\"keyboard\"></div>\r\n</div>";
|
|
127
|
-
});
|
|
128
|
-
function boardTpl(data, options, asString) {
|
|
129
|
-
var html = Template(data, options);
|
|
130
|
-
return (asString || true) ? html : $(html);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* This program is free software; you can redistribute it and/or
|
|
135
|
-
* modify it under the terms of the GNU General Public License
|
|
136
|
-
* as published by the Free Software Foundation; under version 2
|
|
137
|
-
* of the License (non-upgradable).
|
|
138
|
-
*
|
|
139
|
-
* This program is distributed in the hope that it will be useful,
|
|
140
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
141
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
142
|
-
* GNU General Public License for more details.
|
|
143
|
-
*
|
|
144
|
-
* You should have received a copy of the GNU General Public License
|
|
145
|
-
* along with this program; if not, write to the Free Software
|
|
146
|
-
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
147
|
-
*
|
|
148
|
-
* Copyright (c) 2018-2019 Open Assessment Technologies SA ;
|
|
149
|
-
*/
|
|
150
|
-
/**
|
|
151
|
-
* Default config values
|
|
152
|
-
* @type {Object}
|
|
153
|
-
*/
|
|
154
|
-
|
|
155
|
-
var defaultConfig = {
|
|
156
|
-
expression: '',
|
|
157
|
-
position: 0
|
|
158
|
-
};
|
|
159
|
-
/**
|
|
160
|
-
* Name of the variable that contains the last result
|
|
161
|
-
* @type {String}
|
|
162
|
-
*/
|
|
163
|
-
|
|
164
|
-
var lastResultVariableName = registeredTerms.ANS.value;
|
|
165
|
-
/**
|
|
166
|
-
* Regex that matches the prefixed function operators
|
|
167
|
-
* @type {RegExp}
|
|
168
|
-
*/
|
|
169
|
-
|
|
170
|
-
var rePrefixedTerm = /^@[a-zA-Z_]\w*$/;
|
|
171
|
-
/**
|
|
172
|
-
* The internal namespace for built-in events listeners
|
|
173
|
-
* @type {String}
|
|
174
|
-
*/
|
|
175
|
-
|
|
176
|
-
var ns = 'calculator';
|
|
177
|
-
/**
|
|
178
|
-
* Build the basic UI for a calculator
|
|
179
|
-
* @param {jQuery|HTMLElement|String} $container
|
|
180
|
-
* @param {Function[]} pluginFactories
|
|
181
|
-
* @param {Object} [config]
|
|
182
|
-
* @param {String} [config.expression=''] - The initial expression
|
|
183
|
-
* @param {Number} [config.position=0] - The initial position in the expression
|
|
184
|
-
* @param {Object} [config.maths] - Optional config for the maths evaluator (@see util/mathsEvaluator)
|
|
185
|
-
* @param {Object} [config.plugins] - Optional config for each plugins
|
|
186
|
-
* @returns {calculator}
|
|
187
|
-
*/
|
|
188
|
-
|
|
189
|
-
function calculatorBoardFactory($container, pluginFactories, config) {
|
|
190
|
-
/**
|
|
191
|
-
* Maths expression parser.
|
|
192
|
-
* @type {Function}
|
|
193
|
-
*/
|
|
194
|
-
var mathsEvaluator;
|
|
195
|
-
/**
|
|
196
|
-
* Keep the area broker instance
|
|
197
|
-
* @see ui/maths/calculator/areaBroker
|
|
198
|
-
*/
|
|
113
|
+
// register an 'includes' helper
|
|
114
|
+
// it checks if value is in array
|
|
115
|
+
hb.registerHelper('includes', function (haystack, needle, options) {
|
|
116
|
+
if (_.contains(haystack, needle)) {
|
|
117
|
+
return options.fn(this);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
199
121
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
122
|
+
if (!Helpers0.__initialized) {
|
|
123
|
+
Helpers0(Handlebars);
|
|
124
|
+
Helpers0.__initialized = true;
|
|
125
|
+
}
|
|
126
|
+
var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
|
|
127
|
+
this.compilerInfo = [4,'>= 1.0.0'];
|
|
128
|
+
helpers = this.merge(helpers, Handlebars.helpers);
|
|
204
129
|
|
|
205
|
-
var plugins = {};
|
|
206
|
-
/**
|
|
207
|
-
* The current expression
|
|
208
|
-
* @type {String}
|
|
209
|
-
*/
|
|
210
130
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
131
|
+
return "<div class=\"calculator\">\n <div class=\"screen\"></div>\n <div class=\"input\"></div>\n <div class=\"keyboard\"></div>\n</div>";
|
|
132
|
+
});
|
|
133
|
+
function boardTpl(data, options, asString) {
|
|
134
|
+
var html = Template(data, options);
|
|
135
|
+
return (asString || true) ? html : $(html);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* This program is free software; you can redistribute it and/or
|
|
140
|
+
* modify it under the terms of the GNU General Public License
|
|
141
|
+
* as published by the Free Software Foundation; under version 2
|
|
142
|
+
* of the License (non-upgradable).
|
|
143
|
+
*
|
|
144
|
+
* This program is distributed in the hope that it will be useful,
|
|
145
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
146
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
147
|
+
* GNU General Public License for more details.
|
|
148
|
+
*
|
|
149
|
+
* You should have received a copy of the GNU General Public License
|
|
150
|
+
* along with this program; if not, write to the Free Software
|
|
151
|
+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
152
|
+
*
|
|
153
|
+
* Copyright (c) 2018-2019 Open Assessment Technologies SA ;
|
|
215
154
|
*/
|
|
216
155
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
*
|
|
220
|
-
* @type {Map}
|
|
156
|
+
/**
|
|
157
|
+
* Default config values
|
|
158
|
+
* @type {Object}
|
|
221
159
|
*/
|
|
160
|
+
var defaultConfig = {
|
|
161
|
+
expression: '',
|
|
162
|
+
position: 0
|
|
163
|
+
};
|
|
222
164
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
*
|
|
226
|
-
* @type {Number}
|
|
165
|
+
/**
|
|
166
|
+
* Name of the variable that contains the last result
|
|
167
|
+
* @type {String}
|
|
227
168
|
*/
|
|
169
|
+
var lastResultVariableName = registeredTerms.ANS.value;
|
|
228
170
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
*
|
|
232
|
-
* @type {calculatorTokenizer}
|
|
171
|
+
/**
|
|
172
|
+
* Regex that matches the prefixed function operators
|
|
173
|
+
* @type {RegExp}
|
|
233
174
|
*/
|
|
175
|
+
var rePrefixedTerm = /^@[a-zA-Z_]\w*$/;
|
|
234
176
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
*
|
|
238
|
-
* @type {Array|null}
|
|
177
|
+
/**
|
|
178
|
+
* The internal namespace for built-in events listeners
|
|
179
|
+
* @type {String}
|
|
239
180
|
*/
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
/**
|
|
243
|
-
*
|
|
244
|
-
* @
|
|
181
|
+
var ns = 'calculator';
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Build the basic UI for a calculator
|
|
185
|
+
* @param {jQuery|HTMLElement|String} $container
|
|
186
|
+
* @param {Function[]} pluginFactories
|
|
187
|
+
* @param {Object} [config]
|
|
188
|
+
* @param {String} [config.expression=''] - The initial expression
|
|
189
|
+
* @param {Number} [config.position=0] - The initial position in the expression
|
|
190
|
+
* @param {Object} [config.maths] - Optional config for the maths evaluator (@see util/mathsEvaluator)
|
|
191
|
+
* @param {Object} [config.plugins] - Optional config for each plugins
|
|
192
|
+
* @returns {calculator}
|
|
245
193
|
*/
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
*
|
|
250
|
-
* @returns {String}
|
|
251
|
-
*/
|
|
252
|
-
getExpression: function getExpression() {
|
|
253
|
-
return expression;
|
|
254
|
-
},
|
|
255
|
-
|
|
256
|
-
/**
|
|
257
|
-
* Changes the current expression
|
|
258
|
-
* @param {String} expr
|
|
259
|
-
* @returns {calculator}
|
|
260
|
-
* @fires expressionchange after the expression has been changed
|
|
194
|
+
function calculatorBoardFactory($container, pluginFactories, config) {
|
|
195
|
+
/**
|
|
196
|
+
* Maths expression parser.
|
|
197
|
+
* @type {Function}
|
|
261
198
|
*/
|
|
262
|
-
|
|
263
|
-
expression = String(expr || '');
|
|
264
|
-
tokens = null;
|
|
265
|
-
/**
|
|
266
|
-
* @event expressionchange
|
|
267
|
-
* @param {String} expression
|
|
268
|
-
*/
|
|
269
|
-
|
|
270
|
-
this.trigger('expressionchange', expression);
|
|
271
|
-
return this;
|
|
272
|
-
},
|
|
199
|
+
var mathsEvaluator;
|
|
273
200
|
|
|
274
|
-
/**
|
|
275
|
-
*
|
|
276
|
-
* @
|
|
201
|
+
/**
|
|
202
|
+
* Keep the area broker instance
|
|
203
|
+
* @see ui/maths/calculator/areaBroker
|
|
277
204
|
*/
|
|
278
|
-
|
|
279
|
-
return position;
|
|
280
|
-
},
|
|
281
|
-
|
|
282
|
-
/**
|
|
283
|
-
* Sets the current position inside the expression
|
|
284
|
-
* @param {Number|String} pos
|
|
285
|
-
* @returns {calculator}
|
|
286
|
-
* @fires positionchange after the position has been changed
|
|
287
|
-
*/
|
|
288
|
-
setPosition: function setPosition(pos) {
|
|
289
|
-
position = Math.max(0, Math.min(parseInt(pos, 10) || 0, expression.length));
|
|
290
|
-
/**
|
|
291
|
-
* @event positionchange
|
|
292
|
-
* @param {Number} position
|
|
293
|
-
*/
|
|
294
|
-
|
|
295
|
-
this.trigger('positionchange', position);
|
|
296
|
-
return this;
|
|
297
|
-
},
|
|
205
|
+
var areaBroker;
|
|
298
206
|
|
|
299
|
-
/**
|
|
300
|
-
*
|
|
301
|
-
* @returns {token[]}
|
|
207
|
+
/**
|
|
208
|
+
* @type {Object} the registered plugins
|
|
302
209
|
*/
|
|
303
|
-
|
|
304
|
-
if (tokens === null) {
|
|
305
|
-
tokens = tokenizer.tokenize(expression);
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
return tokens;
|
|
309
|
-
},
|
|
210
|
+
var plugins = {};
|
|
310
211
|
|
|
311
|
-
/**
|
|
312
|
-
*
|
|
313
|
-
* @
|
|
314
|
-
*/
|
|
315
|
-
getToken: function getToken() {
|
|
316
|
-
var tokensList = this.getTokens();
|
|
317
|
-
var index = this.getTokenIndex();
|
|
318
|
-
return tokensList[index] || null;
|
|
319
|
-
},
|
|
320
|
-
|
|
321
|
-
/**
|
|
322
|
-
* Gets token index from the current position in the expression.
|
|
323
|
-
* @returns {Number} Returns the index of the token at the current position.
|
|
212
|
+
/**
|
|
213
|
+
* The current expression
|
|
214
|
+
* @type {String}
|
|
324
215
|
*/
|
|
325
|
-
|
|
326
|
-
var index = 0;
|
|
327
|
-
|
|
328
|
-
_.forEach(this.getTokens(), function (token, idx) {
|
|
329
|
-
if (position >= token.offset) {
|
|
330
|
-
index = idx;
|
|
331
|
-
}
|
|
332
|
-
});
|
|
216
|
+
var expression = '';
|
|
333
217
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
/**
|
|
338
|
-
* Gets access to the tokenizer
|
|
339
|
-
* @returns {calculatorTokenizer}
|
|
340
|
-
*/
|
|
341
|
-
getTokenizer: function getTokenizer() {
|
|
342
|
-
return tokenizer;
|
|
343
|
-
},
|
|
344
|
-
|
|
345
|
-
/**
|
|
346
|
-
* Gets a variable defined for the expression.
|
|
347
|
-
* @param {String} name - The variable name
|
|
348
|
-
* @returns {mathsExpression} The value. Can be another expression.
|
|
349
|
-
*/
|
|
350
|
-
getVariable: function getVariable(name) {
|
|
351
|
-
return variables.get(name);
|
|
352
|
-
},
|
|
353
|
-
|
|
354
|
-
/**
|
|
355
|
-
* Checks if a variable is registered
|
|
356
|
-
* @param {String} name
|
|
357
|
-
* @returns {Boolean}
|
|
218
|
+
/**
|
|
219
|
+
* A list of variables that can be used in the expression
|
|
220
|
+
* @type {Map}
|
|
358
221
|
*/
|
|
359
|
-
|
|
360
|
-
return variables.has(name);
|
|
361
|
-
},
|
|
362
|
-
|
|
363
|
-
/**
|
|
364
|
-
* Sets a variable that can be used by the expression.
|
|
365
|
-
* @param {String} name - The variable name
|
|
366
|
-
* @param {String|Number|mathsExpression} value - The value. Can be another expression.
|
|
367
|
-
* @returns {calculator}
|
|
368
|
-
* @fires variableadd after the variable has been set
|
|
369
|
-
*/
|
|
370
|
-
setVariable: function setVariable(name, value) {
|
|
371
|
-
var errValue;
|
|
372
|
-
|
|
373
|
-
try {
|
|
374
|
-
value = mathsEvaluator(value);
|
|
375
|
-
} catch (err) {
|
|
376
|
-
errValue = value && value.expression || value;
|
|
377
|
-
value = mathsEvaluator('0');
|
|
378
|
-
value.expression = errValue;
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
variables.set(name, value);
|
|
382
|
-
/**
|
|
383
|
-
* @event variableadd
|
|
384
|
-
* @param {String} name
|
|
385
|
-
* @param {String} value
|
|
386
|
-
*/
|
|
387
|
-
|
|
388
|
-
this.trigger('variableadd', name, value);
|
|
389
|
-
return this;
|
|
390
|
-
},
|
|
222
|
+
var variables = new collections.Map();
|
|
391
223
|
|
|
392
|
-
/**
|
|
393
|
-
*
|
|
394
|
-
* @
|
|
395
|
-
* @returns {calculator}
|
|
396
|
-
* @fires variabledelete after the variable has been deleted
|
|
224
|
+
/**
|
|
225
|
+
* A list of registered commands that can be used inside the calculator
|
|
226
|
+
* @type {Map}
|
|
397
227
|
*/
|
|
398
|
-
|
|
399
|
-
variables.delete(name);
|
|
400
|
-
/**
|
|
401
|
-
* @event variabledelete
|
|
402
|
-
* @param {String} name
|
|
403
|
-
*/
|
|
228
|
+
var commands = new collections.Map();
|
|
404
229
|
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
/**
|
|
410
|
-
* Gets the list of variables defined for the expression.
|
|
411
|
-
* @returns {Object} The list of defined variables.
|
|
412
|
-
*/
|
|
413
|
-
getVariables: function getVariables() {
|
|
414
|
-
var defs = {};
|
|
415
|
-
variables.forEach(function (value, name) {
|
|
416
|
-
defs[name] = value;
|
|
417
|
-
});
|
|
418
|
-
return defs;
|
|
419
|
-
},
|
|
420
|
-
|
|
421
|
-
/**
|
|
422
|
-
* Sets a list of variables that can be used by the expression.
|
|
423
|
-
* @param {Object} defs - A list variables to set.
|
|
424
|
-
* @returns {calculator}
|
|
425
|
-
* @fires variableadd after each variable has been set
|
|
230
|
+
/**
|
|
231
|
+
* The current position in the current expression (i.e. the position of the caret)
|
|
232
|
+
* @type {Number}
|
|
426
233
|
*/
|
|
427
|
-
|
|
428
|
-
var self = this;
|
|
429
|
-
|
|
430
|
-
_.forEach(defs, function (value, name) {
|
|
431
|
-
self.setVariable(name, value);
|
|
432
|
-
});
|
|
433
|
-
|
|
434
|
-
return this;
|
|
435
|
-
},
|
|
234
|
+
var position = 0;
|
|
436
235
|
|
|
437
|
-
/**
|
|
438
|
-
*
|
|
439
|
-
* @
|
|
440
|
-
* @fires variabledelete after the variables has been deleted
|
|
236
|
+
/**
|
|
237
|
+
* The tokenizer utilized to split down the expression
|
|
238
|
+
* @type {calculatorTokenizer}
|
|
441
239
|
*/
|
|
442
|
-
|
|
443
|
-
variables.clear();
|
|
444
|
-
/**
|
|
445
|
-
* @event variabledelete
|
|
446
|
-
* @param {null} name
|
|
447
|
-
*/
|
|
448
|
-
|
|
449
|
-
this.trigger('variabledelete', null);
|
|
450
|
-
this.setLastResult('0');
|
|
451
|
-
return this;
|
|
452
|
-
},
|
|
240
|
+
var tokenizer = tokenizerFactory();
|
|
453
241
|
|
|
454
|
-
/**
|
|
455
|
-
*
|
|
456
|
-
* @
|
|
457
|
-
* @returns {calculator}
|
|
242
|
+
/**
|
|
243
|
+
* The list of tokens extracted from the expression
|
|
244
|
+
* @type {Array|null}
|
|
458
245
|
*/
|
|
459
|
-
|
|
460
|
-
if (!result || expressionHelper.containsError(result)) {
|
|
461
|
-
result = '0';
|
|
462
|
-
}
|
|
463
|
-
|
|
464
|
-
this.setVariable(lastResultVariableName, result);
|
|
465
|
-
return this;
|
|
466
|
-
},
|
|
246
|
+
var tokens = null;
|
|
467
247
|
|
|
468
|
-
/**
|
|
469
|
-
*
|
|
470
|
-
* @
|
|
471
|
-
*/
|
|
472
|
-
getLastResult: function getLastResult() {
|
|
473
|
-
return this.getVariable(lastResultVariableName);
|
|
474
|
-
},
|
|
475
|
-
|
|
476
|
-
/**
|
|
477
|
-
* Registers a command
|
|
478
|
-
* @param {String} name
|
|
479
|
-
* @param {String} [label]
|
|
480
|
-
* @param {String} [description]
|
|
481
|
-
* @returns {calculator}
|
|
482
|
-
* @fires commandadd after the command has been set
|
|
248
|
+
/**
|
|
249
|
+
*
|
|
250
|
+
* @type {Object}
|
|
483
251
|
*/
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
description: description
|
|
489
|
-
});
|
|
490
|
-
/**
|
|
491
|
-
* @event commandadd
|
|
492
|
-
* @param {String} name
|
|
252
|
+
var calculatorApi = {
|
|
253
|
+
/**
|
|
254
|
+
* Returns the current expression
|
|
255
|
+
* @returns {String}
|
|
493
256
|
*/
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
* @returns {Object} The list of registered commands
|
|
510
|
-
*/
|
|
511
|
-
getCommands: function getCommands() {
|
|
512
|
-
var defs = {};
|
|
513
|
-
commands.forEach(function (value, name) {
|
|
514
|
-
defs[name] = value;
|
|
515
|
-
});
|
|
516
|
-
return defs;
|
|
517
|
-
},
|
|
518
|
-
|
|
519
|
-
/**
|
|
520
|
-
* Checks if a command is registered
|
|
521
|
-
* @param {String} name
|
|
522
|
-
* @returns {Boolean}
|
|
523
|
-
*/
|
|
524
|
-
hasCommand: function hasCommand(name) {
|
|
525
|
-
return commands.has(name);
|
|
526
|
-
},
|
|
527
|
-
|
|
528
|
-
/**
|
|
529
|
-
* Delete a registered command
|
|
530
|
-
* @param {String} name
|
|
531
|
-
* @returns {calculator}
|
|
532
|
-
* @fires commanddelete after the command has been deleted
|
|
533
|
-
*/
|
|
534
|
-
deleteCommand: function deleteCommand(name) {
|
|
535
|
-
commands.delete(name);
|
|
536
|
-
/**
|
|
537
|
-
* @event commanddelete
|
|
538
|
-
* @param {String} name
|
|
539
|
-
*/
|
|
540
|
-
|
|
541
|
-
this.trigger('commanddelete', name);
|
|
542
|
-
return this;
|
|
543
|
-
},
|
|
544
|
-
|
|
545
|
-
/**
|
|
546
|
-
* Inserts a term in the expression at the current position
|
|
547
|
-
* @param {String} name - The name of the term to insert
|
|
548
|
-
* @param {Object} term - The definition of the term to insert
|
|
549
|
-
* @returns {calculator}
|
|
550
|
-
* @fires termerror if the term to add is invalid
|
|
551
|
-
* @fires termadd when the term has been added
|
|
552
|
-
* @fires termadd-<name> when the term has been added
|
|
553
|
-
*/
|
|
554
|
-
addTerm: function addTerm(name, term) {
|
|
555
|
-
var tokensList = this.getTokens();
|
|
556
|
-
var index = this.getTokenIndex();
|
|
557
|
-
var currentToken = tokensList[index];
|
|
558
|
-
var nextToken = tokensList[index + 1];
|
|
559
|
-
var isIdentifier, needsSpace, value; // checks if the aforementioned token requires space around
|
|
560
|
-
|
|
561
|
-
function tokenNeedsSpace(token) {
|
|
562
|
-
return tokensHelper.isIdentifier(token) || isIdentifier && !tokensHelper.isSeparator(token);
|
|
563
|
-
}
|
|
564
|
-
|
|
565
|
-
if (!_.isPlainObject(term) || 'undefined' === typeof term.value) {
|
|
566
|
-
/**
|
|
567
|
-
* @event termerror
|
|
568
|
-
* @param {TypeError} err
|
|
257
|
+
getExpression: function getExpression() {
|
|
258
|
+
return expression;
|
|
259
|
+
},
|
|
260
|
+
/**
|
|
261
|
+
* Changes the current expression
|
|
262
|
+
* @param {String} expr
|
|
263
|
+
* @returns {calculator}
|
|
264
|
+
* @fires expressionchange after the expression has been changed
|
|
265
|
+
*/
|
|
266
|
+
setExpression: function setExpression(expr) {
|
|
267
|
+
expression = String(expr || '');
|
|
268
|
+
tokens = null;
|
|
269
|
+
/**
|
|
270
|
+
* @event expressionchange
|
|
271
|
+
* @param {String} expression
|
|
569
272
|
*/
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
}
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
273
|
+
this.trigger('expressionchange', expression);
|
|
274
|
+
return this;
|
|
275
|
+
},
|
|
276
|
+
/**
|
|
277
|
+
* Gets the current position inside the expression
|
|
278
|
+
* @returns {Number}
|
|
279
|
+
*/
|
|
280
|
+
getPosition: function getPosition() {
|
|
281
|
+
return position;
|
|
282
|
+
},
|
|
283
|
+
/**
|
|
284
|
+
* Sets the current position inside the expression
|
|
285
|
+
* @param {Number|String} pos
|
|
286
|
+
* @returns {calculator}
|
|
287
|
+
* @fires positionchange after the position has been changed
|
|
288
|
+
*/
|
|
289
|
+
setPosition: function setPosition(pos) {
|
|
290
|
+
position = Math.max(0, Math.min(parseInt(pos, 10) || 0, expression.length));
|
|
291
|
+
/**
|
|
292
|
+
* @event positionchange
|
|
293
|
+
* @param {Number} position
|
|
294
|
+
*/
|
|
295
|
+
this.trigger('positionchange', position);
|
|
296
|
+
return this;
|
|
297
|
+
},
|
|
298
|
+
/**
|
|
299
|
+
* Gets the tokens from the current expression
|
|
300
|
+
* @returns {token[]}
|
|
301
|
+
*/
|
|
302
|
+
getTokens: function getTokens() {
|
|
303
|
+
if (tokens === null) {
|
|
304
|
+
tokens = tokenizer.tokenize(expression);
|
|
593
305
|
}
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
* @
|
|
599
|
-
* @param {String} name - The name of the added term
|
|
600
|
-
* @param {Object} term - The descriptor of the added term
|
|
306
|
+
return tokens;
|
|
307
|
+
},
|
|
308
|
+
/**
|
|
309
|
+
* Gets the token at the current position from the current expression
|
|
310
|
+
* @returns {token|null} Returns the token at the current position, or null if none
|
|
601
311
|
*/
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
312
|
+
getToken: function getToken() {
|
|
313
|
+
var tokensList = this.getTokens();
|
|
314
|
+
var index = this.getTokenIndex();
|
|
315
|
+
return tokensList[index] || null;
|
|
316
|
+
},
|
|
317
|
+
/**
|
|
318
|
+
* Gets token index from the current position in the expression.
|
|
319
|
+
* @returns {Number} Returns the index of the token at the current position.
|
|
608
320
|
*/
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
321
|
+
getTokenIndex: function getTokenIndex() {
|
|
322
|
+
var index = 0;
|
|
323
|
+
_.forEach(this.getTokens(), function (token, idx) {
|
|
324
|
+
if (position >= token.offset) {
|
|
325
|
+
index = idx;
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
return index;
|
|
329
|
+
},
|
|
330
|
+
/**
|
|
331
|
+
* Gets access to the tokenizer
|
|
332
|
+
* @returns {calculatorTokenizer}
|
|
333
|
+
*/
|
|
334
|
+
getTokenizer: function getTokenizer() {
|
|
335
|
+
return tokenizer;
|
|
336
|
+
},
|
|
337
|
+
/**
|
|
338
|
+
* Gets a variable defined for the expression.
|
|
339
|
+
* @param {String} name - The variable name
|
|
340
|
+
* @returns {mathsExpression} The value. Can be another expression.
|
|
341
|
+
*/
|
|
342
|
+
getVariable: function getVariable(name) {
|
|
343
|
+
return variables.get(name);
|
|
344
|
+
},
|
|
345
|
+
/**
|
|
346
|
+
* Checks if a variable is registered
|
|
347
|
+
* @param {String} name
|
|
348
|
+
* @returns {Boolean}
|
|
349
|
+
*/
|
|
350
|
+
hasVariable: function hasVariable(name) {
|
|
351
|
+
return variables.has(name);
|
|
352
|
+
},
|
|
353
|
+
/**
|
|
354
|
+
* Sets a variable that can be used by the expression.
|
|
355
|
+
* @param {String} name - The variable name
|
|
356
|
+
* @param {String|Number|mathsExpression} value - The value. Can be another expression.
|
|
357
|
+
* @returns {calculator}
|
|
358
|
+
* @fires variableadd after the variable has been set
|
|
359
|
+
*/
|
|
360
|
+
setVariable: function setVariable(name, value) {
|
|
361
|
+
var errValue;
|
|
362
|
+
try {
|
|
363
|
+
value = mathsEvaluator(value);
|
|
364
|
+
} catch (err) {
|
|
365
|
+
errValue = value && value.expression || value;
|
|
366
|
+
value = mathsEvaluator('0');
|
|
367
|
+
value.expression = errValue;
|
|
368
|
+
}
|
|
369
|
+
variables.set(name, value);
|
|
370
|
+
/**
|
|
371
|
+
* @event variableadd
|
|
372
|
+
* @param {String} name
|
|
373
|
+
* @param {String} value
|
|
636
374
|
*/
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
useTerms: function useTerms(names) {
|
|
652
|
-
if ('string' === typeof names) {
|
|
653
|
-
names = names.split(/\s+/);
|
|
654
|
-
}
|
|
655
|
-
|
|
656
|
-
_.forEach(names, this.useTerm.bind(this));
|
|
657
|
-
|
|
658
|
-
return this;
|
|
659
|
-
},
|
|
660
|
-
|
|
661
|
-
/**
|
|
662
|
-
* Inserts a variable as a term in the expression at the current position
|
|
663
|
-
* @param {String} name - The name of the variable to insert
|
|
664
|
-
* @returns {calculator}
|
|
665
|
-
* @fires termerror if the term to add is invalid
|
|
666
|
-
* @fires termadd when the term has been added
|
|
667
|
-
*/
|
|
668
|
-
useVariable: function useVariable(name) {
|
|
669
|
-
if (!variables.has(name)) {
|
|
670
|
-
/**
|
|
671
|
-
* @event termerror
|
|
672
|
-
* @param {TypeError} err
|
|
375
|
+
this.trigger('variableadd', name, value);
|
|
376
|
+
return this;
|
|
377
|
+
},
|
|
378
|
+
/**
|
|
379
|
+
* Deletes a variable defined for the expression.
|
|
380
|
+
* @param {String} name - The variable name
|
|
381
|
+
* @returns {calculator}
|
|
382
|
+
* @fires variabledelete after the variable has been deleted
|
|
383
|
+
*/
|
|
384
|
+
deleteVariable: function deleteVariable(name) {
|
|
385
|
+
variables.delete(name);
|
|
386
|
+
/**
|
|
387
|
+
* @event variabledelete
|
|
388
|
+
* @param {String} name
|
|
673
389
|
*/
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
390
|
+
this.trigger('variabledelete', name);
|
|
391
|
+
return this;
|
|
392
|
+
},
|
|
393
|
+
/**
|
|
394
|
+
* Gets the list of variables defined for the expression.
|
|
395
|
+
* @returns {Object} The list of defined variables.
|
|
396
|
+
*/
|
|
397
|
+
getVariables: function getVariables() {
|
|
398
|
+
var defs = {};
|
|
399
|
+
variables.forEach(function (value, name) {
|
|
400
|
+
defs[name] = value;
|
|
401
|
+
});
|
|
402
|
+
return defs;
|
|
403
|
+
},
|
|
404
|
+
/**
|
|
405
|
+
* Sets a list of variables that can be used by the expression.
|
|
406
|
+
* @param {Object} defs - A list variables to set.
|
|
407
|
+
* @returns {calculator}
|
|
408
|
+
* @fires variableadd after each variable has been set
|
|
409
|
+
*/
|
|
410
|
+
setVariables: function setVariables(defs) {
|
|
411
|
+
var self = this;
|
|
412
|
+
_.forEach(defs, function (value, name) {
|
|
413
|
+
self.setVariable(name, value);
|
|
414
|
+
});
|
|
415
|
+
return this;
|
|
416
|
+
},
|
|
417
|
+
/**
|
|
418
|
+
* Deletes all variables defined for the expression.
|
|
419
|
+
* @returns {calculator}
|
|
420
|
+
* @fires variabledelete after the variables has been deleted
|
|
421
|
+
*/
|
|
422
|
+
deleteVariables: function deleteVariables() {
|
|
423
|
+
variables.clear();
|
|
424
|
+
/**
|
|
425
|
+
* @event variabledelete
|
|
426
|
+
* @param {null} name
|
|
699
427
|
*/
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
*
|
|
428
|
+
this.trigger('variabledelete', null);
|
|
429
|
+
this.setLastResult('0');
|
|
430
|
+
return this;
|
|
431
|
+
},
|
|
432
|
+
/**
|
|
433
|
+
* Sets the value of the last result
|
|
434
|
+
* @param {String|Number|mathsExpression} [result='0']
|
|
435
|
+
* @returns {calculator}
|
|
706
436
|
*/
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
437
|
+
setLastResult: function setLastResult(result) {
|
|
438
|
+
if (!result || expressionHelper.containsError(result)) {
|
|
439
|
+
result = '0';
|
|
440
|
+
}
|
|
441
|
+
this.setVariable(lastResultVariableName, result);
|
|
442
|
+
return this;
|
|
443
|
+
},
|
|
444
|
+
/**
|
|
445
|
+
* Gets the value of the last result
|
|
446
|
+
* @returns {mathsExpression}
|
|
713
447
|
*/
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
* @fires replace after the expression has been replaced
|
|
725
|
-
*/
|
|
726
|
-
replace: function replace(newExpression, newPosition) {
|
|
727
|
-
var oldExpression = expression;
|
|
728
|
-
var oldPosition = position;
|
|
729
|
-
this.setExpression(newExpression).setPosition('undefined' !== typeof newPosition ? newPosition : expression.length);
|
|
730
|
-
/**
|
|
731
|
-
* @event replace
|
|
732
|
-
* @param {String} expression - the replaced expression
|
|
733
|
-
* @param {Number} position - the replaced position
|
|
734
|
-
*/
|
|
735
|
-
|
|
736
|
-
this.trigger('replace', oldExpression, oldPosition);
|
|
737
|
-
return this;
|
|
738
|
-
},
|
|
739
|
-
|
|
740
|
-
/**
|
|
741
|
-
* Inserts a sub-expression in the current expression and move the cursor.
|
|
742
|
-
* @param {String} subExpression - The sub-expression to insert
|
|
743
|
-
* @returns {calculator}
|
|
744
|
-
* @fires insert after the expression has been inserted
|
|
745
|
-
*/
|
|
746
|
-
insert: function insert(subExpression) {
|
|
747
|
-
var oldExpression = expression;
|
|
748
|
-
var oldPosition = position;
|
|
749
|
-
this.setExpression(expression.substr(0, position) + subExpression + expression.substr(position)).setPosition(position + subExpression.length);
|
|
750
|
-
/**
|
|
751
|
-
* @event insert
|
|
752
|
-
* @param {String} expression - the replaced expression
|
|
753
|
-
* @param {Number} position - the replaced position
|
|
754
|
-
*/
|
|
755
|
-
|
|
756
|
-
this.trigger('insert', oldExpression, oldPosition);
|
|
757
|
-
return this;
|
|
758
|
-
},
|
|
759
|
-
|
|
760
|
-
/**
|
|
761
|
-
* Clears the expression
|
|
762
|
-
* @returns {calculator}
|
|
763
|
-
* @fires clear after the expression has been cleared
|
|
764
|
-
*/
|
|
765
|
-
clear: function clear() {
|
|
766
|
-
this.setExpression('').setPosition(0);
|
|
767
|
-
/**
|
|
768
|
-
* @event clear
|
|
448
|
+
getLastResult: function getLastResult() {
|
|
449
|
+
return this.getVariable(lastResultVariableName);
|
|
450
|
+
},
|
|
451
|
+
/**
|
|
452
|
+
* Registers a command
|
|
453
|
+
* @param {String} name
|
|
454
|
+
* @param {String} [label]
|
|
455
|
+
* @param {String} [description]
|
|
456
|
+
* @returns {calculator}
|
|
457
|
+
* @fires commandadd after the command has been set
|
|
769
458
|
*/
|
|
459
|
+
setCommand: function setCommand(name, label, description) {
|
|
460
|
+
commands.set(name, {
|
|
461
|
+
name: name,
|
|
462
|
+
label: label,
|
|
463
|
+
description: description
|
|
464
|
+
});
|
|
465
|
+
/**
|
|
466
|
+
* @event commandadd
|
|
467
|
+
* @param {String} name
|
|
468
|
+
*/
|
|
469
|
+
this.trigger('commandadd', name);
|
|
470
|
+
return this;
|
|
471
|
+
},
|
|
472
|
+
/**
|
|
473
|
+
* Gets the definition of a registered command
|
|
474
|
+
* @returns {Object} The registered command
|
|
475
|
+
*/
|
|
476
|
+
getCommand: function getCommand(name) {
|
|
477
|
+
return commands.get(name);
|
|
478
|
+
},
|
|
479
|
+
/**
|
|
480
|
+
* Gets the list of registered commands
|
|
481
|
+
* @returns {Object} The list of registered commands
|
|
482
|
+
*/
|
|
483
|
+
getCommands: function getCommands() {
|
|
484
|
+
var defs = {};
|
|
485
|
+
commands.forEach(function (value, name) {
|
|
486
|
+
defs[name] = value;
|
|
487
|
+
});
|
|
488
|
+
return defs;
|
|
489
|
+
},
|
|
490
|
+
/**
|
|
491
|
+
* Checks if a command is registered
|
|
492
|
+
* @param {String} name
|
|
493
|
+
* @returns {Boolean}
|
|
494
|
+
*/
|
|
495
|
+
hasCommand: function hasCommand(name) {
|
|
496
|
+
return commands.has(name);
|
|
497
|
+
},
|
|
498
|
+
/**
|
|
499
|
+
* Delete a registered command
|
|
500
|
+
* @param {String} name
|
|
501
|
+
* @returns {calculator}
|
|
502
|
+
* @fires commanddelete after the command has been deleted
|
|
503
|
+
*/
|
|
504
|
+
deleteCommand: function deleteCommand(name) {
|
|
505
|
+
commands.delete(name);
|
|
506
|
+
/**
|
|
507
|
+
* @event commanddelete
|
|
508
|
+
* @param {String} name
|
|
509
|
+
*/
|
|
510
|
+
this.trigger('commanddelete', name);
|
|
511
|
+
return this;
|
|
512
|
+
},
|
|
513
|
+
/**
|
|
514
|
+
* Inserts a term in the expression at the current position
|
|
515
|
+
* @param {String} name - The name of the term to insert
|
|
516
|
+
* @param {Object} term - The definition of the term to insert
|
|
517
|
+
* @returns {calculator}
|
|
518
|
+
* @fires termerror if the term to add is invalid
|
|
519
|
+
* @fires termadd when the term has been added
|
|
520
|
+
* @fires termadd-<name> when the term has been added
|
|
521
|
+
*/
|
|
522
|
+
addTerm: function addTerm(name, term) {
|
|
523
|
+
var tokensList = this.getTokens();
|
|
524
|
+
var index = this.getTokenIndex();
|
|
525
|
+
var currentToken = tokensList[index];
|
|
526
|
+
var nextToken = tokensList[index + 1];
|
|
527
|
+
var isIdentifier, needsSpace, value;
|
|
528
|
+
|
|
529
|
+
// checks if the aforementioned token requires space around
|
|
530
|
+
function tokenNeedsSpace(token) {
|
|
531
|
+
return tokensHelper.isIdentifier(token) || isIdentifier && !tokensHelper.isSeparator(token);
|
|
532
|
+
}
|
|
533
|
+
if (!_.isPlainObject(term) || 'undefined' === typeof term.value) {
|
|
534
|
+
/**
|
|
535
|
+
* @event termerror
|
|
536
|
+
* @param {TypeError} err
|
|
537
|
+
*/
|
|
538
|
+
return this.trigger('termerror', new TypeError('Invalid term: ' + name));
|
|
539
|
+
}
|
|
540
|
+
value = term.value;
|
|
770
541
|
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
* Evaluates the current expression
|
|
777
|
-
* @returns {mathsExpression|null}
|
|
778
|
-
* @fires evaluate when the expression has been evaluated
|
|
779
|
-
* @fires syntaxerror when the expression contains an error
|
|
780
|
-
*/
|
|
781
|
-
evaluate: function evaluate() {
|
|
782
|
-
var result = null;
|
|
783
|
-
|
|
784
|
-
try {
|
|
785
|
-
if (expression.trim()) {
|
|
786
|
-
result = mathsEvaluator(expression, _.mapValues(this.getVariables(), 'result'));
|
|
542
|
+
// will replace the current term if:
|
|
543
|
+
// - it is a 0, and the term to add is not an operator nor a dot
|
|
544
|
+
// - it is the last result, and the term to add is not an operator
|
|
545
|
+
if (!tokensHelper.isOperator(term.type) && !rePrefixedTerm.test(term.value) && tokensList.length === 1 && (currentToken.type === 'NUM0' && name !== 'DOT' || currentToken.type === 'ANS')) {
|
|
546
|
+
this.replace(value);
|
|
787
547
|
} else {
|
|
788
|
-
|
|
548
|
+
// simply add the term, with potentially spaces around
|
|
549
|
+
if (expression && !tokensHelper.isSeparator(term.type)) {
|
|
550
|
+
isIdentifier = tokensHelper.isIdentifier(term.type);
|
|
551
|
+
needsSpace = tokenNeedsSpace(currentToken);
|
|
552
|
+
|
|
553
|
+
// prepend space when either the term to add or the previous term is an identifier
|
|
554
|
+
if (position && needsSpace) {
|
|
555
|
+
value = ' ' + value;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
// append space when either the term to add or the next term is an identifier
|
|
559
|
+
if (!position && needsSpace || position < expression.length && tokenNeedsSpace(nextToken)) {
|
|
560
|
+
value += ' ';
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
this.insert(value);
|
|
789
564
|
}
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
* @
|
|
565
|
+
|
|
566
|
+
/**
|
|
567
|
+
* @event termadd
|
|
568
|
+
* @param {String} name - The name of the added term
|
|
569
|
+
* @param {Object} term - The descriptor of the added term
|
|
793
570
|
*/
|
|
571
|
+
this.trigger('termadd', name, term);
|
|
794
572
|
|
|
573
|
+
/**
|
|
574
|
+
* @event termadd-<name>
|
|
575
|
+
* @param {Object} term - The descriptor of the added term
|
|
576
|
+
*/
|
|
577
|
+
this.trigger('termadd-' + name, term);
|
|
578
|
+
return this;
|
|
579
|
+
},
|
|
580
|
+
/**
|
|
581
|
+
* Inserts a term in the expression at the current position
|
|
582
|
+
* @param {String} name - The name of the term to insert
|
|
583
|
+
* @returns {calculator}
|
|
584
|
+
* @fires termerror if the term to add is invalid
|
|
585
|
+
* @fires termadd when the term has been added
|
|
586
|
+
*/
|
|
587
|
+
useTerm: function useTerm(name) {
|
|
588
|
+
var term;
|
|
589
|
+
if (rePrefixedTerm.test(name)) {
|
|
590
|
+
name = name.substring(1);
|
|
591
|
+
term = _.clone(registeredTerms[name]);
|
|
592
|
+
term.value = '@' + term.value;
|
|
593
|
+
} else {
|
|
594
|
+
term = registeredTerms[name];
|
|
595
|
+
}
|
|
596
|
+
if ('undefined' === typeof term) {
|
|
597
|
+
/**
|
|
598
|
+
* @event termerror
|
|
599
|
+
* @param {TypeError} err
|
|
600
|
+
*/
|
|
601
|
+
return this.trigger('termerror', new TypeError('Invalid term: ' + name));
|
|
602
|
+
}
|
|
603
|
+
return this.addTerm(name, term);
|
|
604
|
+
},
|
|
605
|
+
/**
|
|
606
|
+
* Inserts a list of terms in the expression at the current position
|
|
607
|
+
* @param {String|String[]} names - The names of the terms to insert.
|
|
608
|
+
* Could be either an array of names or a list separated by spaces.
|
|
609
|
+
* @returns {calculator}
|
|
610
|
+
* @fires termerror if a term to add is invalid
|
|
611
|
+
* @fires termadd when a term has been added
|
|
612
|
+
*/
|
|
613
|
+
useTerms: function useTerms(names) {
|
|
614
|
+
if ('string' === typeof names) {
|
|
615
|
+
names = names.split(/\s+/);
|
|
616
|
+
}
|
|
617
|
+
_.forEach(names, this.useTerm.bind(this));
|
|
618
|
+
return this;
|
|
619
|
+
},
|
|
620
|
+
/**
|
|
621
|
+
* Inserts a variable as a term in the expression at the current position
|
|
622
|
+
* @param {String} name - The name of the variable to insert
|
|
623
|
+
* @returns {calculator}
|
|
624
|
+
* @fires termerror if the term to add is invalid
|
|
625
|
+
* @fires termadd when the term has been added
|
|
626
|
+
*/
|
|
627
|
+
useVariable: function useVariable(name) {
|
|
628
|
+
if (!variables.has(name)) {
|
|
629
|
+
/**
|
|
630
|
+
* @event termerror
|
|
631
|
+
* @param {TypeError} err
|
|
632
|
+
*/
|
|
633
|
+
return this.trigger('termerror', new TypeError('Invalid variable: ' + name));
|
|
634
|
+
}
|
|
635
|
+
return this.addTerm('VAR_' + name.toUpperCase(), {
|
|
636
|
+
label: name,
|
|
637
|
+
value: name,
|
|
638
|
+
type: 'variable',
|
|
639
|
+
description: __('Variable %s', name)
|
|
640
|
+
});
|
|
641
|
+
},
|
|
642
|
+
/**
|
|
643
|
+
* Calls a command
|
|
644
|
+
* @param {String} name - The name of the called command
|
|
645
|
+
* @param {*} ... - additional params for the command
|
|
646
|
+
* @returns {calculator}
|
|
647
|
+
* @fires command with the name and the parameters of the command
|
|
648
|
+
* @fires command-<name> with the parameters of the command
|
|
649
|
+
* @fires commanderror if the command is invalid
|
|
650
|
+
*/
|
|
651
|
+
useCommand: function useCommand(name) {
|
|
652
|
+
if (!commands.has(name)) {
|
|
653
|
+
/**
|
|
654
|
+
* @event commanderror
|
|
655
|
+
* @param {TypeError} err
|
|
656
|
+
*/
|
|
657
|
+
return this.trigger('commanderror', new TypeError('Invalid command: ' + name));
|
|
658
|
+
}
|
|
795
659
|
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
* @
|
|
800
|
-
* @param {Error} err
|
|
660
|
+
/**
|
|
661
|
+
* @event command
|
|
662
|
+
* @param {String} name - The name of the called command
|
|
663
|
+
* @param {*} ... - additional params for the command
|
|
801
664
|
*/
|
|
802
|
-
this.trigger('
|
|
803
|
-
}
|
|
665
|
+
this.trigger.apply(this, ['command'].concat([].slice.call(arguments)));
|
|
804
666
|
|
|
805
|
-
|
|
806
|
-
|
|
667
|
+
/**
|
|
668
|
+
* @event command-<name>
|
|
669
|
+
* @param {*} ... - additional params for the command
|
|
670
|
+
*/
|
|
671
|
+
this.trigger.apply(this, ['command-' + name].concat([].slice.call(arguments, 1)));
|
|
672
|
+
return this;
|
|
673
|
+
},
|
|
674
|
+
/**
|
|
675
|
+
* Replaces the expression and move the cursor at the end.
|
|
676
|
+
* @param {String} newExpression - The new expression to set
|
|
677
|
+
* @param {Number|String} [newPosition=newExpression.length] - The new position to set
|
|
678
|
+
* @returns {calculator}
|
|
679
|
+
* @fires replace after the expression has been replaced
|
|
680
|
+
*/
|
|
681
|
+
replace: function replace(newExpression, newPosition) {
|
|
682
|
+
var oldExpression = expression;
|
|
683
|
+
var oldPosition = position;
|
|
684
|
+
this.setExpression(newExpression).setPosition('undefined' !== typeof newPosition ? newPosition : expression.length);
|
|
685
|
+
|
|
686
|
+
/**
|
|
687
|
+
* @event replace
|
|
688
|
+
* @param {String} expression - the replaced expression
|
|
689
|
+
* @param {Number} position - the replaced position
|
|
690
|
+
*/
|
|
691
|
+
this.trigger('replace', oldExpression, oldPosition);
|
|
692
|
+
return this;
|
|
693
|
+
},
|
|
694
|
+
/**
|
|
695
|
+
* Inserts a sub-expression in the current expression and move the cursor.
|
|
696
|
+
* @param {String} subExpression - The sub-expression to insert
|
|
697
|
+
* @returns {calculator}
|
|
698
|
+
* @fires insert after the expression has been inserted
|
|
699
|
+
*/
|
|
700
|
+
insert: function insert(subExpression) {
|
|
701
|
+
var oldExpression = expression;
|
|
702
|
+
var oldPosition = position;
|
|
703
|
+
this.setExpression(expression.substr(0, position) + subExpression + expression.substr(position)).setPosition(position + subExpression.length);
|
|
704
|
+
|
|
705
|
+
/**
|
|
706
|
+
* @event insert
|
|
707
|
+
* @param {String} expression - the replaced expression
|
|
708
|
+
* @param {Number} position - the replaced position
|
|
709
|
+
*/
|
|
710
|
+
this.trigger('insert', oldExpression, oldPosition);
|
|
711
|
+
return this;
|
|
712
|
+
},
|
|
713
|
+
/**
|
|
714
|
+
* Clears the expression
|
|
715
|
+
* @returns {calculator}
|
|
716
|
+
* @fires clear after the expression has been cleared
|
|
717
|
+
*/
|
|
718
|
+
clear: function clear() {
|
|
719
|
+
this.setExpression('').setPosition(0);
|
|
807
720
|
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
721
|
+
/**
|
|
722
|
+
* @event clear
|
|
723
|
+
*/
|
|
724
|
+
this.trigger('clear');
|
|
725
|
+
return this;
|
|
726
|
+
},
|
|
727
|
+
/**
|
|
728
|
+
* Evaluates the current expression
|
|
729
|
+
* @returns {mathsExpression|null}
|
|
730
|
+
* @fires evaluate when the expression has been evaluated
|
|
731
|
+
* @fires syntaxerror when the expression contains an error
|
|
732
|
+
*/
|
|
733
|
+
evaluate: function evaluate() {
|
|
734
|
+
var result = null;
|
|
735
|
+
try {
|
|
736
|
+
if (expression.trim()) {
|
|
737
|
+
result = mathsEvaluator(expression, _.mapValues(this.getVariables(), 'result'));
|
|
738
|
+
} else {
|
|
739
|
+
result = mathsEvaluator('0');
|
|
740
|
+
}
|
|
816
741
|
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
742
|
+
/**
|
|
743
|
+
* @event evaluate
|
|
744
|
+
* @param {mathsExpression} result
|
|
745
|
+
*/
|
|
746
|
+
this.trigger('evaluate', result);
|
|
747
|
+
} catch (e) {
|
|
748
|
+
/**
|
|
749
|
+
* @event syntaxerror
|
|
750
|
+
* @param {Error} err
|
|
751
|
+
*/
|
|
752
|
+
this.trigger('syntaxerror', e);
|
|
820
753
|
}
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
754
|
+
return result;
|
|
755
|
+
},
|
|
756
|
+
/**
|
|
757
|
+
* Runs a method in all plugins
|
|
758
|
+
*
|
|
759
|
+
* @param {String} method - the method to run
|
|
760
|
+
* @returns {Promise} once that resolve when all plugins are done
|
|
761
|
+
*/
|
|
762
|
+
runPlugins: function runPlugins(method) {
|
|
763
|
+
var execStack = [];
|
|
764
|
+
_.forEach(plugins, function (plugin) {
|
|
765
|
+
if (_.isFunction(plugin[method])) {
|
|
766
|
+
execStack.push(plugin[method]());
|
|
767
|
+
}
|
|
768
|
+
});
|
|
769
|
+
return Promise.all(execStack);
|
|
770
|
+
},
|
|
771
|
+
/**
|
|
772
|
+
* Gets the calculator plugins
|
|
773
|
+
* @returns {Array} the plugins
|
|
774
|
+
*/
|
|
775
|
+
getPlugins: function getPlugins() {
|
|
776
|
+
return _.toArray(plugins);
|
|
777
|
+
},
|
|
778
|
+
/**
|
|
779
|
+
* Gets a plugin
|
|
780
|
+
* @param {String} name - the plugin name
|
|
781
|
+
* @returns {plugin} the plugin
|
|
782
|
+
*/
|
|
783
|
+
getPlugin: function getPlugin(name) {
|
|
784
|
+
return plugins[name];
|
|
785
|
+
},
|
|
786
|
+
/**
|
|
787
|
+
* Gets access to the areaBroker
|
|
788
|
+
* @returns {areaBroker}
|
|
789
|
+
*/
|
|
790
|
+
getAreaBroker: function getAreaBroker() {
|
|
791
|
+
return areaBroker;
|
|
792
|
+
},
|
|
793
|
+
/**
|
|
794
|
+
* Setups the maths evaluator
|
|
795
|
+
* @returns {calculator}
|
|
796
|
+
*/
|
|
797
|
+
setupMathsEvaluator: function setupMathsEvaluator() {
|
|
798
|
+
mathsEvaluator = mathsEvaluatorFactory(this.getConfig().maths);
|
|
799
|
+
return this;
|
|
800
|
+
},
|
|
801
|
+
/**
|
|
802
|
+
* Gets access to the mathsEvaluator
|
|
803
|
+
* @returns {Function}
|
|
804
|
+
*/
|
|
805
|
+
getMathsEvaluator: function getMathsEvaluator() {
|
|
806
|
+
return mathsEvaluator;
|
|
807
|
+
}
|
|
808
|
+
};
|
|
850
809
|
|
|
851
|
-
/**
|
|
852
|
-
*
|
|
853
|
-
* @returns {calculator}
|
|
810
|
+
/**
|
|
811
|
+
* @typedef {component} calculator
|
|
854
812
|
*/
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
*/
|
|
864
|
-
getMathsEvaluator: function getMathsEvaluator() {
|
|
865
|
-
return mathsEvaluator;
|
|
866
|
-
}
|
|
867
|
-
};
|
|
868
|
-
/**
|
|
869
|
-
* @typedef {component} calculator
|
|
870
|
-
*/
|
|
871
|
-
|
|
872
|
-
var calculator = componentFactory(calculatorApi, defaultConfig).setTemplate(boardTpl).before('init', function () {
|
|
873
|
-
this.setupMathsEvaluator();
|
|
874
|
-
this.setLastResult('0');
|
|
875
|
-
|
|
876
|
-
if (this.config.expression) {
|
|
877
|
-
this.setExpression(this.config.expression);
|
|
878
|
-
}
|
|
879
|
-
|
|
880
|
-
if (this.config.position) {
|
|
881
|
-
this.setPosition(this.config.position);
|
|
882
|
-
} // built-in commands
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
this.setCommand('clear', __('Clear'), __('Clear expression')).setCommand('clearAll', __('Clear All'), __('Clear all data')).setCommand('execute', __('Execute'), __('Compute the expression')).setCommand('var', __('Variable'), __('Use a variable')).setCommand('term', __('Term'), __('Use a term')).on('command-term', this.useTerms.bind(this)).on('command-var', this.useVariable.bind(this)).on('command-execute', this.evaluate.bind(this)).on('command-clearAll', this.deleteVariables.bind(this)).on('command-clear command-clearAll', this.clear.bind(this));
|
|
886
|
-
}).after('evaluate', function (result) {
|
|
887
|
-
this.setLastResult(result);
|
|
888
|
-
}).after('init', function () {
|
|
889
|
-
this.render($container);
|
|
890
|
-
}).before('render', function () {
|
|
891
|
-
var self = this;
|
|
892
|
-
var pluginsConfig = this.getConfig().plugins || {};
|
|
893
|
-
var $element = this.getElement();
|
|
894
|
-
areaBroker = areaBrokerFactory($element, {
|
|
895
|
-
screen: $element.find('.screen'),
|
|
896
|
-
// where the expressions and their result are rendered
|
|
897
|
-
input: $element.find('.input'),
|
|
898
|
-
// where the expressions are input
|
|
899
|
-
keyboard: $element.find('.keyboard') // the keyboard area that should provide a way to interact with the calculator
|
|
900
|
-
|
|
901
|
-
});
|
|
902
|
-
|
|
903
|
-
_.forEach(pluginFactories, function (pluginFactory) {
|
|
904
|
-
var plugin = pluginFactory(self, self.getAreaBroker());
|
|
905
|
-
var pluginName = plugin.getName();
|
|
906
|
-
|
|
907
|
-
if (pluginsConfig[pluginName]) {
|
|
908
|
-
plugin.setConfig(pluginsConfig[pluginName]);
|
|
813
|
+
var calculator = componentFactory(calculatorApi, defaultConfig).setTemplate(boardTpl).before('init', function () {
|
|
814
|
+
this.setupMathsEvaluator();
|
|
815
|
+
this.setLastResult('0');
|
|
816
|
+
if (this.config.expression) {
|
|
817
|
+
this.setExpression(this.config.expression);
|
|
818
|
+
}
|
|
819
|
+
if (this.config.position) {
|
|
820
|
+
this.setPosition(this.config.position);
|
|
909
821
|
}
|
|
910
822
|
|
|
911
|
-
|
|
912
|
-
|
|
823
|
+
// built-in commands
|
|
824
|
+
this.setCommand('clear', __('Clear'), __('Clear expression')).setCommand('clearAll', __('Clear All'), __('Clear all data')).setCommand('execute', __('Execute'), __('Compute the expression')).setCommand('var', __('Variable'), __('Use a variable')).setCommand('term', __('Term'), __('Use a term')).on('command-term', this.useTerms.bind(this)).on('command-var', this.useVariable.bind(this)).on('command-execute', this.evaluate.bind(this)).on('command-clearAll', this.deleteVariables.bind(this)).on('command-clear command-clearAll', this.clear.bind(this));
|
|
825
|
+
}).after('evaluate', function (result) {
|
|
826
|
+
this.setLastResult(result);
|
|
827
|
+
}).after('init', function () {
|
|
828
|
+
this.render($container);
|
|
829
|
+
}).before('render', function () {
|
|
830
|
+
var self = this;
|
|
831
|
+
var pluginsConfig = this.getConfig().plugins || {};
|
|
832
|
+
var $element = this.getElement();
|
|
833
|
+
areaBroker = areaBrokerFactory($element, {
|
|
834
|
+
screen: $element.find('.screen'),
|
|
835
|
+
// where the expressions and their result are rendered
|
|
836
|
+
input: $element.find('.input'),
|
|
837
|
+
// where the expressions are input
|
|
838
|
+
keyboard: $element.find('.keyboard') // the keyboard area that should provide a way to interact with the calculator
|
|
839
|
+
});
|
|
913
840
|
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
841
|
+
_.forEach(pluginFactories, function (pluginFactory) {
|
|
842
|
+
var plugin = pluginFactory(self, self.getAreaBroker());
|
|
843
|
+
var pluginName = plugin.getName();
|
|
844
|
+
if (pluginsConfig[pluginName]) {
|
|
845
|
+
plugin.setConfig(pluginsConfig[pluginName]);
|
|
846
|
+
}
|
|
847
|
+
plugins[plugin.getName()] = plugin;
|
|
848
|
+
});
|
|
849
|
+
return this.runPlugins('install').then(function () {
|
|
850
|
+
return self.runPlugins('init');
|
|
851
|
+
}).then(function () {
|
|
852
|
+
return self.runPlugins('render');
|
|
853
|
+
}).then(function () {
|
|
854
|
+
/**
|
|
855
|
+
* @event ready
|
|
856
|
+
*/
|
|
857
|
+
self.trigger('ready');
|
|
858
|
+
}).catch(function (err) {
|
|
859
|
+
self.trigger('error', err);
|
|
860
|
+
});
|
|
861
|
+
}).on('destroy', function () {
|
|
862
|
+
var self = this;
|
|
863
|
+
return this.runPlugins('destroy').then(function () {
|
|
864
|
+
self.off('.' + ns);
|
|
865
|
+
tokenizer = null;
|
|
866
|
+
areaBroker = null;
|
|
867
|
+
mathsEvaluator = null;
|
|
868
|
+
variables.clear();
|
|
869
|
+
plugins = {};
|
|
870
|
+
});
|
|
925
871
|
});
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
return this.runPlugins('destroy').then(function () {
|
|
929
|
-
self.off('.' + ns);
|
|
930
|
-
tokenizer = null;
|
|
931
|
-
areaBroker = null;
|
|
932
|
-
mathsEvaluator = null;
|
|
933
|
-
variables.clear();
|
|
934
|
-
plugins = {};
|
|
872
|
+
_.defer(function () {
|
|
873
|
+
calculator.init(config);
|
|
935
874
|
});
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
_.defer(function () {
|
|
939
|
-
calculator.init(config);
|
|
940
|
-
});
|
|
941
|
-
|
|
942
|
-
return calculator;
|
|
943
|
-
}
|
|
875
|
+
return calculator;
|
|
876
|
+
}
|
|
944
877
|
|
|
945
|
-
|
|
878
|
+
return calculatorBoardFactory;
|
|
946
879
|
|
|
947
880
|
});
|