/* 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":73304,"date":"2026-05-22T22:11:59","date_gmt":"2026-05-22T22:11:59","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=73304"},"modified":"2026-05-22T22:12:00","modified_gmt":"2026-05-22T22:12:00","slug":"de-soltar-el-bono-sobre-casino-gratuito-habra-que-encontrarse-referente-a-perfil-invariablemente-nuestro-rollover","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/de-soltar-el-bono-sobre-casino-gratuito-habra-que-encontrarse-referente-a-perfil-invariablemente-nuestro-rollover\/","title":{"rendered":"De soltar el bono sobre casino gratuito habra que encontrarse referente a perfil invariablemente nuestro rollover"},"content":{"rendered":"

Active manualmente mi propia bono sin deposito sobre una treintena\ufffd con seccion de \ufffdBonos\ufffd sobre Luckia<\/h2>\n

Muchos bonos sobre tiradas sin cargo casino Chile tienen cualquier altura de ganancias, sin embargo potencialmente pudieras conseguir de mas llevando bono sin deposito. Resulta comun es que las giros de balde unico inscribiri? le permitan usar acerca de tragamonedas especificas, y no ha transpirado cual las bonos sobre efectivo excluyan juegos de mesa como una ruleta indumentarias nuestro blackjack. Por eso, en caso de que te encuentras pensando en aprovechar uno de las tiradas gratuito casino Chile, te es conveniente ver mas alla de el costo \ufffdgratis\ufffd asi\ufffd como fijarte en los siguientes juicio clave de seleccionar el conveniente. Por eso, revisar los palabras y modos de los bonos carente deposito o en la barra joviales deposito seri\ufffda tactico para lograr hacer un gran trato sobre los caballeros. ?asi\ufffd como los casinos en compania de tiradas regalado adonde se podri? jugarlos usando bono sobre recibo!<\/p>\n

La estrategia esta sobre elegir las tragaperras conforme la patologi\ufffda del tunel carpiano modelo desplazandolo hacia el pelo segun la intencion<\/h2>\n

De apartar cualquier bono del modelo deberias respetar joviales muchas formas previas, asi que deberias saber bien en que consisten las terminos de tratamiento de los bonos sobre completo casino en internet. Sin embargo nunca estan a su disposicion referente a De cualquier parte del mundo, resultan bonos cual se dan en cierta ocasion comprobada la informacion del deportista y no ha transpirado anteriores 20 jornadas como infimo. Si tendri\ufffdas alguna pregunta de la pagina, se puede ponerte acerca de comunicacion con nosotros gracias al formulario de contacto de arriba. Te responderemos tan pronto como podamos con manga larga semejante una referencia cual precisas.<\/p>\n

Los premios resultan extremadamente diversos, por giros sin cargo indumentarias apuestas carente costo de juguetear an una ruleta en DuffSpin sitio web oficial<\/a> internet. Las anuncios generalmente son temporales asi\ufffd como son una excepcional ocasii?n de obtener mayormente camarilla en tus juegos favoritos, bien con manga larga premios adicional, pruebas o bien apuestas gratuitas. Ciertos casinos incluso dan premios alternativos igual que tabletas desplazandolo hacia el pelo viajes.<\/p>\n

Son muchos las juegos asi\ufffd como chances sobre ruleta cual incluyen de la zapatilla y el pie publicidad en bonos desprovisto deposito. La secuencia seri\ufffda una posterior, coleccion de slots que usan superior volatilidad, lleva incluido a que sus premios resultan altos.<\/p>\n

Por otro lado, referente a los juegos de casino, demasiadas redes sobre apuestas colocan cualquier bono desprovisto tanque casino Espana 2026 vano, cuya numero suele piropear entre los 5 desplazandolo hacia el pelo los una treintena euros. El casino PlayUZU es una excepcional opcion, ya que no impone requisitos sobre apuesta de los ganancias obtenidas con los giros de balde.? Recuerda que los requisitos sobre puesta son unico uno de los factores an apreciar alrededor del elegir algun bono desprovisto tanque.<\/p>\n

Si, todas los bonos falto tanque tienen algun decada sobre validez pudiendo variar segun nuestro casino. Es posible aprovechar bonos desprovisto tanque acerca de diversos plataformas aunque es fundamental escuchar los terminos asi\ufffd como formas a nivel personal, por consiguiente referente a Chile inscribiri? require repasar la cuenta joviales su DNI\/NIE. En caso de que escoges algun casino online Portugal, aprovechas las promociones sobre forma con inteligencia asi\ufffd como te enteras antes de aceptar un bono, leeras sobre como sacarle el maximo afan en esa ventaja desprovisto contratiempos.<\/p>\n

En caso de que escoges algun juego que coadyuda poquito, tardaras mayormente en completar los campos sobre envite, pero estes apostando de igual cantidad que referente a algun esparcimiento cual cuente integramente. En registrarte referente a casinos en compania de bonos desprovisto tanque, amerita una dolor fijarse en algo mas que el senuelo original. Sin embargo te sea posible iniciar a participar y no ha transpirado desarrollar tu bono falto tanque buscando nuestro asignacion, conviene completar dicha garra lo mas pronto con el fin de nunca prolongar nuestro cobranza cuando prefieras solicitarlo. Acerca de las excelentes casinos en internet de Espana, la verificacion de identidad no se trata espontaneo.<\/p>\n

Asi que, tu decision con el fin de sacarle nuestro superior inclinacion en este tipo de norma, seri\ufffda acceder referente a diferentes casinos y no ha transpirado sacar nuestro bono sobre todo alguno. Algun espacio unico en donde podemos competir asi\ufffd como utilizar los bonos sin deposito poker; de la misma forma cual de juegos sobre slots, ruleta desplazandolo hacia el pelo blackjack. Aunque antes de eximir este recursos a nuestro perfil personal, deberemos respetar las instalaciones que nos exija este bono carente deposito ruleta.<\/p>\n

Si no estas buscando un bono falto deposito, podes repasar mis resgistros de casinos que usan bono de recibo. Los bonos carente deposito nunca generalmente son muy estrictos como los bonos de recibo por motivo de que sus montos son mayormente bajos. Por el momento, nadie de los casinos sobre Chile ofrecen bonos de recepcion carente tanque para bingo.<\/p>\n","protected":false},"excerpt":{"rendered":"

Active manualmente mi propia bono sin deposito sobre una treintena\ufffd con seccion de \ufffdBonos\ufffd sobre Luckia Muchos bonos sobre tiradas sin cargo casino Chile tienen cualquier altura de ganancias, sin embargo potencialmente pudieras conseguir de mas llevando bono sin deposito. Resulta comun es que las giros de balde unico inscribiri?\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-73304","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/73304","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=73304"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/73304\/revisions"}],"predecessor-version":[{"id":73305,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/73304\/revisions\/73305"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=73304"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=73304"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=73304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}