Skip to content
This repository has been archived by the owner on Jun 26, 2020. It is now read-only.

Commit

Permalink
Merge 3835f24 into 8b94eee
Browse files Browse the repository at this point in the history
  • Loading branch information
mlewand committed Feb 18, 2020
2 parents 8b94eee + 3835f24 commit 294d8ad
Show file tree
Hide file tree
Showing 6 changed files with 917 additions and 46 deletions.
69 changes: 44 additions & 25 deletions src/widgetresize.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,33 +70,11 @@ export default class WidgetResize extends Plugin {

this._observer = Object.create( DomEmitterMixin );

this._observer.listenTo( domDocument, 'mousedown', ( event, domEventData ) => {
if ( !Resizer.isResizeHandle( domEventData.target ) ) {
return;
}
this._observer.listenTo( domDocument, 'mousedown', this._mouseDownListener.bind( this ) );

const resizeHandle = domEventData.target;
this._observer.listenTo( domDocument, 'mousemove', this._mouseMoveListener.bind( this ) );

this._activeResizer = this._getResizerByHandle( resizeHandle );

if ( this._activeResizer ) {
this._activeResizer.begin( resizeHandle );
}
} );

this._observer.listenTo( domDocument, 'mousemove', ( event, domEventData ) => {
if ( this._activeResizer ) {
this._activeResizer.updateSize( domEventData );
}
} );

this._observer.listenTo( domDocument, 'mouseup', () => {
if ( this._activeResizer ) {
this._activeResizer.commit();

this._activeResizer = null;
}
} );
this._observer.listenTo( domDocument, 'mouseup', this._mouseUpListener.bind( this ) );

const redrawFocusedResizer = () => {
if ( this._visibleResizer ) {
Expand Down Expand Up @@ -127,6 +105,10 @@ export default class WidgetResize extends Plugin {

destroy() {
this._observer.stopListening();

for ( const resizer of this._resizers.values() ) {
resizer.destroy();
}
}

/**
Expand Down Expand Up @@ -187,6 +169,43 @@ export default class WidgetResize extends Plugin {
_getResizerByViewElement( viewElement ) {
return this._resizers.get( viewElement );
}

/**
* @protected
* @param {module:utils/eventinfo~EventInfo} event
* @param {Event} domEventData Native DOM event.
*/
_mouseDownListener( event, domEventData ) {
if ( !Resizer.isResizeHandle( domEventData.target ) ) {
return;
}
const resizeHandle = domEventData.target;
this._activeResizer = this._getResizerByHandle( resizeHandle );
if ( this._activeResizer ) {
this._activeResizer.begin( resizeHandle );
}
}

/**
* @protected
* @param {module:utils/eventinfo~EventInfo} event
* @param {Event} domEventData Native DOM event.
*/
_mouseMoveListener( event, domEventData ) {
if ( this._activeResizer ) {
this._activeResizer.updateSize( domEventData );
}
}

/**
* @protected
*/
_mouseUpListener() {
if ( this._activeResizer ) {
this._activeResizer.commit();
this._activeResizer = null;
}
}
}

mix( WidgetResize, ObservableMixin );
Expand Down
25 changes: 4 additions & 21 deletions src/widgetresize/resizer.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ export default class Resizer {
this.on( 'commit', event => {
// State might not be initialized yet. In this case, prevent further handling and make sure that the resizer is
// cleaned up (#5195).
if ( !this.state.proposedWidth ) {
if ( !this.state.proposedWidth && !this.state.proposedWidthPercents ) {
this._cleanup();
event.stop();
}
Expand Down Expand Up @@ -153,7 +153,7 @@ export default class Resizer {
const editingView = this._options.editor.editing.view;

editingView.change( writer => {
const unit = this._options.unit;
const unit = this._options.unit || '%';
const newWidth = ( unit === '%' ? newSize.widthPercents : newSize.width ) + unit;

writer.setStyle( 'width', newWidth, this._options.viewElement );
Expand Down Expand Up @@ -185,8 +185,8 @@ export default class Resizer {
* @fires commit
*/
commit() {
const unit = this._options.unit;
const newValue = ( unit === '%' ? this.state.proposedWidthPercents : this.state.proposedWidth ) + this._options.unit;
const unit = this._options.unit || '%';
const newValue = ( unit === '%' ? this.state.proposedWidthPercents : this.state.proposedWidth ) + unit;

this._options.onCommit( newValue );

Expand Down Expand Up @@ -410,23 +410,6 @@ export default class Resizer {
domElement.appendChild( sizeUI.element );
}

/**
* Determines the position of a given resize handle.
*
* @private
* @param {HTMLElement} domHandle Handle used to calculate the reference point.
* @returns {String|undefined} Returns a string like `"top-left"` or `undefined` if not matched.
*/
_getHandlePosition( domHandle ) {
const resizerPositions = [ 'top-left', 'top-right', 'bottom-right', 'bottom-left' ];

for ( const position of resizerPositions ) {
if ( domHandle.classList.contains( getResizerClass( position ) ) ) {
return position;
}
}
}

/**
* @event begin
*/
Expand Down
Loading

0 comments on commit 294d8ad

Please sign in to comment.