/* 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":140742,"date":"2026-06-11T01:34:59","date_gmt":"2026-06-11T01:34:59","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=140742"},"modified":"2026-06-11T01:34:59","modified_gmt":"2026-06-11T01:34:59","slug":"flamantes-juegos-sin-presion-en-spingranny-casino-para-espana","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/flamantes-juegos-sin-presion-en-spingranny-casino-para-espana\/","title":{"rendered":"Flamantes Juegos Sin Presi\u00f3n en Spingranny Casino para Espa\u00f1a"},"content":{"rendered":"
\n\"Spingranny:<\/p>\n

El entretenimiento en l\u00ednea requiere innovaciones para permanecer atractivo. En Spingranny Casino lo conocemos y por eso ofrecemos una alternativa diferente: una colecci\u00f3n de juegos innovadores dise\u00f1ados para disfrutar sin estr\u00e9s. Eliminamos la presi\u00f3n de la rivalidad para centrarnos en la diversi\u00f3n aut\u00e9ntica. Buscamos que los usuarios en Espa\u00f1a dispongan un entorno donde lo importante sea la emoci\u00f3n de explorar algo diferente y la satisfacci\u00f3n de un rato de juego apacible. Nuestro promesa es evidente: innovar, pero con un enfoque personal.<\/p>\n

La Filosof\u00eda del Ocio Sin Presi\u00f3n<\/h2>\n

En Spingranny Casino partimos de un concepto: el juego online ha de ser una fuente de satisfacci\u00f3n de felicidad, no de estr\u00e9s. La idea del “juego sin presi\u00f3n” se basa en generar un entorno donde cada persona pueda avanzar a su manera. Un sitio para descubrir mec\u00e1nicas novedosas y sumergirse en la narrativa de cada propuesta sin la inquietud de las apuestas elevadas o las competiciones agotadoras. Esta manera de enfocar modifica la sensaci\u00f3n, porque sit\u00faa el goce del instante en el foco. Es, en el fondo, una invitaci\u00f3n a disfrutar solo por el placer de participar.<\/p>\n

Esta mentalidad abarca cada parte de nuestra plataforma, desde la interfaz hasta los propuestas que seleccionamos, que priorizan una diversi\u00f3n responsable. Buscamos que te encuentres c\u00f3modo, distra\u00eddo y, sobre todo, libre de presiones. Ante un \u00e1mbito que a menudo opta por la adrenalina, nosotros ofrecemos un remanso de ocio tranquilo. Aqu\u00ed, el mayor logro es la satisfacci\u00f3n que te obtienes tras cada sesi\u00f3n y la sensaci\u00f3n de encontrar algo emocionante en cada vez.<\/p>\n

Nuestra Apuesta con la Evoluci\u00f3n Permanente<\/h2>\n

Ofrecer nuevos juegos sin presi\u00f3n no es un evento puntual https:\/\/sspingranny.com\/es-es\/<\/a>. Es un compromiso firme con nuestra comunidad. Nuestro equipo trabaja para analizar el cat\u00e1logo de los desarrolladores m\u00e1s talentosos y mantener un flujo regular de contenido fresco y de calidad. Colaboramos con proveedores de software l\u00edderes y, a veces, obtenemos lanzamientos en exclusiva o versiones anticipadas. Esta apuesta a la innovaci\u00f3n hace que cada visita a Spingranny Casino pueda regalarte una agradable sorpresa.<\/p>\n

Nuestra innovaci\u00f3n no se limita a los juegos. Tambi\u00e9n evolucionamos las herramientas de control, las opciones de pago y la experiencia de usuario, fundament\u00e1ndonos en los comentarios de nuestros jugadores. Apostamos en una mejora continua que escucha a la comunidad. Este ciclo de novedad, feedback y optimizaci\u00f3n es lo que nos permite mantener vivo el esp\u00edritu del juego sin presi\u00f3n. As\u00ed conseguimos que Spingranny Casino siga siendo un referente de entretenimiento online moderno, seguro y, por encima de todo, divertido para todos en Espa\u00f1a.<\/p>\n

C\u00f3mo Encontrar los Nuevos Lanzamientos en Spingranny<\/h2>\n

Localizar las adiciones recientes en nuestra plataforma es simple. El proceso est\u00e1 pensado para que pierdas menos tiempo buscando y m\u00e1s jugando. Cuando accedes al lobby principal, ver\u00e1s una secci\u00f3n especial llamada “Novedades” o “Lanzamientos Recientes”. Se actualiza autom\u00e1ticamente con los t\u00edtulos m\u00e1s recientes. Asimismo, cada juego nuevo lleva una etiqueta especial (un distintivo “Nuevo” o “Reci\u00e9n llegado”) durante sus primeras semanas, lo que ayuda a identificarlo dentro de nuestra gran biblioteca.<\/p>\n

    \n
  1. Accede a tu cuenta en Spingranny Casino y navega al lobby de juegos.<\/li>\n
  2. Busca la pesta\u00f1a o secci\u00f3n que diga “Nuevos Juegos” o “Reci\u00e9n Llegados”.<\/li>\n
  3. Explora la galer\u00eda de lanzamientos. Haz clic en cualquier portada para leer una descripci\u00f3n detallada.<\/li>\n
  4. Utiliza el bot\u00f3n “Jugar en Demo” para testar el juego sin riesgo. Si lo prefieres, selecciona “Jugar por Dinero Real” para comenzar la aventura con tus fondos.<\/li>\n
  5. No olvides que puedes filtrar por proveedor o tipo de juego dentro de la misma secci\u00f3n de novedades para ajustar la b\u00fasqueda.<\/li>\n<\/ol>\n

    Explora Nuestra Selecci\u00f3n de Lanzamientos<\/h2>\n

    Nuestra colecci\u00f3n de juegos se transforma y crece constantemente. Nos llena de orgullo mostrar las \u00faltimas incorporaciones, seleccionadas con atenci\u00f3n para ti. Estas novedades no son meras adiciones. Son t\u00edtulos que recogen las corrientes actuales en creatividad, narrativa y mec\u00e1nicas, siempre bajo nuestra filosof\u00eda sin presi\u00f3n. Desde aventuras gr\u00e1ficas que te cautivan hasta slots con funciones originales, cada juego garantiza una vivencia singular. La ilusi\u00f3n de lo nuevo est\u00e1 a un solo clic.<\/p>\n

    \"SpinGranny<\/p>\n

    Slots con Motivos Innovadoras<\/h3>\n

    Las nuevas slots de Spingranny Casino son un recorrido a mundos de imaginaci\u00f3n. Hemos incorporado juegos que descubren desde creencias antiguas hasta paisajes digitales futuristas, todo con visuales n\u00edtidos y bandas sonoras que te sumergen. Encontrar\u00e1s modos de bono extensos o rondas de jugadas sin costo con incrementos progresivos, dise\u00f1ados para asombrarte sin requerirte estrategias complicadas. Son juegos que relatan una historia y, de propina, brindan la oportunidad de recompensas interesantes. Ideales para una sesi\u00f3n relajada pero cargada de emoci\u00f3n.<\/p>\n

    Juegos de Mesa con un Estilo Moderno<\/h3>\n

    Para los seguidores a la estrategia cl\u00e1sica, hemos aportado un aire nuevo a los juegos de mesa. Visualiza en partidas de blackjack con variantes de reglas que incorporan un giro inesperado, o en ruletas con estilos visuales impactantes y n\u00fameros en tiempo real que te ayudan a tomar elecciones. El p\u00f3ker y el baccarat tambi\u00e9n tienen versiones renovadas, que allanan la entrada a los novatos sin aburrir a los profesionales. Estos conocidos reinventados preservan su alma pero abandonan la solemnidad, priorizando una entretenimiento r\u00e1pida y al acceso de todos.<\/p>\n

    Rasgos que Fomentan el Entretenimiento Sosegado<\/h2>\n

    Para concretar la idea de una sesi\u00f3n sin apuros, hemos integrado funcionalidades t\u00e9cnicos y de dise\u00f1o enfocadas en tu confort. Estas utilidades te posibilitan personalizar tu paso y preservar el manejo total de la sesi\u00f3n, asegurando que la disfrute no se malogre por molestias o dudas. En Spingranny Casino, t\u00fa posees el tim\u00f3n. Nosotros nos ocupamos de preparar el ambiente para que tu disfrute transcurra de manera espont\u00e1nea.<\/p>\n