User stream now uses eyeline for loading more content.
This commit is contained in:
parent
44bebf255d
commit
c9c6a8fd9d
|
@ -169,11 +169,10 @@ Discourse.Eyeline.prototype.update = function() {
|
||||||
@method flushRest
|
@method flushRest
|
||||||
**/
|
**/
|
||||||
Discourse.Eyeline.prototype.flushRest = function() {
|
Discourse.Eyeline.prototype.flushRest = function() {
|
||||||
var _this = this;
|
var eyeline = this;
|
||||||
return $(this.selector).each(function(i, elem) {
|
return $(this.selector).each(function(i, elem) {
|
||||||
var $elem;
|
var $elem = $(elem);
|
||||||
$elem = $(elem);
|
return eyeline.trigger('saw', { detail: $elem });
|
||||||
return _this.trigger('saw', { detail: $elem });
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ Discourse.Scrolling = Em.Mixin.create({
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Begin watching for scroll events. They will be called at max every 100ms.
|
Stop watching for scroll events.
|
||||||
|
|
||||||
@method unbindScrolling
|
@method unbindScrolling
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,27 +1,24 @@
|
||||||
<div id='user-stream'>
|
{{#each view.stream.content}}
|
||||||
{{#each view.stream.content}}
|
<div {{bindAttr class=":item hidden deleted moderator_action"}}>
|
||||||
<div {{bindAttr class=":item hidden deleted moderator_action"}}>
|
<div class='clearfix info'>
|
||||||
<div class='clearfix info'>
|
<a href="{{unbound userUrl}}" class='avatar-link'><div class='avatar-wrapper'>{{avatar this imageSize="large" extraClasses="actor" ignoreTitle="true"}}</div></a>
|
||||||
<a href="{{unbound userUrl}}" class='avatar-link'><div class='avatar-wrapper'>{{avatar this imageSize="large" extraClasses="actor" ignoreTitle="true"}}</div></a>
|
<span class='time'>{{date path="created_at" leaveAgo="true"}}</span>
|
||||||
<span class='time'>{{date path="created_at" leaveAgo="true"}}</span>
|
<span class="title">
|
||||||
<span class="title">
|
<a href="{{unbound postUrl}}">{{unbound title}}</a>
|
||||||
<a href="{{unbound postUrl}}">{{unbound title}}</a>
|
</span>
|
||||||
</span>
|
<span class="type">{{unbound descriptionHtml}}</span>
|
||||||
<span class="type">{{unbound descriptionHtml}}</span>
|
|
||||||
</div>
|
|
||||||
<p class='excerpt'>
|
|
||||||
{{{unbound excerpt}}}
|
|
||||||
</p>
|
|
||||||
{{#each children}}
|
|
||||||
<div class='child-actions'>
|
|
||||||
<i class="icon {{unbound icon}}"></i>
|
|
||||||
{{#each items}}
|
|
||||||
<a href="{{unbound userUrl}}" class='avatar-link'><div class='avatar-wrapper'>{{avatar this imageSize="tiny" extraClasses="actor" ignoreTitle="true"}}</div></a>
|
|
||||||
{{/each}}
|
|
||||||
</div>
|
|
||||||
{{/each}}
|
|
||||||
</div>
|
</div>
|
||||||
{{/each}}
|
<p class='excerpt'>
|
||||||
|
{{{unbound excerpt}}}
|
||||||
|
</p>
|
||||||
|
{{#each children}}
|
||||||
|
<div class='child-actions'>
|
||||||
|
<i class="icon {{unbound icon}}"></i>
|
||||||
|
{{#each items}}
|
||||||
|
<a href="{{unbound userUrl}}" class='avatar-link'><div class='avatar-wrapper'>{{avatar this imageSize="tiny" extraClasses="actor" ignoreTitle="true"}}</div></a>
|
||||||
|
{{/each}}
|
||||||
|
</div>
|
||||||
|
{{/each}}
|
||||||
|
</div>
|
||||||
|
{{/each}}
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="user-stream-bottom"></div>
|
|
||||||
|
|
|
@ -76,9 +76,9 @@ Discourse.ListTopicsView = Discourse.View.extend(Discourse.Scrolling, {
|
||||||
|
|
||||||
// When the topic list is scrolled
|
// When the topic list is scrolled
|
||||||
scrolled: function(e) {
|
scrolled: function(e) {
|
||||||
var _ref;
|
|
||||||
this.saveScrollPos();
|
this.saveScrollPos();
|
||||||
return (_ref = this.get('eyeline')) ? _ref.update() : void 0;
|
var eyeline = this.get('eyeline');
|
||||||
|
if (eyeline) { eyeline.update(); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -9,34 +9,23 @@
|
||||||
**/
|
**/
|
||||||
Discourse.UserStreamView = Discourse.View.extend(Discourse.Scrolling, {
|
Discourse.UserStreamView = Discourse.View.extend(Discourse.Scrolling, {
|
||||||
templateName: 'user/stream',
|
templateName: 'user/stream',
|
||||||
|
loading: false,
|
||||||
|
elementId: 'user-stream',
|
||||||
|
|
||||||
scrolled: function(e) {
|
scrolled: function(e) {
|
||||||
|
var eyeline = this.get('eyeline');
|
||||||
|
if (eyeline) { eyeline.update(); }
|
||||||
|
},
|
||||||
|
|
||||||
var $userStreamBottom = $('#user-stream-bottom');
|
loadMore: function() {
|
||||||
if ($userStreamBottom.data('loading')) return;
|
var userStreamView = this;
|
||||||
|
if (userStreamView.get('loading')) { return; }
|
||||||
|
|
||||||
var position = $userStreamBottom.position();
|
var stream = this.get('stream');
|
||||||
if (!($userStreamBottom && position)) return;
|
stream.findItems().then(function() {
|
||||||
|
userStreamView.set('loading', false);
|
||||||
var docViewTop = $(window).scrollTop();
|
userStreamView.get('eyeline').flushRest();
|
||||||
var windowHeight = $(window).height();
|
});
|
||||||
var docViewBottom = docViewTop + windowHeight;
|
|
||||||
|
|
||||||
if (position.top < docViewBottom) {
|
|
||||||
$userStreamBottom.data('loading', true);
|
|
||||||
this.set('loading', true);
|
|
||||||
|
|
||||||
var userStreamView = this;
|
|
||||||
var user = this.get('stream.user');
|
|
||||||
var stream = this.get('stream');
|
|
||||||
|
|
||||||
stream.findItems().then(function() {
|
|
||||||
userStreamView.set('loading', false);
|
|
||||||
Em.run.schedule('afterRender', function() {
|
|
||||||
$userStreamBottom.data('loading', null);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
willDestroyElement: function() {
|
willDestroyElement: function() {
|
||||||
|
@ -45,8 +34,15 @@ Discourse.UserStreamView = Discourse.View.extend(Discourse.Scrolling, {
|
||||||
|
|
||||||
didInsertElement: function() {
|
didInsertElement: function() {
|
||||||
this.bindScrolling();
|
this.bindScrolling();
|
||||||
}
|
|
||||||
|
|
||||||
|
var eyeline = new Discourse.Eyeline('#user-stream .item');
|
||||||
|
this.set('eyeline', eyeline);
|
||||||
|
|
||||||
|
var userStreamView = this;
|
||||||
|
eyeline.on('sawBottom', function() {
|
||||||
|
userStreamView.loadMore();
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -237,14 +237,11 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#user-stream-bottom {
|
|
||||||
margin-bottom: 50px;
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
|
|
||||||
#user-stream {
|
#user-stream {
|
||||||
width: 840px;
|
width: 840px;
|
||||||
float: left;
|
float: left;
|
||||||
|
margin-bottom: 50px;
|
||||||
|
|
||||||
.excerpt {
|
.excerpt {
|
||||||
margin: 5px 0px;
|
margin: 5px 0px;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
|
|
Loading…
Reference in New Issue