var mcr = { debug: true, // Включение/отключение логирования ошибок в консоль [true|false] // Получение информации, загружаемой с сервера meta_data: JSON.parse($('meta[name="data"]').attr('content')), // Функция показа/скрытия информации о загрузке loading: function(status){ if(status!==false){ if($('#js-loader').is(':hidden')){ $('#js-loader').fadeIn(500); } }else{ if($('#js-loader').is(':visible')){ $('#js-loader').fadeOut(500); } } return (status===false) ? false : true; }, /* * Оповещение - показывает блок оповещения с различной информацией и автоматически выключает показ информации о загрузке (предыдущую функцию) * * @param title - Название блока * * @param message - Сообщение оповещения * * @param type - Тип оповещения 2-Ошибка(красный блок)|3-Успех(зеленый блок)|4-информация(синий блок)|остальное-примечание(оранжевый блок) * * @param result - Возвращаемый результат [true|false] */ notify: function(title, message, type, result){ var that = this; type = (type===undefined) ? 0 : parseInt(type); switch(type){ case 2: type = 'alert-error'; break; case 3: type = 'alert-success'; break; case 4: type = 'alert-info'; break; default: type = ''; break; } $('#js-notify').removeClass('alert-error alert-success alert-info').addClass(type); $('#js-notify > #title').html(title); $('#js-notify > #message').html(message); $('#js-notify').fadeIn(300); that.loading(false); $('html, body').animate({ scrollTop: $('#js-notify').offset().top-50}, 'fast'); if(typeof timeout != 'undefined'){ clearTimeout(timeout); } timeout = setTimeout(function(){ that.notify_close(); }, 2500); return (result===true) ? true : false; }, // Скрывает оповещение и очищает его содержимое notify_close: function(){ $('#js-notify').fadeOut(500); }, // Логгер ошибок в консоль logger: function(data){ if(this.debug){ console.log(data); } }, // Получение параметра из URL по ключу getUrlParam: function(name){ name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), results = regex.exec(location.search); return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); }, // Получение всех параметров из URL getUrlParams: function(){ var string = location.search.split('?')[1]; var result = {}; string = decodeURIComponent(string); if(string==undefined || string=='undefined'){ return result; } $.each(string.split('&'), function(key, val){ expl = val.split('='); result[expl[0]] = expl[1]; }); return result; }, // Изменение параметра url changeUrlParam: function(json){ var get = this.getUrlParams(); $.each(json, function(key, value){ if(get[key]===undefined || value!==false){ get[key] = value; } if(value===false && get[key]!==undefined){ delete get[key]; } }); if(Object.keys(get).length<=0){ location.search = ''; return false; } var string = '?'; $.each(get, function(key, val){ string = string+key+'='+val+'&'; }); string = string.substring(0, string.length - 1); location.search = string; return true; }, /* * Результирующий запрос - запрос, возвращающий результат. * * @param method - метод отправки запроса [GET|POST] * * @param url - Адрес на который будет отправляться запрос * * @param params - Параметры запроса [key1=param&key2=param2...] * */ send_ret_req: function(method, url, params){ var req = null; try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { try { req = new XMLHttpRequest(); } catch(e) {} } } if(req == null){ throw new Error(lng.e_xmlhr); } req.open(method, url, false); req.send(params); return req.responseText; }, // Получение информации о откртых и закрытых спойлерах spl_items: Cookies.getJSON('spl_items'), init_filemanager: function(pge){ var that = this; var loadpage = (pge===undefined) ? 1 : pge; that.loading(); var formdata = new FormData(); formdata.append('mcr_secure', that.meta_data.secure); formdata.append('page', loadpage); $.ajax({ url: "index.php?mode=ajax&do=filemanager", dataType: "json", type: 'POST', contentType: false, processData: false, data: formdata, error: function(data){ that.logger(data); that.notify(lng.error, lng.e_filemanager); }, success: function(data){ if(!data._type){ that.loading(false); return; } $('.file-manager > .lastfiles').empty(); $.each(data._data, function(key, ar){ if(ar.size < 1024){ var size = ar.size+' '+lng.b; }else if(ar.size < 1048576){ var size = (ar.size / 1024).toFixed(2); size = size+' '+lng.kb; }else if(ar.size < 1073741824){ var size = (ar.size / 1024 / 1024).toFixed(2); size = size+' '+lng.mb; }else{ var size = (ar.size / 1024 / 1024 / 1024).toFixed(2); size = size+' '+lng.gb; } $('.file-manager > .lastfiles').append('<div class="file-line" id="'+ar.uniq+'">'+ '<div class="line-uniq"><a href="'+ar.link+'">'+ar.uniq+'</a> <a href="#" rel="tooltip" title="'+lng.change+'" class="file-edit icon-edit"></a></div>'+ '<div class="line-oldname">'+ar.oldname+'</div>'+ '<div class="line-size">'+size+'</div>'+ '<div class="line-downloads"><i class="icon-download" rel="tooltip" title="'+lng.count_downloads+'"></i> '+ar.downloads+'</div>'+ '<div class="line-info"><i class="icon-info-sign" rel="tooltip" title="'+lng.added+': '+ar.login+' | '+lng.date+': '+ar.date+'"></i></div>'+ '<div class="line-act"><a href="#" rel="tooltip" title="'+lng.delete+'" class="file-remove icon-remove"></a></div>'+ '</div>'); that.loading(false); }); $('.file-manager > .lastfiles').append('<div class="pagination" id="'+loadpage+'"><ul>'+ '<li><a href="#" class="ajax-pagin-left"><</a></li>'+ '<li><a href="#" class="ajax-pagin-right">></a></li>'+ '</ul></div>'); }, complete:function(){ if(pge!==undefined){ $('html, body').stop().animate({ scrollTop: $('.file-manager').offset().top }, 0); } } }); } }; // Функции, вызываемые при загрузке $(function(){ $('input[type="file"].file-inputs').bootstrapFileInput(); // Загрузка файлового менеджера(если доступен) if($('.file-manager').length > 0){ mcr.init_filemanager(); } // Добавление элемента защиты в html код страницы $('form[method="post"]').prepend('<input type="hidden" name="mcr_secure" value="'+mcr.meta_data.secure+'">'); // Включение обработчика tooltip'ов от bootstrap $('body').tooltip({selector: '[rel=tooltip]'}); //$('[rel=tooltip]').tooltip({container: 'body'}); // If jump elements // Обработчик закрытия блока оповещений $('body').on('click', '#js-notify > #close', function(){ mcr.notify_close(); return false; }); $("body").on('click', '#close-notify', function(){ $(".block-notify").fadeOut("normal", function(){ $(this).remove(); }); return false; }); $("body").on("click", ".check-all", function(){ var element = $(this).attr("data-for"); var val = false; if($(this)[0].checked){ val = true; } $("."+element).prop('checked', val); }); $('body').on('click', '.remove', function(){ if($(this).attr("data-checkbox")!='false'){ var element = $(this).attr("data-for"); var length = $('.'+element+':checked').length; if(length<=0){ return mcr.notify(lng.error, lng.not_selected); } } var text = $(this).attr("data-text"); if(!confirm(text)){ return false; } return true; }); $(".mcr-debug .action").on("click", function(){ $(".mcr-debug").toggleClass("open"); return false; }); // Обработчик клика по ББ-кодам $("body").on("click", ".bb-panel .bb", function(){ if($(this).hasClass('bb-modal')){ return true; } // Получает идентификатор панели ББ-кодов и поля ввода var panel_id = $(this).closest(".bb-panel").attr("id"); // Получаем поле ввода var panel_obj = $('textarea[data-for="'+panel_id+'"]')[0]; // Фокусируем поле ввода panel_obj.focus(); // Получаем позиции курсора var pos1 = panel_obj.selectionStart, pos2 = panel_obj.selectionEnd; // Получаем теги элементов var leftcode = ($(this).attr("data-left")==undefined) ? '' : $(this).attr("data-left"); var rightcode = ($(this).attr("data-right")==undefined) ? '' : $(this).attr("data-right"); var val = panel_obj.value; // Вставка ББ-кода в содержимое поля ввода на места выделения panel_obj.value = val.substr(0,pos1) + leftcode + val.substr(pos1,pos2-pos1) + rightcode + val.substr(pos2,val.length); // Устанавливаем позиции курсора после вставки ББ-кода panel_obj.setSelectionRange(pos1+leftcode.length,pos2+leftcode.length); return false; }); $("body").on("click", ".bb-panel .bb.bb-modal", function(){ // Получает идентификатор панели ББ-кодов и поля ввода var panel_id = $(this).closest(".bb-panel").attr("id"); // Получаем поле ввода var panel_obj = $('textarea[data-for="'+panel_id+'"]')[0]; var modal_id = $(this).attr('href'); // Фокусируем поле ввода panel_obj.focus(); // Получаем позиции курсора var pos1 = panel_obj.selectionStart, pos2 = panel_obj.selectionEnd; // Получаем выделенный текст var copy = panel_obj.value.substring(pos1, pos2); if($(this).attr('data-paste').length>0){ var insert = parseInt($(this).attr('data-paste')); // Вставляем выделенный текст в поле модального окна $(modal_id+' .bb-input').eq(insert).val(copy); } }); $("body").on("click", ".bb-panel .bb-insert-input", function(){ // Получает идентификатор панели ББ-кодов и поля ввода var panel_id = $(this).closest(".bb-panel").attr("id"); // Получаем поле ввода var panel_obj = $('textarea[data-for="'+panel_id+'"]')[0]; // Фокусируем поле ввода panel_obj.focus(); // Получаем позиции курсора var pos1 = panel_obj.selectionStart; var pos2 = panel_obj.selectionEnd; var modal = $(this).closest('.modal'); var inputs = modal.find('.bb-input'); var code = modal.find('.data-code'); var leftcode = code.attr('data-left'); var rightcode = code.attr('data-right'); var centercode = code.attr('data-center'); $.each(inputs, function(key, elem){ leftcode = leftcode.replace('*'+key+'*', elem.value); rightcode = rightcode.replace('*'+key+'*', elem.value); centercode = centercode.replace('*'+key+'*', elem.value); }); code = leftcode + centercode + rightcode; var val = panel_obj.value; // Вставка ББ-кода в содержимое поля ввода на места выделения panel_obj.value = val.substr(0,pos1) + code + val.substr(pos2,val.length); $('#'+modal.attr('id')).modal('hide'); pos1 = pos1+leftcode.length; pos2 = pos1+centercode.length; panel_obj.setSelectionRange(pos1,pos2); return false; }); // Обработчик клика по очистке формы от ББ-Кодов $('body').on('click', '.bb-panel .bb-clear', function(){ var panel = $(this).closest('.bb-panel'); var panel_id = panel.attr('id'), elements = panel.find('.bb'); var panel_obj = $('textarea[data-for="'+panel_id+'"]'); var new_val = panel_obj.val(); elements.each(function(){ var left = $(this).attr('data-left'); if($(this).closest('.bb-smiles').length<=0){ var reg = new RegExp('\\[(\\w+)(="\\*(\\d+)\\*")?\\]', 'ig'); var find = reg.exec(left); }else{ var find = null; new_val = new_val.replace(left, ''); } if(find!==null){ var repl = new RegExp('\\[(\\/)?'+find[1]+'(="([\\w\\s\\-\\.\\:\\;\\+\\|\\,\\?\\&\\=\\/\\*]+)?")?\\]', 'ig'); new_val = new_val.replace(repl, ''); } }); panel_obj[0].value = new_val; return false; }); $("#search-selector a").click(function(){ var search_val = $("#search-hidden").val(); $("#search-selector a#"+search_val).parent().removeClass("active"); var id = this.id; $("#search-hidden").val(id); $(this).parent().addClass("active"); return false; }); $("body").on("click", ".edit", function(){ var element = $(this).attr("data-for"); var length = $('.'+element+':checked').length, link = $(this).attr("data-link"); if(length!=1){ return mcr.notify(lng.error, lng.only_one); } var id = $('.'+element+':checked').val(); window.location.href = link+id; return false; }); // Обработка всех групп меню в цикле $('.spl-body').each(function(){ // ID группы var id = $(this).attr('id'); // Проверка на существование записи о группе в куках if(mcr.spl_items===undefined || mcr.spl_items[id]===undefined){ return; } // Изменение класса группы при условии if(mcr.spl_items[id]===true){ $(this).toggleClass('closed'); $('.spl-btn[data-for="'+id+'"]').toggleClass('closed'); } }); // Действие при клике на кнопку спойлера $('body').on('click', '.spl-btn', function(){ var that = $(this); if(that.attr('data-block')!==undefined){ that.closest(that.attr('data-block')).find('.spl-body').slideToggle("fast", function(){ that.toggleClass('closed'); $(this).toggleClass('closed'); }); return false; } var element = $(this).attr("data-for"); if(mcr.spl_items===undefined){ mcr.spl_items = {}; } // Изменение класса при нажатии и выставление печенек $(".spl-body#"+element).slideToggle("fast", function(){ that.toggleClass('closed'); $(this).toggleClass('closed'); mcr.spl_items[element] = (!mcr.spl_items[element]) ? true : false; Cookies.set('spl_items', mcr.spl_items, { expires: 365 }); }); return false; }); $('body').on('click', '.qxbb-spoiler > .qxbb-spoiler-btn', function(){ var body = $(this).closest('.qxbb-spoiler').find('.qxbb-spoiler-body'); if(body.is(':visible')){ body.fadeOut('fast'); }else{ body.fadeIn('normal'); } return false; }); // Класс для ссылок с отменой редиректа $("body").on("click", ".false", function(){ return false; }); $('body').on('input change', '.file-manager input[name="files"]', function(){ mcr.loading(); var formdata = new FormData(); $.each($(this)[0].files, function(key, value){ if(value.size > 51200000){ return; } formdata.append('files'+key, value); }); formdata.append('mcr_secure', mcr.meta_data.secure); $.ajax({ url: "index.php?mode=ajax&do=filemanager&op=upload", dataType: "json", type: 'POST', contentType: false, processData: false, data: formdata, error: function(data){ mcr.logger(data); mcr.notify(lng.error, lng.e_file_load); }, success: function(data){ if(!data._type){ return mcr.notify(data._title, data._message); } if(data._data.errors.length > 0){ mcr.notify(lng.warning, lng.e_files_not_loaded); mcr.logger(data._data.errors); } $.each(data._data.data, function(key, ar){ if(ar.size < 1024){ var size = ar.size+' б'; }else if(ar.size < 1048576){ var size = ar.size+' Кб'; }else if(ar.size < 1073741824){ var size = ar.size+' Мб'; }else{ var size = ar.size+' Гб'; } $('.file-manager > .lastfiles').prepend('<div class="file-line" id="'+ar.uniq+'">'+ '<div class="line-uniq"><a href="'+ar.link+'">'+ar.uniq+'</a> <a href="#" rel="tooltip" title="'+lng.change+'" class="file-edit icon-edit"></a></div>'+ '<div class="line-oldname">'+ar.oldname+'</div>'+ '<div class="line-size">'+size+'</div>'+ '<div class="line-downloads"><i class="icon-download" rel="tooltip" title="'+lng.count_downloads+'"></i> '+ar.downloads+'</div>'+ '<div class="line-info"><i class="icon-info-sign" rel="tooltip" title="'+lng.added+': '+ar.login+' | '+lng.date+': '+ar.date+'"></i></div>'+ '<div class="line-act"><a href="#" rel="tooltip" title="'+lng.delete+'" class="file-remove icon-remove"></a></div>'+ '</div>'); $('.file-manager .file-input-wrapper input[type="file"].file-inputs').attr('title', lng.drop_files_here); $('.file-manager .file-input-wrapper > span').text(lng.drop_files_here); $('.file-manager .file-input-wrapper input[type="file"].file-inputs').removeAttr('style'); mcr.loading(false); }); } }); return false; }); $('body').on('click', '.file-manager .file-remove', function(){ mcr.loading(); var that = $(this); var id_line = that.closest('.file-line').attr('id'); var formdata = new FormData(); formdata.append('mcr_secure', mcr.meta_data.secure); formdata.append('id', id_line); $.ajax({ url: "index.php?mode=ajax&do=filemanager&op=remove", dataType: "json", type: 'POST', contentType: false, processData: false, data: formdata, error: function(data){ mcr.logger(data); mcr.notify(lng.error, lng.e_file_delete); }, success: function(data){ if(!data._type){ return mcr.notify(data._title, data._message); } that.closest('.file-line').fadeOut('normal', function(){ $(this).remove(); mcr.loading(false); }); } }); return false; }); $('body').on('click', '.file-manager .file-edit', function(){ mcr.loading(); var that = $(this); var text = that.prev('a').text(); if(!that.hasClass('edit-active')){ if(that.hasClass('icon-edit')){ that.removeClass('icon-edit'); } that.addClass('icon-ok edit-active'); that.prev('a').remove(); $('<input class="file-edit-input" type="text" value="'+text+'">').insertBefore(that); mcr.loading(false); return false; } var id_line = that.closest('.file-line').attr('id'); var new_val = that.prev('.file-edit-input').val(); if(new_val.length <= 0){ return mcr.notify(lng.error, lng.e_id_not_filled); } var formdata = new FormData(); formdata.append('mcr_secure', mcr.meta_data.secure); formdata.append('id', id_line); formdata.append('val', new_val); $.ajax({ url: "index.php?mode=ajax&do=filemanager&op=edit", dataType: "json", type: 'POST', contentType: false, processData: false, data: formdata, error: function(data){ mcr.logger(data); mcr.notify(lng.error, lng.e_file_edit); }, success: function(data){ if(!data._type){ return mcr.notify(data._title, data._message); } if(that.hasClass('icon-ok')){ that.removeClass('icon-ok'); } if(that.hasClass('edit-active')){ that.removeClass('edit-active'); } that.addClass('icon-edit'); that.prev('.file-edit-input').remove(); $('<a href="'+data._data.link+'">'+data._data.uniq+'</a>').insertBefore(that); that.closest('.file-line').attr('id', data._data.uniq); mcr.loading(false); } }); return false; }); $('body').on('click', '.pagination .ajax-pagin-left, .pagination .ajax-pagin-right', function(){ var that = $(this); var page = $(this).closest('.pagination').attr('id'); page = ($(this).hasClass('ajax-pagin-left')) ? parseInt(page)-1 : parseInt(page)+1; mcr.init_filemanager(page); return false; }); $('.cpp').minicolors(); $('body').on('click', '.is_auth_user', function(){ if(!mcr.meta_data.is_auth){ mcr.notify(lng.error, lng.e_auth, false); return false; } }); function fd_ac_users(query){ var formdata = new FormData(); formdata.append('mcr_secure', mcr.meta_data.secure); formdata.append('query', query); return formdata; } $('body').on('input', 'input[type="text"].ac_users', function(){ var that = $(this); var formdata = new FormData(); formdata.append('mcr_secure', mcr.meta_data.secure); formdata.append('query', that.val()); that.typeahead({ items: 10, minLength: 2, source: function(query, process){ return $.ajax({ url: "index.php?mode=ajax&do=ac_users", dataType: 'json', type: 'POST', async: true, cache: false, contentType: false, processData: false, data: fd_ac_users(query), error: function(data){ mcr.logger(data); mcr.notify(lng.error, 'warn'); }, success: function(data){ if(!data._type){ return; } process(data._data); } }); }, matcher: function (param){ return true; } }); }); });