discourse/app/assets/javascripts/ember-addons/list-item-view-mixin.js.es6

46 lines
1.1 KiB
JavaScript

import Ember from 'ember';
function samePosition(a, b) {
return a && b && a.x === b.x && a.y === b.y;
}
function positionElement() {
var element, position, _position;
Ember.instrument('view.updateContext.positionElement', this, function() {
element = this.element;
position = this.position;
_position = this._position;
if (!position || !element) {
return;
}
// // TODO: avoid needing this by avoiding unnecessary
// // calls to this method in the first place
if (samePosition(position, _position)) {
return;
}
Ember.run.schedule('render', this, this._parentView.applyTransform, this, position.x, position.y);
this._position = position;
}, this);
}
export default Ember.Mixin.create({
classNames: ['ember-list-item-view'],
style: Ember.String.htmlSafe(''),
attributeBindings: ['style'],
_position: null,
_positionElement: positionElement,
positionElementWhenInserted: Ember.on('init', function(){
this.one('didInsertElement', positionElement);
}),
updatePosition: function(position) {
this.position = position;
this._positionElement();
}
});