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