mirror of
https://github.com/flarum/core.git
synced 2025-08-09 01:46:35 +02:00
Upgrade to Ember 1.11-beta.1
HTMLBars goodness! Since there was some breakage and a lot of fiddling around to get some things working, I took this opportunity to do a big cleanup of the whole Ember app. I accidentally worked on some new features too :3 Note that the app is still broken right now, pending on https://github.com/emberjs/ember.js/issues/10401 Cleanup: - Restructuring of components - Consolidation of some stuff into mixins, cleanup of some APIs that will be public - Change all instances of .property() / .observes() / .on() to Ember.computed() / Ember.observer() / Ember.on() respectively (I think it is more readable) - More comments - Start conforming to a code style (2 spaces for indentation) New features: - Post hiding/restoring - Mark individual discussions as read by clicking - Clicking on a read discussion jumps to the end - Mark all discussions as read - Progressively mark the discussion as read as the page is scrolled - Unordered list post formatting - Post permalink popup Demo once that Ember regression is fixed!
This commit is contained in:
@@ -1,48 +1,49 @@
|
||||
import Ember from 'ember';
|
||||
import DS from 'ember-data';
|
||||
|
||||
var Discussion = DS.Model.extend({
|
||||
export default DS.Model.extend({
|
||||
title: DS.attr('string'),
|
||||
slug: Ember.computed('title', function() {
|
||||
return this.get('title').toLowerCase().replace(/[^a-z0-9]/gi, '-').replace(/-+/g, '-');
|
||||
}),
|
||||
|
||||
title: DS.attr('string'),
|
||||
content: DS.attr('string'), // only used to save a new discussion
|
||||
startTime: DS.attr('date'),
|
||||
startUser: DS.belongsTo('user'),
|
||||
startPost: DS.belongsTo('post'),
|
||||
|
||||
slug: function() {
|
||||
return this.get('title').toLowerCase().replace(/[^a-z0-9]/gi, '-').replace(/-+/g, '-');
|
||||
}.property('title'),
|
||||
|
||||
canReply: DS.attr('boolean'),
|
||||
canEdit: DS.attr('boolean'),
|
||||
canDelete: DS.attr('boolean'),
|
||||
lastTime: DS.attr('date'),
|
||||
lastUser: DS.belongsTo('user'),
|
||||
lastPost: DS.belongsTo('post'),
|
||||
lastPostNumber: DS.attr('number'),
|
||||
|
||||
startTime: DS.attr('date'),
|
||||
startUser: DS.belongsTo('user'),
|
||||
startPost: DS.belongsTo('post'),
|
||||
canReply: DS.attr('boolean'),
|
||||
canEdit: DS.attr('boolean'),
|
||||
canDelete: DS.attr('boolean'),
|
||||
|
||||
lastTime: DS.attr('date'),
|
||||
lastUser: DS.belongsTo('user'),
|
||||
lastPost: DS.belongsTo('post'),
|
||||
lastPostNumber: DS.attr('number'),
|
||||
commentsCount: DS.attr('number'),
|
||||
repliesCount: Ember.computed('commentsCount', function() {
|
||||
return Math.max(0, this.get('commentsCount') - 1);
|
||||
}),
|
||||
|
||||
relevantPosts: DS.hasMany('post'),
|
||||
// The API returns the `posts` relationship as a list of IDs. To hydrate a
|
||||
// post-stream object, we're only interested in obtaining a list of IDs, so
|
||||
// we make it a string and then split it by comma. Instead, we'll put a
|
||||
// relationship on `loadedPosts`.
|
||||
posts: DS.attr('string'),
|
||||
postIds: Ember.computed('posts', function() {
|
||||
var posts = this.get('posts') || '';
|
||||
return posts.split(',');
|
||||
}),
|
||||
loadedPosts: DS.hasMany('post'),
|
||||
relevantPosts: DS.hasMany('post'),
|
||||
|
||||
commentsCount: DS.attr('number'),
|
||||
repliesCount: function() {
|
||||
return Math.max(0, this.get('commentsCount') - 1);
|
||||
}.property('commentsCount'),
|
||||
readTime: DS.attr('date'),
|
||||
readNumber: DS.attr('number'),
|
||||
unreadCount: Ember.computed('lastPostNumber', 'readNumber', 'session.user.readTime', function() {
|
||||
return this.get('session.user.readTime') < this.get('lastTime') ? Math.max(0, this.get('lastPostNumber') - (this.get('readNumber') || 0)) : 0;
|
||||
}),
|
||||
isUnread: Ember.computed.bool('unreadCount'),
|
||||
|
||||
posts: DS.attr('string'),
|
||||
postIds: function() {
|
||||
var posts = this.get('posts') || '';
|
||||
return posts.split(',');
|
||||
}.property('posts'),
|
||||
loadedPosts: DS.hasMany('post'),
|
||||
|
||||
readTime: DS.attr('date'),
|
||||
readNumber: DS.attr('number'),
|
||||
unreadCount: function() {
|
||||
return this.get('lastPostNumber') - this.get('readNumber');
|
||||
}.property('lastPostNumber', 'readNumber'),
|
||||
isUnread: Ember.computed.bool('unreadCount')
|
||||
// Only used to save a new discussion
|
||||
content: DS.attr('string')
|
||||
});
|
||||
|
||||
export default Discussion;
|
||||
|
Reference in New Issue
Block a user