@twab/visualization 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@twab/visualization",
3
- "version": "0.1.0",
4
- "main": "lib/visualization.umd.js",
3
+ "version": "0.1.2",
4
+ "main": "dist/visualization.umd.js",
5
5
  "files": [
6
- "lib"
6
+ "dist"
7
7
  ],
8
8
  "scripts": {
9
- "serve": "vue-cli-service serve",
10
- "build": "bili src/index.js"
9
+ "serve": "vue-cli-service serve example/main.js",
10
+ "build": "vue-cli-service build --target lib --name visualization src/index.js"
11
11
  },
12
12
  "dependencies": {
13
13
  "@fortawesome/fontawesome-svg-core": "^6.4.2",
@@ -36,6 +36,11 @@
36
36
  "vue-template-compiler": "^2.6.14",
37
37
  "rollup-plugin-vue": "^4.6.1"
38
38
  },
39
+ "babel": {
40
+ "presets": [
41
+ "@babel/preset-env"
42
+ ]
43
+ },
39
44
  "eslintConfig": {
40
45
  "root": true,
41
46
  "env": {
@@ -48,7 +53,9 @@
48
53
  "parserOptions": {
49
54
  "parser": "@babel/eslint-parser"
50
55
  },
51
- "rules": {}
56
+ "rules": {
57
+ "vue/multi-word-component-names": "off"
58
+ }
52
59
  },
53
60
  "browserslist": [
54
61
  "> 1%",
@@ -1,6 +0,0 @@
1
- /*!
2
- * visualization v0.1.0
3
- * (c)
4
- */
5
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("@/components/Frame"),require("@/utils/FramesInterface.js"),require("@/services/FramesService.js"),require("v-tooltip"),require("@fortawesome/vue-fontawesome"),require("@/misc/colorVariation.js"),require("@/assets/icons")):"function"==typeof define&&define.amd?define(["@/components/Frame","@/utils/FramesInterface.js","@/services/FramesService.js","v-tooltip","@fortawesome/vue-fontawesome","@/misc/colorVariation.js","@/assets/icons"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).visualization=t(e.Frame,e.FramesInterface,e.FramesService,e.VTooltip,e.vueFontawesome,e.colorVariation,e.registerIcons)}(this,(function(e,t,r,i,n,a,s){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=o(e),l=o(t),d=o(r),u=o(i),m=o(a),h=o(s);function f(e,t,r){return r?t?t(e):e:(e&&e.then||(e=Promise.resolve(e)),t?e.then(t):e)}const v=Object.freeze({previous:0,current:1,next:2});function p(e){return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];try{return Promise.resolve(e.apply(this,t))}catch(e){return Promise.reject(e)}}}function g(e,t){try{var r=e()}catch(e){return t(e)}return r&&r.then?r.then(void 0,t):r}function y(){}function S(e){if(e&&e.then)return e.then(y)}function T(e){var t=e();if(t&&t.then)return t.then(y)}var w={name:"visualization-container",props:{date:{type:String,required:!0},channel:{type:Number,required:!0},active:{type:Boolean,required:!0},activeTab:{type:Boolean},startAudienceTime:{type:String,required:!0}},components:{Frame:c.default},data(){return{Positions:v,updatingChannel:null,dialog:!1,timeLastBlock:null,commandBarShow:!0,commandBarBtns:[{fnc:this.prevLoopActivate,icon:"fa-backward",text:"Fast Backward",id:"Fast Backward"},{fnc:this.prev,icon:"fa-step-backward",text:"Step Backward",id:"Step Backward"},{fnc:this.goTo,icon:"fa-clock",text:"Definir Hora",id:"Definir Hora"},{fnc:this.next,icon:"fa-step-forward",text:"Step Forward",id:"Step Forward"},{fnc:this.nextLoopActivate,icon:"fa-forward",text:"Fast Forward",id:"Fast Forward"},{fnc:this.playOrPause,icon:()=>this.videoPlaying&&!this.paused?"fa-pause":"fa-play",text:()=>this.videoPlaying&&!this.paused?"Pause":"Play",id:"playOrPause"},{fnc:this.stopPlayingBar,icon:"fa-stop",text:"Stop",id:"Stop"},null,{fnc:this.openFrameSelection,icon:"fa-border-all",text:"Linha de Imagens",id:"Linha de Imagens"},{fnc:this.openSplit,icon:"fa-sliders-h",text:"Frequência de Imagens",id:"Frequência de Imagens"},{fnc:this.openBlocks,icon:"fa-cut",text:"Escolher intervalo de blocos",id:"Escolher intervalo de blocos"},{fnc:this.insertTimeForce,icon:"fa-arrow-turn-down",text:"Recuperar Notícia",id:"Recuperar Notícia",condition:()=>this.canInsertTime},null,{fnc:this.setHourIni,icon:"fa-hourglass-start",text:"Hora Inicial",id:"Hora Inicial",color:()=>this.hourIniSelected?"success":"primary"},{fnc:this.insertTime,icon:"fa-arrow-circle-down",text:"Inserir",id:"insert",condition:()=>this.canInsertTime},{fnc:this.setHourEnd,icon:"fa-hourglass-end",text:"Hora Final",id:"Hora Final",color:()=>this.hourEndSelected?"error":"primary"},{fnc:this.checkAvailableBlock,icon:"fa-video",text:"Próximo bloco disponível",id:"Próximo bloco disponível",color:()=>"primary"}],alternativeServer:!1,useCache:!0,numberOfRows:1,framesPerRow:5,secondsPerFrame:1,fInterface:null,velocity:1,frames:[],previousFrames:[],nextFrames:[],channelCode:0,videoPlaying:!1,activeFrame:null,activeVideo:null,videoTime:null,videoTotalTime:null,progressVideoDrag:!1,hourIniSelected:!1,hourEndSelected:!1,canInsertTime:!1,lastHeight:0,loopInterval:null,nextLoop:!1,prevLoop:!1,videoSliderTotalDuration:900,sliderStartTime:null,media:null,changeServer:!1,userMultiTabsGrid:!1,userMultiTabsGridsModel:!0,playbackRate:1}},created:p((function(){const e=this;return e.changeServer="alternative"===e.serverOfFrames,e.alternativeServer="alternative"===e.serverOfFrames,f(e.createFramesInterface(),(function(){e.resize(500)}))})),methods:{framesClicked(e){"insert"!=e.target.id&&this.$emit("click")},openPlaybackRate(){var e;null===(e=this.$refs.settings2)||void 0===e||e.openPlaybackRate(this.playbackRate)},goToStartBlock:p((function(){const e=this;return S(g((function(){const t=new Date;let r=Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds());return f(d.default.getNextAvailableBlock({channel:e.channel,time:r/1e3}),(function(t){const r=t.data;e.dialog=!1,e.changeHour(e.convertToAudienceTime(r.data.start,":"))}))}),(function(e){console.error(e)})))})),checkAvailableBlock:p((function(){const e=this;return S(g((function(){const t=new Date;let r=Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds());return f(d.default.getNextAvailableBlock({channel:e.channel,time:r/1e3}),(function(t){const r=t.data;e.timeLastBlock=e.convertToAudienceTime(r.data.end,":"),e.dialog=!0,r.status||(e.timeLastBlock="N/D")}))}),(function(e){console.error(e)})))})),updateSlider(e,t){(t<this.sliderStartTime||t>this.sliderStartTime||e>this.sliderStartTime+this.videoSliderTotalDuration)&&(this.sliderStartTime=e,this.videoSliderTotalDuration=900)},nextLoopActivate(){this.breakLoop(),this.loopInterval=setInterval(this.next,40),setTimeout(()=>{this.nextLoop=!0},0)},prevLoopActivate(){this.breakLoop(),this.loopInterval=setInterval(this.prev,40),setTimeout(()=>{this.prevLoop=!0},0)},breakLoop(){clearInterval(this.loopInterval),this.loopInterval=null,this.nextLoop=!1,this.prevLoop=!1},changePlayPause(e){this.paused=!e},resize(e){if(this.lastHeight=e,this.$refs.frames)for(let t of this.$refs.frames)t.resize(e)},goTo(){var e;null===(e=this.$refs.settings2)||void 0===e||e.openGoTo()},goToFirstFrame:p((function(){const e=this;let t=e.$refs.frames,r=null;if(t.length>0){let i=t[0].frame;r=e.getAudienceTime(i.time,0,0,0)}if(r){const[t,i,n]=r.split(":");3600*parseInt(t)+60*parseInt(i)+parseInt(n)>=9e3?e.changeHour(e.getLastFirtsBlockTime(r,!0)):e.changeHour(e.getLastFirtsBlockTime("02:30:00",!0))}return f()})),goToLastFrame:p((function(){const e=this;let t=e.$refs.frames,r=null;if(t.length>0){let i=t[0].frame;r=e.getAudienceTime(i.time,0,0,0)}return r&&e.changeHour(e.getLastFirtsBlockTime(r)),f()})),getLastFirtsBlockTime(e){let t,r,i,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];-1!==e.indexOf(":")&&(e=e.replace(/:/g,""));const a=e.match(/.{1,2}/g);return a[0]&&a[1]&&(t=parseInt(a[0]),r=parseInt(a[1])),i=t<26?r<15?n?a[0]+":00:00":a[0]+":14:59":r<30?n?a[0]+":15:00":a[0]+":29:59":r<45?n?a[0]+":30:00":a[0]+":44:59":n?a[0]+":45:00":a[0]+":59:59":r<15?n?"26:00:00":"26:14:59":n?"26:15:00":"26:29:59",i},openSplit(){var e;null===(e=this.$refs.settings2)||void 0===e||e.openSplit1()},openBlocks(){var e;null===(e=this.$refs.settings2)||void 0===e||e.openBlocks()},openFrameSelection(){var e;null===(e=this.$refs.settings2)||void 0===e||e.openFrameSelection()},playOrPause(){const e=this.$refs.frames.filter(e=>!!e.active);if(1===e.length){e[0].playOrPause(this.playbackRate)}},stopPlayingBar(){for(let e of this.$refs.frames)e.videoStatus!==e.Status.playing&&e.videoStatus!==e.Status.paused||e.stop(!1)},setFrameSelection:p((function(e){const t=this;switch(t.frames=t.loadingArray,parseInt(e)){case 1:t.framesPerRow=2,t.numberOfRows=1;break;case 2:t.framesPerRow=3,t.numberOfRows=1;break;case 3:t.framesPerRow=3,t.numberOfRows=2;break;case 4:t.framesPerRow=4,t.numberOfRows=1;break;case 5:t.framesPerRow=4,t.numberOfRows=2;break;case 6:t.framesPerRow=5,t.numberOfRows=1;break;case 7:t.framesPerRow=5,t.numberOfRows=2;break;case 8:t.framesPerRow=6,t.numberOfRows=1;break;case 9:t.framesPerRow=6,t.numberOfRows=2}return f(t.fInterface.changeSize(t.numberOfRows,t.framesPerRow),(function(){t.getFramesArray(),setTimeout(()=>{for(let e of t.$refs.frames)null==e||e.resize(t.lastHeight)},150)}))})),getFramesArray(){this.frames=this.fInterface.getFrames(v.current),this.nextFrames=this.fInterface.getFrames(v.next),this.previousFrames=this.fInterface.getFrames(v.previous)},createFramesInterface:p((function(){const e=this;e.frames=e.loadingArray;let t=e.channel,r={1735073:1,1735074:139,1735075:3,1735076:132};e.channelCode=r[t]?r[t]:t;const i=e.startAudienceTime.match(/.{1,2}/g),n=e.getDateParts(),a=Date.UTC(n.year,n.month,n.day,i[0],i[1],i[2])/1e3;return e.sliderStartTime=a,f(new l.default(e.channelCode,e.numberOfRows,e.framesPerRow,a,e.startAudienceTime,e.useCache),(function(t){return e.fInterface=t,f(e.fInterface.init(),(function(){e.getFramesArray(),e.activeFrame=e.getIndex(1,0,v.current),e.activeVideo=null}))}))})),getIndex(e,t,r){return(this.framesPerRow*this.numberOfRows*r+this.framesPerRow*this.numberOfRows*(r+1)*(e-1))/e+t},getAudienceTime(e,t,r,i){return e?this.getIndex(t,r,i)===this.activeVideo?this.convertToAudienceTime(this.videoTime):this.convertToAudienceTime(e):"Loading..."},dateInUtc(e){var t=new Date(e);return new Date(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),t.getUTCHours(),t.getUTCMinutes(),t.getUTCSeconds())},convertToAudienceTime(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:":";const r=this.getDateParts(),i=Date.UTC(r.year,r.month,r.day,23,59,59)/1e3;let n=this.dateInUtc(1e3*e).toTimeString().split(" ")[0].split(":").map(Number);return e>i&&e<=i+this.startAudienceSeconds&&(n[0]=24+n[0]),n.map(e=>e>9?e.toString():"0"+e).join(t)},getDateParts(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.date;const t=new Date(e);return{year:t.getFullYear(),month:t.getMonth(),day:t.getDate()}},selectFrame(e,t){const r=this.getDateParts(),i=Date.UTC(r.year,r.month,r.day,23,59,59)/1e3,n=null==t?void 0:t.time;if(n-(this.startAudienceSeconds+i)<=0&&(!0===this.hourIniSelected?(this.hourIniSelected=n,this.hourEndSelected&&this.hourIniSelected>this.hourEndSelected&&(this.hourEndSelected=!1)):!0===this.hourEndSelected&&(n>this.hourIniSelected?(this.hourEndSelected=n,this.canInsertTime=!0):this.hourEndSelected=!1)),this.activeFrame!==e){const t=this.$refs.frames.filter(e=>e.videoStatus===e.Status.playing);if(1===t.length){t[0].playOrPause()}this.activeVideo=null,this.activeFrame=e}},setHourIni(){this.canInsertTime=!0,this.hourIniSelected=!0,document.getElementById("frame-"+this.activeFrame).click(),this.$emit("setHourIni",{hour_ini:this.hourIniSelected?this.convertToAudienceTime(this.hourIniSelected,""):null})},setHourEnd(){this.canInsertTime=!0,this.hourEndSelected=!0,document.getElementById("frame-"+this.activeFrame).click()},arrowRight(){this.checkLimitRight(!1)&&(this.activeFrame===this.numberOfRows*this.framesPerRow*2-1?this.next():this.activeFrame++)},arrowLeft(){this.checkLimitLeft(!1)&&(this.activeFrame===this.numberOfRows*this.framesPerRow?this.prev():this.activeFrame--)},checkLimitRight(e){const t=this.getDateParts(),r=Date.UTC(t.year,t.month,t.day,26,29,59);return e?r>1e3*(this.fInterface.getCurrentTime()-1)&&-1!==this.nextFrames[0].title:r>1e3*this.fInterface.getCurrentTime()},checkLimitLeft(e){const t=this.getDateParts(),r=Date.UTC(t.year,t.month,t.day,2,30,0);return e?r<=1e3*(this.fInterface.getCurrentTime()-1):r<1e3*(this.fInterface.getCurrentTime()+this.activeFrame-this.numberOfRows*this.framesPerRow)},next:p((function(){const e=this;return T((function(){if(e.checkLimitRight(!0)){const t=e.$refs.frames.filter(e=>e.videoStatus===e.Status.playing||e.videoStatus===e.Status.paused);if(1===t.length){t[0].stop(!1)}return e.fInterface.setCurrentStep(e.secondsPerFrame),f(e.fInterface.loadNextFrames(),(function(){e.activeFrame=e.getIndex(1,0,v.current),e.activeVideo=null,e.getFramesArray()}))}}))})),prev:p((function(){const e=this;return T((function(){if(e.checkLimitLeft(!0)){const t=e.$refs.frames.filter(e=>e.videoStatus===e.Status.playing||e.videoStatus===e.Status.paused);if(1===t.length){t[0].stop(!1)}return e.fInterface.setCurrentStep(e.secondsPerFrame),f(e.fInterface.loadPrevFrames(),(function(){e.activeFrame=e.getIndex(e.numberOfRows,e.framesPerRow-1,v.current),e.activeVideo=null,e.getFramesArray()}))}}))})),setStartTime:p((function(e){const t=this;-1!==e.indexOf(":")&&(e=e.replace(/:/g,""));const r=e.match(/.{1,2}/g),i=t.getDateParts(),n=Date.UTC(i.year,i.month,i.day,r[0],r[1],r[2])/1e3;return t.frames=t.loadingArray,f(t.fInterface.changeTime(n),(function(){return t.getFramesArray(),t.activeFrame=t.getIndex(1,0,v.current),t.activeVideo=null,!0}))})),hourToTimeStamp(e){-1!==e.indexOf(":")&&(e=e.replace(/:/g,""));const t=e.match(/.{1,2}/g),r=this.getDateParts();return Date.UTC(r.year,r.month,r.day,t[0],t[1],t[2])/1e3},changeHour:p((function(e){const t=this;return setTimeout(()=>{const r=t.$refs.frames.filter(e=>e.videoStatus===e.Status.playing||e.videoStatus===e.Status.paused);if(1===r.length){r[0].stop(!1)}t.setStartTime(e,!0)},0),f()})),changeBlockInterval(e){let t,r;this.changeHour(e.ini),t=this.hourToTimeStamp(e.ini),r=this.hourToTimeStamp(e.end),this.videoSliderTotalDuration=r-t,this.$refs.frames[0].changeSettings(t),this.sliderStartTime=t},setSplitTime:p((function(e){return this.secondsPerFrame=e,f()})),updateVideoTime:p((function(e,t){return this.activeVideo=e,this.videoTime=t,f()})),updateVideoStatus(e){this.progressVideoDrag||this.updateProgress(null,e)},progressMouseDown(e){this.progressVideoDrag=!0;const t=this.$refs.frames.filter(e=>e.videoStatus===e.Status.playing);if(1===t.length){t[0].playOrPause()}this.updateProgress(e),window.addEventListener("mouseup",this.progressMouseUp),window.addEventListener("mousemove",this.progressMouseMove)},progressMouseUp(e){if(this.progressVideoDrag){const t=this.$refs.frames.filter(e=>e.videoStatus===e.Status.paused);if(1===t.length){t[0].playOrPause()}this.updateProgress(e)}window.removeEventListener("mouseup",this.progressMouseUp),window.removeEventListener("mousemove",this.progressMouseMove),this.progressVideoDrag=!1},progressMouseMove(e){this.progressVideoDrag&&this.updateProgress(e)},updateProgress(e,t){let r;const i=document.getElementById("progress"),n=i.getElementsByClassName("progressBar")[0];let a=this.$refs.frames.filter(e=>e.videoStatus===e.Status.playing||e.videoStatus===e.Status.paused),s=1===a.length?a[0]:null;if(t&&s){r=(s.videoCurrentTime-this.sliderStartTime)/this.videoSliderTotalDuration*100}else if(e){const t=i.getBoundingClientRect(),n=Math.round(t.width),a=e.pageX-Math.round(t.left);if(r=a/n*100<=100?a/n*100:100,s){let e=this.videoSliderTotalDuration*(r/100),t=parseInt(this.sliderStartTime+e);s.videoJumpToTimeStamp(t)}}else r=0;n.style.width=r+"%"},startPlaying:p((function(e,t){const r=this.$refs.frames.filter(t=>t.frame.time!==e.time);for(let e of r)e.videoStatus!==e.Status.playing&&e.videoStatus!==e.Status.paused||e.stop(!1);return this.videoTotalTime=t,this.videoPlaying=!0,f()})),stopPlaying(){this.videoTotalTime=null,this.videoPlaying=!1,this.paused=!1},insertTime(){this.$emit("timeToInsert",{channel:this.channel,hour_ini:this.hourIniSelected?this.convertToAudienceTime(this.hourIniSelected,""):null,hour_end:this.hourEndSelected?this.convertToAudienceTime(this.hourEndSelected,""):null,force:!1}),this.hourIniSelected=null,this.hourEndSelected=null,this.canInsertTime=!1},insertTimeForce(){this.$emit("timeToInsert",{channel:this.channel,hour_ini:this.hourIniSelected?this.convertToAudienceTime(this.hourIniSelected,""):null,hour_end:this.hourEndSelected?this.convertToAudienceTime(this.hourEndSelected,""):null,force:!0}),this.hourIniSelected=null,this.hourEndSelected=null,this.canInsertTime=!1},getChannelMedia:function(){return f()},changeServerClick:p((function(){return this.changeServer=!this.changeServer,sessionStorage.setItem("serverOfFrames",this.changeServer?"alternative":"default"),location.reload(),f()}))},computed:{startAudienceSeconds(){const e=this.startAudienceTime.match(/.{1,2}/g);return parseInt(3600*e[0]+60*e[1]+e[2])},user(){return this.$store.state.user},sliderTotalTime(){return this.videoSliderTotalDuration+this.sliderStartTime},loadingArray(){return Array.from(Array(this.numberOfRows*this.framesPerRow).keys())},serverOfFrames:()=>sessionStorage.getItem("server")},watch:{activeTab(){this.hourIniSelected=!1,this.hourEndSelected=!1},useCache(){this.createFramesInterface()},hourIniSelected(e){e?sessionStorage.setItem("currentTimeFrames",this.convertToAudienceTime(this.hourIniSelected,"")):sessionStorage.removeItem("currentTimeFrames")},activeFrame(e){e&&this.stopPlayingBar()},channel(){this.updatingChannel=new Promise((e,t)=>{try{this.createFramesInterface(),e(!0)}catch(e){t(e)}})}}};var b=function(e,t,r,i,n,a,s,o,c,l){"boolean"!=typeof s&&(c=o,o=s,s=!1);var d,u="function"==typeof r?r.options:r;if(e&&e.render&&(u.render=e.render,u.staticRenderFns=e.staticRenderFns,u._compiled=!0,n&&(u.functional=!0)),i&&(u._scopeId=i),a?(d=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),t&&t.call(this,c(e)),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=d):t&&(d=s?function(){t.call(this,l(this.$root.$options.shadowRoot))}:function(e){t.call(this,o(e))}),d)if(u.functional){var m=u.render;u.render=function(e,t){return d.call(t),m(e,t)}}else{var h=u.beforeCreate;u.beforeCreate=h?[].concat(h,d):[d]}return r},x="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());var I=document.head||document.getElementsByTagName("head")[0],k={};var _=b({render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{staticClass:"row",attrs:{id:"visualization-container"},on:{click:e.framesClicked}},[e.active?r("GlobalEvents",{on:{keydown:[function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:(t.preventDefault(),e.arrowLeft.apply(null,arguments))},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"right",39,t.key,["Right","ArrowRight"])||"button"in t&&2!==t.button?null:(t.preventDefault(),e.arrowRight.apply(null,arguments))},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"page-down",void 0,t.key,void 0)?null:(t.preventDefault(),e.next.apply(null,arguments))},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"page-up",void 0,t.key,void 0)?null:(t.preventDefault(),e.prev.apply(null,arguments))},function(t){return t.type.indexOf("key")||83===t.keyCode?(t.preventDefault(),e.setHourIni.apply(null,arguments)):null},function(t){return t.type.indexOf("key")||69===t.keyCode?(t.preventDefault(),e.setHourEnd.apply(null,arguments)):null},function(t){return t.type.indexOf("key")||36===t.keyCode?(t.preventDefault(),e.goToFirstFrame.apply(null,arguments)):null},function(t){return t.type.indexOf("key")||35===t.keyCode?(t.preventDefault(),e.goToLastFrame.apply(null,arguments)):null}]}}):e._e(),e._v(" "),e.prevLoop||e.nextLoop?r("GlobalEvents",{on:{keydown:e.breakLoop,click:e.breakLoop}}):e._e(),e._v(" "),r("div",{class:{card:!0,"active-tab":e.active},staticStyle:{width:"100%"}},[r("div",{staticClass:"col pa-0",attrs:{id:"command-bar"}},[e.commandBarShow?r("div",{staticClass:"row justify-center"},e._l(e.commandBarBtns,(function(t,i){return r("div",{key:"command-btn-"+i},[t?e._e():r("hr",{staticClass:"divider mx-1 vertical"}),e._v(" "),!t||t.condition&&!t.condition()?e._e():r("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:t.text&&"function"==typeof t.text?t.text():t.text,expression:"\n btn.text && typeof btn.text === 'function'\n ? btn.text()\n : btn.text\n "}],staticClass:"command-bar-btn",on:{click:t.fnc}},[r("font-awesome-icon",{attrs:{id:t.id,icon:"fa-solid "+(t.icon&&"function"==typeof t.icon?t.icon():t.icon)}})],1)])})),0):e._e(),e._v(" "),r("hr",{directives:[{name:"show",rawName:"v-show",value:e.videoPlaying,expression:"videoPlaying"}],staticClass:"divider"}),e._v(" "),r("div",{directives:[{name:"show",rawName:"v-show",value:e.videoPlaying,expression:"videoPlaying"}],staticClass:"row",attrs:{id:"progress"},on:{mousedown:e.progressMouseDown}},[r("span",{staticClass:"progressLabel"},[e._v("\n "+e._s(e.convertToAudienceTime(e.videoTime))+"\n ")]),e._v(" "),r("span",{staticClass:"progressBar"})]),e._v(" "),r("hr",{staticClass:"divider"}),e._v(" "),r("div",{staticClass:"row info-bar pa-1 justify-center align-center"},[r("font-awesome-icon",{staticStyle:{"margin-right":"2px"},attrs:{icon:"fa-solid fa-tachometer-alt"}}),e._v(" "),r("span",{on:{click:e.openPlaybackRate}},[e._v(" "+e._s(e.playbackRate)+"x ")]),e._v(" "),r("hr",{staticClass:"divider mx-2 vertical"}),e._v(" "),r("span",[e._v("\n "+e._s(e.$t("infoBar.selected",{seconds:0,hour_ini:"",hour_end:""}))+"\n ")]),e._v(" "),r("hr",{staticClass:"divider mx-2 vertical"}),e._v(" "),r("span",[e._v("\n "+e._s(e.$t("infoBar.interval",{seconds:e.secondsPerFrame}))+"\n ")]),e._v(" "),r("hr",{staticClass:"divider mx-2 vertical"}),e._v(" "),r("span",[e._v("\n "+e._s(e.$t("infoBar.block",{time1:e.convertToAudienceTime(e.sliderStartTime),time2:e.convertToAudienceTime(e.sliderTotalTime)}))+"\n ")]),e._v(" "),r("hr",{staticClass:"divider mx-2 vertical"}),e._v("\n "+e._s(e.framesPerRow*e.numberOfRows)+"\n "),r("hr",{staticClass:"divider mx-2 vertical"}),e._v("\n "+e._s(e.framesPerRow+"*"+e.numberOfRows)+"\n "),r("hr",{staticClass:"divider mx-2 vertical"}),e._v(" "),r("font-awesome-icon",{attrs:{icon:"fa-solid fa-info-circle"},on:{click:function(t){return e.getChannelMedia()}}}),e._v(" "),e.alternativeServer||!e.useCache?r("span",{staticClass:"divider mx-2 vertical"}):e._e(),e._v(" "),e.alternativeServer?r("span",[r("v-icon",{attrs:{color:"error",small:"",left:""}},[e._v("fa-exclamation-triangle")]),e._v(" "),r("strong",[e._v(e._s(e.$t("infoBar.alternativeServer")))])],1):e._e(),e._v(" "),e.alternativeServer&&!e.useCache?r("span",{staticClass:"divider mx-2 vertical"}):e._e(),e._v(" "),e.useCache?e._e():r("span",[r("v-icon",{attrs:{color:"warning",small:"",left:""}},[e._v("fa-exclamation-circle")]),e._v(" "),r("strong",[e._v("Não está a usar cache")])],1),e._v(" "),r("div",{staticClass:"settings-container"},[r("font-awesome-icon",{directives:[{name:"tooltip",rawName:"v-tooltip",value:(e.alternativeServer,e.$t("infoBar.changeServer")),expression:"\n alternativeServer\n ? $t('infoBar.changeServer')\n : $t('infoBar.changeServer')\n "}],attrs:{icon:"fa-solid fa-server"},on:{click:e.changeServerClick}}),e._v(" "),r("font-awesome-icon",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.commandBarShow?"Ocultar botões":"Mostrar botões",expression:"commandBarShow ? 'Ocultar botões' : 'Mostrar botões'"}],attrs:{icon:e.commandBarShow?"fa-solid fa-eye":"fa-solid fa-eye-slash"},on:{click:function(t){e.commandBarShow=!e.commandBarShow}}}),e._v(" "),r("font-awesome-icon",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.useCache?"Desativar Cache":"Ativar Cache",expression:"useCache ? 'Desativar Cache' : 'Ativar Cache'"}],attrs:{icon:e.useCache?"fa-solid fa-ban":"fa-solid fa-sync"},on:{click:function(t){e.useCache=!e.useCache}}})],1)],1)]),e._v(" "),r("div",{staticClass:"col pa-1"},e._l(e.numberOfRows,(function(t){return r("div",{key:"row-"+t,staticClass:"row",attrs:{id:"row-"+t}},[e._l(e.previousFrames,(function(i,n){return r("div",{key:e.numberOfRows+"-"+e.framesPerRow+"-"+e.getIndex(t,n,e.Positions.previous),staticStyle:{display:"none"}},[r("span",{domProps:{innerHTML:e._s(i.img)}})])})),e._v(" "),e._l(e.nextFrames,(function(i,n){return r("div",{key:e.numberOfRows+"-"+e.framesPerRow+"-"+e.getIndex(t,n,e.Positions.next),staticStyle:{display:"none"}},[r("span",{domProps:{innerHTML:e._s(i.img)}})])})),e._v(" "),e._l(e.frames.slice(e.framesPerRow*(t-1),e.framesPerRow*t),(function(i,n){return r("div",{key:"row-"+t+"-frame-"+n,staticClass:"col",class:{loaderImg:!!i.img},attrs:{id:"frame-"+e.getIndex(t,n,e.Positions.current)},on:{click:function(r){i.time&&e.selectFrame(e.getIndex(t,n,e.Positions.current),i)}}},[r("span",{staticClass:"pl-1",attrs:{id:e.activeFrame?"aa":0}},[r("b",[e._v("\n "+e._s(e.getAudienceTime(i.time,t,n,e.Positions.current))+"\n ")])]),e._v(" "),r("frame",{ref:"frames",refInFor:!0,staticStyle:{margin:"0 auto"},attrs:{frame:i,index:e.getIndex(t,n,e.Positions.current),"grid-settings":{numberOfRows:e.numberOfRows,framesPerRow:e.framesPerRow},initialTime:i.time===e.hourIniSelected,endTime:i.time===e.hourEndSelected,betweenTime:i.time>e.hourIniSelected&&i.time<e.hourEndSelected,active:e.getIndex(t,n,e.Positions.current)===e.activeFrame,activeTab:e.active,videoUrl:e.fInterface?e.fInterface.getVideoUrl(i):"","playback-rate":e.playbackRate},on:{startPlaying:e.startPlaying,stopPlaying:e.stopPlaying,playPauseStatus:e.changePlayPause,updateSlider:e.updateSlider}})],1)}))],2)})),0)])],1)},staticRenderFns:[]},(function(e){e&&e("data-v-487736cc_0",{source:"#vis-container[data-v-487736cc]{max-width:100%!important;margin:0 auto!important;border-left:1px solid var(--visualization-primary);height:100%;border-bottom:none}#vis-container>.v-card[data-v-487736cc]{border-radius:0!important;font-size:12px;width:100%;box-shadow:none;height:100%}.active-tab[data-v-487736cc]{border-left:8px solid var(--visualization-primary)!important;border-image-slice:1}#command-bar[data-v-487736cc]{background-color:#f5f5f5;box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);padding:0!important}[id^=frame-][data-v-487736cc]{padding:1px;display:flex;flex-flow:column}#progress[data-v-487736cc]{position:relative;cursor:pointer;width:80%;height:15px;background-color:#dfdfdf;margin:5px auto;border-radius:6px}.progressBar[data-v-487736cc]{display:absolute;height:15px;position:absolute;top:0;left:0;background-color:var(--visualization-secondary);z-index:2;width:50%;border-radius:inherit}.progressBar[data-v-487736cc]::after{content:'';width:17px;height:17px;position:absolute;top:-1px;right:-8.5px;border-radius:50%;background-color:var(--visualization-primary);z-index:3}.progressLabel[data-v-487736cc]{z-index:4;margin:0 auto;font-weight:700;line-height:17px;font-size:14px;text-shadow:-1px 0 #dfdfdf,0 1px #dfdfdf,1px 0 #dfdfdf,0 -1px #dfdfdf;user-select:none}",map:void 0,media:void 0})}),w,"data-v-487736cc",!1,void 0,(function(e){return function(e,t){return function(e,t){var r=x?t.media||"default":e,i=k[r]||(k[r]={ids:new Set,styles:[]});if(!i.ids.has(e)){i.ids.add(e);var n=t.source;if(t.map&&(n+="\n/*# sourceURL="+t.map.sources[0]+" */",n+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t.map))))+" */"),i.element||(i.element=document.createElement("style"),i.element.type="text/css",t.media&&i.element.setAttribute("media",t.media),I.appendChild(i.element)),"styleSheet"in i.element)i.styles.push(n),i.element.styleSheet.cssText=i.styles.filter(Boolean).join("\n");else{var a=i.ids.size-1,s=document.createTextNode(n),o=i.element.childNodes;o[a]&&i.element.removeChild(o[a]),o.length?i.element.insertBefore(s,o[a]):i.element.appendChild(s)}}}(e,t)}}),void 0);return{install(e){var t;let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!r.client||!r.base_url||null===(t=r.theme)||void 0===t||!t.primary)return void console.error("Visualization: Missing required settings");if(this.installed)return;this.installed=!0,e.use(u.default),h.default(),e.component("font-awesome-icon",n.FontAwesomeIcon),sessionStorage.setItem("server","principal"),sessionStorage.setItem("client",r.client),sessionStorage.setItem("base_url",r.base_url);const i=document.getElementsByTagName("head")[0],a=document.createElement("style"),s={primary:r.theme.primary,secondary:m.default(r.theme.primary),start:r.theme.start||"#4caf50",end:r.theme.end||"#ff5252"};let o=[];for(const e in s)o.push(`--visualization-${e}: ${s[e]};`);o=[":root {",...o,"}"].join(" "),a.innerHTML=o,i.appendChild(a),e.component("Visualization",_)}}}));
6
- //# sourceMappingURL=visualization.umd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"visualization.umd.js","sources":["../src/Visualization.vue","../node_modules/vue-runtime-helpers/dist/normalize-component.js","../node_modules/vue-runtime-helpers/dist/inject-style/browser.js","../src/index.js"],"sourcesContent":["<template>\n <div class=\"row\" id=\"visualization-container\" @click=\"framesClicked\">\n <GlobalEvents\n v-if=\"active\"\n @keydown.left.prevent=\"arrowLeft\"\n @keydown.right.prevent=\"arrowRight\"\n @keydown.page-down.prevent=\"next\"\n @keydown.page-up.prevent=\"prev\"\n @keydown.83.prevent=\"setHourIni\"\n @keydown.69.prevent=\"setHourEnd\"\n @keydown.36.prevent=\"goToFirstFrame\"\n @keydown.35.prevent=\"goToLastFrame\"\n />\n <!-- <GlobalEvents\n v-if=\"active\"\n @keydown.71.prevent=\"goTo\"\n @keydown.73.prevent=\"openSplit\"\n @keydown.76.prevent=\"openFrameSelection\"\n />\n <GlobalEvents\n v-if=\"active && canInsertTime\"\n @keydown.45=\"insertTime\"\n @keydown.46=\"insertTime\"\n /> -->\n <GlobalEvents\n v-if=\"prevLoop || nextLoop\"\n @keydown=\"breakLoop\"\n v-on:click=\"breakLoop\"\n />\n <div :class=\"{ card: true, 'active-tab': active }\" style=\"width: 100%\">\n <div class=\"col pa-0\" id=\"command-bar\">\n <div class=\"row justify-center\" v-if=\"commandBarShow\">\n <div\n v-for=\"(btn, index) in commandBarBtns\"\n :key=\"'command-btn-' + index\"\n >\n <hr class=\"divider mx-1 vertical\" v-if=\"!btn\" />\n <button\n v-if=\"btn && (btn.condition ? btn.condition() : true)\"\n v-tooltip=\"\n btn.text && typeof btn.text === 'function'\n ? btn.text()\n : btn.text\n \"\n class=\"command-bar-btn\"\n @click=\"btn.fnc\"\n >\n <font-awesome-icon\n :id=\"btn.id\"\n :icon=\"\n 'fa-solid ' +\n (btn.icon && typeof btn.icon === 'function'\n ? btn.icon()\n : btn.icon)\n \"\n />\n </button>\n </div>\n </div>\n <hr class=\"divider\" v-show=\"videoPlaying\" />\n <div\n class=\"row\"\n id=\"progress\"\n v-show=\"videoPlaying\"\n @mousedown=\"progressMouseDown\"\n >\n <span class=\"progressLabel\">\n {{ convertToAudienceTime(videoTime) }}\n </span>\n <span class=\"progressBar\"></span>\n </div>\n <hr class=\"divider\" />\n <div class=\"row info-bar pa-1 justify-center align-center\">\n <font-awesome-icon\n icon=\"fa-solid fa-tachometer-alt\"\n style=\"margin-right: 2px\"\n />\n <span @click=\"openPlaybackRate\"> {{ playbackRate }}x </span>\n <hr class=\"divider mx-2 vertical\" />\n <span>\n {{\n $t('infoBar.selected', {\n seconds: 0,\n hour_ini: '',\n hour_end: '',\n })\n }}\n </span>\n <hr class=\"divider mx-2 vertical\" />\n <span>\n {{\n $t('infoBar.interval', {\n seconds: secondsPerFrame,\n })\n }}\n </span>\n <hr class=\"divider mx-2 vertical\" />\n <span>\n {{\n $t('infoBar.block', {\n time1: convertToAudienceTime(sliderStartTime),\n time2: convertToAudienceTime(sliderTotalTime),\n })\n }}\n </span>\n <hr class=\"divider mx-2 vertical\" />\n {{ framesPerRow * numberOfRows }}\n <hr class=\"divider mx-2 vertical\" />\n {{ framesPerRow + '*' + numberOfRows }}\n <hr class=\"divider mx-2 vertical\" />\n <font-awesome-icon\n icon=\"fa-solid fa-info-circle\"\n @click=\"getChannelMedia()\"\n />\n <span\n class=\"divider mx-2 vertical\"\n v-if=\"alternativeServer || !useCache\"\n />\n <span v-if=\"alternativeServer\">\n <v-icon color=\"error\" small left>fa-exclamation-triangle</v-icon>\n <strong>{{ $t('infoBar.alternativeServer') }}</strong>\n </span>\n <span\n class=\"divider mx-2 vertical\"\n v-if=\"alternativeServer && !useCache\"\n />\n <span v-if=\"!useCache\">\n <v-icon color=\"warning\" small left>fa-exclamation-circle</v-icon>\n <strong>Não está a usar cache</strong>\n </span>\n <div class=\"settings-container\">\n <font-awesome-icon\n icon=\"fa-solid fa-server\"\n @click=\"changeServerClick\"\n v-tooltip=\"\n alternativeServer\n ? $t('infoBar.changeServer')\n : $t('infoBar.changeServer')\n \"\n />\n <font-awesome-icon\n :icon=\"\n commandBarShow ? 'fa-solid fa-eye' : 'fa-solid fa-eye-slash'\n \"\n @click=\"commandBarShow = !commandBarShow\"\n v-tooltip=\"commandBarShow ? 'Ocultar botões' : 'Mostrar botões'\"\n />\n <font-awesome-icon\n :icon=\"useCache ? 'fa-solid fa-ban' : 'fa-solid fa-sync'\"\n @click=\"useCache = !useCache\"\n v-tooltip=\"useCache ? 'Desativar Cache' : 'Ativar Cache'\"\n />\n </div>\n </div>\n </div>\n <div class=\"col pa-1\">\n <div\n class=\"row\"\n v-for=\"rowNumber in numberOfRows\"\n :id=\"'row-' + rowNumber\"\n :key=\"'row-' + rowNumber\"\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\n <div\n class=\"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\" class=\"pl-1\">\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 </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'\nimport FramesInterface from '@/utils/FramesInterface.js'\nimport FramesService from '@/services/FramesService.js'\n\n// import Settings from '@/components/Visualization/settings'\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 date: {\n type: String,\n required: true,\n },\n channel: {\n type: Number,\n required: true,\n },\n active: {\n type: Boolean,\n required: true,\n },\n activeTab: {\n type: Boolean,\n },\n startAudienceTime: {\n type: String,\n required: true,\n },\n },\n components: {\n Frame,\n // Settings,\n // Help,\n },\n data() {\n return {\n Positions,\n updatingChannel: null,\n dialog: false,\n timeLastBlock: null,\n commandBarShow: true,\n commandBarBtns: [\n {\n fnc: this.prevLoopActivate,\n icon: 'fa-backward',\n text: 'Fast Backward',\n id: 'Fast Backward',\n },\n {\n fnc: this.prev,\n icon: 'fa-step-backward',\n text: 'Step Backward',\n id: 'Step Backward',\n },\n {\n fnc: this.goTo,\n icon: 'fa-clock',\n text: 'Definir Hora',\n id: 'Definir Hora',\n },\n {\n fnc: this.next,\n icon: 'fa-step-forward',\n text: 'Step Forward',\n id: 'Step Forward',\n },\n {\n fnc: this.nextLoopActivate,\n icon: 'fa-forward',\n text: 'Fast Forward',\n id: 'Fast Forward',\n },\n {\n fnc: this.playOrPause,\n icon: () => {\n return this.videoPlaying && !this.paused ? 'fa-pause' : 'fa-play'\n },\n text: () => {\n return this.videoPlaying && !this.paused ? 'Pause' : 'Play'\n },\n id: 'playOrPause',\n },\n {\n fnc: this.stopPlayingBar,\n icon: 'fa-stop',\n text: 'Stop',\n id: 'Stop',\n },\n null,\n {\n fnc: this.openFrameSelection,\n icon: 'fa-border-all',\n text: 'Linha de Imagens',\n id: 'Linha de Imagens',\n },\n {\n fnc: this.openSplit,\n icon: 'fa-sliders-h',\n text: 'Frequência de Imagens',\n id: 'Frequência de Imagens',\n },\n {\n fnc: this.openBlocks,\n icon: 'fa-cut',\n text: 'Escolher intervalo de blocos',\n id: 'Escolher intervalo de blocos',\n },\n {\n fnc: this.insertTimeForce,\n icon: 'fa-arrow-turn-down',\n text: 'Recuperar Notícia',\n id: 'Recuperar Notícia',\n condition: () => {\n return this.canInsertTime\n },\n },\n null,\n {\n fnc: this.setHourIni,\n icon: 'fa-hourglass-start',\n text: 'Hora Inicial',\n id: 'Hora Inicial',\n color: () => {\n return this.hourIniSelected ? 'success' : 'primary'\n },\n },\n {\n fnc: this.insertTime,\n icon: 'fa-arrow-circle-down',\n text: 'Inserir',\n id: 'insert',\n condition: () => {\n return this.canInsertTime\n },\n },\n\n {\n fnc: this.setHourEnd,\n icon: 'fa-hourglass-end',\n text: 'Hora Final',\n id: 'Hora Final',\n color: () => {\n return this.hourEndSelected ? 'error' : 'primary'\n },\n },\n {\n fnc: this.checkAvailableBlock,\n icon: 'fa-video',\n text: 'Próximo bloco disponível',\n id: 'Próximo bloco disponível',\n color: () => {\n return 'primary'\n },\n },\n ],\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: null,\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 sliderStartTime: null,\n media: null,\n changeServer: false,\n userMultiTabsGrid: false,\n userMultiTabsGridsModel: true,\n playbackRate: 1,\n }\n },\n async created() {\n this.changeServer = this.serverOfFrames === 'alternative'\n this.alternativeServer = this.serverOfFrames === 'alternative'\n\n // let preference = (await UserPreferenceService.showByRef('visualization'))\n // .data\n\n // if (preference) {\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 // const storedOnDb = settings[preference - 1]\n // this.framesPerRow = storedOnDb.framesPerRow\n // this.numberOfRows = storedOnDb.numberOfRows\n // }\n\n await this.createFramesInterface()\n this.resize(500)\n },\n methods: {\n framesClicked(e) {\n if (e.target.id != 'insert') {\n this.$emit('click')\n }\n },\n openPlaybackRate() {\n this.$refs.settings2?.openPlaybackRate(this.playbackRate)\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.sliderStartTime ||\n time > this.sliderStartTime ||\n videoStartTime > this.sliderStartTime + this.videoSliderTotalDuration\n ) {\n this.sliderStartTime = 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 //eslint-disable-next-line\n resize(height) {\n this.lastHeight = height\n if (this.$refs.frames) {\n for (let frame of this.$refs.frames) {\n frame.resize(height)\n }\n }\n },\n goTo() {\n this.$refs.settings2?.openGoTo()\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 openSplit() {\n this.$refs.settings2?.openSplit1()\n },\n openBlocks() {\n this.$refs.settings2?.openBlocks()\n },\n openFrameSelection() {\n this.$refs.settings2?.openFrameSelection()\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.sliderStartTime = 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 >\n // (this.fInterface.getCurrentTime() -\n // this.numberOfRows * this.framesPerRow * this.secondsPerFrame) *\n // 1000 && this.nextFrames[0].title !== -1\n // )\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 (\n // low <=\n // (this.fInterface.getCurrentTime() -\n // this.numberOfRows * this.framesPerRow * this.secondsPerFrame) *\n // 1000\n // )\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 //eslint-disable-next-line\n async changeHour(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 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.sliderStartTime = time_ini\n },\n async setSplitTime(value) {\n this.secondsPerFrame = value\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 this.updateProgress(null, currentTime)\n }\n },\n progressMouseDown(e) {\n this.progressVideoDrag = true\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.updateProgress(e)\n\n window.addEventListener('mouseup', this.progressMouseUp)\n window.addEventListener('mousemove', this.progressMouseMove)\n },\n progressMouseUp(e) {\n if (this.progressVideoDrag) {\n const array = this.$refs.frames.filter(\n (fc) => fc.videoStatus === fc.Status.paused\n )\n if (array.length === 1) {\n const frame = array[0]\n frame.playOrPause()\n }\n\n this.updateProgress(e)\n }\n\n window.removeEventListener('mouseup', this.progressMouseUp)\n window.removeEventListener('mousemove', this.progressMouseMove)\n this.progressVideoDrag = false\n },\n progressMouseMove(e) {\n if (this.progressVideoDrag) {\n this.updateProgress(e)\n }\n },\n updateProgress(e, time) {\n let percentage\n const element = document.getElementById('progress')\n const elementBar = element.getElementsByClassName('progressBar')[0]\n\n let frames = this.$refs.frames.filter(\n (fc) =>\n fc.videoStatus === fc.Status.playing ||\n fc.videoStatus === fc.Status.paused\n )\n let frame = frames.length === 1 ? frames[0] : null\n\n if (time && frame) {\n let timeInSeconds = frame.videoCurrentTime - this.sliderStartTime\n\n percentage = (timeInSeconds / this.videoSliderTotalDuration) * 100\n } else if (e) {\n const rect = element.getBoundingClientRect()\n const max = Math.round(rect.width)\n const pos = e.pageX - Math.round(rect.left)\n percentage = (pos / max) * 100 <= 100 ? (pos / max) * 100 : 100\n\n if (frame) {\n let targetInSeconds =\n this.videoSliderTotalDuration * (percentage / 100)\n let timeStampToJump = parseInt(this.sliderStartTime + targetInSeconds)\n frame.videoJumpToTimeStamp(timeStampToJump)\n }\n } else {\n percentage = 0\n }\n\n elementBar.style.width = `${percentage}%`\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 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 startAudienceSeconds() {\n const t = this.startAudienceTime.match(/.{1,2}/g)\n return parseInt(t[0] * 3600 + t[1] * 60 + t[2])\n },\n user() {\n return this.$store.state.user\n },\n sliderTotalTime() {\n return this.videoSliderTotalDuration + this.sliderStartTime\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 activeTab() {\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\n#vis-container {\n max-width: 100% !important;\n margin: 0 auto !important;\n border-left: 1px solid var(--visualization-primary);\n height: 100%;\n border-bottom: none;\n}\n#vis-container > .v-card {\n border-radius: 0 !important;\n font-size: 12px;\n width: 100%;\n box-shadow: none;\n height: 100%;\n}\n.active-tab {\n border-left: 8px solid var(--visualization-primary) !important;\n border-image-slice: 1;\n}\n#command-bar {\n background-color: #f5f5f5;\n box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14),\n 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n padding: 0 !important;\n}\n\n[id^='frame-'] {\n padding: 1px;\n display: flex;\n flex-flow: column;\n}\n\n#progress {\n position: relative;\n cursor: pointer;\n width: 80%;\n height: 15px;\n background-color: #dfdfdf;\n margin: 5px auto;\n border-radius: 6px;\n}\n.progressBar {\n display: absolute;\n height: 15px;\n position: absolute;\n top: 0;\n left: 0;\n background-color: var(--visualization-secondary);\n z-index: 2;\n width: 50%;\n border-radius: inherit;\n}\n.progressBar::after {\n content: '';\n width: 17px;\n height: 17px;\n position: absolute;\n top: -1px;\n right: -8.5px;\n border-radius: 50%;\n background-color: var(--visualization-primary);\n z-index: 3;\n}\n.progressLabel {\n z-index: 4;\n margin: 0 auto;\n font-weight: bold;\n line-height: 17px;\n font-size: 14px;\n text-shadow: -1px 0 #dfdfdf, 0 1px #dfdfdf, 1px 0 #dfdfdf, 0 -1px #dfdfdf;\n\n user-select: none;\n}\n</style>\n","'use strict';\n\nfunction normalizeComponent(template, style, script, scopeId, isFunctionalTemplate, moduleIdentifier\n/* server only */\n, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) {\n if (typeof shadowMode !== 'boolean') {\n createInjectorSSR = createInjector;\n createInjector = shadowMode;\n shadowMode = false;\n } // Vue.extend constructor export interop.\n\n\n var options = typeof script === 'function' ? script.options : script; // render functions\n\n if (template && template.render) {\n options.render = template.render;\n options.staticRenderFns = template.staticRenderFns;\n options._compiled = true; // functional template\n\n if (isFunctionalTemplate) {\n options.functional = true;\n }\n } // scopedId\n\n\n if (scopeId) {\n options._scopeId = scopeId;\n }\n\n var hook;\n\n if (moduleIdentifier) {\n // server build\n hook = function hook(context) {\n // 2.3 injection\n context = context || // cached call\n this.$vnode && this.$vnode.ssrContext || // stateful\n this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext; // functional\n // 2.2 with runInNewContext: true\n\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__;\n } // inject component styles\n\n\n if (style) {\n style.call(this, createInjectorSSR(context));\n } // register component module identifier for async chunk inference\n\n\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier);\n }\n }; // used by ssr in case component is cached and beforeCreate\n // never gets called\n\n\n options._ssrRegister = hook;\n } else if (style) {\n hook = shadowMode ? function () {\n style.call(this, createInjectorShadow(this.$root.$options.shadowRoot));\n } : function (context) {\n style.call(this, createInjector(context));\n };\n }\n\n if (hook) {\n if (options.functional) {\n // register for functional component in vue file\n var originalRender = options.render;\n\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context);\n return originalRender(h, context);\n };\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate;\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook];\n }\n }\n\n return script;\n}\n\nmodule.exports = normalizeComponent;\n//# sourceMappingURL=normalize-component.js.map\n","'use strict';\n\nvar isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\\\\b/.test(navigator.userAgent.toLowerCase());\nfunction createInjector(context) {\n return function (id, style) {\n return addStyle(id, style);\n };\n}\nvar HEAD = document.head || document.getElementsByTagName('head')[0];\nvar styles = {};\n\nfunction addStyle(id, css) {\n var group = isOldIE ? css.media || 'default' : id;\n var style = styles[group] || (styles[group] = {\n ids: new Set(),\n styles: []\n });\n\n if (!style.ids.has(id)) {\n style.ids.add(id);\n var code = css.source;\n\n if (css.map) {\n // https://developer.chrome.com/devtools/docs/javascript-debugging\n // this makes source maps inside style tags work properly in Chrome\n code += '\\n/*# sourceURL=' + css.map.sources[0] + ' */'; // http://stackoverflow.com/a/26603875\n\n code += '\\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) + ' */';\n }\n\n if (!style.element) {\n style.element = document.createElement('style');\n style.element.type = 'text/css';\n if (css.media) style.element.setAttribute('media', css.media);\n HEAD.appendChild(style.element);\n }\n\n if ('styleSheet' in style.element) {\n style.styles.push(code);\n style.element.styleSheet.cssText = style.styles.filter(Boolean).join('\\n');\n } else {\n var index = style.ids.size - 1;\n var textNode = document.createTextNode(code);\n var nodes = style.element.childNodes;\n if (nodes[index]) style.element.removeChild(nodes[index]);\n if (nodes.length) style.element.insertBefore(textNode, nodes[index]);else style.element.appendChild(textNode);\n }\n }\n}\n\nmodule.exports = createInjector;\n//# sourceMappingURL=browser.js.map\n","import Visualization from './Visualization.vue'\r\nimport VTooltip from 'v-tooltip'\r\nimport { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'\r\n\r\n// import en from '@/assets/locales/en-GB'\r\n// import pt from '@/assets/locales/pt-PT'\r\nimport colorVariation from '@/misc/colorVariation.js'\r\nimport registerIcons from '@/assets/icons'\r\n\r\nexport default {\r\n install(Vue, settings = {}) {\r\n if (!settings.client || !settings.base_url || !settings.theme?.primary) {\r\n console.error('Visualization: Missing required settings')\r\n return\r\n }\r\n\r\n if (this.installed) {\r\n return\r\n }\r\n this.installed = true\r\n\r\n Vue.use(VTooltip)\r\n\r\n registerIcons()\r\n Vue.component('font-awesome-icon', FontAwesomeIcon)\r\n\r\n sessionStorage.setItem('server', 'principal')\r\n sessionStorage.setItem('client', settings.client)\r\n sessionStorage.setItem('base_url', settings.base_url)\r\n\r\n const headTag = document.getElementsByTagName('head')[0]\r\n const styleTag = document.createElement('style')\r\n\r\n const theme = {\r\n primary: settings.theme.primary,\r\n secondary: colorVariation(settings.theme.primary),\r\n start: settings.theme.start || '#4caf50',\r\n end: settings.theme.end || '#ff5252',\r\n }\r\n let themeCss = []\r\n for (const color in theme) {\r\n themeCss.push(`--visualization-${color}: ${theme[color]};`)\r\n }\r\n themeCss = [':root {', ...themeCss, '}'].join(' ')\r\n\r\n styleTag.innerHTML = themeCss\r\n headTag.appendChild(styleTag)\r\n\r\n Vue.component('Visualization', Visualization)\r\n },\r\n}\r\n"],"names":["Positions","Object","freeze","previous","current","next","_catch","body","recover","result","e","then","_invokeIgnored","_empty","script","name","props","date","type","String","required","channel","Number","active","Boolean","activeTab","startAudienceTime","components","Frame","data","updatingChannel","dialog","timeLastBlock","commandBarShow","commandBarBtns","fnc","this","prevLoopActivate","icon","text","id","prev","goTo","nextLoopActivate","playOrPause","videoPlaying","paused","stopPlayingBar","openFrameSelection","openSplit","openBlocks","insertTimeForce","condition","canInsertTime","setHourIni","color","hourIniSelected","insertTime","setHourEnd","hourEndSelected","checkAvailableBlock","alternativeServer","useCache","numberOfRows","framesPerRow","secondsPerFrame","fInterface","velocity","frames","previousFrames","nextFrames","channelCode","activeFrame","activeVideo","videoTime","videoTotalTime","progressVideoDrag","lastHeight","loopInterval","nextLoop","prevLoop","videoSliderTotalDuration","sliderStartTime","media","changeServer","userMultiTabsGrid","userMultiTabsGridsModel","playbackRate","created","_async","_this","serverOfFrames","_await","createFramesInterface","resize","methods","framesClicked","target","$emit","openPlaybackRate","_this$$refs$settings","$refs","settings2","goToStartBlock","_this2","_continueIgnored","d","Date","timestamp","UTC","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","FramesService","getNextAvailableBlock","time","_FramesService$getNex","response","changeHour","convertToAudienceTime","start","err","console","error","_this3","_FramesService$getNex2","end","status","updateSlider","videoStartTime","breakLoop","setInterval","setTimeout","clearInterval","changePlayPause","height","frame","_this$$refs$settings2","openGoTo","goToFirstFrame","_this4","audienceTime","length","getAudienceTime","hours","minutes","seconds","split","parseInt","getLastFirtsBlockTime","goToLastFrame","_this5","h","m","newTime","first","arguments","undefined","indexOf","replace","t","match","_this$$refs$settings3","openSplit1","_this$$refs$settings4","_this$$refs$settings5","array","filter","fc","ref","videoStatus","Status","playing","stop","setFrameSelection","selected","_this6","loadingArray","changeSize","getFramesArray","getFrames","_this7","ch","associationTMP","1735073","1735074","1735075","1735076","getDateParts","year","month","day","FramesInterface","_FramesInterface","init","getIndex","rowNumber","frameIndex","position","frameTime","frameNumber","dateInUtc","miliSeconds","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","separator","limit","hour","toTimeString","map","startAudienceSeconds","part","toString","join","selectFrame","index","document","getElementById","click","hour_ini","arrowRight","checkLimitRight","arrowLeft","checkLimitLeft","value","high","getCurrentTime","title","low","_this8","setCurrentStep","loadNextFrames","_this9","loadPrevFrames","setStartTime","_this10","setTime","changeTime","hourToTimeStamp","_this11","changeBlockInterval","time_ini","time_end","ini","changeSettings","setSplitTime","updateVideoTime","updateVideoStatus","currentTime","updateProgress","progressMouseDown","window","addEventListener","progressMouseUp","progressMouseMove","removeEventListener","percentage","element","elementBar","getElementsByClassName","videoCurrentTime","rect","getBoundingClientRect","max","Math","round","width","pos","pageX","left","targetInSeconds","timeStampToJump","videoJumpToTimeStamp","style","startPlaying","totalTime","stopPlaying","hour_end","force","getChannelMedia","changeServerClick","sessionStorage","setItem","location","reload","computed","user","$store","state","sliderTotalTime","Array","from","keys","getItem","watch","removeItem","Promise","resolve","reject","normalizeComponent_1","template","scopeId","isFunctionalTemplate","moduleIdentifier","shadowMode","createInjector","createInjectorSSR","createInjectorShadow","hook","options","render","staticRenderFns","_compiled","functional","_scopeId","context","$vnode","ssrContext","parent","__VUE_SSR_CONTEXT__","call","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","originalRender","existing","beforeCreate","concat","isOldIE","navigator","test","userAgent","toLowerCase","HEAD","head","getElementsByTagName","styles","css","group","ids","Set","has","code","source","sources","btoa","unescape","encodeURIComponent","JSON","stringify","createElement","setAttribute","appendChild","push","styleSheet","cssText","size","textNode","createTextNode","nodes","childNodes","removeChild","insertBefore","addStyle","install","Vue","_settings$theme","settings","client","base_url","theme","primary","installed","use","VTooltip","registerIcons","component","FontAwesomeIcon","headTag","styleTag","secondary","colorVariation","themeCss","innerHTML","Visualization"],"mappings":"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"}