/* Widget Name: Button Description: Create a custom button with flexible styling, icon support, and click tracking functionality. Author: SiteOrigin Author URI: https://siteorigin.com Documentation: https://siteorigin.com/widgets-bundle/button-widget-documentation/ Keywords: event, icon, link */ class SiteOrigin_Widget_Button_Widget extends SiteOrigin_Widget { public function __construct() { parent::__construct( 'sow-button', __( 'SiteOrigin Button', 'so-widgets-bundle' ), array( 'description' => __( 'Create a custom button with flexible styling, icon support, and click tracking functionality.', 'so-widgets-bundle' ), 'help' => 'https://siteorigin.com/widgets-bundle/button-widget-documentation/', ), array( ), false, plugin_dir_path( __FILE__ ) ); } public function get_settings_form() { return array( 'responsive_breakpoint' => array( 'type' => 'measurement', 'label' => __( 'Responsive Breakpoint', 'so-widgets-bundle' ), 'default' => '780px', 'description' => __( 'This setting controls when the Mobile Align setting will be used. The default value is 780px.', 'so-widgets-bundle' ), ), ); } public function initialize() { $this->register_frontend_styles( array( array( 'sow-button-base', plugin_dir_url( __FILE__ ) . 'css/style.css', array(), SOW_BUNDLE_VERSION, ), ) ); } public function get_widget_form() { return array( 'text' => array( 'type' => 'text', 'label' => __( 'Button Text', 'so-widgets-bundle' ), ), 'url' => array( 'type' => 'link', 'label' => __( 'Destination URL', 'so-widgets-bundle' ), 'allow_shortcode' => true, ), 'new_window' => array( 'type' => 'checkbox', 'default' => false, 'label' => __( 'Open in a new window', 'so-widgets-bundle' ), ), 'download' => array( 'type' => 'checkbox', 'default' => false, 'label' => __( 'Download', 'so-widgets-bundle' ), 'description' => __( 'The Destination URL will be downloaded when a user clicks on the button.', 'so-widgets-bundle' ), ), 'button_icon' => array( 'type' => 'section', 'label' => __( 'Icon', 'so-widgets-bundle' ), 'fields' => array( 'icon_selected' => array( 'type' => 'icon', 'label' => __( 'Icon', 'so-widgets-bundle' ), ), 'icon_color' => array( 'type' => 'color', 'label' => __( 'Icon Color', 'so-widgets-bundle' ), ), 'icon' => array( 'type' => 'media', 'label' => __( 'Image Icon', 'so-widgets-bundle' ), 'description' => __( 'Replaces the icon with your own image icon.', 'so-widgets-bundle' ), ), 'icon_placement' => array( 'type' => 'select', 'label' => __( 'Icon Placement', 'so-widgets-bundle' ), 'default' => 'left', 'options' => array( 'top' => __( 'Top', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'bottom' => __( 'Bottom', 'so-widgets-bundle' ), 'left' => __( 'Left', 'so-widgets-bundle' ), ), ), ), ), 'design' => array( 'type' => 'section', 'label' => __( 'Design and Layout', 'so-widgets-bundle' ), 'hide' => true, 'fields' => array( 'width' => array( 'type' => 'measurement', 'label' => __( 'Width', 'so-widgets-bundle' ), 'description' => __( 'Leave blank to let the button resize according to content.', 'so-widgets-bundle' ), ), 'align' => array( 'type' => 'select', 'label' => __( 'Align', 'so-widgets-bundle' ), 'default' => 'center', 'options' => array( 'left' => __( 'Left', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'center' => __( 'Center', 'so-widgets-bundle' ), 'justify' => __( 'Full Width', 'so-widgets-bundle' ), ), ), 'mobile_align' => array( 'type' => 'select', 'label' => __( 'Mobile Align', 'so-widgets-bundle' ), 'default' => 'center', 'options' => array( 'left' => __( 'Left', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'center' => __( 'Center', 'so-widgets-bundle' ), 'justify' => __( 'Full Width', 'so-widgets-bundle' ), ), ), 'theme' => array( 'type' => 'select', 'label' => __( 'Button Theme', 'so-widgets-bundle' ), 'default' => 'flat', 'options' => array( 'atom' => __( 'Atom', 'so-widgets-bundle' ), 'flat' => __( 'Flat', 'so-widgets-bundle' ), 'wire' => __( 'Wire', 'so-widgets-bundle' ), ), ), 'button_color' => array( 'type' => 'color', 'label' => __( 'Button Color', 'so-widgets-bundle' ), ), 'text_color' => array( 'type' => 'color', 'label' => __( 'Text Color', 'so-widgets-bundle' ), ), 'hover' => array( 'type' => 'checkbox', 'default' => true, 'label' => __( 'Use hover effects', 'so-widgets-bundle' ), 'state_emitter' => array( 'callback' => 'conditional', 'args' => array( 'hover[show]: val', 'hover[hide]: ! val', ), ), ), 'hover_background_color' => array( 'type' => 'color', 'label' => __( 'Hover Background Color', 'so-widgets-bundle' ), 'state_handler' => array( 'hover[show]' => array( 'show' ), 'hover[hide]' => array( 'hide' ), ), ), 'hover_text_color' => array( 'type' => 'color', 'label' => __( 'Hover Text Color', 'so-widgets-bundle' ), 'state_handler' => array( 'hover[show]' => array( 'show' ), 'hover[hide]' => array( 'hide' ), ), ), 'font' => array( 'type' => 'font', 'label' => __( 'Font', 'so-widgets-bundle' ), 'default' => 'default', ), 'font_size' => array( 'type' => 'measurement', 'label' => __( 'Font Size', 'so-widgets-bundle' ), 'default' => '1em', ), 'icon_size' => array( 'type' => 'measurement', 'label' => __( 'Icon Size', 'so-widgets-bundle' ), 'default' => '1.3em', ), 'padding' => array( 'type' => 'measurement', 'label' => __( 'Padding', 'so-widgets-bundle' ), 'default' => '1em', ), 'rounding' => array( 'type' => 'multi-measurement', 'label' => __( 'Rounding', 'so-widgets-bundle' ), 'default' => '0.25em 0.25em 0.25em 0.25em', 'measurements' => array( 'top' => array( 'label' => __( 'Top', 'so-widgets-bundle' ), ), 'right' => array( 'label' => __( 'Right', 'so-widgets-bundle' ), ), 'bottom' => array( 'label' => __( 'Bottom', 'so-widgets-bundle' ), ), 'left' => array( 'label' => __( 'Left', 'so-widgets-bundle' ), ), ), ), ), ), 'attributes' => array( 'type' => 'section', 'label' => __( 'Other Attributes and SEO', 'so-widgets-bundle' ), 'hide' => true, 'fields' => array( 'id' => array( 'type' => 'text', 'label' => __( 'Button ID', 'so-widgets-bundle' ), 'description' => __( 'An ID attribute allows you to target this button in JavaScript.', 'so-widgets-bundle' ), ), 'classes' => array( 'type' => 'text', 'label' => __( 'Button Classes', 'so-widgets-bundle' ), 'description' => __( 'Additional CSS classes added to the button link.', 'so-widgets-bundle' ), ), 'title' => array( 'type' => 'text', 'label' => __( 'Title Attribute', 'so-widgets-bundle' ), 'description' => __( 'Adds a title attribute to the button link.', 'so-widgets-bundle' ), ), 'on_click' => array( 'type' => 'text', 'label' => __( 'Onclick', 'so-widgets-bundle' ), 'description' => __( 'Run this JavaScript when the button is clicked. Ideal for tracking.', 'so-widgets-bundle' ), 'onclick' => true, ), 'rel' => array( 'type' => 'text', 'label' => __( 'Rel Attribute', 'so-widgets-bundle' ), 'description' => __( 'Adds a rel attribute to the button link.', 'so-widgets-bundle' ), ), ), ), ); } public function get_style_name( $instance ) { if ( empty( $instance['design']['theme'] ) ) { return 'atom'; } return $instance['design']['theme']; } /** * Get the variables for the Button Widget. * * @return array */ public function get_template_variables( $instance, $args ) { $button_attributes = array(); $attributes = $instance['attributes']; $classes = ! empty( $attributes['classes'] ) ? $attributes['classes'] : ''; if ( ! empty( $classes ) ) { $classes .= ' '; } $classes .= 'sowb-button ow-icon-placement-' . $instance['button_icon']['icon_placement']; if ( ! empty( $instance['design']['hover'] ) ) { $classes .= ' ow-button-hover'; } $button_attributes['class'] = implode( ' ', array_map( 'sanitize_html_class', explode( ' ', $classes ) ) ); if ( ! empty( $instance['new_window'] ) ) { $button_attributes['target'] = '_blank'; $button_attributes['rel'] = 'noopener noreferrer'; } if ( ! empty( $instance['download'] ) ) { $button_attributes['download'] = null; } if ( ! empty( $attributes['id'] ) ) { $button_attributes['id'] = $attributes['id']; } if ( ! empty( $attributes['title'] ) ) { $button_attributes['title'] = $attributes['title']; } if ( ! empty( $attributes['rel'] ) ) { if ( isset( $button_attributes['rel'] ) ) { $button_attributes['rel'] .= " $attributes[rel]"; } else { $button_attributes['rel'] = $attributes['rel']; } } $icon_image_url = ''; if ( ! empty( $instance['button_icon']['icon'] ) ) { $attachment = wp_get_attachment_image_src( $instance['button_icon']['icon'] ); if ( ! empty( $attachment ) ) { $icon_image_url = $attachment[0]; } } return array( 'button_attributes' => apply_filters( 'siteorigin_widgets_button_attributes', $button_attributes, $instance ), 'href' => ! empty( $instance['url'] ) ? $instance['url'] : '', 'on_click' => ! empty( $attributes['on_click'] ) ? $attributes['on_click'] : '', 'align' => $instance['design']['align'], 'icon_image_url' => $icon_image_url, 'icon' => $instance['button_icon']['icon_selected'], 'icon_color' => $instance['button_icon']['icon_color'], 'text' => $instance['text'], ); } /** * Get the variables that we'll be injecting into the less stylesheet. * * @return array */ public function get_less_variables( $instance ) { if ( empty( $instance ) || empty( $instance['design'] ) ) { return array(); } $text_color = isset( $instance['design']['text_color'] ) ? $instance['design']['text_color'] : ''; $button_color = isset( $instance['design']['button_color'] ) ? $instance['design']['button_color'] : ''; $less_vars = array( 'button_width' => isset( $instance['design']['width'] ) ? $instance['design']['width'] : '', 'button_color' => $button_color, 'text_color' => $text_color, 'icon_size' => ! empty( $instance['design']['icon_size'] ) ? $instance['design']['icon_size'] : '1.3em', 'hover_text_color' => ! empty( $instance['design']['hover_text_color'] ) ? $instance['design']['hover_text_color'] : $text_color, 'hover_background_color' => ! empty( $instance['design']['hover_background_color'] ) ? $instance['design']['hover_background_color'] : $button_color, 'font_size' => isset( $instance['design']['font_size'] ) ? $instance['design']['font_size'] : '', 'rounding' => isset( $instance['design']['rounding'] ) ? $instance['design']['rounding'] : '', 'padding' => isset( $instance['design']['padding'] ) ? $instance['design']['padding'] : '', 'has_text' => empty( $instance['text'] ) ? 'false' : 'true', 'responsive_breakpoint' => $this->get_global_settings( 'responsive_breakpoint' ), 'align' => ! empty( $instance['design']['align'] ) ? $instance['design']['align'] : 'center', 'mobile_align' => ! empty( $instance['design']['mobile_align'] ) ? $instance['design']['mobile_align'] : 'center', 'has_button_icon' => empty( $instance['button_icon']['icon_selected'] ) ? 'false' : 'true', ); if ( ! empty( $instance['design']['font'] ) ) { $font = siteorigin_widget_get_font( $instance['design']['font'] ); $less_vars['button_font'] = $font['family']; if ( ! empty( $font['weight'] ) ) { $less_vars['button_font_weight'] = $font['weight_raw']; $less_vars['button_font_style'] = $font['style']; } } return $less_vars; } /** * Make sure the instance is the most up to date version. * * @return mixed */ public function modify_instance( $instance ) { if ( empty( $instance ) ) { return array(); } $migrate_props = array( 'button_icon' => array( 'icon_selected', 'icon_color', 'icon', ), 'design' => array( 'align', 'theme', 'button_color', 'text_color', 'hover', 'hover_text_color', 'hover_background_color', 'font_size', 'rounding', 'padding', ), 'attributes' => array( 'id', ), ); foreach ( $migrate_props as $prop => $sub_props ) { if ( empty( $instance[ $prop ] ) ) { $instance[ $prop ] = array(); foreach ( $sub_props as $sub_prop ) { if ( isset( $instance[ $sub_prop ] ) ) { $instance[ $prop ][ $sub_prop ] = $instance[ $sub_prop ]; unset( $instance[ $sub_prop ] ); } } } } // Migrate onclick setting to prevent Wordfence flag. if ( ! empty( $instance['attributes'] ) && ! empty( $instance['attributes']['onclick'] ) ) { $instance['attributes']['on_click'] = $instance['attributes']['onclick']; } // If the mobile_align setting isn't set, set it to the same value as the align value. if ( ! empty( $instance['design'] ) && ! empty( $instance['design']['align'] ) && empty( $instance['design']['mobile_align'] ) ) { $instance['design']['mobile_align'] = $instance['design']['align']; } // Migrate predefined settings to more customizable settings. if ( ! empty( $instance['design']['font_size'] ) && is_numeric( $instance['design']['font_size'] ) ) { $instance['design']['font_size'] .= 'em'; } if ( ! empty( $instance['design']['padding'] ) && is_numeric( $instance['design']['padding'] ) ) { $instance['design']['padding'] .= 'em'; } if ( ! empty( $instance['design']['rounding'] ) && is_numeric( $instance['design']['rounding'] ) ) { $instance['design']['rounding'] = $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em'; } if ( empty( $instance['design']['icon_size'] ) ) { $instance['design']['icon_size'] = '1.3em'; } return $instance; } public function get_form_teaser() { if ( class_exists( 'SiteOrigin_Premium' ) ) { return false; } return array( sprintf( __( 'Add a beautiful tooltip to the Button Widget with %sSiteOrigin Premium%s', 'so-widgets-bundle' ), '', '' ), ); } } siteorigin_widget_register( 'sow-button', __FILE__, 'SiteOrigin_Widget_Button_Widget' );{"id":140375,"date":"2026-06-10T19:45:59","date_gmt":"2026-06-10T19:45:59","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=140375"},"modified":"2026-06-10T19:45:59","modified_gmt":"2026-06-10T19:45:59","slug":"el-casino-robocat-ofrece-una-sensacion-movil-agil-en-espana","status":"publish","type":"post","link":"https:\/\/klecet.edu.in\/alumni\/el-casino-robocat-ofrece-una-sensacion-movil-agil-en-espana\/","title":{"rendered":"El casino Robocat ofrece una sensaci\u00f3n m\u00f3vil \u00e1gil en Espa\u00f1a"},"content":{"rendered":"
He testeado muchas plataformas de juego desde mi smartphone, y la vivencia con Robocat Casino resalta. No es solo una cosa est\u00e9tica; se ve que han trabajado para unir dise\u00f1o, rendimiento y caracter\u00edsticas de manera consistente. La exploraci\u00f3n es natural desde el primer momento, los juegos se cargan r\u00e1pido y da la sensaci\u00f3n de usar una app nativa, no una web a la que le han retocado. Para cualquier aficionado en Espa\u00f1a que aprecie poder jugar donde y cuando prefiera, esta diferencia es grande. Que adem\u00e1s contemple m\u00e9todos de pago del pa\u00eds y soporte en espa\u00f1ol perfecciona una oferta hecha a nuestra necesidad.<\/p>\n
El momento de darse de alta y meter dinero es donde muchas webs y apps m\u00f3viles cometen errores. Robocat Casino lo ha agilizado bastante. El formulario de registro es corto y lo completas en un minuto desde el navegador del tel\u00e9fono. Para los dep\u00f3sitos, hay todos los m\u00e9todos de pago habituales aqu\u00ed, y cada uno est\u00e1 adaptado al m\u00f3vil. No importa si usas carteras digitales como Skrill, tarjetas o pagos directos con el m\u00f3vil, el proceso es fiable, \u00e1gil y te gu\u00eda en cada paso. Verificar la cuenta tambi\u00e9n se puede hacer cargando documentos directamente desde la galer\u00eda del tel\u00e9fono, una facilidad enorme. La encriptaci\u00f3n de datos es visible y te avisa en cada paso, lo que genera confianza desde el principio.<\/p>\n
Despu\u00e9s de esta revisi\u00f3n, puedo mencionar las ventajas m\u00e1s importantes que, en mi opini\u00f3n, sit\u00faan a Robocat Casino como una elecci\u00f3n robusta para el juego m\u00f3vil. Juntar un rendimiento t\u00e9cnico excelente con una interfaz creada a medida para la pantalla t\u00e1ctil genera una experiencia coherente y de nivel. La libertad de entrar a un cat\u00e1logo completo, gestionar tu cuenta y contactar con soporte en cualquier momento convierte el ocio en algo adaptable de verdad. Para el jugador de hoy, esto no es un plus, sino el nivel que se deber\u00eda exigir.<\/p>\n
El coraz\u00f3n de un casino son sus juegos, y Robocat ha logrado que su extensa colecci\u00f3n opere muy bien en m\u00f3vil. Desarrolladores como NetEnt, Pragmatic Play y Play’n GO tienen sus t\u00edtulos ajustados a la pantalla t\u00e1ctil, y se nota. Los acciones, como arrastrar para rotar los rodillos o pulsar para ejecutar un bono, funcionan perfectamente. Hay de todo, desde slots muy conocidos hasta juegos de mesa habituales, todos sin que la calidad de imagen o sonido se vea afectada. Participar fue un placer para los dedos. Buscar juegos por desarrollador o atributos es igual de efectivo que en el ordenador, y hallas lo que buscas con tres toques como mucho.<\/p>\n
Un estilo visual pierde todo su sentido si la web no responde r\u00e1pido. En Robocat Casino, el apartado t\u00e9cnico es robusto. Lo prob\u00e9 con diferentes conexiones, desde Wi-Fi veloz hasta datos m\u00f3viles est\u00e1ndar, y la velocidad se conserv\u00f3 estable. Los juegos, incluidas las tragaperras con gr\u00e1ficos m\u00e1s elaborados, arrancan en pocos segundos. En todo mi tiempo de prueba, no hubo ca\u00eddas, pantallas bloqueadas o esos bloqueos que fastidian la emoci\u00f3n de una apuesta. Esta firmeza es esencial para no desconcentrarse y para confiar en la plataforma. Al emplear tecnolog\u00eda HTML5, no hace falta descargar actualizaciones; la experiencia est\u00e1 siempre optimizada y lista en tu navegador.<\/p>\n
Al iniciar Robocat en el tel\u00e9fono, lo primero que observas es una interfaz clara y actual. Los elementos est\u00e1n dispuestos con l\u00f3gica, priorizando a los juegos y a lo importante sin saturar la pantalla de cosas. Los controles tienen el tama\u00f1o preciso para presionarlos con el dedo sin confundirte. La combinaci\u00f3n de colores, con sus azules y matices naranjas, es llamativa pero no fatiga la vista si te pones a jugar un periodo extenso. Pasar de una secci\u00f3n a otra es fluido, y el men\u00fa se muestra de forma natural, algo que evidencia que han considerado en la navegaci\u00f3n en m\u00f3vil. Me gustaron particularidades como que el men\u00fa se desvanece solo durante la sesi\u00f3n para que disfrutes toda la pantalla, un detalle que habla de una atenci\u00f3n fina a los detalles.<\/p>\n
Durante mi an\u00e1lisis, me centr\u00e9 en probar no solo los juegos, sino todo lo que envuelve a Robocat en el m\u00f3vil. Manej\u00e9 mi perfil, configur\u00e9 los restricciones de dep\u00f3sito en la parte de apuestas conscientes, revis\u00e9 el registro de transacciones y hasta emple\u00e9 la funci\u00f3n de “cobrar” en apuestas en vivo. Cada una de estas acciones, que en otras plataformas resultan tediosas, se llev\u00f3 a cabo de forma \u00e1gil e clara. Contar con un gesti\u00f3n completa sobre tu perfil y tu manera de apostar desde un aparato tan personal como el m\u00f3vil es muy pr\u00e1ctico. Esta autonom\u00eda es uno de los pilares de una buena usabilidad m\u00f3vil.<\/p>\n
Algo que no siempre se atiende es c\u00f3mo gestiona el casino las mensajes push (si usas la app) o los recordatorios en la web. Robocat lo hace bien, sin ser invasivo. Te deja encender notificaciones para promociones personalizadas o para cuando empieza un torneo, pero sin bombardear al jugador. Esta adaptaci\u00f3n demuestra un respeto por la usabilidad que va m\u00e1s all\u00e1 de lo b\u00e1sico, logrando que la conexi\u00f3n con la p\u00e1gina sea previsora pero nunca molesta. Tienes la opci\u00f3n de escoger que te alerten solo de lo necesario, para estar al tanto sin padecer interrupciones constantes.<\/p>\n