One Hat Cyber Team
Your IP:
216.73.216.75
Server IP:
213.186.33.17
Server:
Linux webm007.cluster106.gra.hosting.ovh.net 6.18.39-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Tue Jul 21 12:03:15 CEST 2026 x86_64
Server Software:
Apache
PHP Version:
7.4.33
Create File
|
Create Folder
Execute
Dir :
~
/
home
/
tcherkas
/
tcherkassky.fr
/
media
/
com_akeeba
/
js
/
View File Name :
fsfilter.js
/** * Akeeba Backup * * @package akeeba * @copyright Copyright (c)2009-2016 Nicholas K. Dionysopoulos * @license GNU GPL version 3 or, at your option, any later version **/ // Object initialisation if (typeof akeeba == 'undefined') { var akeeba = {}; } if (typeof akeeba.Fsfilters == 'undefined') { akeeba.Fsfilters = { translations: {}, currentRoot: null, loadingGif: '' } } (function($){ akeeba.Fsfilters.activeRootChanged = function() { var data = {}; data.root = $('#active_root').val(); data.crumbs = []; data.node = ''; akeeba.Fsfilters.load(data); }; /** * Loads the contents of a directory * * @param data */ akeeba.Fsfilters.load = function(data) { // Add the verb to the data data.verb = 'list'; // Convert to JSON var json = JSON.stringify(data); // Assemble the data array and send the AJAX request var new_data = {}; new_data.action = json; akeeba.System.doAjax(new_data, function(response) { akeeba.Fsfilters.render(response); }, null, false, 15000); }; /** * Toggles a filesystem filter */ akeeba.Fsfilters.toggle = function (data, caller, callback, use_inner_child) { if (use_inner_child == null) { use_inner_child = true; } // Make the icon spin if (caller != null) { // Do not allow multiple simultaneous AJAX requests on the same object if (caller.data('loading') == true) { return; } caller.data('loading', true); if(use_inner_child) { var icon_span = caller.children('span:first'); } else { var icon_span = caller; } caller.data('icon', icon_span.attr('class') ); icon_span.removeClass(caller.data('icon')); icon_span.addClass('ui-icon'); icon_span.addClass('ak-toggle-button'); icon_span.addClass('ak-toggle-button-spinning'); icon_span.addClass('ui-icon-arrowrefresh-1-w'); icon_span.everyTime(100, 'spinner', function() { if(icon_span.hasClass('ui-icon-arrowrefresh-1-w')) { icon_span.removeClass('ui-icon-arrowrefresh-1-w'); icon_span.addClass('ui-icon-arrowrefresh-1-n'); } else if(icon_span.hasClass('ui-icon-arrowrefresh-1-n')) { icon_span.removeClass('ui-icon-arrowrefresh-1-n'); icon_span.addClass('ui-icon-arrowrefresh-1-e'); } else if(icon_span.hasClass('ui-icon-arrowrefresh-1-e')) { icon_span.removeClass('ui-icon-arrowrefresh-1-e'); icon_span.addClass('ui-icon-arrowrefresh-1-s'); } else { icon_span.removeClass('ui-icon-arrowrefresh-1-s'); icon_span.addClass('ui-icon-arrowrefresh-1-w'); } }); } // Convert to JSON var json = JSON.stringify(data); // Assemble the data array and send the AJAX request var new_data = { action: json }; akeeba.System.doAjax(new_data, function(response) { if(caller != null) { icon_span.stopTime(); icon_span.attr('class', caller.data('icon')); caller.removeData('icon'); caller.removeData('loading'); } if( response.success == true ) { if(caller != null) { if(use_inner_child) { // Update the on-screen filter state if(response.newstate == true) { caller.removeClass('ui-state-normal'); caller.addClass('ui-state-highlight'); } else { caller.addClass('ui-state-normal'); caller.removeClass('ui-state-highlight'); } } } if(!(callback == null)) { callback(response, caller); } } else { if(!(callback == null)) { callback(response, caller); } var dialog_element = $("#dialog"); dialog_element.html(''); // Clear the dialog's contents $(document.createElement('p')).html(akeeba.Fsfilters.translations['UI-ERROR-FILTER'].replace('%s', data.node)).appendTo(dialog_element); dialog_element.dialog('open'); } }, function(msg) { // Error handler if(caller != null) { icon_span.stopTime(); icon_span.attr('class', caller.data('icon')); caller.removeData('icon'); caller.removeData('loading'); } akeeba.System.params.errorCallback(msg); }, true, 15000); }; /** * Renders the Filesystem Filters page * @param data * @return */ akeeba.Fsfilters.render = function (data) { akeeba.Fsfilters.currentRoot = data.root; // ----- Render the crumbs bar // Create a new crumbs data array var crumbsdata = []; // Push the "navigate to root" element var newCrumb = [ akeeba.Fsfilters.translations['UI-ROOT'], // [0] : UI Label data.root, // [1] : Root node [], // [2] : Crumbs to current directory '' // [3] : Node element ]; crumbsdata.push(newCrumb); // Iterate existing crumbs if (data.crumbs.length > 0) { var crumbs = []; $.each(data.crumbs,function(counter, crumb){ var newCrumb = [ crumb, data.root, crumbs.slice(0), // Otherwise it is copied by reference crumb ]; crumbsdata.push(newCrumb); crumbs.push(crumb); // Push this dir into the crumb list }); } // Render the UI crumbs elements var akcrumbs = $('#ak_crumbs'); akcrumbs.html(''); $.each(crumbsdata, function(counter, def){ var myLi = $(document.createElement('li')); $(document.createElement('a')) .attr('href','javascript:') .html(def[0]) .click(function(){ $(this).append( $(document.createElement('img')) .attr({ src: akeeba.Fsfilters.loadingGif, width: 16, height: 11, border: 0, alt: 'Loading...' }) .css({ marginTop: '5px', marginLeft: '5px' }) ); var new_data = { root: def[1], crumbs: def[2], node: def[3] }; akeeba.Fsfilters.load(new_data); }) .appendTo(myLi); $(document.createElement('span')) .addClass('divider') .text('/') .appendTo(myLi); myLi.appendTo(akcrumbs); }); // ----- Render the subdirectories var akfolders = $('#folders'); akfolders.html(''); if(data.crumbs.length > 0) { // The parent directory element var uielement = $(document.createElement('div')) .addClass('folder-container'); uielement .append($(document.createElement('span')).addClass('folder-padding')) .append($(document.createElement('span')).addClass('folder-padding')) .append($(document.createElement('span')).addClass('folder-padding')) .append( $(document.createElement('span')) .addClass('folder-name folder-up') .html('('+akcrumbs.find('li:last').prev().find('a').html()+')') .prepend( $(document.createElement('span')) .addClass('ui-icon ui-icon-arrowreturnthick-1-w') ) .click(function(){ akcrumbs.find('li:last').prev().find('a').click(); }) ) .appendTo(akfolders); } // Append the "Apply to all" buttons if(Object.keys(data.folders).length > 0) { var headerFilters = ['directories_all', 'skipdirs_all', 'skipfiles_all']; var headerDirs = $(document.createElement('div')).addClass('folder-header folder-container'); $.each(headerFilters, function(index, filter) { var ui_icon = $(document.createElement('span')).addClass('folder-icon-container') .attr('title', '<div class="tooltip-arrow-up-leftaligned"></div><div>'+akeeba.Fsfilters.translations['UI-FILTERTYPE-'+filter.toUpperCase()]+'</div>') .tooltip({ html: true, placement: 'top' }); var applyTo = ''; switch(filter) { case 'directories_all': applyTo = 'ui-icon-cancel'; ui_icon.append('<span class="ak-toggle-button ui-icon ui-icon-cancel"></span>'); break; case 'skipdirs_all': applyTo = 'ui-icon-folder-open'; ui_icon.append('<span class="ak-toggle-button ui-icon ui-icon-folder-open"></span>'); break; case 'skipfiles_all': applyTo = 'ui-icon-document'; ui_icon.append('<span class="ak-toggle-button ui-icon ui-icon-document"></span>'); break; } ui_icon.click(function(){ var selected; if($(this).hasClass('ui-state-highlight')){ $(this).removeClass('ui-state-highlight'); selected = false; } else{ $(this).addClass('ui-state-highlight'); selected = true; } $.each(akfolders.find('.folder-container').not('.folder-header').find('span.'+applyTo), function(index, item){ var hasClass = $(item).parent().hasClass('ui-state-highlight'); // I have to exclude items that have the same state of the desidered one, otherwise I'll toggle it if((!selected && !hasClass) || (selected && hasClass)) { return; } $(item).click(); }); }); ui_icon.appendTo(headerDirs); }); $(document.createElement('span')).addClass('folder-name') .html('<span class="pull-left ui-icon ui-icon-arrowthick-1-w"></span>' + akeeba.Fsfilters.translations['UI-FILTERTYPE-APPLYTOALLDIRS']) .appendTo(headerDirs); headerDirs.appendTo(akfolders); } $.each(data.folders, function(folder, def){ var uielement = $(document.createElement('div')) .addClass('folder-container'); var available_filters = ['directories', 'skipdirs', 'skipfiles']; $.each(available_filters, function(counter, filter){ var ui_icon = $(document.createElement('span')).addClass('folder-icon-container') .attr('title', '<div class="tooltip-arrow-up-leftaligned"></div><div>' + akeeba.Fsfilters.translations['UI-FILTERTYPE-'+filter.toUpperCase()] + '</div>'); switch(filter) { case 'directories': ui_icon.append('<span class="ak-toggle-button ui-icon ui-icon-cancel"></span>'); break; case 'skipdirs': ui_icon.append('<span class="ak-toggle-button ui-icon ui-icon-folder-open"></span>'); break; case 'skipfiles': ui_icon.append('<span class="ak-toggle-button ui-icon ui-icon-document"></span>'); break; } ui_icon.tooltip({ placement: 'bottom', delay: 0 }); switch(def[filter]) { case 2: ui_icon.addClass('ui-state-error'); break; case 1: ui_icon.addClass('ui-state-highlight'); // Don't break; we have to add the handler! case 0: ui_icon.click(function(){ var new_data = { root: data.root, crumbs: crumbs, node: folder, filter: filter, verb: 'toggle' } akeeba.Fsfilters.toggle(new_data, ui_icon); }); } ui_icon.appendTo(uielement); }); // filter loop // Add the folder label and make clicking on it load its listing $(document.createElement('span')) .html(folder) .addClass('folder-name') .click(function(){ // Show "loading" animation $(this).append( $(document.createElement('img')) .attr({ src: akeeba.Fsfilters.loadingGif, width: 16, height: 11, border: 0, alt: 'Loading...' }) .css({ marginTop: '3px', marginLeft: '5px' }) ); var new_data = { root: data.root, crumbs: crumbs, node: folder }; akeeba.Fsfilters.load(new_data); }) .appendTo(uielement); // Render uielement.appendTo(akfolders); }); // ----- Render the files var akfiles = $('#files'); akfiles.html(''); // Append the "Apply to all" buttons if(Object.keys(data.files).length > 0) { var headerFiles = $(document.createElement('div')).addClass('file-header file-container'); var ui_icon = $(document.createElement('span')).addClass('file-icon-container'); ui_icon.append('<span class="ak-toggle-button ui-icon ui-icon-cancel"></span>'); ui_icon.attr('title', '<div class="tooltip-arrow-up-leftaligned"></div><div>'+akeeba.Fsfilters.translations['UI-FILTERTYPE-FILES_ALL']+'</div>') .tooltip({ html: true, placement: 'top' }); ui_icon.click(function(){ var selected; if($(this).hasClass('ui-state-highlight')){ $(this).removeClass('ui-state-highlight'); selected = false; } else{ $(this).addClass('ui-state-highlight'); selected = true; } $.each(akfiles.find('.file-container').not('.file-header').find('span.ui-icon-cancel'), function(index, item){ var hasClass = $(item).parent().hasClass('ui-state-highlight'); // I have to exclude items that have the same state of the desidered one, otherwise I'll toggle it if((!selected && !hasClass) || (selected && hasClass)) { return; } $(item).click(); }); }); ui_icon.appendTo(headerFiles); $(document.createElement('span')).addClass('file-name') .html('<span class="pull-left ui-icon ui-icon-arrowthick-1-w"></span>' + akeeba.Fsfilters.translations['UI-FILTERTYPE-APPLYTOALLFILES']) .appendTo(headerFiles); headerFiles.appendTo(akfiles); } $.each(data.files, function(file, def){ var uielement = $(document.createElement('div')) .addClass('file-container'); var available_filters = ['files']; $.each(available_filters, function(counter, filter){ var ui_icon = $(document.createElement('span')).addClass('file-icon-container'); switch(filter) { case 'files': ui_icon.append('<span class="ak-toggle-button ui-icon ui-icon-cancel"></span>'); break; } ui_icon.attr('title', '<div class="tooltip-arrow-up-leftaligned"></div><div>'+akeeba.Fsfilters.translations['UI-FILTERTYPE-'+filter.toUpperCase()]+'</div>') .tooltip({ html: true, placement: 'top' }); switch(def[filter]) { case 2: ui_icon.addClass('ui-state-error'); break; case 1: ui_icon.addClass('ui-state-highlight'); // Don't break; we have to add the handler! case 0: ui_icon.click(function(){ var new_data = { root: data.root, crumbs: crumbs, node: file, filter: filter, verb: 'toggle' }; akeeba.Fsfilters.toggle(new_data, ui_icon); }); } ui_icon.appendTo(uielement); }); // filter loop // Add the file label uielement .append( $(document.createElement('span')) .addClass('file-name') .html(file) ) .append( $(document.createElement('span')) .addClass('file-size') .html(size_format(def['size'])) ); // Render uielement.appendTo(akfiles); }); }; /** * Wipes out the filesystem filters * @return */ akeeba.Fsfilters.nuke = function() { var data = { root: akeeba.Fsfilters.currentRoot, verb: 'reset' }; // Assemble the data array and send the AJAX request var new_data = { action: JSON.stringify(data) }; akeeba.System.doAjax(new_data, function(response){ akeeba.Fsfilters.render(response); }, null, false, 15000); }; /** * Loads the tabular view of the Filesystems Filter for a given root * @param root * @return */ akeeba.Fsfilters.loadTab = function(root) { var data = { verb: 'tab', root: root }; // Assemble the data array and send the AJAX request var new_data = { action: JSON.stringify(data) }; akeeba.System.doAjax(new_data, function(response){ akeeba.Fsfilters.renderTab(response); }, null, false, 15000); }; /** * Add a row in the tabular view of the Filesystems Filter * @param def * @param append_to_here * @return */ akeeba.Fsfilters.addRow = function(def, append_to_here) { // Turn def.type into something human readable var type_text = akeeba.Fsfilters.translations['UI-FILTERTYPE-'+def.type.toUpperCase()]; if (type_text == null) { type_text = def.type; } $(document.createElement('tr')) .addClass('ak_filter_row') .append( // Filter title $(document.createElement('td')) .addClass('ak_filter_type') .append(type_text) ) .append( $(document.createElement('td')) .addClass('ak_filter_item') .append( $(document.createElement('span')) .addClass('ak_filter_tab_icon_container') .click(function(){ if( def.node == '' ) { // An empty filter is normally not saved to the database; it's a new record row which has to be removed... $(this).parent().parent().remove(); return; } var new_data = { root: $('#active_root').val(), crumbs: [], node: def.node, filter: def.type, verb: 'toggle' }; akeeba.Fsfilters.toggle(new_data, $(this), function(response, caller){ if(response.success) { caller.parent().parent().remove(); } }); }) .append( $(document.createElement('span')) .addClass('ak-toggle-button ui-icon ui-icon-trash deletebutton') ) ) .append( $(document.createElement('span')) .addClass('ak_filter_tab_icon_container') .click(function(){ if( $(this).siblings('span.ak_filter_tab_icon_container:first').next().data('editing') ) return; $(this).siblings('span.ak_filter_tab_icon_container:first').next().data('editing',true); $(this).next().hide(); $(document.createElement('input')) .attr({ type: 'text', size: 60 }) .val( $(this).next().html() ) .appendTo( $(this).parent() ) .blur(function(){ var new_value = $(this).val(); if(new_value == '') { // Well, if the user meant to remove the filter, let's help him! $(this).parent().children('span.ak_filter_name').show(); $(this).siblings('span.ak_filter_tab_icon_container').find('span.deletebutton').click(); $(this).remove(); return; } // First, remove the old filter var new_data = { root: $('#active_root').val(), crumbs: [], old_node: def.node, new_node: new_value, filter: def.type, verb: 'swap' }; var input_box = $(this); akeeba.Fsfilters.toggle(new_data, input_box.siblings('span.ak_filter_tab_icon_container:first').next(), function(response, caller){ // Remove the editor input_box.siblings('span.ak_filter_tab_icon_container:first').next().removeData('editing'); input_box.parent().find('span.ak_filter_name').show(); input_box.siblings('span.ak_filter_tab_icon_container:first').next().removeClass('ui-state-highlight'); input_box.parent().find('span.ak_filter_name').html( new_value ); input_box.remove(); def.node = new_value; } ); }) .focus(); }) .append( $(document.createElement('span')) .addClass('ak-toggle-button ui-icon ui-icon-pencil editbutton') ) ) .append( $(document.createElement('span')) .addClass('ak_filter_name') .html(def.node) ) ) .appendTo( $(append_to_here) ); }; akeeba.Fsfilters.addNew = function(filtertype) { // Add a row below ourselves var new_def = { type: filtertype, node: '' }; akeeba.Fsfilters.addRow(new_def, $('#ak_list_table')); $('#ak_list_table tr:last').children('td:last').children('span.ak_filter_tab_icon_container:last').click(); }; /** * Renders the tabular view of the Filesystems Filter * @param data * @return */ akeeba.Fsfilters.renderTab = function(data) { var tbody = $('#ak_list_contents'); tbody.html(''); $.each(data, function(counter, def){ akeeba.Fsfilters.addRow(def, tbody); }); } }(akeeba.jQuery));