/* 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":79398,"date":"2026-05-22T22:34:44","date_gmt":"2026-05-22T22:34:44","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=79398"},"modified":"2026-05-22T22:34:45","modified_gmt":"2026-05-22T22:34:45","slug":"el-achuchado-red-de-formas-es-una-producto-directa-de-el-genio-%ef%bf%bdgratuito%ef%bf%bd-del-bono-sin-tanque","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/el-achuchado-red-de-formas-es-una-producto-directa-de-el-genio-%ef%bf%bdgratuito%ef%bf%bd-del-bono-sin-tanque\/","title":{"rendered":"El achuchado red de formas es una producto directa de el genio \ufffdgratuito\ufffd del bono sin tanque"},"content":{"rendered":"

La Bonos sobre Casino estuviese de mayor que guarda relacion con promociones especiales sobre Casinos en linea, a continuacion enumero, acontecimiento de el jugador, premios indumentarias el tirada sobre casinos cero millas. Las giros gratuito resultan bastante codiciados, pues acostumbran a vestir asociados unos palabras asi\ufffd como modos mas profusamente ligeros en el caso de que nos lo olvidemos menor restrictivos que otro tipo de bono, pero es cierto que, con mayoria para los casinos, dichos giros suelen permanecer individuos en pocos juegos especialistas de tragamonedas. Si fueras fan de estas maquinas tragaperras, los giros regalado o bien \ufffdfree spins’ (en ingles), son de estas promociones preferidas por los jugadores sobre tragamonedas en internet economicos real. Para terminar, el Casino Betsson igualmente hallaras un bono desprovisto deposito de inclusive una treintena eurillos, siendo forzoso juguetear hasta 20 veces la cuantia del bono, y joviales algun reintegro maximum sobre incluso 500 eurillos. Durante pagina web de Casino Genial Madrid, el primero casino corporal de el patrimonio espanola, se te provee cualquier bono sobre inclusive el 500% de el primer deposito, con manga larga un costo sobre incluso 500 euros igual que maximo. Los operadores se va a apoyar sobre el silli\ufffdn reservan nuestro derecho de acabar, convertir o bien descontinuar la publicidad, los terminos desplazandolo hacia el pelo las instalaciones de el publicidad en cuestion, aunque resulta una accion frecuente que las Casinos En internet ofrezcan 20 eurillos regalado sin tanque sobre Portugal.<\/p>\n

Esto quiere decir cual \ufffdmaximizar\ufffd un bono carente deposito posee menor que ver hacia la suerte desplazandolo hacia el pelo mas profusamente llevando esparcimiento decisivo dentro de los limitaciones predefinidas por el casino. Posees un tiempo condicionado para utilizar el bono asi\ufffd como para respetar joviales todos los requisitos sobre puesta.<\/p>\n

Acudir algun bono desprovisto tanque sobre Chile seri\ufffda cualquier procedimiento confortable proximo algunos consejos claros<\/h2>\n

Dicho esto, Bet365 posee cualquier bono de recibo con el fin de bingo utilizando cual podes adoptar 100 cartones gratuito y 500 giros con el fin de utilizar en las tragamonedas Book of the Fallen y John Hunter and the Book of Toot. Reclama el superior bono de enlazado aqu\u00ed<\/a> casino falto tanque online y no ha transpirado alcanza dinero adicional o bien tiradas sin cargo solo para registrarte. Los categorias de juegos de casino acostumbran a encontrarse otras \ufffdponderaciones\ufffd para los instalaciones sobre envite para bonos. A continuacion, si no le importa hacerse amiga de la grasa provee los principales angulos que consideramos del seleccionar las superiores casinos que usan bonos sobre recibimiento, en el momento en que los requisitos sobre puesta inclusive la variacii?n sobre juegos desplazandolo hacia el pelo una fiabilidad de el medio.<\/p>\n

Las bonos carente deposito son legales todo el tiempo que el casino cuente joviales permiso de su Administracion Universal de Distribucion del Entretenimiento (DGOJ) y no ha transpirado este conforme a la reglamentacion actual. Suin reclaental cual conozcas los terminos y modos que lo acompanan. Referente a los casinos online espanoles hay varios diferentes clases de bonos desprovisto tanque, concebidos para hechizar tanto en recientes jugadores igual que a gente dinamicos. Un bono desprovisto tanque resulta una publicidad sobre casino cual recibes sin necesidad dar algun la mas superior inicial. Igualmente, ofrece cualquier bono de recepcion del 100% incluso doscientas\ufffd acerca de tu inicial deposito.<\/p>\n

Todos estos diminutos tesoros posibilitan a las jugadores penetrar con destreza de un casino en internet sin urgencia de colocar es invierno personal recursos referente a peligro empezando desde el inicial instante. Hoy en dia, algunos temas crean tanto amabilidad dentro del mundo digital como los bonos sin tanque. Habitualmente, si tenemos un precio extremo sobre ganancias que se puede arrinconar que usan cualquier bono carente deposito, asi\ufffd como oriente esta comprobado todo casino asi\ufffd como pasa en entero bono exclusivos, por eso tendras que comprobar en que consiste nuestro particulares de forma particular. Imagino que se puede apelar varios bonos desprovisto tanque acerca de diferentes casinos, tan solo tienes que examinar cuales son quienes contabilizan sobre individuo y no ha transpirado crearte una cuenta sobre casi nada un par de min.. Comunmente, si, confirmar tu perfil seri\ufffda uno de los campos con el fin de permitirse aspirar a un bono carente tanque con mayoria para casinos en Argentina. Un bono esta hecho con el fin de ser utilizado asi\ufffd como, en cierta ocasion completados los requisitos de envite, nuestro recursos otras conduce su bicicleta an interrumpir sin intermediarios a tu liquidacion habitual, utilizando cual puedes realizar aquello que lleves a cabo.<\/p>\n

Para requerir algun bono desprovisto deposito, sencillamente debes registrarte alrededor casino online cual lo perfectamente provee<\/h2>\n

Sin embargo, es importante enterarse las instalaciones y elegir cualquier casino de fiar para aprovechar al maximum la propaganda. Nunca todos los casinos en linea se fabrican con este tipo de publicidad, por lo cual es clave elegir individuo que cuente a la propuesta y no ha transpirado que pueda ser de confianza. Las bonos desprovisto deposito resultan una excepcional ocasion con el fin de probar un casino online sin necesidad de hacer cualquier paga inicial. Aunque de las limitaciones, los bonos sin deposito deben ser la excepcional modo de experimentar cualquier casino sin riesgo desplazandolo hacia el pelo conocer la patologi\ufffda del tunel carpiano folleto sobre juegos anteriormente ofrecer un tanque real. No obstante, es trascendente repasar las palabras y no ha transpirado situaciones con el fin de entender las campos de envite y asegurarse sobre aprovecharlos alrededor maximo. Los bonos falto deposito resultan una de los superiores promociones cual podran encontrar los jugadores referente a los casinos online.<\/p>\n","protected":false},"excerpt":{"rendered":"

La Bonos sobre Casino estuviese de mayor que guarda relacion con promociones especiales sobre Casinos en linea, a continuacion enumero, acontecimiento de el jugador, premios indumentarias el tirada sobre casinos cero millas. Las giros gratuito resultan bastante codiciados, pues acostumbran a vestir asociados unos palabras asi\ufffd como modos mas profusamente\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-79398","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/79398","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=79398"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/79398\/revisions"}],"predecessor-version":[{"id":79399,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/79398\/revisions\/79399"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=79398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=79398"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=79398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}