Вход Регистрация
Файл: mg-core/script/admin/page.js
Строк: 578
<?php
/**
 * Модуль для  раздела "Страницы".
 */
var page = (function() {
  return {
    
wysiwygnull// HTML редактор для  редактирования страниц
    
supportCkeditornull
    
openedPageAdmin: [], //массив открытых страниц
    /**
     * Инициализирует обработчики для кнопок и элементов раздела.
     */
    
init: function() {
      
// восстанавливаем массив открытых страниц из куков
      
page.openedPageAdmin = eval(cookie("openedPageAdmin"));
      if (!
page.openedPageAdmin) {
        
page.openedPageAdmin = [];
      }

      
// Вызов модального окна при нажатии на кнопку добавления.      
      
$('.admin-center').on('click''.section-page .add-new-button', function() {
        
page.openModalWindow('add');
      });

      
// Обработка нажатия на кнопку  сделать видимыми все.      
      
$('.admin-center').on('click''.section-page .refresh-visible-cat', function() {
        
page.refreshVisible();
      });

      
// Вызов модального окна при нажатии на пункт изменения
      
$('.admin-center').on('click''.section-page .edit-sub-cat', function() {
        
page.openModalWindow('edit', $(this).attr('id'));
      });

      
// Вызов модального окна при нажатии на пункт добавления
      
$('.admin-center').on('click''.section-page .add-sub-cat', function() {
         
admin.indication('error','Доступно только в полной версии Moguta.CMS');        
      });

      
// Удаление страницы.
      
$('.admin-center').on('click''.section-page .delete-sub-cat', function() {
        
page.deletePage($(this).attr('id'));
      });

      
// Закрыть контекстное меню.
      
$('.admin-center').on('click''.section-page .cancel-sub-cat', function() {
        
page.closeContextMenu();
      });

      
// Сохранение в модальном окне.
      
$('body').on('click''#add-page-wrapper .save-button', function() {
        
page.savePage($(this).attr('id'));
      });

      
// Сохранение продукта при нажатии на кнопку сохранить в модальном окне.
      
$('body').on('click''.section-page .link-to-site', function() {
        var 
url = $(this).data('href');
        if (
url == (mgBaseDir '/index') || url == (mgBaseDir '/index.html')) {
          
url mgBaseDir;
        }
        
window.open(url);
      });

      
// Сохранение продукта при на жатии на кнопку сохранить в модальном окне.
      
$('body').on('click'' .previewPage', function() {
        $(
'#previewContent').val($('textarea[name=html_content]').val());
        $(
'#previewer').submit();
      });




      
// Разворачивание подпунктов по клику
      
$('.admin-center').on('click''.section-page .slider .slider_btn', function() {
        $(
this).parent('.slider').children('.sub_menu').slideToggle(300);
        if (!$(
this).hasClass('opened')) {
          
page.addCategoryToOpenArr($(this).parent('.slider').find('a[rel=pageTree]').attr('id'));
          $(
this).css({'background-position''0 0'});
          $(
this).addClass('opened');
          $(
this).removeClass('closed');
        }
        else {
          
page.delCategoryToOpenArr($(this).parent('.slider').find('a[rel=pageTree]').attr('id'));
          $(
this).css({'background-position''0 -18px'});
          $(
this).addClass('closed');
          $(
this).removeClass('opened');
        }
      });

      
// клик на иконку лампочки, делает невидимой страницу в меню      
      
$('.admin-center').on('click''.section-page .visible', function() {
        $(
this).toggleClass('active');
        var 
id = $(this).data('category-id');

        if ($(
this).hasClass('active')) {
          
page.invisiblePage(id0);
          $(
this).attr('title'lang.ACT_V_CAT);
        }
        else {
          
page.invisiblePage(id1);
          $(
this).attr('title'lang.ACT_UNV_CAT);
        }
        
admin.initToolTip();

      });

      
// контекстное меню для работы со страницами
      
$('.admin-center').on('click''.page-tree li a', function() {
        $(
".page-li .cat-title").text($(this).text());
        $(
".page-li .cat-id").text('id = ' + $(this).attr('id') + ' ');
        
page.openContextMenu($(this).attr('id'), $(this).offset());
      });

      
// клик вне контестной менюхи
      
$(document).mousedown(function(e) {
        var 
container = $(".edit-category-list");
        if (
container.has(e.target).length === && $(".edit-category-list").has(e.target).length === 0) {
          
page.closeContextMenu();
        }
      });


    },
    
/** 
     * Делает страницу видимой/невидимой в меню
     * oneId - идентификатор первой 
     * twoId - идентификатор второй 
     */
    
invisiblePage: function(idinvisible) {
      
admin.ajaxRequest({
        
mguniqueurl"action/invisiblePage",
        
idid,
        
invisibleinvisible
      
},
      function(
response) {
        
admin.indication(response.statusresponse.msg)
      });
    },
    
/**
     * открывает контекстное меню
     * id - идентификатор выбраной категории
     * offset - положение элемента на странице, для вычисления позиции контекстного меню
     */
    
openContextMenu: function(idoffset) {

      $(
'.edit-category-list').css('position''absolute');
      $(
'.edit-category-list').css('display''block');
      $(
'.edit-category-list').css('z-index''1');
      $(
'.edit-category-list').offset(offset);

      var 
top = $('.edit-category-list').css('top').slice(0, -2);
      var 
left = $('.edit-category-list').css('left').slice(0, -2);
      
top parseInt(top) - 2;
      
left parseInt(left) + 76;
      $(
'.edit-category-list').css({toptop 'px'leftleft 'px', });
      $(
'.edit-sub-cat').attr('id'id);
      $(
'.add-sub-cat').attr('id'id);
      $(
'.delete-sub-cat').attr('id'id);
      $(
'.prod-sub-cat').data('id'id);

    },
    
// закрывает контекстное меню для работы с категориями.
    
closeContextMenu: function() {
      $(
'.edit-category-list').css('display''none');
    },
    
// добавляет ID открытой категории в массив, записывает в куки для сохранения статуса дерева
    
addCategoryToOpenArr: function(id) {

      var 
addId true;
      
page.openedPageAdmin.forEach(function(item) {
        if (
item == id) {
          
addId false;
        }
      });

      if (
addId) {
        
page.openedPageAdmin.push(id);
      }

      
cookie("openedPageAdmin"JSON.stringify(page.openedPageAdmin));
    },
    
// удаляет ID закрытой категории из массива, записывает в куки для сохранения статуса дерева
    
delCategoryToOpenArr: function(id) {

      var 
dell false;
      var 
0;
      var 
spliceIndex 0;
      
page.openedPageAdmin.forEach(function(item) {
        if (
item == id) {
          
dell true;
          
spliceIndex i;
        }
        
i++;
      });

      if (
dell) {
        
page.openedPageAdmin.splice(spliceIndex1);
      }

      
cookie("openedPageAdmin"JSON.stringify(page.openedPageAdmin));
    },
    
/**
     * Открывает модальное окно.
     * type - тип окна, либо для создания нового товара, либо для редактирования старого.
     * id - редактируемая категория, если это не создание новой
     */
    
openModalWindow: function(typeid) {
     try{        
        if(
CKEDITOR.instances['html_content']){
          
CKEDITOR.instances['html_content'].destroy();
        }      
      } catch(
e) { }
         
      switch (
type) {
        case 
'edit':
          {
            
page.clearFileds();
            $(
'#modalTitle').text(lang.PAGE_EDIT);
            
page.editCategory(id);
            break;
          }
        case 
'add':
          {
            $(
'#modalTitle').text(lang.PAGE_MODAL_TITLE);
            
page.clearFileds();
            break;
          }
        case 
'addSubCategory':
          {
            $(
'#modalTitle').text(lang.ADD_SUBPAGE);
            
page.clearFileds();
            $(
'select[name=parent] option[value="' id '"]').prop("selected""selected");
            break;
          }
        default:
          {
            
page.clearFileds();
            break;
          }
      }

      
// закрытие контекстного меню
      
page.closeContextMenu();

      
// Вызов модального окна.
      
admin.openModal($('.b-modal'));
   
      $(
'textarea[name=html_content]').ckeditor(function() {       
        
this.setData(page.supportCkeditor);   
      });   

    },
    
/**
     *  Проверка заполненности полей, для каждого поля прописывается свое правило.
     */
    
checkRulesForm: function() {
      $(
'.errorField').css('display''none');
      $(
'input').removeClass('error-input');

      var 
error false;
      
// наименование не должно иметь специальных символов.
      
if (!admin.regTest(1, $('input[name=title]').val()) || !$('input[name=title]').val()) {
        $(
'input[name=title]').parent("label").find('.errorField').css('display''block');
        $(
'input[name=title]').addClass('error-input');
        
error true;
      }

      
// артикул обязательно надо заполнить.
      
if (!$('input[name=url]').val()) {
        $(
'input[name=url]').parent("label").find('.errorField').css('display''block');
        $(
'input[name=url]').addClass('error-input');
        
error true;
      }

      if (
error == true) {
        return 
false;
      }

      return 
true;
    },
    
/**
     * Сохранение изменений в модальном окне страницы.
     * Используется и для сохранения редактированных данных и для сохраниеня новой страницы.
     * id - идентификатор страницы, может отсутсвовать если производится добавление  новой страницы.
     */
    
savePage: function(id) {

      
// Если поля неверно заполнены, то не отправляем запрос на сервер.
      
if (!page.checkRulesForm()) {
        return 
false;
      }

      if($(
'textarea[name=html_content]').val()==''){
        if(!
confirm(lang.ACCEPT_EMPTY_DESC+'?')){
          return 
false;
        }
      }
      
// Пакет характеристик категории.
      
var packedProperty = {
        
mguniqueurl"action/savePage",
        
idid,
        
title: $('input[name=title]').val(),
        
url: $('input[name=url]').val(),
        
parent: $('select[name=parent]').val(),
        
html_content: $('textarea[name=html_content]').val(),
        
meta_title: $('input[name=meta_title]').val(),
        
meta_keywords: $('input[name=meta_keywords]').val(),
        
meta_desc: $('textarea[name=meta_desc]').val(),
        
invisible: $('input[name=invisible]').val() == 'true' 0
      
}

      
// Отправка данных на сервер для сохранеиня.
      
admin.ajaxRequest(packedProperty,
              function(
response) {
                
admin.indication(response.statusresponse.msg);

                
// Закрываем окно.
                
admin.closeModal($('.b-modal'));
                
admin.refreshPanel();
              }
      );
    },
    
/**
     * Получает данные о категории с сервера и заполняет ими поля в окне.
     */
    
editCategory: function(id) {
      
admin.ajaxRequest({
        
mguniqueurl"action/getPageData",
        
idid
      
},
      
page.fillFileds(),
              $(
'.add-product-form-wrapper .add-category-form')
              );
    },
    
/**
     * Удаляет страницу из БД сайта
     */
    
deletePage: function(id) {
      if (
confirm(lang.SUB_CATEGORY_DELETE '?')) {
        
admin.ajaxRequest({
          
mguniqueurl"action/deletePage",
          
idid
        
},
        function(
response) {
          
admin.indication(response.statusresponse.msg)
          
admin.refreshPanel();
        }
        );
      }

    },
    
/**
     * Заполняет поля модального окна данными.
     */
    
fillFileds: function() {
      return (function(
response) {   
        
page.supportCkeditor response.data.html_content;
        $(
'input').removeClass('error-input');
        $(
'input[name=title]').val(response.data.title);
        $(
'input[name=url]').val(response.data.url);
        $(
'select[name=parent]').val(response.data.parent);
        $(
'select[name=parent]').val(response.data.parent);
        $(
'input[name=invisible]').prop('checked'false);
        $(
'input[name=invisible]').val('false');
        if (
response.data.invisible == 1) {
          $(
'input[name=invisible]').prop('checked'true);
          $(
'input[name=invisible]').val('true');
        }
        $(
'input[name=meta_title]').val(response.data.meta_title);
        $(
'textarea[name=html_content]').val(response.data.html_content);
        $(
'input[name=meta_keywords]').val(response.data.meta_keywords);
        $(
'textarea[name=meta_desc]').val(response.data.meta_desc);
        $(
'.symbol-count').text($('textarea[name=meta_desc]').val().length);
        $(
'.save-button').attr('id'response.data.id);
      })
    },
    
/**
     * Чистит все поля модального окна.
     */
    
clearFileds: function() {

      $(
'input[name=title]').val('');
      $(
'input[name=url]').val('');
      $(
'select[name=parent]').val('0');
      $(
'input[name=invisible]').prop('checked'false);
      $(
'input[name=invisible]').val('false');
      $(
'textarea[name=html_content]').val('');
      $(
'input[name=meta_title]').val('');
      $(
'input[name=meta_keywords]').val('');
      $(
'textarea[name=meta_desc]').val('');
      $(
'.symbol-count').text('0');
      $(
'.save-button').attr('id''');

      
// Стираем все ошибки предыдущего окна если они были.
      
$('.errorField').css('display''none');
      $(
'.error-input').removeClass('error-input');
      
page.supportCkeditor "";
    },
    
/**
     * устанавливает для каждой категории в списке возможность перемещения
     */
    
draggableCat: function() {

      var 
listIdStart = [];
      var 
listIdEnd = [];

      $(
'.page-tree li').each(function() {

        $(
this).addClass('ui-draggable');

        $(
this).draggable({
          
scrolltrue,
          
// axis: "y",
          
cursor"move",
          
handle"div[class=mover]",
          
snapMode'outer',
          
//containment: '.page-tree-field',
          
snapTolerance0,
          
start: function(eventui) {

            $(
this).css('width''50%');
            $(
this).parent('UL').addClass('editingCat');
            $(
this).css('opacity''0.5');
            $(
this).css('height''1px');
            var 
li = $(this).parent('UL').find('li');



            
// составляем список ID категорий в текущем UL.
            
listIdStart = [];
            var 
$thisId = $(this).find('a').attr('id');
            
li.each(function(i) {
              if ($(
this).parent('ul').hasClass('editingCat')) {
                var 
id = $(this).find('a').attr('id');
                if (
$thisId == id) {
                  
listIdStart.push('start');
                } else {
                  
listIdStart.push($(this).find('a').attr('id'));
                }
              }
            });

            $(
this).before('<li class="pos-element" style="display:none;"></li>'); // чтобы можно было вернуть на тоже место           
            
$(this).parent('UL').append('<li class="end-pos-element"></li>'); // чтобы можно было вставить в конец списка  

          
},
          
stop: function(eventui) {
            
// var li = $(this).parent('UL').find('li');  
            // найдем выделенный объект поместим перед ним тот который перетаскивался
            
$(this).attr('style''style=""');
            
// $(this).css('top', 'inherit');     
            
$('.afterCat').before($(this));


            var 
li = $(this).parent('UL').find('li');

            
// составляем список ID категорий в текущем UL.
            
listIdEnd = [];
            var 
$thisId = $(this).find('a').attr('id');
            
li.each(function(i) {
              if ($(
this).parent('ul').hasClass('editingCat')) {
                var 
id = $(this).find('a').attr('id');
                if (
id) {
                  if (
$thisId == id) {
                    
listIdEnd.push('end');
                  } else {
                    
listIdEnd.push($(this).find('a').attr('id'));
                  }
                }
              }
            });


            $(
this).parent('UL').removeClass('editingCat');
            $(
this).parent('UL').find('li').removeClass('afterCat');
            $(
'.pos-element').remove();
            $(
'.end-pos-element').remove();


            var 
sequence page.getSequenceSort(listIdStartlistIdEnd, $(this).find('a').attr('id'));
            if (
sequence.length 0) {
              
sequence sequence.join();
              
admin.ajaxRequest({
                
mguniqueurl"action/changeSortPage",
                
switchId$thisId,
                
sequencesequence
              
},
              function(
response) {
                
admin.indication(response.statusresponse.msg)
                
// admin.refreshPanel();
              
}
              );
            }

          },
          
drag: function(eventui) {
            var 
dragElementTop = $(this).offset().top;
            var 
li = $(this).parent('UL').find('li');
            
li.removeClass('afterCat');

            
// проверяем, существуют ли LI ниже  перетаскиваемого.
            
li.each(function(i) {
              $(
'.end-pos-element').removeClass('afterCat');
              if ($(
this).offset().top dragElementTop
                      
&& !$(this).hasClass('pos-element')
                      && $(
this).parent('ul').hasClass('editingCat')
                      ) {
                $(
this).addClass('afterCat');
                return 
false;
              } else {
                $(
'.end-pos-element').addClass('afterCat');
              }
            });


            
//console.log(dragElementTop);              
          
}

        });
      });
    },
    
/**
     * Вычисляет последовательность замены порядковых индексов 
     * Получает  дла массива
     * ["1", "start", "9", "2", "10"]
     * ["1", "9", "2", "end", "10"]
     * и ID перемещенной категории
     */
    
getSequenceSort: function(arr1arr2id) {
      var 
startPos '';
      var 
endPos '';

      
// вычисляем стартовую позицию элемента
      
arr1.forEach(function(elementindex, array) {
        if (
element == "start") {
          
startPos index;
          
arr1[index] = id;
          return 
false;
        }
      });

      
// вычисляем конечную позицию элемента      
      
arr2.forEach(function(elementindex, array) {
        if (
element == "end") {
          
endPos index;
          
arr2[index] = id;
          return 
false;
        }
      });

      
// вычисляем индексы  с которыми надо поменяться местами     
      
var result = [];

      
// направление переноса, сверху вниз
      
if (endPos startPos) {
        
arr1.forEach(function(elementindex, array) {
          if (
index startPos && index <= endPos) {
            
result.push(element);
          }
        });
      }

      
// направление переноса, снизу вверх
      
if (endPos startPos) {
        
arr2.forEach(function(elementindex, array) {
          if (
index endPos && index <= startPos) {
            
result.unshift(element);
          }
        });
      }

      return 
result;
    },
    
/**
     * Обновляет статус видимости всех страниц  в меню
     */
    
refreshVisible: function() {
      
admin.ajaxRequest({
        
mguniqueurl"action/refreshVisiblePage"
      
},
      function(
response) {
        
admin.indication(response.statusresponse.msg);
        
admin.refreshPanel();
      });
    }
  }
})();

// инициализациямодуля при подключении
page.init();
?>
Онлайн: 0
Реклама