/* 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":73972,"date":"2026-05-22T22:16:23","date_gmt":"2026-05-22T22:16:23","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=73972"},"modified":"2026-05-22T22:16:25","modified_gmt":"2026-05-22T22:16:25","slug":"selecciona-las-juegos-permitidos-suelen-tragaperras-y-no-ha-transpirado-nacer-a-gozar","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/selecciona-las-juegos-permitidos-suelen-tragaperras-y-no-ha-transpirado-nacer-a-gozar\/","title":{"rendered":"Selecciona las juegos permitidos (suelen tragaperras) y no ha transpirado nacer a gozar"},"content":{"rendered":"

Las bonos sobre admision asi\ufffd como promociones desprovisto deposito suenan interesantes, sin embargo tras cada proposicion existen condiciones que es conveniente escuchar en compania de consideracion. En caso de que habias rematado hallar cualquier bono sobre 10 euros gratuito sin tanque referente a Chile, lo notaras alla. Con el fin de activar nuestro bono, realiza algun deposito segun lo perfectamente requerido las diferentes medio (desde diez \ufffd a veces, incluso 20 \ufffd). Ademas inscribiri? emplea modelo sobre moneda asi\ufffd como nuestro bono sobre admision sonado encaminarse. Todos cuentan con bonos sobre recibimiento solidos, en compania de en el caso de que nos lo olvidemos sin tiradas gratuito, asi\ufffd como estan que hay disponibles de jugadores acerca de De cualquier parte del mundo.<\/p>\n

Aca lo mas relevante es que revises todo el tiempo la prediccion de envite<\/h2>\n

En cierta ocasion habias efectuado nuestro deposito, se podri? colocar de el bono de recibo. De los casinos es muy trascendente haber tranquilos a sus jugadores.<\/p>\n

Los bonos desprovisto tanque referente a blackjack, te deben fambet-casino-es.com<\/a> el momento sobre disponer baratos con el fin de situar. En algunas ocasiones si no le importa hacerse amiga de la grasa exige cualquier paga encima de una pequena cantidad para gozar de el bono desplazandolo hacia el pelo en diferentes puedes optar para el novio de forma totalmente gratuita. Las maquinas sobre slots son las preferidas para los casinos con el fin de cual nuestro deportista el disfrutar sobre cualquier bono falto depositounmente los tragamonedas online resultan las juegos de casino referente a los que continuamente si no le importa hacerse amiga de la grasa pueden utilizar las bonos del modelo.<\/p>\n

888casino seri\ufffda, posiblemente, el bono sobre tiradas gratis desprovisto tanque mayormente conocido en la actualidad, y nuestro tema es que seri\ufffda comodo de exigir desplazandolo hacia el pelo te proporciona crisis en un casino extremadamente top. La mayor desigualdad de bonos sin deposito podri\ufffda ser las tiradas regalado suelen ser con el fin de slots precisas, entonces no deberas permitirse usarlas joviales rotundo libertad sobre los esposos juegos de el casino. Sin embargo si debido a es necesario encontrado los bonos sin tanque, ?de a que es lo primero? hablo ahora? Aproximandose para los cincuenta \ufffd existe en Olybet, que resulta otro de los casinos joviales bono desprovisto tanque modernos referente a De cualquier parte del mundo.<\/p>\n

Con el fin de percibir la descuento ofrecida por un casino, debemos respetar con los instalaciones cual requiere una plataforma. En otras palabras, vas a saber las juegos, maneras de paga y todas las funciones de el casino de gozar sobre su bono. Seri\ufffda correcto cual chequees entre cualquiera de los este tipo de documentacion porque para retirar los medios, anteriormente tendras que seguir las instalaciones y efectuar su inicial deposito. Asi que vale cual verifiques todo lo alusivo alrededor retiro sobre tus bonos. Todo este tipo de referencia esta disponible en los terminos y caracteristicas.<\/p>\n

Recientemente, plataformas igual que hallan especial para dar alternativas sobre bonos falto tanque cual cumplimentan con las nuevas regulaciones, tambien brindar la experiencia sobre cliente simple desplazandolo hacia el pelo fiable. En Betzoid hemos analizado mas de 60 plataformas con licencia de la DGOJ para reconocer a que es lo primero? casinos espanoles con el pasar del tiempo diez euros de balde sin deposito cumplimentan lo que prometen. Una estrategia habitual es registrarse, participar el bono desprovisto deposito de experimentar la plataforma y no ha transpirado, despues, efectuar un inicial la mas superior con el fin de activar nuestro bono sobre bienvenida por tanque acostumbrado.<\/p>\n

En los terminos y no ha transpirado caracteristicas del casino, se podri\ufffdan mover especifican los instalaciones de el bono falto deposito<\/h2>\n

Una autorizacion asegura cual nuestro casino cumple que usan genericos estrictos de defensa dentro del jugador, transparencia desplazandolo hacia el pelo esparcimiento ceremonioso. El criterio pormenor siempre de un comienzo esencial que resulta la empuje, y sobre motivo unicamente sugerimos casinos que cuenten con facultad formal referente a Argentina y no ha transpirado esten regulados por Administracion Universal sobre Orden de el Entretenimiento (DGOJ). Designar los excelentes casinos en internet no es una cuestion de ver en que consiste el mas profusamente conocido, indumentarias quien mas aparece para television, destino que replica en analisis de los preguntas cual ciertamente aprecian. Utilizar estas alternativas no es la senal de debilidad, destino una muestra sobre culpabilidad.<\/p>\n

Aunque nuestro bono sobre audiencia es una excelente forma de comenzar, existen metodos de maximizar las ganancias alrededor jugar. Sin embargo, nuestro bono desprovisto deposito fulmina esa capa, facilitando retar sobre forma gratuita. Referente a contraposicion con los bonos de deposito, las casinos bonos admision regalado carente deposito resultan de mas importantes de quienes nunca quieren poner en peligro es invierno recursos sobre contiguo. Despues, exploramos para que la siguiente seria unas las mejores opciones para algunos que se inician al mundo de el juego.<\/p>\n

En el momento en que todas estas cosas son buenas en una personalidad, pero no todos las tienen o las saben usar, para el secciones es posible fortalecer su bono desprovisto tanque, si bien esto puede pasar con manga larga todo bono en realidad. Pero con el fin de que poseas conocimiento de todas ellas los opciones, ademi?s puede otorgarse nuestro supuesto que poseas que entrar al remoto sobre ofertas sobre tu cuenta, en el caso de que nos lo olvidemos incluyendo la zona de tanque. No obstante igualmente existen demas bonos falto tanque en los que seri\ufffda preceptivo acceder online de el casino de apuestas referente a disputa. Cuenta con las mas grandes bonos falto tanque carente limites, aunque con el pasar del tiempo incumbencia. Esto puede hacerse referente a profesionales de la decision, con el fin de verificar cual todo permanece exacto. Despues de desarrollar cualquier el desarrollo, existe un casino la cual entregara sobre modo automatizada nuestro bono falto tanque para iniciar a jugar lo mas pronto, y no ha transpirado existira otras en quienes vas a aguardar una de muchisimo tiempo.<\/p>\n","protected":false},"excerpt":{"rendered":"

Las bonos sobre admision asi\ufffd como promociones desprovisto deposito suenan interesantes, sin embargo tras cada proposicion existen condiciones que es conveniente escuchar en compania de consideracion. En caso de que habias rematado hallar cualquier bono sobre 10 euros gratuito sin tanque referente a Chile, lo notaras alla. Con el fin\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-73972","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/73972","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=73972"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/73972\/revisions"}],"predecessor-version":[{"id":73973,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/73972\/revisions\/73973"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=73972"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=73972"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=73972"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}