123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- import Ember from 'ember';
- var urlNameRe = new RegExp(/^([a-zA-Z0-9-]+)-(\d+)$/);
- export default Ember.Mixin.create({
- usingUrlName: false,
- parseUrlName: function(urlName) {
- if (urlNameRe.test(urlName)) {
- var idPosition = urlName.lastIndexOf('-');
- return {
- slug: urlName.substr(0, idPosition),
- id: urlName.substr(idPosition + 1)
- };
- } else {
- return false;
- }
- },
- getParsedUrlNameOr404: function(urlName) {
- var parsedUrlName = this.parseUrlName(urlName);
- if (parsedUrlName) {
- return parsedUrlName;
- } else {
- this.throw404();
- }
- },
- afterModel: function(model, transition) {
- if (this.get('usingUrlName')) {
- var userUrlName = transition.params[transition.targetName].url_name;
- if (this.serialize(model) !== userUrlName) {
- return this.transitionTo(transition.targetName, model);
- }
- }
- },
- serialize: function(model, params) {
- if (this.get('usingUrlName')) {
- return { url_name: model.get('slug') + '-' + model.get('id') };
- } else {
- return this._super(model, params);
- }
- }
- });
|