8
0
فهرست منبع

Adjustments to recent API changes. Use 'ViewWriter' consistently across entire plugin.

Krzysztof Krztoń 7 سال پیش
والد
کامیت
e3601f50b8

+ 14 - 15
packages/ckeditor5-paste-from-office/src/filters/image.js

@@ -10,11 +10,8 @@
 /* globals XMLHttpRequest, FileReader */
 
 import ViewMatcher from '@ckeditor/ckeditor5-engine/src/view/matcher';
-import ViewRange from '@ckeditor/ckeditor5-engine/src/view/range';
 import UpcastWriter from '@ckeditor/ckeditor5-engine/src/view/upcastwriter';
 
-import ModelRange from '@ckeditor/ckeditor5-engine/src/model/range';
-
 import { convertHexToBase64 } from './utils';
 
 /**
@@ -31,12 +28,12 @@ export function replaceImagesSourceWithBase64( documentFragment, rtfData, model
 	}
 
 	const upcastWriter = new UpcastWriter();
-	const shapesIds = findAllShapesIds( documentFragment );
+	const shapesIds = findAllShapesIds( documentFragment, upcastWriter );
 
 	removeAllImgElementsRepresentingShapes( shapesIds, documentFragment, upcastWriter );
 	removeAllShapeElements( documentFragment, upcastWriter );
 
-	const images = findAllImageElementsWithLocalSource( documentFragment );
+	const images = findAllImageElementsWithLocalSource( documentFragment, upcastWriter );
 
 	if ( images.file.length ) {
 		replaceImagesFileSourceWithInlineRepresentation( images.file, extractImageDataFromRtf( rtfData ), upcastWriter );
@@ -52,9 +49,10 @@ export function replaceImagesSourceWithBase64( documentFragment, rtfData, model
 //
 // @param {module:engine/view/documentfragment~DocumentFragment} documentFragment Document fragment
 // from which to extract shape ids.
+// @param {module:engine/view/upcastwriter~UpcastWriter} writer
 // @returns {Array.<String>} Array of shape ids.
-function findAllShapesIds( documentFragment ) {
-	const range = ViewRange.createIn( documentFragment );
+function findAllShapesIds( documentFragment, writer ) {
+	const range = writer.createRangeIn( documentFragment );
 
 	const shapeElementsMatcher = new ViewMatcher( {
 		name: /v:(.+)/
@@ -81,7 +79,7 @@ function findAllShapesIds( documentFragment ) {
 // @param {module:engine/view/documentfragment~DocumentFragment} documentFragment Document fragment from which to remove `<img>` elements.
 // @param {module:engine/view/upcastwriter~UpcastWriter} writer
 function removeAllImgElementsRepresentingShapes( shapesIds, documentFragment, writer ) {
-	const range = ViewRange.createIn( documentFragment );
+	const range = writer.createRangeIn( documentFragment );
 
 	const imageElementsMatcher = new ViewMatcher( {
 		name: 'img'
@@ -113,7 +111,7 @@ function removeAllImgElementsRepresentingShapes( shapesIds, documentFragment, wr
 // @param {module:engine/view/documentfragment~DocumentFragment} documentFragment Document fragment from which to remove shape elements.
 // @param {module:engine/view/upcastwriter~UpcastWriter} writer
 function removeAllShapeElements( documentFragment, writer ) {
-	const range = ViewRange.createIn( documentFragment );
+	const range = writer.createRangeIn( documentFragment );
 
 	const shapeElementsMatcher = new ViewMatcher( {
 		name: /v:(.+)/
@@ -135,11 +133,12 @@ function removeAllShapeElements( documentFragment, writer ) {
 // Finds all `<img>` elements in a given document fragment which have source pointing to local `file://` or `blob:` resource.
 //
 // @param {module:engine/view/documentfragment~DocumentFragment} documentFragment Document fragment in which to look for `<img>` elements.
+// @param {module:engine/view/upcastwriter~UpcastWriter} writer
 // @returns {Object} result All found images grouped by source type.
 // @returns {Array.<module:engine/view/element~Element>} result.file Array of found `<img>` elements with `file://` source.
 // @returns {Array.<module:engine/view/element~Element>} result.blob Array of found `<img>` elements with `blob:` source.
-function findAllImageElementsWithLocalSource( documentFragment ) {
-	const range = ViewRange.createIn( documentFragment );
+function findAllImageElementsWithLocalSource( documentFragment, writer ) {
+	const range = writer.createRangeIn( documentFragment );
 
 	const imageElementsMatcher = new ViewMatcher( {
 		name: 'img'
@@ -209,15 +208,15 @@ function extractImageDataFromRtf( rtfData ) {
 // @param {Array.<module:engine/view/element~Element>} imageElements Array of image elements which will have its source replaced.
 // @param {Array.<Object>} imagesHexSources Array of images hex sources (usually the result of `extractImageDataFromRtf()` function).
 // The array should be the same length as `imageElements` parameter.
-// @param {module:engine/view/upcastwriter~UpcastWriter} upcastWriter
-function replaceImagesFileSourceWithInlineRepresentation( imageElements, imagesHexSources, upcastWriter ) {
+// @param {module:engine/view/upcastwriter~UpcastWriter} writer
+function replaceImagesFileSourceWithInlineRepresentation( imageElements, imagesHexSources, writer ) {
 	// Assume there is an equal amount of image elements and images HEX sources so they can be matched accordingly based on existing order.
 	if ( imageElements.length === imagesHexSources.length ) {
 		for ( let i = 0; i < imageElements.length; i++ ) {
 			// Replace only `file` urls of images (online images are also represented with local `file://` path).
 			if ( imageElements[ i ].getAttribute( 'src' ).indexOf( 'file://' ) === 0 && imagesHexSources[ i ] ) {
 				const newSrc = `data:${ imagesHexSources[ i ].type };base64,${ convertHexToBase64( imagesHexSources[ i ].hex ) }`;
-				upcastWriter.setAttribute( 'src', newSrc, imageElements[ i ] );
+				writer.setAttribute( 'src', newSrc, imageElements[ i ] );
 			}
 		}
 	}
@@ -235,7 +234,7 @@ function replaceImagesBlobSourceWithInlineRepresentation( imageElements, model )
 			.then( data => {
 				model.enqueueChange( 'transparent', writer => {
 					const root = model.document.getRoot();
-					const range = ModelRange.createIn( root );
+					const range = writer.createRangeIn( root );
 
 					for ( const value of range ) {
 						if ( value.item.is( 'element', 'image' ) && value.item.getAttribute( 'src' ) === src ) {

+ 11 - 14
packages/ckeditor5-paste-from-office/src/filters/list.js

@@ -21,21 +21,19 @@ import UpcastWriter from '@ckeditor/ckeditor5-engine/src/view/upcastwriter';
  *
  * @param {module:engine/view/documentfragment~DocumentFragment} documentFragment The view structure which to transform.
  * @param {String} stylesString Styles from which list-like elements styling will be extracted.
- * @param {module:engine/view/view~View} view
  */
