itube-specs 0.0.1036 → 0.0.1039
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.
|
@@ -8,11 +8,7 @@
|
|
|
8
8
|
v-if="isWebcamsEnabled"
|
|
9
9
|
class="view-models__intro"
|
|
10
10
|
>
|
|
11
|
-
<UiSectionTitle
|
|
12
|
-
:title="h1"
|
|
13
|
-
:count="isFiltered || letter ? data?.total : modelsTotal || data?.total"
|
|
14
|
-
icon="user"
|
|
15
|
-
/>
|
|
11
|
+
<UiSectionTitle :title="h1"/>
|
|
16
12
|
|
|
17
13
|
<UiSwitcher
|
|
18
14
|
:items="sections"
|
|
@@ -255,10 +251,17 @@ const topCards = computed(() => {
|
|
|
255
251
|
}
|
|
256
252
|
|
|
257
253
|
.view-models__intro {
|
|
258
|
-
display:
|
|
259
|
-
|
|
254
|
+
display: flex;
|
|
255
|
+
flex-direction: column;
|
|
256
|
+
align-items: flex-start;
|
|
260
257
|
row-gap: 16px;
|
|
261
258
|
margin-bottom: 16px;
|
|
259
|
+
|
|
260
|
+
@include from-br(sm) {
|
|
261
|
+
flex-flow: row wrap;
|
|
262
|
+
align-items: center;
|
|
263
|
+
column-gap: 20px;
|
|
264
|
+
}
|
|
262
265
|
}
|
|
263
266
|
|
|
264
267
|
.view-models__pagination {
|
|
@@ -16,11 +16,7 @@ query-параметрах `filter_*`. Формат провайдера при
|
|
|
16
16
|
<div class="view-webcams _page _container">
|
|
17
17
|
<header class="view-webcams__header">
|
|
18
18
|
<div class="view-webcams__intro">
|
|
19
|
-
<UiSectionTitle
|
|
20
|
-
:title="h1"
|
|
21
|
-
:count="data?.total"
|
|
22
|
-
icon="webcam"
|
|
23
|
-
/>
|
|
19
|
+
<UiSectionTitle :title="h1"/>
|
|
24
20
|
|
|
25
21
|
<UiSwitcher
|
|
26
22
|
:items="sections"
|
|
@@ -304,9 +300,16 @@ watch(() => JSON.stringify(toWebcamFilterPayload(route.query)), () => {
|
|
|
304
300
|
}
|
|
305
301
|
|
|
306
302
|
.view-webcams__intro {
|
|
307
|
-
display:
|
|
308
|
-
|
|
303
|
+
display: flex;
|
|
304
|
+
flex-direction: column;
|
|
305
|
+
align-items: flex-start;
|
|
309
306
|
row-gap: 16px;
|
|
307
|
+
|
|
308
|
+
@include from-br(sm) {
|
|
309
|
+
flex-flow: row wrap;
|
|
310
|
+
align-items: center;
|
|
311
|
+
column-gap: 20px;
|
|
312
|
+
}
|
|
310
313
|
}
|
|
311
314
|
|
|
312
315
|
.view-webcams__options {
|
package/package.json
CHANGED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<!-- Плейлист без ролика в адресе (`/playlists/{id}`, в том числе со старого `/playlist/{id}`) — 301 на первый ролик -->
|
|
2
|
+
<template>
|
|
3
|
+
<div class="_loading"/>
|
|
4
|
+
</template>
|
|
5
|
+
|
|
6
|
+
<script setup lang="ts">
|
|
7
|
+
import { PlaylistsApiService } from '../../../services/api/playlists.service';
|
|
8
|
+
|
|
9
|
+
const featureFlags = useRuntimeConfig().public.featureFlags;
|
|
10
|
+
const route = useRoute();
|
|
11
|
+
const { generateLink } = useGenerateLink();
|
|
12
|
+
|
|
13
|
+
const { data } = await useFetchPlaylistsGetVideosById(PlaylistsApiService.getVideosByPlaylist);
|
|
14
|
+
|
|
15
|
+
const first = data.value?.items?.[0];
|
|
16
|
+
|
|
17
|
+
if (!first) {
|
|
18
|
+
throw createError({ statusCode: 404, statusMessage: 'Not Found' });
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
await navigateTo(
|
|
22
|
+
generateLink(`/playlists/${String(route.params['playlistId'])}/${first[featureFlags.FetchByUrlEnabled ? 'url' : 'id']}`),
|
|
23
|
+
{ redirectCode: 301, replace: true },
|
|
24
|
+
);
|
|
25
|
+
</script>
|