/* NHN (developers@xpressengine.com) */ jQuery(function($){ // iSO mobile device toolbar remove window.scrollTo(0,0); // Skip to content $('.x .skipNav>a').click(function(){ $($(this).attr('href')).attr('tabindex','0').css('outline','0').focus(); }); // TARGET toggle $(document.body).on('click', '.x [data-toggle]', function(){ var $this = $(this); var $target = $($this.attr('data-toggle')); $target.toggle(); if($target.is(':visible') && !$target.find('a,input,button,textarea,select').length){ $target.attr('tabindex','0').focus(); } else if($target.is(':visible') && $target.find('a,input,button,textarea,select').length) { $target.find('a,input,button,textarea,select').eq(0).focus(); } else { $this.focus(); } return false; }); // TARGET show $(document.body).on('click', '.x [data-show]', function(){ $($(this).attr('data-show')).show().attr('tabindex','0').focus(); return false; }); // TARGET hide $(document.body).on('click', '.x [data-hide]', function(){ var $this = $(this); $($this.attr('data-hide')).hide(); $this.focus(); return false; }); // Tab Navigation $('.x .x_tab-content>.x_tab-pane:not(".x_active")').hide(); $(document.body).on('click', '.x .x_nav-tabs>li>a[href^="#"]', function(){ var $this = $(this); $this.parent('li').addClass('x_active').siblings().removeClass('x_active'); $this.closest('.x_nav-tabs').next('.x_tab-content').find($this.attr('href')).addClass('x_active').show().siblings().removeClass('x_active').hide(); return false; }); // GNB Height 100% var $xBody = $('.x>.body'); var $xContent = $xBody.children('#content.content'); var $xGnb = $xBody.find('>.gnb'); var $xGnb_li = $xGnb.find('>ul>li'); // GNB Hover toggle function contentBugFix(){ // Chrome browser rendering bug fix $xContent.width('99.99%'); setTimeout(function(){ $xContent.removeAttr('style'); }, 0); } // GNB Click toggle $xGnb_li.find('ul').prev('a') .bind('click focus', function(){ var $this = $(this); // Submenu toggle $xGnb_li.not($this.parent('li')).removeClass('open'); $(this).parent('li').toggleClass('open'); $xBody.removeClass('wide'); contentBugFix(); return false; }); // GNB Mobile Toggle $xGnb.find('>a[href="#gnbNav"]').click(function(){ $(this).parent('.gnb').toggleClass('open'); $xBody.toggleClass('wide'); contentBugFix(); return false; }); // GNB Close $xGnb .prepend('') .append(''); $xGnb.find('>.close').focus(function(){ $xBody.addClass('wide'); contentBugFix(); }); // Check All $('.x th>input[type="checkbox"]') .change(function() { var $this = $(this), name = $this.data('name'); $this.closest('table') .find('input:checkbox') .filter(function(){ var $this = $(this); return !$this.prop('disabled') && (($this.attr('name') == name) || ($this.data('name') == name)); }) .prop('checked', $this.prop('checked')) .end() .end() .trigger('update.checkbox', [name, this.checked]); }); // Pagination $(document.body).on('click', '.x .x_pagination .x_disabled, .x .x_pagination .x_active', function(){ return false; }); // Section Toggle $('.x .section>h1').append(''); $('.x .section>h1>.snToggle').click(function(){ var $this = $(this); var $section = $this.closest('.section'); if(!$section.hasClass('collapse')){ $section.addClass('collapse').children('h1:first').siblings().hide(); $this.removeClass('x_icon-chevron-up').addClass('x_icon-chevron-down'); } else { $section.removeClass('collapse').children('h1:first').siblings().show(); $this.removeClass('x_icon-chevron-down').addClass('x_icon-chevron-up'); } }); // Alert Closer var $xAlert = $('.x .x_alert'); $xAlert.prepend(''); $xAlert.children('.x_close').click(function(){ $(this).parent('.x_alert').hide(); }); // Desabled Buttons $('.x .x_btn').click(function(){ if($(this).hasClass('x_disabled')){ return false; } }); // Vertical Rule Style $('.x i').each(function(){ var $this = $(this); if($this.text() == '|'){ $this.addClass('vr'); } }); }); // Modal Window jQuery(function($){ var ESC = 27; $.fn.xeModalWindow = function(){ this .not('.xe-modal-window') .addClass('xe-modal-window') .each(function(){ $( $(this).attr('href') ).addClass('x').hide(); }) .click(function(){ var $this = $(this), $modal, $btnClose, disabled; // get and initialize modal window $modal = $( $this.attr('href') ); if($modal.data('state') == 'showing') { $this.trigger('close.mw'); } else { $this.trigger('open.mw'); } return false; }) .bind('open.mw', function(){ var $this = $(this), $modal, $btnClose, disabled, before_event, duration; $modal = $( $this.attr('href') ); if(!$modal.parent('body').length) { $btnClose = $(''); $btnClose.click(function(){ $modal.data('anchor').trigger('close.mw') }); $modal.find('[data-hide]').click(function(){ $modal.data('anchor').trigger('close.mw') }); $('body').append('
').append($modal); // append background $modal.prepend($btnClose); // prepend close button } // set the related anchor $modal.data('anchor', $this); // before event trigger before_event = $.Event('before-open.mw'); $this.trigger(before_event); // is event canceled? if(before_event.isDefaultPrevented()) return false; // get modal window $modal = $( $this.attr('href') ); // get duration duration = $this.data('duration') || 'fast'; // set state : showing $modal.data('state', 'showing'); // after event trigger function after(){ $this.trigger('after-open.mw') }; $(document).bind('keydown.mw', function(event){ if(event.which == ESC) { $this.trigger('close.mw'); return false; } }); $modal .fadeIn(duration, after) .find('button.x_close:first').focus().end() .prev('.x_modal-backdrop').show(); }) .bind('close.mw', function(){ var $this = $(this), before_event, $modal, duration; // before event trigger before_event = $.Event('before-close.mw'); $this.trigger(before_event); // is event canceled? if(before_event.isDefaultPrevented()) return false; // get modal window $modal = $( $this.attr('href') ); // get duration duration = $this.data('duration') || 'fast'; // set state : hiding $modal.data('state', 'hiding'); // after event trigger function after(){ $this.trigger('after-close.mw') }; $modal.fadeOut(duration, after) .prev('.x_modal-backdrop').hide(); $this.focus(); }); $('div.x_modal').addClass('x').hide(); }; $('a.modalAnchor').xeModalWindow(); }); // Content Toggler jQuery(function($){ var dont_close_this_time = false; var ESC = 27; $.fn.xeContentToggler = function(){ this .not('.xe-content-toggler') .addClass('xe-content-toggler') .each(function(){ var $anchor = $(this); $layer = $($anchor.attr('href')); $layer.hide() .not('.xe-toggling-content') .addClass('xe-toggling-content') .mousedown(function(event){ dont_close_this_time = true }) .focusout(function(event){ setTimeout(function(){ if(!dont_close_this_time && !$layer.find(':focus').length && $layer.data('state') == 'showing') $anchor.trigger('close.tc'); dont_close_this_time = false; }, 1); }); }) .click(function(){ var $this = $(this), $layer; // get content container $layer = $( $this.attr('href') ); // set anchor object $layer.data('anchor', $this); if($layer.data('state') == 'showing') { $this.trigger('close.tc'); } else { $this.trigger('open.tc'); } return false; }) .bind('open.tc', function(){ var $this = $(this), $layer, effect, duration; // get content container $layer = $( $this.attr('href') ); // get effeect effect = $this.data('effect'); // get duration duration = $this.data('duration') || 'fast'; // set state : showing $layer.data('state', 'showing'); // before event trigger $this.trigger('before-open.tc'); dont_close_this_time = false; // When mouse button is down or when ESC key is pressed close this layer $(document) .unbind('mousedown.tc keydown.tc') .bind('mousedown.tc keydown.tc', function(event){ if(event) { if(event.type == 'keydown' && event.which != ESC) return true; if(event.type == 'mousedown') { var $t = $(event.target); if($t.is('html,.tgAnchor,.tgContent') || $layer.has($t).length) return true; } } $this.trigger('close.tc'); return false; } ); // triggering after function trigger_after(){ $this.trigger('after-open.tc') } switch(effect) { case 'slide': $layer.slideDown(duration, trigger_after); break; case 'slide-h': var w = $layer.css({'overflow-x':'',width:''}).width(); $layer .show() .css({'overflow-x':'hidden',width:'0px'}) .animate({width:w}, duration, function(){ $layer.css({'overflow-x':'',width:''}); trigger_after(); }); break; case 'fade': $layer.fadeIn(duration, trigger_after); break; default: $layer.show(); $this.trigger('after-open.tc'); } }) .bind('close.tc', function(){ var $this = $(this), $layer, effect, duration; // unbind document's event handlers $(document).unbind('mousedown.tc keydown.tc'); // get content container $layer = $( $this.attr('href') ); // get effeect effect = $this.data('effect'); // get duration duration = $this.data('duration') || 'fast'; // set state : hiding $layer.data('state', 'hiding'); // before event trigger $this.trigger('before-close.tc'); // triggering after function trigger_after(){ $this.trigger('after-close.tc') }; // close this layer switch(effect) { case 'slide': $layer.slideUp(duration, trigger_after); break; case 'slide-h': $layer.animate({width:0}, duration, function(){ $layer.hide(); trigger_after(); }); break; case 'fade': $layer.fadeOut(duration, trigger_after); break; default: $layer.hide(); $this.trigger('after-close.tc'); } }); return this; }; $('a.tgAnchor').xeContentToggler(); }); // Module finder jQuery(function($){ $.fn.xeModuleFinder = function(){ this .not('.xe-module-finder') .addClass('xe-module-finder') .find('a.tgAnchor.findsite') .bind('before-open.tc', function(){ var $this, $ul, val; $this = $(this); $ul = $($this.attr('href')).find('>ul'); val = $this.prev('input:text').val(); function on_complete(data) { var $li, list = data.site_list, i, c; $ul.empty(); $this.closest('.modulefinder').find('.moduleList,.moduleIdList').attr('disabled','disabled'); if(data.error || !$.isArray(list)) { $this.trigger('close.tc'); return; } for(i=0,c=list.length; i < c; i++) { $li = $('').appendTo($ul); $('').text(list[i].domain).data('site_srl', list[i].site_srl).appendTo($li); } }; $.exec_json('admin.getSiteAllList', {domain:val}, on_complete); }) .end() .find('.tgContent.suggestion') .delegate('button','click',function(){ var $this, $finder; $this = $(this); $finder = $this.closest('.modulefinder'); function on_complete(data) { var $mod_select, list = data.module_list, x; if(data.error || !list) return; $mod_select = $finder.find('.moduleList').data('module_list', list).removeAttr('disabled').empty(); for(x in list) { if(!list.hasOwnProperty(x)) continue; $('').attr('value', x).text(list[x].title).appendTo($mod_select); } $mod_select.prop('selectedIndex', 0).change().focus(); if(!$mod_select.is(':visible')) { $mod_select .slideDown(100, function(){ $finder.find('.moduleIdList:not(:visible)').slideDown(100).trigger('show'); }) .trigger('show'); } }; $finder.find('a.tgAnchor.findsite').trigger('close.tc'); $.exec_json('module.procModuleAdminGetList', {site_srl:$this.data('site_srl')}, on_complete); }) .end() .find('.moduleList,.moduleIdList').hide().end() .find('.moduleList') .change(function(){ var $this, $mid_select, val, list; $this = $(this); val = $this.val(); list = $this.data('module_list'); if(!list[val]) return; list = list[val].list; $mid_select = $this.closest('.modulefinder').find('.moduleIdList').removeAttr('disabled').empty(); for(var x in list) { if(!list.hasOwnProperty(x)) continue; $('').attr('value', list[x].module_srl).text(list[x].browser_title).appendTo($mid_select); } $mid_select.prop('selectedIndex', 0).change(); }); return this; }; $('.modulefinder').xeModuleFinder(); }); // Module Search : A New Version Of Module Finder jQuery(function($){ _xeModuleSearch = function(){ var t = this; var $t = $(this); var $moduleWindow = $t.find(".moduleWindow"); var $siteListDiv = $moduleWindow.find('.siteList'); var $moduleListDiv = $moduleWindow.find('.moduleList'); var $instanceListDiv = $moduleWindow.find('.instanceList'); var $siteList = $siteListDiv.find('>ul'); var $moduleList = $moduleListDiv.find('>ul'); var $instanceList = $instanceListDiv.find('>select'); var $siteFinder = $moduleWindow.find('input.siteFinder'); var aSiteListData; var MAX_LIST_HEIGHT = 280; function setListSize($UL, nHeight){ var nWidth, $div; $UL.find('li div').width(''); $UL.css('height', ''); $UL.css('overflow-y', ''); if($UL.height() > nHeight){ $div = $UL.find('li div'); $div.width($div.width()-20+'px'); $UL.css('height', nHeight+'px'); $UL.css('overflow-y', 'auto'); } } function setSiteList(sFilter){ var sDomain; var rxFilter = new RegExp(sFilter, "ig"); var list = aSiteListData; $siteList.empty(); for(i=0,c=list.length; i < c; i++) { sDomain = list[i].domain; if(sFilter){ if(!sDomain.match(rxFilter)) continue; sDomain = sDomain.replace(rxFilter, function(sKeyword){ return ''+sKeyword+''; }); } $li = $('').appendTo($siteList); $('').attr('href', '#').html( sDomain ).data('site_srl', list[i].site_srl).appendTo($li); } setListSize($siteList, MAX_LIST_HEIGHT - $siteFinder.parent("div").height()); } $siteFinder.keyup(function(){ setSiteList($siteFinder.val()); }); if(typeof console == 'undefined'){ console={log:function(){}}; } $t .not('.xe-module-search') .addClass('xe-module-search') .find('a.moduleTrigger') .bind('before-open.tc', function(){ var $this; $this = $(this); function on_complete(data) { var $li, list = data.site_list, i, c; if(data.error || !$.isArray(list)) { $this.trigger('close.tc'); return; } aSiteListData = list; setSiteList($siteFinder.val()); $siteFinder.focus(); }; $siteList.empty(); $instanceList.empty(); $moduleListDiv.hide(); $instanceListDiv.hide(); $.exec_json('admin.getSiteAllList', {domain:""}, on_complete); }) .end() .find('.tgContent .siteList>ul') .delegate('a','click',function(oEvent){ var $this, $finder; $this = $(this); $finder = $this.closest('.moduleSearch'); function on_complete(data) { var list = data.module_list, x; if(data.error || !list) return; for(x in list) { if(!list.hasOwnProperty(x)) continue; $li = $('').appendTo($moduleList); $('').attr('href', '#').html( list[x].title ).data('moduleInstanceList', list[x].list).appendTo($li); } $moduleWindow.find('.moduleList').show(); setListSize($moduleList, MAX_LIST_HEIGHT); $siteList.find('li').removeClass('x_active'); $this.parent('li').addClass('x_active'); }; $moduleList.empty(); $instanceListDiv.hide(); $.exec_json('module.procModuleAdminGetList', {site_srl:$this.data('site_srl')}, on_complete); oEvent.preventDefault(); }) .end() .find('.moduleList>ul') .delegate('a', 'click', function(oEvent){ var $this, $mid_select, val, list; $this = $(this); list = $this.data('moduleInstanceList'); if(!list) return; t.sSelectedModuleType = $this.text(); $instanceList.empty(); for(var x in list) { if(!list.hasOwnProperty(x)) continue; $li = $('').html(list[x].browser_title).appendTo($instanceList).val(list[x].module_srl).data('mid', list[x].module_srl) .data('module_srl', list[x].module_srl).data('layout_srl', list[x].layout_srl).data('browser_title', list[x].browser_title); } $instanceListDiv.show(); setListSize($instanceList, MAX_LIST_HEIGHT); $moduleList.find('li').removeClass('x_active'); $this.parent('li').addClass('x_active'); oEvent.preventDefault(); }) .end() .find('.moduleSearch_ok').click(function(oEvent){ var aSelected = []; $t.find('select>option:selected').each(function(){ aSelected.push({ 'type' : t.sSelectedModuleType, 'module_srl' : $(this).data('module_srl'), 'layout_srl' : $(this).data('layout_srl'), 'browser_title' : $(this).data('browser_title') }); }); $t.trigger('moduleSelect', [aSelected]); $('a.moduleTrigger').trigger('close.tc'); oEvent.preventDefault(); }); return this; }; $.fn.xeModuleSearch = function(){ $(this).each(_xeModuleSearch); }; $('.moduleSearch').xeModuleSearch(); }); // Sortable table jQuery(function($){ var dragging = false, $holder = $('