Ghost/ghost/admin/models/post.js
Robert Jackson d8da21520f Remove ObjectController proxying behavior.
Ember.ObjectController (and Ember.ArrayController) will be deprecated in
Ember 1.11 (and removed from core in Ember 2.0). The reasoning is
detailed in the Ember 2.0 RFC.

This PR does the following:

* Updates templates/controllers/views to explicitly reference model
  properties (instead of relying on proxying behavior).
* Clearly delineate where certain properties are being set or retrieved
  from (for example it was not clear exactly where `scratch` and
  `titleScratch` were stored).
* Remove usage of `Ember.ObjectController`.
* Add JSCS rule to prevent future PR's from adding regressions.
2015-01-01 21:51:20 -05:00

56 lines
1.8 KiB
JavaScript

import ValidationEngine from 'ghost/mixins/validation-engine';
import NProgressSaveMixin from 'ghost/mixins/nprogress-save';
var Post = DS.Model.extend(NProgressSaveMixin, ValidationEngine, {
validationType: 'post',
uuid: DS.attr('string'),
title: DS.attr('string', {defaultValue: ''}),
slug: DS.attr('string'),
markdown: DS.attr('string', {defaultValue: ''}),
html: DS.attr('string'),
image: DS.attr('string'),
featured: DS.attr('boolean', {defaultValue: false}),
page: DS.attr('boolean', {defaultValue: false}),
status: DS.attr('string', {defaultValue: 'draft'}),
language: DS.attr('string', {defaultValue: 'en_US'}),
meta_title: DS.attr('string'),
meta_description: DS.attr('string'),
author: DS.belongsTo('user', {async: true}),
author_id: DS.attr('number'),
updated_at: DS.attr('moment-date'),
updated_by: DS.attr(),
published_at: DS.attr('moment-date'),
published_by: DS.belongsTo('user', {async: true}),
created_at: DS.attr('moment-date'),
created_by: DS.attr(),
tags: DS.hasMany('tag', {embedded: 'always'}),
url: DS.attr('string'),
scratch: null,
titleScratch: null,
// Computed post properties
isPublished: Ember.computed.equal('status', 'published'),
isDraft: Ember.computed.equal('status', 'draft'),
// remove client-generated tags, which have `id: null`.
// Ember Data won't recognize/update them automatically
// when returned from the server with ids.
updateTags: function () {
var tags = this.get('tags'),
oldTags = tags.filterBy('id', null);
tags.removeObjects(oldTags);
oldTags.invoke('deleteRecord');
},
isAuthoredByUser: function (user) {
return parseInt(user.get('id'), 10) === parseInt(this.get('author_id'), 10);
}
});
export default Post;