diff --git a/src/components/flights/FlightTrackMap.vue b/src/components/flights/FlightTrackMap.vue
index d2676f5..46a1d1f 100644
--- a/src/components/flights/FlightTrackMap.vue
+++ b/src/components/flights/FlightTrackMap.vue
@@ -101,16 +101,17 @@ const chartOptions = {
-
-
-
-
+
+
+
+
+
diff --git a/src/components/flights/slider/LatestFlightsSlider.vue b/src/components/flights/slider/LatestFlightsSlider.vue
index e8062a8..02107a0 100644
--- a/src/components/flights/slider/LatestFlightsSlider.vue
+++ b/src/components/flights/slider/LatestFlightsSlider.vue
@@ -29,7 +29,14 @@ const slide = ref(0);
class="bg-blue-1 text-white"
>
-
+
diff --git a/src/composables/meta.js b/src/composables/meta.js
index 286b744..5ee5976 100644
--- a/src/composables/meta.js
+++ b/src/composables/meta.js
@@ -1,45 +1,45 @@
const stripHtml = (str) => {
- if (!str)
- return '';
- else
- str = str.toString();
+ if (!str)
+ return '';
+ else
+ str = str.toString();
- return str.replace(/<[^>]+>/ig, '');
+ return str.replace(/<[^>]+>/ig, '');
}
export const commonKeywords = [
- "zápisník", "létání", "ultralight", "letectví", "fotogalerie", "výlet", "vyhlídkový let", "navigační let"
+ "zápisník", "létání", "ultralight", "letectví", "fotogalerie", "výlet", "vyhlídkový let", "navigační let"
];
export const aircraftKeywords = (aircraft) => {
- return [aircraft.callSign, aircraft.manufacturer, aircraft.model]
+ return [aircraft.organization?.name, aircraft.callSign, aircraft.manufacturer, aircraft.model]
};
export const metaData = ({title, description, keywords, image, index = true}) => {
- const filteredKeywords = (keywords || []).filter(kw => !!kw);
- const filteredDescription = stripHtml(description);
+ const filteredKeywords = (keywords || []).filter(kw => !!kw);
+ const filteredDescription = stripHtml(description);
- return {
- title: title,
- titleTemplate(title) {
- return title !== '' ? `${title} - Polétání.cz: fotogalerie ze vzduchu` : 'Polétání.cz'
- },
- meta: {
- description: {name: "description", content: filteredDescription || ""},
- keywords: {name: "keywords", content: (filteredKeywords || commonKeywords).join(", ")},
- ogImage: image ? {property: "og:image", content: image} : undefined,
- ogTitle: {
- property: "og:title",
- content: title,
- template(ogTitle) {
- return (!ogTitle || ogTitle === '') ? "Polétání.cz" : `${ogTitle} - Polétání.cz`
- }
- },
- ogDescription: {
- property: "og:description", content: filteredDescription,
- },
- robots: {name: "robots", content: index ? "index" : "noindex"},
+ return {
+ title: title,
+ titleTemplate(title) {
+ return title !== '' ? `${title} - Polétání.cz: fotogalerie ze vzduchu` : 'Polétání.cz'
+ },
+ meta: {
+ description: {name: "description", content: filteredDescription || ""},
+ keywords: {name: "keywords", content: (filteredKeywords || commonKeywords).join(", ")},
+ ogImage: image ? {property: "og:image", content: image} : undefined,
+ ogTitle: {
+ property: "og:title",
+ content: title,
+ template(ogTitle) {
+ return (!ogTitle || ogTitle === '') ? "Polétání.cz" : `${ogTitle} - Polétání.cz`
}
+ },
+ ogDescription: {
+ property: "og:description", content: filteredDescription,
+ },
+ robots: {name: "robots", content: index ? "index" : "noindex"},
}
+ }
}
diff --git a/src/layouts/ProfileLayout.vue b/src/layouts/ProfileLayout.vue
index e3d55ac..4a0db6d 100644
--- a/src/layouts/ProfileLayout.vue
+++ b/src/layouts/ProfileLayout.vue
@@ -31,7 +31,7 @@
:src="user.titleImageUrl"
style="height: 150px"
>
-
+
toggleVisibility({
$q, store: useAircraftsStore(), object: aircraft.value, variables
});
+filters.value = {aircraftId: aircraftId};
const loadNextFlightsPage = (appendItems) => loadPage({
fetchFunc: useFlightsStore().fetch,
- filters: {aircraftId: aircraftId},
appendItems
});
const {isQueryRunning: areFlightsLoading, totalItemsCount, flights} = storeToRefs(useFlightsStore());
@@ -88,12 +88,14 @@ const loggedUser = storeToRefs(useLoggedUserStore()).user;
diff --git a/src/pages/profile/aircraft/AircraftsPage.vue b/src/pages/profile/aircraft/AircraftsPage.vue
index 4d87e7d..da064e4 100644
--- a/src/pages/profile/aircraft/AircraftsPage.vue
+++ b/src/pages/profile/aircraft/AircraftsPage.vue
@@ -14,8 +14,7 @@ import {loadPage, paginationLimit} from "src/composables/pagination";
useAppStore().setPageTitle("Letadla");
const loadNextAircraftsPage = (appendItems) => loadPage({
- fetchFunc: useAircraftsStore().fetch,
- appendItems
+ fetchFunc: useAircraftsStore().fetch, appendItems
});
loadNextAircraftsPage(false);
diff --git a/src/pages/profile/copilot/CopilotDetailPage.vue b/src/pages/profile/copilot/CopilotDetailPage.vue
index 8e0b898..3655668 100644
--- a/src/pages/profile/copilot/CopilotDetailPage.vue
+++ b/src/pages/profile/copilot/CopilotDetailPage.vue
@@ -8,7 +8,7 @@ import {useCopilotsStore} from "stores/Copilots";
import {storeToRefs} from "pinia";
import PhotoGallery from "components/photos/PhotoGallery.vue";
import ContentCard from "components/ContentCard.vue";
-import {loadPage, paginationLimit} from "src/composables/pagination";
+import {filters, loadPage, paginationLimit} from "src/composables/pagination";
import {useFlightsStore} from "stores/Flights";
import FlightsListSkeleton from "components/flights/skeletons/FlightsListSkeleton.vue";
import {useMeta, useQuasar} from "quasar";
@@ -27,21 +27,20 @@ useCopilotsStore().fetchDetail(copilotId).then(() => {
])
});
-
-const loadNextFlightsPage = (appendItems) => loadPage({
- fetchFunc: useFlightsStore().fetch,
- filters: {copilotId: copilotId},
- appendItems
-});
-loadNextFlightsPage(false);
-const {isQueryRunning: areFlightsLoading, totalItemsCount, flights} = storeToRefs(useFlightsStore());
-const {isQueryRunning, copilot} = storeToRefs(useCopilotsStore());
-const loggedUser = storeToRefs(useLoggedUserStore()).user;
-
const $q = useQuasar();
const togglePublicVisibility = (variables) => toggleVisibility({
$q, store: useCopilotsStore(), object: copilot.value, variables
});
+
+filters.value = {copilotId: copilotId};
+const loadNextFlightsPage = (appendItems) => loadPage({
+ fetchFunc: useFlightsStore().fetch, appendItems
+});
+loadNextFlightsPage(false);
+
+const {isQueryRunning: areFlightsLoading, totalItemsCount, flights} = storeToRefs(useFlightsStore());
+const {isQueryRunning, copilot} = storeToRefs(useCopilotsStore());
+const loggedUser = storeToRefs(useLoggedUserStore()).user;
diff --git a/src/pages/profile/event/EventDetailPage.vue b/src/pages/profile/event/EventDetailPage.vue
index 4d8a788..e50dbdf 100644
--- a/src/pages/profile/event/EventDetailPage.vue
+++ b/src/pages/profile/event/EventDetailPage.vue
@@ -8,7 +8,7 @@ import FlightsList from "components/flights/FlightsList.vue";
import {FORMAT_DATE, formatDatetime} from "src/composables/datetimeUtils";
import {useEventsStore} from "stores/Events";
import {storeToRefs} from "pinia";
-import {loadPage, paginationLimit} from "src/composables/pagination";
+import {filters, loadPage, paginationLimit} from "src/composables/pagination";
import {useFlightsStore} from "stores/Flights";
import PublishButton from "components/inputs/PublishButton.vue";
import {useLoggedUserStore} from "stores/LoggedUser";
@@ -29,22 +29,22 @@ onMounted(() => {
loadNextFlightsPage(false);
})
-const {isQueryRunning, event} = storeToRefs(useEventsStore());
-
-const loadNextFlightsPage = (appendItems) => loadPage({
- fetchFunc: useFlightsStore().fetch,
- filters: {eventId: eventId},
- appendItems
-});
-const {isQueryRunning: areFlightsLoading, totalItemsCount, flights} = storeToRefs(useFlightsStore());
-
-const loggedUser = storeToRefs(useLoggedUserStore()).user;
const $q = useQuasar();
const togglePublicVisibility = (variables) => toggleVisibility({
$q, store: useEventsStore(), object: event.value, variables
});
+
+const {isQueryRunning, event} = storeToRefs(useEventsStore());
+
+filters.value = {eventId: eventId}
+const loadNextFlightsPage = (appendItems) => loadPage({
+ fetchFunc: useFlightsStore().fetch, appendItems
+});
+
+const {isQueryRunning: areFlightsLoading, totalItemsCount, flights} = storeToRefs(useFlightsStore());
+const loggedUser = storeToRefs(useLoggedUserStore()).user;
diff --git a/src/pages/profile/poi/PointOfInterestDetailPage.vue b/src/pages/profile/poi/PointOfInterestDetailPage.vue
index d0a7071..c0374c9 100644
--- a/src/pages/profile/poi/PointOfInterestDetailPage.vue
+++ b/src/pages/profile/poi/PointOfInterestDetailPage.vue
@@ -16,7 +16,7 @@ import {successObject} from "src/composables/dialog";
import ContentCardEditButton from "components/ContentCardEditButton.vue";
import {useFlightsStore} from "stores/Flights";
import FlightsListSkeleton from "components/flights/skeletons/FlightsListSkeleton.vue";
-import {loadPage, paginationLimit} from "src/composables/pagination";
+import {filters, loadPage, paginationLimit} from "src/composables/pagination";
import PublishButton from "components/inputs/PublishButton.vue";
import CopyLinkButton from "components/inputs/CopyLinkButton.vue";
@@ -33,19 +33,20 @@ usePointsOfInterestStore().fetchDetail(poiId).then((p) => {
])
});
-const loadNextFlightsPage = (appendItems) => loadPage({
- fetchFunc: useFlightsStore().fetch,
- filters: {pointOfInterestId: poiId},
- appendItems
-});
-loadNextFlightsPage(false);
-const {isQueryRunning: areFlightsLoading, totalItemsCount, flights} = storeToRefs(useFlightsStore());
-const {isQueryRunning, pointOfInterest} = storeToRefs(usePointsOfInterestStore());
const $q = useQuasar();
const togglePublicVisibility = (variables) => toggleVisibility({
$q, store: usePointsOfInterestStore(), object: pointOfInterest.value, variables
});
+
+filters.value = {pointOfInterestId: poiId};
+const loadNextFlightsPage = (appendItems) => loadPage({
+ fetchFunc: useFlightsStore().fetch,
+ appendItems
+});
+loadNextFlightsPage(false);
+const {isQueryRunning: areFlightsLoading, totalItemsCount, flights} = storeToRefs(useFlightsStore());
+const {isQueryRunning, pointOfInterest} = storeToRefs(usePointsOfInterestStore());
@@ -73,6 +74,7 @@ const togglePublicVisibility = (variables) => toggleVisibility({
@@ -89,6 +91,7 @@ const togglePublicVisibility = (variables) => toggleVisibility({
diff --git a/src/pages/public/HelpPage.vue b/src/pages/public/HelpPage.vue
new file mode 100644
index 0000000..a9802f1
--- /dev/null
+++ b/src/pages/public/HelpPage.vue
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/public/aircraft/AircraftDetailPage.vue b/src/pages/public/aircraft/AircraftDetailPage.vue
index 272188f..3cde710 100644
--- a/src/pages/public/aircraft/AircraftDetailPage.vue
+++ b/src/pages/public/aircraft/AircraftDetailPage.vue
@@ -15,7 +15,7 @@ import {useAppStore} from "stores/App";
import FlightsList from "components/flights/FlightsList.vue";
import {storeToRefs} from "pinia";
import {onMounted} from "vue";
-import {metaData} from "src/composables/meta";
+import {aircraftKeywords, metaData} from "src/composables/meta";
import PhotoGallery from "components/photos/PhotoGallery.vue";
import ContentCard from "components/ContentCard.vue";
import AircraftInfo from "components/aircrafts/AircraftInfo.vue";
@@ -24,7 +24,7 @@ import {useFlightsStore} from "stores/Flights";
import FlightsListSkeleton from "components/flights/skeletons/FlightsListSkeleton.vue";
import BasicInfoBanner from "components/banners/BasicInfoBanner.vue";
import PhotoGallerySkeleton from "components/photos/skeletons/PhotoGallerySkeleton.vue";
-import {loadPage, paginationLimit} from "src/composables/pagination";
+import {filters, loadPage, paginationLimit} from "src/composables/pagination";
const $q = useQuasar();
const $router = useRouter();
@@ -38,11 +38,7 @@ useMeta(() => metaData({
title: aircraft.value.callSign,
image: aircraft.value.titleImage?.url,
keywords: [
- "letadlo",
- aircraft.value.callSign,
- aircraft.value.model,
- aircraft.value.organization?.name,
- aircraft.value.manufacturer
+ "letadlo", ...aircraftKeywords(aircraft.value)
],
description: aircraft.value.description || `Detail letadla ${aircraft.value.callSign}.`
}));
@@ -53,10 +49,9 @@ useAppStore().setBreadcrumbs([
]);
+filters.value = {aircraftId: aircraft.value.id};
const loadNextFlightsPage = (appendItems) => loadPage({
- fetchFunc: useFlightsStore().fetchPublic,
- filters: {aircraftId: aircraft.value.id},
- appendItems
+ fetchFunc: useFlightsStore().fetchPublic, appendItems
});
onMounted(() => {
diff --git a/src/pages/public/pilotProfile/CopilotDetailPage.vue b/src/pages/public/pilotProfile/CopilotDetailPage.vue
index 0724193..9cd85b6 100644
--- a/src/pages/public/pilotProfile/CopilotDetailPage.vue
+++ b/src/pages/public/pilotProfile/CopilotDetailPage.vue
@@ -20,7 +20,7 @@ import PhotoGallery from "components/photos/PhotoGallery.vue";
import {useMeta} from "quasar";
import {metaData} from "src/composables/meta";
import PhotoGallerySkeleton from "components/photos/skeletons/PhotoGallerySkeleton.vue";
-import {loadPage, paginationLimit} from "src/composables/pagination";
+import {filters, loadPage, paginationLimit} from "src/composables/pagination";
import BasicInfoBanner from "components/banners/BasicInfoBanner.vue";
const props = defineProps({
@@ -49,15 +49,13 @@ useMeta(() => metaData({
}));
+filters.value = {copilotId: copilot.value.id};
const loadNextFlightsPage = (appendItems) => loadPage({
- fetchFunc: useFlightsStore().fetchPublic,
- filters: {copilotId: copilot.value.id},
- appendItems
+ fetchFunc: useFlightsStore().fetchPublic, appendItems
});
onMounted(() => {
loadNextFlightsPage(false);
-
usePhotosStore().fetchPublic({copilotId: copilot.value.id})
})
diff --git a/src/pages/public/pilotProfile/EventDetailPage.vue b/src/pages/public/pilotProfile/EventDetailPage.vue
index bc7cf22..33c5819 100644
--- a/src/pages/public/pilotProfile/EventDetailPage.vue
+++ b/src/pages/public/pilotProfile/EventDetailPage.vue
@@ -14,7 +14,7 @@ import EventDetailSkeleton from "components/event/skeletons/EventDetailSkeleton.
import {FORMAT_DATE, formatDatetime} from "src/composables/datetimeUtils";
import FlightsList from "components/flights/FlightsList.vue";
import {storeToRefs} from "pinia";
-import {loadPage, paginationLimit} from "src/composables/pagination";
+import {filters, loadPage, paginationLimit} from "src/composables/pagination";
import {useFlightsStore} from "stores/Flights";
import FlightsListSkeleton from "components/flights/skeletons/FlightsListSkeleton.vue";
import {useMeta} from "quasar";
@@ -41,15 +41,13 @@ useMeta(() => metaData({
description: event.value.description
}))
+filters.value = {username: props.pilot.publicUsername, eventId: event.value.id};
const loadNextFlightsPage = (appendItems) => loadPage({
- fetchFunc: useFlightsStore().fetchPublic,
- filters: {username: props.pilot.publicUsername, eventId: event.value.id},
- appendItems
+ fetchFunc: useFlightsStore().fetchPublic, appendItems
});
loadNextFlightsPage(false);
const {flights, totalItemsCount, isQueryRunning: areFlightsLoading} = storeToRefs(useFlightsStore());
-
diff --git a/src/pages/public/pilotProfile/FlightDetailPage.vue b/src/pages/public/pilotProfile/FlightDetailPage.vue
index c3e4e97..832611f 100644
--- a/src/pages/public/pilotProfile/FlightDetailPage.vue
+++ b/src/pages/public/pilotProfile/FlightDetailPage.vue
@@ -45,7 +45,7 @@ useAppStore().setBreadcrumbs([
useMeta(() => metaData({
title: `${flightNameFormatted} - ${props.pilot.name}`,
- keywords: ["let", "výlet", "letadlo", props.pilot.name, aircraftKeywords(flight.value.aircraft)],
+ keywords: ["let", "výlet", "letadlo", props.pilot.name, ...aircraftKeywords(flight.value.aircraft)],
description: flight.value.description,
image: flight.value.titlePhoto?.url
}
diff --git a/src/pages/public/pilotProfile/FlightsListPage.vue b/src/pages/public/pilotProfile/FlightsListPage.vue
index 89805cf..f1e58bc 100644
--- a/src/pages/public/pilotProfile/FlightsListPage.vue
+++ b/src/pages/public/pilotProfile/FlightsListPage.vue
@@ -7,7 +7,7 @@ import {useFlightsStore} from "stores/Flights";
import {storeToRefs} from "pinia";
import {commonKeywords, metaData} from "src/composables/meta";
import {useMeta} from "quasar";
-import {loadPage, paginationLimit} from "src/composables/pagination";
+import {filters, loadPage, paginationLimit} from "src/composables/pagination";
const props = defineProps({
pilot: {
@@ -29,9 +29,9 @@ useAppStore().setBreadcrumbs([
{label: `@${props.pilot.publicUsername}`},
])
+filters.value = {username: props.pilot.publicUsername};
const loadNextFlightsPage = (appendItems) => loadPage({
fetchFunc: useFlightsStore().fetchPublic,
- filters: {username: props.pilot.publicUsername},
appendItems
});
loadNextFlightsPage(false);
diff --git a/src/pages/public/poi/PointOfInterestDetailPage.vue b/src/pages/public/poi/PointOfInterestDetailPage.vue
index f72a86b..59a71da 100644
--- a/src/pages/public/poi/PointOfInterestDetailPage.vue
+++ b/src/pages/public/poi/PointOfInterestDetailPage.vue
@@ -23,7 +23,7 @@ import FlightsListSkeleton from "components/flights/skeletons/FlightsListSkeleto
import BasicInfoBanner from "components/banners/BasicInfoBanner.vue";
import {onMounted} from "vue";
import PhotoGallerySkeleton from "components/photos/skeletons/PhotoGallerySkeleton.vue";
-import {loadPage, paginationLimit} from "src/composables/pagination";
+import {filters, loadPage, paginationLimit} from "src/composables/pagination";
const {pointOfInterest, isQueryRunning} = storeToRefs(usePointsOfInterestStore());
const {photos, isQueryRunning: arePhotosLoading} = storeToRefs(usePhotosStore());
@@ -41,10 +41,9 @@ useAppStore().setBreadcrumbs([
{label: pointOfInterest.value.name}
]);
-
+filters.value = {pointOfInterestId: pointOfInterest.value.id};
const loadNextFlightsPage = (appendItems) => loadPage({
fetchFunc: useFlightsStore().fetchPublic,
- filters: {pointOfInterestId: pointOfInterest.value.id},
appendItems
});
diff --git a/src/router/routes.js b/src/router/routes.js
index 7494c30..e0416ba 100644
--- a/src/router/routes.js
+++ b/src/router/routes.js
@@ -20,6 +20,7 @@ const routes = [
{path: 'letadlo/:callSign', name: "publicAircraftDetail", component: () => import('pages/public/aircraft/AircraftDetailPage.vue')},
{path: 'mista', name: "publicPOIs", component: () => import('pages/public/poi/PointsOfInterestPage.vue')},
{path: 'mista/:slug', name: "publicPOIDetail", component: () => import('pages/public/poi/PointOfInterestDetailPage.vue')},
+ {path: 'napoveda', name: "help", component: () => import('pages/public/HelpPage.vue')},
{
path: ':username',
component: () => import('pages/public/PilotProfileWrapper.vue'),