@saooti/octopus-sdk 40.2.0-SNAPSHOT → 40.2.2-SNAPSHOT

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/index.ts CHANGED
@@ -95,6 +95,7 @@ export const getClassicInputText = () => import("./src/components/form/ClassicIn
95
95
  export const getClassicEmojiPicker = () => import("./src/components/form/ClassicEmojiPicker.vue");
96
96
  export const getClassicContentEditable = () => import("./src/components/form/ClassicContentEditable.vue");
97
97
  export const getSwiperList = () => import("./src/components/display/list/SwiperList.vue");
98
+ export const getClassicCopyButton = () => import("./src/components/form/ClassicCopyButton.vue");
98
99
 
99
100
 
100
101
  //Composable
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saooti/octopus-sdk",
3
- "version": "40.2.0-SNAPSHOT",
3
+ "version": "40.2.2-SNAPSHOT",
4
4
  "private": false,
5
5
  "description": "Javascript SDK for using octopus",
6
6
  "author": "Saooti",
@@ -3,7 +3,7 @@
3
3
  <div
4
4
  class="d-flex justify-content-between flex-grow-1 mb-3 w-100 align-items-center"
5
5
  >
6
- <h2 class="mb-0 big-h2">
6
+ <h2 class="mb-0">
7
7
  {{ $t("Live") }}
8
8
  </h2>
9
9
  <router-link
@@ -3,7 +3,7 @@
3
3
  v-if="(filterOrgaId || organisationId) && radio.length"
4
4
  class="d-flex flex-column align-items-start mt-3"
5
5
  >
6
- <h2 class="mb-0 big-h2 mb-3">
6
+ <h2 class="mb-0 mb-3">
7
7
  {{ $t("Radio") }}
8
8
  </h2>
9
9
  <template v-if="radio.length">
@@ -1,118 +1,130 @@
1
1
  <template>
2
2
  <section v-if="podcast" class="module-box">
3
- <div class="mb-2 d-flex">
4
- <div class="w-100">
5
- <PodcastImage
6
- :class="[
7
- isLiveReadyToRecord &&
8
- podcastConference &&
9
- 'null' !== podcastConference &&
10
- podcastConference.status
11
- ? podcastConference.status.toLowerCase() + '-shadow'
12
- : '',
13
- ]"
14
- class="me-3"
15
- :hide-play="isLiveReadyToRecord"
16
- :podcast="podcast"
17
- :playing-podcast="playingPodcast"
18
- :fetch-conference="podcastConference"
19
- :is-animator-live="isOctopusAndAnimator"
20
- />
21
- <div class="d-flex justify-content-between flex-wrap mb-2">
22
- <time
23
- v-if="0 !== date.length" :class="!isLiveReady ? 'me-5' : ''"
24
- :datetime="podcast.pubDate">
25
- {{ date }}
3
+ <RecordingItemButton
4
+ v-if="!!podcastConference && isLiveReadyToRecord && isOctopusAndAnimator"
5
+ :podcast="podcast"
6
+ :live="true"
7
+ :recording="podcastConference"
8
+ @delete-item="removeDeleted"
9
+ @validate-podcast="$emit('updatePodcast', $event)"
10
+ />
11
+ <EditBox
12
+ v-else-if="editRight && isEditBox"
13
+ :podcast="podcast"
14
+ :display-studio-access="isDebriefing"
15
+ @validate-podcast="$emit('updatePodcast', $event)"
16
+ />
17
+ <div class="mb-2 w-100">
18
+ <PodcastImage
19
+ :class="[
20
+ isLiveReadyToRecord &&
21
+ podcastConference &&
22
+ 'null' !== podcastConference &&
23
+ podcastConference.status
24
+ ? podcastConference.status.toLowerCase() + '-shadow'
25
+ : '',
26
+ ]"
27
+ class="me-3"
28
+ :hide-play="isLiveReadyToRecord"
29
+ :podcast="podcast"
30
+ :playing-podcast="playingPodcast"
31
+ :fetch-conference="podcastConference"
32
+ :is-animator-live="isOctopusAndAnimator"
33
+ />
34
+ <div class="d-flex justify-content-between flex-wrap mb-2">
35
+ <time
36
+ v-if="0 !== date.length" :class="!isLiveReady ? 'me-5' : ''"
37
+ :datetime="podcast.pubDate">
38
+ {{ date }}
39
+ </time>
40
+ <div v-if="isLiveReady" class="text-danger">
41
+ {{ $t("Episode record in live") }}
42
+ </div>
43
+ <div class="d-flex flex-column align-items-end flex-grow-1">
44
+ <time :datetime="durationIso">
45
+ {{ duration }}
26
46
  </time>
