| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- /**
- * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
- */
- import AttributeElement from '../view/attributeelement';
- import buildModelConverter from './buildmodelconverter';
- import buildViewConverter from './buildviewconverter';
- export function viewToModelAttribute( attributeName, attributeValue, view, dispatchers ) {
- const viewDefinitions = view.from ? view.from : [ view ];
- for ( const viewDefinition of viewDefinitions ) {
- const element = viewDefinition.name;
- const classes = viewDefinition.class;
- const styles = viewDefinition.style;
- const pattern = { name: element };
- if ( classes ) {
- pattern.class = classes;
- }
- if ( styles ) {
- pattern.style = styles;
- }
- buildViewConverter()
- .for( ...dispatchers )
- .from( pattern )
- .toAttribute( () => ( {
- key: attributeName,
- value: attributeValue
- } ) );
- }
- }
- export function modelAttributeToView( attributeName, attributeValue, view, dispatchers ) {
- buildModelConverter()
- .for( ...dispatchers )
- .fromAttribute( attributeName )
- .toElement( value => {
- // TODO: string vs numeric values
- if ( value != attributeValue ) {
- return;
- }
- const viewDefinition = view.to ? view.to : view;
- // TODO: AttributeElement.fromDefinition() ?
- const classes = viewDefinition.class;
- const styles = viewDefinition.style;
- const attributes = {};
- // TODO: AttributeElement does no accept Array
- if ( classes ) {
- attributes.class = Array.isArray( classes ) ? classes.join( ' ' ) : classes;
- }
- // TODO: Attribute element does not accept Object
- if ( styles ) {
- attributes.style = typeof styles === 'string' ? styles : toStylesString( styles );
- }
- return new AttributeElement( viewDefinition.name, attributes );
- } );
- }
- function toStylesString( stylesObject ) {
- const styles = [];
- for ( const key in stylesObject ) {
- styles.push( key + ':' + stylesObject[ key ] );
- }
- return styles.join( ';' );
- }
|