mirror of
https://github.com/flarum/core.git
synced 2025-05-08 00:15:24 +02:00
Clean up post stream
This commit is contained in:
parent
f7575cd694
commit
6568d7d269
@ -8,7 +8,7 @@ var $ = Ember.$;
|
|||||||
|
|
||||||
export default Ember.Component.extend({
|
export default Ember.Component.extend({
|
||||||
classNames: ['item'],
|
classNames: ['item'],
|
||||||
classNameBindings: ['item.gap:gap', 'loading', 'direction'],
|
classNameBindings: ['gap', 'loading', 'direction'],
|
||||||
attributeBindings: [
|
attributeBindings: [
|
||||||
'start:data-start',
|
'start:data-start',
|
||||||
'end:data-end',
|
'end:data-end',
|
||||||
@ -22,6 +22,7 @@ export default Ember.Component.extend({
|
|||||||
number: Ember.computed.alias('item.content.number'),
|
number: Ember.computed.alias('item.content.number'),
|
||||||
loading: Ember.computed.alias('item.loading'),
|
loading: Ember.computed.alias('item.loading'),
|
||||||
direction: Ember.computed.alias('item.direction'),
|
direction: Ember.computed.alias('item.direction'),
|
||||||
|
gap: Ember.computed.not('item.content'),
|
||||||
|
|
||||||
count: function() {
|
count: function() {
|
||||||
return this.get('end') - this.get('start') + 1;
|
return this.get('end') - this.get('start') + 1;
|
||||||
@ -32,7 +33,7 @@ export default Ember.Component.extend({
|
|||||||
}.observes('loading'),
|
}.observes('loading'),
|
||||||
|
|
||||||
render: function(buffer) {
|
render: function(buffer) {
|
||||||
if (! this.get('item.gap')) {
|
if (this.get('item.content')) {
|
||||||
return this._super(buffer);
|
return this._super(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,7 +47,7 @@ export default Ember.Component.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
didInsertElement: function() {
|
didInsertElement: function() {
|
||||||
if (! this.get('item.gap')) {
|
if (! this.get('gap')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,7 +70,7 @@ export default Ember.Component.extend({
|
|||||||
load: function(relativeIndex) {
|
load: function(relativeIndex) {
|
||||||
// If this item is not a gap, or if we're already loading its posts,
|
// If this item is not a gap, or if we're already loading its posts,
|
||||||
// then we don't need to do anything.
|
// then we don't need to do anything.
|
||||||
if (! this.get('item.gap') || this.get('loading')) {
|
if (! this.get('gap') || this.get('loading')) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -207,7 +207,7 @@ export default Ember.Component.extend({
|
|||||||
// If the index we've landed on is in a gap, then tell the stream-
|
// If the index we've landed on is in a gap, then tell the stream-
|
||||||
// content that we want to load those posts.
|
// content that we want to load those posts.
|
||||||
var intIndex = Math.floor(view.get('index'));
|
var intIndex = Math.floor(view.get('index'));
|
||||||
if (view.get('stream').findNearestToIndex(intIndex).gap) {
|
if (! view.get('stream').findNearestToIndex(intIndex).content) {
|
||||||
view.get('streamContent').send('goToIndex', intIndex);
|
view.get('streamContent').send('goToIndex', intIndex);
|
||||||
} else {
|
} else {
|
||||||
view.set('streamContent.paused', false);
|
view.set('streamContent.paused', false);
|
||||||
|
@ -32,23 +32,18 @@ export default Ember.ArrayProxy.extend(Ember.Evented, {
|
|||||||
|
|
||||||
firstLoaded: function() {
|
firstLoaded: function() {
|
||||||
var first = this.objectAt(0);
|
var first = this.objectAt(0);
|
||||||
return first && ! first.gap;
|
return first && first.content;
|
||||||
}.property('content.@each'),
|
}.property('content.@each'),
|
||||||
|
|
||||||
lastLoaded: function() {
|
lastLoaded: function() {
|
||||||
var last = this.objectAt(this.get('length') - 1);
|
var last = this.objectAt(this.get('length') - 1);
|
||||||
return last && ! last.gap;
|
return last && last.content;
|
||||||
}.property('content.@each'),
|
}.property('content.@each'),
|
||||||
|
|
||||||
// Clear the contents of the post stream, resetting it to one big gap.
|
// Clear the contents of the post stream, resetting it to one big gap.
|
||||||
clear: function() {
|
clear: function() {
|
||||||
var content = Ember.A();
|
var content = Ember.A();
|
||||||
content.clear().pushObject(Ember.Object.create({
|
content.clear().pushObject(this.makeItem(0, this.get('count') - 1).set('loading', true));
|
||||||
gap: true,
|
|
||||||
indexStart: 0,
|
|
||||||
indexEnd: this.get('count') - 1,
|
|
||||||
loading: true
|
|
||||||
}));
|
|
||||||
this.set('content', content);
|
this.set('content', content);
|
||||||
this.set('ids', Ember.A());
|
this.set('ids', Ember.A());
|
||||||
},
|
},
|
||||||
@ -59,7 +54,7 @@ export default Ember.ArrayProxy.extend(Ember.Evented, {
|
|||||||
// Find the appropriate gap objects in the post stream. When we find
|
// Find the appropriate gap objects in the post stream. When we find
|
||||||
// one, we will turn on its loading flag.
|
// one, we will turn on its loading flag.
|
||||||
this.get('content').forEach(function(item) {
|
this.get('content').forEach(function(item) {
|
||||||
if (item.gap && ((item.indexStart >= start && item.indexStart <= end) || (item.indexEnd >= start && item.indexEnd <= end))) {
|
if (! item.content && ((item.indexStart >= start && item.indexStart <= end) || (item.indexEnd >= start && item.indexEnd <= end))) {
|
||||||
item.set('loading', true);
|
item.set('loading', true);
|
||||||
item.set('direction', backwards ? 'up' : 'down');
|
item.set('direction', backwards ? 'up' : 'down');
|
||||||
}
|
}
|
||||||
@ -94,7 +89,7 @@ export default Ember.ArrayProxy.extend(Ember.Evented, {
|
|||||||
if (item) {
|
if (item) {
|
||||||
if (item.get('content.number') == number) {
|
if (item.get('content.number') == number) {
|
||||||
return Ember.RSVP.resolve([item.get('content')]);
|
return Ember.RSVP.resolve([item.get('content')]);
|
||||||
} else if (item.gap) {
|
} else if (! item.content) {
|
||||||
item.set('direction', 'down').set('loading', true);
|
item.set('direction', 'down').set('loading', true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -116,7 +111,7 @@ export default Ember.ArrayProxy.extend(Ember.Evented, {
|
|||||||
// request.) Or, if it's a gap, we'll switch on its loading flag.
|
// request.) Or, if it's a gap, we'll switch on its loading flag.
|
||||||
var item = this.findNearestToIndex(index);
|
var item = this.findNearestToIndex(index);
|
||||||
if (item) {
|
if (item) {
|
||||||
if (! item.gap) {
|
if (item.content) {
|
||||||
return Ember.RSVP.resolve([item.get('content')]);
|
return Ember.RSVP.resolve([item.get('content')]);
|
||||||
}
|
}
|
||||||
return this.loadRange(Math.max(item.indexStart, index - this.get('postLoadCount') / 2), item.indexEnd, backwards);
|
return this.loadRange(Math.max(item.indexStart, index - this.get('postLoadCount') / 2), item.indexEnd, backwards);
|
||||||
@ -139,6 +134,7 @@ export default Ember.ArrayProxy.extend(Ember.Evented, {
|
|||||||
addPost: function(post) {
|
addPost: function(post) {
|
||||||
var index = this.get('ids').indexOf(post.get('id'));
|
var index = this.get('ids').indexOf(post.get('id'));
|
||||||
var content = this.get('content');
|
var content = this.get('content');
|
||||||
|
var makeItem = this.makeItem;
|
||||||
|
|
||||||
// Here we loop through each item in the post stream, and find the gap
|
// Here we loop through each item in the post stream, and find the gap
|
||||||
// in which this post should be situated. When we find it, we can replace
|
// in which this post should be situated. When we find it, we can replace
|
||||||
@ -147,23 +143,11 @@ export default Ember.ArrayProxy.extend(Ember.Evented, {
|
|||||||
if (item.indexStart <= index && item.indexEnd >= index) {
|
if (item.indexStart <= index && item.indexEnd >= index) {
|
||||||
var newItems = [];
|
var newItems = [];
|
||||||
if (item.indexStart < index) {
|
if (item.indexStart < index) {
|
||||||
newItems.push(Ember.Object.create({
|
newItems.push(makeItem(item.indexStart, index - 1));
|
||||||
gap: true,
|
|
||||||
indexStart: item.indexStart,
|
|
||||||
indexEnd: index - 1
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
newItems.push(Ember.Object.create({
|
newItems.push(makeItem(index, index, post));
|
||||||
indexStart: index,
|
|
||||||
indexEnd: index,
|
|
||||||
content: post
|
|
||||||
}));
|
|
||||||
if (item.indexEnd > index) {
|
if (item.indexEnd > index) {
|
||||||
newItems.push(Ember.Object.create({
|
newItems.push(makeItem(index + 1, item.indexEnd));
|
||||||
gap: true,
|
|
||||||
indexStart: index + 1,
|
|
||||||
indexEnd: item.indexEnd
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
content.replace(i, 1, newItems);
|
content.replace(i, 1, newItems);
|
||||||
return true;
|
return true;
|
||||||
@ -171,6 +155,19 @@ export default Ember.ArrayProxy.extend(Ember.Evented, {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
addPostToEnd: function(post) {
|
||||||
|
var index = this.get('count') - 1;
|
||||||
|
this.get('content').pushObject(this.makeItem(index, index, post));
|
||||||
|
},
|
||||||
|
|
||||||
|
makeItem: function(indexStart, indexEnd, post) {
|
||||||
|
return Ember.Object.create({
|
||||||
|
indexStart: indexStart,
|
||||||
|
indexEnd: indexEnd,
|
||||||
|
content: post
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
findNearestTo: function(index, property) {
|
findNearestTo: function(index, property) {
|
||||||
var nearestItem;
|
var nearestItem;
|
||||||
this.get('content').some(function(item) {
|
this.get('content').some(function(item) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user