Feat(UI): Blog with article page and Newsletter signup form.

This commit is contained in:
2025-08-09 19:07:58 +01:00
parent 2541aaf849
commit 36d9eb6888
51 changed files with 3434 additions and 892 deletions

View File

@@ -5,7 +5,7 @@ import BasePage from "../base.js";
export default class PageBlogArticle extends BasePage {
static hash = hashPageBlogHome;
static hash = null;
constructor(router) {
super(router);

View File

@@ -0,0 +1,25 @@
// internal
// import BasePage from "../base.js";
import PageBlogHome from "./home.js";
// external
export default class PageBlogBlogArticleHowToScaleYourDogTrainingBusinessFrom25To100PlusClients extends PageBlogHome {
static hash = hashPageBlogArticleHowToScaleYourDogTrainingBusinessFrom25To100PlusClients;
constructor(router) {
super(router);
}
initialize() {
this.sharedInitialize();
this.hookupFormNewsletter();
this.hookupButtonSubmitFormContactUs();
}
leave() {
super.leave();
}
}

View File

@@ -0,0 +1,25 @@
// internal
// import BasePage from "../base.js";
import PageBlogHome from "./home.js";
// external
export default class PageBlogArticleHowToScaleYourDogTrainingBusinessFromSoloToMultiTrainerSuccess extends PageBlogHome {
static hash = hashPageBlogArticleHowToScaleYourDogTrainingBusinessFromSoloToMultiTrainerSuccess;
constructor(router) {
super(router);
}
initialize() {
this.sharedInitialize();
this.hookupFormNewsletter();
this.hookupButtonSubmitFormContactUs();
}
leave() {
super.leave();
}
}

View File

@@ -0,0 +1,26 @@
// internal
// import BasePage from "../base.js";
import PageBlogHome from "./home.js";
// external
export default class PageBlogArticleTheScienceBehindDogTrainingAssessmentsHowToTrackRealProgress extends PageBlogHome {
static hash = hashPageBlogArticleTheScienceBehindDogTrainingAssessmentsHowToTrackRealProgress;
constructor(router) {
super(router);
}
initialize() {
this.sharedInitialize();
// this.hookupButtonsNav();
this.hookupFormNewsletter();
this.hookupButtonSubmitFormContactUs();
}
leave() {
super.leave();
}
}

View File

@@ -0,0 +1,25 @@
// internal
// import BasePage from "../base.js";
import PageBlogHome from "./home.js";
// external
export default class PageBlogArticleWhyEveryProfessionalTrainerNeedsACommandDictionaryIn2025 extends PageBlogHome {
static hash = hashPageBlogArticleWhyEveryProfessionalTrainerNeedsACommandDictionaryIn2025;
constructor(router) {
super(router);
}
initialize() {
this.sharedInitialize();
this.hookupFormNewsletter();
this.hookupButtonSubmitFormContactUs();
}
leave() {
super.leave();
}
}

View File

@@ -14,6 +14,20 @@ export default class PageBlogHome extends BasePage {
initialize() {
this.sharedInitialize();
// this.hookupButtonsNav();
this.hookupFormNewsletter();
this.hookupButtonSubmitFormContactUs();
}
hookupButtonSubmitFormContactUs() {
const button = document.querySelector('form input[type="submit"]');
button.classList.add(flagButton);
button.classList.add(flagButtonPrimary);
button.innerText = 'Subscribe Now';
}
hookupFormNewsletter() {
let submitButton = document.querySelector('#submit');
submitButton.innerText = 'Subscribe Now';
}
leave() {

View File

@@ -0,0 +1,16 @@
// internal
import BasePage from "../base.js";
// vendor
import { Altcha } from "../../vendor/altcha.js";
export default class PageBlogNewsletterSuccess extends BasePage {
static hash = hashPageBlogNewsletterSuccess;
constructor(router) {
super(router);
}
initialize() {
this.sharedInitialize();
}
}

View File

@@ -8,6 +8,11 @@ import PageApplyFoundingPartner from './pages/core/apply-founding-partner.js';
import PageApplyFoundingPartnerSuccess from './pages/core/apply-founding-partner-success.js';
// Blog
import PageBlogHome from './pages/blog/home.js';
import PageBlogArticleHowToScaleYourDogTrainingBusinessFrom25To100PlusClients from './pages/blog/article_how_to_scale_your_dog_training_business_from_25_to_100_plus_clients.js';
import PageBlogArticleHowToScaleYourDogTrainingBusinessFromSoloToMultiTrainerSuccess from './pages/blog/article_how_to_scale_your_dog_training_business_from_25_to_100_plus_clients.js';
import PageBlogArticleTheScienceBehindDogTrainingAssessmentsHowToTrackRealProgress from './pages/blog/article_the_science_behind_dog_training_assessments_how_to_track_real_progress.js';
import PageBlogArticleWhyEveryProfessionalTrainerNeedsACommandDictionaryIn2025 from './pages/blog/article_why_every_professional_trainer_needs_a_command_dictionary_in_2025.js';
import PageBlogNewsletterSuccess from './pages/blog/newsletter-success.js';
// Dog
import PageDogHome from './pages/dog/home.js';
import PageDogCommandCategories from './pages/dog/command_categories.js';
@@ -50,6 +55,11 @@ export default class Router {
this.pages[hashPageApplyFoundingPartnerSuccess] = { name: 'PageApplyFoundingPartnerSuccess', module: PageApplyFoundingPartnerSuccess };
// Blog
this.pages[hashPageBlogHome] = { name: 'PageBlogHome', module: PageBlogHome };
this.pages[hashPageBlogArticleHowToScaleYourDogTrainingBusinessFrom25To100PlusClients] = { name: 'PageBlogArticleHowToScaleYourDogTrainingBusinessFrom25To100PlusClients', module: PageBlogArticleHowToScaleYourDogTrainingBusinessFrom25To100PlusClients };
this.pages[hashPageBlogArticleHowToScaleYourDogTrainingBusinessFromSoloToMultiTrainerSuccess] = { name: 'PageBlogArticleHowToScaleYourDogTrainingBusinessFromSoloToMultiTrainerSuccess', module: PageBlogArticleHowToScaleYourDogTrainingBusinessFromSoloToMultiTrainerSuccess };
this.pages[hashPageBlogArticleTheScienceBehindDogTrainingAssessmentsHowToTrackRealProgress] = { name: 'PageBlogArticleTheScienceBehindDogTrainingAssessmentsHowToTrackRealProgress', module: PageBlogArticleTheScienceBehindDogTrainingAssessmentsHowToTrackRealProgress };
this.pages[hashPageBlogArticleWhyEveryProfessionalTrainerNeedsACommandDictionaryIn2025] = { name: 'PageBlogArticleWhyEveryProfessionalTrainerNeedsACommandDictionaryIn2025', module: PageBlogArticleWhyEveryProfessionalTrainerNeedsACommandDictionaryIn2025 };
this.pages[hashPageBlogNewsletterSuccess] = { name: 'PageBlogNewsletterSuccess', module: PageBlogNewsletterSuccess };
// Dog
this.pages[hashPageDogHome] = { name: 'PageDogHome', module: PageDogHome };
this.pages[hashPageDogCommandCategories] = { name: 'PageDogCommands', module: PageDogCommandCategories };
@@ -83,6 +93,11 @@ export default class Router {
this.routes[hashPageApplyFoundingPartnerSuccess] = (isPopState = false) => this.navigateToHash(hashPageApplyFoundingPartnerSuccess, isPopState);
// Blog
this.routes[hashPageBlogHome] = (isPopState = false) => this.navigateToHash(hashPageBlogHome, isPopState);
this.routes[hashPageBlogArticleHowToScaleYourDogTrainingBusinessFrom25To100PlusClients] = (isPopState = false) => this.navigateToHash(hashPageBlogArticleHowToScaleYourDogTrainingBusinessFrom25To100PlusClients, isPopState);
this.routes[hashPageBlogArticleHowToScaleYourDogTrainingBusinessFromSoloToMultiTrainerSuccess] = (isPopState = false) => this.navigateToHash(hashPageBlogArticleHowToScaleYourDogTrainingBusinessFromSoloToMultiTrainerSuccess, isPopState);
this.routes[hashPageBlogArticleTheScienceBehindDogTrainingAssessmentsHowToTrackRealProgress] = (isPopState = false) => this.navigateToHash(hashPageBlogArticleTheScienceBehindDogTrainingAssessmentsHowToTrackRealProgress, isPopState);
this.routes[hashPageBlogArticleWhyEveryProfessionalTrainerNeedsACommandDictionaryIn2025] = (isPopState = false) => this.navigateToHash(hashPageBlogArticleWhyEveryProfessionalTrainerNeedsACommandDictionaryIn2025, isPopState);
this.routes[hashPageBlogNewsletterSuccess] = (isPopState = false) => this.navigateToHash(hashPageBlogNewsletterSuccess, isPopState);
// Dog
this.routes[hashPageDogHome] = (isPopState = false) => this.navigateToHash(hashPageDogHome, isPopState);
this.routes[hashPageDogCommandCategories] = (isPopState = false) => this.navigateToHash(hashPageDogCommandCategories, isPopState);