diff --git a/archive/desktop/C23_WMDE_Desktop_DE_15/banner_ctrl.ts b/archive/desktop/C23_WMDE_Desktop_DE_15/banner_ctrl.ts new file mode 100644 index 000000000..e23b384a0 --- /dev/null +++ b/archive/desktop/C23_WMDE_Desktop_DE_15/banner_ctrl.ts @@ -0,0 +1,72 @@ +import { createVueApp } from '@src/createVueApp'; + +import './styles/styles.scss'; + +import BannerConductor from '@src/components/BannerConductor/FallbackBannerConductor.vue'; +import Banner from './components/BannerCtrl.vue'; +import FallbackBanner from './components/FallbackBanner.vue'; +import { UrlRuntimeEnvironment } from '@src/utils/RuntimeEnvironment'; +import { WindowResizeHandler } from '@src/utils/ResizeHandler'; +import PageWPORG from '@src/page/PageWPORG'; +import { WindowMediaWiki } from '@src/page/MediaWiki/WindowMediaWiki'; +import { SkinFactory } from '@src/page/skin/SkinFactory'; +import { WindowSizeIssueChecker } from '@src/utils/SizeIssueChecker/WindowSizeIssueChecker'; +import TranslationPlugin from '@src/TranslationPlugin'; +import { Translator } from '@src/Translator'; +import DynamicTextPlugin from '@src/DynamicTextPlugin'; +import { LocalImpressionCount } from '@src/utils/LocalImpressionCount'; +import { LegacyTrackerWPORG } from '@src/tracking/LegacyTrackerWPORG'; +import eventMappings from './event_map'; + +// Locale-specific imports +import messages from './messages'; +import { LocaleFactoryDe } from '@src/utils/LocaleFactory/LocaleFactoryDe'; + +// Channel specific form setup +import { createFormItems } from './form_items'; +import { createFormActions } from '@src/createFormActions'; +import { createFallbackDonationLink } from '@src/createFallbackDonationLink'; + +const localeFactory = new LocaleFactoryDe(); +const translator = new Translator( messages ); +const mediaWiki = new WindowMediaWiki(); +const page = new PageWPORG( mediaWiki, ( new SkinFactory( mediaWiki ) ).getSkin(), new WindowSizeIssueChecker( 400 ) ); +const runtimeEnvironment = new UrlRuntimeEnvironment( window.location ); +const impressionCount = new LocalImpressionCount( page.getTracking().keyword, runtimeEnvironment ); +const tracker = new LegacyTrackerWPORG( mediaWiki, page.getTracking().keyword, eventMappings, runtimeEnvironment ); + +const app = createVueApp( BannerConductor, { + page, + bannerConfig: { + delay: runtimeEnvironment.getBannerDelay( 7500 ), + transitionDuration: 1000 + }, + bannerProps: { + useOfFundsContent: localeFactory.getUseOfFundsLoader().getContent(), + remainingImpressions: impressionCount.getRemainingImpressions( page.getMaxBannerImpressions( 'desktop' ) ), + donationLink: createFallbackDonationLink( page.getTracking(), impressionCount ) + }, + resizeHandler: new WindowResizeHandler(), + banner: Banner, + fallbackBanner: FallbackBanner, + minWidthForMainBanner: 800, + impressionCount +} ); + +app.use( TranslationPlugin, translator ); +app.use( DynamicTextPlugin, { + campaignParameters: page.getCampaignParameters(), + date: new Date(), + formatters: localeFactory.getFormatters(), + impressionCount, + translator +} ); + +const currencyFormatter = localeFactory.getCurrencyFormatter(); + +app.provide( 'currencyFormatter', currencyFormatter ); +app.provide( 'formItems', createFormItems( translator, currencyFormatter.euroAmount.bind( currencyFormatter ) ) ); +app.provide( 'formActions', createFormActions( page.getTracking(), impressionCount ) ); +app.provide( 'tracker', tracker ); + +app.mount( page.getBannerContainer() ); diff --git a/archive/desktop/C23_WMDE_Desktop_DE_15/banner_var.ts b/archive/desktop/C23_WMDE_Desktop_DE_15/banner_var.ts new file mode 100644 index 000000000..0f55d41d2 --- /dev/null +++ b/archive/desktop/C23_WMDE_Desktop_DE_15/banner_var.ts @@ -0,0 +1,72 @@ +import { createVueApp } from '@src/createVueApp'; + +import './styles/styles_var.scss'; + +import BannerConductor from '@src/components/BannerConductor/FallbackBannerConductor.vue'; +import Banner from './components/BannerVar.vue'; +import FallbackBanner from './components/FallbackBanner.vue'; +import { UrlRuntimeEnvironment } from '@src/utils/RuntimeEnvironment'; +import { WindowResizeHandler } from '@src/utils/ResizeHandler'; +import PageWPORG from '@src/page/PageWPORG'; +import { WindowMediaWiki } from '@src/page/MediaWiki/WindowMediaWiki'; +import { SkinFactory } from '@src/page/skin/SkinFactory'; +import { WindowSizeIssueChecker } from '@src/utils/SizeIssueChecker/WindowSizeIssueChecker'; +import TranslationPlugin from '@src/TranslationPlugin'; +import { Translator } from '@src/Translator'; +import DynamicTextPlugin from '@src/DynamicTextPlugin'; +import { LocalImpressionCount } from '@src/utils/LocalImpressionCount'; +import { LegacyTrackerWPORG } from '@src/tracking/LegacyTrackerWPORG'; +import eventMappings from './event_map'; + +// Locale-specific imports +import messages from './messages_var'; +import { LocaleFactoryDe } from '@src/utils/LocaleFactory/LocaleFactoryDe'; + +// Channel specific form setup +import { createFormItems } from './form_items'; +import { createFormActions } from '@src/createFormActions'; +import { createFallbackDonationLink } from '@src/createFallbackDonationLink'; + +const localeFactory = new LocaleFactoryDe(); +const translator = new Translator( messages ); +const mediaWiki = new WindowMediaWiki(); +const page = new PageWPORG( mediaWiki, ( new SkinFactory( mediaWiki ) ).getSkin(), new WindowSizeIssueChecker( 400 ) ); +const runtimeEnvironment = new UrlRuntimeEnvironment( window.location ); +const impressionCount = new LocalImpressionCount( page.getTracking().keyword, runtimeEnvironment ); +const tracker = new LegacyTrackerWPORG( mediaWiki, page.getTracking().keyword, eventMappings, runtimeEnvironment ); + +const app = createVueApp( BannerConductor, { + page, + bannerConfig: { + delay: runtimeEnvironment.getBannerDelay( 7500 ), + transitionDuration: 1000 + }, + bannerProps: { + useOfFundsContent: localeFactory.getUseOfFundsLoader().getContent(), + remainingImpressions: impressionCount.getRemainingImpressions( page.getMaxBannerImpressions( 'desktop' ) ), + donationLink: createFallbackDonationLink( page.getTracking(), impressionCount ) + }, + resizeHandler: new WindowResizeHandler(), + banner: Banner, + fallbackBanner: FallbackBanner, + minWidthForMainBanner: 800, + impressionCount +} ); + +app.use( TranslationPlugin, translator ); +app.use( DynamicTextPlugin, { + campaignParameters: page.getCampaignParameters(), + date: new Date(), + formatters: localeFactory.getFormatters(), + impressionCount, + translator +} ); + +const currencyFormatter = localeFactory.getCurrencyFormatter(); + +app.provide( 'currencyFormatter', currencyFormatter ); +app.provide( 'formItems', createFormItems( translator, currencyFormatter.euroAmount.bind( currencyFormatter ) ) ); +app.provide( 'formActions', createFormActions( page.getTracking(), impressionCount, { des: '1' } ) ); +app.provide( 'tracker', tracker ); + +app.mount( page.getBannerContainer() ); diff --git a/archive/desktop/C23_WMDE_Desktop_DE_15/components/BannerCtrl.vue b/archive/desktop/C23_WMDE_Desktop_DE_15/components/BannerCtrl.vue new file mode 100644 index 000000000..2e5987073 --- /dev/null +++ b/archive/desktop/C23_WMDE_Desktop_DE_15/components/BannerCtrl.vue @@ -0,0 +1,154 @@ + + + diff --git a/archive/desktop/C23_WMDE_Desktop_DE_15/components/BannerVar.vue b/archive/desktop/C23_WMDE_Desktop_DE_15/components/BannerVar.vue new file mode 100644 index 000000000..7725ab495 --- /dev/null +++ b/archive/desktop/C23_WMDE_Desktop_DE_15/components/BannerVar.vue @@ -0,0 +1,154 @@ + + + diff --git a/archive/desktop/C23_WMDE_Desktop_DE_15/components/FallbackBanner.vue b/archive/desktop/C23_WMDE_Desktop_DE_15/components/FallbackBanner.vue new file mode 100644 index 000000000..50c87d7a2 --- /dev/null +++ b/archive/desktop/C23_WMDE_Desktop_DE_15/components/FallbackBanner.vue @@ -0,0 +1,103 @@ + + + diff --git a/archive/desktop/C23_WMDE_Desktop_DE_15/components/MainBanner.vue b/archive/desktop/C23_WMDE_Desktop_DE_15/components/MainBanner.vue new file mode 100644 index 000000000..ab097bf67 --- /dev/null +++ b/archive/desktop/C23_WMDE_Desktop_DE_15/components/MainBanner.vue @@ -0,0 +1,44 @@ +tart + + diff --git a/archive/desktop/C23_WMDE_Desktop_DE_15/content/AlreadyDonatedContent.vue b/archive/desktop/C23_WMDE_Desktop_DE_15/content/AlreadyDonatedContent.vue new file mode 100644 index 000000000..eb8eb8f8f --- /dev/null +++ b/archive/desktop/C23_WMDE_Desktop_DE_15/content/AlreadyDonatedContent.vue @@ -0,0 +1,14 @@ + diff --git a/archive/desktop/C23_WMDE_Desktop_DE_15/content/BannerSlides.vue b/archive/desktop/C23_WMDE_Desktop_DE_15/content/BannerSlides.vue new file mode 100644 index 000000000..1018de4b5 --- /dev/null +++ b/archive/desktop/C23_WMDE_Desktop_DE_15/content/BannerSlides.vue @@ -0,0 +1,57 @@ + + + diff --git a/archive/desktop/C23_WMDE_Desktop_DE_15/content/BannerText.vue b/archive/desktop/C23_WMDE_Desktop_DE_15/content/BannerText.vue new file mode 100644 index 000000000..7f3a647b4 --- /dev/null +++ b/archive/desktop/C23_WMDE_Desktop_DE_15/content/BannerText.vue @@ -0,0 +1,39 @@ + + + diff --git a/archive/desktop/C23_WMDE_Desktop_DE_15/content/FallbackSlides.vue b/archive/desktop/C23_WMDE_Desktop_DE_15/content/FallbackSlides.vue new file mode 100644 index 000000000..ca71bc5b7 --- /dev/null +++ b/archive/desktop/C23_WMDE_Desktop_DE_15/content/FallbackSlides.vue @@ -0,0 +1,34 @@ + + + diff --git a/archive/desktop/C23_WMDE_Desktop_DE_15/content/FallbackText.vue b/archive/desktop/C23_WMDE_Desktop_DE_15/content/FallbackText.vue new file mode 100644 index 000000000..5cdd4f9d3 --- /dev/null +++ b/archive/desktop/C23_WMDE_Desktop_DE_15/content/FallbackText.vue @@ -0,0 +1,26 @@ + + + diff --git a/archive/desktop/C23_WMDE_Desktop_DE_15/event_map.ts b/archive/desktop/C23_WMDE_Desktop_DE_15/event_map.ts new file mode 100644 index 000000000..81a4463ee --- /dev/null +++ b/archive/desktop/C23_WMDE_Desktop_DE_15/event_map.ts @@ -0,0 +1,39 @@ +import { TrackingEventConverterFactory } from '@src/tracking/LegacyTrackerWPORG'; +import { WMDELegacyBannerEvent } from '@src/tracking/WPORG/WMDELegacyBannerEvent'; +import { WMDESizeIssueEvent } from '@src/tracking/WPORG/WMDEBannerSizeIssue'; +import { BannerSubmitEvent } from '@src/tracking/events/BannerSubmitEvent'; +import { FormStepShownEvent } from '@src/tracking/events/FormStepShownEvent'; +import { mapFormStepShownEvent } from '@src/tracking/LegacyEventTracking/mapFormStepShownEvent'; +import { CustomAmountChangedEvent } from '@src/tracking/events/CustomAmountChangedEvent'; +import { CloseEvent } from '@src/tracking/events/CloseEvent'; +import { mapCloseEvent } from '@src/tracking/LegacyEventTracking/mapCloseEvent'; +import { NotShownEvent } from '@src/tracking/events/NotShownEvent'; +import { mapNotShownEvent } from '@src/tracking/LegacyEventTracking/mapNotShownEvent'; +import { createViewportInfo } from '@src/tracking/LegacyEventTracking/createViewportInfo'; +import { AlreadyDonatedShownEvent } from '@src/tracking/events/AlreadyDonatedShownEvent'; +import { FallbackBannerSubmitEvent } from '@src/tracking/events/FallbackBannerSubmitEvent'; +import { ShownEvent } from '@src/tracking/events/ShownEvent'; +import { mapShownEvent } from '@src/tracking/LegacyEventTracking/mapShownEvent'; + +export default new Map( [ + [ ShownEvent.EVENT_NAME, mapShownEvent ], + [ CloseEvent.EVENT_NAME, mapCloseEvent ], + [ FormStepShownEvent.EVENT_NAME, mapFormStepShownEvent ], + [ CustomAmountChangedEvent.EVENT_NAME, + ( e: CustomAmountChangedEvent ): WMDELegacyBannerEvent => + new WMDELegacyBannerEvent( e.userChoice + '-amount', 1 ) + ], + [ AlreadyDonatedShownEvent.EVENT_NAME, ( e: AlreadyDonatedShownEvent ): WMDELegacyBannerEvent => new WMDELegacyBannerEvent( e.eventName, 1 ) ], + [ NotShownEvent.EVENT_NAME, mapNotShownEvent ], + [ BannerSubmitEvent.EVENT_NAME, ( e: BannerSubmitEvent ): WMDESizeIssueEvent => { + switch ( e.feature ) { + case 'UpgradeToYearlyForm': + return new WMDESizeIssueEvent( `submit-${e.userChoice}`, createViewportInfo(), 1 ); + case 'UpgradeToMonthlyForm': + return new WMDESizeIssueEvent( `submit-${e.userChoice}`, createViewportInfo(), 1 ); + default: + return new WMDESizeIssueEvent( `submit`, createViewportInfo(), 1 ); + } + } ], + [ FallbackBannerSubmitEvent.EVENT_NAME, ( e: FallbackBannerSubmitEvent ): WMDESizeIssueEvent => new WMDESizeIssueEvent( e.eventName, createViewportInfo(), 1 ) ] +] ); diff --git a/archive/desktop/C23_WMDE_Desktop_DE_15/form_items.ts b/archive/desktop/C23_WMDE_Desktop_DE_15/form_items.ts new file mode 100644 index 000000000..b70650d19 --- /dev/null +++ b/archive/desktop/C23_WMDE_Desktop_DE_15/form_items.ts @@ -0,0 +1,23 @@ +import FormItemsBuilder from '@src/utils/FormItemsBuilder/FormItemsBuilder'; +import { Translator } from '@src/Translator'; +import { DonationFormItems } from '@src/utils/FormItemsBuilder/DonationFormItems'; +import { Intervals } from '@src/utils/FormItemsBuilder/fields/Intervals'; +import { PaymentMethods } from '@src/utils/FormItemsBuilder/fields/PaymentMethods'; +import { NumberFormatter } from '@src/utils/DynamicContent/formatters/NumberFormatter'; + +export function createFormItems( translations: Translator, amountFormatter: NumberFormatter ): DonationFormItems { + return new FormItemsBuilder( translations, amountFormatter ) + .setIntervals( + Intervals.ONCE, + Intervals.MONTHLY, + Intervals.QUARTERLY, + Intervals.YEARLY + ) + .setAmounts( 5, 10, 20, 25, 50, 100 ) + .setPaymentMethods( + PaymentMethods.PAYPAL, + PaymentMethods.BANK_TRANSFER, + PaymentMethods.CREDIT_CARD, + PaymentMethods.DIRECT_DEBIT + ).getItems(); +} diff --git a/archive/desktop/C23_WMDE_Desktop_DE_15/messages.ts b/archive/desktop/C23_WMDE_Desktop_DE_15/messages.ts new file mode 100644 index 000000000..519910eb2 --- /dev/null +++ b/archive/desktop/C23_WMDE_Desktop_DE_15/messages.ts @@ -0,0 +1,28 @@ +import CustomAmountFormDe from '@src/components/DonationForm/Forms/messages/CustomAmountForm.de'; +import DynamicCampaignTextDe from '@src/utils/DynamicContent/messages/DynamicCampaignText.de'; +import { TranslationMessages } from '@src/Translator'; +import UpgradeToYearlyDe from '@src/components/DonationForm/Forms/messages/UpgradeToYearly.de'; +import UpgradeToMonthlyDe from '@src/components/DonationForm/Forms/messages/UpgradeToMonthly.de'; +import SoftCloseDe from '@src/components/SoftClose/messages/SoftClose.de'; +import AddressFormDe from '@src/components/DonationForm/Forms/messages/AddressForm.de'; +import FooterDe from '@src/components/Footer/messages/Footer.de'; +import MainDonationFormDe from '@src/components/DonationForm/Forms/messages/MainDonationForm.de'; +import AlreadyDonatedModal from '@src/components/AlreadyDonatedModal/translations/AlreadyDonatedModal.de'; +import FallbackBanner from '@src/components/FallbackBanner/messages/FallbackBanner.de'; + +const messages: TranslationMessages = { + ...CustomAmountFormDe, + ...DynamicCampaignTextDe, + ...UpgradeToYearlyDe, + ...UpgradeToMonthlyDe, + ...SoftCloseDe, + ...AddressFormDe, + ...FooterDe, + ...MainDonationFormDe, + ...AlreadyDonatedModal, + ...FallbackBanner, + 'already-donated-go-away-button': 'Im Moment nicht', + 'soft-close-prompt': 'Dürfen wir später nochmal fragen?' +}; + +export default messages; diff --git a/archive/desktop/C23_WMDE_Desktop_DE_15/messages_var.ts b/archive/desktop/C23_WMDE_Desktop_DE_15/messages_var.ts new file mode 100644 index 000000000..baf537c18 --- /dev/null +++ b/archive/desktop/C23_WMDE_Desktop_DE_15/messages_var.ts @@ -0,0 +1,33 @@ +import CustomAmountFormDe from '@src/components/DonationForm/Forms/messages/CustomAmountForm.de'; +import DynamicCampaignTextDe from '@src/utils/DynamicContent/messages/DynamicCampaignText.de'; +import { TranslationMessages } from '@src/Translator'; +import UpgradeToYearlyDe from '@src/components/DonationForm/Forms/messages/UpgradeToYearly.de'; +import UpgradeToMonthlyDe from '@src/components/DonationForm/Forms/messages/UpgradeToMonthly.de'; +import SoftCloseDe from '@src/components/SoftClose/messages/SoftClose.de'; +import AddressFormDe from '@src/components/DonationForm/Forms/messages/AddressForm.de'; +import FooterDe from '@src/components/Footer/messages/Footer.de'; +import MainDonationFormDe from '@src/components/DonationForm/Forms/messages/MainDonationForm.de'; +import AlreadyDonatedModal from '@src/components/AlreadyDonatedModal/translations/AlreadyDonatedModal.de'; +import FallbackBanner from '@src/components/FallbackBanner/messages/FallbackBanner.de'; + +const messages: TranslationMessages = { + ...CustomAmountFormDe, + ...DynamicCampaignTextDe, + ...UpgradeToYearlyDe, + ...UpgradeToMonthlyDe, + ...SoftCloseDe, + ...AddressFormDe, + ...FooterDe, + ...MainDonationFormDe, + ...AlreadyDonatedModal, + ...FallbackBanner, + 'already-donated-go-away-button': 'Im Moment nicht', + 'soft-close-prompt': 'Dürfen wir später nochmal fragen?', + 'upgrade-to-yearly-copy': '

