@@ -77,8 +77,6 @@ class Input {
7777 this . _label = SelectorEngine . findOne ( 'label' , this . _element ) ;
7878 if ( this . _label === null ) return ;
7979 this . _getLabelWidth ( ) ;
80-
81- if ( ! this . _element . classList . contains ( 'input-group' ) ) return ;
8280 this . _getLabelPositionInInputGroup ( ) ;
8381 }
8482
@@ -92,12 +90,18 @@ class Input {
9290 }
9391
9492 _getLabelPositionInInputGroup ( ) {
93+ this . _labelMarginLeft = 0 ;
94+
95+ if ( ! this . _element . classList . contains ( 'input-group' ) ) return ;
9596 const input =
9697 SelectorEngine . findOne ( 'input' , this . _element ) ||
9798 SelectorEngine . findOne ( 'textarea' , this . _element ) ;
9899 const prefix = SelectorEngine . prev ( input , '.input-group-text' ) [ 0 ] ;
99- if ( prefix === undefined ) return ;
100- this . _labelMarginLeft = prefix . offsetWidth - 1 ;
100+ if ( prefix === undefined ) {
101+ this . _labelMarginLeft = 0 ;
102+ } else {
103+ this . _labelMarginLeft = prefix . offsetWidth - 1 ;
104+ }
101105 }
102106
103107 _applyDivs ( ) {
@@ -130,25 +134,34 @@ class Input {
130134 }
131135
132136 _activate ( event ) {
133- if ( event ) this . _label = SelectorEngine . findOne ( 'label' , event . target . parentNode ) ;
137+ this . _getElements ( event ) ;
138+
139+ const input = event
140+ ? event . target
141+ : SelectorEngine . findOne ( 'input' , this . _element ) ||
142+ SelectorEngine . findOne ( 'textarea' , this . _element ) ;
143+
144+ if ( input . value !== '' ) {
145+ Manipulator . addClass ( input , 'active' ) ;
146+ }
147+ }
148+
149+ _getElements ( event ) {
150+ if ( event ) {
151+ this . _element = event . target . parentNode ;
152+ this . _label = SelectorEngine . findOne ( 'label' , this . _element ) ;
153+ }
154+
134155 if ( event && this . _label ) {
135156 const prevLabelWidth = this . _labelWidth ;
136- this . _getLabelWidth ( ) ;
157+ this . _getLabelData ( ) ;
137158
138159 if ( prevLabelWidth !== this . _labelWidth ) {
139160 this . _notchMiddle = SelectorEngine . findOne ( '.form-notch-middle' , event . target . parentNode ) ;
140161 this . _notchLeading = SelectorEngine . findOne ( '.form-notch-leading' , event . target . parentNode ) ;
141162 this . _applyNotch ( ) ;
142163 }
143164 }
144-
145- const input = event
146- ? event . target
147- : SelectorEngine . findOne ( 'input' , this . _element ) ||
148- SelectorEngine . findOne ( 'textarea' , this . _element ) ;
149- if ( input . value !== '' ) {
150- Manipulator . addClass ( input , 'active' ) ;
151- }
152165 }
153166
154167 _deactivate ( event ) {
@@ -186,8 +199,46 @@ EventHandler.on(document, 'focus', OUTLINE_TEXTAREA, Input.activate(new Input())
186199EventHandler . on ( document , 'input' , OUTLINE_TEXTAREA , Input . activate ( new Input ( ) ) ) ;
187200EventHandler . on ( document , 'blur' , OUTLINE_TEXTAREA , Input . deactivate ( new Input ( ) ) ) ;
188201
189- EventHandler . on ( window , 'shown.bs.modal' , Input . activate ( new Input ( ) ) ) ;
190- EventHandler . on ( window , 'shown.bs.dropdown' , Input . activate ( new Input ( ) ) ) ;
202+ EventHandler . on ( window , 'shown.bs.modal' , ( e ) => {
203+ SelectorEngine . find ( OUTLINE_INPUT , e . target ) . forEach ( ( element ) => {
204+ const instance = Input . getInstance ( element . parentNode ) ;
205+ if ( ! instance ) return ;
206+ instance . update ( ) ;
207+ } ) ;
208+ SelectorEngine . find ( OUTLINE_TEXTAREA , e . target ) . forEach ( ( element ) => {
209+ const instance = Input . getInstance ( element . parentNode ) ;
210+ if ( ! instance ) return ;
211+ instance . update ( ) ;
212+ } ) ;
213+ } ) ;
214+
215+ EventHandler . on ( window , 'shown.bs.dropdown' , ( e ) => {
216+ SelectorEngine . find ( OUTLINE_INPUT , e . target ) . forEach ( ( element ) => {
217+ const instance = Input . getInstance ( element . parentNode ) ;
218+ if ( ! instance ) return ;
219+ instance . update ( ) ;
220+ } ) ;
221+ SelectorEngine . find ( OUTLINE_TEXTAREA , e . target ) . forEach ( ( element ) => {
222+ const instance = Input . getInstance ( element . parentNode ) ;
223+ if ( ! instance ) return ;
224+ instance . update ( ) ;
225+ } ) ;
226+ } ) ;
227+
228+ EventHandler . on ( window , 'shown.bs.tab' , ( e ) => {
229+ const targetId = e . target . href . split ( '#' ) [ 1 ] ;
230+ const target = SelectorEngine . findOne ( `#${ targetId } ` ) ;
231+ SelectorEngine . find ( OUTLINE_INPUT , target ) . forEach ( ( element ) => {
232+ const instance = Input . getInstance ( element . parentNode ) ;
233+ if ( ! instance ) return ;
234+ instance . update ( ) ;
235+ } ) ;
236+ SelectorEngine . find ( OUTLINE_TEXTAREA , target ) . forEach ( ( element ) => {
237+ const instance = Input . getInstance ( element . parentNode ) ;
238+ if ( ! instance ) return ;
239+ instance . update ( ) ;
240+ } ) ;
241+ } ) ;
191242
192243// auto-init
193244SelectorEngine . find ( `.${ CLASSNAME_WRAPPER } ` ) . forEach ( ( element ) => {
0 commit comments