@@ -21,6 +21,34 @@ export function createObserver(options) {
21
21
return observer ;
22
22
}
23
23
24
+ function unwrapClass ( classes ) {
25
+ if ( ! classes ) return [ ] ;
26
+
27
+ const result = [ ] ;
28
+ if ( Array . isArray ( classes ) ) {
29
+ classes . forEach ( cl => {
30
+ result . push ( ...unwrapClass ( cl ) ) ;
31
+ } ) ;
32
+ return result ;
33
+ } else if ( typeof classes === 'object' ) {
34
+ Object . keys ( classes ) . forEach ( key => {
35
+ if ( classes [ key ] ) result . push ( ...unwrapClass ( classes [ key ] ) ) ;
36
+ } ) ;
37
+ return result ;
38
+ } else {
39
+ // string
40
+ return classes . split ( ' ' ) ;
41
+ }
42
+ }
43
+
44
+ function getMissingClasses ( vnodeClasses , elementClasses ) {
45
+ const vnodes = unwrapClass ( vnodeClasses ) ;
46
+ const elements = unwrapClass ( elementClasses ) ;
47
+
48
+ // return all classes which are not in the vnode, but in the elements
49
+ return elements . filter ( x => ! vnodes . includes ( x ) ) ;
50
+ }
51
+
24
52
export function loadingComponentFactory ( resolvableComponent , options ) {
25
53
return {
26
54
render ( h ) {
@@ -29,7 +57,14 @@ export function loadingComponentFactory(resolvableComponent, options) {
29
57
// eslint-disable-next-line no-underscore-dangle
30
58
if ( ! this . $el ) resolvableComponent . _resolve ( ) ;
31
59
32
- return h ( tag ) ;
60
+ return h ( tag , {
61
+ class : getMissingClasses (
62
+ [
63
+ this . $vnode && this . $vnode . data && this . $vnode . data . class ,
64
+ this . $vnode && this . $vnode . data && this . $vnode . data . staticClass
65
+ ] ,
66
+ this . $el && this . $el . getAttribute ( 'class' ) )
67
+ } ) ;
33
68
} ,
34
69
...options ,
35
70
} ;
0 commit comments