/* 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":71634,"date":"2026-05-22T21:54:36","date_gmt":"2026-05-22T21:54:36","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=71634"},"modified":"2026-05-22T21:54:38","modified_gmt":"2026-05-22T21:54:38","slug":"las-15-tiradas-gratis-deben-algun-rollover-de-50x-y-tambien-caducan-a-las-6-dias","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/las-15-tiradas-gratis-deben-algun-rollover-de-50x-y-tambien-caducan-a-las-6-dias\/","title":{"rendered":"Las 15 tiradas gratis deben algun rollover de 50x y tambien caducan a las 6 dias"},"content":{"rendered":"

Cualquier bono de admision es una publicidad con el fin de mas boaboa casino<\/a> jugadores cual les da traspaso adicional, giros gratuito en el caso de que nos lo olvidemos algun pack para oleadas en el elaborar depositos. Por eso, en vez de hacerlo aportarte un planning kilometrico, aca agrupamos los bonos sobre bienvenida para cuenta sobre deportista. Bono simple de cero millas usuarios.<\/p>\n

Consigue incluso $un,000 MXN sobre bonos carente tanque desplazandolo hacia el pelo 15 free spins de percibir los superiores juegos de casino sin pagar sobre su billetero. Os permiten participar algun na? resuelto sobre tiradas sin cargo en la tragaperras concreta carente invertir traspaso particular. Sobre las casinos online espanoles hay determinados diferentes clases de bonos falto deposito, disenados para absorber lo tanto a como novedad jugadores como a seres vivos. Se trata de un ai\ufffdadido que los operadores tienen con el fin de que puedas buscar una medio desplazandolo hacia el pelo, a veces, ganar dinero favorable desprovisto exponer tu propio cesion. Gratogana completa el apoyo mediante la zapatilla y el pie bono falto tanque de cincuenta tiradas sin cargo acerca de slots seleccionadas, comunmente referente a titulos usadas igual que Big Bass Splash. Referente a escasas palabras, cualquier bono sin tanque es una accesit que las casinos en internet obsequian en mas gente sin que estos posean cual realizar un ingreso inaugural.<\/p>\n

A cualquier eso llegan a convertirse en focos de luces suma nuestro uso de cifrado SSL, referencias a RNG acta y no ha transpirado labor con niveles afamados, una cosa importante una vez que hablamos sobre slots desplazandolo hacia el pelo mesas sobre avispado. Hugo Casino es una medio enfocada referente a casino online, donde los protagonistas definitivos son los slots, los jackpots, una seccion sobre promociones y tambien en la division sobre casino sobre avispado.<\/p>\n

Una modalidad sobra clasica del bono falto deposito acerca de los casinos cual pagan pronto en De cualquier parte del mundo seri\ufffda la sobre premios en buena condicion fisica monetarios cual llegan a convertirse en focos de luces obsequia a los jugadores nuevos. Por otra parte, nuestro premio ni coadyuda sobre ella proporcion a las campos de apuesta sobre todos los acontecimientos. Joviales sus 576 maneras de ganar dentro del entretenimiento fundamento y no ha transpirado dicho numeroso galardon sobre hasta 25000x de margen norma dicha tragamonedas es perfecta con el fin de darle algun trato divertido a las giros promocionales.<\/p>\n

Despues, te explicamos sobre manera obvia la manera sobre como escogemos y no ha transpirado ordenamos los mas grandes bonos sin tanque de casino online. Si, puedes retirar las ganancias obtenidas que usan algun bono sin deposito, sin embargo nunca el bono sobre si.<\/p>\n

Asimismo, hay la division en compania de todo la proposicion de juegos para individuos espanoles. Granawin casino ofrece a las seres depositos desplazandolo hacia el pelo retiros con distintos medios sobre pago. Granawin casino mantiene nuestro consideracion sobre las usuarios joviales recargas semanales, bonos una vez cada deposito realizado desplazandolo hacia el pelo reembolsos. Pero, el bono sobre recepcion de Granawin igualmente condicionado.<\/p>\n

Los bonos sobre casino resultan obsequios para almacenar en el caso de que nos lo olvidemos registrarte acerca de cualquier casino. Nunca los bonos de casino en internet son iguales. Las anuncios acostumbran a permanecer dirigidas a los usuarios ya registrados cual cumplen sobre forma reiterado, asi\ufffd como nuestro casino premia una observancia.<\/p>\n

Acerca de Casasdeapuestas no colocamos cualquier publicidad acerca de nuestro ranking de bonos sin deposito<\/h2>\n

A la hora de hablar de las juegos en cualquier bono desprovisto tanque, se debe diferenciar entre las juegos permitidos asi\ufffd como las juegos que favorecen a liberar nuestro bono. Los bonos sin tanque acostumbran a estar tipos en campos desplazandolo hacia el pelo formas cual el participante deberia seguir suin permitirse arrinconar los ganancias obtenidas. Posteriormente, te doy a conocer las mas grandes bonos falto tanque cual he encontrado entre las casinos en internet sobre Espana.<\/p>\n

Su objeto es que las lectores sobre las opiniones se podri\ufffdan mover conviertan en jugadores mas conscientes desplazandolo hacia el pelo con el pasar del tiempo superior noticia. Antes de lanzarte an exigir uno de los superiores bonos sobre casino, te vendran ahora algunos consejos para iniciar con manga larga buen pie su andanza. Es importante insistir lo cual por motivo de que nunca permite lo tanto una ocasion de las bonos sobre casino online era una tabla una diferente.<\/p>\n

Oriente bono de asignacion ofrece 12\ufffd sin cargo a las mas seres cual completen nuestro proceso de verificacion sobre perfil del Casino Marca. Nuestro bono puede demorar inclusive 24 muchisimo tiempo habiles en reflejarse y seri\ufffda actual solo con el fin de juegos sobre casino, slots y videobingos permitidos. Las tiradas gratis requieren haber cesion favorable disponible de iniciar el juego.<\/p>\n

El cirujano tiene algunas juegos asi\ufffd como mas de 111 grados<\/h2>\n

Desde yo pericia, lo mas importante es gozar de el juego en compania de norma, con el pasar del tiempo en el caso de que nos lo olvidemos carente bono de casino. Pero, ademi?s suele convertirse problema una vez que incorpora requisitos de apuesta poquito razonables cual son dificiles de respetar alrededor decada fijado. La utilidad mas profusamente evidente sobre cualquier bono podri\ufffda ser amplia nuestro cesion vacante y deja participar para recursos conveniente a lo largo de mayormente tiempo. Los operadores acostumbran a entablar en sus palabras limites a los ganancias obtenidas con manga larga bonos de casino online, especialmente acerca de promociones como las giros de balde. Contribucion promedio de los juegos mayormente utilizadas a las instalaciones sobre apuesta sobre un bono<\/p>\n","protected":false},"excerpt":{"rendered":"

Cualquier bono de admision es una publicidad con el fin de mas boaboa casino jugadores cual les da traspaso adicional, giros gratuito en el caso de que nos lo olvidemos algun pack para oleadas en el elaborar depositos. Por eso, en vez de hacerlo aportarte un planning kilometrico, aca agrupamos\u2026<\/p>\n

Continue reading<\/span><\/i><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-71634","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/71634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/comments?post=71634"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/71634\/revisions"}],"predecessor-version":[{"id":71635,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/71634\/revisions\/71635"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=71634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=71634"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=71634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}