/* NAVER (developers@xpressengine.com) */ // install module function doInstallModule(module) { var params = []; params.module_name = module; exec_xml('install','procInstallAdminInstall',params, completeInstallModule); } // upgrade module function doUpdateModule(module) { var params = []; params.module_name = module; exec_xml('install','procInstallAdminUpdate',params, completeInstallModule); } function completeInstallModule(ret_obj) { alert(ret_obj.message); location.reload(); } jQuery(function($){ // iSO mobile device toolbar remove window.scrollTo(0,0); // TARGET toggle $(document.body).on('click', '.x [data-toggle]', function(){ var $this = $(this); if($this.is('a') && $this.attr('href') != $this.attr('data-toggle')){ var target = $this.attr('href'); $this.attr('data-toggle', target); } var $target = $($this.attr('data-toggle')); var focusable = 'a,input,button,textarea,select'; $target.toggle(); if($target.is(':visible') && !$target.find(focusable).length){ $target.not(':disabled').attr('tabindex','0').focus(); } else if($target.is(':visible') && $target.find(focusable).length) { $target.not(':disabled').find(focusable).eq(0).focus(); } else { $this.focus(); } return false; }); // TARGET show $(document.body).on('click', '.x [data-show]', function(){ var $this = $(this); if($this.is('a') && $this.attr('href') != $this.attr('data-show')){ var target = $this.attr('href'); $this.attr('data-show', target); } $($this.attr('data-show')).show().attr('tabindex','0').focus(); return false; }); // TARGET hide $(document.body).on('click', '.x [data-hide]', function(){ var $this = $(this); if($this.is('a') && $this.attr('href') != $this.attr('data-hide')){ var target = $this.attr('href'); $this.attr('data-hide', target); } $($this.attr('data-hide')).hide(); $this.focus(); return false; }); // Tab Navigation $.fn.xeTabbable = function(){ $(this).each(function(){ var $this = $(this); $this.find('>.x_nav-tabs>li>a').each(function(index){ $(this).attr('data-index', index+1); }); $this.find('>.x_tab-content>.x_tab-pane').each(function(index){ $(this).attr('data-index', index+1); }); }); $('.x .x_tab-content>.x_tab-pane:not(".x_active")').hide(); }; $('.x .x_tabbable').xeTabbable(); $(document.body).on('click', '.x .x_nav-tabs>li>a[href^="#"]', function(){ var $this = $(this); if($this.parent('li').hasClass('x_disabled')){ return false; } $this.parent('li').addClass('x_active').siblings().removeClass('x_active'); $this.closest('.x_nav-tabs').next('.x_tab-content').find('>.x_tab-pane').eq($this.attr('data-index')-1).addClass('x_active').show().siblings('.x_tab-pane').removeClass('x_active').hide(); $this.parents('.x_tabbable').trigger('tab_change', [parseInt($this.attr('data-index'))-1, $this]); return false; }); // #content reflow function reflow(){ // Browser bug fix & resize height var $xBody = $('.x>.body'); var $xGnb = $xBody.find('>.gnb'); var $xContent = $xBody.children('#content.content'); $xContent.width('99.99%'); setTimeout(function(){ $xContent.removeAttr('style'); if($xGnb.height() > $xContent.height()){ $xContent.height($xGnb.height()); } }, 100); } // GNB $.fn.gnb = function(){ var $xBody = $('.x>.body'); var $xGnb = $xBody.find('>.gnb'); var $xGnb_li = $xGnb.find('>ul>li'); var d365 = new Date(); d365.setTime(d365.getTime() + 60*60*24*356); // Add icon $xGnb_li.find('>a').prepend(''); $xGnb_li.find('>ul').prev('a').append(''); // Active Submenu Copy $xGnb_li.each(function(index){ $(this).attr('data-index', index+1); }); var parentIndex = $xGnb_li.find('>ul>li.active_').closest('li.active').attr('data-index'); $xGnb_li.find('>ul>li.active_').clone().addClass('active').attr('data-index', parentIndex).prependTo('#gnbNav').find('>a').prepend(''); // GNB Click toggle $xGnb_li.find('>a').click(function(){ var $this = $(this); var $parent = $(this).parent('li'); var hasOpen = $parent.hasClass('open'); var hasActive = $parent.hasClass('active'); var hasList = $parent.find('>ul').length >= 1; var hasWide = $xBody.hasClass('wide'); function openGNB(){ $xBody.removeClass('wide'); reflow(); } if(!hasOpen && !hasActive && hasList){ // Down to open $parent.addClass('open').find('>ul').slideDown(100); openGNB(); setCookie('__xe_admin_gnb_tx_' + $this.data('href'), 'open', d365); return false; } else if(hasOpen && !hasActive && hasList && !hasWide){ // Up to close $parent.removeClass('open').find('>ul').slideUp(100); openGNB(); setCookie('__xe_admin_gnb_tx_' + $this.data('href'), 'close', d365); return false; } else if(hasWide && !hasList || hasActive || hasWide && hasOpen){ // Right to open openGNB(); return false; } }); // GNB Mobile Toggle $xGnb.find('>a[href="#gnbNav"]').click(function(){ $(this).parent('.gnb').toggleClass('open'); $xBody.toggleClass('wide'); if($(window).width() <= 980 && !$xGnb.hasClass('open')){ $('#gnbNav').removeClass('ex'); } reflow(); // remember status if($(this).parent('.gnb').hasClass('open')){ setCookie('__xe_admin_gnb_status', 'open', d365); }else{ setCookie('__xe_admin_gnb_status', 'close', d365); } return false; }); // Expert Menu Toggle $xGnb.find('.exMenu>button').click(function(){ $('#gnbNav').toggleClass('ex'); reflow(); // remember status if($('#gnbNav').hasClass('ex')){ setCookie('__xe_admin_gnb_ex_status', 'open', d365); }else{ setCookie('__xe_admin_gnb_ex_status', 'close', d365); } }); // re-create cookie var gnb_status = getCookie('__xe_admin_gnb_status'); if(gnb_status){ setCookie('__xe_admin_gnb_status', gnb_status, d365); } var gnb_ex_status = getCookie('__xe_admin_gnb_ex_status'); if(gnb_ex_status){ setCookie('__xe_admin_gnb_xe_status', gnb_ex_status, d365); } if(typeof __xe_admin_gnb_txs != 'undefined'){ for(var i in __xe_admin_gnb_txs){ var item = __xe_admin_gnb_txs[i]; var status = getCookie(item); setCookie(item, status, d365); } } }; $('.gnb').gnb(); // Default Language Selection $('.x #lang') .mouseleave(function(){ $(this).hide(); }) .focusout(function(){ var $this = $(this); setTimeout(function(){ if(!$this.find('a:focus').length){ $this.mouseleave(); } }, 500); }); // Check All $('.x th :checkbox') .change(function() { var $this = $(this), name = $this.data('name'); $this.closest('table') .find(':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 if($('.x .section').length > 1){ var $section_heading = $('.x .section').find('>h1:first'); $section_heading.each(function(){ var $this = $(this); if($this.next().length){ $this.append(''); } }); $('.x .section.collapsed>h1>.snToggle').removeClass('x_icon-chevron-up').addClass('x_icon-chevron-down'); $section_heading.click(function(){ var $this = $(this); var $btnToggle = $(this).find('>.snToggle'); var $section = $this.closest('.section'); if(!$section.hasClass('collapsed')){ $section.addClass('collapsed'); $btnToggle.removeClass('x_icon-chevron-up').addClass('x_icon-chevron-down'); } else { $section.removeClass('collapsed'); $btnToggle.removeClass('x_icon-chevron-down').addClass('x_icon-chevron-up'); } reflow(); }); } // 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 Divider $.fn.vr = function(){ this.each(function(){ var $this = $(this); if($this.text() == '|'){ $this.addClass('vr').filter(':first-child, :last-child').remove(); } }); }; $('.x i').vr(); // label[for] + input[id]/textarea[id]/select[id] creator $.fn.labelMaker = function(){ this.each(function(index){ index = index + 1; var $this = $(this); var input = 'input, textarea, select'; var check = ':radio, :checkbox'; var id = '[id]'; var value = 'i' + index; if($this.next(input).filter(id).not(check).length){ // next input, textarea, select id true $this.attr('for', $this.next().attr('id')); } else if ($this.next(input).not(id).not(check).length) { // next input, textarea, select id false $this.attr('for', value).next().attr('id', value); } else if ($this.prev(check).filter(id).length) { // prev :radio :checkbox id true $this.attr('for', $this.prev().attr('id')); } else if ($this.prev(check).not(id).length) { // prev :radio :checkbox id false $this.attr('for', value).prev().attr('id', value); } else if ($this.children(input).filter(id).length) { // children id true $this.attr('for', $this.children(input).filter(id).eq(0).attr('id')); } else if ($this.children(input).not(id).length) { // children id false $this.attr('for', value).children(input).not(id).eq(0).attr('id', value); } }); }; $('label:not([for])').labelMaker(); // :radio, :checkbox checked class $.fn.checkToggle = function(){ function check(){ setTimeout(function(){ $(':checked').parent('label').addClass('checked'); $(':not(":checked")').parent('label').removeClass('checked'); },0); } this.change(check); check(); }; $(':radio, :checkbox').checkToggle(); // File input .overlap style $.fn.fileTypeOverlap = function(){ this.each(function(){ var $this = $(this); $this.wrap('').before($this.attr('title')); }); }; $('input[type="file"].overlap').fileTypeOverlap(); // Table Col Span $.fn.tableSpan = function(){ this.each(function(){ var $this = $(this); var thNum = $this.find('>thead>tr:eq(0)>th').length; var $tdTarget = $this.find('>tbody>tr:eq(0)>td:only-child'); if(thNum != $tdTarget.attr('colspan')){ $tdTarget.attr('colspan', thNum).css('text-align','center'); } }); }; $('table').tableSpan(); }); // Modal Window jQuery(function($){ var ESC = 27; var xeModalStack = []; var xeModalInitailZIndex = 1040; // modal backdrop var $xeModalBackdrop = $('
').appendTo('body').hide(); $.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; // get modal window $modal = $( $this.attr('href') ); // if stack top is this modal, ignore if(xeModalStack.length && xeModalStack[xeModalStack.length - 1].get(0) == $modal.get(0)){ return; } 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($modal); $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 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(); $('body').css('overflow','hidden'); // push to stack xeModalStack.push($modal); // show backdrop and adjust z-index var zIndex = xeModalInitailZIndex + ((xeModalStack.length - 1) * 2); $xeModalBackdrop.css('z-index', zIndex).show(); var xeModalBackdropHeight = $xeModalBackdrop.height(); var modalBodyHeight = xeModalBackdropHeight; modalBodyHeight -= $modal.find('.x_modal-header:visible').height(); modalBodyHeight -= $modal.find('.x_modal-footer:visible').height(); modalBodyHeight -= 150; $modal.find('.x_modal-body').css('height', modalBodyHeight); $modal.css('z-index', zIndex + 1); }) .bind('close.mw', function(){ var $this = $(this), before_event, $modal, duration; // get modal window $modal = $( $this.attr('href') ); // if stack top is not this modal, ignore if(xeModalStack.length && xeModalStack[xeModalStack.length - 1].get(0) != $modal.get(0)){ return; } // before event trigger before_event = $.Event('before-close.mw'); $this.trigger(before_event); // is event canceled? if(before_event.isDefaultPrevented()) return false; // 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); $('body').css('overflow','auto'); $this.focus(); // pop from stack xeModalStack.pop(); // hide backdrop and adjust z-index var zIndex = xeModalInitailZIndex + ((xeModalStack.length - 1) * 2); if(xeModalStack.length){ $xeModalBackdrop.css('z-index', zIndex); }else{ $xeModalBackdrop.hide(); } }); $('div.x_modal').addClass('x'); }; $('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); $('

    '); $("body").append($msgBox); $msgBox.find("._ok").click(function(){ $.xeMsgBox.fnOnOK(); }); $msgBox.find("._cancel").click(function(){ $.xeMsgBox.fnOnCancel(); }); $msgBox.bind("show", function(){ $.xeMsgBox.bVisible = true; $.xeMsgBox._showFoggy(); $.xeMsgBox.fnOnShow(); if($msgBox.find('input,button').length > 0){ setTimeout(function(){ $msgBox.find('input,button').each(function(n, el){ var $el = $(el); if($el.is(":visible")){ $el.focus(); return false; } }); }, 0); } }); $msgBox.bind("hide", function(){ $.xeMsgBox.bVisible = false; $.xeMsgBox._hideFoggy(); $.xeMsgBox.fnOnHide(); }); $(document.body).on('keydown', function(ev){ if(!$.xeMsgBox.bVisible) return; if(ev.keyCode === 27){ $msgBox.find("._cancel").click(); ev.preventDefault(); } }); $.xeMsgBox.fnOnOK = function(){ if(typeof $.xeMsgBox.htOptions.fnOnOK === "function"){ if($.xeMsgBox.htOptions.fnOnOK()) return; } $msgBox.hide(); }; $.xeMsgBox.fnOnCancel = function(){ if(typeof $.xeMsgBox.htOptions.fnOnCancel === "function") $.xeMsgBox.htOptions.fnOnCancel(); $msgBox.hide(); }; $.xeMsgBox.fnOnShow = function(){ if(typeof $.xeMsgBox.htOptions.fnOnShow === "function") $.xeMsgBox.htOptions.fnOnShow(); }; $.xeMsgBox.fnOnHide = function(){ if(typeof $.xeMsgBox.htOptions.fnOnHide === "function") $.xeMsgBox.htOptions.fnOnHide(); }; $.xeMsgBox.showMsgBox = function(htOptions){ // sTitle, sText, fnOnOK, fnOnCancel, bSmall, bAlert, fnOnShow, fnOnHide, bDanger $('head>link[rel="stylesheet"]:last').after(''); htOptions = $.xeMsgBox.htOptions = htOptions || {}; var sTitle = htOptions.sTitle || ""; var sText = htOptions.sText || ""; var bDanger = htOptions.bDanger || false; $msgBox.find("._title") .html(sTitle); $msgBox.find("._text").html(sText); if(sText === ""){ $msgBox.addClass('_nobody'); }else{ $msgBox.removeClass('_nobody'); } var $confirmBtn = $msgBox.find('._ok'); if(bDanger){ $confirmBtn.removeClass('x_btn-inverse'); $confirmBtn.addClass('x_btn-danger'); }else{ $confirmBtn.removeClass('x_btn-danger'); $confirmBtn.addClass('x_btn-inverse'); } // #msgBox._small {width:400px;margin-left:-200px} // #msgBox._type_alert _cancel{display:none} if(htOptions.bSmall){ $msgBox.addClass("_small"); }else{ $msgBox.removeClass("_small"); } if(htOptions.bAlert){ $msgBox.addClass("_type_alert"); }else{ $msgBox.removeClass("_type_alert"); } $msgBox.show(); }; $.xeMsgBox.alertDialog = function(htOptions){ htOptions = htOptions || {}; htOptions.bAlert = true; this.showMsgBox(htOptions); }; $.xeMsgBox.alert = function(sText){ htOptions = { bAlert : true, bNobody : true, bSmall: true, sText : sText }; this.showMsgBox(htOptions); }; $.xeMsgBox.confirmDialog = function(htOptions){ htOptions = htOptions || {}; htOptions.bAlert = false; this.showMsgBox(htOptions); }; var $foggyLayer = $.xeMsgBox.$foggyLayer = $("
    "); $foggyLayer.css({ position: 'fixed', top:0, left:0, backgroundColor:'#000', opacity: 0.5, display:'none', zIndex:9998 }); //$($.find("body")).append($msgBox); $($.find("body")).append($foggyLayer); $.xeMsgBox._resizeFoggy = function(){ $foggyLayer.css({ width: 0, height: 0 }); setTimeout(function(){ $foggyLayer.css({ width: $(document).width(), height: $(document).height() }); }, 0); }; $(window).resize($.xeMsgBox._resizeFoggy); $.xeMsgBox._resizeFoggy(); $.xeMsgBox._showFoggy = function(){ $foggyLayer.show(); }; $.xeMsgBox._hideFoggy = function(){ $foggyLayer.hide(); }; }); jQuery(function($){ $.xeFoggy = {}; var $foggyLayer = $.xeFoggy.$foggyLayer = $("
    "); $foggyLayer.css({ position: 'fixed', top:0, left:0, backgroundColor:'#000', opacity: 0.5, display:'none', zIndex:9998 }); $("body").append($foggyLayer); $.xeFoggy._resizeFoggy = function(){ $foggyLayer.css({ width: 0, height: 0 }); setTimeout(function(){ $foggyLayer.css({ width: $(document).width(), height: $(document).height() }); }, 0); }; $(window).resize($.xeFoggy._resizeFoggy); $.xeFoggy._resizeFoggy(); $.xeFoggy.show = function(bClear){ if(bClear){ $foggyLayer.css({ opacity: 0 }); }else{ $foggyLayer.css({ opacity: 0.5 }); } $foggyLayer.show(); }; $.xeFoggy.hide = function(){ $foggyLayer.hide(); }; }); // Sortable table jQuery(function($){ var dragging = false, $holder = $(' '); $.fn.xeSortableTable = function(){ this .not('.xe-sortable-table') .addClass('xe-sortable-table') .delegate('button.dragBtn', 'mousedown.st', function(event){ var $this, $tr, $table, $th, height, width, offset, position, offsets, i, dropzone, cols, ofspar; if(event.which != 1) return; $this = $(this); $tr = $this.closest('tr'); $table = $this.closest('table'); ofspar = $table.get(0).offsetParent; height = $tr.height(); width = $tr.width(); // before event trigger before_event = $.Event('before-drag.st'); $table.trigger(before_event); // is event canceled? if(before_event.isDefaultPrevented()) return false; position = {x:event.pageX, y:event.pageY}; offset = getOffset($tr.get(0), ofspar); $clone = $tr.attr('target', true).clone(true).appendTo($table); // get colspan cols = ($th=$table.find('thead th')).length; $th.filter('[colspan]').attr('colspan', function(idx,attr){ cols += attr - 1; }); $holder.find('td').attr('colspan', cols); // get offsets of all list-item elements offsets = []; $table.find('tbody>tr:not([target],.sticky,:hidden)').each(function() { var $this = $(this), o; o = getOffset(this, ofspar); offsets.push({top:o.top, bottom:o.top+$this.height(), $item:$this}); }); $clone .addClass('draggable') .css({ position: 'absolute', opacity : 0.6, width : width, height : height, left : offset.left, top : offset.top, zIndex : 100 }); // Set a place holder $holder .css({ position:'absolute', opacity : 0.6, width : width, height : '10px', left : offset.left, top : offset.top, backgroundColor : '#bbb', overflow: 'hidden', zIndex : 99 }) .appendTo($table); $tr.css('opacity', 0.6); $(document) .unbind('mousedown.st mouseup.st') .bind('mousemove.st', function(event) { var diff, nTop, item, i, c, o; dropzone = null; diff = {x:position.x-event.pageX, y:position.y-event.pageY}; nTop = offset.top - diff.y; for(i=0,c=offsets.length; i < c; i++) { o = offsets[i]; if( (i && o.top > nTop) || ((i < c-1) && o.bottom < nTop)) continue; dropzone = {element:o.$item}; if(o.top > nTop - 12) { dropzone.state = 'before'; $holder.css('top', o.top-5); } else { dropzone.state = 'after'; $holder.css('top', o.bottom-5); } } $clone.css({top:nTop}); }) .bind('mouseup.st', function(event) { var $dropzone; dragging = false; $(document).unbind('mousemove.st mouseup.st'); $tr.removeAttr('target').css('opacity', ''); $clone.remove(); $holder.remove(); if(!dropzone) return; $dropzone = $(dropzone.element); // use the clone for animation $dropzone[dropzone.state]($tr); $table.trigger('after-drag.st'); }); }); return this; }; $('table.sortable').xeSortableTable(); }); // filebox jQuery(function($){ $('.filebox') .bind('before-open.mw', function(){ var $this, $list, $parentObj; var anchor; $this = $(this); anchor = $this.attr('href'); $list = $(anchor).find('.filebox_list'); function on_complete(data){ $list.html(data.html); $list.find('.select') .bind('click', function(event){ var selectedImages = $('input.select_checkbox:checked'); if(selectedImages.length === 0) { var selectedImgSrc = $(this).closest('tr').find('img.filebox_item').attr('src'); if(!selectedImgSrc){ alert("None selected!"); }else{ $this.trigger('filebox.selected', [selectedImgSrc]); $this.trigger('close.mw'); } }else { $this.trigger('filebox.selected', [selectedImages]); $this.trigger('close.mw'); } return false; }); $list.find('.x_pagination') .find('a') .filter(function(){ if ($(this).data('toggle')) return false; if ($(this).parent().hasClass('x_disabled')) return false; if ($(this).parent().hasClass('x_active')) return false; return true; }) .bind('click', function(){ var page = $(this).attr('page'); $.exec_json('module.getFileBoxListHtml', {'page': page}, on_complete); return false; }); $('#goToFileBox') .find('button') .bind('click', function(){ var page = $(this).prev('input').val(); $.exec_json('module.getFileBoxListHtml', {'page': page}, on_complete); return false; }); $list.closest('.x_modal-body').scrollTop(0); } $.exec_json('module.getFileBoxListHtml', {'page': '1'}, on_complete); }); // Details toggle in admin table var simpleBtn = $('.x .dsTg .__simple'); var detailBtn = $('.x .dsTg .__detail'); var tdTitle = $('.x .dsTg td.title'); tdTitle.each(function(){ var $t = $(this); if($t.find('p.x_alert').length === 0){ $t.addClass('tg').find('>*:not(:first-child)').hide(); } }); var details = $('.x .dsTg td.tg>*:not(:first-child)'); simpleBtn.click(function(){ details.hide(); detailBtn.removeClass('x_active'); simpleBtn.addClass('x_active'); }); detailBtn.click(function(){ details.show(); detailBtn.addClass('x_active'); simpleBtn.removeClass('x_active'); }); }); // Multilingual Window jQuery(function($){ $.fn.xeMultilingualWindow = function(options){ var $g11n_get = $(this); var $g11n_create = $g11n_get.find('#lang_create'); var $g11n_search = $g11n_get.find('#lang_search'); var is_create_changed = false; // options options = $.extend({ create_type: 'save_and_use', modify_type: 'save_and_use', view_use: true, view_modify: true, view_delete: false, list_count: 5 }, options || {}); // change text if(options.create_type != 'save_and_use'){ $g11n_create.find('.save-useit').text(xe.cmd_save); } // #lang_create confirm function g11n_create_save_confirm(){ if($g11n_create.is(':visible') && is_create_changed){ if(confirm(xe.msg_confirm_save_and_use_multilingual)){ $g11n_create.find('.save-useit').trigger('click'); } } return true; } // #lang_search confirm function g11n_search_save_confirm(){ if($g11n_search.is(':visible') && $g11n_search.find('.editMode').length){ var $search_item = $g11n_search.find('.editMode'); if(confirm(xe.msg_confirm_save_and_use_multilingual)){ $search_item.find('.save').trigger('click'); }else{ $search_item.find('.cancel').trigger('click'); } } return true; } // #g11n Reset to default function g11n_reset_default(){ $g11n_search.find('.item > fieldset').hide().prev('a').children('i').removeClass('x_icon-chevrom-up').addClass('x_icon-chevron-down'); $g11n_get.find('[href="#lang_create"]').trigger('click'); $g11n_create.find('.editMode').children('textarea').val(''); is_create_changed = false; return true; } // before open function g11n_before_open(code){ if(!code){ g11n_get_list(1, xe.current_lang, '', '', false); }else{ g11n_get_list(1, xe.current_lang, '', code, false); $g11n_get.find('[href="#lang_search"]').trigger('click', true); } } // before close function g11n_before_close(){ if(!g11n_create_save_confirm()) return false; if(!g11n_search_save_confirm()) return false; if(!g11n_reset_default()) return false; } // use lang code function g11n_use_lang_code(code, value){ var $target = $g11n_get.data('lang-target'); is_create_changed = false; if($target) $target.trigger('selected.g11n', [code, value]); } // get list function g11n_get_list(page, lang_code, search_keyword, name, scroll){ if(typeof page == 'undefined') page = 1; if(typeof lang_code == 'undefined') lang_code = xe.current_lang; if(typeof search_keyword == 'undefined') search_keyword = ''; if(typeof name == 'undefined') name = ''; if(typeof scroll == 'undefined') scroll = true; $.exec_json('module.getModuleAdminLangListHtml', { 'page': page, 'lang_code': lang_code, 'search_keyword': search_keyword, 'name': name, 'list_count': options.list_count, 'mid': current_url.getQuery('mid') }, function(data){ if(!data || !data.html) return; $g11n_search.html(data.html); g11n_search_page(); g11n_search_search(); g11n_search_text(); g11n_search_button(); if(scroll) document.location.href = '#lang_search'; if(name){ $('#lang_search').find('[href^="#lang-"]').trigger('click'); } }); } // page function g11n_search_page(){ $g11n_search.find('.x_pagination a').click(function(){ var page = $(this).data('page'); var search_keyword = $(this).data('search_keyword'); var lang_code = $(this).data('current_lang'); if(!page) return; g11n_get_list(page, lang_code, search_keyword); return false; }); $g11n_search.find('.x_pagination').submit(function(){ var page = $(this).find('[name="page"]').val(); var search_keyword = $(this).data('search_keyword'); var lang_code = $(this).data('current_lang'); if(!page) return false; g11n_get_list(page, lang_code, search_keyword); return false; }); } // search function g11n_search_search(){ $g11n_search.find('.search').submit(function(){ var search_keyword = $(this).find('[name="search_keyword"]').val(); var lang_code = $(this).find('[name="lang_code"]').val(); g11n_get_list(1, lang_code, search_keyword); return false; }); $g11n_search.find('#search_cancel').click(function(){ g11n_get_list(1, xe.current_lang, ''); }); } // text click function g11n_search_text(){ $g11n_search.find('.set').append('').click(function(){ var $this = $(this); var lang_code = $this.data('lang_code'); g11n_search_save_confirm(); // Fieldset close/open display var up = 'x_icon-chevron-up'; var down = 'x_icon-chevron-down'; if($this.next('fieldset').is(':visible')){ $this.children('i').removeClass(up).addClass(down); }else{ $this.parent('.item').siblings('.item').find('a > i').removeClass(up).addClass(down).end().children('fieldset').hide(); $this.children('i').removeClass(down).addClass(up); } if(typeof $this.data('is_loaded') != 'undefined') return; $.exec_json('module.getModuleAdminLangCode', { 'name': lang_code, 'mid': current_url.getQuery('mid') }, on_complete); function on_complete(data){ var $textareas = $this.next('fieldset').find('textarea'); $textareas.each(function(){ var $this = $(this); var value = data.langs[$this.data('lang')]; var pattern = /^\$user_lang->/; if(pattern.test(value)){ $this.val('').data('value', ''); }else{ $this.val(value).data('value', value); } }); $this.data('is_loaded', true); } }); } // search buttons function g11n_search_button(){ if(!options.view_use) $g11n_search.find('.useit').hide(); if(!options.view_modify) $g11n_search.find('.modify').hide(); if(!options.view_delete) $g11n_search.find('.delete').hide(); if(options.modify_type == 'save'){ $g11n_search.find('.save').text(xe.cmd_save); } // Modify click $g11n_search.find('.modify').click(function(){ $(this).closest('fieldset').addClass('editMode').find('textarea').removeAttr('disabled'); $(this).siblings('.cancel').prependTo($(this).parent()); $(this).siblings('.delete').attr('disabled', 'disabled'); }); // Cancel Click $g11n_search.find('.cancel').click(function(){ $(this).closest('fieldset').removeClass('editMode').find('textarea').attr('disabled', 'disabled').each(function(){ var $this = $(this); $this.val($this.data('value')); }); $(this).siblings('.modify').prependTo($(this).parent()); $(this).siblings('.delete').removeAttr('disabled'); return false; }); // Delete click $g11n_search.find('.delete').click(function(){ if(!confirm(xe.confirm_delete)) return; var $this = $(this); lang_name = $this.closest('.item').find('[href^="#lang-"]').data('lang_code'); $.exec_json('module.procModuleAdminDeleteLang', { 'name': lang_name, 'mid': current_url.getQuery('mid') }, function (data){ if(!data) return; if(data.error){ alert(data.message); return; } var $pagination = $g11n_search.find('.x_pagination'); var page = $pagination.data('page'); var search_keyword = $pagination.data('search_keyword'); var lang_code = $pagination.data('lang_code'); if(!page) $page = 1; g11n_get_list(page, lang_code, search_keyword); }); }); // Save Click $g11n_search.find('.item').submit(function(){ var $this = $(this); var $textareas = $this.find('.editMode').children('textarea'); var $anchor = $this.find('[href^="#lang-"]'); var params = {}; var current_lang_value = null; // create lang list $textareas.each(function(){ var $this = $(this); params[$this.attr('class')] = $this.val(); $this.data('tmp_value', $this.val()); if(xe.current_lang == $this.attr('class')){ current_lang_value = $this.val(); } }); params.lang_name = $anchor.data('lang_code'); params.mid = current_url.getQuery('mid'); // submit $.exec_json('module.procModuleAdminInsertLang', params, function (data){ if(!data || data.error || !data.name) return; $textareas.each(function(){ var $this = $(this); $this.data('value', $this.data('tmp_value')); }); $anchor.children('span').html(current_lang_value); $g11n_search.find('.cancel').trigger('click'); $this.find('.useit').trigger('click'); }); return false; }); // Useit click $g11n_search.find('.useit').click(function(){ var $this = $(this); var $anchor = $this.closest('.item').find('[href^="#lang-"]'); var name = $anchor.data('lang_code'); var value = $anchor.children('span').text(); g11n_use_lang_code(name, value); }); } // tabbale $g11n_get.find('.x_tabbable').xeTabbable(); // check create change $g11n_create.find('.editMode textarea').change(function(){ is_create_changed = true; }); // Save-Useit click $g11n_create.submit(function(){ var $this = $(this); var params = {}; var current_lang_value = null; // create lang list $this.find('.editMode').children('textarea').each(function(){ var $this = $(this); params[$this.attr('class')] = $this.val(); if(xe.current_lang == $this.attr('class')){ current_lang_value = $this.val(); } }); if(!current_lang_value){ alert(xe.msg_empty_multilingual); return false; } params.mid = current_url.getQuery('mid'); // submit $.exec_json('module.procModuleAdminInsertLang', params, on_complete); function on_complete(data){ if(!data || data.error || !data.name) return; if(options.create_type == 'save_and_use'){ g11n_use_lang_code(data.name, current_lang_value); }else{ alert(data.message); g11n_reset_default(); } } return false; }); $g11n_get.find('[href="#lang_search"]').click(function(e, just_tab){ if(typeof(just_tab) == 'undefined'){ g11n_get_list(); } }); // default $g11n_get.bind('reset.g11n', function(){ g11n_reset_default(); }); // before open $g11n_get.bind('before-open.g11n', function(e, code){ g11n_before_open(code); }); // before close $g11n_get.bind('before-close.g11n', function(){ return g11n_before_close(); }); return this; }; }); // Load Multilingual Window Markup var is_loaded_multilingual_window_html = false; jQuery(function($){ $.fn.xeLoadMultilingualWindowHtml = function(){ function on_complete(data){ // append html var $content = $('#content'); $(data.html).appendTo($content).xeMultilingualWindow(); $('.lang_code').trigger('loaded-multilingualWindow'); } $.exec_json('module.getModuleAdminMultilingualHtml', { 'mid': current_url.getQuery('mid') }, on_complete); return this; }; }); // Apply Multilingual UI var multilingual_id_count = 0; jQuery(function($){ $.fn.xeApplyMultilingualUI = function(){ $(this).each(function(){ // load multilingual window html if(!is_loaded_multilingual_window_html){ $().xeLoadMultilingualWindowHtml(); is_loaded_multilingual_window_html = true; } // make UI var $this = $(this); var t = this; if($this.parent().hasClass('g11n')){ $this.siblings().remove(); }else{ $this.wrap(''); } var id = $this.attr('id'); if(!id){ id = '__lang_code_' + multilingual_id_count; multilingual_id_count++; $this.attr('id', id); } function makeUI(){ var $multilingualWindow = $('#g11n'); var width = $this.width(); var $displayInput; if(t.tagName == 'TEXTAREA' || $this.data('type') == 'textarea'){ $displayInput = $('