mirror of
https://github.com/flarum/framework.git
synced 2025-06-17 07:22:20 +08:00
Replace Ember app with Mithril app
This commit is contained in:
33
js/lib/utils/subtree-retainer.js
Normal file
33
js/lib/utils/subtree-retainer.js
Normal file
@ -0,0 +1,33 @@
|
||||
/**
|
||||
// constructor
|
||||
this.subtree = new SubtreeRetainer(
|
||||
() => this.props.post.freshness,
|
||||
() => this.showing
|
||||
);
|
||||
this.subtree.add(() => this.props.user.freshness);
|
||||
|
||||
// view
|
||||
this.subtree.retain() || 'expensive expression'
|
||||
*/
|
||||
export default class SubtreeRetainer {
|
||||
constructor() {
|
||||
this.old = [];
|
||||
this.callbacks = [].slice.call(arguments);
|
||||
}
|
||||
|
||||
retain() {
|
||||
var needsRebuild = false;
|
||||
this.callbacks.forEach((callback, i) => {
|
||||
var result = callback();
|
||||
if (result !== this.old[i]) {
|
||||
this.old[i] = result;
|
||||
needsRebuild = true;
|
||||
}
|
||||
});
|
||||
return needsRebuild ? false : {subtree: 'retain'};
|
||||
}
|
||||
|
||||
add() {
|
||||
this.callbacks = this.callbacks.concat([].slice.call(arguments));
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user