PageSourceSearch

https://www.tanomail.com/common-tano/js/by-d/cm/qs_modal.js

js tanomail.com collected 2026-10-04 00:19:06 UTC 18,015 bytes, 536 lines download raw bytes

1tano.MODAL_FADE_IN_SPEED	=	500;	//  汎用モーダルのフェードインに掛かる時間
2tano.MODAL_FADE_OUT_SPEED	=	500;	//  汎用モーダルのフェードアウトに掛かる時間
3
4var qs_timeout = 3000;
5
6/* 
7	#1427	汎用モーダル
8*/
9(function(){
10	// ↓↓↓ ★★★★ オブジェクトtanoを開発用オブジェクトtano.d.okiniiri_folder_henshuへコピー(tano汚染防止) ★★★★ ↓↓↓
11	if (!tano.d) {
12		tano.d = {};
13	}
14	tano.d.cm_qs = {};
15	tano.d.cm_qs = $.extend(true, {}, tano);
16	// ↑↑↑ ★★★★ オブジェクトtanoを開発用オブジェクトtano.d.okiniiri_folder_henshuへコピー(tano汚染防止) ★★★★ ↑↑↑
17tano.d.cm_qs.qs_modal={
18	 if_ie6:false
19	,if_ie7:false
20	,if_ie_lt_9:false
21	,if_use_css_transition:false
22	,first_height:false
23	,after_load_functions:[]
24	,after_load_args:[]
25	,init:function(){
26		if(navigator.userAgent.indexOf("iPad")!==-1){
27			_this.if_use_css_transition=true;
28			$("<style>.tano-modal_overlay .tano-modal{display:block;}.tano-modal_gray,.tano-modal_overlay,.tano-modal{display:block;opacity:0;-webkit-transition: opacity 0.5s ease-in-out;}.tano-modal_gray{background-color:#000000;}body .tano-modal_gray.tano-modal-transition-show{opacity:0.3}body .tano-modal_overlay.tano-modal-transition-show,body .tano-modal.tano-modal-transition-show{opacity:1}</style>").appendTo('head');
29		}
30
31		$(this.load_func);
32	}
33	,load_func:function(){
34		if(!$.support.tbody){
35			if (typeof(document.documentElement.style.maxHeight) != "undefined") {
36				_this.if_ie7=true;
37			} else {
38				_this.if_ie6=true;
39			}
40		};
41		if($.support.leadingWhitespace===false){
42			_this.if_ie_lt_9 = true;
43		}
44		
45		// ★★★★ tano-modal-button → tano-d-cm-inquiry
46		$(".tano-d-sh-inquiry-btn").each(_this.init_links);
47		
48	}
49	,init_links:function(idx,link_dom_elem,pre_gray_dom_elem){
50		var url=null;
51		if(	$(link_dom_elem).is("a")){
52			if(typeof($(link_dom_elem).attr("href"))!=="undefined" && $(link_dom_elem).attr("href")!==""){
53				url = $(link_dom_elem).attr("href");
54			}
55		} else if(	$(link_dom_elem).is("input")){
56			if(typeof($(link_dom_elem).attr("title"))!=="undefined" && $(link_dom_elem).attr("title")!==""){
57				url = $(link_dom_elem).attr("title");
58				$(link_dom_elem).removeAttr("title");
59			}
60		}
61		if(url===null) return false;
62		
63		$.data(link_dom_elem,"url",url);
64		
65		// ↓↓↓ ★★★★ 全量バインドなのでイベント重複を防ぐため前回バインド分を削除 ★★★★ ↓↓↓
66		$(link_dom_elem).unbind("click", _this.click_func);
67		// ↑↑↑ ★★★★ 全量バインドなのでイベント重複を防ぐため前回バインド分を削除 ★★★★ ↑↑↑
68		
69		if(typeof(pre_gray_dom_elem)!=="undefined"){
70			$(link_dom_elem).bind("click",{"pre_gray_dom_elem":pre_gray_dom_elem},_this.click_func);
71		} else {
72			$(link_dom_elem).bind("click",_this.click_func);
73		}
74	}
75	,click_func:function(e){
76		var link_dom_elem = this;
77		link_dom_elem.blur();
78		var if_nested = false;
79		var pre_gray_dom_elem = null;
80		if(e.data !== null && "pre_gray_dom_elem" in e.data){
81			var pre_gray_dom_elem = e.data["pre_gray_dom_elem"];
82			var close_elem =$.data(pre_gray_dom_elem,"elems")["close"];
83		}
84		
85		// ↓↓↓ ★★★★ お問い合わせモーダル固有 ★★★★ ↓↓↓
86		var data = {
87				chumonNo: $.trim($(this).parents('.tano-d-sh-cartin-area').find(".tano-d-sh-cartin-chumon-no").val())
88		};
89		var request = $.ajax({
90			type: 'POST',
91			url: $('#tano-d-sh-inquiry-url').val(),
92			data: JSON.stringify(data),
93			cache: false,
94			contentType: 'application/json',
95			dataType: 'json',
96			timeout: qs_timeout
97		});
98
99		// 成功時のコールバック関数の登録
100		request.done(function(data, textStatus, jqXHR) {
101			// 処理成功時の記述
102			if (data.resultCd == '00') {
103				// 正常時
104				_this.load_modal_html(data.html, pre_gray_dom_elem);
105			} else {
106				// エラー時
107				// メッセージ
108				_this.load_modal_html(data.html, pre_gray_dom_elem);
109			}
110		});
111		// 失敗時のコールバック関数の登録
112		request.fail(function( jqXHR, textStatus, errorThrown ) {
113			// 処理失敗時の記述
114			// 処理なし
115			//alert("お問い合わせ情報の処理に失敗しました");
116		});
117		// ↑↑↑ ★★★★ お問い合わせモーダル固有 ★★★★ ↑↑↑
118		return false;
119	}
120	,load_modal_html:function(html_data,pre_gray_dom_elem){
121		var reg_body = /(<body[^>]*>|<\/body>)/ig;
122		if (reg_body.test(html_data)) html_data = html_data.split(reg_body)[(_this.if_ie_lt_9 ? 1 : 2)];
123		
124		var contents_elem = $(html_data);
125		contents_elem.appendTo($("body"))
126		
127		var contents_original_width = null;
128		if(_this.if_ie6){
129			var contents_original_width = contents_elem.css("width");
130			if(!contents_original_width){
131				contents_original_width = $("wrapper").width() + "px";
132			}
133			contents_elem.css("width", contents_original_width);
134		}
135		
136		var if_nested = false;
137		if(pre_gray_dom_elem!==null){
138			if_nested = true;
139			var gray_elem = $(pre_gray_dom_elem);
140			var gray_dom_elem = pre_gray_dom_elem;
141		} else {
142			var gray_elem = $('<div class="tano-modal_gray"></div>').insertBefore(contents_elem);
143			var gray_dom_elem = gray_elem.get(0);
144		}
145		var overlay_elem = $('<div class="tano-modal_overlay"></div>').insertBefore(contents_elem);
146		var close_elem = $('<span class="tano-modal-close">閉じる</span>').prependTo(contents_elem);
147			
148		if(_this.if_ie6){
149			gray_elem.css("position","absolute");
150			overlay_elem.css("position","absolute");
151		}
152
153		var horizontal_paddings = 0;
154		$.each(["padding-left","padding-right","border-left-width","border-right-width"],function(key,value){
155			horizontal_paddings += Number(contents_elem.css(value).replace(/px/,""));
156		});
157		var vertical_paddings = 0;
158		$.each(["padding-top","padding-bottom","border-top-width","border-bottom-width"],function(key,value){
159			vertical_paddings += Number(contents_elem.css(value).replace(/px/,""));
160		});
161		
162		gray_elem.unbind("click.modal_close").bind("click.modal_close",{"gray_dom_elem":gray_dom_elem},_this.close_func);
163		close_elem.unbind("click").bind("click",{"gray_dom_elem":gray_dom_elem},_this.close_func);
164		contents_elem.bind("click",function(e){e.stopPropagation();});
165		
166		contents_elem.find(".tano-modal-button").each(function(idx,link_dom_elem){
167			_this.init_links.apply(this,[idx,link_dom_elem,gray_dom_elem]);
168		});
169		
170		contents_elem.find(".tano-balloon-button").each(function(idx,link_dom_elem){
171			_cm_qs_modal.tano_balloon.init_links.apply(this,[idx,link_dom_elem,true]);
172		});
173		contents_elem.find(".tano-placeholder").each(tano.tano_placeholder.set);
174		_this.first_height = contents_elem.innerHeight() + vertical_paddings + 8;
175
176		contents_elem.find(".tano-modal-cancel").bind("click.modal_close",{"gray_dom_elem":gray_dom_elem},_this.close_func);
177		
178		if(typeof(tano.double_tab)!=="undefined"){
179			if(contents_elem.find("." + tano.double_tab.classes.container).length > 0){
180				_cm_qs_modal.double_tab.load_modal_func(contents_elem.get(0),gray_dom_elem);
181			}
182		}
183
184		//追記
185		$(window).on('resize',function() {
186			gray_elem.css({width:$(window).width()});
187			var margin_top  = 0;
188			if(_this.first_height > ~~($(window).height() - 40)) {
189				contents_height = ~~($(window).height() - 40);
190				margin_top  = -(~~(contents_height+20) / 2);
191			} else {
192				contents_height = _this.first_height;
193				margin_top  = -(contents_height / 2);
194			}
195			if(_this.if_ie6){
196				margin_top  += $("html").scrollTop();
197			};
198			overlay_elem
199				.css({
200					'margin-top': margin_top  + 'px'
201				});
202		});
203		
204	
205		var contents_width = contents_elem.width();
206		var html_width = $("html").width();
207		var html_height = $("html").height();
208		contents_width += horizontal_paddings;
209		
210		if(contents_width > html_width){
211			contents_elem.width(html_width - horizontal_paddings);
212			contents_width = html_width;
213		}
214		var contents_height = 0, margin_top  = 0;
215		if(_this.first_height > ~~($(window).height() - 40)) {
216			contents_height = ~~($(window).height() - 40);
217			margin_top  = -(~~(contents_height+20) / 2);
218			contents_elem.css({overflowY:'auto'});
219		} else {
220			contents_height = _this.first_height;
221			margin_top  = -(contents_height / 2);
222			contents_elem.css({overflowY:'auto'});
223		}
224		var margin_left = -(contents_width / 2);
225		if(_this.if_ie6){
226			margin_top  += $("html").scrollTop();
227			margin_left += $("html").scrollLeft();
228		};
229		overlay_elem
230			.append(contents_elem)
231			.css({
232				'margin-top': margin_top  + 'px'
233				,'margin-left': margin_left + 'px'
234				,'width':contents_width + "px"
235			});
236		contents_elem.css({height:contents_height + "px"});
237		
238		if(if_nested){
239			var animate_elems = [overlay_elem,contents_elem]
240		} else {
241			var animate_elems = [gray_elem,overlay_elem,contents_elem]
242		}
243		if(!_this.if_use_css_transition){
244			$.each(animate_elems,function(){
245				this.animate( {
246					opacity : 'show'
247				}, {
248					duration : tano.MODAL_FADE_IN_SPEED
249				});
250			});
251		}
252		
253		//var wrap_top  = -($(window).scrollTop()) + $('body').css('border-top-width');
254		var wrap_top  = -($(window).scrollTop()) + Number($('body').css('border-top-width').replace("px",""));
255		var offset_left = $("#wrap").offset().left;
256		var wrap_left = 0;
257		if(offset_left === 0) {
258			wrap_left= -($(window).scrollLeft());
259		}
260		var wrap_height = $(window).scrollTop() + $(window).height();
261
262		if($('body').hasClass('tano-lp')){
263			var back = $(document).scrollTop() + 876;
264		}else{
265			var back = $(document).scrollTop() + 910;
266		}
267		$('body').css({
268			"background-position":"0 -" + back + "px"
269		});
270
271		$("#wrap").css({
272			 "position": "fixed"
273			,"padding-left": offset_left + "px"
274			,"padding-right": offset_left + "px"
275			,"top"  : wrap_top  + "px"
276			,"left" : wrap_left + "px"
277			,"height": wrap_height + "px"
278		});
279
280		// 【SI-635】 Start PC購入導線
281		$("#wrap").addClass("open-modal");
282		// 【SI-635】 End PC購入導線
283
284		// 115行目から移動
285		gray_elem.css({
286			 "width":$(document).width()
287			,"height":$(document).height()
288		});
289		//$(window).scrollTop(0);
290		if(!tano.lt_ie7){
291			tano.tano_follow_scroll.window_scroll_top = $(window).scrollTop();
292			tano.tano_follow_scroll.check_func();
293		}
294		
295		$.data(gray_dom_elem,"elems",{
296			 "overlay":overlay_elem
297			,"contents":contents_elem
298			,"close":close_elem
299		});
300		$.data(gray_dom_elem,"animate",false);
301		$.data(gray_dom_elem,"paddings",{
302			 "horizontal":horizontal_paddings
303			,"vertical":vertical_paddings
304		});
305		if(_this.if_ie6){
306			$('select').not('.tano-modal_overlay select').css("visibility","hidden");
307			$(window).unbind("scroll.modal_ie_scroll").bind("scroll.modal_ie_scroll",{"gray_dom_elem":gray_dom_elem},_this.modify_position);
308			$.data(gray_dom_elem,"contents_original_width",contents_original_width);
309		}
310
311		while(_this.after_load_functions.length>0){
312			var after_load_function = _this.after_load_functions.shift();
313			var after_load_arg = null;
314			if(_this.after_load_args.length > 0){
315				after_load_arg = _this.after_load_args.shift();
316			};
317			after_load_function.apply(null,after_load_arg);
318		}
319		
320		if(_this.if_use_css_transition){
321			$.each(animate_elems,function(){
322				$(this).addClass("tano-modal-transition-show");
323			});
324		}
325		
326		contents_elem.bind('keydown.modal', function(event) {
327            if (event.keyCode !== 9) {
328                return;
329            }
330
331            var tabbables = $('a,input,select,button', this),
332                first = tabbables.filter(':first'),
333                last  = tabbables.filter(':last');
334
335            if (event.target === last[0] && !event.shiftKey) {
336                first.focus();
337                return false;
338            } else if (event.target === first[0] && event.shiftKey) {
339                last.focus();
340                return false;
341            }
342        }).find('a,input,select,button').eq(0).focus();
343		
344		return false;
345	}
346	,close_func:function(e,pre_close_object){
347		var gray_dom_elem	= e.data["gray_dom_elem"];
348		var gray_elem 		= $(gray_dom_elem);
349		var contents_elem	= $.data(gray_dom_elem,"elems")["contents"];
350		var overlay_elem	= $.data(gray_dom_elem,"elems")["overlay"];
351		if($.data(gray_dom_elem,"animate")===true) return false;
352		
353		$.data(gray_dom_elem,"animate",true);
354		
355		if(typeof(pre_close_object)!=="undefined"){
356			if(_this.if_use_css_transition){
357				overlay_elem.removeClass("tano-modal-transition-show");
358				pre_close_object["fx"].apply(overlay_elem.get(0),pre_close_object["args"]);
359				setTimeout((function(overlay_elem){
360					return function(){
361						overlay_elem.remove();
362						_this.after_close_func();
363					}
364				})(overlay_elem),tano.MODAL_FADE_OUT_SPEED);
365			} else {
366				overlay_elem.animate( {
367					 opacity : 'hide'
368				},{
369					 duration:tano.MODAL_FADE_OUT_SPEED
370					,complete:(function(pre_close_object){
371						return function(){
372							overlay_elem.remove();
373							_this.after_close_func();
374							pre_close_object["fx"].apply(this,pre_close_object["args"]);
375						}
376					})(pre_close_object)
377				});
378			}
379		} else {
380			if(_this.if_ie6){
381				$(window).unbind("scroll.modal_ie_scroll")
382			};
383			if(_this.if_use_css_transition){
384				gray_elem.removeClass("tano-modal-transition-show");
385				overlay_elem.removeClass("tano-modal-transition-show");
386				_this.close_pre_func(gray_dom_elem);
387				setTimeout((function(gray_elem,overlay_elem){
388					return function(){
389						gray_elem.remove();
390						overlay_elem.remove();
391						_this.after_close_func();
392					}
393				})(gray_elem,overlay_elem),tano.MODAL_FADE_OUT_SPEED);
394			} else {
395				gray_elem.animate( {
396					 opacity : 'hide'
397				},{
398					 duration:tano.MODAL_FADE_OUT_SPEED,
399					 complete: function() {
400						_this.close_pre_func(gray_dom_elem);
401					 }
402				});
403				overlay_elem.animate( {
404					 opacity : 'hide'
405				},{
406					 duration:tano.MODAL_FADE_OUT_SPEED
407					,complete:function(){
408						_this.close_pre_func(gray_dom_elem);
409					}
410				});
411			}
412		}
413		
414		/* if(!_this.if_use_css_transition){
415			_this.after_close_func();
416		} */
417		return false;
418	}
419	,after_close_func:function(){
420		var body_top = Math.abs($("#wrap").css("top").replace("px",""));
421		var body_left = Math.abs($("#wrap").css("left").replace("px",""));
422		$("body").removeAttr('style');
423		$("#wrap").css({
424			 "position": "static"
425			,"padding-left": ""
426			,"padding-right": ""
427			,"top" : ""
428			,"left" : ""
429			,"height":""
430		});
431		// 【SI-635】 Start PC購入導線
432		$("#wrap").removeClass("open-modal");
433		// 【SI-635】 End PC購入導線
434
435		$(window).scrollTop(body_top);
436		$(window).scrollLeft(body_left);
437		if(_this.if_ie6){
438			$('select').not('.tano-modal_overlay select').css("visibility","visible");
439		};
440	}
441	,close_pre_func :function(gray_dom_elem){
442		var gray_elem = $(gray_dom_elem);
443		var overlay_elem = $.data(gray_dom_elem,"elems")["overlay"];
444		if(gray_elem.is(":hidden") && overlay_elem.is(":hidden")){
445			gray_elem.remove();
446			overlay_elem.remove();
447			_this.after_close_func();
448		}
449	}
450	,modify_position:function(e){
451		var gray_dom_elem = 	e.data["gray_dom_elem"];			
452		var overlay_elem =  	$.data(gray_dom_elem,"elems")["overlay"];
453		var contents_elem =  	$.data(gray_dom_elem,"elems")["contents"];
454		
455		var horizontal_paddings = $.data(gray_dom_elem,"paddings")["horizontal"];
456		var vertical_paddings =	$.data(gray_dom_elem,"paddings")["vertical"];
457		
458		if(contents_elem.get(0).style.height==""){
459			if(
460			   $(window).height() - 40 < contents_elem.height() 
461			){
462				contents_elem.height ( $(window).height() - 40 );
463			}
464		}
465
466		var contents_width = contents_elem.width() + horizontal_paddings;
467		var contents_height = contents_elem.height() + vertical_paddings;
468		
469		var margin_top  = -(contents_height / 2)	+ $("html").scrollTop();
470		var margin_left = -(contents_width / 2)		+ $("html").scrollLeft();
471		overlay_elem.css({
472			 'margin-top': margin_top  + 'px'
473			,'margin-left': margin_left + 'px'
474		});
475	}
476	,set_after_load_function:function(fx,args){
477		_this.after_load_functions.push(fx);
478		_this.after_load_args.push(args);
479	}
480	,click_post_func:function(e){
481		var link_dom_elem = this;
482		
483		var if_nested = false;
484		var pre_gray_dom_elem = null;
485		if(e.data !== null && "pre_gray_dom_elem" in e.data){
486			var pre_gray_dom_elem = e.data["pre_gray_dom_elem"];
487			var close_elem =$.data(pre_gray_dom_elem,"elems")["close"];
488		}
489		var action_url = $(link_dom_elem).attr("href");
490		var post_data = $(link_dom_elem).closest("form").serializeArray();
491		
492		$.ajax({
493			 url:action_url
494			,type:"POST"
495			,data:post_data
496			,dataType:"html"
497			,success:function(html_data, text_status, jq_xhr){
498				
499				if(pre_gray_dom_elem!==null){
500					var pre_close_object = {
501						"fx":_this.load_modal_html
502						,"args":[html_data,pre_gray_dom_elem]
503					}
504					close_elem.trigger("click",[pre_close_object]);
505				} else {
506					_this.load_modal_html(html_data,pre_gray_dom_elem);
507				}
508				
509			}
510		});
511		return false;
512	}
513}
514var _this = tano.d.cm_qs.qs_modal;
515tano.d.cm_qs.qs_modal.init();
516})();
517
518
519var _cm_qs_modal = tano.d.cm_qs;
520var _tano_cm_qs_modal = tano.d.cm_qs.qs_modal;
521
522$("body").on("click", ".tano-d-sh-inquiry-btn", function(){
523	var funcs = $.data(this, "events");
524	// クリックにイベントがバインドされていない場合
525	if(funcs == null || funcs["click"] == null){
526		// 引数eの厳密等価演算子対応のためobj.dataにnullを設定
527		var obj = {};
528		obj.data = null;
529		// クリックイベント設定
530		$(this).on("click", {"e" :obj}, _tano_cm_qs_modal.click_func);
531		// クリックイベント発火
532		$(this).trigger("click");
533	}
534	return false;
535});
536

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.