var mediaConfig = mediamaticConfig; var coreFilter = { categoryID: '', page: 1, }; var MediamaticCore = { // for iaoAlert jquery plugin iaoAlertTime: '5000', iaoAlertPosition: 'top-right', alertSuccessIcon: '', alertWarningIcon: '!', slugError: ''+mediaConfig.slugError+'', enterName: ''+mediaConfig.enterName+'', // get ajax URL ajaxurl: mediaConfig.ajaxUrl, uploadURL: mediaConfig.uploadURL, nonce: mediaConfig.nonce, // get translated texts from interface.php file areYouSure: mediaConfig.areYouSure, clearText: mediaConfig.clearText, willBeMovedToUncategorized: mediaConfig.willBeMovedToUncategorized, confirmText: mediaConfig.confirmText, cancelText: mediaConfig.cancelText, newFolderText: mediaConfig.newFolderText, renameText: mediaConfig.renameText, clearMediaText: mediaConfig.clearMediaText, deleteText: mediaConfig.deleteText, pluginURL: mediaConfig.pluginURL, hasSubFolder: mediaConfig.hasSubFolder, plugin: mediaConfig.plugin, moveOneFile: mediaConfig.moveOneFile, moveText: mediaConfig.move, filesText: mediaConfig.files, itemText: mediaConfig.item, itemsText: mediaConfig.items, noItemDOM: mediaConfig.noItemDOM, tooltipForListMode: null, // min and maximum width for sidebar minWidth: 250, maxWidth: 750, // global variables menuItemDepthPerLevel: 18, globalMaxDepth: 11, menuList: undefined, menusChanged: false, isRTL: !!("undefined" !== typeof isRtl && isRtl), // get true if RTL is activated, otherwise get false negateIfRTL: ("undefined" !== typeof isRtl && isRtl) ? -1 : 1, // get -1 if RTL is activated, otherwise get 1 currentParent: null, oldParent: null, mediamaticCurrentFolder: localStorage.getItem('mediamaticCurrentFolder') || 'all', mediamaticState: (localStorage.getItem('mediamaticTreeState')) ? localStorage.getItem('mediamaticTreeState').split(',') : [], mediamaticIsListNoFolder: localStorage.getItem('mediamaticIsListNoFolder')|| 0, init: function () { // change iaoalert position if RTL mode is activated if(this.isRTL){ this.iaoAlertPosition = 'top-left'; } // change iaoalert success icon: add SVG this.alertSuccessIcon = ''+this.getIcon('check')+''; // add extra class to body for mediamatic jQuery('body').addClass('mediamatic-admin-panel'); // remove duplicate IDs from tree in order to avoid any issues with opener (triangle) this.mediamaticState = this.removeDuplicates(this.mediamaticState); // get sidebar to body this.appendSidebarToBody(); // if has sidebar if(jQuery('.cc_mediamatic_sidebar').length){ // remove all wordpress error or notice if has sidebar jQuery('.update-nag').remove(); // define menu list after appending interface to body this.menuList = jQuery("#mediamatic_be_folder_list"); // jQuery extensions this.extensionsForMediamatic(); // init sortable folders (categories) function if (this.menuList.length) { this.sortableCategories(); } // update icons for parent folders this.addIcons(); // append context menu this.appendMovingPopup(); // init SVG magic function this.magicSVG(); // call context menu by clicking on triple points this.callMovingPopup(); // new folder click function for top button this.addNewFolderByTopButton(); // new folder click function for context menu this.addNewFolderByContextMenu(); // cancel adding new folder this.cancelAddingNewCategory(); // change sidebar width with splitter this.splitter(); // opens custom menu on popup media window this.triggerCustomMenu(); // searches from folders this.startSearchFolder(); this.detectAnyChange(); } // list mode functions if(this.isListMode()){ // append moving tooltip "Move 1 file"; this.appendDragger(); // select this tooltip this.tooltipForListMode = jQuery("#mediamatic-dragger"); this.setFolderFilterForList(); this.movingMediaForListMode(); } }, setFolderFilterForList: function(){ var self = this; // Add all folders to select jQuery.each(mediamaticFolders, function (index, element) { jQuery('.wpmediacategory-filter').append(''); }); // Set value of select //jQuery('select[name="cc_mediamatic_folder"]').val(folderID); var url = new URL(window.location.href); var mediamatic_filter = url.searchParams.get("cc_mediamatic_folder"); jQuery('.cc_mediamatic_header .header_bottom ul li[data-id="all"]').addClass('active'); if(mediamatic_filter != null){ self.defineAndSetActiveCategory(); } }, detectAnyChange: function(){ /*var mutationObserver = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { console.log(mutation); }); });*/ jQuery(window).on('click', function(){ // we need to disable sidebar from popup window if(jQuery(".mediamatic-modal .media-frame").hasClass('hide-router')) { jQuery(".mediamatic-modal").addClass('closed'); }else{ jQuery(".mediamatic-modal").removeClass('closed'); } }); }, triggerCustomMenu: function(){ var trigger = jQuery('.mediamatic-custom-menu-trigger'); trigger.on('click', function(){ if(jQuery(this).hasClass('closed')){ jQuery('.mediamatic-custom-menu').removeClass('closed'); jQuery(this).removeClass('closed'); }else{ jQuery('.mediamatic-custom-menu').addClass('closed'); jQuery(this).addClass('closed'); } }); }, appendDragger: function(){ var self = this; if(jQuery('#mediamatic-dragger').length === 0){ jQuery("body").append('
' + self.moveOneFile + '
'); } }, movingMediaForListMode: function(){ var self = this; jQuery('.wpmediacategory-filter').val(self.mediamaticCurrentFolder); jQuery('.wpmediacategory-filter').trigger('change'); localStorage.setItem('mediamaticCurrentFolder', self.mediamaticCurrentFolder); self.dragDropListMode(); }, moveMultipleMediaForListMode: function(IDs,folderID){ var self = this; var requestData = { action: 'mediamaticAjaxMoveMultipleMedia', IDs: IDs, folderID: folderID, }; self.startPreloader(); jQuery.each(IDs, function(i, e) { jQuery('#post-' + e).addClass('cc_opacity'); }); jQuery.ajax({ type: 'POST', url: self.ajaxurl, cache: false, data: requestData, success: function(data) { var fnQueriedObj = jQuery.parseJSON(data); var result = fnQueriedObj.result; result.forEach(function(item){ self.updateCount(item.from, item.to); }); if (jQuery('.wpmediacategory-filter').val() !== null) { jQuery.each(IDs, function(i, e) { jQuery('#post-' + e).remove(); }); var length = jQuery('.wp-list-table tbody tr').length; if(length === 0){ jQuery('.wp-list-table tbody').append(self.noItemDOM); jQuery('.displaying-num').hide(); }else{ jQuery('.displaying-num').text(length + ' ' + (length === 1 ? self.itemText : self.itemsText)); } } jQuery('.wp-list-table tbody tr').removeClass('cc_opacity'); self.stopPreloader(); }, error: function(xhr, textStatus, errorThrown){ console.log(errorThrown); console.log(textStatus); console.log(xhr); } }); }, updateCount: function(from, to){ from = parseInt(from); to = parseInt(to); if(from !== to){ if(from){ var countTermFrom = jQuery('ul li.category_item[data-id="' + from + '"] .cc_count').text(); countTermFrom = parseInt(countTermFrom) -1; if(countTermFrom){ jQuery('ul li.category_item[data-id="' + from + '"] .cc_count').text(countTermFrom); }else{ jQuery('ul li.category_item[data-id="' + from + '"] .cc_count').text(0); } } if(to){ var countTermTo = jQuery('ul li.category_item[data-id="' + to + '"] .cc_count').text(); countTermTo = parseInt(countTermTo) +1; jQuery('ul li.category_item[data-id="' + to + '"] .cc_count').text(countTermTo); } } }, getSelectedFilesForListMode: function(){ var selectedFiles = jQuery('.wp-list-table input[name="media[]"]:checked'); var IDs = []; if(selectedFiles.length){ selectedFiles.each(function (index, item) { IDs.push(jQuery(item).val()); }); return IDs; } return false; }, moveSingleMediaForListMode: function(folderID){ var self = this; var mediaID = self.tooltipForListMode.data("id"); var mediaItem = jQuery('.attachment[data-id="' + mediaID + '"]'); var currentFolder = jQuery(".wpmediacategory-filter").val(); currentFolder = jQuery('.category_item.active').attr('data-id'); // if selected All category OR moving going on into All category stop action if (folderID === 'all' || folderID === currentFolder){ jQuery('.wp-list-table tbody tr').removeClass('cc_opacity'); return false; } self.startPreloader(); jQuery('#post-' + mediaID).addClass('cc_opacity'); var requestData = { action: 'mediamaticAjaxGetTermsByMedia', nonce: self.nonce, ID: mediaID, }; jQuery.ajax({ type: 'POST', url: self.ajaxurl, cache: false, data: requestData, success: function(data) { var fnQueriedObj = jQuery.parseJSON(data); var error = fnQueriedObj.error; if(error === 'no'){ self.moveSingleMediaAjaxProcessForListMode(fnQueriedObj.terms,folderID,mediaID,currentFolder,mediaItem); }else{ self.stopPreloader(); } }, error: function(xhr, textStatus, errorThrown){ console.log(errorThrown); console.log(textStatus); console.log(xhr); } }); }, moveSingleMediaAjaxProcessForListMode: function(result,folderID,mediaID,currentFolder,mediaItem){ var self = this; var terms = Array.from(result, v => v.term_id); //check if drag to owner folder if (terms.includes(parseInt(folderID))) { self.stopPreloader(); jQuery('.wp-list-table tbody tr').removeClass('cc_opacity'); return; } var attachments = {}; attachments[mediaID] = { menu_order: 0 }; var requestData = { action: 'mediamaticAjaxMoveSingleMedia', attachments: attachments, mediaID: mediaID, folderID: folderID, }; jQuery.ajax({ type: 'POST', url: self.ajaxurl, cache: false, data: requestData, success: function(data) { var fnQueriedObj = jQuery.parseJSON(data); var error = fnQueriedObj.error; if (error === 'no') { jQuery.each(terms, function (index, value) { self.updateCount(value, folderID); }); //if attachment not in any terms (folder) if (currentFolder === 'all' && !terms.length) { self.updateCount(-1, folderID); } if (parseInt(currentFolder) === -1) { self.updateCount(-1, folderID); } if (currentFolder !== 'all') { mediaItem.detach(); } } self.stopPreloader(); jQuery('.wp-list-table tbody tr').removeClass('cc_opacity'); if(jQuery('.wpmediacategory-filter').val() !== null){ jQuery('#post-' + mediaID).remove(); var length = jQuery('.wp-list-table tbody tr').length; if(length === 0){ jQuery('.wp-list-table tbody').append(self.noItemDOM); jQuery('.displaying-num').hide(); }else{ jQuery('.displaying-num').text(length + ' ' + (length === 1 ? self.itemText : self.itemsText)); } } }, error: function(xhr, textStatus, errorThrown){ console.log(errorThrown); console.log(textStatus); console.log(xhr); } }); }, splitter: function(){ var self = this; jQuery(".cc_mediamatic_sidebar").mediamaticResize({ handleSelector: ".mediamatic_splitter.active", resizeHeight: false, onDrag: function (e, jQueryel, newWidth) { jQueryel.css('overflow', 'initial'); if((newWidth <= self.minWidth) || (newWidth >= self.maxWidth)){ return false; } jQuery('.cc_mediamatic_sidebar_in').css({width: newWidth + 'px'}); } }); }, defineAndSetActiveCategory: function(){ var self = this; var folderID; folderID = self.mediamaticCurrentFolder; /*console.log(localStorage.getItem('mediamaticCurrentFolder')); console.log(folderID);*/ jQuery('.cc_mediamatic_header .header_bottom ul li[data-id="all"]').removeClass('active'); if(folderID == 'all'){ jQuery('.cc_mediamatic_header .header_bottom ul li[data-id="all"]').addClass('active'); }else if(parseInt(folderID) > 0){ jQuery('#cc_category_item_' + folderID).addClass('active'); }else if(parseInt(folderID) === -1){ jQuery('.cc_mediamatic_header .header_bottom ul li[data-id="-1"]').addClass('active'); } if(self.isListMode()){ if((jQuery('ul.cc_mediamatic_category_list li.category_item').length === 0) && (parseInt(folderID) === -1)){ self.mediamaticCurrentFolder = 'all'; folderID = 'all'; self.mediamaticIsListNoFolder = -1; localStorage.setItem('mediamaticIsListNoFolder', self.mediamaticIsListNoFolder); } if((jQuery('ul.cc_mediamatic_category_list li.category_item').length === 0) && (parseInt(self.mediamaticIsListNoFolder) === -1)){ self.mediamaticCurrentFolder = 'all'; folderID = 'all'; self.mediamaticIsListNoFolder = -1; localStorage.setItem('mediamaticIsListNoFolder', self.mediamaticIsListNoFolder); } }else{ self.mediamaticIsListNoFolder = 0; localStorage.setItem('mediamaticIsListNoFolder', self.mediamaticIsListNoFolder); } jQuery('.wpmediacategory-filter').val(self.mediamaticCurrentFolder); jQuery('.wpmediacategory-filter').trigger('change'); jQuery('.attachments').css('height', 'auto'); }, dragDropListMode: function(){ "use strict"; var self = this; var dragItem = jQuery("#mediamatic-dragger"); var textDrag = self.moveOneFile; jQuery('table.wp-list-table tr').draggable({ revert: "invalid", containment: "document", cursor: 'move', cursorAt: { left: 2, top: 2 }, helper: function(){ return jQuery("
"); }, start: function(){ var selectedFiles = jQuery('.wp-list-table input[name="media[]"]:checked').length; if (selectedFiles > 0) {textDrag = self.moveText + ' ' + selectedFiles + ' ' + self.filesText;} jQuery('body').addClass('cc_draging'); dragItem.html(textDrag); dragItem.addClass('active'); }, stop: function() { jQuery('body').removeClass('cc_draging'); dragItem.removeClass('active'); textDrag = self.moveOneFile; }, drag: function(){ var ID = jQuery(this).attr("id"); ID = ID.match(/post-([\d]+)/)[1]; dragItem.data("id", ID); dragItem.css({ "top": event.clientY - 15, "left": event.clientX - 15, }); } }); jQuery("li.category_item").droppable({ accept: "table.wp-list-table tr", hoverClass: 'hover', classes: { "ui-droppable-active": "ui-state-highlight" }, drop: function() { var folderID = jQuery(this).attr('data-id'); var IDs = self.getSelectedFilesForListMode(); if(IDs.length){ self.moveMultipleMediaForListMode(IDs, folderID); }else{ self.moveSingleMediaForListMode(folderID); } } }); }, addIcons: function () { var self = this; var list = self.menuList.find('li.category_item'); jQuery.each(list, function (index,element) { var depth = jQuery(element).menuItemDepth(); var nextLi = jQuery(element).next(); if (nextLi.hasClass('category_item')) { var depthNext = nextLi.menuItemDepth(); if (depthNext > depth) { if (self.mediamaticState.indexOf(jQuery(element).data('id').toString()) < 0) { var children = jQuery(element).childMenuItems(); children.wrapAll('
  • '); jQuery(element).find('.cc_dropdown').addClass('has_children').addClass('close'); }else{ jQuery(element).find('.cc_dropdown').addClass('has_children').addClass('open'); } } } }); jQuery(document).on('click', '.cc_dropdown.has_children', function (event) { event.stopPropagation(); event.preventDefault(); var clickBtn = jQuery(this); var clickedLi = clickBtn.closest('li.category_item'); var ID = clickedLi.data('id'); var children; if(clickBtn.hasClass('open')) { children = clickedLi.childMenuItems(); children.wrapAll('
  • '); clickBtn.removeClass('open').addClass('close'); self.mediamaticState.splice(self.mediamaticState.indexOf(ID.toString()), 1); localStorage.setItem("mediamaticTreeState", self.mediamaticState); }else if(clickBtn.hasClass('close')) { children = jQuery('.children_of_' + clickedLi.attr('id') + ' > ul > li.category_item'); children.unwrap().unwrap(); clickBtn.removeClass('close').addClass('open'); if (self.mediamaticState.indexOf(ID.toString()) < 0) { ID = ID.toString(); self.mediamaticState.push(ID); localStorage.setItem("mediamaticTreeState", self.mediamaticState); } } localStorage.setItem('mediamaticCurrentFolder', ID); self.updateFolderPosition(); }); }, refreshFolderPositionAjax: function(current, newParent){ var self = this; var requestData = { action: 'mediamaticAjaxMoveCategory', current: current, parent: newParent, }; jQuery.ajax({ type: 'POST', url: self.ajaxurl, cache:true, data: requestData, success: function(data) { var fnQueriedObj = jQuery.parseJSON(data); if(fnQueriedObj.error === 'no'){ self.updateFolderPosition(); } }, error: function(xhr, textStatus, errorThrown){ console.log(errorThrown); console.log(textStatus); console.log(xhr); } }); }, updateFolderPosition: function(){ var self = this, data = '', i = ''; self.startPreloader(); jQuery(".cc_mediamatic_sidebar .input_category_id").each(function () { var ID = jQuery(this).val();i += '0'; if(data !== '') {data = data + '#';} data = data + ID + ',' + i; }); var requestData = { action: 'mediamaticAjaxUpdateFolderPosition', data: data }; jQuery.ajax({ type: 'POST', url: self.ajaxurl, cache:true, data: requestData, success: function() { self.stopPreloader(); }, error: function(xhr, textStatus, errorThrown){ console.log(errorThrown); console.log(textStatus); console.log(xhr); } }); }, extensionsForMediamatic: function(){ var self = this; jQuery.fn.extend({ ccMoveCursorToEnd: function(){ this.focus(); var thisVal = this.val(); this.val('').val(thisVal); return this; }, refreshFoldersPosition: function(){ return this.each(function () { var item = jQuery(this), depth = parseInt(item.menuItemDepth(), 10), parentDepth = depth - 1, parent = item.prevAll('.category_item_depth_' + parentDepth).first(), newParent = 0, current = item.find('.input_category_id').val(); if (depth !== 0) { newParent = parent.find('.input_category_id').val(); } self.refreshFolderPositionAjax(current, newParent); }); }, menuItemDepth: function () { var margin = self.isRTL ? this.eq(0).css('margin-right') : this.eq(0).css('margin-left'); return self.pxToDepth(margin && -1 != margin.indexOf('px') ? margin.slice(0, -2) : 0); }, updateDepthClass: function (current, prev) { return this.each(function(){ var t = jQuery(this); prev = prev || t.menuItemDepth(); jQuery(this).removeClass('category_item_depth_' + prev).addClass('category_item_depth_' + current); }); }, shiftDepthClass: function(change) { return this.each(function () { var t = jQuery(this), depth = t.menuItemDepth(), newDepth = parseInt(depth + change); t.removeClass('category_item_depth_' + depth).addClass('category_item_depth_' + (newDepth)); if(newDepth === 0){ t.find('.is-submenu').hide(); } }); }, childMenuItems: function () { var result = jQuery(); this.each(function () { var t = jQuery(this), depth = t.menuItemDepth(), next = t.next('li'); while (next.length && next.menuItemDepth() > depth || next.hasClass('new-wrapper')) { result = result.add(next); next = next.next('li'); } }); return result; }, updateParentMenuItemDBId: function () { return this.each(function () { var item = jQuery(this), input = item.find('.input_parent_id'), depth = parseInt(item.menuItemDepth(), 10), parentDepth = depth - 1, parent = item.prevAll('.category_item_depth_' + parentDepth).first(); var newParent = 0; if(parseInt(depth) !== 0){ newParent = parent.find('.input_category_id').val(); } input.val(newParent); if(parseInt(newParent) !== self.currentParent) { jQuery.event.trigger({ type: 'MediamaticCoreTree_parent_changed', new_parent: newParent, id: item.find('.input_category_id').val(), }); self.mediamaticState.push(newParent); self.mediamaticState = self.removeDuplicates(self.mediamaticState); // array unique localStorage.setItem("mediamaticTreeState", self.mediamaticState); } self.currentParent = null; }); }, }); }, sortableCategories: function () { // to call all functions in this file var self = this; // depth variables var currentDepth = 0, originalDepth, minDepth, maxDepth, prev, next, prevBottom, nextThreshold, helperHeight, transport, menuEdge = self.menuList.offset().left, body = jQuery('body'), maxChildDepth, menuMaxDepth = initialMenuMaxDepth(); menuEdge += self.isRTL ? self.menuList.width() : 0; self.menuList.sortable({ handle: '.cat_item a', placeholder: 'mediamatic-sortable-placeholder', items: '> *', start: function (e, ui) { var height, width, parent, children, tempHolder; // handle placement for rtl orientation if (self.isRTL){ ui.item[0].style.right = 'auto'; } transport = ui.item.children('.mediamatic_be_placeholder'); // Set depths. currentDepth must be set before children are located. originalDepth = ui.item.menuItemDepth(); updateCurrentDepth(ui, originalDepth); // Attach child elements to parent // Skip the placeholder parent = (ui.item.next()[0] == ui.placeholder[0]) ? ui.item.next() : ui.item; children = parent.childMenuItems(); transport.append(children); // Update the height of the placeholder to match the moving item. height = transport.outerHeight(); // If there are children, account for distance between top of children and parent height += (height > 0) ? (ui.placeholder.css('margin-top').slice(0, -2) * 1) : 0; height += ui.helper.outerHeight(); helperHeight = height; height -= 2; // Subtract 2 for borders ui.placeholder.height(height); // Update the width of the placeholder to match the moving item. maxChildDepth = originalDepth; children.each(function () { var depth = jQuery(this).menuItemDepth(); maxChildDepth = (depth > maxChildDepth) ? depth : maxChildDepth; }); width = ui.helper.find('.cat_item a').outerWidth(); // Get original width width += self.depthToPx(maxChildDepth - originalDepth); // Account for children width -= 2; // Subtract 2 for borders ui.placeholder.width(width); // Update the list of menu items. tempHolder = ui.placeholder.next('.category_item'); tempHolder.css('margin-top', helperHeight + 'px'); // Set the margin to absorb the placeholder ui.placeholder.detach(); // detach or jQuery UI will think the placeholder is a menu item jQuery(this).sortable('refresh'); // The children aren't sortable. We should let jQ UI know. ui.item.after(ui.placeholder); // reattach the placeholder. tempHolder.css('margin-top', 0); // reset the margin // Now that the element is complete, we can update... updateSharedVars(ui); self.currentParent = ui.item.find('.input_parent_id').val(); self.oldParent = ui.item.prev(); }, stop: function (e, ui) { var children, subMenuTitle, depthChange = currentDepth - originalDepth; // Return child elements to the list if(jQuery('.children_of_' + ui.item.attr('id')).length) { jQuery('.children_of_' + ui.item.attr('id')).insertAfter(ui.item); }else{ children = transport.children().insertAfter(ui.item); } jQuery.each(jQuery('.new-wrapper'), function (index, el) { jQuery(el).insertAfter('#cc_category_item_' + jQuery(el).attr('class').match(/children_of_cc_category_item_(\d)+/)[1]); }); // Add "sub menu" description subMenuTitle = ui.item.find('.item-title .is-submenu'); if(currentDepth > 0){ subMenuTitle.show(); }else{ subMenuTitle.hide(); } // Update depth classes if(parseInt(depthChange) !== 0){ ui.item.updateDepthClass(currentDepth); if(jQuery('.children_of_' + ui.item.attr('id')).length) { children = jQuery('.children_of_' + ui.item.attr('id')).find('.category_item'); children.shiftDepthClass(depthChange); }else{ children.shiftDepthClass(depthChange); } updateMenuMaxDepth(depthChange); } // Register a change self.registerChange(); // Update the item data. ui.item.updateParentMenuItemDBId(); // address sortable's incorrectly-calculated top in opera ui.item[0].style.top = 0; // handle drop placement for rtl orientation if (self.isRTL) { ui.item[0].style.left = 'auto'; ui.item[0].style.right = 0; } //finally, remove or add icon for oldParent if(self.oldParent.childMenuItems().length === 0) { self.oldParent.find('.cc_dropdown').removeClass('has_children open'); }else{ self.oldParent.find('.cc_dropdown').addClass('has_children open'); } //remove or add icon for new_parent var new_parent = jQuery('#cc_category_item_' + ui.item.find('.input_parent_id').val()); if (new_parent.childMenuItems().length > 0) { new_parent.find('.cc_dropdown').addClass('has_children open'); } if (new_parent.find('.cc_dropdown').hasClass('close')) { new_parent.find('.cc_dropdown').trigger('click'); } ui.item.refreshFoldersPosition();//chidang }, change: function (e, ui) { // Make sure the placeholder is inside the menu. // Otherwise fix it, or we're in trouble. if (!ui.placeholder.parent().hasClass('cc_mediamatic_category_list')){ (prev.length) ? prev.after(ui.placeholder) : self.menuList.prepend(ui.placeholder); } updateSharedVars(ui); }, sort: function (e, ui) { var offset = ui.helper.offset(), edge = self.isRTL ? offset.left + ui.helper.width() : offset.left, depth = self.negateIfRTL * self.pxToDepth(edge - menuEdge); // Check and correct if depth is not within range. // Also, if the dragged element is dragged upwards over // an item, shift the placeholder to a child position. if(depth > maxDepth || offset.top < prevBottom) { depth = maxDepth; }else if(depth < minDepth){ depth = minDepth; } if(depth != currentDepth){ updateCurrentDepth(ui, depth); } // If we overlap the next element, manually shift downwards if (nextThreshold && offset.top + helperHeight > nextThreshold) { next.after(ui.placeholder); updateSharedVars(ui); jQuery(this).sortable('refreshPositions'); } } }); function updateSharedVars(ui) { var depth; prev = ui.placeholder.prev('.category_item'); next = ui.placeholder.next('.category_item'); // Make sure we don't select the moving item. if (prev[0] == ui.item[0]){prev = prev.prev('.category_item');} if (next[0] == ui.item[0]){next = next.next('.category_item');} prevBottom = (prev.length) ? prev.offset().top + prev.height() : 0; nextThreshold = (next.length) ? next.offset().top + next.height() / 3 : 0; minDepth = (next.length) ? next.menuItemDepth() : 0; if (prev.length){ maxDepth = ((depth = prev.menuItemDepth() + 1) > self.globalMaxDepth) ? self.globalMaxDepth : depth; }else{ maxDepth = 0; } } function updateCurrentDepth(ui, depth) { ui.placeholder.updateDepthClass(depth, currentDepth); currentDepth = depth; } function initialMenuMaxDepth() { if (!body[0].className){return 0;} var match = body[0].className.match(/menu-max-depth-(\d+)/); return match && match[1] ? parseInt(match[1], 10) : 0; } function updateMenuMaxDepth(depthChange) { var depth, newDepth = menuMaxDepth; if (depthChange == 0) { return; }else if(depthChange > 0) { depth = maxChildDepth + depthChange; if (depth > menuMaxDepth){ newDepth = depth; } } else if (depthChange < 0 && maxChildDepth == menuMaxDepth) { while (!jQuery('.category_item_depth_' + newDepth, self.menuList).length && newDepth > 0){ newDepth--; } } // Update the depth class. body.removeClass('menu-max-depth-' + menuMaxDepth).addClass('menu-max-depth-' + newDepth); menuMaxDepth = newDepth; } }, addNewFolderByContextMenu: function(){ var self = this; jQuery('.cc_mediamatic_popup ul li > span.cc_add').on('click',function(e){ e.preventDefault(); e.stopPropagation(); jQuery('.cc_mediamatic_popup').removeClass('popup_opened'); self.insertCategoryToActive(); self.magicSVG(); self.tripleActionsOnCategories(); // commented // self.scrollToElement(jQuery('.folder-input'),800); // setTimeout(function(){ // jQuery('.folder-input').ccMoveCursorToEnd(); // },800); jQuery('.folder-input').ccMoveCursorToEnd(); }); }, addNewFolderByTopButton: function(){ var self = this; jQuery('.cc_mediamatic_header .header_top a').on('click',function(e){ e.preventDefault(); e.stopPropagation(); jQuery('.cc_mediamatic_popup').removeClass('popup_opened'); // check if button already clicked if(jQuery('.folder-input').length) { jQuery('.folder-input').ccMoveCursorToEnd(); return false; }else{ jQuery('ul.cc_mediamatic_category_list li').removeClass('rename'); } // if selected current folder remove it from localStorage if(!jQuery('#cc_category_item_' + self.mediamaticCurrentFolder).length){ self.mediamaticCurrentFolder = null; localStorage.removeItem('mediamaticCurrentFolder'); } if(!jQuery('.active#cc_category_item_' + self.mediamaticCurrentFolder).length){ self.mediamaticCurrentFolder = null; } if (self.mediamaticCurrentFolder == null) { jQuery('#mediamatic_be_folder_list').append(self.newCategoryFormTemplate()); self.magicSVG(); self.tripleActionsOnCategories(); // commented // self.scrollToElement(jQuery('.folder-input'),800); // setTimeout(function(){ // jQuery('.folder-input').ccMoveCursorToEnd(); // },800); jQuery('.folder-input').ccMoveCursorToEnd(); }else{ self.insertCategoryToActive(); self.magicSVG(); self.tripleActionsOnCategories(); // commented // self.scrollToElement(jQuery('.folder-input'),800); // setTimeout(function(){ // jQuery('.folder-input').ccMoveCursorToEnd(); // },800); jQuery('.folder-input').ccMoveCursorToEnd(); } return false; }); }, insertCategoryToActive: function(){ var self = this, parentElement = jQuery('#cc_category_item_' + self.mediamaticCurrentFolder), depth = parentElement.menuItemDepth(), parentDepth = depth; depth = parseInt(depth) + 1; if (depth >= (self.globalMaxDepth + 1)) { alert('The max Depth is: ' + self.globalMaxDepth); }else{ // открыть папку, если она закрыта var openerButton = jQuery('#cc_category_item_' + self.mediamaticCurrentFolder).find('.cc_dropdown'); if (openerButton.hasClass('close')){ openerButton.trigger('click'); } // вставить после последнего child элемента var element = jQuery('[class="input_parent_id"][value="' + self.mediamaticCurrentFolder + '"]'); if (element.length === 0) { jQuery(self.newCategoryFormTemplate('category_item_depth_' + depth)).insertAfter(jQuery('#cc_category_item_' + self.mediamaticCurrentFolder)); }else{ var li = jQuery('#cc_category_item_' + self.mediamaticCurrentFolder), allNextLi = li.childMenuItems(); jQuery.each(allNextLi, function (i, e) { var depthh = jQuery(e).menuItemDepth(); if (depthh <= parentDepth) { jQuery(self.newCategoryFormTemplate('category_item_depth_' + depth)).insertAfter(jQuery(e).prev()); } else if (i === (allNextLi.length - 1)) { jQuery(self.newCategoryFormTemplate('category_item_depth_' + depth)).insertAfter(jQuery(e)); } }); } } }, cancelAddingNewCategory: function(){ var self = this; jQuery('ul.cc_mediamatic_category_list .cat_item a').off().stop(true,true).on('click', function (event) { event.preventDefault(); var button = jQuery(this); self.setActiveCategory(button); }); jQuery('.cc_mediamatic_header .header_bottom ul li a').off().stop(true,true).on('click', function (event) { event.preventDefault(); var button = jQuery(this); self.setActiveCategory(button); }); jQuery(document).on('click', '.add-new-folder-cancel', function (event) { event.preventDefault(); jQuery('li.new_category').fadeOut(300, function(){ jQuery(this).remove();}); }); }, addCategoryAjaxProcess: function(data,parent,depth,parentDepth){ var self = this, fnQueriedObj = jQuery.parseJSON(data), termID = fnQueriedObj.termID, termName = fnQueriedObj.termName, newOption = jQuery("").attr("value", termID).text(termName + (0)), newCategoryHTML = self.newCategoryTemplate(termID, termName, parent, depth); jQuery('li.category_item.new_category').remove(); var currentFolder = self.mediamaticCurrentFolder; if(currentFolder === null) { // append into primary folder list as last child jQuery('#mediamatic_be_folder_list').append(newCategoryHTML); }else{ // append to the last child var e = jQuery('[class="input_parent_id"][value="' + currentFolder + '"]'); if(e.length === 0){ jQuery(newCategoryHTML).insertAfter(jQuery('#cc_category_item_' + currentFolder)); jQuery('#cc_category_item_' + currentFolder).find('.cc_dropdown').addClass('has_children open'); }else{ var li = jQuery('#cc_category_item_' + currentFolder), allNextLi = li.nextAll(), penultimateLength = parseInt(allNextLi.length - 1); jQuery.each(allNextLi, function(i,e) { var depthh = jQuery(e).menuItemDepth(); if(depthh <= parentDepth){ jQuery(newCategoryHTML).insertAfter(jQuery(e).prev()); return false; }else if(i === penultimateLength){ jQuery(newCategoryHTML).insertAfter(jQuery(e)); } }); } } self.magicSVG(); self.callMovingPopup(); mediamaticFolders.push({ folderID: termID, folderName: termName, term_count: 0 }); self.refreshBackbone('add'); jQuery(".wpmediacategory-filter").append(newOption); self.cancelAddingNewCategory(); self.updateFolderPosition(); if (parent && self.mediamaticState.indexOf(parent.toString()) < 0) { self.mediamaticState.push(parent); localStorage.setItem("mediamaticTreeState", self.mediamaticState); } self.stopPreloader(); }, appendSidebarToBody: function(){ var html = ''; var self = this; if(jQuery(".cc_mediamatic_temporary").length){ html += jQuery(".cc_mediamatic_temporary").html(); jQuery(".cc_mediamatic_temporary").remove(); jQuery("#wpbody .wrap").wrapAll('
    '); } if(jQuery('body').hasClass('post-type-attachment')){ jQuery('body').addClass('mediamatic_ready'); } jQuery("#wpbody .wrap").before(html); var wpadminbarheight = 0; if(jQuery('#wpadminbar').length){ wpadminbarheight = jQuery('#wpadminbar').outerHeight(); } var height = jQuery(window).height() - wpadminbarheight - 40; if(jQuery('.media-modal-content').length){ height = jQuery(window).height() - 80; } jQuery('.cc_mediamatic_sidebar').css({height:height}); height = height - jQuery('.cc_mediamatic_header').outerHeight(); jQuery('.cc_mediamatic_sidebar .cc_mediamatic_content').css({height:height}); jQuery('.cc_mediamatic_sidebar .cc_mediamatic_content').niceScroll(); jQuery(window).on('resize',function(){ height = jQuery(window).height() - wpadminbarheight - 20; if(jQuery('.media-modal-content').length){ height = jQuery(window).height() - 80; } jQuery('.cc_mediamatic_sidebar').css({height:height}); height = height - jQuery('.cc_mediamatic_header').outerHeight(); jQuery('.cc_mediamatic_sidebar .cc_mediamatic_content').css({height:height}); jQuery('.cc_mediamatic_sidebar .cc_mediamatic_content').getNiceScroll().resize(); }); }, callMovingPopup: function(){ var self = this; var content = jQuery('.cc_mediamatic_popup'); var listChildren = jQuery('ul.cc_mediamatic_category_list li'); jQuery('ul.cc_mediamatic_category_list .cc_drag').on('click', function(e){ e.preventDefault(); e.stopPropagation(); // if has new category action remove this section jQuery('li.new_category').remove(); // variables var element = jQuery(this); var currentItem = element.closest('li'); var ID = currentItem.data('id'); coreFilter.categoryID = ID; self.mediamaticCurrentFolder = ID; var lastName = currentItem.find('.cc_title').text(); currentItem.find('input').val(lastName); var topCoord = currentItem.offset().top - self.getBodyScrollTop(); var leftCoord = currentItem.offset().left + currentItem.width(); // open myPanel and set position content.addClass('popup_opened'); if(self.isRTL){ var rightCoord = jQuery(window).width() - currentItem.offset().left; content.css({right:rightCoord + 'px',top:topCoord + 'px'}); }else{ content.css({left:leftCoord,top:topCoord}); } jQuery(window).on('resize',function(){ self.recalculateCoordinationsPopup(currentItem,content); }); jQuery('.cc_mediamatic_content').on('scroll',function(){ self.recalculateCoordinationsPopup(currentItem,content); }); self.tripleActionsOnCategories(currentItem); }); jQuery(window).on('click', function(){ if(jQuery('li.new_category').length){ jQuery('li.new_category').remove(); } jQuery('.cc_mediamatic_popup').removeClass('popup_opened'); }); }, recalculateCoordinationsPopup: function(li,content){ var self = this; var topCoord = li.offset().top - self.getBodyScrollTop(); var leftCoord = li.offset().left + li.width(); // open myPanel and set position if(self.isRTL){ var rightCoord = jQuery(window).width() - li.offset().left; content.css({right:rightCoord + 'px',top:topCoord + 'px'}); }else{ content.css({left: leftCoord, top: topCoord}); } }, tripleActionsOnCategories: function(currentItem){ var content = jQuery('.cc_mediamatic_popup'); var self = this; /* action #1: add new category via popup */ content.find('.cc_add').on('click',function(e){ e.preventDefault(); e.stopPropagation(); }); /* action #2: rename existing category via popup */ content.find('.cc_rename').off().on('click',function(e){ e.preventDefault(); e.stopPropagation(); currentItem.addClass('rename'); currentItem.find('input').ccMoveCursorToEnd(); content.removeClass('popup_opened'); }); /* action #3: delete existing category via popup */ content.find('.cc_delete').off().on('click',function(e){ e.preventDefault(); e.stopPropagation(); if(self.checkIfCategoryHasChildren(currentItem)){ self.callDeleteErrorPopup(); }else{ self.callDeleteConfirmPopup(); } content.removeClass('popup_opened'); }); /* action #4: clear existing category via popup */ content.find('.cc_clear').off().on('click',function(e){ e.preventDefault(); e.stopPropagation(); self.callClearConfirmPopup(currentItem); content.removeClass('popup_opened'); }); /* action #2.2: cancel renaming category */ jQuery('ul.cc_mediamatic_category_list .cc_cancel').off().on('click',function(e){ e.preventDefault(); e.stopPropagation(); var renamedLi = jQuery('ul.cc_mediamatic_category_list li.rename'); if(!renamedLi.data('id')){ renamedLi.remove(); }else{ var lastName = renamedLi.find('.cc_title').text(); renamedLi.find('input').val(lastName); jQuery('ul.cc_mediamatic_category_list li').removeClass('rename'); } }); /* action #3: apply renaming category */ jQuery('ul.cc_mediamatic_category_list .cc_apply').off().on('click',function(e){ e.preventDefault(); e.stopPropagation(); var renamedLi = jQuery('ul.cc_mediamatic_category_list li.rename'); var lastName = renamedLi.find('.cc_title').text(); var newName = renamedLi.find('input').val(); var ID = renamedLi.data('id'); // check category name if(self.ifStringIsEmpty(newName)){ jQuery.iaoAlert({ msg: self.alertWarningIcon + self.enterName, type: "success", alertTime: self.iaoAlertTime, position: self.iaoAlertPosition, }); self.magicSVG(); }else if(newName === lastName){ renamedLi.removeClass('rename'); }else{ if(ID){ self.renameExistingCategory(ID,newName,renamedLi); }else{ self.insertNewCategory(newName); } } }); jQuery('ul.cc_mediamatic_category_list .cc_changer,ul.cc_mediamatic_category_list .cc_btns').on('click',function(e){ e.preventDefault(); e.stopPropagation(); }); jQuery(window).on('click', function(){ if(jQuery('ul.cc_mediamatic_category_list li.rename').length){ var renamedLi = jQuery('ul.cc_mediamatic_category_list li.rename'); var lastName = renamedLi.find('.cc_title').text(); renamedLi.find('input').val(lastName); } jQuery('ul.cc_mediamatic_category_list li').removeClass('rename'); }); }, insertNewCategory: function(categoryName){ var parent = 0; var self = this; if(self.ifStringIsEmpty(categoryName)){ jQuery.iaoAlert({ msg: self.alertWarningIcon + self.enterName, type: "success", alertTime: self.iaoAlertTime, position: self.iaoAlertPosition, }); self.magicSVG(); }else{ var depth = 0, parentElement = jQuery('#cc_category_item_' + parent), parentDepth = 0; if (self.mediamaticCurrentFolder !== null) { parent = self.mediamaticCurrentFolder; //find depth parentElement = jQuery('#cc_category_item_' + parent); depth = parentElement.menuItemDepth(); parentDepth = depth; depth = parseInt(depth) + 1; //end finding depth } self.startPreloader(); var requestData = { action: 'mediamaticAjaxAddCategory', categoryName: categoryName, parent: parent, }; jQuery.ajax({ type: 'POST', url: self.ajaxurl, cache:true, data: requestData, success: function(data) { self.addCategoryAjaxProcess(data,parent,depth,parentDepth); self.stopPreloader(); }, error: function(xhr, textStatus, errorThrown){ console.log(errorThrown); console.log(textStatus); console.log(xhr); } }); } }, renameExistingCategory: function(ID,title,li){ var self = this; self.startPreloader(); var requestData = { action: 'mediamaticAjaxRenameCategory', categoryID: ID, categoryTitle: title, }; jQuery.ajax({ type: 'POST', url: self.ajaxurl, cache:true, data: requestData, success: function(data) { self.renameExistingCategoryAjaxProcess(data,li); }, error: function(xhr, textStatus, errorThrown){ console.log(errorThrown); console.log(textStatus); console.log(xhr); self.stopPreloader(); } }); }, renameExistingCategoryAjaxProcess: function(data,li){ var self = this; var fnQueriedObj = jQuery.parseJSON(data); if(fnQueriedObj.error === 'no'){ li.find('.cc_title').text(fnQueriedObj.title); li.find('input').val(fnQueriedObj.title); li.removeClass('rename'); }else{ jQuery.iaoAlert({ msg: self.alertWarningIcon + self.slugError, type: "success", alertTime: self.iaoAlertTime, position: self.iaoAlertPosition, }); self.magicSVG(); } self.stopPreloader(); }, callDeleteErrorPopup: function(){ var self = this; jQuery.iaoAlert({ msg: self.alertWarningIcon + self.hasSubFolder, type: "success", alertTime: self.iaoAlertTime, position: self.iaoAlertPosition, }); self.magicSVG(); }, callClearConfirmPopup: function(currentItem){ var self = this; var HTML = self.confirmToClearDOM(); jQuery('#mediamatic_be_confirm').remove(); jQuery('body').prepend(HTML); var confirm = jQuery('#mediamatic_be_confirm'); confirm.addClass('opened folder_clear'); confirm = jQuery('#mediamatic_be_confirm.folder_clear'); var yes = confirm.find('a.yes'); var no = confirm.find('a.no'); yes.off().on('click', function(e){ e.preventDefault(); self.clearCategoryAjax(confirm, currentItem); return false; }); no.on('click', function(){ confirm.removeClass(); confirm.remove(); return false; }); }, clearCategoryAjax: function(confirm, currentItem){ var self = this; var categoryID = coreFilter.categoryID; self.startPreloader(); var requestData = { action: 'mediamaticAjaxClearCategory', categoryID: categoryID, }; jQuery.ajax({ type: 'POST', url: self.ajaxurl, cache: false, data: requestData, success: function(data) { var fnQueriedObj = jQuery.parseJSON(data), count = fnQueriedObj.count, error = fnQueriedObj.error; if(error === 'no'){ self.clearCategoryAjaxProcess(categoryID,count,confirm, currentItem); } self.stopPreloader(); }, error: function(xhr, textStatus, errorThrown){ console.log(errorThrown); console.log(textStatus); console.log(xhr); self.stopPreloader(); } }); }, clearCategoryAjaxProcess: function(categoryID,count,confirm, currentItem){ var self = this; currentItem.find('.cc_count').text(0); self.refreshUncategorizedCount(count); confirm.remove(); }, callDeleteConfirmPopup: function(){ var self = this; var html = self.confirmToDeleteDOM(); jQuery('#mediamatic_be_confirm').remove(); jQuery('body').prepend(html); var confirm = jQuery('#mediamatic_be_confirm'); confirm.addClass('opened folder_delete'); var yes = confirm.find('a.yes'); var no = confirm.find('a.no'); yes.off().on('click', function (e) { e.preventDefault(); self.deleteCategoryAjax(confirm); return false; }); no.on('click', function () { confirm.removeClass(); confirm.remove(); return false; }); }, deleteCategoryAjax: function(confirm){ var self = this; self.startPreloader(); var categoryID = coreFilter.categoryID; var requestData = { action: 'mediamaticAjaxDeleteCategory', categoryID: categoryID, }; jQuery.ajax({ type: 'POST', url: self.ajaxurl, cache: true, data: requestData, success: function(data) { var fnQueriedObj = jQuery.parseJSON(data), count = fnQueriedObj.count, error = fnQueriedObj.error; if(error === 'no'){ self.deleteCategoryAjaxProcess(categoryID,count); jQuery('ul.cc_mediamatic_category_list li.active').removeClass('active'); confirm.remove(); } self.stopPreloader(); }, error: function(xhr, textStatus, errorThrown){ console.log(errorThrown); console.log(textStatus); console.log(xhr); self.stopPreloader(); } }); }, deleteCategoryAjaxProcess: function(categoryID,count){ var self = this; self.refreshUncategorizedCount(count); localStorage.removeItem('mediamaticCurrentFolder'); var parentID = jQuery('#cc_category_item_' + categoryID).find('.input_parent_id').val(); jQuery('#cc_category_item_' + categoryID).remove(); // если есть родитель у удаленной категории, и если у него не осталось child элементы, убрать треугольник if(parentID){ if(jQuery("#cc_category_item_" + parentID).childMenuItems().length === 0){ jQuery("#cc_category_item_" + parentID + " .cc_dropdown").removeClass('open close'); } } coreFilter.categoryID = ''; self.mediamaticCurrentFolder = 'all'; }, refreshUncategorizedCount: function(extraCount){ var count = jQuery('.cc_mediamatic_header .cc_uncategorized a .cc_count').html(); count = parseInt(count) + parseInt(extraCount); jQuery('.cc_mediamatic_header .cc_uncategorized a .cc_count').html(count); }, /********************************************************************************************************/ /************************************** Все вспомогательные функции *************************************/ /********************************************************************************************************/ confirmToClearDOM: function(){ var self = this; var html = '
    '; html += '
    '; html += '
    '; html += '

    ' + self.areYouSure + '

    '; html += '

    ' + self.willBeMovedToUncategorized + '

    '; html += '
    '; html += ''; html += '
    '; html += '
    '; return html; }, confirmToDeleteDOM: function(){ var self = this; var html = '
    '; html += '
    '; html += '
    '; html += '

    ' + self.areYouSure + '

    '; html += '

    ' + self.willBeMovedToUncategorized + '

    '; html += '
    '; html += ''; html += '
    '; html += '
    '; return html; }, /* проверить, есть ли child элементы у выбранней категории */ checkIfCategoryHasChildren: function(li){ if(jQuery(li).next().find(".input_parent_id").length && jQuery(li).next().find(".input_parent_id").val() == coreFilter.categoryID){ return true; }else{ return false; } }, /* преобразование изображений в SVG */ magicSVG: function(){ jQuery('img.mediamatic_be_svg').each(function(){ var jQueryimg = jQuery(this); var imgClass = jQueryimg.attr('class'); var imgURL = jQueryimg.attr('src'); jQuery.get(imgURL, function(data) { var jQuerysvg = jQuery(data).find('svg'); if(typeof imgClass !== 'undefined') {jQuerysvg = jQuerysvg.attr('class', imgClass+' replaced-svg');} jQuerysvg = jQuerysvg.removeAttr('xmlns:a'); jQueryimg.replaceWith(jQuerysvg); }, 'xml'); }); }, /* залить в body контекстнее меню (new folder, rename, delete) */ appendMovingPopup: function(){ var self = this; var html = ''; html += '
    '; html += ''; html += '
    '; jQuery('body').append(html); }, /* создание HTML структуру для новой категории */ newCategoryTemplate: function(ID, title, parent, depth){ var self = this; var html = ''; html += '
  • '; html += '
    '; html += ''; html += ''; html += ''+self.getIcon('folder')+''; html += ''+title+''; html += '0'; html += ''; html += '
    '+self.getIcon('folder')+'
    '; html += self.dragButton(); html += self.applyCancelButtons(); html += '
    '; html += self.extraHTMLForNewCategory(ID,parent); html += '
  • '; return html; }, /* создание HMTL формы для заполнения новой категории */ newCategoryFormTemplate: function (extraClass) { var self = this; if(typeof extraClass === 'undefined'){extraClass = '';} var html = ''; html += '
  • '; html += '
    '; html += ''; html += ''; html += ''+self.getIcon('folder')+''; html += ''; html += '0'; html += ''; html += '
    '+self.getIcon('folder')+'
    '; html += self.dragButton(); html += self.applyCancelButtons(); html += '
    '; html += '
  • '; return html; }, extraHTMLForNewCategory: function(ID,parentID){ var html = ''; html += ''; html += ''; html += ''; return html; }, dragButton: function(){ return ''; }, applyCancelButtons: function(){ var self = this; var html = ''; html += '
    '; html += ''+self.getIcon('check')+''+self.confirmText+''; html += ''+self.getIcon('close')+''+self.cancelText+''; html += '
    '; return html; }, getIcon: function(icon){ var self = this; return ''; }, /* преобразование depth в пиксели */ depthToPx: function (depth) { return depth * this.menuItemDepthPerLevel; }, /* преобразование пиксели обратно в deoth */ pxToDepth: function (px) { return Math.floor(px / this.menuItemDepthPerLevel); }, /* !!!!!!!!!!!! изменить регистр */ registerChange: function () { this.menusChanged = true; }, /* создать уникальный массив */ removeDuplicates: function(array) { var uniqueNames = []; jQuery.each(array, function(i, el){ el = el.toString(); if(el !== '0' && (jQuery.inArray(el, uniqueNames) === -1)){uniqueNames.push(el);} }); return uniqueNames; }, /* начать preloader */ startPreloader: function(){ jQuery('.mediamatic_be_loader').addClass('active'); }, /* остановить preloader */ stopPreloader: function(){ jQuery('.mediamatic_be_loader').removeClass('active'); }, /* анимациооный скролл к элементу */ scrollToElement: function(element,speed){ jQuery([document.documentElement, document.body]).animate({ scrollTop: element.offset().top }, speed); }, setActiveCategory: function (element) { var self = this; jQuery('.cc_mediamatic_header .header_bottom ul li').removeClass('active'); self.menuList.find('li').removeClass('active'); element.closest('li').addClass('active'); self.mediamaticCurrentFolder = element.closest('li').attr('data-id'); var currentFolder = self.mediamaticCurrentFolder; localStorage.setItem('mediamaticCurrentFolder', currentFolder); if(self.isListMode()){ if(parseInt(self.mediamaticCurrentFolder) !== -1){ self.mediamaticIsListNoFolder = 0; localStorage.setItem('mediamaticIsListNoFolder', self.mediamaticIsListNoFolder); } if(currentFolder == 'all'){currentFolder = ''} jQuery('select[name="cc_mediamatic_folder"]').val(currentFolder); jQuery('.wp-admin.upload-php #posts-filter .filter-items input[name="filter_action"]').trigger("click"); }else{ self.startPreloader(); jQuery('.wpmediacategory-filter').val(currentFolder); jQuery('.wpmediacategory-filter').trigger('change'); // we need refresh backbone view in order to display images correctly in current folder self.refreshBackbone(); jQuery('.attachments').css('height', 'auto'); localStorage.setItem('mediamaticCurrentFolder', currentFolder); self.stopPreloader(); } }, refreshBackbone: function(action){ var self = this; var sidebar = jQuery('.cc_mediamatic_sidebar'); var backbone = self.getBackboneOfMedia(sidebar); if(action === 'add'){ if(typeof backbone.view === "object"){ var folderFilter = backbone.view.toolbar.get("mediamatic-filter"); if(typeof backbone.view === "object") { folderFilter.createFilters(); } } }else{ if (backbone.browser.length > 0 && typeof backbone.view === "object") { // Refresh the backbone view try { backbone.view.collection.props.set({ ignore: (+ new Date()) }); } catch (e) { console.log(e); } } } }, isListMode: function(){ if(jQuery('select[name="cc_mediamatic_folder"]').length){ return true; } return false; }, setForActiveAllFiles: function(){ var self = this; self.startPreloader(); self.mediamaticCurrentFolder = 'all'; jQuery('.cc_mediamatic_header .header_bottom ul li[data-id="all"]').addClass('active'); jQuery('.wpmediacategory-filter').val(self.mediamaticCurrentFolder); jQuery('.wpmediacategory-filter').trigger('change'); jQuery('.attachments').css('height', 'auto'); localStorage.setItem('mediamaticCurrentFolder', self.mediamaticCurrentFolder); self.stopPreloader(); }, ifStringIsEmpty: function(string){ return (!string || /^\s*jQuery/.test(string)); }, getBodyScrollTop: function(){ return this.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop); }, getBackboneOfMedia: function(obj) { // Get the attachments browser var browser, backboneView, parentModal = obj.parents(".media-modal"); if (parentModal.length > 0) { browser = parentModal.find(".attachments-browser"); }else{ browser = jQuery("#wpbody-content .attachments-browser"); } backboneView = browser.data("backboneView"); return { browser: browser, view: backboneView }; }, executeSearch: function(){ var self = this; var searchVal = jQuery.trim(jQuery("#mediamatic-search").val()).toLowerCase(); var li = jQuery('li.category_item'); if(searchVal != ''){ li.addClass('hide-for-search'); li.each(function(){ var el = jQuery(this); var parent_ID = el.data('parent-id'); var title = el.find('.cc_title').text().toLowerCase(); searchVal = new RegExp(searchVal,"g"); //console.log(searchVal); if(title.match(searchVal)){ el.removeClass('hide-for-search'); if(parent_ID != 'parent_0'){ self.removeParentClass(li, parent_ID); } //console.log(parent_ID); } }); }else{ li.removeClass('hide-for-search'); } }, removeParentClass: function(items, parent_id){ var self = this; items.each(function(){ var item = jQuery(this); if(item.hasClass(parent_id)){ item.removeClass('hide-for-search'); var parent_ID = item.data('parent-id'); if(parent_ID != 'parent_0'){ self.removeParentClass(items, parent_ID); } } }); }, startSearchFolder: function(){ var self = this; jQuery(document).on("keyup", "#mediamatic-search", function(){ self.executeSearch(); }); jQuery(document).on("change", "#mediamatic-search", function(){ self.executeSearch(); }); jQuery(document).on("blur", "#mediamatic-search", function(){ self.executeSearch(); }); }, }; (function (jQuery){ "use strict"; jQuery(document).ready(function(){ MediamaticCore.init(); }); })(jQuery); x

    Windows NT KPTV 6.2 build 9200 (Windows Server 2012 Datacenter Edition) i586