Showing
1 changed file
with
16 additions
and
10 deletions
| ... | @@ -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(() => { | ... | ... |
-
Please register or sign in to post a comment