/* 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":77062,"date":"2026-05-22T22:28:40","date_gmt":"2026-05-22T22:28:40","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=77062"},"modified":"2026-05-22T22:28:42","modified_gmt":"2026-05-22T22:28:42","slug":"nuestro-bono-sobre-recibimiento-sobre-888-casino-eres-88-giros-gratis-unicamente-para-registrarte","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/nuestro-bono-sobre-recibimiento-sobre-888-casino-eres-88-giros-gratis-unicamente-para-registrarte\/","title":{"rendered":"Nuestro bono sobre recibimiento sobre 888 Casino eres 88 giros gratis unicamente para registrarte"},"content":{"rendered":"

Tiene un requisito sobre puesta sobre 20x y lo extremo cual se GreatWin<\/a> puede acoger para las giros sin cargo resultan 500\ufffd. Asimismo, cual las juegos sobre quienes se puede seguir las instalaciones de postura se trata de lo perfectamente suficientemente variados desplazandolo hacia el pelo ofrezcan un buena proporcii?n de el igual para que puedas cubrirlo.<\/p>\n

Referente a bastantes acontecimientos, nuestro bono separado seri\ufffda vigente de tragaperras especiales, mientras cual juegos igual que la ruleta, en el caso de que nos lo olvidemos el blackjack podran estar excluidos. Acerca de relacion a los juegos permitidos, sean aquellos que se puede utilizar para colocar con esta modelo sobre promociones. Al momento hablar de las juegos acerca de un bono falto tanque, debemos de diferenciar dentro de los juegos permitidos asi\ufffd como las juegos que favorecen a liberar el bono.<\/p>\n

Para que entiendas en que consisten todo posibilidades de encontrar las excelentes bonos de audiencia acerca de Ciertas zonas de espana, te instruimos las posibilidades cual se podri? hallar actualmente en el mundo de internet sobre algun ranking cual deja ver los mas grandes bonos sobre casino que tenemos a dia de ahora en el comercio castellano. En caso de que te gustaria sobra posibilidades sumado a las bonos desprovisto tanque, explora la eleccion sobre casinos con el pasar del tiempo tiradas gratis y no ha transpirado bonos sobre casino falto tanque. Los bonos sobre casino en internet sin tanque son pocos de los excelentes bonos sobre recepcion para recientes jugadores.<\/p>\n

Las superiores bonos casino en internet permiten acceder en casi todo el libro de el camara<\/h2>\n

Examinaremos el bono sobre audiencia sobre Platincasino de el 500% incluso 200\ufffd + 10 giros gratuito. Una vez te hayas inscrito en el casino, selecciona algun organizacion sobre remuneracion que es permitido de los bonos sobre admision. Elige uno de los bonos sobre recibimiento de nuestra relacion o verifica cual el bono provenga sobre un casino regulado por la DGOJ.<\/p>\n

Si lo perfectamente tuyo es la disparidad, FatPirate brinda un serie solido sobre tragamonedas, juegos de caja de ahorros y posibilidades sobre preparado. Sacar algun bono desprovisto tanque o bien la alternativa distinguido seri\ufffda separado el primer camino. Referente a gran cantidad de acontecimientos, las bonos unicamente estaran disponibles si registras tu perfil empezando desde una IP espanola. Este margen varia por casino, sin embargo suele cortejar las 80 \ufffd, 100 \ufffd o inclusive doscientas \ufffd para cuando bonos carente deposito.<\/p>\n

Con el fin de conseguir bonos sobre casino carente tanque, acostumbran a puntada con registrarse y no ha transpirado asentir las terminos de la oferta. Mi opinion individual Seri\ufffda uno de los excelentes bonos carente deposito cual he visto, que usan una treintena\ufffd gratis de juguetear a los slots o en la barra de utilizar del resto de juegos sobre casino. Si, todo bono de casino desprovisto deposito cual descubras seri\ufffda gratuito, no obstante trae consigo ciertos requisitos de postura cual deberias cumplir primeramente de lograr convertirlo referente a recursos favorable.<\/p>\n

Los bonos resultan excesivamente populares dentro de las jugadores, especialmente las bonos desprovisto deposito, pues resultan resulta similar a recibir dinero gratis. Quieres publicaciones sobre bonos de casinos en internet que todavia no hayas aprovechado, aca las encontraras todo el mundo. Listado para bonos de casinos en internet finales de casinos cual han abierto hace poco asi\ufffd como de espantajo a indagar desplazandolo hacia el pelo poner al dia los bonos ofrecidos por casinos online asequibles para jugadores en Portugal, garantizando documentacion del momento y significativo. Explora los clases de bonos sobre casino a tu disposicion desplazandolo hacia el pelo haya una inmejorable oferta anonima.<\/p>\n

Las bonos desprovisto tanque nunca resultan todo el mundo de la misma manera<\/h2>\n

Naturalmente, para permitirse retirar joviales normalidad nunca unicamente lo perfectamente originado usando bono de casino carente tanque escogido, estrella con traspaso particular, vas a confirmar tu personalidad. Con el fin de designar el superior bono de casino online carente deposito, ten en perfil los juegos acerca de pudiendo usarseo ya es necesario mencionado, las bonos de casino desprovisto tanque suelen entablar un limite de ganancias. Sobre este caso se puede buscar casinos en compania de bonos de admision sin cargo carente deposito eliminar anuncios de clientes ya registrados que consistan acerca de invitaciones gratuitas.<\/p>\n

Los casinos que le dan bono sin cargo desprovisto tanque tratan la ocasion sola para encontrar plataformas falto cortejo crematistico. Los excelentes bonos carente deposito resultan aquellos que disfrutas utilizar, no aquellos que os obligan a retar compulsivamente durante 8 dias. Las casinos con recursos regalado desprovisto deposito siguen estilo legitima sobre percibir plataformas desprovisto riesgo financista. Encontrar mejores bonos carente tanque con el fin de espanoles precisa conocer distinguir publicaciones rentables de trampas publicitarias. Las casinos legales con manga larga bono carente tanque en De cualquier parte del mundo resultan pocos por motivo de que la reglamentacion limita sobre como pueden promocionarse.<\/p>\n

Ya sabes de que manera trabajan los bonos sin tanque, debido a vamos a fijarnos la manera sobre como usarlos con el pasar del tiempo norma acerca de operadores internacionales. El objetivo realista seri\ufffda evaluar el casino y no ha transpirado, en compania de determinada suerte, transformar un lugar sobre esta bono acerca de cesion retirable, no acorralar desmesurados premios. Los bonos falto tanque resultan geniales, no obstante igual que todo sobre la biografia, poseen las pros asi\ufffd como sus inconvenientes. En muchas ocasiones incluyen campos de puesta asi\ufffd como limites de margen. A veces solicitan corroborar nuestro telefonia o nuestro e-mail para acreditarlo, desplazandolo hacia el pelo en el caso de los tiradas de balde las ganancias se podri\ufffdan mover convierten en liquidacion de bono en compania de dicho mismo condicion sobre envite. Es excelente para estimar algun flamante casino online internacional antes de elaborar algun tanque, comparar catalogos y no ha transpirado verificar una marcha de estas retiradas o bien una clase del trabajo.<\/p>\n","protected":false},"excerpt":{"rendered":"

Tiene un requisito sobre puesta sobre 20x y lo extremo cual se GreatWin puede acoger para las giros sin cargo resultan 500\ufffd. Asimismo, cual las juegos sobre quienes se puede seguir las instalaciones de postura se trata de lo perfectamente suficientemente variados desplazandolo hacia el pelo ofrezcan un buena proporcii?n\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-77062","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/77062","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=77062"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/77062\/revisions"}],"predecessor-version":[{"id":77064,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/77062\/revisions\/77064"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=77062"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=77062"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=77062"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}