PageSourceSearch

https://www.toyamakenjin.tokyo/wp-content/themes/zoomy_tcd067/js/membership.js?ver=2.8.1

js toyamakenjin.tokyo collected 2026-10-04 23:00:30 UTC 22,258 bytes, 733 lines download raw bytes

1jQuery(function($){
2
3	var winWidth = $(window).innerWidth();
4	$(window).on('resize', function(){
5		winWidth = $(window).innerWidth();
6		checkModalScrollbar();
7	});
8
9	/**
10	 * ログイン待ちアクションのログイン後処理を保存する変数
11	 */
12	var waitLoginVars = { type: null };
13
14	/**
15	 * メンバーメニュードロップダウン
16	 */
17	var membermenuDropdownInit = function(){
18		var $membermenu = $('#js-header .p-member-menu');
19		if ($membermenu.length) {
20			var hideMembermenuTimer;
21			var clearHideMembermenuInterval = function() {
22				if (winWidth >= 992 && $membermenu.length) {
23					if (hideMembermenuTimer) {
24						clearInterval(hideMembermenuTimer);
25						hideMembermenuTimer = null;
26					}
27				}
28			};
29
30			$('#js-header').on('click', '#js-header-member-menu-mypage', function(){
31				if (winWidth < 992 && $membermenu.length) {
32					$('body').removeClass('show-sidemenu');
33					$('.p-header-search').removeClass('is-active');
34					$membermenu.toggleClass('is-active');
35					return false;
36				}
37			}).on('mouseenter', '#js-header-member-menu-mypage', function(){
38				if (winWidth >= 992 && $membermenu.length) {
39					clearHideMembermenuInterval();
40					$membermenu.addClass('is-active');
41				}
42			}).on('mouseenter', '.p-member-menu', function(){
43				clearHideMembermenuInterval();
44			}).on('mouseout', '#js-header-member-menu-mypage, .p-member-menu', function(){
45				clearHideMembermenuInterval();
46				if (winWidth >= 992 && $membermenu.length) {
47					hideMembermenuTimer = setInterval(function() {
48						if (!$('#js-header-member-menu-mypage').is(':hover') && !$membermenu.is(':hover')) {
49							clearHideMembermenuInterval();
50							$membermenu.removeClass('is-active');
51						}
52					}, 20);
53				}
54			});
55		}
56	};
57	membermenuDropdownInit();
58
59	/**
60	 * ログインURLリンククリック
61	 */
62	$(document).on('click', 'a[href^="'+TCD_MEMBERSHIP.login_url+'"], [data-url^="'+TCD_MEMBERSHIP.login_url+'"]', function(){
63		if (!$('body').hasClass('logged-in')) {
64			showModalLogin();
65		}
66		return false;
67	});
68
69	/**
70	 * 要ログインリンククリック
71	 */
72	$(document).on('click', '.js-require-login', function(){
73		if (!$('body').hasClass('logged-in')) {
74			if (this.href) {
75				waitLoginVars = {
76					type: 'redirect',
77					url: this.href
78				};
79			} else if ($(this).attr('data-url')) {
80				waitLoginVars = {
81					type: 'redirect',
82					url: $(this).attr('data-url')
83				};
84			}
85			showModalLogin();
86			return false;
87		}
88	});
89
90	/**
91	 * モーダルログイン表示
92	 */
93	var showModalLogin = function() {
94		if (location.href.indexOf(TCD_MEMBERSHIP.login_url) > -1){
95			return false;
96		}
97
98		var $modal = $('#js-modal-login');
99		if (!$modal.length) {
100			var redirect = TCD_MEMBERSHIP.login_url;
101			if (redirect.indexOf('?') > -1) {
102				redirect += '&';
103			} else {
104				redirect += '?';
105			}
106			redirect += 'redirect_to='+encodeURIComponent(location.protocol + "//" + location.host + location.pathname + location.search);
107			location.href = redirect;
108			return false;
109		}
110
111		$('.p-modal.is-active').removeClass('is-active');
112		$modal.addClass('is-active');
113		checkModalScrollbar();
114	};
115
116	/**
117	 * モーダルログインフォーム ajax送信
118	 */
119	$('#js-modal-login #js-modal-login-form').submit(function(){
120		var $modal = $('#js-modal-login');
121		var $form = $('#js-modal-login-form');
122		if ($form.hasClass('is-processing')) return false;
123
124		$form.addClass('is-processing').find('.p-membership-form__error').remove();
125
126		$(this).ajaxSubmit({
127			success: function(data, textStatus, XMLHttpRequest) {
128				$form.removeClass('is-processing');
129				if (data.success) {
130					$('body').addClass('logged-in');
131
132					if (data.header_member_menu) {
133						$('#js-header .p-header-member-menu').html(data.header_member_menu);
134					}
135					if (data.member_menu) {
136						$('#js-header .p-member-menu').remove();
137						$('#js-header .l-header__bar').after(data.member_menu);
138						membermenuDropdownInit();
139					}
140					if (data.footer_bar) {
141						var $footer_bar = $($.parseHTML(data.footer_bar));
142						$('#js-footer-bar').html($footer_bar.html()).attr('class', $footer_bar.attr('class')).attr('style', $footer_bar.attr('style'));
143						$(window).trigger('scroll');
144					}
145
146					switch(waitLoginVars.type) {
147						case 'redirect':
148							location.href = waitLoginVars.url;
149							break;
150						case 'follow':
151							ajaxToggleFollow(waitLoginVars.$elem, waitLoginVars.user_id
151);
152							break;
153						case 'like':
154							ajaxToggleLike(waitLoginVars.$elem, waitLoginVars.post_id);
155							break;
156						default:
157							var redirect = $form.find('[name="redirect_to"]').val();
158;
159							if (redirect) {
160								location.href = redirect;
161							}
162							break;
163					}
164					waitLoginVars = { type: null }
165					$modal.removeClass('is-active');
166				} else if (data.error_message) {
167					$form.find('.p-membership-form__button').append('<p class="p-membership-form__error">'+data.error_message+'</p>');
168				} else {
169					$form.find('.p-membership-form__button').append('<p class="p-membership-form__error">'+TCD_MEMBERSHIP.ajax_error_message+'</p>');
170				}
171				checkModalScrollbar();
172			},
173			error: function(XMLHttpRequest, textStatus, errorThrown) {
174				$form.removeClass('is-processing');
175				$form.find('.p-membership-form__button').append('<p class="p-membership-form__error">'+TCD_MEMBERSHIP.ajax_error_message+'</p>');
176				checkModalScrollbar();
177			}
178		});
179
180		return false;
181	});
182
183	/**
184	 * 会員登録URLクリック
185	 */
186	$(document).on('click', 'a[href^="'+TCD_MEMBERSHIP.registration_url+'"]', function(){
187		if (!$('body').hasClass('logged-in')) {
188			showModalRegistration();
189		}
190		return false;
191	});
192
193	/**
194	 * モーダル仮会員登録表示
195	 */
196	var showModalRegistration = function() {
197		if (location.href.indexOf(TCD_MEMBERSHIP.registration_url) > -1 && location.href.indexOf('registration_account') > -1 ){
198			return false;
199		}
200
201		var $modal = $('#js-modal-registration');
202		if (!$modal.length) {
203			var redirect = TCD_MEMBERSHIP.registration_url;
204			if (redirect.indexOf('?') > -1) {
205				redirect += '&';
206			} else {
207				redirect += '?';
208			}
209			redirect += 'redirect_to='+encodeURIComponent(location.protocol + "//" + location.host + location.pathname + location.search);
210			location.href = redirect;
211			return false;
212		}
213
214		$('.p-modal.is-active').removeClass('is-active');
215		var $modal = $('#js-modal-registration');
216		switchFormContents('#js-modal-registration-form', 'input');
217		$modal.addClass('is-active');
218		checkModalScrollbar();
219	};
220
221	/**
222	 * 仮会員登録フォーム
223	 */
224	// 送信
225	$('#js-registration-form').submit(function(){
226		if ($(this).hasClass('is-processing')) return false;
227		$(this).addClass('is-processing');
228	});
229	// モーダルのみajax送信
230	$('#js-modal-registration-form').submit(function(){
231		var $modal = $(this).closest('.p-modal');
232		var $form = $(this);
233		if ($form.hasClass('is-processing')) return false;
234
235		$form.addClass('is-processing').find('.p-membership-form__error').remove();
236
237		$(this).ajaxSubmit({
238			success: function(data, textStatus, XMLHttpRequest) {
239				$form.removeClass('is-processing');
240				if (data.success) {
241					if (data.registration_complete_desc) {
242						$form.find('.p-membership-form__complete .p-membership-form__body').html(data.registration_complete_desc);
243					}
244					switchFormContents($form, 'complete');
245					$form.addClass('is-completed');
246				} else if (data.error_message) {
247					$form.find('.p-membership-form__input .p-membership-form__button').append('<p class="p-membership-form__error">'+data.error_message+'</p>');
248				} else {
249					$form.find('.p-membership-form__input .p-membership-form__button').append('<p class="p-membership-form__error">'+TCD_MEMBERSHIP.ajax_error_message+'</p>');
250				}
251			},
252			error: function(XMLHttpRequest, textStatus, errorThrown) {
253				$form.removeClass('is-processing');
254				$form.find('.p-membership-form__input .p-membership-form__button').append('<p class="p-membership-form__error">'+TCD_MEMBERSHIP.ajax_error_message+'</p>');
255			}
256		});
257
258		return false;
259	});
260
261	/**
262	 * 本会員登録・アカウント作成フォーム
263	 */
264	// html5バリデーションを走らせるためフォームsubmitで確認画面表示
265	$('#js-registration-account-form').on('submit.confirm', function(){
266		var confirm = createConfirmContents(this);
267		if (confirm) {
268			var $form = $(this);
269			$form.find('.p-membership-form__confirm .p-membership-form__body').html(confirm);
270			switchFormContents($form, 'confirm');
271		}
272		return false;
273	});
274	// 戻る
275	$('#js-registration-account-form .js-back-button').click(function(){
276		var $form = $(this).closest('form');
277		switchFormContents($form, 'input');
278		return false;
279	});
280	// 送信
281	$('#js-registration-account-form .js-submit-button').click(function(){
282		var $form = $(this).closest('form');
283		if ($form.hasClass('is-processing')) return false;
284
285		$form.addClass('is-processing').find('.p-membership-form__error').remove();
286
287		// 確認処理を外してフォーム送信
288		$form.off('submit.confirm').trigger('submit');
289	});
290
291	/**
292	 * その他フォームの重複送信対策
293	 */
294	$('form.js-membership-form--normal').on('submit.processing', function(){
295		if ($(this).hasClass('is-processing')) return false;
296		$(this).addClass('is-processing');
297	});
298
299	/**
300	 * プロフィール編集・アカウント編集でテキストフィールドでのエンターキーでフォーム送信しないように
301	 */
302	$('#js-edit-profile-form, #js-edit-account-form').on('keypress', ':input:not(textarea)', function(event) {
303
304		if (event.keyCode == 13) {
305			event.preventDefault();
306		}
307	});
308
309	/**
310	 * 姓名確認対策
311	 */
312	if ($('.p-membership-form__table-fullname .fullname-hidden').length) {
313		$('.p-membership-form__table-fullname').find('.last_name, .first_name').change(function(){
314			var fullname = '';
315
316			$('.p-membership-form__table-fullname').find('.last_name, .first_name').each(function(){
317				if (fullname) {
318					fullname += ' ';
319				}
320				fullname += this.value;
321			});
322
323			$('.p-membership-form__table-fullname .fullname-hidden').val(fullname);
324		}).trigger('change');
325	}
326
327	/**
328	 * 生年月日確認対策
329	 */
330	if ($('.p-membership-form__table-birthday .birthday-hidden').length) {
331		$('.p-membership-form__table-birthday select').change(function(){
332			var $cl = $(this).closest('.p-membership-form__table-birthday');
333			var $hidden = $cl.find('.birthday-hidden');
334			var year = $cl.find('.birthday-year').val();
335			var month = $cl.find('.birthday-month').val();
336			var day = $cl.find('.birthday-day').val();
337			var birthday = '';
338
339			if (!year && month && day) {
340				birthday = $hidden.attr('data-format-md');
341				birthday = birthday.replace('m', month);
342				birthday = birthday.replace('d', day);
343			} else if (year || month || day) {
344				birthday = $hidden.attr('data-format-ymd');
345				birthday = birthday.replace('y', year);
346				birthday = birthday.replace('m', month);
347				birthday = birthday.replace('d', day);
348			}
349			$hidden.val(birthday);
350		});
351		$('.p-membership-form__table-birthday .birthday-year').trigger('change');
352	}
353
354	/**
355	 * フォロークリック
356	 */
357	$(document).on('click', '.js-toggle-follow', function(){
358		var user_id = $(this).attr('data-user-id');
359		if (!user_id) return false;
360		if ($(this).hasClass('is-ajaxing')) return false;
361
362		// 未ログインの場合はモーダルログイン表示
363		if (!$('body').hasClass('logged-in')) {
364			waitLoginVars = {
365				type: 'follow',
366				user_id: user_id,
367				$elem: $(this)
368			};
369			showModalLogin();
370			return false;
371		}
372
373		ajaxToggleFollow($(this), user_id);
374
375		return false;
376	});
377
378	/**
379	 * フォローajax
380	 */
381	var ajaxToggleFollow = function(el, user_id) {
382		$(el).addClass('is-ajaxing');
383		$.ajax({
384			url: TCD_MEMBERSHIP.ajax_url,
385			type: 'POST',
386			data: {
387				action: 'toggle_follow',
388				user_id: user_id
389			},
390			success: function(data, textStatus, XMLHttpRequest) {
391				$(el).removeClass('is-ajaxing');
392				if (data.result == 'added') {
393					$(el).addClass('p-button-following').removeClass('p-button-follow').html(data.text);
394				} else if (data.result == 'removed') {
395					$(el).addClass('p-button-follow').removeClass('p-button-following').html(data.text);
396				} else if (data.message) {
397					showModalAlert(data.message);
398				} else {
399					showModalAlert(TCD_MEMBERSHIP.ajax_error_message);
400				}
401			},
402			error: function(XMLHttpRequest, textStatus, errorThrown) {
403				$(el).removeClass('is-ajaxing');
404				showModalAlert(TCD_MEMBERSHIP.ajax_error_message);
405			}
406		});
407	};
408
409	/**
410	 * いいねクリック
411	 */
412	$(document).on('click', '.js-toggle-like', function(){
413		var self = this;
414		var post_id = $(this).attr('data-post-id');
415		if (!post_id) return false;
416		if ($(this).hasClass('is-ajaxing')) return false;
417
418		// 未ログインの場合はモーダルログイン表示
419		if (!$('body').hasClass('logged-in')) {
420			waitLoginVars = {
421				type: 'like',
422				post_id: post_id,
423				$elem: $(this)
424			};
425			showModalLogin();
426			return false;
427		}
428
429		ajaxToggleLike($(this), post_id)
430		return false;
431	});
432
433	/**
434	 * いいねajax
435	 */
436	var ajaxToggleLike = function(el, post_id) {
437		$(el).addClass('is-ajaxing');
438		$.ajax({
439			url: TCD_MEMBERSHIP.ajax_url,
440			type: 'POST',
441			data: {
442				action: 'toggle_like',
443				post_id: post_id
444			},
445			success: function(data, textStatus, XMLHttpRequest) {
446				$(el).removeClass('is-ajaxing');
447				if (data.result == 'added') {
448					$(el).addClass('p-icon-liked').removeClass('p-icon-like').html(data.likes_number);
449				} else if (data.result == 'removed') {
450					$(el).addClass('p-icon-like').removeClass('p-icon-liked').html(data.likes_number);
451				} else if (data.message) {
452					showModalAlert(data.message);
453				} else {
454					showModalAlert(TCD_MEMBERSHIP.ajax_error_message);
455				}
456			},
457			error: function(XMLHttpRequest, textStatus, errorThrown) {
458				$(el).removeClass('is-ajaxing');
459				showModalAlert(TCD_MEMBERSHIP.ajax_error_message);
460			}
461		});
462	};
463
464	/**
465	 * 報告するクリック
466	 */
467	$('.js-report-button').on('click', function(){
468		// 未ログインの場合はモーダルログイン表示
469		if (!$('body').hasClass('logged-in')) {
470			waitLoginVars = {
471				type: 'report'
472			};
473			showModalLogin();
474			return false;
475		}
476
477		$('.p-modal.is-active').removeClass('is-active');
478
479		var $modal = $('#js-modal-report');
480		var $form = $('#js-modal-report-form');
481
482		switchFormContents($form, 'input');
483		$modal.addClass('is-active');
484		checkModalScrollbar();
485
486		return false;
487	});
488
489	/**
490	 * モーダル報告するフォーム
491	 */
492	// html5バリデーションを走らせるためフォームsubmitで確認画面表示
493	$('#js-modal-report-form').on('submit.confirm', function(){
494		var confirm = createConfirmContents(this);
495		if (confirm) {
496			var $form = $(this);
497			$form.find('.p-membership-form__confirm .p-membership-form__body').html(confirm);
498			switchFormContents($form, 'confirm');
499			checkModalScrollbar();
500		}
501		return false;
502	});
503	// 戻る
504	$('#js-modal-report .js-back-button').click(function(){
505		var $form = $('#js-modal-report-form');
506		switchFormContents($form, 'input');
507		checkModalScrollbar();
508		return false;
509	});
510	// ajax送信
511	$('#js-modal-report .js-submit-button').click(function(){
512		var $modal = $('#js-modal-report');
513		var $form = $('#js-modal-report-form');
514		if ($form.hasClass('is-ajaxing')) return false;
515
516		$form.addClass('is-processing').find('.p-membership-form__error').remove();
517
518		$.ajax({
519			url: TCD_MEMBERSHIP.ajax_url,
520			type: 'POST',
521			data: {
522				action: 'report_post',
523				post_id: $form.find('[name="post_id"]').val(),
524				report_comment: $form.find('[name="report_comment"]').val()
525			},
526			success: function(data, textStatus, XMLHttpRequest) {
527				$form.removeClass('is-processing');
528
529				if (data.success) {
530					switchFormContents($form, 'complete');
531					$form.trigger('reset');
532				} else if (data.error_message) {
533						$form.find('.p-membership-form__input .p-membership-form__button').append('<p class="p-membership-form__error">'+data.error_message+'</p>');
534					switchFormContents($form, 'input');
535				} else {
536					$form.find('.p-membership-form__input .p-membership-form__button').append('<p class="p-membership-form__error">'+TCD_MEMBERSHIP.ajax_error_message+'</p>');
537					switchFormContents($form, 'input');
538				}
539			},
540			error: function(XMLHttpRequest, textStatus, errorThrown) {
541				$form.removeClass('is-processing');
542				$form.find('.p-membership-form__input .p-membership-form__button').append('<p class="p-membership-form__error">'+TCD_MEMBERSHIP.ajax_error_message+'</p>');
543				switchFormContents($form, 'input');
544			}
545		});
546
547		return false;
548	});
549
550	/**
551	 * フォーム表示項目切り替え
552	 */
553	var switchFormContents = function(form, show) {
554		if (show === 'input') {
555			$(form).removeClass('is-confirm').removeClass('is-complete').addClass('is-input');
556		} else if (show === 'confirm') {
557			$(form).removeClass('is-input').removeClass('is-complete').addClass('is-confirm');
558		} else if (show === 'complete') {
559			$(form).removeClass('is-input').removeClass('is-confirm').addClass('is-complete');
560		} else {
561			return false;
562		}
563		checkModalScrollbar();
564	};
565
566	/**
567	 * フォーム入力内容確認html生成
568	 */
569	var createConfirmContents = function(form) {
570		var html = '';
571
572		$(form).find('[data-confirm-label]:input').each(function(){
573			if ($(this).is(':radio, :checkbox')) {
574				if ($(this).is(':checked')) {
575					html += '<tr><th>'+$(this).attr('data-confirm-label')+'</th><td>'+$(this).closest('label').text()+'</td></tr>'
576				}
577			} else if ($(this).is('textarea')) {
578				html += '<tr><th>'+$(this).attr('data-confirm-label')+'</th><td>'+$(this).val().replace(/\n/g, '<br>')+'</td></tr>'
579			} else {
580					html += '<tr><th>'+$(this).attr('data-confirm-label')+'</th><td>'+$(this).val()+'</td></tr>'
581			}
582		});
583
584		if (html) {
585			html = '<table class="p-membership-form__table p-membership-form__table-confirm">'+html+'</table>';
586		}
587
588		return html;
589	};
590
591	/**
592	 * モーダル 閉じる
593	 */
594	$(document).on('click', '.p-modal .p-modal__close', function(event){
595		if (!$(this).closest('.p-modal').find('.is-processing').length) {
596			$(this).closest('.p-modal').removeClass('is-active');
597		}
598		return false;
599	}).on('click', '.p-modal .p-modal__contents', function(event){
600		event.stopPropagation();
601	}).on('click', '.p-modal', function(event){
602		if (!$(this).closest('.p-modal').find('.is-processing').length && !$(this).hasClass('.p-modal--disable-mask-click-close')) {
603			$(this).removeClass('is-active');
604		}
605	});
606
607	/**
608	 * 汎用削除確認モーダル表示
609	 */
610	var waitDeleteConfirmVars = { type: null };
611	$('form.js-delete-confirm').on('submit', function(){
612		if ($(this).hasClass('is-processing')) return false;
613	});
614	$('form.js-delete-confirm').on('submit.deleteConfirm', function(){
615		if ($(this).hasClass('is-processing')) return false;
616
617		waitDeleteConfirmVars = {
618			action: 'submit',
619			$elem: $(this)
620		};
621
622		$('.p-modal.is-active').removeClass('is-active');
623		$('#js-modal-delete-confirm').addClass('is-active');
624		return false;
625	});
626	$(document).on('click.deleteConfirm', 'a.js-delete-confirm', function(){
627		waitDeleteConfirmVars = {
628			action: 'click',
629			$elem: $(this)
630		};
631		return false;
632	});
633	// cancel
634	$('#js-modal-delete-confirm .js-cancel-button').on('click', function(){
635		$('#js-modal-delete-confirm').removeClass('is-active');
636		return false;
637	});
638	// delete
639	$('#js-modal-delete-confirm .js-submit-button').on('click', function(){
640		if (waitDeleteConfirmVars.action === 'submit') {
641			$('#js-modal-delete-confirm-form').addClass('is-processing');
642			waitDeleteConfirmVars.$elem.off('submit.deleteConfirm').trigger('submit').addClass('is-processing');
643		} else if (waitDeleteConfirmVars.action === 'click') {
644			$('#js-modal-delete-confirm-form').addClass('is-processing');
645			waitDeleteConfirmVars.$elem.off('click.deleteConfirm').trigger('click');
646		} else {
647			$('#js-modal-delete-confirm').removeClass('is-active');
648		}
649		return false;
650	});
651
652	/**
653	 * モーダルスクロールバー有無チェック
654	 */
655	var checkModalScrollbar = function() {
656		if ($('body').hasClass('is-wp-mobile-device')) return false;
657		var $modal = $('.p-modal.is-active');
658		var $modalContents = $modal.find('.p-modal__contents:visible');
659		var modalInner = $modal.find('.p-modal__contents__inner:visible').get(0);
660		if (!modalInner || !$modalContents.length) return false;
661		if (modalInner.scrollHeight > $modalContents.height()) {
662			$modal.addClass('has-scrollbar');
663		} else {
664			$modal.removeClass('has-scrollbar');
665		}
666	};
667
668	/**
669	 * モーダルアラート表示
670	 */
671	var showModalAlert = function(msg) {
672		if (!msg) return false;
673
674		var $modalAlert = $('#js-modal-alert');
675		if (!$modalAlert.length) {
676			var html = '<div id="js-modal-alert" class="p-modal p-modal--alert">';
677			html += '<div class="p-modal__contents">';
678			html += '<div class="p-modal__contents__inner">';
679			html += '<div class="p-modal__body p-body"></div>';
680			html += '<button class="p-modal__close">&#xe91a;</button>';
681			html += '</div>';
682			html += '</div>';
683			html += '</div>';
684			$modalAlert = $(html).appendTo('body');
685		}
686
687		$('.p-modal.is-active').removeClass('is-active');
688		$modalAlert.find('.p-modal__body').html(msg);
689		$modalAlert.addClass('is-active');
690	};
691
692	// モーダルアラート自動表示
693	if (TCD_MEMBERSHIP.auto_modal_alert_message) {
694		$(document).on('js-initialized-after', function(){
695			showModalAlert(TCD_MEMBERSHIP.auto_modal_alert_message);
696		});
697	}
698
699	/**
700	 * ブラウザ戻る対策
701	 * 参考 http://mugen00.moo.jp/web/jquery/beforeunload
702	 */
703	if (TCD_MEMBERSHIP.browser_back_alert_messege) {
704		(function(b) {
705			var c = function() {
706				this.initialize();
707			};
708			c.prototype = {
709				initialize: function() {
710					history.replaceState('beforeunload', null, null);
711					history.pushState(null, null, null);
712					b(window).on('popstate', b.proxy(this.popstate, this));
713				},
714				popstate: function(e) {
715					if (e.originalEvent.state === 'beforeunload') {
716						showModalAlert(TCD_MEMBERSHIP.browser_back_alert_messege);
717					}
718				},
719			};
720			new c();
721		})(jQuery);
722	}
723
724	/**
725	 * プレビュー確認画面でのリンククリック対策
726	 */
727	if (TCD_MEMBERSHIP.confirm_page_leave) {
728		$('a').on('click', function(){
729			return confirm(TCD_MEMBERSHIP.confirm_page_leave);
730		});
731	}
732
733});

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.