diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d3ac84a9..c7ca7a98 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -189,7 +189,7 @@ pages:
.docker: &docker
stage: docker
- image: docker:20.10.12
+ image: docker:20.10.18
variables:
DOCKER_TLS_CERTDIR: "/certs"
DOCKER_HOST: tcp://docker:2376
@@ -197,13 +197,13 @@ pages:
DOCKER_CERT_PATH: "$DOCKER_TLS_CERTDIR/client"
DOCKER_DRIVER: overlay2
services:
- - docker:20.10.12-dind
+ - docker:20.10.18-dind
cache: {}
before_script:
# Install buildx
- - wget https://github.com/docker/buildx/releases/download/v0.8.1/buildx-v0.8.1.linux-amd64
+ - wget https://github.com/docker/buildx/releases/download/v0.9.1/buildx-v0.9.1.linux-amd64
- mkdir -p ~/.docker/cli-plugins/
- - mv buildx-v0.8.1.linux-amd64 ~/.docker/cli-plugins/docker-buildx
+ - mv buildx-v0.9.1.linux-amd64 ~/.docker/cli-plugins/docker-buildx
- chmod a+x ~/.docker/cli-plugins/docker-buildx
# Create env
- docker context create tls-environment
@@ -244,7 +244,7 @@ build-docker-tag:
# Packaging app for amd64
package-app:
- image: mobilizon/buildpack:1.13.4-erlang-24.3.3-debian-buster
+ image: mobilizon/buildpack:1.14.1-erlang-25.1.1-debian-buster
stage: package
variables: &release-variables
MIX_ENV: "prod"
@@ -328,6 +328,7 @@ multi-arch-release:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
- if: $CI_COMMIT_TAG
timeout: 3h
+ allow_failure: true
# Release
release-upload:
@@ -348,6 +349,7 @@ release-upload:
parallel:
matrix:
- ARCH: ["amd64", "arm", "arm64"]
+ allow_failure: true
release-create:
stage: deploy
diff --git a/.tool-versions b/.tool-versions
index 73654c14..e4f68f14 100644
--- a/.tool-versions
+++ b/.tool-versions
@@ -1,2 +1,2 @@
-elixir 1.14.0-otp-25
-erlang 25.0.4
+elixir 1.14.1-otp-25
+erlang 25.1.1
diff --git a/docker/production/Dockerfile b/docker/production/Dockerfile
index 33612106..7f19b640 100644
--- a/docker/production/Dockerfile
+++ b/docker/production/Dockerfile
@@ -5,14 +5,12 @@ RUN apk add --no-cache python3 build-base libwebp-tools bash imagemagick ncurses
WORKDIR /build
COPY js .
-ENV CYPRESS_INSTALL_BINARY 0
-
# Network timeout because it's slow when cross-compiling
RUN yarn install --network-timeout 100000 \
&& yarn run build
# Then, build the application binary
-FROM elixir:1.13-alpine AS builder
+FROM elixir:1.14-alpine AS builder
RUN apk add --no-cache build-base git cmake
diff --git a/js/package.json b/js/package.json
index 506af534..26df4a71 100644
--- a/js/package.json
+++ b/js/package.json
@@ -50,7 +50,7 @@
"@vue-a11y/announcer": "^2.1.0",
"@vue-a11y/skip-to": "^2.1.2",
"@vue-leaflet/vue-leaflet": "^0.6.1",
- "@vue/apollo-composable": "^4.0.0-alpha.17",
+ "@vue/apollo-composable": "^4.0.0-beta.1",
"@vue/compiler-sfc": "^3.2.37",
"@vueuse/core": "^9.1.0",
"@vueuse/head": "^0.9.6",
@@ -111,8 +111,8 @@
"@types/prosemirror-view": "^1.11.4",
"@types/sanitize-html": "^2.5.0",
"@vitejs/plugin-vue": "^3.0.3",
- "@vitest/coverage-c8": "^0.23.4",
- "@vitest/ui": "^0.23.4",
+ "@vitest/coverage-c8": "^0.24.1",
+ "@vitest/ui": "^0.24.1",
"@vue/eslint-config-prettier": "^7.0.0",
"@vue/eslint-config-typescript": "^11.0.0",
"@vue/test-utils": "^2.0.2",
@@ -132,7 +132,7 @@
"typescript": "~4.8.3",
"vite": "^3.0.9",
"vite-plugin-pwa": "^0.13.0",
- "vitest": "^0.23.3",
+ "vitest": "^0.24.1",
"vue-i18n-extract": "^2.0.4"
}
}
diff --git a/js/src/assets/oruga-tailwindcss.css b/js/src/assets/oruga-tailwindcss.css
index e18222bd..e0e9830f 100644
--- a/js/src/assets/oruga-tailwindcss.css
+++ b/js/src/assets/oruga-tailwindcss.css
@@ -16,6 +16,15 @@ body {
.btn-outlined-primary {
@apply bg-transparent text-black dark:text-white font-semibold py-2 px-4 border border-mbz-bluegreen dark:border-violet-3;
}
+.btn-outlined-success {
+ @apply border-mbz-success;
+}
+.btn-outlined-danger {
+ @apply border-mbz-danger;
+}
+.btn-outlined-warning {
+ @apply border-mbz-warning;
+}
.btn-outlined-:hover,
.btn-outlined-primary:hover {
@apply font-bold py-2 px-4 bg-mbz-bluegreen dark:bg-violet-3 text-white rounded;
@@ -32,6 +41,9 @@ body {
.btn-success {
@apply bg-mbz-success;
}
+.btn-warning {
+ @apply bg-mbz-warning text-black hover:bg-mbz-warning/90 hover:text-slate-800;
+}
.btn-text {
@apply bg-transparent border-transparent text-black dark:text-white font-normal underline hover:bg-zinc-200 hover:text-black;
}
@@ -171,7 +183,7 @@ body {
/* Select */
.select {
- @apply dark:bg-zinc-600 dark:placeholder:text-zinc-400 dark:text-zinc-50 rounded pl-2 pr-6 border-2 border-transparent h-10 shadow-none;
+ @apply dark:bg-zinc-600 dark:placeholder:text-zinc-400 dark:text-zinc-50 rounded pl-2 pr-6 border-2 border-transparent h-10 shadow-none border rounded;
}
/* Radio */
@@ -278,3 +290,35 @@ button.menubar__button {
.menubar__button {
@apply hover:bg-[rgba(0,0,0,.05)];
}
+
+/** Datepicker */
+.o-drop__menu--active {
+ @apply z-50;
+}
+.o-dpck__box {
+ @apply px-4 py-1;
+}
+.o-dpck__header {
+ @apply pb-2 mb-2;
+ border-bottom: 1px solid #dbdbdb;
+}
+.o-dpck__header__next,
+.o-dpck__header__previous {
+ @apply justify-center text-center no-underline cursor-pointer items-center shadow-none inline-flex relative select-none leading-6 border rounded h-10 p-2 m-1;
+ min-width: 2.25em;
+}
+.o-dpck__header__list {
+ @apply order-2 items-center flex justify-center text-center list-none flex-wrap my-0 p-0 -mx-0.5;
+}
+
+.o-dpck__header__list > * {
+ @apply mx-0.5;
+}
+.o-dpck__month__cell,
+.o-dpck__table__cell {
+ @apply rounded py-2 px-3;
+}
+.o-dpck__month__head-cell,
+.o-dpck__table__head-cell {
+ @apply font-semibold;
+}
diff --git a/js/src/components/Event/EventMetadataItem.vue b/js/src/components/Event/EventMetadataItem.vue
index ff98a047..6854eb77 100644
--- a/js/src/components/Event/EventMetadataItem.vue
+++ b/js/src/components/Event/EventMetadataItem.vue
@@ -53,7 +53,7 @@
:pattern="
modelValue.pattern ? modelValue.pattern.source : undefined
"
- :validation-message="$t(`This URL doesn't seem to be valid`)"
+ :validation-message="t(`This URL doesn't seem to be valid`)"
required
v-model="metadataItemValue"
:placeholder="modelValue.placeholder"
@@ -78,10 +78,11 @@
-
+
+
+ {{ t("Remove") }}
+
+
@@ -89,6 +90,7 @@
import { EventMetadataKeyType, EventMetadataType } from "@/types/enums";
import { IEventMetadataDescription } from "@/types/event-metadata";
import { computed, ref } from "vue";
+import { useI18n } from "vue-i18n";
const props = defineProps<{
modelValue: IEventMetadataDescription;
@@ -96,6 +98,8 @@ const props = defineProps<{
const emit = defineEmits(["update:modelValue", "removeItem"]);
+const { t } = useI18n({ useScope: "global" });
+
const urlInput = ref(null);
const metadataItemValue = computed({
diff --git a/js/src/components/Event/FullAddressAutoComplete.vue b/js/src/components/Event/FullAddressAutoComplete.vue
index f7f42ef2..a3899546 100644
--- a/js/src/components/Event/FullAddressAutoComplete.vue
+++ b/js/src/components/Event/FullAddressAutoComplete.vue
@@ -116,7 +116,6 @@ import {
IAddress,
addressFullName,
addressToPoiInfos,
- IPoiInfo,
} from "../../types/address.model";
import AddressInfo from "../../components/Address/AddressInfo.vue";
import { computed, ref, watch, defineAsyncComponent } from "vue";
diff --git a/js/src/components/LeafletMap.vue b/js/src/components/LeafletMap.vue
index 0426739a..8aa613dd 100644
--- a/js/src/components/LeafletMap.vue
+++ b/js/src/components/LeafletMap.vue
@@ -141,10 +141,6 @@ const mountLocateControl = () => {
icon.setAttribute("aria-hidden", "true");
icon.setAttribute("role", "img");
icon.insertAdjacentHTML("beforeend", locationIconHTML.value);
- console.log("icon for location", {
- link,
- icon,
- });
return { link, icon };
},
...props.options,
diff --git a/js/src/components/Local/CloseEvents.vue b/js/src/components/Local/CloseEvents.vue
index d9b4c19b..8f1ed5f8 100644
--- a/js/src/components/Local/CloseEvents.vue
+++ b/js/src/components/Local/CloseEvents.vue
@@ -94,7 +94,6 @@ const distance = computed(() => (suggestGeoloc.value ? 150 : 25));
const now = computed(() => roundToNearestMinute(new Date()));
const searchEnabled = computed(() => geoHash.value != undefined);
-const enabled = ref(false);
const {
result: eventsResult,
diff --git a/js/src/components/Search/EventMarkerMap.vue b/js/src/components/Search/EventMarkerMap.vue
index d67efc23..0f47e0e5 100644
--- a/js/src/components/Search/EventMarkerMap.vue
+++ b/js/src/components/Search/EventMarkerMap.vue
@@ -162,13 +162,6 @@ onMounted(async () => {
myBottomSheet.value.close();
}
});
- // mapElement.value.on('load', function () {
- // console.log('load event')
- // setTimeout(() => {
- // console.log('invalidate size')
- // mapElement.value.invalidateSize()
- // }, 1000)
- // })
markers.value = new MarkerClusterGroup({ chunkedLoading: true });
mapElement.value.on("zoom", debounce(update, 1000));
diff --git a/js/src/components/core/CustomDialog.vue b/js/src/components/core/CustomDialog.vue
index 7c5e87e9..599d6df3 100644
--- a/js/src/components/core/CustomDialog.vue
+++ b/js/src/components/core/CustomDialog.vue
@@ -112,7 +112,7 @@ const iconByType = computed(() => {
* Call the onConfirm prop (function) and close the Dialog.
*/
const confirm = () => {
- console.log("dialog confirmed", input.value.$el);
+ console.debug("dialog confirmed", input.value?.$el);
if (input.value !== undefined) {
const inputElement = input.value.$el.querySelector("input");
if (!inputElement.checkValidity()) {
diff --git a/js/src/components/core/MaterialIcon.vue b/js/src/components/core/MaterialIcon.vue
index 491e45fd..4b69b3ab 100644
--- a/js/src/components/core/MaterialIcon.vue
+++ b/js/src/components/core/MaterialIcon.vue
@@ -1,5 +1,9 @@
-
+
+
+
diff --git a/js/src/views/Event/EventView.vue b/js/src/views/Event/EventView.vue
index 539f79cc..ae3a70f7 100755
--- a/js/src/views/Event/EventView.vue
+++ b/js/src/views/Event/EventView.vue
@@ -837,7 +837,7 @@ const openDeleteEventModal = () => {
pattern: escapeRegExp(event.value?.title ?? ""),
},
onConfirm: (result: string) => {
- console.log("calling delete event", result);
+ console.debug("calling delete event", result);
if (result.trim() === event.value?.title) {
event.value?.id ? deleteEvent({ eventId: event.value?.id }) : null;
}
@@ -1008,7 +1008,7 @@ const confirmLeave = (): void => {
hasIcon: true,
onConfirm: () => {
if (event.value && currentActor.value?.id) {
- console.log("calling leave event");
+ console.debug("calling leave event");
leaveEvent(event.value, currentActor.value.id);
}
},
diff --git a/js/src/views/Settings/PreferencesView.vue b/js/src/views/Settings/PreferencesView.vue
index 71e45159..94fcf25a 100644
--- a/js/src/views/Settings/PreferencesView.vue
+++ b/js/src/views/Settings/PreferencesView.vue
@@ -112,11 +112,7 @@