PageSourceSearch

https://ehime-np.co.jp/article/resource/login.js?17

js ehime-np.co.jp collected 2026-09-24 17:39:05 UTC 13,706 bytes, 492 lines download raw bytes

1// -- 定数 ------------------------------------------------------------------
2
3// -- 変数 ------------------------------------------------------------------
4
5// 表示用会員氏名・会員区分
6var nameForDisplay = '';
7// 2重クリック防止
8var isAjaxButtonClicked = false;
9// ACUSESSID
10var acusessid = '';
11
12var accessToken = null;
13
14// -- メソッド -----------------------------------------------------------
15
16function formAccessByAjax(callback) {
17
18  isAjaxButtonClicked = true;
19  changeLoginBtnDisabled($('#js_form_login'));
20
21  var maxRetries = 1;
22  var retries = 0;
23  var retryInterval = 1000;
24
25  var request = function() {
26
27    var retry = function() {
28
29      if (retries >= maxRetries) {
30        displayErrorMessages(['通信に失敗しました。ページを更新してやり直してください。']);
31        isAjaxButtonClicked = false;
32        changeLoginBtnDisabled($('#js_form_login'));
33        return;
34      }
35      
36      retries++;
37      setTimeout(request, retryInterval);
38    }
39
40    $.ajax({
41      type: 'POST',
42      url: '/article/ajax/formAccess',
43      dataType: 'json',
44      timeout: 60000,
45      cache: false
46    }).done(function(data, dataType) {
47
48      if (!data || data.resultCd != 0 || !data.accessToken) {
49        retry();
50        return;
51      }
52
53      accessToken = data.accessToken;
54      isAjaxButtonClicked = false;
55      changeLoginBtnDisabled($('#js_form_login'));
56
57      callback();
58
59    }).fail(function(XMLHttpRequest, textStatus, errorThrown) {
60
61      retry();
62    });
63  };
64
65  request();
66}
67
68// アクリートくらぶIDでのログインに画面を切り替える
69function onClickAccreteLogin(isFirst) {
70//	$('.js_accrete_login').removeClass('hidden');
71//	$('.js_corp_login').addClass('hidden');
72//  $('input[name="corpLoginId"]').attr('disabled', 'disabled').removeClass('login_box__text--err');
73    $('input[name="password"]').val('').attr('disabled', 'disabled').removeClass('login_box__text--err');
74    $('input[name="autoLogin"]').attr('disabled', 'disabled');
75    $('.js_accrete_login input').removeAttr('disabled');
76    $('.login_err__item').empty();
77    
78    // ガイドページは初回のフォーカスを当てない
79    if (!isFirst || !$('#loginId').hasClass('noFocus')) {
80    	$('#loginId').focus();
81    }
82    location.hash = '#';
83    return false;
84}
85
86// 法人ログインIDでのログインに画面を切り替える
87// function onClickCorpLogin(isFirst) {
88// 	$('.js_accrete_login').addClass('hidden');
89// 	$('.js_corp_login').removeClass('hidden');
90//     $('input[name="loginId"]').attr('disabled', 'disabled').removeClass('login_box__text--err');
91//     $('input[name="password"]').val('').attr('disabled', 'disabled').removeClass('login_box__text--err');
92//     $('input[name="autoLogin"]').attr('disabled', 'disabled');
93//     $('.js_corp_login input').removeAttr('disabled');
94//     $('.login_err__item').empty();
95// 
96//     // ガイドページは初回のフォーカスを当てない
97//     if (!isFirst || !$('#corpLoginId').hasClass('noFocus')) {
98//     	$('#corpLoginId').focus();
99//     }
100//     location.hash = '#corp';
101//     return false;
102// }
103
104// Ajaxでのログイン(アプリ用ログイン画面から)
105function loginByAjax(transitionUrl) {
106	
107	var callback = function() {
108		if (isAjaxButtonClicked) {
109			return false;
110		}
111		isAjaxButtonClicked = true;
112		changeLoginBtnDisabled($('#js_form_login'));
113		
114		var requestUrl = '/article/ajax/login.json';
115		
116		var inputList = $('#js_form_login').serializeArray();
117		var params = {};
118		inputList.forEach(function(element) {
119			params[element.name] = element.value;
120		});
121		params['accessToken'] = accessToken;
122		
123		$.ajax({
124			type: 'POST',
125			url: requestUrl,
126			data: params,
127			dataType: 'json',
128			timeout: 10000
129		}).done(function(data, dataType) {
130			
131			if (!data) {
132				displayErrorMessages(['通信に失敗しました。']);
133				resetLoginState();
134				return;
135			}
136
137			if (data.code && data.code == 409) {
138				displayErrorMessages(['エラーが発生しました。恐れ入りますがもう一度やり直してください。']);
139				resetLoginState();
140				return;
141			}
142
143			if (data.resultCd != 0) {
144				if (data.redirect) {
145					window.location.href = data.redirect;
146					return;
147				}
148				displayErrorMessages(data.errors);
149				displayErrorInputs(data.errorItems);
150				resetLoginState();
151				return;
152			}
153			
154			// 表示用会員氏名・会員区分を取得
155			nameForDisplay = data.name;
156			
157			// Android端末に入力内容を保存する
158			saveEntryAndroid();
159			
160			// iOSアプリ向けにACUSESSIDを変数に設定
161			acusessid = data.acusessid;
162
163			// 遷移先URLが指定されている場合
164			if (transitionUrl != null) {
165				// 画面遷移
166				location.href = transitionUrl;
167			} 
168			// 遷移先未指定の場合
169			else {
170				// 再読込
171				location.reload(); 
172			}
173			
174		}).fail(function(XMLHttpRequest, textStatus, errorThrown) {
175
176			displayErrorMessages(['通信に失敗しました。']);
177			changeLoginBtnDisabled($('#js_form_login'));
178			isAjaxButtonClicked = false;
179			turnstile.reset();
180		});
181	};
182	formAccessByAjax(callback);
183}
184
185// Ajaxでのログイン(Webログイン画面)
186function loginByAjaxByWebLogin(transitionUrl) {
187	
188	var callback = function() {
189		if (isAjaxButtonClicked) {
190			return false;
191		}
192		isAjaxButtonClicked = true;
193		changeLoginBtnDisabled($('#js_form_login'));
194
195		var requestUrl = '/article/ajax/weblogin.json';
196		
197		var inputList = $('#js_form_login').serializeArray();
198		console.log(inputList);
199		var params = {};
200		inputList.forEach(function(element) {
201			params[element.name] = element.value;
202		});
203		params['accessToken'] = accessToken;
204		
205		$.ajax({
206			type: 'POST',
207			url: requestUrl,
208			data: params,
209			dataType: 'json',
210			timeout: 10000
211		}).done(function(data, dataType) {
212			
213			if (!data) {
214				displayErrorMessages(['通信に失敗しました。']);
215				resetLoginState();
216				return;
217			}
218
219			if (data.code && data.code == 409) {
220				displayErrorMessages(['エラーが発生しました。恐れ入りますがもう一度やり直してください。']);
221				resetLoginState();
222				return;
223			}
224
225			if (data.resultCd != 0) {
226				if (data.redirect) {
227					window.location.href = data.redirect;
228					return;
229				}
230				displayErrorMessages(data.errors);
231				displayErrorInputs(data.errorItems);
232				resetLoginState();
233				return;
234			}
235
236			// 遷移先URLが指定されている場合
237			if (transitionUrl != null) {
238				// 画面遷移
239				location.href = transitionUrl;
240			} 
241			// 遷移先未指定の場合
242			else {
243				// 再読込
244				location.reload(); 
245			}
246			
247		}).fail(function(XMLHttpRequest, textStatus, errorThrown) {
248
249			displayErrorMessages(['通信に失敗しました。']);
250			changeLoginBtnDisabled($('#js_form_login'));
251			isAjaxButtonClicked = false;
252			turnstile.reset();
253		});
254	};
255	formAccessByAjax(callback);
256}
257
258// Ajaxでのログイン(e4ガイド画面)
259function loginByAjaxByE4Top(transitionUrl) {
260	
261	var callback = function() {
262		if (isAjaxButtonClicked) {
263			return false;
264		}
265		isAjaxButtonClicked = true;
266		changeLoginBtnDisabled($('#js_form_login'));
267
268		var requestUrl = '/article/ajax/guidelogin.json';
269		
270		var inputList = $('#js_form_login').serializeArray();
271		var params = {};
272		inputList.forEach(function(element) {
273			params[element.name] = element.value;
274		});
275		params['accessToken'] = accessToken;
276		
277		$.ajax({
278			type: 'POST',
279			url: requestUrl,
280			data: params,
281			dataType: 'json',
282			timeout: 10000
283		}).done(function(data, dataType) {
284			
285			if (!data) {
286				displayErrorMessages(['通信に失敗しました。']);
287				resetLoginState();
288				return;
289			}
290
291			if (data.code && data.code == 409) {
292				displayErrorMessages(['エラーが発生しました。恐れ入りますがもう一度やり直してください。']);
293				resetLoginState();
294				return;
295			}
296
297			if (data.resultCd != 0) {
298				if (data.redirect) {
299					window.location.href = data.redirect;
300					return;
301				}
302				displayErrorMessages(data.errors);
303				displayErrorInputs(data.errorItems);
304				resetLoginState();
305				return;
306			}
307
308			// 遷移先URLが指定されている場合
309			if (transitionUrl != null) {
310				// 画面遷移
311				location.href = transitionUrl;
312			} 
313			// 遷移先未指定の場合
314			else {
315				// 再読込
316				location.reload(); 
317			}
318			
319		}).fail(function(XMLHttpRequest, textStatus, errorThrown) {
320
321			displayErrorMessages(['通信に失敗しました。']);
322			changeLoginBtnDisabled($('#js_form_login'));
323			isAjaxButtonClicked = false;
324			turnstile.reset();
325		});
326	};
327	formAccessByAjax(callback);
328}
329
330// エラーメッセージ表示
331function displayErrorMessages(messages) {
332	
333	var html = '';
334	
335	messages.forEach(function(message) {
336		html += '<li class="login_err__item">' + message + '</li>';
337	});
338	
339	$('.login_err_box').html(html);
340}
341
342// エラー入力項目表示更新
343function displayErrorInputs(errorItems) {
344	
345	var inputIdList = ['loginId', 'corpLoginId', 'password', 'corpPassword'];
346	
347	// 入力エラーとなった項目のinput要素にクラスを追加する
348	inputIdList.forEach(function(id) {
349		var isError = ($.inArray(id, errorItems) >= 0);
350		$('#' + id).toggleClass('login_box__text--err', isError);
351	});
352}
353
354// Android端末に入力内容を保存する
355function saveEntryAndroid() {
356	if (typeof jsiFormInput !== "undefined") {
357		var entryJson = getJsonData();
358		jsiFormInput.setJson(entryJson);
359	}
360}
361
362// iOSよりアクリートくらぶIDを設定してもらう
363function setLoginId(value) {
364	$('#loginId').val(value);
365}
366
367// iOSより法人ログインIDを設定してもらう
368function setCorpLoginId(value) {
369	// (アカウント統合によりログインを一つにまとめる)
370	var loginid = $('#loginId').val();
371	if(loginid.length == 0){
372		$('#loginId').val(value);
373	}
374	// $('#corpLoginId').val(value);
375}
376
377// 入力内容データ返却メソッド
378function getJsonData() {
379	
380	// 法人ログインかどうか
381//	var isCorp = (location.hash === '#corp');
382	
383	// 入力内容をJSONに変換
384	var jsonData = {};
385		
386//	if (isCorp) {
387//		jsonData['type'] = 'corp';
388//		jsonData['loginId'] = $("#corpLoginId").val();
389//		jsonData['password'] = $("#corpPassword").val();
390//	} else {
391		jsonData['type'] = 'accrete';
392		jsonData['loginId'] = $("#loginId").val();
393		jsonData['password'] = $("#password").val();
394//	}
395	jsonData['name'] = nameForDisplay;
396	
397	// iOSアプリ向けにACUSESSIDを返却する
398	if (acusessid) {
399		jsonData['acusessid'] = acusessid;
400	}
401	
402	return JSON.stringify(jsonData);
403}
404
405// ログインボタンの有効無効切替
406function changeLoginBtnDisabled($form){
407	var submitBtn = $form.find('input[name="login"]');
408	submitBtn.prop('disabled', isAjaxButtonClicked);
409	if(isAjaxButtonClicked){
410		submitBtn.addClass('btn_disabled');
411	}else{
412		submitBtn.removeClass('btn_disabled');
413	}
414}
415
416function resetLoginState() {
417  if (typeof turnstile !== 'undefined' && typeof turnstile.reset === 'function') {
418    changeLoginBtnDisabled($('#js_form_login'));
419    isAjaxButtonClicked = false;
420    turnstile.reset();
421  } else {
422    isAjaxButtonClicked = false;
423    changeLoginBtnDisabled($('#js_form_login'));
424  }
425}
426
427$(function(){
428	
429	// -- イベント -----------------------------------------------------------
430	$('#js_form_login').submit(function() {
431		var $this = $(this);
432		var url = $this.attr('action'), type = $this.attr('data-login-type');
433		var $submitBtn = $(this).find('input[name="login"]');
434		
435		if (url && type) {
436			if (type === 'app') {
437				// アプリ
438				loginByAjax(url);
439			} else if (type === 'web') {
440				// webログイン
441				loginByAjaxByWebLogin(url);
442			} else if (type === 'e4') {
443				// E4トップ
444				loginByAjaxByE4Top(url);
445			}
446		}
447		return false;
448	});
449	
450	// ID、パスワード変更時にエラーメッセージ非表示
451	$('#js_form_login').on('change','input[type="text"],input[type="password"]', function(){
452		if($(this).hasClass('login_box__text--err')){
453			$(this).removeClass('login_box__text--err');
454		}
455		if($('.login_err__item').length > 0){
456			$('.login_err__item').empty();
457		}
458
459	});
460	
461	// -- 初期処理 -----------------------------------------------------------
462	
463	// 法人ログイン用画面表示
464//	if (location.hash === '#corp') {
465//		$('[data-tab-target="js_tab--membertype--02"]').addClass('this').siblings().removeClass('this');
466//		onClickCorpLogin(true);
467//	} 
468	// アクリートくらぶログイン用画面表示
469//	else {
470		$('[data-tab-target="js_tab--membertype--01"]').addClass('this').siblings().removeClass('this');
471		onClickAccreteLogin(true);
472//	}
473
474	// Android端末からログインIDを取得
475	if (typeof jsiFormInput !== "undefined") {
476		
477		// アクリートくらぶIDを取得してフォームに設定
478		// (アカウント統合によりログインを一つにまとめる)
479		var loginId = jsiFormInput.getLoginId();
480		var corpLoginId = jsiFormInput.getCorpLoginId();
481		if(loginId.length > 0){
482			$("input#loginId").val(loginId);
483		}else if (corpLoginId.length > 0){
484			$("input#loginId").val(corpLoginId);
485		}
486		
487		// 法人ログインIDを取得してフォームに設定
488		// var corpLoginId = jsiFormInput.getCorpLoginId();
489		// $("input#corpLoginId").val(corpLoginId);
490	}
491
492});

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.