27
- <div v-if="isLiveReady" class="text-danger">
28
- {{ $t("Episode record in live") }}
29
- </div>
30
- <div class="d-flex flex-column align-items-end flex-grow-1">
31
- <time :datetime="durationIso">
32
- {{ duration }}
33
- </time>
34
- <ShareAnonymous v-if="!editRight" :podcast="podcast" :organisation-id="podcast.organisation.id"/>
35
- </div>
47
+ <ShareAnonymous v-if="!editRight" :podcast="podcast" :organisation-id="podcast.organisation.id"/>
36
48
  </div>
37
- <h2 class="mb-3">
38
- {{ podcast.title }}
39
- </h2>
40
- <PodcastPlannedSpinner v-if="isPlannedInProcessor"/>
41
- <Countdown v-if="isCounter" :time-remaining="timeRemaining" />
42
- <!-- eslint-disable vue/no-v-html -->
43
- <div
44
- class="description-text html-wysiwyg-content"
45
- v-html="urlify(podcast.description)"
49
+ </div>
50
+ <h2 class="mb-3">
51
+ {{ podcast.title }}
52
+ </h2>
53
+ <PodcastPlannedSpinner v-if="isPlannedInProcessor"/>
54
+ <Countdown v-if="isCounter" :time-remaining="timeRemaining" />
55
+ <!-- eslint-disable vue/no-v-html -->
56
+ <div
57
+ class="description-text html-wysiwyg-content"
58
+ v-html="urlify(podcast.description)"
59
+ />
60
+ <!-- eslint-enable -->
61
+ <div class="my-3">
62
+ <div class="mb-1">
63
+ {{ $t("Emission") + " : " }}
64
+ <router-link
65
+ :to="{
66
+ name: 'emission',
67
+ params: { emissionId: podcast.emission.emissionId },
68
+ }"
69
+ :title="$t('Series name page', { name: podcast.emission.name })"
70
+ >
71
+ {{ podcast.emission.name }}
72
+ </router-link>
73
+ </div>
74
+ <ParticipantDescription :participants="podcast.animators" />
75
+ <ParticipantDescription
76
+ :participants="podcast.guests"
77
+ :is-guest="true"
46
78
  />
47
- <!-- eslint-enable -->
48
- <div class="my-3">
49
- <div class="mb-1">
50
- {{ $t("Emission") + " : " }}
51
- <router-link
52
- :to="{
53
- name: 'emission',
54
- params: { emissionId: podcast.emission.emissionId },
55
- }"
56
- :title="$t('Series name page', { name: podcast.emission.name })"
57
- >
58
- {{ podcast.emission.name }}
59
- </router-link>
60
- </div>
61
- <ParticipantDescription :participants="podcast.animators" />
62
- <ParticipantDescription
63
- :participants="podcast.guests"
64
- :is-guest="true"
65
- />
66
- <div v-if="!isPodcastmaker" class="mb-1">
67
- {{ $t("Producted by : ") }}
68
- <router-link
69
- :to="{
70
- name: 'productor',
71
- params: { productorId: podcast.organisation.id },
72
- }"
73
- >
74
- {{ podcast.organisation.name }}
75
- </router-link>
76
- </div>
77
- <div v-if="'' !== photoCredit" class="mb-1">
78
- {{ $t("Photo credits") + " : " + photoCredit }}
79
- </div>
80
- <div v-if="'' !== audioCredit" class="mb-1">
81
- {{ $t("Audio credits") + " : " + audioCredit }}
82
- </div>
83
- <div v-if="'' !== authorCredit" class="mb-1">
84
- {{ $t("Author credits") + " : " + authorCredit }}
85
- </div>
86
- <a
87
- v-if="podcast.article && !isGarRole"
88
- class="btn d-flex align-items-center my-2 w-fit-content mb-1"
89
- :href="podcast.article"
90
- rel="noreferrer noopener"
91
- target="_blank"
92
- :title="$t('New window', {text : $t('See associated article')})"
79
+ <div v-if="!isPodcastmaker" class="mb-1">
80
+ {{ $t("Producted by : ") }}
81
+ <router-link
82
+ :to="{
83
+ name: 'productor',
84
+ params: { productorId: podcast.organisation.id },
85
+ }"
93
86
  >
