277 lines
11 KiB
JavaScript
277 lines
11 KiB
JavaScript
|
|
import Events from "../lib/events.js";
|
|
import LocalStorage from "../lib/local_storage.js";
|
|
import API from "../api.js";
|
|
import DOM from "../dom.js";
|
|
|
|
export default class BasePage {
|
|
constructor(router) {
|
|
if (!router) {
|
|
throw new Error("Router is required");
|
|
}
|
|
else {
|
|
console.log("initialising with router: ", router);
|
|
}
|
|
this.router = router;
|
|
this.title = titlePageCurrent;
|
|
// this.hash = hashPageCurrent;
|
|
if (this.constructor === BasePage) {
|
|
throw new Error("Cannot instantiate abstract class");
|
|
}
|
|
|
|
if (!this.constructor.hash) {
|
|
throw new Error(`Class ${this.constructor.name} must have a static hash attribute.`);
|
|
}
|
|
}
|
|
|
|
initialize() {
|
|
throw new Error("Method 'initialize()' must be implemented.");
|
|
}
|
|
|
|
sharedInitialize() {
|
|
this.logInitialisation();
|
|
this.hookupCommonElements();
|
|
}
|
|
|
|
logInitialisation() {
|
|
console.log('Initializing ' + this.title + ' page');
|
|
}
|
|
|
|
hookupCommonElements() {
|
|
// hookupVideos();
|
|
this.hookupNavigation();
|
|
this.hookupImagesLogo();
|
|
}
|
|
|
|
hookupNavigation() {
|
|
/* Can be removed: */
|
|
console.log("hooking up navigation");
|
|
let overlayHamburger = document.querySelector(idOverlayHamburger);
|
|
let hamburgerOptions = overlayHamburger.querySelectorAll('div.' + flagRow);
|
|
let countOptions = hamburgerOptions.length;
|
|
console.log('count nav options: ', countOptions);
|
|
// overlayHamburger.css('height', (countOptions * 27) + 'px');
|
|
/* end of can be removed */
|
|
|
|
Events.initialiseEventHandler(idButtonHamburger, flagInitialised, function(buttonToggleOverlayNavigation) {
|
|
buttonToggleOverlayNavigation.addEventListener("click", function(event) {
|
|
event.stopPropagation();
|
|
let overlayHamburger = document.querySelector(idOverlayHamburger);
|
|
if (overlayHamburger.classList.contains(flagCollapsed)) {
|
|
overlayHamburger.classList.remove(flagCollapsed);
|
|
overlayHamburger.classList.add(flagExpanded);
|
|
} else {
|
|
overlayHamburger.classList.remove(flagExpanded);
|
|
overlayHamburger.classList.add(flagCollapsed);
|
|
}
|
|
// overlayHamburger.classList.add(flagInitialised);
|
|
});
|
|
});
|
|
|
|
this.hookupButtonNavHome();
|
|
this.hookupButtonNavServices();
|
|
this.hookupButtonNavContact();
|
|
this.hookupButtonNavUserAccount();
|
|
this.hookupButtonNavUserLogout();
|
|
this.hookupButtonNavUserLogin();
|
|
this.hookupButtonNavStoreHome();
|
|
this.hookupButtonNavStoreProductPermutations();
|
|
this.hookupButtonNavStoreStockItems();
|
|
this.hookupButtonNavAdminHome();
|
|
}
|
|
hookupButtonNavHome() {
|
|
Events.initialiseEventHandler('.' + flagNavHome, flagInitialised, (navigator) => {
|
|
navigator.addEventListener("click", (event) => {
|
|
event.stopPropagation();
|
|
this.router.navigateToHash(hashPageHome);
|
|
});
|
|
});
|
|
}
|
|
hookupButtonNavServices() {
|
|
Events.initialiseEventHandler('.' + flagNavServices, flagInitialised, (navigator) => {
|
|
navigator.addEventListener("click", (event) => {
|
|
event.stopPropagation();
|
|
console.log('going to services page');
|
|
this.router.navigateToHash(hashPageServices);
|
|
});
|
|
});
|
|
}
|
|
hookupButtonNavContact() {
|
|
Events.initialiseEventHandler('.' + flagNavContact, flagInitialised, (navigator) => {
|
|
navigator.addEventListener("click", (event) => {
|
|
event.stopPropagation();
|
|
this.router.navigateToHash(hashPageContact);
|
|
});
|
|
});
|
|
}
|
|
hookupButtonNavUserAccount() {
|
|
Events.initialiseEventHandler('.' + flagNavUserAccount, flagInitialised, (navigator) => {
|
|
navigator.addEventListener("click", (event) => {
|
|
event.stopPropagation();
|
|
this.router.navigateToHash(hashPageUserAccount);
|
|
});
|
|
});
|
|
}
|
|
hookupButtonNavUserLogout() {
|
|
Events.initialiseEventHandler('.' + flagNavUserLogout, flagInitialised, (navigator) => {
|
|
navigator.addEventListener("click", (event) => {
|
|
event.stopPropagation();
|
|
this.router.navigateToHash(hashPageUserLogout);
|
|
});
|
|
});
|
|
}
|
|
hookupButtonNavUserLogin() {
|
|
Events.initialiseEventHandler('.' + flagNavUserLogin, flagInitialised, (navigator) => {
|
|
navigator.addEventListener("click", (event) => {
|
|
event.stopPropagation();
|
|
// this.router.navigateToHash(hashPageUserLogin);
|
|
/*
|
|
let dataRequest = {};
|
|
dataRequest[keyCallback] = hashPageCurrent;
|
|
console.log('sending data to user login controller: ');
|
|
console.log(dataRequest);
|
|
*/
|
|
API.loginUser()
|
|
.then(function(response) {
|
|
if (response.Success) {
|
|
this.router.navigateToUrl(response[keyCallback], null, false); // window.app.
|
|
} else {
|
|
DOM.alertError("Error", response.Message);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
}
|
|
hookupButtonNavStoreHome() {
|
|
Events.initialiseEventHandler('.' + flagNavStoreHome, flagInitialised, (navigator) => {
|
|
navigator.addEventListener("click", (event) => {
|
|
event.stopPropagation();
|
|
this.router.navigateToHash(hashPageStoreHome);
|
|
});
|
|
});
|
|
}
|
|
hookupButtonNavStoreProductCategories() {
|
|
Events.initialiseEventHandler('.' + flagNavStoreProductCategories, flagInitialised, (navigator) => {
|
|
navigator.addEventListener("click", (event) => {
|
|
event.stopPropagation();
|
|
this.router.navigateToHash(hashPageStoreProductCategories);
|
|
});
|
|
});
|
|
}
|
|
hookupButtonNavStoreProducts() {
|
|
Events.initialiseEventHandler('.' + flagNavStoreProducts, flagInitialised, (navigator) => {
|
|
navigator.addEventListener("click", (event) => {
|
|
event.stopPropagation();
|
|
this.router.navigateToHash(hashPageStoreProducts);
|
|
});
|
|
});
|
|
}
|
|
hookupButtonNavStoreProductPermutations() {
|
|
Events.initialiseEventHandler('.' + flagNavStoreProductPermutations, flagInitialised, (navigator) => {
|
|
navigator.addEventListener("click", (event) => {
|
|
event.stopPropagation();
|
|
this.router.navigateToHash(hashPageStoreProductPermutations);
|
|
});
|
|
});
|
|
}
|
|
hookupButtonNavStoreProductPrices() {
|
|
Events.initialiseEventHandler('.' + flagNavStoreProductPrices, flagInitialised, (navigator) => {
|
|
navigator.addEventListener("click", (event) => {
|
|
event.stopPropagation();
|
|
this.router.navigateToHash(hashPageStoreProductPrices);
|
|
});
|
|
});
|
|
}
|
|
hookupButtonNavStoreProductVariations() {
|
|
Events.initialiseEventHandler('.' + flagNavStoreProductVariations, flagInitialised, (navigator) => {
|
|
navigator.addEventListener("click", (event) => {
|
|
event.stopPropagation();
|
|
this.router.navigateToHash(hashPageStoreProductVariations);
|
|
});
|
|
});
|
|
}
|
|
hookupButtonNavStoreStockItems() {
|
|
Events.initialiseEventHandler('.' + flagNavStoreStockItems, flagInitialised, (navigator) => {
|
|
navigator.addEventListener("click", (event) => {
|
|
event.stopPropagation();
|
|
this.router.navigateToHash(hashPageStoreStockItems);
|
|
});
|
|
});
|
|
}
|
|
hookupButtonNavAdminHome() {
|
|
Events.initialiseEventHandler('.' + flagNavAdminHome, flagInitialised, (navigator) => {
|
|
navigator.addEventListener("click", (event) => {
|
|
event.stopPropagation();
|
|
this.router.navigateToHash(hashPageAdminHome);
|
|
});
|
|
});
|
|
}
|
|
|
|
hookupImagesLogo() {
|
|
let selectorImagesLogo = "img." + flagImageLogo;
|
|
Events.initialiseEventHandler(selectorImagesLogo, flagInitialised, (buttonImageLogo) => {
|
|
buttonImageLogo.addEventListener("click", (event) => {
|
|
event.stopPropagation();
|
|
this.router.navigateToHash(hashPageHome);
|
|
});
|
|
});
|
|
}
|
|
|
|
hookupOverlayFromId(idOverlay) {
|
|
Events.initialiseEventHandler(idOverlay, flagInitialised, function(overlay) {
|
|
overlay.querySelector('button.' + flagClose).addEventListener("click", function(event) {
|
|
event.stopPropagation();
|
|
overlay.css('display', 'none');
|
|
});
|
|
});
|
|
}
|
|
|
|
|
|
hookupButtonSave() {
|
|
Events.initialiseEventHandler('form.' + flagFilter + ' button.' + flagSave, flagInitialised, function(button) {
|
|
button.addEventListener("click", function(event) {
|
|
event.stopPropagation();
|
|
showOverlayConfirm();
|
|
});
|
|
button.classList.add(flagCollapsed);
|
|
});
|
|
}
|
|
|
|
hookupVideos() {
|
|
Events.initialiseEventHandler('video', flagInitialised, function(video) {
|
|
video.addEventListener("mouseover", videoPlay(video));
|
|
video.addEventListener("mouseout", videoPause(video));
|
|
});
|
|
}
|
|
|
|
leave() {
|
|
console.log('Leaving ' + this.title + ' page');
|
|
if (this.constructor === BasePage) {
|
|
throw new Error("Must implement leave() method.");
|
|
}
|
|
}
|
|
setLocalStoragePage(dataPage) {
|
|
LocalStorage.setLocalStorage(this.constructor.hash, dataPage);
|
|
}
|
|
getLocalStoragePage() {
|
|
return LocalStorage.getLocalStorage(this.constructor.hash);
|
|
}
|
|
|
|
toggleShowButtonsSaveCancel(show, buttonSave = null, buttonCancel = null) {
|
|
if (buttonSave == null) buttonSave = document.querySelector('form.' + flagFilter + ' button.' + flagSave);
|
|
if (buttonCancel == null) buttonCancel = document.querySelector('form.' + flagFilter + ' button.' + flagCancel);
|
|
if (show) {
|
|
buttonCancel.classList.remove(flagCollapsed);
|
|
buttonSave.classList.remove(flagCollapsed);
|
|
} else {
|
|
buttonCancel.classList.add(flagCollapsed);
|
|
buttonSave.classList.add(flagCollapsed);
|
|
}
|
|
}
|
|
|
|
static isDirtyFilter(filter) {
|
|
let isDirty = DOM.isElementDirty(filter);
|
|
if (isDirty) document.querySelectorAll(idTableMain + ' tbody tr').remove();
|
|
return isDirty;
|
|
}
|
|
} |