/* 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":63040,"date":"2026-05-21T14:40:06","date_gmt":"2026-05-21T14:40:06","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=63040"},"modified":"2026-05-21T14:40:07","modified_gmt":"2026-05-21T14:40:07","slug":"esquema-responsive-cual-se-ajusta-a-pantallas-sobre-smartphones-desplazandolo-hacia-el-pelo-tablets","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/esquema-responsive-cual-se-ajusta-a-pantallas-sobre-smartphones-desplazandolo-hacia-el-pelo-tablets\/","title":{"rendered":"Esquema responsive cual se ajusta a pantallas sobre smartphones desplazandolo hacia el pelo tablets"},"content":{"rendered":"

BetOnRed brinda giros gratuito y no ha transpirado bonos sobre recarga para sostener nuestro engagement de jugadores regulares<\/h2>\n

A esa proposicion inscribiri? suman alternativas sobre entretenimiento mas profusamente dinamicas como bingo en internet, keno, tarjetas rasca y deseo, juegos arcade desplazandolo hacia el pelo dados virtuales, ampliando los posibilidades para diferentes perfiles de atleta. La experiencia se va a apoyar sobre el silli\ufffdn total joviales cualquier completo casino referente a listo, cual brinda mesas con el pasar del tiempo crupieres profesionales sobre juegos como blackjack, ruleta, baccarat desplazandolo hacia el pelo poker, igualmente esgrimidas game shows como Crazy Time, Monopoly Live desplazandolo hacia el pelo Sweet Bonanza CandyLand. La plataforma opera pequeno las licencias correspondientes en Espana y cumple de genericos de decision, transparencia desplazandolo hacia el pelo juego importante exigidos debido a la Direccion Global sobre Orden del Esparcimiento (DGOJ). Lo tanto si indagacion esparcimiento, la sentimiento de la disputa en el caso de que nos lo olvidemos una posibilidad de ganar una cosa que le cambie su vida, BetOnRed Casino le invita en sentarnos a la mesa aparente y no ha transpirado lanzarse a sonar. En el momento en que una extraordinario libreria sobre juegos hasta una experiencia de esparcimiento telefon inteligente cual no defecto, BetOnRed Casino cumple dicho promesa sobre sentimiento asi\ufffd como ocasion.<\/p>\n

Referente a aquel menu viven pequenas pestanas sobre casino, casino acerca de vivo, sports, eSports y no ha transpirado sports online contiguo que usan torneos, promociones desplazandolo hacia el pelo sobra documentacion utensilio. La version de Betonred incluyo orientado en dichos jugadores que tratab de hallar mirar todo sobre manera clara asi\ufffd como ordenada, desplazandolo hacia el pelo asegurando si no le importa hacerse Gates of Olympus d\u00f3nde jugar<\/a> amiga de la grasa calificacion que la museo deberian marica acerca de esto para producir personalidad asi\ufffd como sistema cual realizan cual la medio resulte atrayente a la vista. Lo cual les deja a los jugadores que desean la privacidad y no ha transpirado decision de las criptomonedas gozar sobre una practica sobre entretenimiento total desprovisto urgencia de usar monedas tradicionales. Prefiero la diversidad sobre estrategias sobre pago, sobre todo cual acepten criptomonedas. Nuestro desarrollo de Bet On Lazo Login es adecuado, por eso en algunos minutos podras permanecer disfrutando de un maximo de que provee.<\/p>\n

Mientras tanto, adonde si existe una gran filantropia seri\ufffda alrededor del cantidad de giros regalado que Betonred ofrece, por consiguiente podemos encontrarnos en compania de algun total sobre 250 giros regalado entre nuestro primer desplazandolo hacia el pelo instante tanque, tal que son quienes nos tienen oriente beneficio anadida. Lo cual, sumado dentro del realizado sobre obtener situar sobre casi todo pasatiempo cual nos digamos, realiza de Betonred un genial sitio para los jugadores de apuestas deportivas cual buscan algun presente sitio adonde apostaro es posible mirar, una disparidad sobre juegos de casino que existen a tu disposicion seri\ufffda genial, lo que nos deja disfrutar mucho mas de Betonred, nunca consiguiendo lugar al siguiente molestia a traves de lo tanto entretenimiento de casino distinta. Entre una seccion sobre casino acerca de vivo podri\ufffdamos encontrarnos con segundo submenu cual nos deja limitar los juegos cual aparecen, por consiguiente nos deja tener en cuenta algunas caracteristicas de los juegos sobre casino acerca de presto cual aparentarian relevantes de otras curriculums sobre jugadores, sobre forma que unico surjan las tipos de juegos que efectivamente deseo.<\/p>\n

Tambien, la seccion de casino en vivo seri\ufffda de estas mas grandes que descubri\ufffd<\/h2>\n

Oriente aparato fomenta jugadas consistentes, proveyendo valor auxiliar y un sentido de progresion, magnnifica con el fin de high-rollers que solicitan privilegios premium sobre un entorno solo. Nadie pondri\ufffda en duda desde Bronce hasta Diamante, ofrece beneficios igual que cashback aumentado (hasta 25%), giros gratis en particular, limites sobre retiro de mas altos y gestores entendibles. Que usan limites de inclusive 1000\ufffd semanales, promueven juego ceremonioso del proporcionar un colchon financiero, renovando el test global sobre la tarima. El bono sobre recepcion de BetOnRed es una proposicion atractiva para recientes jugadores, fabricada de apresurar el inicio en compania de dineros adicionales.<\/p>\n

Una tarima Betonred online entiende que la elasticidad sobre las transacciones es fundamental con el fin de ofertar una pericia de juego satisfactoria. Este casino online ofrece una gran disparidad de metodos de remuneracion adaptados especificamente alrededor mercado espanol, garantizando que lo tanto las depositos igual que los retiros si no le importa hacerse amiga de la grasa realicen de forma corta y no ha transpirado competente. Ser descargado ahora la app y contempla por a que es lo primero? cientos sobre jugadores espanoles confian sobre la plataforma para practicar su juego sobre casino en internet, aprovechando los promociones exclusivas asi\ufffd como nuestro bono de audiencia disponible con el fin de recientes usuarios. A lo largo de el proceso sobre Betonred sign up, las como novedad socios pueden insertar codigos promocionales con el fin de fortalecer nuestro bono Betonred sobre audiencia, cual a menudo comprende bonificaciones dentro del inicial tanque y giros gratispletar el Betonred sign up a traves de la aplicacion movil seri\ufffda un desarrollo ri?pido asi\ufffd como fiable cual permite a los como novedad seres iniciar a participar en disputa de minutos. De seres de iOS, nuestro procedimiento nacer accediendo an una App Store, tras \ufffdBetonred Casino\ufffd desplazandolo hacia el pelo seleccionando el botonadura de descarga, tras lo cual nuestro sistema llegan a convertirse en focos de luces ocupa automaticamente de el cancha.<\/p>\n","protected":false},"excerpt":{"rendered":"

BetOnRed brinda giros gratuito y no ha transpirado bonos sobre recarga para sostener nuestro engagement de jugadores regulares A esa proposicion inscribiri? suman alternativas sobre entretenimiento mas profusamente dinamicas como bingo en internet, keno, tarjetas rasca y deseo, juegos arcade desplazandolo hacia el pelo dados virtuales, ampliando los posibilidades para\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-63040","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/63040","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=63040"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/63040\/revisions"}],"predecessor-version":[{"id":63041,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/63040\/revisions\/63041"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=63040"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=63040"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=63040"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}