94
- <NewspaperVariantOutlineIcon class="me-1" />
95
- <div>{{ $t("See associated article") }}</div>
96
- </a>
97
- <PodcastPlayBar
98
- v-if="isProgressBar"
99
- :podcast="podcast"
100
- />
101
- <div v-if="editRight && !isPodcastmaker">
102
- <div
103
- v-if="
104
- podcast.annotations && 'RSS' === podcast.annotations.SOURCE_KIND
105
- "
106
- class="me-5 text-secondary"
107
- >
108
- {{ $t("From RSS") }}
109
- </div>
110
- <ErrorMessage v-if="'' !== errorMessage" :message="errorMessage" />
111
- </div>
112
- <div class="d-flex align-items-center flex-wrap">
113
- <LikeSection :edit-right="editRight" :podcast="podcast" />
114
- <DownloadPodcastButton v-if="isDownloadButton" :podcast="podcast" />
87
+ {{ podcast.organisation.name }}
88
+ </router-link>
89
+ </div>
90
+ <div v-if="'' !== photoCredit" class="mb-1">
91
+ {{ $t("Photo credits") + " : " + photoCredit }}
92
+ </div>
93
+ <div v-if="'' !== audioCredit" class="mb-1">
94
+ {{ $t("Audio credits") + " : " + audioCredit }}
95
+ </div>
96
+ <div v-if="'' !== authorCredit" class="mb-1">
97
+ {{ $t("Author credits") + " : " + authorCredit }}
98
+ </div>
99
+ <a
100
+ v-if="podcast.article && !isGarRole"
101
+ class="btn d-flex align-items-center my-2 w-fit-content mb-1"
102
+ :href="podcast.article"
103
+ rel="noreferrer noopener"
104
+ target="_blank"
105
+ :title="$t('New window', {text : $t('See associated article')})"
106
+ >
107
+ <NewspaperVariantOutlineIcon class="me-1" />
108
+ <div>{{ $t("See associated article") }}</div>
109
+ </a>
110
+ <PodcastPlayBar
111
+ v-if="isProgressBar"
112
+ :podcast="podcast"
113
+ />
114
+ <div v-if="editRight && !isPodcastmaker">
115
+ <div
116
+ v-if="
117
+ podcast.annotations && 'RSS' === podcast.annotations.SOURCE_KIND
118
+ "
119
+ class="me-5 text-secondary"
120
+ >
121
+ {{ $t("From RSS") }}
115
122
  </div>
123
+ <ErrorMessage v-if="'' !== errorMessage" :message="errorMessage" />
124
+ </div>
125
+ <div class="d-flex align-items-center flex-wrap">
126
+ <LikeSection :edit-right="editRight" :podcast="podcast" />
127
+ <DownloadPodcastButton v-if="isDownloadButton" :podcast="podcast" />
116
128
  </div>
117
129
  </div>
118
130
  </div>
@@ -135,20 +147,6 @@
135
147
  :window-width="1000"
136
148
  :justify-center="false"
137
149
  />
138
- <RecordingItemButton
139
- v-if="!!podcastConference && isLiveReadyToRecord && isOctopusAndAnimator"
140
- :podcast="podcast"
141
- :live="true"
142
- :recording="podcastConference"
143
- @delete-item="removeDeleted"
144
- @validate-podcast="$emit('updatePodcast', $event)"
145
- />
146
- <EditBox
147
- v-else-if="editRight && isEditBox"
148
- :podcast="podcast"
149
- :display-studio-access="isDebriefing"
150
- @validate-podcast="$emit('updatePodcast', $event)"
151
- />
152
150
  </section>
153
151
  </template>
154
152
 
@@ -58,7 +58,6 @@
58
58
  v-if="isRssModal"
59
59
  :link="rssUrl"
60
60
  @close="isRssModal = false"
61
- @copy="afterCopy"
62
61
  />
63
62
  <SnackBar
64
63
  v-if="lazyLoadingSnackbar"
@@ -8,9 +8,12 @@
8
8
  <div class="text-primary hide-small-screen text-break">
9
9
  {{ rss }}
10
10
  </div>
11
- <button class="btn btn-primary" @click="onCopyCode(rss, afterCopy)">
12
- {{ $t("Copy") }}
13
- </button>
11
+ <ClassicCopyButton
12
+ :text="$t('Copy')"
13
+ :text-after-copy="$t('Copied!')"
14
+ :data-to-copy="rss"
15
+ :snackbar-text="$t('Link in clipboard')"
16
+ />
14
17
  </div>
15
18
  <RssSection v-if="emission" :emission="emission" />
16
19
  <div class="sharing-distribution-container">
@@ -27,15 +30,11 @@
27
30
  />{{ platform.title }}
28
31
  </router-link>
29
32
  </div>
30
- <SnackBar
31
- v-if="lazyLoadingSnackbar"
32
- ref="snackbar"
33
- position="bottom-left"
34
- />
35
33
  </section>
36
34
  </template>
37
35
 
38
36
  <script lang="ts">
