mirror of
https://github.com/discourse/discourse.git
synced 2025-02-17 00:35:50 +00:00
Fix assignment of post number to progress position
This commit is contained in:
parent
ec4e268703
commit
8539c08d35
@ -629,10 +629,9 @@ export default ObjectController.extend(Discourse.SelectedPostsCount, {
|
|||||||
if (!post) { return; }
|
if (!post) { return; }
|
||||||
|
|
||||||
var postStream = this.get('postStream'),
|
var postStream = this.get('postStream'),
|
||||||
lastLoadedPost = postStream.get('lastLoadedPost'),
|
lastLoadedPost = postStream.get('lastLoadedPost');
|
||||||
index = postStream.get('stream').indexOf(post.get('id'))+1;
|
|
||||||
|
|
||||||
this.set('controllers.topic-progress.progressPosition', index);
|
this.set('controllers.topic-progress.progressPosition', postStream.progressIndexOfPost(post));
|
||||||
|
|
||||||
if (lastLoadedPost && lastLoadedPost === post) {
|
if (lastLoadedPost && lastLoadedPost === post) {
|
||||||
postStream.appendMore();
|
postStream.appendMore();
|
||||||
|
@ -220,7 +220,9 @@ Discourse.URL = Em.Object.createWithMixins({
|
|||||||
highlightOnInsert: closest,
|
highlightOnInsert: closest,
|
||||||
enteredAt: new Date().getTime().toString()
|
enteredAt: new Date().getTime().toString()
|
||||||
});
|
});
|
||||||
topicProgressController.set('progressPosition', closest);
|
var closestPost = postStream.closestPostForPostNumber(closest),
|
||||||
|
progress = postStream.progressIndexOfPost(closestPost);
|
||||||
|
topicProgressController.set('progressPosition', progress);
|
||||||
Discourse.PostView.considerHighlighting(topicController, closest);
|
Discourse.PostView.considerHighlighting(topicController, closest);
|
||||||
}).then(function() {
|
}).then(function() {
|
||||||
Discourse.URL.jumpToPost(closest);
|
Discourse.URL.jumpToPost(closest);
|
||||||
|
@ -635,13 +635,61 @@ Discourse.PostStream = Em.Object.extend({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns the closest post given a postNumber that may not exist in the stream.
|
||||||
|
For example, if the user asks for a post that's deleted or otherwise outside the range.
|
||||||
|
This allows us to set the progress bar with the correct number.
|
||||||
|
|
||||||
|
@method closestPostForPostNumber
|
||||||
|
@param {Number} postNumber the post number we're looking for
|
||||||
|
@return {Post} the closest post
|
||||||
|
@see PostStream.closestPostNumberFor
|
||||||
|
**/
|
||||||
|
closestPostForPostNumber: function(postNumber) {
|
||||||
|
if (!this.get('hasPosts')) { return; }
|
||||||
|
|
||||||
|
var closest = null;
|
||||||
|
this.get('posts').forEach(function (p) {
|
||||||
|
if (closest === postNumber) { return; }
|
||||||
|
if (!closest) { closest = p; }
|
||||||
|
|
||||||
|
if (Math.abs(postNumber - p.get('post_number')) < Math.abs(closest.get('post_number') - postNumber)) {
|
||||||
|
closest = p;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return closest;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
Get the index of a post in the stream. (Use this for the topic progress bar.)
|
||||||
|
|
||||||
|
@param post the post to get the index of
|
||||||
|
@returns {Number} 1-starting index of the post, or 0 if not found
|
||||||
|
@see PostStream.progressIndexOfPostId
|
||||||
|
**/
|
||||||
|
progressIndexOfPost: function(post) {
|
||||||
|
return this.progressIndexOfPostId(post.get('id'));
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
Get the index in the stream of a post id. (Use this for the topic progress bar.)
|
||||||
|
|
||||||
|
@param post_id - post id to search for
|
||||||
|
@returns {Number} 1-starting index of the post, or 0 if not found
|
||||||
|
**/
|
||||||
|
progressIndexOfPostId: function(post_id) {
|
||||||
|
return this.get('stream').indexOf(post_id) + 1;
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns the closest post number given a postNumber that may not exist in the stream.
|
Returns the closest post number given a postNumber that may not exist in the stream.
|
||||||
For example, if the user asks for a post that's deleted or otherwise outside the range.
|
For example, if the user asks for a post that's deleted or otherwise outside the range.
|
||||||
This allows us to set the progress bar with the correct number.
|
This allows us to set the progress bar with the correct number.
|
||||||
|
|
||||||
@method closestPostNumberFor
|
@method closestPostNumberFor
|
||||||
@param {Integer} postNumber the post number we're looking for
|
@param {Number} postNumber the post number we're looking for
|
||||||
|
@return {Number} a close post number
|
||||||
**/
|
**/
|
||||||
closestPostNumberFor: function(postNumber) {
|
closestPostNumberFor: function(postNumber) {
|
||||||
if (!this.get('hasPosts')) { return; }
|
if (!this.get('hasPosts')) { return; }
|
||||||
|
@ -23,7 +23,9 @@ Discourse.TopicFromParamsRoute = Discourse.Route.extend({
|
|||||||
|
|
||||||
postStream.refresh(params).then(function () {
|
postStream.refresh(params).then(function () {
|
||||||
// The post we requested might not exist. Let's find the closest post
|
// The post we requested might not exist. Let's find the closest post
|
||||||
var closest = postStream.closestPostNumberFor(params.nearPost) || 1;
|
var closestPost = postStream.closestPostForPostNumber(params.nearPost || 1),
|
||||||
|
closest = closestPost.get('post_number'),
|
||||||
|
progress = postStream.progressIndexOfPost(closestPost);
|
||||||
|
|
||||||
topicController.setProperties({
|
topicController.setProperties({
|
||||||
currentPost: closest,
|
currentPost: closest,
|
||||||
@ -32,7 +34,7 @@ Discourse.TopicFromParamsRoute = Discourse.Route.extend({
|
|||||||
});
|
});
|
||||||
|
|
||||||
topicProgressController.setProperties({
|
topicProgressController.setProperties({
|
||||||
progressPosition: closest,
|
progressPosition: progress,
|
||||||
expanded: false
|
expanded: false
|
||||||
});
|
});
|
||||||
Discourse.URL.jumpToPost(closest);
|
Discourse.URL.jumpToPost(closest);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user