This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/components/topic-list.js.es6

97 lines
2.1 KiB
JavaScript

import computed from 'ember-addons/ember-computed-decorators';
export default Ember.Component.extend({
tagName: 'table',
classNames: ['topic-list'],
showTopicPostBadges: true,
_init: function(){
this.addObserver('hideCategory', this.rerender);
this.addObserver('order', this.rerender);
this.addObserver('ascending', this.rerender);
}.on('init'),
toggleInTitle: function(){
return !this.get('bulkSelectEnabled') && this.get('canBulkSelect');
}.property('bulkSelectEnabled'),
sortable: function(){
return !!this.get('changeSort');
}.property(),
skipHeader: function() {
return this.site.mobileView;
}.property(),
showLikes: function(){
return this.get('order') === "likes";
}.property('order'),
showOpLikes: function(){
return this.get('order') === "op_likes";
}.property('order'),
@computed('topics.@each')
lastVisitedTopic() {
if (!this.get('highlightLastVisited')) { return; }
let user = Discourse.User.current();
if (!user || !user.previous_visit_at) {
return;
}
let prevTopic, topic;
prevTopic = this.get('prevTopic');
if (prevTopic) {
return prevTopic;
}
let prevVisit = user.get('previousVisitAt');
let skipPinned = true;
this.get('topics').any(t => {
if (skipPinned && t.get('pinned')) {
return false;
}
skipPinned = false;
prevTopic = topic;
topic = t;
return t.get('bumpedAt') < prevVisit;
});
if (!prevTopic || !topic) {
return;
}
// end of list that was scanned
if (topic.get('bumpedAt') > prevVisit) {
return;
}
this.set('prevTopic', prevTopic);
return prevTopic;
},
click(e) {
var self = this;
var on = function(sel, callback){
var target = $(e.target).closest(sel);
if(target.length === 1){
callback.apply(self, [target]);
}
};
on('button.bulk-select', function(){
this.sendAction('toggleBulkSelect');
this.rerender();
});
on('th.sortable', function(e2){
this.sendAction('changeSort', e2.data('sort-order'));
this.rerender();
});
}
});