Jedes Jahr sind wir auf Menschen wie Sie angewiesen. Jährliche Spenden helfen uns' + + ' besonders und ermöglichen langfristige Weiterentwicklungen.

' + + '

Sie gehen kein Risiko ein: Jederzeit formlos zu sofort kündbar.

', + 'upgrade-to-yearly-no': 'Nein, ich spende einmalig {{amount}}', + 'upgrade-to-yearly-yes': 'Ja, ich spende {{amount}} jährlich' +}; + +export default messages; diff --git a/archive/desktop/C23_WMDE_Desktop_DE_15/styles/Banner.scss b/archive/desktop/C23_WMDE_Desktop_DE_15/styles/Banner.scss new file mode 100644 index 000000000..3bd07328c --- /dev/null +++ b/archive/desktop/C23_WMDE_Desktop_DE_15/styles/Banner.scss @@ -0,0 +1,23 @@ +@use 'src/themes/Treedip/variables/fonts'; +@use 'src/themes/Treedip/variables/colors'; + +.wmde-banner { + &-wrapper { + font-size: 14px; + font-family: fonts.$ui; + box-shadow: 0 3px 0.6em rgba( 60 60 60 / 40% ); + background-color: colors.$white; + } + + &--pending { + .wmde-banner-wrapper { + box-shadow: none; + } + } + + &--closed { + .wmde-banner-wrapper { + display: none; + } + } +} diff --git a/archive/desktop/C23_WMDE_Desktop_DE_15/styles/FallbackBanner.scss b/archive/desktop/C23_WMDE_Desktop_DE_15/styles/FallbackBanner.scss new file mode 100644 index 000000000..1e6d9ae8a --- /dev/null +++ b/archive/desktop/C23_WMDE_Desktop_DE_15/styles/FallbackBanner.scss @@ -0,0 +1,136 @@ +@use 'src/themes/Treedip/variables/globals'; +@use 'src/themes/Treedip/variables/colors'; +@use 'src/themes/Treedip/variables/fonts'; +@use 'sass:color'; + +$breakpoint: 800px; + +.wmde-banner { + &-fallback { + width: 100%; + height: 150px; + display: flex; + flex-direction: column; + background: colors.$white; + box-shadow: 0 3px 0.6em rgba( 60 60 60 / 40% ); + + @media ( min-width: $breakpoint ) { + height: auto; + min-height: 250px; + padding: 4px; + } + + &-small, + &-large { + display: flex; + flex-direction: column; + flex: 1 1 auto; + } + + &-small { + align-items: center; + border: 4px solid colors.$primary; + border-radius: 4px; + padding: 8px; + + .wmde-banner-progress-bar { + height: 25px; + line-height: 25px; + } + + .wmde-banner-progress-bar-text, + .wmde-banner-progress-bar-fill-wrapper { + height: 25px; + } + + .wmde-banner-progress-bar-fill { + line-height: 20px; + } + + .wmde-banner-fallback-button { + margin: 0 0 8px; + } + + .wmde-banner-selection-input-text, + .wmde-banner-selection-input-input { + font-family: fonts.$content; + font-size: 14px; + font-weight: normal; + } + } + + &-large { + align-items: stretch; + } + + &-usage-link { + color: colors.$gray; + } + + &-message { + flex: 1 1 auto; + display: flex; + flex-direction: column; + border: 4px solid colors.$primary; + border-radius: 4px; + padding: 8px 0; + } + + &-bank-item { + display: block; + + &-label { + font-weight: bold; + } + } + + .wmde-banner-close { + height: 16px; + width: 16px; + top: 8px; + right: 8px; + + @media ( min-width: $breakpoint ) { + height: 30px; + width: 30px; + top: 12px; + right: 12px; + } + } + + .wmde-banner-slider-container { + padding: 0 0 8px; + } + + .wmde-banner-slide-content { + font-size: 14px; + p { + margin-bottom: 8px; + } + } + + .wmde-banner-slider-navigation-previous, + .wmde-banner-slider-navigation-next { + align-items: end; + } + + .wmde-banner-slider-pagination-dot { + cursor: default; + } + + .wmde-banner-message { + flex: 1 1 auto; + margin-bottom: 15px; + + p { + margin-bottom: 0; + } + } + } + + &--pending { + .wmde-banner-fallback { + box-shadow: none; + } + } +} diff --git a/archive/desktop/C23_WMDE_Desktop_DE_15/styles/MainBanner.scss b/archive/desktop/C23_WMDE_Desktop_DE_15/styles/MainBanner.scss new file mode 100644 index 000000000..c328cbca9 --- /dev/null +++ b/archive/desktop/C23_WMDE_Desktop_DE_15/styles/MainBanner.scss @@ -0,0 +1,45 @@ +@use 'src/themes/Treedip/variables/colors'; + +$banner-height: 357px !default; +$form-width: 300px !default; + +.wmde-banner { + &-main { + min-height: $banner-height; + display: flex; + flex-direction: column; + padding: 12px 24px 0; + } + + &-content { + display: flex; + flex-direction: row; + flex-grow: 1; + } + + &-message { + padding: 0 15px; + } + + &-column-left { + display: flex; + flex-direction: column; + justify-content: center; + flex: 1 1 auto; + margin-bottom: 0; + overflow-y: hidden; + margin-right: 30px; + padding: 0 0 10px; + border: 5px solid colors.$primary; + border-radius: 9px; + } + + &-column-right { + order: 2; + flex: 0 0 $form-width; + display: flex; + flex-direction: column; + width: $form-width; + padding: 10px 0; + } +} diff --git a/archive/desktop/C23_WMDE_Desktop_DE_15/styles/styles.scss b/archive/desktop/C23_WMDE_Desktop_DE_15/styles/styles.scss new file mode 100644 index 000000000..05c1818cf --- /dev/null +++ b/archive/desktop/C23_WMDE_Desktop_DE_15/styles/styles.scss @@ -0,0 +1,35 @@ +// This is the file where we import the theme-specific component styles + +@use 'src/components/BannerConductor/banner-transition'; +@use 'Banner'; +@use 'MainBanner' with ( + $banner-height: 357px, + $form-width: 300px +); +@use 'src/themes/UseOfFunds/UseOfFunds'; +@use 'src/themes/Treedip/defaults'; +@use 'src/themes/Treedip/ButtonClose/ButtonClose'; +@use 'src/themes/Treedip/ProgressBar/ProgressBar' with ( + $progress-bar-margin: 0 15px +); +@use 'src/themes/Treedip/DonationForm/DonationForm'; +@use 'src/themes/Treedip/DonationForm/MultiStepDonation'; +@use 'src/themes/Treedip/DonationForm/SubComponents/SelectGroup'; +@use 'src/themes/Treedip/DonationForm/SubComponents/SelectGroupRadios'; +@use 'src/themes/Treedip/DonationForm/SubComponents/SelectCustomAmountRadio'; +@use 'src/themes/Treedip/DonationForm/SubComponents/SmsBox'; +@use 'src/themes/Treedip/DonationForm/Forms/MainDonationForm'; +@use 'src/themes/Treedip/DonationForm/Forms/UpgradeToYearlyForm'; +@use 'src/themes/Treedip/DonationForm/Forms/CustomAmountForm'; +@use 'src/themes/Treedip/Footer/FooterAlreadyDonated' with ( + $right-column-width: 300px +); +@use 'src/themes/Treedip/Footer/SelectionInput'; +@use 'src/themes/Treedip/Message/Message'; +@use 'src/themes/Treedip/Slider/KeenSlider'; +@use 'src/themes/Treedip/SoftClose/SoftClose'; +@use 'src/themes/Treedip/AlreadyDonatedModal/AlreadyDonatedModal'; +@use 'FallbackBanner'; +@use 'src/themes/Treedip/FallbackBanner/FallbackButton'; +@use 'src/themes/Treedip/FallbackBanner/LargeFooter'; +@use 'src/themes/Treedip/FallbackBanner/SmallFooter'; diff --git a/archive/desktop/C23_WMDE_Desktop_DE_15/styles/styles_var.scss b/archive/desktop/C23_WMDE_Desktop_DE_15/styles/styles_var.scss new file mode 100644 index 000000000..2be1475c3 --- /dev/null +++ b/archive/desktop/C23_WMDE_Desktop_DE_15/styles/styles_var.scss @@ -0,0 +1,37 @@ +// This is the file where we import the theme-specific component styles + +@use 'src/components/BannerConductor/banner-transition'; +@use 'Banner'; +@use 'MainBanner' with ( + $banner-height: 357px, + $form-width: 300px +); +@use 'src/themes/UseOfFunds/UseOfFunds'; +@use 'src/themes/Treedip/defaults'; +@use 'src/themes/Treedip/ButtonClose/ButtonClose'; +@use 'src/themes/Treedip/ProgressBar/ProgressBar' with ( + $progress-bar-margin: 0 15px +); +@use 'src/themes/Treedip/DonationForm/DonationForm'; +@use 'src/themes/Treedip/DonationForm/MultiStepDonation'; +@use 'src/themes/Treedip/DonationForm/SubComponents/SelectGroup'; +@use 'src/themes/Treedip/DonationForm/SubComponents/SelectGroupRadios'; +@use 'src/themes/Treedip/DonationForm/SubComponents/SelectCustomAmountRadio'; +@use 'src/themes/Treedip/DonationForm/SubComponents/SmsBox'; +@use 'src/themes/Treedip/DonationForm/Forms/MainDonationForm'; +@use 'src/themes/Treedip/DonationForm/Forms/UpgradeToYearlyButtonForm' with ( + $font-size: 14px +); +@use 'src/themes/Treedip/DonationForm/Forms/CustomAmountForm'; +@use 'src/themes/Treedip/Footer/FooterAlreadyDonated' with ( + $right-column-width: 300px +); +@use 'src/themes/Treedip/Footer/SelectionInput'; +@use 'src/themes/Treedip/Message/Message'; +@use 'src/themes/Treedip/Slider/KeenSlider'; +@use 'src/themes/Treedip/SoftClose/SoftClose'; +@use 'src/themes/Treedip/AlreadyDonatedModal/AlreadyDonatedModal'; +@use 'FallbackBanner'; +@use 'src/themes/Treedip/FallbackBanner/FallbackButton'; +@use 'src/themes/Treedip/FallbackBanner/LargeFooter'; +@use 'src/themes/Treedip/FallbackBanner/SmallFooter'; diff --git a/banners/desktop/banner_var.ts b/banners/desktop/banner_var.ts index 0f55d41d2..d22c4c932 100644 --- a/banners/desktop/banner_var.ts +++ b/banners/desktop/banner_var.ts @@ -26,7 +26,11 @@ import { LocaleFactoryDe } from '@src/utils/LocaleFactory/LocaleFactoryDe'; import { createFormItems } from './form_items'; import { createFormActions } from '@src/createFormActions'; import { createFallbackDonationLink } from '@src/createFallbackDonationLink'; +import { LinearDailyDonorAverage } from '@src/utils/DynamicContent/LinearDailyDonorAverage'; +import { IntegerDe } from '@src/utils/DynamicContent/formatters/IntegerDe'; +import { visitorsVsDailyDonorsSentence } from './visitorsVsDailyDonorsSentence'; +const date = new Date(); const localeFactory = new LocaleFactoryDe(); const translator = new Translator( messages ); const mediaWiki = new WindowMediaWiki(); @@ -34,6 +38,8 @@ const page = new PageWPORG( mediaWiki, ( new SkinFactory( mediaWiki ) ).getSkin( const runtimeEnvironment = new UrlRuntimeEnvironment( window.location ); const impressionCount = new LocalImpressionCount( page.getTracking().keyword, runtimeEnvironment ); const tracker = new LegacyTrackerWPORG( mediaWiki, page.getTracking().keyword, eventMappings, runtimeEnvironment ); +const campaignParameters = page.getCampaignParameters(); +const dailyDonorAverage = new LinearDailyDonorAverage( 6260, new IntegerDe() ).getDonorStatsForTime( date ); const app = createVueApp( BannerConductor, { page, @@ -55,8 +61,8 @@ const app = createVueApp( BannerConductor, { app.use( TranslationPlugin, translator ); app.use( DynamicTextPlugin, { - campaignParameters: page.getCampaignParameters(), - date: new Date(), + campaignParameters, + date, formatters: localeFactory.getFormatters(), impressionCount, translator @@ -68,5 +74,7 @@ app.provide( 'currencyFormatter', currencyFormatter ); app.provide( 'formItems', createFormItems( translator, currencyFormatter.euroAmount.bind( currencyFormatter ) ) ); app.provide( 'formActions', createFormActions( page.getTracking(), impressionCount, { des: '1' } ) ); app.provide( 'tracker', tracker ); +app.provide( 'dailyDonorAverage', dailyDonorAverage ); +app.provide( 'visitorsVsDailyDonorsSentence', visitorsVsDailyDonorsSentence( campaignParameters.millionImpressionsPerDay, dailyDonorAverage.currentDonorsSoFar ) ); app.mount( page.getBannerContainer() ); diff --git a/banners/desktop/components/BannerVar.vue b/banners/desktop/components/BannerVar.vue index 7725ab495..e63ab01d0 100644 --- a/banners/desktop/components/BannerVar.vue +++ b/banners/desktop/components/BannerVar.vue @@ -35,7 +35,7 @@ @@ -83,14 +83,14 @@ import { BannerStates } from '@src/components/BannerConductor/StateMachine/Banne import { ref, watch } from 'vue'; import { UseOfFundsContent as useOfFundsContentInterface } from '@src/domain/UseOfFunds/UseOfFundsContent'; import SoftClose from '@src/components/SoftClose/SoftClose.vue'; -import MainBanner from './MainBanner.vue'; +import MainBanner from './MainBannerVar.vue'; import FundsModal from '@src/components/UseOfFunds/FundsModal.vue'; -import BannerText from '../content/BannerText.vue'; -import BannerSlides from '../content/BannerSlides.vue'; +import BannerText from '../content/BannerTextVar.vue'; +import BannerSlides from '../content/BannerSlidesVar.vue'; import AlreadyDonatedContent from '../content/AlreadyDonatedContent.vue'; import MultiStepDonation from '@src/components/DonationForm/MultiStepDonation.vue'; import MainDonationForm from '@src/components/DonationForm/Forms/MainDonationForm.vue'; -import UpgradeToYearlyButtonForm from '@src/components/DonationForm/Forms/UpgradeToYearlyButtonForm.vue'; +import UpgradeToYearlyForm from '@src/components/DonationForm/Forms/UpgradeToYearlyForm.vue'; import KeenSlider from '@src/components/Slider/KeenSlider.vue'; import { useFormModel } from '@src/components/composables/useFormModel'; import { diff --git a/banners/desktop/components/MainBannerVar.vue b/banners/desktop/components/MainBannerVar.vue new file mode 100644 index 000000000..d75b3d69b --- /dev/null +++ b/banners/desktop/components/MainBannerVar.vue @@ -0,0 +1,46 @@ +tart + + diff --git a/banners/desktop/content/BannerSlides.vue b/banners/desktop/content/BannerSlides.vue index 1018de4b5..4bfadf76c 100644 --- a/banners/desktop/content/BannerSlides.vue +++ b/banners/desktop/content/BannerSlides.vue @@ -1,6 +1,6 @@