mirror of
https://github.com/flarum/framework.git
synced 2025-01-10 21:35:38 +08:00
c28307903b
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!
50 lines
1.6 KiB
JavaScript
50 lines
1.6 KiB
JavaScript
import Ember from 'ember';
|
|
import DS from 'ember-data';
|
|
|
|
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, '-');
|
|
}),
|
|
|
|
startTime: DS.attr('date'),
|
|
startUser: DS.belongsTo('user'),
|
|
startPost: DS.belongsTo('post'),
|
|
|
|
lastTime: DS.attr('date'),
|
|
lastUser: DS.belongsTo('user'),
|
|
lastPost: DS.belongsTo('post'),
|
|
lastPostNumber: DS.attr('number'),
|
|
|
|
canReply: DS.attr('boolean'),
|
|
canEdit: DS.attr('boolean'),
|
|
canDelete: DS.attr('boolean'),
|
|
|
|
commentsCount: DS.attr('number'),
|
|
repliesCount: Ember.computed('commentsCount', function() {
|
|
return Math.max(0, this.get('commentsCount') - 1);
|
|
}),
|
|
|
|
// 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'),
|
|
|
|
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'),
|
|
|
|
// Only used to save a new discussion
|
|
content: DS.attr('string')
|
|
});
|