@twab/visualization 0.9.10 → 0.9.12

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.
@@ -150,38 +150,20 @@ var index = {
150
150
 
151
151
  Vue.component(
152
152
  'Visualization',
153
- (await Promise.resolve().then(function () { return Visualization$1; })).default
153
+ (await Promise.resolve().then(function () { return Visualization; })).default
154
154
  );
155
155
  },
156
156
  };
157
157
 
158
+ //
159
+
158
160
  const Status = Object.freeze({
159
161
  stopped: 0,
160
162
  playing: 1,
161
163
  paused: 2,
162
164
  });
163
165
 
164
- var Frame = {
165
- render: function(){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:{
166
- 'frame-container': true,
167
- 'initial-time': _vm.initialTime,
168
- 'end-time': _vm.endTime,
169
- 'between-time': _vm.betweenTime,
170
- active: _vm.active,
171
- },style:({
172
- maxHeight: (_vm.maxHeight + "px"),
173
- width: '100%',
174
- position: 'relative',
175
- })},[(_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._v(" "),(_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(),_vm._v(" "),_c('vue-loading',{staticStyle:{"z-index":"0"},attrs:{"active":((!_vm.frame.image || !_vm.frame.time) && _vm.frame.title !== -1) ||
176
- _vm.loading ||
177
- _vm.videoIsLoading,"spinner":"ring","color":"#1565c0","background-color":"#ededed","text":_vm.videoIsLoading ? _vm.$('infoBar.createVideo') : ''}}),_vm._v(" "),_c('div',{staticStyle:{"background-color":"black"}},[(!_vm.loading)?_c('div',{class:{
178
- 'frame-content': _vm.frame.title === -1 || _vm.videoStatus !== _vm.Status.stopped,
179
- },style:({
180
- maxHeight: (_vm.height + "px"),
181
- maxWidth: (_vm.width + "px"),
182
- color: 'white',
183
- }),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._v(" "),(_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(),_vm._v(" "),_c('div',{staticClass:"overlay"})]):_vm._e()]),_vm._v(" "),_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)},
184
- staticRenderFns: [],
166
+ var script$5 = {
185
167
  components: {
186
168
  VueLoading,
187
169
  },
@@ -440,6 +422,327 @@ staticRenderFns: [],
440
422
  },
441
423
  };
442
424
 
425
+ function normalizeComponent(template, style, script, scopeId, isFunctionalTemplate, moduleIdentifier /* server only */, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) {
426
+ if (typeof shadowMode !== 'boolean') {
427
+ createInjectorSSR = createInjector;
428
+ createInjector = shadowMode;
429
+ shadowMode = false;
430
+ }
431
+ // Vue.extend constructor export interop.
432
+ const options = typeof script === 'function' ? script.options : script;
433
+ // render functions
434
+ if (template && template.render) {
435
+ options.render = template.render;
436
+ options.staticRenderFns = template.staticRenderFns;
437
+ options._compiled = true;
438
+ // functional template
439
+ if (isFunctionalTemplate) {
440
+ options.functional = true;
441
+ }
442
+ }
443
+ // scopedId
444
+ if (scopeId) {
445
+ options._scopeId = scopeId;
446
+ }
447
+ let hook;
448
+ if (moduleIdentifier) {
449
+ // server build
450
+ hook = function (context) {
451
+ // 2.3 injection
452
+ context =
453
+ context || // cached call
454
+ (this.$vnode && this.$vnode.ssrContext) || // stateful
455
+ (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext); // functional
456
+ // 2.2 with runInNewContext: true
457
+ if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
458
+ context = __VUE_SSR_CONTEXT__;
459
+ }
460
+ // inject component styles
461
+ if (style) {
462
+ style.call(this, createInjectorSSR(context));
463
+ }
464
+ // register component module identifier for async chunk inference
465
+ if (context && context._registeredComponents) {
466
+ context._registeredComponents.add(moduleIdentifier);
467
+ }
468
+ };
469
+ // used by ssr in case component is cached and beforeCreate
470
+ // never gets called
471
+ options._ssrRegister = hook;
472
+ }
473
+ else if (style) {
474
+ hook = shadowMode
475
+ ? function (context) {
476
+ style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot));
477
+ }
478
+ : function (context) {
479
+ style.call(this, createInjector(context));
480
+ };
481
+ }
482
+ if (hook) {
483
+ if (options.functional) {
484
+ // register for functional component in vue file
485
+ const originalRender = options.render;
486
+ options.render = function renderWithStyleInjection(h, context) {
487
+ hook.call(context);
488
+ return originalRender(h, context);
489
+ };
490
+ }
491
+ else {
492
+ // inject component registration as beforeCreate hook
493
+ const existing = options.beforeCreate;
494
+ options.beforeCreate = existing ? [].concat(existing, hook) : [hook];
495
+ }
496
+ }
497
+ return script;
498
+ }
499
+
500
+ const isOldIE = typeof navigator !== 'undefined' &&
501
+ /msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());
502
+ function createInjector(context) {
503
+ return (id, style) => addStyle(id, style);
504
+ }
505
+ let HEAD;
506
+ const styles = {};
507
+ function addStyle(id, css) {
508
+ const group = isOldIE ? css.media || 'default' : id;
509
+ const style = styles[group] || (styles[group] = { ids: new Set(), styles: [] });
510
+ if (!style.ids.has(id)) {
511
+ style.ids.add(id);
512
+ let code = css.source;
513
+ if (css.map) {
514
+ // https://developer.chrome.com/devtools/docs/javascript-debugging
515
+ // this makes source maps inside style tags work properly in Chrome
516
+ code += '\n/*# sourceURL=' + css.map.sources[0] + ' */';
517
+ // http://stackoverflow.com/a/26603875
518
+ code +=
519
+ '\n/*# sourceMappingURL=data:application/json;base64,' +
520
+ btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) +
521
+ ' */';
522
+ }
523
+ if (!style.element) {
524
+ style.element = document.createElement('style');
525
+ style.element.type = 'text/css';
526
+ if (css.media)
527
+ style.element.setAttribute('media', css.media);
528
+ if (HEAD === undefined) {
529
+ HEAD = document.head || document.getElementsByTagName('head')[0];
530
+ }
531
+ HEAD.appendChild(style.element);
532
+ }
533
+ if ('styleSheet' in style.element) {
534
+ style.styles.push(code);
535
+ style.element.styleSheet.cssText = style.styles
536
+ .filter(Boolean)
537
+ .join('\n');
538
+ }
539
+ else {
540
+ const index = style.ids.size - 1;
541
+ const textNode = document.createTextNode(code);
542
+ const nodes = style.element.childNodes;
543
+ if (nodes[index])
544
+ style.element.removeChild(nodes[index]);
545
+ if (nodes.length)
546
+ style.element.insertBefore(textNode, nodes[index]);
547
+ else
548
+ style.element.appendChild(textNode);
549
+ }
550
+ }
551
+ }
552
+
553
+ /* script */
554
+ const __vue_script__$5 = script$5;
555
+
556
+ /* template */
557
+ var __vue_render__$5 = function () {
558
+ var _vm = this;
559
+ var _h = _vm.$createElement;
560
+ var _c = _vm._self._c || _h;
561
+ return _c(
562
+ "div",
563
+ {
564
+ class: {
565
+ "frame-container": true,
566
+ "initial-time": _vm.initialTime,
567
+ "end-time": _vm.endTime,
568
+ "between-time": _vm.betweenTime,
569
+ active: _vm.active,
570
+ },
571
+ style: {
572
+ maxHeight: _vm.maxHeight + "px",
573
+ width: "100%",
574
+ position: "relative",
575
+ },
576
+ },
577
+ [
578
+ _vm.active && _vm.activeTab && _vm.parentComponent.settingsClosed
579
+ ? _c("GlobalEvents", {
580
+ on: {
581
+ keydown: [
582
+ function ($event) {
583
+ if (!$event.type.indexOf("key") && $event.keyCode !== 32) {
584
+ return null
585
+ }
586
+ $event.preventDefault();
587
+ return _vm.playOrPause.apply(null, arguments)
588
+ },
589
+ function ($event) {
590
+ if (!$event.type.indexOf("key") && $event.keyCode !== 27) {
591
+ return null
592
+ }
593
+ $event.preventDefault();
594
+ return _vm.stop.apply(null, arguments)
595
+ },
596
+ function ($event) {
597
+ if (!$event.type.indexOf("key") && $event.keyCode !== 79) {
598
+ return null
599
+ }
600
+ return _vm.toogleDetailFrame.apply(null, arguments)
601
+ },
602
+ function ($event) {
603
+ if (!$event.type.indexOf("key") && $event.keyCode !== 13) {
604
+ return null
605
+ }
606
+ $event.preventDefault();
607
+ return _vm.jumpFrameToStart.apply(null, arguments)
608
+ },
609
+ ],
610
+ },
611
+ })
612
+ : _vm._e(),
613
+ _vm._v(" "),
614
+ _vm.showFrame
615
+ ? _c("GlobalEvents", {
616
+ on: {
617
+ keydown: [
618
+ function ($event) {
619
+ if (!$event.type.indexOf("key") && $event.keyCode !== 27) {
620
+ return null
621
+ }
622
+ $event.preventDefault();
623
+ return _vm.toogleDetailFrame.apply(null, arguments)
624
+ },
625
+ function ($event) {
626
+ if (!$event.type.indexOf("key") && $event.keyCode !== 13) {
627
+ return null
628
+ }
629
+ $event.preventDefault();
630
+ return _vm.toogleDetailFrame.apply(null, arguments)
631
+ },
632
+ ],
633
+ },
634
+ })
635
+ : _vm._e(),
636
+ _vm._v(" "),
637
+ _c("vue-loading", {
638
+ staticStyle: { "z-index": "0" },
639
+ attrs: {
640
+ active:
641
+ ((!_vm.frame.image || !_vm.frame.time) && _vm.frame.title !== -1) ||
642
+ _vm.loading ||
643
+ _vm.videoIsLoading,
644
+ spinner: "ring",
645
+ color: "#1565c0",
646
+ "background-color": "#ededed",
647
+ text: _vm.videoIsLoading ? _vm.$("infoBar.createVideo") : "",
648
+ },
649
+ }),
650
+ _vm._v(" "),
651
+ _c("div", { staticStyle: { "background-color": "black" } }, [
652
+ !_vm.loading
653
+ ? _c(
654
+ "div",
655
+ {
656
+ class: {
657
+ "frame-content":
658
+ _vm.frame.title === -1 ||
659
+ _vm.videoStatus !== _vm.Status.stopped,
660
+ },
661
+ style: {
662
+ maxHeight: _vm.height + "px",
663
+ maxWidth: _vm.width + "px",
664
+ color: "white",
665
+ },
666
+ on: { dblclick: _vm.playOrPause },
667
+ },
668
+ [
669
+ _vm.frame.image && _vm.videoStatus === _vm.Status.stopped
670
+ ? _c("div", {
671
+ class: { "dummy-frame": _vm.frame.title === -1 },
672
+ staticStyle: { width: "100%", height: "100%" },
673
+ domProps: { innerHTML: _vm._s(_vm.frame.image) },
674
+ })
675
+ : _vm._e(),
676
+ _vm._v(" "),
677
+ _vm.videoStatus !== _vm.Status.stopped && !_vm.videoIsLoading
678
+ ? _c("video", {
679
+ ref: "videoPlayer",
680
+ staticStyle: { width: "100%", "aspect-ratio": "11/9" },
681
+ attrs: {
682
+ maxHeight: _vm.height + "px",
683
+ maxWidth: _vm.width + "px",
684
+ src: _vm.videoUrlString,
685
+ preload: "none",
686
+ autoplay: "",
687
+ },
688
+ on: {
689
+ timeupdate: _vm.updateTimeLabel,
690
+ ended: _vm.videoEnded,
691
+ click: _vm.playOrPause,
692
+ },
693
+ })
694
+ : _vm._e(),
695
+ _vm._v(" "),
696
+ _c("div", { staticClass: "overlay" }),
697
+ ]
698
+ )
699
+ : _vm._e(),
700
+ ]),
701
+ _vm._v(" "),
702
+ _c("dialog", {
703
+ ref: "imageDetailsDialog",
704
+ class: { "dummy-frame": _vm.frame.title === -1 },
705
+ staticStyle: { width: "100vh", border: "none", background: "none" },
706
+ domProps: { innerHTML: _vm._s(_vm.frame.image) },
707
+ }),
708
+ ],
709
+ 1
710
+ )
711
+ };
712
+ var __vue_staticRenderFns__$5 = [];
713
+ __vue_render__$5._withStripped = true;
714
+
715
+ /* style */
716
+ const __vue_inject_styles__$5 = function (inject) {
717
+ if (!inject) return
718
+ inject("data-v-b21779f2_0", { source: "\n.frame-container > div[data-v-b21779f2] {\r\n max-height: 100%;\n}\n.frame-container[data-v-b21779f2] {\r\n background-color: black;\r\n display: flex;\r\n justify-content: center;\n}\n.frame-content[data-v-b21779f2],\r\n.dummy-frame[data-v-b21779f2] {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\n}\n.frame-content video[data-v-b21779f2] {\r\n flex-grow: 1;\r\n object-fit: fill;\r\n z-index: 0;\n}\n.overlay[data-v-b21779f2] {\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;\n}\n.active .overlay[data-v-b21779f2] {\r\n border-color: var(--visualization-primary);\n}\n.between-time .overlay[data-v-b21779f2] {\r\n border-top-color: var(--visualization-secondary);\n}\n.between-time.active .overlay[data-v-b21779f2] {\r\n border-color: var(--visualization-secondary);\n}\n.initial-time .overlay[data-v-b21779f2] {\r\n border-top-color: var(--visualization-start);\n}\n.initial-time.active .overlay[data-v-b21779f2] {\r\n border-color: var(--visualization-start);\n}\n.end-time .overlay[data-v-b21779f2] {\r\n border-top-color: var(--visualization-end);\n}\n.end-time.active .overlay[data-v-b21779f2] {\r\n border-color: var(--visualization-end);\n}\n.initial-time.end-time .overlay[data-v-b21779f2] {\r\n border-top-color: var(--visualization-start);\r\n border-bottom-color: var(--visualization-end);\n}\n.initial-time.end-time.active .overlay[data-v-b21779f2] {\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);\n}\r\n", map: {"version":3,"sources":["C:\\workspace\\visualization\\src\\components\\Frame.vue"],"names":[],"mappings":";AAiWA;EACA,gBAAA;AACA;AACA;EACA,uBAAA;EACA,aAAA;EACA,uBAAA;AACA;AACA;;EAEA,aAAA;EACA,mBAAA;EACA,uBAAA;AACA;AACA;EACA,YAAA;EACA,gBAAA;EACA,UAAA;AACA;AACA;EACA,WAAA;EACA,YAAA;EACA,UAAA;EACA,kBAAA;EACA,MAAA;EACA,OAAA;EACA,6BAAA;AACA;AACA;EACA,0CAAA;AACA;AACA;EACA,gDAAA;AACA;AACA;EACA,4CAAA;AACA;AACA;EACA,4CAAA;AACA;AACA;EACA,wCAAA;AACA;AACA;EACA,0CAAA;AACA;AACA;EACA,sCAAA;AACA;AACA;EACA,4CAAA;EACA,6CAAA;AACA;AACA;EACA,4CAAA;EACA,6CAAA;EACA,6CAAA;EACA,4CAAA;AACA","file":"Frame.vue","sourcesContent":["<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"]}, media: undefined });
719
+
720
+ };
721
+ /* scoped */
722
+ const __vue_scope_id__$5 = "data-v-b21779f2";
723
+ /* module identifier */
724
+ const __vue_module_identifier__$5 = undefined;
725
+ /* functional template */
726
+ const __vue_is_functional_template__$5 = false;
727
+ /* style inject SSR */
728
+
729
+ /* style inject shadow dom */
730
+
731
+
732
+
733
+ const __vue_component__$5 = /*#__PURE__*/normalizeComponent(
734
+ { render: __vue_render__$5, staticRenderFns: __vue_staticRenderFns__$5 },
735
+ __vue_inject_styles__$5,
736
+ __vue_script__$5,
737
+ __vue_scope_id__$5,
738
+ __vue_is_functional_template__$5,
739
+ __vue_module_identifier__$5,
740
+ false,
741
+ createInjector,
742
+ undefined,
743
+ undefined
744
+ );
745
+
443
746
  const Api = axios.create({
444
747
  //baseURL: process.env.VUE_APP_FRAMES_SERVER,
445
748
  baseURL: sessionStorage.getItem('base_url'),
@@ -1161,19 +1464,53 @@ FramesInterface.prototype.getVideoRequestByUrl = function (url_path, t) {
1161
1464
  return url + 'StreamFromVideo?url=' + url_path + params + '#t=' + t
1162
1465
  };
1163
1466
 
1164
- var Commands = {
1165
- render: function(){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;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(),_vm._v(" "),(btn && (btn.condition ? btn.condition() : true))?_c('button',{directives:[{name:"tooltip",rawName:"v-tooltip",value:(
1166
- btn.text && typeof btn.text === 'function' ? btn.text() : btn.text
1167
- ),expression:"\n btn.text && typeof btn.text === 'function' ? btn.text() : btn.text\n "}],staticClass:"command-bar-btn",style:({
1168
- color:
1169
- btn.color && typeof btn.color === 'function'
1170
- ? btn.color()
1171
- : 'black',
1172
- }),on:{"click":btn.fnc}},[_c('font-awesome-icon',{attrs:{"id":btn.id,"icon":'fa-solid ' +
1173
- (btn.icon && typeof btn.icon === 'function'
1174
- ? btn.icon()
1175
- : btn.icon)}})],1):_vm._e()])}),0):_vm._e(),_vm._v(" "),_c('hr',{staticClass:"visualization-divider"})])},
1176
- staticRenderFns: [],
1467
+ //
1468
+ //
1469
+ //
1470
+ //
1471
+ //
1472
+ //
1473
+ //
1474
+ //
1475
+ //
1476
+ //
1477
+ //
1478
+ //
1479
+ //
1480
+ //
1481
+ //
1482
+ //
1483
+ //
1484
+ //
1485
+ //
1486
+ //
1487
+ //
1488
+ //
1489
+ //
1490
+ //
1491
+ //
1492
+ //
1493
+ //
1494
+ //
1495
+ //
1496
+ //
1497
+ //
1498
+ //
1499
+ //
1500
+ //
1501
+ //
1502
+ //
1503
+ //
1504
+ //
1505
+ //
1506
+ //
1507
+ //
1508
+ //
1509
+ //
1510
+ //
1511
+ //
1512
+
1513
+ var script$4 = {
1177
1514
  props: {
1178
1515
  videoPlaying: {
1179
1516
  type: Boolean,
@@ -1321,30 +1658,208 @@ staticRenderFns: [],
1321
1658
  },
1322
1659
  };
1323
1660
 
1324
- var Infos = {
1325
- render: function(){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"visualization-row visualization-justify-center visualization-align-center",style:(!_vm.commandsShow
1326
- ? 'border-top-right-radius: 6px; padding: 4px'
1327
- : 'padding: 4px'),attrs:{"id":"info-bar"}},[_c('span',[_vm._v(" "+_vm._s(_vm.playbackRate)+"x ")]),_vm._v(" "),_c('hr',{staticClass:"visualization-divider vertical",staticStyle:{"margin":"0 8px"}}),_vm._v(" "),_c('span',[_vm._v("\n "+_vm._s(_vm.$t('infoBar.selected', {
1328
- seconds: _vm.hourEnd && _vm.hourIni ? _vm.hourEnd - _vm.hourIni + 1 : 0,
1329
- hour_ini: _vm.convertToAudienceTime(_vm.hourIni),
1330
- hour_end: _vm.convertToAudienceTime(_vm.hourEnd),
1331
- }))+"\n ")]),_vm._v(" "),_c('hr',{staticClass:"visualization-divider vertical",staticStyle:{"margin":"0 8px"}}),_vm._v(" "),_c('span',[_vm._v("\n "+_vm._s(_vm.$t('infoBar.interval', {
1332
- seconds: _vm.secondsPerFrame,
1333
- }))+"\n ")]),_vm._v(" "),_c('hr',{staticClass:"visualization-divider vertical",staticStyle:{"margin":"0 8px"}}),_vm._v(" "),_c('span',[_vm._v("\n "+_vm._s(_vm.$t('infoBar.block', {
1334
- time1: _vm.convertToAudienceTime(_vm.blockStartTime),
1335
- time2: _vm.convertToAudienceTime(_vm.blockTotalTime),
1336
- }))+"\n ")]),_vm._v(" "),_c('hr',{staticClass:"visualization-divider vertical",staticStyle:{"margin":"0 8px"}}),_vm._v("\n "+_vm._s(_vm.framesPerRow * _vm.numberOfRows)+"\n "),_c('hr',{staticClass:"visualization-divider vertical",staticStyle:{"margin":"0 8px"}}),_vm._v("\n "+_vm._s(_vm.framesPerRow + '*' + _vm.numberOfRows)+"\n "),(_vm.alternativeServer || !_vm.cache)?_c('span',{staticClass:"visualization-divider vertical",staticStyle:{"margin":"0 8px"}}):_vm._e(),_vm._v(" "),(_vm.alternativeServer)?_c('span',[_c('v-icon',{attrs:{"color":"error","small":"","left":""}},[_vm._v("fa-exclamation-triangle")]),_vm._v(" "),_c('strong',[_vm._v(_vm._s(_vm.$t('infoBar.alternativeServer')))])],1):_vm._e(),_vm._v(" "),(_vm.alternativeServer && !_vm.cache)?_c('span',{staticClass:"visualization-divider vertical",staticStyle:{"margin":"0 8px"}}):_vm._e(),_vm._v(" "),(!_vm.cache)?_c('span',[_c('v-icon',{attrs:{"color":"warning","small":"","left":""}},[_vm._v("fa-exclamation-circle")]),_vm._v(" "),_c('strong',[_vm._v(_vm._s(_vm.$t('infoBar.notUsingCache')))])],1):_vm._e(),_vm._v(" "),_c('div',{staticClass:"settings-container"},[_c('font-awesome-icon',{directives:[{name:"tooltip",rawName:"v-tooltip",value:(
1337
- _vm.alternativeServer
1338
- ? _vm.$t('infoBar.changeServer')
1339
- : _vm.$t('infoBar.changeServer')
1340
- ),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')}}}),_vm._v(" "),_c('font-awesome-icon',{directives:[{name:"tooltip",rawName:"v-tooltip",value:(
1341
- _vm.commandsShow
1342
- ? _vm.$t('moduletelentry.hideButtons')
1343
- : _vm.$t('moduletelentry.showButtons')
1344
- ),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')}}}),_vm._v(" "),_c('font-awesome-icon',{directives:[{name:"tooltip",rawName:"v-tooltip",value:(
1345
- _vm.cache ? _vm.$t('infoBar.disableCache') : _vm.$t('infoBar.activateCache')
1346
- ),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)])},
1347
- staticRenderFns: [],
1661
+ /* script */
1662
+ const __vue_script__$4 = script$4;
1663
+
1664
+ /* template */
1665
+ var __vue_render__$4 = function () {
1666
+ var _vm = this;
1667
+ var _h = _vm.$createElement;
1668
+ var _c = _vm._self._c || _h;
1669
+ return _c(
1670
+ "div",
1671
+ {
1672
+ staticClass: "visualization-col pa-0",
1673
+ staticStyle: { "border-top-right-radius": "6px" },
1674
+ attrs: { id: "command-bar" },
1675
+ },
1676
+ [
1677
+ _vm.commandBarShow
1678
+ ? _c(
1679
+ "div",
1680
+ { staticClass: "visualization-row visualization-justify-center" },
1681
+ _vm._l(_vm.commandBarBtns, function (btn, index) {
1682
+ return _c("div", { key: "command-btn-" + index }, [
1683
+ !btn
1684
+ ? _c("hr", {
1685
+ staticClass: "visualization-divider vertical",
1686
+ staticStyle: { margin: "0 4px" },
1687
+ })
1688
+ : _vm._e(),
1689
+ _vm._v(" "),
1690
+ btn && (btn.condition ? btn.condition() : true)
1691
+ ? _c(
1692
+ "button",
1693
+ {
1694
+ directives: [
1695
+ {
1696
+ name: "tooltip",
1697
+ rawName: "v-tooltip",
1698
+ value:
1699
+ btn.text && typeof btn.text === "function"
1700
+ ? btn.text()
1701
+ : btn.text,
1702
+ expression:
1703
+ "\n btn.text && typeof btn.text === 'function' ? btn.text() : btn.text\n ",
1704
+ },
1705
+ ],
1706
+ staticClass: "command-bar-btn",
1707
+ style: {
1708
+ color:
1709
+ btn.color && typeof btn.color === "function"
1710
+ ? btn.color()
1711
+ : "black",
1712
+ },
1713
+ on: { click: btn.fnc },
1714
+ },
1715
+ [
1716
+ _c("font-awesome-icon", {
1717
+ attrs: {
1718
+ id: btn.id,
1719
+ icon:
1720
+ "fa-solid " +
1721
+ (btn.icon && typeof btn.icon === "function"
1722
+ ? btn.icon()
1723
+ : btn.icon),
1724
+ },
1725
+ }),
1726
+ ],
1727
+ 1
1728
+ )
1729
+ : _vm._e(),
1730
+ ])
1731
+ }),
1732
+ 0
1733
+ )
1734
+ : _vm._e(),
1735
+ _vm._v(" "),
1736
+ _c("hr", { staticClass: "visualization-divider" }),
1737
+ ]
1738
+ )
1739
+ };
1740
+ var __vue_staticRenderFns__$4 = [];
1741
+ __vue_render__$4._withStripped = true;
1742
+
1743
+ /* style */
1744
+ const __vue_inject_styles__$4 = undefined;
1745
+ /* scoped */
1746
+ const __vue_scope_id__$4 = undefined;
1747
+ /* module identifier */
1748
+ const __vue_module_identifier__$4 = undefined;
1749
+ /* functional template */
1750
+ const __vue_is_functional_template__$4 = false;
1751
+ /* style inject */
1752
+
1753
+ /* style inject SSR */
1754
+
1755
+ /* style inject shadow dom */
1756
+
1757
+
1758
+
1759
+ const __vue_component__$4 = /*#__PURE__*/normalizeComponent(
1760
+ { render: __vue_render__$4, staticRenderFns: __vue_staticRenderFns__$4 },
1761
+ __vue_inject_styles__$4,
1762
+ __vue_script__$4,
1763
+ __vue_scope_id__$4,
1764
+ __vue_is_functional_template__$4,
1765
+ __vue_module_identifier__$4,
1766
+ false,
1767
+ undefined,
1768
+ undefined,
1769
+ undefined
1770
+ );
1771
+
1772
+ //
1773
+ //
1774
+ //
1775
+ //
1776
+ //
1777
+ //
1778
+ //
1779
+ //
1780
+ //
1781
+ //
1782
+ //
1783
+ //
1784
+ //
1785
+ //
1786
+ //
1787
+ //
1788
+ //
1789
+ //
1790
+ //
1791
+ //
1792
+ //
1793
+ //
1794
+ //
1795
+ //
1796
+ //
1797
+ //
1798
+ //
1799
+ //
1800
+ //
1801
+ //
1802
+ //
1803
+ //
1804
+ //
1805
+ //
1806
+ //
1807
+ //
1808
+ //
1809
+ //
1810
+ //
1811
+ //
1812
+ //
1813
+ //
1814
+ //
1815
+ //
1816
+ //
1817
+ //
1818
+ //
1819
+ //
1820
+ //
1821
+ //
1822
+ //
1823
+ //
1824
+ //
1825
+ //
1826
+ //
1827
+ //
1828
+ //
1829
+ //
1830
+ //
1831
+ //
1832
+ //
1833
+ //
1834
+ //
1835
+ //
1836
+ //
1837
+ //
1838
+ //
1839
+ //
1840
+ //
1841
+ //
1842
+ //
1843
+ //
1844
+ //
1845
+ //
1846
+ //
1847
+ //
1848
+ //
1849
+ //
1850
+ //
1851
+ //
1852
+ //
1853
+ //
1854
+ //
1855
+ //
1856
+ //
1857
+ //
1858
+ //
1859
+ //
1860
+ //
1861
+
1862
+ var script$3 = {
1348
1863
  props: {
1349
1864
  playbackRate: {
1350
1865
  type: Number,
@@ -1438,9 +1953,260 @@ staticRenderFns: [],
1438
1953
  },
1439
1954
  };
1440
1955
 
1441
- var VideoProgress = {
1442
- render: function(){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:"visualization-row",attrs:{"id":"progress"},on:{"mousedown":_vm.progressMouseDown}},[_c('span',{staticClass:"progressLabel"},[_vm._v("\n "+_vm._s(_vm.convertToAudienceTime(_vm.videoTime))+"\n ")]),_vm._v(" "),_c('span',{staticClass:"progressBar"})]),_vm._v(" "),_c('hr',{staticClass:"visualization-divider"})])},
1443
- staticRenderFns: [],
1956
+ /* script */
1957
+ const __vue_script__$3 = script$3;
1958
+
1959
+ /* template */
1960
+ var __vue_render__$3 = function () {
1961
+ var _vm = this;
1962
+ var _h = _vm.$createElement;
1963
+ var _c = _vm._self._c || _h;
1964
+ return _c(
1965
+ "div",
1966
+ {
1967
+ staticClass:
1968
+ "visualization-row visualization-justify-center visualization-align-center",
1969
+ style: !_vm.commandsShow
1970
+ ? "border-top-right-radius: 6px; padding: 4px"
1971
+ : "padding: 4px",
1972
+ attrs: { id: "info-bar" },
1973
+ },
1974
+ [
1975
+ _c("span", [_vm._v(" " + _vm._s(_vm.playbackRate) + "x ")]),
1976
+ _vm._v(" "),
1977
+ _c("hr", {
1978
+ staticClass: "visualization-divider vertical",
1979
+ staticStyle: { margin: "0 8px" },
1980
+ }),
1981
+ _vm._v(" "),
1982
+ _c("span", [
1983
+ _vm._v(
1984
+ "\n " +
1985
+ _vm._s(
1986
+ _vm.$t("infoBar.selected", {
1987
+ seconds:
1988
+ _vm.hourEnd && _vm.hourIni
1989
+ ? _vm.hourEnd - _vm.hourIni + 1
1990
+ : 0,
1991
+ hour_ini: _vm.convertToAudienceTime(_vm.hourIni),
1992
+ hour_end: _vm.convertToAudienceTime(_vm.hourEnd),
1993
+ })
1994
+ ) +
1995
+ "\n "
1996
+ ),
1997
+ ]),
1998
+ _vm._v(" "),
1999
+ _c("hr", {
2000
+ staticClass: "visualization-divider vertical",
2001
+ staticStyle: { margin: "0 8px" },
2002
+ }),
2003
+ _vm._v(" "),
2004
+ _c("span", [
2005
+ _vm._v(
2006
+ "\n " +
2007
+ _vm._s(
2008
+ _vm.$t("infoBar.interval", {
2009
+ seconds: _vm.secondsPerFrame,
2010
+ })
2011
+ ) +
2012
+ "\n "
2013
+ ),
2014
+ ]),
2015
+ _vm._v(" "),
2016
+ _c("hr", {
2017
+ staticClass: "visualization-divider vertical",
2018
+ staticStyle: { margin: "0 8px" },
2019
+ }),
2020
+ _vm._v(" "),
2021
+ _c("span", [
2022
+ _vm._v(
2023
+ "\n " +
2024
+ _vm._s(
2025
+ _vm.$t("infoBar.block", {
2026
+ time1: _vm.convertToAudienceTime(_vm.blockStartTime),
2027
+ time2: _vm.convertToAudienceTime(_vm.blockTotalTime),
2028
+ })
2029
+ ) +
2030
+ "\n "
2031
+ ),
2032
+ ]),
2033
+ _vm._v(" "),
2034
+ _c("hr", {
2035
+ staticClass: "visualization-divider vertical",
2036
+ staticStyle: { margin: "0 8px" },
2037
+ }),
2038
+ _vm._v("\n " + _vm._s(_vm.framesPerRow * _vm.numberOfRows) + "\n "),
2039
+ _c("hr", {
2040
+ staticClass: "visualization-divider vertical",
2041
+ staticStyle: { margin: "0 8px" },
2042
+ }),
2043
+ _vm._v(
2044
+ "\n " + _vm._s(_vm.framesPerRow + "*" + _vm.numberOfRows) + "\n "
2045
+ ),
2046
+ _vm.alternativeServer || !_vm.cache
2047
+ ? _c("span", {
2048
+ staticClass: "visualization-divider vertical",
2049
+ staticStyle: { margin: "0 8px" },
2050
+ })
2051
+ : _vm._e(),
2052
+ _vm._v(" "),
2053
+ _vm.alternativeServer
2054
+ ? _c(
2055
+ "span",
2056
+ [
2057
+ _c("v-icon", { attrs: { color: "error", small: "", left: "" } }, [
2058
+ _vm._v("fa-exclamation-triangle"),
2059
+ ]),
2060
+ _vm._v(" "),
2061
+ _c("strong", [
2062
+ _vm._v(_vm._s(_vm.$t("infoBar.alternativeServer"))),
2063
+ ]),
2064
+ ],
2065
+ 1
2066
+ )
2067
+ : _vm._e(),
2068
+ _vm._v(" "),
2069
+ _vm.alternativeServer && !_vm.cache
2070
+ ? _c("span", {
2071
+ staticClass: "visualization-divider vertical",
2072
+ staticStyle: { margin: "0 8px" },
2073
+ })
2074
+ : _vm._e(),
2075
+ _vm._v(" "),
2076
+ !_vm.cache
2077
+ ? _c(
2078
+ "span",
2079
+ [
2080
+ _c(
2081
+ "v-icon",
2082
+ { attrs: { color: "warning", small: "", left: "" } },
2083
+ [_vm._v("fa-exclamation-circle")]
2084
+ ),
2085
+ _vm._v(" "),
2086
+ _c("strong", [_vm._v(_vm._s(_vm.$t("infoBar.notUsingCache")))]),
2087
+ ],
2088
+ 1
2089
+ )
2090
+ : _vm._e(),
2091
+ _vm._v(" "),
2092
+ _c(
2093
+ "div",
2094
+ { staticClass: "settings-container" },
2095
+ [
2096
+ _c("font-awesome-icon", {
2097
+ directives: [
2098
+ {
2099
+ name: "tooltip",
2100
+ rawName: "v-tooltip",
2101
+ value: _vm.alternativeServer
2102
+ ? _vm.$t("infoBar.changeServer")
2103
+ : _vm.$t("infoBar.changeServer"),
2104
+ expression:
2105
+ "\n alternativeServer\n ? $t('infoBar.changeServer')\n : $t('infoBar.changeServer')\n ",
2106
+ },
2107
+ ],
2108
+ attrs: { icon: "fa-solid fa-server" },
2109
+ on: {
2110
+ click: function ($event) {
2111
+ return _vm.$emit("change-server")
2112
+ },
2113
+ },
2114
+ }),
2115
+ _vm._v(" "),
2116
+ _c("font-awesome-icon", {
2117
+ directives: [
2118
+ {
2119
+ name: "tooltip",
2120
+ rawName: "v-tooltip",
2121
+ value: _vm.commandsShow
2122
+ ? _vm.$t("moduletelentry.hideButtons")
2123
+ : _vm.$t("moduletelentry.showButtons"),
2124
+ expression:
2125
+ "\n commandsShow\n ? $t('moduletelentry.hideButtons')\n : $t('moduletelentry.showButtons')\n ",
2126
+ },
2127
+ ],
2128
+ attrs: {
2129
+ icon: _vm.commandsShow
2130
+ ? "fa-solid fa-eye"
2131
+ : "fa-solid fa-eye-slash",
2132
+ },
2133
+ on: {
2134
+ click: function ($event) {
2135
+ return _vm.$emit("toogle-commands-visibility")
2136
+ },
2137
+ },
2138
+ }),
2139
+ _vm._v(" "),
2140
+ _c("font-awesome-icon", {
2141
+ directives: [
2142
+ {
2143
+ name: "tooltip",
2144
+ rawName: "v-tooltip",
2145
+ value: _vm.cache
2146
+ ? _vm.$t("infoBar.disableCache")
2147
+ : _vm.$t("infoBar.activateCache"),
2148
+ expression:
2149
+ "\n cache ? $t('infoBar.disableCache') : $t('infoBar.activateCache')\n ",
2150
+ },
2151
+ ],
2152
+ attrs: { icon: _vm.cache ? "fa-solid fa-ban" : "fa-solid fa-sync" },
2153
+ on: {
2154
+ click: function ($event) {
2155
+ return _vm.$emit("toogle-cache")
2156
+ },
2157
+ },
2158
+ }),
2159
+ ],
2160
+ 1
2161
+ ),
2162
+ ]
2163
+ )
2164
+ };
2165
+ var __vue_staticRenderFns__$3 = [];
2166
+ __vue_render__$3._withStripped = true;
2167
+
2168
+ /* style */
2169
+ const __vue_inject_styles__$3 = undefined;
2170
+ /* scoped */
2171
+ const __vue_scope_id__$3 = undefined;
2172
+ /* module identifier */
2173
+ const __vue_module_identifier__$3 = undefined;
2174
+ /* functional template */
2175
+ const __vue_is_functional_template__$3 = false;
2176
+ /* style inject */
2177
+
2178
+ /* style inject SSR */
2179
+
2180
+ /* style inject shadow dom */
2181
+
2182
+
2183
+
2184
+ const __vue_component__$3 = /*#__PURE__*/normalizeComponent(
2185
+ { render: __vue_render__$3, staticRenderFns: __vue_staticRenderFns__$3 },
2186
+ __vue_inject_styles__$3,
2187
+ __vue_script__$3,
2188
+ __vue_scope_id__$3,
2189
+ __vue_is_functional_template__$3,
2190
+ __vue_module_identifier__$3,
2191
+ false,
2192
+ undefined,
2193
+ undefined,
2194
+ undefined
2195
+ );
2196
+
2197
+ //
2198
+ //
2199
+ //
2200
+ //
2201
+ //
2202
+ //
2203
+ //
2204
+ //
2205
+ //
2206
+ //
2207
+ //
2208
+
2209
+ var script$2 = {
1444
2210
  props: {
1445
2211
  videoTime: {
1446
2212
  type: Number,
@@ -1558,6 +2324,72 @@ staticRenderFns: [],
1558
2324
  },
1559
2325
  };
1560
2326
 
2327
+ /* script */
2328
+ const __vue_script__$2 = script$2;
2329
+
2330
+ /* template */
2331
+ var __vue_render__$2 = function () {
2332
+ var _vm = this;
2333
+ var _h = _vm.$createElement;
2334
+ var _c = _vm._self._c || _h;
2335
+ return _c("div", [
2336
+ _c(
2337
+ "div",
2338
+ {
2339
+ staticClass: "visualization-row",
2340
+ attrs: { id: "progress" },
2341
+ on: { mousedown: _vm.progressMouseDown },
2342
+ },
2343
+ [
2344
+ _c("span", { staticClass: "progressLabel" }, [
2345
+ _vm._v(
2346
+ "\n " +
2347
+ _vm._s(_vm.convertToAudienceTime(_vm.videoTime)) +
2348
+ "\n "
2349
+ ),
2350
+ ]),
2351
+ _vm._v(" "),
2352
+ _c("span", { staticClass: "progressBar" }),
2353
+ ]
2354
+ ),
2355
+ _vm._v(" "),
2356
+ _c("hr", { staticClass: "visualization-divider" }),
2357
+ ])
2358
+ };
2359
+ var __vue_staticRenderFns__$2 = [];
2360
+ __vue_render__$2._withStripped = true;
2361
+
2362
+ /* style */
2363
+ const __vue_inject_styles__$2 = function (inject) {
2364
+ if (!inject) return
2365
+ inject("data-v-17928743_0", { source: "\n#progress[data-v-17928743] {\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;\n}\n.progressBar[data-v-17928743] {\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;\n}\n.progressBar[data-v-17928743]::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;\n}\n.progressLabel[data-v-17928743] {\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;\n}\r\n", map: {"version":3,"sources":["C:\\workspace\\visualization\\src\\components\\VideoProgress.vue"],"names":[],"mappings":";AAmIA;EACA,kBAAA;EACA,eAAA;EACA,UAAA;EACA,YAAA;EACA,yBAAA;EACA,gBAAA;EACA,kBAAA;AACA;AACA;EACA,iBAAA;EACA,YAAA;EACA,kBAAA;EACA,MAAA;EACA,OAAA;EACA,gDAAA;EACA,UAAA;EACA,UAAA;EACA,sBAAA;AACA;AACA;EACA,WAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;EACA,SAAA;EACA,aAAA;EACA,kBAAA;EACA,8CAAA;EACA,UAAA;AACA;AACA;EACA,UAAA;EACA,cAAA;EACA,iBAAA;EACA,iBAAA;EACA,eAAA;EACA,yEAAA;;EAEA,iBAAA;AACA","file":"VideoProgress.vue","sourcesContent":["<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"]}, media: undefined });
2366
+
2367
+ };
2368
+ /* scoped */
2369
+ const __vue_scope_id__$2 = "data-v-17928743";
2370
+ /* module identifier */
2371
+ const __vue_module_identifier__$2 = undefined;
2372
+ /* functional template */
2373
+ const __vue_is_functional_template__$2 = false;
2374
+ /* style inject SSR */
2375
+
2376
+ /* style inject shadow dom */
2377
+
2378
+
2379
+
2380
+ const __vue_component__$2 = /*#__PURE__*/normalizeComponent(
2381
+ { render: __vue_render__$2, staticRenderFns: __vue_staticRenderFns__$2 },
2382
+ __vue_inject_styles__$2,
2383
+ __vue_script__$2,
2384
+ __vue_scope_id__$2,
2385
+ __vue_is_functional_template__$2,
2386
+ __vue_module_identifier__$2,
2387
+ false,
2388
+ createInjector,
2389
+ undefined,
2390
+ undefined
2391
+ );
2392
+
1561
2393
  var one_one = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 558.2 183.6\" xmlns:v=\"https://vecta.io/nano\"><path d=\"M558.2 0v90.1h-88.3c-1.9 0-1.9 0-1.9-1.9V1.8c0-1.8 0-1.8 1.8-1.8h88.4zm-468 183.5H0V95.1c0-1.7 0-1.7 1.7-1.7h86.7c1.8 0 1.8 0 1.8 1.8v88.3zm93.6 0H93.6V95.3c0-1.9 0-1.9 1.9-1.9H182c1.8 0 1.8 0 1.8 1.8v88.3zm280.9 0h-90.2V95.1c0-1.7 0-1.7 1.6-1.7H463c1.6 0 1.6 0 1.6 1.7v62.2l.1 26.2zm93.5-90v89c0 .9-.2 1.1-1.1 1.1H468V95.2c0-1.7 0-1.7 1.7-1.7h88.5zm-280.9 90h-90V94.9c0-.9.1-1.5 1.2-1.5H276c.9 0 1.2.3 1.2 1.2l.1 88.9zm93.6 0h-90V95.1c0-1.7 0-1.7 1.7-1.7h86.5c1.8 0 1.8 0 1.8 1.8v88.3z\" fill=\"#cbcbcb\"/><path d=\"M0 45.1V1.5C0 .3.3 0 1.4 0h87.3c1.2 0 1.5.3 1.4 1.5v87.1c0 1.2-.3 1.5-1.5 1.5H1.4c-1.3 0-1.5-.4-1.5-1.6L0 45.1z\" fill=\"#1565c0\"/><path d=\"M93.6 44.9V1.5c0-1.6 0-1.6 1.6-1.6h87.1c1.5 0 1.5 0 1.5 1.6v86.8c0 1.6 0 1.6-1.6 1.6H95.4c-1.8 0-1.8 0-1.8-1.8V44.9zm280.9.2V1.6c0-1.6 0-1.6 1.6-1.6h87.1c1.5 0 1.5 0 1.5 1.6v86.7c0 1.8 0 1.8-1.8 1.8h-86.7c-1.7 0-1.7 0-1.7-1.7V45.1zm-142.1 45H189c-1.6 0-1.6 0-1.6-1.5v-87c0-1.6 0-1.6 1.6-1.6h86.8c1.6 0 1.6 0 1.6 1.5v87c0 1.6 0 1.6-1.6 1.6h-43.4zm48.5-45.2V1.5c0-1.6 0-1.6 1.6-1.6h86.8c1.6 0 1.6 0 1.6 1.5v87c0 1.6 0 1.6-1.6 1.6h-86.8c-1.6 0-1.6 0-1.6-1.6V44.9z\" fill=\"#cbcbcb\"/></svg>";
1562
2394
 
1563
2395
  var two_one = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 558.2 183.6\" xmlns:v=\"https://vecta.io/nano\"><path d=\"M277.3 183.5h-90.2V94.2c0-.6.2-.9.8-.9h87.7c1 0 1.6 0 1.6 1.3l.1 88.9zM558.2 0v90.1h-88.3c-1.9 0-1.9 0-1.9-1.9V1.8c0-1.8 0-1.8 1.8-1.8h88.4zm-468 183.5H0V95.1c0-1.7 0-1.7 1.7-1.7h86.7c1.8 0 1.8 0 1.8 1.8v88.3zm93.6 0H93.6V95.3c0-1.9 0-1.9 1.9-1.9H182c1.8 0 1.8 0 1.8 1.8v88.3zm280.9 0h-90.2V95.1c0-1.7 0-1.7 1.6-1.7H463c1.6 0 1.6 0 1.6 1.7v61.2l.1 27.2zm93.5-90v89c0 .9-.2 1.1-1.1 1.1H468V95.2c0-1.7 0-1.7 1.7-1.7h88.5zm-187.1 90h-90.2V94.6c0-1.1.4-1.5 1.5-1.5l6.8.3h80.2c1.1 0 1.5.2 1.5 1.4l.2 61.9.5 25.1c0 .7.1 1.3-.5 1.7z\" fill=\"#cbcbcb\"/><path d=\"M183.8 45.1v43.5c0 1.1-.2 1.6-1.5 1.6H95c-1.2 0-1.4-.4-1.4-1.5V1.5C93.6.2 94 0 95.1 0h87.3c1.2 0 1.4.4 1.4 1.5v43.6zM45.1 0h43.7c1.1 0 1.4.2 1.4 1.4v87.3c0 1.1-.4 1.4-1.4 1.4H1.4c-1.1 0-1.3-.3-1.3-1.3L0 1.3C0 .2.3 0 1.3 0h43.8z\" fill=\"#1565c0\"/><path d=\"M419.6 90.1h-43.5c-1.6 0-1.6 0-1.6-1.6V1.6c0-1.6 0-1.6 1.6-1.6h87.1c1.5 0 1.5 0 1.5 1.6v86.7c0 1.8 0 1.8-1.8 1.8h-43.3zM277.3 44.9v43.5c0 1.7 0 1.7-1.6 1.7h-86.8c-1.6 0-1.6 0-1.6-1.6v-87c0-1.5 0-1.5 1.6-1.5h86.8c1.6 0 1.6 0 1.6 1.6v43.3zm93.6.3v43.2c0 1.7 0 1.7-1.6 1.7h-86.8c-1.6 0-1.6 0-1.6-1.6v-87c0-1.5 0-1.5 1.6-1.5h86.8c1.6 0 1.6 0 1.6 1.6v43.6z\" fill=\"#cbcbcb\"/></svg>";
@@ -1591,13 +2423,9 @@ var GridImages = {
1591
2423
  '6x2': six_two,
1592
2424
  };
1593
2425
 
1594
- var Settings = {
1595
- render: function(){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;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(),_vm._v(" "),_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("\n "+_vm._s(_vm.$t('infoBar.gridForm'))+"\n ")]),_vm._v(" "),_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":function () { return (_vm.framesValue = item.value); }}})])}),0),_vm._v(" "),_c('div',{staticClass:"visualization-divider"}),_vm._v(" "),_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("\n Ok\n ")])])]),_vm._v(" "),_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("\n "+_vm._s(_vm.$t('infoBar.secondImage'))+"\n ")]),_vm._v(" "),_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;}}}),_vm._v(" "),_c('span',{staticStyle:{"padding-left":"20px","font-size":"16px"}},[_vm._v("\n "+_vm._s(_vm.secondsPerFrame + ' s'))])]),_vm._v(" "),_c('div',{staticClass:"visualization-divider",staticStyle:{"margin":"10px"}}),_vm._v(" "),_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("\n Ok\n ")])])]),_vm._v(" "),_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("\n "+_vm._s(_vm.$t('infoBar.goTo'))+"\n ")]),_vm._v(" "),_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;}}})]),_vm._v(" "),_c('div',{staticClass:"visualization-divider",staticStyle:{"margin-top":"40px"}}),_vm._v(" "),_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 () {
1596
- _vm.$emit('close', 'goTo');
1597
- _vm.$emit('change-go-to', _vm.goToValue);
1598
- _vm.goToValue = '';
1599
- }}},[_vm._v("\n Ok\n ")])])]),_vm._v(" "),_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)}]}}),_vm._v(" "),_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("\n "+_vm._s(_vm.$t('infoBar.playbackSpeed'))+"\n ")]),_vm._v(" "),_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;}}}),_vm._v(" "),_c('span',{staticStyle:{"padding-left":"20px","padding-right":"20px","font-size":"16px"}},[_vm._v(_vm._s(_vm.playbackRate + 'x'))])]),_vm._v(" "),_c('div',{staticClass:"visualization-divider",staticStyle:{"margin-top":"40px"}}),_vm._v(" "),_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("\n Ok\n ")])])])],1)},
1600
- staticRenderFns: [],
2426
+ //
2427
+
2428
+ var script$1 = {
1601
2429
  props: {
1602
2430
  dialogsVisibility: {
1603
2431
  type: Object,
@@ -1745,37 +2573,501 @@ staticRenderFns: [],
1745
2573
  },
1746
2574
  };
1747
2575
 
2576
+ /* script */
2577
+ const __vue_script__$1 = script$1;
2578
+
2579
+ /* template */
2580
+ var __vue_render__$1 = function () {
2581
+ var _vm = this;
2582
+ var _h = _vm.$createElement;
2583
+ var _c = _vm._self._c || _h;
2584
+ return _c(
2585
+ "div",
2586
+ [
2587
+ _vm.dialogsVisibility.frames
2588
+ ? _c("GlobalEvents", {
2589
+ on: {
2590
+ keydown: [
2591
+ function ($event) {
2592
+ if (!$event.type.indexOf("key") && $event.keyCode !== 37) {
2593
+ return null
2594
+ }
2595
+ return _vm.prevFormat.apply(null, arguments)
2596
+ },
2597
+ function ($event) {
2598
+ if (!$event.type.indexOf("key") && $event.keyCode !== 39) {
2599
+ return null
2600
+ }
2601
+ return _vm.nextFormat.apply(null, arguments)
2602
+ },
2603
+ ],
2604
+ },
2605
+ })
2606
+ : _vm._e(),
2607
+ _vm._v(" "),
2608
+ _c("dialog", { ref: "frames" }, [
2609
+ _c(
2610
+ "div",
2611
+ {
2612
+ staticClass: "visualization-row",
2613
+ staticStyle: {
2614
+ padding: "5px",
2615
+ "font-weight": "bold",
2616
+ "background-color": "var(--visualization-primary)",
2617
+ "border-color": "var(--visualization-primary)",
2618
+ height: "40px",
2619
+ color: "white",
2620
+ display: "flex",
2621
+ "justify-content": "center",
2622
+ "padding-top": "10px",
2623
+ },
2624
+ },
2625
+ [_vm._v("\n " + _vm._s(_vm.$t("infoBar.gridForm")) + "\n ")]
2626
+ ),
2627
+ _vm._v(" "),
2628
+ _c(
2629
+ "div",
2630
+ {
2631
+ staticClass: "visualization-row",
2632
+ staticStyle: { "justify-content": "center" },
2633
+ },
2634
+ _vm._l(_vm.items, function (item, index) {
2635
+ return _c(
2636
+ "div",
2637
+ {
2638
+ key: index,
2639
+ staticClass: "visualization-col",
2640
+ staticStyle: { "min-width": "200px", "max-width": "200px" },
2641
+ },
2642
+ [
2643
+ _c("img", {
2644
+ style:
2645
+ _vm.framesValue !== item.value
2646
+ ? "filter: grayscale(1)"
2647
+ : "",
2648
+ attrs: { src: item.image, width: "100%" },
2649
+ on: {
2650
+ click: function () {
2651
+ return (_vm.framesValue = item.value)
2652
+ },
2653
+ },
2654
+ }),
2655
+ ]
2656
+ )
2657
+ }),
2658
+ 0
2659
+ ),
2660
+ _vm._v(" "),
2661
+ _c("div", { staticClass: "visualization-divider" }),
2662
+ _vm._v(" "),
2663
+ _c(
2664
+ "div",
2665
+ {
2666
+ staticClass: "visualization-row",
2667
+ staticStyle: {
2668
+ display: "flex",
2669
+ "justify-content": "center",
2670
+ "margin-top": "10px",
2671
+ "margin-bottom": "10px",
2672
+ },
2673
+ },
2674
+ [
2675
+ _c(
2676
+ "button",
2677
+ {
2678
+ staticStyle: {
2679
+ "border-radius": "4px",
2680
+ height: "35px",
2681
+ width: "70px",
2682
+ "background-color": "var(--visualization-primary)",
2683
+ "border-color": "var(--visualization-primary)",
2684
+ color: "white",
2685
+ },
2686
+ on: {
2687
+ click: function ($event) {
2688
+ return _vm.$emit("close", "frames")
2689
+ },
2690
+ },
2691
+ },
2692
+ [_vm._v("\n Ok\n ")]
2693
+ ),
2694
+ ]
2695
+ ),
2696
+ ]),
2697
+ _vm._v(" "),
2698
+ _c("dialog", { ref: "secondsPerFrame" }, [
2699
+ _c(
2700
+ "div",
2701
+ {
2702
+ staticClass: "visualization-row",
2703
+ staticStyle: {
2704
+ padding: "5px",
2705
+ "font-weight": "bold",
2706
+ "background-color": "var(--visualization-primary)",
2707
+ "border-color": "var(--visualization-primary)",
2708
+ height: "40px",
2709
+ color: "white",
2710
+ display: "flex",
2711
+ "justify-content": "center",
2712
+ "padding-top": "10px",
2713
+ },
2714
+ },
2715
+ [
2716
+ _vm._v(
2717
+ "\n " + _vm._s(_vm.$t("infoBar.secondImage")) + "\n "
2718
+ ),
2719
+ ]
2720
+ ),
2721
+ _vm._v(" "),
2722
+ _c(
2723
+ "div",
2724
+ {
2725
+ staticClass: "visualization-row",
2726
+ staticStyle: { margin: "25px", height: "20px" },
2727
+ },
2728
+ [
2729
+ _c("input", {
2730
+ directives: [
2731
+ {
2732
+ name: "model",
2733
+ rawName: "v-model",
2734
+ value: _vm.secondsPerFrameValue,
2735
+ expression: "secondsPerFrameValue",
2736
+ },
2737
+ ],
2738
+ ref: "secondsPerFrameInput",
2739
+ staticStyle: { height: "30px", width: "300px" },
2740
+ attrs: { type: "range", step: "1", max: "5", min: "1" },
2741
+ domProps: { value: _vm.secondsPerFrameValue },
2742
+ on: {
2743
+ __r: function ($event) {
2744
+ _vm.secondsPerFrameValue = $event.target.value;
2745
+ },
2746
+ },
2747
+ }),
2748
+ _vm._v(" "),
2749
+ _c(
2750
+ "span",
2751
+ { staticStyle: { "padding-left": "20px", "font-size": "16px" } },
2752
+ [_vm._v("\n " + _vm._s(_vm.secondsPerFrame + " s"))]
2753
+ ),
2754
+ ]
2755
+ ),
2756
+ _vm._v(" "),
2757
+ _c("div", {
2758
+ staticClass: "visualization-divider",
2759
+ staticStyle: { margin: "10px" },
2760
+ }),
2761
+ _vm._v(" "),
2762
+ _c(
2763
+ "div",
2764
+ {
2765
+ staticClass: "visualization-row",
2766
+ staticStyle: {
2767
+ display: "flex",
2768
+ "justify-content": "center",
2769
+ "margin-top": "10px",
2770
+ },
2771
+ },
2772
+ [
2773
+ _c(
2774
+ "button",
2775
+ {
2776
+ staticStyle: {
2777
+ "border-radius": "4px",
2778
+ height: "35px",
2779
+ width: "70px",
2780
+ "background-color": "var(--visualization-primary)",
2781
+ "border-color": "var(--visualization-primary)",
2782
+ color: "white",
2783
+ "margin-bottom": "8px",
2784
+ },
2785
+ on: {
2786
+ click: function ($event) {
2787
+ return _vm.$emit("close", "secondsPerFrame")
2788
+ },
2789
+ },
2790
+ },
2791
+ [_vm._v("\n Ok\n ")]
2792
+ ),
2793
+ ]
2794
+ ),
2795
+ ]),
2796
+ _vm._v(" "),
2797
+ _c("dialog", { ref: "goTo" }, [
2798
+ _c(
2799
+ "div",
2800
+ {
2801
+ staticStyle: {
2802
+ padding: "5px",
2803
+ "font-weight": "bold",
2804
+ "background-color": "var(--visualization-primary)",
2805
+ "border-color": "var(--visualization-primary)",
2806
+ height: "35px",
2807
+ color: "white",
2808
+ display: "flex",
2809
+ "justify-content": "center",
2810
+ "padding-top": "8px",
2811
+ },
2812
+ },
2813
+ [_vm._v("\n " + _vm._s(_vm.$t("infoBar.goTo")) + "\n ")]
2814
+ ),
2815
+ _vm._v(" "),
2816
+ _c(
2817
+ "div",
2818
+ {
2819
+ staticClass: "visualization-row",
2820
+ staticStyle: { margin: "25px", height: "20px" },
2821
+ },
2822
+ [
2823
+ _c("input", {
2824
+ directives: [
2825
+ {
2826
+ name: "model",
2827
+ rawName: "v-model",
2828
+ value: _vm.goToValue,
2829
+ expression: "goToValue",
2830
+ },
2831
+ {
2832
+ name: "mask",
2833
+ rawName: "v-mask",
2834
+ value: "##:##:##",
2835
+ expression: "'##:##:##'",
2836
+ },
2837
+ ],
2838
+ staticStyle: {
2839
+ height: "30px",
2840
+ width: "300px",
2841
+ border: "0.1px solid #c2c9d6",
2842
+ "border-radius": "3px",
2843
+ padding: "5px",
2844
+ },
2845
+ attrs: { type: "text", placeholder: "hh:mm:ss" },
2846
+ domProps: { value: _vm.goToValue },
2847
+ on: {
2848
+ input: function ($event) {
2849
+ if ($event.target.composing) {
2850
+ return
2851
+ }
2852
+ _vm.goToValue = $event.target.value;
2853
+ },
2854
+ },
2855
+ }),
2856
+ ]
2857
+ ),
2858
+ _vm._v(" "),
2859
+ _c("div", {
2860
+ staticClass: "visualization-divider",
2861
+ staticStyle: { "margin-top": "40px" },
2862
+ }),
2863
+ _vm._v(" "),
2864
+ _c(
2865
+ "div",
2866
+ {
2867
+ staticClass: "visualization-row",
2868
+ staticStyle: {
2869
+ display: "flex",
2870
+ "justify-content": "center",
2871
+ "margin-top": "10px",
2872
+ "margin-bottom": "10px",
2873
+ },
2874
+ },
2875
+ [
2876
+ _c(
2877
+ "button",
2878
+ {
2879
+ staticStyle: {
2880
+ "border-radius": "4px",
2881
+ height: "35px",
2882
+ width: "70px",
2883
+ "background-color": "var(--visualization-primary)",
2884
+ "border-color": "var(--visualization-primary)",
2885
+ color: "white",
2886
+ },
2887
+ on: {
2888
+ click: function () {
2889
+ _vm.$emit("close", "goTo");
2890
+ _vm.$emit("change-go-to", _vm.goToValue);
2891
+ _vm.goToValue = "";
2892
+ },
2893
+ },
2894
+ },
2895
+ [_vm._v("\n Ok\n ")]
2896
+ ),
2897
+ ]
2898
+ ),
2899
+ ]),
2900
+ _vm._v(" "),
2901
+ _c("GlobalEvents", {
2902
+ on: {
2903
+ keydown: [
2904
+ function ($event) {
2905
+ if (!$event.type.indexOf("key") && $event.keyCode !== 107) {
2906
+ return null
2907
+ }
2908
+ return _vm.changePlaybackRate(1)
2909
+ },
2910
+ function ($event) {
2911
+ if (!$event.type.indexOf("key") && $event.keyCode !== 109) {
2912
+ return null
2913
+ }
2914
+ return _vm.changePlaybackRate(-1)
2915
+ },
2916
+ ],
2917
+ },
2918
+ }),
2919
+ _vm._v(" "),
2920
+ _c("dialog", { ref: "playbackRate" }, [
2921
+ _c(
2922
+ "div",
2923
+ {
2924
+ staticClass: "visualization-row",
2925
+ staticStyle: {
2926
+ padding: "5px",
2927
+ "font-weight": "bold",
2928
+ "background-color": "var(--visualization-primary)",
2929
+ "border-color": "var(--visualization-primary)",
2930
+ height: "35px",
2931
+ color: "white",
2932
+ display: "flex",
2933
+ "justify-content": "center",
2934
+ "padding-top": "8px",
2935
+ },
2936
+ },
2937
+ [
2938
+ _vm._v(
2939
+ "\n " + _vm._s(_vm.$t("infoBar.playbackSpeed")) + "\n "
2940
+ ),
2941
+ ]
2942
+ ),
2943
+ _vm._v(" "),
2944
+ _c(
2945
+ "div",
2946
+ {
2947
+ staticClass: "visualization-row",
2948
+ staticStyle: { margin: "25px", height: "20px", width: "380px" },
2949
+ },
2950
+ [
2951
+ _c("input", {
2952
+ directives: [
2953
+ {
2954
+ name: "model",
2955
+ rawName: "v-model",
2956
+ value: _vm.playbackRateValue,
2957
+ expression: "playbackRateValue",
2958
+ },
2959
+ ],
2960
+ ref: "playbackRateInput",
2961
+ staticStyle: { height: "30px", width: "300px" },
2962
+ attrs: { type: "range", step: "0.25", max: "3", min: "1" },
2963
+ domProps: { value: _vm.playbackRateValue },
2964
+ on: {
2965
+ __r: function ($event) {
2966
+ _vm.playbackRateValue = $event.target.value;
2967
+ },
2968
+ },
2969
+ }),
2970
+ _vm._v(" "),
2971
+ _c(
2972
+ "span",
2973
+ {
2974
+ staticStyle: {
2975
+ "padding-left": "20px",
2976
+ "padding-right": "20px",
2977
+ "font-size": "16px",
2978
+ },
2979
+ },
2980
+ [_vm._v(_vm._s(_vm.playbackRate + "x"))]
2981
+ ),
2982
+ ]
2983
+ ),
2984
+ _vm._v(" "),
2985
+ _c("div", {
2986
+ staticClass: "visualization-divider",
2987
+ staticStyle: { "margin-top": "40px" },
2988
+ }),
2989
+ _vm._v(" "),
2990
+ _c(
2991
+ "div",
2992
+ {
2993
+ staticClass: "visualization-row",
2994
+ staticStyle: {
2995
+ display: "flex",
2996
+ "justify-content": "center",
2997
+ "margin-top": "10px",
2998
+ "margin-bottom": "10px",
2999
+ },
3000
+ },
3001
+ [
3002
+ _c(
3003
+ "button",
3004
+ {
3005
+ staticStyle: {
3006
+ "border-radius": "4px",
3007
+ height: "35px",
3008
+ width: "70px",
3009
+ "background-color": "var(--visualization-primary)",
3010
+ "border-color": "var(--visualization-primary)",
3011
+ color: "white",
3012
+ },
3013
+ on: {
3014
+ click: function ($event) {
3015
+ return _vm.$emit("close", "playbackRate")
3016
+ },
3017
+ },
3018
+ },
3019
+ [_vm._v("\n Ok\n ")]
3020
+ ),
3021
+ ]
3022
+ ),
3023
+ ]),
3024
+ ],
3025
+ 1
3026
+ )
3027
+ };
3028
+ var __vue_staticRenderFns__$1 = [];
3029
+ __vue_render__$1._withStripped = true;
3030
+
3031
+ /* style */
3032
+ const __vue_inject_styles__$1 = function (inject) {
3033
+ if (!inject) return
3034
+ inject("data-v-76bbde5a_0", { source: "\ndialog[data-v-76bbde5a] {\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%);\n}\r\n", map: {"version":3,"sources":["C:\\workspace\\visualization\\src\\components\\Settings.vue"],"names":[],"mappings":";AAmZA;EACA,eAAA;EACA,mBAAA;EACA,YAAA;EACA,iBAAA;EACA,kBAAA;EACA;mCACA;EACA,eAAA;EACA,QAAA;EACA,SAAA;EACA,4CAAA;AACA","file":"Settings.vue","sourcesContent":["<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"]}, media: undefined });
3035
+
3036
+ };
3037
+ /* scoped */
3038
+ const __vue_scope_id__$1 = "data-v-76bbde5a";
3039
+ /* module identifier */
3040
+ const __vue_module_identifier__$1 = undefined;
3041
+ /* functional template */
3042
+ const __vue_is_functional_template__$1 = false;
3043
+ /* style inject SSR */
3044
+
3045
+ /* style inject shadow dom */
3046
+
3047
+
3048
+
3049
+ const __vue_component__$1 = /*#__PURE__*/normalizeComponent(
3050
+ { render: __vue_render__$1, staticRenderFns: __vue_staticRenderFns__$1 },
3051
+ __vue_inject_styles__$1,
3052
+ __vue_script__$1,
3053
+ __vue_scope_id__$1,
3054
+ __vue_is_functional_template__$1,
3055
+ __vue_module_identifier__$1,
3056
+ false,
3057
+ createInjector,
3058
+ undefined,
3059
+ undefined
3060
+ );
3061
+
3062
+ //
3063
+
1748
3064
  const Positions = Object.freeze({
1749
3065
  previous: 0,
1750
3066
  current: 1,
1751
3067
  next: 2,
1752
3068
  });
1753
3069
 
1754
- var Visualization = {
1755
- render: function(){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;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._v(" "),(_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 (function () { return (_vm.secondsPerFrame = 1); }).apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==50&&$event.keyCode!==98){ return null; }return (function () { return (_vm.secondsPerFrame = 2); }).apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==51&&$event.keyCode!==99){ return null; }return (function () { return (_vm.secondsPerFrame = 3); }).apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==52&&$event.keyCode!==100){ return null; }return (function () { return (_vm.secondsPerFrame = 4); }).apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==53&&$event.keyCode!==101){ return null; }return (function () { return (_vm.secondsPerFrame = 5); }).apply(null, arguments)}]}}):_vm._e(),_vm._v(" "),(_vm.prevLoop || _vm.nextLoop)?_c('GlobalEvents',{on:{"keydown":_vm.breakLoop,"click":_vm.breakLoop}}):_vm._e(),_vm._v(" "),(_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":function (value) { return (_vm.playbackRate = value); },"change-go-to":_vm.changeHour,"change-seconds-per-frame":function (value) { return (_vm.secondsPerFrame = value); },"set-frames-selection":_vm.setFrameSelection,"close":function (dialog) { return (_vm.dialogs[dialog] = false); }}}):_vm._e(),_vm._v(" "),_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._v(" "),(_vm.videoProgressBar)?_c('video-progress',{directives:[{name:"show",rawName:"v-show",value:(_vm.videoPlaying),expression:"videoPlaying"}],attrs:{"video-time":_vm.videoTime}}):_vm._e(),_vm._v(" "),_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._v(" "),_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 +
1756
- '-' +
1757
- _vm.framesPerRow +
1758
- '-' +
1759
- _vm.getIndex(rowNumber, frameNumber, _vm.Positions.previous),staticStyle:{"display":"none"}},[_c('span',{domProps:{"innerHTML":_vm._s(frame.img)}})])}),_vm._v(" "),_vm._l((_vm.nextFrames),function(frame,frameNumber){return _c('div',{key:_vm.numberOfRows +
1760
- '-' +
1761
- _vm.framesPerRow +
1762
- '-' +
1763
- _vm.getIndex(rowNumber, frameNumber, _vm.Positions.next),staticStyle:{"display":"none"}},[_c('span',{domProps:{"innerHTML":_vm._s(frame.img)}})])}),_vm._v(" "),_vm._l((_vm.frames.slice(
1764
- _vm.framesPerRow * (rowNumber - 1),
1765
- _vm.framesPerRow * rowNumber
1766
- )),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
1767
- ? _vm.selectFrame(
1768
- _vm.getIndex(rowNumber, frameNumber, _vm.Positions.current),
1769
- frame
1770
- )
1771
- : null;}}},[_c('span',{staticStyle:{"padding-left":"4px"},attrs:{"id":_vm.activeFrame ? 'aa' : 0}},[_c('b',[_vm._v("\n "+_vm._s(_vm.getAudienceTime(
1772
- frame.time,
1773
- rowNumber,
1774
- frameNumber,
1775
- _vm.Positions.current
1776
- ))+"\n ")])]),_vm._v(" "),_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) ===
1777
- _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)},
1778
- staticRenderFns: [],
3070
+ var script = {
1779
3071
  name: 'visualization-container',
1780
3072
  props: {
1781
3073
  value: {
@@ -1811,11 +3103,11 @@ staticRenderFns: [],
1811
3103
  }
1812
3104
  },
1813
3105
  components: {
1814
- Frame,
1815
- CommandBar: Commands,
1816
- InfoBar: Infos,
1817
- VideoProgress,
1818
- Settings,
3106
+ Frame: __vue_component__$5,
3107
+ CommandBar: __vue_component__$4,
3108
+ InfoBar: __vue_component__$3,
3109
+ VideoProgress: __vue_component__$2,
3110
+ Settings: __vue_component__$1,
1819
3111
  // Help,
1820
3112
  },
1821
3113
  data() {
@@ -2631,9 +3923,585 @@ staticRenderFns: [],
2631
3923
  },
2632
3924
  };
