Skip to content

Commit

Permalink
Change CTRL banner for precampaign
Browse files Browse the repository at this point in the history
 The first slide is removed from both banners.
The feature of redirecting users directly to the payment providers is removed in both banners.
The soft-close feature is removed/not used in both banners.
The progress bar is removed from the modal/expanded banner in both banners.
The campaign day sentence is removed/not used in both banners.
The visitors-vs-donors sentence is removed/replaced in both banners.
broken styles are fixed (wikipedia skin introduced some weird borders)
The banners share the same height with the banner they are based on.

https://phabricator.wikimedia.org/T366161
  • Loading branch information
moiikana committed Jun 20, 2024
1 parent 03c31f3 commit c6485d7
Show file tree
Hide file tree
Showing 13 changed files with 234 additions and 85 deletions.
2 changes: 1 addition & 1 deletion banners/mobile/C24_WMDE_Mobile_DE_01/banner_var.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { createVueApp } from '@src/createVueApp';
import './styles/styles.scss';

import BannerConductor from '@src/components/BannerConductor/BannerConductor.vue';
import Banner from './components/BannerCtrl.vue';
import Banner from './components/BannerVar.vue';
import { UrlRuntimeEnvironment } from '@src/utils/RuntimeEnvironment';
import { WindowResizeHandler } from '@src/utils/ResizeHandler';
import PageWPORG from '@src/page/PageWPORG';
Expand Down
53 changes: 2 additions & 51 deletions banners/mobile/C24_WMDE_Mobile_DE_01/components/BannerCtrl.vue
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<template>
<div class="wmde-banner-wrapper" :class="contentState">
<MiniBanner
@close="onCloseMiniBanner"
@close="onClose( 'MiniBanner', CloseChoices.Hide )"
@show-full-page-banner="onshowFullPageBanner"
@show-full-page-banner-preselected="onshowFullPageBannerPreselected"
>
Expand All @@ -24,10 +24,6 @@
<BannerText :play-live-text="contentState === ContentStates.FullPage"/>
</template>

<template #progress>
<ProgressBar amount-to-show-on-right="TARGET"/>
</template>

<template #donation-form="{ formInteraction }: any">
<MultiStepDonation :step-controllers="stepControllers" @form-interaction="formInteraction" :page-scroller="pageScroller">

Expand Down Expand Up @@ -63,32 +59,6 @@
</template>
</FullPageBanner>

<SoftClose
v-if="contentState === ContentStates.SoftClosing"
:show-close-icon="true"
@close="() => onClose( 'SoftClose', CloseChoices.Close )"
@maybe-later="() => onClose( 'SoftClose', CloseChoices.MaybeLater )"
@time-out-close="() => onClose( 'SoftClose', CloseChoices.TimeOut )"
>
<template #buttons="{ timer }: any">
<button
class="wmde-banner-soft-close-button wmde-banner-soft-close-button-maybe-later"
@click="() => onSoftCloseClose( timer, 'SoftClose', CloseChoices.MaybeLater )">
{{ $translate( 'soft-close-button-maybe-later' ) }}
</button>
<button
class="wmde-banner-soft-close-button wmde-banner-soft-close-button-close"
@click="() => onSoftCloseClose( timer, 'SoftClose', CloseChoices.Close )">
{{ $translate( 'soft-close-button-close' ) }}
</button>
<button
class="wmde-banner-soft-close-button wmde-banner-soft-close-button-already-donated"
@click="() => onSoftCloseClose( timer, 'SoftClose', CloseChoices.NoMoreBannersForCampaign )">
{{ $translate( 'soft-close-button-already-donated' ) }}
</button>
</template>
</SoftClose>

<FundsModal
:content="useOfFundsContent"
:is-funds-modal-visible="isFundsModalVisible"
Expand All @@ -99,7 +69,6 @@

