@@ -2,9 +2,11 @@ import {IGravity} from "../../qualifiers/gravity/GravityQualifier.js";
22import { CompassGravity , ICompassGravity } from "../../qualifiers/gravity/compassGravity/CompassGravity.js" ;
33import { AutoGravity } from "../../qualifiers/gravity/autoGravity/AutoGravity.js" ;
44import { AutoFocus } from "../../qualifiers/autoFocus.js" ;
5+ import { FocusOnGravity } from "../../qualifiers/gravity/focusOnGravity/FocusOnGravity.js" ;
6+ import { autoGravity } from "../../qualifiers/gravity.js" ;
57
68export interface IGravityModel {
7- gravityType ? : string ;
9+ gravityType : string ;
810}
911
1012export interface ICompassGravityModel extends IGravityModel {
@@ -26,7 +28,7 @@ export interface IAutoGravityModel extends IGravityModel {
2628
2729export interface IFocusOnGravityModel extends IGravityModel {
2830 focusOnObjects : string [ ] , // 'cat' | 'dog' etc
29- fallbackGravity : IAutoGravityModel
31+ fallbackGravity ? : IAutoGravityModel
3032}
3133
3234/**
@@ -109,15 +111,41 @@ function createIAutoFocusObject(gravity: AutoFocus): IAutoGravityObjectModel {
109111 * Creates an auto gravity model from given AutoGravity
110112 * @param gravity
111113 */
112- function createAutoGravityModel ( gravity : AutoGravity ) : IAutoGravityModel {
113- const values = gravity . qualifierValue . values . filter ( ( v ) => v !== 'auto' ) ;
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' ) ;
114117 const autoFocus = values . map ( createIAutoFocusObject ) ;
115118
116119 return {
120+ gravityType : 'auto' ,
117121 autoFocus
118122 } ;
119123}
120124
125+ /**
126+ * Create IFocusOnGravityModel from FocusOnGravity
127+ * @param gravity
128+ */
129+ function createFocusOnGravityModel ( gravity : FocusOnGravity ) : IFocusOnGravityModel {
130+ const hasAutoGravity = `${ gravity } ` . split ( ':' ) . includes ( 'auto' ) ;
131+ const values = gravity . qualifierValue . values ;
132+ const focusOnValues = hasAutoGravity ? values . slice ( 0 , values . length - 1 ) : values ;
133+
134+ const result : IFocusOnGravityModel = {
135+ gravityType : 'object' ,
136+ focusOnObjects : focusOnValues . map ( ( v ) => `${ v } ` )
137+ } ;
138+
139+ if ( hasAutoGravity ) {
140+ // Remove the first 'auto' value by slicing it, because it's added by autoGravity()
141+ const autoFocusObjects = values [ values . length - 1 ] . values . slice ( 1 ) ;
142+ const autoGravityInstance = autoGravity ( ) . autoFocus ( ...autoFocusObjects ) ;
143+ result . fallbackGravity = createAutoGravityModel ( autoGravityInstance ) ;
144+ }
145+
146+ return result ;
147+ }
148+
121149/**
122150 * Create a model of given gravity
123151 * @param gravity
@@ -131,7 +159,9 @@ export function createGravityModel(gravity: IGravity): IGravityModel {
131159 return createOcrGravityModel ( ) ;
132160 }
133161
134- if ( isAutoGravity ( gravity ) ) {
162+ if ( gravity === 'auto' || isAutoGravity ( gravity ) ) {
135163 return createAutoGravityModel ( gravity ) ;
136164 }
165+
166+ return createFocusOnGravityModel ( gravity as FocusOnGravity ) ;
137167}
0 commit comments