Browse Source

Refactor resizer in ComponentView and make use of Styleable

pull/261/head
Artur Arseniev 9 years ago
parent
commit
43114bf057
  1. 71
      src/dom_components/view/ComponentView.js
  2. 4
      src/domain_abstract/model/Styleable.js
  3. 17
      src/utils/Resizer.js

71
src/dom_components/view/ComponentView.js

@ -240,7 +240,7 @@ module.exports = Backbone.View.extend({
/** /**
* Init component for resizing * Init component for resizing
*/ */
initResize() { initResize(e) {
var em = this.opts.config.em; var em = this.opts.config.em;
var editor = em ? em.get('Editor') : ''; var editor = em ? em.get('Editor') : '';
var config = em ? em.get('Config') : ''; var config = em ? em.get('Config') : '';
@ -259,45 +259,40 @@ module.exports = Backbone.View.extend({
} }
}; };
if(editor && this.model.get('resizable')) { if(editor && model.get('resizable')) {
editor.runCommand('resize', { let resizeOptions = {
el: this.el, onStart(e, opts) {
options: { toggleBodyClass('addClass', e, opts);
onStart(e, opts) { modelToStyle = em.get('StyleManager').getModelToStyle(model);
toggleBodyClass('addClass', e, opts); },
modelToStyle = em.get('StyleManager').getModelToStyle(model); // Update all positioned elements (eg. component toolbar)
}, onMove() {
// Update all positioned elements (eg. component toolbar) editor.trigger('change:canvasOffset');
onMove() { },
editor.trigger('change:canvasOffset'); onEnd(e, opts) {
}, toggleBodyClass('removeClass', e, opts);
onEnd(e, opts) { editor.trigger('change:canvasOffset');
toggleBodyClass('removeClass', e, opts); },
editor.trigger('change:canvasOffset'); updateTarget(el, rect, store) {
}, if (!modelToStyle) {
updateTarget(el, rect, store) { return;
if (!modelToStyle) { }
return;
} const unit = 'px';
var unit = 'px'; const style = modelToStyle.getStyle();
var style = _.clone(modelToStyle.get('style')); style.width = rect.w + unit;
var width = rect.w + (store ? 1 : 0); style.height = rect.h + unit;
style.width = width + unit; modelToStyle.setStyle(style, {avoidStore: 1});
style.height = rect.h + unit; em.trigger('targetStyleUpdated');
modelToStyle.set('style', style, {avoidStore: 1});
em.trigger('targetStyleUpdated'); if (store) {
modelToStyle.setStyle(style);
// This trick will trigger the Undo Manager. To trigger "change:style"
// on the Model you need to provide a new object and after that
// Undo Manager will trigger only if values are different (this is why
// above I've added + 1 to width if store required)
if(store) {
var style3 = _.clone(style);
style3.width = (width - 1) + unit;
modelToStyle.set('style', style3);
}
} }
} }
};
editor.runCommand('resize', {
el: this.el,
options: resizeOptions
}); });
} }
}, },

4
src/domain_abstract/model/Styleable.js

@ -15,7 +15,7 @@ export default {
* @return {Object} * @return {Object}
*/ */
getStyle() { getStyle() {
return this.get('style'); return Object.assign({}, this.get('style'));
}, },
/** /**
@ -53,7 +53,7 @@ export default {
* @param {string} prop * @param {string} prop
*/ */
removeStyle(prop) { removeStyle(prop) {
let style = Object.assign({}, this.getStyle()); let style = this.getStyle();
delete style[prop]; delete style[prop];
this.setStyle(style); this.setStyle(style);
} }

17
src/utils/Resizer.js

@ -9,14 +9,15 @@ var defaults = {
onStart: null, onStart: null,
onMove: null, onMove: null,
onEnd: null, onEnd: null,
tl: 1, // Handlers
tc: 1, tl: 1, // Top left
tr: 1, tc: 1, // Top center
cl: 1, tr: 1, // Top right
cr: 1, cl: 1, // Center left
bl: 1, cr: 1, // Center right
bc: 1, bl: 1, // Bottom left
br: 1, bc: 1, // Bottom center
br: 1, // Bottom right
}; };
var createHandler = (name, opts) => { var createHandler = (name, opts) => {

Loading…
Cancel
Save