2633
3925
 
2634
- var Visualization$1 = /*#__PURE__*/Object.freeze({
3926
+ /* script */
3927
+ const __vue_script__ = script;
3928
+
3929
+ /* template */
3930
+ var __vue_render__ = function () {
3931
+ var _vm = this;
3932
+ var _h = _vm.$createElement;
3933
+ var _c = _vm._self._c || _h;
3934
+ return _c(
3935
+ "div",
3936
+ {
3937
+ staticClass: "visualization-row",
3938
+ attrs: { id: "visualization-container" },
3939
+ on: { click: _vm.framesClicked },
3940
+ },
3941
+ [
3942
+ _vm.active && _vm.canInsertTime && _vm.settingsClosed
3943
+ ? _c("GlobalEvents", {
3944
+ on: {
3945
+ keydown: [
3946
+ function ($event) {
3947
+ if (!$event.type.indexOf("key") && $event.keyCode !== 45) {
3948
+ return null
3949
+ }
3950
+ return _vm.insertTime.apply(null, arguments)
3951
+ },
3952
+ function ($event) {
3953
+ if (!$event.type.indexOf("key") && $event.keyCode !== 46) {
3954
+ return null
3955
+ }
3956
+ return _vm.insertTime.apply(null, arguments)
3957
+ },
3958
+ ],
3959
+ },
3960
+ })
3961
+ : _vm._e(),
3962
+ _vm._v(" "),
3963
+ _vm.active && _vm.settingsClosed
3964
+ ? _c("GlobalEvents", {
3965
+ on: {
3966
+ keydown: [
3967
+ function ($event) {
3968
+ if (
3969
+ !$event.type.indexOf("key") &&
3970
+ _vm._k($event.keyCode, "left", 37, $event.key, [
3971
+ "Left",
3972
+ "ArrowLeft",
3973
+ ])
3974
+ ) {
3975
+ return null
3976
+ }
3977
+ if ("button" in $event && $event.button !== 0) {
3978
+ return null
3979
+ }
3980
+ $event.preventDefault();
3981
+ return _vm.arrowLeft.apply(null, arguments)
3982
+ },
3983
+ function ($event) {
3984
+ if (
3985
+ !$event.type.indexOf("key") &&
3986
+ _vm._k($event.keyCode, "right", 39, $event.key, [
3987
+ "Right",
3988
+ "ArrowRight",
3989
+ ])
3990
+ ) {
3991
+ return null
3992
+ }
3993
+ if ("button" in $event && $event.button !== 2) {
3994
+ return null
3995
+ }
3996
+ $event.preventDefault();
3997
+ return _vm.arrowRight.apply(null, arguments)
3998
+ },
3999
+ function ($event) {
4000
+ if (
4001
+ !$event.type.indexOf("key") &&
4002
+ _vm._k(
4003
+ $event.keyCode,
4004
+ "page-down",
4005
+ undefined,
4006
+ $event.key,
4007
+ undefined
4008
+ )
4009
+ ) {
4010
+ return null
4011
+ }
4012
+ if (!$event.shiftKey) {
4013
+ return null
4014
+ }
4015
+ $event.preventDefault();
4016
+ return _vm.nextLoopActivate.apply(null, arguments)
4017
+ },
4018
+ function ($event) {
4019
+ if (
4020
+ !$event.type.indexOf("key") &&
4021
+ _vm._k(
4022
+ $event.keyCode,
4023
+ "page-down",
4024
+ undefined,
4025
+ $event.key,
4026
+ undefined
4027
+ )
4028
+ ) {
4029
+ return null
4030
+ }
4031
+ $event.preventDefault();
4032
+ return _vm.next.apply(null, arguments)
4033
+ },
4034
+ function ($event) {
4035
+ if (
4036
+ !$event.type.indexOf("key") &&
4037
+ _vm._k(
4038
+ $event.keyCode,
4039
+ "page-up",
4040
+ undefined,
4041
+ $event.key,
4042
+ undefined
4043
+ )
4044
+ ) {
4045
+ return null
4046
+ }
4047
+ $event.preventDefault();
4048
+ return _vm.prev.apply(null, arguments)
4049
+ },
4050
+ function ($event) {
4051
+ if (
4052
+ !$event.type.indexOf("key") &&
4053
+ _vm._k(
4054
+ $event.keyCode,
4055
+ "page-up",
4056
+ undefined,
4057
+ $event.key,
4058
+ undefined
4059
+ )
4060
+ ) {
4061
+ return null
4062
+ }
4063
+ if (!$event.shiftKey) {
4064
+ return null
4065
+ }
4066
+ $event.preventDefault();
4067
+ return _vm.prevLoopActivate.apply(null, arguments)
4068
+ },
4069
+ function ($event) {
4070
+ if (!$event.type.indexOf("key") && $event.keyCode !== 83) {
4071
+ return null
4072
+ }
4073
+ $event.preventDefault();
4074
+ return _vm.setHourIni.apply(null, arguments)
4075
+ },
4076
+ function ($event) {
4077
+ if (!$event.type.indexOf("key") && $event.keyCode !== 69) {
4078
+ return null
4079
+ }
4080
+ $event.preventDefault();
4081
+ return _vm.setHourEnd.apply(null, arguments)
4082
+ },
4083
+ function ($event) {
4084
+ if (!$event.type.indexOf("key") && $event.keyCode !== 36) {
4085
+ return null
4086
+ }
4087
+ $event.preventDefault();
4088
+ return _vm.goToFirstFrame.apply(null, arguments)
4089
+ },
4090
+ function ($event) {
4091
+ if (!$event.type.indexOf("key") && $event.keyCode !== 35) {
4092
+ return null
4093
+ }
4094
+ $event.preventDefault();
4095
+ return _vm.goToLastFrame.apply(null, arguments)
4096
+ },
4097
+ function ($event) {
4098
+ if (!$event.type.indexOf("key") && $event.keyCode !== 71) {
4099
+ return null
4100
+ }
4101
+ $event.preventDefault();
4102
+ _vm.dialogs.goTo = true;
4103
+ },
4104
+ function ($event) {
4105
+ if (!$event.type.indexOf("key") && $event.keyCode !== 73) {
4106
+ return null
4107
+ }
4108
+ $event.preventDefault();
4109
+ _vm.dialogs.secondsPerFrame = true;
4110
+ },
4111
+ function ($event) {
4112
+ if (!$event.type.indexOf("key") && $event.keyCode !== 76) {
4113
+ return null
4114
+ }
4115
+ $event.preventDefault();
4116
+ _vm.dialogs.frames = true;
4117
+ },
4118
+ function ($event) {
4119
+ if (
4120
+ !$event.type.indexOf("key") &&
4121
+ $event.keyCode !== 49 &&
4122
+ $event.keyCode !== 97
4123
+ ) {
4124
+ return null
4125
+ }
4126
+ return function () {
4127
+ return (_vm.secondsPerFrame = 1)
4128
+ }.apply(null, arguments)
4129
+ },
4130
+ function ($event) {
4131
+ if (
4132
+ !$event.type.indexOf("key") &&
4133
+ $event.keyCode !== 50 &&
4134
+ $event.keyCode !== 98
4135
+ ) {
4136
+ return null
4137
+ }
4138
+ return function () {
4139
+ return (_vm.secondsPerFrame = 2)
4140
+ }.apply(null, arguments)
4141
+ },
4142
+ function ($event) {
4143
+ if (
4144
+ !$event.type.indexOf("key") &&
4145
+ $event.keyCode !== 51 &&
4146
+ $event.keyCode !== 99
4147
+ ) {
4148
+ return null
4149
+ }
4150
+ return function () {
4151
+ return (_vm.secondsPerFrame = 3)
4152
+ }.apply(null, arguments)
4153
+ },
4154
+ function ($event) {
4155
+ if (
4156
+ !$event.type.indexOf("key") &&
4157
+ $event.keyCode !== 52 &&
4158
+ $event.keyCode !== 100
4159
+ ) {
4160
+ return null
4161
+ }
4162
+ return function () {
4163
+ return (_vm.secondsPerFrame = 4)
4164
+ }.apply(null, arguments)
4165
+ },
4166
+ function ($event) {
4167
+ if (
4168
+ !$event.type.indexOf("key") &&
4169
+ $event.keyCode !== 53 &&
4170
+ $event.keyCode !== 101
4171
+ ) {
4172
+ return null
4173
+ }
4174
+ return function () {
4175
+ return (_vm.secondsPerFrame = 5)
4176
+ }.apply(null, arguments)
4177
+ },
4178
+ ],
4179
+ },
4180
+ })
4181
+ : _vm._e(),
4182
+ _vm._v(" "),
4183
+ _vm.prevLoop || _vm.nextLoop
4184
+ ? _c("GlobalEvents", {
4185
+ on: { keydown: _vm.breakLoop, click: _vm.breakLoop },
4186
+ })
4187
+ : _vm._e(),
4188
+ _vm._v(" "),
4189
+ _vm.active
4190
+ ? _c("settings", {
4191
+ attrs: {
4192
+ "dialogs-visibility": _vm.dialogs,
4193
+ "playback-rate": _vm.playbackRate,
4194
+ "seconds-per-frame": _vm.secondsPerFrame,
4195
+ "frames-per-row": _vm.framesPerRow,
4196
+ "number-of-rows": _vm.numberOfRows,
4197
+ },
4198
+ on: {
4199
+ "change-playback-rate": function (value) {
4200
+ return (_vm.playbackRate = value)
4201
+ },
4202
+ "change-go-to": _vm.changeHour,
4203
+ "change-seconds-per-frame": function (value) {
4204
+ return (_vm.secondsPerFrame = value)
4205
+ },
4206
+ "set-frames-selection": _vm.setFrameSelection,
4207
+ close: function (dialog) {
4208
+ return (_vm.dialogs[dialog] = false)
4209
+ },
4210
+ },
4211
+ })
4212
+ : _vm._e(),
4213
+ _vm._v(" "),
4214
+ _c(
4215
+ "div",
4216
+ {
4217
+ class: { "visualization-card": true, "active-tab": _vm.active },
4218
+ staticStyle: { width: "100%", padding: "0" },
4219
+ },
4220
+ [
4221
+ _c("command-bar", {
4222
+ directives: [
4223
+ {
4224
+ name: "show",
4225
+ rawName: "v-show",
4226
+ value: _vm.commandBarShow,
4227
+ expression: "commandBarShow",
4228
+ },
4229
+ ],
4230
+ attrs: {
4231
+ "video-playing": _vm.videoPlaying,
4232
+ "video-paused": _vm.paused,
4233
+ "insert-time": _vm.canInsertTime,
4234
+ "hour-ini-selected": !!_vm.hourIniSelected,
4235
+ "hour-end-selected": !!_vm.hourEndSelected,
4236
+ },
4237
+ on: {
4238
+ "prev-loop-activate": _vm.prevLoopActivate,
4239
+ "next-loop-activate": _vm.nextLoopActivate,
4240
+ prev: _vm.prev,
4241
+ next: _vm.next,
4242
+ "go-to": function ($event) {
4243
+ _vm.dialogs.goTo = true;
4244
+ },
4245
+ "open-frame-selection": function ($event) {
4246
+ _vm.dialogs.frames = true;
4247
+ },
4248
+ "open-frames-per-second": function ($event) {
4249
+ _vm.dialogs.secondsPerFrame = true;
4250
+ },
4251
+ "open-blocks": _vm.openBlocks,
4252
+ "open-playback-rate": function ($event) {
4253
+ _vm.dialogs.playbackRate = true;
4254
+ },
4255
+ "play-or-pause": _vm.playOrPause,
4256
+ "stop-playing": _vm.stopPlayingBar,
4257
+ "set-hour-ini": _vm.setHourIni,
4258
+ "set-hour-end": _vm.setHourEnd,
4259
+ "insert-time": _vm.insertTime,
4260
+ },
4261
+ }),
4262
+ _vm._v(" "),
4263
+ _vm.videoProgressBar
4264
+ ? _c("video-progress", {
4265
+ directives: [
4266
+ {
4267
+ name: "show",
4268
+ rawName: "v-show",
4269
+ value: _vm.videoPlaying,
4270
+ expression: "videoPlaying",
4271
+ },
4272
+ ],
4273
+ attrs: { "video-time": _vm.videoTime },
4274
+ })
4275
+ : _vm._e(),
4276
+ _vm._v(" "),
4277
+ _c("info-bar", {
4278
+ attrs: {
4279
+ "playback-rate": _vm.playbackRate,
4280
+ "seconds-per-frame": _vm.secondsPerFrame,
4281
+ "commands-show": _vm.commandBarShow,
4282
+ cache: _vm.useCache,
4283
+ "block-start-time": _vm.blockStartTime,
4284
+ "video-total-duration": _vm.videoSliderTotalDuration,
4285
+ "alternative-server": _vm.alternativeServer,
4286
+ "frames-per-row": _vm.framesPerRow,
4287
+ "number-of-rows": _vm.numberOfRows,
4288
+ "hour-ini": _vm.hourIniSelected,
4289
+ "hour-end": _vm.hourEndSelected,
4290
+ },
4291
+ on: {
4292
+ "toogle-commands-visibility": function ($event) {
4293
+ _vm.commandBarShow = !_vm.commandBarShow;
4294
+ },
4295
+ "toogle-cache": function ($event) {
4296
+ _vm.useCache = !_vm.useCache;
4297
+ },
4298
+ "change-server": _vm.changeServerClick,
4299
+ },
4300
+ }),
4301
+ _vm._v(" "),
4302
+ _vm._l(_vm.numberOfRows, function (rowNumber) {
4303
+ return _c(
4304
+ "div",
4305
+ {
4306
+ key: "row-" + rowNumber,
4307
+ staticClass: "visualization-row",
4308
+ staticStyle: { padding: "12px" },
4309
+ attrs: { id: "row-" + rowNumber },
4310
+ },
4311
+ [
4312
+ _vm._l(_vm.previousFrames, function (frame, frameNumber) {
4313
+ return _c(
4314
+ "div",
4315
+ {
4316
+ key:
4317
+ _vm.numberOfRows +
4318
+ "-" +
4319
+ _vm.framesPerRow +
4320
+ "-" +
4321
+ _vm.getIndex(
4322
+ rowNumber,
4323
+ frameNumber,
4324
+ _vm.Positions.previous
4325
+ ),
4326
+ staticStyle: { display: "none" },
4327
+ },
4328
+ [_c("span", { domProps: { innerHTML: _vm._s(frame.img) } })]
4329
+ )
4330
+ }),
4331
+ _vm._v(" "),
4332
+ _vm._l(_vm.nextFrames, function (frame, frameNumber) {
4333
+ return _c(
4334
+ "div",
4335
+ {
4336
+ key:
4337
+ _vm.numberOfRows +
4338
+ "-" +
4339
+ _vm.framesPerRow +
4340
+ "-" +
4341
+ _vm.getIndex(
4342
+ rowNumber,
4343
+ frameNumber,
4344
+ _vm.Positions.next
4345
+ ),
4346
+ staticStyle: { display: "none" },
4347
+ },
4348
+ [_c("span", { domProps: { innerHTML: _vm._s(frame.img) } })]
4349
+ )
4350
+ }),
4351
+ _vm._v(" "),
4352
+ _vm._l(
4353
+ _vm.frames.slice(
4354
+ _vm.framesPerRow * (rowNumber - 1),
4355
+ _vm.framesPerRow * rowNumber
4356
+ ),
4357
+ function (frame, frameNumber) {
4358
+ return _c(
4359
+ "div",
4360
+ {
4361
+ key: "row-" + rowNumber + "-frame-" + frameNumber,
4362
+ staticClass: "visualization-col",
4363
+ class: { loaderImg: !!frame.img },
4364
+ attrs: {
4365
+ id:
4366
+ "frame-" +
4367
+ _vm.getIndex(
4368
+ rowNumber,
4369
+ frameNumber,
4370
+ _vm.Positions.current
4371
+ ),
4372
+ },
4373
+ on: {
4374
+ click: function ($event) {
4375
+ frame.time
4376
+ ? _vm.selectFrame(
4377
+ _vm.getIndex(
4378
+ rowNumber,
4379
+ frameNumber,
4380
+ _vm.Positions.current
4381
+ ),
4382
+ frame
4383
+ )
4384
+ : null;
4385
+ },
4386
+ },
4387
+ },
4388
+ [
4389
+ _c(
4390
+ "span",
4391
+ {
4392
+ staticStyle: { "padding-left": "4px" },
4393
+ attrs: { id: _vm.activeFrame ? "aa" : 0 },
4394
+ },
4395
+ [
4396
+ _c("b", [
4397
+ _vm._v(
4398
+ "\n " +
4399
+ _vm._s(
4400
+ _vm.getAudienceTime(
4401
+ frame.time,
4402
+ rowNumber,
4403
+ frameNumber,
4404
+ _vm.Positions.current
4405
+ )
4406
+ ) +
4407
+ "\n "
4408
+ ),
4409
+ ]),
4410
+ ]
4411
+ ),
4412
+ _vm._v(" "),
4413
+ _c("frame", {
4414
+ ref: "frames",
4415
+ refInFor: true,
4416
+ staticStyle: { margin: "0 auto" },
4417
+ attrs: {
4418
+ frame: frame,
4419
+ index: _vm.getIndex(
4420
+ rowNumber,
4421
+ frameNumber,
4422
+ _vm.Positions.current
4423
+ ),
4424
+ "grid-settings": {
4425
+ numberOfRows: _vm.numberOfRows,
4426
+ framesPerRow: _vm.framesPerRow,
4427
+ },
4428
+ initialTime: frame.time === _vm.hourIniSelected,
4429
+ endTime: frame.time === _vm.hourEndSelected,
4430
+ betweenTime:
4431
+ frame.time > _vm.hourIniSelected &&
4432
+ frame.time < _vm.hourEndSelected,
4433
+ active:
4434
+ _vm.getIndex(
4435
+ rowNumber,
4436
+ frameNumber,
4437
+ _vm.Positions.current
4438
+ ) === _vm.activeFrame,
4439
+ activeTab: _vm.active,
4440
+ videoUrl: _vm.fInterface
4441
+ ? _vm.fInterface.getVideoUrl(frame)
4442
+ : "",
4443
+ "playback-rate": _vm.playbackRate,
4444
+ },
4445
+ on: {
4446
+ startPlaying: _vm.startPlaying,
4447
+ stopPlaying: _vm.stopPlaying,
4448
+ playPauseStatus: _vm.changePlayPause,
4449
+ updateSlider: _vm.updateSlider,
4450
+ },
4451
+ }),
4452
+ ],
4453
+ 1
4454
+ )
4455
+ }
4456
+ ),
4457
+ ],
4458
+ 2
4459
+ )
4460
+ }),
4461
+ ],
4462
+ 2
4463
+ ),
4464
+ ],
4465
+ 1
4466
+ )
4467
+ };
4468
+ var __vue_staticRenderFns__ = [];
4469
+ __vue_render__._withStripped = true;
4470
+
4471
+ /* style */
4472
+ const __vue_inject_styles__ = function (inject) {
4473
+ if (!inject) return
4474
+ inject("data-v-e02ee6e8_0", { source: "\n.visualization-row[data-v-e02ee6e8],[data-v-e02ee6e8] .visualization-row {\n display: flex;\n flex-wrap: wrap;\n flex: 1 1 auto;\n}\n.visualization-col[data-v-e02ee6e8] {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n padding: 12px;\n}\n.visualization-divider[data-v-e02ee6e8] {\n display: block;\n flex: 1 1 100%;\n height: 0px;\n max-height: 0px;\n opacity: 1;\n transition: inherit;\n border-style: solid;\n border-width: thin 0 0 0;\n border-color: rgba(0, 0, 0, 0.12);\n margin: 0;\n}\n.visualization-divider.vertical[data-v-e02ee6e8] {\n align-self: stretch;\n border-width: 0 thin 0 0;\n display: inline-flex;\n height: inherit;\n margin-left: -1px;\n max-height: 100%;\n max-width: 0px;\n vertical-align: text-bottom;\n width: 0px;\n}\n.visualization-card[data-v-e02ee6e8] {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n padding: 12px;\n width: 100%;\n transition-property: box-shadow, opacity, -webkit-box-shadow;\n overflow-wrap: break-word;\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}\n.visualization-justify-center[data-v-e02ee6e8],[data-v-e02ee6e8] .visualization-justify-center {\n justify-content: center;\n}\n.visualization-align-center[data-v-e02ee6e8] {\n align-items: center;\n}\n#visualization-container[data-v-e02ee6e8] {\n max-width: 100% !important;\n margin: 0 auto !important;\n height: 100%;\n border-bottom: none;\n}\n#visualization-container > .card[data-v-e02ee6e8] {\n border-radius: 0 !important;\n font-size: 12px;\n width: 100%;\n box-shadow: none;\n height: 100%;\n}\n#command-bar[data-v-e02ee6e8],\n#info-bar[data-v-e02ee6e8] {\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}\n#command-bar button[data-v-e02ee6e8] {\n width: 42px;\n height: 36px;\n border: none;\n background: none;\n}\n#command-bar button[data-v-e02ee6e8]:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.12);\n}\n#command-bar svg[data-v-e02ee6e8] {\n font-size: 16px;\n}\n#command-bar[data-v-e02ee6e8] {\n padding: 0 !important;\n}\n#info-bar[data-v-e02ee6e8] {\n padding: 4px;\n font-size: 14px;\n position: relative;\n}\n.settings-container[data-v-e02ee6e8] {\n position: absolute;\n right: 14px;\n top: 50%;\n transform: translateY(-50%);\n}\n.settings-container > *[data-v-e02ee6e8] {\n margin: 0 2px;\n cursor: pointer;\n}\n#info-bar svg[data-v-e02ee6e8] {\n font-size: 16px;\n}\n#info-bar .divider[data-v-e02ee6e8] {\n margin: 0 8px;\n}\nsvg[data-v-e02ee6e8]:focus {\n border: none;\n}\n.visualization-card[data-v-e02ee6e8] {\n border-left: 8px solid #eee;\n}\n.active-tab[data-v-e02ee6e8] {\n border-left: 8px solid var(--visualization-primary) !important;\n border-image-slice: 1;\n}\n[id^='frame-'][data-v-e02ee6e8] {\n padding: 1px;\n display: flex;\n flex-flow: column;\n}\n.tooltip[data-v-e02ee6e8] {\n display: block !important;\n z-index: 10000;\n}\n.tooltip .tooltip-inner[data-v-e02ee6e8] {\n background: var(--visualization-primary);\n color: white;\n border-radius: 16px;\n padding: 5px 10px 4px;\n}\n.tooltip .tooltip-arrow[data-v-e02ee6e8] {\n width: 0;\n height: 0;\n border-style: solid;\n position: absolute;\n margin: 5px;\n border-color: var(--visualization-primary);\n z-index: 1;\n}\n.tooltip[x-placement^='top'][data-v-e02ee6e8] {\n margin-bottom: 5px;\n}\n.tooltip[x-placement^='top'] .tooltip-arrow[data-v-e02ee6e8] {\n border-width: 5px 5px 0 5px;\n border-left-color: transparent !important;\n border-right-color: transparent !important;\n border-bottom-color: transparent !important;\n bottom: -5px;\n left: calc(50% - 5px);\n margin-top: 0;\n margin-bottom: 0;\n}\n.tooltip[x-placement^='bottom'][data-v-e02ee6e8] {\n margin-top: 5px;\n}\n.tooltip[x-placement^='bottom'] .tooltip-arrow[data-v-e02ee6e8] {\n border-width: 0 5px 5px 5px;\n border-left-color: transparent !important;\n border-right-color: transparent !important;\n border-top-color: transparent !important;\n top: -5px;\n left: calc(50% - 5px);\n margin-top: 0;\n margin-bottom: 0;\n}\n.tooltip[x-placement^='right'][data-v-e02ee6e8] {\n margin-left: 5px;\n}\n.tooltip[x-placement^='right'] .tooltip-arrow[data-v-e02ee6e8] {\n border-width: 5px 5px 5px 0;\n border-left-color: transparent !important;\n border-top-color: transparent !important;\n border-bottom-color: transparent !important;\n left: -5px;\n top: calc(50% - 5px);\n margin-left: 0;\n margin-right: 0;\n}\n.tooltip[x-placement^='left'][data-v-e02ee6e8] {\n margin-right: 5px;\n}\n.tooltip[x-placement^='left'] .tooltip-arrow[data-v-e02ee6e8] {\n border-width: 5px 0 5px 5px;\n border-top-color: transparent !important;\n border-right-color: transparent !important;\n border-bottom-color: transparent !important;\n right: -5px;\n top: calc(50% - 5px);\n margin-left: 0;\n margin-right: 0;\n}\n.tooltip.popover .popover-inner[data-v-e02ee6e8] {\n background: #f9f9f9;\n color: black;\n padding: 24px;\n border-radius: 5px;\n box-shadow: 0 5px 30px rgba(black, 0.1);\n}\n.tooltip.popover .popover-arrow[data-v-e02ee6e8] {\n border-color: #f9f9f9;\n}\n.tooltip[aria-hidden='true'][data-v-e02ee6e8] {\n visibility: hidden;\n opacity: 0;\n transition: opacity 0.15s, visibility 0.15s;\n}\n.tooltip[aria-hidden='false'][data-v-e02ee6e8] {\n visibility: visible;\n opacity: 1;\n transition: opacity 0.15s;\n}\n", map: {"version":3,"sources":["C:\\workspace\\visualization\\src\\Visualization.vue"],"names":[],"mappings":";AA0mCA;EACA,aAAA;EACA,eAAA;EACA,cAAA;AACA;AAEA;EACA,aAAA;EACA,YAAA;EACA,eAAA;EACA,aAAA;AACA;AAEA;EACA,cAAA;EACA,cAAA;EACA,WAAA;EACA,eAAA;EACA,UAAA;EACA,mBAAA;EACA,mBAAA;EACA,wBAAA;EACA,iCAAA;EACA,SAAA;AACA;AAEA;EACA,mBAAA;EACA,wBAAA;EACA,oBAAA;EACA,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,cAAA;EACA,2BAAA;EACA,UAAA;AACA;AAEA;EACA,aAAA;EACA,YAAA;EACA,eAAA;EACA,aAAA;EACA,WAAA;EACA,4DAAA;EACA,yBAAA;EACA;qCACA;AACA;AAEA;EACA,uBAAA;AACA;AAEA;EACA,mBAAA;AACA;AAEA;EACA,0BAAA;EACA,yBAAA;EACA,YAAA;EACA,mBAAA;AACA;AACA;EACA,2BAAA;EACA,eAAA;EACA,WAAA;EACA,gBAAA;EACA,YAAA;AACA;AAEA;;EAEA,yBAAA;EACA;mCACA;AACA;AACA;EACA,WAAA;EACA,YAAA;EACA,YAAA;EACA,gBAAA;AACA;AAEA;EACA,eAAA;EACA,+BAAA;AACA;AAEA;EACA,eAAA;AACA;AAEA;EACA,qBAAA;AACA;AAEA;EACA,YAAA;EACA,eAAA;EACA,kBAAA;AACA;AAEA;EACA,kBAAA;EACA,WAAA;EACA,QAAA;EACA,2BAAA;AACA;AAEA;EACA,aAAA;EACA,eAAA;AACA;AAEA;EACA,eAAA;AACA;AAEA;EACA,aAAA;AACA;AAEA;EACA,YAAA;AACA;AAEA;EACA,2BAAA;AACA;AAEA;EACA,8DAAA;EACA,qBAAA;AACA;AAEA;EACA,YAAA;EACA,aAAA;EACA,iBAAA;AACA;AAEA;EACA,yBAAA;EACA,cAAA;AACA;AAEA;EACA,wCAAA;EACA,YAAA;EACA,mBAAA;EACA,qBAAA;AACA;AAEA;EACA,QAAA;EACA,SAAA;EACA,mBAAA;EACA,kBAAA;EACA,WAAA;EACA,0CAAA;EACA,UAAA;AACA;AAEA;EACA,kBAAA;AACA;AAEA;EACA,2BAAA;EACA,yCAAA;EACA,0CAAA;EACA,2CAAA;EACA,YAAA;EACA,qBAAA;EACA,aAAA;EACA,gBAAA;AACA;AAEA;EACA,eAAA;AACA;AAEA;EACA,2BAAA;EACA,yCAAA;EACA,0CAAA;EACA,wCAAA;EACA,SAAA;EACA,qBAAA;EACA,aAAA;EACA,gBAAA;AACA;AAEA;EACA,gBAAA;AACA;AAEA;EACA,2BAAA;EACA,yCAAA;EACA,wCAAA;EACA,2CAAA;EACA,UAAA;EACA,oBAAA;EACA,cAAA;EACA,eAAA;AACA;AAEA;EACA,iBAAA;AACA;AAEA;EACA,2BAAA;EACA,wCAAA;EACA,0CAAA;EACA,2CAAA;EACA,WAAA;EACA,oBAAA;EACA,cAAA;EACA,eAAA;AACA;AAEA;EACA,mBAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,uCAAA;AACA;AAEA;EACA,qBAAA;AACA;AAEA;EACA,kBAAA;EACA,UAAA;EACA,2CAAA;AACA;AAEA;EACA,mBAAA;EACA,UAAA;EACA,yBAAA;AACA","file":"Visualization.vue","sourcesContent":["<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.visualization-row, /deep/ .visualization-row {\n display: flex;\n flex-wrap: wrap;\n flex: 1 1 auto;\n}\n\n.visualization-col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n padding: 12px;\n}\n\n.visualization-divider {\n display: block;\n flex: 1 1 100%;\n height: 0px;\n max-height: 0px;\n opacity: 1;\n transition: inherit;\n border-style: solid;\n border-width: thin 0 0 0;\n border-color: rgba(0, 0, 0, 0.12);\n margin: 0;\n}\n\n.visualization-divider.vertical {\n align-self: stretch;\n border-width: 0 thin 0 0;\n display: inline-flex;\n height: inherit;\n margin-left: -1px;\n max-height: 100%;\n max-width: 0px;\n vertical-align: text-bottom;\n width: 0px;\n}\n\n.visualization-card {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n padding: 12px;\n width: 100%;\n transition-property: box-shadow, opacity, -webkit-box-shadow;\n overflow-wrap: break-word;\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}\n\n.visualization-justify-center, /deep/ .visualization-justify-center {\n justify-content: center;\n}\n\n.visualization-align-center {\n align-items: center;\n}\n\n#visualization-container {\n max-width: 100% !important;\n margin: 0 auto !important;\n height: 100%;\n border-bottom: none;\n}\n#visualization-container > .card {\n border-radius: 0 !important;\n font-size: 12px;\n width: 100%;\n box-shadow: none;\n height: 100%;\n}\n\n#command-bar,\n#info-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}\n#command-bar button {\n width: 42px;\n height: 36px;\n border: none;\n background: none;\n}\n\n#command-bar button:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.12);\n}\n\n#command-bar svg {\n font-size: 16px;\n}\n\n#command-bar {\n padding: 0 !important;\n}\n\n#info-bar {\n padding: 4px;\n font-size: 14px;\n position: relative;\n}\n\n.settings-container {\n position: absolute;\n right: 14px;\n top: 50%;\n transform: translateY(-50%);\n}\n\n.settings-container > * {\n margin: 0 2px;\n cursor: pointer;\n}\n\n#info-bar svg {\n font-size: 16px;\n}\n\n#info-bar .divider {\n margin: 0 8px;\n}\n\nsvg:focus {\n border: none;\n}\n\n.visualization-card {\n border-left: 8px solid #eee;\n}\n\n.active-tab {\n border-left: 8px solid var(--visualization-primary) !important;\n border-image-slice: 1;\n}\n\n[id^='frame-'] {\n padding: 1px;\n display: flex;\n flex-flow: column;\n}\n\n.tooltip {\n display: block !important;\n z-index: 10000;\n}\n\n.tooltip .tooltip-inner {\n background: var(--visualization-primary);\n color: white;\n border-radius: 16px;\n padding: 5px 10px 4px;\n}\n\n.tooltip .tooltip-arrow {\n width: 0;\n height: 0;\n border-style: solid;\n position: absolute;\n margin: 5px;\n border-color: var(--visualization-primary);\n z-index: 1;\n}\n\n.tooltip[x-placement^='top'] {\n margin-bottom: 5px;\n}\n\n.tooltip[x-placement^='top'] .tooltip-arrow {\n border-width: 5px 5px 0 5px;\n border-left-color: transparent !important;\n border-right-color: transparent !important;\n border-bottom-color: transparent !important;\n bottom: -5px;\n left: calc(50% - 5px);\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.tooltip[x-placement^='bottom'] {\n margin-top: 5px;\n}\n\n.tooltip[x-placement^='bottom'] .tooltip-arrow {\n border-width: 0 5px 5px 5px;\n border-left-color: transparent !important;\n border-right-color: transparent !important;\n border-top-color: transparent !important;\n top: -5px;\n left: calc(50% - 5px);\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.tooltip[x-placement^='right'] {\n margin-left: 5px;\n}\n\n.tooltip[x-placement^='right'] .tooltip-arrow {\n border-width: 5px 5px 5px 0;\n border-left-color: transparent !important;\n border-top-color: transparent !important;\n border-bottom-color: transparent !important;\n left: -5px;\n top: calc(50% - 5px);\n margin-left: 0;\n margin-right: 0;\n}\n\n.tooltip[x-placement^='left'] {\n margin-right: 5px;\n}\n\n.tooltip[x-placement^='left'] .tooltip-arrow {\n border-width: 5px 0 5px 5px;\n border-top-color: transparent !important;\n border-right-color: transparent !important;\n border-bottom-color: transparent !important;\n right: -5px;\n top: calc(50% - 5px);\n margin-left: 0;\n margin-right: 0;\n}\n\n.tooltip.popover .popover-inner {\n background: #f9f9f9;\n color: black;\n padding: 24px;\n border-radius: 5px;\n box-shadow: 0 5px 30px rgba(black, 0.1);\n}\n\n.tooltip.popover .popover-arrow {\n border-color: #f9f9f9;\n}\n\n.tooltip[aria-hidden='true'] {\n visibility: hidden;\n opacity: 0;\n transition: opacity 0.15s, visibility 0.15s;\n}\n\n.tooltip[aria-hidden='false'] {\n visibility: visible;\n opacity: 1;\n transition: opacity 0.15s;\n}\n</style>\n"]}, media: undefined });
4475
+
4476
+ };
4477
+ /* scoped */
4478
+ const __vue_scope_id__ = "data-v-e02ee6e8";
4479
+ /* module identifier */
4480
+ const __vue_module_identifier__ = undefined;
4481
+ /* functional template */
4482
+ const __vue_is_functional_template__ = false;
4483
+ /* style inject SSR */
4484
+
4485
+ /* style inject shadow dom */
4486
+
4487
+
4488
+
4489
+ const __vue_component__ = /*#__PURE__*/normalizeComponent(
4490
+ { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
4491
+ __vue_inject_styles__,
4492
+ __vue_script__,
4493
+ __vue_scope_id__,
4494
+ __vue_is_functional_template__,
4495
+ __vue_module_identifier__,
4496
+ false,
4497
+ createInjector,
4498
+ undefined,
4499
+ undefined
4500
+ );
4501
+
4502
+ var Visualization = /*#__PURE__*/Object.freeze({
2635
4503
  __proto__: null,
2636
- 'default': Visualization
4504
+ 'default': __vue_component__
2637
4505
  });
2638
4506
 
2639
4507
  export { index as default };