@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,761 +1,701 @@
|
|
|
1
1
|
define(['jquery', 'util/urlParser', 'core/eventifier', 'ui/mediaplayer/support', 'handlebars', 'i18n', 'lodash', 'lib/dompurify/purify', 'ui/mediaplayer/utils/reminder', 'ui/mediaplayer/utils/timeObserver'], function ($$1, UrlParser, eventifier, support, Handlebars, __, _, DOMPurify, reminderManagerFactory, timeObserverFactory) { 'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* https://github.com/cure53/DOMPurify
|
|
33
|
-
* with config SAFE_FOR_TEMPLATES: true
|
|
34
|
-
* to make output safe for template systems
|
|
3
|
+
$$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;
|
|
4
|
+
UrlParser = UrlParser && Object.prototype.hasOwnProperty.call(UrlParser, 'default') ? UrlParser['default'] : UrlParser;
|
|
5
|
+
eventifier = eventifier && Object.prototype.hasOwnProperty.call(eventifier, 'default') ? eventifier['default'] : eventifier;
|
|
6
|
+
support = support && Object.prototype.hasOwnProperty.call(support, 'default') ? support['default'] : support;
|
|
7
|
+
Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;
|
|
8
|
+
__ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;
|
|
9
|
+
_ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;
|
|
10
|
+
DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;
|
|
11
|
+
reminderManagerFactory = reminderManagerFactory && Object.prototype.hasOwnProperty.call(reminderManagerFactory, 'default') ? reminderManagerFactory['default'] : reminderManagerFactory;
|
|
12
|
+
timeObserverFactory = timeObserverFactory && Object.prototype.hasOwnProperty.call(timeObserverFactory, 'default') ? timeObserverFactory['default'] : timeObserverFactory;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* This program is free software; you can redistribute it and/or
|
|
16
|
+
* modify it under the terms of the GNU General Public License
|
|
17
|
+
* as published by the Free Software Foundation; under version 2
|
|
18
|
+
* of the License (non-upgradable).
|
|
19
|
+
*
|
|
20
|
+
* This program is distributed in the hope that it will be useful,
|
|
21
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
22
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
23
|
+
* GNU General Public License for more details.
|
|
24
|
+
*
|
|
25
|
+
* You should have received a copy of the GNU General Public License
|
|
26
|
+
* along with this program; if not, write to the Free Software
|
|
27
|
+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
28
|
+
*
|
|
29
|
+
* Copyright (c) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
|
|
30
|
+
*
|
|
31
|
+
*
|
|
35
32
|
*/
|
|
33
|
+
function Helpers0 (hb) {
|
|
34
|
+
//register a i18n helper
|
|
35
|
+
hb.registerHelper('__', function (key) {
|
|
36
|
+
return __(key);
|
|
37
|
+
});
|
|
36
38
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
*/
|
|
48
|
-
|
|
49
|
-
hb.registerHelper('join', function (arr, keyValueGlue, fragmentGlue, wrapper) {
|
|
50
|
-
var fragments = [];
|
|
51
|
-
keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;
|
|
52
|
-
fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';
|
|
53
|
-
wrapper = typeof wrapper === 'string' ? wrapper : '"';
|
|
54
|
-
|
|
55
|
-
_.forIn(arr, function (value, key) {
|
|
56
|
-
var fragment = '';
|
|
39
|
+
/**
|
|
40
|
+
* Register dompurify helper
|
|
41
|
+
*
|
|
42
|
+
* https://github.com/cure53/DOMPurify
|
|
43
|
+
* with config SAFE_FOR_TEMPLATES: true
|
|
44
|
+
* to make output safe for template systems
|
|
45
|
+
*/
|
|
46
|
+
hb.registerHelper('dompurify', function (context) {
|
|
47
|
+
return DOMPurify.sanitize(context);
|
|
48
|
+
});
|
|
57
49
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
50
|
+
/**
|
|
51
|
+
* Register join helper
|
|
52
|
+
*
|
|
53
|
+
* Example :
|
|
54
|
+
* var values = {a:v1, b:v2, c:v3};
|
|
55
|
+
* Using {{{join attributes '=' ' ' '"'}}} will return : a="v1" b="v2" c="v3"
|
|
56
|
+
* Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*
|
|
57
|
+
*/
|
|
58
|
+
hb.registerHelper('join', function (arr, keyValueGlue, fragmentGlue, wrapper) {
|
|
59
|
+
var fragments = [];
|
|
60
|
+
keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;
|
|
61
|
+
fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';
|
|
62
|
+
wrapper = typeof wrapper === 'string' ? wrapper : '"';
|
|
63
|
+
_.forIn(arr, function (value, key) {
|
|
64
|
+
var fragment = '';
|
|
65
|
+
if (value !== null || value !== undefined) {
|
|
66
|
+
if (typeof value === 'boolean') {
|
|
67
|
+
value = value ? 'true' : 'false';
|
|
68
|
+
} else if (typeof value === 'object') {
|
|
69
|
+
value = _.values(value).join(' ');
|
|
70
|
+
}
|
|
71
|
+
} else {
|
|
72
|
+
value = '';
|
|
63
73
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
74
|
+
if (keyValueGlue !== undefined) {
|
|
75
|
+
fragment += key + keyValueGlue;
|
|
76
|
+
}
|
|
77
|
+
fragment += wrapper + value + wrapper;
|
|
78
|
+
fragments.push(fragment);
|
|
79
|
+
});
|
|
80
|
+
return fragments.join(fragmentGlue);
|
|
81
|
+
});
|
|
67
82
|
|
|
68
|
-
|
|
69
|
-
|
|
83
|
+
//register a classic "for loop" helper
|
|
84
|
+
//it also adds a local variable "i" as the index in each iteration loop
|
|
85
|
+
hb.registerHelper('for', function (startIndex, stopIndex, increment, options) {
|
|
86
|
+
var ret = '';
|
|
87
|
+
startIndex = parseInt(startIndex);
|
|
88
|
+
stopIndex = parseInt(stopIndex);
|
|
89
|
+
increment = parseInt(increment);
|
|
90
|
+
for (var i = startIndex; i < stopIndex; i += increment) {
|
|
91
|
+
ret += options.fn(_.extend({}, this, {
|
|
92
|
+
i: i
|
|
93
|
+
}));
|
|
94
|
+
}
|
|
95
|
+
return ret;
|
|
96
|
+
});
|
|
97
|
+
hb.registerHelper('equal', function (var1, var2, options) {
|
|
98
|
+
if (var1 == var2) {
|
|
99
|
+
return options.fn(this);
|
|
100
|
+
} else {
|
|
101
|
+
return options.inverse(this);
|
|
70
102
|
}
|
|
71
|
-
|
|
72
|
-
fragment += wrapper + value + wrapper;
|
|
73
|
-
fragments.push(fragment);
|
|
74
103
|
});
|
|
75
104
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
var ret = '';
|
|
82
|
-
startIndex = parseInt(startIndex);
|
|
83
|
-
stopIndex = parseInt(stopIndex);
|
|
84
|
-
increment = parseInt(increment);
|
|
105
|
+
// register a "get property" helper
|
|
106
|
+
// it gets the named property from the provided context
|
|
107
|
+
hb.registerHelper('property', function (name, context) {
|
|
108
|
+
return context[name] || '';
|
|
109
|
+
});
|
|
85
110
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
111
|
+
// register an 'includes' helper
|
|
112
|
+
// it checks if value is in array
|
|
113
|
+
hb.registerHelper('includes', function (haystack, needle, options) {
|
|
114
|
+
if (_.contains(haystack, needle)) {
|
|
115
|
+
return options.fn(this);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
91
119
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
120
|
+
if (!Helpers0.__initialized) {
|
|
121
|
+
Helpers0(Handlebars);
|
|
122
|
+
Helpers0.__initialized = true;
|
|
123
|
+
}
|
|
124
|
+
var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
|
|
125
|
+
this.compilerInfo = [4,'>= 1.0.0'];
|
|
126
|
+
helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
|
|
127
|
+
var buffer = "", stack1, helper, options, functionType="function", escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;
|
|
128
|
+
|
|
129
|
+
function program1(depth0,data) {
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
return "crossorigin";
|
|
99
133
|
}
|
|
100
|
-
}); // register a "get property" helper
|
|
101
|
-
// it gets the named property from the provided context
|
|
102
134
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
135
|
+
function program3(depth0,data) {
|
|
136
|
+
|
|
137
|
+
var buffer = "", stack1, helper, options;
|
|
138
|
+
buffer += "\n <a href=\"";
|
|
139
|
+
if (helper = helpers.link) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
140
|
+
else { helper = (depth0 && depth0.link); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
141
|
+
buffer += escapeExpression(stack1)
|
|
142
|
+
+ "\">"
|
|
143
|
+
+ escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, "Please download the track and listen offline.", options) : helperMissing.call(depth0, "__", "Please download the track and listen offline.", options)))
|
|
144
|
+
+ "</a>\n";
|
|
145
|
+
return buffer;
|
|
111
146
|
}
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
if (!Helpers0.__initialized) {
|
|
116
|
-
Helpers0(Handlebars);
|
|
117
|
-
Helpers0.__initialized = true;
|
|
118
|
-
}
|
|
119
|
-
var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
|
|
120
|
-
this.compilerInfo = [4,'>= 1.0.0'];
|
|
121
|
-
helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
|
|
122
|
-
var buffer = "", stack1, helper, options, functionType="function", escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;
|
|
123
|
-
|
|
124
|
-
function program1(depth0,data) {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
return "crossorigin";
|
|
128
|
-
}
|
|
129
147
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
stack1 = helpers['if'].call(depth0, (depth0 && depth0.cors), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
|
|
149
|
-
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
150
|
-
buffer += ">\r\n "
|
|
151
|
-
+ escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, "Your browser doesn’t support the audio player.", options) : helperMissing.call(depth0, "__", "Your browser doesn’t support the audio player.", options)))
|
|
152
|
-
+ "\r\n";
|
|
153
|
-
stack1 = helpers['if'].call(depth0, (depth0 && depth0.link), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});
|
|
154
|
-
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
155
|
-
buffer += "\r\n</audio>\r\n";
|
|
156
|
-
return buffer;
|
|
157
|
-
});
|
|
158
|
-
function audioTpl(data, options, asString) {
|
|
159
|
-
var html = Template(data, options);
|
|
160
|
-
return (asString || true) ? html : $(html);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
if (!Helpers0.__initialized) {
|
|
164
|
-
Helpers0(Handlebars);
|
|
165
|
-
Helpers0.__initialized = true;
|
|
166
|
-
}
|
|
167
|
-
var Template$1 = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
|
|
168
|
-
this.compilerInfo = [4,'>= 1.0.0'];
|
|
169
|
-
helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
|
|
170
|
-
var buffer = "", stack1, helper, options, functionType="function", escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;
|
|
171
|
-
|
|
172
|
-
function program1(depth0,data) {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
return "crossorigin";
|
|
148
|
+
buffer += "<audio class=\"media audio\" preload=\"";
|
|
149
|
+
if (helper = helpers.preload) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
150
|
+
else { helper = (depth0 && depth0.preload); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
151
|
+
buffer += escapeExpression(stack1)
|
|
152
|
+
+ "\" controls ";
|
|
153
|
+
stack1 = helpers['if'].call(depth0, (depth0 && depth0.cors), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
|
|
154
|
+
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
155
|
+
buffer += ">\n "
|
|
156
|
+
+ escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, "Your browser doesn’t support the audio player.", options) : helperMissing.call(depth0, "__", "Your browser doesn’t support the audio player.", options)))
|
|
157
|
+
+ "\n";
|
|
158
|
+
stack1 = helpers['if'].call(depth0, (depth0 && depth0.link), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});
|
|
159
|
+
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
160
|
+
buffer += "\n</audio>\n";
|
|
161
|
+
return buffer;
|
|
162
|
+
});
|
|
163
|
+
function audioTpl(data, options, asString) {
|
|
164
|
+
var html = Template(data, options);
|
|
165
|
+
return (asString || true) ? html : $(html);
|
|
176
166
|
}
|
|
177
167
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
buffer += "\r\n <a href=\"";
|
|
182
|
-
if (helper = helpers.link) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
183
|
-
else { helper = (depth0 && depth0.link); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
184
|
-
buffer += escapeExpression(stack1)
|
|
185
|
-
+ "\">"
|
|
186
|
-
+ escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, "Please download the video and view offline.", options) : helperMissing.call(depth0, "__", "Please download the video and view offline.", options)))
|
|
187
|
-
+ "</a>\r\n";
|
|
188
|
-
return buffer;
|
|
168
|
+
if (!Helpers0.__initialized) {
|
|
169
|
+
Helpers0(Handlebars);
|
|
170
|
+
Helpers0.__initialized = true;
|
|
189
171
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
+ "\" controls ";
|
|
200
|
-
stack1 = helpers['if'].call(depth0, (depth0 && depth0.cors), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
|
|
201
|
-
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
202
|
-
buffer += ">\r\n "
|
|
203
|
-
+ escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, "Your browser doesn’t support the video player.", options) : helperMissing.call(depth0, "__", "Your browser doesn’t support the video player.", options)))
|
|
204
|
-
+ "\r\n";
|
|
205
|
-
stack1 = helpers['if'].call(depth0, (depth0 && depth0.link), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});
|
|
206
|
-
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
207
|
-
buffer += "\r\n</video>\r\n";
|
|
208
|
-
return buffer;
|
|
209
|
-
});
|
|
210
|
-
function videoTpl(data, options, asString) {
|
|
211
|
-
var html = Template$1(data, options);
|
|
212
|
-
return (asString || true) ? html : $(html);
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
if (!Helpers0.__initialized) {
|
|
216
|
-
Helpers0(Handlebars);
|
|
217
|
-
Helpers0.__initialized = true;
|
|
218
|
-
}
|
|
219
|
-
var Template$2 = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
|
|
220
|
-
this.compilerInfo = [4,'>= 1.0.0'];
|
|
221
|
-
helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
|
|
222
|
-
var buffer = "", stack1, helper, functionType="function", escapeExpression=this.escapeExpression;
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
buffer += "<source src=\"";
|
|
226
|
-
if (helper = helpers.src) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
227
|
-
else { helper = (depth0 && depth0.src); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
228
|
-
buffer += escapeExpression(stack1)
|
|
229
|
-
+ "\" type=\"";
|
|
230
|
-
if (helper = helpers.type) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
231
|
-
else { helper = (depth0 && depth0.type); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
232
|
-
buffer += escapeExpression(stack1)
|
|
233
|
-
+ "\">\r\n";
|
|
234
|
-
return buffer;
|
|
235
|
-
});
|
|
236
|
-
function sourceTpl(data, options, asString) {
|
|
237
|
-
var html = Template$2(data, options);
|
|
238
|
-
return (asString || true) ? html : $(html);
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
* This program is free software; you can redistribute it and/or
|
|
243
|
-
* modify it under the terms of the GNU General Public License
|
|
244
|
-
* as published by the Free Software Foundation; under version 2
|
|
245
|
-
* of the License (non-upgradable).
|
|
246
|
-
*
|
|
247
|
-
* This program is distributed in the hope that it will be useful,
|
|
248
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
249
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
250
|
-
* GNU General Public License for more details.
|
|
251
|
-
*
|
|
252
|
-
* You should have received a copy of the GNU General Public License
|
|
253
|
-
* along with this program; if not, write to the Free Software
|
|
254
|
-
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
255
|
-
*
|
|
256
|
-
* Copyright (c) 2015-2021 (original work) Open Assessment Technologies SA ;
|
|
257
|
-
*/
|
|
258
|
-
/**
|
|
259
|
-
* CSS namespace
|
|
260
|
-
* @type {string}
|
|
261
|
-
*/
|
|
262
|
-
|
|
263
|
-
var ns = '.mediaplayer';
|
|
264
|
-
/**
|
|
265
|
-
* Range value of the volume
|
|
266
|
-
* @type {number}
|
|
267
|
-
*/
|
|
268
|
-
|
|
269
|
-
var volumeRange = 100;
|
|
270
|
-
/**
|
|
271
|
-
* Delay before considering a media stalled
|
|
272
|
-
* @type {number}
|
|
273
|
-
*/
|
|
274
|
-
|
|
275
|
-
var stalledDetectionDelay = 2000;
|
|
276
|
-
/**
|
|
277
|
-
* List of media events that can be listened to for debugging
|
|
278
|
-
* @type {string[]}
|
|
279
|
-
*/
|
|
280
|
-
|
|
281
|
-
var mediaEvents = ['abort', 'canplay', 'canplaythrough', 'canshowcurrentframe', 'dataunavailable', 'durationchange', 'emptied', 'empty', 'ended', 'error', 'loadeddata', 'loadedfirstframe', 'loadedmetadata', 'loadstart', 'pause', 'play', 'playing', 'progress', 'ratechange', 'seeked', 'seeking', 'stalled', 'suspend', 'timeupdate', 'volumechange', 'waiting'];
|
|
282
|
-
/**
|
|
283
|
-
* List of player events that can be listened to for debugging
|
|
284
|
-
* @type {string[]}
|
|
285
|
-
*/
|
|
286
|
-
|
|
287
|
-
var playerEvents = ['end', 'error', 'pause', 'play', 'playing', 'ready', 'resize', 'stalled', 'timeupdate'];
|
|
288
|
-
/**
|
|
289
|
-
* Defines a player object dedicated to the native HTML5 player
|
|
290
|
-
* @param {jQuery} $container - Where to render the player
|
|
291
|
-
* @param {object} config - The list of config entries
|
|
292
|
-
* @param {Array} config.sources - The list of media sources
|
|
293
|
-
* @param {string} [config.type] - The type of player (video or audio) (default: video)
|
|
294
|
-
* @param {boolean} [config.preview] - Enables the media preview (load media metadata)
|
|
295
|
-
* @param {boolean} [config.debug] - Enables the debug mode
|
|
296
|
-
* @param {number} [config.config.stalledDetectionDelay] - The delay before considering a media is stalled
|
|
297
|
-
* @returns {object} player
|
|
298
|
-
*/
|
|
299
|
-
|
|
300
|
-
function html5PlayerFactory($container) {
|
|
301
|
-
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
302
|
-
var type = config.type || 'video';
|
|
303
|
-
var sources = config.sources || [];
|
|
304
|
-
var updateObserver = reminderManagerFactory();
|
|
305
|
-
var timeObserver = timeObserverFactory();
|
|
306
|
-
config.stalledDetectionDelay = config.stalledDetectionDelay || stalledDetectionDelay;
|
|
307
|
-
var $media;
|
|
308
|
-
var media;
|
|
309
|
-
var state = {};
|
|
310
|
-
|
|
311
|
-
var getDebugContext = function getDebugContext(action) {
|
|
312
|
-
var networkState = media && media.networkState;
|
|
313
|
-
var readyState = media && media.readyState;
|
|
314
|
-
return "[html5-".concat(type, "(networkState=").concat(networkState, ",readyState=").concat(readyState, "):").concat(action, "]");
|
|
315
|
-
}; // eslint-disable-next-line
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
var debug = function debug(action) {
|
|
319
|
-
var _window$console;
|
|
320
|
-
|
|
321
|
-
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
322
|
-
args[_key - 1] = arguments[_key];
|
|
172
|
+
var Template$1 = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
|
|
173
|
+
this.compilerInfo = [4,'>= 1.0.0'];
|
|
174
|
+
helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
|
|
175
|
+
var buffer = "", stack1, helper, options, functionType="function", escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;
|
|
176
|
+
|
|
177
|
+
function program1(depth0,data) {
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
return "crossorigin";
|
|
323
181
|
}
|
|
324
182
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
var link = '';
|
|
338
|
-
var result = false;
|
|
339
|
-
state = {};
|
|
340
|
-
sources.forEach(function (source) {
|
|
341
|
-
if (!page.sameDomain(source.src)) {
|
|
342
|
-
cors = true;
|
|
343
|
-
}
|
|
183
|
+
function program3(depth0,data) {
|
|
184
|
+
|
|
185
|
+
var buffer = "", stack1, helper, options;
|
|
186
|
+
buffer += "\n <a href=\"";
|
|
187
|
+
if (helper = helpers.link) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
188
|
+
else { helper = (depth0 && depth0.link); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
189
|
+
buffer += escapeExpression(stack1)
|
|
190
|
+
+ "\">"
|
|
191
|
+
+ escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, "Please download the video and view offline.", options) : helperMissing.call(depth0, "__", "Please download the video and view offline.", options)))
|
|
192
|
+
+ "</a>\n";
|
|
193
|
+
return buffer;
|
|
194
|
+
}
|
|
344
195
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
196
|
+
buffer += "<video class=\"media video\" preload=\"";
|
|
197
|
+
if (helper = helpers.preload) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
198
|
+
else { helper = (depth0 && depth0.preload); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
199
|
+
buffer += escapeExpression(stack1)
|
|
200
|
+
+ "\" poster=\"";
|
|
201
|
+
if (helper = helpers.poster) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
202
|
+
else { helper = (depth0 && depth0.poster); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
203
|
+
buffer += escapeExpression(stack1)
|
|
204
|
+
+ "\" controls ";
|
|
205
|
+
stack1 = helpers['if'].call(depth0, (depth0 && depth0.cors), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
|
|
206
|
+
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
207
|
+
buffer += ">\n "
|
|
208
|
+
+ escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, "Your browser doesn’t support the video player.", options) : helperMissing.call(depth0, "__", "Your browser doesn’t support the video player.", options)))
|
|
209
|
+
+ "\n";
|
|
210
|
+
stack1 = helpers['if'].call(depth0, (depth0 && depth0.link), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});
|
|
211
|
+
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
212
|
+
buffer += "\n</video>\n";
|
|
213
|
+
return buffer;
|
|
214
|
+
});
|
|
215
|
+
function videoTpl(data, options, asString) {
|
|
216
|
+
var html = Template$1(data, options);
|
|
217
|
+
return (asString || true) ? html : $(html);
|
|
218
|
+
}
|
|
348
219
|
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
state.playback = true;
|
|
375
|
-
state.playedViaApi = false;
|
|
376
|
-
timeObserver.init(media.currentTime, media.duration);
|
|
377
|
-
|
|
378
|
-
_this.trigger('play');
|
|
379
|
-
}).on("pause".concat(ns), function () {
|
|
380
|
-
if (state.stallDetection && !state.pausedViaApi && updateObserver.running && updateObserver.elapsed < 100) {
|
|
381
|
-
// The pause event may be triggered after a connectivity issue as the player is out of data
|
|
382
|
-
_this.stalled();
|
|
383
|
-
}
|
|
220
|
+
if (!Helpers0.__initialized) {
|
|
221
|
+
Helpers0(Handlebars);
|
|
222
|
+
Helpers0.__initialized = true;
|
|
223
|
+
}
|
|
224
|
+
var Template$2 = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
|
|
225
|
+
this.compilerInfo = [4,'>= 1.0.0'];
|
|
226
|
+
helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
|
|
227
|
+
var buffer = "", stack1, helper, functionType="function", escapeExpression=this.escapeExpression;
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
buffer += "<source src=\"";
|
|
231
|
+
if (helper = helpers.src) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
232
|
+
else { helper = (depth0 && depth0.src); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
233
|
+
buffer += escapeExpression(stack1)
|
|
234
|
+
+ "\" type=\"";
|
|
235
|
+
if (helper = helpers.type) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
236
|
+
else { helper = (depth0 && depth0.type); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
237
|
+
buffer += escapeExpression(stack1)
|
|
238
|
+
+ "\">\n";
|
|
239
|
+
return buffer;
|
|
240
|
+
});
|
|
241
|
+
function sourceTpl(data, options, asString) {
|
|
242
|
+
var html = Template$2(data, options);
|
|
243
|
+
return (asString || true) ? html : $(html);
|
|
244
|
+
}
|
|
384
245
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
246
|
+
/**
|
|
247
|
+
* This program is free software; you can redistribute it and/or
|
|
248
|
+
* modify it under the terms of the GNU General Public License
|
|
249
|
+
* as published by the Free Software Foundation; under version 2
|
|
250
|
+
* of the License (non-upgradable).
|
|
251
|
+
*
|
|
252
|
+
* This program is distributed in the hope that it will be useful,
|
|
253
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
254
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
255
|
+
* GNU General Public License for more details.
|
|
256
|
+
*
|
|
257
|
+
* You should have received a copy of the GNU General Public License
|
|
258
|
+
* along with this program; if not, write to the Free Software
|
|
259
|
+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
260
|
+
*
|
|
261
|
+
* Copyright (c) 2015-2021 (original work) Open Assessment Technologies SA ;
|
|
262
|
+
*/
|
|
388
263
|
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
state.stallDetection = true;
|
|
395
|
-
}
|
|
264
|
+
/**
|
|
265
|
+
* CSS namespace
|
|
266
|
+
* @type {string}
|
|
267
|
+
*/
|
|
268
|
+
const ns = '.mediaplayer';
|
|
396
269
|
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
state.playing = false;
|
|
270
|
+
/**
|
|
271
|
+
* Range value of the volume
|
|
272
|
+
* @type {number}
|
|
273
|
+
*/
|
|
274
|
+
const volumeRange = 100;
|
|
403
275
|
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
276
|
+
/**
|
|
277
|
+
* Delay before considering a media stalled
|
|
278
|
+
* @type {number}
|
|
279
|
+
*/
|
|
280
|
+
const stalledDetectionDelay = 2000;
|
|
409
281
|
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
282
|
+
/**
|
|
283
|
+
* List of media events that can be listened to for debugging
|
|
284
|
+
* @type {string[]}
|
|
285
|
+
*/
|
|
286
|
+
const mediaEvents = ['abort', 'canplay', 'canplaythrough', 'canshowcurrentframe', 'dataunavailable', 'durationchange', 'emptied', 'empty', 'ended', 'error', 'loadeddata', 'loadedfirstframe', 'loadedmetadata', 'loadstart', 'pause', 'play', 'playing', 'progress', 'ratechange', 'seeked', 'seeking', 'stalled', 'suspend', 'timeupdate', 'volumechange', 'waiting'];
|
|
415
287
|
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
288
|
+
/**
|
|
289
|
+
* List of player events that can be listened to for debugging
|
|
290
|
+
* @type {string[]}
|
|
291
|
+
*/
|
|
292
|
+
const playerEvents = ['end', 'error', 'pause', 'play', 'playing', 'ready', 'resize', 'stalled', 'timeupdate'];
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Defines a player object dedicated to the native HTML5 player
|
|
296
|
+
* @param {jQuery} $container - Where to render the player
|
|
297
|
+
* @param {object} config - The list of config entries
|
|
298
|
+
* @param {Array} config.sources - The list of media sources
|
|
299
|
+
* @param {string} [config.type] - The type of player (video or audio) (default: video)
|
|
300
|
+
* @param {boolean} [config.preview] - Enables the media preview (load media metadata)
|
|
301
|
+
* @param {boolean} [config.debug] - Enables the debug mode
|
|
302
|
+
* @param {number} [config.config.stalledDetectionDelay] - The delay before considering a media is stalled
|
|
303
|
+
* @returns {object} player
|
|
304
|
+
*/
|
|
305
|
+
function html5PlayerFactory($container) {
|
|
306
|
+
let config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
307
|
+
const type = config.type || 'video';
|
|
308
|
+
const sources = config.sources || [];
|
|
309
|
+
const updateObserver = reminderManagerFactory();
|
|
310
|
+
const timeObserver = timeObserverFactory();
|
|
311
|
+
config.stalledDetectionDelay = config.stalledDetectionDelay || stalledDetectionDelay;
|
|
312
|
+
let $media;
|
|
313
|
+
let media;
|
|
314
|
+
let state = {};
|
|
315
|
+
const getDebugContext = action => {
|
|
316
|
+
const networkState = media && media.networkState;
|
|
317
|
+
const readyState = media && media.readyState;
|
|
318
|
+
return `[html5-${type}(networkState=${networkState},readyState=${readyState}):${action}]`;
|
|
319
|
+
};
|
|
320
|
+
// eslint-disable-next-line
|
|
321
|
+
const debug = function (action) {
|
|
322
|
+
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
323
|
+
args[_key - 1] = arguments[_key];
|
|
324
|
+
}
|
|
325
|
+
return (config.debug === true || config.debug === action) && window.console.log(getDebugContext(action), ...args);
|
|
326
|
+
};
|
|
327
|
+
return eventifier({
|
|
328
|
+
init() {
|
|
329
|
+
const tpl = 'audio' === type ? audioTpl : videoTpl;
|
|
330
|
+
const page = new UrlParser(window.location);
|
|
331
|
+
let cors = false;
|
|
332
|
+
let preload = config.preview ? 'metadata' : 'none';
|
|
333
|
+
let poster = '';
|
|
334
|
+
let link = '';
|
|
335
|
+
let result = false;
|
|
336
|
+
state = {};
|
|
337
|
+
sources.forEach(source => {
|
|
338
|
+
if (!page.sameDomain(source.src)) {
|
|
339
|
+
cors = true;
|
|
340
|
+
}
|
|
341
|
+
if (source.poster) {
|
|
342
|
+
poster = source.poster;
|
|
343
|
+
}
|
|
344
|
+
if (source.link) {
|
|
345
|
+
link = source.link;
|
|
346
|
+
}
|
|
347
|
+
});
|
|
348
|
+
$media = $$1(tpl({
|
|
349
|
+
cors,
|
|
350
|
+
preload,
|
|
351
|
+
poster,
|
|
352
|
+
link
|
|
353
|
+
}));
|
|
354
|
+
$container.append($media);
|
|
355
|
+
media = $media.get(0);
|
|
356
|
+
result = !!(media && support.checkSupport(media));
|
|
438
357
|
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
_this.ready();
|
|
443
|
-
}
|
|
444
|
-
}).on("stalled".concat(ns), function () {
|
|
445
|
-
// The "stalled" event may be triggered once the player is halted after initialisation,
|
|
446
|
-
// but this does not mean the playback is actually stalled, hence we only take care of the playing state
|
|
447
|
-
if (state.playing && !media.paused) {
|
|
448
|
-
_this.handleError(media.error);
|
|
358
|
+
// Remove the browser native controls if we can use the API instead
|
|
359
|
+
if (support.canControl()) {
|
|
360
|
+
$media.removeAttr('controls');
|
|
449
361
|
}
|
|
450
|
-
}).on("playing".concat(ns), function () {
|
|
451
|
-
if (state.stallDetection) {
|
|
452
|
-
// The "playing" event may occur after a connectivity issue.
|
|
453
|
-
// For the sake of the stall detection, we need to discard this event
|
|
454
|
-
return;
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
updateObserver.forget().start();
|
|
458
|
-
state.playing = true;
|
|
459
362
|
|
|
460
|
-
|
|
461
|
-
|
|
363
|
+
// Detect stalled video when the timer suddenly jump to the end
|
|
364
|
+
timeObserver.removeAllListeners().on('irregularity', position => {
|
|
365
|
+
if (state.playback && state.stallDetection) {
|
|
366
|
+
this.stalled(position);
|
|
367
|
+
}
|
|
368
|
+
});
|
|
369
|
+
$media.on(`play${ns}`, () => {
|
|
370
|
+
state.playback = true;
|
|
371
|
+
state.playedViaApi = false;
|
|
372
|
+
timeObserver.init(media.currentTime, media.duration);
|
|
373
|
+
this.trigger('play');
|
|
374
|
+
}).on(`pause${ns}`, () => {
|
|
375
|
+
if (state.stallDetection && !state.pausedViaApi && updateObserver.running && updateObserver.elapsed < 100) {
|
|
376
|
+
// The pause event may be triggered after a connectivity issue as the player is out of data
|
|
377
|
+
this.stalled();
|
|
378
|
+
}
|
|
379
|
+
state.pausedViaApi = false;
|
|
380
|
+
state.playing = false;
|
|
381
|
+
updateObserver.stop();
|
|
382
|
+
this.trigger('pause');
|
|
383
|
+
}).on(`seeked${ns}`, () => {
|
|
384
|
+
// When the user try changing the current playing position while the network is down,
|
|
385
|
+
// the player will end the playback by moving straight to the end.
|
|
386
|
+
if (state.seekedViaApi && Math.floor(state.seekAt) !== Math.floor(media.currentTime)) {
|
|
387
|
+
state.stallDetection = true;
|
|
388
|
+
}
|
|
389
|
+
state.seekedViaApi = false;
|
|
390
|
+
}).on(`ended${ns}`, () => {
|
|
391
|
+
updateObserver.forget().stop();
|
|
392
|
+
timeObserver.update(media.currentTime);
|
|
393
|
+
state.playback = false;
|
|
394
|
+
state.playing = false;
|
|
395
|
+
this.trigger('end');
|
|
396
|
+
}).on(`timeupdate${ns}`, () => {
|
|
397
|
+
state.playing = true;
|
|
398
|
+
updateObserver.start();
|
|
399
|
+
timeObserver.update(media.currentTime);
|
|
400
|
+
this.trigger('timeupdate');
|
|
401
|
+
}).on('loadstart', () => {
|
|
402
|
+
if (media.networkState === HTMLMediaElement.NETWORK_NO_SOURCE) {
|
|
403
|
+
this.trigger('error');
|
|
404
|
+
}
|
|
405
|
+
if (!config.preview && media.networkState === HTMLMediaElement.NETWORK_IDLE) {
|
|
406
|
+
this.trigger('ready');
|
|
407
|
+
}
|
|
462
408
|
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
409
|
+
// The media may be unreachable straight from the beginning
|
|
410
|
+
this.detectStalledNetwork();
|
|
411
|
+
}).on(`waiting${ns}`, () => {
|
|
412
|
+
// The "waiting" event means the player is pending data,
|
|
413
|
+
// it may be the symptom of a connectivity issue
|
|
414
|
+
this.detectStalledNetwork();
|
|
415
|
+
}).on(`error${ns}`, () => {
|
|
416
|
+
if (media.networkState === HTMLMediaElement.NETWORK_NO_SOURCE || media.error instanceof MediaError && media.error.code === MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED) {
|
|
417
|
+
// No source means the player does not support the supplied media.
|
|
418
|
+
// Or it can be more explicit with the not supported error.
|
|
419
|
+
// There is nothing that we can do from this stage.
|
|
420
|
+
this.trigger('error');
|
|
421
|
+
} else {
|
|
422
|
+
// Other errors need special attention as they can be recoverable
|
|
423
|
+
this.handleError(media.error);
|
|
424
|
+
}
|
|
425
|
+
}).on('loadedmetadata', () => {
|
|
426
|
+
timeObserver.init(media.currentTime, media.duration);
|
|
427
|
+
this.ready();
|
|
428
|
+
}).on(`canplay${ns}`, () => {
|
|
429
|
+
if (!state.stalled) {
|
|
430
|
+
this.ready();
|
|
431
|
+
}
|
|
432
|
+
}).on(`stalled${ns}`, () => {
|
|
433
|
+
// The "stalled" event may be triggered once the player is halted after initialisation,
|
|
434
|
+
// but this does not mean the playback is actually stalled, hence we only take care of the playing state
|
|
435
|
+
if (state.playing && !media.paused) {
|
|
436
|
+
this.handleError(media.error);
|
|
437
|
+
}
|
|
438
|
+
}).on(`playing${ns}`, () => {
|
|
439
|
+
if (state.stallDetection) {
|
|
440
|
+
// The "playing" event may occur after a connectivity issue.
|
|
441
|
+
// For the sake of the stall detection, we need to discard this event
|
|
442
|
+
return;
|
|
443
|
+
}
|
|
444
|
+
updateObserver.forget().start();
|
|
445
|
+
state.playing = true;
|
|
446
|
+
this.trigger('playing');
|
|
469
447
|
});
|
|
470
|
-
playerEvents.forEach(function (eventName) {
|
|
471
|
-
_this.on(eventName, function () {
|
|
472
|
-
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
473
|
-
args[_key2] = arguments[_key2];
|
|
474
|
-
}
|
|
475
448
|
|
|
476
|
-
|
|
449
|
+
// install debug logger
|
|
450
|
+
if (config.debug) {
|
|
451
|
+
debug('installed', media);
|
|
452
|
+
mediaEvents.forEach(eventName => {
|
|
453
|
+
$media.on(eventName + ns, e => debug('media event', eventName, media && media.currentSrc, e));
|
|
477
454
|
});
|
|
478
|
-
|
|
479
|
-
|
|
455
|
+
playerEvents.forEach(eventName => {
|
|
456
|
+
this.on(eventName, function () {
|
|
457
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
458
|
+
args[_key2] = arguments[_key2];
|
|
459
|
+
}
|
|
460
|
+
return debug('player event', eventName, media && media.currentSrc, ...args);
|
|
461
|
+
});
|
|
462
|
+
});
|
|
463
|
+
}
|
|
464
|
+
result = result && sources.reduce((supported, source) => this.addMedia(source.src, source.type) || supported, false);
|
|
465
|
+
return result;
|
|
466
|
+
},
|
|
467
|
+
handleError(error) {
|
|
468
|
+
// Discard legitimate and non-blocking errors
|
|
469
|
+
switch (error && error.name) {
|
|
470
|
+
case 'NotAllowedError':
|
|
471
|
+
debug('api call', 'handleError', 'the autoplay is not allowed without a user interaction', error);
|
|
472
|
+
return;
|
|
473
|
+
case 'AbortError':
|
|
474
|
+
debug('api call', 'handleError', 'the action has been aborted for some reason', error);
|
|
475
|
+
return;
|
|
476
|
+
}
|
|
477
|
+
debug('api call', 'handleError', error);
|
|
480
478
|
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
}, false);
|
|
484
|
-
return result;
|
|
485
|
-
},
|
|
486
|
-
handleError: function handleError(error) {
|
|
487
|
-
var _this2 = this;
|
|
488
|
-
|
|
489
|
-
// Discard legitimate and non-blocking errors
|
|
490
|
-
switch (error && error.name) {
|
|
491
|
-
case 'NotAllowedError':
|
|
492
|
-
debug('api call', 'handleError', 'the autoplay is not allowed without a user interaction', error);
|
|
493
|
-
return;
|
|
479
|
+
// Detect if the playback can continue a bit
|
|
480
|
+
const canContinueTemporarily = media && (media.readyState === HTMLMediaElement.HAVE_ENOUGH_DATA || media.readyState === HTMLMediaElement.HAVE_FUTURE_DATA || media.readyState === HTMLMediaElement.HAVE_CURRENT_DATA);
|
|
494
481
|
|
|
495
|
-
|
|
496
|
-
|
|
482
|
+
// If a connectivity error occurs we may need to enter in stalled mode unless we can wait a bit
|
|
483
|
+
if (error instanceof MediaError && (error.code === MediaError.MEDIA_ERR_NETWORK || error.code === MediaError.MEDIA_ERR_DECODE) && !canContinueTemporarily) {
|
|
484
|
+
this.stalled();
|
|
497
485
|
return;
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
debug('api call', 'handleError', error); // Detect if the playback can continue a bit
|
|
501
|
-
|
|
502
|
-
var canContinueTemporarily = media && (media.readyState === HTMLMediaElement.HAVE_ENOUGH_DATA || media.readyState === HTMLMediaElement.HAVE_FUTURE_DATA || media.readyState === HTMLMediaElement.HAVE_CURRENT_DATA); // If a connectivity error occurs we may need to enter in stalled mode unless we can wait a bit
|
|
503
|
-
|
|
504
|
-
if (error instanceof MediaError && (error.code === MediaError.MEDIA_ERR_NETWORK || error.code === MediaError.MEDIA_ERR_DECODE) && !canContinueTemporarily) {
|
|
505
|
-
this.stalled();
|
|
506
|
-
return;
|
|
507
|
-
} // To this point, there is a big chance the media is stalled.
|
|
508
|
-
// We start an observer to remind as soon as an irregularity occurs on the time update
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
state.stallDetection = true;
|
|
512
|
-
updateObserver.remind(function () {
|
|
513
|
-
// The last time update is a bit old, the media is most probably stalled now
|
|
514
|
-
if (updateObserver.elapsed >= config.stalledDetectionDelay) {
|
|
515
|
-
_this2.stalled();
|
|
516
486
|
}
|
|
517
|
-
}, config.stalledDetectionDelay);
|
|
518
|
-
updateObserver.start();
|
|
519
|
-
},
|
|
520
|
-
ready: function ready() {
|
|
521
|
-
if (!state.ready) {
|
|
522
|
-
state.ready = true;
|
|
523
|
-
this.trigger('ready');
|
|
524
|
-
}
|
|
525
|
-
},
|
|
526
|
-
detectStalledNetwork: function detectStalledNetwork() {
|
|
527
|
-
var _this3 = this;
|
|
528
|
-
|
|
529
|
-
// Install an observer that will watch the network state after a small delay.
|
|
530
|
-
// It is needed since the network state may need time to settle.
|
|
531
|
-
setTimeout(function () {
|
|
532
|
-
if (media && media.networkState === HTMLMediaElement.NETWORK_NO_SOURCE && media.readyState === HTMLMediaElement.HAVE_NOTHING) {
|
|
533
|
-
if (!state.ready) {
|
|
534
|
-
_this3.trigger('ready');
|
|
535
|
-
}
|
|
536
487
|
|
|
537
|
-
|
|
488
|
+
// To this point, there is a big chance the media is stalled.
|
|
489
|
+
// We start an observer to remind as soon as an irregularity occurs on the time update
|
|
490
|
+
state.stallDetection = true;
|
|
491
|
+
updateObserver.remind(() => {
|
|
492
|
+
// The last time update is a bit old, the media is most probably stalled now
|
|
493
|
+
if (updateObserver.elapsed >= config.stalledDetectionDelay) {
|
|
494
|
+
this.stalled();
|
|
495
|
+
}
|
|
496
|
+
}, config.stalledDetectionDelay);
|
|
497
|
+
updateObserver.start();
|
|
498
|
+
},
|
|
499
|
+
ready() {
|
|
500
|
+
if (!state.ready) {
|
|
501
|
+
state.ready = true;
|
|
502
|
+
this.trigger('ready');
|
|
538
503
|
}
|
|
539
|
-
},
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
504
|
+
},
|
|
505
|
+
detectStalledNetwork() {
|
|
506
|
+
// Install an observer that will watch the network state after a small delay.
|
|
507
|
+
// It is needed since the network state may need time to settle.
|
|
508
|
+
setTimeout(() => {
|
|
509
|
+
if (media && media.networkState === HTMLMediaElement.NETWORK_NO_SOURCE && media.readyState === HTMLMediaElement.HAVE_NOTHING) {
|
|
510
|
+
if (!state.ready) {
|
|
511
|
+
this.trigger('ready');
|
|
512
|
+
}
|
|
513
|
+
this.stalled();
|
|
514
|
+
}
|
|
515
|
+
}, config.stalledDetectionDelay);
|
|
516
|
+
},
|
|
517
|
+
stalled(position) {
|
|
518
|
+
debug('api call', 'stalled');
|
|
519
|
+
if (media) {
|
|
520
|
+
if ('undefined' !== typeof position) {
|
|
521
|
+
state.stalledAt = position;
|
|
522
|
+
} else {
|
|
523
|
+
state.stalledAt = timeObserver.position;
|
|
524
|
+
}
|
|
549
525
|
}
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
width: '',
|
|
573
|
-
height: ''
|
|
526
|
+
state.stalled = true;
|
|
527
|
+
state.stallDetection = false;
|
|
528
|
+
updateObserver.forget().stop();
|
|
529
|
+
this.pause();
|
|
530
|
+
this.trigger('stalled');
|
|
531
|
+
},
|
|
532
|
+
recover() {
|
|
533
|
+
debug('api call', 'recover');
|
|
534
|
+
state.stalled = false;
|
|
535
|
+
state.stallDetection = false;
|
|
536
|
+
if (media) {
|
|
537
|
+
// Special processing of video player to prevent visual glitch while reloading
|
|
538
|
+
if (media.tagName === 'VIDEO') {
|
|
539
|
+
// Temporarily set the size of the media to prevent a shrink while reloading it
|
|
540
|
+
$media.width($media.width());
|
|
541
|
+
$media.height($media.height());
|
|
542
|
+
$media.on('loadedmetadata.recover', () => {
|
|
543
|
+
$media.off('loadedmetadata.recover');
|
|
544
|
+
$media.css({
|
|
545
|
+
width: '',
|
|
546
|
+
height: ''
|
|
547
|
+
});
|
|
574
548
|
});
|
|
575
|
-
}
|
|
549
|
+
}
|
|
550
|
+
media.load();
|
|
551
|
+
if (state.stalledAt) {
|
|
552
|
+
this.seek(state.stalledAt);
|
|
553
|
+
}
|
|
554
|
+
if (state.playback && !state.playing || state.playedViaApi) {
|
|
555
|
+
this.play();
|
|
556
|
+
}
|
|
576
557
|
}
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
558
|
+
},
|
|
559
|
+
destroy() {
|
|
560
|
+
debug('api call', 'destroy');
|
|
561
|
+
this.stop();
|
|
562
|
+
this.removeAllListeners();
|
|
563
|
+
updateObserver.forget();
|
|
564
|
+
timeObserver.removeAllListeners();
|
|
565
|
+
if ($media) {
|
|
566
|
+
$media.off(ns).remove();
|
|
582
567
|
}
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
568
|
+
$media = void 0;
|
|
569
|
+
media = void 0;
|
|
570
|
+
state = {};
|
|
571
|
+
},
|
|
572
|
+
getMedia() {
|
|
573
|
+
debug('api call', 'getMedia', media);
|
|
574
|
+
return media;
|
|
575
|
+
},
|
|
576
|
+
getMediaSize() {
|
|
577
|
+
let size = {};
|
|
578
|
+
if (media) {
|
|
579
|
+
size = {
|
|
580
|
+
width: media.videoWidth,
|
|
581
|
+
height: media.videoHeight
|
|
582
|
+
};
|
|
586
583
|
}
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
timeObserver.removeAllListeners();
|
|
595
|
-
|
|
596
|
-
if ($media) {
|
|
597
|
-
$media.off(ns).remove();
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
$media = void 0;
|
|
601
|
-
media = void 0;
|
|
602
|
-
state = {};
|
|
603
|
-
},
|
|
604
|
-
getMedia: function getMedia() {
|
|
605
|
-
debug('api call', 'getMedia', media);
|
|
606
|
-
return media;
|
|
607
|
-
},
|
|
608
|
-
getMediaSize: function getMediaSize() {
|
|
609
|
-
var size = {};
|
|
610
|
-
|
|
611
|
-
if (media) {
|
|
612
|
-
size = {
|
|
613
|
-
width: media.videoWidth,
|
|
614
|
-
height: media.videoHeight
|
|
615
|
-
};
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
debug('api call', 'getMediaSize', size);
|
|
619
|
-
return size;
|
|
620
|
-
},
|
|
621
|
-
getPosition: function getPosition() {
|
|
622
|
-
var position = 0;
|
|
623
|
-
|
|
624
|
-
if (media) {
|
|
625
|
-
position = media.currentTime;
|
|
626
|
-
}
|
|
627
|
-
|
|
628
|
-
debug('api call', 'getPosition', position);
|
|
629
|
-
return position;
|
|
630
|
-
},
|
|
631
|
-
getDuration: function getDuration() {
|
|
632
|
-
var duration = 0;
|
|
633
|
-
|
|
634
|
-
if (media) {
|
|
635
|
-
duration = media.duration;
|
|
636
|
-
}
|
|
637
|
-
|
|
638
|
-
debug('api call', 'getDuration', duration);
|
|
639
|
-
return duration;
|
|
640
|
-
},
|
|
641
|
-
getVolume: function getVolume() {
|
|
642
|
-
var volume = 0;
|
|
643
|
-
|
|
644
|
-
if (media) {
|
|
645
|
-
volume = parseFloat(media.volume) * volumeRange;
|
|
646
|
-
}
|
|
647
|
-
|
|
648
|
-
debug('api call', 'getVolume', volume);
|
|
649
|
-
return volume;
|
|
650
|
-
},
|
|
651
|
-
setVolume: function setVolume(volume) {
|
|
652
|
-
debug('api call', 'setVolume', volume);
|
|
653
|
-
|
|
654
|
-
if (media) {
|
|
655
|
-
media.volume = parseFloat(volume) / volumeRange;
|
|
656
|
-
}
|
|
657
|
-
},
|
|
658
|
-
setSize: function setSize(width, height) {
|
|
659
|
-
debug('api call', 'setSize', width, height);
|
|
660
|
-
this.trigger('resize', width, height);
|
|
661
|
-
},
|
|
662
|
-
seek: function seek(time) {
|
|
663
|
-
debug('api call', 'seek', time);
|
|
664
|
-
|
|
665
|
-
if (media) {
|
|
666
|
-
media.currentTime = parseFloat(time);
|
|
667
|
-
state.seekedViaApi = true;
|
|
668
|
-
state.seekAt = media.currentTime;
|
|
669
|
-
timeObserver.seek(media.currentTime);
|
|
670
|
-
|
|
671
|
-
if (!state.playback) {
|
|
672
|
-
this.play();
|
|
584
|
+
debug('api call', 'getMediaSize', size);
|
|
585
|
+
return size;
|
|
586
|
+
},
|
|
587
|
+
getPosition() {
|
|
588
|
+
let position = 0;
|
|
589
|
+
if (media) {
|
|
590
|
+
position = media.currentTime;
|
|
673
591
|
}
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
if (media) {
|
|
682
|
-
state.playedViaApi = true;
|
|
683
|
-
var startPlayPromise = media.play();
|
|
684
|
-
|
|
685
|
-
if ('undefined' !== typeof startPlayPromise) {
|
|
686
|
-
startPlayPromise.catch(function (error) {
|
|
687
|
-
return _this4.handleError(error);
|
|
688
|
-
});
|
|
592
|
+
debug('api call', 'getPosition', position);
|
|
593
|
+
return position;
|
|
594
|
+
},
|
|
595
|
+
getDuration() {
|
|
596
|
+
let duration = 0;
|
|
597
|
+
if (media) {
|
|
598
|
+
duration = media.duration;
|
|
689
599
|
}
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
state.pausedViaApi = true;
|
|
600
|
+
debug('api call', 'getDuration', duration);
|
|
601
|
+
return duration;
|
|
602
|
+
},
|
|
603
|
+
getVolume() {
|
|
604
|
+
let volume = 0;
|
|
605
|
+
if (media) {
|
|
606
|
+
volume = parseFloat(media.volume) * volumeRange;
|
|
698
607
|
}
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
}
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
if (media && media.duration && state.playback && !state.stalled) {
|
|
707
|
-
media.currentTime = media.duration;
|
|
708
|
-
}
|
|
709
|
-
},
|
|
710
|
-
mute: function mute(muted) {
|
|
711
|
-
debug('api call', 'mute', muted);
|
|
712
|
-
|
|
713
|
-
if (media) {
|
|
714
|
-
media.muted = !!muted;
|
|
715
|
-
}
|
|
716
|
-
},
|
|
717
|
-
isMuted: function isMuted() {
|
|
718
|
-
var mute = false;
|
|
719
|
-
|
|
720
|
-
if (media) {
|
|
721
|
-
mute = !!media.muted;
|
|
722
|
-
}
|
|
723
|
-
|
|
724
|
-
debug('api call', 'isMuted', mute);
|
|
725
|
-
return mute;
|
|
726
|
-
},
|
|
727
|
-
addMedia: function addMedia(src, srcType) {
|
|
728
|
-
debug('api call', 'addMedia', src, srcType);
|
|
729
|
-
|
|
730
|
-
if (media) {
|
|
731
|
-
if (!support.checkSupport(media, srcType)) {
|
|
732
|
-
return false;
|
|
608
|
+
debug('api call', 'getVolume', volume);
|
|
609
|
+
return volume;
|
|
610
|
+
},
|
|
611
|
+
setVolume(volume) {
|
|
612
|
+
debug('api call', 'setVolume', volume);
|
|
613
|
+
if (media) {
|
|
614
|
+
media.volume = parseFloat(volume) / volumeRange;
|
|
733
615
|
}
|
|
616
|
+
},
|
|
617
|
+
setSize(width, height) {
|
|
618
|
+
debug('api call', 'setSize', width, height);
|
|
619
|
+
this.trigger('resize', width, height);
|
|
620
|
+
},
|
|
621
|
+
seek(time) {
|
|
622
|
+
debug('api call', 'seek', time);
|
|
623
|
+
if (media) {
|
|
624
|
+
media.currentTime = parseFloat(time);
|
|
625
|
+
state.seekedViaApi = true;
|
|
626
|
+
state.seekAt = media.currentTime;
|
|
627
|
+
timeObserver.seek(media.currentTime);
|
|
628
|
+
if (!state.playback) {
|
|
629
|
+
this.play();
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
},
|
|
633
|
+
play() {
|
|
634
|
+
debug('api call', 'play');
|
|
635
|
+
if (media) {
|
|
636
|
+
state.playedViaApi = true;
|
|
637
|
+
const startPlayPromise = media.play();
|
|
638
|
+
if ('undefined' !== typeof startPlayPromise) {
|
|
639
|
+
startPlayPromise.catch(error => this.handleError(error));
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
},
|
|
643
|
+
pause() {
|
|
644
|
+
debug('api call', 'pause');
|
|
645
|
+
if (media) {
|
|
646
|
+
if (!media.paused) {
|
|
647
|
+
state.pausedViaApi = true;
|
|
648
|
+
}
|
|
649
|
+
media.pause();
|
|
650
|
+
}
|
|
651
|
+
},
|
|
652
|
+
stop() {
|
|
653
|
+
debug('api call', 'stop');
|
|
654
|
+
if (media && media.duration && state.playback && !state.stalled) {
|
|
655
|
+
media.currentTime = media.duration;
|
|
656
|
+
}
|
|
657
|
+
},
|
|
658
|
+
mute(muted) {
|
|
659
|
+
debug('api call', 'mute', muted);
|
|
660
|
+
if (media) {
|
|
661
|
+
media.muted = !!muted;
|
|
662
|
+
}
|
|
663
|
+
},
|
|
664
|
+
isMuted() {
|
|
665
|
+
let mute = false;
|
|
666
|
+
if (media) {
|
|
667
|
+
mute = !!media.muted;
|
|
668
|
+
}
|
|
669
|
+
debug('api call', 'isMuted', mute);
|
|
670
|
+
return mute;
|
|
671
|
+
},
|
|
672
|
+
addMedia(src, srcType) {
|
|
673
|
+
debug('api call', 'addMedia', src, srcType);
|
|
674
|
+
if (media) {
|
|
675
|
+
if (!support.checkSupport(media, srcType)) {
|
|
676
|
+
return false;
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
if (src && $media) {
|
|
680
|
+
$media.append(sourceTpl({
|
|
681
|
+
src,
|
|
682
|
+
type: srcType
|
|
683
|
+
}));
|
|
684
|
+
return true;
|
|
685
|
+
}
|
|
686
|
+
return false;
|
|
687
|
+
},
|
|
688
|
+
setMedia(src, srcType) {
|
|
689
|
+
debug('api call', 'setMedia', src, srcType);
|
|
690
|
+
if ($media) {
|
|
691
|
+
$media.empty();
|
|
692
|
+
return this.addMedia(src, srcType);
|
|
693
|
+
}
|
|
694
|
+
return false;
|
|
734
695
|
}
|
|
696
|
+
});
|
|
697
|
+
}
|
|
735
698
|
|
|
736
|
-
|
|
737
|
-
$media.append(sourceTpl({
|
|
738
|
-
src: src,
|
|
739
|
-
type: srcType
|
|
740
|
-
}));
|
|
741
|
-
return true;
|
|
742
|
-
}
|
|
743
|
-
|
|
744
|
-
return false;
|
|
745
|
-
},
|
|
746
|
-
setMedia: function setMedia(src, srcType) {
|
|
747
|
-
debug('api call', 'setMedia', src, srcType);
|
|
748
|
-
|
|
749
|
-
if ($media) {
|
|
750
|
-
$media.empty();
|
|
751
|
-
return this.addMedia(src, srcType);
|
|
752
|
-
}
|
|
753
|
-
|
|
754
|
-
return false;
|
|
755
|
-
}
|
|
756
|
-
});
|
|
757
|
-
}
|
|
758
|
-
|
|
759
|
-
return html5PlayerFactory;
|
|
699
|
+
return html5PlayerFactory;
|
|
760
700
|
|
|
761
701
|
});
|