PageSourceSearch

https://www.familycare.org.tw/sites/all/modules/civicrm/js/insights.js?v1563555&tluypj

js familycare.org.tw collected 2026-09-24 20:15:22 UTC 7,138 bytes, 210 lines download raw bytes

1"use strict";
2(function() {
3
4function loadScript(url, callback){
5  let script = document.createElement("script");
6  script.type = "text/javascript";
7
8  if (script.readyState){  //IE
9    script.onreadystatechange = function(){
10      if (script.readyState == "loaded" ||
11        script.readyState == "complete"){
12        script.onreadystatechange = null;
13        callback();
14      }
15    };
16  }
17  else {  //Others
18    script.onload = function(){
19      callback();
20    };
21  }
22
23  script.src = url;
24  document.getElementsByTagName("body")[0].appendChild(script);
25}
26
27function getHostNameFromUrl(url) {
28  // <summary>Parses the domain/host from a given url.</summary>
29  let a = document.createElement("a");
30  a.href = url;
31  // Handle chrome which will default to domain where script is called from if invalid
32  return url.indexOf(a.hostname) != -1 ? a.hostname : '';
33}
34
35function loadReferrer() {
36  let dateTime = Date.now();
37  let timestamp = Math.floor(dateTime / 1000);
38  let referrerInfo = localStorage.getItem('referrerInfo');
39  if (referrerInfo) {
40    referrerInfo = JSON.parse(referrerInfo);
41  }
42
43  // use 30mins time to check if this is same session.
44  if (referrerInfo && typeof referrerInfo.timestamp !== 'undefined' && timestamp - referrerInfo.timestamp < 1800) {
45    // check if campaign exists
46    let url = window.location.href;
47    let referrer = '';
48    if (typeof document.referrer !== 'undefined') {
49      referrer = document.referrer;
50    }
51    inbound.referrer.parse(url, referrer, function(err, visitInfo){
52      if (typeof visitInfo.campaign !== 'undefined' && typeof referrerInfo.campaign === 'undefined') {
53        referrerInfo.campaign = visitInfo.campaign;
54      }
55      referrerInfo.timestamp = timestamp;
56      localStorage.setItem('referrerInfo', JSON.stringify(referrerInfo));
57      trackVisit(referrerInfo);
58    });
59  }
60  // someone visit this site over 30mins, it's a new visit anyway
61  else {
62    localStorage.removeItem('referrerInfo');
63    let url = window.location.href;
64    let referrer = '';
65    if (typeof document.referrer !== 'undefined') {
66      referrer = document.referrer;
67    }
68    inbound.referrer.parse(url, referrer, function (err, visitInfo) {
69      visitInfo.landing = location.href.replace(location.origin, '');
70      visitInfo.timestamp = timestamp;
71      // set to localStorage because we need to make sure same browser with different tab has same referrer result.
72      localStorage.setItem('referrerInfo', JSON.stringify(visitInfo));
73      trackVisit(visitInfo);
74    });
75  }
76
77  // remove unused params
78  let queue_id = location.search.match(/civimail_x_q=(\d+)/);
79  let url_id = location.search.match(/civimail_x_u=(\d+)/);
80  if (queue_id && url_id) {
81    if (typeof URLSearchParams === 'function') {
82      let searchParams = new URLSearchParams(window.location.search);
83      searchParams.delete("civimail_x_q");
84      searchParams.delete("civimail_x_u");
85      let newQuery = '';
86      if (searchParams.toString() === '') {
87        newQuery = '';
88      }
89      else {
90        newQuery = '?'+searchParams.toString();
91      }
92      let newUrl = window.location.origin+window.location.pathname+newQuery;
93      window.history.replaceState({}, null, newUrl);
94    }
95  }
96}
97
98function trackVisit(visitInfo) {
99  let object = {};
100  if (location.href.match(/civicrm\/event\/(register|info)/)) {
101    object['page_type'] = 'civicrm_event';
102  }
103  else if (location.href.match(/civicrm\/contribute\/transact/)) {
104    object['page_type'] = 'civicrm_contribution_page';
105  }
106  else if (location.href.match(/civicrm\/profile\/create/)) {
107    object['page_type'] = 'civicrm_uf_group';
108  }
109  let page_id = location.search.match(/id=(\d+)/);
110  if (page_id) {
111    object['page_id'] = page_id[1];
112  }
113  if (!object['page_type'] || !object['page_id']) {
114    return;
115  }
116
117  // prepare
118  object['landing'] = visitInfo.landing ? visitInfo.landing : '';
119  object['referrer_type'] = visitInfo.referrer.type;
120  object['referrer_network'] = '';
121  object['referrer_url'] = '';
122  // detect if from civimail mailing list
123  let queue_id = location.search.match(/civimail_x_q=(\d+)/);
124  let url_id = location.search.match(/civimail_x_u=(\d+)/);
125  if (queue_id && url_id) {
126    object['referrer_type'] = 'email';
127    object['referrer_network'] = 'civimail';
128    object['referrer_url'] = 'external/url.php?qid='+queue_id[1]+'&u='+url_id[1];
129    if (typeof URLSearchParams === 'function') {
130      let searchParams = new URLSearchParams(window.location.search);
131      searchParams.delete("civimail_x_q");
132      searchParams.delete("civimail_x_u");
133      let newQuery = '?'+searchParams.toString();
134      let newUrl = window.location.origin+window.location.pathname+newQuery;
135      window.history.replaceState({}, null, newUrl);
136    }
137  }
138  switch(object['referrer_type']){
139    case 'ad':
140      object['referrer_network'] = visitInfo.referrer.network;
141      break;
142    case 'direct':
143      object['referrer_network'] = '';
144      break;
145    case 'email':
146      if (typeof visitInfo.referrer.client !== 'undefined' && visitInfo.referrer.client !== 'unknown') {
147        object['referrer_network'] = visitInfo.referrer.client;
148      }
149      break;
150    case 'internal':
151      object['referrer_network'] = '';
152      break;
153    case 'link':
154      object['referrer_network'] = getHostNameFromUrl(visitInfo.referrer.from);
155      if (typeof visitInfo.referrer.from !== 'undefined') {
156        object['referrer_url'] = visitInfo.referrer.from;
157      }
158      break;
159    case 'local':
160      object['referrer_network'] = visitInfo.referrer.site;
161      break;
162    case 'search':
163      object['referrer_network'] = visitInfo.referrer.engine;
164      break;
165    case 'social':
166      object['referrer_network'] = visitInfo.referrer.network;
167      break;
168    default:
169      object['referrer_type'] = 'unknown';
170      object['referrer_network'] = '';
171      break;
172  }
173  if (typeof visitInfo.campaign !== 'undefined') {
174    for(let utmKey in visitInfo.campaign) {
175      object[utmKey] = visitInfo.campaign[utmKey];
176    }
177  }
178  if (typeof navigator.doNotTrack === 'string' && navigator.doNotTrack == '1') {
179    object['referrer_type'] = 'unknown';
180    object['referrer_network'] = '';
181    object['referrer_url'] = '';
182  }
183
184  const url = '/civicrm/ajax/track';
185  const data = 'data='+encodeURIComponent(JSON.stringify(object));
186  fetch(url, {
187    method: "POST",
188    headers: {
189      'Content-type': 'application/x-www-form-urlencoded; charset=UTF-8'
190    },
191    body: data
192  });
193}
194
195;
196if (typeof document.currentScript === 'object' && typeof document.currentScript.src === 'string') {
197  let inboundSrc = document.currentScript.src;
198  inboundSrc = inboundSrc.replace('insights.js', 'inbound.js');
199  loadScript(inboundSrc, function(){ loadReferrer(); });
200}
201else if (typeof Drupal !== 'undefined' && typeof Drupal.settings !== 'undefined') {
202  let inboundSrc = Drupal.settings.civicrm.resourceBase+'js/inbound.js';
203  loadScript(inboundSrc, function(){ loadReferrer(); });
204}
205else if (typeof drupalSettings !== 'undefined') {
206  let inboundSrc = drupalSettings.civicrm.resourceBase+'js/inbound.js';
207  loadScript(inboundSrc, function(){ loadReferrer(); });
208}
209
210})();

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.