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

Commit

Permalink
Merge ed1eb81 into 1ad061d
Browse files Browse the repository at this point in the history
  • Loading branch information
jodator committed Oct 29, 2018
2 parents 1ad061d + ed1eb81 commit 088f093
Show file tree
Hide file tree
Showing 17 changed files with 71 additions and 96 deletions.
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@
"dependencies": {
"@ckeditor/ckeditor5-core": "^11.0.1",
"@ckeditor/ckeditor5-engine": "^11.0.0",
"@ckeditor/ckeditor5-ui": "^11.1.0",
"@ckeditor/ckeditor5-utils": "^11.0.0",
"@ckeditor/ckeditor5-theme-lark": "^11.1.0",
"@ckeditor/ckeditor5-ui": "^11.1.0",
"@ckeditor/ckeditor5-upload": "^10.0.3",
"@ckeditor/ckeditor5-utils": "^11.0.0",
"@ckeditor/ckeditor5-widget": "^10.3.0"
},
"devDependencies": {
Expand Down
3 changes: 1 addition & 2 deletions src/image/converters.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
* @module image/image/converters
*/

import ModelPosition from '@ckeditor/ckeditor5-engine/src/model/position';
import first from '@ckeditor/ckeditor5-utils/src/first';

/**
Expand Down Expand Up @@ -55,7 +54,7 @@ export function viewFigureToModel() {
}

// Convert rest of the figure element's children as an image children.
conversionApi.convertChildren( data.viewItem, ModelPosition.createAt( modelImage, 0 ) );
conversionApi.convertChildren( data.viewItem, conversionApi.writer.createPositionAt( modelImage, 0 ) );

// Set image range as conversion result.
data.modelRange = conversionResult.modelRange;
Expand Down
6 changes: 2 additions & 4 deletions src/image/imageediting.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,10 @@ import { toImageWidget } from './utils';
import { downcastElementToElement } from '@ckeditor/ckeditor5-engine/src/conversion/downcast-converters';
import { upcastElementToElement, upcastAttributeToAttribute } from '@ckeditor/ckeditor5-engine/src/conversion/upcast-converters';

import ViewPosition from '@ckeditor/ckeditor5-engine/src/view/position';

/**
* The image engine plugin.
* It registers `<image>` as a block element in the document schema, and allows `alt`, `src` and `srcset` attributes.
* It also egisters converters for editing and data pipelines.
* It also registers converters for editing and data pipelines.
*
* @extends module:core/plugin~Plugin
*/
Expand Down Expand Up @@ -120,7 +118,7 @@ export function createImageViewElement( writer ) {
const emptyElement = writer.createEmptyElement( 'img' );
const figure = writer.createContainerElement( 'figure', { class: 'image' } );

writer.insert( ViewPosition.createAt( figure, 0 ), emptyElement );
writer.insert( writer.createPositionAt( figure, 0 ), emptyElement );

return figure;
}
6 changes: 2 additions & 4 deletions src/image/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
*/

import { toWidget, isWidget } from '@ckeditor/ckeditor5-widget/src/utils';
import ModelElement from '@ckeditor/ckeditor5-engine/src/model/element';

const imageSymbol = Symbol( 'isImage' );

Expand Down Expand Up @@ -58,12 +57,11 @@ export function isImageWidgetSelected( selection ) {
}

/**
* Checks if the provided model element is an instance of {@link module:engine/model/element~Element Element} and its name
* is `image`.
* Checks if the provided model element is an `image`.
*
* @param {module:engine/model/element~Element} modelElement
* @returns {Boolean}
*/
export function isImage( modelElement ) {
return modelElement instanceof ModelElement && modelElement.name == 'image';
return !!modelElement && modelElement.is( 'image' );
}
3 changes: 1 addition & 2 deletions src/imagecaption/imagecaptionediting.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
*/

import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
import ViewPosition from '@ckeditor/ckeditor5-engine/src/view/position';
import { upcastElementToElement } from '@ckeditor/ckeditor5-engine/src/conversion/upcast-converters';
import { isImage } from '../image/utils';
import {
Expand Down Expand Up @@ -240,7 +239,7 @@ function captionModelToView( elementCreator, hide = true ) {
// @param {module:engine/view/containerelement~ContainerElement} viewImage
// @param {Object} conversionApi
function insertViewCaptionAndBind( viewCaption, modelCaption, viewImage, conversionApi ) {
const viewPosition = ViewPosition.createAt( viewImage, 'end' );
const viewPosition = conversionApi.writer.createPositionAt( viewImage, 'end' );

conversionApi.writer.insert( viewPosition, viewCaption );
conversionApi.mapper.bindElements( modelCaption, viewCaption );
Expand Down
3 changes: 1 addition & 2 deletions src/imagecaption/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
* @module image/imagecaption/utils
*/

import ModelElement from '@ckeditor/ckeditor5-engine/src/model/element';
import { attachPlaceholder } from '@ckeditor/ckeditor5-engine/src/view/placeholder';
import { toWidgetEditable } from '@ckeditor/ckeditor5-widget/src/utils';

Expand Down Expand Up @@ -48,7 +47,7 @@ export function isCaption( viewElement ) {
*/
export function getCaptionFromImage( imageModelElement ) {
for ( const node of imageModelElement.getChildren() ) {
if ( node instanceof ModelElement && node.name == 'caption' ) {
if ( !!node && node.is( 'caption' ) ) {
return node;
}
}
Expand Down
17 changes: 9 additions & 8 deletions src/imageupload/imageuploadcommand.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export default class ImageUploadCommand extends Command {
const selection = model.document.selection;
const schema = model.schema;

this.isEnabled = isImageAllowedInParent( selection, schema ) && checkSelectionWithObject( selection, schema );
this.isEnabled = isImageAllowedInParent( selection, schema, model ) && checkSelectionWithObject( selection, schema );
}

/**
Expand Down Expand Up @@ -54,7 +54,8 @@ export default class ImageUploadCommand extends Command {
// @param {module:core/editor/editor~Editor} editor
// @param {File} file
function uploadImage( writer, editor, file ) {
const doc = editor.model.document;
const model = editor.model;
const doc = model.document;
const fileRepository = editor.plugins.get( FileRepository );

const loader = fileRepository.createLoader( file );
Expand All @@ -66,9 +67,9 @@ function uploadImage( writer, editor, file ) {

const imageElement = writer.createElement( 'image', { uploadId: loader.id } );

const insertAtSelection = findOptimalInsertionPosition( doc.selection );
const insertAtSelection = findOptimalInsertionPosition( doc.selection, model );

editor.model.insertContent( imageElement, insertAtSelection );
model.insertContent( imageElement, insertAtSelection );

// Inserting an image might've failed due to schema regulations.
if ( imageElement.parent ) {
Expand All @@ -77,8 +78,8 @@ function uploadImage( writer, editor, file ) {
}

// Checks if image is allowed by schema in optimal insertion parent.
function isImageAllowedInParent( selection, schema ) {
const parent = getInsertImageParent( selection );
function isImageAllowedInParent( selection, schema, model ) {
const parent = getInsertImageParent( selection, model );

return schema.checkChild( parent, 'image' );
}
Expand All @@ -96,8 +97,8 @@ function checkSelectionWithObject( selection, schema ) {
}

// Returns a node that will be used to insert image with `model.insertContent` to check if image can be placed there.
function getInsertImageParent( selection ) {
const insertAt = findOptimalInsertionPosition( selection );
function getInsertImageParent( selection, model ) {
const insertAt = findOptimalInsertionPosition( selection, model );

let parent = insertAt.parent;

Expand Down
10 changes: 4 additions & 6 deletions src/imageupload/imageuploadediting.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@

import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
import FileRepository from '@ckeditor/ckeditor5-upload/src/filerepository';
import ImageUploadCommand from '../../src/imageupload/imageuploadcommand';
import Notification from '@ckeditor/ckeditor5-ui/src/notification/notification';
import ModelSelection from '@ckeditor/ckeditor5-engine/src/model/selection';

import ImageUploadCommand from '../../src/imageupload/imageuploadcommand';
import { isImageType } from '../../src/imageupload/utils';

/**
Expand Down Expand Up @@ -57,13 +57,11 @@ export default class ImageUploadEditing extends Plugin {

const images = Array.from( data.dataTransfer.files ).filter( isImageType );

const targetModelSelection = new ModelSelection(
data.targetRanges.map( viewRange => editor.editing.mapper.toModelRange( viewRange ) )
);
const ranges = data.targetRanges.map( viewRange => editor.editing.mapper.toModelRange( viewRange ) );

editor.model.change( writer => {
// Set selection to paste target.
writer.setSelection( targetModelSelection );
writer.setSelection( ranges );

if ( images.length ) {
evt.stop();
Expand Down
15 changes: 6 additions & 9 deletions src/imageupload/imageuploadprogress.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@
import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
import FileRepository from '@ckeditor/ckeditor5-upload/src/filerepository';
import uploadingPlaceholder from '../../theme/icons/image_placeholder.svg';
import UIElement from '@ckeditor/ckeditor5-engine/src/view/uielement';
import ViewPosition from '@ckeditor/ckeditor5-engine/src/view/position';
import ViewRange from '@ckeditor/ckeditor5-engine/src/view/range';
import env from '@ckeditor/ckeditor5-utils/src/env';

import '../../theme/imageuploadprogress.css';
Expand Down Expand Up @@ -159,7 +156,7 @@ function _showPlaceholder( placeholder, viewFigure, writer ) {
}

if ( !_getUIElement( viewFigure, placeholderSymbol ) ) {
writer.insert( ViewPosition.createAfter( viewImg ), _createPlaceholder( writer ) );
writer.insert( writer.createPositionAfter( viewImg ), _createPlaceholder( writer ) );
}
}

Expand All @@ -184,7 +181,7 @@ function _hidePlaceholder( viewFigure, writer ) {
// @param {module:engine/view/view~View} view
function _showProgressBar( viewFigure, writer, loader, view ) {
const progressBar = _createProgressBar( writer );
writer.insert( ViewPosition.createAt( viewFigure, 'end' ), progressBar );
writer.insert( writer.createPositionAt( viewFigure, 'end' ), progressBar );

// Update progress bar width when uploadedPercent is changed.
loader.on( 'change:uploadedPercent', ( evt, name, value ) => {
Expand All @@ -208,12 +205,12 @@ function _hideProgressBar( viewFigure, writer ) {
// @param {module:engine/view/downcastwriter~DowncastWriter} writer
// @param {module:engine/view/view~View} view
function _showCompleteIcon( viewFigure, writer, view ) {
const completeIcon = new UIElement( 'div', { class: 'ck-image-upload-complete-icon' } );
const completeIcon = writer.createUIElement( 'div', { class: 'ck-image-upload-complete-icon' } );

writer.insert( ViewPosition.createAt( viewFigure, 'end' ), completeIcon );
writer.insert( writer.createPositionAt( viewFigure, 'end' ), completeIcon );

setTimeout( () => {
view.change( writer => writer.remove( ViewRange.createOn( completeIcon ) ) );
view.change( writer => writer.remove( writer.createRangeOn( completeIcon ) ) );
}, 3000 );
}

Expand Down Expand Up @@ -268,6 +265,6 @@ function _removeUIElement( viewFigure, writer, uniqueProperty ) {
const element = _getUIElement( viewFigure, uniqueProperty );

if ( element ) {
writer.remove( ViewRange.createOn( element ) );
writer.remove( writer.createRangeOn( element ) );
}
}
3 changes: 1 addition & 2 deletions tests/image.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import Widget from '@ckeditor/ckeditor5-widget/src/widget';
import ImageTextAlternative from '../src/imagetextalternative';
import { setData as setModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
import { getData as getViewData } from '@ckeditor/ckeditor5-engine/src/dev-utils/view';
import ModelRange from '@ckeditor/ckeditor5-engine/src/model/range';
import global from '@ckeditor/ckeditor5-utils/src/dom/global';
import env from '@ckeditor/ckeditor5-utils/src/env';
import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
Expand Down Expand Up @@ -106,7 +105,7 @@ describe( 'Image', () => {

model.change( writer => {
const secondImage = document.getRoot().getChild( 1 );
writer.setSelection( ModelRange.createOn( secondImage ) );
writer.setSelection( writer.createRangeOn( secondImage ) );
} );

expect( getViewData( view ) ).to.equal(
Expand Down
3 changes: 1 addition & 2 deletions tests/image/converters.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import VirtualTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/virtualtest
import { downcastElementToElement } from '@ckeditor/ckeditor5-engine/src/conversion/downcast-converters';
import { upcastElementToElement } from '@ckeditor/ckeditor5-engine/src/conversion/upcast-converters';

import ModelRange from '@ckeditor/ckeditor5-engine/src/model/range';
import { getData as getViewData } from '@ckeditor/ckeditor5-engine/src/dev-utils/view';
import { setData as setModelData, getData as getModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
import env from '@ckeditor/ckeditor5-utils/src/env';
Expand Down Expand Up @@ -178,7 +177,7 @@ describe( 'Image converters', () => {
}
} );
conversionApi.writer.insert( element, data.modelCursor );
data.modelRange = ModelRange.createOn( element );
data.modelRange = conversionApi.writer.createRangeOn( element );
data.modelCursor = data.modelRange.end;
}, { priority: 'high' } );

Expand Down
6 changes: 2 additions & 4 deletions tests/image/imageloadobserver.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@
import ImageLoadObserver from '../../src/image/imageloadobserver';
import Observer from '@ckeditor/ckeditor5-engine/src/view/observer/observer';
import View from '@ckeditor/ckeditor5-engine/src/view/view';
import Position from '@ckeditor/ckeditor5-engine/src/view/position';
import Range from '@ckeditor/ckeditor5-engine/src/view/range';
import createViewRoot from '@ckeditor/ckeditor5-engine/tests/view/_utils/createroot';
import { setData } from '@ckeditor/ckeditor5-engine/src/dev-utils/view';

Expand Down Expand Up @@ -106,8 +104,8 @@ describe( 'ImageLoadObserver', () => {
view.change( writer => {
const text = writer.createText( 'foo', { b: true } );

writer.insert( Position.createAt( viewRoot.getChild( 0 ).getChild( 0 ), 0 ), text );
writer.wrap( Range.createOn( text ), writer.createAttributeElement( 'b' ) );
writer.insert( writer.createPositionAt( viewRoot.getChild( 0 ).getChild( 0 ), 0 ), text );
writer.wrap( writer.createRangeOn( text ), writer.createAttributeElement( 'b' ) );
} );

sinon.assert.calledWith( mapSpy, viewP );
Expand Down
20 changes: 9 additions & 11 deletions tests/image/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,9 @@
* For licensing, see LICENSE.md.
*/

import ViewElement from '@ckeditor/ckeditor5-engine/src/view/element';
import ViewSelection from '@ckeditor/ckeditor5-engine/src/view/selection';
import ViewDocumentFragment from '@ckeditor/ckeditor5-engine/src/view/documentfragment';
import ViewDowncastWriter from '@ckeditor/ckeditor5-engine/src/view/downcastwriter';
import ViewDocument from '@ckeditor/ckeditor5-engine/src/view/document';
import ViewRange from '@ckeditor/ckeditor5-engine/src/view/range';
import ModelElement from '@ckeditor/ckeditor5-engine/src/model/element';
import { toImageWidget, isImageWidget, isImageWidgetSelected, isImage } from '../../src/image/utils';
import { isWidget, getLabel } from '@ckeditor/ckeditor5-widget/src/utils';
Expand All @@ -18,8 +15,9 @@ describe( 'image widget utils', () => {

beforeEach( () => {
writer = new ViewDowncastWriter( new ViewDocument() );
image = new ViewElement( 'img' );
element = new ViewElement( 'figure', null, image );
image = writer.createContainerElement( 'img' );
element = writer.createContainerElement( 'figure' );
writer.insert( writer.createPositionAt( element, 0 ), image );
toImageWidget( element, writer, 'image widget' );
} );

Expand Down Expand Up @@ -51,7 +49,7 @@ describe( 'image widget utils', () => {
} );

it( 'should return false for non-widgetized elements', () => {
expect( isImageWidget( new ViewElement( 'p' ) ) ).to.be.false;
expect( isImageWidget( writer.createContainerElement( 'p' ) ) ).to.be.false;
} );
} );

Expand All @@ -62,28 +60,28 @@ describe( 'image widget utils', () => {
// We need to create a container for the element to be able to create a Range on this element.
frag = new ViewDocumentFragment( [ element ] );

const selection = new ViewSelection( element, 'on' );
const selection = writer.createSelection( element, 'on' );

expect( isImageWidgetSelected( selection ) ).to.be.true;
} );

it( 'should return false when non-widgetized elements is the only element in the selection', () => {
const notWidgetizedElement = new ViewElement( 'p' );
const notWidgetizedElement = writer.createContainerElement( 'p' );

// We need to create a container for the element to be able to create a Range on this element.
frag = new ViewDocumentFragment( [ notWidgetizedElement ] );

const selection = new ViewSelection( notWidgetizedElement, 'on' );
const selection = writer.createSelection( notWidgetizedElement, 'on' );

expect( isImageWidgetSelected( selection ) ).to.be.false;
} );

it( 'should return false when widget element is not the only element in the selection', () => {
const notWidgetizedElement = new ViewElement( 'p' );
const notWidgetizedElement = writer.createContainerElement( 'p' );

frag = new ViewDocumentFragment( [ element, notWidgetizedElement ] );

const selection = new ViewSelection( ViewRange.createIn( frag ) );
const selection = writer.createSelection( writer.createRangeIn( frag ) );

expect( isImageWidgetSelected( selection ) ).to.be.false;
} );
Expand Down

0 comments on commit 088f093

Please sign in to comment.