@saooti/octopus-sdk 37.0.18 → 37.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +19 -19
- package/src/components/display/emission/EmissionInlineList.vue +4 -4
- package/src/components/display/filter/AdvancedSearch.vue +3 -4
- package/src/components/display/list/ListPaginate.vue +1 -1
- package/src/components/display/list/SwiperList.vue +13 -9
- package/src/components/display/live/LiveItem.vue +10 -1
- package/src/components/display/playlist/PodcastPlaylistInlineList.vue +3 -3
- package/src/components/display/podcasts/PodcastImage.vue +17 -12
- package/src/components/display/podcasts/PodcastInlineListClassic.vue +3 -3
- package/src/components/display/sharing/ShareDistribution.vue +1 -1
- package/src/components/display/sharing/SharePlayer.vue +9 -8
- package/src/components/display/sharing/SharePlayerTypes.vue +7 -18
- package/src/components/display/sharing/SubscribeButtons.vue +6 -1
- package/src/components/form/ClassicDatePicker.vue +46 -33
- package/src/components/misc/ClassicPopover.vue +6 -4
- package/src/components/misc/player/PlayerCompact.vue +1 -1
- package/src/components/misc/player/PlayerComponent.vue +8 -10
- package/src/components/misc/player/PlayerLarge.vue +1 -1
- package/src/components/misc/player/PlayerVideo.vue +24 -29
- package/src/components/misc/player/PlayerVideoDigiteka.vue +28 -26
- package/src/components/misc/player/PlayerVideoHls.vue +80 -69
- package/src/components/misc/player/radio/RadioHistory.vue +12 -9
- package/src/components/misc/player/radio/RadioProgressBar.vue +2 -2
- package/src/components/pages/EmissionPage.vue +1 -1
- package/src/components/pages/PodcastPage.vue +1 -1
- package/src/locale/de.ts +16 -17
- package/src/locale/en.ts +15 -16
- package/src/locale/es.ts +16 -17
- package/src/locale/fr.ts +16 -16
- package/src/locale/it.ts +329 -332
- package/src/locale/sl.ts +16 -17
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div
|
|
3
3
|
class="player-container"
|
|
4
|
-
:class="playerVideo? 'player-video':''"
|
|
4
|
+
:class="playerVideo ? 'player-video' : ''"
|
|
5
5
|
:style="{ height: playerHeight }"
|
|
6
6
|
@transitionend="onHidden"
|
|
7
7
|
>
|
|
8
8
|
<template v-if="display">
|
|
9
|
-
<PlayerVideo v-if="playerVideo"/>
|
|
9
|
+
<PlayerVideo v-if="playerVideo" />
|
|
10
10
|
<template v-else>
|
|
11
11
|
<audio
|
|
12
12
|
id="audio-player"
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
:percent-live-progress="percentLiveProgress"
|
|
30
30
|
:duration-live-position="durationLivePosition"
|
|
31
31
|
:listen-time="listenTime"
|
|
32
|
-
:
|
|
32
|
+
:hls-ready="hlsReady"
|
|
33
33
|
@stop-player="stopPlayer"
|
|
34
34
|
@change-player-large-version="playerUpdateLargeVersion(true)"
|
|
35
35
|
/>
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
:percent-live-progress="percentLiveProgress"
|
|
43
43
|
:duration-live-position="durationLivePosition"
|
|
44
44
|
:listen-time="listenTime"
|
|
45
|
-
:
|
|
45
|
+
:hls-ready="hlsReady"
|
|
46
46
|
@stop-player="stopPlayer"
|
|
47
47
|
@change-player-large-version="playerUpdateLargeVersion(false)"
|
|
48
48
|
/>
|
|
@@ -58,16 +58,14 @@ import PlayerLarge from "../player/PlayerLarge.vue";
|
|
|
58
58
|
import { usePlayerStore } from "@/stores/PlayerStore";
|
|
59
59
|
import { mapState, mapActions } from "pinia";
|
|
60
60
|
import { defineComponent, defineAsyncComponent } from "vue";
|
|
61
|
-
const PlayerVideo = defineAsyncComponent(
|
|
62
|
-
() => import("./PlayerVideo.vue"),
|
|
63
|
-
);
|
|
61
|
+
const PlayerVideo = defineAsyncComponent(() => import("./PlayerVideo.vue"));
|
|
64
62
|
export default defineComponent({
|
|
65
63
|
name: "PlayerComponent",
|
|
66
64
|
|
|
67
65
|
components: {
|
|
68
66
|
PlayerCompact,
|
|
69
67
|
PlayerLarge,
|
|
70
|
-
PlayerVideo
|
|
68
|
+
PlayerVideo,
|
|
71
69
|
},
|
|
72
70
|
mixins: [playerLogic],
|
|
73
71
|
emits: ["hide"],
|
|
@@ -93,7 +91,7 @@ export default defineComponent({
|
|
|
93
91
|
"playerStatus",
|
|
94
92
|
"playerHeight",
|
|
95
93
|
"playerLargeVersion",
|
|
96
|
-
"playerVideo"
|
|
94
|
+
"playerVideo",
|
|
97
95
|
]),
|
|
98
96
|
display() {
|
|
99
97
|
return "STOPPED" !== this.playerStatus;
|
|
@@ -129,7 +127,7 @@ export default defineComponent({
|
|
|
129
127
|
|
|
130
128
|
<style lang="scss">
|
|
131
129
|
.octopus-app {
|
|
132
|
-
.player-container{
|
|
130
|
+
.player-container {
|
|
133
131
|
max-height: 94%;
|
|
134
132
|
position: sticky;
|
|
135
133
|
overflow: hidden;
|
|
@@ -118,7 +118,7 @@ export default defineComponent({
|
|
|
118
118
|
percentLiveProgress: { default: 0, type: Number },
|
|
119
119
|
durationLivePosition: { default: 0, type: Number },
|
|
120
120
|
listenTime: { default: 0, type: Number },
|
|
121
|
-
hlsReady: { default: false
|
|
121
|
+
hlsReady: { default: false, type: Boolean },
|
|
122
122
|
},
|
|
123
123
|
|
|
124
124
|
emits: ["stopPlayer", "update:notListenTime", "changePlayerLargeVersion"],
|
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<teleport to=".octopus-app">
|
|
3
3
|
<template v-if="playerVideo">
|
|
4
|
-
<button
|
|
4
|
+
<button
|
|
5
5
|
class="btn btn-transparent video-close saooti-remove"
|
|
6
6
|
@click="closePlayer"
|
|
7
7
|
/>
|
|
8
8
|
<div class="video-wrapper">
|
|
9
|
-
<PlayerVideoDigiteka
|
|
10
|
-
|
|
11
|
-
/>
|
|
12
|
-
<PlayerVideoHls
|
|
13
|
-
v-else
|
|
14
|
-
:hls-url="hlsUrl"
|
|
15
|
-
/>
|
|
9
|
+
<PlayerVideoDigiteka v-if="!playerLive" />
|
|
10
|
+
<PlayerVideoHls v-else :hls-url="hlsUrl" />
|
|
16
11
|
</div>
|
|
17
12
|
</template>
|
|
18
13
|
</teleport>
|
|
@@ -33,24 +28,24 @@ export default defineComponent({
|
|
|
33
28
|
|
|
34
29
|
components: {
|
|
35
30
|
PlayerVideoDigiteka,
|
|
36
|
-
PlayerVideoHls
|
|
31
|
+
PlayerVideoHls,
|
|
37
32
|
},
|
|
38
33
|
data() {
|
|
39
|
-
return {
|
|
40
|
-
};
|
|
34
|
+
return {};
|
|
41
35
|
},
|
|
42
36
|
computed: {
|
|
43
37
|
...mapState(usePlayerStore, ["playerVideo", "playerLive"]),
|
|
44
|
-
hlsUrl(): string{
|
|
45
|
-
if(!this.playerLive){
|
|
38
|
+
hlsUrl(): string {
|
|
39
|
+
if (!this.playerLive) {
|
|
40
|
+
return "";
|
|
41
|
+
}
|
|
46
42
|
return `${state.podcastPage.hlsUri}live/video_dev.${this.playerLive.conferenceId}/index.m3u8`;
|
|
47
|
-
|
|
48
|
-
}
|
|
43
|
+
},
|
|
49
44
|
},
|
|
50
45
|
|
|
51
46
|
methods: {
|
|
52
|
-
...mapActions(usePlayerStore, ["playerPlay"
|
|
53
|
-
closePlayer(){
|
|
47
|
+
...mapActions(usePlayerStore, ["playerPlay"]),
|
|
48
|
+
closePlayer() {
|
|
54
49
|
this.playerPlay();
|
|
55
50
|
},
|
|
56
51
|
},
|
|
@@ -59,7 +54,7 @@ export default defineComponent({
|
|
|
59
54
|
|
|
60
55
|
<style lang="scss">
|
|
61
56
|
.octopus-app {
|
|
62
|
-
.video-wrapper{
|
|
57
|
+
.video-wrapper {
|
|
63
58
|
border-radius: 1rem;
|
|
64
59
|
overflow: hidden;
|
|
65
60
|
position: fixed;
|
|
@@ -67,24 +62,24 @@ export default defineComponent({
|
|
|
67
62
|
right: 0;
|
|
68
63
|
z-index: 10;
|
|
69
64
|
}
|
|
70
|
-
.video-close{
|
|
65
|
+
.video-close {
|
|
71
66
|
position: fixed;
|
|
72
67
|
bottom: 16.5rem;
|
|
73
68
|
right: 1rem;
|
|
74
69
|
}
|
|
75
70
|
@media (max-width: 500px) {
|
|
76
|
-
.video-wrapper{
|
|
77
|
-
position:relative;
|
|
78
|
-
padding-bottom:56.25%;
|
|
79
|
-
height:0;
|
|
71
|
+
.video-wrapper {
|
|
72
|
+
position: relative;
|
|
73
|
+
padding-bottom: 56.25%;
|
|
74
|
+
height: 0;
|
|
80
75
|
}
|
|
81
76
|
.video-wrapper iframe {
|
|
82
|
-
position:absolute;
|
|
83
|
-
top:0;
|
|
84
|
-
left:0;
|
|
85
|
-
width:100% !important;
|
|
86
|
-
height:100%;
|
|
87
|
-
margin:0 !important;
|
|
77
|
+
position: absolute;
|
|
78
|
+
top: 0;
|
|
79
|
+
left: 0;
|
|
80
|
+
width: 100% !important;
|
|
81
|
+
height: 100%;
|
|
82
|
+
margin: 0 !important;
|
|
88
83
|
}
|
|
89
84
|
}
|
|
90
85
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<iframe
|
|
2
|
+
<iframe
|
|
3
3
|
ref="iframeVideo"
|
|
4
4
|
:src="srcVideo"
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
:title="$t('Video')"
|
|
6
|
+
width="500"
|
|
7
|
+
height="281"
|
|
8
|
+
style="z-index: 1"
|
|
9
|
+
allowfullscreen="true"
|
|
10
|
+
allow="autoplay"
|
|
10
11
|
referrerpolicy="no-referrer-when-downgrade"
|
|
11
12
|
></iframe>
|
|
12
13
|
</template>
|
|
@@ -17,32 +18,34 @@ import { mapState } from "pinia";
|
|
|
17
18
|
import { defineComponent } from "vue";
|
|
18
19
|
export default defineComponent({
|
|
19
20
|
name: "PlayerVideo",
|
|
20
|
-
components: {
|
|
21
|
-
},
|
|
21
|
+
components: {},
|
|
22
22
|
|
|
23
|
-
computed:{
|
|
24
|
-
...mapState(usePlayerStore, [
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
23
|
+
computed: {
|
|
24
|
+
...mapState(usePlayerStore, ["playerPodcast", "playerVideo"]),
|
|
25
|
+
srcVideo(): string {
|
|
26
|
+
if (this.playerVideo) {
|
|
27
|
+
return (
|
|
28
|
+
"//www.ultimedia.com/deliver/generic/iframe/mdtk/01009833/zone/1/showtitle/1/src/" +
|
|
29
|
+
this.playerPodcast?.video?.videoId +
|
|
30
|
+
"/autoplay/1"
|
|
31
|
+
);
|
|
31
32
|
}
|
|
32
33
|
return "";
|
|
33
|
-
}
|
|
34
|
+
},
|
|
34
35
|
},
|
|
35
|
-
watch:{
|
|
36
|
+
watch: {
|
|
36
37
|
srcVideo() {
|
|
37
38
|
this.goFullScreen();
|
|
38
39
|
},
|
|
39
40
|
},
|
|
40
|
-
mounted(){
|
|
41
|
+
mounted() {
|
|
41
42
|
this.goFullScreen();
|
|
42
43
|
},
|
|
43
|
-
methods:{
|
|
44
|
-
goFullScreen(){
|
|
45
|
-
if(""===this.srcVideo){
|
|
44
|
+
methods: {
|
|
45
|
+
goFullScreen() {
|
|
46
|
+
if ("" === this.srcVideo) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
46
49
|
switch (screen.orientation.type) {
|
|
47
50
|
case "landscape-primary":
|
|
48
51
|
case "landscape-secondary":
|
|
@@ -55,8 +58,7 @@ export default defineComponent({
|
|
|
55
58
|
default:
|
|
56
59
|
console.log("The orientation API isn't supported in this browser :(");
|
|
57
60
|
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
+
},
|
|
62
|
+
},
|
|
61
63
|
});
|
|
62
|
-
</script>
|
|
64
|
+
</script>
|
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div id="player-video-hls" class="video-player">
|
|
3
|
-
<div v-if="errorPlay.length" class="video-live-error">{{errorPlay}}</div>
|
|
4
|
-
<video
|
|
3
|
+
<div v-if="errorPlay.length" class="video-live-error">{{ errorPlay }}</div>
|
|
4
|
+
<video
|
|
5
|
+
id="video-element-hls"
|
|
6
|
+
ref="videoelement"
|
|
7
|
+
class="video-js"
|
|
8
|
+
playsinline
|
|
9
|
+
></video>
|
|
5
10
|
</div>
|
|
6
11
|
</template>
|
|
7
12
|
<script lang="ts">
|
|
8
|
-
import videojs, { VideoJsPlayer } from
|
|
9
|
-
import qualitySelector from
|
|
10
|
-
import qualityLevels from
|
|
11
|
-
if (!videojs.getPlugin(
|
|
12
|
-
videojs.registerPlugin(
|
|
13
|
+
import videojs, { VideoJsPlayer } from "video.js";
|
|
14
|
+
import qualitySelector from "videojs-hls-quality-selector";
|
|
15
|
+
import qualityLevels from "videojs-contrib-quality-levels";
|
|
16
|
+
if (!videojs.getPlugin("qualityLevels")) {
|
|
17
|
+
videojs.registerPlugin("qualityLevels", qualityLevels);
|
|
13
18
|
}
|
|
14
|
-
if (!videojs.getPlugin(
|
|
15
|
-
videojs.registerPlugin(
|
|
19
|
+
if (!videojs.getPlugin("hlsQualitySelector")) {
|
|
20
|
+
videojs.registerPlugin("hlsQualitySelector", qualitySelector);
|
|
16
21
|
}
|
|
17
|
-
import { defineComponent } from
|
|
22
|
+
import { defineComponent } from "vue";
|
|
18
23
|
export default defineComponent({
|
|
19
24
|
name: "PlayerVideoHls",
|
|
20
25
|
|
|
@@ -22,21 +27,21 @@ export default defineComponent({
|
|
|
22
27
|
hlsUrl: { default: "", type: String },
|
|
23
28
|
},
|
|
24
29
|
|
|
25
|
-
emits:[
|
|
30
|
+
emits: ["changeValid"],
|
|
26
31
|
data() {
|
|
27
32
|
return {
|
|
28
33
|
errorPlay: "" as string,
|
|
29
34
|
useVideoSrc: false as boolean,
|
|
30
|
-
player: undefined as VideoJsPlayer|undefined,
|
|
35
|
+
player: undefined as VideoJsPlayer | undefined,
|
|
31
36
|
playing: false as boolean,
|
|
32
|
-
stalledTimout: undefined as ReturnType<typeof setTimeout
|
|
37
|
+
stalledTimout: undefined as ReturnType<typeof setTimeout> | undefined,
|
|
33
38
|
};
|
|
34
39
|
},
|
|
35
|
-
computed:{
|
|
36
|
-
videoElement(): HTMLVideoElement{
|
|
37
|
-
return
|
|
40
|
+
computed: {
|
|
41
|
+
videoElement(): HTMLVideoElement {
|
|
42
|
+
return this.$refs.videoelement as HTMLVideoElement;
|
|
38
43
|
},
|
|
39
|
-
videoOptions(){
|
|
44
|
+
videoOptions() {
|
|
40
45
|
return {
|
|
41
46
|
autoplay: true,
|
|
42
47
|
controls: true,
|
|
@@ -44,12 +49,12 @@ export default defineComponent({
|
|
|
44
49
|
sources: [
|
|
45
50
|
{
|
|
46
51
|
src: this.hlsUrl,
|
|
47
|
-
type:
|
|
48
|
-
}
|
|
52
|
+
type: "application/x-mpegURL",
|
|
53
|
+
},
|
|
49
54
|
],
|
|
50
55
|
html5: {
|
|
51
56
|
vhs: {
|
|
52
|
-
overrideNative:
|
|
57
|
+
overrideNative: !videojs.browser.IS_SAFARI,
|
|
53
58
|
},
|
|
54
59
|
nativeAudioTracks: false,
|
|
55
60
|
nativeVideoTracks: false,
|
|
@@ -59,23 +64,25 @@ export default defineComponent({
|
|
|
59
64
|
displayCurrentQuality: true,
|
|
60
65
|
},
|
|
61
66
|
},
|
|
62
|
-
}
|
|
63
|
-
}
|
|
67
|
+
};
|
|
68
|
+
},
|
|
64
69
|
},
|
|
65
|
-
mounted(){
|
|
70
|
+
mounted() {
|
|
66
71
|
this.playLive();
|
|
67
|
-
this.useVideoSrc =
|
|
72
|
+
this.useVideoSrc =
|
|
73
|
+
"" !== this.videoElement.canPlayType("application/vnd.apple.mpegurl") &&
|
|
74
|
+
!navigator.userAgent.includes("Android");
|
|
68
75
|
},
|
|
69
76
|
|
|
70
|
-
beforeUnmount() {
|
|
71
|
-
if(this.playing){
|
|
77
|
+
beforeUnmount() {
|
|
78
|
+
if (this.playing) {
|
|
72
79
|
this.stopLive();
|
|
73
80
|
}
|
|
74
81
|
},
|
|
75
82
|
|
|
76
83
|
methods: {
|
|
77
|
-
definedStalledTimeout(){
|
|
78
|
-
this.stalledTimout =setTimeout(()=>{
|
|
84
|
+
definedStalledTimeout() {
|
|
85
|
+
this.stalledTimout = setTimeout(() => {
|
|
79
86
|
this.videoClean();
|
|
80
87
|
this.playLive();
|
|
81
88
|
}, 5000);
|
|
@@ -87,83 +94,87 @@ export default defineComponent({
|
|
|
87
94
|
this.playLiveIos();
|
|
88
95
|
return;
|
|
89
96
|
}
|
|
90
|
-
this.player = videojs(
|
|
91
|
-
|
|
92
|
-
this.
|
|
93
|
-
|
|
94
|
-
|
|
97
|
+
this.player = videojs(
|
|
98
|
+
document.getElementById("video-element-hls") as Element,
|
|
99
|
+
this.videoOptions,
|
|
100
|
+
() => {
|
|
101
|
+
this.errorPlay = "";
|
|
102
|
+
this.playing = true;
|
|
103
|
+
},
|
|
104
|
+
);
|
|
105
|
+
this.player.on("timeupdate", () => {
|
|
95
106
|
clearTimeout(this.stalledTimout);
|
|
96
107
|
this.definedStalledTimeout();
|
|
97
108
|
});
|
|
98
|
-
this.player.on(
|
|
109
|
+
this.player.on("error", (error) => {
|
|
99
110
|
this.stopLive();
|
|
100
|
-
if (error.description && error.description.includes(
|
|
101
|
-
this.errorPlay = this.$t(
|
|
102
|
-
}else{
|
|
103
|
-
this.errorPlay = this.$t(
|
|
111
|
+
if (error.description && error.description.includes("403")) {
|
|
112
|
+
this.errorPlay = this.$t("Video is unavailable");
|
|
113
|
+
} else {
|
|
114
|
+
this.errorPlay = this.$t("Podcast play error");
|
|
104
115
|
}
|
|
105
116
|
});
|
|
106
117
|
},
|
|
107
|
-
async playLiveIos(): Promise<void>{
|
|
108
|
-
this.videoElement.onloadedmetadata = ()=>{
|
|
109
|
-
const playPromise =
|
|
118
|
+
async playLiveIos(): Promise<void> {
|
|
119
|
+
this.videoElement.onloadedmetadata = () => {
|
|
120
|
+
const playPromise = this.videoElement.play();
|
|
110
121
|
if (playPromise !== undefined) {
|
|
111
|
-
playPromise
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
122
|
+
playPromise
|
|
123
|
+
.then(() => {
|
|
124
|
+
this.errorPlay = "";
|
|
125
|
+
this.playing = true;
|
|
126
|
+
})
|
|
127
|
+
.catch(() => {
|
|
128
|
+
this.playing = false;
|
|
129
|
+
});
|
|
118
130
|
}
|
|
119
131
|
};
|
|
120
|
-
this.videoElement.onerror = async()=>{
|
|
132
|
+
this.videoElement.onerror = async () => {
|
|
121
133
|
this.stopLive();
|
|
122
|
-
this.errorPlay = this.$t(
|
|
134
|
+
this.errorPlay = this.$t("Podcast play error");
|
|
123
135
|
};
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
136
|
+
this.videoElement.ontimeupdate = async () => {
|
|
137
|
+
clearTimeout(this.stalledTimout);
|
|
138
|
+
this.definedStalledTimeout();
|
|
127
139
|
};
|
|
128
140
|
this.videoElement.src = this.hlsUrl;
|
|
129
141
|
},
|
|
130
|
-
videoClean(): void{
|
|
131
|
-
if(this.useVideoSrc){
|
|
142
|
+
videoClean(): void {
|
|
143
|
+
if (this.useVideoSrc) {
|
|
132
144
|
this.videoElement.pause();
|
|
133
|
-
this.videoElement.removeAttribute(
|
|
145
|
+
this.videoElement.removeAttribute("src");
|
|
134
146
|
this.videoElement.load();
|
|
135
147
|
return;
|
|
136
148
|
}
|
|
137
|
-
if(this.player){
|
|
149
|
+
if (this.player) {
|
|
138
150
|
this.player.dispose();
|
|
139
151
|
//Redraw
|
|
140
152
|
const video_parent = document.getElementById("player-video-hls");
|
|
141
|
-
if(video_parent){
|
|
142
|
-
const video = document.createElement(
|
|
143
|
-
video.id="video-element-hls";
|
|
144
|
-
video.className="video-js";
|
|
145
|
-
video.preload="auto";
|
|
146
|
-
video.setAttribute("playsinline","true");
|
|
153
|
+
if (video_parent) {
|
|
154
|
+
const video = document.createElement("video");
|
|
155
|
+
video.id = "video-element-hls";
|
|
156
|
+
video.className = "video-js";
|
|
157
|
+
video.preload = "auto";
|
|
158
|
+
video.setAttribute("playsinline", "true");
|
|
147
159
|
video_parent.appendChild(video);
|
|
148
160
|
}
|
|
149
161
|
}
|
|
150
162
|
},
|
|
151
|
-
stopLive(): void{
|
|
163
|
+
stopLive(): void {
|
|
152
164
|
clearTimeout(this.stalledTimout);
|
|
153
165
|
this.errorPlay = "";
|
|
154
166
|
this.videoClean();
|
|
155
167
|
this.playing = false;
|
|
156
168
|
},
|
|
157
169
|
},
|
|
158
|
-
|
|
159
170
|
});
|
|
160
171
|
</script>
|
|
161
172
|
|
|
162
173
|
<style lang="scss">
|
|
163
|
-
@import
|
|
174
|
+
@import "video.js";
|
|
164
175
|
@import "@scss/_variables.scss";
|
|
165
|
-
.octopus-app{
|
|
166
|
-
.video-live-error{
|
|
176
|
+
.octopus-app {
|
|
177
|
+
.video-live-error {
|
|
167
178
|
text-align: center;
|
|
168
179
|
width: 100%;
|
|
169
180
|
font-size: 1rem;
|
|
@@ -175,7 +186,7 @@ export default defineComponent({
|
|
|
175
186
|
background: $danger;
|
|
176
187
|
z-index: 1;
|
|
177
188
|
}
|
|
178
|
-
.video-js{
|
|
189
|
+
.video-js {
|
|
179
190
|
width: 500px;
|
|
180
191
|
height: 281px;
|
|
181
192
|
}
|
|
@@ -83,24 +83,27 @@ export default defineComponent({
|
|
|
83
83
|
this.handleResize(0);
|
|
84
84
|
},
|
|
85
85
|
methods: {
|
|
86
|
-
|
|
87
|
-
const historyList = this.$refs.historyListContainer as HTMLElement;
|
|
88
|
-
if (null === historyList || !historyList) {
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
this.indexStart = indexAsked;
|
|
92
|
-
this.indexNotDisplay = this.playerRadioHistory.length;
|
|
86
|
+
displayEverythingAfterIndex(indexAsked: number){
|
|
93
87
|
for (let index = 0; index < this.playerRadioHistory.length; index++) {
|
|
94
88
|
const el = (this.$refs["history" + index] as Array<HTMLElement>)[0];
|
|
95
89
|
if (!el) continue;
|
|
96
|
-
if (index <
|
|
90
|
+
if (index < indexAsked && !el.classList.contains("hid")) {
|
|
97
91
|
el.classList.add("hid");
|
|
98
92
|
continue;
|
|
99
93
|
}
|
|
100
|
-
if (index >=
|
|
94
|
+
if (index >= indexAsked && el.classList.contains("hid")) {
|
|
101
95
|
el.classList.remove("hid");
|
|
102
96
|
}
|
|
103
97
|
}
|
|
98
|
+
},
|
|
99
|
+
handleResize(indexAsked: number): void {
|
|
100
|
+
const historyList = this.$refs.historyListContainer as HTMLElement;
|
|
101
|
+
if (null === historyList || !historyList) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
this.indexStart = indexAsked;
|
|
105
|
+
this.indexNotDisplay = this.playerRadioHistory.length;
|
|
106
|
+
this.displayEverythingAfterIndex(indexAsked);
|
|
104
107
|
for (
|
|
105
108
|
let index = this.indexStart + 1;
|
|
106
109
|
index < this.playerRadioHistory.length;
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
>
|
|
6
6
|
<div
|
|
7
7
|
class="octopus-progress-bar"
|
|
8
|
-
:class="isBack ? 'no-transition': ''"
|
|
8
|
+
:class="isBack ? 'no-transition' : ''"
|
|
9
9
|
role="progressbar"
|
|
10
10
|
aria-valuenow="0"
|
|
11
11
|
aria-valuemin="0"
|
|
@@ -89,7 +89,7 @@ export default defineComponent({
|
|
|
89
89
|
.octopus-progress-bar {
|
|
90
90
|
background-color: #747474;
|
|
91
91
|
}
|
|
92
|
-
.no-transition{
|
|
92
|
+
.no-transition {
|
|
93
93
|
transition: none !important;
|
|
94
94
|
}
|
|
95
95
|
}
|
package/src/locale/de.ts
CHANGED
|
@@ -317,22 +317,20 @@ export default {
|
|
|
317
317
|
Newsletter: "Newsletter",
|
|
318
318
|
"QR Code": "QR-Code",
|
|
319
319
|
"Rss feed": "RSS-Feed",
|
|
320
|
-
"Multiselect max options":
|
|
321
|
-
|
|
322
|
-
"
|
|
323
|
-
"
|
|
324
|
-
"
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
"
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
"
|
|
333
|
-
|
|
334
|
-
"Characters number calculated over HTML code":
|
|
335
|
-
"Die Zeichenzahl wird mit dem HTML-Code ermittelt, der mit diesem Editor erstellt wurde. Über den HTML-Button können Sie diesen Code einsehen.",
|
|
320
|
+
"Multiselect max options":"Maximal {max} gleichzeitige Optionen. Bitte entfernen Sie zuerst eine Option, um eine neue auswählen zu können",
|
|
321
|
+
"Mix of episodes":"Mischung aus Episoden",
|
|
322
|
+
"Radio & Live":"Radio & Live",
|
|
323
|
+
"Selection by status":"Auswahl nach Status",
|
|
324
|
+
"All lives":"Alle Leben",
|
|
325
|
+
'In debriefing': 'In der Nachbesprechung',
|
|
326
|
+
'In the process of being published': 'Im Prozess der Veröffentlichung',
|
|
327
|
+
"Radio":"Radio",
|
|
328
|
+
"Currently":"Momentan",
|
|
329
|
+
"Program":"Programm",
|
|
330
|
+
"No programming":"Nicht programmieren",
|
|
331
|
+
'Canal name image': 'Kanalbild {name}',
|
|
332
|
+
"Show animated wave":"Animierte Welle anzeigen",
|
|
333
|
+
'Characters number calculated over HTML code':"Die Zeichenzahl wird mit dem HTML-Code ermittelt, der mit diesem Editor erstellt wurde. Über den HTML-Button können Sie diesen Code einsehen.",
|
|
336
334
|
Previously: "Bisher",
|
|
337
335
|
"Bold":"Deutlich",
|
|
338
336
|
"Italic":"Kursiv",
|
|
@@ -344,4 +342,5 @@ export default {
|
|
|
344
342
|
"List":"Aufführen",
|
|
345
343
|
"Display HTML":"HTML anzeigen",
|
|
346
344
|
"Video is unavailable":"Video ist nicht verfügbar",
|
|
347
|
-
|
|
345
|
+
'Full Large version': 'Vollständige große Version',
|
|
346
|
+
}
|