Browse Source

Improve tools in component selection

pull/2524/head
Artur Arseniev 7 years ago
parent
commit
4a4d224197
  1. 71
      src/commands/view/SelectComponent.js
  2. 8
      src/commands/view/ShowOffset.js

71
src/commands/view/SelectComponent.js

@ -108,7 +108,7 @@ export default {
if (el) { if (el) {
const pos = this.getElementPos(el); const pos = this.getElementPos(el);
result = { el, pos, component, view: getViewEl(el) }; result = { el, pos, component, view: getViewEl(el) };
this.updateToolsLocal(el, pos); this.updateToolsLocal();
} }
this.elHovered = result; this.elHovered = result;
@ -166,9 +166,13 @@ export default {
*/ */
onOut(ev) { onOut(ev) {
ev && ev.stopPropagation(); ev && ev.stopPropagation();
this.hideBadge(); this.toggleToolsEl(0, this.getElHovered().view);
this.hideHighlighter(); },
this.hideElementOffset();
toggleToolsEl(on, view) {
const el = this.canvas.getToolsEl(view);
el.style.opacity = on ? 1 : 0;
return el;
}, },
/** /**
@ -177,12 +181,7 @@ export default {
* @param {Object} pos * @param {Object} pos
*/ */
showElementOffset(el, pos, opts = {}) { showElementOffset(el, pos, opts = {}) {
var $el = $(el); if (!showOffsets) return;
var model = $el.data('model');
if ((model && model.get('status') == 'selected') || !showOffsets) {
return;
}
this.editor.runCommand('show-offset', { this.editor.runCommand('show-offset', {
el, el,
@ -199,9 +198,10 @@ export default {
* @param {HTMLElement} el * @param {HTMLElement} el
* @param {Object} pos * @param {Object} pos
*/ */
hideElementOffset(el, pos) { hideElementOffset(view) {
const { editor } = this; this.editor.stopCommand('show-offset', {
editor && editor.stopCommand('show-offset'); view
});
}, },
/** /**
@ -229,8 +229,8 @@ export default {
/** /**
* Hide Highlighter element * Hide Highlighter element
*/ */
hideHighlighter() { hideHighlighter(view) {
this.canvas.getHighlighter().style.display = 'none'; this.canvas.getHighlighter(view).style.opacity = 0;
}, },
/** /**
@ -375,23 +375,11 @@ export default {
* @private * @private
*/ */
updateHighlighter(el, pos, opts = {}) { updateHighlighter(el, pos, opts = {}) {
var $el = $(el); const { style } = this.canvas.getHighlighter(opts.view);
var model = $el.data('model'); const unit = 'px';
style.height = pos.height + unit;
if ( style.width = pos.width + unit;
!model || style.opacity = '';
!model.get('hoverable') ||
model.get('status') == 'selected'
) {
return;
}
var hlEl = this.canvas.getHighlighter(opts.view);
var hlStyle = hlEl.style;
var unit = 'px';
hlStyle.height = pos.height + unit;
hlStyle.width = pos.width + unit;
hlStyle.display = 'block';
}, },
/** /**
@ -649,30 +637,40 @@ export default {
this.updateToolsGlobal(); this.updateToolsGlobal();
}, },
isCompSelected(comp) {
return comp && comp.get('status') === 'selected';
},
/** /**
* Update tools visible on hover * Update tools visible on hover
* @param {HTMLElement} el * @param {HTMLElement} el
* @param {Object} pos * @param {Object} pos
*/ */
updateToolsLocal() { updateToolsLocal() {
const { el, pos, view } = this.getElHovered(); const { el, pos, view, component } = this.getElHovered();
if (!el) { if (!el) {
this.lastHovered = 0; this.lastHovered = 0;
return; return;
} }
const isHoverEn = component.get('hoverable');
const isNewEl = this.lastHovered !== el; const isNewEl = this.lastHovered !== el;
const badgeOpts = isNewEl ? {} : { posOnly: 1 }; const badgeOpts = isNewEl ? {} : { posOnly: 1 };
if (isNewEl) { if (isNewEl && isHoverEn) {
this.lastHovered = el; this.lastHovered = el;
this.updateHighlighter(el, pos, { view }); this.updateHighlighter(el, pos, { view });
this.showElementOffset(el, pos, { view }); this.showElementOffset(el, pos, { view });
} }
if (this.isCompSelected(component)) {
this.hideHighlighter(view);
this.hideElementOffset(view);
}
const unit = 'px'; const unit = 'px';
const { style } = this.canvas.getToolsEl(view); const { style } = this.toggleToolsEl(1, view);
const topOff = this.frameRect(el, 1, pos); const topOff = this.frameRect(el, 1, pos);
const leftOff = this.frameRect(el, 0, pos); const leftOff = this.frameRect(el, 0, pos);
@ -696,9 +694,8 @@ export default {
} }
const isNewEl = this.lastSelected !== el; const isNewEl = this.lastSelected !== el;
console.log('updateToolsGlobal', el);
if (isNewEl) { if (isNewEl) {
console.log('updateToolsGlobal UPDATE toolbar position');
this.lastSelected = el; this.lastSelected = el;
this.updateToolbar(component); this.updateToolbar(component);
this.updateToolbarPos(el, pos); this.updateToolbarPos(el, pos);

8
src/commands/view/ShowOffset.js

@ -40,7 +40,7 @@ export default {
var stateVar = state + 'State'; var stateVar = state + 'State';
var method = this.getOffsetMethod(state); var method = this.getOffsetMethod(state);
var offsetViewer = canvas[method](opts.view); var offsetViewer = canvas[method](opts.view);
offsetViewer.style.display = 'block'; offsetViewer.style.opacity = '';
var marginT = this['marginT' + state]; var marginT = this['marginT' + state];
var marginB = this['marginB' + state]; var marginB = this['marginB' + state];
@ -157,12 +157,12 @@ export default {
prStyle.left = pos.left + pos.width - padRight + unit; prStyle.left = pos.left + pos.width - padRight + unit;
}, },
stop(editor, sender, opts) { stop(editor, sender, opts = {}) {
var opt = opts || {}; var opt = opts || {};
var state = opt.state || ''; var state = opt.state || '';
var method = this.getOffsetMethod(state); var method = this.getOffsetMethod(state);
var canvas = editor.Canvas; var canvas = editor.Canvas;
var offsetViewer = canvas[method](); var offsetViewer = canvas[method](opts.view);
offsetViewer.style.display = 'none'; offsetViewer.style.opacity = 0;
} }
}; };

Loading…
Cancel
Save