/* 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":76346,"date":"2026-05-22T22:26:32","date_gmt":"2026-05-22T22:26:32","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=76346"},"modified":"2026-05-22T22:26:33","modified_gmt":"2026-05-22T22:26:33","slug":"perfecta-para-jugadores-cual-desean-experimentar-la-tarima-desprovisto-enormes-horizontes","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/perfecta-para-jugadores-cual-desean-experimentar-la-tarima-desprovisto-enormes-horizontes\/","title":{"rendered":"Perfecta para jugadores cual desean experimentar la tarima desprovisto enormes horizontes"},"content":{"rendered":"

Como miras, entretanto mayormente elevado podri\ufffda llegar a ser nuestro naturaleza sobre postura o en la barra rollover, menor posibilidad existen de sacar interes a las bonos desprovisto deposito casino. El Fun bono desprovisto tanque seri\ufffda diferente al pasado por motivo de que acerca de levante supuesto si hay rollover o requisitos sobre apuestas. Varios casinos posibilitan coordinar bonos desprovisto tanque con otras publicaciones, aunque sabemos leer los palabras y no ha transpirado esencia de confirmar en caso de que esa decision tenemos. Si, puedes ganar dinero positivo utilizando un bono sin tanque, invariablemente que cumplas a los instalaciones de apuesta disenados debido al casino. Las bonos carente deposito aparentarian utilizados referente a una diversidad sobre juegos, facilitando a los jugadores indagar diferentes opciones falto riesgo.<\/p>\n

Casino Genial Madrid desplazandolo hacia el pelo Codere destacan como los posibilidades mayormente prometedoras de nuestra listado por su arqueo dentro de pensamiento y no ha transpirado rollover accesible. Indaga continuamente campos mas bajas a x50 de tener opciones reales de exito, sin embargo algunas publicaciones con 100’s mas profusamente altas podrian llegar incluso x120. El rollover o en la barra exigencia sobre envite establece cuantas ocasiones debes emplazar el coste del bono antes de permitirse apartar las ganancias.<\/p>\n

Ademi?s, cada vez sobra plataformas incorporan formas claras de impedir malentendidos desplazandolo hacia el pelo robustecer la empuje de el usuario. Los mejores casinos en internet compiten no unicamente en disparidad sobre juegos, fortuna asimismo sobre destreza de cliente, estrategias de remuneracion asi\ufffd como promociones personalizadas. En el momento en que 2009, debemos pais a la avanzadilla de los juegos sobre casino sobre linea, ofreciendote la opcion mas conveniente acerca de terminos sobre coleccion, decision asi\ufffd como atencion al consumidor. Sin embargo, deberias asegurarte que se trata de plataformas controladas, analizadas (en el caso de que nos lo olvidemos exitosas por otras usuarios) y que cuenten que usan su singular credito.<\/p>\n

En caso de que deberas utilizar bonos sin tanque sobre casinos en internet, atane acordarse que nunca alcanzar dinero mismo no fulmina los peligros asociados alrededor del juego. Acerca de levante casino en internet con manga larga bono carente deposito, los juegos sobre mesa nunca contribuyen alrededor bono, entretanto que la ruleta y no ha transpirado los juegos acerca de vivo unicamente lo perfectamente realizan sobre cualquier 11% asi\ufffd como 20%, respectivamente. El mejor bono desprovisto deposito acerca de casino tiene instalaciones de puesta de mayor atractivos desplazandolo hacia el pelo un rollover de mayor pequeno del vi\ufffda (dentro de 20x-30x).<\/p>\n

Las bonos sin tanque normalmente haber rollovers mayormente altos cual los bonos en compania de deposito<\/h2>\n

Todo cristiano puede reclaos requisitos sobre puesta, marcas sobre verificacion y limites sobre jubilacion de esta fuente<\/a> reales. ?Buscas casinos joviales bono sobre diez eurillos gratuito sin deposito cual verdaderamente funcionen en De cualquier parte del mundo?<\/p>\n

La estrategico se encuentre sobre designar operadores que usan requisitos sobre postura razonables-idealmente x30 o en la barra menos-desplazandolo hacia el pelo plazos sobre validez cual permitan juguetear desprovisto prisas. Recibir 10 euros gratis con el fin de juguetear en casino desprovisto deposito supone la oportunidad positivo de encontrar operadores sin cortejo modico.<\/p>\n

Habitualmente, oriente bono para asignacion falto tanque es numero baja monetarios, no obstante que es bastante de probar de manera sutil una propuesta de juegos de casino asi\ufffd como elaborar ciertas apuestas de deporte. Levante es algunos de los bonos de mas usuales que se encuentran igual que bono sin deposito. Estas son unas las promociones sobra importantes que existe sobre las casinos con bonos de bienvenida sin tanque, ya que no nos referimos a preciso argumentar recursos real de obtener una galardon. Las bonos para registro sin deposito resultan promociones cual inscribiri? consiguen sin una urgencia sobre aprovisionar recursos sobre la cuenta, no obstante, muchas veces si no le importa hacerse amiga de la grasa necesita sobre un fuero de bono desprovisto tanque exclusivo. Tambien aumentar su cesion sobre juego, tambien es posible disfrutar de juegos todos y no ha transpirado distribuir la experiencia. En caso de que seri\ufffda reciente acerca de los casinos online, el bono sobre recibo seri\ufffda nuestro impulso cual necesitas para adentrarte con destreza.<\/p>\n

Nunca todos los bonos carente deposito de 10 euros funcionan semejante<\/h2>\n

Ademi?s, debes saber a como es margen norma del bono desprovisto tanque es de 500\ufffd y no ha transpirado solo podras usar las giros en la slot Big Bass Bonanza Existen otras posibilidades que le adjudican de mas, aunque si te las provee nunca deberias rechazarlos. Una medio sobre juegos 888 Casino provee a sus mas usuarios un bono sobre tiradas sin cargo a las maquinas tragaperras.<\/p>\n

?Ni olvidar echarse un inspeccion a nuestra coleccion completa sobre juegos de casino gratuito para la practica de juego total en Chipy! Por eso, intentas algun excitante esparcimiento de caja de ahorros con el fin de divertirte, echale cualquier examen a la eleccion de juegos de asiento y no ha transpirado halla tu entretenimiento favorito. En cierta ocasion completado el transcurso sobre registro asi\ufffd como activada tu perfil sobre casino, reclama una proposicion sobre ficha gratis carente tanque al lugar web del casino. El transcurso sobre canje sobre bonos carente tanque acerca de Chipy seri\ufffda excesivamente pronto y no ha transpirado comodo. Algun bono solo sobre casino carente tanque es cualquier bono cual solo puedes cambiar si hayas descubierto su su casino siguiendo cualquier boda alrededor del casino desde Chipy.<\/p>\n","protected":false},"excerpt":{"rendered":"

Como miras, entretanto mayormente elevado podri\ufffda llegar a ser nuestro naturaleza sobre postura o en la barra rollover, menor posibilidad existen de sacar interes a las bonos desprovisto deposito casino. El Fun bono desprovisto tanque seri\ufffda diferente al pasado por motivo de que acerca de levante supuesto si hay rollover\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-76346","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/76346","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=76346"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/76346\/revisions"}],"predecessor-version":[{"id":76347,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/76346\/revisions\/76347"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=76346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=76346"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=76346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}