model-url-name.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import Ember from 'ember';
  2. var urlNameRe = new RegExp(/^([a-zA-Z0-9-]+)-(\d+)$/);
  3. export default Ember.Mixin.create({
  4. usingUrlName: false,
  5. parseUrlName: function(urlName) {
  6. if (urlNameRe.test(urlName)) {
  7. var idPosition = urlName.lastIndexOf('-');
  8. return {
  9. slug: urlName.substr(0, idPosition),
  10. id: urlName.substr(idPosition + 1)
  11. };
  12. } else {
  13. return false;
  14. }
  15. },
  16. getParsedUrlNameOr404: function(urlName) {
  17. var parsedUrlName = this.parseUrlName(urlName);
  18. if (parsedUrlName) {
  19. return parsedUrlName;
  20. } else {
  21. this.throw404();
  22. }
  23. },
  24. afterModel: function(model, transition) {
  25. if (this.get('usingUrlName')) {
  26. var userUrlName = transition.params[transition.targetName].url_name;
  27. if (this.serialize(model) !== userUrlName) {
  28. return this.transitionTo(transition.targetName, model);
  29. }
  30. }
  31. },
  32. serialize: function(model, params) {
  33. if (this.get('usingUrlName')) {
  34. return { url_name: model.get('slug') + '-' + model.get('id') };
  35. } else {
  36. return this._super(model, params);
  37. }
  38. }
  39. });