/* 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":76917,"date":"2026-05-22T22:28:17","date_gmt":"2026-05-22T22:28:17","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=76917"},"modified":"2026-05-22T22:28:19","modified_gmt":"2026-05-22T22:28:19","slug":"nuestro-bono-de-bienvenida-sobre-888-casino-es-una-actividad-88-giros-gratis-unico-por-registrarte","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/nuestro-bono-de-bienvenida-sobre-888-casino-es-una-actividad-88-giros-gratis-unico-por-registrarte\/","title":{"rendered":"Nuestro bono de bienvenida sobre 888 Casino es una actividad 88 giros gratis unico por registrarte"},"content":{"rendered":"

Guarda un capacidad sobre apuesta de 20x y lo perfectamente maximum cual se podri? acoger por los giros de balde resultan 500\ufffd. Tambien, que las juegos referente a los que se podri? respetar las requisitos sobre apuesta se trata de lo mucho mas diferentes asi\ufffd como ofrezcan cualquier gigantesco proporcii?n de el mismo con el fin de que te sea posible cubrirlo.<\/p>\n

Referente a gran cantidad de casos, nuestro bono solo seri\ufffda vivo para tragaperras https:\/\/gratogana-casino-es.com\/<\/a> especiales, entretanto cual juegos como la ruleta, o en la barra el blackjack pueden estar excluidos. En relacion a los juegos permitidos, resultan quienes puedes usar para apostar joviales esta clase sobre promociones. En la hora de declarar los juegos sobre un bono carente deposito, hay que distinguir entre los juegos permitidos y no ha transpirado las juegos cual ayudan an eximir nuestro bono.<\/p>\n

Para que entiendas cuales son por cada alternativas para dar con las superiores bonos de audiencia acerca de Portugal, os ensenamos los posibilidades que es posible dar con ahora en el mundo de internet referente a algun ranking que proyecta los mejores bonos sobre casino que hay a conmemoracion de hoy en el mundo de internet espanol. Si quieres de mayor alternativas sumado a las bonos carente tanque, explora la coleccion de casinos con el pasar del tiempo tiradas gratuito y bonos sobre casino sin tanque. Las bonos sobre casino online sin deposito son algunos de los superiores bonos sobre bienvenida para los mas jugadores.<\/p>\n

Las mas grandes bonos casino online permiten accesar en practicamente cualquier nuestro libro del cirujano<\/h2>\n

Examinaremos nuestro bono sobre recibo de Platincasino del 100% inclusive 200\ufffd + 11 giros de balde. En cierta ocasion os hayas abonado alrededor casino, selecciona cualquier organizacion sobre remuneracion que es permitido para los bonos de audiencia. Elige uno de los bonos de audiencia sobre nuestra lista o verifica que el bono provenga de algun casino regulado por DGOJ.<\/p>\n

En caso de que lo perfectamente suyo es la diversidad, FatPirate brinda cualquier gama resistentes de tragamonedas, juegos sobre caja de ahorros asi\ufffd como posibilidades en vivo. Conseguir un bono falto tanque o la oportunidad aristocrata seri\ufffda solo el primer paso. En gran cantidad de acontecimientos, los bonos unicamente estaran disponibles en caso de que registras tu cuenta por la IP espanola. Este limite varia para casino, no obstante puede cortejar los 60 \ufffd, 500 \ufffd en el caso de que nos lo olvidemos hasta 200 \ufffd para cuando bonos desprovisto deposito.<\/p>\n

Con el fin de sacar bonos sobre casino desprovisto deposito, suelen puntada joviales registrarse desplazandolo hacia el pelo asentir las terminos de su oferta. Mi opinion individual Es algunos de los mas grandes bonos carente deposito cual he visto, joviales 20\ufffd sin cargo de juguetear a las slots o con el fin de usar al resto sobre juegos sobre casino. Si, todo bono de casino carente tanque que halles seri\ufffda vano, no obstante trae consigo ciertos requisitos de postura que debes respetar primero de alcanzar convertirlo referente a recursos cierto.<\/p>\n

Los bonos resultan extremadamente populares dentro de las jugadores, sobre todo las bonos sin deposito, por consiguiente son resulta semejante an escoger dinero gratis. Quieres ofertas de bonos de casinos en internet que todavia no hayas aplicado, aqui las hallaras todo el mundo. Lista de los bonos sobre casinos online mas recientes sobre casinos cual han abierto desde hace poco asi\ufffd como sobre ente a investigar asi\ufffd como actualizar las bonos ofrecidos por casinos en internet permitibles para jugadores sobre De cualquier parte del mundo, garantizando informacion actual asi\ufffd como significativo. Explora las tipos de bonos de casino que existen y no ha transpirado halla la mejor proposicion para ti.<\/p>\n

Las bonos falto tanque nunca son todo el mundo las mismas<\/h2>\n

Logicamente, con el fin de alcanzar apartar con manga larga normalidad no unicamente lo perfectamente originado con el bono sobre casino carente tanque elegido, hado que usan venta propio, vas a verificar su personalidad. De designar el mejor bono de casino online falto tanque, ten acerca de cuenta los juegos acerca de con la capacidad usarseo bien es necesario mencionado, los bonos sobre casino carente deposito acostumbran a establecer cualquier margen de ganancias. Acerca de levante caso puedes explorar casinos con el pasar del tiempo bonos sobre recibo gratuito carente deposito u publicaciones para clientes ya registrados cual consistan sobre fichas gratuitas.<\/p>\n

Los casinos que otorgan bono de balde sin deposito representan una ocasii?n unica con el fin de investigar plataformas carente compromiso barato. Las mas grandes bonos carente deposito son aquellos que disfrutas utilizar, no algunos que te confeccionan jugar compulsivamente a lo largo de seis momentos. Los casinos con manga larga recursos regalado desprovisto deposito tienen forma legitima de sufrir plataformas carente peligro financiero. Hallar excelentes bonos desprovisto tanque de espanoles precisa conocer diferenciar publicaciones rentables de trampas publicitarias. Las casinos legales que usan bono sin deposito acerca de Portugal resultan poquitos por motivo de que la normativa limita como podran promocionarse.<\/p>\n

Ya sabes como trabajan las bonos carente deposito, bien vamos a fijarnos de que manera usarlos que usan norma acerca de operadores internacionales. Su realista seri\ufffda valorar nuestro casino y, con cierta fortuna, transformar una parte a otra sobre aquel bono acerca de cesion retirable, nunca acosar enormes premios. Las bonos falto tanque son geniales, no obstante igual que todo en la vida, deben las pros y las contratiempos. Muchas veces incorporan requisitos de puesta y limites de beneficio. A veces piden repasar nuestro telefono en el caso de que nos lo olvidemos nuestro correo con el fin de acreditarlo, asi\ufffd como en el caso de los tiradas gratuito los ganancias se podri\ufffdan mover realiza en venta sobre bono con dicho propio naturaleza sobre apuesta. Seri\ufffda excelente para valorar algun actual casino en internet internacional para impedir realizar algun deposito, cotejar catalogos desplazandolo hacia el pelo comprobar una marcha de estas retiradas o bien una clase del asistencia.<\/p>\n","protected":false},"excerpt":{"rendered":"

Guarda un capacidad sobre apuesta de 20x y lo perfectamente maximum cual se podri? acoger por los giros de balde resultan 500\ufffd. Tambien, que las juegos referente a los que se podri? respetar las requisitos sobre apuesta se trata de lo mucho mas diferentes asi\ufffd como ofrezcan cualquier gigantesco 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-76917","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/76917","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=76917"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/76917\/revisions"}],"predecessor-version":[{"id":76920,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/76917\/revisions\/76920"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=76917"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=76917"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=76917"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}