Server IP : 170.150.155.74 / Your IP : 18.216.234.123 Web Server : Apache/2.4.53 (Debian) System : Linux b22bf132354b 5.4.0-162-generic #179-Ubuntu SMP Mon Aug 14 08:51:31 UTC 2023 x86_64 User : www-data ( 33) PHP Version : 7.4.29 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : ON | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/html/wp-content/themes/neve/assets/apps/components/src/Controls/ |
Upload File : |
import PropTypes from 'prop-types'; import { __ } from '@wordpress/i18n'; import { Button, ButtonGroup, Dashicon, FocalPointPicker, Placeholder, RangeControl, ToggleControl, } from '@wordpress/components'; import { MediaUpload } from '@wordpress/media-utils'; import ColorControl from './ColorControl'; const Background = ({ onChange, value, label, description }) => { const { type, colorValue, useFeatured, imageUrl, focusPoint, fixed, overlayColorValue, overlayOpacity, } = value; const getButtons = () => { const types = ['color', 'image']; const labels = { color: __('Color', 'neve'), image: __('Image', 'neve'), }; const buttons = []; types.forEach((buttonType, index) => { buttons.push( <Button key={index} isPrimary={value.type === buttonType} isSecondary={value.type !== buttonType} onClick={() => { onChange({ type: buttonType }); }} > {labels[buttonType]} </Button> ); }); return ( <ButtonGroup className="neve-background-type-control"> {buttons} </ButtonGroup> ); }; return ( <div className="neve-background-control"> {label && <span className="customize-control-title">{label}</span>} {description && <p>{description}</p>} <div className="control--top-toolbar">{getButtons()}</div> <div className="control--body"> {type === 'color' && ( <> <ColorControl onChange={(val) => { onChange({ colorValue: val }); }} selectedColor={colorValue} label={__('Color', 'neve')} /> <div className="neve-color-preview" style={{ backgroundColor: colorValue, }} /> </> )} {type === 'image' && ( <> <ToggleControl label={__('Use Featured Image', 'neve')} checked={useFeatured} onChange={(val) => { onChange({ useFeatured: val }); }} /> {!imageUrl ? ( <Placeholder icon="format-image" label={ useFeatured ? __('Fallback Image', 'neve') : __('Image', 'neve') } > <p> {__( 'Select from the Media Library or upload a new image', 'neve' )} </p> <MediaUpload onSelect={(imageData) => { onChange({ imageUrl: imageData.url, }); }} allowedTypes={['image']} render={({ open }) => ( <Button isSecondary onClick={open}> {__('Add Image', 'neve')} </Button> )} /> </Placeholder> ) : ( <> <Button disabled={!wp.media} className="remove-image" isDestructive isLink onClick={() => { onChange({ imageUrl: '', }); }} > <Dashicon icon="no" /> {useFeatured ? __('Remove Fallback Image', 'neve') : __('Remove Image', 'neve')} </Button> <FocalPointPicker url={imageUrl} value={focusPoint} onChange={(val) => { const newPoint = { x: parseFloat(val.x).toFixed(2), y: parseFloat(val.y).toFixed(2), }; onChange({ focusPoint: newPoint, }); }} /> </> )} <ToggleControl label={__('Fixed Background', 'neve')} checked={fixed} onChange={(val) => { onChange({ fixed: val }); }} /> <ColorControl selectedColor={overlayColorValue} onChange={(val) => { onChange({ overlayColorValue: val, }); }} label={__('Overlay Color', 'neve')} /> <div className="neve-color-preview" style={{ backgroundColor: overlayColorValue, }} /> <RangeControl label={__('Overlay Opacity', 'neve')} value={overlayOpacity} onChange={(val) => { onChange({ overlayOpacity: val, }); }} min="0" max="100" /> </> )} </div> </div> ); }; Background.propTypes = { value: PropTypes.shape({ type: PropTypes.string, imageUrl: PropTypes.string, focusPoint: PropTypes.shape({ x: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), y: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), }), colorValue: PropTypes.string, overlayColorValue: PropTypes.string, overlayOpacity: PropTypes.number, fixed: PropTypes.bool, useFeatured: PropTypes.bool, }).isRequired, onChange: PropTypes.func.isRequired, label: PropTypes.string, }; export default Background;