<script setup lang="ts">
import { BannerStates } from '@src/components/BannerConductor/StateMachine/BannerStates';
import SoftClose from '@src/components/SoftClose/SoftClose.vue';
import { computed, inject, ref, watch } from 'vue';
import FullPageBanner from './FullPageBanner.vue';
import MiniBanner from './MiniBanner.vue';
Expand All @@ -121,7 +90,6 @@ import ChevronLeftIcon from '@src/components/Icons/ChevronLeftIcon.vue';
import { CloseChoices } from '@src/domain/CloseChoices';
import { CloseEvent } from '@src/tracking/events/CloseEvent';
import { TrackingFeatureName } from '@src/tracking/TrackingEvent';
import ProgressBar from '@src/components/ProgressBar/ProgressBar.vue';
import MainDonationFormPaymentMethodLabeledButton
from '@src/components/DonationForm/Forms/MainDonationFormPaymentMethodLabeledButton.vue';
import {
Expand All @@ -130,12 +98,10 @@ import {
import {
createSubmittableUpgradeToYearly
} from '@src/components/DonationForm/StepControllers/SubmittableUpgradeToYearly';
import { useAnonymousAddressTypeSetter } from '@src/components/composables/useAnonymousAddressTypeSetter';
enum ContentStates {
Mini = 'wmde-banner-wrapper--mini',
FullPage = 'wmde-banner-wrapper--full-page',
SoftClosing = 'wmde-banner-wrapper--soft-closing'
FullPage = 'wmde-banner-wrapper--full-page'
}
enum FormStepNames {
Expand Down Expand Up @@ -165,29 +131,14 @@ const stepControllers = [
createSubmittableUpgradeToYearly( formModel, FormStepNames.MainDonationFormStep, FormStepNames.MainDonationFormStep )
];
useAnonymousAddressTypeSetter();
watch( contentState, async () => {
emit( 'bannerContentChanged' );
} );
function onCloseMiniBanner(): void {
if ( props.remainingImpressions > 0 ) {
contentState.value = ContentStates.SoftClosing;
} else {
onClose( 'MainBanner', CloseChoices.Close );
}
}
function onClose( feature: TrackingFeatureName, userChoice: CloseChoices ): void {
emit( 'bannerClosed', new CloseEvent( feature, userChoice ) );
}
function onSoftCloseClose( timer: number, feature: TrackingFeatureName, userChoice: CloseChoices ): void {
window.clearInterval( timer );
onClose( feature, userChoice );
}
function onshowFullPageBanner(): void {
slideShowStopped.value = true;
contentState.value = ContentStates.FullPage;
Expand Down
163 changes: 163 additions & 0 deletions banners/mobile/C24_WMDE_Mobile_DE_01/components/BannerVar.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
<template>
<div class="wmde-banner-wrapper" :class="contentState">
<MiniBanner
@close="onClose( 'MiniBanner', CloseChoices.Hide )"
@show-full-page-banner="onshowFullPageBanner"
@show-full-page-banner-preselected="onshowFullPageBannerPreselected"
>
<template #banner-slides>
<KeenSlider :with-navigation="false" :play="slideshowShouldPlay" :interval="5000">

<template #slides="{ currentSlide }: any">
<BannerSlides :currentSlide="currentSlide" :play-live-text="contentState === ContentStates.Mini"/>
</template>

</KeenSlider>
</template>
</MiniBanner>

<FullPageBanner
@showFundsModal="isFundsModalVisible = true"
@close="() => onClose( 'FullPageBanner', CloseChoices.Hide )"
>
<template #banner-text>
<BannerText :play-live-text="contentState === ContentStates.FullPage"/>
</template>

<template #donation-form="{ formInteraction }: any">
<MultiStepDonation :step-controllers="stepControllers" @form-interaction="formInteraction" :page-scroller="pageScroller">

<template #[FormStepNames.MainDonationFormStep]="{ pageIndex, submit, isCurrent, previous }: any">
<MainDonationForm :page-index="pageIndex" @submit="submit" :is-current="isCurrent" @previous="previous">

<template #button>
<MainDonationFormPaymentMethodLabeledButton/>
</template>

</MainDonationForm>
</template>

<template #[FormStepNames.UpgradeToYearlyFormStep]="{ pageIndex, submit, isCurrent, previous }: any">
<UpgradeToYearlyButtonForm
:show-manual-upgrade-option = false
:page-index="pageIndex"
@submit="submit"
:is-current="isCurrent"
@previous="previous"
>
<template #back>
<ChevronLeftIcon/> {{ $translate( 'back-button' ) }}
</template>
</UpgradeToYearlyButtonForm>
</template>

</MultiStepDonation>
</template>

<template #footer>
<BannerFooter :show-funds-link="false"/>
</template>
</FullPageBanner>

<FundsModal
:content="useOfFundsContent"
:is-funds-modal-visible="isFundsModalVisible"
@hideFundsModal="onHideFundsModal"
/>
</div>
</template>

<script setup lang="ts">
import { BannerStates } from '@src/components/BannerConductor/StateMachine/BannerStates';
import { computed, inject, ref, watch } from 'vue';
import FullPageBanner from './FullPageBanner.vue';
import MiniBanner from './MiniBanner.vue';
import FundsModal from '@src/components/UseOfFunds/FundsModal.vue';
import { UseOfFundsContent as useOfFundsContentInterface } from '@src/domain/UseOfFunds/UseOfFundsContent';
import { UseOfFundsCloseSources } from '@src/components/UseOfFunds/UseOfFundsCloseSources';
import { PageScroller } from '@src/utils/PageScroller/PageScroller';
import MainDonationForm from '@src/components/DonationForm/Forms/MainDonationForm.vue';
import MultiStepDonation from '@src/components/DonationForm/MultiStepDonation.vue';
import BannerText from '../content/BannerTextVar.vue';
import BannerSlides from '../content/BannerSlides.vue';
import BannerFooter from '@src/components/Footer/BannerFooter.vue';
import KeenSlider from '@src/components/Slider/KeenSlider.vue';
import { Tracker } from '@src/tracking/Tracker';
import { MobileMiniBannerExpandedEvent } from '@src/tracking/events/MobileMiniBannerExpandedEvent';
import { useFormModel } from '@src/components/composables/useFormModel';
import UpgradeToYearlyButtonForm from '@src/components/DonationForm/Forms/UpgradeToYearlyButtonForm.vue';
import ChevronLeftIcon from '@src/components/Icons/ChevronLeftIcon.vue';
import { CloseChoices } from '@src/domain/CloseChoices';
import { CloseEvent } from '@src/tracking/events/CloseEvent';
import { TrackingFeatureName } from '@src/tracking/TrackingEvent';
import MainDonationFormPaymentMethodLabeledButton
from '@src/components/DonationForm/Forms/MainDonationFormPaymentMethodLabeledButton.vue';
import {
createSubmittableMainDonationForm
} from '@src/components/DonationForm/StepControllers/SubmittableMainDonationForm';
import {
createSubmittableUpgradeToYearly
} from '@src/components/DonationForm/StepControllers/SubmittableUpgradeToYearly';
enum ContentStates {
Mini = 'wmde-banner-wrapper--mini',
FullPage = 'wmde-banner-wrapper--full-page'
}
enum FormStepNames {
MainDonationFormStep = 'MainDonationForm',
UpgradeToYearlyFormStep = 'UpgradeToYearlyForm'
}
interface Props {
bannerState: BannerStates;
useOfFundsContent: useOfFundsContentInterface;
pageScroller: PageScroller;
remainingImpressions: number;
}
const props = defineProps<Props>();
const emit = defineEmits( [ 'bannerClosed', 'bannerContentChanged' ] );
const tracker = inject<Tracker>( 'tracker' );
const isFundsModalVisible = ref<boolean>( false );
const slideShowStopped = ref<boolean>( false );
const slideshowShouldPlay = computed( () => props.bannerState === BannerStates.Visible && !slideShowStopped.value );
const contentState = ref<ContentStates>( ContentStates.Mini );
const formModel = useFormModel();
const stepControllers = [
createSubmittableMainDonationForm( formModel, FormStepNames.UpgradeToYearlyFormStep ),
createSubmittableUpgradeToYearly( formModel, FormStepNames.MainDonationFormStep, FormStepNames.MainDonationFormStep )
];
watch( contentState, async () => {
emit( 'bannerContentChanged' );
} );
function onClose( feature: TrackingFeatureName, userChoice: CloseChoices ): void {
emit( 'bannerClosed', new CloseEvent( feature, userChoice ) );
}
function onshowFullPageBanner(): void {
slideShowStopped.value = true;
contentState.value = ContentStates.FullPage;
tracker.trackEvent( new MobileMiniBannerExpandedEvent() );
}
function onshowFullPageBannerPreselected(): void {
slideShowStopped.value = true;
formModel.selectedAmount.value = '10';
contentState.value = ContentStates.FullPage;
tracker.trackEvent( new MobileMiniBannerExpandedEvent( 'preselected' ) );
}
const onHideFundsModal = ( payload: { source: UseOfFundsCloseSources } ): void => {
props.pageScroller.scrollIntoView( payload.source === UseOfFundsCloseSources.callToAction ?
'.wmde-banner-form' :
'.wmde-banner-full-small-print .wmde-banner-footer-usage-link'
);
isFundsModalVisible.value = false;
};
</script>
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
<div class="wmde-banner-full-content">
<div class="wmde-banner-full-info">
<slot name="banner-text"/>
<slot name="progress"/>
</div>
<div class="wmde-banner-full-call-to-action">
Jetzt sind Sie <span class="wmde-banner-full-call-to-action-optional-text">in Deutschland</span> gefragt.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@

<div class="wmde-banner-mini-slideshow">
<slot name="banner-slides"/>
<slot name="progress"/>
</div>

<div class="wmde-banner-mini-button-group">
Expand Down
25 changes: 7 additions & 18 deletions banners/mobile/C24_WMDE_Mobile_DE_01/content/BannerSlides.vue
Original file line number Diff line number Diff line change
@@ -1,11 +1,5 @@
<template>

<KeenSliderSlide :is-current="currentSlide === 0" class="wmde-banner-slide-content-with-progress-bar">
<p>Unser Spendenziel: {{ goalDonationSum }} Millionen €</p>
<ProgressBar amount-to-show-on-right="TARGET"/>
<p>Die Zeit wird knapp!</p>
</KeenSliderSlide>

<KeenSliderSlide :is-current="currentSlide === 1">
<p>
<strong>Hi,</strong><br>
Expand All @@ -17,23 +11,22 @@

<KeenSliderSlide :is-current="currentSlide === 2">
<p>
Insgesamt spenden 99% nichts - sie übergehen diesen Aufruf. Die durchschnittliche Spende beträgt
22,25&nbsp;€, doch bereits 10&nbsp;€ helfen uns weiter.
<AnimatedText :content="'Millionen Menschen nutzen Wikipedia, aber 99 % spenden nicht – sie übergehen diesen Aufruf.'"/>
Die meisten Menschen spenden, weil sie Wikipedia nützlich finden.
</p>
</KeenSliderSlide>

<KeenSliderSlide :is-current="currentSlide === 3">
<p>
{{ campaignDaySentence }}
<AnimatedText :content="visitorsVsDonorsSentence"/>
Die meisten Menschen spenden, weil sie Wikipedia nützlich finden.
Die durchschnittliche Spende beträgt 22,25&nbsp;€, doch bereits 5&nbsp;€ helfen uns weiter. Hat Wikipedia
Ihnen in diesem Jahr Wissen im Wert einer Tasse Kaffee geschenkt?
</p>
</KeenSliderSlide>

<KeenSliderSlide :is-current="currentSlide === 4">
<p>
Hat Wikipedia Ihnen in diesem Jahr Wissen im Wert einer Tasse Kaffee geschenkt? Dann entscheiden
Sie sich, eine der seltenen Ausnahmen zu sein, und geben Sie etwas zurück. Vielen Dank!
Dann entscheiden Sie sich, eine der seltenen Ausnahmen zu sein, und geben Sie etwas zurück.
<strong> Vielen Dank!</strong>
</p>
</KeenSliderSlide>

Expand All @@ -43,7 +36,6 @@
import { DynamicContent } from '@src/utils/DynamicContent/DynamicContent';
import { inject, onMounted, watch } from 'vue';
import KeenSliderSlide from '@src/components/Slider/KeenSliderSlide.vue';
import ProgressBar from '@src/components/ProgressBar/ProgressBar.vue';
import AnimatedText from '@src/components/AnimatedText/AnimatedText.vue';
import { useLiveDateAndTime } from '@src/components/composables/useLiveDateAndTime';
Expand All @@ -56,10 +48,7 @@ const props = defineProps<Props>();
const {
currentDayName,
getCurrentDateAndTime,
goalDonationSum,
visitorsVsDonorsSentence,
campaignDaySentence
getCurrentDateAndTime
}: DynamicContent = inject( 'dynamicCampaignText' );
const { liveDateAndTime, startTimer, stopTimer } = useLiveDateAndTime( getCurrentDateAndTime );
Expand Down
Loading

0 comments on commit c6485d7

Please sign in to comment.