Skip to content

Commit

Permalink
001 - router-scroll mixin added
Browse files Browse the repository at this point in the history
  • Loading branch information
Jason Farmer committed Jul 21, 2016
1 parent 178bbbe commit 690a581
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 0 deletions.
42 changes: 42 additions & 0 deletions addon/mixins/router-scroll.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import Ember from 'ember';

// ember-router-scroll variables
let popStateEvent = false;
const scrollMap = {};
let windowLocation = '';

// ember-router-scroll event handler
window.addEventListener('popstate', () => {
popStateEvent = true;
});

export default Ember.Mixin.create({

willTransition(...args) {
this._super(...args);
scrollMap[windowLocation] = Ember.$(window).scrollTop();
},

didTransition(transitions, ...args) {
this._super(transitions, ...args);

Ember.run.next(() => {
windowLocation = window.location.pathname;
const scrollPosition = scrollMap[windowLocation] ? scrollMap[windowLocation] : 0;
const preserveScrollPosition = transitions[transitions.length - 1]
.handler.controller.get('preserveScrollPosition');
if (popStateEvent) {
// If the back or forward browser button is pressed, set scroll top to
// the position it had when the page was last seen.
Ember.$(window).scrollTop(scrollPosition);
} else {
// This is an initial or direct page visit, so begin at page top.
if (preserveScrollPosition) {return;}
Ember.$(window).scrollTop(0);
}

// Reset popstate event status.
popStateEvent = false;
});
},
});
1 change: 1 addition & 0 deletions app/mixins/ember-router-scroll.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default } from 'ember-router-scroll/mixins/router-scroll';
12 changes: 12 additions & 0 deletions tests/unit/mixins/router-scroll-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import Ember from 'ember';
import RouterScrollMixin from 'ember-router-scroll/mixins/router-scroll';
import { module, test } from 'qunit';

module('Unit | Mixin | router scroll');

// Replace this with your real tests.
test('it works', function(assert) {
let RouterScrollObject = Ember.Object.extend(RouterScrollMixin);
let subject = RouterScrollObject.create();
assert.ok(subject);
});

0 comments on commit 690a581

Please sign in to comment.