PageSourceSearch

https://www.regal.co.jp/StaffContent/assets/js/staffstart-component-logics.js?20240515_1

js regal.co.jp collected 2026-10-02 02:28:01 UTC 14,286 bytes, 344 lines download raw bytes

1var ecblib = ecblib || {};
2ecblib.staffstart = ecblib.staffstart || {};
3
4(function() {
5  'use strict';
6  const _staffstart = ecblib.staffstart;
7  const maxCount = 120;
8
9  _staffstart.util = {
10    ajaxGet: function(url, params, successFunc, errorFunc) {
11
12      try {
13        if(params['ajax_stop']) { return; }
14        Object.keys(params).forEach(function(i) { if(!params[i]) delete params[i]});
15
16        params.merchant_id = params.merchant_id || ecblib.staffstart.api.merchantId;
17
18        const xhr = new XMLHttpRequest();
19
20        let queryStringArray = [];
21        let count = 0;
22        let offset = 0;
23        let id_name = '';
24        let id_arr = [];
25        Object.keys(params).forEach(
26          function(i) {
27            if(params[i] === false || params[i] === 0 || params[i]) {
28              if(i == ecblib.staffstart.master.user.size.id){
29                queryStringArray.push(encodeURI('user_attributes[][slug]=' + ecblib.staffstart.master.user.size.id + '&user_attributes[][value]=' + params[i]));
30              }else if(i == ecblib.staffstart.master.user.feature.id){
31                queryStringArray.push(encodeURI('user_attributes[][slug]=' + ecblib.staffstart.master.user.feature.id + '&user_attributes[][value]=' + params[i]));
32              }else if(i == ecblib.staffstart.master.user.qualification_1.id){
33                queryStringArray.push(encodeURI('user_attributes[][slug]=' + ecblib.staffstart.master.user.qualification_1.id + '&user_attributes[][value]=' + params[i]));
34              }else if(i == ecblib.staffstart.master.user.qualification_2.id){
35                queryStringArray.push(encodeURI('user_attributes[][slug]=' + ecblib.staffstart.master.user.qualification_2.id + '&user_attributes[][value]=' + params[i]));
36              }else if(i == 'count'){
37                count = params[i];
38                queryStringArray.push(i + '=' +  encodeURI(params[i]));
39              }else if(i == 'offset'){
40                offset = params[i];
41                queryStringArray.push(i + '=' +  encodeURI(params[i]));
42              }else if(i == 'base_product_code'){
43                if(params[i].endsWith('_S')){
44                  queryStringArray.push(i + '=' + encodeURI(params[i]) + ',' + encodeURI(params[i].replace('_S', '')));
45                }else{
46                  queryStringArray.push(i + '=' + encodeURI(params[i]) + ',' + encodeURI(params[i] + '_S'));
47                }
48              }else if(i == 'product_code_array'){
49                var arr = params[i].split(',');
50                var product_code_str = ''
51                arr.forEach((code) => product_code_str += ',' + encodeURI(code));
52                queryStringArray.push('product_code=' +  product_code_str.slice(1));
53              }else if(i == 'cid_array'){
54                id_name = 'cid';
55                id_arr = params[i].map(item => item.cid);
56              }else if(i == 'article_id_array'){
57                id_name = 'article_id';
58                id_arr = params[i].map(item => item.article_id);
59              }else if(i == 'user_id_array'){
60                id_name = 'user_id';
61                id_arr = params[i].map(item => item.user_id);
62              }else{
63                queryStringArray.push(i + '=' +  encodeURI(params[i]));
64              }
65            }
66          }
67        );
68
69        var result = { item: [], total: 0 };
70        execXhr(xhr, url, queryStringArray, successFunc, errorFunc, count, offset, result, id_name, id_arr);
71
72      } catch (err) {
73        if(errorFunc) {
74          errorFunc(err.message);
75        }
76        if(ecblib.staffstart.api.debug) {
77          console.error('データ取得時にエラーが発生しました。:' + err.message);
78          console.error(err);
79        }
80      }
81
82      function execXhr(xhr, url, queryStringArray, successFunc, errorFunc, count, offset, result, id_name, id_arr) {
83        let id_arr_rest = [];
84        queryStringArray = queryStringArray.filter(function(i) { return i.indexOf('count=') != 0 && i.indexOf('offset=') != 0; });
85        queryStringArray.push('count=' + ((count > maxCount) ? maxCount : count));
86        queryStringArray.push('offset=' + offset);
87
88        if(id_name && id_arr){
89          queryStringArray = queryStringArray.filter(query => query.indexOf(id_name + '=') != 0);
90          if(id_arr.length > 50){
91            id_arr_rest = id_arr.slice(50);
92            id_arr = id_arr.slice(0, 50);
93          }
94          queryStringArray.push(id_name + '=' + id_arr.join(','));
95        }
96
97        xhr.open("GET", url + (queryStringArray.length > 0 ? '?' + queryStringArray.join('&') : ''), true);
98        xhr.onreadystatechange = function () {
99          if (xhr.readyState === 4) {
100            if(xhr.status === 200) {
101              const parsed = JSON.parse(xhr.responseText);
102
103              if(parsed.code == -1) {
104                if(errorFunc) {
105                  errorFunc(parsed.message);
106                }
107
108                if(ecblib.staffstart.api.debug) {
109                  console.error('データ取得時にエラーが発生しました。:' + parsed.message);
110                }
111              } else {
112                result.item = result.item.concat(parsed.item);
113                if (count > maxCount) {
114                  execXhr(xhr, url, queryStringArray, successFunc, errorFunc, (count - maxCount), (offset + maxCount), result);
115                }else if(id_arr_rest.length > 0){
116                  execXhr(xhr, url, queryStringArray, successFunc, errorFunc, count, offset, result, id_name, id_arr_rest);
117                }else {
118                  if (successFunc) {
119                    result.total = parsed.total;
120                    successFunc(result);
121                  } 
122                }
123              }
124
125            } else {
126              if(errorFunc) {
127                errorFunc('status=' + xhr.status);
128              }
129              if(ecblib.staffstart.api.debug) {
130                console.error('データ取得時にエラーが発生しました。\nエラーコード:' + xhr.status);
131              }
132            }
133          }
134        };
135
136        xhr.send();
137      }
138    },
139    formatDate: function(date) {
140      if(!date) return '';
141
142      date = new Date(date.replace(/\-/g, "/"));
143
144      const year = date.getFullYear();
145      const month = date.getMonth() + 1;
146      const day = date.getDate();
147
148      let format = 'yyyy-mm-dd';
149
150      format = format.replace(/yyyy/, year);
151      format = format.replace(/mm/, month);
152      format = format.replace(/dd/, day);
153
154      return format;
155    },
156    arrayFind: function(_array, _func) {
157      var val;
158      const isChecked = _array.some(function(i){
159        if(_func(i)) {
160          val = i;
161          return true;
162        }
163      });
164      return val;
165    },
166    arrayFindUrl: function(_array, _func) {
167      var val;
168      const isChecked = _array.some(function(i){
169        if(_func(i)) {
170          val = i;
171          return true;
172        }
173      });
174      return val ? val.url : ecblib.staffstart.uri.sorryImg;
175    },
176    queryParams: function() {
177      const ret = {};
178      let queryString = window.location.search;
179      if(queryString){
180        queryString = queryString.substring(1);
181        queryString.split('&').forEach(function(i) {
182          const pair = i.split('=');
183          const key = decodeURIComponent(pair[0]);
184          const val = decodeURIComponent(pair[1]);
185          ret[key] = val;
186        });
187      }
188      return ret;
189    },
190    initGloalVariables: function(_mobile) {
191      if (_mobile) {
192        ecblib.staffstart.uri.home = ecblib.staffstart._uri_setting.homeSP;
193        ecblib.staffstart.uri.coordinateList = ecblib.staffstart._uri_setting.coordinateListSP;
194        ecblib.staffstart.uri.coordinateDetail = ecblib.staffstart._uri_setting.coordinateDetailSP;
195        ecblib.staffstart.uri.staffList = ecblib.staffstart._uri_setting.staffListSP;
196        ecblib.staffstart.uri.staffDetail = ecblib.staffstart._uri_setting.staffDetailSP;
197        ecblib.staffstart.uri.shopList = ecblib.staffstart._uri_setting.shopListSP;
198        ecblib.staffstart.uri.shopDetail = ecblib.staffstart._uri_setting.shopDetailSP;
199        ecblib.staffstart.uri.articleList = ecblib.staffstart._uri_setting.articleListSP;
200        ecblib.staffstart.uri.articleDetail = ecblib.staffstart._uri_setting.articleDetailSP;
201        ecblib.staffstart.uri.staffreviewList = ecblib.staffstart._uri_setting.staffreviewListSP;
202        ecblib.staffstart.uri.staffreviewDetail = ecblib.staffstart._uri_setting.staffreviewDetailSP;
203      }
204
205    },
206    yearsoldToAge: function(_yearsold) {
207      if (!_yearsold) return '';
208      const yearsold = Number(_yearsold);
209      if (yearsold == NaN) return '';
210      const ages = ecblib.staffstart.master.ages.items;
211      for(var i = 0; i < ages.length; i++) {
212        if(ages[i].age.min && ages[i].age.min > yearsold) continue;
213        if(ages[i].age.max && ages[i].age.max < yearsold) continue;
214        return ages[i].name;
215      }
216      return '';
217    },
218    pushHistoryPageIndex: function(pageindexKey, searchCondition) {
219      const url = new URL(location.href);
220      const pageindex = searchCondition[pageindexKey];
221      const sortType = searchCondition['sort'];
222
223      if (pageindex) url.searchParams.set(pageindexKey, pageindex);
224      if (sortType) url.searchParams.set('sort', sortType);
225      history.pushState(null, null, url.toString());
226    },
227    setCanonical: function() {
228      const params = this.queryParams();
229      const ss_pageindex = Object.keys(params).filter(function(i) { return i.indexOf('ss_pageindex') == 0; });
230      if (ss_pageindex.length === 0) return;
231
232      const head = document.head;
233      const canonical = head.querySelector('link[rel="canonical"]');
234      
235      const url = new URL(location.href);
236      ss_pageindex.forEach(function(i) { url.searchParams.delete(i); });
237      
238      if (!canonical) {
239        head.insertAdjacentHTML('afterBegin', '<link rel="canonical" href="' + url.toString() + '">');
240      }
241    },
242    StaffStart_RegistBookmark: async function(e, bookmarkid) {
243      let originalText;
244      let loadStart = function(elem) {
245          originalText = jQuery(elem).html();
246          jQuery(elem).html('<i class="js-animation-bookmark-in-progress fa fa-spinner fa-pulse fa-fw"></i><span class="sr-only">お待ちください...</span></a>');
247          return elem;
248      };
249      let loadEnd = async function(elem, iserror, msg) {
250          if (!iserror) {
251              await eclib.ui.showToolTip(jQuery(".js-animation-bookmark-in-progress"), { tooltip : msg, diptimeSec : 2 });
252              await new Promise(function(resolve){ setTimeout(function() {
253                return resolve();
254              }, 2400)});
255              jQuery(elem).html(originalText);
256              return;
257          } else {
258              await jQuery(elem).html(originalText);
259          }
260      };
261      if (!jQuery(e).length) {
262          return false;
263      }
264      let type = jQuery(e).attr("data-type");
265      let code = jQuery(e).attr("data-code");
266      let o = loadStart(e);
267      try {
268        const regResult = await jQuery.ajax({
269            async: false,
270            type: "POST",
271            url: EC_WWW_ROOT + "/shop/customer/ss_registbookmarkajax.aspx",
272            data: {
273                "type": type,
274                "code": code,
275                "crsirefo_hidden": jQuery("[name='crsirefo_hidden']").val(),
276                "bookmarkid": bookmarkid,
277            },
278            cache: false,
279            ifModified: false,
280            dataType: "json",
281        });
282        await new Promise(function(resolve){ setTimeout(function() {
283            return resolve();
284        }, 400)});
285        await loadEnd(o, false, regResult.message);
286        return regResult;
287      } catch (error) {
288        await loadEnd(o, true);
289        alert("セッションの有効期間がきれました。\n" + "誠に恐れ入りますが再度トップページよりのアクセスをお願いいたします。\n\n" + "※当サイトではお客様の情報保護のため、一定時間経過後に接続情報を解除させていただいております。");
290        return { "result": false };
291      }
292    },
293    StaffStart_GetBookmark: async function(type, code) {
294      if (!code) { return 0; }
295      try {
296        const result = await jQuery.ajax({
297          async: true,
298          type: "POST",
299          url: EC_WWW_ROOT + "/shop/customer/ss_getbookmarkajax.aspx",
300          data: {
301              "type": type,
302              "code": code,
303              "crsirefo_hidden": jQuery("[name='crsirefo_hidden']").val(),
304          },
305          cache: false,
306          dataType: "json"
307        });
308        if(result) { 
309          return Number(result); 
310        } else {
311          return 0;
312        }
313      } catch (error) {
314        return 0;
315      }
316    },
317    StaffStart_DeleteBookmark: async function(e){
318      let type = jQuery(e).attr("data-type");
319      let code = jQuery(e).attr("data-code");
320      let bookmarkid = jQuery(e).attr("data-bookmarkid");
321      try {
322        const regResult = await jQuery.ajax({
323            async: false,
324            type: "POST",
325            url: EC_WWW_ROOT + "/shop/customer/ss_registbookmarkajax.aspx",
326            data: {
327                "type": type,
328                "code": code,
329                "crsirefo_hidden": jQuery("#crsirefo_hidden").val(),
330                "bookmarkid": bookmarkid,
331            },
332            cache: false,
333            ifModified: false,
334            dataType: "json",
335        });
336        return regResult;
337      } catch (error) {
338        alert("セッションの有効期間がきれました。\n" + "誠に恐れ入りますが再度トップページよりのアクセスをお願いいたします。\n\n" + "※当サイトではお客様の情報保護のため、一定時間経過後に接続情報を解除させていただいております。");
339        return { "result": false };
340      }
341    }
342  };
343})();
344

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.