PageSourceSearch

https://www.lin-shiao-tung.com/assets/cache/b53f3cd5ca16fcc714f15f6d299edac3.js

js lin-shiao-tung.com collected 2026-09-29 20:37:49 UTC 9,987 bytes, 469 lines download raw bytes

1/**
2 * SITE.Tracking
3 * 
4 * @author    CLHOM
5 * @website   http://www.kiiiick.com
6 * @copyright Copyright (C) KiiiiCK Co., All Rights Reserved.
7 */
8
9"use strict";
10
11var SITE = SITE || {};
12
13;(function(SITE) {
14  
15  SITE.Tracking = function(configs) {
16
17    //-- set public value --//
18    
19
20    //-- set private value --//
21    var _driver = [];
22    
23    var _configs = {
24      // selector
25      eventTarget: '',
26
27      // driver
28      driver: ['ga', 'gagtag', 'gtag', 'fbpixel'],
29
30      // events
31      events: ['load', 'click', 'change'],
32
33      // status
34      debug: true
35
36      // hook functions
37      
38    };
39
40    var _helper = {
41      console: {
42        log: function(v){
43          if (_configs.debug === true) {
44            console.log(v);
45          } else {
46            return false;
47          }
48        }
49      }
50    };
51
52    //-- set construct in object --//
53    function __construct() {
54      _helper.console.log('<Tracking> init');
55
56      if (String(typeof _configs.driver).toLowerCase() == 'string') {
57        setDriver(_configs.driver);
58      } else {
59        for (var k in _configs.driver) {
60          setDriver(_configs.driver[k]);
61        }
62      }
63    }
64    
65    //-- set private function --//
66    function setDriver(target) {
67      switch (target) {
68        case 'ga':
69          _driver[target] = new SITE.Tracking_GoogleAnalytics({debug: _configs.debug});
70          break;
71
72        case 'gagtag':
73          _driver[target] = new SITE.Tracking_GoogleAnalyticsGtag({debug: _configs.debug});
74          break;
75
76        case 'gtag':
77          _driver[target] = new SITE.Tracking_GoogleTagManager({debug: _configs.debug});
78          break;
79
80        case 'fbpixel':
81          _driver[target] = new SITE.Tracking_Fbpixel({debug: _configs.debug});
82          break;
83      }
84
85      setEvent(target);
86    }
87
88    function setEvent(target) {
89      var _event = function(e) {
90        var $this = $(this),
91            data = $this.data();
92        
93        if ($this.attr('type') == 'submit')
94        {
95          var valided = true,
96              $form = $this.parents('form');
97          
98          if ($form.length > 0 && $form[0].elements.length > 0)
99          {
100            $.each($form[0].elements, function(k, v) {
101              if (v.validity != undefined && ! v.validity.valid) valided = false;
102            });
103          }
104          
105          if (valided === true) startTrack(data, target);
106        }
107        else
108        {
109          startTrack(data, target);
110        }
111
112        return true;
113      };
114
115      // Event register
116      for (var k in _configs.events) {
117        var v = _configs.events[k];
118        
119        switch (v) {
120          case 'load':
121            $(_configs.eventTarget + '[data-tracking-event="load"]').each(_event);
122            break;
123
124          default:
125            $('body').on(v + '.tracking', _configs.eventTarget + '[data-tracking-event="' + v + '"]', _event);
126            break;
127        }
128      }
129    }
130
131    function startTrack(data, target) {
132      switch (target) {
133        case 'ga':
134          if (data.trackingGa != undefined) _driver[target].trackEvent(data.trackingGa.event, data.trackingGa.data);
135          if (data.trackingGaEcommerce != undefined) _driver[target].trackEcommerce(data.trackingGaEcommerce.event, data.trackingGaEcommerce.data);
136          break;
137
138        case 'gagtag':
139          if (data.trackingGagtag != undefined) _driver[target].trackEvent(data.trackingGagtag.event, data.trackingGagtag.data);
140          break;
141
142        case 'gtag':
143          if (data.trackingGtag != undefined) _driver[target].trackEvent(data.trackingGtag);
144          break;
145
146        case 'fbpixel':
147          if (data.trackingFbpixel != undefined) _driver[target].trackEvent(data.trackingFbpixel.event, data.trackingFbpixel.data);
148          break;
149      }
150
151      return true;
152    }
153
154    //-- set public function --//
155    this.startTrack = startTrack;
156    this.setEvent = setEvent;
157
158    var _this = this;
159
160    _configs = $.extend(_configs, configs);
161
162    __construct();
163
164  };
165
166})(SITE);
167/**
168 * SITE.Tracking_Fbpixel
169 * 
170 * @author    CLHOM
171 * @website   http://www.kiiiick.com
172 * @copyright Copyright (C) KiiiiCK Co., All Rights Reserved.
173 */
174
175"use strict";
176
177var SITE = SITE || {};
178
179;(function(SITE) {
180  
181  SITE.Tracking_Fbpixel = function(configs) {
182
183    //-- set public value --//
184    
185
186    //-- set private value --//
187    var _configs = {
188      // selectors
189      
190
191      // jquery object
192      
193
194      // status
195      debug: true
196
197      // hook functions
198      
199    };
200
201    var _helper = {
202      console: {
203        log: function(v){
204          if (_configs.debug === true) {
205            console.log(v);
206          } else {
207            return false;
208          }
209        }
210      },
211
212      fbq: function(t, c, d) {
213        try {
214          _helper.console.log('-- FB Pixel --');
215          _helper.console.log('> ' + t + ': ' + c);
216
217          if (d != undefined) {
218            _helper.console.log('> data: ');
219            _helper.console.log(d);
220            if (_configs.debug === false) fbq(t, c, d);
221          } else {
222            if (_configs.debug === false) fbq(t, c);
223          }
224        } catch (err) {}
225      }
226    };
227
228    //-- set construct in object --//
229    function __construct() {
230      _helper.console.log('<FB Pixel> init');
231    }
232    
233    //-- set private function --//
234    
235
236    //-- set public function --//
237    this.trackEvent = function(c, d) {
238      if (c == undefined) {
239        _helper.console.log('data incomplete!');
240        return;
241      }
242
243      if (d != undefined) {
244        if (!$.isPlainObject(d)) {
245          _helper.console.log('wrong data format!');
246          return;
247        }
248
249        _helper.fbq('track', c, d);
250      } else {
251        _helper.fbq('track', c);
252      }
253    };
254    
255
256    var _this = this;
257
258    _configs = $.extend(_configs, configs);
259
260    __construct();
261
262  };
263
264})(SITE);
265/**
266 * SITE.Tracking_GoogleAnalytics
267 * 
268 * @author    CLHOM
269 * @website   http://www.kiiiick.com
270 * @copyright Copyright (C) KiiiiCK Co., All Rights Reserved.
271 */
272
273"use strict";
274
275var SITE = SITE || {};
276
277;(function(SITE) {
278  
279  
280  SITE.Tracking_GoogleAnalytics = function(configs) {
281
282    //-- set public value --//
283    
284
285    //-- set private value --//
286    var _configs = {
287      // selectors
288      
289
290      // jquery object
291      
292
293      // status
294      debug: true
295
296      // hook functions
297      
298    };
299
300    var _helper = {
301      console: {
302        log: function(v){
303          if (_configs.debug === true) {
304            console.log(v);
305          } else {
306            return false;
307          }
308        }
309      },
310
311      ga: function(t, c, d) {
312        try {
313          _helper.console.log('-- Google Analytics --');
314          _helper.console.log('> ' + t + ': ' + c);
315
316          if (t == 'ecommerce') {
317            if (d != undefined) {
318              _helper.console.log('> data: ');
319              _helper.console.log(d);
320              if (_configs.debug === false) ga(c, d);
321            } else {
322              if (_configs.debug === false) ga(c);
323            }
324          } else {
325            if (d != undefined) {
326              _helper.console.log('> data: ');
327              _helper.console.log(d);
328              if (_configs.debug === false) ga(t, c, d);
329            }
330          }
331        } catch (err) {}
332      }
333    };
334
335    //-- set construct in object --//
336    function __construct() {
337      _helper.console.log('<Google Analytics> init');
338    }
339    
340    //-- set private function --//
341    
342
343    //-- set public function --//
344    this.trackEvent = function(c, d) {
345      if (c == undefined || d == undefined) {
346        _helper.console.log('data incomplete!');
347        return;
348      }
349
350      if (!$.isPlainObject(d)) {
351        _helper.console.log('wrong data format!');
352        return;
353      }
354
355      _helper.ga('send', c, d);
356    };
357
358    this.trackEcommerce = function(c, d) {
359      if (c == undefined) {
360        _helper.console.log('data incomplete!');
361        return;
362      }
363
364      _helper.ga('ecommerce', c, d);
365    }
366    
367
368    var _this = this;
369
370    _configs = $.extend(_configs, configs);
371
372    __construct();
373
374  };
375
376})(SITE);
377/**
378 * SITE.Tracking_GoogleAnalyticsGtag
379 * 
380 * @author    CLHOM
381 * @website   http://www.kiiiick.com
382 * @copyright Copyright (C) KiiiiCK Co., All Rights Reserved.
383 */
384
385"use strict";
386
387var SITE = SITE || {};
388
389;(function(SITE) {
390  
391  
392  SITE.Tracking_GoogleAnalyticsGtag = function(configs) {
393
394    //-- set public value --//
395    
396
397    //-- set private value --//
398    var _configs = {
399      // selectors
400      
401
402      // jquery object
403      
404
405      // status
406      debug: true
407
408      // hook functions
409      
410    };
411
412    var _helper = {
413      console: {
414        log: function(v){
415          if (_configs.debug === true) {
416            console.log(v);
417          } else {
418            return false;
419          }
420        }
421      },
422
423      gtag: function(t, c, d) {
424        try {
425          _helper.console.log('-- Google Analytics Gtag --');
426          _helper.console.log('> ' + t + ': ' + c);
427
428          if (d != undefined) {
429            _helper.console.log('> data: ');
430            _helper.console.log(d);
431            if (_configs.debug === false) gtag(t, c, d);
432          }
433        } catch (err) {}
434      }
435    };
436
437    //-- set construct in object --//
438    function __construct() {
439      _helper.console.log('<Google Analytics Gtag> init');
440    }
441    
442    //-- set private function --//
443    
444
445    //-- set public function --//
446    this.trackEvent = function(c, d) {
447      if (c == undefined || d == undefined) {
448        _helper.console.log('data incomplete!');
449        return;
450      }
451
452      if (!$.isPlainObject(d)) {
453        _helper.console.log('wrong data format!');
454        return;
455      }
456
457      _helper.gtag('event', c, d);
458    };
459    
460
461    var _this = this;
462
463    _configs = $.extend(_configs, configs);
464
465    __construct();
466
467  };
468
469})(SITE);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.