bibelwissen/public/javascripts/slide-utils.js

284 lines
7.4 KiB
JavaScript

var __slide_data = {
slides : [],
index : -1,
jump_to_slide : true,
fade_in_time: 500
}
function push_slide_stack(ident) {
console.log("push_slide_slides: ", ident);
$(ident).each(function() {
__slide_data.slides.push($(this));
$(this).hide();
var subslides = $(this).data('subslides');
if(typeof subslides !== 'undefined' && subslides !== '') {
push_slide_stack(subslides);
}
var slideslave = $(this).data('slideslave');
if(typeof slideslave !== 'undefined' && slideslave !== '') {
$(slideslave).hide();
}
});
console.log("push_slide_slides: ", ident, "; completet: count: ", __slide_data.slides.length)
}
// https://slidesoverflow.com/questions/5685589/scroll-to-element-only-if-not-in-view-jquery
/*function scrollIntoViewIfNeeded($target) {
if ($target.offset()) {
if ($target.offset().top < jQuery(window).scrollTop()){
//scroll up
$('html,body').scrollTop($target.offset().top-20);
//$('html,body').animate({scrollTop: $target.position().top-20});
}
else if ($target.offset().top + $target.height() >
$(window).scrollTop() + (
window.innerHeight || document.documentElement.clientHeight
)) {
//scroll down
$('html,body').scrollTop($target.offset().top -
(window.innerHeight || document.documentElement.clientHeight)
+ $target.height() + 20);
}
}
}*/
function scrollIntoViewIfNeeded(target) {
if(__slide_data.jump_to_slide === false)
return;
var rect = target.getBoundingClientRect();
/*console.log(rect);
console.log(window.innerHeight);*/
if (rect.bottom > window.innerHeight-10) {
target.scrollIntoView(false);
if(rect.height < window.innerHeight-20) {
console.log("additional scroll");
window.scrollTo(0, window.pageYOffset+20);
}
else
{
var position = window.pageYOffset - (rect.height - window.innerHeight);
console.log("position ", position);
window.scrollTo(0, position);
}
}
if (rect.top < 0) {
target.scrollIntoView();
//window.scrollTo(0, target.bottom+20);
window.scrollTo(0, window.pageYOffset-25);
}
}
function slide_prev() {
var slides = __slide_data.slides;
/*console.log('up');*/
if(__slide_data.index>=0) {
var slideslave = $(slides[__slide_data.index]).data('slideslave');
if(typeof slideslave !== 'undefined' && slideslave !== '') {
$(slideslave).fadeOut(0);
}
$(slides[__slide_data.index]).fadeOut(__slide_data.fade_in_time, function() {
$(this).trigger('fadeOutCompleted')
var slidefunc = $(this).data('slidefunc');
if(typeof slidefunc !== 'undefined' && slidefunc !== '') {
window[slidefunc](false);
}
});
__slide_data.index--;
}
/*else { // we look if we can go up
if(__slide_data.slideslidesidx > 0) {
__slide_data.slideslidesidx--;
__slide_data.slideslidess.pop();
}
}*/
}
function slide_next() {
console.log('down; index: ', __slide_data.index);
var slides = __slide_data.slides;
if(__slide_data.index<(slides.length-1)) {
/*console.log('bin drin');*/
__slide_data.index++;
if($(slides[__slide_data.index]).hasClass('nodisplay')) {
$(slides[__slide_data.index]).removeClass('nodisplay');
$(slides[__slide_data.index]).addClass('HASnodisplay');
}
if($(slides[__slide_data.index]).parent().hasClass('nodisplay')) {
$(slides[__slide_data.index]).parent().removeClass('nodisplay');
$(slides[__slide_data.index]).parent().addClass('HASnodisplay');
}
//scrollIntoViewIfNeeded($(slides.slides[slides.index]));
$(slides[__slide_data.index]).css('visibility','visible').hide().fadeIn(__slide_data.fade_in_time, function() {
scrollIntoViewIfNeeded(this);
var slideslave = $(this).data('slideslave');
if(typeof slideslave !== 'undefined' && slideslave !== '') {
/*console.log('sslave', $(slideslave));*/
if($(slideslave).parent().hasClass("nodisplay")) {
$(slideslave).parent().removeClass('nodisplay');
$(slideslave).parent().addClass('HASnodisplay');
}
$(slideslave).css('visibility','visible').hide().fadeIn(__slide_data.fade_in_time, function() {
scrollIntoViewIfNeeded(this);
});
}
$(this).trigger('fadeInCompleted');
var slidefunc = $(this).data('slidefunc');
if(typeof slidefunc !== 'undefined' && slidefunc !== '') {
window[slidefunc](true);
}
});
}
}
function topic_next() {
console.log('Nächstes Thema ...');
var i = $(".nav-pills:not(.pill-sub-1) > .nav-item > .nav-link.active").parent();
/*console.log(i);*/
var n = i.next();
if(n.length >= 1) {
/*console.log(n);*/
var a = n.find('a.nav-link');
/*console.log(a);*/
if(a.length >= 1)
a[0].click();
else
console.log("Kein nächster Punkt [FEHLER!]");
}
else {
console.log('Kein nächster Punkt!');
}
}
function topic_prev() {
console.log('Vorheriges Thema ...');
var i = $(".nav-pills:not(.pill-sub-1) > .nav-item > .nav-link.active").parent();
/*console.log(i);*/
var n = i.prev();
/*console.log(n);*/
if(n.length >= 1) {
/*console.log(n);*/
var a = n.find('a.nav-link');
/*console.log(a);*/
if(a.length >= 1)
a[0].click();
else
console.log("Kein vorheriger Punkt [FEHLER!]");
}
else {
console.log('Kein vorheriger Punkt!');
}
}
function page_next() {
console.log('Nächste Seite ...');
var i = $(".nav-pills.pill-sub-1 > .nav-item > .nav-link.active").parent();
/*console.log(i);*/
var n = i.next();
if(n.length >= 1) {
/*console.log(n);*/
var a = n.find('a.nav-link');
/*console.log(a);*/
if(a.length >= 1)
a[0].click();
else
console.log("Kein nächster Punkt [FEHLER!]");
}
else {
console.log('Kein nächster Punkt! -> Nächstes Thema');
topic_next();
}
}
function page_prev() {
console.log('Vorherige Seite ...');
var i = $(".nav-pills.pill-sub-1 > .nav-item > .nav-link.active").parent();
/*console.log(i);*/
var n = i.prev();
/*console.log(n);*/
if(n.length >= 1) {
/*console.log(n);*/
var a = n.find('a.nav-link');
/*console.log(a);*/
if(a.length >= 1)
a[0].click();
else
console.log("Kein vorheriger Punkt [FEHLER!]");
}
else {
console.log('Kein vorheriger Punkt! -> Vorheriges Thema');
topic_prev();
}
}
function register_presentationkeys () {
console.log("registering keys ...")
$(document).keydown(function(e) {
console.log('Keydown: ', e.which)
switch(e.which) {
case 37:
slide_prev();
break;
case 39:
slide_next();
break;
/*case 33: BILD RAUF*/
case 90:
/*'z' : Punkt erster Ordnung weiter */
topic_next();
break;
/* case 36: POS1*/
case 84:
/*'t': Punkt erster Ordnung zurück */
topic_prev();
break;
/*case 34: BILD RUNTER*/
case 72:
/*'g' : Punkt zweiter Ordnung weiter */
page_next();
break;
/*case 35: ENDE*/
case 71:
/*'h': Punkt zweiter Ordnung zurück */
page_prev();
break;
}
});
}
function jump_to_slide_true() {
__slide_data.jump_to_slide = true;
console.log("SET TO TRUE");
}
function show_next_slide() {
if(__slide_data.index != __slide_data.slides.length-1) {
slide_next();
setTimeout(show_next_slide, 0);
}
else
setTimeout(jump_to_slide_true, 2000);
}
function show_all_slides() {
__slide_data.jump_to_slide = false;
__slide_data.fade_in_time = 0;
show_next_slide();
/* while(__slide_data.slideslidess[0].index != __slide_data.slideslidess[0].slides.length-1)
{
console.log(__slide_data.slideslidess[0].index);
console.log(__slide_data.slideslidess[0].slides.length-1);
slide_next();
}*/
}