Dan Brown

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

...@@ -10,9 +10,12 @@ require('angular-ui-sortable'); ...@@ -10,9 +10,12 @@ require('angular-ui-sortable');
10 var ngApp = angular.module('bookStack', ['ngResource', 'ngAnimate', 'ngSanitize', 'ui.sortable']); 10 var ngApp = angular.module('bookStack', ['ngResource', 'ngAnimate', 'ngSanitize', 'ui.sortable']);
11 11
12 // Global Event System 12 // Global Event System
13 -var Events = { 13 +class Events {
14 - listeners: {}, 14 + constructor() {
15 - emit: function (eventName, eventData) { 15 + this.listeners = {};
16 + }
17 +
18 + emit(eventName, eventData) {
16 if (typeof this.listeners[eventName] === 'undefined') return this; 19 if (typeof this.listeners[eventName] === 'undefined') return this;
17 var eventsToStart = this.listeners[eventName]; 20 var eventsToStart = this.listeners[eventName];
18 for (let i = 0; i < eventsToStart.length; i++) { 21 for (let i = 0; i < eventsToStart.length; i++) {
...@@ -20,14 +23,15 @@ var Events = { ...@@ -20,14 +23,15 @@ var Events = {
20 event(eventData); 23 event(eventData);
21 } 24 }
22 return this; 25 return this;
23 - }, 26 + }
24 - listen: function (eventName, callback) { 27 +
28 + listen(eventName, callback) {
25 if (typeof this.listeners[eventName] === 'undefined') this.listeners[eventName] = []; 29 if (typeof this.listeners[eventName] === 'undefined') this.listeners[eventName] = [];
26 this.listeners[eventName].push(callback); 30 this.listeners[eventName].push(callback);
27 return this; 31 return this;
28 } 32 }
29 }; 33 };
30 -window.Events = Events; 34 +window.Events = new Events();
31 35
32 var services = require('./services')(ngApp, Events); 36 var services = require('./services')(ngApp, Events);
33 var directives = require('./directives')(ngApp, Events); 37 var directives = require('./directives')(ngApp, Events);
...@@ -38,14 +42,15 @@ var controllers = require('./controllers')(ngApp, Events); ...@@ -38,14 +42,15 @@ var controllers = require('./controllers')(ngApp, Events);
38 // Smooth scrolling 42 // Smooth scrolling
39 jQuery.fn.smoothScrollTo = function () { 43 jQuery.fn.smoothScrollTo = function () {
40 if (this.length === 0) return; 44 if (this.length === 0) return;
41 - $('body').animate({ 45 + let scrollElem = document.documentElement.scrollTop === 0 ? document.body : document.documentElement;
46 + $(scrollElem).animate({
42 scrollTop: this.offset().top - 60 // Adjust to change final scroll position top margin 47 scrollTop: this.offset().top - 60 // Adjust to change final scroll position top margin
43 }, 800); // Adjust to change animations speed (ms) 48 }, 800); // Adjust to change animations speed (ms)
44 return this; 49 return this;
45 }; 50 };
46 51
47 // Making contains text expression not worry about casing 52 // Making contains text expression not worry about casing
48 -$.expr[":"].contains = $.expr.createPseudo(function (arg) { 53 +jQuery.expr[":"].contains = $.expr.createPseudo(function (arg) {
49 return function (elem) { 54 return function (elem) {
50 return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0; 55 return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
51 }; 56 };
...@@ -95,13 +100,14 @@ $(function () { ...@@ -95,13 +100,14 @@ $(function () {
95 var scrollTop = document.getElementById('back-to-top'); 100 var scrollTop = document.getElementById('back-to-top');
96 var scrollTopBreakpoint = 1200; 101 var scrollTopBreakpoint = 1200;
97 window.addEventListener('scroll', function() { 102 window.addEventListener('scroll', function() {
98 - if (!scrollTopShowing && document.body.scrollTop > scrollTopBreakpoint) { 103 + let scrollTopPos = document.documentElement.scrollTop || document.body.scrollTop || 0;
104 + if (!scrollTopShowing && scrollTopPos > scrollTopBreakpoint) {
99 scrollTop.style.display = 'block'; 105 scrollTop.style.display = 'block';
100 scrollTopShowing = true; 106 scrollTopShowing = true;
101 setTimeout(() => { 107 setTimeout(() => {
102 scrollTop.style.opacity = 0.4; 108 scrollTop.style.opacity = 0.4;
103 }, 1); 109 }, 1);
104 - } else if (scrollTopShowing && document.body.scrollTop < scrollTopBreakpoint) { 110 + } else if (scrollTopShowing && scrollTopPos < scrollTopBreakpoint) {
105 scrollTop.style.opacity = 0; 111 scrollTop.style.opacity = 0;
106 scrollTopShowing = false; 112 scrollTopShowing = false;
107 setTimeout(() => { 113 setTimeout(() => {
......