//------------------------------------------------------------------------------ // // 形番ナビ レイアウト調整 // //------------------------------------------------------------------------------ var objAdjustKtnv = {}; function onLoadKtnvIfrm( objIframe, clnIframeId) { objAdjustKtnv[ clnIframeId] = new adjustKtnv( objIframe, clnIframeId); } var adjustKtnv = function( objIframe, clnIframeId) { if( !( this instanceof adjustKtnv)) { return new adjustKtnv( objIframe); } objIframe.style.visibility = "hidden"; this.clnIframeId = "iframe_clone_id" + clnIframeId this.actElmtId = null; this.objIframe = objIframe; this.objIfrmDoc = this.iframeDocument( objIframe); this.setupLayout(); this.adjustIframe(); objIframe.style.visibility = "visible"; this.regEventHandler(); this.clnIframe = null; this.clnIfrmDoc = null; this.cloneIframe( objIframe); } adjustKtnv.prototype = { waitCursor: { setCursorStyle: function( style) { this.timeoutID = undefined; function recursion( obj) { var tempArray = Array.prototype.slice.call( obj.children); obj.style.cursor = style; tempArray.forEach( recursion); } document.body.style.cursor = style; recursion( document.body); var iframeElements = document.getElementsByTagName( 'iframe'); for ( var i = 0; i < iframeElements.length; i++) { iframeElements[ i].contentWindow.document.body.style.cursor = style; recursion( iframeElements[ i].contentWindow.document.body); } }, remind: function( style) { this.setCursorStyle( style); this.timeoutID = undefined; }, setup: function() { if ( typeof this.timeoutID === 'number') return; this.timeoutID = window.setTimeout( function( style) { this.remind( style); }.bind( this), 700, 'wait' ); }, cancel: function() { window.clearTimeout( this.timeoutID); // this.remind( 'auto'); this.remind( ''); } }, // // 形番ナビ(div, iframe)レイアウト設定 // setupLayout: function() { this.objIframe.parentNode.style.position = "relative"; this.objIframe.style.position = "absolute" this.objIframe.style.backgroundColor = document.bgColor; this.objIframe.style.top = "0px"; this.objIframe.style.left = "0px"; this.objIframe.style.width = "100%"; this.objIframe.style.height = "100%"; this.objIframe.width = ""; this.objIframe.height = ""; }, // // 形番ナビ(iframe内)レイアウト調整 // adjustIframe: function() { // 形番ナビ(table th・td)自動改行なし設定 this.nowrapKtnv( this.objIframe); // 形番ナビ(div 'ktnv')レイアウト設定 var objDocElm = this.objIfrmDoc.documentElement; var divKtnvStyle = this.objIframe.parentNode.style; divKtnvStyle.width = objDocElm.scrollWidth + "px"; this.objIframe.style.width = divKtnvStyle.width; var naviTbl = objDocElm.querySelector( "table.table_collapse"); var naviTblWidth = naviTbl.scrollWidth; do { naviTblWidth = naviTbl.scrollWidth; this.objIframe.style.width = parseInt( this.objIframe.style.width) * 1.25 + "px" } while( naviTblWidth < naviTbl.scrollWidth); divKtnvStyle.height = 1 + this.objIfrmDoc.getElementById( "updPanel").scrollHeight + "px"; this.objIframe.style.width = naviTblWidth + "px"; while( naviTblWidth > naviTbl.scrollWidth) { this.objIframe.style.width = 1 + parseInt( this.objIframe.style.width) + "px"; } divKtnvStyle.width = 1 + this.objIfrmDoc.getElementById( "updPanel").scrollWidth + "px"; this.objIframe.style.width = "100%"; }, // // イベント ハンドラ登録 // regEventHandler: function() { // // 非同期ポストバック イベント ハンドラ登録 // var objIfrmWin = this.objIframe.contentWindow; var objIfrmPrm = objIfrmWin.Sys.WebForms.PageRequestManager.getInstance(); // 非同期ポストバック開始イベント ハンドラ登録 var bgnRequest = objIfrmWin.Function( "sender", "args", "this.ktnvBgnRequest( sender, args);" ).bind( this); objIfrmPrm.add_beginRequest( bgnRequest); // 非同期ポストバック完了イベント ハンドラ登録 var endRequest = objIfrmWin.Function( "sender", "args", "this.ktnvEndRequest( sender, args);" ).bind( this); objIfrmPrm.add_endRequest( endRequest); var bodyOnFocus = document.body.onfocus; document.body.onfocus = function() { if ( bodyOnFocus) bodyOnFocus(); if ( this.objIframe.style.visibility == "visible") { this.clnIframe.disabled = ""; } else { this.clnIframe.disabled = "disabled"; } }.bind( this); var bodyOnBlur = document.body.onblur; document.body.onblur = function() { if ( bodyOnBlur) bodyOnBlur(); if ( document.activeElement == this.objIframe) { this.clnIframe.disabled = "disabled"; } else { this.clnIframe.disabled = ""; } }.bind( this); document.body.addEventListener( "keydown", function( event) { if ( event.altKey) return; if ( event.ctrlKey) return; if ( !this.clnIframe.disabled) return; switch ( event.which) { case 37: // left case 38: // up case 39: // right case 40: // down event.preventDefault(); break; } }.bind( this), { capture: false, once: false, passive: false } ); }, // // 非同期ポストバック開始イベント ハンドラ // ktnvBgnRequest: function( sender, args) { // if ( !args.get_postBackElement().id) return; this.waitCursor.setup(); this.actElmtId = args.get_postBackElement().id; this.updClnIfrm(); this.clnIframe.style.visibility = "visible"; // this.objIframe.style.visibility = "hidden"; document.activeElement.blur(); // document.body.focus(); return; }, // // 非同期ポストバック完了イベント ハンドラ // ktnvEndRequest: function( sender, args) { // if ( !this.actElmtId) return; this.adjustIframe( this.objIframe); this.objIframe.style.visibility = "visible"; if (this.objIfrmDoc.getElementById(this.actElmtId) != null) { this.objIfrmDoc.getElementById(this.actElmtId).focus(); } this.actElmtId = "" this.updClnIfrm(); this.waitCursor.cancel(); return; }, iframeDocument: function( objIframe) { if ( objIframe.contentDocument) { return objIframe.contentDocument; } else if ( objIframe.contentWindow) { return objIframe.contentWindow.document; } else { return objIframe.document; } }, nowrapKtnv: function( objIframe) { // 下記↓自動改行なし設定 // *正しい形番を生成するために、項目の選択は左から右へ順に行ってください。 // ※選択した項目より右の項目は初期値に戻る場合がありますのでご注意下さい。 var objIfrmDoc = this.iframeDocument( objIframe); // objIfrmDoc.querySelector( "p.ktnv_fntsiz13").style.whiteSpace = "nowrap"; objIfrmDoc.querySelector( ".ktnv_fntsiz13").style.whiteSpace = "nowrap"; // 形番ナビ(table th・td)自動改行なし設定 var naviTbl = objIfrmDoc.querySelector( "table.table_collapse"); var objNodeList = naviTbl.querySelectorAll( "td"); for ( var tdIdx = 0; tdIdx < objNodeList.length; tdIdx++) { objNodeList[ tdIdx].style.whiteSpace = "nowrap"; } }, cloneIframe: function( objIframe) { // objIframe 複製作成 var clnIframe = objIframe.cloneNode( true); clnIframe.disabled = ""; clnIframe.id = this.clnIframeId; clnIframe.style.zIndex = 2; objIframe.style.zIndex = parseInt( clnIframe.style.zIndex) + 1; clnIframe.style.visibility = "hidden"; clnIframe.onload = function() { this.clnIframe = clnIframe; this.clnIfrmDoc = this.iframeDocument( clnIframe); this.nowrapKtnv( clnIframe); this.updClnIfrm(); }.bind( this); objIframe.parentNode.appendChild( clnIframe); return clnIframe; }, updClnIfrm: function() { if ( !this.actElmtId) { // 形番 this.clnIfrmDoc.getElementById( "ltrKATABAN").value = this.objIfrmDoc.getElementById( "ltrKATABAN").value; // 形番ナビ(table th・td) this.clnIfrmDoc.querySelector( "table.table_collapse").innerHTML = this.objIfrmDoc.querySelector( "table.table_collapse").innerHTML; var objNodeList = this.clnIfrmDoc.querySelectorAll( "input, select"); for ( var tdIdx = 0; tdIdx < objNodeList.length; tdIdx++) { objNodeList[ tdIdx].disabled = "disabled"; } this.clnIfrmDoc.getElementById( "updPanel").disabled = "disabled"; } else { // アクティブ要素 or リンク数 var actElmnt = this.objIfrmDoc.getElementById( this.actElmtId); switch ( actElmnt.type ) { case "radio": case "checkbox": this.clnIfrmDoc.getElementById( actElmnt.id).checked = actElmnt.checked; break; case "select-one": this.clnIfrmDoc.getElementById( actElmnt.id).selectedIndex = actElmnt.selectedIndex; break; case "text": this.clnIfrmDoc.getElementById( actElmnt.id).value = actElmnt.value; break; } } this.clnIframe.style.visibility = "hidden"; } }