/*! * V4 共通ライブラリ * Requires BizreachのDWRのAjaxPaging */ "use strict"; var LAP = LAP || {}; (function(LAP) { //bodyキャッシュ var $body = $('body'); //children tag(基本Table、ulの場合は、初期化時にlistTagを設定してください) var childTag = 'tr'; //初期設定値 var lapListId; //LapListBox全体のId var lapPageId; //LapPave View用のDomのId var screenTypeCd; //初期設定関数 var callbackDwr; //itemHTML取得用の関数 var beforeCallbackFunction; //itemHTML取得前に呼ぶJavaScript関数 var afterCallbackFunction; //itemHTML取得後に呼ぶJavaScript関数 //前後検索用 var $prevObj; //一つ前のオブジェクト var $nextObj; //一つ後のオブジェクト //現在選択されているオブジェクト var $selectedObj; // 現在選択されたオブジェクト //LapPage jQuery Object var $lapPage; var $lapPageWrapper; //CloseBand var $closeBand; var $closeButton; // iPad用iscroll var iscroll; //Lap Open判定 var isLapOpen = false; //現在のLAPを表示している元になっているアイテム var currentItemByLapOpen; //ScrollObject var scrollControll; // Lapをクリックで開くかどうか var disableClickOpenLap = false; // Lap内に自由に値を保存しておく領域。 var values = {}; /** * スカウトテンプレート・スカウトメッセージ・メッセージテンプレートで利用されている入力フォームのId */ var checkInputIdArray = [ '#jsi_message_subject', '#jsi_message_body', '#jsi_resend_subject', '#jsi_resend_body', '#jsi_reply_body', '#jsi_template_name', '#jsi_template_subject', '#jsi_template_body' ]; //フローとスクロール関数 $.fn.floatScroll = function(){ return $(this).each(function(){ var $o =$(this); var width = $o.width(); var $c = $o.position(); var headerHight = 42;//headerのhight量 var container = $lapPageWrapper.scroll(function(){ if((container.scrollTop() + headerHight) > $c.top){ $o.css('position','fixed'); $o.css('width',width); $o.css('opacity','0.7'); } else { $o.css('position','static'); $o.css('opacity','1'); } }); }); }; //Lap内部関数 var lapFunc = { //Item表示関数 showItemProcess : function(obj, callback, beforeCallback) { if (isLapOpen && lapFunc.isConfirmLap() && !this.confirmUnload()) { return; } var $obj = $(obj); currentItemByLapOpen = $obj; var itemId = lapFunc.getItemId($obj); LAP.showLapPage(itemId, callback, beforeCallback); //選択されたタグを色づけ var $parent = $('#' + lapListId); var $children = $parent.find(childTag); $children.removeClass('currentLapList'); $obj.addClass('currentLapList'); //前後検索用Object設定 $selectedObj = $obj; $prevObj = $obj.prev(childTag); $nextObj = $obj.next(childTag); }, confirmUnload: function() { var text; if (docCookies.getItem('LG') === 'EN') { text = 'You have unsaved changes. Do you wish to continue and lose your changes?'; } else { text = '作業内容は保存されません。よろしいですか?'; } return confirm(text); }, isConfirmLap: function() { var result = false; // メッセージテンプレート確認画面か if (!!window.document.getElementById('jsi_template_confirm')) { return true; } // あらかじめ特定されたid属性での判定 // IE9以前向けにeachを呼ぶ $.each(checkInputIdArray, function(idx, checkId){ if ($(checkId).is(':visible') && $(checkId).val() !== "") { result = true; return false; } }); if (!result) { // スカウトテンプレート編集画面用に、さらにid属性の前方一致での判定. // スカウトテンプレート編集LAP上のidのプレフィクスで判定する // '#jsi_job_template_353_subject' などを想定 $('input[id ^= jsi_job_template], textarea[id ^= jsi_job_template]') .each(function(){ if ($(this).is(':visible') && $(this).val() != '') { result = true; return false; } }); } return result; }, //ID情報取得 getItemId : function($obj){ return $obj.data('itemid'); }, //Lapを閉じる処理 closeLap: function(isConfirm){ if (isLapOpen && isConfirm !== false && lapFunc.isConfirmLap() && !this.confirmUnload()) { return; } isLapOpen = false; $lapPageWrapper.removeClass('showLapPage'); if (currentItemByLapOpen) { currentItemByLapOpen.removeClass('currentLapList'); } }, //イベントのバインド bindEvent : function(){ if (disableClickOpenLap) { return; } var $lapBaseEl = $('#' + lapListId); $lapBaseEl.on('click', childTag, function(evt) { var clickedId = lapFunc.getItemId($(this)); if (clickedId) { // 行そのものをクリックしたときは、itemIdが取得できる。 if(isLapOpen && $selectedObj != null && lapFunc.getItemId($selectedObj) == clickedId){ lapFunc.closeLap(); // 同じリストをもう一度クリックすると閉じる(Toggle制御) } else { lapFunc.showItemProcess(this, afterCallbackFunction, beforeCallbackFunction); } } else { // 行の子要素をクリックしたときは、itemIdが取得できない。この場合は何もしない } }); $closeBand.live('click', function() { lapFunc.closeLap(); }); }, //閉じるボタン addCloseButton: function(){ //ボタン処理 $closeButton.css('position','fixed'); $closeButton.css('top','50px'); $closeButton.css('right','814px'); $closeButton.css('z-index','52'); }, //閉じる用バンド addCloseBand: function(){ $closeBand.css('position','absolute'); $closeBand.css('height', $lapPage.find('.lapPageInner').outerHeight()); $closeBand.css('width','55px'); $closeBand.css('top','43px'); $closeBand.css('left','0px'); $closeBand.css('z-index','51'); $closeBand.css('-webkit-transition','all .3s linear'); $closeBand.hover(function(){ var $this = $(this); $this.css('background-color', '#EEEEEE'); $this.css('cursor','pointer'); }, function(){ var $this = $(this); $this.css('background-color', '#FFFFFF'); $this.css('cursor','auto'); }); }, //Lapないにフローとブロックがある場合 //フローとさせる floatBlock:function(){ var $floatBlock = $lapPage.find('.jsc_lap_floatBlock'); $floatBlock.css('background-color', '#FFFFFF'); $floatBlock.css('z-index','52'); $floatBlock.floatScroll(); } }; //LAP領域のスクロールTOP LAP.scrollTop = function(){ if($lapPageWrapper != null){ $lapPageWrapper.animate({scrollTop: 0}, 'slow', 'swing'); } }; //LAP内で指定位置にスクロール LAP.scrollToId = function(id) { if($lapPageWrapper == null && id == null) { return; } var $target = $('#' + id); if ($target.length === 0) { return; } var offset = $target.position().top + $lapPageWrapper.scrollTop() - 30; $lapPageWrapper.animate({scrollTop: offset }, 'slow', 'swing'); }; //ID指定でLAPに表示する LAP.showLapPage = function(itemId, callback, beforeCallback){ if (!(typeof beforeCallback === 'undefined') && beforeCallback != null) { beforeCallback(itemId); } $lapPageWrapper.spin(); $lapPage.html('').spin(); LAP.scrollTop(); var showLapDetail = function (data) { if ($b2.common.checkPermission(data, null) === false) { $lapPageWrapper.spin(false); LAP.closeLap(); return; } isLapOpen = true; $lapPageWrapper.spin(false); $lapPage.html(data.html); if (!(typeof callback === 'undefined') && callback != null) { callback(data); } lapFunc.addCloseBand();//閉じる用帯設定 lapFunc.addCloseButton();//ボタン設定 lapFunc.floatBlock();//Floatブロック設定 scrollControll.getHeight(); } if (screenTypeCd === undefined || screenTypeCd == null) { callbackDwr(itemId, function(data){ showLapDetail(data); }); } else { callbackDwr(itemId, screenTypeCd, function(data){ showLapDetail(data); }); } if(!$lapPageWrapper.hasClass('showLapPage')) { $lapPageWrapper.addClass('showLapPage'); } if (/ipad/i.test(navigator.userAgent) && !iscroll) { var $lapChildren = $lapPageWrapper.find('> *'); var $lapScroller = $('
'); $lapPageWrapper.append($lapScroller); $lapScroller.append($lapChildren); iscroll = new IScroll($lapPageWrapper[0], { bounce: false, momentum: true, scrollY: true, scrollX: false, click: true, probeType: 3 }); $lapPageWrapper.prepend($('#jsi_lap_close_band')); setInterval(function () { iscroll.refresh(); }, 100); } }; //独自呼び出しでLAPに表示する LAP.showLapPageCustom = function(callbackDwr, param1, param2, param3){ if (!(typeof beforeCallback === 'undefined') && beforeCallback != null) { beforeCallback(itemId); } $lapPageWrapper.spin(); $lapPage.html('').spin(); LAP.scrollTop(); if (param3) { callbackDwr(param1, param2, param3, function(data){ if ($b2.common.checkPermission(data, null) === false) { return; } isLapOpen = true; $lapPageWrapper.spin(false); $lapPage.html(data.html); if (!(typeof callback === 'undefined') && callback != null) { callback(data); } lapFunc.addCloseBand();//閉じる用帯設定 lapFunc.addCloseButton();//ボタン設定 lapFunc.floatBlock();//Floatブロック設定 }); } else if (param2) { callbackDwr(param1, param2, function(data){ if ($b2.common.checkPermission(data, null) === false) { return; } isLapOpen = true; $lapPageWrapper.spin(false); $lapPage.html(data.html); if (!(typeof callback === 'undefined') && callback != null) { callback(data); } lapFunc.addCloseBand();//閉じる用帯設定 lapFunc.addCloseButton();//ボタン設定 lapFunc.floatBlock();//Floatブロック設定 }); } else { callbackDwr(param1, function(data){ if ($b2.common.checkPermission(data, null) === false) { return; } isLapOpen = true; $lapPageWrapper.spin(false); $lapPage.html(data.html); if (!(typeof callback === 'undefined') && callback != null) { callback(data); } lapFunc.addCloseBand();//閉じる用帯設定 lapFunc.addCloseButton();//ボタン設定 lapFunc.floatBlock();//Floatブロック設定 }); } if(!$lapPageWrapper.hasClass('showLapPage')) { $lapPageWrapper.addClass('showLapPage'); } }; //現在表示しているLapページをリロードする LAP.reloadLap = function(){ if(isLapOpen){ if($selectedObj != null && $selectedObj.html() != null){ lapFunc.showItemProcess($selectedObj, afterCallbackFunction, beforeCallbackFunction); } } }; //次の要素表示 LAP.showNext = function(args){ if(isLapOpen){ if($nextObj != null && $nextObj.html() != null){ lapFunc.showItemProcess($nextObj, afterCallbackFunction, beforeCallbackFunction); } else { if (args && args['nothingFunc']) { args['nothingFunc'](); } else { alert('次の要素がありません'); } } } }; //前の要素表示 LAP.showPrev = function(){ if(isLapOpen){ if($prevObj != null && $prevObj.html() != null){ lapFunc.showItemProcess($prevObj, afterCallbackFunction, beforeCallbackFunction); } else { alert('前の要素がありません'); } } }; LAP.closeLap = function(isConfirm){ lapFunc.closeLap(isConfirm); }; LAP.getValues = function() { if (values) { return values; } return {}; }; LAP.getValue = function(key) { if (values) { return values[key]; } return null; }; LAP.isConfirmLap = function() { return lapFunc.isConfirmLap(); }; LAP.confirmUnload = function() { return lapFunc.confirmUnload(); }; //Lap初期化 LAP.initialize = function(settings) { lapListId = settings.lapListId; lapPageId = settings.lapPageId; screenTypeCd = settings.screenTypeCd; callbackDwr = settings.dwrRequestFunction; beforeCallbackFunction = settings.beforeCallbackFunction; afterCallbackFunction = settings.afterCallbackFunction; disableClickOpenLap = settings.disableClickOpenLap; if (settings.values) { values = settings.values; } //lapPageがない場合、初期化 if(lapPageId == null){ lapPageId = 'jsi_lapPage'; } $body.append(''); $lapPage = $('#' + lapPageId); $lapPageWrapper = $('#jsi_lapPageWrapper'); $closeBand = $('#jsi_lap_close_band'); $closeButton = $('#jsi_btnClose'); if(settings.listTag != null){ childTag = settings.listTag; } //スクロール制御オブジェクト生成 if (!/ipad/i.test(navigator.userAgent)) { scrollControll = $lapPageWrapper.scrollcontrol({moveDistance: 120}); } //イベントバインド lapFunc.bindEvent(); }; }(LAP));