Hotel Raxa - Advanced Booking System Implementation

🏨 Hotel Booking Enhancements:
- Implemented Eagle Booking Advanced Pricing add-on
- Added Booking.com-style rate management system
- Created professional calendar interface for pricing
- Integrated deals and discounts functionality

💰 Advanced Pricing Features:
- Dynamic pricing models (per room, per person, per adult)
- Base rates, adult rates, and child rates management
- Length of stay discounts and early bird deals
- Mobile rates and secret deals implementation
- Seasonal promotions and flash sales

📅 Availability Management:
- Real-time availability tracking
- Stop sell and restriction controls
- Closed to arrival/departure functionality
- Minimum/maximum stay requirements
- Automatic sold-out management

💳 Payment Integration:
- Maintained Redsys payment gateway integration
- Seamless integration with existing Eagle Booking
- No modifications to core Eagle Booking plugin

🛠️ Technical Implementation:
- Custom database tables for advanced pricing
- WordPress hooks and filters integration
- AJAX-powered admin interface
- Data migration from existing Eagle Booking
- Professional calendar view for revenue management

📊 Admin Interface:
- Booking.com-style management dashboard
- Visual rate and availability calendar
- Bulk operations for date ranges
- Statistics and analytics dashboard
- Modal dialogs for quick editing

🔧 Code Quality:
- WordPress coding standards compliance
- Secure database operations with prepared statements
- Proper input validation and sanitization
- Error handling and logging
- Responsive admin interface

