
Research
Security News
Malicious PyPI Package Exploits Deezer API for Coordinated Music Piracy
Socket researchers uncovered a malicious PyPI package exploiting Deezer’s API to enable coordinated music piracy through API abuse and C2 server control.
ember-router-scroll
Advanced tools
Scroll to page top on transition, like a non-SPA website. An alternative scroll behavior for Ember applications.
ember install ember-router-scroll
You can specify the id of an element for which the scroll position is saved and set. Default is window
for using the scroll position of the whole viewport. You can pass an options object in your application's config/environment.js
file.
ENV['routerScroll'] = {
scrollElement: '#mainScrollElement'
};
Like all good ember addons, this behavior was considered for core implementation. Good news, people like the idea. For now, the feature will live under the flag ember-unique-location-history-state
until it's finally released in Ember 2.13. You can follow along for yourself here and read up on the RFC if you'd like as well.
Notice that the in the full purple page, the user is sent to the middle of the page.
Notice that the in the full purple page, the user is sent to the top of the page.
Ember expects an application to be rendered with nested views. The default behavior is for the scroll position to be preserved on every transition. However, not all Ember applications use nested views. For these applications, a user would expect to see the top of the page on most transitions.
In addition to scrolling to the top of the page on most transitions, a user would expect the scroll position to be preserved when using the back or forward browser buttons.
ember-router-scroll makes your single page application feel more like a regular website.
ember install ember-router-scroll
In your app/router.js file, import the mixin:
import RouterScroll from 'ember-router-scroll';
And add RouterScroll as an extension to your Router object:
const Router = Ember.Router.extend(RouterScroll, {});
locationType
Edit config/environment.js
and change locationType
.
Also add historySupportMiddleware: true,
to get live-reload working in nested routes. (See Issue #21)
locationType: 'router-scroll',
historySupportMiddleware: true,
This location type inherits from Ember's HistoryLocation
.
'service:router-scroll'
and 'service:scheduler'
as dependencies in the needs: []
block://{your-app}}/tests/unit/routes/{{your-route}}.js
needs:[ 'service:router-scroll', 'service:scheduler' ],
Notice the unwanted scroll to top in this case.
Adding a query parameter or controller property fixes this issue.
In certain cases, you might want to have certain routes preserve scroll position when coming from a specific location. For example, inside your application, there is a way to get to a route where the user expects scroll position to be preserved (such as a tab section).
Add preserveScrollPosition
as a queryParam in the controller for the route that needs to preserve the scroll position.
Example:
import Ember from 'ember';
export default Ember.Controller.extend({
queryParams: [
'preserveScrollPosition',
],
});
Next, in the place where a transition is triggered, pass in preserveScrollPosition=true
. For example
{{link-to "About Tab" 'tab.about' (query-params preserveScrollPosition=true) }}
In other cases, you may have certain routes that always preserve scroll position, or routes where the controller can decide when to preserve scroll position. For instance, you may have some nested routes that have true nested UI where preserving scroll position is expected. Or you want a particular route to start off with the default scroll-to-top behavior but then preserve scroll position when query params change in reponse to user interaction. Using a conroller property also allows the use of preserveScrollPosition without adding this to the query params.
Add preserveScrollPosition
as a controller property for the route that needs to preserve the scroll position.
In this example we have preserveScrollPosition
initially set to false so that we get our normal scroll-to-top behavior when the route loads. Later on, when an action triggers a change to the filter
query param, we also set preserveScrollPosition
to true so that this user interaction does not trigger the scroll-to-top behavior.
Example:
import Ember from 'ember';
export default Ember.Controller.extend({
queryParams: ['filter'],
preserveScrollPosition: false,
actions: {
changeFilter(filter) {
this.set('preserveScrollPosition', true);
this.set('filter', filter);
}
}
});
If your controller is changing the preserveScrollPosition property, you'll probably need to reset preserveScrollPosition
back to the default behavior whenever the controller is reset. This is not necceary on routes where preserveScrollPosition
is always set to true.
import Ember from 'ember';
export default Ember.Route.extend({
resetController(controller) {
controller.set('preserveScrollPosition', false);
}
});
npm test
(Runs ember try:testall
to test your addon against multiple Ember versions)ember test
ember test --server
v0.5.0 (2018-02-01)
rootUrl
(@gowthamrm)ember-cli-github-pages
to deploy demo app (@gowthamrm)FAQs
Scroll to top with preserved browser history scroll position
The npm package ember-router-scroll receives a total of 4,920 weekly downloads. As such, ember-router-scroll popularity was classified as popular.
We found that ember-router-scroll demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 30 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncovered a malicious PyPI package exploiting Deezer’s API to enable coordinated music piracy through API abuse and C2 server control.
Research
The Socket Research Team discovered a malicious npm package, '@ton-wallet/create', stealing cryptocurrency wallet keys from developers and users in the TON ecosystem.
Security News
Newly introduced telemetry in devenv 1.4 sparked a backlash over privacy concerns, leading to the removal of its AI-powered feature after strong community pushback.