@@ -9,24 +9,24 @@ type ElementsCallback<T extends Element> = (el: T) => Promisable<any>;
99type ElementsCallbackWithArgs = ( el : Element , ...args : any [ ] ) => Promisable < any > ;
1010export type DOMEvent < E extends Event , T extends Element = HTMLElement > = E & { target : Partial < T > ; } ;
1111
12- function elementsCall ( el : ElementArg , func : ElementsCallbackWithArgs , ...args : any [ ] ) {
12+ function elementsCall ( el : ElementArg , func : ElementsCallbackWithArgs , ...args : any [ ] ) : ArrayLikeIterable < Element > {
1313 if ( typeof el === 'string' || el instanceof String ) {
1414 el = document . querySelectorAll ( el as string ) ;
1515 }
1616 if ( el instanceof Node ) {
1717 func ( el , ...args ) ;
18+ return [ el ] ;
1819 } else if ( el . length !== undefined ) {
1920 // this works for: NodeList, HTMLCollection, Array, jQuery
20- for ( const e of ( el as ArrayLikeIterable < Element > ) ) {
21- func ( e , ...args ) ;
22- }
23- } else {
24- throw new Error ( 'invalid argument to be shown/hidden' ) ;
21+ const elems = el as ArrayLikeIterable < Element > ;
22+ for ( const elem of elems ) func ( elem , ...args ) ;
23+ return elems ;
2524 }
25+ throw new Error ( 'invalid argument to be shown/hidden' ) ;
2626}
2727
28- export function toggleClass ( el : ElementArg , className : string , force ?: boolean ) {
29- elementsCall ( el , ( e : Element ) => {
28+ export function toggleClass ( el : ElementArg , className : string , force ?: boolean ) : ArrayLikeIterable < Element > {
29+ return elementsCall ( el , ( e : Element ) => {
3030 if ( force === true ) {
3131 e . classList . add ( className ) ;
3232 } else if ( force === false ) {
@@ -43,23 +43,16 @@ export function toggleClass(el: ElementArg, className: string, force?: boolean)
4343 * @param el ElementArg
4444 * @param force force=true to show or force=false to hide, undefined to toggle
4545 */
46- export function toggleElem ( el : ElementArg , force ?: boolean ) {
47- toggleClass ( el , 'tw-hidden' , force === undefined ? force : ! force ) ;
48- }
49-
50- export function showElem ( el : ElementArg ) {
51- toggleElem ( el , true ) ;
46+ export function toggleElem ( el : ElementArg , force ?: boolean ) : ArrayLikeIterable < Element > {
47+ return toggleClass ( el , 'tw-hidden' , force === undefined ? force : ! force ) ;
5248}
5349
54- export function hideElem ( el : ElementArg ) {
55- toggleElem ( el , false ) ;
50+ export function showElem ( el : ElementArg ) : ArrayLikeIterable < Element > {
51+ return toggleElem ( el , true ) ;
5652}
5753
58- export function isElemHidden ( el : ElementArg ) {
59- const res : boolean [ ] = [ ] ;
60- elementsCall ( el , ( e ) => res . push ( e . classList . contains ( 'tw-hidden' ) ) ) ;
61- if ( res . length > 1 ) throw new Error ( `isElemHidden doesn't work for multiple elements` ) ;
62- return res [ 0 ] ;
54+ export function hideElem ( el : ElementArg ) : ArrayLikeIterable < Element > {
55+ return toggleElem ( el , false ) ;
6356}
6457
6558function applyElemsCallback < T extends Element > ( elems : ArrayLikeIterable < T > , fn ?: ElementsCallback < T > ) : ArrayLikeIterable < T > {
@@ -279,10 +272,10 @@ export function initSubmitEventPolyfill() {
279272 * Check if an element is visible, equivalent to jQuery's `:visible` pseudo.
280273 * Note: This function doesn't account for all possible visibility scenarios.
281274 */
282- export function isElemVisible ( element : HTMLElement ) : boolean {
283- if ( ! element ) return false ;
284- // checking element .style.display is not necessary for browsers, but it is required by some tests with happy-dom because happy-dom doesn't really do layout
285- return Boolean ( ( element . offsetWidth || element . offsetHeight || element . getClientRects ( ) . length ) && element . style . display !== 'none' ) ;
275+ export function isElemVisible ( el : HTMLElement ) : boolean {
276+ if ( ! el ) return false ;
277+ // checking el .style.display is not necessary for browsers, but it is required by some tests with happy-dom because happy-dom doesn't really do layout
278+ return ! el . classList . contains ( 'tw-hidden' ) && Boolean ( ( el . offsetWidth || el . offsetHeight || el . getClientRects ( ) . length ) && el . style . display !== 'none' ) ;
286279}
287280
288281// replace selected text in a textarea while preserving editor history, e.g. CTRL-Z works after this
0 commit comments