🤖 Generated with Claude Code (https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Hotel Raxa Dev
2025-07-11 07:43:22 +02:00
commit 5b1e2453c7
9816 changed files with 2784509 additions and 0 deletions

View File

@@ -0,0 +1,116 @@
<?php
/**
* ACE Editor Field.
*
* @package Redux Framework/Fields
* @subpackage ACE_Editor
* @version 3.0.0
* @noinspection PhpIgnoredClassAliasDeclaration
*/
defined( 'ABSPATH' ) || exit;
// Don't duplicate me!
if ( ! class_exists( 'Redux_Ace_Editor', false ) ) {
/**
* Class Redux_Ace_Editor
*/
class Redux_Ace_Editor extends Redux_Field {
/**
* Field Render Function.
* Takes the vars and outputs the HTML for the field in the settings
*
* @since ReduxFramework 1.0.0
*/
public function render() {
if ( is_array( $this->value ) ) {
$this->value = '';
} else {
$this->value = trim( $this->value );
}
if ( ! empty( $this->field['options'] ) ) {
$this->field['args'] = $this->field['options'];
unset( $this->field['options'] );
}
if ( ! isset( $this->field['mode'] ) ) {
$this->field['mode'] = 'javascript';
}
if ( ! isset( $this->field['theme'] ) ) {
$this->field['theme'] = 'monokai';
}
$params = array(
'minLines' => 10,
'maxLines' => 30,
);
if ( isset( $this->field['args'] ) && ! empty( $this->field['args'] ) && is_array( $this->field['args'] ) ) {
$params = wp_parse_args( $this->field['args'], $params );
}
?>
<div class="ace-wrapper">
<input
type="hidden"
class="localize_data"
value="<?php echo esc_html( wp_json_encode( $params ) ); ?>"/>
<label for="<?php echo esc_attr( $this->field['id'] ); ?>-textarea"></label>
<textarea
name="<?php echo esc_attr( $this->field['name'] . $this->field['name_suffix'] ); ?>"
id="<?php echo esc_attr( $this->field['id'] ); ?>-textarea"
class="ace-editor hide <?php echo esc_attr( $this->field['class'] ); ?>"
data-editor="<?php echo esc_attr( $this->field['id'] ); ?>-editor"
data-mode="<?php echo esc_attr( $this->field['mode'] ); ?>"
data-theme="<?php echo esc_attr( $this->field['theme'] ); ?>"><?php echo esc_textarea( $this->value ); ?></textarea>
<pre
id="<?php echo esc_attr( $this->field['id'] ); ?>-editor"
class="ace-editor-area"><?php echo esc_html( $this->value ); ?></pre>
</div>
<?php
}
/**
* Enqueue Function.
* If this field requires any scripts, or css define this function and register/enqueue the scripts/css
*
* @since 1.0.0
* @access public
* @return void
*/
public function enqueue() {
if ( $this->parent->args['dev_mode'] ) {
wp_enqueue_style(
'redux-field-ace-editor',
Redux_Core::$url . 'inc/fields/ace_editor/redux-ace-editor.css',
array(),
$this->timestamp
);
}
if ( ! wp_script_is( 'ace-editor-js' ) ) {
wp_enqueue_script(
// Redux_CDN::enqueue_script(
'ace-editor-js',
// phpcs:ignore Generic.Strings.UnnecessaryStringConcat
apply_filters( 'redux/' . $this->parent->args['opt_name'] . 'fields/ace/script', '//' . 'cdnjs' . '.cloudflare' . '.com/ajax/libs/ace/1.23.0/ace.min.js' ),
array( 'jquery' ),
'1.23.0',
true
);
}
wp_enqueue_script(
'redux-field-ace-editor',
Redux_Core::$url . 'inc/fields/ace_editor/redux-ace-editor' . Redux_Functions::is_min() . '.js',
array( 'jquery', 'ace-editor-js', 'redux-js' ),
$this->timestamp,
true
);
}
}
}
class_alias( 'Redux_Ace_Editor', 'ReduxFramework_Ace_Editor' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
_deprecated_file( 'field_ace_editor.php', '4.3', 'class-redux-ace-editor.php', 'This file has been renamed and is no longer used in Redux 4. Please change any references to it as it will be removed in future versions of Redux.' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
echo null;

View File

@@ -0,0 +1,9 @@
.redux-container-ace_editor .ace-wrapper { position: static; }
.redux-container-ace_editor .ace_editor { height: 200px; border-radius: 3px; }
.redux-container-ace_editor .ace_gutter { z-index: 1 !important; }
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtYWNlLWVkaXRvci5jc3MiLCJzb3VyY2VzIjpbInJlZHV4LWFjZS1lZGl0b3Iuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUNJLDJCQUR1QixDQUN2QixZQUFZLENBQUMsRUFDVCxRQUFRLEVBQUUsTUFBTSxHQUNuQjs7QUFITCxBQUtJLDJCQUx1QixDQUt2QixXQUFXLENBQUMsRUFDUixNQUFNLEVBQUUsS0FBSyxFQUNiLHFCQUFxQixFQUFFLEdBQUcsRUFDMUIsa0JBQWtCLEVBQUUsR0FBRyxFQUN2QixhQUFhLEVBQUUsR0FBRyxHQUNyQjs7QUFWTCxBQVlJLDJCQVp1QixDQVl2QixXQUFXLENBQUMsRUFDUixPQUFPLEVBQUUsWUFBWSxHQUN4QiJ9 */
/*# sourceMappingURL=redux-ace-editor.css.map */

View File

@@ -0,0 +1 @@
{"version":3,"sources":["redux-ace-editor.scss","redux-ace-editor.css"],"names":[],"mappings":"AAAA,2CAAA,gBAAA,EAAA;;AAAA,0CCMQ,aAAa,EAGb,kBAAkB,EAAA;;ADT1B,0CCaQ,qBAAqB,EAAA;;AAP7B,ihBAAihB","file":"redux-ace-editor.css","sourcesContent":[".redux-container-ace_editor {\r\n .ace-wrapper {\r\n position: static;\r\n }\r\n\r\n .ace_editor {\r\n height: 200px;\r\n -webkit-border-radius: 3px;\r\n -moz-border-radius: 3px;\r\n border-radius: 3px;\r\n }\r\n\r\n .ace_gutter {\r\n z-index: 1 !important;\r\n }\r\n}\r\n\r\n",".redux-container-ace_editor .ace-wrapper { position: static; }\n\n.redux-container-ace_editor .ace_editor { height: 200px; border-radius: 3px; }\n\n.redux-container-ace_editor .ace_gutter { z-index: 1 !important; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtYWNlLWVkaXRvci5jc3MiLCJzb3VyY2VzIjpbInJlZHV4LWFjZS1lZGl0b3Iuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUNJLDJCQUR1QixDQUN2QixZQUFZLENBQUMsRUFDVCxRQUFRLEVBQUUsTUFBTSxHQUNuQjs7QUFITCxBQUtJLDJCQUx1QixDQUt2QixXQUFXLENBQUMsRUFDUixNQUFNLEVBQUUsS0FBSyxFQUNiLHFCQUFxQixFQUFFLEdBQUcsRUFDMUIsa0JBQWtCLEVBQUUsR0FBRyxFQUN2QixhQUFhLEVBQUUsR0FBRyxHQUNyQjs7QUFWTCxBQVlJLDJCQVp1QixDQVl2QixXQUFXLENBQUMsRUFDUixPQUFPLEVBQUUsWUFBWSxHQUN4QiJ9 */\n\n/*# sourceMappingURL=redux-ace-editor.css.map */\n"]}

View File

@@ -0,0 +1,56 @@
/*global jQuery, redux, redux_change, ace */
( function( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.ace_editor = redux.field_objects.ace_editor || {};
redux.field_objects.ace_editor.init = function( selector ) {
selector = $.redux.getSelector( selector, 'ace_editor' );
$( selector ).each(
function() {
var el = $( this );
var parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
el.find( '.ace-editor' ).each(
function( index, element ) {
var area = element;
var params = JSON.parse( $( this ).parent().find( '.localize_data' ).val() );
var editor = $( element ).attr( 'data-editor' );
var aceeditor = ace.edit( editor );
index = null;
aceeditor.setTheme( 'ace/theme/' + $( element ).attr( 'data-theme' ) );
aceeditor.getSession().setMode( 'ace/mode/' + $( element ).attr( 'data-mode' ) );
aceeditor.setOptions( params );
aceeditor.on(
'change',
function() {
$( '#' + area.id ).val( aceeditor.getSession().getValue() );
redux_change( $( element ) );
aceeditor.resize();
}
);
}
);
}
);
};
})( jQuery );

View File

@@ -0,0 +1 @@
!function(s){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.ace_editor=redux.field_objects.ace_editor||{},redux.field_objects.ace_editor.init=function(e){e=s.redux.getSelector(e,"ace_editor"),s(e).each(function(){var e=s(this),t=e;(t=e.hasClass("redux-field-container")?t:e.parents(".redux-field-container:first")).is(":hidden")||t.hasClass("redux-field-init")&&(t.removeClass("redux-field-init"),e.find(".ace-editor").each(function(e,t){var i=t,a=JSON.parse(s(this).parent().find(".localize_data").val()),d=s(t).attr("data-editor"),r=ace.edit(d);r.setTheme("ace/theme/"+s(t).attr("data-theme")),r.getSession().setMode("ace/mode/"+s(t).attr("data-mode")),r.setOptions(a),r.on("change",function(){s("#"+i.id).val(r.getSession().getValue()),redux_change(s(t)),r.resize()})}))})}}(jQuery);

View File

@@ -0,0 +1,17 @@
.redux-container-ace_editor {
.ace-wrapper {
position: static;
}
.ace_editor {
height: 200px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
.ace_gutter {
z-index: 1 !important;
}
}

View File

@@ -0,0 +1,440 @@
<?php
/**
* Background Field.
*
* @package ReduxFramework/Fields
* @author Dovy Paukstys & Kevin Provance (kprovance)
* @version 4.0.0
*/
defined( 'ABSPATH' ) || exit;
// Don't duplicate me!
if ( ! class_exists( 'Redux_Background', false ) ) {
/**
* Main Redux_background class
*
* @since 3.1.5
*/
class Redux_Background extends Redux_Field {
/**
* Set field and value defaults.
*/
public function set_defaults() {
$defaults = array(
'background-color' => true,
'background-repeat' => true,
'background-attachment' => true,
'background-position' => true,
'background-image' => true,
'background-gradient' => false,
'background-clip' => false,
'background-origin' => false,
'background-size' => true,
'preview_media' => false,
'preview' => true,
'preview_height' => '200px',
'transparent' => true,
);
$this->field = wp_parse_args( $this->field, $defaults );
// No errors please.
$defaults = array(
'background-color' => '',
'background-repeat' => '',
'background-attachment' => '',
'background-position' => '',
'background-image' => '',
'background-clip' => '',
'background-origin' => '',
'background-size' => '',
'media' => array(),
);
$this->value = wp_parse_args( $this->value, $defaults );
$defaults = array(
'id' => '',
'width' => '',
'height' => '',
'thumbnail' => '',
);
$this->value['media'] = wp_parse_args( $this->value['media'], $defaults );
}
/**
* Field Render Function.
* Takes the vars and outputs the HTML for the field in the settings
*
* @since 1.0.0
* @access public
* @return void
*/
public function render() {
$this->select2_config['allowClear'] = true;
if ( isset( $this->field['select2'] ) ) {
$this->field['select2'] = wp_parse_args( $this->field['select2'], $this->select2_config );
} else {
$this->field['select2'] = $this->select2_config;
}
$this->field['select2'] = Redux_Functions::sanitize_camel_case_array_keys( $this->field['select2'] );
$select2_data = Redux_Functions::create_data_string( $this->field['select2'] );
if ( true === $this->field['background-color'] ) {
if ( isset( $this->value['color'] ) && empty( $this->value['background-color'] ) ) {
$this->value['background-color'] = $this->value['color'];
}
$def_bg_color = $this->field['default']['background-color'] ?? '';
echo '<input ';
echo 'data-id="' . esc_attr( $this->field['id'] ) . '"';
echo 'name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-color]"';
echo 'id="' . esc_attr( $this->field['id'] ) . '-color"';
echo 'class="color-picker redux-color redux-background-input redux-color-init ' . esc_attr( $this->field['class'] ) . '"';
echo 'type="text" value="' . esc_attr( $this->value['background-color'] ) . '"';
echo 'data-default-color="' . esc_attr( $def_bg_color ) . '"';
$data = array(
'field' => $this->field,
'index' => 'color',
);
echo Redux_Functions_Ex::output_alpha_data( $data ); // phpcs:ignore WordPress.Security.EscapeOutput
echo '>';
echo '<input type="hidden" class="redux-saved-color" id="' . esc_attr( $this->field['id'] ) . '-saved-color" value="">';
if ( ! isset( $this->field['transparent'] ) || false !== $this->field['transparent'] ) {
$is_checked = '';
if ( 'transparent' === $this->value['background-color'] ) {
$is_checked = ' checked="checked"';
}
echo '<label for="' . esc_attr( $this->field['id'] ) . '-transparency" class="color-transparency-check"><input type="checkbox" class="checkbox color-transparency redux-background-input ' . esc_attr( $this->field['class'] ) . '" id="' . esc_attr( $this->field['id'] ) . '-transparency" data-id="' . esc_attr( $this->field['id'] ) . '-color" value="1" ' . esc_html( $is_checked ) . '> ' . esc_html__( 'Transparent', 'redux-framework' ) . '</label>';
}
if ( true === $this->field['background-repeat'] || true === $this->field['background-position'] || true === $this->field['background-attachment'] ) {
echo '<br />';
}
}
if ( true === $this->field['background-repeat'] ) {
$array = array(
'no-repeat' => esc_html__( 'No Repeat', 'redux-framework' ),
'repeat' => esc_html__( 'Repeat All', 'redux-framework' ),
'repeat-x' => esc_html__( 'Repeat Horizontally', 'redux-framework' ),
'repeat-y' => esc_html__( 'Repeat Vertically', 'redux-framework' ),
'inherit' => esc_html__( 'Inherit', 'redux-framework' ),
);
echo '<select id="' . esc_attr( $this->field['id'] ) . '-repeat-select" data-placeholder="' . esc_html__( 'Background Repeat', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-repeat]" class="redux-select-item redux-background-input redux-background-repeat ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
echo '<option></option>';
foreach ( $array as $k => $v ) {
echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-repeat'], $k, false ) . '>' . esc_html( $v ) . '</option>';
}
echo '</select>';
}
if ( true === $this->field['background-clip'] ) {
$array = array(
'inherit' => esc_html__( 'Inherit', 'redux-framework' ),
'border-box' => esc_html__( 'Border Box', 'redux-framework' ),
'content-box' => esc_html__( 'Content Box', 'redux-framework' ),
'padding-box' => esc_html__( 'Padding Box', 'redux-framework' ),
);
echo '<select id="' . esc_attr( $this->field['id'] ) . '-clip-select" data-placeholder="' . esc_html__( 'Background Clip', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-clip]" class="redux-select-item redux-background-input redux-background-clip ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
echo '<option></option>';
foreach ( $array as $k => $v ) {
echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-clip'], $k, false ) . '>' . esc_html( $v ) . '</option>';
}
echo '</select>';
}
if ( true === $this->field['background-origin'] ) {
$array = array(
'inherit' => esc_html__( 'Inherit', 'redux-framework' ),
'border-box' => esc_html__( 'Border Box', 'redux-framework' ),
'content-box' => esc_html__( 'Content Box', 'redux-framework' ),
'padding-box' => esc_html__( 'Padding Box', 'redux-framework' ),
);
echo '<select id="' . esc_attr( $this->field['id'] ) . '-origin-select" data-placeholder="' . esc_html__( 'Background Origin', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-origin]" class="redux-select-item redux-background-input redux-background-origin ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
echo '<option></option>';
foreach ( $array as $k => $v ) {
echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-origin'], $k, false ) . '>' . esc_html( $v ) . '</option>';
}
echo '</select>';
}
if ( true === $this->field['background-size'] ) {
$array = array(
'inherit' => esc_html__( 'Inherit', 'redux-framework' ),
'cover' => esc_html__( 'Cover', 'redux-framework' ),
'contain' => esc_html__( 'Contain', 'redux-framework' ),
);
echo '<select id="' . esc_attr( $this->field['id'] ) . '-size-select" data-placeholder="' . esc_html__( 'Background Size', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-size]" class="redux-select-item redux-background-input redux-background-size ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
echo '<option></option>';
foreach ( $array as $k => $v ) {
echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-size'], $k, false ) . '>' . esc_html( $v ) . '</option>';
}
echo '</select>';
}
if ( true === $this->field['background-attachment'] ) {
$array = array(
'fixed' => esc_html__( 'Fixed', 'redux-framework' ),
'scroll' => esc_html__( 'Scroll', 'redux-framework' ),
'inherit' => esc_html__( 'Inherit', 'redux-framework' ),
);
echo '<select id="' . esc_attr( $this->field['id'] ) . '-attachment-select" data-placeholder="' . esc_html__( 'Background Attachment', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-attachment]" class="redux-select-item redux-background-input redux-background-attachment ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
echo '<option></option>';
foreach ( $array as $k => $v ) {
echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-attachment'], $k, false ) . '>' . esc_html( $v ) . '</option>';
}
echo '</select>';
}
if ( true === $this->field['background-position'] ) {
$array = array(
'left top' => esc_html__( 'Left Top', 'redux-framework' ),
'left center' => esc_html__( 'Left center', 'redux-framework' ),
'left bottom' => esc_html__( 'Left Bottom', 'redux-framework' ),
'center top' => esc_html__( 'Center Top', 'redux-framework' ),
'center center' => esc_html__( 'Center Center', 'redux-framework' ),
'center bottom' => esc_html__( 'Center Bottom', 'redux-framework' ),
'right top' => esc_html__( 'Right Top', 'redux-framework' ),
'right center' => esc_html__( 'Right center', 'redux-framework' ),
'right bottom' => esc_html__( 'Right Bottom', 'redux-framework' ),
);
echo '<select id="' . esc_attr( $this->field['id'] ) . '-position-select" data-placeholder="' . esc_html__( 'Background Position', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-position]" class="redux-select-item redux-background-input redux-background-position ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
echo '<option></option>';
foreach ( $array as $k => $v ) {
echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-position'], $k, false ) . '>' . esc_html( $v ) . '</option>';
}
echo '</select>';
}
if ( $this->field['background-image'] ) {
echo '<br />';
if ( empty( $this->value ) && ! empty( $this->field['default'] ) ) {
if ( is_array( $this->field['default'] ) ) {
if ( ! empty( $this->field['default']['media']['id'] ) ) {
$this->value['media']['id'] = $this->field['default']['media']['id'];
} elseif ( ! empty( $this->field['default']['id'] ) ) {
$this->value['media']['id'] = $this->field['default']['id'];
}
if ( ! empty( $this->field['default']['url'] ) ) {
$this->value['background-image'] = $this->field['default']['url'];
} elseif ( ! empty( $this->field['default']['media']['url'] ) ) {
$this->value['background-image'] = $this->field['default']['media']['url'];
} elseif ( ! empty( $this->field['default']['background-image'] ) ) {
$this->value['background-image'] = $this->field['default']['background-image'];
}
} elseif ( is_numeric( $this->field['default'] ) ) {
// Check if it's an attachment ID.
$this->value['media']['id'] = $this->field['default'];
} else { // Must be a URL.
$this->value['background-image'] = $this->field['default'];
}
}
if ( empty( $this->value['background-image'] ) && ! empty( $this->value['media']['id'] ) ) {
$img = wp_get_attachment_image_src( $this->value['media']['id'], 'full' );
$this->value['background-image'] = $img[0];
$this->value['media']['width'] = $img[1];
$this->value['media']['height'] = $img[2];
}
$hide = 'hide ';
if ( ( isset( $this->field['preview_media'] ) && false === $this->field['preview_media'] ) ) {
$this->field['class'] .= ' noPreview';
}
if ( ( ! empty( $this->field['background-image'] ) && true === $this->field['background-image'] ) || isset( $this->field['preview'] ) && false === $this->field['preview'] ) {
$hide = '';
}
$placeholder = $this->field['placeholder'] ?? esc_html__( 'No media selected', 'redux-framework' );
echo '<input placeholder="' . esc_html( $placeholder ) . '" type="text" class="redux-background-input ' . esc_attr( $hide ) . 'upload ' . esc_attr( $this->field['class'] ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-image]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][background-image]" value="' . esc_url( $this->value['background-image'] ) . '" />';
echo '<input type="hidden" class="upload-id ' . esc_attr( $this->field['class'] ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[media][id]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][media][id]" value="' . esc_attr( $this->value['media']['id'] ) . '" />';
echo '<input type="hidden" class="upload-height" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[media][height]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][media][height]" value="' . esc_attr( $this->value['media']['height'] ) . '" />';
echo '<input type="hidden" class="upload-width" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[media][width]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][media][width]" value="' . esc_attr( $this->value['media']['width'] ) . '" />';
echo '<input type="hidden" class="upload-thumbnail" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[media][thumbnail]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][media][thumbnail]" value="' . esc_url( $this->value['media']['thumbnail'] ) . '" />';
// Preview.
$hide = '';
if ( ( isset( $this->field['preview_media'] ) && false === $this->field['preview_media'] ) || empty( $this->value['background-image'] ) ) {
$hide = 'hide ';
}
if ( empty( $this->value['media']['thumbnail'] ) && ! empty( $this->value['background-image'] ) ) { // Just in case.
if ( ! empty( $this->value['media']['id'] ) ) {
$image = wp_get_attachment_image_src(
$this->value['media']['id'],
array(
150,
150,
)
);
$this->value['media']['thumbnail'] = $image[0];
} else {
$this->value['media']['thumbnail'] = $this->value['background-image'];
}
}
echo '<div class="' . esc_attr( $hide ) . 'screenshot">';
echo '<a class="of-uploaded-image" href="' . esc_url( $this->value['background-image'] ) . '" target="_blank">';
$alt = wp_prepare_attachment_for_js( $this->value['media']['id'] );
$alt = $alt['alt'] ?? '';
echo '<img class="redux-option-image" id="image_' . esc_attr( $this->value['media']['id'] ) . '" src="' . esc_url( $this->value['media']['thumbnail'] ) . '" alt="' . esc_attr( $alt ) . '" target="_blank" rel="external" />';
echo '</a>';
echo '</div>';
// Upload controls DIV.
echo '<div class="upload_button_div">';
// If the user has WP3.5+ show upload/remove button.
echo '<span class="button redux-background-upload" id="' . esc_attr( $this->field['id'] ) . '-media">' . esc_html__( 'Upload', 'redux-framework' ) . '</span>';
$hide = '';
if ( empty( $this->value['background-image'] ) || '' === $this->value['background-image'] ) {
$hide = ' hide';
}
echo '<span class="button removeCSS redux-remove-background' . esc_attr( $hide ) . '" id="reset_' . esc_attr( $this->field['id'] ) . '" rel="' . esc_attr( $this->field['id'] ) . '">' . esc_html__( 'Remove', 'redux-framework' ) . '</span>';
echo '</div>';
}
/**
* Preview
* */
if ( ! isset( $this->field['preview'] ) || false !== $this->field['preview'] ) {
$css = $this->css_style( $this->value );
$is_bg = strpos( $css, 'background-image' );
if ( empty( $css ) || ! $is_bg ) {
$css = 'display:none;';
}
$css .= 'height: ' . esc_attr( $this->field['preview_height'] ) . ';';
echo '<p class="clear ' . esc_attr( $this->field['id'] ) . '_previewer background-preview" style="' . esc_attr( $css ) . '">&nbsp;</p>';
}
}
/**
* Enqueue Function.
* If this field requires any scripts, or css define this function and register/enqueue the scripts/css
*
* @since 1.0.0
* @access public
* @return void
*/
public function enqueue() {
if ( function_exists( 'wp_enqueue_media' ) ) {
wp_enqueue_media();
} elseif ( ! wp_script_is( 'media-upload' ) ) {
wp_enqueue_script( 'media-upload' );
}
if ( ! wp_style_is( 'select2-css' ) ) {
wp_enqueue_style( 'select2-css' );
}
if ( ! wp_style_is( 'wp-color-picker' ) ) {
wp_enqueue_style( 'wp-color-picker' );
}
$dep_array = array( 'jquery', 'wp-color-picker', 'select2-js', 'redux-js' );
wp_enqueue_script(
'redux-field-background',
Redux_Core::$url . 'inc/fields/background/redux-background' . Redux_Functions::is_min() . '.js',
$dep_array,
$this->timestamp,
true
);
if ( $this->parent->args['dev_mode'] ) {
wp_enqueue_style(
'redux-field-background',
Redux_Core::$url . 'inc/fields/background/redux-background.css',
array(),
$this->timestamp
);
wp_enqueue_style( 'redux-color-picker' );
}
}
/**
* Output CSS styling.
*
* @param array $data Value array.
*
* @return string
*/
public function css_style( $data = array() ): string {
$css = '';
if ( ! empty( $data ) && is_array( $data ) ) {
foreach ( $data as $key => $val ) {
if ( ! empty( $val ) && 'media' !== $key ) {
if ( 'background-image' === $key ) {
$css .= $key . ":url('" . esc_url( $val ) . "');";
} else {
$css .= $key . ':' . esc_attr( $val ) . ';';
}
}
}
}
return $css;
}
/**
* Enable output_variables to be generated.
*
* @since 4.0.3
* @return void
*/
public function output_variables() {
// No code needed, just defining the method is enough.
}
}
}
class_alias( 'Redux_Background', 'ReduxFramework_Background' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
_deprecated_file( 'field_background.php', '4.3', 'class-redux-background.php', 'This file has been renamed and is no longer used in Redux 4. Please change any references to it as it will be removed in future versions of Redux.' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
echo null;

View File

@@ -0,0 +1,17 @@
.redux-main .redux-container-background .redux-background-position, .redux-main .redux-container-background .redux-background-position select, .redux-main .redux-container-background .redux-background-attachment, .redux-main .redux-container-background .redux-background-attachment select, .redux-main .redux-container-background .redux-background-clip, .redux-main .redux-container-background .redux-background-clip select, .redux-main .redux-container-background .redux-background-origin, .redux-main .redux-container-background .redux-background-origin select, .redux-main .redux-container-background .redux-background-size, .redux-main .redux-container-background .redux-background-size select, .redux-main .redux-container-background .redux-background-repeat, .redux-main .redux-container-background .redux-background-repeat select { width: 200px !important; margin-right: 10px; margin-bottom: 7px; }
.redux-main .redux-container-background .background-preview { display: block; width: 100%; margin: 5px 0 10px; border: 1px dotted #d3d3d3; }
.redux-main .redux-container-background .select2-container { margin-right: 10px; margin-bottom: 10px; }
.redux-main .redux-container-background .wp-picker-container { margin-bottom: 10px; }
.redux-main .redux-container-background .upload { width: 100%; margin-bottom: 8px; }
.redux-main .redux-container-select li.ui-state-highlight { height: 20px; margin-top: 2px; margin-left: 5px; width: 64px; margin-bottom: 0; }
.wp-customizer .redux-container-background .redux-background-position, .wp-customizer .redux-container-background .redux-background-position select, .wp-customizer .redux-container-background .redux-background-attachment, .wp-customizer .redux-container-background .redux-background-attachment select, .wp-customizer .redux-container-background .redux-background-clip, .wp-customizer .redux-container-background .redux-background-clip select, .wp-customizer .redux-container-background .redux-background-origin, .wp-customizer .redux-container-background .redux-background-origin select, .wp-customizer .redux-container-background .redux-background-size, .wp-customizer .redux-container-background .redux-background-size select, .wp-customizer .redux-container-background .redux-background-repeat, .wp-customizer .redux-container-background .redux-background-repeat select { width: 100% !important; }
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtYmFja2dyb3VuZC5jc3MiLCJzb3VyY2VzIjpbInJlZHV4LWJhY2tncm91bmQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUVRLFdBRkcsQ0FDUCwyQkFBMkIsQ0FDdkIsMEJBQTBCLEVBRmxDLFdBQVcsQ0FDUCwyQkFBMkIsQ0FFdkIsMEJBQTBCLENBQUMsTUFBTSxFQUh6QyxXQUFXLENBQ1AsMkJBQTJCLENBR3ZCLDRCQUE0QixFQUpwQyxXQUFXLENBQ1AsMkJBQTJCLENBSXZCLDRCQUE0QixDQUFDLE1BQU0sRUFMM0MsV0FBVyxDQUNQLDJCQUEyQixDQUt2QixzQkFBc0IsRUFOOUIsV0FBVyxDQUNQLDJCQUEyQixDQU12QixzQkFBc0IsQ0FBQyxNQUFNLEVBUHJDLFdBQVcsQ0FDUCwyQkFBMkIsQ0FPdkIsd0JBQXdCLEVBUmhDLFdBQVcsQ0FDUCwyQkFBMkIsQ0FRdkIsd0JBQXdCLENBQUMsTUFBTSxFQVR2QyxXQUFXLENBQ1AsMkJBQTJCLENBU3ZCLHNCQUFzQixFQVY5QixXQUFXLENBQ1AsMkJBQTJCLENBVXZCLHNCQUFzQixDQUFDLE1BQU0sRUFYckMsV0FBVyxDQUNQLDJCQUEyQixDQVd2Qix3QkFBd0IsRUFaaEMsV0FBVyxDQUNQLDJCQUEyQixDQVl2Qix3QkFBd0IsQ0FBQyxNQUFNLENBQUMsRUFDNUIsS0FBSyxFQUFFLGdCQUFnQixFQUN2QixZQUFZLEVBQUUsSUFBSSxFQUNsQixhQUFhLEVBQUUsR0FBRyxHQUNyQjs7QUFqQlQsQUFtQlEsV0FuQkcsQ0FDUCwyQkFBMkIsQ0FrQnZCLG1CQUFtQixDQUFDLEVBQ2hCLE9BQU8sRUFBRSxLQUFLLEVBQ2QsS0FBSyxFQUFFLElBQUksRUFDWCxNQUFNLEVBQUUsVUFBVSxFQUNsQixNQUFNLEVBQUUsa0JBQWtCLEdBQzdCOztBQXhCVCxBQTBCUSxXQTFCRyxDQUNQLDJCQUEyQixDQXlCdkIsa0JBQWtCLENBQUMsRUFDZixZQUFZLEVBQUUsSUFBSSxFQUNsQixhQUFhLEVBQUUsSUFBSSxHQUN0Qjs7QUE3QlQsQUErQlEsV0EvQkcsQ0FDUCwyQkFBMkIsQ0E4QnZCLG9CQUFvQixDQUFDLEVBQ2pCLGFBQWEsRUFBRSxJQUFJLEdBQ3RCOztBQWpDVCxBQW1DUSxXQW5DRyxDQUNQLDJCQUEyQixDQWtDdkIsT0FBTyxDQUFDLEVBQ0osS0FBSyxFQUFFLElBQUksRUFDWCxhQUFhLEVBQUUsR0FBRyxHQUNyQjs7QUF0Q1QsQUEwQ1EsV0ExQ0csQ0F5Q1AsdUJBQXVCLENBQ25CLEVBQUUsQUFBQSxtQkFBbUIsQ0FBQyxFQUNsQixNQUFNLEVBQUUsSUFBSSxFQUNaLFVBQVUsRUFBRSxHQUFHLEVBQ2YsV0FBVyxFQUFFLEdBQUcsRUFDaEIsS0FBSyxFQUFFLElBQUksRUFDWCxhQUFhLEVBQUUsQ0FBQyxHQUNuQjs7QUFJVCxBQUVRLGNBRk0sQ0FDViwyQkFBMkIsQ0FDdkIsMEJBQTBCLEVBRmxDLGNBQWMsQ0FDViwyQkFBMkIsQ0FFdkIsMEJBQTBCLENBQUMsTUFBTSxFQUh6QyxjQUFjLENBQ1YsMkJBQTJCLENBR3ZCLDRCQUE0QixFQUpwQyxjQUFjLENBQ1YsMkJBQTJCLENBSXZCLDRCQUE0QixDQUFDLE1BQU0sRUFMM0MsY0FBYyxDQUNWLDJCQUEyQixDQUt2QixzQkFBc0IsRUFOOUIsY0FBYyxDQUNWLDJCQUEyQixDQU12QixzQkFBc0IsQ0FBQyxNQUFNLEVBUHJDLGNBQWMsQ0FDViwyQkFBMkIsQ0FPdkIsd0JBQXdCLEVBUmhDLGNBQWMsQ0FDViwyQkFBMkIsQ0FRdkIsd0JBQXdCLENBQUMsTUFBTSxFQVR2QyxjQUFjLENBQ1YsMkJBQTJCLENBU3ZCLHNCQUFzQixFQVY5QixjQUFjLENBQ1YsMkJBQTJCLENBVXZCLHNCQUFzQixDQUFDLE1BQU0sRUFYckMsY0FBYyxDQUNWLDJCQUEyQixDQVd2Qix3QkFBd0IsRUFaaEMsY0FBYyxDQUNWLDJCQUEyQixDQVl2Qix3QkFBd0IsQ0FBQyxNQUFNLENBQUMsRUFDNUIsS0FBSyxFQUFFLGVBQWUsR0FDekIifQ== */
/*# sourceMappingURL=redux-background.css.map */

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,323 @@
/**
* Redux Background
* Dependencies : jquery, wp media uploader
* Feature added by : Dovy Paukstys
* Date : 07 Jan 2014
*/
/*global redux_change, wp, redux, colorValidate, jQuery */
(function( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.background = redux.field_objects.background || {};
redux.field_objects.background.init = function( selector ) {
selector = $.redux.getSelector( selector, 'background' );
$( selector ).each(
function() {
var el = $( this );
var parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Remove the image button.
el.find( '.redux-remove-background' ).off( 'click' ).on(
'click',
function( e ) {
e.preventDefault();
redux.field_objects.background.removeImage( $( this ).parents( '.redux-container-background:first' ) );
redux.field_objects.background.preview( $( this ) );
return false;
}
);
// Upload media button.
el.find( '.redux-background-upload' ).off().on(
'click',
function( event ) {
redux.field_objects.background.addImage( event, $( this ).parents( '.redux-container-background:first' ) );
}
);
el.find( '.redux-background-input' ).on(
'change',
function() {
redux.field_objects.background.preview( $( this ) );
}
);
el.find( '.redux-color' ).wpColorPicker(
{
change: function( e, ui ) {
$( this ).val( ui.color.toString() );
redux_change( $( this ) );
$( '#' + e.target.id + '-transparency' ).prop( 'checked', false );
redux.field_objects.background.preview( $( this ) );
},
clear: function( e ) {
e = null;
redux_change( $( this ).parent().find( '.redux-color-init' ) );
redux.field_objects.background.preview( $( this ) );
}
}
);
// Replace and validate field on blur.
el.find( '.redux-color' ).on(
'blur',
function() {
var value = $( this ).val();
var id = '#' + $( this ).attr( 'id' );
if ( 'transparent' === value ) {
$( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' );
el.find( id + '-transparency' ).prop( 'checked', true );
} else {
if ( colorValidate( this ) === value ) {
if ( 0 !== value.indexOf( '#' ) ) {
$( this ).val( $( this ).data( 'oldcolor' ) );
}
}
el.find( id + '-transparency' ).prop( 'checked', false );
}
}
);
el.find( '.redux-color' ).on(
'focus',
function() {
$( this ).data( 'oldcolor', $( this ).val() );
}
);
el.find( '.redux-color' ).on(
'keyup',
function() {
var value = $( this ).val();
var color = colorValidate( this );
var id = '#' + $( this ).attr( 'id' );
if ( 'transparent' === value ) {
$( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' );
el.find( id + '-transparency' ).prop( 'checked', true );
} else {
el.find( id + '-transparency' ).prop( 'checked', false );
if ( color && color !== $( this ).val() ) {
$( this ).val( color );
}
}
}
);
// When transparency checkbox is clicked.
el.find( '.color-transparency' ).on(
'click',
function() {
var prevColor;
if ( $( this ).is( ':checked' ) ) {
el.find( '.redux-saved-color' ).val( $( '#' + $( this ).data( 'id' ) ).val() );
el.find( '#' + $( this ).data( 'id' ) ).val( 'transparent' );
el.find( '#' + $( this ).data( 'id' ) ).parents( '.redux-field-container' ).find( '.wp-color-result' ).css( 'background-color', 'transparent' );
} else {
prevColor = $( this ).parents( '.redux-field-container' ).find( '.redux-saved-color' ).val();
if ( '' === prevColor ) {
prevColor = $( '#' + $( this ).data( 'id' ) ).data( 'default-color' );
}
el.find( '#' + $( this ).data( 'id' ) ).parents( '.redux-field-container' ).find( '.wp-color-result' ).css( 'background-color', prevColor );
el.find( '#' + $( this ).data( 'id' ) ).val( prevColor );
}
redux_change( $( this ) );
}
);
el.find( ' .redux-background-repeat, .redux-background-clip, .redux-background-origin, .redux-background-size, .redux-background-attachment, .redux-background-position' ).select2();
}
);
};
// Update the background preview.
redux.field_objects.background.preview = function( selector ) {
var css;
var hide = true;
var parent = $( selector ).parents( '.redux-container-background:first' );
var preview = $( parent ).find( '.background-preview' );
if ( ! preview ) { // No preview present.
return;
}
css = 'height:' + preview.height() + 'px;';
$( parent ).find( '.redux-background-input' ).each(
function() {
var data = $( this ).serializeArray();
data = data[0];
if ( data && data.name.indexOf( '[background-' ) !== - 1 ) {
if ( '' !== data.value ) {
hide = false;
data.name = data.name.split( '[background-' );
data.name = 'background-' + data.name[1].replace( ']', '' );
if ( 'background-image' === data.name ) {
css += data.name + ':url("' + data.value + '");';
} else {
css += data.name + ':' + data.value + ';';
}
}
}
}
);
if ( ! hide ) {
preview.attr( 'style', css ).fadeIn();
} else {
preview.slideUp();
}
};
// Add a file via the wp.media function.
redux.field_objects.background.addImage = function( event, selector ) {
var frame;
var jQueryel = $( this );
event.preventDefault();
// If the media frame already exists, reopen it.
if ( frame ) {
frame.open();
return;
}
// Create the media frame.
frame = wp.media(
{
multiple: false,
library: {
},
title: jQueryel.data( 'choose' ),
button: {
text: jQueryel.data( 'update' )
}
}
);
// When an image is selected, run a callback.
frame.on(
'select',
function() {
var thumbSrc;
var height;
var key;
var object;
// Grab the selected attachment.
var attachment = frame.state().get( 'selection' ).first();
frame.close();
if ( 'image' !== attachment.attributes.type ) {
return;
}
selector.find( '.upload' ).val( attachment.attributes.url );
selector.find( '.upload-id' ).val( attachment.attributes.id );
selector.find( '.upload-height' ).val( attachment.attributes.height );
selector.find( '.upload-width' ).val( attachment.attributes.width );
redux_change( $( selector ).find( '.upload-id' ) );
thumbSrc = attachment.attributes.url;
if ( 'undefined' !== typeof attachment.attributes.sizes && 'undefined' !== typeof attachment.attributes.sizes.thumbnail ) {
thumbSrc = attachment.attributes.sizes.thumbnail.url;
} else if ( 'undefined' !== typeof attachment.attributes.sizes ) {
height = attachment.attributes.height;
for ( key in attachment.attributes.sizes ) {
if ( attachment.attributes.sizes.hasOwnProperty( key ) ) {
object = attachment.attributes.sizes[key];
if ( object.height < height ) {
height = object.height;
thumbSrc = object.url;
}
}
}
} else {
thumbSrc = attachment.attributes.icon;
}
selector.find( '.upload-thumbnail' ).val( thumbSrc );
if ( ! selector.find( '.upload' ).hasClass( 'noPreview' ) ) {
selector.find( '.screenshot' ).empty().hide().append( '<img class="redux-option-image" src="' + thumbSrc + '">' ).slideDown( 'fast' );
}
selector.find( '.redux-remove-background' ).removeClass( 'hide' );
selector.find( '.redux-background-input-properties' ).slideDown();
redux.field_objects.background.preview( selector.find( '.upload' ) );
}
);
// Finally, open the modal.
frame.open();
};
// Update the background preview.
redux.field_objects.background.removeImage = function( selector ) {
var screenshot;
// This shouldn't have been run...
if ( ! selector.find( '.redux-remove-background' ).addClass( 'hide' ) ) {
return;
}
selector.find( '.redux-remove-background' ).addClass( 'hide' ); // Hide "Remove" button.
selector.find( '.upload' ).val( '' );
selector.find( '.upload-id' ).val( '' );
selector.find( '.upload-height' ).val( '' );
selector.find( '.upload-width' ).val( '' );
redux_change( $( selector ).find( '.upload-id' ) );
selector.find( '.redux-background-input-properties' ).hide();
screenshot = selector.find( '.screenshot' );
// Hide the screenshot.
screenshot.slideUp();
selector.find( '.remove-file' ).off();
// We don't display the upload button if .upload-notice is present
// This means the user doesn't have the WordPress 3.5 Media Library Support.
if ( $( '.section-upload .upload-notice' ).length > 0 ) {
$( '.redux-background-upload' ).remove();
}
};
})( jQuery );

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,70 @@
.redux-main {
.redux-container-background {
.redux-background-position,
.redux-background-position select,
.redux-background-attachment,
.redux-background-attachment select,
.redux-background-clip,
.redux-background-clip select,
.redux-background-origin,
.redux-background-origin select,
.redux-background-size,
.redux-background-size select,
.redux-background-repeat,
.redux-background-repeat select {
width: 200px !important;
margin-right: 10px;
margin-bottom: 7px;
}
.background-preview {
display: block;
width: 100%;
margin: 5px 0 10px;
border: 1px dotted #d3d3d3;
}
.select2-container {
margin-right: 10px;
margin-bottom: 10px;
}
.wp-picker-container {
margin-bottom: 10px;
}
.upload {
width: 100%;
margin-bottom: 8px;
}
}
.redux-container-select {
li.ui-state-highlight {
height: 20px;
margin-top: 2px;
margin-left: 5px;
width: 64px;
margin-bottom: 0;
}
}
}
.wp-customizer {
.redux-container-background {
.redux-background-position,
.redux-background-position select,
.redux-background-attachment,
.redux-background-attachment select,
.redux-background-clip,
.redux-background-clip select,
.redux-background-origin,
.redux-background-origin select,
.redux-background-size,
.redux-background-size select,
.redux-background-repeat,
.redux-background-repeat select {
width: 100% !important;
}
}
}

View File

@@ -0,0 +1,381 @@
<?php
/**
* Border Field.
*
* @package ReduxFramework/Fields
* @author Dovy Paukstys & Kevin Provance (kprovance)
* @version 4.0.0
*/
defined( 'ABSPATH' ) || exit;
// Don't duplicate me!
if ( ! class_exists( 'Redux_Border', false ) ) {
/**
* Class Redux_Border
*/
class Redux_Border extends Redux_Field {
/**
* Set field and value defaults.
*/
public function set_defaults() {
// No errors, please.
$defaults = array(
'top' => true,
'bottom' => true,
'all' => true,
'style' => true,
'color' => true,
'left' => true,
'right' => true,
);
$this->field = wp_parse_args( $this->field, $defaults );
$defaults = array(
'top' => '',
'right' => '',
'bottom' => '',
'left' => '',
'color' => '',
'style' => '',
);
$this->value = wp_parse_args( $this->value, $defaults );
}
/**
* Field Render Function.
* Takes the vars and outputs the HTML for the field in the settings
*
* @since ReduxFramework 1.0.0
*/
public function render() {
$value = array(
'top' => isset( $this->value['border-top'] ) ? filter_var( $this->value['border-top'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) : filter_var( $this->value['top'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ),
'right' => isset( $this->value['border-right'] ) ? filter_var( $this->value['border-right'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) : filter_var( $this->value['right'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ),
'bottom' => isset( $this->value['border-bottom'] ) ? filter_var( $this->value['border-bottom'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) : filter_var( $this->value['bottom'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ),
'left' => isset( $this->value['border-left'] ) ? filter_var( $this->value['border-left'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) : filter_var( $this->value['left'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ),
'color' => $this->value['border-color'] ?? $this->value['color'],
'style' => $this->value['border-style'] ?? $this->value['style'],
);
if ( ( isset( $this->value['width'] ) || isset( $this->value['border-width'] ) ) ) {
if ( isset( $this->value['border-width'] ) && ! empty( $this->value['border-width'] ) ) {
$this->value['width'] = $this->value['border-width'];
}
$this->value['width'] = $this->strip_alphas( $this->value['width'] );
$value['top'] = $this->value['width'];
$value['right'] = $this->value['width'];
$value['bottom'] = $this->value['width'];
$value['left'] = $this->value['width'];
}
$this->value = $value;
$defaults = array(
'top' => '',
'right' => '',
'bottom' => '',
'left' => '',
);
$this->check_for_all();
$this->value = wp_parse_args( $this->value, $defaults );
$this->select2_config['allowClear'] = false;
if ( isset( $this->field['select2'] ) ) {
$this->field['select2'] = wp_parse_args( $this->field['select2'], $this->select2_config );
} else {
$this->field['select2'] = $this->select2_config;
}
$this->field['select2'] = Redux_Functions::sanitize_camel_case_array_keys( $this->field['select2'] );
$select2_data = Redux_Functions::create_data_string( $this->field['select2'] );
echo '<input type="hidden" class="field-units" value="px">';
if ( isset( $this->field['all'] ) && true === $this->field['all'] ) {
echo '<div class="field-border-input input-prepend"><span class="add-on"><i class="el el-fullscreen icon-large"></i></span><input type="text" class="redux-border-all redux-border-input mini ' . esc_attr( $this->field['class'] ) . '" placeholder="' . esc_html__( 'All', 'redux-framework' ) . '" rel="' . esc_attr( $this->field['id'] ) . '-all" value="' . esc_attr( $this->value['top'] ) . '"></div>';
}
echo '<input type="hidden" class="redux-border-value" id="' . esc_attr( $this->field['id'] ) . '-top" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[border-top]" value="' . ( isset( $this->value['top'] ) && '' !== $this->value['top'] ? esc_attr( $this->value['top'] ) . 'px' : '' ) . '">';
echo '<input type="hidden" class="redux-border-value" id="' . esc_attr( $this->field['id'] ) . '-right" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[border-right]" value="' . ( isset( $this->value['right'] ) && '' !== $this->value['right'] ? esc_attr( $this->value['right'] ) . 'px' : '' ) . '">';
echo '<input type="hidden" class="redux-border-value" id="' . esc_attr( $this->field['id'] ) . '-bottom" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[border-bottom]" value="' . ( isset( $this->value['bottom'] ) && '' !== $this->value['bottom'] ? esc_attr( $this->value['bottom'] ) . 'px' : '' ) . '">';
echo '<input type="hidden" class="redux-border-value" id="' . esc_attr( $this->field['id'] ) . '-left" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[border-left]" value="' . ( isset( $this->value['left'] ) && '' !== $this->value['left'] ? esc_attr( $this->value['left'] ) . 'px' : '' ) . '">';
if ( ! isset( $this->field['all'] ) || true !== $this->field['all'] ) {
/**
* Top
* */
if ( true === $this->field['top'] ) {
echo '<div class="field-border-input input-prepend">
<span class="add-on">
<i class="el el-arrow-up icon-large"></i>
</span>
<input type="text" class="redux-border-top redux-border-input mini ' . esc_attr( $this->field['class'] ) . '" placeholder="' . esc_html__( 'Top', 'redux-framework' ) . '" rel="' . esc_attr( $this->field['id'] ) . '-top" value="' . esc_attr( $this->value['top'] ) . '">
</div>';
}
/**
* Right
* */
if ( true === $this->field['right'] ) {
echo '<div class="field-border-input input-prepend">
<span class="add-on">
<i class="el el-arrow-right icon-large"></i>
</span>
<input type="text" class="redux-border-right redux-border-input mini ' . esc_attr( $this->field['class'] ) . '" placeholder="' . esc_html__( 'Right', 'redux-framework' ) . '" rel="' . esc_attr( $this->field['id'] ) . '-right" value="' . esc_attr( $this->value['right'] ) . '">
</div>';
}
/**
* Bottom
* */
if ( true === $this->field['bottom'] ) {
echo '<div class="field-border-input input-prepend">
<span class="add-on">
<i class="el el-arrow-down icon-large"></i>
</span>
<input type="text" class="redux-border-bottom redux-border-input mini ' . esc_attr( $this->field['class'] ) . '" placeholder="' . esc_html__( 'Bottom', 'redux-framework' ) . '" rel="' . esc_attr( $this->field['id'] ) . '-bottom" value="' . esc_attr( $this->value['bottom'] ) . '">
</div>';
}
/**
* Left
* */
if ( true === $this->field['left'] ) {
echo '<div class="field-border-input input-prepend">
<span class="add-on">
<i class="el el-arrow-left icon-large"></i>
</span>
<input type="text" class="redux-border-left redux-border-input mini ' . esc_attr( $this->field['class'] ) . '" placeholder="' . esc_html__( 'Left', 'redux-framework' ) . '" rel="' . esc_attr( $this->field['id'] ) . '-left" value="' . esc_attr( $this->value['left'] ) . '">
</div>';
}
}
/**
* Border-style
* */
if ( false !== $this->field['style'] ) {
$options = array(
'solid' => esc_html__( 'Solid', 'redux-framework' ),
'dashed' => esc_html__( 'Dashed', 'redux-framework' ),
'dotted' => esc_html__( 'Dotted', 'redux-framework' ),
'double' => esc_html__( 'Double', 'redux-framework' ),
'none' => esc_html__( 'None', 'redux-framework' ),
);
echo '<select data-placeholder="' . esc_html__( 'Border style', 'redux-framework' ) . '" id="' . esc_attr( $this->field['id'] ) . '[border-style]" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[border-style]" class="tips redux-border-style ' . esc_attr( $this->field['class'] ) . '" rows="6" data-id="' . esc_attr( $this->field['id'] ) . '"' . esc_attr( $select2_data ) . '>';
foreach ( $options as $k => $v ) {
echo '<option value="' . esc_attr( $k ) . '" ' . selected( $value['style'], $k, false ) . '>' . esc_html( $v ) . '</option>';
}
echo '</select>';
} else {
echo '<input type="hidden" id="' . esc_attr( $this->field['id'] ) . '[border-style]" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[border-style]" value="' . esc_attr( $this->value['style'] ) . '" data-id="' . esc_attr( $this->field['id'] ) . '">';
}
/**
* Color
* */
if ( false !== $this->field['color'] ) {
$default = $this->field['default']['border-color'] ?? '';
if ( empty( $default ) ) {
$default = ( isset( $this->field['default']['color'] ) ) ? $this->field['default']['color'] : '#ffffff';
}
echo '<input ';
echo 'name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[border-color]"';
echo 'id="' . esc_attr( $this->field['id'] ) . '-border"';
echo 'class="color-picker redux-border-color redux-color redux-color-init ' . esc_attr( $this->field['class'] ) . '"';
echo 'type="text"';
echo 'value="' . esc_attr( $this->value['color'] ) . '"';
echo 'data-default-color="' . esc_attr( $default ) . '"';
echo 'data-id="' . esc_attr( $this->field['id'] ) . '"';
$data = array(
'field' => $this->field,
'index' => '',
);
echo Redux_Functions_Ex::output_alpha_data( $data ); // phpcs:ignore WordPress.Security.EscapeOutput
echo '>';
} else {
echo '<input type="hidden" id="' . esc_attr( $this->field['id'] ) . '[border-color]" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[border-color]" value="' . esc_attr( $this->value['color'] ) . '" data-id="' . esc_attr( $this->field['id'] ) . '">';
}
}
/**
* Do enqueue for each field instance.
*
* @return void
*/
public function always_enqueue() {
if ( isset( $this->field['color_alpha'] ) && $this->field['color_alpha'] ) {
if ( ! wp_script_is( 'redux-wp-color-picker-alpha' ) ) {
wp_enqueue_script( 'redux-wp-color-picker-alpha' );
}
}
}
/**
* Enqueue Function.
* If this field requires any scripts, or css define this function and register/enqueue the scripts/css
*
* @since ReduxFramework 1.0.0
*/
public function enqueue() {
$min = Redux_Functions::is_min();
if ( ! wp_style_is( 'select2-css' ) ) {
wp_enqueue_style( 'select2-css' );
}
if ( ! wp_style_is( 'wp-color-picker' ) ) {
wp_enqueue_style( 'wp-color-picker' );
}
$dep_array = array( 'jquery', 'select2-js', 'wp-color-picker', 'redux-js' );
wp_enqueue_script(
'redux-field-border',
Redux_Core::$url . 'inc/fields/border/redux-border' . $min . '.js',
$dep_array,
$this->timestamp,
true
);
if ( $this->parent->args['dev_mode'] ) {
if ( ! wp_style_is( 'redux-color-picker' ) ) {
wp_enqueue_style( 'redux-color-picker' );
}
wp_enqueue_style(
'redux-field-border',
Redux_Core::$url . 'inc/fields/border/redux-border.css',
array(),
$this->timestamp
);
}
}
/**
* Check to make sure all is properly set.
*
* @return void
*/
private function check_for_all() {
if ( true === $this->field['all'] ) {
if ( 1 !== $this->field['top'] || 1 !== $this->field['bottom'] || 1 !== $this->field['left'] || 1 !== $this->field['right'] ) {
$this->field['all'] = false;
}
}
}
/**
* Output CSS styling.
*
* @param mixed $data Value array.
*
* @return string
*/
public function css_style( $data ): string {
$style = '';
$this->check_for_all();
if ( isset( $this->field['all'] ) && true === $this->field['all'] ) {
$border_width = $data['border-width'] ?? '0px';
$val = $data['border-top'] ?? $border_width;
$data['border-top'] = $val;
$data['border-bottom'] = $val;
$data['border-left'] = $val;
$data['border-right'] = $val;
}
$clean_value = array(
'color' => ! empty( $data['border-color'] ) ? $data['border-color'] : '',
'style' => ! empty( $data['border-style'] ) ? $data['border-style'] : '',
);
$border_width = '';
if ( isset( $data['border-width'] ) ) {
$border_width = $data['border-width'];
}
$this->field['top'] = $this->field['top'] ?? true;
$this->field['bottom'] = $this->field['bottom'] ?? true;
$this->field['left'] = $this->field['left'] ?? true;
$this->field['right'] = $this->field['right'] ?? true;
if ( true === $this->field['top'] ) {
$clean_value['top'] = ! empty( $data['border-top'] ) ? $data['border-top'] : $border_width;
}
if ( true === $this->field['bottom'] ) {
$clean_value['bottom'] = ! empty( $data['border-bottom'] ) ? $data['border-bottom'] : $border_width;
}
if ( true === $this->field['left'] ) {
$clean_value['left'] = ! empty( $data['border-left'] ) ? $data['border-left'] : $border_width;
}
if ( true === $this->field['right'] ) {
$clean_value['right'] = ! empty( $data['border-right'] ) ? $data['border-right'] : $border_width;
}
// absolute, padding, margin.
if ( ! isset( $this->field['all'] ) || true !== $this->field['all'] ) {
foreach ( $clean_value as $key => $value ) {
if ( 'color' === $key || 'style' === $key ) {
continue;
}
if ( ! empty( $value ) ) {
$style .= 'border-' . $key . ':' . $value . ' ' . $clean_value['style'] . ' ' . $clean_value['color'] . ';';
}
}
} elseif ( ! empty( $clean_value['top'] ) ) {
$style .= 'border:' . $clean_value['top'] . ' ' . $clean_value['style'] . ' ' . $clean_value['color'] . ';';
}
return $style;
}
/**
* Strip alpha chars.
*
* @param string $s Criteria.
*
* @return null|string|string[]
*/
private function strip_alphas( string $s ) {
// Regex is our friend. THERE ARE FOUR LIGHTS!!
return preg_replace( '/[^\d.-]/', '', $s );
}
/**
* Enable output_variables to be generated.
*
* @since 4.0.3
* @return void
*/
public function output_variables() {
// No code needed, just defining the method is enough.
}
}
}
class_alias( 'Redux_Border', 'ReduxFramework_Border' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
_deprecated_file( 'field_border.php', '4.3', 'class-redux-border.php', 'This file has been renamed and is no longer used in Redux 4. Please change any references to it as it will be removed in future versions of Redux.' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
echo null;

View File

@@ -0,0 +1,15 @@
.redux-container-border .select2-container { float: left; display: block; margin-right: 10px; }
.redux-container-border .select_wrapper { float: left; width: inherit; }
.redux-container-border .select_wrapper select { width: 80px; float: left; }
.redux-container-border .field-border-input { margin-right: 10px; margin-bottom: 7px; }
@media screen and (max-width: 782px) { .redux-container-border .field-border-input input { display: inline-block !important; width: 100px !important; }
.redux-container-border .field-border-input .add-on { padding: 7px 4px; font-size: 16px; line-height: 1.5; }
.redux-container-border .select_wrapper { margin-top: 6px; } }
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtYm9yZGVyLmNzcyIsInNvdXJjZXMiOlsicmVkdXgtYm9yZGVyLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQUFDSSx1QkFEbUIsQ0FDbkIsa0JBQWtCLENBQUMsRUFDZixLQUFLLEVBQUUsSUFBSSxFQUNYLE9BQU8sRUFBRSxLQUFLLEVBQ2QsWUFBWSxFQUFFLElBQUksR0FDckI7O0FBTEwsQUFPSSx1QkFQbUIsQ0FPbkIsZUFBZSxDQUFDLEVBQ1osS0FBSyxFQUFFLElBQUksRUFNWCxLQUFLLEVBQUUsT0FBTyxHQUNqQjs7QUFmTCxBQVNRLHVCQVRlLENBT25CLGVBQWUsQ0FFWCxNQUFNLENBQUMsRUFDSCxLQUFLLEVBQUUsSUFBSSxFQUNYLEtBQUssRUFBRSxJQUFJLEdBRWQ7O0FBYlQsQUFpQkksdUJBakJtQixDQWlCbkIsbUJBQW1CLENBQUMsRUFDaEIsWUFBWSxFQUFFLElBQUksRUFDbEIsYUFBYSxFQUFFLEdBQUcsR0FDckI7O0FBR0wsTUFBTSxDQUFDLE1BQU0sTUFBTSxTQUFTLEVBQUUsS0FBSyxJQUMvQixBQUVRLHVCQUZlLENBQ25CLG1CQUFtQixDQUNmLEtBQUssQ0FBQyxFQUNGLE9BQU8sRUFBRSx1QkFBdUIsRUFDaEMsS0FBSyxFQUFFLGdCQUFnQixHQUMxQjtDQUxULEFBT1EsdUJBUGUsQ0FDbkIsbUJBQW1CLENBTWYsT0FBTyxDQUFDLEVBQ0osT0FBTyxFQUFFLE9BQU8sRUFDaEIsU0FBUyxFQUFFLElBQUksRUFDZixXQUFXLEVBQUUsR0FBRyxHQUNuQjtDQVhULEFBY0ksdUJBZG1CLENBY25CLGVBQWUsQ0FBQyxFQUNaLFVBQVUsRUFBRSxHQUFHLEdBQ2xCIn0= */
/*# sourceMappingURL=redux-border.css.map */

View File

@@ -0,0 +1 @@
{"version":3,"sources":["redux-border.scss","redux-border.css"],"names":[],"mappings":"AAAA,6CAAA,WAAA,ECGQ,cAAc,EDHtB,kBAOI,EAAA;;AAPJ,0CAuBO,WAAY,ECTX,cAAc,EAAA;;ADdtB,iDAwBI,WAAA,ECbQ,WAAW,EAAA;;ADXvB,8CCkBQ,kBAAkB,EAClB,kBAAkB,EAAA;;AAI1B,uCACI,oDAGY,gCAAgC,EAChC,uBAAuB,EAAA;CAJnC,sDAQY,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAAA;CAV5B,0CAeQ,eAAe,EAAA,EAClB;;AA5BT,qjCAAqjC","file":"redux-border.css","sourcesContent":[".redux-container-border {\r\n .select2-container {\r\n float: left;\r\n display: block;\r\n margin-right: 10px;\r\n }\r\n\r\n .select_wrapper {\r\n float: left;\r\n select {\r\n width: 80px;\r\n float: left;\r\n\r\n }\r\n width: inherit;\r\n }\r\n\r\n .field-border-input {\r\n margin-right: 10px;\r\n margin-bottom: 7px;\r\n }\r\n}\r\n\r\n@media screen and (max-width: 782px) {\r\n .redux-container-border {\r\n .field-border-input {\r\n input {\r\n display: inline-block !important;\r\n width: 100px !important;\r\n }\r\n\r\n .add-on {\r\n padding: 7px 4px;\r\n font-size: 16px;\r\n line-height: 1.5;\r\n }\r\n }\r\n\r\n .select_wrapper {\r\n margin-top: 6px;\r\n }\r\n }\r\n}\r\n",".redux-container-border .select2-container { float: left; display: block; margin-right: 10px; }\n\n.redux-container-border .select_wrapper { float: left; width: inherit; }\n\n.redux-container-border .select_wrapper select { width: 80px; float: left; }\n\n.redux-container-border .field-border-input { margin-right: 10px; margin-bottom: 7px; }\n\n@media screen and (max-width: 782px) { .redux-container-border .field-border-input input { display: inline-block !important; width: 100px !important; }\n\t.redux-container-border .field-border-input .add-on { padding: 7px 4px; font-size: 16px; line-height: 1.5; }\n\t.redux-container-border .select_wrapper { margin-top: 6px; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtYm9yZGVyLmNzcyIsInNvdXJjZXMiOlsicmVkdXgtYm9yZGVyLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQUFDSSx1QkFEbUIsQ0FDbkIsa0JBQWtCLENBQUMsRUFDZixLQUFLLEVBQUUsSUFBSSxFQUNYLE9BQU8sRUFBRSxLQUFLLEVBQ2QsWUFBWSxFQUFFLElBQUksR0FDckI7O0FBTEwsQUFPSSx1QkFQbUIsQ0FPbkIsZUFBZSxDQUFDLEVBQ1osS0FBSyxFQUFFLElBQUksRUFNWCxLQUFLLEVBQUUsT0FBTyxHQUNqQjs7QUFmTCxBQVNRLHVCQVRlLENBT25CLGVBQWUsQ0FFWCxNQUFNLENBQUMsRUFDSCxLQUFLLEVBQUUsSUFBSSxFQUNYLEtBQUssRUFBRSxJQUFJLEdBRWQ7O0FBYlQsQUFpQkksdUJBakJtQixDQWlCbkIsbUJBQW1CLENBQUMsRUFDaEIsWUFBWSxFQUFFLElBQUksRUFDbEIsYUFBYSxFQUFFLEdBQUcsR0FDckI7O0FBR0wsTUFBTSxDQUFDLE1BQU0sTUFBTSxTQUFTLEVBQUUsS0FBSyxJQUMvQixBQUVRLHVCQUZlLENBQ25CLG1CQUFtQixDQUNmLEtBQUssQ0FBQyxFQUNGLE9BQU8sRUFBRSx1QkFBdUIsRUFDaEMsS0FBSyxFQUFFLGdCQUFnQixHQUMxQjtDQUxULEFBT1EsdUJBUGUsQ0FDbkIsbUJBQW1CLENBTWYsT0FBTyxDQUFDLEVBQ0osT0FBTyxFQUFFLE9BQU8sRUFDaEIsU0FBUyxFQUFFLElBQUksRUFDZixXQUFXLEVBQUUsR0FBRyxHQUNuQjtDQVhULEFBY0ksdUJBZG1CLENBY25CLGVBQWUsQ0FBQyxFQUNaLFVBQVUsRUFBRSxHQUFHLEdBQ2xCIn0= */\n\n/*# sourceMappingURL=redux-border.css.map */\n"]}

View File

@@ -0,0 +1,125 @@
/**
* Field Border (border)
*/
/*global redux_change, redux, colorValidate */
(function( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.border = redux.field_objects.border || {};
redux.field_objects.border.init = function( selector ) {
selector = $.redux.getSelector( selector, 'border' );
$( selector ).each(
function() {
var el = $( this );
var parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
el.find( '.redux-border-top, .redux-border-right, .redux-border-bottom, .redux-border-left, .redux-border-all' ).numeric( { allowMinus: false } );
el.find( '.redux-border-style' ).select2();
el.find( '.redux-border-input' ).on(
'change',
function() {
var value;
var units = $( this ).parents( '.redux-field:first' ).find( '.field-units' ).val();
if ( 0 !== $( this ).parents( '.redux-field:first' ).find( '.redux-border-units' ).length ) {
units = $( this ).parents( '.redux-field:first' ).find( '.redux-border-units option:selected' ).val();
}
value = $( this ).val();
if ( 'undefined' !== typeof units && value ) {
value += units;
}
if ( $( this ).hasClass( 'redux-border-all' ) ) {
$( this ).parents( '.redux-field:first' ).find( '.redux-border-value' ).each(
function() {
$( this ).val( value );
}
);
} else {
$( '#' + $( this ).attr( 'rel' ) ).val( value );
}
}
);
el.find( '.redux-border-units' ).on(
'change',
function() {
$( this ).parents( '.redux-field:first' ).find( '.redux-border-input' ).change();
}
);
el.find( '.redux-color-init' ).wpColorPicker(
{
change: function( e, ui ) {
$( this ).val( ui.color.toString() );
redux_change( $( this ) );
el.find( '#' + e.target.getAttribute( 'data-id' ) + '-transparency' ).prop( 'checked', false );
},
clear: function( e, ui ) {
e = null;
$( this ).val( ui.color.toString() );
redux_change( $( this ).parent().find( '.redux-color-init' ) );
}
}
);
el.find( '.redux-color' ).on(
'keyup',
function() {
var color = colorValidate( this );
if ( color && color !== $( this ).val() ) {
$( this ).val( color );
}
}
);
// Replace and validate field on blur.
el.find( '.redux-color' ).on(
'blur',
function() {
var value = $( this ).val();
if ( colorValidate( this ) === value ) {
if ( 0 !== value.indexOf( '#' ) ) {
$( this ).val( $( this ).data( 'oldcolor' ) );
}
}
}
);
// Store the old valid color on keydown.
el.find( '.redux-color' ).on(
'keydown',
function() {
$( this ).data( 'oldkeypress', $( this ).val() );
}
);
}
);
};
})( jQuery );

View File

@@ -0,0 +1 @@
!function(d){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.border=redux.field_objects.border||{},redux.field_objects.border.init=function(e){e=d.redux.getSelector(e,"border"),d(e).each(function(){var i=d(this),e=i;(e=i.hasClass("redux-field-container")?e:i.parents(".redux-field-container:first")).is(":hidden")||e.hasClass("redux-field-init")&&(e.removeClass("redux-field-init"),i.find(".redux-border-top, .redux-border-right, .redux-border-bottom, .redux-border-left, .redux-border-all").numeric({allowMinus:!1}),i.find(".redux-border-style").select2(),i.find(".redux-border-input").on("change",function(){var e,r=d(this).parents(".redux-field:first").find(".field-units").val();0!==d(this).parents(".redux-field:first").find(".redux-border-units").length&&(r=d(this).parents(".redux-field:first").find(".redux-border-units option:selected").val()),e=d(this).val(),void 0!==r&&e&&(e+=r),d(this).hasClass("redux-border-all")?d(this).parents(".redux-field:first").find(".redux-border-value").each(function(){d(this).val(e)}):d("#"+d(this).attr("rel")).val(e)}),i.find(".redux-border-units").on("change",function(){d(this).parents(".redux-field:first").find(".redux-border-input").change()}),i.find(".redux-color-init").wpColorPicker({change:function(e,r){d(this).val(r.color.toString()),redux_change(d(this)),i.find("#"+e.target.getAttribute("data-id")+"-transparency").prop("checked",!1)},clear:function(e,r){d(this).val(r.color.toString()),redux_change(d(this).parent().find(".redux-color-init"))}}),i.find(".redux-color").on("keyup",function(){var e=colorValidate(this);e&&e!==d(this).val()&&d(this).val(e)}),i.find(".redux-color").on("blur",function(){var e=d(this).val();colorValidate(this)===e&&0!==e.indexOf("#")&&d(this).val(d(this).data("oldcolor"))}),i.find(".redux-color").on("keydown",function(){d(this).data("oldkeypress",d(this).val())}))})}}(jQuery);

View File

@@ -0,0 +1,43 @@
.redux-container-border {
.select2-container {
float: left;
display: block;
margin-right: 10px;
}
.select_wrapper {
float: left;
select {
width: 80px;
float: left;
}
width: inherit;
}
.field-border-input {
margin-right: 10px;
margin-bottom: 7px;
}
}
@media screen and (max-width: 782px) {
.redux-container-border {
.field-border-input {
input {
display: inline-block !important;
width: 100px !important;
}
.add-on {
padding: 7px 4px;
font-size: 16px;
line-height: 1.5;
}
}
.select_wrapper {
margin-top: 6px;
}
}
}

View File

@@ -0,0 +1,330 @@
<?php
/**
* Bow Shadow.
*
* @package ReduxPro
* @subpackage Redux_Box_Shadow
* @author Kevin Provance (kprovance)
* @version 1.0.0
*/
defined( 'ABSPATH' ) || exit;
if ( ! class_exists( 'Redux_Box_Shadow', false ) ) {
/**
* Main Redux_Box_Shadow class
*
* @since 4.0.0
*/
class Redux_Box_Shadow extends Redux_Field {
/**
* Set defaults.
*/
public function set_defaults() {
$defaults = array(
'inset-shadow' => true,
'drop-shadow' => true,
'preview-color' => '#f1f1f1',
);
$this->field = Redux_Functions::parse_args( $this->field, $defaults );
$defaults = array(
'inset' => true,
'drop' => true,
'inset-shadow' => array(
'checked' => false,
'color' => '#ABABAB',
'horizontal' => 0,
'vertical' => 0,
'blur' => 10,
'spread' => 0,
),
'drop-shadow' => array(
'checked' => true,
'color' => '#dddddd',
'horizontal' => 5,
'vertical' => 5,
'blur' => 5,
'spread' => 1,
),
);
$this->value = Redux_Functions::parse_args( $this->value, $defaults );
}
/**
* Field Render Function.
* Takes the vars and outputs the HTML for the field in the settings
*
* @since 1.0.0
* @access public
* @return void
*/
public function render() {
$shadow_arr = array(
'inset',
'drop',
);
echo '<div class="box-shadow-inset">';
echo '<div class="box-shadow-controls row">';
foreach ( $shadow_arr as $shadow_type ) {
if ( $this->field[ $shadow_type . '-shadow' ] ) {
$disabled = ' pro-disabled';
if ( $this->value[ $shadow_type . '-shadow' ]['checked'] ) {
$disabled = '';
}
$slider_disable = disabled( filter_var( $this->value[ $shadow_type . '-shadow' ]['checked'], FILTER_VALIDATE_BOOLEAN ), false, false );
echo '<div class="col-2 shadow-' . esc_attr( $shadow_type ) . ' " data-shadow="' . esc_attr( $shadow_type ) . '">';
echo '<ul>';
echo '<li>';
echo '<label for="' . esc_attr( $this->field['id'] ) . '-' . esc_attr( $shadow_type ) . '-shadow" class="' . esc_attr( $disabled ) . '">';
echo '<input type="checkbox" id="' . esc_attr( $this->field['id'] ) . '-' . esc_attr( $shadow_type ) . '-shadow" class="checkbox" value="1"' . checked( $this->value[ $shadow_type . '-shadow' ]['checked'], '1', false ) . '/>';
echo '<input type="hidden" data-val="1" value="' . esc_attr( $this->value[ $shadow_type . '-shadow' ]['checked'] ) . '" class="checkbox-check" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[' . esc_attr( $shadow_type ) . '-shadow][checked]"/>';
echo esc_html( ucfirst( $shadow_type ) ) . ' ' . esc_html__( 'Shadow', 'redux-framework' );
echo '</label>';
echo '</li>';
echo '<li>';
$def_color = $this->field['default'][ $shadow_type . '-shadow' ]['color'] ?? '';
echo '<input ';
echo 'data-id="' . esc_attr( $this->field['id'] ) . '"';
echo 'name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[' . esc_attr( $shadow_type ) . '-shadow][color]"';
echo 'id="' . esc_attr( $this->field['id'] ) . '-' . esc_attr( $shadow_type ) . '-color"';
echo 'class="color-picker redux-color redux-box-shadow-' . esc_attr( $shadow_type ) . '-input redux-color-init ' . esc_attr( $this->field['class'] ) . '"';
echo 'type="text" value="' . esc_attr( $this->value[ $shadow_type . '-shadow' ]['color'] ) . '"';
echo 'data-default-color="' . esc_attr( $def_color ) . '"';
echo '/>';
echo '</li>';
echo '<li>';
echo '<div class="slider-' . esc_attr( $shadow_type ) . '-horizontal">';
echo esc_html__( 'Horizontal Length', 'redux-framework' ) . ': <strong>' . esc_html( $this->value[ $shadow_type . '-shadow' ]['horizontal'] ) . 'px</strong>';
echo '<div
class="redux-box-shadow-slider redux-box-shadow-' . esc_attr( $shadow_type ) . ' redux-' . esc_attr( $shadow_type ) . '-horizontal ' . esc_attr( $shadow_type ) . '-horizontal-input ' . esc_attr( $this->field['class'] ) . '"
id="' . esc_attr( $this->field['id'] ) . '"
data-id="' . esc_attr( $this->field['id'] ) . '-' . esc_attr( $shadow_type ) . '-horizontal"
data-min="-50"
data-max="50"
data-step="1"
data-rtl="' . esc_attr( is_rtl() ) . '"
data-label="' . esc_attr__( 'Horizontal Length', 'redux-framework' ) . '"
data-default = "' . esc_attr( $this->value[ $shadow_type . '-shadow' ]['horizontal'] ) . '" ' . esc_html( $slider_disable ) . '>
</div>';
echo '<input
type="hidden"
id="redux-slider-value-' . esc_attr( $this->field['id'] ) . '-' . esc_attr( $shadow_type ) . '-horizontal"
class="' . esc_attr( $shadow_type ) . '-horizontal"
name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[' . esc_attr( $shadow_type ) . '-shadow][horizontal]"
value="' . esc_attr( $this->value[ $shadow_type . '-shadow' ]['horizontal'] ) . '"
data-id="' . esc_attr( $this->field['id'] ) . '"
/>';
echo '</div>';
echo '</li>';
echo '<li>';
echo '<div class="slider-' . esc_attr( $shadow_type ) . '-vertical">';
echo esc_html__( 'Vertical Length', 'redux-framework' ) . ': <strong>' . esc_html( $this->value[ $shadow_type . '-shadow' ]['vertical'] ) . 'px</strong>';
echo '<div
class="redux-box-shadow-slider redux-box-shadow-' . esc_attr( $shadow_type ) . ' redux-' . esc_attr( $shadow_type ) . '-vertical ' . esc_attr( $shadow_type ) . '-vertical-input ' . esc_attr( $this->field['class'] ) . '"
id="' . esc_attr( $this->field['id'] ) . '"
data-id="' . esc_attr( $this->field['id'] ) . '-' . esc_attr( $shadow_type ) . '-vertical"
data-min="-50"
data-max="50"
data-step="1"
data-rtl="' . esc_attr( is_rtl() ) . '"
data-label="' . esc_attr__( 'Vertical Length', 'redux-framework' ) . '"
data-default = "' . esc_attr( $this->value[ $shadow_type . '-shadow' ]['vertical'] ) . '" ' . esc_html( $slider_disable ) . '>
</div>';
echo '<input
type="hidden"
id="redux-slider-value-' . esc_attr( $this->field['id'] ) . '-' . esc_attr( $shadow_type ) . '-vertical"
class="' . esc_attr( $shadow_type ) . '-vertical"
name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[' . esc_attr( $shadow_type ) . '-shadow][vertical]"
value="' . esc_attr( $this->value[ $shadow_type . '-shadow' ]['vertical'] ) . '"
data-id="' . esc_attr( $this->field['id'] ) . '"
/>';
echo '</div>';
echo '</li>';
echo '<li>';
echo '<div class="slider-' . esc_attr( $shadow_type ) . '-blur">';
echo esc_html__( 'Blur Radius', 'redux-framework' ) . ': <strong>' . esc_html( $this->value[ $shadow_type . '-shadow' ]['blur'] ) . 'px</strong>';
echo '<div
class="redux-box-shadow-slider redux-box-shadow-' . esc_attr( $shadow_type ) . ' redux-' . esc_attr( $shadow_type ) . '-blur ' . esc_attr( $shadow_type ) . '-blur-input ' . esc_attr( $this->field['class'] ) . '"
id="' . esc_attr( $this->field['id'] ) . '"
data-id="' . esc_attr( $this->field['id'] ) . '-' . esc_attr( $shadow_type ) . '-blur"
data-min="0"
data-max="100"
data-step="1"
data-rtl="' . esc_attr( is_rtl() ) . '"
data-label="' . esc_attr__( 'Blur Radius', 'redux-framework' ) . '"
data-default = "' . esc_attr( $this->value[ $shadow_type . '-shadow' ]['blur'] ) . '" ' . esc_html( $slider_disable ) . '>
</div>';
echo '<input
type="hidden"
id="redux-slider-value-' . esc_attr( $this->field['id'] ) . '-' . esc_attr( $shadow_type ) . '-blur"
class="' . esc_attr( $shadow_type ) . '-blur"
name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[' . esc_attr( $shadow_type ) . '-shadow][blur]"
value="' . esc_attr( $this->value[ $shadow_type . '-shadow' ]['blur'] ) . '"
data-id="' . esc_attr( $this->field['id'] ) . '"
/>';
echo '</div>';
echo '</li>';
echo '<li>';
echo '<div class="slider-' . esc_attr( $shadow_type ) . '-spread">';
echo esc_html__( 'Spread', 'redux-framework' ) . ': <strong>' . esc_html( $this->value[ $shadow_type . '-shadow' ]['spread'] ) . 'px</strong>';
echo '<div
class="redux-box-shadow-slider redux-box-shadow-' . esc_attr( $shadow_type ) . ' redux-' . esc_attr( $shadow_type ) . '-spread ' . esc_attr( $shadow_type ) . '-spread-input ' . esc_attr( $this->field['class'] ) . '"
id="' . esc_attr( $this->field['id'] ) . '"
data-id="' . esc_attr( $this->field['id'] ) . '-' . esc_attr( $shadow_type ) . '-spread"
data-min="-100"
data-max="100"
data-step="1"
data-rtl="' . esc_attr( is_rtl() ) . '"
data-label="' . esc_attr__( 'Spread', 'redux-framework' ) . '"
data-default = "' . esc_attr( $this->value[ $shadow_type . '-shadow' ]['spread'] ) . '" ' . esc_html( $slider_disable ) . '>
</div>';
echo '<input
type="hidden"
id="redux-slider-value-' . esc_attr( $this->field['id'] ) . '-' . esc_attr( $shadow_type ) . '-spread"
class="' . esc_attr( $shadow_type ) . '-spread"
name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[' . esc_attr( $shadow_type ) . '-shadow][spread]"
value="' . esc_attr( $this->value[ $shadow_type . '-shadow' ]['spread'] ) . '"
data-id="' . esc_attr( $this->field['id'] ) . '"
/>';
echo '</div>';
echo '</li>';
echo '</ul>';
echo '</div>';
}
}
$css = $this->css_style( $this->value );
$css .= 'background:' . esc_html( $this->field['preview-color'] );
echo '</div>';
echo '<div class="" id="shadow-result" style="' . $css . '"></div>'; // phpcs:ignore WordPress.Security.EscapeOutput
echo '</div>';
}
/**
* Compile CSS output.
*
* @param mixed $data Data.
*
* @return string
*/
public function css_style( $data ): string {
$css = '';
if ( $this->field['inset-shadow'] ) {
$inset = $data['inset-shadow'];
if ( filter_var( $inset['checked'], FILTER_VALIDATE_BOOLEAN ) ) {
$h = $inset['horizontal'];
$v = $inset['vertical'];
$b = $inset['blur'];
$s = $inset['spread'];
$color = $inset['color'];
$css .= 'inset ' . $h . 'px ' . $v . 'px ' . $b . 'px ' . $s . 'px ' . $color;
}
}
if ( $this->field['drop-shadow'] ) {
$drop = $data['drop-shadow'];
if ( filter_var( $drop['checked'], FILTER_VALIDATE_BOOLEAN ) ) {
$h = $drop['horizontal'];
$v = $drop['vertical'];
$b = $drop['blur'];
$s = $drop['spread'];
$color = $drop['color'];
if ( '' !== $css ) {
$css .= ',';
}
$css .= $h . 'px ' . $v . 'px ' . $b . 'px ' . $s . 'px ' . $color;
}
}
if ( '' !== $css ) {
$css = 'box-shadow:' . $css . ';-webkit-box-shadow:' . $css . ';-moz-box-shadow:' . $css . ';-o-box-shadow:' . $css . ';';
}
return $css;
}
/**
* Do enqueue for each field instance.
*
* @return void
*/
public function always_enqueue() {
if ( isset( $this->field['color_alpha'] ) && ( $this->field['color_alpha'] || ( $this->field['color_alpha']['inset-shadow'] || $this->field['color_alpha']['drop-shadow'] ) ) ) {
wp_enqueue_script( 'redux-wp-color-picker-alpha' );
}
}
/**
* Enqueue Function.
* If this field requires any scripts, or CSS define this function and register/enqueue the scripts/css
*
* @since 1.0.0
* @access public
* @return void
*/
public function enqueue() {
$min = Redux_Functions::is_min();
if ( ! wp_style_is( 'wp-color-picker' ) ) {
wp_enqueue_style( 'wp-color-picker' );
}
$dep_array = array( 'jquery', 'wp-color-picker', 'redux-js' );
wp_enqueue_script(
'redux-field-box-shadow',
Redux_Core::$url . 'inc/fields/box_shadow/redux-box-shadow' . $min . '.js',
$dep_array,
$this->timestamp,
true
);
wp_enqueue_style(
'redux-nouislider',
Redux_Core::$url . 'assets/css/vendor/nouislider' . $min . '.css',
array(),
'5.0.0'
);
wp_enqueue_script(
'redux-nouislider',
Redux_Core::$url . 'assets/js/vendor/nouislider/redux.jquery.nouislider' . $min . '.js',
array( 'jquery' ),
'5.0.0',
true
);
if ( $this->parent->args['dev_mode'] ) {
wp_enqueue_style(
'redux-field-box-shadow',
Redux_Core::$url . 'inc/fields/box_shadow/redux-box-shadow.css',
array(),
time()
);
wp_enqueue_style( 'redux-color-picker' );
}
}
}
}

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux
*/
echo null;

View File

@@ -0,0 +1,27 @@
.redux-main .redux-container-box_shadow .box-shadow-inset { margin: 0 auto; }
.redux-main .redux-container-box_shadow .box-shadow-inset #shadow-result { padding: 20px; margin-bottom: 20px; margin-top: 20px; min-height: 180px; border: 0 solid #ddd; background: #f1f1f1; -webkit-transition: all 0.2s ease; transition: all 0.2s ease; }
.redux-main .redux-container-box_shadow .box-shadow-inset .row-content:after, .redux-main .redux-container-box_shadow .box-shadow-inset .row:after { clear: both; content: " "; display: block; height: 0; visibility: hidden; }
.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 { width: 50%; float: left; -webkit-box-sizing: border-box; box-sizing: border-box; }
.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2.disabled label strong { color: #cccccc; }
.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 label { color: #999999; }
.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 .wp-picker-container.disabled { pointer-events: none; opacity: 0.4; z-index: 200; background: 0; padding: 0 !important; }
.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 .wp-picker-container.disabled button { background-color: #888; }
.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 .wp-picker-container.disabled a { z-index: -1; }
.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 ul li { padding-bottom: 10px; }
.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2:first-child { padding-right: 20px; }
.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2:last-child { padding-left: 20px; }
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtYm94LXNoYWRvdy5jc3MiLCJzb3VyY2VzIjpbInJlZHV4LWJveC1zaGFkb3cuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUVRLFdBRkcsQ0FDUCwyQkFBMkIsQ0FDdkIsaUJBQWlCLENBQUMsRUFDZCxNQUFNLEVBQUUsTUFBTSxHQXdFakI7O0FBM0VULEFBS1ksV0FMRCxDQUNQLDJCQUEyQixDQUN2QixpQkFBaUIsQ0FHYixjQUFjLENBQUMsRUFDWCxPQUFPLEVBQUUsSUFBSSxFQUNiLGFBQWEsRUFBRSxJQUFJLEVBQ25CLFVBQVUsRUFBRSxJQUFJLEVBQ2hCLFVBQVUsRUFBRSxLQUFLLEVBQ2pCLE1BQU0sRUFBRSxZQUFZLEVBQ3BCLFVBQVUsRUFBRSxPQUFPLEVBQ25CLFVBQVUsRUFBRSxhQUFhLEdBRTVCOztBQWRiLEFBZ0JZLFdBaEJELENBQ1AsMkJBQTJCLENBQ3ZCLGlCQUFpQixDQWNiLFlBQVksQUFBQSxNQUFNLEVBaEI5QixXQUFXLENBQ1AsMkJBQTJCLENBQ3ZCLGlCQUFpQixDQWViLElBQUksQUFBQSxNQUFNLENBQUMsRUFDUCxLQUFLLEVBQUUsSUFBSSxFQUNYLE9BQU8sRUFBRSxHQUFHLEVBQ1osT0FBTyxFQUFFLEtBQUssRUFDZCxNQUFNLEVBQUUsQ0FBQyxFQUNULFVBQVUsRUFBRSxNQUFNLEdBQ3JCOztBQXZCYixBQTBCZ0IsV0ExQkwsQ0FDUCwyQkFBMkIsQ0FDdkIsaUJBQWlCLENBdUJiLElBQUksQ0FDQSxNQUFNLENBQUMsRUFDSCxLQUFLLEVBQUUsR0FBRyxFQUNWLEtBQUssRUFBRSxJQUFJLEVBQ1gsVUFBVSxFQUFFLFVBQVUsR0E0Q3pCOztBQXpFakIsQUFpQzRCLFdBakNqQixDQUNQLDJCQUEyQixDQUN2QixpQkFBaUIsQ0F1QmIsSUFBSSxDQUNBLE1BQU0sQUFLRCxTQUFTLENBQ04sS0FBSyxDQUNELE1BQU0sQ0FBQyxFQUNILEtBQUssRUFBRSxPQUFPLEdBQ2pCOztBQW5DN0IsQUF1Q29CLFdBdkNULENBQ1AsMkJBQTJCLENBQ3ZCLGlCQUFpQixDQXVCYixJQUFJLENBQ0EsTUFBTSxDQWFGLEtBQUssQ0FBQyxFQUNGLEtBQUssRUFBRSxPQUFPLEdBQ2pCOztBQXpDckIsQUE0Q3dCLFdBNUNiLENBQ1AsMkJBQTJCLENBQ3ZCLGlCQUFpQixDQXVCYixJQUFJLENBQ0EsTUFBTSxDQWlCRixvQkFBb0IsQUFDZixTQUFTLENBQUMsRUFDUCxjQUFjLEVBQUMsSUFBSSxFQU1uQixPQUFPLEVBQUUsR0FBRyxFQUNaLE9BQU8sRUFBRSxHQUFHLEVBQ1osVUFBVSxFQUFFLENBQUMsRUFDYixPQUFPLEVBQUUsQ0FBQyxDQUFBLFVBQVUsR0FLdkI7O0FBM0R6QixBQStDNEIsV0EvQ2pCLENBQ1AsMkJBQTJCLENBQ3ZCLGlCQUFpQixDQXVCYixJQUFJLENBQ0EsTUFBTSxDQWlCRixvQkFBb0IsQUFDZixTQUFTLENBR04sTUFBTSxDQUFDLEVBQ0gsZ0JBQWdCLEVBQUUsSUFBSSxHQUN6Qjs7QUFqRDdCLEFBd0Q0QixXQXhEakIsQ0FDUCwyQkFBMkIsQ0FDdkIsaUJBQWlCLENBdUJiLElBQUksQ0FDQSxNQUFNLENBaUJGLG9CQUFvQixBQUNmLFNBQVMsQ0FZTixDQUFDLENBQUMsRUFDRSxPQUFPLEVBQUUsRUFBRSxHQUNkOztBQTFEN0IsQUE4RG9CLFdBOURULENBQ1AsMkJBQTJCLENBQ3ZCLGlCQUFpQixDQXVCYixJQUFJLENBQ0EsTUFBTSxDQW9DRixFQUFFLENBQUMsRUFBRSxDQUFDLEVBQ0YsY0FBYyxFQUFFLElBQUksR0FDdkI7O0FBaEVyQixBQWtFb0IsV0FsRVQsQ0FDUCwyQkFBMkIsQ0FDdkIsaUJBQWlCLENBdUJiLElBQUksQ0FDQSxNQUFNLEFBd0NELFlBQVksQ0FBQyxFQUNWLGFBQWEsRUFBRSxJQUFJLEdBQ3RCOztBQXBFckIsQUFzRW9CLFdBdEVULENBQ1AsMkJBQTJCLENBQ3ZCLGlCQUFpQixDQXVCYixJQUFJLENBQ0EsTUFBTSxBQTRDRCxXQUFXLENBQUMsRUFDVCxZQUFZLEVBQUUsSUFBSSxHQUNyQiJ9 */
/*# sourceMappingURL=redux-box-shadow.css.map */

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,206 @@
/**
* Field Box Shadow (box_shadow)
*
* Author: Kevin Provance (kprovance)
*/
/* global jQuery, document, redux, redux_change */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.box_shadow = redux.field_objects.box_shadow || {};
redux.field_objects.box_shadow.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-box_shadow:visible' );
}
$( selector ).each(
function () {
var el = $( this );
var parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
redux.field_objects.box_shadow.colorPicker( el );
redux.field_objects.box_shadow.sliderInit( el );
el.find( '.checkbox' ).on(
'click',
function () {
var val = 0;
var col = $( this ).parents( '.col-2' );
var slider = col.find( '.redux-box-shadow-slider' );
var color = col.find( '.wp-picker-container' );
var label = $( this ).parent( 'label' );
if ( $( this ).is( ':checked' ) ) {
val = $( this ).parent().find( '.checkbox-check' ).attr( 'data-val' );
color.removeClass( 'disabled' );
slider.attr( 'disabled', false );
label.removeClass( 'pro-disabled' );
} else {
color.addClass( 'disabled' );
slider.attr( 'disabled', true );
label.addClass( 'pro-disabled' );
}
$( this ).parent().find( '.checkbox-check' ).val( val );
redux.field_objects.box_shadow.changeValue( $( this ), true );
}
);
}
);
};
redux.field_objects.box_shadow.colorPicker = function ( el ) {
var colorPicker = el.find( '.redux-color-init' ).wpColorPicker(
{
change: function ( e, ui ) {
$( this ).val( ui.color.toString() );
redux.field_objects.box_shadow.changeValue( $( this ), true );
},
clear: function ( e, ui ) {
$( this ).val( ui.color.toString() );
redux.field_objects.box_shadow.changeValue( $( this ).parent().find( '.redux-color-init' ), true );
}
}
);
var id = el.data( 'id' );
colorPicker.each(
function () {
var column = $( this ).parents( '.col-2' );
var shadow = column.data( 'shadow' );
var label = column.find( 'label[for="' + id + '-' + shadow + '-shadow"]' );
var container = column.find( '.wp-picker-container' );
if ( label.hasClass( 'pro-disabled' ) ) {
container.addClass( 'disabled' );
}
}
);
};
redux.field_objects.box_shadow.sliderInit = function ( el ) {
el.find( '.redux-box-shadow-slider' ).each(
function () {
var mainID = $( this ).data( 'id' );
var minVal = $( this ).data( 'min' );
var maxVal = $( this ).data( 'max' );
var step = $( this ).data( 'step' );
var def = $( this ).data( 'default' );
var label = $( this ).data( 'label' );
var rtl = Boolean( $( this ).data( 'rtl' ) );
var range = [minVal, maxVal];
var slider = $( this ).reduxNoUiSlider(
{
range: range,
start: def,
handles: 1,
step: step,
connect: 'lower',
behaviour: 'tap-drag',
rtl: rtl,
serialization: {
resolution: step
},
slide: function () {
var val = slider.val();
$( this ).next( '#redux-slider-value-' + mainID ).attr( 'value', val );
$( this ).prev( 'label' ).html(
label + ': <strong>' + val + 'px</strong>'
);
redux.field_objects.box_shadow.changeValue( $( this ), true );
}
}
);
}
);
};
redux.field_objects.box_shadow.changeValue = function ( el, update ) {
var parent = el.parents( '.redux-container-box_shadow' );
var container = parent.find( '.box-shadow-controls' );
var inset = container.find( '.shadow-inset' );
var drop = container.find( '.shadow-drop' );
var mainID = parent.data( 'id' );
var preview = parent.find( '#shadow-result' );
var css = '';
var insetColor;
var insetH;
var insetV;
var insetB;
var insetS;
var dropColor;
var dropH;
var dropV;
var dropB;
var dropS;
if ( inset.length > 0 ) {
if ( inset.find( '.checkbox' ).is( ':checked' ) ) {
insetColor = parent.find( '#' + mainID + '-inset-color' ).val();
insetH = parent.find( '#redux-slider-value-' + mainID + '-inset-horizontal' ).val();
insetV = parent.find( '#redux-slider-value-' + mainID + '-inset-vertical' ).val();
insetB = parent.find( '#redux-slider-value-' + mainID + '-inset-blur' ).val();
insetS = parent.find( '#redux-slider-value-' + mainID + '-inset-spread' ).val();
css = 'inset ' + insetH + 'px ' + insetV + 'px ' + insetB + 'px ' + insetS + 'px ' + insetColor;
}
}
if ( drop.length > 0 ) {
if ( drop.find( '.checkbox' ).is( ':checked' ) ) {
dropColor = parent.find( '#' + mainID + '-drop-color' ).val();
dropH = parent.find( '#redux-slider-value-' + mainID + '-drop-horizontal' ).val();
dropV = parent.find( '#redux-slider-value-' + mainID + '-drop-vertical' ).val();
dropB = parent.find( '#redux-slider-value-' + mainID + '-drop-blur' ).val();
dropS = parent.find( '#redux-slider-value-' + mainID + '-drop-spread' ).val();
if ( '' !== css ) {
css = css + ',';
}
css = css + dropH + 'px ' + dropV + 'px ' + dropB + 'px ' + dropS + 'px ' + dropColor;
}
}
preview.css(
{
'box-shadow': css,
'-webkit-box-shadow': css,
'-moz-box-shadow': css,
'-o-box-shadow': css
}
);
if ( update ) {
redux_change( el );
}
};
} )( jQuery );

View File

@@ -0,0 +1 @@
!function(l){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.box_shadow=redux.field_objects.box_shadow||{},redux.field_objects.box_shadow.init=function(e){e=e||l(document).find(".redux-group-tab:visible").find(".redux-container-box_shadow:visible"),l(e).each(function(){var e=l(this),d=e;(d=e.hasClass("redux-field-container")?d:e.parents(".redux-field-container:first")).is(":hidden")||d.hasClass("redux-field-init")&&(d.removeClass("redux-field-init"),redux.field_objects.box_shadow.colorPicker(e),redux.field_objects.box_shadow.sliderInit(e),e.find(".checkbox").on("click",function(){var e=0,d=l(this).parents(".col-2"),i=d.find(".redux-box-shadow-slider"),d=d.find(".wp-picker-container"),a=l(this).parent("label");l(this).is(":checked")?(e=l(this).parent().find(".checkbox-check").attr("data-val"),d.removeClass("disabled"),i.attr("disabled",!1),a.removeClass("pro-disabled")):(d.addClass("disabled"),i.attr("disabled",!0),a.addClass("pro-disabled")),l(this).parent().find(".checkbox-check").val(e),redux.field_objects.box_shadow.changeValue(l(this),!0)}))})},redux.field_objects.box_shadow.colorPicker=function(e){var d=e.find(".redux-color-init").wpColorPicker({change:function(e,d){l(this).val(d.color.toString()),redux.field_objects.box_shadow.changeValue(l(this),!0)},clear:function(e,d){l(this).val(d.color.toString()),redux.field_objects.box_shadow.changeValue(l(this).parent().find(".redux-color-init"),!0)}}),i=e.data("id");d.each(function(){var e=l(this).parents(".col-2"),d=e.data("shadow"),d=e.find('label[for="'+i+"-"+d+'-shadow"]'),e=e.find(".wp-picker-container");d.hasClass("pro-disabled")&&e.addClass("disabled")})},redux.field_objects.box_shadow.sliderInit=function(e){e.find(".redux-box-shadow-slider").each(function(){var d=l(this).data("id"),e=l(this).data("min"),i=l(this).data("max"),a=l(this).data("step"),o=l(this).data("default"),s=l(this).data("label"),r=Boolean(l(this).data("rtl")),e=[e,i],t=l(this).reduxNoUiSlider({range:e,start:o,handles:1,step:a,connect:"lower",behaviour:"tap-drag",rtl:r,serialization:{resolution:a},slide:function(){var e=t.val();l(this).next("#redux-slider-value-"+d).attr("value",e),l(this).prev("label").html(s+": <strong>"+e+"px</strong>"),redux.field_objects.box_shadow.changeValue(l(this),!0)}})})},redux.field_objects.box_shadow.changeValue=function(e,d){var i=e.parents(".redux-container-box_shadow"),a=i.find(".box-shadow-controls"),o=a.find(".shadow-inset"),a=a.find(".shadow-drop"),s=i.data("id"),r=i.find("#shadow-result"),t="";0<o.length&&o.find(".checkbox").is(":checked")&&(o=i.find("#"+s+"-inset-color").val(),t="inset "+i.find("#redux-slider-value-"+s+"-inset-horizontal").val()+"px "+i.find("#redux-slider-value-"+s+"-inset-vertical").val()+"px "+i.find("#redux-slider-value-"+s+"-inset-blur").val()+"px "+i.find("#redux-slider-value-"+s+"-inset-spread").val()+"px "+o),0<a.length&&a.find(".checkbox").is(":checked")&&(o=i.find("#"+s+"-drop-color").val(),""!==t&&(t+=","),t=t+i.find("#redux-slider-value-"+s+"-drop-horizontal").val()+"px "+i.find("#redux-slider-value-"+s+"-drop-vertical").val()+"px "+i.find("#redux-slider-value-"+s+"-drop-blur").val()+"px "+i.find("#redux-slider-value-"+s+"-drop-spread").val()+"px "+o),r.css({"box-shadow":t,"-webkit-box-shadow":t,"-moz-box-shadow":t,"-o-box-shadow":t}),d&&redux_change(e)}}(jQuery);

View File

@@ -0,0 +1,78 @@
.redux-main {
.redux-container-box_shadow {
.box-shadow-inset {
margin: 0 auto;
#shadow-result {
padding: 20px;
margin-bottom: 20px;
margin-top: 20px;
min-height: 180px;
border: 0 solid #ddd;
background: #f1f1f1;
transition: all 0.2s ease;
}
.row-content:after,
.row:after {
clear: both;
content: " ";
display: block;
height: 0;
visibility: hidden;
}
.row {
.col-2 {
width: 50%;
float: left;
box-sizing: border-box;
&.disabled {
label {
strong {
color: #cccccc;
}
}
}
label {
color: #999999;
}
.wp-picker-container {
&.disabled {
pointer-events:none;
button {
background-color: #888;
}
opacity: 0.4;
z-index: 200;
background: 0;
padding: 0!important;
a {
z-index: -1;
}
}
}
ul li {
padding-bottom: 10px;
}
&:first-child {
padding-right: 20px;
}
&:last-child {
padding-left: 20px;
}
}
}
}
}
}

View File

@@ -0,0 +1,143 @@
<?php
/**
* Button Set Field.
*
* @package ReduxFramework/Fields
* @author Dovy Paukstys & Kevin Provance (kprovance)
* @version 4.0.0
*/
defined( 'ABSPATH' ) || exit;
// Don't duplicate me!
if ( ! class_exists( 'Redux_Button_Set', false ) ) {
/**
* Main Redux_button_set class
*
* @since 1.0.0
*/
class Redux_Button_Set extends Redux_Field {
/**
* Set field defaults.
*/
public function set_defaults() {
$defaults = array(
'options' => array(),
'multi' => false,
);
$this->field = wp_parse_args( $this->field, $defaults );
}
/**
* Field Render Function.
* Takes the vars and outputs the HTML for the field in the settings
*
* @since 1.0.0
* @access public
* @return void
*/
public function render() {
if ( ! empty( $this->field['data'] ) && empty( $this->field['options'] ) ) {
if ( empty( $this->field['args'] ) ) {
$this->field['args'] = array();
}
$this->field['options'] = $this->parent->get_wordpress_data( $this->field['data'], $this->field['args'], $this->value );
if ( empty( $this->field['options'] ) ) {
return;
}
}
$is_multi = isset( $this->field['multi'] ) && true === (bool) $this->field['multi'];
$name = $this->field['name'] . $this->field['name_suffix'];
// multi => true renders the field multi-selectable (checkbox vs radio).
echo '<div class="buttonset ui-buttonset">';
if ( $is_multi ) {
$s = '';
if ( empty( $this->value ) ) {
$s = $name;
}
echo '<input type="hidden" data-name="' . esc_attr( $name ) . '" class="buttonset-empty" name="' . esc_attr( $s ) . '" value=""/>';
$name = $name . '[]';
}
foreach ( $this->field['options'] as $k => $v ) {
$selected = '';
if ( $is_multi ) {
$post_value = '';
$type = 'checkbox';
if ( ! empty( $this->value ) && ! is_array( $this->value ) ) {
$this->value = array( $this->value );
}
if ( is_array( $this->value ) && in_array( (string) $k, $this->value, true ) ) {
$selected = 'checked="checked"';
$post_value = $k;
}
} else {
$type = 'radio';
if ( is_scalar( $this->value ) ) {
$selected = checked( $this->value, $k, false );
}
}
$the_val = $k;
$the_name = $name;
$data_val = '';
$multi_class = '';
if ( $is_multi ) {
$the_val = '';
$the_name = '';
$data_val = ' data-val=' . $k;
$hidden_name = $name;
$multi_class = 'multi ';
if ( '' === $post_value ) {
$hidden_name = '';
}
echo '<input type="hidden" class="buttonset-check" id="' . esc_attr( $this->field['id'] ) . '-buttonset' . esc_attr( $k ) . '-hidden" name="' . esc_attr( $hidden_name ) . '" value="' . esc_attr( $post_value ) . '"/>';
}
echo '<input' . esc_attr( $data_val ) . ' data-id="' . esc_attr( $this->field['id'] ) . '" type="' . esc_attr( $type ) . '" id="' . esc_attr( $this->field['id'] ) . '-buttonset' . esc_attr( $k ) . '" name="' . esc_attr( $the_name ) . '" class="buttonset-item ' . esc_attr( $multi_class ) . esc_attr( $this->field['class'] ) . '" value="' . esc_attr( $the_val ) . '" ' . esc_html( $selected ) . '/>';
echo '<label for="' . esc_attr( $this->field['id'] ) . '-buttonset' . esc_attr( $k ) . '">' . esc_html( $v ) . '</label>';
}
echo '</div>';
}
/**
* Enqueue Function.
* If this field requires any scripts, or css define this function and register/enqueue the scripts/css
*
* @since 1.0.0
* @access public
* @return void
*/
public function enqueue() {
wp_enqueue_script(
'redux-field-button-set',
Redux_Core::$url . 'inc/fields/button_set/redux-button-set' . Redux_Functions::is_min() . '.js',
array( 'jquery', 'jquery-ui-core', 'redux-js' ),
$this->timestamp,
true
);
}
}
}
class_alias( 'Redux_Button_Set', 'ReduxFramework_Button_Set' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
_deprecated_file( 'field_button_set.php', '4.3', 'class-redux-button-set.php', 'This file has been renamed and is no longer used in Redux 4. Please change any references to it as it will be removed in future versions of Redux.' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
echo null;

View File

@@ -0,0 +1,84 @@
/**
* Field Button Set (button_set)
*/
/*global jQuery, redux, redux_change */
(function( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.button_set = redux.field_objects.button_set || {};
redux.field_objects.button_set.init = function( selector ) {
selector = $.redux.getSelector( selector, 'button_set' );
$( selector ).each(
function() {
var el = $( this );
var parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
el.find( '.buttonset' ).each(
function() {
if ( $( this ).is( ':checkbox' ) ) {
$( this ).find( '.buttonset-item' ).button();
}
$( this ).controlgroup();
}
);
el.find( '.buttonset-item.multi' ).on(
'click',
function() {
var val = '';
var name = '';
var id = $( this ).attr( 'id' );
var empty = $( this ).parent().find( '.buttonset-empty' );
var idName = empty.attr( 'data-name' );
var isChecked = false;
$( this ).parent().find( '.buttonset-item' ).each(
function() {
if ( $( this ).is( ':checked' ) ) {
isChecked = true;
}
}
);
if ( isChecked ) {
empty.attr( 'name', '' );
} else {
empty.attr( 'name', idName );
}
if ( $( this ).is( ':checked' ) ) {
val = $( this ).attr( 'data-val' );
name = idName + '[]';
}
$( this ).parent().find( '#' + id + '-hidden.buttonset-check' ).val( val );
$( this ).parent().find( '#' + id + '-hidden.buttonset-check' ).attr( 'name', name );
redux_change( $( this ) );
}
);
}
);
};
})( jQuery );

View File

@@ -0,0 +1 @@
!function(a){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.button_set=redux.field_objects.button_set||{},redux.field_objects.button_set.init=function(t){t=a.redux.getSelector(t,"button_set"),a(t).each(function(){var t=a(this),e=t;(e=t.hasClass("redux-field-container")?e:t.parents(".redux-field-container:first")).is(":hidden")||e.hasClass("redux-field-init")&&(e.removeClass("redux-field-init"),t.find(".buttonset").each(function(){a(this).is(":checkbox")&&a(this).find(".buttonset-item").button(),a(this).controlgroup()}),t.find(".buttonset-item.multi").on("click",function(){var t="",e="",i=a(this).attr("id"),n=a(this).parent().find(".buttonset-empty"),s=n.attr("data-name"),d=!1;a(this).parent().find(".buttonset-item").each(function(){a(this).is(":checked")&&(d=!0)}),d?n.attr("name",""):n.attr("name",s),a(this).is(":checked")&&(t=a(this).attr("data-val"),e=s+"[]"),a(this).parent().find("#"+i+"-hidden.buttonset-check").val(t),a(this).parent().find("#"+i+"-hidden.buttonset-check").attr("name",e),redux_change(a(this))}))})}}(jQuery);

View File

@@ -0,0 +1,146 @@
<?php
/**
* Checkbox Field.
*
* @package ReduxFramework/Fields
* @author Dovy Paukstys & Kevin Provance (kprovance)
* @version 4.0.0
*/
defined( 'ABSPATH' ) || exit;
// Don't duplicate me!
if ( ! class_exists( 'Redux_Checkbox', false ) ) {
/**
* Main Redux_checkbox class
*
* @since 1.0.0
*/
class Redux_Checkbox extends Redux_Field {
/**
* Field Render Function.
* Takes the vars and outputs the HTML for the field in the settings
*
* @since 1.0.0
* @access public
* @return void
*/
public function render() {
if ( ! empty( $this->field['data'] ) && empty( $this->field['options'] ) ) {
if ( empty( $this->field['args'] ) ) {
$this->field['args'] = array();
}
$this->field['options'] = $this->parent->wordpress_data->get( $this->field['data'], $this->field['args'], $this->parent->args['opt_name'], $this->value );
if ( empty( $this->field['options'] ) ) {
return;
}
}
$this->field['data_class'] = ( isset( $this->field['multi_layout'] ) ) ? 'data-' . $this->field['multi_layout'] : 'data-full';
if ( ! empty( $this->field['options'] ) && ( is_array( $this->field['options'] ) || is_array( $this->field['default'] ) ) ) {
echo '<ul class="' . esc_attr( $this->field['data_class'] ) . '">';
if ( ! isset( $this->value ) ) {
$this->value = array();
}
if ( ! is_array( $this->value ) ) {
$this->value = array();
}
if ( empty( $this->field['options'] ) && isset( $this->field['default'] ) && is_array( $this->field['default'] ) ) {
$this->field['options'] = $this->field['default'];
}
foreach ( $this->field['options'] as $k => $v ) {
if ( empty( $this->value[ $k ] ) ) {
$this->value[ $k ] = '';
}
echo '<li>';
$ident_1 = strtr(
$this->parent->args['opt_name'] . '[' . $this->field['id'] . '][' . $k . ']',
array(
'[' => '_',
']' => '',
)
);
$ident_2 = array_search( $k, array_keys( $this->field['options'] ), true );
$id = $ident_1 . '_' . $ident_2;
echo '<label for="' . esc_attr( $id ) . '">';
echo '<input type="hidden" class="checkbox-check" data-val="1" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] . '[' . $k . ']' ) . '" value="' . esc_attr( $this->value[ $k ] ) . '"/>';
echo '<input type="checkbox" class="checkbox ' . esc_attr( $this->field['class'] ) . '" id="' . esc_attr( $id ) . '" value="1" ' . checked( $this->value[ $k ], '1', false ) . '/>';
echo ' ' . esc_attr( $v ) . '</label>';
echo '</li>';
}
echo '</ul>';
} elseif ( empty( $this->field['data'] ) ) {
echo '<ul class="data-full">';
echo '<li>';
if ( ! empty( $this->field['label'] ) ) {
echo '<label>';
}
$ident_1 = strtr(
$this->parent->args['opt_name'] . '[' . $this->field['id'] . ']',
array(
'[' => '_',
']' => '',
)
);
// Got the "Checked" status as "0" or "1" then insert it as the "value" option.
echo '<input type="hidden" class="checkbox-check" data-val="1" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '" value="' . esc_attr( $this->value ) . '"/>';
echo '<input type="checkbox" id="' . esc_attr( $ident_1 ) . '" value="1" class="checkbox ' . esc_attr( $this->field['class'] ) . '" ' . checked( $this->value, '1', false ) . '/>';
if ( ! empty( $this->field['label'] ) ) {
echo ' ' . esc_html( $this->field['label'] );
echo '</label>';
}
echo '</li>';
echo '</ul>';
}
}
/**
* Enqueue Function.
* If this field requires any scripts, or css define this function and register/enqueue the scripts/css
*
* @since 1.0.0
* @access public
* @return void
*/
public function enqueue() {
if ( $this->parent->args['dev_mode'] ) {
wp_enqueue_style(
'redux-field-checkbox',
Redux_Core::$url . 'inc/fields/checkbox/redux-checkbox.css',
array(),
$this->timestamp
);
}
wp_enqueue_script(
'redux-field-checkbox',
Redux_Core::$url . 'inc/fields/checkbox/redux-checkbox' . Redux_Functions::is_min() . '.js',
array( 'jquery', 'redux-js' ),
$this->timestamp,
true
);
}
}
}
class_alias( 'Redux_Checkbox', 'ReduxFramework_Checkbox' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
_deprecated_file( 'field_checkbox.php', '4.3', 'class-redux-checkbox.php', 'This file has been renamed and is no longer used in Redux 4. Please change any references to it as it will be removed in future versions of Redux.' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
echo null;

View File

@@ -0,0 +1,7 @@
.redux-container-checkbox label { vertical-align: top; width: 100%; }
.redux-container-checkbox label .field-desc { margin-top: 0; float: left; width: 93%; clear: none; }
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtY2hlY2tib3guY3NzIiwic291cmNlcyI6WyJyZWR1eC1jaGVja2JveC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLEFBQ0kseUJBRHFCLENBQ3JCLEtBQUssQ0FBQyxFQUNGLGNBQWMsRUFBRSxHQUFHLEVBQ25CLEtBQUssRUFBRSxJQUFJLEdBUWQ7O0FBWEwsQUFLUSx5QkFMaUIsQ0FDckIsS0FBSyxDQUlELFdBQVcsQ0FBQyxFQUNSLFVBQVUsRUFBRSxDQUFDLEVBQ2IsS0FBSyxFQUFFLElBQUksRUFDWCxLQUFLLEVBQUUsR0FBRyxFQUNWLEtBQUssRUFBRSxJQUFJLEdBQ2QifQ== */
/*# sourceMappingURL=redux-checkbox.css.map */

View File

@@ -0,0 +1 @@
{"version":3,"sources":["redux-checkbox.scss","redux-checkbox.css"],"names":[],"mappings":"AAAA,kCAAA,mBACI,ECEI,WAAW,EAAA;;ADHnB,8CCMY,aAAa,EACb,WAAW,EACX,UAAU,EACV,WAAW,EAAA;;AALvB,6dAA6d","file":"redux-checkbox.css","sourcesContent":[".redux-container-checkbox {\r\n label {\r\n vertical-align: top;\r\n width: 100%;\r\n\r\n .field-desc {\r\n margin-top: 0;\r\n float: left;\r\n width: 93%;\r\n clear: none;\r\n }\r\n }\r\n}\r\n",".redux-container-checkbox label { vertical-align: top; width: 100%; }\n\n.redux-container-checkbox label .field-desc { margin-top: 0; float: left; width: 93%; clear: none; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtY2hlY2tib3guY3NzIiwic291cmNlcyI6WyJyZWR1eC1jaGVja2JveC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLEFBQ0kseUJBRHFCLENBQ3JCLEtBQUssQ0FBQyxFQUNGLGNBQWMsRUFBRSxHQUFHLEVBQ25CLEtBQUssRUFBRSxJQUFJLEdBUWQ7O0FBWEwsQUFLUSx5QkFMaUIsQ0FDckIsS0FBSyxDQUlELFdBQVcsQ0FBQyxFQUNSLFVBQVUsRUFBRSxDQUFDLEVBQ2IsS0FBSyxFQUFFLElBQUksRUFDWCxLQUFLLEVBQUUsR0FBRyxFQUNWLEtBQUssRUFBRSxJQUFJLEdBQ2QifQ== */\n\n/*# sourceMappingURL=redux-checkbox.css.map */\n"]}

View File

@@ -0,0 +1,55 @@
/**
* Redux Checkbox
* Dependencies : jquery
* Feature added by : Dovy Paukstys
* Date : 17 June 2014
*/
/*global redux_change, redux*/
(function( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.checkbox = redux.field_objects.checkbox || {};
redux.field_objects.checkbox.init = function( selector ) {
selector = $.redux.getSelector( selector, 'checkbox' );
$( selector ).each(
function() {
var el = $( this );
var parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
el.find( '.checkbox' ).on(
'click',
function() {
var val = 0;
if ( $( this ).is( ':checked' ) ) {
val = $( this ).parent().find( '.checkbox-check' ).attr( 'data-val' );
}
$( this ).parent().find( '.checkbox-check' ).val( val );
redux_change( $( this ) );
}
);
}
);
};
})( jQuery );

View File

@@ -0,0 +1 @@
!function(i){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.checkbox=redux.field_objects.checkbox||{},redux.field_objects.checkbox.init=function(e){e=i.redux.getSelector(e,"checkbox"),i(e).each(function(){var e=i(this),c=e;(c=e.hasClass("redux-field-container")?c:e.parents(".redux-field-container:first")).is(":hidden")||c.hasClass("redux-field-init")&&(c.removeClass("redux-field-init"),e.find(".checkbox").on("click",function(){var e=0;i(this).is(":checked")&&(e=i(this).parent().find(".checkbox-check").attr("data-val")),i(this).parent().find(".checkbox-check").val(e),redux_change(i(this))}))})}}(jQuery);

View File

@@ -0,0 +1,13 @@
.redux-container-checkbox {
label {
vertical-align: top;
width: 100%;
.field-desc {
margin-top: 0;
float: left;
width: 93%;
clear: none;
}
}
}

View File

@@ -0,0 +1,168 @@
<?php
/**
* Color Field.
*
* @package ReduxFramework/Fields
* @author Dovy Paukstys & Kevin Provance (kprovance)
* @version 4.0.0
*/
defined( 'ABSPATH' ) || exit;
// Don't duplicate me!
if ( ! class_exists( 'Redux_Color', false ) ) {
/**
* Main Redux_color class
*
* @since 1.0.0
*/
class Redux_Color extends Redux_Field {
/**
* Set field defaults.
*/
public function set_defaults() {
$defaults = array(
'transparent' => true,
'color_alpha' => false,
);
$this->field = wp_parse_args( $this->field, $defaults );
}
/**
* Field Render Function.
* Takes the vars and outputs the HTML for the field in the settings
*
* @since 1.0.0
* @access public
* @return void
*/
public function render() {
if ( isset( $this->field['color_alpha'] ) && $this->field['color_alpha'] ) {
$this->field['class'] = 'alpha-enabled';
}
echo '<input ';
echo 'data-id="' . esc_attr( $this->field['id'] ) . '"';
echo 'name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '"';
echo 'id="' . esc_attr( $this->field['id'] ) . '-color"';
echo 'class="color-picker redux-color redux-color-init ' . esc_attr( $this->field['class'] ) . '"';
echo 'type="text" value="' . esc_attr( $this->value ) . '"';
echo 'data-oldcolor=""';
echo 'data-default-color="' . ( isset( $this->field['default'] ) ? esc_attr( $this->field['default'] ) : '' ) . '"';
$data = array(
'field' => $this->field,
'index' => '',
);
echo Redux_Functions_Ex::output_alpha_data( $data ); // phpcs:ignore WordPress.Security.EscapeOutput
echo '>';
echo '<input type="hidden" class="redux-saved-color" id="' . esc_attr( $this->field['id'] ) . '-saved-color" value="">';
if ( ! isset( $this->field['transparent'] ) || false !== $this->field['transparent'] ) {
$trans_checked = '';
if ( 'transparent' === $this->value ) {
$trans_checked = ' checked="checked"';
}
echo '<label for="' . esc_attr( $this->field['id'] ) . '-transparency" class="color-transparency-check">';
echo '<input type="checkbox" class="checkbox color-transparency ' . esc_attr( $this->field['class'] ) . '" id="' . esc_attr( $this->field['id'] ) . '-transparency" data-id="' . esc_attr( $this->field['id'] ) . '-color" value="1"' . esc_html( $trans_checked ) . '>';
echo esc_html__( 'Transparent', 'redux-framework' );
echo '</label>';
}
}
/**
* Do enqueue for each field instance.
*
* @return void
*/
public function always_enqueue() {
if ( isset( $this->field['color_alpha'] ) && $this->field['color_alpha'] ) {
if ( ! wp_script_is( 'redux-wp-color-picker-alpha' ) ) {
wp_enqueue_script( 'redux-wp-color-picker-alpha' );
}
}
}
/**
* Enqueue Function.
* If this field requires any scripts, or CSS define this function and register/enqueue the scripts/css
*
* @since 1.0.0
* @access public
* @return void
*/
public function enqueue() {
if ( $this->parent->args['dev_mode'] ) {
wp_enqueue_style( 'redux-color-picker' );
}
if ( ! wp_style_is( 'wp-color-picker' ) ) {
wp_enqueue_style( 'wp-color-picker' );
}
$dep_array = array( 'jquery', 'wp-color-picker', 'redux-js' );
wp_enqueue_script(
'redux-field-color',
Redux_Core::$url . 'inc/fields/color/redux-color' . Redux_Functions::is_min() . '.js',
$dep_array,
$this->timestamp,
true
);
}
/**
* Generate CSS style (unused, but needed).
*
* @param string $data Field data.
*
* @return string
*/
public function css_style( $data ): string {
return '';
}
/**
* Output CSS styling.
*
* @param string|null|array $style CSS style.
*/
public function output( $style = '' ) {
if ( ! empty( $this->value ) ) {
$mode = ( isset( $this->field['mode'] ) && ! empty( $this->field['mode'] ) ? $this->field['mode'] : 'color' );
$style = $mode . ':' . $this->value . ';';
if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) {
$css = Redux_Functions::parse_css( $this->field['output'], $style, $this->value );
$this->parent->outputCSS .= $css;
}
if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) {
$css = Redux_Functions::parse_css( $this->field['compiler'], $style, $this->value );
$this->parent->compilerCSS .= $css;
}
}
}
/**
* Enable output_variables to be generated.
*
* @since 4.0.3
* @return void
*/
public function output_variables() {
// No code needed, just defining the method is enough.
}
}
}
class_alias( 'Redux_Color', 'ReduxFramework_Color' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
_deprecated_file( 'field_color.php', '4.3', 'class-redux-color.php', 'This file has been renamed and is no longer used in Redux 4. Please change any references to it as it will be removed in future versions of Redux.' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
echo null;

View File

@@ -0,0 +1,139 @@
/**
* Field Color (color)
*/
/*global jQuery, redux_change, redux, colorValidate */
(function( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.color = redux.field_objects.color || {};
redux.field_objects.color.init = function( selector ) {
selector = $.redux.getSelector( selector, 'color' );
$( selector ).each(
function() {
var el = $( this );
var parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
if ( el.find( 'input.redux-color' ).hasClass( 'alpha-enabled' ) ) {
el.addClass( 'alpha-enabled' );
}
el.find( '.redux-color-init' ).wpColorPicker(
{
change: function( e, ui ) {
$( this ).val( ui.color.toString() );
redux_change( $( this ) );
el.find( '#' + e.target.getAttribute( 'data-id' ) + '-transparency' ).prop( 'checked', false );
}, clear: function() {
$( this ).val( '' );
redux_change( $( this ).parent().find( '.redux-color-init' ) );
}
}
);
el.find( '.redux-color' ).on(
'focus',
function() {
$( this ).data( 'oldcolor', $( this ).val() );
}
);
el.find( '.redux-color' ).on(
'keyup',
function() {
var value = $( this ).val();
var color = colorValidate( this );
var id = '#' + $( this ).attr( 'id' );
if ( 'transparent' === value ) {
$( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' );
el.find( id + '-transparency' ).prop( 'checked', true );
} else {
el.find( id + '-transparency' ).prop( 'checked', false );
if ( color && color !== $( this ).val() ) {
$( this ).val( color );
}
}
}
);
// Replace and validate field on blur.
el.find( '.redux-color' ).on(
'blur',
function() {
var value = $( this ).val();
var id = '#' + $( this ).attr( 'id' );
if ( 'transparent' === value ) {
$( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' );
el.find( id + '-transparency' ).attr( 'checked', 'checked' );
} else {
if ( colorValidate( this ) === value ) {
if ( 0 !== value.indexOf( '#' ) ) {
$( this ).val( $( this ).data( 'oldcolor' ) );
}
}
el.find( id + '-transparency' ).prop( 'checked', false );
}
}
);
// Store the old valid color on keydown.
el.find( '.redux-color' ).on(
'keydown',
function() {
$( this ).data( 'oldkeypress', $( this ).val() );
}
);
// When transparency checkbox is clicked.
el.find( '.color-transparency' ).on(
'click',
function() {
var prevColor;
if ( $( this ).is( ':checked' ) ) {
el.find( '.redux-saved-color' ).val( $( '#' + $( this ).data( 'id' ) ).val() );
el.find( '#' + $( this ).data( 'id' ) ).val( 'transparent' );
el.find( '#' + $( this ).data( 'id' ) ).parents( '.redux-field-container' ).find( '.wp-color-result' ).css( 'background-color', 'transparent' );
} else {
prevColor = $( this ).parents( '.redux-field-container' ).find( '.redux-saved-color' ).val();
if ( '' === prevColor ) {
prevColor = $( '#' + $( this ).data( 'id' ) ).data( 'default-color' );
}
el.find( '#' + $( this ).data( 'id' ) ).parents( '.redux-field-container' ).find( '.wp-color-result' ).css( 'background-color', prevColor );
el.find( '#' + $( this ).data( 'id' ) ).val( prevColor );
}
redux_change( $( this ) );
}
);
}
);
};
})( jQuery );

View File

@@ -0,0 +1 @@
!function(i){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.color=redux.field_objects.color||{},redux.field_objects.color.init=function(r){r=i.redux.getSelector(r,"color"),i(r).each(function(){var a=i(this),r=a;(r=a.hasClass("redux-field-container")?r:a.parents(".redux-field-container:first")).is(":hidden")||r.hasClass("redux-field-init")&&(r.removeClass("redux-field-init"),a.find("input.redux-color").hasClass("alpha-enabled")&&a.addClass("alpha-enabled"),a.find(".redux-color-init").wpColorPicker({change:function(r,t){i(this).val(t.color.toString()),redux_change(i(this)),a.find("#"+r.target.getAttribute("data-id")+"-transparency").prop("checked",!1)},clear:function(){i(this).val(""),redux_change(i(this).parent().find(".redux-color-init"))}}),a.find(".redux-color").on("focus",function(){i(this).data("oldcolor",i(this).val())}),a.find(".redux-color").on("keyup",function(){var r=i(this).val(),t=colorValidate(this),e="#"+i(this).attr("id");"transparent"===r?(i(this).parent().parent().find(".wp-color-result").css("background-color","transparent"),a.find(e+"-transparency").prop("checked",!0)):(a.find(e+"-transparency").prop("checked",!1),t&&t!==i(this).val()&&i(this).val(t))}),a.find(".redux-color").on("blur",function(){var r=i(this).val(),t="#"+i(this).attr("id");"transparent"===r?(i(this).parent().parent().find(".wp-color-result").css("background-color","transparent"),a.find(t+"-transparency").attr("checked","checked")):(colorValidate(this)===r&&0!==r.indexOf("#")&&i(this).val(i(this).data("oldcolor")),a.find(t+"-transparency").prop("checked",!1))}),a.find(".redux-color").on("keydown",function(){i(this).data("oldkeypress",i(this).val())}),a.find(".color-transparency").on("click",function(){var r;i(this).is(":checked")?(a.find(".redux-saved-color").val(i("#"+i(this).data("id")).val()),a.find("#"+i(this).data("id")).val("transparent"),a.find("#"+i(this).data("id")).parents(".redux-field-container").find(".wp-color-result").css("background-color","transparent")):(""===(r=i(this).parents(".redux-field-container").find(".redux-saved-color").val())&&(r=i("#"+i(this).data("id")).data("default-color")),a.find("#"+i(this).data("id")).parents(".redux-field-container").find(".wp-color-result").css("background-color",r),a.find("#"+i(this).data("id")).val(r)),redux_change(i(this))}))})}}(jQuery);

View File

@@ -0,0 +1,229 @@
<?php
/**
* Color Gradient Field.
*
* @package ReduxFramework/Fields
* @author Dovy Paukstys & Kevin Provance (kprovance)
* @version 4.0.0
*/
defined( 'ABSPATH' ) || exit;
// Don't duplicate me!
if ( ! class_exists( 'Redux_Color_Gradient', false ) ) {
/**
* Main Redux_color_gradient class
*
* @since 1.0.0
*/
class Redux_Color_Gradient extends Redux_Field {
/**
* Filters enabled flag.
*
* @var bool
*/
private $filters_enabled = false;
/**
* Redux_Field constructor.
*
* @param array $field Field array.
* @param string $value Field values.
* @param null $redux ReduxFramework object pointer.
*
* @throws ReflectionException Reflection.
*/
public function __construct( $field = array(), $value = null, $redux = null ) { // phpcs:ignore Generic.CodeAnalysis.UselessOverridingMethod
parent::__construct( $field, $value, $redux );
}
/**
* Set field and value defaults.
*/
public function set_defaults() {
// No errors please.
$defaults = array(
'from' => '',
'to' => '',
'gradient-type' => 'linear',
'gradient-angle' => 0,
'gradient-reach' => array(
'from' => 0,
'to' => 100,
),
);
$this->value = Redux_Functions::parse_args( $this->value, $defaults );
$defaults = array(
'preview' => false,
'preview_height' => '150px',
'transparent' => true,
'gradient-type' => false,
'gradient-reach' => false,
'gradient-angle' => false,
);
$this->field = wp_parse_args( $this->field, $defaults );
include_once Redux_Core::$dir . 'inc/lib/gradient-filters/class-redux-gradient-filters.php';
if ( $this->field['gradient-reach'] || $this->field['gradient-angle'] || $this->field['gradient-type'] ) {
include_once Redux_Core::$dir . 'inc/lib/gradient-filters/class-redux-gradient-filters.php';
$this->filters_enabled = true;
}
}
/**
* Field Render Function.
* Takes the vars and outputs the HTML for the field in the settings
*
* @since 1.0.0
* @access public
* @return void
*/
public function render() {
$data = array(
'field' => $this->field,
'value' => $this->value,
);
// Escaping done in function.
// phpcs:ignore WordPress.Security.EscapeOutput
echo Redux_Gradient_Filters::render_select( $data );
$mode_arr = array(
'from',
'to',
);
foreach ( $mode_arr as $mode ) {
$uc_mode = ucfirst( $mode );
echo '<div class="colorGradient ' . esc_html( $mode ) . 'Label">';
echo '<strong>' . esc_html( $uc_mode . ' ' ) . '</strong>&nbsp;';
echo '<input ';
echo 'data-id="' . esc_attr( $this->field['id'] ) . '"';
echo 'id="' . esc_attr( $this->field['id'] ) . '-' . esc_attr( $mode ) . '"';
echo 'name="' . esc_attr( $this->field['name'] ) . esc_attr( $this->field['name_suffix'] ) . '[' . esc_attr( $mode ) . ']"';
echo 'value="' . esc_attr( $this->value[ $mode ] ) . '"';
echo 'class="color-picker redux-color redux-color-init ' . esc_attr( $this->field['class'] ) . '"';
echo 'type="text"';
echo 'data-default-color="' . esc_attr( $this->field['default'][ $mode ] ) . '"';
// Escaping done in function.
// phpcs:ignore WordPress.Security.EscapeOutput
echo Redux_Functions_Ex::output_alpha_data( $data );
echo '>';
echo '<input type="hidden" class="redux-saved-color" id="' . esc_attr( $this->field['id'] ) . '-' . esc_attr( $mode ) . '-saved-color" value="">';
if ( ! isset( $this->field['transparent'] ) || false !== $this->field['transparent'] ) {
$trans_checked = '';
if ( 'transparent' === $this->value[ $mode ] ) {
$trans_checked = ' checked="checked"';
}
echo '<label for="' . esc_attr( $this->field['id'] ) . '-' . esc_html( $mode ) . '-transparency" class="color-transparency-check">';
echo '<input type="checkbox" class="checkbox color-transparency ' . esc_attr( $this->field['class'] ) . '" id="' . esc_attr( $this->field['id'] ) . '-' . esc_attr( $mode ) . '-transparency" data-id="' . esc_attr( $this->field['id'] ) . '-' . esc_attr( $mode ) . '" value="1"' . esc_html( $trans_checked ) . '> ' . esc_html__( 'Transparent', 'redux-framework' );
echo '</label>';
}
echo '</div>';
}
// Escaping done in function.
// phpcs:ignore WordPress.Security.EscapeOutput
echo Redux_Gradient_Filters::render_preview( $data );
// Escaping done in function.
// phpcs:ignore WordPress.Security.EscapeOutput
echo Redux_Gradient_Filters::render_sliders( $data );
}
/**
* Do enqueue for each field instance.
*
* @return void
*/
public function always_enqueue() {
Redux_Gradient_Filters::enqueue( $this->field, $this->filters_enabled );
if ( isset( $this->field['color_alpha'] ) && ( $this->field['color_alpha'] || ( $this->field['color_alpha']['from'] || $this->field['color_alpha']['to'] ) ) ) {
if ( ! wp_script_is( 'redux-wp-color-picker-alpha' ) ) {
wp_enqueue_script( 'redux-wp-color-picker-alpha' );
}
}
}
/**
* Enqueue Function.
* If this field requires any scripts, or CSS define this function and register/enqueue the scripts/css
*
* @since 1.0.0
* @access public
* @return void
*/
public function enqueue() {
wp_enqueue_style( 'wp-color-picker' );
$min = Redux_Functions::isMin();
wp_enqueue_script(
'redux-field-color-gradient',
Redux_Core::$url . 'inc/fields/color_gradient/redux-color-gradient' . $min . '.js',
array( 'jquery', 'wp-color-picker', 'redux-js' ),
$this->timestamp,
true
);
if ( $this->filters_enabled ) {
wp_enqueue_script(
'redux-field-color-gradient',
Redux_Core::$url . 'inc/fields/color_gradient/redux-color-gradient' . $min . '.js',
array( 'jquery', 'wp-color-picker' ),
Redux_Core::$version,
true
);
}
if ( $this->parent->args['dev_mode'] ) {
wp_enqueue_style( 'redux-color-picker' );
wp_enqueue_style(
'redux-field-color_gradient',
Redux_Core::$url . 'inc/fields/color_gradient/redux-color-gradient.css',
array(),
$this->timestamp
);
}
}
/**
* Compile CSS styling for output.
*
* @param string $data CSS data.
*
* @return string
*/
public function css_style( $data ): string {
return Redux_Gradient_Filters::get_output( $data );
}
/**
* Enable output_variables to be generated.
*
* @since 4.0.3
* @return void
*/
public function output_variables() {
// No code needed, just defining the method is enough.
}
}
}
class_alias( 'Redux_Color_Gradient', 'ReduxFramework_Color_Gradient' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
_deprecated_file( 'field_color_gradient.php', '4.3', 'class-redux-color-gradient.php', 'This file has been renamed and is no longer used in Redux 4. Please change any references to it as it will be removed in future versions of Redux.' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
echo null;

View File

@@ -0,0 +1,11 @@
.redux-container-color_gradient .redux-gradient-preview { height: 150px; margin-top: 10px; border-radius: 4px; }
.redux-container-color_gradient .colorGradient, .redux-container-color_gradient .redux-gradient-type { display: inline-block; margin-right: 20px; }
.redux-container-color_gradient .colorGradient strong, .redux-container-color_gradient .redux-gradient-type strong { display: table; margin-bottom: 5px; margin-left: 3px; font-size: 12px; color: #999; }
@media screen and (max-width: 660px) { .redux-container-color_gradient .colorGradient { display: block; text-align: center !important; } }
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtY29sb3ItZ3JhZGllbnQuY3NzIiwic291cmNlcyI6WyJyZWR1eC1jb2xvci1ncmFkaWVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLEFBQ0ksK0JBRDJCLENBQzNCLHVCQUF1QixDQUFDLEVBQ3BCLE1BQU0sRUFBRSxLQUFLLEVBQ2IsVUFBVSxFQUFFLElBQUksRUFDaEIsYUFBYSxFQUFFLEdBQUcsR0FDckI7O0FBTEwsQUFPSSwrQkFQMkIsQ0FPM0IsY0FBYyxFQVBsQiwrQkFBK0IsQ0FRM0Isb0JBQW9CLENBQUMsRUFDakIsT0FBTyxFQUFFLFlBQVksRUFDckIsWUFBWSxFQUFFLElBQUksR0FTckI7O0FBbkJMLEFBWVEsK0JBWnVCLENBTzNCLGNBQWMsQ0FLVixNQUFNLEVBWmQsK0JBQStCLENBUTNCLG9CQUFvQixDQUloQixNQUFNLENBQUMsRUFDSCxPQUFPLEVBQUUsS0FBSyxFQUNkLGFBQWEsRUFBRSxHQUFHLEVBQ2xCLFdBQVcsRUFBRSxHQUFHLEVBQ2hCLFNBQVMsRUFBRSxJQUFJLEVBQ2YsS0FBSyxFQUFFLElBQUksR0FDZDs7QUFRVCxNQUFNLENBQUMsTUFBTSxNQUFNLFNBQVMsRUFBRSxLQUFLLElBQy9CLEFBQ0ksK0JBRDJCLENBQzNCLGNBQWMsQ0FBQyxFQUNYLE9BQU8sRUFBRSxLQUFLLEVBQ2QsVUFBVSxFQUFFLGlCQUFpQixHQUNoQyJ9 */
/*# sourceMappingURL=redux-color-gradient.css.map */

View File

@@ -0,0 +1 @@
{"version":3,"sources":["redux-color-gradient.scss","redux-color-gradient.css"],"names":[],"mappings":"AAAA,0DAAA,aAAA,ECGQ,gBAAgB,EDHxB,kBAAA,EAAA;;AAAA,uGCSQ,qBAAqB,EACrB,kBAAkB,EAAA;;ADV1B,qHCaY,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,WAAW,EAAA;;AASvB,uCACI,iDAEQ,cAAc,EACd,6BAA6B,EAAA,EAChC;;AAvBT,64BAA64B","file":"redux-color-gradient.css","sourcesContent":[".redux-container-color_gradient {\r\n .redux-gradient-preview {\r\n height: 150px;\r\n margin-top: 10px;\r\n border-radius: 4px;\r\n }\r\n\r\n .colorGradient,\r\n .redux-gradient-type {\r\n display: inline-block;\r\n margin-right: 20px;\r\n\r\n strong {\r\n display: table;\r\n margin-bottom: 5px;\r\n margin-left: 3px;\r\n font-size: 12px;\r\n color: #999;\r\n }\r\n }\r\n\r\n .toLabel {\r\n //padding-left: 18px;\r\n }\r\n}\r\n\r\n@media screen and (max-width: 660px) {\r\n .redux-container-color_gradient {\r\n .colorGradient {\r\n display: block;\r\n text-align: center !important;\r\n }\r\n }\r\n}\r\n",".redux-container-color_gradient .redux-gradient-preview { height: 150px; margin-top: 10px; border-radius: 4px; }\n\n.redux-container-color_gradient .colorGradient, .redux-container-color_gradient .redux-gradient-type { display: inline-block; margin-right: 20px; }\n\n.redux-container-color_gradient .colorGradient strong, .redux-container-color_gradient .redux-gradient-type strong { display: table; margin-bottom: 5px; margin-left: 3px; font-size: 12px; color: #999; }\n\n@media screen and (max-width: 660px) { .redux-container-color_gradient .colorGradient { display: block; text-align: center !important; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtY29sb3ItZ3JhZGllbnQuY3NzIiwic291cmNlcyI6WyJyZWR1eC1jb2xvci1ncmFkaWVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLEFBQ0ksK0JBRDJCLENBQzNCLHVCQUF1QixDQUFDLEVBQ3BCLE1BQU0sRUFBRSxLQUFLLEVBQ2IsVUFBVSxFQUFFLElBQUksRUFDaEIsYUFBYSxFQUFFLEdBQUcsR0FDckI7O0FBTEwsQUFPSSwrQkFQMkIsQ0FPM0IsY0FBYyxFQVBsQiwrQkFBK0IsQ0FRM0Isb0JBQW9CLENBQUMsRUFDakIsT0FBTyxFQUFFLFlBQVksRUFDckIsWUFBWSxFQUFFLElBQUksR0FTckI7O0FBbkJMLEFBWVEsK0JBWnVCLENBTzNCLGNBQWMsQ0FLVixNQUFNLEVBWmQsK0JBQStCLENBUTNCLG9CQUFvQixDQUloQixNQUFNLENBQUMsRUFDSCxPQUFPLEVBQUUsS0FBSyxFQUNkLGFBQWEsRUFBRSxHQUFHLEVBQ2xCLFdBQVcsRUFBRSxHQUFHLEVBQ2hCLFNBQVMsRUFBRSxJQUFJLEVBQ2YsS0FBSyxFQUFFLElBQUksR0FDZDs7QUFRVCxNQUFNLENBQUMsTUFBTSxNQUFNLFNBQVMsRUFBRSxLQUFLLElBQy9CLEFBQ0ksK0JBRDJCLENBQzNCLGNBQWMsQ0FBQyxFQUNYLE9BQU8sRUFBRSxLQUFLLEVBQ2QsVUFBVSxFQUFFLGlCQUFpQixHQUNoQyJ9 */\n\n/*# sourceMappingURL=redux-color-gradient.css.map */\n"]}

View File

@@ -0,0 +1,145 @@
/*
* Field Color Gradient
*/
/*global jQuery, redux, colorValidate, redux_change */
( function( $ ) {
'use strict';
var filtersLoaded = false;
redux.field_objects = redux.field_objects || {};
redux.field_objects.color_gradient = redux.field_objects.color_gradient || {};
redux.field_objects.color_gradient.init = function( selector ) {
selector = $.redux.getSelector( selector, 'color_gradient' );
$( selector ).each(
function() {
var el = $( this );
var parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
if ( undefined !== redux.field_objects.gradient_filters ) {
filtersLoaded = true;
redux.field_objects.gradient_filters.sliderInit( el, 'color_gradient' );
redux.field_objects.gradient_filters.selectChange( el, 'color_gradient' );
}
el.find( '.redux-color-init' ).wpColorPicker(
{
change: function( e, ui ) {
$( this ).val( ui.color.toString() );
if ( filtersLoaded ) {
redux.field_objects.gradient_filters.changeValue( $( this ), true, 'color_gradient' );
}
el.find( '#' + e.target.getAttribute( 'data-id' ) + '-transparency' ).prop( 'checked', false );
}, clear: function() {
$( this ).val( '' );
if ( filtersLoaded ) {
redux.field_objects.gradient_filters.changeValue( $( this ).parent().find( '.redux-color-init' ), true, 'color_gradient' );
}
}
}
);
el.find( '.redux-color' ).on(
'keyup',
function() {
var value = $( this ).val();
var color = colorValidate( this );
var id = '#' + $( this ).attr( 'id' );
if ( 'transparent' === value ) {
$( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' );
el.find( id + '-transparency' ).prop( 'checked', true );
} else {
el.find( id + '-transparency' ).prop( 'checked', false );
if ( color && color !== $( this ).val() ) {
$( this ).val( color );
}
}
}
);
// Replace and validate field on blur.
el.find( '.redux-color' ).on(
'blur',
function() {
var value = $( this ).val();
var id = '#' + $( this ).attr( 'id' );
if ( 'transparent' === value ) {
$( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' );
el.find( id + '-transparency' ).attr( 'checked', 'checked' );
} else {
if ( value === colorValidate( this ) ) {
if ( 0 !== value.indexOf( '#' ) ) {
$( this ).val( $( this ).data( 'oldcolor' ) );
}
}
el.find( id + '-transparency' ).prop( 'checked', false );
}
}
);
// Store the old valid color on keydown.
el.find( '.redux-color' ).on(
'keydown',
function() {
$( this ).data( 'oldkeypress', $( this ).val() );
}
);
// When transparency checkbox is clicked.
el.find( '.color-transparency' ).on(
'click',
function() {
var prevColor;
if ( $( this ).is( ':checked' ) ) {
el.find( '.redux-saved-color' ).val( $( '#' + $( this ).data( 'id' ) ).val() );
el.find( '#' + $( this ).data( 'id' ) ).val( 'transparent' );
el.find( '#' + $( this ).data( 'id' ) ).parents( '.colorGradient' ).find( '.wp-color-result' ).css( 'background-color', 'transparent' );
} else {
prevColor = $( this ).parents( '.colorGradient' ).find( '.redux-saved-color' ).val();
if ( '' === prevColor ) {
prevColor = $( '#' + $( this ).data( 'id' ) ).data( 'default-color' );
}
el.find( '#' + $( this ).data( 'id' ) ).parents( '.colorGradient' ).find( '.wp-color-result' ).css( 'background-color', prevColor );
el.find( '#' + $( this ).data( 'id' ) ).val( prevColor );
}
if ( filtersLoaded ) {
redux.field_objects.gradient_filters.changeValue( $( this ), true, 'color_gradient' );
}
redux_change( $( this ) );
}
);
}
);
};
} )( jQuery );

View File

@@ -0,0 +1 @@
!function(a){"use strict";var t=!1;redux.field_objects=redux.field_objects||{},redux.field_objects.color_gradient=redux.field_objects.color_gradient||{},redux.field_objects.color_gradient.init=function(e){e=a.redux.getSelector(e,"color_gradient"),a(e).each(function(){var i=a(this),e=i;(e=i.hasClass("redux-field-container")?e:i.parents(".redux-field-container:first")).is(":hidden")||e.hasClass("redux-field-init")&&(e.removeClass("redux-field-init"),void 0!==redux.field_objects.gradient_filters&&(t=!0,redux.field_objects.gradient_filters.sliderInit(i,"color_gradient"),redux.field_objects.gradient_filters.selectChange(i,"color_gradient")),i.find(".redux-color-init").wpColorPicker({change:function(e,r){a(this).val(r.color.toString()),t&&redux.field_objects.gradient_filters.changeValue(a(this),!0,"color_gradient"),i.find("#"+e.target.getAttribute("data-id")+"-transparency").prop("checked",!1)},clear:function(){a(this).val(""),t&&redux.field_objects.gradient_filters.changeValue(a(this).parent().find(".redux-color-init"),!0,"color_gradient")}}),i.find(".redux-color").on("keyup",function(){var e=a(this).val(),r=colorValidate(this),t="#"+a(this).attr("id");"transparent"===e?(a(this).parent().parent().find(".wp-color-result").css("background-color","transparent"),i.find(t+"-transparency").prop("checked",!0)):(i.find(t+"-transparency").prop("checked",!1),r&&r!==a(this).val()&&a(this).val(r))}),i.find(".redux-color").on("blur",function(){var e=a(this).val(),r="#"+a(this).attr("id");"transparent"===e?(a(this).parent().parent().find(".wp-color-result").css("background-color","transparent"),i.find(r+"-transparency").attr("checked","checked")):(e===colorValidate(this)&&0!==e.indexOf("#")&&a(this).val(a(this).data("oldcolor")),i.find(r+"-transparency").prop("checked",!1))}),i.find(".redux-color").on("keydown",function(){a(this).data("oldkeypress",a(this).val())}),i.find(".color-transparency").on("click",function(){var e;a(this).is(":checked")?(i.find(".redux-saved-color").val(a("#"+a(this).data("id")).val()),i.find("#"+a(this).data("id")).val("transparent"),i.find("#"+a(this).data("id")).parents(".colorGradient").find(".wp-color-result").css("background-color","transparent")):(""===(e=a(this).parents(".colorGradient").find(".redux-saved-color").val())&&(e=a("#"+a(this).data("id")).data("default-color")),i.find("#"+a(this).data("id")).parents(".colorGradient").find(".wp-color-result").css("background-color",e),i.find("#"+a(this).data("id")).val(e)),t&&redux.field_objects.gradient_filters.changeValue(a(this),!0,"color_gradient"),redux_change(a(this))}))})}}(jQuery);

View File

@@ -0,0 +1,34 @@
.redux-container-color_gradient {
.redux-gradient-preview {
height: 150px;
margin-top: 10px;
border-radius: 4px;
}
.colorGradient,
.redux-gradient-type {
display: inline-block;
margin-right: 20px;
strong {
display: table;
margin-bottom: 5px;
margin-left: 3px;
font-size: 12px;
color: #999;
}
}
.toLabel {
//padding-left: 18px;
}
}
@media screen and (max-width: 660px) {
.redux-container-color_gradient {
.colorGradient {
display: block;
text-align: center !important;
}
}
}

View File

@@ -0,0 +1,127 @@
<?php
/**
* Color Palette
*
* @package Redux Framework
* @subpackage Redux_Color_Palette
* @author Kevin Provance (kprovance)
* @version 4.1.30
*/
defined( 'ABSPATH' ) || exit;
// Don't duplicate me!
if ( ! class_exists( 'Redux_Color_Palette' ) ) {
/**
* Main Redux_Color_Palette class
*
* @since 4.0.0
*/
class Redux_Color_Palette extends Redux_Field {
/**
* Set Defaults.
*/
public function set_defaults() {
$defaults = array(
'options' => array(
'colors' => array(),
'size' => 20,
'style' => 'square',
'box-shadow' => false,
'margin' => false,
),
);
$this->field = Redux_Functions::parse_args( $this->field, $defaults );
}
/**
* Field Render Function.
* Takes the vars and outputs the HTML for the field in the settings
*
* @since 1.0.0
* @access public
* @return void
*/
public function render() {
$box_shadow = '';
$margin = '';
if ( $this->field['options']['box-shadow'] ) {
$box_shadow = ' box-shadow';
}
if ( $this->field['options']['margin'] ) {
$margin = ' with-margin';
}
echo '<div id="input_' . esc_attr( $this->field['id'] ) . '" class="colors-wrapper ' . esc_attr( $this->field['options']['style'] ) . esc_attr( $box_shadow ) . esc_attr( $margin ) . '">';
foreach ( $this->field['options']['colors'] as $idx => $key ) {
$checked = '';
if ( $this->value === $key ) {
$checked = 'checked';
}
echo '<input
type="radio"
value="' . esc_attr( $key ) . '"
name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '"
id="' . esc_attr( $this->field['id'] ) . '-' . esc_attr( $idx ) . '"' . esc_attr( $checked ) . '>';
echo '<label for="' . esc_attr( $this->field['id'] ) . '-' . esc_attr( $idx ) . '" style="width:' . esc_attr( $this->field['options']['size'] ) . 'px;height:' . esc_attr( $this->field['options']['size'] ) . 'px;">';
echo '<span class="color-palette-color" style="background:' . esc_attr( $key ) . ';">' . esc_attr( $key ) . '</span>';
echo '</label>';
echo '</input>';
}
echo '</div>';
}
/**
* CSS output.
*
* @param string|null|array $style CSS data.
*/
public function output( $style = '' ) {
if ( ! empty( $this->value ) ) {
$mode = ( isset( $this->field['mode'] ) && ! empty( $this->field['mode'] ) ? $this->field['mode'] : 'color' );
$style .= $mode . ':' . $this->value . ';';
if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) {
$css = Redux_Functions::parse_css( $this->field['output'], $style, $this->value );
$this->parent->outputCSS .= $css;
}
if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) {
$css = Redux_Functions::parse_css( $this->field['compiler'], $style, $this->value );
$this->parent->compilerCSS .= $css;
}
}
}
/**
* Enqueue Function.
* If this field requires any scripts, or CSS define this function and register/enqueue the scripts/css
*
* @since 1.0.0
* @access public
* @return void
*/
public function enqueue() {
if ( $this->parent->args['dev_mode'] ) {
wp_enqueue_style(
'redux-field-color-palette',
Redux_Core::$url . 'inc/fields/color_palette/redux-color-palette.css',
array(),
time()
);
}
}
}
}

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux
*/
echo null;

View File

@@ -0,0 +1,21 @@
.redux-main .redux-container-color_palette label { position: relative; display: inline-block; padding: 0; margin: 0; }
.redux-main .redux-container-color_palette .colors-wrapper { max-height: 300px; overflow-y: auto; padding: 10px; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; }
.redux-main .redux-container-color_palette .colors-wrapper .color-palette-color { color: transparent; display: block; width: 100%; height: 100%; overflow: hidden; border: 1px solid rgba(0, 0, 0, 0.2); }
.redux-main .redux-container-color_palette .colors-wrapper.round label { padding: 3px; }
.redux-main .redux-container-color_palette .colors-wrapper.round .color-palette-color { border-radius: 50%; }
.redux-main .redux-container-color_palette .colors-wrapper.box-shadow .color-palette-color { -webkit-box-shadow: inset 3px 3px 13px 2px rgba(0, 0, 0, 0.22); box-shadow: inset 3px 3px 13px 2px rgba(0, 0, 0, 0.22); }
.redux-main .redux-container-color_palette .colors-wrapper input { display: none; }
.redux-main .redux-container-color_palette .colors-wrapper input:checked + label .color-palette-color { width: 130%; height: 130%; position: relative; left: -15%; top: -15%; z-index: 99; -webkit-box-shadow: 1px 1px 6px 1px #333333; box-shadow: 1px 1px 6px 1px #333333; border: 1px solid rgba(0, 0, 0, 0.3); }
.redux-main .redux-container-color_palette .colors-wrapper.with-margin label { margin: 3px !important; }
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtY29sb3ItcGFsZXR0ZS5jc3MiLCJzb3VyY2VzIjpbInJlZHV4LWNvbG9yLXBhbGV0dGUuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUVRLFdBRkcsQ0FDUCw4QkFBOEIsQ0FDMUIsS0FBSyxDQUFDLEVBQ0YsUUFBUSxFQUFFLFFBQVEsRUFDbEIsT0FBTyxFQUFFLFlBQVksRUFDckIsT0FBTyxFQUFFLENBQUMsRUFDVixNQUFNLEVBQUUsQ0FBQyxHQUNaOztBQVBULEFBU1EsV0FURyxDQUNQLDhCQUE4QixDQVExQixlQUFlLENBQUMsRUFDWixVQUFVLEVBQUUsS0FBSyxFQUNqQixVQUFVLEVBQUUsSUFBSSxFQUNoQixPQUFPLEVBQUUsSUFBSSxFQUNiLE9BQU8sRUFBRSxJQUFJLEVBQ2IsU0FBUyxFQUFFLElBQUksR0E0Q2xCOztBQTFEVCxBQWdCWSxXQWhCRCxDQUNQLDhCQUE4QixDQVExQixlQUFlLENBT1gsb0JBQW9CLENBQUMsRUFDakIsS0FBSyxFQUFFLFdBQVcsRUFDbEIsT0FBTyxFQUFFLEtBQUssRUFDZCxLQUFLLEVBQUUsSUFBSSxFQUNYLE1BQU0sRUFBRSxJQUFJLEVBQ1osUUFBUSxFQUFFLE1BQU0sRUFDaEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEdBQ3ZDOztBQXZCYixBQTBCZ0IsV0ExQkwsQ0FDUCw4QkFBOEIsQ0FRMUIsZUFBZSxBQWdCVixNQUFNLENBQ0gsS0FBSyxDQUFDLEVBQ0YsT0FBTyxFQUFFLEdBQUcsR0FDZjs7QUE1QmpCLEFBOEJnQixXQTlCTCxDQUNQLDhCQUE4QixDQVExQixlQUFlLEFBZ0JWLE1BQU0sQ0FLSCxvQkFBb0IsQ0FBQyxFQUNqQixhQUFhLEVBQUUsR0FBRyxHQUNyQjs7QUFoQ2pCLEFBb0NZLFdBcENELENBQ1AsOEJBQThCLENBUTFCLGVBQWUsQUEyQlYsV0FBVyxDQUFDLG9CQUFvQixDQUFDLEVBQzlCLFVBQVUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLG1CQUFtQixHQUN6RDs7QUF0Q2IsQUF3Q1ksV0F4Q0QsQ0FDUCw4QkFBOEIsQ0FRMUIsZUFBZSxDQStCWCxLQUFLLENBQUMsRUFDRixPQUFPLEVBQUUsSUFBSSxHQVloQjs7QUFyRGIsQUEyQ2dCLFdBM0NMLENBQ1AsOEJBQThCLENBUTFCLGVBQWUsQ0ErQlgsS0FBSyxBQUdBLFFBQVEsR0FBRyxLQUFLLENBQUMsb0JBQW9CLENBQUMsRUFDbkMsS0FBSyxFQUFFLElBQUksRUFDWCxNQUFNLEVBQUUsSUFBSSxFQUNaLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLElBQUksRUFBRSxJQUFJLEVBQ1YsR0FBRyxFQUFFLElBQUksRUFDVCxPQUFPLEVBQUUsRUFBRSxFQUNYLFVBQVUsRUFBRSx1QkFBdUIsRUFDbkMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEdBQ3ZDOztBQXBEakIsQUF1RFksV0F2REQsQ0FDUCw4QkFBOEIsQ0FRMUIsZUFBZSxBQThDVixZQUFZLENBQUMsS0FBSyxDQUFDLEVBQ2hCLE1BQU0sRUFBRSxHQUFHLENBQUEsVUFBVSxHQUN4QiJ9 */
/*# sourceMappingURL=redux-color-palette.css.map */

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,61 @@
.redux-main {
.redux-container-color_palette {
label {
position: relative;
display: inline-block;
padding: 0;
margin: 0;
}
.colors-wrapper {
max-height: 300px;
overflow-y: auto;
padding: 10px;
display: flex;
flex-wrap: wrap;
.color-palette-color {
color: transparent;
display: block;
width: 100%;
height: 100%;
overflow: hidden;
border: 1px solid rgba(0, 0, 0, 0.2);
}
&.round {
label {
padding: 3px;
}
.color-palette-color {
border-radius: 50%;
}
}
&.box-shadow .color-palette-color {
box-shadow: inset 3px 3px 13px 2px rgba(0, 0, 0, 0.22);
}
input {
display: none;
&:checked + label .color-palette-color {
width: 130%;
height: 130%;
position: relative;
left: -15%;
top: -15%;
z-index: 99;
box-shadow: 1px 1px 6px 1px #333333;
border: 1px solid rgba(0, 0, 0, 0.3);
}
}
&.with-margin label {
margin: 3px!important;
}
}
}
}

View File

@@ -0,0 +1,284 @@
<?php
/**
* Color RGBA Field.
*
* @package ReduxFramework/Fields
* @author Kevin Provance (kprovance)
* @version 4.0.0
*/
defined( 'ABSPATH' ) || exit;
// Don't duplicate me!
if ( ! class_exists( 'Redux_Color_Rgba', false ) ) {
/**
* Main Redux_color_rgba class
*
* @since 1.0.0
*/
class Redux_Color_Rgba extends Redux_Field {
/**
* Set field and value defaults.
*/
public function set_defaults() {
$defaults = array(
'color' => '',
'alpha' => 1,
'rgba' => '',
);
$option_defaults = array(
'show_input' => true,
'show_initial' => false,
'show_alpha' => true,
'show_palette' => false,
'show_palette_only' => false,
'max_palette_size' => 10,
'show_selection_palette' => false,
'allow_empty' => true,
'clickout_fires_change' => false,
'choose_text' => esc_html__( 'Choose', 'redux-framework' ),
'cancel_text' => esc_html__( 'Cancel', 'redux-framework' ),
'show_buttons' => true,
'input_text' => esc_html__( 'Select Color', 'redux-framework' ),
'palette' => null,
);
$this->value = wp_parse_args( $this->value, $defaults );
if ( isset( $this->field ) && ! is_array( $this->field ) ) {
return;
}
$this->field['options'] = isset( $this->field['options'] ) ? wp_parse_args( $this->field['options'], $option_defaults ) : $option_defaults;
// Convert an empty array to null, if there.
$this->field['options']['palette'] = empty( $this->field['options']['palette'] ) ? null : $this->field['options']['palette'];
$this->field['output_transparent'] = $this->field['output_transparent'] ?? false;
}
/**
* Field Render Function.
* Takes the vars and outputs the HTML for the field in the settings
*
* @since 1.0.0
* @access public
* @return void
*/
public function render() {
$field_id = $this->field['id'];
// Color picker container.
echo '<div
class="redux-color-rgba-container ' . esc_attr( $this->field['class'] ) . '"
data-id="' . esc_attr( $field_id ) . '"
data-show-input="' . esc_attr( $this->field['options']['show_input'] ) . '"
data-show-initial="' . esc_attr( $this->field['options']['show_initial'] ) . '"
data-show-alpha="' . esc_attr( $this->field['options']['show_alpha'] ) . '"
data-show-palette="' . esc_attr( $this->field['options']['show_palette'] ) . '"
data-show-palette-only="' . esc_attr( $this->field['options']['show_palette_only'] ) . '"
data-show-selection-palette="' . esc_attr( $this->field['options']['show_selection_palette'] ) . '"
data-max-palette-size="' . esc_attr( $this->field['options']['max_palette_size'] ) . '"
data-allow-empty="' . esc_attr( $this->field['options']['allow_empty'] ) . '"
data-clickout-fires-change="' . esc_attr( $this->field['options']['clickout_fires_change'] ) . '"
data-choose-text="' . esc_attr( $this->field['options']['choose_text'] ) . '"
data-cancel-text="' . esc_attr( $this->field['options']['cancel_text'] ) . '"
data-input-text="' . esc_attr( $this->field['options']['input_text'] ) . '"
data-show-buttons="' . esc_attr( $this->field['options']['show_buttons'] ) . '"
data-palette="' . rawurlencode( wp_json_encode( $this->field['options']['palette'] ) ) . '"
>';
// Colour picker layout.
if ( '' === $this->value['color'] || 'transparent' === $this->value['color'] ) {
$color = '';
} else {
$color = Redux_Helpers::hex2rgba( $this->value['color'], $this->value['alpha'] );
}
if ( '' === $this->value['rgba'] && '' !== $this->value['color'] ) {
$this->value['rgba'] = Redux_Helpers::hex2rgba( $this->value['color'], $this->value['alpha'] );
}
echo '<input
name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[color]"
id="' . esc_attr( $field_id ) . '-color-display"
class="redux-color-rgba"
type="text"
value="' . esc_attr( $this->value['color'] ) . '"
data-color="' . esc_attr( $color ) . '"
data-id="' . esc_attr( $field_id ) . '"
data-current-color="' . esc_attr( $this->value['color'] ) . '"
data-block-id="' . esc_attr( $field_id ) . '"
data-output-transparent="' . esc_attr( $this->field['output_transparent'] ) . '"
/>';
echo '<input
type="hidden"
class="redux-hidden-color"
data-id="' . esc_attr( $field_id ) . '-color"
id="' . esc_attr( $field_id ) . '-color"
value="' . esc_attr( $this->value['color'] ) . '"
/>';
// Hidden input for alpha channel.
echo '<input
type="hidden"
class="redux-hidden-alpha"
data-id="' . esc_attr( $field_id ) . '-alpha"
name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[alpha]"
id="' . esc_attr( $field_id ) . '-alpha"
value="' . esc_attr( $this->value['alpha'] ) . '"
/>';
// Hidden input for rgba.
echo '<input
type="hidden"
class="redux-hidden-rgba"
data-id="' . esc_attr( $field_id ) . '-rgba"
name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[rgba]"
id="' . esc_attr( $field_id ) . '-rgba"
value="' . esc_attr( $this->value['rgba'] ) . '"
/>';
echo '</div>';
}
/**
* Enqueue Function.
* If this field requires any scripts, or css define this function and register/enqueue the scripts/css
*
* @since 1.0.0
* @access public
* @return void
*/
public function enqueue() {
// Set up min files for dev_mode = false.
$min = Redux_Functions::is_min();
// Field dependent JS.
wp_enqueue_script(
'redux-field-color-rgba',
Redux_Core::$url . 'inc/fields/color_rgba/redux-color-rgba' . $min . '.js',
array( 'jquery', 'redux-spectrum-js', 'redux-js' ),
$this->timestamp,
true
);
// Spectrum CSS.
if ( ! wp_style_is( 'redux-spectrum-css' ) ) {
wp_enqueue_style( 'redux-spectrum-css' );
}
if ( $this->parent->args['dev_mode'] ) {
wp_enqueue_style(
'redux-field-color-rgba',
Redux_Core::$url . 'inc/fields/color_rgba/redux-color-rgba.css',
array(),
$this->timestamp
);
}
}
/**
* -> getColorVal. Returns formatted color val in hex or rgba.
* If this field requires any scripts or css, define this function and register/enqueue the scripts/css
*
* @since 1.0.0
* @access private
* @return string
*/
private function get_color_val(): string {
// No notices.
$color = '';
$alpha = 1;
$rgba = '';
// Must be an array.
if ( is_array( $this->value ) ) {
// Enum array to parse values.
foreach ( $this->value as $id => $val ) {
// Sanitize alpha.
if ( 'alpha' === $id ) {
$alpha = is_numeric( $val ) ? $val : 1;
} elseif ( 'color' === $id ) {
$color = ! empty( $val ) ? $val : '';
} elseif ( 'rgba' === $id ) {
$rgba = Redux_Helpers::hex2rgba( $color, $alpha );
}
}
// Only build rgba output if alpha ia less than 1.
if ( $alpha < 1 && '' !== $alpha ) {
$color = $rgba;
}
}
return $color;
}
/**
* Generate CSS style.
*
* @param string $data Field data.
*
* @return string
*/
public function css_style( $data ): string {
return '';
}
/**
* Output Function.
* Used to enqueue to the front-end
*
* @since 1.0.0
* @access public
*
* @param string|null|array $style css data.
*
* @return void
*/
public function output( $style = '' ) {
if ( ! empty( $this->value ) ) {
$mode = ( isset( $this->field['mode'] ) && ! empty( $this->field['mode'] ) ? $this->field['mode'] : 'color' );
$color_val = $this->get_color_val();
$style = $mode . ':' . $color_val . ';';
if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) {
if ( ! empty( $color_val ) ) {
$css = Redux_Functions::parse_css( $this->field['output'], $style, $color_val );
$this->parent->outputCSS .= esc_attr( $css );
}
}
if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) {
if ( ! empty( $color_val ) ) {
$css = Redux_Functions::parse_css( $this->field['compiler'], $style, $color_val );
$this->parent->compilerCSS .= esc_attr( $css );
}
}
}
}
/**
* Enable output_variables to be generated.
*
* @since 4.0.3
* @return void
*/
public function output_variables() {
// No code needed, just defining the method is enough.
}
}
}
class_alias( 'Redux_Color_Rgba', 'ReduxFramework_Color_Rgba' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
_deprecated_file( 'field_color_rgba.php', '4.3', 'class-redux-color-rgba.php', 'This file has been renamed and is no longer used in Redux 4. Please change any references to it as it will be removed in future versions of Redux.' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
echo null;

View File

@@ -0,0 +1,15 @@
.sp-container { color: #555; border-color: #ccc; background: #f7f7f7; -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0, 0, 0, 0.08); box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0, 0, 0, 0.08); vertical-align: top; }
.sp-replacer { color: #555; border-color: #ccc; background: #f7f7f7; -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0, 0, 0, 0.08); box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0, 0, 0, 0.08); vertical-align: top; }
.sp-replacer:focus, .sp-replacer:hover, .sp-replacer.focus, .sp-replacer.hover { background: #fafafa; border-color: #999; color: #222; }
.sp-replacer:focus, .sp-replacer.focus { -webkit-box-shadow: 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); box-shadow: 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
.sp-replacer.active:focus { -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
.sp-replacer.active, .sp-replacer.active:hover, .sp-replacer:active { background: #eee; border-color: #999; color: #333; -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); }
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtY29sb3ItcmdiYS5jc3MiLCJzb3VyY2VzIjpbInJlZHV4LWNvbG9yLXJnYmEuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUFBLGFBQWEsQ0FBQyxFQUNWLEtBQUssRUFBRSxJQUFJLEVBQ1gsWUFBWSxFQUFFLElBQUksRUFDbEIsVUFBVSxFQUFFLE9BQU8sRUFDbkIsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsRUFDbkUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQzNELGNBQWMsRUFBRSxHQUFHLEdBQ3RCOztBQUVELEFBQUEsWUFBWSxDQUFDLEVBQ1QsS0FBSyxFQUFFLElBQUksRUFDWCxZQUFZLEVBQUUsSUFBSSxFQUNsQixVQUFVLEVBQUUsT0FBTyxFQUNuQixrQkFBa0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixFQUNuRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsRUFDM0QsY0FBYyxFQUFFLEdBQUcsR0FDdEI7O0FBRUQsQUFBQSxZQUFZLEFBQUEsTUFBTSxFQUNsQixZQUFZLEFBQUEsTUFBTSxFQUNsQixZQUFZLEFBQUEsTUFBTSxFQUNsQixZQUFZLEFBQUEsTUFBTSxDQUFDLEVBQ2YsVUFBVSxFQUFFLE9BQU8sRUFDbkIsWUFBWSxFQUFFLElBQUksRUFDbEIsS0FBSyxFQUFFLElBQUksR0FDZDs7QUFFRCxBQUFBLFlBQVksQUFBQSxNQUFNLEVBQ2xCLFlBQVksQUFBQSxNQUFNLENBQUMsRUFDZixrQkFBa0IsRUFDZCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUNqQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQ3ZDLFVBQVUsRUFDTixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUNqQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEdBRTFDOztBQUVELEFBQUEsWUFBWSxBQUFBLE9BQU8sQUFBQSxNQUFNLENBQUMsRUFDdEIsa0JBQWtCLEVBQ2QsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFFLElBQUcsQ0FBQyxrQkFBa0IsRUFDdkMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFDakIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUN2QyxVQUFVLEVBQ04sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFFLElBQUcsQ0FBQyxrQkFBa0IsRUFDdkMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFDakIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLHVCQUF1QixHQUMxQzs7QUFFRCxBQUFBLFlBQVksQUFBQSxPQUFPLEVBQ25CLFlBQVksQUFBQSxPQUFPLEFBQUEsTUFBTSxFQUN6QixZQUFZLEFBQUEsT0FBTyxDQUFDLEVBQ2hCLFVBQVUsRUFBRSxJQUFJLEVBQ2hCLFlBQVksRUFBRSxJQUFJLEVBQ2xCLEtBQUssRUFBRSxJQUFJLEVBQ1gsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFFLElBQUcsQ0FBQyxrQkFBa0IsRUFDM0QsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBRSxJQUFHLENBQUMsa0JBQWtCLEdBQ3REIn0= */
/*# sourceMappingURL=redux-color-rgba.css.map */

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,226 @@
/* global redux, redux_change */
(function( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.color_rgba = redux.field_objects.color_rgba || {};
redux.field_objects.color_rgba.fieldID = '';
redux.field_objects.color_rgba.hexToRGBA = function( hex, alpha ) {
var result;
var r;
var g;
var b;
if ( null === hex ) {
result = '';
} else {
hex = hex.replace( '#', '' );
r = parseInt( hex.substring( 0, 2 ), 16 );
g = parseInt( hex.substring( 2, 4 ), 16 );
b = parseInt( hex.substring( 4, 6 ), 16 );
result = 'rgba(' + r + ',' + g + ',' + b + ',' + alpha + ')';
}
return result;
};
redux.field_objects.color_rgba.init = function( selector ) {
selector = $.redux.getSelector( selector, 'color_rgba' );
$( selector ).each(
function() {
var el = $( this );
var parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
redux.field_objects.color_rgba.modInit( el );
redux.field_objects.color_rgba.initColorPicker( el );
}
);
};
redux.field_objects.color_rgba.modInit = function( el ) {
redux.field_objects.color_rgba.fieldID = el.find( '.redux-color_rgba-container' ).data( 'id' );
};
// Initialize colour picker.
redux.field_objects.color_rgba.initColorPicker = function( el ) {
// Get field ID.
var field_id = redux.field_objects.color_rgba.fieldID;
// Get the color scheme container.
var colorpickerInput = el.find( '.redux-color-rgba' );
// Get alpha value and sanitize it.
var currentAlpha = colorpickerInput.data( 'current-alpha' );
// Get colour value and sanitize it.
var currentColor = colorpickerInput.data( 'current-color' );
var outputTransparent = colorpickerInput.data( 'output-transparent' );
// Color picker arguments.
var container = el.find( '.redux-color-rgba-container' );
// Get, decode and parse palette.
var palette = container.data( 'palette' );
// Get and sanitize show input argument.
var showInput = container.data( 'show-input' );
// Get and sanitize show initial argument.
var showInitial = container.data( 'show-initial' );
// Get and sanitize show alpha argument.
var showAlpha = container.data( 'show-alpha' );
// Get and sanitize allow empty argument.
var allowEmpty = container.data( 'allow-empty' );
// Get and sanitize show palette argument.
var showPalette = container.data( 'show-palette' );
// Get and sanitize show palette only argument.
var showPaletteOnly = container.data( 'show-palette-only' );
// Get and sanitize show selection palette argument.
var showSelectionPalette = container.data( 'show-selection-palette' );
// Get max palette size.
var maxPaletteSize = Number( container.data( 'max-palette-size' ) );
// Get and sanitize clickout fires change argument.
var clickoutFiresChange = container.data( 'clickout-fires-change' );
// Get choose button text.
var chooseText = String( container.data( 'choose-text' ) );
// Get cancel button text.
var cancelText = String( container.data( 'cancel-text' ) );
// Get cancel button text.
var inputText = String( container.data( 'input-text' ) );
// Get and sanitize show buttons argument.
var showButtons = container.data( 'show-buttons' );
// Get container class.
var containerClass = String( container.data( 'container-class' ) );
// Get replacer class.
var replacerClass = String( container.data( 'replacer-class' ) );
currentAlpha = Number( ( null === currentAlpha || undefined === currentAlpha ) ? 1 : currentAlpha );
currentColor = ( '' === currentColor || 'transparent' === currentColor ) ? '' : currentColor;
outputTransparent = Boolean( ( '' === outputTransparent ) ? false : outputTransparent );
palette = decodeURIComponent( palette );
palette = JSON.parse( palette );
// Default palette.
if ( null === palette ) {
palette = [
['#000000', '#434343', '#666666', '#999999', '#b7b7b7', '#cccccc', '#d9d9d9', '#efefef', '#f3f3f3', '#ffffff'],
['#980000', '#ff0000', '#ff9900', '#ffff00', '#00ff00', '#00ffff', '#4a86e8', '#0000ff', '#9900ff', '#ff00ff'],
['#e6b8af', '#f4cccc', '#fce5cd', '#fff2cc', '#d9ead3', '#d9ead3', '#c9daf8', '#cfe2f3', '#d9d2e9', '#ead1dc'],
['#dd7e6b', '#ea9999', '#f9cb9c', '#ffe599', '#b6d7a8', '#a2c4c9', '#a4c2f4', '#9fc5e8', '#b4a7d6', '#d5a6bd'],
['#cc4125', '#e06666', '#f6b26b', '#ffd966', '#93c47d', '#76a5af', '#6d9eeb', '#6fa8dc', '#8e7cc3', '#c27ba0'],
['#a61c00', '#cc0000', '#e69138', '#f1c232', '#6aa84f', '#45818e', '#3c78d8', '#3d85c6', '#674ea7', '#a64d79'],
['#85200c', '#990000', '#b45f06', '#bf9000', '#38761d', '#134f5c', '#1155cc', '#0b5394', '#351c75', '#741b47'],
['#5b0f00', '#660000', '#783f04', '#7f6000', '#274e13', '#0c343d', '#1c4587', '#073763', '#20124d', '#4c1130']
];
}
showInput = Boolean( ( '' === showInput ) ? false : showInput );
showInitial = Boolean( ( '' === showInitial ) ? false : showInitial );
showAlpha = Boolean( ( '' === showAlpha ) ? false : showAlpha );
allowEmpty = Boolean( ( '' === allowEmpty ) ? false : allowEmpty );
showPalette = Boolean( ( '' === showPalette ) ? false : showPalette );
showPaletteOnly = Boolean( ( '' === showPaletteOnly ) ? false : showPaletteOnly );
showSelectionPalette = Boolean( ( '' === showSelectionPalette ) ? false : showSelectionPalette );
clickoutFiresChange = Boolean( ( '' === clickoutFiresChange ) ? false : clickoutFiresChange );
showButtons = Boolean( ( '' === showButtons ) ? false : showButtons );
// Color picker options.
colorpickerInput.spectrum(
{
color: currentColor,
showAlpha: showAlpha,
showInput: showInput,
allowEmpty: allowEmpty,
className: 'redux-color-rgba',
showInitial: showInitial,
showPalette: showPalette,
showSelectionPalette: showSelectionPalette,
maxPaletteSize: maxPaletteSize,
showPaletteOnly: showPaletteOnly,
clickoutFiresChange: clickoutFiresChange,
chooseText: chooseText,
cancelText: cancelText,
showButtons: showButtons,
containerClassName: containerClass,
replacerClassName: replacerClass,
preferredFormat: 'hex6',
localStorageKey: 'redux.color-rgba.' + field_id,
palette: palette,
inputText: inputText,
// On change.
change: function( color ) {
var blockID;
var colorVal;
var alphaVal;
var rgbaVal;
if ( null === color ) {
if ( true === outputTransparent ) {
colorVal = 'transparent';
} else {
colorVal = null;
}
alphaVal = null;
} else {
colorVal = color.toHexString();
alphaVal = color.alpha;
}
if ( 'transparent' !== colorVal ) {
rgbaVal = redux.field_objects.color_rgba.hexToRGBA( colorVal, alphaVal );
} else {
rgbaVal = 'transparent';
}
blockID = $( this ).data( 'block-id' );
// Update HTML color value.
el.find( 'input#' + blockID + '-color' ).val( colorVal );
// Update HTML alpha value.
el.find( 'input#' + blockID + '-alpha' ).val( alphaVal );
// Update RGBA alpha value.
el.find( 'input#' + blockID + '-rgba' ).val( rgbaVal );
redux_change( el.find( '.redux-color-rgba-container' ) );
}
}
);
};
})( jQuery );

View File

@@ -0,0 +1 @@
!function(B){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.color_rgba=redux.field_objects.color_rgba||{},redux.field_objects.color_rgba.fieldID="",redux.field_objects.color_rgba.hexToRGBA=function(e,a){e=null===e?"":(e=e.replace("#",""),"rgba("+parseInt(e.substring(0,2),16)+","+parseInt(e.substring(2,4),16)+","+parseInt(e.substring(4,6),16)+","+a+")");return e},redux.field_objects.color_rgba.init=function(e){e=B.redux.getSelector(e,"color_rgba"),B(e).each(function(){var e=B(this),a=e;(a=e.hasClass("redux-field-container")?a:e.parents(".redux-field-container:first")).is(":hidden")||a.hasClass("redux-field-init")&&(a.removeClass("redux-field-init"),redux.field_objects.color_rgba.modInit(e),redux.field_objects.color_rgba.initColorPicker(e))})},redux.field_objects.color_rgba.modInit=function(e){redux.field_objects.color_rgba.fieldID=e.find(".redux-color_rgba-container").data("id")},redux.field_objects.color_rgba.initColorPicker=function(r){var e=redux.field_objects.color_rgba.fieldID,a=r.find(".redux-color-rgba"),t=a.data("current-alpha"),o=a.data("current-color"),c=a.data("output-transparent"),l=r.find(".redux-color-rgba-container"),d=l.data("palette"),n=l.data("show-input"),f=l.data("show-initial"),i=l.data("show-alpha"),s=l.data("allow-empty"),u=l.data("show-palette"),b=l.data("show-palette-only"),x=l.data("show-selection-palette"),p=Number(l.data("max-palette-size")),g=l.data("clickout-fires-change"),h=String(l.data("choose-text")),_=String(l.data("cancel-text")),w=String(l.data("input-text")),j=l.data("show-buttons"),m=String(l.data("container-class")),l=String(l.data("replacer-class")),o=(Number(null==t?1:t),""===o||"transparent"===o?"":o),c=Boolean(""!==c&&c),d=decodeURIComponent(d);null===(d=JSON.parse(d))&&(d=[["#000000","#434343","#666666","#999999","#b7b7b7","#cccccc","#d9d9d9","#efefef","#f3f3f3","#ffffff"],["#980000","#ff0000","#ff9900","#ffff00","#00ff00","#00ffff","#4a86e8","#0000ff","#9900ff","#ff00ff"],["#e6b8af","#f4cccc","#fce5cd","#fff2cc","#d9ead3","#d9ead3","#c9daf8","#cfe2f3","#d9d2e9","#ead1dc"],["#dd7e6b","#ea9999","#f9cb9c","#ffe599","#b6d7a8","#a2c4c9","#a4c2f4","#9fc5e8","#b4a7d6","#d5a6bd"],["#cc4125","#e06666","#f6b26b","#ffd966","#93c47d","#76a5af","#6d9eeb","#6fa8dc","#8e7cc3","#c27ba0"],["#a61c00","#cc0000","#e69138","#f1c232","#6aa84f","#45818e","#3c78d8","#3d85c6","#674ea7","#a64d79"],["#85200c","#990000","#b45f06","#bf9000","#38761d","#134f5c","#1155cc","#0b5394","#351c75","#741b47"],["#5b0f00","#660000","#783f04","#7f6000","#274e13","#0c343d","#1c4587","#073763","#20124d","#4c1130"]]),n=Boolean(""!==n&&n),f=Boolean(""!==f&&f),i=Boolean(""!==i&&i),s=Boolean(""!==s&&s),u=Boolean(""!==u&&u),b=Boolean(""!==b&&b),x=Boolean(""!==x&&x),g=Boolean(""!==g&&g),j=Boolean(""!==j&&j),a.spectrum({color:o,showAlpha:i,showInput:n,allowEmpty:s,className:"redux-color-rgba",showInitial:f,showPalette:u,showSelectionPalette:x,maxPaletteSize:p,showPaletteOnly:b,clickoutFiresChange:g,chooseText:h,cancelText:_,showButtons:j,containerClassName:m,replacerClassName:l,preferredFormat:"hex6",localStorageKey:"redux.color-rgba."+e,palette:d,inputText:w,change:function(e){var a,e=null===e?(a=!0===c?"transparent":null,null):(a=e.toHexString(),e.alpha),t="transparent"!==a?redux.field_objects.color_rgba.hexToRGBA(a,e):"transparent",o=B(this).data("block-id");r.find("input#"+o+"-color").val(a),r.find("input#"+o+"-alpha").val(e),r.find("input#"+o+"-rgba").val(t),redux_change(r.find(".redux-color-rgba-container"))}})}}(jQuery);

View File

@@ -0,0 +1,58 @@
.sp-container {
color: #555;
border-color: #ccc;
background: #f7f7f7;
-webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0, 0, 0, 0.08);
box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0, 0, 0, 0.08);
vertical-align: top;
}
.sp-replacer {
color: #555;
border-color: #ccc;
background: #f7f7f7;
-webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0, 0, 0, 0.08);
box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0, 0, 0, 0.08);
vertical-align: top;
}
.sp-replacer:focus,
.sp-replacer:hover,
.sp-replacer.focus,
.sp-replacer.hover {
background: #fafafa;
border-color: #999;
color: #222;
}
.sp-replacer:focus,
.sp-replacer.focus {
-webkit-box-shadow:
0 0 0 1px #5b9dd9,
0 0 2px 1px rgba(30, 140, 190, 0.8);
box-shadow:
0 0 0 1px #5b9dd9,
0 0 2px 1px rgba(30, 140, 190, 0.8);
}
.sp-replacer.active:focus {
-webkit-box-shadow:
inset 0 2px 5px -3px rgba(0, 0, 0, 0.5),
0 0 0 1px #5b9dd9,
0 0 2px 1px rgba(30, 140, 190, 0.8);
box-shadow:
inset 0 2px 5px -3px rgba(0, 0, 0, 0.5),
0 0 0 1px #5b9dd9,
0 0 2px 1px rgba(30, 140, 190, 0.8);
}
.sp-replacer.active,
.sp-replacer.active:hover,
.sp-replacer:active {
background: #eee;
border-color: #999;
color: #333;
-webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5);
box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5);
}

View File

@@ -0,0 +1,73 @@
<?php
/**
* Date Field.
*
* @package ReduxFramework/Fields
* @author Dovy Paukstys & Kevin Provance (kprovance)
* @version 4.0.0
* @noinspection PhpIgnoredClassAliasDeclaration
*/
defined( 'ABSPATH' ) || exit;
// Don't duplicate me!
if ( ! class_exists( 'Redux_Date', false ) ) {
/**
* Main Redux_date class
*
* @since 1.0.0
*/
class Redux_Date extends Redux_Field {
/**
* Field Render Function.
* Takes the vars and outputs the HTML for the field in the settings
*
* @since 1.0.0
* @access public
* @return void
*/
public function render() {
$placeholder = $this->field['placeholder'] ?? '';
echo '<input
data-id="' . esc_attr( $this->field['id'] ) . '"
type="text"
id="' . esc_attr( $this->field['id'] ) . '-date"
name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '"
value="' . esc_attr( $this->value ) . '"
placeholder="' . esc_attr( $placeholder ) . '"
class="redux-datepicker regular-text ' . esc_attr( $this->field['class'] ) . '" />';
}
/**
* Enqueue Function.
* If this field requires any scripts, or css define this function and register/enqueue the scripts/css
*
* @since 1.0.0
* @access public
* @return void
*/
public function enqueue() {
if ( $this->parent->args['dev_mode'] ) {
wp_enqueue_style(
'redux-field-date',
Redux_Core::$url . 'inc/fields/date/redux-date.css',
array(),
$this->timestamp
);
}
wp_enqueue_script(
'redux-field-date',
Redux_Core::$url . 'inc/fields/date/redux-date' . Redux_Functions::is_min() . '.js',
array( 'jquery', 'jquery-ui-core', 'jquery-ui-datepicker', 'redux-js' ),
$this->timestamp,
true
);
}
}
}
class_alias( 'Redux_Date', 'ReduxFramework_Date' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
_deprecated_file( 'field_date.php', '4.3', 'class-redux-date.php', 'This file has been renamed and is no longer used in Redux 4. Please change any references to it as it will be removed in future versions of Redux.' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
echo null;

View File

@@ -0,0 +1,7 @@
#ui-datepicker-div { z-index: 15 !important; }
.ui-datepicker-header { background-color: #00abef; }
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtZGF0ZS5jc3MiLCJzb3VyY2VzIjpbInJlZHV4LWRhdGUuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUFBLGtCQUFrQixDQUFDLEVBQ2YsT0FBTyxFQUFFLGFBQWEsR0FDekI7O0FBRUQsQUFBQSxxQkFBcUIsQ0FBQyxFQUNsQixnQkFBZ0IsRUFBRSxPQUFPLEdBQzVCIn0= */
/*# sourceMappingURL=redux-date.css.map */

View File

@@ -0,0 +1 @@
{"version":3,"sources":["redux-date.scss","redux-date.css"],"names":[],"mappings":"AAAA,qBCCI,sBAAsB,EAAA;;AAG1B,wBACI,yBAAyB,EAAA;;AAD7B,iUAAiU","file":"redux-date.css","sourcesContent":["#ui-datepicker-div {\r\n z-index: 15 !important;\r\n}\r\n\r\n.ui-datepicker-header {\r\n background-color: #00abef;\r\n}\r\n\r\n","#ui-datepicker-div { z-index: 15 !important; }\n\n.ui-datepicker-header { background-color: #00abef; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtZGF0ZS5jc3MiLCJzb3VyY2VzIjpbInJlZHV4LWRhdGUuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUFBLGtCQUFrQixDQUFDLEVBQ2YsT0FBTyxFQUFFLGFBQWEsR0FDekI7O0FBRUQsQUFBQSxxQkFBcUIsQ0FBQyxFQUNsQixnQkFBZ0IsRUFBRSxPQUFPLEdBQzVCIn0= */\n\n/*# sourceMappingURL=redux-date.css.map */\n"]}

View File

@@ -0,0 +1,58 @@
/*global jQuery, redux*/
(function( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.date = redux.field_objects.date || {};
redux.field_objects.date.init = function( selector ) {
selector = $.redux.getSelector( selector, 'date' );
$( selector ).each(
function() {
var el = $( this );
var parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
el.find( '.redux-datepicker' ).each(
function() {
$( this ).datepicker(
{
'dateFormat': 'mm/dd/yy', beforeShow: function( input, instance ) {
var el = $( '#ui-datepicker-div' );
var popover = instance.dpDiv;
$( this ).parent().append( el );
el.hide();
setTimeout(
function() {
popover.position(
{ my: 'left top', at: 'left bottom', collision: 'none', of: input }
);
},
1
);
}
}
);
}
);
}
);
};
})( jQuery );

View File

@@ -0,0 +1 @@
!function(n){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.date=redux.field_objects.date||{},redux.field_objects.date.init=function(e){e=n.redux.getSelector(e,"date"),n(e).each(function(){var e=n(this),t=e;(t=e.hasClass("redux-field-container")?t:e.parents(".redux-field-container:first")).is(":hidden")||t.hasClass("redux-field-init")&&(t.removeClass("redux-field-init"),e.find(".redux-datepicker").each(function(){n(this).datepicker({dateFormat:"mm/dd/yy",beforeShow:function(e,t){var i=n("#ui-datepicker-div"),d=t.dpDiv;n(this).parent().append(i),i.hide(),setTimeout(function(){d.position({my:"left top",at:"left bottom",collision:"none",of:e})},1)}})}))})}}(jQuery);

View File

@@ -0,0 +1,8 @@
#ui-datepicker-div {
z-index: 15 !important;
}
.ui-datepicker-header {
background-color: #00abef;
}

View File

@@ -0,0 +1,329 @@
<?php
/**
* Dimension Field
*
* @package ReduxFramework
* @subpackage Field_Dimensions
* @author Kevin Provance (kprovance)
* @version 4.0.0
*/
defined( 'ABSPATH' ) || exit;
if ( ! class_exists( 'Redux_Dimensions', false ) ) {
/**
* Class Redux_Dimensions
*/
class Redux_Dimensions extends Redux_Field {
/**
* Set field and value defaults.
*/
public function set_defaults() {
// No errors, please.
$defaults = array(
'width' => true,
'height' => true,
'units_extended' => false,
'units' => 'px',
'mode' => array(
'width' => false,
'height' => false,
),
);
$this->field = wp_parse_args( $this->field, $defaults );
$defaults = array(
'width' => '',
'height' => '',
'units' => 'px',
);
$this->value = wp_parse_args( $this->value, $defaults );
if ( isset( $this->value['unit'] ) ) {
$this->value['units'] = $this->value['unit'];
}
}
/**
* Field Render Function.
* Takes the vars and outputs the HTML for the field in the settings
*
* @since ReduxFramework 1.0.0
*/
public function render() {
/*
* Acceptable values checks. If the passed variable doesn't pass muster, we unset them
* and reset them with default values to avoid errors.
*/
$arr_units = Redux_Helpers::$array_units;
$unit_check = $arr_units;
$unit_check[] = false;
// If units field has a value but is not an acceptable value, unset the variable.
if ( isset( $this->field['units'] ) && ! Redux_Helpers::array_in_array( $this->field['units'], $unit_check ) ) {
unset( $this->field['units'] );
}
// If there is a default unit value but is not an accepted value, unset the variable.
if ( isset( $this->value['units'] ) && ! Redux_Helpers::array_in_array( $this->value['units'], $unit_check ) ) {
unset( $this->value['units'] );
}
/*
* Since the unit field could be an array, string value or bool (to hide the unit field)
* we need to separate our functions to avoid those nasty PHP index notices!
*/
// if field units have a value and ARE an array, then evaluate as needed.
if ( isset( $this->field['units'] ) && ! is_array( $this->field['units'] ) ) {
// If units fields has a value but units value does not then make units value the field value.
if ( isset( $this->field['units'] ) && ! isset( $this->value['units'] ) || false === $this->field['units'] ) {
$this->value['units'] = $this->field['units'];
// If unit field does NOT have a value and units value does NOT have a value, set both to blank (default?).
} elseif ( ! isset( $this->field['units'] ) && ! isset( $this->value['units'] ) ) {
$this->field['units'] = 'px';
$this->value['units'] = 'px';
// If unit field has NO value but units value does, then set unit field to value field.
} elseif ( ! isset( $this->field['units'] ) && isset( $this->value['units'] ) ) {
$this->field['units'] = $this->value['units'];
// if unit value is set and unit value doesn't equal unit field (coz who knows why)
// then set unit value to unit field.
} elseif ( isset( $this->value['units'] ) && $this->value['units'] !== $this->field['units'] ) {
$this->value['units'] = $this->field['units'];
}
// do stuff based on unit field NOT set as an array.
// phpcs:ignore Generic.CodeAnalysis.EmptyStatement
} elseif ( isset( $this->field['units'] ) && is_array( $this->field['units'] ) ) {
// nothing to do here, but I'm leaving the construct just in case I have to debug this again.
}
echo '<fieldset id="' . esc_attr( $this->field['id'] ) . '-fieldset" class="redux-dimensions-container" data-id="' . esc_attr( $this->field['id'] ) . '">';
$this->select2_config['allowClear'] = false;
if ( isset( $this->field['select2'] ) ) {
$this->field['select2'] = wp_parse_args( $this->field['select2'], $this->select2_config );
} else {
$this->field['select2'] = $this->select2_config;
}
$this->field['select2'] = Redux_Functions::sanitize_camel_case_array_keys( $this->field['select2'] );
$select2_data = Redux_Functions::create_data_string( $this->field['select2'] );
// This used to be unit field, but was giving the PHP index error when it was an array,
// so I changed it.
echo '<input type="hidden" class="field-units" value="' . esc_attr( $this->value['units'] ) . '">';
/**
* Width
* */
if ( true === $this->field['width'] ) {
if ( ! empty( $this->value['width'] ) && false !== $this->value['units'] && strpos( $this->value['width'], strval( $this->value['units'] ) ) === false ) {
$this->value['width'] = filter_var( $this->value['width'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION );
if ( false !== $this->field['units'] ) {
$this->value['width'] .= $this->value['units'];
}
}
echo '<div class="field-dimensions-input input-prepend">';
echo '<span class="add-on"><i class="el el-resize-horizontal icon-large"></i></span>';
echo '<input
type="text"
class="redux-dimensions-input redux-dimensions-width mini ' . esc_attr( $this->field['class'] ) . '"
placeholder="' . esc_html__( 'Width', 'redux-framework' ) . '"
rel="' . esc_attr( $this->field['id'] ) . '-width"
value="' . esc_attr( filter_var( $this->value['width'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) ) . '">';
echo '<input
data-id="' . esc_attr( $this->field['id'] ) . '"
type="hidden"
id="' . esc_attr( $this->field['id'] ) . '-width"
name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[width]"
value="' . esc_attr( $this->value['width'] ) . '">';
echo '</div>';
}
/**
* Height
* */
if ( true === $this->field['height'] ) {
if ( ! empty( $this->value['height'] ) && false !== $this->value['units'] && strpos( $this->value['height'], strval( $this->value['units'] ) ) === false ) {
$this->value['height'] = filter_var( $this->value['height'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION );
if ( false !== $this->field['units'] ) {
$this->value['height'] .= $this->value['units'];
}
}
echo '<div class="field-dimensions-input input-prepend">';
echo '<span class="add-on"><i class="el el-resize-vertical icon-large"></i></span>';
echo '<input
type="text"
class="redux-dimensions-input redux-dimensions-height mini ' . esc_attr( $this->field['class'] ) . '"
placeholder="' . esc_html__( 'Height', 'redux-framework' ) . '"
rel="' . esc_attr( $this->field['id'] ) . '-height"
value="' . esc_attr( filter_var( $this->value['height'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) ) . '">';
echo '<input
data-id="' . esc_attr( $this->field['id'] ) . '"
type="hidden"
id="' . esc_attr( $this->field['id'] ) . '-height"
name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[height]"
value="' . esc_attr( $this->value['height'] ) . '">';
echo '</div>';
}
/**
* Units
* */
// If units field is set and units field NOT false then fill out the options object and show it, otherwise it's hidden
// and the default units value will apply.
if ( isset( $this->field['units'] ) && false !== $this->field['units'] ) {
echo '<div
class="select_wrapper dimensions-units"
original-title="' . esc_html__( 'Units', 'redux-framework' ) . '">';
echo '<select
data-id="' . esc_attr( $this->field['id'] ) . '"
data-placeholder="' . esc_html__( 'Units', 'redux-framework' ) . '"
class="redux-dimensions redux-dimensions-units select ' . esc_attr( $this->field['class'] ) . '"
original-title="' . esc_html__( 'Units', 'redux-framework' ) . '"
name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[units]"' . esc_attr( $select2_data ) . '>';
// Extended units, show 'em all.
if ( $this->field['units_extended'] ) {
$test_units = $arr_units;
} else {
$test_units = array( 'px', 'em', 'rem', '%' );
}
if ( '' !== $this->field['units'] && is_array( $this->field['units'] ) ) {
$test_units = $this->field['units'];
}
if ( in_array( $this->field['units'], $test_units, true ) ) {
echo '<option value="' . esc_attr( $this->field['units'] ) . '" selected="selected">' . esc_attr( $this->field['units'] ) . '</option>';
} else {
foreach ( $test_units as $a_unit ) {
echo '<option value="' . esc_attr( $a_unit ) . '" ' . selected( $this->value['units'], $a_unit, false ) . '>' . esc_attr( $a_unit ) . '</option>';
}
}
echo '</select></div>';
}
echo '</fieldset>';
}
/**
* Enqueue Function.
* If this field requires any scripts, or css define this function and register/enqueue the scripts/css
*
* @since ReduxFramework 1.0.0
*/
public function enqueue() {
wp_enqueue_style( 'select2-css' );
wp_enqueue_script(
'redux-field-dimensions',
Redux_Core::$url . 'inc/fields/dimensions/redux-dimensions' . Redux_Functions::is_min() . '.js',
array( 'jquery', 'select2-js', 'redux-js' ),
$this->timestamp,
true
);
if ( $this->parent->args['dev_mode'] ) {
wp_enqueue_style(
'redux-field-dimensions',
Redux_Core::$url . 'inc/fields/dimensions/redux-dimensions.css',
array(),
$this->timestamp
);
}
}
/**
* Compile CSS styles for output.
*
* @param string $data CSS data.
*
* @return string
*/
public function css_style( $data ): string {
$style = '';
// If field units has a value and IS an array, then evaluate as needed.
if ( isset( $this->field['units'] ) && ! is_array( $this->field['units'] ) ) {
// If units fields has a value but units value does not then make units value the field value.
if ( isset( $this->field['units'] ) && ! isset( $this->value['units'] ) || false === $this->field['units'] ) {
$this->value['units'] = $this->field['units'];
// If units field does NOT have a value and units value does NOT have a value, set both to blank (default?).
} elseif ( ! isset( $this->field['units'] ) && ! isset( $this->value['units'] ) ) {
$this->field['units'] = 'px';
$this->value['units'] = 'px';
// If units field has NO value but units value does, then set unit field to value field.
} elseif ( ! isset( $this->field['units'] ) && isset( $this->value['units'] ) ) {
$this->field['units'] = $this->value['units'];
// If unit value is set and unit value doesn't equal unit field (coz who knows why)
// then set unit value to unit field.
} elseif ( isset( $this->value['units'] ) && $this->field['units'] !== $this->value['units'] ) {
$this->value['units'] = $this->field['units'];
}
// Do stuff based on unit field NOT set as an array.
// phpcs:ignore Generic.CodeAnalysis.EmptyStatement
} elseif ( isset( $this->field['units'] ) && is_array( $this->field['units'] ) ) {
// nothing to do here, but I'm leaving the construct just in case I have to debug this again.
}
$units = $this->value['units'] ?? '';
if ( ! is_array( $this->field['mode'] ) ) {
$height = isset( $this->field['mode'] ) && ! empty( $this->field['mode'] ) ? $this->field['mode'] : 'height';
$width = isset( $this->field['mode'] ) && ! empty( $this->field['mode'] ) ? $this->field['mode'] : 'width';
} else {
$height = false !== $this->field['mode']['height'] ? $this->field['mode']['height'] : 'height';
$width = false !== $this->field['mode']['width'] ? $this->field['mode']['width'] : 'width';
}
$clean_value = array(
$height => isset( $this->value['height'] ) ? filter_var( $this->value['height'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) : '',
$width => isset( $this->value['width'] ) ? filter_var( $this->value['width'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) : '',
);
foreach ( $clean_value as $key => $value ) {
// Output if it's a numeric entry.
if ( isset( $value ) && is_numeric( $value ) ) {
$style .= $key . ':' . $value . $units . ';';
}
}
return $style;
}
/**
* Enable output_variables to be generated.
*
* @since 4.0.3
* @return void
*/
public function output_variables() {
// No code needed, just defining the method is enough.
}
}
}
class_alias( 'Redux_Dimensions', 'ReduxFramework_Dimensions' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
_deprecated_file( 'field_dimensions.php', '4.3', 'class-redux-dimensions.php', 'This file has been renamed and is no longer used in Redux 4. Please change any references to it as it will be removed in future versions of Redux.' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
echo null;

View File

@@ -0,0 +1,11 @@
.redux-dimensions-container select, .redux-dimensions-container .select_wrapper { width: 80px !important; float: left; }
.redux-dimensions-container .field-dimensions-input { margin-right: 10px; margin-bottom: 7px; }
@media screen and (max-width: 782px) { .redux-dimensions-container .field-dimensions-input input { display: inline-block !important; width: 100px !important; }
.redux-dimensions-container .field-dimensions-input .add-on { padding: 7px 4px; font-size: 16px; line-height: 1.5; }
.redux-dimensions-container .select_wrapper { margin-top: 6px; } }
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtZGltZW5zaW9ucy5jc3MiLCJzb3VyY2VzIjpbInJlZHV4LWRpbWVuc2lvbnMuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUNJLDJCQUR1QixDQUN2QixNQUFNLEVBRFYsMkJBQTJCLENBRXZCLGVBQWUsQ0FBQyxFQUNaLEtBQUssRUFBRSxlQUFlLEVBQ3RCLEtBQUssRUFBRSxJQUFJLEdBQ2Q7O0FBTEwsQUFPSSwyQkFQdUIsQ0FPdkIsdUJBQXVCLENBQUMsRUFDcEIsWUFBWSxFQUFFLElBQUksRUFDbEIsYUFBYSxFQUFFLEdBQUcsR0FDckI7O0FBR0wsTUFBTSxDQUFDLE1BQU0sTUFBTSxTQUFTLEVBQUUsS0FBSyxJQUMvQixBQUVRLDJCQUZtQixDQUN2Qix1QkFBdUIsQ0FDbkIsS0FBSyxDQUFDLEVBQ0YsT0FBTyxFQUFFLHVCQUF1QixFQUNoQyxLQUFLLEVBQUUsZ0JBQWdCLEdBQzFCO0NBTFQsQUFPUSwyQkFQbUIsQ0FDdkIsdUJBQXVCLENBTW5CLE9BQU8sQ0FBQyxFQUNKLE9BQU8sRUFBRSxPQUFPLEVBQ2hCLFNBQVMsRUFBRSxJQUFJLEVBQ2YsV0FBVyxFQUFFLEdBQUcsR0FDbkI7Q0FYVCxBQWNJLDJCQWR1QixDQWN2QixlQUFlLENBQUMsRUFDWixVQUFVLEVBQUUsR0FBRyxHQUNsQiJ9 */
/*# sourceMappingURL=redux-dimensions.css.map */

View File

@@ -0,0 +1 @@
{"version":3,"sources":["redux-dimensions.scss","redux-dimensions.css"],"names":[],"mappings":"AAAA,kFCGQ,sBAAsB,EDUvB,WAAY,EAAA;;AAbnB,sDCQQ,kBAAkB,EAClB,kBAAkB,EAAA;;AAI1B,uCACI,4DAGY,gCAAgC,EAChC,uBAAuB,EAAA;CAJnC,8DAQY,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAAA;CAV5B,8CAeQ,eAAe,EAAA,EAClB;;AAtBT,i2BAAi2B","file":"redux-dimensions.css","sourcesContent":[".redux-dimensions-container {\r\n select,\r\n .select_wrapper {\r\n width: 80px !important;\r\n float: left;\r\n }\r\n\r\n .field-dimensions-input {\r\n margin-right: 10px;\r\n margin-bottom: 7px;\r\n }\r\n}\r\n\r\n@media screen and (max-width: 782px) {\r\n .redux-dimensions-container {\r\n .field-dimensions-input {\r\n input {\r\n display: inline-block !important;\r\n width: 100px !important;\r\n }\r\n\r\n .add-on {\r\n padding: 7px 4px;\r\n font-size: 16px;\r\n line-height: 1.5;\r\n }\r\n }\r\n\r\n .select_wrapper {\r\n margin-top: 6px;\r\n }\r\n }\r\n}\r\n\r\n",".redux-dimensions-container select, .redux-dimensions-container .select_wrapper { width: 80px !important; float: left; }\n\n.redux-dimensions-container .field-dimensions-input { margin-right: 10px; margin-bottom: 7px; }\n\n@media screen and (max-width: 782px) { .redux-dimensions-container .field-dimensions-input input { display: inline-block !important; width: 100px !important; }\n\t.redux-dimensions-container .field-dimensions-input .add-on { padding: 7px 4px; font-size: 16px; line-height: 1.5; }\n\t.redux-dimensions-container .select_wrapper { margin-top: 6px; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtZGltZW5zaW9ucy5jc3MiLCJzb3VyY2VzIjpbInJlZHV4LWRpbWVuc2lvbnMuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUNJLDJCQUR1QixDQUN2QixNQUFNLEVBRFYsMkJBQTJCLENBRXZCLGVBQWUsQ0FBQyxFQUNaLEtBQUssRUFBRSxlQUFlLEVBQ3RCLEtBQUssRUFBRSxJQUFJLEdBQ2Q7O0FBTEwsQUFPSSwyQkFQdUIsQ0FPdkIsdUJBQXVCLENBQUMsRUFDcEIsWUFBWSxFQUFFLElBQUksRUFDbEIsYUFBYSxFQUFFLEdBQUcsR0FDckI7O0FBR0wsTUFBTSxDQUFDLE1BQU0sTUFBTSxTQUFTLEVBQUUsS0FBSyxJQUMvQixBQUVRLDJCQUZtQixDQUN2Qix1QkFBdUIsQ0FDbkIsS0FBSyxDQUFDLEVBQ0YsT0FBTyxFQUFFLHVCQUF1QixFQUNoQyxLQUFLLEVBQUUsZ0JBQWdCLEdBQzFCO0NBTFQsQUFPUSwyQkFQbUIsQ0FDdkIsdUJBQXVCLENBTW5CLE9BQU8sQ0FBQyxFQUNKLE9BQU8sRUFBRSxPQUFPLEVBQ2hCLFNBQVMsRUFBRSxJQUFJLEVBQ2YsV0FBVyxFQUFFLEdBQUcsR0FDbkI7Q0FYVCxBQWNJLDJCQWR1QixDQWN2QixlQUFlLENBQUMsRUFDWixVQUFVLEVBQUUsR0FBRyxHQUNsQiJ9 */\n\n/*# sourceMappingURL=redux-dimensions.css.map */\n"]}

View File

@@ -0,0 +1,57 @@
/* global jQuery, redux */
(function( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.dimensions = redux.field_objects.dimensions || {};
redux.field_objects.dimensions.init = function( selector ) {
selector = $.redux.getSelector( selector, 'dimensions' );
$( selector ).each(
function() {
var el = $( this );
var parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
el.find( '.redux-dimensions-units' ).select2();
el.find( '.redux-dimensions-input' ).on(
'change',
function() {
var units = $( this ).parents( '.redux-field:first' ).find( '.field-units' ).val();
if ( 0 !== $( this ).parents( '.redux-field:first' ).find( '.redux-dimensions-units' ).length ) {
units = $( this ).parents( '.redux-field:first' ).find( '.redux-dimensions-units option:selected' ).val();
}
if ( 'undefined' !== typeof units ) {
el.find( '#' + $( this ).attr( 'rel' ) ).val( $( this ).val() + units );
} else {
el.find( '#' + $( this ).attr( 'rel' ) ).val( $( this ).val() );
}
}
);
el.find( '.redux-dimensions-units' ).on(
'change',
function() {
$( this ).parents( '.redux-field:first' ).find( '.redux-dimensions-input' ).change();
}
);
}
);
};
})( jQuery );

View File

@@ -0,0 +1 @@
!function(n){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.dimensions=redux.field_objects.dimensions||{},redux.field_objects.dimensions.init=function(i){i=n.redux.getSelector(i,"dimensions"),n(i).each(function(){var e=n(this),i=e;(i=e.hasClass("redux-field-container")?i:e.parents(".redux-field-container:first")).is(":hidden")||i.hasClass("redux-field-init")&&(i.removeClass("redux-field-init"),e.find(".redux-dimensions-units").select2(),e.find(".redux-dimensions-input").on("change",function(){var i=n(this).parents(".redux-field:first").find(".field-units").val();void 0!==(i=0!==n(this).parents(".redux-field:first").find(".redux-dimensions-units").length?n(this).parents(".redux-field:first").find(".redux-dimensions-units option:selected").val():i)?e.find("#"+n(this).attr("rel")).val(n(this).val()+i):e.find("#"+n(this).attr("rel")).val(n(this).val())}),e.find(".redux-dimensions-units").on("change",function(){n(this).parents(".redux-field:first").find(".redux-dimensions-input").change()}))})}}(jQuery);

View File

@@ -0,0 +1,34 @@
.redux-dimensions-container {
select,
.select_wrapper {
width: 80px !important;
float: left;
}
.field-dimensions-input {
margin-right: 10px;
margin-bottom: 7px;
}
}
@media screen and (max-width: 782px) {
.redux-dimensions-container {
.field-dimensions-input {
input {
display: inline-block !important;
width: 100px !important;
}
.add-on {
padding: 7px 4px;
font-size: 16px;
line-height: 1.5;
}
}
.select_wrapper {
margin-top: 6px;
}
}
}

View File

@@ -0,0 +1,57 @@
<?php
/**
* Divider Field.
*
* @package ReduxFramework/Fields
* @author Dovy Paukstys & Kevin Provance (kprovance)
* @version 4.0.0
*/
defined( 'ABSPATH' ) || exit;
// Don't duplicate me!
if ( ! class_exists( 'Redux_Divide', false ) ) {
/**
* Main Redux_divide class
*
* @since 1.0.0
*/
class Redux_Divide extends Redux_Field {
/**
* Field Render Function.
* Takes the vars and outputs the HTML for the field in the settings
*
* @since 1.0.0
* @access public
* @return void
*/
public function render() {
echo '</td></tr></table>';
echo '<div data-id="' . esc_attr( $this->field['id'] ) . '" id="divide-' . esc_attr( $this->field['id'] ) . '" class="divide ' . esc_attr( $this->field['class'] ) . '"><div class="inner"><span>&nbsp;</span></div></div>';
echo '<table class="form-table no-border"><tbody><tr><th></th><td>';
}
/**
* Enqueue Function.
* If this field requires any scripts, or css define this function and register/enqueue the scripts/css
*
* @since 1.0.0
* @access public
* @return void
*/
public function enqueue() {
if ( $this->parent->args['dev_mode'] ) {
wp_enqueue_style(
'redux-field-divide',
Redux_Core::$url . 'inc/fields/divide/redux-divide.css',
array(),
$this->timestamp
);
}
}
}
}
class_alias( 'Redux_Divide', 'ReduxFramework_Divide' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
_deprecated_file( 'field_divide.php', '4.3', 'class-redux-divide.php', 'This file has been renamed and is no longer used in Redux 4. Please change any references to it as it will be removed in future versions of Redux.' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
echo null;

View File

@@ -0,0 +1,11 @@
.redux-main .divide { float: none; border-color: #e7e7e7; display: block; width: 100%; height: 35px !important; line-height: 35px !important; position: relative; margin: 15px 0 10px 0; }
.redux-main .divide .inner { width: 42% !important; left: 40% !important; margin-left: -6%; background-color: #fcfcfc; border-color: #e7e7e7; position: absolute; height: 1px; top: 50%; margin-top: -1px; border-top-width: 1px; border-top-style: solid; }
.redux-main .divide .inner span { background-color: #fcfcfc; border-color: #e7e7e7; height: 5px; width: 5px; border-width: 2px; border-style: solid; display: block; position: absolute; left: 50%; margin-left: -5px; margin-top: -5px; }
.wp-customizer .redux-container-divide .divide .inner { width: 82% !important; left: 18% !important; margin-left: -8%; }
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtZGl2aWRlLmNzcyIsInNvdXJjZXMiOlsicmVkdXgtZGl2aWRlLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQUFDSSxXQURPLENBQ1AsT0FBTyxDQUFDLEVBQ0osS0FBSyxFQUFFLElBQUksRUFDWCxZQUFZLEVBQUUsT0FBTyxFQUNyQixPQUFPLEVBQUUsS0FBSyxFQUNkLEtBQUssRUFBRSxJQUFJLEVBQ1gsTUFBTSxFQUFFLGVBQWUsRUFDdkIsV0FBVyxFQUFFLGVBQWUsRUFDNUIsUUFBUSxFQUFFLFFBQVEsRUFDbEIsTUFBTSxFQUFFLGFBQWEsR0E0QnhCOztBQXJDTCxBQVdRLFdBWEcsQ0FDUCxPQUFPLENBVUgsTUFBTSxDQUFDLEVBQ0gsS0FBSyxFQUFFLGNBQWMsRUFDckIsSUFBSSxFQUFFLGNBQWMsRUFDcEIsV0FBVyxFQUFFLEdBQUcsRUFDaEIsZ0JBQWdCLEVBQUUsT0FBTyxFQUN6QixZQUFZLEVBQUUsT0FBTyxFQUNyQixRQUFRLEVBQUUsUUFBUSxFQUNsQixNQUFNLEVBQUUsR0FBRyxFQUNYLEdBQUcsRUFBRSxHQUFHLEVBQ1IsVUFBVSxFQUFFLElBQUksRUFDaEIsZ0JBQWdCLEVBQUUsR0FBRyxFQUNyQixnQkFBZ0IsRUFBRSxLQUFLLEdBYzFCOztBQXBDVCxBQXVCWSxXQXZCRCxDQUNQLE9BQU8sQ0FVSCxNQUFNLENBWUYsSUFBSSxDQUFDLEVBQ0QsZ0JBQWdCLEVBQUUsT0FBTyxFQUN6QixZQUFZLEVBQUUsT0FBTyxFQUNyQixNQUFNLEVBQUUsR0FBRyxFQUNYLEtBQUssRUFBRSxHQUFHLEVBQ1YsWUFBWSxFQUFFLEdBQUcsRUFDakIsWUFBWSxFQUFFLEtBQUssRUFDbkIsT0FBTyxFQUFFLEtBQUssRUFDZCxRQUFRLEVBQUUsUUFBUSxFQUNsQixJQUFJLEVBQUUsR0FBRyxFQUNULFdBQVcsRUFBRSxJQUFJLEVBQ2pCLFVBQVUsRUFBRSxJQUFJLEdBQ25COztBQUtiLEFBQ0ksY0FEVSxDQUFDLHVCQUF1QixDQUNsQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQ1gsS0FBSyxFQUFFLGNBQWMsRUFDckIsSUFBSSxFQUFFLGNBQWMsRUFDcEIsV0FBVyxFQUFFLEdBQUcsR0FDbkIifQ== */
/*# sourceMappingURL=redux-divide.css.map */

View File

@@ -0,0 +1 @@
{"version":3,"sources":["redux-divide.scss","redux-divide.css"],"names":[],"mappings":"AAAA,sBAAA,WACW,ECEH,qBAAqB,EDH7B,cAWQ,ECNA,WAAW,EDmCnB,uBAAe,ECjCP,4BAA4B,EAC5B,kBAAkB,EAClB,qBAAqB,EAAA;;ADT7B,6BCYY,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EAAA;;ADtBnC,kCCwBgB,yBAAyB,EACzB,qBAAqB,EACrB,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,iBAAiB,EACjB,gBAAgB,EAAA;;AAMhC,wDAEQ,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAAA;;AApCxB,y2CAAy2C","file":"redux-divide.css","sourcesContent":[".redux-main {\n .divide {\n float: none;\n border-color: #e7e7e7;\n display: block;\n width: 100%;\n height: 35px !important;\n line-height: 35px !important;\n position: relative;\n margin: 15px 0 10px 0;\n\n .inner {\n width: 42% !important;\n left: 40% !important;\n margin-left: -6%;\n background-color: #fcfcfc;\n border-color: #e7e7e7;\n position: absolute;\n height: 1px;\n top: 50%;\n margin-top: -1px;\n border-top-width: 1px;\n border-top-style: solid;\n span {\n background-color: #fcfcfc;\n border-color: #e7e7e7;\n height: 5px;\n width: 5px;\n border-width: 2px;\n border-style: solid;\n display: block;\n position: absolute;\n left: 50%;\n margin-left: -5px;\n margin-top: -5px;\n }\n }\n }\n}\n\n.wp-customizer .redux-container-divide {\n .divide .inner {\n width: 82% !important;\n left: 18% !important;\n margin-left: -8%;\n }\n}\n\n",".redux-main .divide { float: none; border-color: #e7e7e7; display: block; width: 100%; height: 35px !important; line-height: 35px !important; position: relative; margin: 15px 0 10px 0; }\n\n.redux-main .divide .inner { width: 42% !important; left: 40% !important; margin-left: -6%; background-color: #fcfcfc; border-color: #e7e7e7; position: absolute; height: 1px; top: 50%; margin-top: -1px; border-top-width: 1px; border-top-style: solid; }\n\n.redux-main .divide .inner span { background-color: #fcfcfc; border-color: #e7e7e7; height: 5px; width: 5px; border-width: 2px; border-style: solid; display: block; position: absolute; left: 50%; margin-left: -5px; margin-top: -5px; }\n\n.wp-customizer .redux-container-divide .divide .inner { width: 82% !important; left: 18% !important; margin-left: -8%; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtZGl2aWRlLmNzcyIsInNvdXJjZXMiOlsicmVkdXgtZGl2aWRlLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQUFDSSxXQURPLENBQ1AsT0FBTyxDQUFDLEVBQ0osS0FBSyxFQUFFLElBQUksRUFDWCxZQUFZLEVBQUUsT0FBTyxFQUNyQixPQUFPLEVBQUUsS0FBSyxFQUNkLEtBQUssRUFBRSxJQUFJLEVBQ1gsTUFBTSxFQUFFLGVBQWUsRUFDdkIsV0FBVyxFQUFFLGVBQWUsRUFDNUIsUUFBUSxFQUFFLFFBQVEsRUFDbEIsTUFBTSxFQUFFLGFBQWEsR0E0QnhCOztBQXJDTCxBQVdRLFdBWEcsQ0FDUCxPQUFPLENBVUgsTUFBTSxDQUFDLEVBQ0gsS0FBSyxFQUFFLGNBQWMsRUFDckIsSUFBSSxFQUFFLGNBQWMsRUFDcEIsV0FBVyxFQUFFLEdBQUcsRUFDaEIsZ0JBQWdCLEVBQUUsT0FBTyxFQUN6QixZQUFZLEVBQUUsT0FBTyxFQUNyQixRQUFRLEVBQUUsUUFBUSxFQUNsQixNQUFNLEVBQUUsR0FBRyxFQUNYLEdBQUcsRUFBRSxHQUFHLEVBQ1IsVUFBVSxFQUFFLElBQUksRUFDaEIsZ0JBQWdCLEVBQUUsR0FBRyxFQUNyQixnQkFBZ0IsRUFBRSxLQUFLLEdBYzFCOztBQXBDVCxBQXVCWSxXQXZCRCxDQUNQLE9BQU8sQ0FVSCxNQUFNLENBWUYsSUFBSSxDQUFDLEVBQ0QsZ0JBQWdCLEVBQUUsT0FBTyxFQUN6QixZQUFZLEVBQUUsT0FBTyxFQUNyQixNQUFNLEVBQUUsR0FBRyxFQUNYLEtBQUssRUFBRSxHQUFHLEVBQ1YsWUFBWSxFQUFFLEdBQUcsRUFDakIsWUFBWSxFQUFFLEtBQUssRUFDbkIsT0FBTyxFQUFFLEtBQUssRUFDZCxRQUFRLEVBQUUsUUFBUSxFQUNsQixJQUFJLEVBQUUsR0FBRyxFQUNULFdBQVcsRUFBRSxJQUFJLEVBQ2pCLFVBQVUsRUFBRSxJQUFJLEdBQ25COztBQUtiLEFBQ0ksY0FEVSxDQUFDLHVCQUF1QixDQUNsQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQ1gsS0FBSyxFQUFFLGNBQWMsRUFDckIsSUFBSSxFQUFFLGNBQWMsRUFDcEIsV0FBVyxFQUFFLEdBQUcsR0FDbkIifQ== */\n\n/*# sourceMappingURL=redux-divide.css.map */\n"]}

View File

@@ -0,0 +1,48 @@
.redux-main {
.divide {
float: none;
border-color: #e7e7e7;
display: block;
width: 100%;
height: 35px !important;
line-height: 35px !important;
position: relative;
margin: 15px 0 10px 0;
.inner {
width: 42% !important;
left: 40% !important;
margin-left: -6%;
background-color: #fcfcfc;
border-color: #e7e7e7;
position: absolute;
height: 1px;
top: 50%;
margin-top: -1px;
border-top-width: 1px;
border-top-style: solid;
span {
background-color: #fcfcfc;
border-color: #e7e7e7;
height: 5px;
width: 5px;
border-width: 2px;
border-style: solid;
display: block;
position: absolute;
left: 50%;
margin-left: -5px;
margin-top: -5px;
}
}
}
}
.wp-customizer .redux-container-divide {
.divide .inner {
width: 82% !important;
left: 18% !important;
margin-left: -8%;
}
}

View File

@@ -0,0 +1,84 @@
<?php
/**
* WordPress Tiny MCE Editor Field.
*
* @package ReduxFramework/Fields
* @author Dovy Paukstys & Kevin Provance (kprovance)
* @version 4.0.0
*/
defined( 'ABSPATH' ) || exit;
// Don't duplicate me!
if ( ! class_exists( 'Redux_Editor', false ) ) {
/**
* Main Redux_editor class
*
* @since 1.0.0
*/
class Redux_Editor extends Redux_Field {
/**
* Field Render Function.
* Takes the vars and outputs the HTML for the field in the settings
*
* @since 1.0.0
* @access public
* @return void
*/
public function render() {
if ( ! isset( $this->field['args'] ) ) {
$this->field['args'] = array();
}
$this->field['args']['onchange_callback'] = "alert('here')";
// Setup up default args.
$defaults = array(
'textarea_name' => esc_attr( $this->field['name'] . $this->field['name_suffix'] ),
'editor_class' => esc_attr( $this->field['class'] ),
'textarea_rows' => 10, // Wordpress default.
'teeny' => true,
);
if ( isset( $this->field['editor_options'] ) && empty( $this->field['args'] ) ) {
$this->field['args'] = $this->field['editor_options'];
unset( $this->field['editor_options'] );
}
$this->field['args'] = wp_parse_args( $this->field['args'], $defaults );
wp_editor( $this->value, $this->field['id'], $this->field['args'] );
}
/**
* Enqueue Function.
* If this field requires any scripts, or css define this function and register/enqueue the scripts/css
*
* @since 1.0.0
* @access public
* @return void
*/
public function enqueue() {
if ( $this->parent->args['dev_mode'] ) {
wp_enqueue_style(
'redux-field-editor',
Redux_Core::$url . 'inc/fields/editor/redux-editor.css',
array(),
$this->timestamp
);
}
wp_enqueue_script(
'redux-field-editor',
Redux_Core::$url . 'inc/fields/editor/redux-editor' . Redux_Functions::is_min() . '.js',
array( 'jquery', 'redux-js' ),
$this->timestamp,
true
);
}
}
}
class_alias( 'Redux_Editor', 'ReduxFramework_Editor' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
_deprecated_file( 'field_editor.php', '4.3', 'class-redux-editor.php', 'This file has been renamed and is no longer used in Redux 4. Please change any references to it as it will be removed in future versions of Redux.' );

View File

@@ -0,0 +1,8 @@
<?php
/**
* Silence is golden.
*
* @package Redux Framework
*/
echo null;

View File

@@ -0,0 +1,15 @@
.redux-container-editor .mceLayout td { border-width: 1px; margin: 0; padding: 1px; }
.redux-container-editor input, .redux-container-editor textarea { margin: inherit; }
.redux-container-editor textarea { border: 0 none; }
.redux-container-editor .wp-editor-container { border-radius: 3px; }
.redux-container-editor .wp-editor-container textarea { border-radius: 0; border-style: inherit; }
.redux-container-editor .quicktags-toolbar input { margin: 2px 1px 4px; display: inline-block; min-width: 26px; padding: 2px 4px; font: 12px/18px Arial, Helvetica, sans-serif normal; color: #464646; border: 1px solid #c3c3c3; border-radius: 3px; background: #eee; background-image: -webkit-gradient(linear, left bottom, left top, from(#e3e3e3), to(#fff)); background-image: -webkit-linear-gradient(bottom, #e3e3e3, #fff); background-image: linear-gradient(to top, #e3e3e3, #fff); }
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtZWRpdG9yLmNzcyIsInNvdXJjZXMiOlsicmVkdXgtZWRpdG9yLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQUFDSSx1QkFEbUIsQ0FDbkIsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUNWLFlBQVksRUFBRSxHQUFHLEVBQ2pCLE1BQU0sRUFBRSxDQUFDLEVBQ1QsT0FBTyxFQUFFLEdBQUcsR0FDZjs7QUFMTCxBQU9JLHVCQVBtQixDQU9uQixLQUFLLEVBUFQsdUJBQXVCLENBUW5CLFFBQVEsQ0FBQyxFQUNMLE1BQU0sRUFBRSxPQUFPLEdBQ2xCOztBQVZMLEFBWUksdUJBWm1CLENBWW5CLFFBQVEsQ0FBQyxFQUNMLE1BQU0sRUFBRSxNQUFNLEdBQ2pCOztBQWRMLEFBZ0JJLHVCQWhCbUIsQ0FnQm5CLG9CQUFvQixDQUFDLEVBQ2pCLHFCQUFxQixFQUFFLEdBQUcsRUFDMUIsa0JBQWtCLEVBQUUsR0FBRyxFQUN2QixhQUFhLEVBQUUsR0FBRyxHQVFyQjs7QUEzQkwsQUFxQlEsdUJBckJlLENBZ0JuQixvQkFBb0IsQ0FLaEIsUUFBUSxDQUFDLEVBQ0wscUJBQXFCLEVBQUUsQ0FBQyxFQUN4QixrQkFBa0IsRUFBRSxDQUFDLEVBQ3JCLGFBQWEsRUFBRSxDQUFDLEVBQ2hCLFlBQVksRUFBRSxPQUFPLEdBQ3hCOztBQTFCVCxBQTZCSSx1QkE3Qm1CLENBNkJuQixrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFDckIsTUFBTSxFQUFFLFdBQVcsRUFDbkIsT0FBTyxFQUFFLFlBQVksRUFDckIsU0FBUyxFQUFFLElBQUksRUFDZixPQUFPLEVBQUUsT0FBTyxFQUNoQixJQUFJLEVBQUUsNkNBQTZDLEVBQ25ELEtBQUssRUFBRSxPQUFPLEVBQ2QsTUFBTSxFQUFFLGlCQUFpQixFQUN6QixxQkFBcUIsRUFBRSxHQUFHLEVBQzFCLGFBQWEsRUFBRSxHQUFHLEVBQ2xCLFVBQVUsRUFBRSxJQUFJLEVBQ2hCLGdCQUFnQixFQUFFLHdFQUF3RSxFQUMxRixnQkFBZ0IsRUFBRSw4Q0FBOEMsRUFDaEUsZ0JBQWdCLEVBQUUsMkNBQTJDLEVBQzdELGdCQUFnQixFQUFFLHlDQUF5QyxFQUMzRCxnQkFBZ0IsRUFBRSxzQ0FBc0MsR0FDM0QifQ== */
/*# sourceMappingURL=redux-editor.css.map */

View File

@@ -0,0 +1 @@
{"version":3,"sources":["redux-editor.scss","redux-editor.css"],"names":[],"mappings":"AAAA,wCAAA,iBAOI,ECJI,SAAS,EDHjB,YAAA,EAAA;;AAAA,kECSQ,eAAe,EAAA;;ADTvB,mCCaQ,cAAc,EAAA;;ADbtB,+CCmBQ,kBAAkB,EAAA;;ADnB1B,wDCwBY,gBAAgB,EAChB,qBAAqB,EAAA;;ADzBjC,mDC8BQ,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,mDAAmD,EACnD,cAAc,EACd,yBAAyB,EAEzB,kBAAkB,EAClB,gBAAgB,EAChB,0FAA0F,EAC1F,gEAAgE,EAGhE,wDAAwD,EAAA;;AAhChE,q3CAAq3C","file":"redux-editor.css","sourcesContent":[".redux-container-editor {\n .mceLayout td {\n border-width: 1px;\n margin: 0;\n padding: 1px;\n }\n\n input,\n textarea {\n margin: inherit;\n }\n\n textarea {\n border: 0 none;\n }\n\n .wp-editor-container {\n -webkit-border-radius: 3px;\n -moz-border-radius: 3px;\n border-radius: 3px;\n\n textarea {\n -webkit-border-radius: 0;\n -moz-border-radius: 0;\n border-radius: 0;\n border-style: inherit;\n }\n }\n\n .quicktags-toolbar input {\n margin: 2px 1px 4px;\n display: inline-block;\n min-width: 26px;\n padding: 2px 4px;\n font: 12px/18px Arial, Helvetica, sans-serif normal;\n color: #464646;\n border: 1px solid #c3c3c3;\n -webkit-border-radius: 3px;\n border-radius: 3px;\n background: #eee;\n background-image: -webkit-gradient(linear, left bottom, left top, from(#e3e3e3), to(#fff));\n background-image: -webkit-linear-gradient(bottom, #e3e3e3, #fff);\n background-image: -moz-linear-gradient(bottom, #e3e3e3, #fff);\n background-image: -o-linear-gradient(bottom, #e3e3e3, #fff);\n background-image: linear-gradient(to top, #e3e3e3, #fff);\n }\n}\n\n",".redux-container-editor .mceLayout td { border-width: 1px; margin: 0; padding: 1px; }\n\n.redux-container-editor input, .redux-container-editor textarea { margin: inherit; }\n\n.redux-container-editor textarea { border: 0 none; }\n\n.redux-container-editor .wp-editor-container { border-radius: 3px; }\n\n.redux-container-editor .wp-editor-container textarea { border-radius: 0; border-style: inherit; }\n\n.redux-container-editor .quicktags-toolbar input { margin: 2px 1px 4px; display: inline-block; min-width: 26px; padding: 2px 4px; font: 12px/18px Arial, Helvetica, sans-serif normal; color: #464646; border: 1px solid #c3c3c3; border-radius: 3px; background: #eee; background-image: -webkit-gradient(linear, left bottom, left top, from(#e3e3e3), to(#fff)); background-image: -webkit-linear-gradient(bottom, #e3e3e3, #fff); background-image: linear-gradient(to top, #e3e3e3, #fff); }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtZWRpdG9yLmNzcyIsInNvdXJjZXMiOlsicmVkdXgtZWRpdG9yLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQUFDSSx1QkFEbUIsQ0FDbkIsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUNWLFlBQVksRUFBRSxHQUFHLEVBQ2pCLE1BQU0sRUFBRSxDQUFDLEVBQ1QsT0FBTyxFQUFFLEdBQUcsR0FDZjs7QUFMTCxBQU9JLHVCQVBtQixDQU9uQixLQUFLLEVBUFQsdUJBQXVCLENBUW5CLFFBQVEsQ0FBQyxFQUNMLE1BQU0sRUFBRSxPQUFPLEdBQ2xCOztBQVZMLEFBWUksdUJBWm1CLENBWW5CLFFBQVEsQ0FBQyxFQUNMLE1BQU0sRUFBRSxNQUFNLEdBQ2pCOztBQWRMLEFBZ0JJLHVCQWhCbUIsQ0FnQm5CLG9CQUFvQixDQUFDLEVBQ2pCLHFCQUFxQixFQUFFLEdBQUcsRUFDMUIsa0JBQWtCLEVBQUUsR0FBRyxFQUN2QixhQUFhLEVBQUUsR0FBRyxHQVFyQjs7QUEzQkwsQUFxQlEsdUJBckJlLENBZ0JuQixvQkFBb0IsQ0FLaEIsUUFBUSxDQUFDLEVBQ0wscUJBQXFCLEVBQUUsQ0FBQyxFQUN4QixrQkFBa0IsRUFBRSxDQUFDLEVBQ3JCLGFBQWEsRUFBRSxDQUFDLEVBQ2hCLFlBQVksRUFBRSxPQUFPLEdBQ3hCOztBQTFCVCxBQTZCSSx1QkE3Qm1CLENBNkJuQixrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFDckIsTUFBTSxFQUFFLFdBQVcsRUFDbkIsT0FBTyxFQUFFLFlBQVksRUFDckIsU0FBUyxFQUFFLElBQUksRUFDZixPQUFPLEVBQUUsT0FBTyxFQUNoQixJQUFJLEVBQUUsNkNBQTZDLEVBQ25ELEtBQUssRUFBRSxPQUFPLEVBQ2QsTUFBTSxFQUFFLGlCQUFpQixFQUN6QixxQkFBcUIsRUFBRSxHQUFHLEVBQzFCLGFBQWEsRUFBRSxHQUFHLEVBQ2xCLFVBQVUsRUFBRSxJQUFJLEVBQ2hCLGdCQUFnQixFQUFFLHdFQUF3RSxFQUMxRixnQkFBZ0IsRUFBRSw4Q0FBOEMsRUFDaEUsZ0JBQWdCLEVBQUUsMkNBQTJDLEVBQzdELGdCQUFnQixFQUFFLHlDQUF5QyxFQUMzRCxnQkFBZ0IsRUFBRSxzQ0FBc0MsR0FDM0QifQ== */\n\n/*# sourceMappingURL=redux-editor.css.map */\n"]}

View File

@@ -0,0 +1,46 @@
/**
* Redux Editor on change callback
* Dependencies : jquery
* Feature added by : Dovy Paukstys
* : Kevin Provance (who helped) :P
* Date : 07 June 2014
*/
/*global redux_change, tinymce, redux*/
(function( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.editor = redux.field_objects.editor || {};
redux.field_objects.editor.init = function() {
var i;
var len;
setTimeout(
function() {
if ( 'undefined' !== typeof ( tinymce ) ) {
len = tinymce.editors.length;
for ( i = 0; i < len; i += 1 ) {
redux.field_objects.editor.onChange( i );
}
}
},
1000
);
};
redux.field_objects.editor.onChange = function( i ) {
tinymce.editors[i].on(
'change',
function( e ) {
var el = jQuery( e.target.contentAreaContainer );
if ( 0 !== el.parents( '.redux-container-editor:first' ).length ) {
redux_change( $( '.wp-editor-area' ) );
}
}
);
};
})( jQuery );

View File

@@ -0,0 +1 @@
!function(t){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.editor=redux.field_objects.editor||{},redux.field_objects.editor.init=function(){var e,t;setTimeout(function(){if("undefined"!=typeof tinymce)for(t=tinymce.editors.length,e=0;e<t;e+=1)redux.field_objects.editor.onChange(e)},1e3)},redux.field_objects.editor.onChange=function(e){tinymce.editors[e].on("change",function(e){0!==jQuery(e.target.contentAreaContainer).parents(".redux-container-editor:first").length&&redux_change(t(".wp-editor-area"))})}}(jQuery);

View File

@@ -0,0 +1,48 @@
.redux-container-editor {
.mceLayout td {
border-width: 1px;
margin: 0;
padding: 1px;
}
input,
textarea {
margin: inherit;
}
textarea {
border: 0 none;
}
.wp-editor-container {
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
textarea {
-webkit-border-radius: 0;
-moz-border-radius: 0;
border-radius: 0;
border-style: inherit;
}
}
.quicktags-toolbar input {
margin: 2px 1px 4px;
display: inline-block;
min-width: 26px;
padding: 2px 4px;
font: 12px/18px Arial, Helvetica, sans-serif normal;
color: #464646;
border: 1px solid #c3c3c3;
-webkit-border-radius: 3px;
border-radius: 3px;
background: #eee;
background-image: -webkit-gradient(linear, left bottom, left top, from(#e3e3e3), to(#fff));
background-image: -webkit-linear-gradient(bottom, #e3e3e3, #fff);
background-image: -moz-linear-gradient(bottom, #e3e3e3, #fff);
background-image: -o-linear-gradient(bottom, #e3e3e3, #fff);
background-image: linear-gradient(to top, #e3e3e3, #fff);
}
}

Some files were not shown because too many files have changed in this diff Show More