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:
@@ -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' );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
/**
|
||||
* Silence is golden.
|
||||
*
|
||||
* @package Redux
|
||||
*/
|
||||
|
||||
echo null;
|
||||
@@ -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
@@ -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 );
|
||||
1
wp-content/plugins/eagle-booking/include/redux/inc/fields/box_shadow/redux-box-shadow.min.js
vendored
Normal file
1
wp-content/plugins/eagle-booking/include/redux/inc/fields/box_shadow/redux-box-shadow.min.js
vendored
Normal 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);
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user