mirror of
https://git.rwth-aachen.de/acs/public/villas/web/
synced 2025-03-23 00:00:02 +01:00

plot-abstract is the base object for all plots. Size changes on plots are saved to the server on the save button. Add sortable mixin.
82 lines
2.5 KiB
JavaScript
82 lines
2.5 KiB
JavaScript
import Ember from 'ember';
|
|
|
|
export default Ember.Mixin.create({
|
|
uiSortOptions: [ 'appendTo_sort', 'axis_sort', 'cancel_sort', 'connectWith_sort',
|
|
'containment_sort', 'cursor_sort', 'cursorAt_sort', 'delay_sort', 'disabled_sort',
|
|
'distance_sort', 'dropOnEmpty_sort', 'forceHelperSize_sort', 'forcePlaceholderSize_sort',
|
|
'grid_sort', 'handle_sort', 'helper_sort', 'items_sort', 'opacity_sort',
|
|
'placeholder_sort', 'revert_sort', 'scroll_sort', 'scrollSensitivity_sort',
|
|
'scrollSpeed_sort', 'tolerance_sort', 'zIndex_sort' ],
|
|
uiSortEvents: [ 'activate_sort', 'beforeStop_sort', 'change_sort', 'create_sort',
|
|
'deactivate_sort', 'out_sort', 'over_sort', 'receive_sort', 'remove_sort',
|
|
'sort_sort', 'start_sort', 'stop_sort', 'update_sort' ],
|
|
|
|
didInsertElement() {
|
|
this._super();
|
|
|
|
// get available options and events
|
|
var options = this._gatherSortOptions();
|
|
this._gatherSortEvents(options);
|
|
|
|
// create a new jQuery UI widget
|
|
var ui = Ember.$.ui['sortable'](options, this.get('element'));
|
|
this.set('ui', ui);
|
|
},
|
|
|
|
willDestroyElement() {
|
|
var ui = this.get('ui');
|
|
|
|
if (ui) {
|
|
// remove all observers for jQuery UI widget
|
|
var observers = this._observers;
|
|
for (var prop in observers) {
|
|
if (observers.hasOwnProperty(prop)) {
|
|
this.removeObserver(prop, observers[prop]);
|
|
}
|
|
}
|
|
|
|
ui.destroy();
|
|
}
|
|
},
|
|
|
|
_gatherSortOptions() {
|
|
// parse all options and add observers for them
|
|
var uiSortOptions = this.get('uiSortOptions') || [];
|
|
var options = {};
|
|
|
|
uiSortOptions.forEach(function(key) {
|
|
// save the sort option without the postfix
|
|
options[key.split('_')[0]] = this.get(key);
|
|
|
|
// create an observer for this option
|
|
var observer = function() {
|
|
var value = this.get(key);
|
|
console.log(key + ': ' + value);
|
|
this.get('ui').option(key.split('_')[0], value);
|
|
};
|
|
|
|
this.addObserver(key, observer);
|
|
|
|
// save observer to remove it later on
|
|
this._observers = this._observers || {};
|
|
this._observers[key] = observer;
|
|
}, this);
|
|
|
|
return options;
|
|
},
|
|
|
|
_gatherSortEvents(options) {
|
|
// register callbacks for each event
|
|
var uiSortEvents = this.get('uiSortEvents') || [];
|
|
var _this = this;
|
|
|
|
uiSortEvents.forEach(function(event) {
|
|
var callback = _this[event];
|
|
if (callback) {
|
|
options[event.split('_')[0]] = function(event, ui) {
|
|
callback.call(_this, event, ui);
|
|
};
|
|
}
|
|
});
|
|
}
|
|
});
|