@@ -4,6 +4,9 @@ import {AutoGravity} from "../../qualifiers/gravity/autoGravity/AutoGravity.js";
44import { AutoFocus } from "../../qualifiers/autoFocus.js" ;
55import { FocusOnGravity } from "../../qualifiers/gravity/focusOnGravity/FocusOnGravity.js" ;
66import { autoGravity } from "../../qualifiers/gravity.js" ;
7+ import { FocusOnValue } from "../../qualifiers/focusOn.js" ;
8+
9+ type IAutoGravityString = 'auto' | 'auto:' ;
710
811export interface IGravityModel {
912 gravityType : string ;
@@ -31,6 +34,14 @@ export interface IFocusOnGravityModel extends IGravityModel {
3134 fallbackGravity ?: IAutoGravityModel
3235}
3336
37+ /**
38+ * true if gravity starts with 'auto' or 'auto:'
39+ * @param gravity
40+ */
41+ function isIAutoGravityString ( gravity : unknown ) : gravity is IAutoGravityString {
42+ return gravity && `${ gravity } ` . split ( ':' ) [ 0 ] === 'auto' ;
43+ }
44+
3445/**
3546 * Validate that given val is an ICompassGravity
3647 * @param gravity
@@ -111,9 +122,16 @@ function createIAutoFocusObject(gravity: AutoFocus): IAutoGravityObjectModel {
111122 * Creates an auto gravity model from given AutoGravity
112123 * @param gravity
113124 */
114- function createAutoGravityModel ( gravity : 'auto' | AutoGravity ) : IAutoGravityModel {
115- const gravityQualifier = gravity === 'auto' ? new AutoGravity ( ) : gravity ;
116- const values = gravityQualifier . qualifierValue . values . filter ( ( v ) => v !== 'auto' ) ;
125+ function createAutoGravityModel ( gravity : IAutoGravityString | AutoGravity ) : IAutoGravityModel {
126+ let values ;
127+ const gravityQualifier = gravity === 'auto' ? new AutoGravity ( ) : gravity as AutoGravity ;
128+
129+ if ( `${ gravity } ` . startsWith ( 'auto:' ) ) {
130+ values = `${ gravity } ` . split ( ':' ) . filter ( ( v ) => v !== 'auto' ) ;
131+ } else {
132+ values = gravityQualifier . qualifierValue . values . filter ( ( v ) => v !== 'auto' ) ;
133+ }
134+
117135 const autoFocus = values . map ( createIAutoFocusObject ) ;
118136
119137 return {
@@ -138,14 +156,24 @@ function createFocusOnGravityModel(gravity: FocusOnGravity): IFocusOnGravityMode
138156
139157 if ( hasAutoGravity ) {
140158 // Remove the first 'auto' value by slicing it, because it's added by autoGravity()
141- const autoFocusObjects = values [ values . length - 1 ] . values . slice ( 1 ) ;
159+ const autoFocusObjects = values [ values . length - 1 ] . values . slice ( 1 ) ;
142160 const autoGravityInstance = autoGravity ( ) . autoFocus ( ...autoFocusObjects ) ;
143161 result . fallbackGravity = createAutoGravityModel ( autoGravityInstance ) ;
144162 }
145163
146164 return result ;
147165}
148166
167+ /**
168+ * Creates a FocusOnGravity from given string
169+ * @param gravity
170+ */
171+ function createFocusOnGravity ( gravity : string ) : FocusOnGravity {
172+ const values = gravity . split ( ':' ) ;
173+ const focusOnValues = values . map ( ( g ) => new FocusOnValue ( g ) ) ;
174+ return new FocusOnGravity ( focusOnValues ) ;
175+ }
176+
149177/**
150178 * Create a model of given gravity
151179 * @param gravity
@@ -159,9 +187,11 @@ export function createGravityModel(gravity: IGravity): IGravityModel {
159187 return createOcrGravityModel ( ) ;
160188 }
161189
162- if ( gravity === 'auto' || isAutoGravity ( gravity ) ) {
190+ if ( isIAutoGravityString ( gravity ) || isAutoGravity ( gravity ) ) {
163191 return createAutoGravityModel ( gravity ) ;
164192 }
165193
166- return createFocusOnGravityModel ( gravity as FocusOnGravity ) ;
194+ return createFocusOnGravityModel (
195+ typeof gravity === 'string' ? createFocusOnGravity ( gravity ) : gravity as FocusOnGravity
196+ ) ;
167197}
0 commit comments