2016-07-15 12:09:31 +02:00
|
|
|
import Ember from 'ember';
|
|
|
|
|
|
|
|
export default Ember.Mixin.create({
|
2016-07-17 18:43:08 +02:00
|
|
|
uiResizeOptions: [ 'disabled_resize', 'alsoResize_resize', 'animate_resize',
|
2016-07-15 12:09:31 +02:00
|
|
|
'animateDuration_resize', 'animateEasing_resize', 'aspectRatio_resize',
|
2016-07-17 18:43:08 +02:00
|
|
|
'autoHide_resize', 'cancel_resize', 'containment_resize', 'delay_resize',
|
2016-07-15 12:09:31 +02:00
|
|
|
'distance_resize', 'ghost_resize', 'grid_resize', 'handles_resize', 'helper_resize',
|
|
|
|
'maxHeight_resize', 'maxWidth_resize', 'minHeight_resize', 'minWidth_resize' ],
|
|
|
|
uiResizeEvents: [ 'create_resize', 'start_resize', 'resize_resize', 'stop_resize' ],
|
|
|
|
|
|
|
|
didInsertElement() {
|
|
|
|
this._super();
|
|
|
|
|
2016-07-17 18:43:08 +02:00
|
|
|
// get available options and events
|
2016-07-15 12:09:31 +02:00
|
|
|
var options = this._gatherResizeOptions();
|
|
|
|
this._gatherResizeEvents(options);
|
|
|
|
|
2016-07-17 18:43:08 +02:00
|
|
|
// create a new jQuery UI widget
|
2016-07-15 12:09:31 +02:00
|
|
|
var ui = Ember.$.ui['resizable'](options, this.get('element'));
|
|
|
|
this.set('ui', ui);
|
|
|
|
},
|
|
|
|
|
|
|
|
willDestroyElement() {
|
|
|
|
var ui = this.get('ui');
|
|
|
|
|
|
|
|
if (ui) {
|
2016-07-17 18:43:08 +02:00
|
|
|
// remove all observers for jQuery UI widget
|
2016-07-15 12:09:31 +02:00
|
|
|
var observers = this._observers;
|
|
|
|
for (var prop in observers) {
|
|
|
|
if (observers.hasOwnProperty(prop)) {
|
|
|
|
this.removeObserver(prop, observers[prop]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-07-17 18:43:08 +02:00
|
|
|
ui.destroy();
|
2016-07-15 12:09:31 +02:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
_gatherResizeOptions() {
|
2016-07-17 18:43:08 +02:00
|
|
|
// parse all options and add observers for them
|
|
|
|
var uiResizeOptions = this.get('uiResizeOptions') || [];
|
|
|
|
var options = {};
|
2016-07-15 12:09:31 +02:00
|
|
|
|
|
|
|
uiResizeOptions.forEach(function(key) {
|
2016-07-17 18:43:08 +02:00
|
|
|
// save the resize option without the postfix
|
2016-07-15 12:09:31 +02:00
|
|
|
options[key.split('_')[0]] = this.get(key);
|
|
|
|
|
2016-07-17 18:43:08 +02:00
|
|
|
// create an observer for this option
|
2016-07-15 12:09:31 +02:00
|
|
|
var observer = function() {
|
|
|
|
var value = this.get(key);
|
|
|
|
console.log(key + ': ' + value);
|
|
|
|
this.get('ui').option(key.split('_')[0], value);
|
|
|
|
};
|
|
|
|
|
|
|
|
this.addObserver(key, observer);
|
|
|
|
|
2016-07-17 18:43:08 +02:00
|
|
|
// save observer to remove it later on
|
2016-07-15 12:09:31 +02:00
|
|
|
this._observers = this._observers || {};
|
|
|
|
this._observers[key] = observer;
|
|
|
|
}, this);
|
|
|
|
|
|
|
|
return options;
|
|
|
|
},
|
|
|
|
|
|
|
|
_gatherResizeEvents(options) {
|
2016-07-17 18:43:08 +02:00
|
|
|
// register callbacks for each event
|
|
|
|
var uiResizeEvents = this.get('uiResizeEvents') || [];
|
|
|
|
var _this = this;
|
2016-07-15 12:09:31 +02:00
|
|
|
|
2016-07-17 18:43:08 +02:00
|
|
|
uiResizeEvents.forEach(function(event) {
|
|
|
|
var callback = _this[event];
|
2016-07-15 12:09:31 +02:00
|
|
|
if (callback) {
|
|
|
|
options[event.split('_')[0]] = function(event, ui) {
|
2016-07-17 18:43:08 +02:00
|
|
|
callback.call(_this, event, ui);
|
2016-07-15 12:09:31 +02:00
|
|
|
};
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|