Files
NodeBB/public/src/modules/navigator.js

106 lines
2.2 KiB
JavaScript
Raw Normal View History

2014-04-04 12:42:41 -04:00
'use strict';
/* globals app, define, ajaxify */
define('navigator', function() {
2014-04-04 12:42:41 -04:00
var navigator = {};
var index = 1;
var count = 0;
navigator.init = function(selector, count, callback) {
navigator.selector = selector;
navigator.callback = callback;
$(window).on('scroll', navigator.update);
$('.pagination-block a').off('click').on('click', function() {
return false;
});
$('.pagination-block i:first').off('click').on('click', function() {
navigator.scrollToTop();
});
$('.pagination-block i:last').off('click').on('click', function() {
navigator.scrollToBottom();
});
navigator.setCount(count);
navigator.update();
};
navigator.setCount = function(value) {
2014-04-04 16:18:51 -04:00
count = parseInt(value, 10);
2014-04-04 12:42:41 -04:00
navigator.updateTextAndProgressBar();
};
navigator.show = function() {
2014-04-04 16:18:51 -04:00
toggle(true);
2014-04-04 12:42:41 -04:00
};
navigator.hide = function() {
2014-04-04 16:18:51 -04:00
toggle(false);
2014-04-04 12:42:41 -04:00
};
2014-04-04 16:18:51 -04:00
function toggle(flag) {
$('.pagination-block').toggleClass('hidden', !flag);
}
2014-04-04 12:42:41 -04:00
navigator.update = function() {
2014-04-04 16:18:51 -04:00
toggle(!!count);
2014-04-04 12:42:41 -04:00
$($(navigator.selector).get().reverse()).each(function() {
var el = $(this);
if (elementInView(el)) {
index = parseInt(el.attr('data-index'), 10) + 1;
navigator.updateTextAndProgressBar();
if (typeof navigator.callback === 'function') {
navigator.callback(el);
}
return false;
}
});
};
navigator.updateTextAndProgressBar = function() {
2014-05-28 13:13:29 -04:00
index = index > count ? count : index;
2014-05-08 14:27:46 -04:00
translator.translate('[[global:pagination.out_of, ' + index + ', ' + count + ']]', function(translated) {
$('#pagination').html(translated);
});
2014-05-07 16:11:58 -04:00
$('.pagination-block .progress-bar').width((index / count * 100) + '%');
2014-04-04 12:42:41 -04:00
};
navigator.scrollToTop = function () {
$('body,html').animate({
scrollTop: 0
});
};
navigator.scrollToBottom = function () {
$('body,html').animate({
scrollTop: $('html').height() - 100
});
};
function elementInView(el) {
var scrollTop = $(window).scrollTop() + $('#header-menu').height();
var scrollBottom = scrollTop + $(window).height();
var elTop = el.offset().top;
var elBottom = elTop + Math.floor(el.height());
return (elTop >= scrollTop && elBottom <= scrollBottom) || (elTop <= scrollTop && elBottom >= scrollTop);
}
return navigator;
2014-04-10 20:31:57 +01:00
});