Fixed back-to-top button on firefox. Fixes #153.

This commit is contained in:
Dan Brown
2016-07-26 18:03:10 +01:00
parent 547e117760
commit d05e85efa9

View File

@ -10,9 +10,12 @@ require('angular-ui-sortable');
var ngApp = angular.module('bookStack', ['ngResource', 'ngAnimate', 'ngSanitize', 'ui.sortable']); var ngApp = angular.module('bookStack', ['ngResource', 'ngAnimate', 'ngSanitize', 'ui.sortable']);
// Global Event System // Global Event System
var Events = { class Events {
listeners: {}, constructor() {
emit: function (eventName, eventData) { this.listeners = {};
}
emit(eventName, eventData) {
if (typeof this.listeners[eventName] === 'undefined') return this; if (typeof this.listeners[eventName] === 'undefined') return this;
var eventsToStart = this.listeners[eventName]; var eventsToStart = this.listeners[eventName];
for (let i = 0; i < eventsToStart.length; i++) { for (let i = 0; i < eventsToStart.length; i++) {
@ -20,14 +23,15 @@ var Events = {
event(eventData); event(eventData);
} }
return this; return this;
}, }
listen: function (eventName, callback) {
listen(eventName, callback) {
if (typeof this.listeners[eventName] === 'undefined') this.listeners[eventName] = []; if (typeof this.listeners[eventName] === 'undefined') this.listeners[eventName] = [];
this.listeners[eventName].push(callback); this.listeners[eventName].push(callback);
return this; return this;
} }
}; };
window.Events = Events; window.Events = new Events();
var services = require('./services')(ngApp, Events); var services = require('./services')(ngApp, Events);
var directives = require('./directives')(ngApp, Events); var directives = require('./directives')(ngApp, Events);
@ -38,14 +42,15 @@ var controllers = require('./controllers')(ngApp, Events);
// Smooth scrolling // Smooth scrolling
jQuery.fn.smoothScrollTo = function () { jQuery.fn.smoothScrollTo = function () {
if (this.length === 0) return; if (this.length === 0) return;
$('body').animate({ let scrollElem = document.documentElement.scrollTop === 0 ? document.body : document.documentElement;
$(scrollElem).animate({
scrollTop: this.offset().top - 60 // Adjust to change final scroll position top margin scrollTop: this.offset().top - 60 // Adjust to change final scroll position top margin
}, 800); // Adjust to change animations speed (ms) }, 800); // Adjust to change animations speed (ms)
return this; return this;
}; };
// Making contains text expression not worry about casing // Making contains text expression not worry about casing
$.expr[":"].contains = $.expr.createPseudo(function (arg) { jQuery.expr[":"].contains = $.expr.createPseudo(function (arg) {
return function (elem) { return function (elem) {
return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0; return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
}; };
@ -95,13 +100,14 @@ $(function () {
var scrollTop = document.getElementById('back-to-top'); var scrollTop = document.getElementById('back-to-top');
var scrollTopBreakpoint = 1200; var scrollTopBreakpoint = 1200;
window.addEventListener('scroll', function() { window.addEventListener('scroll', function() {
if (!scrollTopShowing && document.body.scrollTop > scrollTopBreakpoint) { let scrollTopPos = document.documentElement.scrollTop || document.body.scrollTop || 0;
if (!scrollTopShowing && scrollTopPos > scrollTopBreakpoint) {
scrollTop.style.display = 'block'; scrollTop.style.display = 'block';
scrollTopShowing = true; scrollTopShowing = true;
setTimeout(() => { setTimeout(() => {
scrollTop.style.opacity = 0.4; scrollTop.style.opacity = 0.4;
}, 1); }, 1);
} else if (scrollTopShowing && document.body.scrollTop < scrollTopBreakpoint) { } else if (scrollTopShowing && scrollTopPos < scrollTopBreakpoint) {
scrollTop.style.opacity = 0; scrollTop.style.opacity = 0;
scrollTopShowing = false; scrollTopShowing = false;
setTimeout(() => { setTimeout(() => {