@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,588 +1,570 @@
|
|
|
1
1
|
define(['lodash', 'ui/maths/calculator/core/terms', 'ui/maths/calculator/core/tokens', 'ui/maths/calculator/core/tokenizer', 'handlebars', 'i18n', 'lib/dompurify/purify'], function (_, registeredTerms, tokensHelper, tokenizerFactory, 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
|
-
* https://github.com/cure53/DOMPurify
|
|
30
|
-
* with config SAFE_FOR_TEMPLATES: true
|
|
31
|
-
* to make output safe for template systems
|
|
3
|
+
_ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;
|
|
4
|
+
registeredTerms = registeredTerms && Object.prototype.hasOwnProperty.call(registeredTerms, 'default') ? registeredTerms['default'] : registeredTerms;
|
|
5
|
+
tokensHelper = tokensHelper && Object.prototype.hasOwnProperty.call(tokensHelper, 'default') ? tokensHelper['default'] : tokensHelper;
|
|
6
|
+
tokenizerFactory = tokenizerFactory && Object.prototype.hasOwnProperty.call(tokenizerFactory, 'default') ? tokenizerFactory['default'] : tokenizerFactory;
|
|
7
|
+
Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;
|
|
8
|
+
__ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;
|
|
9
|
+
DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* This program is free software; you can redistribute it and/or
|
|
13
|
+
* modify it under the terms of the GNU General Public License
|
|
14
|
+
* as published by the Free Software Foundation; under version 2
|
|
15
|
+
* of the License (non-upgradable).
|
|
16
|
+
*
|
|
17
|
+
* This program is distributed in the hope that it will be useful,
|
|
18
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
19
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
20
|
+
* GNU General Public License for more details.
|
|
21
|
+
*
|
|
22
|
+
* You should have received a copy of the GNU General Public License
|
|
23
|
+
* along with this program; if not, write to the Free Software
|
|
24
|
+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
25
|
+
*
|
|
26
|
+
* Copyright (c) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
|
|
27
|
+
*
|
|
28
|
+
*
|
|
32
29
|
*/
|
|
30
|
+
function Helpers0 (hb) {
|
|
31
|
+
//register a i18n helper
|
|
32
|
+
hb.registerHelper('__', function (key) {
|
|
33
|
+
return __(key);
|
|
34
|
+
});
|
|
33
35
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
*/
|
|
45
|
-
|
|
46
|
-
hb.registerHelper('join', function (arr, keyValueGlue, fragmentGlue, wrapper) {
|
|
47
|
-
var fragments = [];
|
|
48
|
-
keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;
|
|
49
|
-
fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';
|
|
50
|
-
wrapper = typeof wrapper === 'string' ? wrapper : '"';
|
|
51
|
-
|
|
52
|
-
_.forIn(arr, function (value, key) {
|
|
53
|
-
var fragment = '';
|
|
36
|
+
/**
|
|
37
|
+
* Register dompurify helper
|
|
38
|
+
*
|
|
39
|
+
* https://github.com/cure53/DOMPurify
|
|
40
|
+
* with config SAFE_FOR_TEMPLATES: true
|
|
41
|
+
* to make output safe for template systems
|
|
42
|
+
*/
|
|
43
|
+
hb.registerHelper('dompurify', function (context) {
|
|
44
|
+
return DOMPurify.sanitize(context);
|
|
45
|
+
});
|
|
54
46
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Register join helper
|
|
49
|
+
*
|
|
50
|
+
* Example :
|
|
51
|
+
* var values = {a:v1, b:v2, c:v3};
|
|
52
|
+
* Using {{{join attributes '=' ' ' '"'}}} will return : a="v1" b="v2" c="v3"
|
|
53
|
+
* Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*
|
|
54
|
+
*/
|
|
55
|
+
hb.registerHelper('join', function (arr, keyValueGlue, fragmentGlue, wrapper) {
|
|
56
|
+
var fragments = [];
|
|
57
|
+
keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;
|
|
58
|
+
fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';
|
|
59
|
+
wrapper = typeof wrapper === 'string' ? wrapper : '"';
|
|
60
|
+
_.forIn(arr, function (value, key) {
|
|
61
|
+
var fragment = '';
|
|
62
|
+
if (value !== null || value !== undefined) {
|
|
63
|
+
if (typeof value === 'boolean') {
|
|
64
|
+
value = value ? 'true' : 'false';
|
|
65
|
+
} else if (typeof value === 'object') {
|
|
66
|
+
value = _.values(value).join(' ');
|
|
67
|
+
}
|
|
68
|
+
} else {
|
|
69
|
+
value = '';
|
|
60
70
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
71
|
+
if (keyValueGlue !== undefined) {
|
|
72
|
+
fragment += key + keyValueGlue;
|
|
73
|
+
}
|
|
74
|
+
fragment += wrapper + value + wrapper;
|
|
75
|
+
fragments.push(fragment);
|
|
76
|
+
});
|
|
77
|
+
return fragments.join(fragmentGlue);
|
|
78
|
+
});
|
|
64
79
|
|
|
65
|
-
|
|
66
|
-
|
|
80
|
+
//register a classic "for loop" helper
|
|
81
|
+
//it also adds a local variable "i" as the index in each iteration loop
|
|
82
|
+
hb.registerHelper('for', function (startIndex, stopIndex, increment, options) {
|
|
83
|
+
var ret = '';
|
|
84
|
+
startIndex = parseInt(startIndex);
|
|
85
|
+
stopIndex = parseInt(stopIndex);
|
|
86
|
+
increment = parseInt(increment);
|
|
87
|
+
for (var i = startIndex; i < stopIndex; i += increment) {
|
|
88
|
+
ret += options.fn(_.extend({}, this, {
|
|
89
|
+
i: i
|
|
90
|
+
}));
|
|
91
|
+
}
|
|
92
|
+
return ret;
|
|
93
|
+
});
|
|
94
|
+
hb.registerHelper('equal', function (var1, var2, options) {
|
|
95
|
+
if (var1 == var2) {
|
|
96
|
+
return options.fn(this);
|
|
97
|
+
} else {
|
|
98
|
+
return options.inverse(this);
|
|
67
99
|
}
|
|
68
|
-
|
|
69
|
-
fragment += wrapper + value + wrapper;
|
|
70
|
-
fragments.push(fragment);
|
|
71
100
|
});
|
|
72
101
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
102
|
+
// register a "get property" helper
|
|
103
|
+
// it gets the named property from the provided context
|
|
104
|
+
hb.registerHelper('property', function (name, context) {
|
|
105
|
+
return context[name] || '';
|
|
106
|
+
});
|
|
76
107
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
108
|
+
// register an 'includes' helper
|
|
109
|
+
// it checks if value is in array
|
|
110
|
+
hb.registerHelper('includes', function (haystack, needle, options) {
|
|
111
|
+
if (_.contains(haystack, needle)) {
|
|
112
|
+
return options.fn(this);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
82
116
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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); data = data || {};
|
|
124
|
+
var stack1, self=this, functionType="function", escapeExpression=this.escapeExpression;
|
|
125
|
+
|
|
126
|
+
function program1(depth0,data) {
|
|
127
|
+
|
|
128
|
+
var buffer = "", stack1, helper;
|
|
129
|
+
stack1 = helpers.each.call(depth0, (depth0 && depth0.startExponent), {hash:{},inverse:self.noop,fn:self.program(2, program2, data),data:data});
|
|
130
|
+
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
131
|
+
buffer += "<span class=\"term term-";
|
|
132
|
+
if (helper = helpers.type) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
133
|
+
else { helper = (depth0 && depth0.type); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
134
|
+
buffer += escapeExpression(stack1);
|
|
135
|
+
stack1 = helpers['if'].call(depth0, (depth0 && depth0.elide), {hash:{},inverse:self.noop,fn:self.program(4, program4, data),data:data});
|
|
136
|
+
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
137
|
+
buffer += "\" data-value=\"";
|
|
138
|
+
if (helper = helpers.value) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
139
|
+
else { helper = (depth0 && depth0.value); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
140
|
+
buffer += escapeExpression(stack1)
|
|
141
|
+
+ "\" data-token=\"";
|
|
142
|
+
if (helper = helpers.token) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
143
|
+
else { helper = (depth0 && depth0.token); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
144
|
+
buffer += escapeExpression(stack1)
|
|
145
|
+
+ "\" data-type=\"";
|
|
146
|
+
if (helper = helpers.type) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
147
|
+
else { helper = (depth0 && depth0.type); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
148
|
+
buffer += escapeExpression(stack1)
|
|
149
|
+
+ "\">";
|
|
150
|
+
if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
151
|
+
else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
152
|
+
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
153
|
+
buffer += "</span>";
|
|
154
|
+
stack1 = helpers.each.call(depth0, (depth0 && depth0.endExponent), {hash:{},inverse:self.noop,fn:self.program(6, program6, data),data:data});
|
|
155
|
+
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
156
|
+
return buffer;
|
|
87
157
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
if (var1 == var2) {
|
|
93
|
-
return options.fn(this);
|
|
94
|
-
} else {
|
|
95
|
-
return options.inverse(this);
|
|
158
|
+
function program2(depth0,data) {
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
return "<sup>";
|
|
96
162
|
}
|
|
97
|
-
}); // register a "get property" helper
|
|
98
|
-
// it gets the named property from the provided context
|
|
99
163
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
164
|
+
function program4(depth0,data) {
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
return " term-elide";
|
|
168
|
+
}
|
|
104
169
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
170
|
+
function program6(depth0,data) {
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
return "</sup>";
|
|
108
174
|
}
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
if (!Helpers0.__initialized) {
|
|
113
|
-
Helpers0(Handlebars);
|
|
114
|
-
Helpers0.__initialized = true;
|
|
115
|
-
}
|
|
116
|
-
var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
|
|
117
|
-
this.compilerInfo = [4,'>= 1.0.0'];
|
|
118
|
-
helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
|
|
119
|
-
var stack1, self=this, functionType="function", escapeExpression=this.escapeExpression;
|
|
120
|
-
|
|
121
|
-
function program1(depth0,data) {
|
|
122
|
-
|
|
123
|
-
var buffer = "", stack1, helper;
|
|
124
|
-
stack1 = helpers.each.call(depth0, (depth0 && depth0.startExponent), {hash:{},inverse:self.noop,fn:self.program(2, program2, data),data:data});
|
|
125
|
-
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
126
|
-
buffer += "<span class=\"term term-";
|
|
127
|
-
if (helper = helpers.type) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
128
|
-
else { helper = (depth0 && depth0.type); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
129
|
-
buffer += escapeExpression(stack1);
|
|
130
|
-
stack1 = helpers['if'].call(depth0, (depth0 && depth0.elide), {hash:{},inverse:self.noop,fn:self.program(4, program4, data),data:data});
|
|
131
|
-
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
132
|
-
buffer += "\" data-value=\"";
|
|
133
|
-
if (helper = helpers.value) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
134
|
-
else { helper = (depth0 && depth0.value); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
135
|
-
buffer += escapeExpression(stack1)
|
|
136
|
-
+ "\" data-token=\"";
|
|
137
|
-
if (helper = helpers.token) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
138
|
-
else { helper = (depth0 && depth0.token); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
139
|
-
buffer += escapeExpression(stack1)
|
|
140
|
-
+ "\" data-type=\"";
|
|
141
|
-
if (helper = helpers.type) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
142
|
-
else { helper = (depth0 && depth0.type); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
143
|
-
buffer += escapeExpression(stack1)
|
|
144
|
-
+ "\">";
|
|
145
|
-
if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
146
|
-
else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
147
|
-
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
148
|
-
buffer += "</span>";
|
|
149
|
-
stack1 = helpers.each.call(depth0, (depth0 && depth0.endExponent), {hash:{},inverse:self.noop,fn:self.program(6, program6, data),data:data});
|
|
150
|
-
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
151
|
-
return buffer;
|
|
152
|
-
}
|
|
153
|
-
function program2(depth0,data) {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
return "<sup>";
|
|
157
|
-
}
|
|
158
175
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
176
|
+
stack1 = helpers.each.call(depth0, depth0, {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
|
|
177
|
+
if(stack1 || stack1 === 0) { return stack1; }
|
|
178
|
+
else { return ''; }
|
|
179
|
+
});
|
|
180
|
+
function termsTpl(data, options, asString) {
|
|
181
|
+
var html = Template(data, options);
|
|
182
|
+
return (asString || true) ? html : $(html);
|
|
163
183
|
}
|
|
164
184
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
185
|
+
/**
|
|
186
|
+
* This program is free software; you can redistribute it and/or
|
|
187
|
+
* modify it under the terms of the GNU General Public License
|
|
188
|
+
* as published by the Free Software Foundation; under version 2
|
|
189
|
+
* of the License (non-upgradable).
|
|
190
|
+
*
|
|
191
|
+
* This program is distributed in the hope that it will be useful,
|
|
192
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
193
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
194
|
+
* GNU General Public License for more details.
|
|
195
|
+
*
|
|
196
|
+
* You should have received a copy of the GNU General Public License
|
|
197
|
+
* along with this program; if not, write to the Free Software
|
|
198
|
+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
199
|
+
*
|
|
200
|
+
* Copyright (c) 2019 Open Assessment Technologies SA ;
|
|
201
|
+
*/
|
|
170
202
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
return (asString || true) ? html : $(html);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* This program is free software; you can redistribute it and/or
|
|
182
|
-
* modify it under the terms of the GNU General Public License
|
|
183
|
-
* as published by the Free Software Foundation; under version 2
|
|
184
|
-
* of the License (non-upgradable).
|
|
185
|
-
*
|
|
186
|
-
* This program is distributed in the hope that it will be useful,
|
|
187
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
188
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
189
|
-
* GNU General Public License for more details.
|
|
190
|
-
*
|
|
191
|
-
* You should have received a copy of the GNU General Public License
|
|
192
|
-
* along with this program; if not, write to the Free Software
|
|
193
|
-
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
194
|
-
*
|
|
195
|
-
* Copyright (c) 2019 Open Assessment Technologies SA ;
|
|
196
|
-
*/
|
|
197
|
-
/**
|
|
198
|
-
* @typedef {term} renderTerm - Represents a renderable tokenizable term
|
|
199
|
-
* @property {Array} startExponent - List of exponent starts (will produce exponent notation for the term)
|
|
200
|
-
* @property {Array} endExponent - List of exponent ends (will finish exponent notation for the term)
|
|
201
|
-
* @property {Boolean} prefixed - Tells if the term is prefixed (i.e. function treated as binary operator)
|
|
202
|
-
* @property {Boolean} elide - Allows to hide the term when operands exist on each side
|
|
203
|
-
*/
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* Name of the variable that contains the last result
|
|
207
|
-
* @type {String}
|
|
208
|
-
*/
|
|
209
|
-
|
|
210
|
-
var lastResultVariableName = registeredTerms.ANS.value;
|
|
211
|
-
/**
|
|
212
|
-
* Regex that matches the prefixed function operators
|
|
213
|
-
* @type {RegExp}
|
|
214
|
-
*/
|
|
215
|
-
|
|
216
|
-
var rePrefixedTerm = /^@[a-zA-Z_]\w*$/;
|
|
217
|
-
/**
|
|
218
|
-
* Regex that matches the usual error tokens in a result
|
|
219
|
-
* @type {RegExp}
|
|
220
|
-
*/
|
|
221
|
-
|
|
222
|
-
var reErrorValue = /(NaN|[+-]?Infinity)/;
|
|
223
|
-
/**
|
|
224
|
-
* Regex that matches the last result variable
|
|
225
|
-
* @type {RegExp}
|
|
226
|
-
*/
|
|
227
|
-
|
|
228
|
-
var reAnsVar = new RegExp('\\b' + lastResultVariableName + '\\b', 'g');
|
|
229
|
-
/**
|
|
230
|
-
* List of tokens representing sign or sum
|
|
231
|
-
* @type {String[]}
|
|
232
|
-
*/
|
|
233
|
-
|
|
234
|
-
var signOperators = ['NEG', 'POS', 'SUB', 'ADD'];
|
|
235
|
-
/**
|
|
236
|
-
* List of tokens representing sub exponent parts to continue
|
|
237
|
-
* @type {String[]}
|
|
238
|
-
*/
|
|
239
|
-
|
|
240
|
-
var continueExponent = ['POW', 'NTHRT'];
|
|
241
|
-
/**
|
|
242
|
-
* Default number of significant digits used to round displayed variables
|
|
243
|
-
* @type {Number}
|
|
244
|
-
*/
|
|
245
|
-
|
|
246
|
-
var defaultDecimalDigits = 5;
|
|
247
|
-
/**
|
|
248
|
-
* List of helpers that apply on expression
|
|
249
|
-
* @type {Object}
|
|
250
|
-
*/
|
|
251
|
-
|
|
252
|
-
var expressionHelper = {
|
|
253
|
-
/**
|
|
254
|
-
* Checks if an expression contains an error token
|
|
255
|
-
* @param {String|Number|Object} expression
|
|
256
|
-
* @returns {Boolean}
|
|
203
|
+
/**
|
|
204
|
+
* @typedef {term} renderTerm - Represents a renderable tokenizable term
|
|
205
|
+
* @property {Array} startExponent - List of exponent starts (will produce exponent notation for the term)
|
|
206
|
+
* @property {Array} endExponent - List of exponent ends (will finish exponent notation for the term)
|
|
207
|
+
* @property {Boolean} prefixed - Tells if the term is prefixed (i.e. function treated as binary operator)
|
|
208
|
+
* @property {Boolean} elide - Allows to hide the term when operands exist on each side
|
|
257
209
|
*/
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
/**
|
|
263
|
-
* Replace the last result variable by a particular value in an expression
|
|
264
|
-
* @param {String|Number|Object} expression
|
|
265
|
-
* @param {String|Number|Object} value
|
|
266
|
-
* @returns {String}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Name of the variable that contains the last result
|
|
213
|
+
* @type {String}
|
|
267
214
|
*/
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
* Rounds the value of a variable
|
|
274
|
-
* @param {Object} variable
|
|
275
|
-
* @param {Number} [decimalDigits=5]
|
|
276
|
-
* @returns {String}
|
|
215
|
+
var lastResultVariableName = registeredTerms.ANS.value;
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Regex that matches the prefixed function operators
|
|
219
|
+
* @type {RegExp}
|
|
277
220
|
*/
|
|
278
|
-
|
|
279
|
-
var resultString = tokensHelper.stringValue(variable);
|
|
280
|
-
var fullString = resultString;
|
|
281
|
-
var value = variable && variable.result;
|
|
282
|
-
decimalDigits = decimalDigits || defaultDecimalDigits;
|
|
283
|
-
|
|
284
|
-
if ('undefined' !== typeof value) {
|
|
285
|
-
if (value.toExponential && resultString.indexOf(registeredTerms.EXP10.value) > 0) {
|
|
286
|
-
resultString = value.toExponential(decimalDigits).toString();
|
|
287
|
-
} else if (value.toDecimalPlaces && resultString.indexOf(registeredTerms.DOT.value) > 0) {
|
|
288
|
-
resultString = value.toDecimalPlaces(decimalDigits).toString();
|
|
289
|
-
}
|
|
221
|
+
var rePrefixedTerm = /^@[a-zA-Z_]\w*$/;
|
|
290
222
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
}
|
|
223
|
+
/**
|
|
224
|
+
* Regex that matches the usual error tokens in a result
|
|
225
|
+
* @type {RegExp}
|
|
226
|
+
*/
|
|
227
|
+
var reErrorValue = /(NaN|[+-]?Infinity)/;
|
|
297
228
|
|
|
298
|
-
|
|
299
|
-
|
|
229
|
+
/**
|
|
230
|
+
* Regex that matches the last result variable
|
|
231
|
+
* @type {RegExp}
|
|
232
|
+
*/
|
|
233
|
+
var reAnsVar = new RegExp('\\b' + lastResultVariableName + '\\b', 'g');
|
|
300
234
|
|
|
301
|
-
/**
|
|
302
|
-
*
|
|
303
|
-
* @
|
|
304
|
-
* @param {Number} [decimalDigits=5]
|
|
305
|
-
* @returns {Object}
|
|
235
|
+
/**
|
|
236
|
+
* List of tokens representing sign or sum
|
|
237
|
+
* @type {String[]}
|
|
306
238
|
*/
|
|
307
|
-
|
|
308
|
-
if (variables && 'undefined' !== typeof variables[lastResultVariableName]) {
|
|
309
|
-
variables[lastResultVariableName] = expressionHelper.roundVariable(variables[lastResultVariableName], decimalDigits);
|
|
310
|
-
}
|
|
239
|
+
var signOperators = ['NEG', 'POS', 'SUB', 'ADD'];
|
|
311
240
|
|
|
312
|
-
|
|
313
|
-
|
|
241
|
+
/**
|
|
242
|
+
* List of tokens representing sub exponent parts to continue
|
|
243
|
+
* @type {String[]}
|
|
244
|
+
*/
|
|
245
|
+
var continueExponent = ['POW', 'NTHRT'];
|
|
314
246
|
|
|
315
|
-
/**
|
|
316
|
-
*
|
|
317
|
-
* @
|
|
318
|
-
* @returns {String}
|
|
247
|
+
/**
|
|
248
|
+
* Default number of significant digits used to round displayed variables
|
|
249
|
+
* @type {Number}
|
|
319
250
|
*/
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
* Renders an expression into a HTML string, using the display label of each extracted token .
|
|
326
|
-
* @param {String|Number|Object|token[]} expression
|
|
327
|
-
* @param {Object} [variables]
|
|
328
|
-
* @param {calculatorTokenizer} [tokenizer]
|
|
329
|
-
* @returns {String}
|
|
251
|
+
var defaultDecimalDigits = 5;
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* List of helpers that apply on expression
|
|
255
|
+
* @type {Object}
|
|
330
256
|
*/
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
/**
|
|
337
|
-
* Transform an operator to a sign
|
|
338
|
-
* @param {renderTerm} term
|
|
339
|
-
* @param {String} token
|
|
257
|
+
var expressionHelper = {
|
|
258
|
+
/**
|
|
259
|
+
* Checks if an expression contains an error token
|
|
260
|
+
* @param {String|Number|Object} expression
|
|
261
|
+
* @returns {Boolean}
|
|
340
262
|
*/
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
var
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
token: token.type,
|
|
370
|
-
value: token.value,
|
|
371
|
-
label: token.value,
|
|
372
|
-
description: token.value,
|
|
373
|
-
exponent: null,
|
|
374
|
-
startExponent: [],
|
|
375
|
-
endExponent: [],
|
|
376
|
-
prefixed: rePrefixedTerm.test(token.value),
|
|
377
|
-
elide: false
|
|
378
|
-
};
|
|
379
|
-
|
|
380
|
-
if (registeredTerm) {
|
|
381
|
-
_.merge(term, registeredTerm); // always display the actual value of the last result variable
|
|
382
|
-
// also takes care of the value's sign
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
if (term.value === lastResultVariableName && 'undefined' !== typeof variables[term.value]) {
|
|
386
|
-
term.label = expressionHelper.render(variables[term.value], variables, tokenizer);
|
|
263
|
+
containsError: function containsError(expression) {
|
|
264
|
+
return reErrorValue.test(tokensHelper.stringValue(expression));
|
|
265
|
+
},
|
|
266
|
+
/**
|
|
267
|
+
* Replace the last result variable by a particular value in an expression
|
|
268
|
+
* @param {String|Number|Object} expression
|
|
269
|
+
* @param {String|Number|Object} value
|
|
270
|
+
* @returns {String}
|
|
271
|
+
*/
|
|
272
|
+
replaceLastResult: function replaceLastResult(expression, value) {
|
|
273
|
+
return tokensHelper.stringValue(expression).replace(reAnsVar, tokensHelper.stringValue(value || '0'));
|
|
274
|
+
},
|
|
275
|
+
/**
|
|
276
|
+
* Rounds the value of a variable
|
|
277
|
+
* @param {Object} variable
|
|
278
|
+
* @param {Number} [decimalDigits=5]
|
|
279
|
+
* @returns {String}
|
|
280
|
+
*/
|
|
281
|
+
roundVariable: function roundVariable(variable, decimalDigits) {
|
|
282
|
+
var resultString = tokensHelper.stringValue(variable);
|
|
283
|
+
var fullString = resultString;
|
|
284
|
+
var value = variable && variable.result;
|
|
285
|
+
decimalDigits = decimalDigits || defaultDecimalDigits;
|
|
286
|
+
if ('undefined' !== typeof value) {
|
|
287
|
+
if (value.toExponential && resultString.indexOf(registeredTerms.EXP10.value) > 0) {
|
|
288
|
+
resultString = value.toExponential(decimalDigits).toString();
|
|
289
|
+
} else if (value.toDecimalPlaces && resultString.indexOf(registeredTerms.DOT.value) > 0) {
|
|
290
|
+
resultString = value.toDecimalPlaces(decimalDigits).toString();
|
|
387
291
|
}
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
if ('undefined' !== typeof variables[term.value]) {
|
|
391
|
-
term.type = 'variable';
|
|
292
|
+
if (resultString.length < fullString.length) {
|
|
293
|
+
resultString += registeredTerms.ELLIPSIS.value;
|
|
392
294
|
} else {
|
|
393
|
-
|
|
295
|
+
resultString = fullString;
|
|
394
296
|
}
|
|
395
|
-
} // take care of the value's sign
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
if (term.token === 'SUB') {
|
|
399
|
-
toSignOperator(term, 'NEG');
|
|
400
|
-
} else if (term.token === 'ADD') {
|
|
401
|
-
toSignOperator(term, 'POS');
|
|
402
297
|
}
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
298
|
+
return resultString;
|
|
299
|
+
},
|
|
300
|
+
/**
|
|
301
|
+
* Rounds the value of the last result variable
|
|
302
|
+
* @param {Object} variables
|
|
303
|
+
* @param {Number} [decimalDigits=5]
|
|
304
|
+
* @returns {Object}
|
|
305
|
+
*/
|
|
306
|
+
roundLastResultVariable: function roundLastResultVariable(variables, decimalDigits) {
|
|
307
|
+
if (variables && 'undefined' !== typeof variables[lastResultVariableName]) {
|
|
308
|
+
variables[lastResultVariableName] = expressionHelper.roundVariable(variables[lastResultVariableName], decimalDigits);
|
|
409
309
|
}
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
310
|
+
return variables;
|
|
311
|
+
},
|
|
312
|
+
/**
|
|
313
|
+
* Replace sign operators by a proper symbol
|
|
314
|
+
* @param {String|Number|Object} expression
|
|
315
|
+
* @returns {String}
|
|
316
|
+
*/
|
|
317
|
+
renderSign: function renderSign(expression) {
|
|
318
|
+
return tokensHelper.stringValue(expression).replace(registeredTerms.SUB.value, registeredTerms.NEG.label).replace(registeredTerms.ADD.value, registeredTerms.POS.label);
|
|
319
|
+
},
|
|
320
|
+
/**
|
|
321
|
+
* Renders an expression into a HTML string, using the display label of each extracted token .
|
|
322
|
+
* @param {String|Number|Object|token[]} expression
|
|
323
|
+
* @param {Object} [variables]
|
|
324
|
+
* @param {calculatorTokenizer} [tokenizer]
|
|
325
|
+
* @returns {String}
|
|
326
|
+
*/
|
|
327
|
+
render: function render(expression, variables, tokenizer) {
|
|
328
|
+
var tokens = expression;
|
|
329
|
+
var exponents = [];
|
|
330
|
+
var terms = [];
|
|
331
|
+
var previous;
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Transform an operator to a sign
|
|
335
|
+
* @param {renderTerm} term
|
|
336
|
+
* @param {String} token
|
|
337
|
+
*/
|
|
338
|
+
function toSignOperator(term, token) {
|
|
339
|
+
if (!previous || tokensHelper.isModifier(previous.type) || previous.token === 'LPAR' || previous.token === 'EXP10') {
|
|
340
|
+
term.label = registeredTerms[token].label;
|
|
341
|
+
term.token = token;
|
|
342
|
+
}
|
|
422
343
|
}
|
|
423
|
-
});
|
|
424
344
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
* @param {Number} index
|
|
431
|
-
* @param {renderTerm[]} terms
|
|
432
|
-
*/
|
|
433
|
-
|
|
434
|
-
function exponentOnTheLeft(index, terms) {
|
|
435
|
-
var parenthesis = 0;
|
|
436
|
-
var next = terms[index];
|
|
437
|
-
var term = terms[--index];
|
|
438
|
-
/**
|
|
439
|
-
* Simply moves the cursor to the next term to examine.
|
|
440
|
-
* Here the move is made from the right to the left.
|
|
441
|
-
*/
|
|
442
|
-
|
|
443
|
-
function nextTerm() {
|
|
444
|
-
next = term;
|
|
445
|
-
term = terms[--index];
|
|
446
|
-
} // only take care of actual operand value or sub expression (starting from the right)
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
if (term && (tokensHelper.isOperand(term.type) || term.token === 'RPAR')) {
|
|
450
|
-
term.endExponent.push(term.endExponent.length);
|
|
451
|
-
|
|
452
|
-
if (term.token === 'RPAR') {
|
|
453
|
-
// closing parenthesis, we need to find the opening parenthesis
|
|
454
|
-
parenthesis++;
|
|
455
|
-
|
|
456
|
-
while (index > 0 && parenthesis > 0) {
|
|
457
|
-
nextTerm();
|
|
458
|
-
|
|
459
|
-
if (term.token === 'RPAR') {
|
|
460
|
-
parenthesis++;
|
|
461
|
-
} else if (term.token === 'LPAR') {
|
|
462
|
-
parenthesis--;
|
|
345
|
+
// the expression might be already tokenized, if not we need to tokenize it
|
|
346
|
+
if (!_.isArray(expression)) {
|
|
347
|
+
// we need a valid tokenizer, so if none is provided we must build one
|
|
348
|
+
if (!tokenizer || !tokenizer.tokenize) {
|
|
349
|
+
tokenizer = tokenizerFactory();
|
|
463
350
|
}
|
|
464
|
-
|
|
465
|
-
// however, the prefixed functions are particular as they act as a binary operators,
|
|
466
|
-
// and therefore are not considered as function here
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
if (index > 0 && tokensHelper.isFunction(terms[index - 1]) && !terms[index - 1].prefixed) {
|
|
470
|
-
nextTerm();
|
|
351
|
+
tokens = tokenizer.tokenize(expression);
|
|
471
352
|
}
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
353
|
+
variables = variables || {};
|
|
354
|
+
|
|
355
|
+
// each token needs to be translated into a displayable term
|
|
356
|
+
_.forEach(tokens, function (token, index) {
|
|
357
|
+
var registeredTerm = registeredTerms[token.type];
|
|
358
|
+
|
|
359
|
+
/**
|
|
360
|
+
* @type {renderTerm}
|
|
361
|
+
*/
|
|
362
|
+
var term = {
|
|
363
|
+
type: token.type,
|
|
364
|
+
token: token.type,
|
|
365
|
+
value: token.value,
|
|
366
|
+
label: token.value,
|
|
367
|
+
description: token.value,
|
|
368
|
+
exponent: null,
|
|
369
|
+
startExponent: [],
|
|
370
|
+
endExponent: [],
|
|
371
|
+
prefixed: rePrefixedTerm.test(token.value),
|
|
372
|
+
elide: false
|
|
373
|
+
};
|
|
374
|
+
if (registeredTerm) {
|
|
375
|
+
_.merge(term, registeredTerm);
|
|
376
|
+
|
|
377
|
+
// always display the actual value of the last result variable
|
|
378
|
+
// also takes care of the value's sign
|
|
379
|
+
if (term.value === lastResultVariableName && 'undefined' !== typeof variables[term.value]) {
|
|
380
|
+
term.label = expressionHelper.render(variables[term.value], variables, tokenizer);
|
|
381
|
+
}
|
|
382
|
+
} else if (term.token === 'term') {
|
|
383
|
+
// unspecified token can be a variable
|
|
384
|
+
if ('undefined' !== typeof variables[term.value]) {
|
|
385
|
+
term.type = 'variable';
|
|
386
|
+
} else {
|
|
387
|
+
term.type = 'unknown';
|
|
388
|
+
}
|
|
389
|
+
}
|
|
477
390
|
|
|
391
|
+
// take care of the value's sign
|
|
392
|
+
if (term.token === 'SUB') {
|
|
393
|
+
toSignOperator(term, 'NEG');
|
|
394
|
+
} else if (term.token === 'ADD') {
|
|
395
|
+
toSignOperator(term, 'POS');
|
|
396
|
+
}
|
|
397
|
+
terms.push(term);
|
|
478
398
|
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
399
|
+
// exponents will be processed in a second pass
|
|
400
|
+
// for now we just need to keep track of the position
|
|
401
|
+
if (term.exponent) {
|
|
402
|
+
exponents.push(index);
|
|
403
|
+
}
|
|
404
|
+
previous = term;
|
|
405
|
+
});
|
|
406
|
+
|
|
407
|
+
// if any exponent has been discovered, we need to process them now
|
|
408
|
+
_.forEach(exponents, function (index) {
|
|
409
|
+
var term = terms[index];
|
|
410
|
+
if (term.exponent === 'left' && index > 0) {
|
|
411
|
+
exponentOnTheLeft(index, terms);
|
|
412
|
+
} else if (term.exponent === 'right' && index < terms.length - 1) {
|
|
413
|
+
exponentOnTheRight(index, terms);
|
|
414
|
+
}
|
|
415
|
+
});
|
|
416
|
+
return termsTpl(terms);
|
|
482
417
|
}
|
|
418
|
+
};
|
|
483
419
|
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
* Search for the full operand on the right, then tag the edges with exponent flags
|
|
489
|
-
* @param {Number} index
|
|
490
|
-
* @param {renderTerm[]} terms
|
|
491
|
-
*/
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
function exponentOnTheRight(index, terms) {
|
|
495
|
-
var last = terms.length - 1;
|
|
496
|
-
var parenthesis = 0;
|
|
497
|
-
var startAt = index;
|
|
498
|
-
var previous = terms[index];
|
|
499
|
-
var term = terms[++index];
|
|
500
|
-
var shouldContinue;
|
|
501
|
-
/**
|
|
502
|
-
* Simply moves the cursor to the next term to examine.
|
|
503
|
-
* Here the move is made from the left to the right.
|
|
504
|
-
*/
|
|
505
|
-
|
|
506
|
-
function nextTerm() {
|
|
507
|
-
previous = term;
|
|
508
|
-
term = terms[++index];
|
|
509
|
-
}
|
|
510
|
-
/**
|
|
511
|
-
* Simply moves back the cursor to the previous term.
|
|
512
|
-
* Here the move is made from the right to the left.
|
|
420
|
+
/**
|
|
421
|
+
* Search for the full operand on the left, then tag the edges with exponent flags
|
|
422
|
+
* @param {Number} index
|
|
423
|
+
* @param {renderTerm[]} terms
|
|
513
424
|
*/
|
|
425
|
+
function exponentOnTheLeft(index, terms) {
|
|
426
|
+
var parenthesis = 0;
|
|
427
|
+
var next = terms[index];
|
|
428
|
+
var term = terms[--index];
|
|
429
|
+
|
|
430
|
+
/**
|
|
431
|
+
* Simply moves the cursor to the next term to examine.
|
|
432
|
+
* Here the move is made from the right to the left.
|
|
433
|
+
*/
|
|
434
|
+
function nextTerm() {
|
|
435
|
+
next = term;
|
|
436
|
+
term = terms[--index];
|
|
437
|
+
}
|
|
514
438
|
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
if (term && (tokensHelper.isOperand(term.type) || term.token === 'LPAR' || signOperators.indexOf(term.token) >= 0)) {
|
|
523
|
-
term.startExponent.push(term.startExponent.length); // we use an internal loop as exponents could be chained
|
|
524
|
-
|
|
525
|
-
do {
|
|
526
|
-
shouldContinue = false; // functions are attached to an operand, and this link should be kept
|
|
527
|
-
|
|
528
|
-
while (index < last && (tokensHelper.isFunction(term.type) || signOperators.indexOf(term.token) >= 0)) {
|
|
529
|
-
nextTerm();
|
|
530
|
-
} // if the end has been reached, step back one token
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
if (!term) {
|
|
534
|
-
previousTerm();
|
|
535
|
-
}
|
|
536
|
-
|
|
537
|
-
if (term.token === 'LPAR') {
|
|
538
|
-
// opening parenthesis, we need to find the closing parenthesis
|
|
439
|
+
// only take care of actual operand value or sub expression (starting from the right)
|
|
440
|
+
if (term && (tokensHelper.isOperand(term.type) || term.token === 'RPAR')) {
|
|
441
|
+
term.endExponent.push(term.endExponent.length);
|
|
442
|
+
if (term.token === 'RPAR') {
|
|
443
|
+
// closing parenthesis, we need to find the opening parenthesis
|
|
539
444
|
parenthesis++;
|
|
540
|
-
|
|
541
|
-
while (index < last && parenthesis > 0) {
|
|
445
|
+
while (index > 0 && parenthesis > 0) {
|
|
542
446
|
nextTerm();
|
|
543
|
-
|
|
544
|
-
if (term.token === 'LPAR') {
|
|
447
|
+
if (term.token === 'RPAR') {
|
|
545
448
|
parenthesis++;
|
|
546
|
-
} else if (term.token === '
|
|
449
|
+
} else if (term.token === 'LPAR') {
|
|
547
450
|
parenthesis--;
|
|
548
451
|
}
|
|
549
452
|
}
|
|
453
|
+
|
|
454
|
+
// a function could be attached to the sub expression, if so we must keep the link
|
|
455
|
+
// however, the prefixed functions are particular as they act as a binary operators,
|
|
456
|
+
// and therefore are not considered as function here
|
|
457
|
+
if (index > 0 && tokensHelper.isFunction(terms[index - 1]) && !terms[index - 1].prefixed) {
|
|
458
|
+
nextTerm();
|
|
459
|
+
}
|
|
550
460
|
} else if (tokensHelper.isDigit(term.type)) {
|
|
551
461
|
// chain of digits should be treated as a single operand
|
|
552
|
-
while (index
|
|
462
|
+
while (index && tokensHelper.isDigit(term.type)) {
|
|
553
463
|
nextTerm();
|
|
554
|
-
}
|
|
464
|
+
}
|
|
465
|
+
// if the end of the chain has been overflown, we must step back one token
|
|
466
|
+
if (!tokensHelper.isDigit(term.type)) {
|
|
467
|
+
term = next;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
term.startExponent.push(term.startExponent.length);
|
|
471
|
+
}
|
|
472
|
+
}
|
|
555
473
|
|
|
474
|
+
/**
|
|
475
|
+
* Search for the full operand on the right, then tag the edges with exponent flags
|
|
476
|
+
* @param {Number} index
|
|
477
|
+
* @param {renderTerm[]} terms
|
|
478
|
+
*/
|
|
479
|
+
function exponentOnTheRight(index, terms) {
|
|
480
|
+
var last = terms.length - 1;
|
|
481
|
+
var parenthesis = 0;
|
|
482
|
+
var startAt = index;
|
|
483
|
+
var previous = terms[index];
|
|
484
|
+
var term = terms[++index];
|
|
485
|
+
var shouldContinue;
|
|
486
|
+
|
|
487
|
+
/**
|
|
488
|
+
* Simply moves the cursor to the next term to examine.
|
|
489
|
+
* Here the move is made from the left to the right.
|
|
490
|
+
*/
|
|
491
|
+
function nextTerm() {
|
|
492
|
+
previous = term;
|
|
493
|
+
term = terms[++index];
|
|
494
|
+
}
|
|
556
495
|
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
496
|
+
/**
|
|
497
|
+
* Simply moves back the cursor to the previous term.
|
|
498
|
+
* Here the move is made from the right to the left.
|
|
499
|
+
*/
|
|
500
|
+
function previousTerm() {
|
|
501
|
+
term = previous;
|
|
502
|
+
previous = terms[--index];
|
|
503
|
+
}
|
|
562
504
|
|
|
505
|
+
// only take care of actual operand value or sub expression (starting from the left)
|
|
506
|
+
if (term && (tokensHelper.isOperand(term.type) || term.token === 'LPAR' || signOperators.indexOf(term.token) >= 0)) {
|
|
507
|
+
term.startExponent.push(term.startExponent.length);
|
|
563
508
|
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
509
|
+
// we use an internal loop as exponents could be chained
|
|
510
|
+
do {
|
|
511
|
+
shouldContinue = false;
|
|
567
512
|
|
|
513
|
+
// functions are attached to an operand, and this link should be kept
|
|
514
|
+
while (index < last && (tokensHelper.isFunction(term.type) || signOperators.indexOf(term.token) >= 0)) {
|
|
515
|
+
nextTerm();
|
|
516
|
+
}
|
|
568
517
|
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
518
|
+
// if the end has been reached, step back one token
|
|
519
|
+
if (!term) {
|
|
520
|
+
previousTerm();
|
|
521
|
+
}
|
|
522
|
+
if (term.token === 'LPAR') {
|
|
523
|
+
// opening parenthesis, we need to find the closing parenthesis
|
|
524
|
+
parenthesis++;
|
|
525
|
+
while (index < last && parenthesis > 0) {
|
|
526
|
+
nextTerm();
|
|
527
|
+
if (term.token === 'LPAR') {
|
|
528
|
+
parenthesis++;
|
|
529
|
+
} else if (term.token === 'RPAR') {
|
|
530
|
+
parenthesis--;
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
} else if (tokensHelper.isDigit(term.type)) {
|
|
534
|
+
// chain of digits should be treated as a single operand
|
|
535
|
+
while (index < last && tokensHelper.isDigit(term.type)) {
|
|
536
|
+
nextTerm();
|
|
537
|
+
}
|
|
538
|
+
// if the end of the chain has been overflown, we must step back one token
|
|
539
|
+
if (!term || !tokensHelper.isDigit(term.type)) {
|
|
540
|
+
previousTerm();
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
// factorial is a special case, as the operator can be placed either on the right or on the left
|
|
545
|
+
// in any case it should be attached to its operand
|
|
546
|
+
while (index < last && terms[index + 1].token === 'FAC') {
|
|
547
|
+
nextTerm();
|
|
548
|
+
}
|
|
577
549
|
|
|
578
|
-
|
|
550
|
+
// sometimes a sub exponent continues the chain and should be part of the expression to put in exponent
|
|
551
|
+
if (index < last && continueExponent.indexOf(terms[index + 1].token) >= 0) {
|
|
552
|
+
// the next term should be ignored as we already know it is an exponent operator
|
|
553
|
+
// then the term after have to be set as the current one
|
|
554
|
+
nextTerm();
|
|
555
|
+
nextTerm();
|
|
556
|
+
shouldContinue = true;
|
|
557
|
+
}
|
|
558
|
+
} while (shouldContinue);
|
|
559
|
+
term.endExponent.push(term.endExponent.length);
|
|
579
560
|
|
|
580
|
-
|
|
581
|
-
terms[startAt].
|
|
561
|
+
// elide the operator if operands are complete
|
|
562
|
+
if (startAt > 0 && startAt < last && terms[startAt].token === 'POW' && terms[startAt + 1].startExponent.length) {
|
|
563
|
+
terms[startAt].elide = true;
|
|
564
|
+
}
|
|
582
565
|
}
|
|
583
566
|
}
|
|
584
|
-
}
|
|
585
567
|
|
|
586
|
-
|
|
568
|
+
return expressionHelper;
|
|
587
569
|
|
|
588
570
|
});
|