@twab/visualization 0.9.4 → 0.9.5
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/dist/img/1x1.f865594b.svg +1 -0
- package/dist/img/2x1.6bc80fec.svg +1 -0
- package/dist/img/3x1.8fe1c055.svg +1 -0
- package/dist/img/3x2.f5153612.svg +1 -0
- package/dist/img/4x1.22f434b0.svg +1 -0
- package/dist/img/4x2.3810a721.svg +1 -0
- package/dist/img/5x1.c0878e49.svg +1 -0
- package/dist/img/5x2.b70b5289.svg +1 -0
- package/dist/img/6x1.28b9840c.svg +1 -0
- package/dist/img/6x2.6b117ba7.svg +1 -0
- package/dist/img/dummy.ec1ab0d6.svg +1 -0
- package/dist/{visualization.common.95.js → visualization.common.15.js} +17 -17
- package/dist/{visualization.common.95.js.map → visualization.common.15.js.map} +1 -1
- package/dist/visualization.common.js +2 -2
- package/dist/visualization.common.js.map +1 -1
- package/dist/{visualization.umd.26.js → visualization.umd.96.js} +17 -17
- package/dist/{visualization.umd.26.js.map → visualization.umd.96.js.map} +1 -1
- package/dist/visualization.umd.js +2 -2
- package/dist/visualization.umd.js.map +1 -1
- package/dist/visualization.umd.min.895.js +2 -0
- package/dist/visualization.umd.min.895.js.map +1 -0
- package/dist/visualization.umd.min.js +2 -2
- package/dist/visualization.umd.min.js.map +1 -1
- package/package.json +1 -2
- package/dist/visualization.umd.min.794.js +0 -2
- package/dist/visualization.umd.min.794.js.map +0 -1
- /package/dist/css/{26.90e920d4.css → 15.90e920d4.css} +0 -0
- /package/dist/css/{794.5b845685.css → 895.5b845685.css} +0 -0
- /package/dist/css/{95.90e920d4.css → 96.90e920d4.css} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"visualization.umd.min.794.js","mappings":"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","sources":["webpack://visualization/./src/Visualization.vue","webpack://visualization/./src/components/Frame.vue","webpack://visualization/src/components/Frame.vue","webpack://visualization/./src/components/Frame.vue?3bfa","webpack://visualization/./src/components/Frame.vue?e8c5","webpack://visualization/./src/services/FramesService.js","webpack://visualization/./src/utils/Enum.js","webpack://visualization/./src/utils/FramesManager.js","webpack://visualization/./src/utils/FramesInterface.js","webpack://visualization/./src/components/Commands.vue","webpack://visualization/src/components/Commands.vue","webpack://visualization/./src/components/Commands.vue?b9d4","webpack://visualization/./src/components/Commands.vue?e210","webpack://visualization/./src/components/Infos.vue","webpack://visualization/src/components/Infos.vue","webpack://visualization/./src/components/Infos.vue?0cde","webpack://visualization/./src/components/Infos.vue?b84f","webpack://visualization/./src/components/VideoProgress.vue","webpack://visualization/src/components/VideoProgress.vue","webpack://visualization/./src/components/VideoProgress.vue?2ca8","webpack://visualization/./src/components/VideoProgress.vue?b03a","webpack://visualization/./src/components/Settings.vue","webpack://visualization/./src/assets/grid/index.js","webpack://visualization/src/components/Settings.vue","webpack://visualization/./src/components/Settings.vue?9c59","webpack://visualization/./src/components/Settings.vue?4be2","webpack://visualization/src/Visualization.vue","webpack://visualization/./src/Visualization.vue?0be0","webpack://visualization/./src/Visualization.vue?c168"],"sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"visualization-row\",attrs:{\"id\":\"visualization-container\"},on:{\"click\":_vm.framesClicked}},[(_vm.active && _vm.canInsertTime && _vm.settingsClosed)?_c('GlobalEvents',{on:{\"keydown\":[function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==45)return null;return _vm.insertTime.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==46)return null;return _vm.insertTime.apply(null, arguments)}]}}):_vm._e(),(_vm.active && _vm.settingsClosed)?_c('GlobalEvents',{on:{\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"left\",37,$event.key,[\"Left\",\"ArrowLeft\"]))return null;if('button' in $event && $event.button !== 0)return null;$event.preventDefault();return _vm.arrowLeft.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"right\",39,$event.key,[\"Right\",\"ArrowRight\"]))return null;if('button' in $event && $event.button !== 2)return null;$event.preventDefault();return _vm.arrowRight.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"page-down\",undefined,$event.key,undefined))return null;if(!$event.shiftKey)return null;$event.preventDefault();return _vm.nextLoopActivate.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"page-down\",undefined,$event.key,undefined))return null;$event.preventDefault();return _vm.next.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"page-up\",undefined,$event.key,undefined))return null;$event.preventDefault();return _vm.prev.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"page-up\",undefined,$event.key,undefined))return null;if(!$event.shiftKey)return null;$event.preventDefault();return _vm.prevLoopActivate.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==83)return null;$event.preventDefault();return _vm.setHourIni.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==69)return null;$event.preventDefault();return _vm.setHourEnd.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==36)return null;$event.preventDefault();return _vm.goToFirstFrame.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==35)return null;$event.preventDefault();return _vm.goToLastFrame.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==71)return null;$event.preventDefault();_vm.dialogs.goTo = true},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==73)return null;$event.preventDefault();_vm.dialogs.secondsPerFrame = true},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==76)return null;$event.preventDefault();_vm.dialogs.frames = true},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==49&&$event.keyCode!==97)return null;return (() => (_vm.secondsPerFrame = 1)).apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==50&&$event.keyCode!==98)return null;return (() => (_vm.secondsPerFrame = 2)).apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==51&&$event.keyCode!==99)return null;return (() => (_vm.secondsPerFrame = 3)).apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==52&&$event.keyCode!==100)return null;return (() => (_vm.secondsPerFrame = 4)).apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==53&&$event.keyCode!==101)return null;return (() => (_vm.secondsPerFrame = 5)).apply(null, arguments)}]}}):_vm._e(),(_vm.prevLoop || _vm.nextLoop)?_c('GlobalEvents',{on:{\"keydown\":_vm.breakLoop,\"click\":_vm.breakLoop}}):_vm._e(),(_vm.active)?_c('settings',{attrs:{\"dialogs-visibility\":_vm.dialogs,\"playback-rate\":_vm.playbackRate,\"seconds-per-frame\":_vm.secondsPerFrame,\"frames-per-row\":_vm.framesPerRow,\"number-of-rows\":_vm.numberOfRows},on:{\"change-playback-rate\":(value) => (_vm.playbackRate = value),\"change-go-to\":_vm.changeHour,\"change-seconds-per-frame\":(value) => (_vm.secondsPerFrame = value),\"set-frames-selection\":_vm.setFrameSelection,\"close\":(dialog) => (_vm.dialogs[dialog] = false)}}):_vm._e(),_c('div',{class:{ 'visualization-card': true, 'active-tab': _vm.active },staticStyle:{\"width\":\"100%\",\"padding\":\"0\"}},[_c('command-bar',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.commandBarShow),expression:\"commandBarShow\"}],attrs:{\"video-playing\":_vm.videoPlaying,\"video-paused\":_vm.paused,\"insert-time\":_vm.canInsertTime,\"hour-ini-selected\":!!_vm.hourIniSelected,\"hour-end-selected\":!!_vm.hourEndSelected},on:{\"prev-loop-activate\":_vm.prevLoopActivate,\"next-loop-activate\":_vm.nextLoopActivate,\"prev\":_vm.prev,\"next\":_vm.next,\"go-to\":function($event){_vm.dialogs.goTo = true},\"open-frame-selection\":function($event){_vm.dialogs.frames = true},\"open-frames-per-second\":function($event){_vm.dialogs.secondsPerFrame = true},\"open-blocks\":_vm.openBlocks,\"open-playback-rate\":function($event){_vm.dialogs.playbackRate = true},\"play-or-pause\":_vm.playOrPause,\"stop-playing\":_vm.stopPlayingBar,\"set-hour-ini\":_vm.setHourIni,\"set-hour-end\":_vm.setHourEnd,\"insert-time\":_vm.insertTime}}),(_vm.videoProgressBar)?_c('video-progress',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.videoPlaying),expression:\"videoPlaying\"}],attrs:{\"video-time\":_vm.videoTime}}):_vm._e(),_c('info-bar',{attrs:{\"playback-rate\":_vm.playbackRate,\"seconds-per-frame\":_vm.secondsPerFrame,\"commands-show\":_vm.commandBarShow,\"cache\":_vm.useCache,\"block-start-time\":_vm.blockStartTime,\"video-total-duration\":_vm.videoSliderTotalDuration,\"alternative-server\":_vm.alternativeServer,\"frames-per-row\":_vm.framesPerRow,\"number-of-rows\":_vm.numberOfRows,\"hour-ini\":_vm.hourIniSelected,\"hour-end\":_vm.hourEndSelected},on:{\"toogle-commands-visibility\":function($event){_vm.commandBarShow = !_vm.commandBarShow},\"toogle-cache\":function($event){_vm.useCache = !_vm.useCache},\"change-server\":_vm.changeServerClick}}),_vm._l((_vm.numberOfRows),function(rowNumber){return _c('div',{key:'row-' + rowNumber,staticClass:\"visualization-row\",staticStyle:{\"padding\":\"12px\"},attrs:{\"id\":'row-' + rowNumber}},[_vm._l((_vm.previousFrames),function(frame,frameNumber){return _c('div',{key:_vm.numberOfRows +\n '-' +\n _vm.framesPerRow +\n '-' +\n _vm.getIndex(rowNumber, frameNumber, _vm.Positions.previous),staticStyle:{\"display\":\"none\"}},[_c('span',{domProps:{\"innerHTML\":_vm._s(frame.img)}})])}),_vm._l((_vm.nextFrames),function(frame,frameNumber){return _c('div',{key:_vm.numberOfRows +\n '-' +\n _vm.framesPerRow +\n '-' +\n _vm.getIndex(rowNumber, frameNumber, _vm.Positions.next),staticStyle:{\"display\":\"none\"}},[_c('span',{domProps:{\"innerHTML\":_vm._s(frame.img)}})])}),_vm._l((_vm.frames.slice(\n _vm.framesPerRow * (rowNumber - 1),\n _vm.framesPerRow * rowNumber\n )),function(frame,frameNumber){return _c('div',{key:'row-' + rowNumber + '-frame-' + frameNumber,staticClass:\"visualization-col\",class:{ loaderImg: !!frame.img },attrs:{\"id\":`frame-${_vm.getIndex(rowNumber, frameNumber, _vm.Positions.current)}`},on:{\"click\":function($event){frame.time\n ? _vm.selectFrame(\n _vm.getIndex(rowNumber, frameNumber, _vm.Positions.current),\n frame\n )\n : null}}},[_c('span',{staticStyle:{\"padding-left\":\"4px\"},attrs:{\"id\":_vm.activeFrame ? 'aa' : 0}},[_c('b',[_vm._v(\" \"+_vm._s(_vm.getAudienceTime( frame.time, rowNumber, frameNumber, _vm.Positions.current ))+\" \")])]),_c('frame',{ref:\"frames\",refInFor:true,staticStyle:{\"margin\":\"0 auto\"},attrs:{\"frame\":frame,\"index\":_vm.getIndex(rowNumber, frameNumber, _vm.Positions.current),\"grid-settings\":{ numberOfRows: _vm.numberOfRows, framesPerRow: _vm.framesPerRow },\"initialTime\":frame.time === _vm.hourIniSelected,\"endTime\":frame.time === _vm.hourEndSelected,\"betweenTime\":frame.time > _vm.hourIniSelected && frame.time < _vm.hourEndSelected,\"active\":_vm.getIndex(rowNumber, frameNumber, _vm.Positions.current) ===\n _vm.activeFrame,\"activeTab\":_vm.active,\"videoUrl\":_vm.fInterface ? _vm.fInterface.getVideoUrl(frame) : '',\"playback-rate\":_vm.playbackRate},on:{\"startPlaying\":_vm.startPlaying,\"stopPlaying\":_vm.stopPlaying,\"playPauseStatus\":_vm.changePlayPause,\"updateSlider\":_vm.updateSlider}})],1)})],2)})],2)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{class:{\n 'frame-container': true,\n 'initial-time': _vm.initialTime,\n 'end-time': _vm.endTime,\n 'between-time': _vm.betweenTime,\n active: _vm.active,\n },style:({\n maxHeight: `${_vm.maxHeight}px`,\n width: '100%',\n position: 'relative',\n })},[(_vm.active && _vm.activeTab && _vm.parentComponent.settingsClosed)?_c('GlobalEvents',{on:{\"keydown\":[function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==32)return null;$event.preventDefault();return _vm.playOrPause.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==27)return null;$event.preventDefault();return _vm.stop.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==79)return null;return _vm.toogleDetailFrame.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==13)return null;$event.preventDefault();return _vm.jumpFrameToStart.apply(null, arguments)}]}}):_vm._e(),(_vm.showFrame)?_c('GlobalEvents',{on:{\"keydown\":[function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==27)return null;$event.preventDefault();return _vm.toogleDetailFrame.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==13)return null;$event.preventDefault();return _vm.toogleDetailFrame.apply(null, arguments)}]}}):_vm._e(),_c('vue-loading',{staticStyle:{\"z-index\":\"0\"},attrs:{\"active\":((!_vm.frame.image || !_vm.frame.time) && _vm.frame.title !== -1) ||\n _vm.loading ||\n _vm.videoIsLoading,\"spinner\":\"ring\",\"color\":\"#1565c0\",\"background-color\":\"#ededed\",\"text\":_vm.videoIsLoading ? _vm.$('infoBar.createVideo') : ''}}),_c('div',{staticStyle:{\"background-color\":\"black\"}},[(!_vm.loading)?_c('div',{class:{\n 'frame-content': _vm.frame.title === -1 || _vm.videoStatus !== _vm.Status.stopped,\n },style:({\n maxHeight: `${_vm.height}px`,\n maxWidth: `${_vm.width}px`,\n color: 'white',\n }),on:{\"dblclick\":_vm.playOrPause}},[(_vm.frame.image && _vm.videoStatus === _vm.Status.stopped)?_c('div',{class:{ 'dummy-frame': _vm.frame.title === -1 },staticStyle:{\"width\":\"100%\",\"height\":\"100%\"},domProps:{\"innerHTML\":_vm._s(_vm.frame.image)}}):_vm._e(),(_vm.videoStatus !== _vm.Status.stopped && !_vm.videoIsLoading)?_c('video',{ref:\"videoPlayer\",staticStyle:{\"width\":\"100%\",\"aspect-ratio\":\"11/9\"},attrs:{\"maxHeight\":`${_vm.height}px`,\"maxWidth\":`${_vm.width}px`,\"src\":_vm.videoUrlString,\"preload\":\"none\",\"autoplay\":\"\"},on:{\"timeupdate\":_vm.updateTimeLabel,\"ended\":_vm.videoEnded,\"click\":_vm.playOrPause}}):_vm._e(),_c('div',{staticClass:\"overlay\"})]):_vm._e()]),_c('dialog',{ref:\"imageDetailsDialog\",class:{ 'dummy-frame': _vm.frame.title === -1 },staticStyle:{\"width\":\"100vh\",\"border\":\"none\",\"background\":\"none\"},domProps:{\"innerHTML\":_vm._s(_vm.frame.image)}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div\r\n :style=\"{\r\n maxHeight: `${maxHeight}px`,\r\n width: '100%',\r\n position: 'relative',\r\n }\"\r\n :class=\"{\r\n 'frame-container': true,\r\n 'initial-time': initialTime,\r\n 'end-time': endTime,\r\n 'between-time': betweenTime,\r\n active: active,\r\n }\"\r\n >\r\n <GlobalEvents\r\n v-if=\"active && activeTab && parentComponent.settingsClosed\"\r\n @keydown.32.prevent=\"playOrPause\"\r\n @keydown.27.prevent=\"stop\"\r\n @keydown.79=\"toogleDetailFrame\"\r\n @keydown.13.prevent=\"jumpFrameToStart\"\r\n />\r\n <GlobalEvents\r\n v-if=\"showFrame\"\r\n @keydown.27.prevent=\"toogleDetailFrame\"\r\n @keydown.13.prevent=\"toogleDetailFrame\"\r\n />\r\n\r\n <vue-loading\r\n :active=\"\r\n ((!frame.image || !frame.time) && frame.title !== -1) ||\r\n loading ||\r\n videoIsLoading\r\n \"\r\n spinner=\"ring\"\r\n color=\"#1565c0\"\r\n background-color=\"#ededed\"\r\n style=\"z-index: 0\"\r\n :text=\"videoIsLoading ? $('infoBar.createVideo') : ''\"\r\n />\r\n <div style=\"background-color: black\">\r\n <div\r\n v-if=\"!loading\"\r\n :class=\"{\r\n 'frame-content': frame.title === -1 || videoStatus !== Status.stopped,\r\n }\"\r\n :style=\"{\r\n maxHeight: `${height}px`,\r\n maxWidth: `${width}px`,\r\n color: 'white',\r\n }\"\r\n @dblclick=\"playOrPause\"\r\n >\r\n <div\r\n v-if=\"frame.image && videoStatus === Status.stopped\"\r\n :class=\"{ 'dummy-frame': frame.title === -1 }\"\r\n v-html=\"frame.image\"\r\n style=\"width: 100%; height: 100%\"\r\n />\r\n <video\r\n v-if=\"videoStatus !== Status.stopped && !videoIsLoading\"\r\n ref=\"videoPlayer\"\r\n :maxHeight=\"`${height}px`\"\r\n :maxWidth=\"`${width}px`\"\r\n :src=\"videoUrlString\"\r\n preload=\"none\"\r\n autoplay\r\n @timeupdate=\"updateTimeLabel\"\r\n @ended=\"videoEnded\"\r\n @click=\"playOrPause\"\r\n style=\"width: 100%; aspect-ratio: 11/9\"\r\n ></video>\r\n <div class=\"overlay\"></div>\r\n </div>\r\n </div>\r\n\r\n <dialog\r\n ref=\"imageDetailsDialog\"\r\n :class=\"{ 'dummy-frame': frame.title === -1 }\"\r\n v-html=\"frame.image\"\r\n style=\"width: 100vh; border: none; background: none\"\r\n />\r\n </div>\r\n</template>\r\n<script>\r\nimport VueLoading from 'vue-loading-twa'\r\n\r\nconst Status = Object.freeze({\r\n stopped: 0,\r\n playing: 1,\r\n paused: 2,\r\n})\r\n\r\nexport default {\r\n components: {\r\n VueLoading,\r\n },\r\n name: 'frame-component',\r\n props: {\r\n frame: {\r\n type: [Object, Number],\r\n required: true,\r\n },\r\n index: {\r\n type: Number,\r\n required: true,\r\n },\r\n loading: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n gridSettings: {\r\n type: Object,\r\n required: true,\r\n },\r\n initialTime: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n endTime: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n betweenTime: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n active: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n activeTab: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n videoUrl: {\r\n type: [String, Promise],\r\n required: true,\r\n },\r\n playbackRate: {\r\n type: Number,\r\n default: 1,\r\n },\r\n },\r\n data() {\r\n return {\r\n Status,\r\n aspectRatio: 11 / 9,\r\n width: 0,\r\n height: 0,\r\n maxWidth: 0,\r\n fullMaxWidth: 0,\r\n maxHeight: 0,\r\n showFrame: false,\r\n videoStatus: Status.stopped,\r\n videoStartTime: null,\r\n videoCurrentTime: null,\r\n videoUrlString: '',\r\n parentComponent: null,\r\n videoIsLoading: false,\r\n currentBlock: null,\r\n lastTimeEnterPressed: null,\r\n }\r\n },\r\n created() {\r\n this.parentComponent = this.$parent\r\n },\r\n watch: {\r\n playbackRate(val) {\r\n if (\r\n this.videoStatus === Status.playing ||\r\n this.videoStatus === Status.paused\r\n ) {\r\n this.$refs.videoPlayer.playbackRate = val\r\n }\r\n },\r\n },\r\n methods: {\r\n jumpFrameToStart() {\r\n if (this.active) {\r\n const currentTime = new Date().getTime()\r\n\r\n if (currentTime - this.lastTimeEnterPressed <= 500) {\r\n this.parentComponent.changeHour(\r\n this.parentComponent.convertToAudienceTime(this.frame.time)\r\n )\r\n }\r\n\r\n this.lastTimeEnterPressed = currentTime\r\n }\r\n },\r\n changeSettings(value) {\r\n this.videoCurrentTime = value\r\n },\r\n toogleDetailFrame() {\r\n if (this.showFrame) {\r\n this.$refs.imageDetailsDialog.close()\r\n } else {\r\n this.$refs.imageDetailsDialog.showModal()\r\n }\r\n this.showFrame = !this.showFrame\r\n },\r\n getMaxWidth() {\r\n const commandBarSize = document.getElementById('command-bar')\r\n\r\n return commandBarSize?.clientWidth\r\n },\r\n resize(height) {\r\n const commandBarSize = document.getElementById('command-bar')\r\n const infoBarSize = document.getElementById('info-bar')\r\n this.fullMaxWidth = commandBarSize?.clientWidth\r\n this.maxWidth =\r\n (commandBarSize?.clientWidth - this.gridSettings.framesPerRow * 10) /\r\n this.gridSettings.framesPerRow\r\n\r\n const heightAvailable =\r\n height -\r\n commandBarSize?.offsetHeight -\r\n infoBarSize?.offsetHeight -\r\n 47 * this.gridSettings.numberOfRows\r\n\r\n this.maxHeight =\r\n this.gridSettings.numberOfRows === 2\r\n ? (heightAvailable - 12) / 2\r\n : heightAvailable\r\n this.maxHeight = this.maxHeight >= 75 ? this.maxHeight : 75\r\n\r\n if (this.maxWidth / this.aspectRatio > this.maxHeight) {\r\n this.height = this.maxHeight\r\n this.width = this.maxHeight * this.aspectRatio\r\n } else {\r\n this.width = this.maxWidth\r\n this.height = this.maxWidth / this.aspectRatio\r\n }\r\n\r\n this.maxHeight = this.height\r\n },\r\n async playOrPause() {\r\n switch (this.videoStatus) {\r\n case Status.stopped:\r\n this.videoIsLoading = true\r\n try {\r\n this.videoUrlString = await this.videoUrl\r\n const blockInfo =\r\n await this.parentComponent.fInterface?.getVideoStartTime(\r\n this.frame\r\n )\r\n\r\n this.videoStartTime = blockInfo.start\r\n this.videoUrlString =\r\n this.parentComponent.fInterface.getVideoRequestByUrl(\r\n blockInfo.url,\r\n this.frame.number\r\n )\r\n } catch (error) {\r\n console.log(error)\r\n }\r\n this.videoIsLoading = false\r\n this.videoStatus = Status.playing\r\n this.$nextTick(() => {\r\n this.$refs.videoPlayer.onloadedmetadata = (e) => {\r\n this.$refs.videoPlayer.playbackRate = this.playbackRate\r\n // * atualizar slider\r\n this.$emit('updateSlider', this.videoStartTime, this.frame.time)\r\n //*\r\n this.$emit('startPlaying', this.frame, e.target.duration)\r\n this.$emit('playPauseStatus', true)\r\n }\r\n })\r\n break\r\n case Status.paused:\r\n this.$refs.videoPlayer.play()\r\n this.$refs.videoPlayer.playbackRate = this.playbackRate\r\n this.videoStatus = Status.playing\r\n this.$emit('playPauseStatus', true)\r\n break\r\n case Status.playing:\r\n this.$refs.videoPlayer.pause()\r\n\r\n this.videoStatus = Status.paused\r\n this.$emit('playPauseStatus', false)\r\n break\r\n }\r\n },\r\n stop(jump = true) {\r\n if (\r\n this.videoStatus === Status.playing ||\r\n this.videoStatus === Status.paused\r\n ) {\r\n if (jump) {\r\n this.parentComponent.changeHour(\r\n this.parentComponent.convertToAudienceTime(\r\n parseInt(this.videoCurrentTime)\r\n )\r\n )\r\n }\r\n this.videoStatus = Status.stopped\r\n this.videoUrlString = null\r\n this.videoCurrentTime = null\r\n this.videoStartTime = null\r\n }\r\n this.$emit('stopPlaying')\r\n },\r\n //eslint-disable-next-line\r\n videoJumpTo(time) {\r\n this.videoCurrentTime = this.videoStartTime + time\r\n this.$refs.videoPlayer.currentTime = time\r\n },\r\n async videoJumpToTimeStamp(time) {\r\n let frame = {\r\n time: time,\r\n }\r\n if (!time) return\r\n if (\r\n !(\r\n this.currentBlock &&\r\n time >= this.currentBlock.start &&\r\n time <= this.currentBlock.end\r\n )\r\n ) {\r\n this.currentBlock = await this.parentComponent.fInterface?.getBlockInfo(\r\n frame\r\n )\r\n this.videoStartTime = this.currentBlock.start\r\n this.videoUrlString =\r\n this.parentComponent.fInterface.getVideoUrlForTime(\r\n this.videoStartTime\r\n )\r\n }\r\n this.videoCurrentTime = time - this.videoStartTime\r\n this.$refs.videoPlayer.currentTime = this.videoCurrentTime\r\n },\r\n updateTimeLabel(e) {\r\n this.videoCurrentTime = this.videoStartTime + e.target.currentTime\r\n this.parentComponent.updateVideoTime(this.index, this.videoCurrentTime)\r\n this.parentComponent.updateVideoStatus(e.target.currentTime)\r\n },\r\n async videoEnded() {\r\n this.videoStartTime =\r\n await this.parentComponent.fInterface?.getNextVideoStartTime(\r\n this.frame.time\r\n )\r\n this.videoUrlString = this.parentComponent.fInterface.getVideoUrlForTime(\r\n this.videoStartTime\r\n )\r\n // * Ao acabar o vídeo tenho de mandar atualizar slider\r\n // * aqui o video current time tambem vai ser o videoStartTime\r\n this.$emit('updateSlider', this.videoStartTime, this.videoStartTime)\r\n },\r\n },\r\n}\r\n</script>\r\n<style scoped>\r\n.frame-container > div {\r\n max-height: 100%;\r\n}\r\n.frame-container {\r\n background-color: black;\r\n display: flex;\r\n justify-content: center;\r\n}\r\n.frame-content,\r\n.dummy-frame {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n.frame-content video {\r\n flex-grow: 1;\r\n object-fit: fill;\r\n z-index: 0;\r\n}\r\n.overlay {\r\n width: 100%;\r\n height: 100%;\r\n z-index: 5;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n border: 4px solid transparent;\r\n}\r\n.active .overlay {\r\n border-color: var(--visualization-primary);\r\n}\r\n.between-time .overlay {\r\n border-top-color: var(--visualization-secondary);\r\n}\r\n.between-time.active .overlay {\r\n border-color: var(--visualization-secondary);\r\n}\r\n.initial-time .overlay {\r\n border-top-color: var(--visualization-start);\r\n}\r\n.initial-time.active .overlay {\r\n border-color: var(--visualization-start);\r\n}\r\n.end-time .overlay {\r\n border-top-color: var(--visualization-end);\r\n}\r\n.end-time.active .overlay {\r\n border-color: var(--visualization-end);\r\n}\r\n.initial-time.end-time .overlay {\r\n border-top-color: var(--visualization-start);\r\n border-bottom-color: var(--visualization-end);\r\n}\r\n.initial-time.end-time.active .overlay {\r\n border-top-color: var(--visualization-start);\r\n border-left-color: var(--visualization-start);\r\n border-bottom-color: var(--visualization-end);\r\n border-right-color: var(--visualization-end);\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-124.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Frame.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-124.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Frame.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Frame.vue?vue&type=template&id=20a23fbe&scoped=true&\"\nimport script from \"./Frame.vue?vue&type=script&lang=js&\"\nexport * from \"./Frame.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Frame.vue?vue&type=style&index=0&id=20a23fbe&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"20a23fbe\",\n null\n \n)\n\nexport default component.exports","import axios from 'axios'\r\n\r\nconst Api = axios.create({\r\n //baseURL: process.env.VUE_APP_FRAMES_SERVER,\r\n baseURL: sessionStorage.getItem('base_url'),\r\n})\r\n\r\nApi.interceptors.request.use((config) => {\r\n config.params = config.params || {}\r\n config.params.Client = sessionStorage.getItem('client') || 'UNKNOWN'\r\n if (sessionStorage.getItem('server') === 'alternative') {\r\n config.params.BlockPathConfig = 'AlernativeTvConfig'\r\n }\r\n\r\n return config\r\n})\r\n\r\nexport default {\r\n getBlockRequest({\r\n direction,\r\n channel,\r\n split,\r\n time,\r\n quality,\r\n factor,\r\n useCache = true,\r\n signal,\r\n } = {}) {\r\n return Api.get(`Get${direction}FramesBlockInFiles`, {\r\n params: {\r\n Channel: channel,\r\n Split: split,\r\n UseCache: useCache,\r\n Time: time,\r\n Step: 0,\r\n JpegQuality: quality,\r\n JpegSizeFactor: factor,\r\n },\r\n signal,\r\n })\r\n },\r\n\r\n getSmallBlockRequest({\r\n channel,\r\n split,\r\n time,\r\n quality,\r\n factor,\r\n size,\r\n useCache = true,\r\n signal,\r\n } = {}) {\r\n return Api.get('GetSmallFramesBlockInFiles', {\r\n params: {\r\n Channel: channel,\r\n Split: split,\r\n UseCache: useCache,\r\n Time: time,\r\n Step: 0,\r\n JpegQuality: quality,\r\n JpegSizeFactor: factor,\r\n Size: size,\r\n },\r\n signal,\r\n })\r\n },\r\n\r\n getFileInfoRequest({ direction, channel, split, time, step, signal } = {}) {\r\n return Api.get(`Get${direction}BlockFileInformation`, {\r\n params: {\r\n Channel: channel,\r\n Split: split,\r\n Time: time,\r\n Step: step,\r\n },\r\n signal,\r\n })\r\n },\r\n\r\n getNextAvailableBlock({ channel, time, signal } = {}) {\r\n // process.env.VUE_APP_NEXT_AVAILABLE_BLOCK\r\n\r\n return Api.get(`GetPreviousAvailableBlockFileInformation`, {\r\n params: {\r\n Channel: channel,\r\n Split: 1,\r\n Time: time,\r\n Step: 0,\r\n },\r\n signal,\r\n })\r\n },\r\n\r\n // getVideoRequestQuery(direction, channel, split, time, step) {\r\n // return (\r\n // this.serverUrl +\r\n // 'Get' + direction + 'Video' +\r\n // '?Client=' +\r\n // client +\r\n // '&Channel=' +\r\n // channel +\r\n // '&Split=' +\r\n // split +\r\n // '&Time=' +\r\n // time +\r\n // '&Step=' +\r\n // step +\r\n // this.serverUrlExtraParams\r\n // )\r\n // }\r\n\r\n // getVideoRequestByTime(channel, time) {\r\n // return (\r\n // this.serverUrl +\r\n // 'GetVideo?channel=' +\r\n // channel +\r\n // '&time=' +\r\n // time +\r\n // this.serverUrlExtraParams\r\n // )\r\n // }\r\n}\r\n","export default {\r\n MinBlockSizes: Object.freeze({\r\n 1: 3600,\r\n 2: 3600,\r\n 3: 3600,\r\n 4: 3600,\r\n 5: 3600,\r\n }),\r\n\r\n MinBlockSizesBack: Object.freeze({\r\n 1: 1800,\r\n 2: 1800,\r\n 3: 1800,\r\n 4: 1800,\r\n 5: 1800,\r\n }),\r\n\r\n Direction: Object.freeze({\r\n Next: 'Next',\r\n Previous: 'Previous',\r\n Self: '',\r\n }),\r\n\r\n JpegQuality: Object.freeze({\r\n LowestQuality: '1',\r\n LowQuality: '25',\r\n MediumQuality: '50',\r\n HighQuality: '75',\r\n HighestQuality: '100',\r\n }),\r\n\r\n ResponseStatus: Object.freeze({\r\n Ok: 1,\r\n UnknownError: -1,\r\n VideoBlockNotFound: -2,\r\n InvalidRequest: -3,\r\n ClientNotAllowed: -4,\r\n AuthenticationProblem: -5,\r\n }),\r\n\r\n StepsQuality: Object.freeze({\r\n 1: '50', // 50 -> MediumQuality of JpegQuality\r\n 2: '50', // 50 -> MediumQuality of JpegQuality\r\n 3: '50', // 50 -> MediumQuality of JpegQuality\r\n 4: '50', // 50 -> MediumQuality of JpegQuality\r\n 5: '50', // 50 -> MediumQuality of JpegQuality\r\n }),\r\n\r\n SizeQuality: Object.freeze({ 1: '100' }), // 100 -> HighestQuality of JpegQuality\r\n\r\n StepsFactor: Object.freeze({ 1: 1, 2: 1, 3: 1, 4: 1, 5: 1 }),\r\n\r\n SmallBlockSize: Object.freeze({ 1: 1, 2: 1, 3: 1, 4: 1, 5: 1 }),\r\n}\r\n","import FramesService from '../services/FramesService.js'\r\nimport ENUM from './Enum.js'\r\n\r\nfunction FramesManager(\r\n channel,\r\n size,\r\n currentTime,\r\n startAudienceTime,\r\n useCache = true\r\n) {\r\n this.channel = channel\r\n this.size = size\r\n this.currentTime = currentTime\r\n this.useCache = useCache\r\n this.startAudienceTime = startAudienceTime\r\n this.firstFrameTime = currentTime\r\n\r\n this.buffer = []\r\n this.requests = {}\r\n\r\n this.currentStep = 1\r\n this.currentPosition = 0\r\n this.smallBlockSizeFactor = 2\r\n this.startCheckingQualityStep = 1\r\n this.startCheckingQualitySize = 1\r\n this.numberOfSmallBlocksCheck = 3\r\n}\r\n\r\nFramesManager.prototype.goTo = async function (time) {\r\n this.cancelAllPendingRequests()\r\n\r\n this.currentTime = time || this.currentTime\r\n const frameIndex = this.findFrameIndexByTime(this.currentTime)\r\n\r\n if (frameIndex >= 0) {\r\n this.currentPosition = frameIndex\r\n } else {\r\n this.buffer = []\r\n await this.getSmallBlock(this.currentTime, this.channel, 1)\r\n }\r\n}\r\n\r\nFramesManager.prototype.getSmallBlock = async function (\r\n time,\r\n channel,\r\n split,\r\n add = false\r\n) {\r\n const requestId = `smallBlock_${time}`\r\n try {\r\n if (!this.requests[requestId]) {\r\n this.requests[requestId] = new AbortController()\r\n\r\n let response = (\r\n await FramesService.getSmallBlockRequest({\r\n channel,\r\n split,\r\n time,\r\n size: this.size * 15,\r\n quality: ENUM.StepsQuality[this.currentStep],\r\n factor: ENUM.StepsFactor[this.currentStep],\r\n signal: this.requests[requestId].signal,\r\n })\r\n ).data\r\n\r\n if (!this.requests[requestId]) {\r\n throw 'Response not needed anymore'\r\n }\r\n\r\n if (response.status !== ENUM.ResponseStatus.Ok) {\r\n await this.getBlock(time, channel, split, ENUM.Direction.Previous, true)\r\n await this.getBlock(time, channel, split, ENUM.Direction.Next, true)\r\n throw response?.message || 'Unknown error'\r\n }\r\n\r\n response = response.data\r\n const images = response.frames\r\n this.requests[`block_${ENUM.Direction.Next}_${response.end}`] = true\r\n\r\n this.getBlock(time, this.channel, 1, ENUM.Direction.Self, true, true)\r\n\r\n if (!add) {\r\n const firstFrameTime = images[0].time\r\n const lastFrameTime = images[images.length - 1].time\r\n\r\n if (lastFrameTime === response.end) {\r\n await this.getSmallBlock(lastFrameTime + 1, this.channel, 1, true)\r\n } else if (\r\n this.timestampToTimeString(firstFrameTime) !==\r\n this.startAudienceTime &&\r\n firstFrameTime === response.start\r\n ) {\r\n await this.getSmallBlock(\r\n firstFrameTime - this.currentStep * this.size,\r\n this.channel,\r\n 1,\r\n true\r\n )\r\n }\r\n }\r\n\r\n this.orderFramesBlock(images)\r\n this.currentPosition = this.findFrameIndexByTime(this.currentTime)\r\n\r\n delete this.requests[`block_${ENUM.Direction.Next}_${response.end}`]\r\n delete this.requests[requestId]\r\n return true\r\n }\r\n console.error(`Frames Manager (GetSmallBlock): Request blocked by another equal request occurring`)\r\n return false\r\n } catch (err) {\r\n console.error(`Frames Manager (GetSmallBlock): ${err}`)\r\n delete this.requests[requestId]\r\n return false\r\n }\r\n}\r\n\r\nFramesManager.prototype.getBlock = async function (\r\n time,\r\n channel,\r\n split,\r\n direction,\r\n checkMinBlock,\r\n substituition = false\r\n) {\r\n const requestId = `block_${direction}_${time}`\r\n try {\r\n if (!this.requests[requestId]) {\r\n this.requests[requestId] = new AbortController()\r\n\r\n let response = (\r\n await FramesService.getBlockRequest({\r\n direction,\r\n channel,\r\n split,\r\n time,\r\n quality: ENUM.StepsQuality[this.currentStep],\r\n factor: ENUM.StepsFactor[this.currentStep],\r\n signal: this.requests[requestId].signal,\r\n })\r\n ).data\r\n\r\n if (!this.requests[requestId]) {\r\n throw 'Response not needed anymore'\r\n }\r\n\r\n if (response.status !== ENUM.ResponseStatus.Ok) {\r\n throw response?.message || 'Unknown error'\r\n }\r\n\r\n this.orderFramesBlock(response.data.frames)\r\n this.currentPosition = this.findFrameIndexByTime(this.currentTime)\r\n\r\n if (checkMinBlock) {\r\n await this.checkMinBlockSize(!substituition)\r\n }\r\n\r\n delete this.requests[requestId]\r\n return true\r\n }\r\n console.error(`Frames Manager (GetBlock ${direction}): Request blocked by another equal request occurring`)\r\n return false\r\n } catch (err) {\r\n console.error(`Frames Manager (GetBlock ${direction}): ${err}`)\r\n delete this.requests[requestId]\r\n return false\r\n }\r\n}\r\n\r\nFramesManager.prototype.checkMinBlockSize = async function (checkMinBlock) {\r\n if (this.checkFramesBackward()) {\r\n await this.getBlock(\r\n this.buffer.length === 0 ? this.currentTime : this.buffer[0].time,\r\n this.channel,\r\n 1,\r\n ENUM.Direction[this.buffer.length === 0 ? 'Self' : 'Previous'],\r\n checkMinBlock,\r\n (this.buffer[0]?.number || 0) !== 0\r\n )\r\n }\r\n\r\n if (this.checkFramesForward()) {\r\n await this.getBlock(\r\n this.buffer.length === 0\r\n ? this.currentTime\r\n : this.buffer[this.buffer.length - 1].time,\r\n this.channel,\r\n 1,\r\n ENUM.Direction[this.buffer.length === 0 ? 'Self' : 'Next'],\r\n checkMinBlock\r\n )\r\n }\r\n}\r\n\r\nFramesManager.prototype.checkFramesForward = function () {\r\n return (\r\n this.buffer.length - this.currentPosition <\r\n ENUM.MinBlockSizes[this.currentStep] * (this.size / 6)\r\n )\r\n}\r\n\r\nFramesManager.prototype.checkFramesBackward = function () {\r\n return this.currentPosition < ENUM.MinBlockSizesBack[this.currentStep]\r\n}\r\n\r\nFramesManager.prototype.orderFramesBlock = function (images) {\r\n if (this.buffer.length > 0) {\r\n const bufferFistTime = this.buffer[0].time\r\n const bufferLastTime = this.buffer[this.buffer.length - 1].time\r\n const beforeImages = images.filter((image) => image.time < bufferFistTime)\r\n const afterImages = images.filter((image) => image.time > bufferLastTime)\r\n\r\n this.buffer = [...beforeImages, ...this.buffer, ...afterImages]\r\n } else {\r\n this.buffer = images\r\n }\r\n}\r\n\r\nFramesManager.prototype.findFrameIndexByTime = function (time) {\r\n return this.buffer.findIndex((frame) => frame.time === time)\r\n}\r\n\r\nFramesManager.prototype.cancelAllPendingRequests = function () {\r\n for (const request in this.requests) {\r\n const value = this.requests[request]\r\n if (typeof value === 'object' && 'signal' in value) {\r\n value.abort()\r\n }\r\n delete this.requests[request]\r\n }\r\n}\r\n\r\nFramesManager.prototype.timestampToTimeString = function (timestamp) {\r\n return new Date(timestamp * 1000)\r\n .toISOString()\r\n .substring(11, 19)\r\n .replace(/:/g, '')\r\n}\r\n\r\nFramesManager.prototype.getPrevImages = function () {\r\n if (this.timestampToTimeString(this.currentTime) === this.startAudienceTime) {\r\n return null\r\n }\r\n\r\n return this.getBufferSlice(\r\n this.currentPosition - this.size * this.currentStep,\r\n this.currentPosition\r\n )\r\n}\r\n\r\nFramesManager.prototype.getCurrentImages = function () {\r\n return this.getBufferSlice(\r\n this.currentPosition,\r\n this.currentPosition + this.size * this.currentStep\r\n )\r\n}\r\n\r\nFramesManager.prototype.getNextImages = function () {\r\n return this.getBufferSlice(\r\n this.currentPosition + this.size * this.currentStep,\r\n this.currentPosition + this.size * 2 * this.currentStep\r\n )\r\n}\r\n\r\nFramesManager.prototype.getBufferSlice = function (start, end) {\r\n let slice = this.buffer.slice(start, end)\r\n\r\n if (this.currentStep !== 1) {\r\n slice = slice.filter((f, i) => i % this.currentStep === 0)\r\n }\r\n\r\n if (slice.length < this.size) {\r\n return null\r\n }\r\n\r\n return slice\r\n}\r\n\r\nFramesManager.prototype.next = function () {\r\n const newPosition = this.currentPosition + this.currentStep * this.size\r\n this.currentPosition =\r\n newPosition < this.buffer.length ? newPosition : this.currentPosition\r\n this.currentTime = this.buffer[this.currentPosition]?.time || this.currentTime\r\n\r\n this.checkMinBlockSize(true)\r\n}\r\n\r\nFramesManager.prototype.previous = function () {\r\n const newPosition = this.currentPosition - this.size * this.currentStep\r\n this.currentPosition = newPosition > 0 ? newPosition : 0\r\n this.currentTime = this.buffer[this.currentPosition]?.time || this.currentTime\r\n\r\n this.checkMinBlockSize(true)\r\n}\r\n\r\nFramesManager.prototype.getFileInfo = async function (time, step) {\r\n if (time) {\r\n let response = (\r\n await FramesService.getFileInfoRequest({\r\n direction: ENUM.Direction.Self,\r\n channel: this.channel,\r\n split: this.currentStep,\r\n time: time,\r\n step: step,\r\n })\r\n ).data\r\n\r\n if (response.status == ENUM.ResponseStatus.Ok) {\r\n return response.data\r\n } else {\r\n return null\r\n }\r\n } else {\r\n return null\r\n }\r\n}\r\n\r\nFramesManager.prototype.getNextFileInfo = async function (time, step) {\r\n let response = (\r\n await FramesService.getFileInfoRequest({\r\n direction: ENUM.Direction.Next,\r\n channel: this.channel,\r\n split: this.currentStep,\r\n time: time,\r\n step: step,\r\n })\r\n ).data\r\n\r\n if (response.status == ENUM.ResponseStatus.Ok) {\r\n return response.data\r\n } else {\r\n return null\r\n }\r\n}\r\n\r\nexport default FramesManager\r\n","import FramesManager from './FramesManager.js'\r\n\r\nconst server = sessionStorage.getItem('server')\r\n\r\nfunction getServerUrlWithParams() {\r\n return {\r\n url: sessionStorage.getItem('base_url'),\r\n params:\r\n server === 'alternative' ? '&BlockPathConfig=AlernativeTvConfig' : '',\r\n }\r\n}\r\n\r\nfunction FramesInterface(\r\n channel,\r\n numberOfRows,\r\n framesPerRow,\r\n currentTime,\r\n startAudienceTime,\r\n useCache = true\r\n) {\r\n this.channel = channel\r\n this.numberOfRows = numberOfRows\r\n this.framesPerRow = framesPerRow\r\n this.currentTime = currentTime\r\n this.firstFrameTime = currentTime\r\n this.startAudienceTime = startAudienceTime\r\n this.useCache = useCache\r\n}\r\n\r\nFramesInterface.prototype.init = async function () {\r\n this.framesManager = await new FramesManager(\r\n this.channel,\r\n this.numberOfRows * this.framesPerRow,\r\n this.currentTime,\r\n this.startAudienceTime,\r\n this.useCache\r\n )\r\n\r\n await this.framesManager.goTo()\r\n await this.loadFrames()\r\n}\r\n\r\nFramesInterface.prototype.initLight = async function () {\r\n this.framesManager = await new FramesManager(\r\n this.channel,\r\n this.numberOfRows * this.framesPerRow,\r\n this.currentTime,\r\n this.startAudienceTime,\r\n this.useCache\r\n )\r\n}\r\n\r\nFramesInterface.prototype.changeTime = async function (time) {\r\n await this.framesManager.goTo(time)\r\n await this.loadFrames()\r\n}\r\n\r\nFramesInterface.prototype.loadFrames = async function () {\r\n let prev = (await this.framesManager.getPrevImages()) || []\r\n let next = (await this.framesManager.getNextImages()) || []\r\n let current = (await this.framesManager.getCurrentImages()) || []\r\n\r\n prev = await this.constructImagesComponent(prev)\r\n current = await this.constructImagesComponent(current)\r\n next = await this.constructImagesComponent(next)\r\n\r\n this.frames = { prev, current, next }\r\n}\r\n\r\nFramesInterface.prototype.loadNextFrames = async function () {\r\n this.framesManager.next()\r\n\r\n let next = (await this.framesManager.getNextImages()) || []\r\n next = await this.constructImagesComponent(next)\r\n\r\n this.frames.prev = this.frames.current\r\n this.frames.current = this.frames.next\r\n this.frames.next = next\r\n}\r\n\r\nFramesInterface.prototype.loadPrevFrames = async function () {\r\n this.framesManager.previous()\r\n\r\n console.log(this.framesManager.currentTime, this.firstFrameTime)\r\n\r\n if (this.framesManager.currentTime < this.firstFrameTime) {\r\n await this.framesManager.goTo(this.firstFrameTime)\r\n await this.loadFrames()\r\n return\r\n }\r\n\r\n let prev = (await this.framesManager.getPrevImages()) || []\r\n prev = await this.constructImagesComponent(prev)\r\n\r\n this.frames.next = this.frames.current\r\n this.frames.current = this.frames.prev\r\n this.frames.prev = prev\r\n}\r\n\r\nFramesInterface.prototype.constructImagesComponent = async function (array) {\r\n const Semaphor = []\r\n for (let frame of array) {\r\n const image = document.createElement('img')\r\n image.src =\r\n frame.title === -1\r\n ? require('../assets/dummy.svg')\r\n : `${sessionStorage.getItem('base_url')}frames/${frame.title}${\r\n server == 'alternative' ? '?server=alt' : ''\r\n }`\r\n\r\n image.style.maxWidth = frame.title === -1 ? '80%' : '100%'\r\n image.style.contain = 'true'\r\n Semaphor.push(\r\n new Promise((resolve) => {\r\n image.addEventListener('load', () => {\r\n resolve()\r\n })\r\n })\r\n )\r\n\r\n frame['image'] = image.outerHTML\r\n }\r\n await Promise.all(Semaphor)\r\n return array\r\n}\r\n\r\nFramesInterface.prototype.getFrames = function (position) {\r\n const positions = ['prev', 'current', 'next']\r\n const images = this.frames[positions[position]]\r\n if (images && images.length > 0) {\r\n return images\r\n }\r\n return Array.from(Array(this.numberOfRows * this.framesPerRow).keys())\r\n}\r\n\r\nFramesInterface.prototype.getCurrentTime = function () {\r\n return this.framesManager.currentTime\r\n}\r\n\r\nFramesInterface.prototype.getVideoUrl = function (frame) {\r\n let { url, params } = getServerUrlWithParams()\r\n return (\r\n url +\r\n 'GetVideo?Client=' +\r\n sessionStorage.getItem('client') +\r\n '&Channel=' +\r\n this.channel +\r\n '&Time=' +\r\n frame.time +\r\n params +\r\n '#t=' +\r\n frame.number\r\n )\r\n}\r\n\r\nFramesInterface.prototype.getVideoUrlForTime = function (time) {\r\n let { url, params } = getServerUrlWithParams()\r\n return (\r\n url +\r\n 'GetVideo?Client=' +\r\n sessionStorage.getItem('client') +\r\n '&Channel=' +\r\n this.channel +\r\n '&Time=' +\r\n time +\r\n params\r\n )\r\n}\r\n\r\nFramesInterface.prototype.getVideoStartTime = async function (frame) {\r\n try {\r\n const block = await this.framesManager.getFileInfo(frame.time, 0)\r\n return block\r\n } catch (err) {\r\n console.log(err)\r\n }\r\n}\r\n\r\nFramesInterface.prototype.getBlockInfo = async function (frame) {\r\n try {\r\n const block = await this.framesManager.getFileInfo(frame.time, 0)\r\n return block\r\n } catch (err) {\r\n console.log(err)\r\n }\r\n}\r\n\r\nFramesInterface.prototype.getNextVideoStartTime = async function (time) {\r\n try {\r\n const block = await this.framesManager.getNextFileInfo(time, 0)\r\n return block.start\r\n } catch (err) {\r\n console.log(err)\r\n }\r\n}\r\n\r\nFramesInterface.prototype.setCurrentStep = function (step) {\r\n this.framesManager.currentStep = step\r\n}\r\n\r\nFramesInterface.prototype.changeSize = async function (\r\n numberOfRows,\r\n framesPerRow\r\n) {\r\n this.numberOfRows = numberOfRows\r\n this.framesPerRow = framesPerRow\r\n this.framesManager.size = this.numberOfRows * this.framesPerRow\r\n await this.loadFrames()\r\n}\r\n\r\nFramesInterface.prototype.getVideoRequestByUrl = function (url_path, t) {\r\n const { url, params } = getServerUrlWithParams()\r\n return url + 'StreamFromVideo?url=' + url_path + params + '#t=' + t\r\n}\r\n\r\nexport default FramesInterface\r\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"visualization-col pa-0\",staticStyle:{\"border-top-right-radius\":\"6px\"},attrs:{\"id\":\"command-bar\"}},[(_vm.commandBarShow)?_c('div',{staticClass:\"visualization-row visualization-justify-center\"},_vm._l((_vm.commandBarBtns),function(btn,index){return _c('div',{key:'command-btn-' + index},[(!btn)?_c('hr',{staticClass:\"visualization-divider vertical\",staticStyle:{\"margin\":\"0 4px\"}}):_vm._e(),(btn && (btn.condition ? btn.condition() : true))?_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(\n btn.text && typeof btn.text === 'function' ? btn.text() : btn.text\n ),expression:\"\\n btn.text && typeof btn.text === 'function' ? btn.text() : btn.text\\n \"}],staticClass:\"command-bar-btn\",style:({\n color:\n btn.color && typeof btn.color === 'function'\n ? btn.color()\n : 'black',\n }),on:{\"click\":btn.fnc}},[_c('font-awesome-icon',{attrs:{\"id\":btn.id,\"icon\":'fa-solid ' +\n (btn.icon && typeof btn.icon === 'function'\n ? btn.icon()\n : btn.icon)}})],1):_vm._e()])}),0):_vm._e(),_c('hr',{staticClass:\"visualization-divider\"})])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div\r\n class=\"visualization-col pa-0\"\r\n id=\"command-bar\"\r\n style=\"border-top-right-radius: 6px\"\r\n >\r\n <div\r\n class=\"visualization-row visualization-justify-center\"\r\n v-if=\"commandBarShow\"\r\n >\r\n <div v-for=\"(btn, index) in commandBarBtns\" :key=\"'command-btn-' + index\">\r\n <hr\r\n class=\"visualization-divider vertical\"\r\n v-if=\"!btn\"\r\n style=\"margin: 0 4px\"\r\n />\r\n <button\r\n v-if=\"btn && (btn.condition ? btn.condition() : true)\"\r\n v-tooltip=\"\r\n btn.text && typeof btn.text === 'function' ? btn.text() : btn.text\r\n \"\r\n :style=\"{\r\n color:\r\n btn.color && typeof btn.color === 'function'\r\n ? btn.color()\r\n : 'black',\r\n }\"\r\n class=\"command-bar-btn\"\r\n @click=\"btn.fnc\"\r\n >\r\n <font-awesome-icon\r\n :id=\"btn.id\"\r\n :icon=\"\r\n 'fa-solid ' +\r\n (btn.icon && typeof btn.icon === 'function'\r\n ? btn.icon()\r\n : btn.icon)\r\n \"\r\n />\r\n </button>\r\n </div>\r\n </div>\r\n <hr class=\"visualization-divider\" />\r\n </div>\r\n</template>\r\n<script>\r\nexport default {\r\n props: {\r\n videoPlaying: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n videoPaused: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n insertTime: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n hourIniSelected: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n hourEndSelected: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n data() {\r\n return {\r\n commandBarShow: true,\r\n commandBarBtns: [\r\n {\r\n fnc: () => this.$emit('prev-loop-activate'),\r\n icon: 'fa-backward',\r\n text: 'Fast Backward',\r\n id: 'Fast Backward',\r\n },\r\n {\r\n fnc: () => this.$emit('prev'),\r\n icon: 'fa-step-backward',\r\n text: 'Step Backward',\r\n id: 'Step Backward',\r\n },\r\n {\r\n fnc: () => this.$emit('go-to'),\r\n icon: 'fa-clock',\r\n text: this.$i18n.t('infoBar.setHour'),\r\n id: 'Definir Hora',\r\n },\r\n {\r\n fnc: () => this.$emit('next'),\r\n icon: 'fa-step-forward',\r\n text: 'Step Forward',\r\n id: 'Step Forward',\r\n },\r\n {\r\n fnc: () => this.$emit('next-loop-activate'),\r\n icon: 'fa-forward',\r\n text: 'Fast Forward',\r\n id: 'Fast Forward',\r\n },\r\n {\r\n fnc: () => this.$emit('play-or-pause'),\r\n icon: () => {\r\n return this.videoPlaying && !this.videoPaused\r\n ? 'fa-pause'\r\n : 'fa-play'\r\n },\r\n text: () => {\r\n return this.videoPlaying && !this.videoPaused ? 'Pause' : 'Play'\r\n },\r\n id: 'playOrPause',\r\n },\r\n {\r\n fnc: () => this.$emit('stop-playing'),\r\n icon: 'fa-stop',\r\n text: 'Stop',\r\n id: 'Stop',\r\n },\r\n null,\r\n {\r\n fnc: () => this.$emit('open-frame-selection'),\r\n icon: 'fa-border-all',\r\n text: this.$i18n.t('infoBar.gridForm'),\r\n id: 'Formato da grelha',\r\n },\r\n {\r\n fnc: () => this.$emit('open-frames-per-second'),\r\n icon: 'fa-sliders-h',\r\n text: this.$i18n.t('infoBar.secondImage'),\r\n id: 'Segundos por Imagem',\r\n },\r\n // {\r\n // fnc: () => this.$emit('open-blocks'),\r\n // icon: 'fa-cut',\r\n // text: 'Escolher intervalo de blocos',\r\n // id: 'Escolher intervalo de blocos',\r\n // },\r\n {\r\n fnc: () => this.$emit('open-playback-rate'),\r\n icon: 'fa-tachometer-alt',\r\n text: this.$i18n.t('infoBar.chooseVelocity'),\r\n id: 'Escolher velocidade de reprodução',\r\n },\r\n // {\r\n // fnc: () => this.$emit('insert-time-force'),\r\n // icon: 'fa-arrow-turn-down',\r\n // text: 'Recuperar Notícia',\r\n // id: 'Recuperar Notícia',\r\n // condition: () => {\r\n // return this.insertTime\r\n // },\r\n // },\r\n null,\r\n {\r\n fnc: () => this.$emit('set-hour-ini'),\r\n icon: 'fa-hourglass-start',\r\n text: this.$i18n.t('form.inicialHour'),\r\n id: 'Hora Inicial',\r\n color: () => {\r\n return this.hourIniSelected ? 'var(--visualization-start)' : 'black'\r\n },\r\n },\r\n {\r\n fnc: () => this.$emit('insert-time'),\r\n icon: 'fa-arrow-circle-down',\r\n text: this.$i18n.t('infoBar.insert'),\r\n id: 'insert',\r\n condition: () => {\r\n return this.insertTime\r\n },\r\n },\r\n {\r\n fnc: () => this.$emit('set-hour-end'),\r\n icon: 'fa-hourglass-end',\r\n text: this.$i18n.t('form.endHour'),\r\n id: 'Hora Final',\r\n color: () => {\r\n return this.hourEndSelected ? 'var(--visualization-end)' : 'black'\r\n },\r\n },\r\n // {\r\n // fnc: () => this.$emit('check-available-block'),\r\n // icon: 'fa-video',\r\n // text: 'Próximo bloco disponível',\r\n // id: 'Próximo bloco disponível',\r\n // },\r\n ],\r\n }\r\n },\r\n}\r\n</script>\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-124.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Commands.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-124.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Commands.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Commands.vue?vue&type=template&id=28a1997b&\"\nimport script from \"./Commands.vue?vue&type=script&lang=js&\"\nexport * from \"./Commands.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"visualization-row visualization-justify-center visualization-align-center\",style:(!_vm.commandsShow\n ? 'border-top-right-radius: 6px; padding: 4px'\n : 'padding: 4px'),attrs:{\"id\":\"info-bar\"}},[_c('span',[_vm._v(\" \"+_vm._s(_vm.playbackRate)+\"x \")]),_c('hr',{staticClass:\"visualization-divider vertical\",staticStyle:{\"margin\":\"0 8px\"}}),_c('span',[_vm._v(\" \"+_vm._s(_vm.$t('infoBar.selected', { seconds: _vm.hourEnd && _vm.hourIni ? _vm.hourEnd - _vm.hourIni + 1 : 0, hour_ini: _vm.convertToAudienceTime(_vm.hourIni), hour_end: _vm.convertToAudienceTime(_vm.hourEnd), }))+\" \")]),_c('hr',{staticClass:\"visualization-divider vertical\",staticStyle:{\"margin\":\"0 8px\"}}),_c('span',[_vm._v(\" \"+_vm._s(_vm.$t('infoBar.interval', { seconds: _vm.secondsPerFrame, }))+\" \")]),_c('hr',{staticClass:\"visualization-divider vertical\",staticStyle:{\"margin\":\"0 8px\"}}),_c('span',[_vm._v(\" \"+_vm._s(_vm.$t('infoBar.block', { time1: _vm.convertToAudienceTime(_vm.blockStartTime), time2: _vm.convertToAudienceTime(_vm.blockTotalTime), }))+\" \")]),_c('hr',{staticClass:\"visualization-divider vertical\",staticStyle:{\"margin\":\"0 8px\"}}),_vm._v(\" \"+_vm._s(_vm.framesPerRow * _vm.numberOfRows)+\" \"),_c('hr',{staticClass:\"visualization-divider vertical\",staticStyle:{\"margin\":\"0 8px\"}}),_vm._v(\" \"+_vm._s(_vm.framesPerRow + '*' + _vm.numberOfRows)+\" \"),(_vm.alternativeServer || !_vm.cache)?_c('span',{staticClass:\"visualization-divider vertical\",staticStyle:{\"margin\":\"0 8px\"}}):_vm._e(),(_vm.alternativeServer)?_c('span',[_c('v-icon',{attrs:{\"color\":\"error\",\"small\":\"\",\"left\":\"\"}},[_vm._v(\"fa-exclamation-triangle\")]),_c('strong',[_vm._v(_vm._s(_vm.$t('infoBar.alternativeServer')))])],1):_vm._e(),(_vm.alternativeServer && !_vm.cache)?_c('span',{staticClass:\"visualization-divider vertical\",staticStyle:{\"margin\":\"0 8px\"}}):_vm._e(),(!_vm.cache)?_c('span',[_c('v-icon',{attrs:{\"color\":\"warning\",\"small\":\"\",\"left\":\"\"}},[_vm._v(\"fa-exclamation-circle\")]),_c('strong',[_vm._v(_vm._s(_vm.$t('infoBar.notUsingCache')))])],1):_vm._e(),_c('div',{staticClass:\"settings-container\"},[_c('font-awesome-icon',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(\n _vm.alternativeServer\n ? _vm.$t('infoBar.changeServer')\n : _vm.$t('infoBar.changeServer')\n ),expression:\"\\n alternativeServer\\n ? $t('infoBar.changeServer')\\n : $t('infoBar.changeServer')\\n \"}],attrs:{\"icon\":\"fa-solid fa-server\"},on:{\"click\":function($event){return _vm.$emit('change-server')}}}),_c('font-awesome-icon',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(\n _vm.commandsShow\n ? _vm.$t('moduletelentry.hideButtons')\n : _vm.$t('moduletelentry.showButtons')\n ),expression:\"\\n commandsShow\\n ? $t('moduletelentry.hideButtons')\\n : $t('moduletelentry.showButtons')\\n \"}],attrs:{\"icon\":_vm.commandsShow ? 'fa-solid fa-eye' : 'fa-solid fa-eye-slash'},on:{\"click\":function($event){return _vm.$emit('toogle-commands-visibility')}}}),_c('font-awesome-icon',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(\n _vm.cache ? _vm.$t('infoBar.disableCache') : _vm.$t('infoBar.activateCache')\n ),expression:\"\\n cache ? $t('infoBar.disableCache') : $t('infoBar.activateCache')\\n \"}],attrs:{\"icon\":_vm.cache ? 'fa-solid fa-ban' : 'fa-solid fa-sync'},on:{\"click\":function($event){return _vm.$emit('toogle-cache')}}})],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div\r\n id=\"info-bar\"\r\n class=\"visualization-row visualization-justify-center visualization-align-center\"\r\n :style=\"\r\n !commandsShow\r\n ? 'border-top-right-radius: 6px; padding: 4px'\r\n : 'padding: 4px'\r\n \"\r\n >\r\n <span> {{ playbackRate }}x </span>\r\n <hr class=\"visualization-divider vertical\" style=\"margin: 0 8px\" />\r\n <span>\r\n {{\r\n $t('infoBar.selected', {\r\n seconds: hourEnd && hourIni ? hourEnd - hourIni + 1 : 0,\r\n hour_ini: convertToAudienceTime(hourIni),\r\n hour_end: convertToAudienceTime(hourEnd),\r\n })\r\n }}\r\n </span>\r\n <hr class=\"visualization-divider vertical\" style=\"margin: 0 8px\" />\r\n <span>\r\n {{\r\n $t('infoBar.interval', {\r\n seconds: secondsPerFrame,\r\n })\r\n }}\r\n </span>\r\n <hr class=\"visualization-divider vertical\" style=\"margin: 0 8px\" />\r\n <span>\r\n {{\r\n $t('infoBar.block', {\r\n time1: convertToAudienceTime(blockStartTime),\r\n time2: convertToAudienceTime(blockTotalTime),\r\n })\r\n }}\r\n </span>\r\n <hr class=\"visualization-divider vertical\" style=\"margin: 0 8px\" />\r\n {{ framesPerRow * numberOfRows }}\r\n <hr class=\"visualization-divider vertical\" style=\"margin: 0 8px\" />\r\n {{ framesPerRow + '*' + numberOfRows }}\r\n <span\r\n class=\"visualization-divider vertical\"\r\n v-if=\"alternativeServer || !cache\"\r\n style=\"margin: 0 8px\"\r\n />\r\n <span v-if=\"alternativeServer\">\r\n <v-icon color=\"error\" small left>fa-exclamation-triangle</v-icon>\r\n <strong>{{ $t('infoBar.alternativeServer') }}</strong>\r\n </span>\r\n <span\r\n class=\"visualization-divider vertical\"\r\n v-if=\"alternativeServer && !cache\"\r\n style=\"margin: 0 8px\"\r\n />\r\n <span v-if=\"!cache\">\r\n <v-icon color=\"warning\" small left>fa-exclamation-circle</v-icon>\r\n <strong>{{ $t('infoBar.notUsingCache') }}</strong>\r\n </span>\r\n <div class=\"settings-container\">\r\n <font-awesome-icon\r\n icon=\"fa-solid fa-server\"\r\n @click=\"$emit('change-server')\"\r\n v-tooltip=\"\r\n alternativeServer\r\n ? $t('infoBar.changeServer')\r\n : $t('infoBar.changeServer')\r\n \"\r\n />\r\n <font-awesome-icon\r\n :icon=\"commandsShow ? 'fa-solid fa-eye' : 'fa-solid fa-eye-slash'\"\r\n @click=\"$emit('toogle-commands-visibility')\"\r\n v-tooltip=\"\r\n commandsShow\r\n ? $t('moduletelentry.hideButtons')\r\n : $t('moduletelentry.showButtons')\r\n \"\r\n />\r\n <font-awesome-icon\r\n :icon=\"cache ? 'fa-solid fa-ban' : 'fa-solid fa-sync'\"\r\n @click=\"$emit('toogle-cache')\"\r\n v-tooltip=\"\r\n cache ? $t('infoBar.disableCache') : $t('infoBar.activateCache')\r\n \"\r\n />\r\n </div>\r\n </div>\r\n</template>\r\n<script>\r\nexport default {\r\n props: {\r\n playbackRate: {\r\n type: Number,\r\n required: true,\r\n },\r\n secondsPerFrame: {\r\n type: Number,\r\n required: true,\r\n },\r\n commandsShow: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n cache: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n blockStartTime: {\r\n type: Number,\r\n required: true,\r\n },\r\n videoTotalDuration: {\r\n type: Number,\r\n required: true,\r\n },\r\n alternativeServer: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n framesPerRow: {\r\n type: Number,\r\n required: true,\r\n },\r\n numberOfRows: {\r\n type: Number,\r\n required: true,\r\n },\r\n hourIni: {\r\n type: [Number, Boolean],\r\n },\r\n hourEnd: {\r\n type: [Number, Boolean],\r\n },\r\n },\r\n data() {\r\n return {}\r\n },\r\n computed: {\r\n blockTotalTime() {\r\n return this.videoTotalDuration + this.blockStartTime\r\n },\r\n },\r\n methods: {\r\n convertToAudienceTime(time, separator = ':') {\r\n const d = this.getDateParts()\r\n const limit = Date.UTC(d.year, d.month, d.day, 23, 59, 59) / 1000\r\n\r\n let hour = this.dateInUtc(time * 1000)\r\n .toTimeString()\r\n .split(' ')[0]\r\n .split(':')\r\n .map(Number)\r\n\r\n if (time > limit && time <= limit + this.startAudienceSeconds) {\r\n hour[0] = 24 + hour[0]\r\n }\r\n return hour\r\n .map((part) => (part > 9 ? part.toString() : '0' + part))\r\n .join(separator)\r\n },\r\n getDateParts(date = this.date) {\r\n const d = new Date(date)\r\n return {\r\n year: d.getFullYear(),\r\n month: d.getMonth(),\r\n day: d.getDate(),\r\n }\r\n },\r\n dateInUtc(miliSeconds) {\r\n var date = new Date(miliSeconds)\r\n var utc = new Date(\r\n date.getUTCFullYear(),\r\n date.getUTCMonth(),\r\n date.getUTCDate(),\r\n date.getUTCHours(),\r\n date.getUTCMinutes(),\r\n date.getUTCSeconds()\r\n )\r\n return utc\r\n },\r\n },\r\n}\r\n</script>\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-124.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Infos.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-124.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Infos.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Infos.vue?vue&type=template&id=68da7f95&\"\nimport script from \"./Infos.vue?vue&type=script&lang=js&\"\nexport * from \"./Infos.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('div',{staticClass:\"visualization-row\",attrs:{\"id\":\"progress\"},on:{\"mousedown\":_vm.progressMouseDown}},[_c('span',{staticClass:\"progressLabel\"},[_vm._v(\" \"+_vm._s(_vm.convertToAudienceTime(_vm.videoTime))+\" \")]),_c('span',{staticClass:\"progressBar\"})]),_c('hr',{staticClass:\"visualization-divider\"})])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div>\r\n <div class=\"visualization-row\" id=\"progress\" @mousedown=\"progressMouseDown\">\r\n <span class=\"progressLabel\">\r\n {{ convertToAudienceTime(videoTime) }}\r\n </span>\r\n <span class=\"progressBar\"></span>\r\n </div>\r\n <hr class=\"visualization-divider\" />\r\n </div>\r\n</template>\r\n<script>\r\nexport default {\r\n props: {\r\n videoTime: {\r\n type: Number,\r\n required: true,\r\n },\r\n },\r\n methods: {\r\n progressMouseDown(e) {\r\n this.progressVideoDrag = true\r\n const array = this.$refs.frames.filter(\r\n (fc) => fc.videoStatus === fc.Status.playing\r\n )\r\n if (array.length === 1) {\r\n const frame = array[0]\r\n frame.playOrPause()\r\n }\r\n this.updateProgress(e)\r\n\r\n window.addEventListener('mouseup', this.progressMouseUp)\r\n window.addEventListener('mousemove', this.progressMouseMove)\r\n },\r\n progressMouseUp(e) {\r\n if (this.progressVideoDrag) {\r\n const array = this.$refs.frames.filter(\r\n (fc) => fc.videoStatus === fc.Status.paused\r\n )\r\n if (array.length === 1) {\r\n const frame = array[0]\r\n frame.playOrPause()\r\n }\r\n\r\n this.updateProgress(e)\r\n }\r\n\r\n window.removeEventListener('mouseup', this.progressMouseUp)\r\n window.removeEventListener('mousemove', this.progressMouseMove)\r\n this.progressVideoDrag = false\r\n },\r\n progressMouseMove(e) {\r\n if (this.progressVideoDrag) {\r\n this.updateProgress(e)\r\n }\r\n },\r\n updateProgress(e, time) {\r\n let percentage\r\n const element = document.getElementById('progress')\r\n const elementBar = element.getElementsByClassName('progressBar')[0]\r\n\r\n let frames = this.$refs.frames.filter(\r\n (fc) =>\r\n fc.videoStatus === fc.Status.playing ||\r\n fc.videoStatus === fc.Status.paused\r\n )\r\n let frame = frames.length === 1 ? frames[0] : null\r\n\r\n if (time && frame) {\r\n let timeInSeconds = frame.videoCurrentTime - this.sliderStartTime\r\n\r\n percentage = (timeInSeconds / this.videoSliderTotalDuration) * 100\r\n } else if (e) {\r\n const rect = element.getBoundingClientRect()\r\n const max = Math.round(rect.width)\r\n const pos = e.pageX - Math.round(rect.left)\r\n percentage = (pos / max) * 100 <= 100 ? (pos / max) * 100 : 100\r\n\r\n if (frame) {\r\n let targetInSeconds =\r\n this.videoSliderTotalDuration * (percentage / 100)\r\n let timeStampToJump = parseInt(this.sliderStartTime + targetInSeconds)\r\n frame.videoJumpToTimeStamp(timeStampToJump)\r\n }\r\n } else {\r\n percentage = 0\r\n }\r\n\r\n elementBar.style.width = `${percentage}%`\r\n },\r\n getDateParts(date = this.date) {\r\n const d = new Date(date)\r\n return {\r\n year: d.getFullYear(),\r\n month: d.getMonth(),\r\n day: d.getDate(),\r\n }\r\n },\r\n dateInUtc(miliSeconds) {\r\n var date = new Date(miliSeconds)\r\n var utc = new Date(\r\n date.getUTCFullYear(),\r\n date.getUTCMonth(),\r\n date.getUTCDate(),\r\n date.getUTCHours(),\r\n date.getUTCMinutes(),\r\n date.getUTCSeconds()\r\n )\r\n return utc\r\n },\r\n convertToAudienceTime(time, separator = ':') {\r\n const d = this.getDateParts()\r\n const limit = Date.UTC(d.year, d.month, d.day, 23, 59, 59) / 1000\r\n\r\n let hour = this.dateInUtc(time * 1000)\r\n .toTimeString()\r\n .split(' ')[0]\r\n .split(':')\r\n .map(Number)\r\n\r\n if (time > limit && time <= limit + this.startAudienceSeconds) {\r\n hour[0] = 24 + hour[0]\r\n }\r\n return hour\r\n .map((part) => (part > 9 ? part.toString() : '0' + part))\r\n .join(separator)\r\n },\r\n },\r\n}\r\n</script>\r\n<style scoped>\r\n#progress {\r\n position: relative;\r\n cursor: pointer;\r\n width: 80%;\r\n height: 15px;\r\n background-color: #dfdfdf;\r\n margin: 5px auto;\r\n border-radius: 6px;\r\n}\r\n.progressBar {\r\n display: absolute;\r\n height: 15px;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n background-color: var(--visualization-secondary);\r\n z-index: 2;\r\n width: 50%;\r\n border-radius: inherit;\r\n}\r\n.progressBar::after {\r\n content: '';\r\n width: 17px;\r\n height: 17px;\r\n position: absolute;\r\n top: -1px;\r\n right: -8.5px;\r\n border-radius: 50%;\r\n background-color: var(--visualization-primary);\r\n z-index: 3;\r\n}\r\n.progressLabel {\r\n z-index: 4;\r\n margin: 0 auto;\r\n font-weight: bold;\r\n line-height: 17px;\r\n font-size: 14px;\r\n text-shadow: -1px 0 #dfdfdf, 0 1px #dfdfdf, 1px 0 #dfdfdf, 0 -1px #dfdfdf;\r\n\r\n user-select: none;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-124.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VideoProgress.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-124.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VideoProgress.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VideoProgress.vue?vue&type=template&id=7fe6f244&scoped=true&\"\nimport script from \"./VideoProgress.vue?vue&type=script&lang=js&\"\nexport * from \"./VideoProgress.vue?vue&type=script&lang=js&\"\nimport style0 from \"./VideoProgress.vue?vue&type=style&index=0&id=7fe6f244&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7fe6f244\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[(_vm.dialogsVisibility.frames)?_c('GlobalEvents',{on:{\"keydown\":[function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==37)return null;return _vm.prevFormat.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==39)return null;return _vm.nextFormat.apply(null, arguments)}]}}):_vm._e(),_c('dialog',{ref:\"frames\"},[_c('div',{staticClass:\"visualization-row\",staticStyle:{\"padding\":\"5px\",\"font-weight\":\"bold\",\"background-color\":\"var(--visualization-primary)\",\"border-color\":\"var(--visualization-primary)\",\"height\":\"40px\",\"color\":\"white\",\"display\":\"flex\",\"justify-content\":\"center\",\"padding-top\":\"10px\"}},[_vm._v(\" \"+_vm._s(_vm.$t('infoBar.gridForm'))+\" \")]),_c('div',{staticClass:\"visualization-row\",staticStyle:{\"justify-content\":\"center\"}},_vm._l((_vm.items),function(item,index){return _c('div',{key:index,staticClass:\"visualization-col\",staticStyle:{\"min-width\":\"200px\",\"max-width\":\"200px\"}},[_c('img',{style:(_vm.framesValue !== item.value ? 'filter: grayscale(1)' : ''),attrs:{\"src\":item.image,\"width\":\"100%\"},on:{\"click\":() => (_vm.framesValue = item.value)}})])}),0),_c('div',{staticClass:\"visualization-divider\"}),_c('div',{staticClass:\"visualization-row\",staticStyle:{\"display\":\"flex\",\"justify-content\":\"center\",\"margin-top\":\"10px\",\"margin-bottom\":\"10px\"}},[_c('button',{staticStyle:{\"border-radius\":\"4px\",\"height\":\"35px\",\"width\":\"70px\",\"background-color\":\"var(--visualization-primary)\",\"border-color\":\"var(--visualization-primary)\",\"color\":\"white\"},on:{\"click\":function($event){return _vm.$emit('close', 'frames')}}},[_vm._v(\" Ok \")])])]),_c('dialog',{ref:\"secondsPerFrame\"},[_c('div',{staticClass:\"visualization-row\",staticStyle:{\"padding\":\"5px\",\"font-weight\":\"bold\",\"background-color\":\"var(--visualization-primary)\",\"border-color\":\"var(--visualization-primary)\",\"height\":\"40px\",\"color\":\"white\",\"display\":\"flex\",\"justify-content\":\"center\",\"padding-top\":\"10px\"}},[_vm._v(\" \"+_vm._s(_vm.$t('infoBar.secondImage'))+\" \")]),_c('div',{staticClass:\"visualization-row\",staticStyle:{\"margin\":\"25px\",\"height\":\"20px\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.secondsPerFrameValue),expression:\"secondsPerFrameValue\"}],ref:\"secondsPerFrameInput\",staticStyle:{\"height\":\"30px\",\"width\":\"300px\"},attrs:{\"type\":\"range\",\"step\":\"1\",\"max\":\"5\",\"min\":\"1\"},domProps:{\"value\":(_vm.secondsPerFrameValue)},on:{\"__r\":function($event){_vm.secondsPerFrameValue=$event.target.value}}}),_c('span',{staticStyle:{\"padding-left\":\"20px\",\"font-size\":\"16px\"}},[_vm._v(\" \"+_vm._s(_vm.secondsPerFrame + ' s'))])]),_c('div',{staticClass:\"visualization-divider\",staticStyle:{\"margin\":\"10px\"}}),_c('div',{staticClass:\"visualization-row\",staticStyle:{\"display\":\"flex\",\"justify-content\":\"center\",\"margin-top\":\"10px\"}},[_c('button',{staticStyle:{\"border-radius\":\"4px\",\"height\":\"35px\",\"width\":\"70px\",\"background-color\":\"var(--visualization-primary)\",\"border-color\":\"var(--visualization-primary)\",\"color\":\"white\",\"margin-bottom\":\"8px\"},on:{\"click\":function($event){return _vm.$emit('close', 'secondsPerFrame')}}},[_vm._v(\" Ok \")])])]),_c('dialog',{ref:\"goTo\"},[_c('div',{staticStyle:{\"padding\":\"5px\",\"font-weight\":\"bold\",\"background-color\":\"var(--visualization-primary)\",\"border-color\":\"var(--visualization-primary)\",\"height\":\"35px\",\"color\":\"white\",\"display\":\"flex\",\"justify-content\":\"center\",\"padding-top\":\"8px\"}},[_vm._v(\" \"+_vm._s(_vm.$t('infoBar.goTo'))+\" \")]),_c('div',{staticClass:\"visualization-row\",staticStyle:{\"margin\":\"25px\",\"height\":\"20px\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.goToValue),expression:\"goToValue\"},{name:\"mask\",rawName:\"v-mask\",value:('##:##:##'),expression:\"'##:##:##'\"}],staticStyle:{\"height\":\"30px\",\"width\":\"300px\",\"border\":\"0.1px solid #c2c9d6\",\"border-radius\":\"3px\",\"padding\":\"5px\"},attrs:{\"type\":\"text\",\"placeholder\":\"hh:mm:ss\"},domProps:{\"value\":(_vm.goToValue)},on:{\"input\":function($event){if($event.target.composing)return;_vm.goToValue=$event.target.value}}})]),_c('div',{staticClass:\"visualization-divider\",staticStyle:{\"margin-top\":\"40px\"}}),_c('div',{staticClass:\"visualization-row\",staticStyle:{\"display\":\"flex\",\"justify-content\":\"center\",\"margin-top\":\"10px\",\"margin-bottom\":\"10px\"}},[_c('button',{staticStyle:{\"border-radius\":\"4px\",\"height\":\"35px\",\"width\":\"70px\",\"background-color\":\"var(--visualization-primary)\",\"border-color\":\"var(--visualization-primary)\",\"color\":\"white\"},on:{\"click\":() => {\n _vm.$emit('close', 'goTo')\n _vm.$emit('change-go-to', _vm.goToValue)\n _vm.goToValue = ''\n }}},[_vm._v(\" Ok \")])])]),_c('GlobalEvents',{on:{\"keydown\":[function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==107)return null;return _vm.changePlaybackRate(1)},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==109)return null;return _vm.changePlaybackRate(-1)}]}}),_c('dialog',{ref:\"playbackRate\"},[_c('div',{staticClass:\"visualization-row\",staticStyle:{\"padding\":\"5px\",\"font-weight\":\"bold\",\"background-color\":\"var(--visualization-primary)\",\"border-color\":\"var(--visualization-primary)\",\"height\":\"35px\",\"color\":\"white\",\"display\":\"flex\",\"justify-content\":\"center\",\"padding-top\":\"8px\"}},[_vm._v(\" \"+_vm._s(_vm.$t('infoBar.playbackSpeed'))+\" \")]),_c('div',{staticClass:\"visualization-row\",staticStyle:{\"margin\":\"25px\",\"height\":\"20px\",\"width\":\"380px\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.playbackRateValue),expression:\"playbackRateValue\"}],ref:\"playbackRateInput\",staticStyle:{\"height\":\"30px\",\"width\":\"300px\"},attrs:{\"type\":\"range\",\"step\":\"0.25\",\"max\":\"3\",\"min\":\"1\"},domProps:{\"value\":(_vm.playbackRateValue)},on:{\"__r\":function($event){_vm.playbackRateValue=$event.target.value}}}),_c('span',{staticStyle:{\"padding-left\":\"20px\",\"padding-right\":\"20px\",\"font-size\":\"16px\"}},[_vm._v(_vm._s(_vm.playbackRate + 'x'))])]),_c('div',{staticClass:\"visualization-divider\",staticStyle:{\"margin-top\":\"40px\"}}),_c('div',{staticClass:\"visualization-row\",staticStyle:{\"display\":\"flex\",\"justify-content\":\"center\",\"margin-top\":\"10px\",\"margin-bottom\":\"10px\"}},[_c('button',{staticStyle:{\"border-radius\":\"4px\",\"height\":\"35px\",\"width\":\"70px\",\"background-color\":\"var(--visualization-primary)\",\"border-color\":\"var(--visualization-primary)\",\"color\":\"white\"},on:{\"click\":function($event){return _vm.$emit('close', 'playbackRate')}}},[_vm._v(\" Ok \")])])])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import one_one from './1x1.svg'\r\nimport two_one from './2x1.svg'\r\nimport three_one from './3x1.svg'\r\nimport three_two from './3x2.svg'\r\nimport four_one from './4x1.svg'\r\nimport four_two from './4x2.svg'\r\nimport five_one from './5x1.svg'\r\nimport five_two from './5x2.svg'\r\nimport six_one from './6x1.svg'\r\nimport six_two from './6x2.svg'\r\n\r\nexport default {\r\n '1x1': one_one,\r\n '2x1': two_one,\r\n '3x1': three_one,\r\n '3x2': three_two,\r\n '4x1': four_one,\r\n '4x2': four_two,\r\n '5x1': five_one,\r\n '5x2': five_two,\r\n '6x1': six_one,\r\n '6x2': six_two,\r\n}\r\n","<template>\r\n <div>\r\n <GlobalEvents\r\n v-if=\"dialogsVisibility.frames\"\r\n @keydown.37=\"prevFormat\"\r\n @keydown.39=\"nextFormat\"\r\n />\r\n <!-- Formato da grelha -->\r\n <dialog ref=\"frames\">\r\n <div\r\n class=\"visualization-row\"\r\n style=\"\r\n padding: 5px;\r\n font-weight: bold;\r\n background-color: var(--visualization-primary);\r\n border-color: var(--visualization-primary);\r\n height: 40px;\r\n color: white;\r\n display: flex;\r\n justify-content: center;\r\n padding-top: 10px;\r\n \"\r\n >\r\n {{ $t('infoBar.gridForm') }}\r\n </div>\r\n <div class=\"visualization-row\" style=\"justify-content: center\">\r\n <div\r\n v-for=\"(item, index) in items\"\r\n :key=\"index\"\r\n class=\"visualization-col\"\r\n style=\"min-width: 200px; max-width: 200px\"\r\n >\r\n <img\r\n @click=\"() => (framesValue = item.value)\"\r\n :src=\"item.image\"\r\n width=\"100%\"\r\n :style=\"framesValue !== item.value ? 'filter: grayscale(1)' : ''\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"visualization-divider\" />\r\n <div\r\n class=\"visualization-row\"\r\n style=\"\r\n display: flex;\r\n justify-content: center;\r\n margin-top: 10px;\r\n margin-bottom: 10px;\r\n \"\r\n >\r\n <button\r\n style=\"\r\n border-radius: 4px;\r\n height: 35px;\r\n width: 70px;\r\n background-color: var(--visualization-primary);\r\n border-color: var(--visualization-primary);\r\n color: white;\r\n \"\r\n @click=\"$emit('close', 'frames')\"\r\n >\r\n Ok\r\n </button>\r\n </div>\r\n </dialog>\r\n\r\n <!-- Frequencia das Imagens -->\r\n <dialog ref=\"secondsPerFrame\">\r\n <div\r\n class=\"visualization-row\"\r\n style=\"\r\n padding: 5px;\r\n font-weight: bold;\r\n background-color: var(--visualization-primary);\r\n border-color: var(--visualization-primary);\r\n height: 40px;\r\n color: white;\r\n display: flex;\r\n justify-content: center;\r\n padding-top: 10px;\r\n \"\r\n >\r\n {{ $t('infoBar.secondImage') }}\r\n </div>\r\n <div class=\"visualization-row\" style=\"margin: 25px; height: 20px\">\r\n <input\r\n ref=\"secondsPerFrameInput\"\r\n v-model=\"secondsPerFrameValue\"\r\n type=\"range\"\r\n step=\"1\"\r\n max=\"5\"\r\n min=\"1\"\r\n style=\"height: 30px; width: 300px\"\r\n />\r\n <span style=\"padding-left: 20px; font-size: 16px\">\r\n {{ secondsPerFrame + ' s' }}</span\r\n >\r\n </div>\r\n <div class=\"visualization-divider\" style=\"margin: 10px\" />\r\n <div\r\n class=\"visualization-row\"\r\n style=\"display: flex; justify-content: center; margin-top: 10px\"\r\n >\r\n <button\r\n style=\"\r\n border-radius: 4px;\r\n height: 35px;\r\n width: 70px;\r\n background-color: var(--visualization-primary);\r\n border-color: var(--visualization-primary);\r\n color: white;\r\n margin-bottom: 8px;\r\n \"\r\n @click=\"$emit('close', 'secondsPerFrame')\"\r\n >\r\n Ok\r\n </button>\r\n </div>\r\n </dialog>\r\n\r\n <!-- Go To -->\r\n <dialog ref=\"goTo\">\r\n <div\r\n style=\"\r\n padding: 5px;\r\n font-weight: bold;\r\n background-color: var(--visualization-primary);\r\n border-color: var(--visualization-primary);\r\n height: 35px;\r\n color: white;\r\n display: flex;\r\n justify-content: center;\r\n padding-top: 8px;\r\n \"\r\n >\r\n {{ $t('infoBar.goTo') }}\r\n </div>\r\n <div class=\"visualization-row\" style=\"margin: 25px; height: 20px\">\r\n <input\r\n v-model=\"goToValue\"\r\n type=\"text\"\r\n placeholder=\"hh:mm:ss\"\r\n v-mask=\"'##:##:##'\"\r\n style=\"\r\n height: 30px;\r\n width: 300px;\r\n border: 0.1px solid #c2c9d6;\r\n border-radius: 3px;\r\n padding: 5px;\r\n \"\r\n />\r\n </div>\r\n <div class=\"visualization-divider\" style=\"margin-top: 40px\" />\r\n <div\r\n class=\"visualization-row\"\r\n style=\"\r\n display: flex;\r\n justify-content: center;\r\n margin-top: 10px;\r\n margin-bottom: 10px;\r\n \"\r\n >\r\n <button\r\n style=\"\r\n border-radius: 4px;\r\n height: 35px;\r\n width: 70px;\r\n background-color: var(--visualization-primary);\r\n border-color: var(--visualization-primary);\r\n color: white;\r\n \"\r\n @click=\"\r\n () => {\r\n $emit('close', 'goTo')\r\n $emit('change-go-to', goToValue)\r\n goToValue = ''\r\n }\r\n \"\r\n >\r\n Ok\r\n </button>\r\n </div>\r\n </dialog>\r\n\r\n <!-- Velocidade Reprodução -->\r\n <GlobalEvents\r\n @keydown.107=\"changePlaybackRate(1)\"\r\n @keydown.109=\"changePlaybackRate(-1)\"\r\n />\r\n <dialog ref=\"playbackRate\">\r\n <div\r\n class=\"visualization-row\"\r\n style=\"\r\n padding: 5px;\r\n font-weight: bold;\r\n background-color: var(--visualization-primary);\r\n border-color: var(--visualization-primary);\r\n height: 35px;\r\n color: white;\r\n display: flex;\r\n justify-content: center;\r\n padding-top: 8px;\r\n \"\r\n >\r\n {{ $t('infoBar.playbackSpeed') }}\r\n </div>\r\n <div\r\n class=\"visualization-row\"\r\n style=\"margin: 25px; height: 20px; width: 380px\"\r\n >\r\n <input\r\n ref=\"playbackRateInput\"\r\n v-model=\"playbackRateValue\"\r\n type=\"range\"\r\n step=\"0.25\"\r\n max=\"3\"\r\n min=\"1\"\r\n style=\"height: 30px; width: 300px\"\r\n />\r\n <span\r\n style=\"padding-left: 20px; padding-right: 20px; font-size: 16px\"\r\n >{{ playbackRate + 'x' }}</span\r\n >\r\n </div>\r\n <div class=\"visualization-divider\" style=\"margin-top: 40px\" />\r\n <div\r\n class=\"visualization-row\"\r\n style=\"\r\n display: flex;\r\n justify-content: center;\r\n margin-top: 10px;\r\n margin-bottom: 10px;\r\n \"\r\n >\r\n <button\r\n @click=\"$emit('close', 'playbackRate')\"\r\n style=\"\r\n border-radius: 4px;\r\n height: 35px;\r\n width: 70px;\r\n background-color: var(--visualization-primary);\r\n border-color: var(--visualization-primary);\r\n color: white;\r\n \"\r\n >\r\n Ok\r\n </button>\r\n </div>\r\n </dialog>\r\n </div>\r\n</template>\r\n<script>\r\nimport GridImages from '../assets/grid/index.js'\r\n\r\nexport default {\r\n props: {\r\n dialogsVisibility: {\r\n type: Object,\r\n required: false,\r\n },\r\n playbackRate: {\r\n type: Number,\r\n required: true,\r\n },\r\n secondsPerFrame: {\r\n type: Number,\r\n required: true,\r\n },\r\n framesPerRow: {\r\n type: Number,\r\n required: true,\r\n },\r\n numberOfRows: {\r\n type: Number,\r\n required: true,\r\n },\r\n },\r\n data() {\r\n return {\r\n openBlocksDialog: false,\r\n time: '',\r\n rangeBlocks: {\r\n ini: null,\r\n end: null,\r\n date: null,\r\n },\r\n items: [\r\n { text: '2x1', value: 1, image: GridImages['2x1'] },\r\n { text: '3x1', value: 2, image: GridImages['3x1'] },\r\n { text: '3x2', value: 3, image: GridImages['3x2'] },\r\n { text: '4x1', value: 4, image: GridImages['4x1'] },\r\n { text: '4x2', value: 5, image: GridImages['4x2'] },\r\n { text: '5x1', value: 6, image: GridImages['5x1'] },\r\n { text: '5x2', value: 7, image: GridImages['5x2'] },\r\n { text: '6x1', value: 8, image: GridImages['6x1'] },\r\n { text: '6x2', value: 9, image: GridImages['6x2'] },\r\n ],\r\n\r\n // NEW\r\n goToValue: '',\r\n }\r\n },\r\n mounted() {\r\n this.toogleDialogs()\r\n },\r\n computed: {\r\n secondsPerFrameValue: {\r\n get() {\r\n return this.secondsPerFrame\r\n },\r\n set(val) {\r\n this.$emit('change-seconds-per-frame', parseInt(val))\r\n },\r\n },\r\n playbackRateValue: {\r\n get() {\r\n return this.playbackRate\r\n },\r\n set(val) {\r\n this.$emit('change-playback-rate', parseFloat(val))\r\n },\r\n },\r\n framesValue: {\r\n get() {\r\n return this.items.find(\r\n (item) => item.text === `${this.framesPerRow}x${this.numberOfRows}`\r\n ).value\r\n },\r\n set(value) {\r\n this.$emit('set-frames-selection', value)\r\n },\r\n },\r\n timeRules() {\r\n return [\r\n (time) =>\r\n (time >= '02:30:00' && time <= '26:29:59') ||\r\n this.$i18n.t('form.mustBeBetween'),\r\n ]\r\n },\r\n },\r\n methods: {\r\n toogleDialogs() {\r\n for (const dialog of Object.values(this.$refs)) {\r\n dialog.close?.()\r\n }\r\n\r\n const openDialog = Object.keys(this.dialogsVisibility).find(\r\n (key) => this.dialogsVisibility[key]\r\n )\r\n\r\n if (openDialog) {\r\n this.$refs[openDialog].showModal()\r\n }\r\n },\r\n prevFormat() {\r\n if (this.items.find((format) => format.value === this.framesValue - 1)) {\r\n this.framesValue--\r\n }\r\n },\r\n nextFormat() {\r\n if (this.items.find((format) => format.value === this.framesValue + 1)) {\r\n this.framesValue++\r\n }\r\n },\r\n changePlaybackRate(direction = 1) {\r\n if (direction === 1) {\r\n this.$refs.playbackRateInput.stepUp()\r\n } else if (direction === -1) {\r\n this.$refs.playbackRateInput.stepDown()\r\n }\r\n this.playbackRateValue = this.$refs.playbackRateInput.value\r\n },\r\n closeBlocksDialog() {\r\n Object.entries(this.rangeBlocks).forEach(([key, value]) => {\r\n if (!value || key == 'date') return\r\n var res = value.replace(/\\D/g, '')\r\n if (res.length < 6) {\r\n for (let i = res.length; i < 6; i++) {\r\n res += '0'\r\n }\r\n }\r\n res.match(/.{1,2}/g)\r\n let a = res.substring(0, 2)\r\n let b = res.substring(2, 4)\r\n let c = res.substring(4, 6)\r\n this.rangeBlocks[key] = a + ':' + b + ':' + c\r\n })\r\n\r\n this.openBlocksDialog = false\r\n this.$emit('goToBlockInterval', this.rangeBlocks)\r\n },\r\n },\r\n watch: {\r\n dialogsVisibility: {\r\n handler() {\r\n this.toogleDialogs()\r\n },\r\n deep: true,\r\n },\r\n },\r\n}\r\n</script>\r\n<style scoped>\r\ndialog {\r\n max-width: 60vw;\r\n /* padding: 12px; */\r\n border: none;\r\n background: white;\r\n border-radius: 6px;\r\n box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14),\r\n 0 1px 5px 0 rgba(0, 0, 0, 0.12);\r\n position: fixed;\r\n top: 50%;\r\n left: 50%;\r\n transform: translateY(-50%) translateX(-50%);\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-124.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Settings.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-124.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Settings.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Settings.vue?vue&type=template&id=9f47e4d0&scoped=true&\"\nimport script from \"./Settings.vue?vue&type=script&lang=js&\"\nexport * from \"./Settings.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Settings.vue?vue&type=style&index=0&id=9f47e4d0&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9f47e4d0\",\n null\n \n)\n\nexport default component.exports","<template>\n <div\n class=\"visualization-row\"\n id=\"visualization-container\"\n @click=\"framesClicked\"\n >\n <GlobalEvents\n v-if=\"active && canInsertTime && settingsClosed\"\n @keydown.45=\"insertTime\"\n @keydown.46=\"insertTime\"\n />\n <GlobalEvents\n v-if=\"active && settingsClosed\"\n @keydown.left.prevent=\"arrowLeft\"\n @keydown.right.prevent=\"arrowRight\"\n @keydown.shift.page-down.prevent=\"nextLoopActivate\"\n @keydown.page-down.prevent=\"next\"\n @keydown.page-up.prevent=\"prev\"\n @keydown.shift.page-up.prevent=\"prevLoopActivate\"\n @keydown.83.prevent=\"setHourIni\"\n @keydown.69.prevent=\"setHourEnd\"\n @keydown.36.prevent=\"goToFirstFrame\"\n @keydown.35.prevent=\"goToLastFrame\"\n @keydown.71.prevent=\"dialogs.goTo = true\"\n @keydown.73.prevent=\"dialogs.secondsPerFrame = true\"\n @keydown.76.prevent=\"dialogs.frames = true\"\n @keydown.49.97=\"() => (secondsPerFrame = 1)\"\n @keydown.50.98=\"() => (secondsPerFrame = 2)\"\n @keydown.51.99=\"() => (secondsPerFrame = 3)\"\n @keydown.52.100=\"() => (secondsPerFrame = 4)\"\n @keydown.53.101=\"() => (secondsPerFrame = 5)\"\n />\n <GlobalEvents\n v-if=\"prevLoop || nextLoop\"\n @keydown=\"breakLoop\"\n v-on:click=\"breakLoop\"\n />\n <settings\n v-if=\"active\"\n :dialogs-visibility=\"dialogs\"\n :playback-rate=\"playbackRate\"\n :seconds-per-frame=\"secondsPerFrame\"\n :frames-per-row=\"framesPerRow\"\n :number-of-rows=\"numberOfRows\"\n @change-playback-rate=\"(value) => (playbackRate = value)\"\n @change-go-to=\"changeHour\"\n @change-seconds-per-frame=\"(value) => (secondsPerFrame = value)\"\n @set-frames-selection=\"setFrameSelection\"\n @close=\"(dialog) => (dialogs[dialog] = false)\"\n />\n <div\n :class=\"{ 'visualization-card': true, 'active-tab': active }\"\n style=\"width: 100%; padding: 0\"\n >\n <command-bar\n v-show=\"commandBarShow\"\n :video-playing=\"videoPlaying\"\n :video-paused=\"paused\"\n :insert-time=\"canInsertTime\"\n :hour-ini-selected=\"!!hourIniSelected\"\n :hour-end-selected=\"!!hourEndSelected\"\n @prev-loop-activate=\"prevLoopActivate\"\n @next-loop-activate=\"nextLoopActivate\"\n @prev=\"prev\"\n @next=\"next\"\n @go-to=\"dialogs.goTo = true\"\n @open-frame-selection=\"dialogs.frames = true\"\n @open-frames-per-second=\"dialogs.secondsPerFrame = true\"\n @open-blocks=\"openBlocks\"\n @open-playback-rate=\"dialogs.playbackRate = true\"\n @play-or-pause=\"playOrPause\"\n @stop-playing=\"stopPlayingBar\"\n @set-hour-ini=\"setHourIni\"\n @set-hour-end=\"setHourEnd\"\n @insert-time=\"insertTime\"\n />\n <video-progress\n v-if=\"videoProgressBar\"\n v-show=\"videoPlaying\"\n :video-time=\"videoTime\"\n />\n <info-bar\n :playback-rate=\"playbackRate\"\n :seconds-per-frame=\"secondsPerFrame\"\n :commands-show=\"commandBarShow\"\n :cache=\"useCache\"\n :block-start-time=\"blockStartTime\"\n :video-total-duration=\"videoSliderTotalDuration\"\n :alternative-server=\"alternativeServer\"\n :frames-per-row=\"framesPerRow\"\n :number-of-rows=\"numberOfRows\"\n :hour-ini=\"hourIniSelected\"\n :hour-end=\"hourEndSelected\"\n @toogle-commands-visibility=\"commandBarShow = !commandBarShow\"\n @toogle-cache=\"useCache = !useCache\"\n @change-server=\"changeServerClick\"\n />\n <div\n class=\"visualization-row\"\n v-for=\"rowNumber in numberOfRows\"\n :id=\"'row-' + rowNumber\"\n :key=\"'row-' + rowNumber\"\n style=\"padding: 12px\"\n >\n <div\n v-for=\"(frame, frameNumber) in previousFrames\"\n :key=\"\n numberOfRows +\n '-' +\n framesPerRow +\n '-' +\n getIndex(rowNumber, frameNumber, Positions.previous)\n \"\n style=\"display: none\"\n >\n <span v-html=\"frame.img\" />\n </div>\n <div\n v-for=\"(frame, frameNumber) in nextFrames\"\n :key=\"\n numberOfRows +\n '-' +\n framesPerRow +\n '-' +\n getIndex(rowNumber, frameNumber, Positions.next)\n \"\n style=\"display: none\"\n >\n <span v-html=\"frame.img\" />\n </div>\n <div\n class=\"visualization-col\"\n v-for=\"(frame, frameNumber) in frames.slice(\n framesPerRow * (rowNumber - 1),\n framesPerRow * rowNumber\n )\"\n :key=\"'row-' + rowNumber + '-frame-' + frameNumber\"\n :id=\"`frame-${getIndex(rowNumber, frameNumber, Positions.current)}`\"\n :class=\"{ loaderImg: !!frame.img }\"\n @click=\"\n frame.time\n ? selectFrame(\n getIndex(rowNumber, frameNumber, Positions.current),\n frame\n )\n : null\n \"\n >\n <span :id=\"activeFrame ? 'aa' : 0\" style=\"padding-left: 4px\">\n <b>\n {{\n getAudienceTime(\n frame.time,\n rowNumber,\n frameNumber,\n Positions.current\n )\n }}\n </b>\n </span>\n\n <frame\n ref=\"frames\"\n :frame=\"frame\"\n :index=\"getIndex(rowNumber, frameNumber, Positions.current)\"\n :grid-settings=\"{ numberOfRows, framesPerRow }\"\n :initialTime=\"frame.time === hourIniSelected\"\n :endTime=\"frame.time === hourEndSelected\"\n :betweenTime=\"\n frame.time > hourIniSelected && frame.time < hourEndSelected\n \"\n :active=\"\n getIndex(rowNumber, frameNumber, Positions.current) ===\n activeFrame\n \"\n :activeTab=\"active\"\n :videoUrl=\"fInterface ? fInterface.getVideoUrl(frame) : ''\"\n @startPlaying=\"startPlaying\"\n @stopPlaying=\"stopPlaying\"\n @playPauseStatus=\"changePlayPause\"\n @updateSlider=\"updateSlider\"\n :playback-rate=\"playbackRate\"\n style=\"margin: 0 auto\"\n ></frame>\n </div>\n </div>\n </div>\n <!-- <settings\n ref=\"settings2\"\n :active=\"active\"\n @goToTime=\"changeHour\"\n @goToBlockInterval=\"changeBlockInterval\"\n @setSplitTime=\"setSplitTime\"\n @setFrameSelection=\"setFrameSelection\"\n @setPlaybackRate=\"\n (rate) => {\n playbackRate = rate\n }\n \"\n >\n </settings> -->\n <!-- <v-dialog v-model=\"dialog\" width=\"500\">\n <div class=\"card\">\n <div class=\"card\"-title class=\"text-h5 grey lighten-2\">\n {{ ' Último bloco disponível até: ' }}\n <v-btn\n @click=\"goToStartBlock\"\n class=\"ml-2\"\n dark\n color=\"success\"\n depressed\n >\n <v-icon left> fa-clock </v-icon>\n {{ timeLastBlock }}\n </v-btn>\n <v-spacer></v-spacer>\n <v-btn color=\"error\" fab small class=\"ml-5\" @click=\"dialog = false\">\n <v-icon dark> fa fa-xmark </v-icon>\n </v-btn>\n </div-title>\n </div>\n </v-dialog>\n <Help :media=\"media\" @close=\"media = null\" />\n <v-dialog\n v-if=\"userMultiTabsGrid\"\n v-model=\"userMultiTabsGridsModel\"\n persistent\n width=\"60%\"\n >\n <div class=\"card\">\n <div class=\"card\"-title class=\"warning text-h5\" primary-title>\n <div class=\"row\" class=\"ma-0\" justify=\"center\" align=\"center\">\n <v-icon dark left style=\"font-size: 24px !important\">\n fa fa-exclamation-triangle\n </v-icon>\n <div style=\"color: white\">{{ $t('form.alert') }}</div>\n </div>\n </div-title>\n <div class=\"card\"-text class=\"justify-center pa-6 grey lighten-2\">\n <h3>\n {{ $t('alerts.userMultiTabsGrid') }}\n </h3>\n </div-text>\n <hr class=\"divider\" class=\"grey lighten-1\"></span>\n <div class=\"card\"-actions class=\"grey lighten-2 justify-center\">\n <v-btn color=\"error\" ml-5 @click=\"userMultiTabsGrid = false\">\n <v-icon left color=\"white\">fa fa-times</v-icon>\n {{ $t('form.close') }}\n </v-btn>\n </div-actions>\n </div>\n </v-dialog> -->\n </div>\n</template>\n<script>\nimport Frame from './components/Frame.vue'\nimport FramesInterface from './utils/FramesInterface.js'\nimport FramesService from './services/FramesService.js'\n\nimport Commands from './components/Commands.vue'\nimport Infos from './components/Infos.vue'\nimport VideoProgress from './components/VideoProgress.vue'\nimport Settings from './components/Settings.vue'\n\nconst Positions = Object.freeze({\n previous: 0,\n current: 1,\n next: 2,\n})\n\nexport default {\n name: 'visualization-container',\n props: {\n value: {\n type: Boolean,\n required: true,\n },\n date: {\n type: String,\n required: true,\n },\n channel: {\n type: Number,\n required: true,\n },\n startAudienceTime: {\n type: String,\n required: true,\n },\n videoProgressBar: {\n type: Boolean,\n default: false,\n },\n jumpOnInsert: {\n type: Boolean,\n default: false,\n },\n framesFormat: {\n type: [Number, String],\n default: 6,\n },\n maxSize: {\n type: Number,\n }\n },\n components: {\n Frame,\n CommandBar: Commands,\n InfoBar: Infos,\n VideoProgress,\n Settings,\n // Help,\n },\n data() {\n return {\n Positions,\n updatingChannel: null,\n dialog: false,\n timeLastBlock: null,\n alternativeServer: false,\n useCache: true,\n numberOfRows: 1,\n framesPerRow: 5,\n secondsPerFrame: 1,\n fInterface: null,\n velocity: 1,\n frames: [],\n previousFrames: [],\n nextFrames: [],\n channelCode: 0,\n videoPlaying: false,\n activeFrame: null,\n activeVideo: null,\n videoTime: 0,\n videoTotalTime: null,\n progressVideoDrag: false,\n hourIniSelected: false,\n hourEndSelected: false,\n canInsertTime: false,\n lastHeight: 0,\n loopInterval: null,\n nextLoop: false,\n prevLoop: false,\n videoSliderTotalDuration: 900,\n blockStartTime: null,\n media: null,\n changeServer: false,\n userMultiTabsGrid: false,\n userMultiTabsGridsModel: true,\n playbackRate: 1,\n paused: false,\n commandBarShow: true,\n dialogs: {\n playbackRate: false,\n goTo: false,\n secondsPerFrame: false,\n frames: false,\n },\n }\n },\n async created() {\n this.changeServer = this.serverOfFrames === 'alternative'\n this.alternativeServer = this.serverOfFrames === 'alternative'\n\n const settings = [\n {\n framesPerRow: 2,\n numberOfRows: 1,\n },\n {\n framesPerRow: 3,\n numberOfRows: 1,\n },\n {\n framesPerRow: 3,\n numberOfRows: 2,\n },\n {\n framesPerRow: 4,\n numberOfRows: 1,\n },\n {\n framesPerRow: 4,\n numberOfRows: 2,\n },\n {\n framesPerRow: 5,\n numberOfRows: 1,\n },\n {\n framesPerRow: 5,\n numberOfRows: 2,\n },\n {\n framesPerRow: 6,\n numberOfRows: 1,\n },\n {\n framesPerRow: 6,\n numberOfRows: 2,\n },\n ]\n\n const storedOnDb = settings[parseInt(this.framesFormat) - 1]\n this.framesPerRow = storedOnDb.framesPerRow\n this.numberOfRows = storedOnDb.numberOfRows\n\n await this.createFramesInterface()\n if (this.maxSize) {\n this.resize(this.maxSize, true)\n }\n },\n methods: {\n framesClicked(e) {\n if (e.target.id != 'insert') {\n this.active = true\n }\n },\n async goToStartBlock() {\n try {\n const d = new Date()\n let timestamp = Date.UTC(\n d.getFullYear(),\n d.getMonth(),\n d.getDate(),\n d.getHours(),\n d.getMinutes(),\n d.getSeconds()\n )\n\n const response = (\n await FramesService.getNextAvailableBlock({\n channel: this.channel,\n time: timestamp / 1000,\n })\n ).data\n\n this.dialog = false\n this.changeHour(this.convertToAudienceTime(response.data.start, ':'))\n } catch (err) {\n console.error(err)\n }\n },\n async checkAvailableBlock() {\n try {\n const d = new Date()\n let timestamp = Date.UTC(\n d.getFullYear(),\n d.getMonth(),\n d.getDate(),\n d.getHours(),\n d.getMinutes(),\n d.getSeconds()\n )\n\n const response = (\n await FramesService.getNextAvailableBlock({\n channel: this.channel,\n time: timestamp / 1000,\n })\n ).data\n\n this.timeLastBlock = this.convertToAudienceTime(response.data.end, ':')\n this.dialog = true\n if (!response.status) {\n this.timeLastBlock = 'N/D'\n }\n } catch (err) {\n console.error(err)\n }\n },\n updateSlider(videoStartTime, time) {\n // * atualizar slider se estiver fora do range definido previamente\n if (\n time < this.blockStartTime ||\n time > this.blockStartTime ||\n videoStartTime > this.blockStartTime + this.videoSliderTotalDuration\n ) {\n this.blockStartTime = videoStartTime\n this.videoSliderTotalDuration = 900\n }\n },\n nextLoopActivate() {\n this.breakLoop()\n this.loopInterval = setInterval(this.next, 40)\n setTimeout(() => {\n this.nextLoop = true\n }, 0)\n },\n prevLoopActivate() {\n this.breakLoop()\n this.loopInterval = setInterval(this.prev, 40)\n setTimeout(() => {\n this.prevLoop = true\n }, 0)\n },\n breakLoop() {\n clearInterval(this.loopInterval)\n this.loopInterval = null\n this.nextLoop = false\n this.prevLoop = false\n },\n changePlayPause(status) {\n this.paused = !status\n },\n resize(height=this.lastHeight) {\n this.lastHeight = height\n if (this.$refs.frames) {\n for (let frame of this.$refs.frames) {\n frame.resize(height)\n }\n }\n this.$emit('resized')\n },\n async goToFirstFrame() {\n let frames = this.$refs.frames\n\n let audienceTime = null\n if (frames.length > 0) {\n let frame = frames[0].frame\n audienceTime = this.getAudienceTime(frame.time, 0, 0, 0)\n }\n // if (audienceTime) {\n // this.changeHour(this.getLastFirtsBlockTime(audienceTime, true))\n // }\n if (audienceTime) {\n const [hours, minutes, seconds] = audienceTime.split(':')\n const totalSeconds =\n parseInt(hours) * 3600 + parseInt(minutes) * 60 + parseInt(seconds)\n if (totalSeconds >= 9000)\n this.changeHour(this.getLastFirtsBlockTime(audienceTime, true))\n else this.changeHour(this.getLastFirtsBlockTime('02:30:00', true))\n }\n },\n async goToLastFrame() {\n let frames = this.$refs.frames\n let audienceTime = null\n if (frames.length > 0) {\n let frame = frames[0].frame\n\n audienceTime = this.getAudienceTime(frame.time, 0, 0, 0)\n }\n if (audienceTime) {\n this.changeHour(this.getLastFirtsBlockTime(audienceTime))\n }\n },\n getLastFirtsBlockTime(time, first = false) {\n if (time.indexOf(':') !== -1) {\n time = time.replace(/:/g, '')\n }\n let h, m, newTime\n const t = time.match(/.{1,2}/g)\n if (t[0] && t[1]) {\n h = parseInt(t[0])\n m = parseInt(t[1])\n }\n if (h < 26) {\n if (m < 15)\n if (first) newTime = t[0] + ':00:00'\n else newTime = t[0] + ':14:59'\n else if (m < 30)\n if (first) newTime = t[0] + ':15:00'\n else newTime = t[0] + ':29:59'\n else if (m < 45)\n if (first) newTime = t[0] + ':30:00'\n else newTime = t[0] + ':44:59'\n else if (first) newTime = t[0] + ':45:00'\n else newTime = t[0] + ':59:59'\n } else {\n if (m < 15)\n if (first) newTime = '26:00:00'\n else newTime = '26:14:59'\n else {\n if (first) newTime = '26:15:00'\n else newTime = '26:29:59'\n }\n }\n return newTime\n },\n openBlocks() {\n this.$refs.settings2?.openBlocks()\n },\n playOrPause() {\n const array = this.$refs.frames.filter((fc) => !!fc.active)\n if (array.length === 1) {\n const frame = array[0]\n frame.playOrPause(this.playbackRate)\n }\n },\n stopPlayingBar() {\n for (let ref of this.$refs.frames) {\n if (\n ref.videoStatus === ref.Status.playing ||\n ref.videoStatus === ref.Status.paused\n ) {\n ref.stop(false)\n }\n }\n },\n async setFrameSelection(selected) {\n this.frames = this.loadingArray\n switch (parseInt(selected)) {\n // 2x1\n case 1:\n this.framesPerRow = 2\n this.numberOfRows = 1\n break\n // 3x1\n case 2:\n this.framesPerRow = 3\n this.numberOfRows = 1\n break\n // 3x2\n case 3:\n this.framesPerRow = 3\n this.numberOfRows = 2\n break\n // 4x1\n case 4:\n this.framesPerRow = 4\n this.numberOfRows = 1\n break\n // 4x2\n case 5:\n this.framesPerRow = 4\n this.numberOfRows = 2\n break\n // 5x1\n case 6:\n this.framesPerRow = 5\n this.numberOfRows = 1\n break\n // 5x2\n case 7:\n this.framesPerRow = 5\n this.numberOfRows = 2\n break\n // 6x1\n case 8:\n this.framesPerRow = 6\n this.numberOfRows = 1\n break\n // 6x2\n case 9:\n this.framesPerRow = 6\n this.numberOfRows = 2\n break\n }\n await this.fInterface.changeSize(this.numberOfRows, this.framesPerRow)\n this.getFramesArray()\n setTimeout(() => {\n for (let ref of this.$refs.frames) {\n ref?.resize(this.lastHeight)\n }\n }, 150)\n },\n getFramesArray() {\n this.frames = this.fInterface.getFrames(Positions.current)\n this.nextFrames = this.fInterface.getFrames(Positions.next)\n this.previousFrames = this.fInterface.getFrames(Positions.previous)\n },\n async createFramesInterface() {\n this.frames = this.loadingArray\n let ch = this.channel\n let associationTMP = {\n 1735073: 1,\n 1735074: 139,\n 1735075: 3,\n 1735076: 132,\n }\n //\n this.channelCode = associationTMP[ch] ? associationTMP[ch] : ch\n\n const t = this.startAudienceTime.match(/.{1,2}/g)\n const d = this.getDateParts()\n const time = Date.UTC(d.year, d.month, d.day, t[0], t[1], t[2]) / 1000\n // * iniciar slider\n this.blockStartTime = time\n this.fInterface = await new FramesInterface(\n this.channelCode,\n this.numberOfRows,\n this.framesPerRow,\n time,\n this.startAudienceTime,\n this.useCache\n )\n await this.fInterface.init()\n\n this.getFramesArray()\n\n this.activeFrame = this.getIndex(1, 0, Positions.current)\n\n this.activeVideo = null\n },\n getIndex(rowNumber, frameIndex, position) {\n let from = this.framesPerRow * this.numberOfRows * position\n let till = this.framesPerRow * this.numberOfRows * (position + 1)\n\n return (from + till * (rowNumber - 1)) / rowNumber + frameIndex\n },\n getAudienceTime(frameTime, rowNumber, frameNumber, position) {\n if (!frameTime) {\n return 'Loading...'\n } else if (\n this.getIndex(rowNumber, frameNumber, position) === this.activeVideo\n ) {\n return this.convertToAudienceTime(this.videoTime)\n } else {\n return this.convertToAudienceTime(frameTime)\n }\n },\n dateInUtc(miliSeconds) {\n var date = new Date(miliSeconds)\n var utc = new Date(\n date.getUTCFullYear(),\n date.getUTCMonth(),\n date.getUTCDate(),\n date.getUTCHours(),\n date.getUTCMinutes(),\n date.getUTCSeconds()\n )\n return utc\n },\n convertToAudienceTime(time, separator = ':') {\n const d = this.getDateParts()\n const limit = Date.UTC(d.year, d.month, d.day, 23, 59, 59) / 1000\n\n let hour = this.dateInUtc(time * 1000)\n .toTimeString()\n .split(' ')[0]\n .split(':')\n .map(Number)\n\n if (time > limit && time <= limit + this.startAudienceSeconds) {\n hour[0] = 24 + hour[0]\n }\n return hour\n .map((part) => (part > 9 ? part.toString() : '0' + part))\n .join(separator)\n },\n getDateParts(date = this.date) {\n const d = new Date(date)\n return {\n year: d.getFullYear(),\n month: d.getMonth(),\n day: d.getDate(),\n }\n },\n selectFrame(index, frame) {\n const d = this.getDateParts()\n const limit = Date.UTC(d.year, d.month, d.day, 23, 59, 59) / 1000\n const frameTime = frame?.time\n\n if (frameTime - (this.startAudienceSeconds + limit) <= 0) {\n if (this.hourIniSelected === true) {\n this.hourIniSelected = frameTime\n\n if (\n this.hourEndSelected &&\n this.hourIniSelected > this.hourEndSelected\n ) {\n this.hourEndSelected = false\n }\n } else if (this.hourEndSelected === true) {\n if (frameTime > this.hourIniSelected) {\n this.hourEndSelected = frameTime\n this.canInsertTime = true\n } else {\n this.hourEndSelected = false\n }\n }\n }\n\n if (this.activeFrame !== index) {\n // ? Se clicar no frame diferente de onde está a dar play, faz pausa\n const array = this.$refs.frames.filter(\n (fc) => fc.videoStatus === fc.Status.playing\n )\n if (array.length === 1) {\n const frame = array[0]\n frame.playOrPause()\n }\n this.activeVideo = null\n this.activeFrame = index\n }\n },\n setHourIni() {\n this.canInsertTime = true\n this.hourIniSelected = true\n document.getElementById(`frame-${this.activeFrame}`).click()\n this.$emit('setHourIni', {\n hour_ini: this.hourIniSelected\n ? this.convertToAudienceTime(this.hourIniSelected, '')\n : null,\n })\n },\n setHourEnd() {\n this.canInsertTime = true\n this.hourEndSelected = true\n document.getElementById(`frame-${this.activeFrame}`).click()\n },\n //* Navegação\n arrowRight() {\n if (this.checkLimitRight(false)) {\n if (\n this.activeFrame ===\n this.numberOfRows * this.framesPerRow * 2 - 1\n ) {\n this.next()\n } else {\n this.activeFrame++\n }\n }\n },\n arrowLeft() {\n if (this.checkLimitLeft(false)) {\n if (this.activeFrame === this.numberOfRows * this.framesPerRow) {\n this.prev()\n } else {\n this.activeFrame--\n }\n }\n },\n checkLimitRight(value) {\n const d = this.getDateParts()\n const high = Date.UTC(d.year, d.month, d.day, 26, 29, 59)\n\n if (value) {\n return (\n high > (this.fInterface.getCurrentTime() - 1) * 1000 &&\n this.nextFrames[0].title !== -1\n )\n } else {\n // return high > (this.fInterface.getCurrentTime() + this.activeFrame) * 1000\n return high > this.fInterface.getCurrentTime() * 1000\n }\n },\n checkLimitLeft(value) {\n const d = this.getDateParts()\n const low = Date.UTC(d.year, d.month, d.day, 2, 30, 0)\n\n if (value) {\n return low <= (this.fInterface.getCurrentTime() - 1) * 1000\n } else {\n return (\n low <\n (this.fInterface.getCurrentTime() +\n this.activeFrame -\n this.numberOfRows * this.framesPerRow) *\n 1000\n )\n }\n },\n async next() {\n if (this.checkLimitRight(true)) {\n const array = this.$refs.frames.filter(\n (fc) =>\n fc.videoStatus === fc.Status.playing ||\n fc.videoStatus === fc.Status.paused\n )\n\n if (array.length === 1) {\n const frame = array[0]\n frame.stop(false)\n }\n this.fInterface.setCurrentStep(this.secondsPerFrame)\n await this.fInterface.loadNextFrames()\n\n this.activeFrame = this.getIndex(1, 0, Positions.current)\n this.activeVideo = null\n\n this.getFramesArray()\n }\n },\n async prev() {\n if (this.checkLimitLeft(true)) {\n const array = this.$refs.frames.filter(\n (fc) =>\n fc.videoStatus === fc.Status.playing ||\n fc.videoStatus === fc.Status.paused\n )\n if (array.length === 1) {\n const frame = array[0]\n frame.stop(false)\n }\n\n this.fInterface.setCurrentStep(this.secondsPerFrame)\n await this.fInterface.loadPrevFrames()\n\n this.activeFrame = this.getIndex(\n this.numberOfRows,\n this.framesPerRow - 1,\n Positions.current\n )\n this.activeVideo = null\n\n this.getFramesArray()\n }\n },\n async setStartTime(time) {\n if (time.indexOf(':') !== -1) {\n time = time.replace(/:/g, '')\n }\n const t = time.match(/.{1,2}/g)\n const d = this.getDateParts()\n const setTime = Date.UTC(d.year, d.month, d.day, t[0], t[1], t[2]) / 1000\n this.frames = this.loadingArray\n\n await this.fInterface.changeTime(setTime)\n\n this.getFramesArray()\n\n this.activeFrame = this.getIndex(1, 0, Positions.current)\n // let frames = this.$refs.frames\n\n // let audienceTime = null\n // if (frames.length > 0) {\n // let frame = frames[0].frame\n // audienceTime = this.getAudienceTime(frame.time, 0, 0, 0)\n // }\n\n this.activeVideo = null\n\n return true\n },\n hourToTimeStamp(time) {\n if (time.indexOf(':') !== -1) {\n time = time.replace(/:/g, '')\n }\n const t = time.match(/.{1,2}/g)\n const d = this.getDateParts()\n const setTime = Date.UTC(d.year, d.month, d.day, t[0], t[1], t[2]) / 1000\n\n return setTime\n },\n async changeHour(value) {\n if (value) {\n setTimeout(() => {\n const array = this.$refs.frames.filter(\n (fc) =>\n fc.videoStatus === fc.Status.playing ||\n fc.videoStatus === fc.Status.paused\n )\n\n if (array.length === 1) {\n const frame = array[0]\n frame.stop(false)\n }\n\n this.setStartTime(value, true)\n }, 0)\n }\n },\n changeBlockInterval(value) {\n this.changeHour(value.ini)\n let time_ini, time_end\n time_ini = this.hourToTimeStamp(value.ini)\n time_end = this.hourToTimeStamp(value.end)\n this.videoSliderTotalDuration = time_end - time_ini\n this.$refs.frames[0].changeSettings(time_ini)\n this.blockStartTime = time_ini\n },\n //eslint-disable-next-line\n async updateVideoTime(index, videoTime) {\n this.activeVideo = index\n this.videoTime = videoTime\n },\n //eslint-disable-next-line\n updateVideoStatus(currentTime) {\n if (!this.progressVideoDrag) {\n // ESTA FUNÇÃO PASSOU PARA DENTRO DOS COMMANDS\n // this.updateProgress(null, currentTime)\n }\n },\n async startPlaying(frame, totalTime) {\n const array = this.$refs.frames.filter(\n (fc) => fc.frame.time !== frame.time\n )\n\n for (let ref of array) {\n if (\n ref.videoStatus === ref.Status.playing ||\n ref.videoStatus === ref.Status.paused\n ) {\n ref.stop(false)\n }\n }\n\n this.videoTotalTime = totalTime\n this.videoPlaying = true\n },\n stopPlaying() {\n this.videoTotalTime = null\n this.videoPlaying = false\n this.paused = false\n },\n insertTime() {\n this.$emit('timeToInsert', {\n channel: this.channel,\n hour_ini: this.hourIniSelected\n ? this.convertToAudienceTime(this.hourIniSelected, '')\n : null,\n hour_end: this.hourEndSelected\n ? this.convertToAudienceTime(this.hourEndSelected, '')\n : null,\n force: false,\n })\n\n if (this.jumpOnInsert) {\n this.changeHour(\n this.convertToAudienceTime(\n (this.hourEndSelected || this.hourIniSelected) + 1\n )\n )\n }\n\n this.hourIniSelected = null\n this.hourEndSelected = null\n this.canInsertTime = false\n\n // this.fInterface.setCurrentPosition(this.hourEndSelected)\n },\n insertTimeForce() {\n this.$emit('timeToInsert', {\n channel: this.channel,\n hour_ini: this.hourIniSelected\n ? this.convertToAudienceTime(this.hourIniSelected, '')\n : null,\n hour_end: this.hourEndSelected\n ? this.convertToAudienceTime(this.hourEndSelected, '')\n : null,\n force: true,\n })\n\n this.hourIniSelected = null\n this.hourEndSelected = null\n this.canInsertTime = false\n\n // this.fInterface.setCurrentPosition(this.hourEndSelected)\n },\n async getChannelMedia() {\n // this.media = (await ChannelService.show(this.channel)).data.MEDIA\n },\n async changeServerClick() {\n this.changeServer = !this.changeServer\n // this.$store.dispatch(\n // 'serverOfFrames',\n // this.changeServer ? 'alternative' : 'default'\n // )\n sessionStorage.setItem(\n 'serverOfFrames',\n this.changeServer ? 'alternative' : 'default'\n )\n\n // if (this.$route.params.time != this.frames[0].time)\n // this.$router.push({\n // name: 'grid',\n // params: {\n // date: this.date,\n // channel: this.channelCode,\n // time: this.frames[0].time,\n // },\n // })\n location.reload()\n },\n },\n computed: {\n active: {\n get() {\n return this.value\n },\n set(value) {\n this.$emit('input', value)\n },\n },\n settingsClosed() {\n return !Object.values(this.dialogs).find((v) => v)\n },\n startAudienceSeconds() {\n const t = this.startAudienceTime.match(/.{1,2}/g)\n return parseInt(t[0] * 3600 + t[1] * 60 + t[2])\n },\n loadingArray() {\n return Array.from(Array(this.numberOfRows * this.framesPerRow).keys())\n },\n serverOfFrames() {\n return sessionStorage.getItem('server')\n },\n },\n watch: {\n framesFormat(value) {\n this.setFrameSelection(value)\n },\n active() {\n // ? sempre que trocamos de tabs dar reset as horas selected\n this.hourIniSelected = false\n this.hourEndSelected = false\n },\n useCache() {\n this.createFramesInterface()\n },\n hourIniSelected(value) {\n if (value) {\n sessionStorage.setItem(\n 'currentTimeFrames',\n this.convertToAudienceTime(this.hourIniSelected, '')\n )\n } else {\n sessionStorage.removeItem('currentTimeFrames')\n }\n },\n activeFrame(value) {\n if (value) {\n this.stopPlayingBar()\n }\n },\n channel() {\n this.updatingChannel = new Promise((resolve, reject) => {\n try {\n this.createFramesInterface()\n resolve(true)\n } catch (err) {\n reject(err)\n }\n })\n },\n },\n}\n</script>\n<style scoped>\n@import url('./assets/theme.css');\n</style>\n","import mod from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-124.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Visualization.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-124.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Visualization.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Visualization.vue?vue&type=template&id=38edcc3f&scoped=true&\"\nimport script from \"./Visualization.vue?vue&type=script&lang=js&\"\nexport * from \"./Visualization.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Visualization.vue?vue&type=style&index=0&id=38edcc3f&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"38edcc3f\",\n null\n \n)\n\nexport default component.exports"],"names":["render","_vm","this","_c","_self","staticClass","attrs","on","framesClicked","active","canInsertTime","settingsClosed","$event","type","indexOf","keyCode","insertTime","apply","arguments","_e","_k","key","button","preventDefault","arrowLeft","arrowRight","undefined","shiftKey","nextLoopActivate","next","prev","prevLoopActivate","setHourIni","setHourEnd","goToFirstFrame","goToLastFrame","dialogs","goTo","secondsPerFrame","frames","prevLoop","nextLoop","breakLoop","playbackRate","framesPerRow","numberOfRows","value","changeHour","setFrameSelection","dialog","class","staticStyle","directives","name","rawName","commandBarShow","expression","videoPlaying","paused","hourIniSelected","hourEndSelected","openBlocks","playOrPause","stopPlayingBar","videoProgressBar","videoTime","useCache","blockStartTime","videoSliderTotalDuration","alternativeServer","changeServerClick","_l","rowNumber","previousFrames","frame","frameNumber","getIndex","Positions","previous","domProps","_s","img","nextFrames","slice","loaderImg","current","time","selectFrame","activeFrame","_v","getAudienceTime","ref","refInFor","fInterface","getVideoUrl","startPlaying","stopPlaying","changePlayPause","updateSlider","staticRenderFns","initialTime","endTime","betweenTime","style","maxHeight","width","position","activeTab","parentComponent","stop","toogleDetailFrame","jumpFrameToStart","showFrame","image","title","loading","videoIsLoading","$","videoStatus","Status","stopped","height","maxWidth","color","videoUrlString","updateTimeLabel","videoEnded","Object","freeze","playing","components","VueLoading","props","Number","required","index","Boolean","default","gridSettings","videoUrl","String","Promise","data","aspectRatio","fullMaxWidth","videoStartTime","videoCurrentTime","currentBlock","lastTimeEnterPressed","created","$parent","watch","val","$refs","videoPlayer","methods","currentTime","Date","getTime","convertToAudienceTime","changeSettings","imageDetailsDialog","close","showModal","getMaxWidth","commandBarSize","document","getElementById","clientWidth","resize","infoBarSize","heightAvailable","offsetHeight","blockInfo","getVideoStartTime","start","getVideoRequestByUrl","url","number","error","console","log","$nextTick","onloadedmetadata","e","$emit","target","duration","play","pause","jump","length","parseInt","videoJumpTo","videoJumpToTimeStamp","end","getBlockInfo","getVideoUrlForTime","updateVideoTime","updateVideoStatus","getNextVideoStartTime","component","Api","axios","create","baseURL","sessionStorage","getItem","interceptors","request","use","config","params","Client","BlockPathConfig","getBlockRequest","direction","channel","split","quality","factor","signal","get","Channel","Split","UseCache","Time","Step","JpegQuality","JpegSizeFactor","getSmallBlockRequest","size","Size","getFileInfoRequest","step","getNextAvailableBlock","MinBlockSizes","MinBlockSizesBack","Direction","Next","Previous","Self","LowestQuality","LowQuality","MediumQuality","HighQuality","HighestQuality","ResponseStatus","Ok","UnknownError","VideoBlockNotFound","InvalidRequest","ClientNotAllowed","AuthenticationProblem","StepsQuality","SizeQuality","StepsFactor","SmallBlockSize","FramesManager","startAudienceTime","firstFrameTime","buffer","requests","currentStep","currentPosition","smallBlockSizeFactor","startCheckingQualityStep","startCheckingQualitySize","numberOfSmallBlocksCheck","prototype","async","cancelAllPendingRequests","frameIndex","findFrameIndexByTime","getSmallBlock","add","requestId","AbortController","response","FramesService","ENUM","status","getBlock","message","images","lastFrameTime","timestampToTimeString","orderFramesBlock","err","checkMinBlock","substituition","checkMinBlockSize","checkFramesBackward","checkFramesForward","bufferFistTime","bufferLastTime","beforeImages","filter","afterImages","findIndex","abort","timestamp","toISOString","substring","replace","getPrevImages","getBufferSlice","getCurrentImages","getNextImages","f","i","newPosition","getFileInfo","getNextFileInfo","server","getServerUrlWithParams","FramesInterface","init","framesManager","loadFrames","initLight","changeTime","constructImagesComponent","loadNextFrames","loadPrevFrames","array","Semaphor","createElement","src","require","contain","push","resolve","addEventListener","outerHTML","all","getFrames","positions","Array","from","keys","getCurrentTime","block","setCurrentStep","changeSize","url_path","t","commandBarBtns","btn","condition","text","fnc","id","icon","videoPaused","$i18n","commandsShow","$t","seconds","hourEnd","hourIni","hour_ini","hour_end","time1","time2","blockTotalTime","cache","videoTotalDuration","computed","separator","d","getDateParts","limit","UTC","year","month","day","hour","dateInUtc","toTimeString","map","startAudienceSeconds","part","toString","join","date","getFullYear","getMonth","getDate","miliSeconds","utc","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","progressMouseDown","progressVideoDrag","fc","updateProgress","window","progressMouseUp","progressMouseMove","removeEventListener","percentage","element","elementBar","getElementsByClassName","timeInSeconds","sliderStartTime","rect","getBoundingClientRect","max","Math","round","pos","pageX","left","targetInSeconds","timeStampToJump","dialogsVisibility","prevFormat","nextFormat","items","item","framesValue","click","secondsPerFrameValue","goToValue","composing","changePlaybackRate","playbackRateValue","one_one","two_one","three_one","three_two","four_one","four_two","five_one","five_two","six_one","six_two","openBlocksDialog","rangeBlocks","ini","GridImages","mounted","toogleDialogs","set","parseFloat","find","timeRules","values","openDialog","format","playbackRateInput","stepUp","stepDown","closeBlocksDialog","entries","forEach","_ref","res","match","a","b","c","handler","deep","jumpOnInsert","framesFormat","maxSize","Frame","CommandBar","Commands","InfoBar","Infos","VideoProgress","Settings","updatingChannel","timeLastBlock","velocity","channelCode","activeVideo","videoTotalTime","lastHeight","loopInterval","media","changeServer","userMultiTabsGrid","userMultiTabsGridsModel","serverOfFrames","settings","storedOnDb","createFramesInterface","goToStartBlock","getHours","getMinutes","getSeconds","checkAvailableBlock","setInterval","setTimeout","clearInterval","audienceTime","hours","minutes","totalSeconds","getLastFirtsBlockTime","h","m","newTime","first","settings2","selected","loadingArray","getFramesArray","ch","associationTMP","till","frameTime","checkLimitRight","checkLimitLeft","high","low","setStartTime","setTime","hourToTimeStamp","changeBlockInterval","time_ini","time_end","totalTime","force","insertTimeForce","getChannelMedia","setItem","location","reload","v","removeItem","reject"],"sourceRoot":""}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|