37
+ import ClassicCopyButton from "../../form/ClassicCopyButton.vue";
39
38
  import RadiolineIcon from "../../icons/RadiolineIcon.vue";
40
39
  import TuninIcon from "../../icons/TuninIcon.vue";
41
40
  import PodcastAddictIcon from "../../icons/PodcastAddictIcon.vue";
@@ -49,8 +48,6 @@ import YoutubeIcon from "vue-material-design-icons/Youtube.vue";
49
48
  import SpotifyIcon from "vue-material-design-icons/Spotify.vue";
50
49
  import { useApiStore } from "../../../stores/ApiStore";
51
50
  import classicApi from "../../../api/classicApi";
52
- import SnackBar from "../../misc/SnackBar.vue";
53
- import displayHelper from "../../../helper/displayHelper";
54
51
  import { Emission } from "@/stores/class/general/emission";
55
52
 
56
53
  import { defineComponent, defineAsyncComponent } from "vue";
@@ -60,7 +57,6 @@ const RssSection = defineAsyncComponent(
60
57
  );
61
58
  export default defineComponent({
62
59
  components: {
63
- SnackBar,
64
60
  RssSection,
65
61
  SpotifyIcon,
66
62
  YoutubeIcon,
@@ -73,6 +69,7 @@ export default defineComponent({
73
69
  PodcastAddictIcon,
74
70
  TuninIcon,
75
71
  RadiolineIcon,
72
+ ClassicCopyButton
76
73
  },
77
74
  props: {
78
75
  emissionId: { default: undefined, type: Number },
@@ -82,7 +79,6 @@ export default defineComponent({
82
79
  return {
83
80
  emission: undefined as Emission | undefined,
84
81
  rss: "" as string,
85
- lazyLoadingSnackbar: false as boolean,
86
82
  };
87
83
  },
88
84
  computed: {
@@ -159,9 +155,6 @@ export default defineComponent({
159
155
  },
160
156
 
161
157
  methods: {
162
- onCopyCode(link: string, callback: () => void){
163
- displayHelper.onCopyCode(link, callback);
164
- },
165
158
  getUrl(platform: string): string {
166
159
  return `/main/priv/distribution/${platform}/${this.emissionId}`;
167
160
  },
@@ -175,18 +168,6 @@ export default defineComponent({
175
168
  if (!this.$props.emissionId || this.$props.emissionId <= 0) return;
176
169
  this.rss = `${this.apiUrl}rss/emission/${this.emissionId}.rss`;
177
170
  },
178
- afterCopy(): void {
179
- if (!this.lazyLoadingSnackbar) {
180
- this.lazyLoadingSnackbar = true;
181
- setTimeout(() => {
182
- this.afterCopy();
183
- }, 500);
184
- } else {
185
- (this.$refs.snackbar as InstanceType<typeof SnackBar>).open(
186
- this.$t("Link in clipboard"),
187
- );
188
- }
189
- },
190
171
  },
191
172
  });
192
173
  </script>
@@ -31,22 +31,19 @@
31
31
  <div class="border p-3" v-html="newsletterHtml" />
32
32
  <!-- eslint-enable -->
33
33
  </div>
34
- <button
35
- class="btn btn-primary w-fit-content my-3"
36
- @click="onCopyCode(newsletterHtml, afterCopy)"
37
- >
38
- {{ $t("Copy code") }}
39
- </button>
34
+ <ClassicCopyButton
35
+ :text="$t('Copy code')"
36
+ :text-after-copy="$t('Code copied!')"
37
+ :data-to-copy="newsletterHtml"
38
+ />
40
39
  <div>{{ $t("And paste it in your newsletter") }}</div>
41
- <SnackBar ref="snackbar" position="bottom-left" />
42
40
  </div>
43
41
  </template>
44
42
 
45
43
  <script lang="ts">
46
- import SnackBar from "../../misc/SnackBar.vue";
44
+ import ClassicCopyButton from "../../form/ClassicCopyButton.vue";
47
45
  import { VSwatches } from "vue3-swatches";
48
46
  import "vue3-swatches/dist/style.css";
49
- import displayHelper from "../../../helper/displayHelper";
50
47
  import { Podcast } from "@/stores/class/general/podcast";
51
48
  import { defineComponent } from "vue";
52
49
  import { useSaveFetchStore } from "../../../stores/SaveFetchStore";
@@ -58,7 +55,7 @@ export default defineComponent({
58
55
  name: "SahreNewsletter",
59
56
 
60
57
  components: {
61
- SnackBar,
58
+ ClassicCopyButton,
62
59
  VSwatches,
63
60
  },
64
61
 
@@ -98,10 +95,10 @@ export default defineComponent({
98
95
  shareText: this.$t("Listen this episode"),
99
96
  emissionHtml: `<tr><td style="padding:5px 0;">
100
97
  <div style="display:flex; margin-top:5px;">
101
- <div style="font-size:20px; color:${
98
+ <div style="font-size:16px; color:${
102
99
  this.arrayColors[1].color
103
100
  }; margin-right:5px;text-wrap: nowrap;">${this.$t("Emission")} :</div>
104
- <a href="${this.shareUrl}" style="font-size: 18px;color: ${
101
+ <a href="${this.shareUrl}" style="font-size: 16px;color: ${
105
102
  this.arrayColors[0].color
106
103
  };overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">${
107
104
  this.podcast.emission.name
@@ -154,7 +151,7 @@ export default defineComponent({
154
151
  <td valign="top" width="30%" rowspan="7" style="padding-right:5px;"><img width="100%" src="${
155
152
  this.newsletterInfo.imageUrl
156
153
  }" style="border-radius: 4px;"></td>
157
- <td valign="top" width="70%" style="padding:5px 0;"><div style="margin-top:5px;font-size: 24px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;font-weight:bold;${
154
+ <td valign="top" width="70%" style="padding:5px 0;"><div style="margin-top:5px;font-size: 20px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;font-weight:bold;${
158
155
  this.newsletterInfo.colorTitle
159
156
  }">${this.newsletterInfo.title}</div></td>
160
157
  </tr>${this.newsletterInfo.emissionHtml}
@@ -184,14 +181,6 @@ export default defineComponent({
184
181
  },
185
182
  methods: {
186
183
  ...mapActions(useSaveFetchStore, ["getOrgaAttributes"]),
187
- onCopyCode(link: string, callback: () => void){
188
- displayHelper.onCopyCode(link, callback);
189
- },
190
- afterCopy(): void {
191
- (this.$refs.snackbar as InstanceType<typeof SnackBar>).open(
192
- this.$t("Data in clipboard"),
193
- );
194
- },
195
184
  async initData(): Promise<void> {
196
185
  const orgaId = this.authOrgaId;
197
186
  if (!orgaId?.length) {
@@ -17,23 +17,6 @@
17
17
  </a>
18
18
  </template>
19
19
  <slot name="additional-buttons"/>
20
- <!-- <div v-if="shareAiAuth" class="d-flex flex-column ms-4">
21
- <h3 class="mb-2">
22
- {{ $t("Generate a social media post (with AI)") }}
23
- </h3>
24
- <div class="d-flex align-items-center justify-content-center">
25
- <router-link
26
- class="btn share-btn mb-2 text-dark"
27
- :title="$t('Generate a social media post (with AI)')"
28
- :to="{
29
- name: 'advancedShare',
30
- params: { podcastId: podcast.podcastId },
31
- }"
32
- >
33
- <CreationIcon />
34
- </router-link>
35
- </div>
36
- </div> -->
37
20
  </div>
38
21
  </section>
39
22
  </template>
@@ -70,20 +53,7 @@ export default defineComponent({
70
53
  ...mapState(useAuthStore, [
71
54
  "isGarRole",
72
55
  "authOrgaId"
73
- /* "authOrganisation",
74
- "isRoleProduction" */
75
56
  ]),
76
- /* shareAiAuth(): boolean {
77
- return (
78
- !this.isPodcastmaker &&
79
- undefined !== this.authOrgaId &&
80
- undefined !== this.podcast &&
81
- this.isRoleProduction &&
82
- (this.authOrganisation.attributes?.["openAi.active"] as
83
- | string
84
- | undefined) === "true"
85
- );
86
- }, */
87
57
  arrayShareButtons() {
88
58
  return [
89
59
  {
@@ -0,0 +1,65 @@
1
+ <template>
2
+ <div>
3
+ <button
4
+ :class="classBtn"
5
+ @click="onCopyCode(afterCopy)"
6
+ >
7
+ {{ textDisplayed }}
8
+ </button>
9
+ <SnackBar
10
+ v-if="lazyLoadingSnackbar"
11
+ ref="snackbar"
12
+ position="bottom-left"
13
+ />
14
+ </div>
15
+ </template>
16
+
17
+ <script lang="ts">
18
+ import SnackBar from "../misc/SnackBar.vue";
19
+ import displayHelper from "../../helper/displayHelper";
20
+ import { defineComponent } from "vue";
21
+ export default defineComponent({
22
+ name: "ClassicCopyButton",
23
+
24
+ components: {
25
+ SnackBar,
26
+ },
27
+
28
+ props: {
29
+ text: { default: undefined, type: String },
30
+ textAfterCopy: { default: undefined, type: String },
31
+ dataToCopy: { default: undefined, type: String },
32
+ snackbarText: { default: undefined, type: String },
33
+ classBtn: { default: "btn btn-primary w-fit-content my-3", type: String },
34
+ },
35
+ data() {
36
+ return {
37
+ hasBeenCopied: false as boolean,
38
+ lazyLoadingSnackbar: false as boolean,
39
+ };
40
+ },
41
+ computed:{
42
+ textDisplayed(){
43
+ return this.hasBeenCopied ? this.textAfterCopy : this.text;
44
+ }
45
+ },
46
+ methods: {
47
+ onCopyCode(callback: () => void){
48
+ displayHelper.onCopyCode(this.dataToCopy??"", callback);
49
+ },
50
+ afterCopy(): void {
51
+ this.hasBeenCopied = true;
52
+ if (!this.lazyLoadingSnackbar) {
53
+ this.lazyLoadingSnackbar = true;
54
+ setTimeout(() => {
55
+ this.afterCopy();
56
+ }, 500);
57
+ } else {
58
+ (this.$refs.snackbar as InstanceType<typeof SnackBar>).open(
59
+ this.snackbarText ?? this.$t("Data in clipboard"),
60
+ );
61
+ }
62
+ },
63
+ },
64
+ });
65
+ </script>
@@ -96,7 +96,6 @@ export default defineComponent({
96
96
 
97
97
  .octopus-nav.light .octopus-nav-item {
98
98
  border: 0;
99
- flex-grow: 0;
100
99
  }
101
100
 
102
101
  .octopus-nav-link {
@@ -127,7 +126,7 @@ export default defineComponent({
127
126
  .octopus-nav.light .octopus-nav-link {
128
127
  font-weight: bold;
129
128
  background:var(--octopus-border-default);
130
- &:active{
129
+ &.active{
131
130
  border-bottom-color: var(--octopus-primary);
132
131
  background: transparent;
133
132
  color: var(--octopus-primary);
@@ -8,9 +8,12 @@
8
8
  <p class="d-flex justify-content-between align-items-center">
9
9
  {{ $t("Rss feed:") }}
10
10
  <span id="LINK">{{ link }}</span>
11
- <button class="btn btn-primary" @click="onCopyCode(link, afterCopy)">
12
- {{ $t("Copy") }}
13
- </button>
11
+ <ClassicCopyButton
12
+ :text="$t('Copy')"
13
+ :text-after-copy="$t('Copied!')"
14
+ :data-to-copy="link"
15
+ :snackbar-text="$t('Link in clipboard')"
16
+ />
14
17
  </p>
15
18
  <RssSection
16
19
  v-if="emission && undefined !== authOrgaId"
@@ -21,9 +24,9 @@
21
24
  </template>
22
25
 
23
26
  <script lang="ts">
27
+ import ClassicCopyButton from "../../form/ClassicCopyButton.vue";
24
28
  import ClassicModal from "../modal/ClassicModal.vue";
25
29
  import { Emission } from "@/stores/class/general/emission";
26
- import displayHelper from "../../../helper/displayHelper";
27
30
  import { defineComponent, defineAsyncComponent } from "vue";
28
31
  import { useAuthStore } from "../../../stores/AuthStore";
29
32
  import { mapState } from "pinia";
@@ -35,25 +38,20 @@ export default defineComponent({
35
38
  components: {
36
39
  RssSection,
37
40
  ClassicModal,
41
+ ClassicCopyButton
38
42
  },
39
43
  props: {
40
44
  link: { default: "", type: String },
41
45
  emission: { default: undefined, type: Object as () => Emission },
42
46
  },
43
- emits: ["close", "copy"],
47
+ emits: ["close"],
44
48
  computed: {
45
49
  ...mapState(useAuthStore, ["authOrgaId"]),
46
50
  },
47
51
  methods: {
48
- onCopyCode(link: string, callback: () => void){
49
- displayHelper.onCopyCode(link, callback);
50
- },
51
52
  closePopup(): void {
52
53
  this.$emit("close");
53
54
  },
54
- afterCopy(): void {
55
- this.$emit("copy");
56
- },
57
55
  },
58
56
  });
59
57
  </script>
@@ -11,50 +11,48 @@
11
11
  :class="isPodcastmaker ? 'page-element-podcastmaker' : ''"
12
12
  >
13
13
  <section class="module-box">
14
- <div class="d-flex mb-2">
15
- <div class="w-100">
16
- <img
17
- v-lazy="useProxyImageUrl(emission.imageUrl, '250')"
18
- width="250"
19
- height="250"
20
- role="presentation"
21
- alt=""
22
- :title="$t('Emission name image', { name: name })"
23
- class="img-box img-box-podcast mb-3 flex-column justify-content-start align-items-start position-relative flex-shrink-0 float-start me-3"
24
- />
25
- <div class="d-flex align-items-center justify-content-between">
26
- <h2>{{ name }}</h2>
27
- <ShareAnonymous v-if="!editRight" class="d-flex justify-content-end flex-grow-1" :emission="emission" :organisation-id="emission.orga.id"/>
28
- </div>
29
- <!-- eslint-disable vue/no-v-html -->
30
- <p
31
- class="html-wysiwyg-content description-text"
32
- v-html="urlify(description)"
33
- />
34
- <!-- eslint-enable -->
35
- <div v-if="lastPodcast" class="d-flex align-items-center mt-3">
36
- <PodcastPlayButton
37
- :podcast="lastPodcast"
38
- :just-buttons="true"
39
- />
40
- <div class="ms-2 fw-bold">
41
- {{ $t("Listen to the latest episode") }}
42
- </div>
43
- </div>
44
- <SubscribeButtons
45
- v-if="isPodcastmaker"
46
- class="mt-4"
47
- :emission="emission"
48
- :window-width="1000"
49
- :justify-center="false"
50
- />
51
- </div>
52
- </div>
53
14
  <EditBox
54
15
  v-if="editRight && !isPodcastmaker"
55
16
  :emission="emission"
56
17
  @is-updated="getEmissionDetails"
57
18
  />
19
+ <div class="w-100 mb-2">
20
+ <img
21
+ v-lazy="useProxyImageUrl(emission.imageUrl, '250')"
22
+ width="250"
23
+ height="250"
24
+ role="presentation"
25
+ alt=""
26
+ :title="$t('Emission name image', { name: name })"
27
+ class="img-box img-box-podcast mb-3 flex-column justify-content-start align-items-start position-relative flex-shrink-0 float-start me-3"
28
+ />
29
+ <div class="d-flex align-items-center justify-content-between">
30
+ <h2>{{ name }}</h2>
31
+ <ShareAnonymous v-if="!editRight" class="d-flex justify-content-end flex-grow-1" :emission="emission" :organisation-id="emission.orga.id"/>
32
+ </div>
33
+ <!-- eslint-disable vue/no-v-html -->
34
+ <p
35
+ class="html-wysiwyg-content description-text"
36
+ v-html="urlify(description)"
37
+ />
38
+ <!-- eslint-enable -->
39
+ <div v-if="lastPodcast" class="d-flex align-items-center mt-3">
40
+ <PodcastPlayButton
41
+ :podcast="lastPodcast"
42
+ :just-buttons="true"
43
+ />
44
+ <div class="ms-2 fw-bold">
45
+ {{ $t("Listen to the latest episode") }}
46
+ </div>
47
+ </div>
48
+ <SubscribeButtons
49
+ v-if="isPodcastmaker"
50
+ class="mt-4"
51
+ :emission="emission"
52
+ :window-width="1000"
53
+ :justify-center="false"
54
+ />
55
+ </div>
58
56
  </section>
59
57
  <ShareSocialsButtons
60
58
  v-if="pageParameters.isShareButtons"
@@ -11,6 +11,7 @@
11
11
  :class="isPodcastmaker ? 'page-element-podcastmaker' : ''"
12
12
  >
13
13
  <section class="module-box">
14
+ <EditBox v-if="editRight && !isPodcastmaker" :playlist="playlist" />
14
15
  <div class="mb-5 mt-3 description-text">
15
16
  <img
16
17
  v-lazy="useProxyImageUrl(playlist.imageUrl, '250')"
@@ -29,7 +30,6 @@
29
30
  <p class="html-wysiwyg-content" v-html="urlify(description)" />
30
31
  <!-- eslint-enable -->
31
32
  </div>
32
- <EditBox v-if="editRight && !isPodcastmaker" :playlist="playlist" />
33
33
  </section>
34
34
  <SharePlayer
35
35
  v-if="!isPodcastmaker && editRight"
@@ -16,7 +16,7 @@
16
16
  <RadioImage :radio="radio" />
17
17
  <div class="d-flex align-items-center justify-content-between">
18
18
  <h2>{{ radio.name }}</h2>
19
- <ShareAnonymous v-if="!editRight" class="d-flex justify-content-end flex-grow-1" :organisation-id="radio.organisationId"/>
19
+ <ShareAnonymous class="d-flex justify-content-end flex-grow-1" :organisation-id="radio.organisationId"/>
20
20
  </div>
21
21
  <div v-if="radio.description">
22
22
  {{ radio.description }}
@@ -96,7 +96,6 @@ import ClassicLoading from "../form/ClassicLoading.vue";
96
96
  import classicApi from "../../api/classicApi";
97
97
  import { Podcast } from "@/stores/class/general/podcast";
98
98
  import ClassicNav from "../misc/ClassicNav.vue";
99
- import {useErrorHandler} from "../composable/useErrorHandler";
100
99
  import {useSeoTitleUrl} from "../composable/route/useSeoTitleUrl";
101
100
  import {usePodcastView} from "../composable/podcasts/usePodcastView";
102
101
  import { computed, defineAsyncComponent, onBeforeUnmount, Ref, ref, watch } from "vue";
package/src/locale/de.ts CHANGED
@@ -412,4 +412,6 @@ export default {
412
412
  "Save":"Speichern",
413
413
  "Search for keyword": "Suche nach Schlüsselwort: {tag}",
414
414
  "And paste it in your newsletter":"Und fügen Sie es in Ihren Newsletter ein 😉",
415
+ "Code copied!":"Code kopiert!",
416
+ "Copied!":"Kopiert!",
415
417
  }
package/src/locale/en.ts CHANGED
@@ -415,4 +415,6 @@ export default {
415
415
  "Save":"Save",
416
416
  "Search for keyword": "Search for keyword: {tag}",
417
417
  "And paste it in your newsletter":"And paste it in your newsletter 😉",
418
+ "Code copied!":"Code copied!",
419
+ "Copied!":"Copied!",
418
420
  };
package/src/locale/es.ts CHANGED
@@ -413,4 +413,6 @@ export default {
413
413
  "Save":"Ahorrar",
414
414
  "Search for keyword": "Buscar palabra clave: {etiqueta}",
415
415
  "And paste it in your newsletter":"Y pégalo en tu boletín informativo 😉",
416
+ "Code copied!":"¡Código copiado!",
417
+ "Copied!":"¡Copiado!",
416
418
  }
package/src/locale/fr.ts CHANGED
@@ -422,4 +422,6 @@ export default {
422
422
  "Save":"Sauvegarder",
423
423
  "Search for keyword": "Recherche pour le mot-clé: {tag}",
424
424
  "And paste it in your newsletter":"Et collez-le dans votre newsletter 😉",
425
+ "Code copied!":"Code copié !",
426
+ "Copied!":"Copié !",
425
427
  };
package/src/locale/it.ts CHANGED
@@ -409,4 +409,6 @@ export default{
409
409
  "Save":"Salva",
410
410
  "Search for keyword": "Cerca parola chiave: {tag}",
411
411
  "And paste it in your newsletter":"E incollalo nella tua newsletter 😉",
412
+ "Code copied!":"Codice copiato!",
413
+ "Copied!":"Copiato!",
412
414
  };
package/src/locale/sl.ts CHANGED
@@ -404,4 +404,6 @@ export default {
404
404
  "Save":"Shrani",
405
405
  "Search for keyword": "Iskanje ključne besede: {tag}",
406
406
  "And paste it in your newsletter":"In ga prilepite v svoje glasilo 😉",
407
+ "Code copied!":"Koda kopirana!",
408
+ "Copied!":"Kopirano!",
407
409
  }
@@ -20,7 +20,7 @@ input:not([class^="vs__"]), button:not([class^="vs__"]), select:not([class^="vs_
20
20
  }
21
21
 
22
22
  h1,.h1{
23
- font-size: 1.8rem;
23
+ font-size: 1.5rem;
24
24
  text-align: center;
25
25
  color: var(--octopus-gray-text);
26
26
  margin-bottom: 1rem;
@@ -32,35 +32,27 @@ input:not([class^="vs__"]), button:not([class^="vs__"]), select:not([class^="vs_
32
32
  }
33
33
 
34
34
  h2,.h2{
35
- font-size: 1.17rem;
35
+ font-size: 1.1rem;
36
36
 
37
37
  @media (width <= 500px){
38
38
  font-size: 1rem;
39
39
  }
40
40
  }
41
41
 
42
- .big-h2{
43
- font-size: 1.5rem;
44
-
45
- @media (width <= 500px){
46
- font-size: 1.1rem;
47
- }
48
- }
49
-
50
42
  h3,.h3{
51
- font-size: 1.125rem;
43
+ font-size: 1.05rem;
52
44
  }
53
45
 
54
46
  h4,.h4{
55
- font-size: 0.99rem;
47
+ font-size: 1rem;
56
48
  }
57
49
 
58
50
  h5,.h5{
59
- font-size: .81rem;
51
+ font-size: .80rem;
60
52
  }
61
53
 
62
54
  h6,.h6{
63
- font-size: .63rem;
55
+ font-size: .60rem;
64
56
  display: flex;
65
57
  align-items: center;
66
58
  font-weight: normal;