FIX: "Go Back" wasn't displaying properly most of the time
This commit is contained in:
parent
3cebba5b1f
commit
3c30fa628b
|
@ -849,14 +849,25 @@ export default Ember.Controller.extend(SelectedPostsCount, BufferedContent, {
|
|||
|
||||
if (topic.get('id') === topicId) {
|
||||
|
||||
let highestReadPostId = 0;
|
||||
|
||||
// TODO identity map for postNumber
|
||||
postStream.get('posts').forEach(post => {
|
||||
if (!post.read && postNumbers.indexOf(post.post_number) !== -1) {
|
||||
const id = post.get('id');
|
||||
if (id > highestReadPostId) {
|
||||
highestReadPostId = id;
|
||||
}
|
||||
|
||||
post.set('read', true);
|
||||
this.appEvents.trigger('post-stream:refresh', { id: post.id });
|
||||
this.appEvents.trigger('post-stream:refresh', { id });
|
||||
}
|
||||
});
|
||||
|
||||
if (highestReadPostId > 0) {
|
||||
topic.set('last_read_post_id', highestReadPostId);
|
||||
}
|
||||
|
||||
const max = _.max(postNumbers);
|
||||
if (max > topic.get("last_read_post_number")) {
|
||||
topic.set("last_read_post_number", max);
|
||||
|
|
|
@ -320,11 +320,6 @@ const TopicTrackingState = Discourse.Model.extend({
|
|||
.length;
|
||||
},
|
||||
|
||||
lastReadPostNumber(topicId) {
|
||||
const state = this.states[`t${topicId}`];
|
||||
return state ? state.last_read_post_number : null;
|
||||
},
|
||||
|
||||
countCategory(category_id) {
|
||||
let sum = 0;
|
||||
_.each(this.states, function(topic){
|
||||
|
|
|
@ -20,7 +20,7 @@ createWidget('timeline-last-read', {
|
|||
this.attach('button', {
|
||||
className: 'btn btn-primary btn-small',
|
||||
icon: 'arrow-left',
|
||||
label: 'go_back',
|
||||
label: 'topic.timeline.back',
|
||||
action: 'goBack'
|
||||
})
|
||||
];
|
||||
|
@ -92,7 +92,8 @@ createWidget('timeline-scrollarea', {
|
|||
position() {
|
||||
const { attrs } = this;
|
||||
const percentage = this.state.percentage;
|
||||
const postStream = attrs.topic.get('postStream');
|
||||
const topic = attrs.topic;
|
||||
const postStream = topic.get('postStream');
|
||||
const total = postStream.get('filteredPostsCount');
|
||||
let current = Math.round(total * percentage);
|
||||
|
||||
|
@ -111,12 +112,13 @@ createWidget('timeline-scrollarea', {
|
|||
lastReadPercentage: null
|
||||
};
|
||||
|
||||
if (attrs.topicTrackingState) {
|
||||
const lastRead = attrs.topicTrackingState.lastReadPostNumber(attrs.topic.id);
|
||||
if (lastRead) {
|
||||
result.lastRead = lastRead;
|
||||
result.lastReadPercentage = lastRead === 1 ? 0.0 : parseFloat(lastRead) / total;
|
||||
}
|
||||
const lastReadId = topic.last_read_post_id;
|
||||
const lastReadNumber = topic.last_read_post_number;
|
||||
|
||||
if (lastReadId && lastReadNumber) {
|
||||
const idx = postStream.get('stream').indexOf(lastReadId) + 1;
|
||||
result.lastRead = lastReadNumber;
|
||||
result.lastReadPercentage = this._percentFor(topic, idx);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -173,7 +175,6 @@ createWidget('timeline-scrollarea', {
|
|||
|
||||
_percentFor(topic, postNumber) {
|
||||
const total = topic.get('postStream.filteredPostsCount');
|
||||
console.log(postNumber, total);
|
||||
let result = (postNumber === 1) ? 0.0 : parseFloat(postNumber) / total;
|
||||
|
||||
if (result < 0) { return 0.0; }
|
||||
|
|
|
@ -47,6 +47,7 @@ class TopicViewSerializer < ApplicationSerializer
|
|||
:details,
|
||||
:highest_post_number,
|
||||
:last_read_post_number,
|
||||
:last_read_post_id,
|
||||
:deleted_by,
|
||||
:has_deleted,
|
||||
:actions_summary,
|
||||
|
@ -164,8 +165,16 @@ class TopicViewSerializer < ApplicationSerializer
|
|||
object.highest_post_number
|
||||
end
|
||||
|
||||
def last_read_post_id
|
||||
return nil unless object.filtered_post_stream && last_read_post_number
|
||||
object.filtered_post_stream.each do |ps|
|
||||
return ps[0] if ps[1] === last_read_post_number
|
||||
end
|
||||
end
|
||||
alias_method :include_last_read_post_id?, :has_topic_user?
|
||||
|
||||
def last_read_post_number
|
||||
object.topic_user.last_read_post_number
|
||||
@last_read_post_number ||= object.topic_user.last_read_post_number
|
||||
end
|
||||
alias_method :include_last_read_post_number?, :has_topic_user?
|
||||
|
||||
|
|
|
@ -1294,6 +1294,7 @@ en:
|
|||
auto_close_immediate: "The last post in the topic is already %{hours} hours old, so the topic will be closed immediately."
|
||||
|
||||
timeline:
|
||||
back: "Back"
|
||||
replies: "%{current} / %{total} replies"
|
||||
replies_short: "%{current} / %{total}"
|
||||
|
||||
|
|
Loading…
Reference in New Issue