PageSourceSearch

https://www.tokyu-fudosan-hd.co.jp/news/hd_news.js?20240219160104

js tokyu-fudosan-hd.co.jp collected 2026-10-02 04:19:46 UTC 11,658 bytes, 319 lines download raw bytes

1class HdNews extends News {
2
3    #categories = '';
4
5    constructor() {
6        super();
7
8        // カテゴリ一覧を取得
9        this.categories = this.getData(this.baseNewsUrl() + "others/categories.json");
10        // 全データ
11        this.news = this.getData(this.baseNewsUrl() + "others/all.json");
12
13        // カテゴリリストを作成
14        this.viewSelectList(this.categories, 'select_cat', this.get_cat);
15        //2014年以降
16        this.viewYearList('select_year', 2014, this.get_year); // 年別のスターを書き換える場合はこちら
17        // typeへの check登録
18        this.setTypeCheck(this.get_type);
19        // textエリアへのデータ登録
20        this.setSearchText(this.get_text);
21
22        this.page_limit = 20;
23    }
24
25    /**
26     * リセットボタンがクリアされる時間を調整する
27     */
28    resetSearch() {
29        document.getElementById('form_text_search').reset();
30        document.getElementById('form_select_search').reset();
31        // セレクト調整
32        document.getElementById('select_year').options[0].selected = true;
33        document.getElementById('select_cat').options[0].selected = true;
34        this.get_page = 1;
35        this.search();
36    }
37
38    /**
39     * 絞り込みを折れた
40     */
41    addSearch() {
42        this.get_page = 1;
43        this.search();
44    }
45
46    /**
47     * 検索条件をかえる
48     *
49     * @param page 表示ページ数
50     */
51    search() {
52        const yearValue = document.getElementById('select_year').value;
53        const catValue = document.getElementById('select_cat').value;
54        const textValue = document.getElementById('select_text').value;
55        const typeValue = [...document.querySelectorAll("input[name=select_type]:checked")];
56
57//        console.log('text=' + textValue + 'year=' + yearValue + 'cat=' + catValue + 'type=' + typeValue)
58        // dataの作成取得
59        let data = this.getNewsContent(this.news, this.categories, yearValue, catValue, typeValue, textValue);
60        this.viewContent(data, this.categories, this.get_page);
61        this.viewPager(data, yearValue, catValue, typeValue, textValue, this.get_page);
62        // this.activeList(yearValue);
63    }
64
65    /**
66     * 全データから該当データを返す
67     *
68     * @param object news ニュースデータ
69     * @param object categories カテゴリ
70     * @param integer year 年(選択)
71     * @param integer cat カテゴリ(選択)
72     * @param string type HTML | PDF (選択)
73     * @param string text 検索文章
74     */
75    getNewsContent(news, categories, year, cat, type, text) {
76        // yearがあればその年だけ取得
77        let selectData = [];
78        if (year && year !=0) {
79//            console.log('year=' + year);
80            for (let i = 0; i < news.length; i++) {
81                if (year == news[i]['year']) {
82                    selectData.push(news[i]);
83                }
84            }
85        } else {
86            selectData = structuredClone(news); // ディープコピーを行う
87        }
88
89        // catがあればその企業情報を取得(別企業を削除)
90        let selectCategories = [];
91        if (cat && cat !=0) {
92//            console.log('cat=' + cat);
93//            let category = this.getId2Name(categories, cat);
94            let category = cat; // グループ会社と若干実装が異なります
95            let segment;
96//            console.log('category=' + category);
97            for (let i = 0; i < selectData.length; i++) {
98                selectCategories = [];//初期化
99                for (let k = 0; k < selectData[i].items.length; k++) {
100                    segment = selectData[i].items[k].segment.split(',');
101                    for (let j = 0; j < segment.length; j++) {
102                        if (category == segment[j]) {
103                            // 該当のデータ配列
104                            selectCategories.push(selectData[i].items[k]);
105                        }
106                    }
107                }
108                selectData[i].items = selectCategories;
109            }
110        }
111
112        // typeがあればそのタイプの情報だけを取得 typeは複数あるケースがある、今は、pdf, html
113        // htmlは、link, page の2つのpatternをとる
114        const checkType = [];
115        if (0 < type.length) {
116            for (let checked_data of type) {
117                if (checked_data.value == 'html') {
118                    checkType.push('link');
119                    checkType.push('page');
120                } else {
121                    checkType.push(checked_data.value);
122                }
123            }
124        }
125
126        let selectType = [];
127        if (checkType.length >= 1) {
128//            console.log(type);
129            for (let i = 0; i < selectData.length; i++) {
130                selectType = [];//初期化
131                for (let k = 0; k < selectData[i].items.length; k++) {
132                    if (checkType.indexOf(selectData[i].items[k].pattern) !== -1) {
133                        // 該当のデータ配列
134                        selectType.push(selectData[i].items[k]);
135                    }
136                }
137                selectData[i].items = selectType;
138            }
139        }
140
141        if (text) {
142            console.log(text);
143            // conditions[value] を分解、半角空白、全角空白でチェック
144            text = text.replace(/ /g, ' ');
145            //  前後の空白削除
146            text = text.trim();
147            if (text) {
148                // 分割
149                text = text.split(' ');
150                // 該当のキーワードを含む(含まない場合はcheck) or 検索なのでどれかのwordを含めばOK AND検索
151                for (let i = 0; i < selectData.length; i++) {
152                    let selectText = [];//初期化
153                    for (let k = 0; k < selectData[i].items.length; k++) {
154                        let keyword = selectData[i].items[k].title;
155                        for (const word of text) {
156                            if (keyword.includes(word)) {
157                                // 該当のデータ配列
158                                selectText.push(selectData[i].items[k]);
159                                break;
160                            }
161                        }
162                    }
163                    selectData[i].items = selectText;
164                }
165            }
166        }
167
168        // 空データを削除する 配列から除く(そもそも減らしていくのが正解じゃないか・・)
169
170//        console.log(selectData);
171
172        return selectData;
173    }
174
175    /**
176     *  データ表示
177     *
178     * @param object data 表示用データ
179     * @param object categories 企業データ
180     * @param int 表示page番号
181     *
182     */
183    viewContent(data, categories, page) {
184//        console.log(data);
185        // pageのデータチェック
186        if (!page) {
187            page = 1;
188        }
189        let content = ''; // html
190        let news = ''; // dataの個別要素
191        let limit = this.page_limit;
192        let loop = 0;
193        let offset = (page - 1) * limit;//開始位置
194        // 全要素での順番
195        let start_number = 0;
196
197
198        content += '<ul class="c-list-news">';
199
200        for (let i = 0; i < data.length; i++) {
201            news = data[i].items;
202            let date = '';
203            let category = '';
204            let segment = '';
205            let link_url = '';
206            let target = '';
207
208            for (let k = 0; k < news.length; k++) {
209                // 開始位置まで移動
210                start_number++;
211                if (start_number < offset) {
212                    continue;
213                }
214
215                switch (news[k]['pattern']) {
216                    case 'pdf' :
217                        link_url = news[k]['pdf_url'];
218                        target = 'target="_blank"';
219                        break;
220                    case 'link' :
221                        link_url = news[k]['link'];
222                        target = 'target="_blank"';
223                        break;
224                    case 'page' :
225                        link_url = news[k]['permalink'];
226                        target = '';
227                        break;
228                    default :
229                        break;
230                }
231
232                content += '<li class="c-list-news__item-02">';
233                content += '<a class="c-list-news__link" href="' + link_url + '" ' + target + '>';
234                content += '<div class="c-list-news__info">';
235
236                date = news[k]['date'].split('/');
237                content += '<p class="c-list-news__date">' + date[0] + '年' + date[1] + '月' + date[2] + '日</p>';
238
239                segment = news[k]['segment'].split(',');
240                for (let j = 0; j < segment.length; j++) {
241                    category = this.getId2Name(categories, segment[j]);
242                    if (j != 0) {
243                        content += '・';
244                    }
245                    content += '<div class="c-list-news__category"><span class="c-tag-category">' + category + '</span></div>';
246                }
247                content += '</div>';
248
249                content += '<p class="c-list-news__text">';
250                content += '<span>' + news[k]['title'] + '</span>';
251                if (news[k]['pattern'] == 'pdf'){
252                    content += '<span class="c-list-news__text-pdf c-tag-pdf"><span class="c-tag-pdf__title">PDF:</span>' + news[k]['pdf_byte'] + '</span>';
253                }
254                content += '</p></a></li>';
255
256
257                loop++;
258                if (loop == limit) {
259                    break;
260                }
261            }
262
263            if (loop == limit) {
264                break;
265            }
266        }
267        content += '</ul>';
268        document.getElementById('newsList').innerHTML = content;
269        // console.log('endNewsList');
270    }
271}
272
273
274/**
275 * NEWSのデータを表示する
276 */
277function eventSet() {
278    const news = new HdNews();
279
280    // // 年リスト変更
281    // document.getElementById('select_year').addEventListener('change', (e) => {
282    //     news.search(e);
283    // }, false);
284    // // カテゴリ変更
285    // document.getElementById('select_cat').addEventListener('change', (e) => {
286    //     news.search(e);
287    // }, false);
288    // // チェックボックス変更
289    // document.getElementById('div_select_type').addEventListener('change', (e) => {
290    //     news.search(e);
291    // }, false);
292    // // テキスト入力
293    // document.getElementById('select_text').addEventListener('focusout', (e) => {
294    //     news.search(e);
295    // }, false);
296    // リセットボタン セレクトリスト
297    document.getElementById('select_reset').addEventListener('click', (e) => {
298        news.resetSearch(e);
299    }, false);
300    // サブミットボタン セレクト
301    document.getElementById('text_submit').addEventListener('click', (e) => {
302        news.search(e);
303    }, false);
304    // select_textでenter押された場合
305    document.getElementById('select_text').addEventListener("keydown", (e) => {
306        if (e.key === "Enter" ||e.key === "NumpadEnter" ) {
307            news.search(e);
308            e.preventDefault();  // Enterキー入力を他に伝搬させないために
309        }
310    }, false);
311    // サブミットボタン セレクト
312    document.getElementById('select_submit').addEventListener('click', (e) => {
313        news.addSearch(e);
314    }, false);
315
316    news.search();
317}
318
319document.addEventListener('DOMContentLoaded', eventSet, false);

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.