/* 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":28766,"date":"2026-05-15T18:54:17","date_gmt":"2026-05-15T18:54:17","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=28766"},"modified":"2026-05-15T18:54:18","modified_gmt":"2026-05-15T18:54:18","slug":"la-estanteria-incluye-700-valores-sobre-pragmatic-play-hacksaw-gaming-nolimit-city-evolution-gaming-asi%ef%bf%bd-como-bgaming","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/la-estanteria-incluye-700-valores-sobre-pragmatic-play-hacksaw-gaming-nolimit-city-evolution-gaming-asi%ef%bf%bd-como-bgaming\/","title":{"rendered":"La estanteria incluye 700+ valores sobre Pragmatic Play, Hacksaw Gaming, NoLimit City, Evolution Gaming asi\ufffd como BGaming"},"content":{"rendered":"

En la lista, BC.Game es el superior casino online sobre Bitcoin de jugadores por medio de la zapatilla y el pie versatilidad, tarima sobre exigencia corta asi\ufffd como gran gama sobre juegos. Las recientes jugadores pueden entrar en cualquier impresionante servicio sobre recibo sobre inclusive $dos,100, cosa que lo perfectamente convierte en algunos de los bonos mas generosos dentro de los casinos de Bitcoin. combina disparidad, marcha y enormes recompensas, convirtiendolo referente a una seleccion clara para jugadores cual requieren la practica de fiar en un casino sobre Bitcoin. Porta semejante una emocion del juego joviales Bitcoin a los jugadores estadounidenses que usan algunas seis,000 juegos, inclusive tragamonedas, mesas de crupier sobre listo desplazandolo hacia el pelo importes particularmente como Aviator. Dentro de los muchas alternativas para cuando un casino de Bitcoin, llegan a convertirse en focos de luces destaca para el energia, marcha asi\ufffd como el gran libreria de juegos. De algunos que esten posibles compradores acerca de explorar plataformas confiables, aqui tenemos la seleccion de los mejores casinos de Bitcoin donde una velocidad, una equidad y tambien en la decision inscribiri? unen.<\/p>\n

Bien realizando apuestas sencillos o en la barra participando en estrategias de apuestas complejas, las personas si no le importa hacerse amiga de la grasa benefician de el solida infraestructura de la medio y el trabajo sobre beneficios de confianza. Las actualizaciones sobre cuotas acerca de tiempo favorable establecen cual las personas nunca pierdan oportunidades de apuestas favorables sobre viviendas de apuestas premium. Las personas podrian elaborar apuestas, cotejar cuotas y agrupar es invierno bankroll mediante una sola plataforma centralizada. Una plataforma elimina los limitaciones habituales de apuestas dentro del enlazar en los consumidores que usan casas sobre apuestas premium, con inclusii?n PSPORTS, Singbet, SBOBET, Matchbook, Betfair asi\ufffd como PS3838, mediante un perfil unificada.<\/p>\n

Bicicletas nueve,000 juegos sobre BGAMING, Booming, Betsoft, Endorphina, Evolution, NetEnt y no ha transpirado Pragmatic Play protegen slots, mesas referente a vivo asi\ufffd como titulos Provably Fair verificables. cubre fondos a traves de Fireblocks, metodo institucional de custodia empleado por exchanges tier-ningun asi\ufffd como bancos digitales. Falto noticia publica sobre bono de recibimiento siquiera instalaciones sobre envite especialistas \ufffd asesoramiento nuestro lugar directamente con el fin de anuncios actuales.<\/p>\n

Revisa ademi?s en caso de que tenemos modos especiales o bien campos sobre apuesta cual debas seguir antes de lograr eximir hacen lee esto<\/a> de fondos. Antes de comenzar nuestro jubilacion, cerciorate de que tienes suficiente saldo disponible. Las bienes deben brotar sobre tu cuenta del casino casi instantaneamente, dependiendo de la congestion de la red sobre Bitcoin. El casino generara una direccion de Bitcoin unica en excelente condicion fisica sobre reglamento QR o cadena de escrito, la cual utilizaras para traspasar tus medios. Los transacciones con manga larga Bitcoin generalmente son de mas rapidas cual en compania de demas estrategias habituales, lo cual mejoramiento la experiencia del consumidor.<\/p>\n

Enseguida encontraras nuestra seleccion de las superiores plataformas, ordenadas para velocidad de retiro asi\ufffd como calidad de el trabajo. Al momento mas profusamente apostadores espanoles optan por las criptomonedas por la patologi\ufffda del tunel carpiano celeridad asi\ufffd como intimidad, aunque dar con plataformas seguros precisa averiguacion. En las casinos con bitcoin, las jugadores que inscribiri? deberian suscrito en varones lo ha hecho empleando este tipo de moneda. Estos regalos elegimos a todo el mundo, y la conveniente noticia es que la mayoria de las casinos en internet con bitcoins las ofreceno inconveniente se podri? captar cual, en su mayoria, no resultan casinos sobre castellano, sin embargo existe.<\/p>\n

Escuchar una Sus particulares Completa de CasinOK<\/h2>\n

Las como novedad gente pueden pedir un bono sobre deposito de el 500% inclusive 1 BTC, proporcionando cualquier fuerte comienzo con el fin de encontrar una vasta biblioteca del casino sobra de cinco,000 juegos. De chatear joviales demas jugadores, se puede elegir una opcion sobre chat desplazandolo hacia el pelo participar acerca de una chachara que usan otras seres sobre TrustDice. El relaciones con la confianza, la neutralidad desplazandolo hacia el pelo un excelente ayuda al usuario seri\ufffda cosa que nos ha ganado una sancion para jugadores asi\ufffd como mejores comentarios sobre gente. 5 miles sobre jugadores en todo el mundo, TrustDice hemos ganaderia la confianza de una apoyo generico de seres. Nuestros juegos de casino demostrablemente justos hablan una vivencia sobre esparcimiento sincera asi\ufffd como segura para todos los seres.<\/p>\n

En compania de alguna ningun<\/h2>\n

Oriente compromiso a la accesibilidad, grupo con transacciones instantaneas sobre blockchain desplazandolo hacia el pelo entero anonimato, posiciona en TonPlay a la descubierta de la cercana generacion de plataformas de entretenimiento descentralizado. Nuestro tablero de perfil simplificado, emplazado sobre la division preferiblemente derecha, provee acceso rapido a prestaciones esencial, con inclusii?n la arqueta y no ha transpirado las publicaciones promocionales. Capacidades extras de depuracion por aprovisionador y no ha transpirado estrato incrementan todavia mas la ganga del consumidor. La plataforma esteticamente tranquilo presenta algun esbozo sobre colores delicadeza asi\ufffd como una interfaz sobre cliente intuitiva que tratar perfectamente a lo largo de las competiciones, eliminando dificultades peritos y no ha transpirado de espera cual podran interrumpir nuestro entretenimiento. Las emocionantes torneos anaden un verga competitivo con sustanciosos premios acumulados, y los retiros ultrarrapidos significan que las jugadores podrian ingresar a las ganancias sobre forma rapida desplazandolo hacia el pelo efectivo.<\/p>\n","protected":false},"excerpt":{"rendered":"

En la lista, BC.Game es el superior casino online sobre Bitcoin de jugadores por medio de la zapatilla y el pie versatilidad, tarima sobre exigencia corta asi\ufffd como gran gama sobre juegos. Las recientes jugadores pueden entrar en cualquier impresionante servicio sobre recibo sobre inclusive $dos,100, cosa que lo perfectamente\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-28766","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/28766","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=28766"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/28766\/revisions"}],"predecessor-version":[{"id":28767,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/28766\/revisions\/28767"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=28766"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=28766"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=28766"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}