@oat-sa/tao-core-ui 1.64.1 → 1.64.2
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 +22 -22
- package/dist/actionbar.js +92 -92
- package/dist/adder.js +109 -109
- package/dist/animable/absorbable/absorbable.js +29 -29
- package/dist/animable/absorbable/css/absorb.css +7 -7
- 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 +23 -23
- package/dist/areaBroker.js +51 -51
- package/dist/autocomplete/css/autocomplete.css +7 -7
- package/dist/autocomplete/css/autocomplete.css.map +1 -1
- package/dist/autocomplete.js +384 -384
- package/dist/autoscroll.js +22 -22
- package/dist/badge/badge.js +35 -35
- package/dist/badge/css/badge.css +7 -7
- 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 +57 -57
- package/dist/btngrouper.js +64 -64
- package/dist/bulkActionPopup/css/bulkActionPopup.css +7 -7
- package/dist/bulkActionPopup/css/bulkActionPopup.css.map +1 -1
- package/dist/bulkActionPopup.js +91 -91
- package/dist/button.js +89 -89
- package/dist/calculator/css/calculator.css +10 -10
- package/dist/calculator/css/calculator.css.map +1 -1
- package/dist/calculator.js +51 -51
- package/dist/cascadingComboBox.js +34 -34
- package/dist/ckeditor/ckConfigurator.js +49 -49
- package/dist/ckeditor/dtdHandler.js +110 -110
- package/dist/class/css/selector.css +7 -7
- package/dist/class/css/selector.css.map +1 -1
- package/dist/class/selector.js +98 -98
- package/dist/component/alignable.js +81 -81
- package/dist/component/containable.js +37 -37
- 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 +25 -25
- package/dist/component/placeable.js +70 -70
- package/dist/component/resizable.js +61 -61
- package/dist/component/stackable.js +20 -20
- package/dist/component/windowed.js +46 -46
- package/dist/component.js +140 -140
- package/dist/container.js +76 -76
- package/dist/contextualPopup/css/contextualPopup.css +7 -7
- package/dist/contextualPopup/css/contextualPopup.css.map +1 -1
- package/dist/contextualPopup.js +100 -100
- package/dist/dashboard/css/dashboard.css +7 -7
- package/dist/dashboard/css/dashboard.css.map +1 -1
- package/dist/dashboard.js +62 -62
- package/dist/datalist/css/datalist.css +7 -7
- package/dist/datalist/css/datalist.css.map +1 -1
- package/dist/datalist.js +147 -147
- package/dist/datatable/css/datatable.css +7 -7
- package/dist/datatable/css/datatable.css.map +1 -1
- package/dist/datatable/filterStrategy/filterStrategy.js +27 -27
- package/dist/datatable/filterStrategy/multiple.js +25 -25
- package/dist/datatable/filterStrategy/single.js +25 -25
- package/dist/datatable.js +377 -377
- package/dist/dateRange/css/dateRange.css +7 -7
- package/dist/dateRange/css/dateRange.css.map +1 -1
- package/dist/dateRange/dateRange.js +97 -97
- package/dist/datetime/css/picker.css +7 -7
- package/dist/datetime/css/picker.css.map +1 -1
- package/dist/datetime/picker.js +161 -161
- package/dist/deleter.js +79 -79
- package/dist/destination/css/selector.css +7 -7
- package/dist/destination/css/selector.css.map +1 -1
- package/dist/destination/selector.js +52 -52
- package/dist/dialog/alert.js +26 -26
- package/dist/dialog/confirm.js +27 -27
- package/dist/dialog/confirmDelete.js +31 -31
- package/dist/dialog.js +141 -141
- package/dist/disabler.js +90 -90
- 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 +30 -30
- package/dist/documentViewer/providers/pdfViewer/pdfjs/areaBroker.js +25 -25
- package/dist/documentViewer/providers/pdfViewer/pdfjs/findBar.js +120 -120
- package/dist/documentViewer/providers/pdfViewer/pdfjs/pageView.js +89 -89
- package/dist/documentViewer/providers/pdfViewer/pdfjs/pagesManager.js +52 -52
- package/dist/documentViewer/providers/pdfViewer/pdfjs/searchEngine.js +112 -112
- package/dist/documentViewer/providers/pdfViewer/pdfjs/textManager.js +67 -67
- package/dist/documentViewer/providers/pdfViewer/pdfjs/viewer.js +81 -81
- package/dist/documentViewer/providers/pdfViewer/pdfjs/wrapper.js +111 -111
- package/dist/documentViewer/providers/pdfViewer.js +29 -29
- package/dist/documentViewer/viewerFactory.js +71 -71
- package/dist/documentViewer.js +86 -86
- package/dist/dropdown/css/dropdown.css +7 -7
- package/dist/dropdown/css/dropdown.css.map +1 -1
- package/dist/dropdown.js +84 -84
- package/dist/durationer.js +58 -58
- package/dist/dynamicComponent/css/dynamicComponent.css +7 -7
- package/dist/dynamicComponent/css/dynamicComponent.css.map +1 -1
- package/dist/dynamicComponent.js +103 -103
- package/dist/feedback.js +84 -84
- package/dist/figure/FigureStateActive.js +111 -111
- package/dist/filesender.js +26 -26
- package/dist/filter.js +34 -34
- 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 +99 -99
- package/dist/form/form.js +248 -248
- package/dist/form/simpleForm.js +71 -71
- 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 +52 -52
- package/dist/form/validator/validator.js +103 -103
- 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 +24 -24
- package/dist/form/widget/loader.js +16 -16
- package/dist/form/widget/providers/checkBox.js +62 -62
- package/dist/form/widget/providers/comboBox.js +46 -46
- package/dist/form/widget/providers/default.js +35 -35
- package/dist/form/widget/providers/hidden.js +37 -37
- package/dist/form/widget/providers/hiddenBox.js +58 -58
- package/dist/form/widget/providers/radioBox.js +57 -57
- package/dist/form/widget/providers/textArea.js +35 -35
- package/dist/form/widget/providers/textBox.js +34 -34
- package/dist/form/widget/widget.js +141 -141
- package/dist/form.js +10 -10
- package/dist/formValidator/formValidator.js +61 -61
- package/dist/formValidator/highlighters/highlighter.js +41 -41
- package/dist/formValidator/highlighters/message.js +29 -29
- package/dist/formValidator/highlighters/tooltip.js +32 -32
- 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 +73 -73
- 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 +38 -38
- package/dist/generis/widget/checkBox/checkBox.js +39 -39
- package/dist/generis/widget/comboBox/comboBox.js +32 -32
- 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 +40 -40
- package/dist/generis/widget/loader.js +20 -20
- package/dist/generis/widget/textBox/textBox.js +27 -27
- package/dist/generis/widget/widget.js +47 -47
- package/dist/groupedComboBox.js +36 -36
- package/dist/groupvalidator.js +19 -19
- package/dist/hider.js +41 -41
- package/dist/highlighter.js +278 -278
- package/dist/image/ImgStateActive/extractLabel.js +20 -20
- package/dist/image/ImgStateActive/helper.js +16 -16
- package/dist/image/ImgStateActive/initHelper.js +85 -85
- package/dist/image/ImgStateActive/initMediaEditor.js +48 -48
- package/dist/image/ImgStateActive/mediaSizer.js +32 -32
- package/dist/image/ImgStateActive.js +104 -104
- package/dist/incrementer.js +58 -58
- package/dist/inplacer.js +87 -87
- package/dist/interactUtils.js +42 -42
- package/dist/itemButtonList/css/item-button-list.css +23 -23
- package/dist/itemButtonList/css/item-button-list.css.map +1 -1
- package/dist/itemButtonList.js +102 -102
- package/dist/keyNavigation/navigableDomElement.js +76 -76
- package/dist/keyNavigation/navigator.js +158 -158
- package/dist/listbox/css/listbox.css +7 -7
- package/dist/listbox/css/listbox.css.map +1 -1
- package/dist/listbox.js +84 -84
- package/dist/liststyler.js +57 -57
- package/dist/loadingButton/css/button.css +7 -7
- package/dist/loadingButton/css/button.css.map +1 -1
- package/dist/loadingButton/loadingButton.js +35 -35
- package/dist/lock.js +112 -112
- package/dist/login/login.js +87 -87
- package/dist/maths/calculator/basicCalculator.js +50 -50
- package/dist/maths/calculator/calculatorComponent.js +29 -29
- package/dist/maths/calculator/core/areaBroker.js +25 -25
- package/dist/maths/calculator/core/board.js +300 -300
- package/dist/maths/calculator/core/expression.js +98 -98
- package/dist/maths/calculator/core/labels.js +16 -16
- package/dist/maths/calculator/core/plugin.js +19 -19
- package/dist/maths/calculator/core/terms.js +26 -26
- package/dist/maths/calculator/core/tokenizer.js +98 -98
- package/dist/maths/calculator/core/tokens.js +75 -75
- 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 +23 -23
- package/dist/maths/calculator/plugins/core/degrad.js +22 -22
- package/dist/maths/calculator/plugins/core/history.js +45 -45
- package/dist/maths/calculator/plugins/core/remind.js +22 -22
- package/dist/maths/calculator/plugins/core/stepNavigation.js +31 -31
- package/dist/maths/calculator/plugins/keyboard/templateKeyboard/templateKeyboard.js +48 -48
- package/dist/maths/calculator/plugins/modifiers/pow10.js +35 -35
- package/dist/maths/calculator/plugins/modifiers/sign.js +90 -90
- package/dist/maths/calculator/plugins/screen/simpleScreen/simpleScreen.js +47 -47
- package/dist/maths/calculator/pluginsLoader.js +21 -21
- package/dist/maths/calculator/scientificCalculator.js +78 -78
- package/dist/mediaEditor/mediaEditorComponent.js +51 -51
- package/dist/mediaEditor/plugins/mediaAlignment/helper.js +16 -16
- package/dist/mediaEditor/plugins/mediaAlignment/mediaAlignmentComponent.js +47 -47
- package/dist/mediaEditor/plugins/mediaAlignment/style.css +7 -7
- package/dist/mediaEditor/plugins/mediaDimension/helper.js +70 -70
- package/dist/mediaEditor/plugins/mediaDimension/mediaDimensionComponent.js +140 -140
- 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 +52 -52
- package/dist/mediaplayer/players/youtube.js +39 -39
- package/dist/mediaplayer/players.js +18 -18
- package/dist/mediaplayer/support.js +55 -55
- package/dist/mediaplayer/utils/reminder.js +100 -100
- package/dist/mediaplayer/utils/timeObserver.js +92 -92
- package/dist/mediaplayer/youtubeManager.js +51 -51
- package/dist/mediaplayer.js +447 -447
- package/dist/mediasizer.js +122 -122
- package/dist/modal.js +87 -87
- package/dist/movableComponent.js +35 -35
- package/dist/pageSizeSelector.js +31 -31
- package/dist/pageStatus.js +33 -33
- package/dist/pagination/css/pagination.css +7 -7
- package/dist/pagination/css/pagination.css.map +1 -1
- package/dist/pagination/paginationStrategy.js +23 -23
- package/dist/pagination/providers/pages.js +24 -24
- package/dist/pagination/providers/simple.js +22 -22
- package/dist/pagination.js +45 -45
- package/dist/previewer.js +67 -67
- package/dist/progressbar.js +58 -58
- package/dist/propertySelector/css/propertySelector.css +7 -7
- package/dist/propertySelector/css/propertySelector.css.map +1 -1
- package/dist/propertySelector/propertySelector.js +86 -86
- package/dist/report.js +73 -73
- package/dist/resource/css/selector.css +7 -7
- package/dist/resource/css/selector.css.map +1 -1
- package/dist/resource/filters.js +60 -60
- package/dist/resource/list.js +53 -53
- package/dist/resource/selectable.js +92 -92
- package/dist/resource/selector.js +182 -182
- package/dist/resource/tree.js +91 -91
- package/dist/resourcemgr/css/resourcemgr.css +7 -7
- package/dist/resourcemgr/css/resourcemgr.css.map +1 -1
- package/dist/resourcemgr/fileBrowser.js +75 -75
- package/dist/resourcemgr/fileSelector.js +45 -45
- package/dist/resourcemgr/util/updatePermissions.js +4 -4
- package/dist/resourcemgr.js +49 -49
- package/dist/scroller.js +26 -26
- package/dist/searchModal/advancedSearch.js +155 -155
- package/dist/searchModal/css/advancedSearch.css +7 -7
- package/dist/searchModal/css/advancedSearch.css.map +1 -1
- package/dist/searchModal/css/searchModal.css +7 -7
- package/dist/searchModal/css/searchModal.css.map +1 -1
- package/dist/searchModal.js +134 -134
- package/dist/selecter.js +6 -6
- package/dist/stacker.js +43 -43
- package/dist/switch/css/switch.css +7 -7
- package/dist/switch/css/switch.css.map +1 -1
- package/dist/switch/switch.js +62 -62
- package/dist/tableModel.js +33 -33
- package/dist/tabs/css/tabs.css +12 -12
- package/dist/tabs/css/tabs.css.map +1 -1
- package/dist/tabs.js +220 -220
- package/dist/taskQueue/css/taskQueue.css +7 -7
- package/dist/taskQueue/css/taskQueue.css.map +1 -1
- package/dist/taskQueue/status.js +59 -59
- package/dist/taskQueue/table.js +54 -54
- package/dist/taskQueue/taskQueue.js +18 -18
- package/dist/taskQueue/taskQueueModel.js +102 -102
- package/dist/taskQueue.js +47 -47
- 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 +39 -39
- package/dist/taskQueueButton/taskable.js +41 -41
- package/dist/taskQueueButton/treeButton.js +43 -43
- package/dist/themeLoader.js +75 -75
- package/dist/themes.js +84 -84
- package/dist/toggler.js +57 -57
- package/dist/tooltip.js +41 -41
- package/dist/tooltipster.js +17 -17
- package/dist/transformer.js +117 -117
- package/dist/tristateCheckboxGroup/css/tristateCheckboxGroup.css +7 -7
- package/dist/tristateCheckboxGroup/css/tristateCheckboxGroup.css.map +1 -1
- package/dist/tristateCheckboxGroup.js +62 -62
- package/dist/uploader.js +145 -145
- package/dist/validator/validators.js +48 -48
- package/dist/validator.js +23 -23
- package/dist/waitForMedia.js +33 -33
- package/dist/waitingDialog/css/waitingDialog.css +7 -7
- package/dist/waitingDialog/css/waitingDialog.css.map +1 -1
- package/dist/waitingDialog/waitingDialog.js +54 -54
- package/package.json +110 -110
- package/scss/basic.scss +16 -16
- package/scss/ckeditor/skins/tao/scss/inc/_ck-icons.scss +60 -60
- package/scss/ckeditor/skins/tao/scss/inc/_tao.scss +59 -59
- package/scss/font/tao/tao.svg +235 -235
- 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 -93
- package/scss/inc/_feedback.scss +154 -154
- 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 +227 -227
- package/scss/inc/fonts/_tao-icon-def.scss +12 -12
- package/scss/inc/fonts/_tao-icon-vars.scss +241 -241
- 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 -7
- 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 -7
- package/src/autocomplete/css/autocomplete.css.map +1 -1
- package/src/autocomplete/scss/autocomplete.scss +37 -37
- package/src/autocomplete.js +1027 -1027
- package/src/autoscroll.js +57 -57
- package/src/badge/badge.js +119 -119
- package/src/badge/css/badge.css +7 -7
- 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 +742 -742
- 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 +294 -294
- package/src/css/basic.css +104 -104
- 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 +179 -179
- 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 +7 -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 -149
- 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 +220 -220
- 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 +553 -553
- package/src/feedback/feedback.tpl +7 -7
- package/src/feedback.js +295 -295
- package/src/figure/FigureStateActive.js +184 -184
- package/src/filesender.js +112 -112
- package/src/filter/template.tpl +5 -5
- package/src/filter.js +129 -129
- 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 +47 -47
- package/src/formValidator/formValidator.js +253 -253
- package/src/formValidator/highlighters/highlighter.js +103 -103
- package/src/formValidator/highlighters/message.js +68 -68
- 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 +66 -66
- 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 +131 -131
- 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 +64 -64
- 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 +1192 -1192
- 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 +309 -309
- package/src/inplacer.js +315 -315
- package/src/interactUtils.js +140 -140
- package/src/itemButtonList/css/item-button-list.css +23 -23
- 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 +285 -285
- package/src/keyNavigation/navigator.js +535 -535
- 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 +252 -252
- 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 +393 -393
- package/src/login/login.js +317 -317
- 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 +190 -190
- 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 +110 -110
- 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 +190 -190
- 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 +106 -106
- 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 +7 -7
- package/src/propertySelector/css/propertySelector.css.map +1 -1
- package/src/propertySelector/propertySelector.js +286 -286
- package/src/propertySelector/scss/propertySelector.scss +66 -66
- package/src/propertySelector/tpl/property-description.tpl +12 -12
- package/src/propertySelector/tpl/property-selector.tpl +6 -6
- 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 +398 -398
- 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 +322 -322
- 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 -638
- package/src/searchModal/css/advancedSearch.css +7 -7
- package/src/searchModal/css/advancedSearch.css.map +1 -1
- package/src/searchModal/css/searchModal.css +7 -7
- package/src/searchModal/css/searchModal.css.map +1 -1
- package/src/searchModal/scss/advancedSearch.scss +171 -171
- package/src/searchModal/scss/searchModal.scss +393 -393
- package/src/searchModal/tpl/advanced-search.tpl +9 -9
- 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 -27
- package/src/searchModal/tpl/list-checkbox-criterion.tpl +17 -17
- package/src/searchModal/tpl/list-select-criterion.tpl +12 -12
- package/src/searchModal/tpl/text-criterion.tpl +11 -11
- package/src/searchModal.js +760 -760
- 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 +216 -216
- 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 +108 -108
- 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 +217 -217
- package/src/validator.js +262 -262
- 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,339 +1,339 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This program is free software; you can redistribute it and/or
|
|
3
|
-
* modify it under the terms of the GNU General Public License
|
|
4
|
-
* as published by the Free Software Foundation; under version 2
|
|
5
|
-
* of the License (non-upgradable).
|
|
6
|
-
*
|
|
7
|
-
* This program is distributed in the hope that it will be useful,
|
|
8
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
9
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
10
|
-
* GNU General Public License for more details.
|
|
11
|
-
*
|
|
12
|
-
* You should have received a copy of the GNU General Public License
|
|
13
|
-
* along with this program; if not, write to the Free Software
|
|
14
|
-
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
15
|
-
*
|
|
16
|
-
* Copyright (c) 2019 Open Assessment Technologies SA ;
|
|
17
|
-
*/
|
|
18
|
-
/**
|
|
19
|
-
* Plugin that allows to change the sign of the current operand
|
|
20
|
-
* @author Jean-Sébastien Conan <jean-sebastien@taotesting.com>
|
|
21
|
-
*/
|
|
22
|
-
import _ from 'lodash';
|
|
23
|
-
import __ from 'i18n';
|
|
24
|
-
import nsHelper from 'util/namespace';
|
|
25
|
-
import pluginFactory from 'ui/maths/calculator/core/plugin';
|
|
26
|
-
import tokensHelper from 'ui/maths/calculator/core/tokens';
|
|
27
|
-
import registeredTerms from 'ui/maths/calculator/core/terms';
|
|
28
|
-
|
|
29
|
-
var pluginName = 'sign';
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* List of tokens that refuse explicit positive sign
|
|
33
|
-
* @type {String[]}
|
|
34
|
-
*/
|
|
35
|
-
var refuseExplicitPositive = ['LPAR', 'SUB', 'ADD', 'MUL', 'DIV', 'MOD', 'POW', 'ASSIGN'];
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* @typedef {Object} signChange
|
|
39
|
-
* @property {String} sign - The sign to insert
|
|
40
|
-
* @property {Number} offset - The offset where insert the sign
|
|
41
|
-
* @property {Number} length - The length of text to replace
|
|
42
|
-
* @property {Number} move - The move to apply on the current position
|
|
43
|
-
*/
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* List of known strategies to apply on an expression in order to process sign change.
|
|
47
|
-
* Each strategy will return either `null` if cannot apply, or the descriptor of the change to apply.
|
|
48
|
-
* @type {Function[]}
|
|
49
|
-
*/
|
|
50
|
-
var strategies = [
|
|
51
|
-
/**
|
|
52
|
-
* Strategy that applies on numeric operands only
|
|
53
|
-
* @param {Number} index - The index of the current token
|
|
54
|
-
* @param {token[]} tokens - The list of tokens that represent the expression
|
|
55
|
-
* @returns {signChange|null} - The result of the strategy: `null` if cannot apply, or the descriptor of the change
|
|
56
|
-
*/
|
|
57
|
-
function strategyNumeric(index, tokens) {
|
|
58
|
-
var token = tokens[index] || null;
|
|
59
|
-
var type = tokensHelper.getType(token);
|
|
60
|
-
var result = null;
|
|
61
|
-
|
|
62
|
-
if (tokensHelper.isDigit(type) && index >= 0) {
|
|
63
|
-
// find the first token on the left of the operand
|
|
64
|
-
while (index && tokensHelper.isDigit(type)) {
|
|
65
|
-
index--;
|
|
66
|
-
token = tokens[index] || null;
|
|
67
|
-
type = tokensHelper.getType(token);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
if (tokensHelper.isDigit(type) && index === 0) {
|
|
71
|
-
// the operand is the first of the expression, so the sign is implicit +, simply negate the value
|
|
72
|
-
result = insertNegativeSign(token);
|
|
73
|
-
} else {
|
|
74
|
-
// the operand is preceded by something else
|
|
75
|
-
result = applySignChange(index, tokens);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
return result;
|
|
80
|
-
},
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Strategy that applies on operators only
|
|
84
|
-
* @param {Number} index - The index of the current token
|
|
85
|
-
* @param {token[]} tokens - The list of tokens that represent the expression
|
|
86
|
-
* @returns {signChange|null} - The result of the strategy: `null` if cannot apply, or the descriptor of the change
|
|
87
|
-
*/
|
|
88
|
-
function strategyOperator(index, tokens) {
|
|
89
|
-
var token = tokens[index] || null;
|
|
90
|
-
var type = tokensHelper.getType(token);
|
|
91
|
-
var result = null;
|
|
92
|
-
|
|
93
|
-
if (tokensHelper.isOperator(type) && index >= 0) {
|
|
94
|
-
if (token.type === 'SUB') {
|
|
95
|
-
// the operator is -, simply replace it by +
|
|
96
|
-
result = replaceByPositiveSign(token, index, tokens);
|
|
97
|
-
} else if (token.type === 'ADD') {
|
|
98
|
-
// the operator is +, simply replace it by -
|
|
99
|
-
result = replaceByNegativeSign(token);
|
|
100
|
-
} else if (token.type === 'FAC' && index > 0) {
|
|
101
|
-
// the operator is !, need to identify the operand
|
|
102
|
-
result = applyStrategies(index - 1, tokens);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
return result;
|
|
107
|
-
},
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Strategy that applies on identifiers only (constants, variables, functions)
|
|
111
|
-
* @param {Number} index - The index of the current token
|
|
112
|
-
* @param {token[]} tokens - The list of tokens that represent the expression
|
|
113
|
-
* @returns {signChange|null} - The result of the strategy: `null` if cannot apply, or the descriptor of the change
|
|
114
|
-
*/
|
|
115
|
-
function strategyIdentifier(index, tokens) {
|
|
116
|
-
var token = tokens[index] || null;
|
|
117
|
-
var type = tokensHelper.getType(token);
|
|
118
|
-
var result = null;
|
|
119
|
-
|
|
120
|
-
if (tokensHelper.isIdentifier(type) && index >= 0) {
|
|
121
|
-
if (index === 0) {
|
|
122
|
-
// the token is the first of the expression, so the sign is implicit +, simply negate the value
|
|
123
|
-
result = insertNegativeSign(token);
|
|
124
|
-
} else {
|
|
125
|
-
// the token is preceded by something else
|
|
126
|
-
result = applySignChange(index - 1, tokens);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
return result;
|
|
131
|
-
},
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Strategy that applies on sub-expression only
|
|
135
|
-
* @param {Number} index - The index of the current token
|
|
136
|
-
* @param {token[]} tokens - The list of tokens that represent the expression
|
|
137
|
-
* @returns {signChange|null} - The result of the strategy: `null` if cannot apply, or the descriptor of the change
|
|
138
|
-
*/
|
|
139
|
-
function strategyExpression(index, tokens) {
|
|
140
|
-
var token = tokens[index] || null;
|
|
141
|
-
var type = tokensHelper.getType(token);
|
|
142
|
-
var result = null;
|
|
143
|
-
var count = 0;
|
|
144
|
-
|
|
145
|
-
if (tokensHelper.isAggregator(type) && index >= 0) {
|
|
146
|
-
if (token.type === 'RPAR') {
|
|
147
|
-
count++;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
// find the opening parenthesis
|
|
151
|
-
while (index && (token.type !== 'LPAR' || count)) {
|
|
152
|
-
index--;
|
|
153
|
-
token = tokens[index] || null;
|
|
154
|
-
|
|
155
|
-
if (token.type === 'RPAR') {
|
|
156
|
-
count++;
|
|
157
|
-
}
|
|
158
|
-
if (token.type === 'LPAR') {
|
|
159
|
-
count--;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
if (!count && token.type === 'LPAR') {
|
|
164
|
-
if (index === 0) {
|
|
165
|
-
// the token is the first of the expression, so the sign is implicit +, simply negate the value
|
|
166
|
-
result = insertNegativeSign(token);
|
|
167
|
-
} else {
|
|
168
|
-
// the token is preceded by something else
|
|
169
|
-
result = applySignChange(index - 1, tokens);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
return result;
|
|
175
|
-
}
|
|
176
|
-
];
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Apply strategies to produce a sign change descriptor
|
|
180
|
-
* @param {Number} index - The index of the current token
|
|
181
|
-
* @param {token[]} tokens - The list of tokens that represent the expression
|
|
182
|
-
* @returns {signChange|null} - The result of the strategy: `null` if cannot apply, or the descriptor of the change
|
|
183
|
-
*/
|
|
184
|
-
function applyStrategies(index, tokens) {
|
|
185
|
-
var result = null;
|
|
186
|
-
|
|
187
|
-
_.forEach(strategies, function(strategy) {
|
|
188
|
-
result = strategy(index, tokens);
|
|
189
|
-
return !result;
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
return result;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
/**
|
|
196
|
-
* Apply a sign change at the current index
|
|
197
|
-
* @param {Number} index - The index of the current token
|
|
198
|
-
* @param {token[]} tokens - The list of tokens that represent the expression
|
|
199
|
-
* @returns {signChange|null} - The result of the strategy: `null` if cannot apply, or the descriptor of the change
|
|
200
|
-
*/
|
|
201
|
-
function applySignChange(index, tokens) {
|
|
202
|
-
var token = tokens[index] || null;
|
|
203
|
-
var nextToken = tokens[index + 1] || null;
|
|
204
|
-
var type = tokensHelper.getType(token);
|
|
205
|
-
var result = null;
|
|
206
|
-
|
|
207
|
-
if (token) {
|
|
208
|
-
if (tokensHelper.isOperator(type)) {
|
|
209
|
-
// an operator precedes the operand
|
|
210
|
-
if (token.type === 'SUB') {
|
|
211
|
-
// the operator is -, simply replace it by +
|
|
212
|
-
result = replaceByPositiveSign(token, index, tokens);
|
|
213
|
-
} else if (token.type === 'ADD') {
|
|
214
|
-
// the operator is +, simply replace it by -
|
|
215
|
-
result = replaceByNegativeSign(token);
|
|
216
|
-
} else if (nextToken) {
|
|
217
|
-
// the operator is not + or -, simply negate the value
|
|
218
|
-
result = insertNegativeSign(nextToken);
|
|
219
|
-
}
|
|
220
|
-
} else if (nextToken && (tokensHelper.isFunction(type) || token.type === 'LPAR')) {
|
|
221
|
-
// a function or a left parenthesis precedes the operand, simply negate the operand
|
|
222
|
-
result = insertNegativeSign(nextToken);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
return result;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
/**
|
|
230
|
-
* Checks if a token accept an explicit positive sign on the right
|
|
231
|
-
* @param {Object} token
|
|
232
|
-
* @returns {Boolean}
|
|
233
|
-
*/
|
|
234
|
-
function acceptExplicitPositive(token) {
|
|
235
|
-
return (
|
|
236
|
-
!token ||
|
|
237
|
-
(refuseExplicitPositive.indexOf(token.type) === -1 && !tokensHelper.isFunction(tokensHelper.getType(token)))
|
|
238
|
-
);
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
* Produces a descriptor to insert a negative sign
|
|
243
|
-
* @param {token} token
|
|
244
|
-
* @returns {signChange}
|
|
245
|
-
*/
|
|
246
|
-
function insertNegativeSign(token) {
|
|
247
|
-
return {
|
|
248
|
-
offset: token.offset,
|
|
249
|
-
length: 0,
|
|
250
|
-
sign: registeredTerms.SUB.value,
|
|
251
|
-
move: registeredTerms.SUB.value.length
|
|
252
|
-
};
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
/**
|
|
256
|
-
* Produces a descriptor to replace a sign by a negative sign
|
|
257
|
-
* @param {token} token
|
|
258
|
-
* @returns {signChange}
|
|
259
|
-
*/
|
|
260
|
-
function replaceByNegativeSign(token) {
|
|
261
|
-
return {
|
|
262
|
-
offset: token.offset,
|
|
263
|
-
length: token.value.length,
|
|
264
|
-
sign: registeredTerms.SUB.value,
|
|
265
|
-
move: registeredTerms.SUB.value.length - token.value.length
|
|
266
|
-
};
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
/**
|
|
270
|
-
* Produces a descriptor to replace a sign by a positive sign
|
|
271
|
-
* @param {token} token
|
|
272
|
-
* @param {Number} index
|
|
273
|
-
* @param {token[]} tokens
|
|
274
|
-
* @returns {signChange}
|
|
275
|
-
*/
|
|
276
|
-
function replaceByPositiveSign(token, index, tokens) {
|
|
277
|
-
var allowExplicit = index && acceptExplicitPositive(tokens[index - 1]);
|
|
278
|
-
return {
|
|
279
|
-
offset: token.offset,
|
|
280
|
-
length: token.value.length,
|
|
281
|
-
sign: allowExplicit ? registeredTerms.ADD.value : '',
|
|
282
|
-
move: (allowExplicit ? registeredTerms.ADD.value.length : 0) - token.value.length
|
|
283
|
-
};
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
/**
|
|
287
|
-
* Replaces text at position
|
|
288
|
-
* @param {String} str - The string in which apply the replacement
|
|
289
|
-
* @param {Number} index - The index from which applying the replacement
|
|
290
|
-
* @param {Number} length - The length of the string to replace
|
|
291
|
-
* @param {String} sub - The replacement string
|
|
292
|
-
* @returns {String}
|
|
293
|
-
*/
|
|
294
|
-
function splice(str, index, length, sub) {
|
|
295
|
-
return str.substring(0, index) + sub + str.substring(index + length);
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
export default pluginFactory({
|
|
299
|
-
name: pluginName,
|
|
300
|
-
|
|
301
|
-
/**
|
|
302
|
-
* Called when the plugin is installing in its host.
|
|
303
|
-
*/
|
|
304
|
-
install: function install() {
|
|
305
|
-
var calculator = this.getCalculator();
|
|
306
|
-
calculator.setCommand('sign', __('Sign change'), __('Change the sign of the current operand'));
|
|
307
|
-
},
|
|
308
|
-
|
|
309
|
-
/**
|
|
310
|
-
* Called when the plugin should be initialized.
|
|
311
|
-
*/
|
|
312
|
-
init: function init() {
|
|
313
|
-
var calculator = this.getCalculator();
|
|
314
|
-
|
|
315
|
-
// applies a sign change based on strategies
|
|
316
|
-
calculator.on(nsHelper.namespaceAll('command-sign', pluginName), function() {
|
|
317
|
-
var tokens = calculator.getTokens();
|
|
318
|
-
var index = calculator.getTokenIndex();
|
|
319
|
-
var expression = calculator.getExpression();
|
|
320
|
-
var result;
|
|
321
|
-
|
|
322
|
-
if (expression !== '0') {
|
|
323
|
-
result = applyStrategies(index, tokens);
|
|
324
|
-
if (result) {
|
|
325
|
-
expression = splice(expression, result.offset, result.length, result.sign);
|
|
326
|
-
calculator.replace(expression, calculator.getPosition() + result.move);
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
});
|
|
330
|
-
},
|
|
331
|
-
|
|
332
|
-
/**
|
|
333
|
-
* Called when the plugin is destroyed. Mostly when the host is destroyed itself.
|
|
334
|
-
*/
|
|
335
|
-
destroy: function destroy() {
|
|
336
|
-
var calculator = this.getCalculator();
|
|
337
|
-
calculator.deleteCommand('sign').off('.' + pluginName);
|
|
338
|
-
}
|
|
339
|
-
});
|
|
1
|
+
/**
|
|
2
|
+
* This program is free software; you can redistribute it and/or
|
|
3
|
+
* modify it under the terms of the GNU General Public License
|
|
4
|
+
* as published by the Free Software Foundation; under version 2
|
|
5
|
+
* of the License (non-upgradable).
|
|
6
|
+
*
|
|
7
|
+
* This program is distributed in the hope that it will be useful,
|
|
8
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
9
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
10
|
+
* GNU General Public License for more details.
|
|
11
|
+
*
|
|
12
|
+
* You should have received a copy of the GNU General Public License
|
|
13
|
+
* along with this program; if not, write to the Free Software
|
|
14
|
+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
15
|
+
*
|
|
16
|
+
* Copyright (c) 2019 Open Assessment Technologies SA ;
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Plugin that allows to change the sign of the current operand
|
|
20
|
+
* @author Jean-Sébastien Conan <jean-sebastien@taotesting.com>
|
|
21
|
+
*/
|
|
22
|
+
import _ from 'lodash';
|
|
23
|
+
import __ from 'i18n';
|
|
24
|
+
import nsHelper from 'util/namespace';
|
|
25
|
+
import pluginFactory from 'ui/maths/calculator/core/plugin';
|
|
26
|
+
import tokensHelper from 'ui/maths/calculator/core/tokens';
|
|
27
|
+
import registeredTerms from 'ui/maths/calculator/core/terms';
|
|
28
|
+
|
|
29
|
+
var pluginName = 'sign';
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* List of tokens that refuse explicit positive sign
|
|
33
|
+
* @type {String[]}
|
|
34
|
+
*/
|
|
35
|
+
var refuseExplicitPositive = ['LPAR', 'SUB', 'ADD', 'MUL', 'DIV', 'MOD', 'POW', 'ASSIGN'];
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @typedef {Object} signChange
|
|
39
|
+
* @property {String} sign - The sign to insert
|
|
40
|
+
* @property {Number} offset - The offset where insert the sign
|
|
41
|
+
* @property {Number} length - The length of text to replace
|
|
42
|
+
* @property {Number} move - The move to apply on the current position
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* List of known strategies to apply on an expression in order to process sign change.
|
|
47
|
+
* Each strategy will return either `null` if cannot apply, or the descriptor of the change to apply.
|
|
48
|
+
* @type {Function[]}
|
|
49
|
+
*/
|
|
50
|
+
var strategies = [
|
|
51
|
+
/**
|
|
52
|
+
* Strategy that applies on numeric operands only
|
|
53
|
+
* @param {Number} index - The index of the current token
|
|
54
|
+
* @param {token[]} tokens - The list of tokens that represent the expression
|
|
55
|
+
* @returns {signChange|null} - The result of the strategy: `null` if cannot apply, or the descriptor of the change
|
|
56
|
+
*/
|
|
57
|
+
function strategyNumeric(index, tokens) {
|
|
58
|
+
var token = tokens[index] || null;
|
|
59
|
+
var type = tokensHelper.getType(token);
|
|
60
|
+
var result = null;
|
|
61
|
+
|
|
62
|
+
if (tokensHelper.isDigit(type) && index >= 0) {
|
|
63
|
+
// find the first token on the left of the operand
|
|
64
|
+
while (index && tokensHelper.isDigit(type)) {
|
|
65
|
+
index--;
|
|
66
|
+
token = tokens[index] || null;
|
|
67
|
+
type = tokensHelper.getType(token);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (tokensHelper.isDigit(type) && index === 0) {
|
|
71
|
+
// the operand is the first of the expression, so the sign is implicit +, simply negate the value
|
|
72
|
+
result = insertNegativeSign(token);
|
|
73
|
+
} else {
|
|
74
|
+
// the operand is preceded by something else
|
|
75
|
+
result = applySignChange(index, tokens);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return result;
|
|
80
|
+
},
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Strategy that applies on operators only
|
|
84
|
+
* @param {Number} index - The index of the current token
|
|
85
|
+
* @param {token[]} tokens - The list of tokens that represent the expression
|
|
86
|
+
* @returns {signChange|null} - The result of the strategy: `null` if cannot apply, or the descriptor of the change
|
|
87
|
+
*/
|
|
88
|
+
function strategyOperator(index, tokens) {
|
|
89
|
+
var token = tokens[index] || null;
|
|
90
|
+
var type = tokensHelper.getType(token);
|
|
91
|
+
var result = null;
|
|
92
|
+
|
|
93
|
+
if (tokensHelper.isOperator(type) && index >= 0) {
|
|
94
|
+
if (token.type === 'SUB') {
|
|
95
|
+
// the operator is -, simply replace it by +
|
|
96
|
+
result = replaceByPositiveSign(token, index, tokens);
|
|
97
|
+
} else if (token.type === 'ADD') {
|
|
98
|
+
// the operator is +, simply replace it by -
|
|
99
|
+
result = replaceByNegativeSign(token);
|
|
100
|
+
} else if (token.type === 'FAC' && index > 0) {
|
|
101
|
+
// the operator is !, need to identify the operand
|
|
102
|
+
result = applyStrategies(index - 1, tokens);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return result;
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Strategy that applies on identifiers only (constants, variables, functions)
|
|
111
|
+
* @param {Number} index - The index of the current token
|
|
112
|
+
* @param {token[]} tokens - The list of tokens that represent the expression
|
|
113
|
+
* @returns {signChange|null} - The result of the strategy: `null` if cannot apply, or the descriptor of the change
|
|
114
|
+
*/
|
|
115
|
+
function strategyIdentifier(index, tokens) {
|
|
116
|
+
var token = tokens[index] || null;
|
|
117
|
+
var type = tokensHelper.getType(token);
|
|
118
|
+
var result = null;
|
|
119
|
+
|
|
120
|
+
if (tokensHelper.isIdentifier(type) && index >= 0) {
|
|
121
|
+
if (index === 0) {
|
|
122
|
+
// the token is the first of the expression, so the sign is implicit +, simply negate the value
|
|
123
|
+
result = insertNegativeSign(token);
|
|
124
|
+
} else {
|
|
125
|
+
// the token is preceded by something else
|
|
126
|
+
result = applySignChange(index - 1, tokens);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return result;
|
|
131
|
+
},
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Strategy that applies on sub-expression only
|
|
135
|
+
* @param {Number} index - The index of the current token
|
|
136
|
+
* @param {token[]} tokens - The list of tokens that represent the expression
|
|
137
|
+
* @returns {signChange|null} - The result of the strategy: `null` if cannot apply, or the descriptor of the change
|
|
138
|
+
*/
|
|
139
|
+
function strategyExpression(index, tokens) {
|
|
140
|
+
var token = tokens[index] || null;
|
|
141
|
+
var type = tokensHelper.getType(token);
|
|
142
|
+
var result = null;
|
|
143
|
+
var count = 0;
|
|
144
|
+
|
|
145
|
+
if (tokensHelper.isAggregator(type) && index >= 0) {
|
|
146
|
+
if (token.type === 'RPAR') {
|
|
147
|
+
count++;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// find the opening parenthesis
|
|
151
|
+
while (index && (token.type !== 'LPAR' || count)) {
|
|
152
|
+
index--;
|
|
153
|
+
token = tokens[index] || null;
|
|
154
|
+
|
|
155
|
+
if (token.type === 'RPAR') {
|
|
156
|
+
count++;
|
|
157
|
+
}
|
|
158
|
+
if (token.type === 'LPAR') {
|
|
159
|
+
count--;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
if (!count && token.type === 'LPAR') {
|
|
164
|
+
if (index === 0) {
|
|
165
|
+
// the token is the first of the expression, so the sign is implicit +, simply negate the value
|
|
166
|
+
result = insertNegativeSign(token);
|
|
167
|
+
} else {
|
|
168
|
+
// the token is preceded by something else
|
|
169
|
+
result = applySignChange(index - 1, tokens);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return result;
|
|
175
|
+
}
|
|
176
|
+
];
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Apply strategies to produce a sign change descriptor
|
|
180
|
+
* @param {Number} index - The index of the current token
|
|
181
|
+
* @param {token[]} tokens - The list of tokens that represent the expression
|
|
182
|
+
* @returns {signChange|null} - The result of the strategy: `null` if cannot apply, or the descriptor of the change
|
|
183
|
+
*/
|
|
184
|
+
function applyStrategies(index, tokens) {
|
|
185
|
+
var result = null;
|
|
186
|
+
|
|
187
|
+
_.forEach(strategies, function(strategy) {
|
|
188
|
+
result = strategy(index, tokens);
|
|
189
|
+
return !result;
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
return result;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Apply a sign change at the current index
|
|
197
|
+
* @param {Number} index - The index of the current token
|
|
198
|
+
* @param {token[]} tokens - The list of tokens that represent the expression
|
|
199
|
+
* @returns {signChange|null} - The result of the strategy: `null` if cannot apply, or the descriptor of the change
|
|
200
|
+
*/
|
|
201
|
+
function applySignChange(index, tokens) {
|
|
202
|
+
var token = tokens[index] || null;
|
|
203
|
+
var nextToken = tokens[index + 1] || null;
|
|
204
|
+
var type = tokensHelper.getType(token);
|
|
205
|
+
var result = null;
|
|
206
|
+
|
|
207
|
+
if (token) {
|
|
208
|
+
if (tokensHelper.isOperator(type)) {
|
|
209
|
+
// an operator precedes the operand
|
|
210
|
+
if (token.type === 'SUB') {
|
|
211
|
+
// the operator is -, simply replace it by +
|
|
212
|
+
result = replaceByPositiveSign(token, index, tokens);
|
|
213
|
+
} else if (token.type === 'ADD') {
|
|
214
|
+
// the operator is +, simply replace it by -
|
|
215
|
+
result = replaceByNegativeSign(token);
|
|
216
|
+
} else if (nextToken) {
|
|
217
|
+
// the operator is not + or -, simply negate the value
|
|
218
|
+
result = insertNegativeSign(nextToken);
|
|
219
|
+
}
|
|
220
|
+
} else if (nextToken && (tokensHelper.isFunction(type) || token.type === 'LPAR')) {
|
|
221
|
+
// a function or a left parenthesis precedes the operand, simply negate the operand
|
|
222
|
+
result = insertNegativeSign(nextToken);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
return result;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Checks if a token accept an explicit positive sign on the right
|
|
231
|
+
* @param {Object} token
|
|
232
|
+
* @returns {Boolean}
|
|
233
|
+
*/
|
|
234
|
+
function acceptExplicitPositive(token) {
|
|
235
|
+
return (
|
|
236
|
+
!token ||
|
|
237
|
+
(refuseExplicitPositive.indexOf(token.type) === -1 && !tokensHelper.isFunction(tokensHelper.getType(token)))
|
|
238
|
+
);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Produces a descriptor to insert a negative sign
|
|
243
|
+
* @param {token} token
|
|
244
|
+
* @returns {signChange}
|
|
245
|
+
*/
|
|
246
|
+
function insertNegativeSign(token) {
|
|
247
|
+
return {
|
|
248
|
+
offset: token.offset,
|
|
249
|
+
length: 0,
|
|
250
|
+
sign: registeredTerms.SUB.value,
|
|
251
|
+
move: registeredTerms.SUB.value.length
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Produces a descriptor to replace a sign by a negative sign
|
|
257
|
+
* @param {token} token
|
|
258
|
+
* @returns {signChange}
|
|
259
|
+
*/
|
|
260
|
+
function replaceByNegativeSign(token) {
|
|
261
|
+
return {
|
|
262
|
+
offset: token.offset,
|
|
263
|
+
length: token.value.length,
|
|
264
|
+
sign: registeredTerms.SUB.value,
|
|
265
|
+
move: registeredTerms.SUB.value.length - token.value.length
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Produces a descriptor to replace a sign by a positive sign
|
|
271
|
+
* @param {token} token
|
|
272
|
+
* @param {Number} index
|
|
273
|
+
* @param {token[]} tokens
|
|
274
|
+
* @returns {signChange}
|
|
275
|
+
*/
|
|
276
|
+
function replaceByPositiveSign(token, index, tokens) {
|
|
277
|
+
var allowExplicit = index && acceptExplicitPositive(tokens[index - 1]);
|
|
278
|
+
return {
|
|
279
|
+
offset: token.offset,
|
|
280
|
+
length: token.value.length,
|
|
281
|
+
sign: allowExplicit ? registeredTerms.ADD.value : '',
|
|
282
|
+
move: (allowExplicit ? registeredTerms.ADD.value.length : 0) - token.value.length
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Replaces text at position
|
|
288
|
+
* @param {String} str - The string in which apply the replacement
|
|
289
|
+
* @param {Number} index - The index from which applying the replacement
|
|
290
|
+
* @param {Number} length - The length of the string to replace
|
|
291
|
+
* @param {String} sub - The replacement string
|
|
292
|
+
* @returns {String}
|
|
293
|
+
*/
|
|
294
|
+
function splice(str, index, length, sub) {
|
|
295
|
+
return str.substring(0, index) + sub + str.substring(index + length);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
export default pluginFactory({
|
|
299
|
+
name: pluginName,
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Called when the plugin is installing in its host.
|
|
303
|
+
*/
|
|
304
|
+
install: function install() {
|
|
305
|
+
var calculator = this.getCalculator();
|
|
306
|
+
calculator.setCommand('sign', __('Sign change'), __('Change the sign of the current operand'));
|
|
307
|
+
},
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Called when the plugin should be initialized.
|
|
311
|
+
*/
|
|
312
|
+
init: function init() {
|
|
313
|
+
var calculator = this.getCalculator();
|
|
314
|
+
|
|
315
|
+
// applies a sign change based on strategies
|
|
316
|
+
calculator.on(nsHelper.namespaceAll('command-sign', pluginName), function() {
|
|
317
|
+
var tokens = calculator.getTokens();
|
|
318
|
+
var index = calculator.getTokenIndex();
|
|
319
|
+
var expression = calculator.getExpression();
|
|
320
|
+
var result;
|
|
321
|
+
|
|
322
|
+
if (expression !== '0') {
|
|
323
|
+
result = applyStrategies(index, tokens);
|
|
324
|
+
if (result) {
|
|
325
|
+
expression = splice(expression, result.offset, result.length, result.sign);
|
|
326
|
+
calculator.replace(expression, calculator.getPosition() + result.move);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
},
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Called when the plugin is destroyed. Mostly when the host is destroyed itself.
|
|
334
|
+
*/
|
|
335
|
+
destroy: function destroy() {
|
|
336
|
+
var calculator = this.getCalculator();
|
|
337
|
+
calculator.deleteCommand('sign').off('.' + pluginName);
|
|
338
|
+
}
|
|
339
|
+
});
|