1
+ /*!
2
+ * $script.js JS loader & dependency manager
3
+ * https://github.com/ded/script.js
4
+ * (c) Dustin Diaz 2014 | License MIT
5
+ */
6
+
7
+ ( function ( name , definition ) {
8
+ if ( typeof module != 'undefined' && module . exports ) module . exports = definition ( )
9
+ else if ( typeof define == 'function' && define . amd ) define ( definition )
10
+ else this [ name ] = definition ( )
11
+ } ) ( '$script' , function ( ) {
12
+ var doc = document
13
+ , head = doc . getElementsByTagName ( 'head' ) [ 0 ]
14
+ , s = 'string'
15
+ , f = false
16
+ , push = 'push'
17
+ , readyState = 'readyState'
18
+ , onreadystatechange = 'onreadystatechange'
19
+ , list = { }
20
+ , ids = { }
21
+ , delay = { }
22
+ , scripts = { }
23
+ , scriptpath
24
+ , urlArgs
25
+
26
+ function every ( ar , fn ) {
27
+ for ( var i = 0 , j = ar . length ; i < j ; ++ i ) if ( ! fn ( ar [ i ] ) ) return f
28
+ return 1
29
+ }
30
+ function each ( ar , fn ) {
31
+ every ( ar , function ( el ) {
32
+ fn ( el )
33
+ return 1
34
+ } )
35
+ }
36
+
37
+ function $script ( paths , idOrDone , optDone ) {
38
+ paths = paths [ push ] ? paths : [ paths ]
39
+ var idOrDoneIsDone = idOrDone && idOrDone . call
40
+ , done = idOrDoneIsDone ? idOrDone : optDone
41
+ , id = idOrDoneIsDone ? paths . join ( '' ) : idOrDone
42
+ , queue = paths . length
43
+ function loopFn ( item ) {
44
+ return item . call ? item ( ) : list [ item ]
45
+ }
46
+ function callback ( ) {
47
+ if ( ! -- queue ) {
48
+ list [ id ] = 1
49
+ done && done ( )
50
+ for ( var dset in delay ) {
51
+ every ( dset . split ( '|' ) , loopFn ) && ! each ( delay [ dset ] , loopFn ) && ( delay [ dset ] = [ ] )
52
+ }
53
+ }
54
+ }
55
+ setTimeout ( function ( ) {
56
+ each ( paths , function loading ( path , force ) {
57
+ if ( path === null ) return callback ( )
58
+
59
+ if ( ! force && ! / ^ h t t p s ? : \/ \/ / . test ( path ) && scriptpath ) {
60
+ path = ( path . indexOf ( '.js' ) === - 1 ) ? scriptpath + path + '.js' : scriptpath + path ;
61
+ }
62
+
63
+ if ( scripts [ path ] ) {
64
+ if ( id ) ids [ id ] = 1
65
+ return ( scripts [ path ] == 2 ) ? callback ( ) : setTimeout ( function ( ) { loading ( path , true ) } , 0 )
66
+ }
67
+
68
+ scripts [ path ] = 1
69
+ if ( id ) ids [ id ] = 1
70
+ create ( path , callback )
71
+ } )
72
+ } , 0 )
73
+ return $script
74
+ }
75
+
76
+ function create ( path , fn ) {
77
+ var el = doc . createElement ( 'script' ) , loaded
78
+ el . onload = el . onerror = el [ onreadystatechange ] = function ( ) {
79
+ if ( ( el [ readyState ] && ! ( / ^ c | l o a d e / . test ( el [ readyState ] ) ) ) || loaded ) return ;
80
+ el . onload = el [ onreadystatechange ] = null
81
+ loaded = 1
82
+ scripts [ path ] = 2
83
+ fn ( )
84
+ }
85
+ el . async = 1
86
+ el . src = urlArgs ? path + ( path . indexOf ( '?' ) === - 1 ? '?' : '&' ) + urlArgs : path ;
87
+ head . insertBefore ( el , head . lastChild )
88
+ }
89
+
90
+ $script . get = create
91
+
92
+ $script . order = function ( scripts , id , done ) {
93
+ ( function callback ( s ) {
94
+ s = scripts . shift ( )
95
+ ! scripts . length ? $script ( s , id , done ) : $script ( s , callback )
96
+ } ( ) )
97
+ }
98
+
99
+ $script . path = function ( p ) {
100
+ scriptpath = p
101
+ }
102
+ $script . urlArgs = function ( str ) {
103
+ urlArgs = str ;
104
+ }
105
+ $script . ready = function ( deps , ready , req ) {
106
+ deps = deps [ push ] ? deps : [ deps ]
107
+ var missing = [ ] ;
108
+ ! each ( deps , function ( dep ) {
109
+ list [ dep ] || missing [ push ] ( dep ) ;
110
+ } ) && every ( deps , function ( dep ) { return list [ dep ] } ) ?
111
+ ready ( ) : ! function ( key ) {
112
+ delay [ key ] = delay [ key ] || [ ]
113
+ delay [ key ] [ push ] ( ready )
114
+ req && req ( missing )
115
+ } ( deps . join ( '|' ) )
116
+ return $script
117
+ }
118
+
119
+ $script . done = function ( idOrDone ) {
120
+ $script ( [ null ] , idOrDone )
121
+ }
122
+
123
+ return $script
124
+ } ) ;
125
+
126
+ class VendorJs {
127
+ constructor ( ) {
128
+ this . init ( ) ;
129
+ }
130
+ init ( ) {
131
+ document . addEventListener ( "DOMContentLoaded" , function ( ) {
132
+ if ( navigator . userAgent . indexOf ( "Chrome-Lighthouse" ) != - 1
133
+ || navigator . userAgent . indexOf ( "GTmetrix" ) != - 1
134
+ || navigator . userAgent . indexOf ( "PingdomPageSpeed" ) != - 1 ) {
135
+ document . documentElement . classList . add ( 'no-js page-speed' ) ;
136
+ return false ;
137
+ }
138
+ var $body = document . body ,
139
+ jsvendor = document . querySelector ( '#jsvendor' ) ,
140
+ dataSrc = jsvendor . dataset ;
141
+ $script ( [ dataSrc . jquery ] , function ( ) {
142
+ $script ( [ dataSrc . sc , dataSrc . lazysizes ] , 'load_basic' ) ;
143
+ } ) ;
144
+ $script . ready ( 'load_basic' , function ( ) {
145
+ var require = [
146
+ dataSrc . cookie ,
147
+ dataSrc . currencies ,
148
+ dataSrc . magnific ,
149
+ dataSrc . countdown ,
150
+ dataSrc . accordion
151
+ ] ;
152
+ $script ( require , 'load_page' ) ;
153
+ } ) ;
154
+ $script . ready ( 'load_page' , function ( ) {
155
+ var require = [ dataSrc . shopify ] ;
156
+ /* load dependency in home page */
157
+ if ( $body . classList . contains ( 'home' ) ) {
158
+ /* require.push("home-sj"); */
159
+ }
160
+ /* load dependency in category page */
161
+ else if ( $body . classList . contains ( 'template-collection' ) || $body . classList . contains ( 'template-search' ) ) {
162
+ require . push ( dataSrc . stickybar ) ;
163
+ require . push ( dataSrc . collection ) ;
164
+ }
165
+ /* load dependency in product page */
166
+ else if ( $body . classList . contains ( 'template-product' ) ) {
167
+ require . push ( dataSrc . zoom ) ;
168
+ require . push ( dataSrc . stickybar ) ;
169
+ require . push ( dataSrc . product ) ;
170
+ }
171
+ $script ( require , 'load_main' ) ;
172
+ } ) ;
173
+ $script . ready ( 'load_main' , function ( ) {
174
+ $script ( [ dataSrc . theme ] ) ;
175
+ $script ( [ dataSrc . custom ] ) ;
176
+ } ) ;
177
+ document . addEventListener ( "PriceSliderAssets" , function ( ) {
178
+ if ( jsvendor . classList . contains ( 'PriceSliderAssets' ) ) return ;
179
+ $script ( [ dataSrc . nouislider ] , function ( ) {
180
+ var style = document . createElement ( 'link' ) ;
181
+ style . rel = 'stylesheet' ;
182
+ style . type = 'text/css' ;
183
+ style . href = dataSrc . nouisliderStyle ;
184
+ document . head . appendChild ( style ) ;
185
+ jsvendor . classList . add ( 'PriceSliderAssets' ) ;
186
+ } ) ;
187
+ } ) ;
188
+ document . addEventListener ( "VenoboxAssets" , function ( ) {
189
+ if ( jsvendor . classList . contains ( 'VenoboxAssets' ) ) {
190
+ document . dispatchEvent ( new Event ( 'VenoboxAssetsReady' ) ) ;
191
+ return ;
192
+ }
193
+ $script ( [ dataSrc . venobox ] , function ( ) {
194
+ var style = document . createElement ( 'link' ) ;
195
+ style . rel = 'stylesheet' ;
196
+ style . type = 'text/css' ;
197
+ style . href = dataSrc . venoboxStyle ;
198
+ document . head . appendChild ( style ) ;
199
+ jsvendor . classList . add ( 'VenoboxAssets' ) ;
200
+ document . dispatchEvent ( new Event ( 'VenoboxAssetsReady' ) ) ;
201
+ } ) ;
202
+ } ) ;
203
+ document . addEventListener ( "ColllectionLoadJs" , function ( ) {
204
+ if ( jsvendor . classList . contains ( 'ColllectionLoadJs' ) ) return ;
205
+ $script ( [ dataSrc . global , dataSrc . stickybar , dataSrc . collection ] , function ( ) {
206
+ jsvendor . classList . add ( 'ColllectionLoadJs' ) ;
207
+ } ) ;
208
+ } ) ;
209
+ document . addEventListener ( "MainProductLoadJs" , function ( ) {
210
+ if ( jsvendor . classList . contains ( 'MainProductLoadJs' ) ) return ;
211
+ $script ( [ dataSrc . global , dataSrc . product , dataSrc . productModel ] , function ( ) {
212
+ jsvendor . classList . add ( 'MainProductLoadJs' ) ;
213
+ } ) ;
214
+ } ) ;
215
+ } ) ;
216
+ }
217
+ }
218
+
219
+ new VendorJs ( ) ;
0 commit comments