PageSourceSearch

https://www.kansai.co.jp/wp/wp-content/themes/kansai/assets/js/news.js?ver=2026.09.25

js kansai.co.jp collected 2026-09-25 04:05:55 UTC 13,352 bytes, 380 lines download raw bytes

1$(function() {
2    let activeCategory = getUrlParameter('category');
3    $('select#year').on('change', function(){
4        window.location.href = '/news/year/' + $(this).val() + ((activeCategory != '') ? '/?category=' + activeCategory : '');
5    });
6
7    $('select#cate').on('change', function(){
8        window.location.href = '/news/year/' + $('select#year').val() + '/?category=' + $(this).val();
9    });
10
11    $('.copy-link').on('click', function(e){
12        e.preventDefault();
13        copyToClipboard($(this).attr('href'));
14    });
15
16    if(activeCategory == '') {
17        activeCategory = 'all';
18    }
19
20    // Call News list
21    // if(activeCategory == 'all' || activeCategory == 'ir'){
22        new News();
23    // } else {
24    //     $('body').removeClass('loading');
25    // }
26});
27
28function getUrlParameter(name) {
29    name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
30    var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
31    var results = regex.exec(location.search);
32    return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
33};
34
35function copyToClipboard(text) {
36    var sampleTextarea = document.createElement("textarea");
37    document.body.appendChild(sampleTextarea);
38    sampleTextarea.value = text;
39    sampleTextarea.select();
40    document.execCommand("copy");
41    document.body.removeChild(sampleTextarea);
42}
43function scroll(element){   
44    var ele = document.getElementById(element);   
45    window.scrollTo(ele.offsetLeft,ele.offsetTop);
46}
47
48function News() {
49    var self = this;
50    this.ajaxUrl = ajax_url[0];
51    this.newsIn = null;
52    this.irIn = null;
53    this.irEx = null;
54    this.irLists = null;
55    this.perPage = $('#show_per_page').val();
56    this.activeCategory = getUrlParameter('category') ? getUrlParameter('category') : 'all';
57    this.currentPage = Number($('#currentPage').val());
58    this.yearAll = null;
59
60    /**
61     * Load news from WP
62     */
63    this.load_news_wp = function() {
64        $.ajax({
65            url: self.ajaxUrl,
66            type: "GET",
67            dataType:'json',
68            data: {
69              action:'news_list',
70              category: self.activeCategory,
71              year: $('select#year').val(),
72            }, success: function(response){
73                if(response) {
74                    self.newsIn = response.data.news;
75                    if(response.data.years) {
76                        self.yearAll = response.data.years;
77                    }
78                    self.irIn = [];
79                    self.handle_data();
80                }
81            }, error: function(error){
82                console.log(error);
83            }
84        });
85    }
86
87    /**
88     * Load data from WP
89     */
90    this.load_data_wp = function() {
91        $.ajax({
92            url: self.ajaxUrl,
93            type: "GET",
94            dataType:'json',
95            data: {
96              action:'irnews_list',
97              year: $('select#year').val()
98            }, success: function(response){
99                if(response) {
100                    self.irIn = response.data.irnews;
101                    self.handle_data();
102                }
103            }, error: function(error){
104                console.log(error);
105            }
106        });
107    }
108
109    /**
110     * Check year having data
111     */
112    this.check_year_have_data = function() {
113        let currentURL = window.location.href;
114        let match = currentURL.match(/\/year\/(\d+)/);
115        if (match) {
116            let yearTemp = match[1];
117            if(yearTemp != Number($('select#year').val())) {
118                window.location.href = '/news/year/' + $('select#year').val() + ((self.activeCategory != '') ? '/?category=' + self.activeCategory : '');
119            }
120        }
121    }
122
123    /**
124     * Load data external
125     */
126    this.load_data_external = function() {
127        $.ajax({
128            url: 'https://ssl4.eir-parts.net/V4Public/eir/4613/ja/announcement/announcement_2.js',
129            type: "GET",
130            success: function(response){
131                let data = response.replace("eolparts_announcement_2(", "");
132                let temp = data.replace(");", "");
133                let jsonData = JSON.parse(temp);
134                if(jsonData) {
135                    self.irEx = jsonData.item;
136                    // if(self.activeCategory == 'ir'){
137                    //     self.load_data_wp();
138                    // } else {
139                        self.load_news_wp();
140                    // }
141                }
142            }, error: function(error){
143                self.irEx = [];
144                // if(self.activeCategory == 'ir'){
145                //     self.load_data_wp();
146                // } else {
147                    self.load_news_wp();
148                // }
149            }
150        });
151    }
152
153    /**
154     * Filter years
155     */
156    this.filterYear = function(data, targetYear) {
157        let object = [];
158        $.each(data, function (i, val) {
159            let year = new Date(val.date).getFullYear();
160            if (year == targetYear) {
161                object.push(val);
162            }
163        });
164
165        return object;
166    }
167
168    /**
169     * Merge and sort array
170     */
171    this.mergeAndSortArrays = function(arr1, arr2) {
172        let mergedArray = [...new Set([...arr1, ...arr2])];
173        
174        let sortedArray = mergedArray.sort((a, b) => b - a);
175        
176        return sortedArray;
177    }
178
179    /**
180     * Get list years of news detail
181     */
182    this.getListYears = function(data, activeYear) {
183        let years = [];
184        $.each(data, function (i, val) {
185            let year = new Date(val.date).getFullYear();
186            if (! years.includes(Number(year))) {
187                if(Number(year) > 2020) {
188                    years.push(Number(year));
189                }
190            }
191        });
192
193        if(years.length > 0) {
194            if(self.yearAll != null)  {
195                years = self.mergeAndSortArrays(years, self.yearAll);
196            }
197            let option = '';
198            $.each(years, function (j, y) {
199                option += '<option value="'+y+'" '+(activeYear == y ? 'selected': '')+'>'+y+'å¹´</option>';
200            });            
201            $('#year').html(option);
202            self.check_year_have_data();
203        }
204    }
205
206    /**
207     * Sort object by date desc
208     */
209    this.sortJsonByDateDesc = function (jsonArray) {
210        jsonArray.sort((a, b) => {
211            let dateA = new Date(a.date);
212            let dateB = new Date(b.date);
213            return dateB - dateA;
214        });
215
216        return jsonArray;
217    }
218
219    /**
220     * Return category
221     */
222    this.getCategory = function(cat){
223        let name = '';
224        switch (cat) {
225            case 'irnews':
226                name = 'IR';
227                break;
228            case 'notice':
229                name = 'お知らせ';
230                break;
231            case 'company-information':
232                name = '企業情報';
233                break;
234            case 'product-information':
235                name = '製品情報';
236                break;
237            case 'sustainability':
238                name = 'サステナビリティ';
239                break;
240            default:
241                name = 'IR';
242                break;
243        }
244
245        return name;
246    }
247
248    /**
249     * Handle data
250     */
251    this.handle_data = function() {
252        let activeYear = $('#activeYear').val();
253        let merge = null;
254        if(self.activeCategory == 'all' || self.activeCategory == 'ir') {
255            merge = self.irEx.concat(self.newsIn);
256        // } else if(self.activeCategory == 'ir') {
257        //     merge = self.irEx.concat(self.newsIn);
258        } else {
259            merge = self.newsIn;
260        }
261        let sortList = self.sortJsonByDateDesc(merge);
262        self.getListYears(sortList, activeYear);
263        let currentYear = (sortList.length >
263 0) ? (new Date(sortList[0].date).getFullYear()) : (new Date().getFullYear());
264        let listTemp = self.filterYear(sortList, (activeYear != '' ? activeYear : currentYear));
265        if(listTemp.length > 0) {
266            self.irLists = listTemp;
267        } else {
268            self.irLists = self.filterYear(sortList, currentYear);
269        }
270
271        self.renderItems(self.currentPage, self.perPage);
272        self.renderPagination(self.currentPage, self.irLists.length, self.perPage);
273        $('body').removeClass('loading');
274    }
275
276    /**
277     * Render News items
278     */
279    this.renderItems = function(page, itemsPerPage){
280        let tempList = self.irLists;
281        let start = Number(page - 1) * Number(itemsPerPage);
282        let end = Number(start) + Number(itemsPerPage);
283        let pageItems = tempList.slice(start, end);
284        let itemsDiv = $("#news");
285        let newItems = '';
286        pageItems.forEach(item => {
287          newItems += '<dl class="news__item"><dt class="news__item--date">'+(item.format_date.replaceAll("/", "."))+' <span class="--cate">'+self.getCategory(item.news_type)+'</span></dt>' + '<dd class="news__item--desc '+((item.type == 'pdf')? '--pdf': '')+'"><a href="'+item.link+'" target="'+item.new_target+'">'+item.title+'</a></dd></dl>';
288        });
289        itemsDiv.html(newItems);
290    }
291
292    /**
293     * Render Pagination
294     */
295    this.renderPagination = function(currentPage, totalItems, itemsPerPage) {
296        let totalPages = Math.ceil(totalItems / itemsPerPage);
297        if(totalPages > 1) {
298            let maxPages = 5;
299            let paginationList = $('<ul class="paganation__list" />');
300            if (currentPage > 1) {
301                paginationList.append('<li class="--prev"><a href="javascript:void(0);" data-page="' + (currentPage - 1) + '"></a></li>');
302            } else {
303                paginationList.append('<li class="--prev disabled"><a href="javascript:void(0);"></a></li>');
304            }
305
306            let start = Math.max(1, currentPage - Math.floor(maxPages / 2));
307            let end = Math.min(start + maxPages - 1, totalPages);
308
309            if (start > 1) {
310                paginationList.append('<li><a href="javascript:void(0);" data-page="1">1</a></li>');
311                if (start > 2) {
312                    paginationList.append('<li class="--dot">...</li>');
313                }
314            }
315        
316            for (let i = start; i <= end; i++) {
317                if (i == currentPage) {
318                    paginationList.append('<li class="active"><a href="javascript:void(0);">' + i + '</a></li>');
319                } else {
320                    let isOnlyPc = i > currentPage + 1 || i < currentPage - 1;
321                    paginationList.append('<li class="' + (isOnlyPc ? 'only-pc' : '') + '"><a href="javascript:void(0);" data-page="' + i + '">' + i + '</a></li>');
322                }
323            }
324        
325            if (end < totalPages) {
326                if (end < totalPages - 1) {
327                    paginationList.append('<li class="--dot">...</li>');
328                }
329                paginationList.append('<li><a href="javascript:void(0);" data-page="' + totalPages + '">' + totalPages + '</a></li>');
330            }
331
332            if (currentPage < totalPages) {
333                paginationList.append('<li class="--next"><a href="javascript:void(0);" data-page="' + (currentPage + 1) + '"></a></li>')
334            } else {
335                paginationList.append('<li class="--next disabled"><a href="javascript:void(0);"></a></li>');
336            }
337
338            paginationList.find("li").on("click", 'a', function(event) {
339                event.preventDefault();
340                if(! $(this).parent().hasClass('active') && ! $(this).parent().hasClass('disabled')) {
341                    $('body').addClass('loading');
342                    let clickedPage = $(this).data("page");
343                    self.renderItems(clickedPage, self.perPage);
344                    self.renderPagination(clickedPage, self.irLists.length, self.perPage);
345                    // scroll("news");
346                    window.location.href = '/news/year/' + $('#activeYear').val() + '?category=' +self.activeCategory + '&page=' + clickedPage;
347                }
348            });
349
350            $('#pagination').html(paginationList);
351            let subPagination = $('<p class="paganation__txt">' + self.number_format(totalItems) +'件中 '+((currentPage - 1) * itemsPerPage + 1) + '~' + ((currentPage * itemsPerPage) > totalItems ? totalItems: (currentPage * itemsPerPage)) + '件を表示</p>');
352            $('#pagination').append(subPagination);
353        }
354    }
355
356    /**
357     * Format number
358     */
359    this.number_format = function(number)
360    {
361        number += '';
362        x = number.split('.');
363        x1 = x[0];
364        x2 = x.length > 1 ? '.' + x[1] : '';
365        var rgx = /(\d+)(\d{3})/;
366        while (rgx.test(x1)) {
367            x1 = x1.replace(rgx, '$1' + ',' + '$2');
368        }
369        return x1 + x2;
370    }
371
372    /**
373     * Init objects
374     */
375    this.init = function() {
376        self.load_data_external();
377    }
378
379    self.init();
380}

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.