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

Commit

Permalink
Move upcast conversion helpers for selection to upcasthelpers.js.
Browse files Browse the repository at this point in the history
  • Loading branch information
jodator committed Jan 2, 2019
1 parent 4a2b6dd commit f16eeba
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 50 deletions.
2 changes: 1 addition & 1 deletion src/controller/editingcontroller.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ import View from '../view/view';
import Mapper from '../conversion/mapper';
import DowncastDispatcher from '../conversion/downcastdispatcher';
import { clearAttributes, convertCollapsedSelection, convertRangeSelection, insertText, remove } from '../conversion/downcasthelpers';
import { convertSelectionChange } from '../conversion/upcast-selection-converters';

import ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';
import mix from '@ckeditor/ckeditor5-utils/src/mix';
import { convertSelectionChange } from '../conversion/upcasthelpers';

/**
* Controller for the editing pipeline. The editing pipeline controls {@link ~EditingController#model model} rendering,
Expand Down
48 changes: 0 additions & 48 deletions src/conversion/upcast-selection-converters.js

This file was deleted.

36 changes: 36 additions & 0 deletions src/conversion/upcasthelpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import ModelRange from '../model/range';
import { ConversionHelpers } from './conversion';

import { cloneDeep } from 'lodash-es';
import ModelSelection from '../model/selection';

/**
* Contains {@link module:engine/view/view view} to {@link module:engine/model/model model} converters for
Expand Down Expand Up @@ -352,6 +353,41 @@ export function convertText() {
};
}

/**
* Function factory, creates a callback function which converts a {@link module:engine/view/selection~Selection
* view selection} taken from the {@link module:engine/view/document~Document#event:selectionChange} event
* and sets in on the {@link module:engine/model/document~Document#selection model}.
*
* **Note**: because there is no view selection change dispatcher nor any other advanced view selection to model
* conversion mechanism, the callback should be set directly on view document.
*
* view.document.on( 'selectionChange', convertSelectionChange( modelDocument, mapper ) );
*
* @param {module:engine/model/model~Model} model Data model.
* @param {module:engine/conversion/mapper~Mapper} mapper Conversion mapper.
* @returns {Function} {@link module:engine/view/document~Document#event:selectionChange} callback function.
*/
export function convertSelectionChange( model, mapper ) {
return ( evt, data ) => {
const viewSelection = data.newSelection;
const modelSelection = new ModelSelection();

const ranges = [];

for ( const viewRange of viewSelection.getRanges() ) {
ranges.push( mapper.toModelRange( viewRange ) );
}

modelSelection.setTo( ranges, { backward: viewSelection.isBackward } );

if ( !modelSelection.isEqual( model.document.selection ) ) {
model.change( writer => {
writer.setSelection( modelSelection );
} );
}
};
}

// View element to model element conversion helper.
//
// See {@link ~UpcastHelpers#elementToElement `.elementToElement()` upcast helper} for examples.
Expand Down
2 changes: 1 addition & 1 deletion tests/conversion/upcast-selection-converters.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ import createViewRoot from '../view/_utils/createroot';
import Model from '../../src/model/model';

import Mapper from '../../src/conversion/mapper';
import { convertSelectionChange } from '../../src/conversion/upcast-selection-converters';

import { setData as modelSetData, getData as modelGetData } from '../../src/dev-utils/model';
import { setData as viewSetData } from '../../src/dev-utils/view';
import { convertSelectionChange } from '../../src/conversion/upcasthelpers';

describe( 'convertSelectionChange', () => {
let model, view, viewDocument, mapper, convertSelection, modelRoot, viewRoot;
Expand Down

0 comments on commit f16eeba

Please sign in to comment.