4 changed files with 209 additions and 214 deletions
			
			
		| @ -0,0 +1,122 @@ | |||
| /** | |||
|  * @extends Modifier | |||
|  * @inheritdoc | |||
|  */ | |||
| class ChainableModifier extends Modifier { | |||
|     /** | |||
|      * @type {Component} | |||
|      */ | |||
|     _component; | |||
| 
 | |||
|     /** | |||
|      * | |||
|      * @param {Component} component | |||
|      */ | |||
|     constructor(component) { | |||
|         super(); | |||
|         this._component = component; | |||
|     } | |||
| 
 | |||
|     /** | |||
|      * @inheritdoc | |||
|      * | |||
|      * In Case it is called from a ChainableModifier chain, | |||
|      * the Return type would be DimensionsChainedModifier instead of DimensionsChain. | |||
|      * @override | |||
|      * @param {Dimensions | number | undefined} [modify=null] dimensions | |||
|      * @returns {ChainableModifier | DimensionsChainedModifier} | |||
|      */ | |||
|     dimensions(modify = null) { | |||
|         if (modify instanceof Dimensions || Number.isInteger(modify)) { | |||
|             return super.dimensions(modify); | |||
|         } | |||
|         return new DimensionsChainedModifier(this); | |||
|     } | |||
| 
 | |||
|     /** | |||
|      * @inheritdoc | |||
|      * @override | |||
|      * @param {Padding | number | undefined} [modify=null] modify as in modifiers | |||
|      * @returns {ChainableModifier | PaddingChainedModifier} | |||
|      */ | |||
|     padding(modify = null) { | |||
|         if (modify instanceof Padding || Number.isInteger(modify)) { | |||
|             return super.padding(modify); | |||
|         } | |||
|         return new PaddingChainedModifier(this); | |||
|     } | |||
| 
 | |||
|     /** | |||
|      * @inheritdoc | |||
|      * @override | |||
|      * @param {Margin | number | undefined} [modify=null] modify as in modifiers | |||
|      * @returns {ChainableModifier | MarginChainedModifier} | |||
|      */ | |||
|     margin(modify = null) { | |||
|         if (modify instanceof Margin || Number.isInteger(modify)) { | |||
|             return super.margin(modify); | |||
|         } | |||
|         return new MarginChainedModifier(this); | |||
|     } | |||
| 
 | |||
|     /** | |||
|      * @inheritdoc | |||
|      * | |||
|      * @override | |||
|      * @param {Shape | number | undefined} [modify=null] modify | |||
|      * @returns {ChainableModifier | ShapeChainedModifier} | |||
|      */ | |||
|     clip(modify = null) { | |||
|         if (modify instanceof Shape || Number.isInteger(modify)) { | |||
|             return super.clip(modify); | |||
|         } | |||
|         return new ShapeChainedModifier(this); | |||
|     } | |||
| 
 | |||
| 
 | |||
|     /** | |||
|      * | |||
|      * @inheritdoc | |||
|      * | |||
|      * @override | |||
|      * @param {Border | number | undefined} [modify=null] modify | |||
|      * @returns {ChainableModifier | BorderChainedModifier} | |||
|      */ | |||
|     border(modify = null) { | |||
|         if (modify instanceof Border || Number.isInteger(modify)) { | |||
|             return super.border(modify); | |||
|         } | |||
|         return new BorderChainedModifier(this); | |||
|     } | |||
| 
 | |||
| 
 | |||
|     /** | |||
|      * | |||
|      * @returns {Component} | |||
|      */ | |||
|     toComponent() { | |||
|         return this._component.modifier(this); | |||
|     } | |||
| 
 | |||
|     /** | |||
|      * | |||
|      * @param {Component|Array<Component>} innerComponent | |||
|      * @returns {Component} the parent Component | |||
|      */ | |||
|     childContext(innerComponent) { | |||
|         return this._component | |||
|             .modifier(this) | |||
|             .childContext(innerComponent); | |||
|     } | |||
| 
 | |||
|     /** | |||
|      * Calls chainChild() from Component (ChildbearerComponent) | |||
|      * @see {ChildbearerComponent.chainChild} | |||
|      * @returns {builder} | |||
|      */ | |||
|     chainChild() { | |||
|         return this._component | |||
|             .modifier(this) | |||
|             .chainChild(); | |||
|     } | |||
| } | |||
| @ -0,0 +1,87 @@ | |||
| /** | |||
|  * @abstract | |||
|  */ | |||
| class ModificationSubChain { | |||
|     /** | |||
|      * @type {Modifier} | |||
|      */ | |||
|     _modifier; | |||
|     /** | |||
|      * @type {string} | |||
|      */ | |||
|     _modMethod; | |||
| 
 | |||
|     /** | |||
|      * | |||
|      * @param {Modifier} modifier | |||
|      * @param {string} modMethod | |||
|      */ | |||
|     constructor(modifier, modMethod) { | |||
|         this._modifier = modifier; | |||
|         this._modMethod = modMethod; | |||
|     } | |||
| 
 | |||
|     /** | |||
|      * Returns the Modifier SubChain to the Modifier | |||
|      * @returns {Modifier|ChainableModifier} | |||
|      */ | |||
|     toModifier() { | |||
|         return this._modifier[this._modMethod](this); | |||
|     } | |||
| 
 | |||
|     /** | |||
|      * Returns chain to the Modifier | |||
|      * @returns {Modifier|ChainableModifier} | |||
|      */ | |||
|     ensureModifier() { | |||
|         return this.toModifier(); | |||
|     } | |||
| } | |||
| /** | |||
|  * @inheritdoc | |||
|  * @extends ModificationSubChain | |||
|  * @abstract | |||
|  */ | |||
| class ModificationSubChainReComp extends ModificationSubChain { | |||
|     /** | |||
|      * | |||
|      * @param {ChainableModifier} modifier | |||
|      * @param {string} modMethod | |||
|      */ | |||
|     constructor(modifier) { | |||
|         super(); | |||
|         this._modifier = modifier; | |||
|     } | |||
| 
 | |||
|     /** | |||
|      * Returns chain to the component that is under modification | |||
|      * @returns {Component} the Component that was (supposed to be) modified by this obj. | |||
|      */ | |||
|     toComponent() { | |||
|         return this._modifier[this._modMethod](this) | |||
|             .toComponent(); | |||
|     } | |||
| 
 | |||
|     /** | |||
|      * Returns chain to the component that is under modification | |||
|      * and adds the given innerComponent as children to the component. | |||
|      * @param {Component|Array<Component>} innerComponent | |||
|      * @returns {Component} | |||
|      */ | |||
|     childContext(innerComponent) { | |||
|         return this._modifier[this._modMethod](this) | |||
|             .toComponent() | |||
|             .childContext(innerComponent); | |||
|     } | |||
| 
 | |||
|     /** | |||
|      * Closes modifier chain and returns builder to define the next child of the component | |||
|      * @returns {Component} | |||
|      */ | |||
|     chainChild() { | |||
|         return this._modifier[this._modMethod](this) | |||
|             .toComponent() | |||
|             .chainChild(); | |||
|     } | |||
| } | |||
| 
 | |||
					Loading…
					
					
				
		Reference in new issue