model-url-name.js 896 B

12345678910111213141516171819202122232425262728293031323334353637
  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 urlName = transition.params[transition.targetName].url_name;
  27. if (model.url_name !== urlName) {
  28. return this.transitionTo(transition.targetName, model);
  29. }
  30. }
  31. }
  32. });