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,216 @@
|
||||
<?php
|
||||
/**
|
||||
* Spinner Field
|
||||
*
|
||||
* @package Redux Framework/Fields
|
||||
* @author Dovy Paukstys & Kevin Provance (kprovance)
|
||||
* @version 4.0.0
|
||||
*/
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
if ( ! class_exists( 'Redux_Spinner', false ) ) {
|
||||
|
||||
/**
|
||||
* Class Redux_Spinner
|
||||
*/
|
||||
class Redux_Spinner extends Redux_Field {
|
||||
|
||||
/**
|
||||
* Set field and value defaults.
|
||||
*/
|
||||
public function set_defaults() {
|
||||
$params = array(
|
||||
'min' => 0,
|
||||
'max' => 1,
|
||||
'step' => 1,
|
||||
'default' => '',
|
||||
'edit' => true,
|
||||
'plus' => '+',
|
||||
'minus' => '-',
|
||||
'format' => '',
|
||||
'prefix' => '',
|
||||
'suffix' => '',
|
||||
'point' => '.',
|
||||
'places' => null,
|
||||
);
|
||||
|
||||
$this->field = wp_parse_args( $this->field, $params );
|
||||
}
|
||||
|
||||
/**
|
||||
* Field Render Function.
|
||||
* Takes the vars and outputs the HTML for the field in the settings
|
||||
*
|
||||
* @since ReduxFramework 3.0.0
|
||||
*/
|
||||
public function render() {
|
||||
$data_string = '';
|
||||
|
||||
foreach ( $this->field as $key => $val ) {
|
||||
if ( in_array( $key, array( 'min', 'max', 'step', 'default', 'plus', 'minus', 'prefix', 'suffix', 'point', 'places' ), true ) ) {
|
||||
$data_string .= ' data-' . esc_attr( $key ) . '="' . esc_attr( $val ) . '" ';
|
||||
}
|
||||
}
|
||||
|
||||
$data_string .= ' data-val=' . $this->value;
|
||||
|
||||
// Don't allow input edit if there's a step.
|
||||
$readonly = '';
|
||||
if ( isset( $this->field['edit'] ) && false === $this->field['edit'] ) {
|
||||
$readonly = ' readonly="readonly"';
|
||||
}
|
||||
|
||||
echo '<div id="' . esc_attr( $this->field['id'] ) . '-spinner" class="redux_spinner" rel="' . esc_attr( $this->field['id'] ) . '">';
|
||||
|
||||
echo '<input type="text" ' . $data_string . ' name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '" id="' . esc_attr( $this->field['id'] ) . '" value="' . esc_attr( $this->value ) . '" class="mini spinner-input ' . esc_attr( $this->field['class'] ) . '"' . $readonly . '/>'; // phpcs:ignore WordPress.Security.EscapeOutput
|
||||
|
||||
echo '</div>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Clean the field data to the fields defaults given the parameters.
|
||||
*
|
||||
* @since Redux_Framework 3.1.1
|
||||
*/
|
||||
private function clean() {
|
||||
if ( empty( $this->field['min'] ) ) {
|
||||
$this->field['min'] = 0;
|
||||
} else {
|
||||
$this->field['min'] = intval( $this->field['min'] );
|
||||
}
|
||||
|
||||
if ( empty( $this->field['max'] ) ) {
|
||||
$this->field['max'] = $this->field['min'] + 1;
|
||||
} else {
|
||||
$this->field['max'] = intval( $this->field['max'] );
|
||||
}
|
||||
|
||||
if ( empty( $this->field['step'] ) || $this->field['step'] > $this->field['max'] ) {
|
||||
$this->field['step'] = 1;
|
||||
} else {
|
||||
$this->field['step'] = intval( $this->field['step'] );
|
||||
}
|
||||
|
||||
if ( empty( $this->value ) && ! empty( $this->field['default'] ) && $this->field['min'] >= 1 ) {
|
||||
$this->value = intval( $this->field['default'] );
|
||||
}
|
||||
|
||||
if ( empty( $this->value ) && $this->field['min'] >= 1 ) {
|
||||
$this->value = $this->field['min'];
|
||||
}
|
||||
|
||||
if ( empty( $this->value ) ) {
|
||||
$this->value = 0;
|
||||
}
|
||||
|
||||
// Extra Validation.
|
||||
if ( $this->value < $this->field['min'] ) {
|
||||
$this->value = $this->field['min'];
|
||||
} elseif ( $this->value > $this->field['max'] ) {
|
||||
$this->value = $this->field['max'];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueue Function.
|
||||
* If this field requires any scripts, or css define this function and register/enqueue the scripts/css
|
||||
*
|
||||
* @since ReduxFramework 3.0.0
|
||||
*/
|
||||
public function enqueue() {
|
||||
wp_enqueue_script(
|
||||
'redux-field-spinner-custom',
|
||||
Redux_Core::$url . 'inc/fields/spinner/vendor/jquery.ui.spinner' . Redux_Functions::is_min() . '.js',
|
||||
array( 'jquery', 'redux-js' ),
|
||||
$this->timestamp,
|
||||
true
|
||||
);
|
||||
|
||||
wp_enqueue_script(
|
||||
'redux-field-spinner',
|
||||
Redux_Core::$url . 'inc/fields/spinner/redux-spinner' . Redux_Functions::is_min() . '.js',
|
||||
array( 'jquery', 'redux-field-spinner-custom', 'jquery-ui-core', 'jquery-ui-dialog', 'redux-js' ),
|
||||
$this->timestamp,
|
||||
true
|
||||
);
|
||||
|
||||
if ( $this->parent->args['dev_mode'] ) {
|
||||
wp_enqueue_style(
|
||||
'redux-field-spinner',
|
||||
Redux_Core::$url . 'inc/fields/spinner/redux-spinner.css',
|
||||
array(),
|
||||
$this->timestamp
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* CSS/compiler output.
|
||||
*
|
||||
* @param string|null|array $style CSS styles.
|
||||
*/
|
||||
public function output( $style = '' ) {
|
||||
if ( ! empty( $this->value ) ) {
|
||||
if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) {
|
||||
$css = $this->parse_css( $this->value, $this->field['output'] );
|
||||
$this->parent->outputCSS .= esc_attr( $css );
|
||||
}
|
||||
|
||||
if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) {
|
||||
$css = $this->parse_css( $this->value, $this->field['compiler'] );
|
||||
$this->parent->compilerCSS .= esc_attr( $css );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Compile CSS data for output.
|
||||
*
|
||||
* @param mixed $value Value.
|
||||
* @param mixed $output .
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function parse_css( $value, $output ): string {
|
||||
// No notices.
|
||||
$css = '';
|
||||
|
||||
$unit = $this->field['output_unit'] ?? 'px';
|
||||
|
||||
// Must be an array.
|
||||
if ( is_array( $output ) ) {
|
||||
foreach ( $output as $selector => $mode ) {
|
||||
if ( '' !== $mode && '' !== $selector ) {
|
||||
$css .= $selector . '{' . $mode . ':' . $value . $unit . ';}';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $css;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate CSS style (unused, but needed).
|
||||
*
|
||||
* @param string $data Field data.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function css_style( $data ): string {
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* 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_Spinner', 'ReduxFramework_Spinner' );
|
||||
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
/**
|
||||
* Silence is golden.
|
||||
*
|
||||
* @package Redux Framework
|
||||
*/
|
||||
|
||||
_deprecated_file( 'field_spinner.php', '4.3', 'class-redux-spinner.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.' );
|
||||
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
/**
|
||||
* Silence is golden.
|
||||
*
|
||||
* @package Redux Framework
|
||||
*/
|
||||
|
||||
echo null;
|
||||
@@ -0,0 +1,37 @@
|
||||
.redux-container-spinner .spinner-wrpr { position: relative; display: block; height: 30px; overflow: hidden; }
|
||||
|
||||
.redux-container-spinner .spinner-wrpr .spinner-input { position: relative !important; z-index: 1; width: 75px !important; height: 30px !important; background: #eee !important; border: 1px solid #bfbfbf !important; border-right: 0 !important; border-left: 0 !important; border-radius: 0 !important; }
|
||||
|
||||
.redux-container-spinner .ui-spinner { position: static; display: inline; }
|
||||
|
||||
.redux-container-spinner .ui-spinner-buttons { position: absolute; padding: 0; }
|
||||
|
||||
.redux-container-spinner .ui-widget .ui-spinner-button { color: #fff; position: absolute; top: 0; padding: 0 0 30px; overflow: hidden; cursor: pointer; background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f3f3f3)); background: -webkit-linear-gradient(#fff, #f3f3f3); background: linear-gradient(#fff, #f3f3f3); background-color: #fff; border: none; -webkit-box-shadow: none; box-shadow: none; }
|
||||
|
||||
.redux-container-spinner .ui-spinner-button:hover, .redux-container-spinner .ui-state-hover { background: -webkit-gradient(linear, left top, left bottom, from(#f3f3f3), to(#fff)); background: -webkit-linear-gradient(#f3f3f3, #fff); background: linear-gradient(#f3f3f3, #fff); background-color: #f3f3f3; }
|
||||
|
||||
.redux-container-spinner .ui-corner-tr, .redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-n { border-radius: 0 3px 3px 0; }
|
||||
|
||||
.redux-container-spinner .ui-corner-br, .redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-s { border-radius: 3px 0 0 3px; }
|
||||
|
||||
.redux-container-spinner .ui-spinner-button .ui-icon { top: 0; display: block; width: 28px; height: 28px; margin: 0; border: 1px solid #b7b7b7; background-image: initial; text-indent: 0; text-align: center; font-size: 18px; line-height: 26px; }
|
||||
|
||||
.dp-numberPicker, .dp-numberPicker-add, .dp-numberPicker-sub, .dp-numberPicker-input { display: inline-block; -webkit-box-sizing: border-box; box-sizing: border-box; text-align: center; vertical-align: top; height: 30px; }
|
||||
|
||||
.dp-numberPicker { border-radius: 3px; }
|
||||
|
||||
.redux-container .redux-container-spinner .dp-numberPicker-add, .redux-container .redux-container-spinner .dp-numberPicker-sub { width: 30px; font-size: 21px; cursor: pointer; -moz-user-select: none; -webkit-user-select: none; background-color: #33b5e5; color: #fff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); height: 29px !important; }
|
||||
|
||||
.redux-container .redux-container-spinner .dp-numberPicker-add.disabled, .redux-container .redux-container-spinner .dp-numberPicker-sub.disabled { background-color: #2c6a81; }
|
||||
|
||||
.dp-numberPicker-add { border-top-right-radius: 3px; border-bottom-right-radius: 3px; }
|
||||
|
||||
.dp-numberPicker-sub { border-top-left-radius: 3px; border-bottom-left-radius: 3px; }
|
||||
|
||||
.dp-numberPicker-input { width: 70px; background-color: #eee; border: 0; margin: 0 !important; -webkit-box-shadow: inset 0 1px 1px rgba(255, 255, 255, 0.5), inset 0 -1px 1px rgba(0, 0, 0, 0.5); box-shadow: inset 0 1px 1px rgba(255, 255, 255, 0.5), inset 0 -1px 1px rgba(0, 0, 0, 0.5); }
|
||||
|
||||
.dp-numberPicker-input:disabled { background-color: #eee; }
|
||||
|
||||
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtc3Bpbm5lci5jc3MiLCJzb3VyY2VzIjpbInJlZHV4LXNwaW5uZXIuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUNJLHdCQURvQixDQUNwQixhQUFhLENBQUMsRUFDVixRQUFRLEVBQUUsUUFBUSxFQUNsQixPQUFPLEVBQUUsS0FBSyxFQUNkLE1BQU0sRUFBRSxJQUFJLEVBQ1osUUFBUSxFQUFFLE1BQU0sR0FlbkI7O0FBcEJMLEFBT1Esd0JBUGdCLENBQ3BCLGFBQWEsQ0FNVCxjQUFjLENBQUMsRUFDWCxRQUFRLEVBQUUsbUJBQW1CLEVBQzdCLE9BQU8sRUFBRSxDQUFDLEVBQ1YsS0FBSyxFQUFFLGVBQWUsRUFDdEIsTUFBTSxFQUFFLGVBQWUsRUFDdkIsVUFBVSxFQUFFLGVBQWUsRUFDM0IsTUFBTSxFQUFFLDRCQUE0QixFQUNwQyxZQUFZLEVBQUUsWUFBWSxFQUMxQixXQUFXLEVBQUUsWUFBWSxFQUN6QixxQkFBcUIsRUFBRSxZQUFZLEVBQ25DLGtCQUFrQixFQUFFLFlBQVksRUFDaEMsYUFBYSxFQUFFLFlBQVksR0FDOUI7O0FBbkJULEFBc0JJLHdCQXRCb0IsQ0FzQnBCLFdBQVcsQ0FBQyxFQUNSLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLE9BQU8sRUFBRSxNQUFNLEdBQ2xCOztBQXpCTCxBQTRCSSx3QkE1Qm9CLENBNEJwQixtQkFBbUIsQ0FBQyxFQUNoQixRQUFRLEVBQUUsUUFBUSxFQUNsQixPQUFPLEVBQUUsQ0FBQyxHQUNiOztBQS9CTCxBQWlDSSx3QkFqQ29CLENBaUNwQixVQUFVLENBQUMsa0JBQWtCLENBQUMsRUFDMUIsS0FBSyxFQUFFLElBQUksRUFDWCxRQUFRLEVBQUUsUUFBUSxFQUNsQixHQUFHLEVBQUUsQ0FBQyxFQUNOLE9BQU8sRUFBRSxRQUFRLEVBQ2pCLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLE1BQU0sRUFBRSxPQUFPLEVBQ2YsVUFBVSxFQUFFLG1DQUFtQyxFQUMvQyxVQUFVLEVBQUUsaUNBQWlDLEVBQzdD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 */
|
||||
|
||||
/*# sourceMappingURL=redux-spinner.css.map */
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,58 @@
|
||||
/* global redux */
|
||||
|
||||
(function( $ ) {
|
||||
'use strict';
|
||||
|
||||
redux.field_objects = redux.field_objects || {};
|
||||
redux.field_objects.spinner = redux.field_objects.spinner || {};
|
||||
|
||||
redux.field_objects.spinner.init = function( selector ) {
|
||||
selector = $.redux.getSelector( selector, 'spinner' );
|
||||
|
||||
$( 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_spinner' ).each(
|
||||
function() {
|
||||
|
||||
// Slider init.
|
||||
var spinner = $( this ).find( '.spinner-input' ).data();
|
||||
|
||||
spinner.id = $( this ).find( '.spinner-input' ).attr( 'id' );
|
||||
|
||||
el.find( '#' + spinner.id ).spinner(
|
||||
{
|
||||
value: parseFloat( spinner.val, null ),
|
||||
min: parseFloat( spinner.min, null ),
|
||||
max: parseFloat( spinner.max, null ),
|
||||
step: parseFloat( spinner.step, null ),
|
||||
addText: spinner.plus,
|
||||
subText: spinner.minus,
|
||||
prefix: spinner.prefix,
|
||||
suffix: spinner.suffix,
|
||||
places: spinner.places,
|
||||
point: spinner.point
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
};
|
||||
})( jQuery );
|
||||
1
wp-content/plugins/eagle-booking/include/redux/inc/fields/spinner/redux-spinner.min.js
vendored
Normal file
1
wp-content/plugins/eagle-booking/include/redux/inc/fields/spinner/redux-spinner.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!function(n){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.spinner=redux.field_objects.spinner||{},redux.field_objects.spinner.init=function(e){e=n.redux.getSelector(e,"spinner"),n(e).each(function(){var i=n(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_spinner").each(function(){var e=n(this).find(".spinner-input").data();e.id=n(this).find(".spinner-input").attr("id"),i.find("#"+e.id).spinner({value:parseFloat(e.val,null),min:parseFloat(e.min,null),max:parseFloat(e.max,null),step:parseFloat(e.step,null),addText:e.plus,subText:e.minus,prefix:e.prefix,suffix:e.suffix,places:e.places,point:e.point})}))})}}(jQuery);
|
||||
@@ -0,0 +1,146 @@
|
||||
.redux-container-spinner {
|
||||
.spinner-wrpr {
|
||||
position: relative;
|
||||
display: block;
|
||||
height: 30px;
|
||||
overflow: hidden;
|
||||
|
||||
.spinner-input {
|
||||
position: relative !important;
|
||||
z-index: 1;
|
||||
width: 75px !important;
|
||||
height: 30px !important;
|
||||
background: #eee !important;
|
||||
border: 1px solid #bfbfbf !important;
|
||||
border-right: 0 !important;
|
||||
border-left: 0 !important;
|
||||
-webkit-border-radius: 0 !important;
|
||||
-moz-border-radius: 0 !important;
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
.ui-spinner {
|
||||
position: static;
|
||||
display: inline;
|
||||
}
|
||||
|
||||
|
||||
.ui-spinner-buttons {
|
||||
position: absolute;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.ui-widget .ui-spinner-button {
|
||||
color: #fff;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
padding: 0 0 30px;
|
||||
overflow: hidden;
|
||||
cursor: pointer;
|
||||
background: -moz-linear-gradient(#fff, #f3f3f3);
|
||||
background: -o-linear-gradient(#fff, #f3f3f3);
|
||||
background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f3f3f3));
|
||||
background: linear-gradient(#fff, #f3f3f3);
|
||||
background-color: #fff;
|
||||
border: none;
|
||||
-webkit-box-shadow: none;
|
||||
-moz-box-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.ui-spinner-button:hover,
|
||||
.ui-state-hover {
|
||||
background: -moz-linear-gradient(#f3f3f3, #fff);
|
||||
background: -o-linear-gradient(#f3f3f3, #fff);
|
||||
background: -webkit-gradient(linear, left top, left bottom, from(#f3f3f3), to(#fff));
|
||||
background: linear-gradient(#f3f3f3, #fff);
|
||||
background-color: #f3f3f3;
|
||||
}
|
||||
|
||||
.ui-corner-tr,
|
||||
.ui-spinner-button .ui-icon-triangle-1-n {
|
||||
-webkit-border-radius: 0 5px 5px 0;
|
||||
-moz-border-radius: 0 3px 3px 0;
|
||||
border-radius: 0 3px 3px 0;
|
||||
}
|
||||
|
||||
.ui-corner-br,
|
||||
.ui-spinner-button .ui-icon-triangle-1-s {
|
||||
-webkit-border-radius: 5px 0 0 5px;
|
||||
-moz-border-radius: 3px 0 0 3px;
|
||||
border-radius: 3px 0 0 3px;
|
||||
}
|
||||
|
||||
.ui-spinner-button {
|
||||
.ui-icon {
|
||||
top: 0;
|
||||
display: block;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
margin: 0;
|
||||
border: 1px solid #b7b7b7;
|
||||
background-image: initial;
|
||||
text-indent: 0;
|
||||
text-align: center;
|
||||
font-size: 18px;
|
||||
line-height: 26px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.dp-numberPicker,
|
||||
.dp-numberPicker-add,
|
||||
.dp-numberPicker-sub,
|
||||
.dp-numberPicker-input {
|
||||
display: inline-block;
|
||||
box-sizing: border-box;
|
||||
text-align: center;
|
||||
vertical-align: top;
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
.dp-numberPicker {
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.redux-container .redux-container-spinner .dp-numberPicker-add,
|
||||
.redux-container .redux-container-spinner .dp-numberPicker-sub {
|
||||
width: 30px;
|
||||
font-size: 21px;
|
||||
cursor: pointer;
|
||||
-moz-user-select: none;
|
||||
-webkit-user-select: none;
|
||||
background-color: #33b5e5;
|
||||
color: #fff;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
height: 29px !important;
|
||||
|
||||
&.disabled {
|
||||
background-color: #2c6a81;
|
||||
}
|
||||
}
|
||||
|
||||
.dp-numberPicker-add {
|
||||
border-top-right-radius: 3px;
|
||||
border-bottom-right-radius: 3px;
|
||||
}
|
||||
|
||||
.dp-numberPicker-sub {
|
||||
border-top-left-radius: 3px;
|
||||
border-bottom-left-radius: 3px;
|
||||
}
|
||||
|
||||
.dp-numberPicker-input {
|
||||
width: 70px;
|
||||
background-color: #eee;
|
||||
border: 0;
|
||||
margin: 0 !important;
|
||||
box-shadow:
|
||||
inset 0 1px 1px rgba(255, 255, 255, 0.5),
|
||||
inset 0 -1px 1px rgba(0, 0, 0, 0.5);
|
||||
|
||||
&:disabled {
|
||||
background-color: #eee;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user