PageSourceSearch

https://www.gressive.jp/themes/custom/gressive_theme/js/ad/all.js?v=1

js gressive.jp collected 2026-10-02 04:55:26 UTC 35,104 bytes, 786 lines download raw bytes

1$(document).ready(function () {
2  limittime = (new Date).getTime() + 60000; // 現在時刻 +10秒までリトライ
3  
4  var $main_area = $('article.main_contents div.banner_half');  // ページ上main_contents内の広告枠とその枠数
5  var $side_area = $('div.side_area');  // サイド領域広告整形済みHTML
6  var $yoshida_area = $('article.main_contents div.yoshida_ads');  // ページ上main_contents内のヨシダ専用枠とその枠数
7
8  if (drupalSettings.ad.premium) { // ページに紐付いた店舗がプレミアムプランならば広告を表示しない
9    $main_area.each(function (i, elem) { // main_contents
10      if ($(elem).children().length === 0) {
11        $(elem).remove();
12      }
13    });
14    $('div.interstitial').remove(); // インタースティシャル広告領域
15    $('div.sp-footer-banners').remove(); // スマートフォン限定バナー領域
16    return;
17  }
18
19  // 1.$.ajaxメソッドで通信を行います。
20  $.ajax({
21
22    url: '/themes/custom/gressive_theme/data/json/ad-all.json?' + Math.random(), // 通信先のURL
23    type: 'GET', // 使用するHTTPメソッド (GET/ POST)
24    dataType: 'json', // 応答のデータの種類 
25    // (xml/html/script/json/jsonp/text)
26    timeout: 10000, // 通信のタイムアウトの設定(ミリ秒)
27    cache: false // キャッシュ無効
28
29  // 2. doneは、通信に成功した時に実行される
30  //  引数のapi_dataは、通信で取得したデータ
31  //  引数のtextStatusは、通信結果のステータス
32  //  引数のjqXHRは、XMLHttpRequestオブジェクト
33  }).done(function (api_data, textStatus, jqXHR) {
34
35    var page_setting = {};  // ページに設定された有効な種類ごとのターム
36    var all_terms  = [];  // タームIDを1つにまとめた配列
37    var random_ads = [];  // 一覧データ
38    var insNids    = [];  // 挿入済み広告ID
39  
40    // ページ設定の有効なキーを一覧にする。キーの順序が優先順位となる
41    if (null !== drupalSettings.ad.brand && 0 !== drupalSettings.ad.brand.length) {
42      page_setting.brand = drupalSettings.ad.brand;
43      Array.prototype.push.apply(all_terms, drupalSettings.ad.brand);
44    }
45    if (null !== drupalSettings.ad.area && 0 !== drupalSettings.ad.area.length) {
46      page_setting.area = drupalSettings.ad.area;
47      Array.prototype.push.apply(all_terms, drupalSettings.ad.area);
48    }
49    if (null !== drupalSettings.ad.shops && 0 !== drupalSettings.ad.shops.length) {
50      page_setting.tenpo = drupalSettings.ad.shops;
51      Array.prototype.push.apply(all_terms, drupalSettings.ad.shops);
52    }
53    if (null !== drupalSettings.ad.tags && 0 !== drupalSettings.ad.tags.length) {
54      page_setting.tags = drupalSettings.ad.tags;
55      Array.prototype.push.apply(all_terms, drupalSettings.ad.tags);
56    } //console.log(JSON.stringify(page_setting));
57
58    // 重み付きランダムソート
59    var return_ads = new WeightedList(api_data);
60        random_ads = return_ads.peek(return_ads.length);
61
62    /*
63     * サイドバーにバナーを出力する
64     * 
65     * @param {number} size_term      バナーサイズのタームID
66     * @param {number} max_count      バナー表示数
67     * @param {string} img_property   JSONの画像プロパティ(語尾の_pathや_altを含まない)
68     * @param {string} class_name     バナーを囲むdivのクラス名
69     * @param {string} event_category gtagのevent_category
70     * @returns {undefined}
71     */
72    function side_banner_render(size_term, max_count, img_property, class_name, event_category) { //var side_test = {};
73
74      // ブランドの優先並び替え対応
75      var side_list = {};
76	  if (page_setting.hasOwnProperty('brand')) {
77        side_list.brand = [];
78      }
79      side_list.other = [];
80
81      // 表示するリストを取得する
82      var count = 0;
83      for (var i = 0, len = random_ads.length; i < len; i++) {
84        var value = random_ads[i].data[0];
85
86        //  サイズのタームIDで絞込み             店舗が設定された広告は除外   除外タグに引っかかるものは除外
87        if (String(value.field_ad_menu) != size_term || String(value.field_tenpo) != '' || 0 !== String(value.field_exc_tags).splitAndSearch(',', all_terms)) {
88          continue;
89        }
90
91        // 画像パスが存在しない場合は取得しない
92        if (! value.hasOwnProperty(img_property + '_path') || '' === value[img_property + '_path']) {
93          continue;
94        }
95
96        // ブランドの絞込みに引っかかった場合は優先する
97        if (page_setting.hasOwnProperty('brand') && 0 !== String(value.field_ad_brand).splitAndSearch(',', page_setting.brand)) {
98          side_list.brand.push(value);
99        } else {
100          side_list.other.push(value);
101        }
102
103        // 最大出力数を確認
104        count++;
105        if (null !== max_count && count >= max_count) {
106          break;
107        }
108      }
109
110      // 出力する
111      for (var key in side_list) { //side_test[key] = '';
112        for (var i = 0, len = side_list[key].length; i < len; i++) {
113          var value = side_list[key][i]; //side_test[key] += value.nid + ',';
114          var alt   = (value.hasOwnProperty(img_property + '_alt') && '' != value[img_property + '_alt']) ? value[img_property + '_alt'] : value.title;
115          $side_area.append(
116            $('<div />').addClass(class_name + ' official').append(
117              $('<a />').addClass('hover-line').attr('href', value.field_ad_url).attr('target', 1 === value.field_target ? '_self' : '_blank').append(
118                $('<img />').attr('src', 'data:image/gif;base64,R0lGODlhAQABAGAAACH5BAEKAP8ALAAAAAABAAEAAAgEAP8FBAA7').attr('data-src', value[img_property + '_path']).addClass('lazyload').attr('alt', alt)
119              )
120            )
121          );
122          // 広告インプレッション計測用1px画像挿入
123          $('div.main_inner').prepend(
124            $('<img />').addClass('impimg').attr('src', 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7').attr('alt', alt)
125          );
126  
127          insNids.push(value.nid);
128        }
129      } //console.log(JSON.stringify(side_test));
130    }
131
132    /**
133     * サイド領域広告挿入
134     */
135    if (0 !== $side_area.length) {
136      side_banner_render(38,    1, 'field_side_w_image_1',       'banner_large pc',       'rectangle_w_banner'   ); // サイドバナー:Wサイズ(タームID:38)
137      side_banner_render(38,    1, 'field_side_w_image_2',       'banner_large sp',       'rectangle_w_banner'   ); // サイドバナー:Wサイズ(タームID:38)
138      side_banner_render(36, null, 'field_rectangle_image',      'banner_regular pc',     'rectangle_banner'     ); // レクタングルバナー(タームID:36)
139      side_banner_render(37, null, 'field_rectangle_half_image', 'banner_half pc',        'rectangle_half_banner'); // レクタングルバナー:ハーフサイズ:10個まで
140      $side_area.children().each(function() {
141        var $this = $(this);
142        if (! $this.hasClass('banner_large') && ! $this.hasClass('banner_regular') && ! $this.hasClass('banner_half')) {
143          $side_area.children().last().after($this);
144        }
145      });
146    }
147
148    // メインバナー領域の表示数確認用配列を用意する
149    var filled = [];
150    for (var i = 0, len = $main_area.length; i < len; i++) {
151      filled.push(0);
152    }
153
154    /*
155     * メインカラムのバナーの表示リストをリセットする
156     */
157    var main_list = {};
158    function reset_main_list() {
159      main_list = {};
160      if (page_setting.hasOwnProperty('brand')) {
161        main_list.side_brand = [];
162      }
163      main_list.side_other = [];
164      main_list.maker = [];
165      main_list.all = [];
166      for (var key in page_setting) {
167        main_list[key] = [];
168      }
169      main_list.other = [];
170    }
171
172    /*
173     * メインカラムに表示するバナーを一覧にする
174     * 
175     * @param {number} size_term バナーサイズのタームID
176     * @returns {undefined}
177     */
178    function get_main_banners(size_term) {
179      for (var i = 0, len = random_ads.length; i < len; i++) {
180        var value   = random_ads[i].data[0];
181        var all_hit = 0;
182        var hit_max = 0;
183        var hit_key = 'other';
184
185        //  サイズのタームIDで絞込み             除外タグに引っかかるものは除外                              サイドで表示済みのものは除外
186        if (String(value.field_ad_menu) != size_term || 0 !== String(value.field_exc_tags).splitAndSearch(',', all_terms) || -1 !== insNids.indexOf(value.nid)) {
187          continue;
188        }
189
190        // メーカーバナーは優先する
191        if ('' === value.field_tenpo) {
192          if (page_setting.hasOwnProperty('brand') && 0 !== String(value.field_ad_brand).splitAndSearch(',', page_setting.brand)) {  // ブランドの絞込みに引っかかった場合は優先する
193            main_list.side_brand.push(value);
194          } else {
195            main_list.side_other.push(value);
196          }
197          main_list.maker.push(value);
198          continue;
199        }
200
201        // どの設定で抽出されたかを決定する
202        for (var key in page_setting) {
203
204          if (0 !== String(value['field_ad_' + key]).splitAndSearch(',', page_setting[key])) {
205            if ('other' === hit_key) {
206              hit_key = key;
207            }
208            all_hit++;
209          }
210          hit_max++;
211        }
212
213        // 全ての条件で抽出された場合はall
214        if (0 !== hit_max && all_hit === hit_max) {
215          hit_key = 'all';
216        }
217
218        // リストに追加
219        main_list[hit_key].push(value);
220      }
221    }
222
223    /*
224     * 一覧にしたメインバナーのリストを表示する
225     */
226    function main_banner_render() { //var test = {};
227
228      // レクタングル(36)とハーフサイズ(37)の違いをまとめる
229      var size_param = {
230        36: { weight: 2, img_path: 'field_rectangle_image_path',      img_alt: 'field_rectangle_image_alt',      class: 'regular', event: 'rectangle_banner'      },
231        37: { weight: 1, img_path: 'field_rectangle_half_image_path', img_alt: 'field_rectangle_half_image_alt', 
231class: 'half',    event: 'rectangle_half_banner' }
232      };
233
234      // 優先順位の高いものから表示
235      for (var key in main_list) { //test[key] = '';
236        for (var i = 0, len = main_list[key].length; i < len; i++) {
237          var value = main_list[key][i];
238          var size  = Number(value.field_ad_menu);
239
240          // 有効なサイズか確認                       画像のパスが空ではないか確認する
241          if (! size_param.hasOwnProperty(size) || '' === value[size_param[size].img_path]) {
242            continue;
243          }
244
245          // 表示領域を確認し、空きがあれば表示する
246          for (var j = 0, leng = $main_area.length; j < leng; j++) {
247            if (filled[j] + size_param[size].weight <= 4) {
248
249              // 1つ目を表示する前にulタグを生成
250              if (0 === filled[j]) {
251                $($main_area[j]).append($('<ul />'));
252              }
253
254              // バナー要素を取得
255              var $banner = get_main_banner_html(value, size_param[size].img_path, size_param[size].img_alt, size_param[size].class, size_param[size].event);
256              if (null !== $banner) {
257
258                // 表示処理 レクタングルバナーを表示するときに、既にハーフバナーがある場合は、レクタングルバナーを先に出す
259                if (36 === size && 0 !== $($main_area[j]).find('.' + size_param[37].class).length) {
260                  $($main_area[j]).children('ul').prepend($banner);
261                } else {
262                  $($main_area[j]).children('ul').append($banner);
263                }
264                
265                // 広告インプレッション計測用1px画像挿入
266                var alt = (value.hasOwnProperty(size_param[size].img_alt) && '' != value[size_param[size].img_alt]) ? value[size_param[size].img_alt] : value.title;
267                $('div.main_inner').prepend(
268                  $('<img />').addClass('impimg').attr('src', 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7').attr('alt', alt)
269                );
270
271                // 表示後の処理
272                filled[j] += size_param[size].weight;
273                insNids.push(value.nid); //test[key] += value.nid + ',';
274              }
275              break;
276            }
277          }
278        }
279      } //console.log(test);
280    }
281
282    /*
283     * メインカラムのバナー要素を生成する
284     * 
285     * @param {object} value          バナーデータ
286     * @param {string} img_property   JSONの画像プロパティ(語尾の_pathや_altを含まない)
287     * @param {string} class_name     バナーを囲むdivのクラス名
288     * @param {string} event_category gtagのevent_category
289     * @returns {jQuery}
290     */
291    function get_main_banner_html(value, img_path, img_alt, class_name, event_category) {
292      if (! value.hasOwnProperty(img_path) || '' === value[img_path]) {
293        return null;
294      }
295      var alt = (value.hasOwnProperty(img_alt) && '' != value[img_alt]) ? value[img_alt] : value.title;
296      return $('<li />').addClass(class_name).append(
297        $('<a />').attr('href', value.field_ad_url).addClass('hover-line').attr('target', 1 == value.field_target ? '_self' : '_blank').append(
298          $('<img />').attr('src', value[img_path]).attr('alt', alt)
299        )
300      );
301    }
302
303    /**
304     * メイン領域広告挿入
305     * 「枠消費数」
306     * 1つの領域に最大4枠
307     * レクタングルバナー:2枠消費
308     * ハーフサイズ:1枠消費
309     */
310    if (0 !== $main_area.length) {
311
312      // レクタングルバナー(タームID:36)
313      reset_main_list();
314      get_main_banners(36);
315      main_banner_render();
316
317      // レクタングルバナー:ハーフサイズ(タームID:37)
318      reset_main_list();
319      get_main_banners(37);
320      main_banner_render();
321    }
322    
323    
324    // ヨシダ専用枠領域の表示数確認用配列を用意する
325    filled = [];
326    for (var i = 0, len = $yoshida_area.length; i < len; i++) {
327      filled.push(0);
328    }
329
330    /*
331     * 一覧にしたヨシダ専用枠バナーのリストを表示する
332     */
333    function yoshida_banner_render() {
334
335      var size_param = {
336        743: { weight: 1, img_path: 'field_yoshida_ad_image_path', img_alt: 'field_yoshida_ad_image_alt', 
336class: 'regular', event: 'yoshida_ad_banner' }
337      };
338
339      // 優先順位の高いものから表示
340      for (var key in main_list) {
341        for (var i = 0, len = main_list[key].length; i < len; i++) {
342          var value = main_list[key][i];
343          var size  = Number(value.field_ad_menu);
344
345          // 有効なサイズか確認                       画像のパスが空ではないか確認する
346          if (! size_param.hasOwnProperty(size) || '' === value[size_param[size].img_path]) {
347            continue;
348          }
349          
350          // 広告管理でブランドの設定がされており、かつブランドの絞込みにヒットしなかった場合は表示しない
351          if (page_setting.hasOwnProperty('brand') && String(value.field_ad_brand) != '' && 0 === String(value.field_ad_brand).splitAndSearch(',', page_setting.brand)) {
352            continue;
353          }
354
355          // 表示領域を確認し、空きがあれば表示する
356          for (var j = 0, leng = $yoshida_area.length; j < leng; j++) {
357            if (filled[j] + size_param[size].weight <= 2) {
358
359              // バナー要素を取得
360              var $banner = get_main_banner_html(value, size_param[size].img_path, size_param[size].img_alt, size_param[size].class, size_param[size].event);
361              if (null !== $banner && insNids.indexOf(value.nid) == -1) {
362                
363                $($yoshida_area[j]).children('ul').append($banner);
364                
365                // 広告インプレッション計測用1px画像挿入
366                var alt = (value.hasOwnProperty(size_param[size].img_alt) && '' != value[size_param[size].img_alt]) ? value[size_param[size].img_alt] : value.title;
367                $('div.main_inner').prepend(
368                  $('<img />').addClass('impimg').attr('src', 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7').attr('alt', alt)
369                );
370
371                // 表示後の処理
372                filled[j] += size_param[size].weight;
373                insNids.push(value.nid); //test[key] += value.nid + ',';
374              }
375              break;
376            }
377          }
378        }
379      } //console.log(test);
380    }
381
382    /**
383     * ヨシダ専用枠広告挿入
384     * 「枠消費数」
385     * 1つの領域に最大2枠
386     */
387    if (0 !== $yoshida_area.length) {
388
389      // ヨシダ専用枠(タームID:743)
390      reset_main_list();
391      get_main_banners(743);
392      yoshida_banner_render();
393
394    }
395    
396    /**
397     * テキスト広告挿入
398     */
399    if ('gmc' !== drupalSettings.ad.content) { // ショップフェア情報関連ページは表示しない
400      for (var i = 0, len = random_ads.length; i < len; i++) {
401        var value = random_ads[i].data[0];
402         //  サイズのタームIDで絞込み
403        if (value.field_ad_menu != 42) {
404          continue;
405        }
406        // テキストが存在する場合、出力する
407        if (value.hasOwnProperty('field_text_ad_text') && '' != value.field_text_ad_text) {
408          $('header').after(
409            $('<div />').addClass('text_ad').append(
410              $('<a />').attr('href', value.field_ad_url).attr('target', value.field_target == 1 ? '_self' : '_blank').text('[PR] ' + value.field_text_ad_text)
411            )
412          );
413          break;
414        }
415      }
416    }
417
418    // サイド領域広告のWサイズを複製してスライダー化
419    var side_area_large = $side_area.clone().children('div.banner_large.sp');
420    if (0 !== side_area_large.length) {
421      side_area_large = side_area_large.each(function() {
422        return $(this).removeClass();
423      });
424      $main_insert_large = $('<div />').addClass('banner_regular official sp').append(
425        $('<div />').addClass('slides').append(
426          side_area_large
427        )
428      );
429      $side_area.children('div.banner_large.sp').last().after($main_insert_large);
430      $side_area.children('div.banner_large.sp').remove();
431      // メイン領域広告が存在する場合、スマホ表示時にトップスライドバナー前に移動
432      if (0 !== $main_area.length) {
433        $main_insert_large.insertAfter('header');
434      }
435      $main_insert_large.children('div.slides').bxSlider({
436        mode          : 'fade',
437        auto          : true,
438        speed         : 1000,
439        pause         : 60000,
440        responsive    : true,
441        slideMargin   : 0,
442        minSlides     : 1,
443        maxSlides     : 1,
444        moveSlides    : 1,
445        pager         : false,
446        controls      : false,
447        slideWidth    : 300,
448        adaptiveHeight: true
449      });
450    }
451    
452    // サイド領域広告のレギュラーサイズを複製してスライダー化
453    var side_area_regular = $side_area.clone().children('div.banner_regular');
454    if (0 !== side_area_regular.length) {
455      side_area_regular = side_area_regular.each(function() {
456        return $(this).removeClass();
457      });
458      $main_insert_regular = $('<div />').addClass('banner_regular official sp').append(
459        $('<div />').addClass('slides').append(
460          side_area_regular
461        )
462      );
463      $side_area.children('div.banner_regular').last().after($main_insert_regular);
464      // メイン領域広告が存在する場合、スマホ表示用サイド領域広告をメイン領域広告1番目の前に移動
465      if ($main_area.eq(0)) {
466        $main_insert_regular.insertBefore($main_area.eq(0));
467      }
468      $main_insert_regular.children('div.slides').bxSlider({
469        mode          : 'fade',
470        auto          : true,
471        speed         : 1000,
472        pause         : 5000,
473        responsive    : true,
474        slideMargin   : 0,
475        minSlides     : 1,
476        maxSlides     : 1,
477        moveSlides    : 1,
478        pager         : false,
479        controls      : false,
480        slideWidth    : 300,
481        adaptiveHeight: true
482      });
483    }
484    
485    // サイド領域広告のハーフサイズを複製してスライダー化
486    var side_area_half = $side_area.clone().children('div.banner_half');
487    if (0 !== side_area_half.length) {
488      side_area_half = side_area_half.each(function() {
489        return $(this).removeClass();
490      });
491      $main_insert_half = $('<div />').addClass('banner_half official sp').append(
492        $('<div />').addClass('slides').append(
493          side_area_half
494        )
495      );
496      $side_area.children('div.banner_half').last().after($main_insert_half);
497      // メイン領域広告が存在する場合、スマホ表示用サイド領域広告をメイン領域広告2番目の前に移動
498      if ($main_area.eq(1)) {
499        $main_insert_half.insertBefore($main_area.eq(1));
500      }
501      $main_insert_half.children('div.slides').bxSlider({
502        mode          : 'fade',
503        auto          : true,
504        speed         : 1000,
505        pause         : 5000,
506        responsive    : true,
507        slideMargin   : 0,
508        minSlides     : 1,
509        maxSlides     : 1,
510        moveSlides    : 1,
511        pager         : false,
512        controls      : false,
513        slideWidth    : 300,
514        adaptiveHeight: true
515      });
516    }
517    
518    // ヨシダ専用枠をスマホ用に複製してスライダー化
519    $('div.yoshida_ads').each(function(index, elem) { // メイン領域に挿入
520      var $clone = $(this).clone();
521      $clone.addClass('sp').children('ul').addClass('slides');
522      // メイン領域広告n+2番目以降が存在する場合、移動してきたサイド領域広告以外の既存広告n番目から全てをn+2番目以降にずらしていく
523      // メイン領域広告n+2番目以降が存在しない場合、移動してきたサイド領域広告以外の既存広告n番目から全てを最下部に全て移動していく
524      if (0 !== $main_area.eq(index + 2).length) {
525        $clone.insertBefore($main_area.eq(index + 2));
526      } else {
527        $clone.appendTo($side_area);
528      }
529      $clone.children('ul').bxSlider({
530        mode          : 'fade',
531        auto          : true,
532        speed         : 1000,
533        pause         : 5000,
534        responsive    : true,
535        slideMargin   : 0,
536        minSlides     : 1,
537        maxSlides     : 1,
538        moveSlides    : 1,
539        pager         : false,
540        controls      : false,
541        slideWidth    : 300,
542        adaptiveHeight: true
543      });
544      $(this).addClass('pc');
545    });
546    
547    // メイン領域広告をスマホ用に複製してスライダー化
548    $main_area.each(function(index, elem) { // メイン領域に挿入
549      var $clone = $(this).clone();
550      $clone.addClass('sp').children('ul').addClass('slides');
551      // メイン領域広告n+2番目以降が存在する場合、移動してきたサイド領域広告以外の既存広告n番目から全てをn+2番目以降にずらしていく
552      // メイン領域広告n+2番目以降が存在しない場合、移動してきたサイド領域広告以外の既存広告n番目から全てを最下部に全て移動していく
553      if (0 !== $main_area.eq(index + 2).length) {
554        $clone.insertBefore($main_area.eq(index + 2));
555      } else {
556        $clone.appendTo($side_area);
557      }
558      $clone.children('ul').bxSlider({
559        mode          : 'fade',
560        auto          : true,
561        speed         : 1000,
562        pause         : 5000,
563        responsive    : true,
564        slideMargin   : 0,
565        minSlides     : 1,
566        maxSlides     : 1,
567        moveSlides    : 1,
568        pager         : false,
569        controls      : false,
570        slideWidth    : 300,
571        adaptiveHeight: true
572      });
573      $(this).addClass('pc');
574    });
575
576    /**
577     * スマートフォン限定バナー領域広告挿入
578     */
579    var $sp_footer = $('div.sp-footer-banners ul.slides');
580    if (0 !== $sp_footer) {
581      for (var i = 0, len = random_ads.length; i < len; i++) {
582        var value = random_ads[i].data[0];
583         //  サイズのタームIDで絞込み
584        if (value.field_ad_menu != 40) {
585          continue;
586        }
587        // 画像パスが存在する場合、出力する
588        if (value.hasOwnProperty('field_sp_image_path') && '' != value.field_sp_image_path) {
589          var alt = value.field_sp_image_alt !== '' ? value.field_sp_image_alt : value.title;
590          $sp_footer.append(
591            $('<li />').append(
592              $('<a />').attr('href', value.field_ad_url).addClass('hover-line').attr('target', value.field_target == 1 ? '_self' : '_blank').append(
593                $('<img />').attr('src', value.field_sp_image_path).attr('alt', alt)
594              )
595            )
596          );
597        }
598      }
599      $('.sp-footer-banners').flexslider({
600        animation: "slide",
601        slideshowSpeed: 6500,
602        animationSpeed: 2600,
603        controlNav: false,
604        directionNav: false
605      });
606      $(document).on('click', '.sp-footer-banners-close', function() {
607        $(this).css('display', 'none');
608        $('.sp-footer-banners').addClass('hidden');
609        $('.page-top').css('bottom', '20px');
610      });
611    }
612    
613    /**
614     * インタースティシャル広告挿入
615     */
616    if ('/gmc/adv' !== drupalSettings.ad.dirname && '/shop/search' !== drupalSettings.ad.dirname) {
617      for (var i = 0, len = random_ads.length; i < len; i++) {
618        var value = random_ads[i].data[0];
619         //  サイズのタームIDで絞込み
620        if (value.field_ad_menu != 744 && value.field_ad_menu != 806) {
621          continue;
622        }
623        // 画像パスが存在する場合、出力する
624        var interstitial_ad_disp = false;
625        if (value.hasOwnProperty('field_interstitial_ad_image_path') && '' != value.field_interstitial_ad_image_path) {
626          var alt = value.field_interstitial_ad_image_alt !== '' ? value.field_interstitial_ad_image_alt : value.title;
627          var rand = Math.floor( Math.random() * 101 ) ; // キャッシュ対策
628          $('.interstitial_popup_content').append(
629            $('<a />').attr('href', value.field_ad_url).addClass('hover-line').attr('target', value.field_target == 1 ? '_self' : '_blank').append(
630              $('<img />').attr('src', value.field_interstitial_ad_image_path + '?' + rand).attr('alt', alt)
631            )
632          );
633          var nid = value.nid + '_' + value.changed;
634//          var nid = limittime;
635          interstitial_ad_disp = true;
636          break;
637        }
638      }
639      if (!interstitial_ad_disp) {
640        $('.interstitial').remove();
641      } else {
642        if( !localStorage.getItem('disp_popup' + nid) ) {
643          localStorage.setItem('disp_popup' + nid, 'on');
644          var popup = document.getElementsByClassName('interstitial');
645          popup[0].classList.add('js_active');
646          popup[0].onclick = function() {
647            popup[0].classList.remove('js_active');
648          };
649          $(document).on('click', '.interstitial_popup_close', function() {
650            popup[0].classList.remove('js_active');
651          });
652        }
653      }
654    }
655    
656    /**
657     * ニュースページ広告挿入
658     */
659    var $originalList = $('section.top-recommend-item ul.recommend-model-list-wrap');
660    if ($originalList.length > 0) { // おすすめモデル一覧広告枠挿入
661      var $items = $originalList.children('li');
662      var itemsCnt = $items.length;
663      var itemsPerGroup = 10; // 10件ごとに区切る
664      // すべてのliを10件ごとに分けて、新しいulに移動させる
665      for (var i = 0; i < itemsCnt; i += itemsPerGroup) {
666          // 新しいulを作成
667          var $newList = $('<ul class="recommend-model-list-wrap main-list-5col-01 tagged-images hover-zoom main-list-5col-01-0 listCol1"></ul>');
668
669          // i番目から10件分のliを新しいulに追加
670          $items.slice(i, i + itemsPerGroup).appendTo($newList);
671
672          // 新しいulを元のulの前に挿入
673          $originalList.before($newList);
674          
675          if (i + itemsPerGroup < itemsCnt) { // 未移動liがある場合
676            // 広告領域を挿入
677            $originalList.before('<div class="news_ads pc"><ul><li></li><li></li></ul></div>');
678            $originalList.before('<div class="news_ads sp"><ul><li></li></ul></div>');
679          }
680      }
681      // 元のulを削除
682      $originalList.remove();
683    }
684    // PC
685    var pc_news_ad_li_cnt = 0; 
686    for (var i = 0, len = random_ads.length; i < len; i++) {
687      var value = random_ads[i].data[0];
688       //  サイズのタームIDで絞込み
689      if (value.field_ad_menu != 745 && value.field_ad_menu != 833) {
690        continue;
691      }
692      // 画像パスが存在する場合、出力する
693      if (value.hasOwnProperty('field_news_ad_image_path') && '' != value.field_news_ad_image_path) {
694        var alt = value.field_news_ad_image_alt !== '' ? value.field_news_ad_image_alt : value.title;
695        var rand = Math.floor( Math.random() * 101 ) ; // キャッシュ対策
696        $('.news_ads.pc ul li').eq(pc_news_ad_li_cnt).append(
697          $('<a />').attr('href', value.field_ad_url).addClass('hover-line').attr('target', value.field_target == 1 ? '_self' : '_blank').append(
698            $('<img />').attr('src', value.field_news_ad_image_path + '?' + rand).attr('alt', alt)
699          )
700        );
701        $('.news_ads.pc ul li a').eq(pc_news_ad_li_cnt).append($('<p />').addClass('news_ads_text').html('<span class="news_ads_title">' + value.title + '</span><br />' + value.field_text_ad_text));
702        if (value.field_ad_brand_label && value.field_tenpo_label) {
703          $('.news_ads.pc ul li a').eq(pc_news_ad_li_cnt).append($('<p />').addClass('news_ads_brandtenpo').text(value.field_ad_brand_label + ',' + value.field_tenpo_label));
704        } else if (value.field_ad_brand_label) {
705          $('.news_ads.pc ul li a').eq(pc_news_ad_li_cnt).append($('<p />').addClass('news_ads_brand').text(value.field_ad_brand_label));
706        } else if (value.field_tenpo_label) {
707          $('.news_ads.pc ul li a').eq(pc_news_ad_li_cnt).append($('<p />').addClass('news_ads_tenpo').text(value.field_tenpo_label));
708        }
709        pc_news_ad_li_cnt++;
710      }
711    }
712    // SP
713    var sp_news_ad_li_cnt = 0; 
714    for (var i = 0, len = random_ads.length; i < len; i++) {
715      var value = random_ads[i].data[0];
716       //  サイズのタームIDで絞込み
717      if (value.field_ad_menu != 745 && value.field_ad_menu != 833) {
718        continue;
719      }
720      // 画像パスが存在する場合、出力する
721      if (value.hasOwnProperty('field_news_ad_image_path') && '' != value.field_news_ad_image_path) {
722        var alt = value.field_news_ad_image_alt !== '' ? value.field_news_ad_image_alt : value.title;
723        var rand = Math.floor( Math.random() * 101 ) ; // キャッシュ対策
724        $('.news_ads.sp ul li').eq(sp_news_ad_li_cnt).append(
725          $('<a />').attr('href', value.field_ad_url).addClass('hover-line').attr('target', value.field_target == 1 ? '_self' : '_blank').append(
726            $('<img />').attr('src', value.field_news_ad_image_path + '?' + rand).attr('alt', alt)
727          )
728        );
729        $('.news_ads.sp ul li a').eq(sp_news_ad_li_cnt).append($('<p />').addClass('news_ads_text').html('<span class="news_ads_title">' + value.title + '</span><br />' + value.field_text_ad_text));
730        if (value.field_ad_brand_label && value.field_tenpo_label) {
731          $('.news_ads.sp ul li a').eq(sp_news_ad_li_cnt).append($('<p />').addClass('news_ads_brandtenpo').text(value.field_ad_brand_label + ',' + value.field_tenpo_label));
732        } else if (value.field_ad_brand_label) {
733          $('.news_ads.sp ul li a').eq(sp_news_ad_li_cnt).append($('<p />').addClass('news_ads_brand').text(value.field_ad_brand_label));
734        } else if (value.field_tenpo_label) {
735          $('.news_ads.sp ul li a').eq(sp_news_ad_li_cnt).append($('<p />').addClass('news_ads_tenpo').text(value.field_tenpo_label));
736        }
737        sp_news_ad_li_cnt++;
738      }
739    }
740    // ブランド名、店名のカッコ部分を削除
741    $('p.news_ads_brandtenpo, p.news_ads_brand, p.news_ads_tenpo').each(function() {
742        var originalText = $(this).text();
743        var updatedText = originalText.replace(/\(.*?\)/g, "");  // カッコ内の部分を削除
744        $(this).text(updatedText.trim());  // 前後の余分なスペースも削除
745    });
746    // 広告の無い領域を削除
747    $('.news_ads ul li:not(:has(a))').remove();
748
749    // 6. failは、通信に失敗した時に実行される
750  }).fail(function (jqXHR, textStatus, errorThrown) {
751    var nowtime = (new Date).getTime();
752    if (limittime < nowtime) {
753      console.log("タイムアウト");
754      console.log(jqXHR.status + " " + textStatus);
755    } else {
756      console.log("リトライ");
757      var x = this;
758      setTimeout(function () {
759        $.ajax(x);
760      }, 500); // 0.5秒後にリトライ
761    }
762    // 7. alwaysは、成功/失敗に関わらず実行される
763  }).always(function () {
764  });
765
766  /*
767   * 文字列をseparatorで分割して、searchListと一致する要素数を戻す
768   * 
769   * @param {string} separator  区切り文字
770   * @param {array}  searchList 検索するリスト
771   * @returns {Number}
772   */
773  String.prototype.splitAndSearch = function(separator, searchList) {
774    var hit = 0;
775    if ('' === this || 0 === searchList.length) {
776      return hit;
777    }
778    var values = this.split(separator);
779    for (var i = 0, len = values.length; i < len; i++) {
780      if (-1 !== searchList.indexOf(values[i])) {
781        hit++;
782      }
783    }
784    return hit;
785  };
786});

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.