| Current File : /home/digitaw/www/wp-content/plugins/ionos-journey/js/parts/navigation.js |
import UrlHelper from "../helpers/url-helper.js";
export default class Navigation {
constructor() {
this.parentSelector = '#wp-admin-bar-top-secondary'
this.parent = document.querySelector(this.parentSelector)
if (this.parent === null) {
console.log('Error: ' + this.parentSelector + ' not found')
}else{
this.createNavigation()
this.registerClickEvent()
this.registerKeyEvent()
}
/* Array of functions to call on event */
this.onNext = []
this.onPrev = []
this.onStop = []
this.onAuto = []
this.onEnter = []
}
getHtmlElement() {
return document.querySelector()
}
createNavigation() {
this.prevButton = this.createButton('journey-prev')
this.stopButton = this.createButton('journey-stop')
this.autoButton = this.createButton('journey-auto')
if(UrlHelper.getParam('autoplay') !== null){
this.autoButton.children[0].id= "journey-auto-active"
}
this.nextButton = this.createButton('journey-next')
this.parent.append(this.nextButton, this.autoButton, this.stopButton, this.prevButton)
}
createStartButton() {
this.startButton = this.createButton('journey-start', 'IONOS Journey')
this.parent.append(this.startButton)
}
createButton(id, text = '') {
let anchor = document.createElement('A')
anchor.id = id
anchor.classList.add('ab-item')
// anchor.href = '#';
let iconSpan = document.createElement('SPAN')
iconSpan.classList.add('ab-icon')
let labelSpan = document.createElement('SPAN')
labelSpan.classList.add('ab-label')
labelSpan.innerText = text
anchor.append(iconSpan, labelSpan)
let button = document.createElement('LI')
button.classList.add('ionos-journey-container')
button.append(anchor)
return button;
}
registerClickEvent() {
this.prevButton.addEventListener('click', () => {
this.prev()
})
this.stopButton.addEventListener('click', () => {
this.stop()
})
this.nextButton.addEventListener('click', () => {
this.next()
})
this.autoButton.addEventListener('click', () => {
this.onAuto.forEach((fn) => {
fn()
})
})
}
registerKeyEvent() {
window.onkeyup = (e) => {
if (e.defaultPrevented) {
return; // We could also stop the propagation of this event
}
e.preventDefault()
e.stopPropagation()
switch (e.key) {
case 'ArrowRight':
if (!this.nextButton.classList.contains('wait')) {
this.next()
}
break
case 'ArrowLeft':
if (!this.nextButton.classList.contains('wait')) {
this.prev()
}
break
case 'Escape':
this.stop()
break
case 'Enter': {
this.enter()
break
}
}
}
}
next() {
this.onNext.forEach((fn) => {
fn()
})
}
stop() {
this.onStop.forEach((fn) => {
fn()
})
}
prev() {
this.onPrev.forEach((fn) => {
fn()
})
}
enter() {
this.onEnter.forEach((fn) => {
fn()
})
}
}
/*
navigation: function () {
this.click = function () {
document.body.querySelector('#journeyNext')
.addEventListener('click', function (e) {
e.target.classList.add('wait');
if( IONOS.plugin.journey.focus instanceof Object
&& IONOS.plugin.journey.configItem instanceof Object
&& IONOS.plugin.journey.configItem['type'] == "guide"
&& IONOS.plugin.journey.guide.guideIndex != (Object.keys(IONOS.plugin.journey.configItem['elements']).length - 1)
) {
IONOS.plugin.journey.guide.next(IONOS.plugin.journey.configItem, IONOS.plugin.journey.focus.get());
} else {
IONOS.plugin.journey.navigation.forward();
}
setTimeout(function () {
e.target.classList.remove('wait');
}, 400);
});
document.body.querySelector('#journeyStop')
.addEventListener('click', function () {
IONOS.plugin.journey.navigation.stop();
});
document.body.querySelector('#journeyBack')
.addEventListener('click', function (e) {
e.target.classList.add('wait');
IONOS.plugin.journey.navigation.backwards();
setTimeout(function () {
e.target.classList.remove('wait');
}, 400);
});
};
this.start = function () {
if( IONOS.plugin.journey.configCollection instanceof Object
&& IONOS.plugin.journey.urlParam instanceof Object
&& Object.keys(IONOS.plugin.journey.configCollection).length >= 1
) {
IONOS.plugin.journey.index = (IONOS.plugin.journey.urlParam['wp_tour'] && IONOS.plugin.journey.configCollection[IONOS.plugin.journey.urlParam['wp_tour']])
? IONOS.plugin.journey.urlParam['wp_tour']
: Object.keys(IONOS.plugin.journey.configCollection)[0];
IONOS.plugin.journey.nextConfigItem = IONOS.plugin.journey.index ? IONOS.plugin.journey.configCollection[IONOS.plugin.journey.index] : undefined;
IONOS.plugin.journey.target = IONOS.plugin.journey.nextConfigItem ? document.body.querySelector(IONOS.plugin.journey.nextConfigItem['selector']) : undefined;
if( IONOS.plugin.journey.focus instanceof Object
&& IONOS.plugin.journey.target instanceof HTMLElement
&& IONOS.plugin.journey.nextConfigItem instanceof Object
&& IONOS.plugin.journey.index
) {
let focus = IONOS.plugin.journey.focus.get();
IONOS.plugin.journey.movement.step(
focus,
IONOS.plugin.journey.target,
IONOS.plugin.journey.nextConfigItem,
IONOS.plugin.journey.index
);
IONOS.plugin.journey.configItem = IONOS.plugin.journey.configCollection[IONOS.plugin.journey.index];
IONOS.plugin.journey.nextConfigItem = IONOS.plugin.journey.configItem
? IONOS.plugin.journey.configCollection[IONOS.plugin.journey.configItem['next']]
: undefined;
IONOS.plugin.journey.target = IONOS.plugin.journey.nextConfigItem
? document.body.querySelector(IONOS.plugin.journey.nextConfigItem['selector'])
: undefined;
IONOS.plugin.journey.configItem['behavior'] == 'click' ?
focus.classList.add('clickable') :
focus.classList.remove('clickable');
} else if( IONOS.plugin.journey.urlParam instanceof Object && IONOS.plugin.journey.urlParam['wp_tour_return_index'] !== undefined ) {
window.location.href = decodeURIComponent(IONOS.plugin.journey.urlParam['wp_tour_last_page']) +
'?wp_tour=' + IONOS.plugin.journey.urlParam['wp_tour_return_index'] +
'&wp_tour_last_page=' + IONOS.plugin.journey.pageName +
'&wp_tour_last_index=' + IONOS.plugin.journey.index +
'&wp_tour_return_index=' + IONOS.plugin.journey.configItem['next'] || 'none';
} else {
console.log('finished');
document.body.querySelector('#journeyStop').click();
}
};
};
this.enter = function() {
if( IONOS.plugin.journey.configItem instanceof Object
&& IONOS.plugin.journey.configItem instanceof Object
&& IONOS.plugin.journey.configItem['behavior'] == 'click'
) {
let source = document.body.querySelector(IONOS.plugin.journey.configItem['selector']);
if(source) {
let url = source.querySelector('a').href;
let char = '&';
if (url.search(/[?]/) == -1) {
char = '?';
}
IONOS.plugin.journey.history.set();
window.location.href = source.querySelector('a').href + char + 'wp_tour=0&wp_tour_last_page=' + IONOS.plugin.journey.pageName + '&wp_tour_last_index=' + IONOS.plugin.journey.index + '&wp_tour_return_index=' + IONOS.plugin.journey.configItem['next'] || 'none';
}
}
};
this.stop = function () {
console.log('Navigation: stop');
window.location = IONOS.plugin.journey.pageName;
};
this.forward = function () {
console.log('Navigation: next');
if( IONOS.plugin.journey.focus instanceof Object
&& IONOS.plugin.journey.target instanceof HTMLElement
&& IONOS.plugin.journey.nextConfigItem instanceof Object
&& IONOS.plugin.journey.index
) {
IONOS.plugin.journey.history.set();
let focus = IONOS.plugin.journey.focus.get();
IONOS.plugin.journey.movement.step(
focus,
IONOS.plugin.journey.target,
IONOS.plugin.journey.nextConfigItem,
IONOS.plugin.journey.index
);
IONOS.plugin.journey.index = IONOS.plugin.journey.configItem['next'];
IONOS.plugin.journey.configItem = IONOS.plugin.journey.configCollection[IONOS.plugin.journey.index];
IONOS.plugin.journey.nextConfigItem = IONOS.plugin.journey.configItem
? IONOS.plugin.journey.configCollection[IONOS.plugin.journey.configItem['next']]
: undefined;
IONOS.plugin.journey.target = IONOS.plugin.journey.nextConfigItem
? document.body.querySelector(IONOS.plugin.journey.nextConfigItem['selector'])
: undefined;
IONOS.plugin.journey.configItem['behavior'] == 'click' ?
focus.classList.add('clickable') :
focus.classList.remove('clickable');
} else if( IONOS.plugin.journey.urlParam instanceof Object
&& IONOS.plugin.journey.urlParam['wp_tour_return_index'] != "null"
&& IONOS.plugin.journey.urlParam['wp_tour_return_index'] != undefined
) {
IONOS.plugin.journey.history.set();
window.location.href = decodeURIComponent(IONOS.plugin.journey.urlParam['wp_tour_last_page']) +
'?wp_tour=' + IONOS.plugin.journey.urlParam['wp_tour_return_index'] +
'&wp_tour_last_page=' + IONOS.plugin.journey.pageName +
'&wp_tour_last_index=' + IONOS.plugin.journey.index +
'&wp_tour_return_index=' + IONOS.plugin.journey.configItem['next'] || 'none';
} else {
console.log('finished');
document.body.querySelector('#journeyStop').click();
}
};
this.backwards = function () {
let story = IONOS.plugin.journey.history.get();
if( IONOS.plugin.journey.guide.guideIndex > 0
&& IONOS.plugin.journey.configItem instanceof Object
&& IONOS.plugin.journey.configItem['type'] == 'guide'
&& IONOS.plugin.journey.focus instanceof Object
) {
IONOS.plugin.journey.guide.back(IONOS.plugin.journey.configItem, IONOS.plugin.journey.focus.get());
}
else if (Array.isArray(story) && story.length > 0) {
let last_config = story.pop();
if (last_config['page'] == window.location.pathname.split("/").pop()) {
if( IONOS.plugin.journey.focus instanceof Object
&& IONOS.plugin.journey.configCollection instanceof Object
&& IONOS.plugin.journey.index
) {
let focus = IONOS.plugin.journey.focus.get();
let next = IONOS.plugin.journey.configCollection[last_config['index']]
IONOS.plugin.journey.focus.removeChildren(focus);
IONOS.plugin.journey.movement.step(
focus,
document.body.querySelector(next['selector']),
next,
IONOS.plugin.journey.index
);
IONOS.plugin.journey.index = last_config['index'];
IONOS.plugin.journey.configItem = IONOS.plugin.journey.configCollection[last_config['index']];
IONOS.plugin.journey.nextConfigItem = IONOS.plugin.journey.configItem
? IONOS.plugin.journey.configCollection[IONOS.plugin.journey.configItem['next']]
: undefined;
IONOS.plugin.journey.target = IONOS.plugin.journey.nextConfigItem
? document.body.querySelector(IONOS.plugin.journey.nextConfigItem['selector'])
: undefined;
IONOS.plugin.journey.configItem['behavior'] == 'click' ?
focus.classList.add('clickable') :
focus.classList.remove('clickable');
window.sessionStorage.setItem('ionos_journey_history', JSON.stringify(story));
}
} else {
window.sessionStorage.setItem('ionos_journey_history',JSON.stringify(story));
window.location.href = last_config['page'] + '?' +
IONOS.plugin.journey.core.helper.changeQueryParameter(
'?wp_tour=0&wp_tour_last_page=index.php&wp_tour_last_index=3rd&wp_tour_return_index=4th',
'wp_tour',
last_config['index']
);
}
}
};
},
*/