-export function transformListItemLikeElementsIntoLists( documentFragment, stylesString, view ) {
+export function transformListItemLikeElementsIntoLists( documentFragment, stylesString ) {
 	if ( !documentFragment.childCount ) {
 		return;
 	}
 
-	const itemLikeElements = findAllItemLikeElements( documentFragment, view );
+	const writer = new UpcastWriter();
+	const itemLikeElements = findAllItemLikeElements( documentFragment, writer );
 
 	if ( !itemLikeElements.length ) {
 		return;
 	}
 
-	const writer = new UpcastWriter();
-
 	let currentList = null;
 
 	itemLikeElements.forEach( ( itemLikeElement, i ) => {
@@ -45,7 +43,7 @@ export function transformListItemLikeElementsIntoLists( documentFragment, styles
 			currentList = insertNewEmptyList( listStyle, itemLikeElement.element, writer );
 		}
 
-		const listItem = transformElementIntoListItem( itemLikeElement.element, writer, view );
+		const listItem = transformElementIntoListItem( itemLikeElement.element, writer );
 
 		writer.appendChild( listItem, currentList );
 	} );
@@ -55,15 +53,15 @@ export function transformListItemLikeElementsIntoLists( documentFragment, styles
 //
 // @param {module:engine/view/documentfragment~DocumentFragment} documentFragment Document fragment
 // in which to look for list-like nodes.
-// @param {module:engine/view/view~View} view
+// @param {module:engine/view/upcastwriter~UpcastWriter} writer
 // @returns {Array.<Object>} Array of found list-like items. Each item is an object containing:
 //
 //		* {module:engine/src/view/element~Element} element List-like element.
 //		* {Number} id List item id parsed from `mso-list` style (see `getListItemData()` function).
 //		* {Number} order List item creation order parsed from `mso-list` style (see `getListItemData()` function).
 //		* {Number} indent List item indentation level parsed from `mso-list` style (see `getListItemData()` function).
-function findAllItemLikeElements( documentFragment, view ) {
-	const range = view.createRangeIn( documentFragment );
+function findAllItemLikeElements( documentFragment, writer ) {
+	const range = writer.createRangeIn( documentFragment );
 
 	// Matcher for finding list-like elements.
 	const itemLikeElementsMatcher = new Matcher( {
@@ -156,8 +154,8 @@ function insertNewEmptyList( listStyle, element, writer ) {
 // @param {module:engine/view/upcastwriter~UpcastWriter} writer
 // @returns {module:engine/view/element~Element} New element to which the given one was transformed. It is
 // inserted in place of the old element (the reference to the old element is lost due to renaming).
-function transformElementIntoListItem( element, writer, view ) {
-	removeBulletElement( element, writer, view );
+function transformElementIntoListItem( element, writer ) {
+	removeBulletElement( element, writer );
 
 	return writer.rename( 'li', element );
 }
@@ -194,8 +192,7 @@ function getListItemData( element ) {
 //
 // @param {module:engine/view/element~Element} element
 // @param {module:engine/view/upcastwriter~UpcastWriter} writer
-// @param {module:engine/view/view~View} view
-function removeBulletElement( element, writer, view ) {
+function removeBulletElement( element, writer ) {
 	// Matcher for finding `span` elements holding lists numbering/bullets.
 	const bulletMatcher = new Matcher( {
 		name: 'span',
@@ -204,7 +201,7 @@ function removeBulletElement( element, writer, view ) {
 		}
 	} );
 
-	const range = view.createRangeIn( element );
+	const range = writer.createRangeIn( element );
 
 	for ( const value of range ) {
 		if ( value.type === 'elementStart' && bulletMatcher.match( value.item ) ) {

+ 1 - 1
packages/ckeditor5-paste-from-office/src/pastefromoffice.js

@@ -61,7 +61,7 @@ export default class PasteFromOffice extends Plugin {
 	_normalizeWordInput( input, dataTransfer, model ) {
 		const { body, stylesString } = parseHtml( input );
 
-		transformListItemLikeElementsIntoLists( body, stylesString, this.editor.editing.view );
+		transformListItemLikeElementsIntoLists( body, stylesString );
 		replaceImagesSourceWithBase64( body, dataTransfer.getData( 'text/rtf' ), model );
 
 		return body;