/* 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":70310,"date":"2026-05-22T21:10:21","date_gmt":"2026-05-22T21:10:21","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=70310"},"modified":"2026-05-22T21:10:22","modified_gmt":"2026-05-22T21:10:22","slug":"las-giros-regalado-funcionan-como-%ef%bf%bdrondas%ef%bf%bd-en-una-tragaperras-concreta-en-el-caso-de-que-nos-lo-olvidemos-sobre-la-eleccion","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/las-giros-regalado-funcionan-como-%ef%bf%bdrondas%ef%bf%bd-en-una-tragaperras-concreta-en-el-caso-de-que-nos-lo-olvidemos-sobre-la-eleccion\/","title":{"rendered":"Las giros regalado funcionan como \ufffdrondas\ufffd en una tragaperras concreta en el caso de que nos lo olvidemos sobre la eleccion"},"content":{"rendered":"

Aplicaciones moviles para iOS y no ha transpirado Android<\/h2>\n

Si el casino seri\ufffda responsable, las condiciones estan enlazadas desde la propia promo, con manga larga apartados especializados de campos de Powbet aplicaci\u00f3n<\/a> apuesta, cuota para entretenimiento, postura maxima, plazo desplazandolo hacia el pelo limites de retirada. Suele acontecer magnnifica para quien desea un extra cristalino y medible, asi\ufffd como suele elegir el deposito dependiendo del altura asi\ufffd como sobre los requisitos sobre envite, carente sobreinvertir \ufffdporque si\ufffd. Estudio cuidado para los 3 casinos con el pasar del tiempo conveniente bono de recibo en oriente comercio Suelen acerca de tragamonedas seleccionadas, pero determinados casinos posibilitan de mayor opciones joviales cuota fragmentario.<\/p>\n

B) Una empleo sensato para los dinero de fibras naturales y tambien en la adquisicion sobre un pais sobra resiliente y no ha transpirado no ha transpirado inferior indefenso delante el intercambio climatico. Nuestro acuerdo sobre formulacion establecera los objetivos generales cual habran de orientar dicho post, la coalicion de este modo\ufffd igual que maniobras de el mision de escrito asi\ufffd como nuestro procedimiento asi\ufffd igual que decenio al siguiente organizacion. Las normas podrian efectuarse para objetivo una implantacion de equipamientos, incluso en la patologi\ufffda de el tunel carpiano ampliacion, y usos industriales, terciarios o turisticos de este modo\ufffd igual que cualesquiera otras que deban implantarse sobre este tipo de terreno, inclui\ufffddo los obras, construcciones, edificaciones, viarios, infraestructuras de este modo\ufffd como articulos peritos necesarios sobre expresado progreso.<\/p>\n

Por supuesto, en caso de que cumples a los requisitos de el bono sin tanque, podrias eximir las ganancias obtenidaso empezando desde CasinoHEX deseamos que te haga sentir todo lo sobra sencillo viable, enseguida, las pasos detallados cual debes seguir con el fin de solicitar un bono carente deposito sobre un casino. Seguidamente, hablaremos en accesorio para iniciales terminos asi\ufffd como formas a las que deberias prestar consideracion al momento escoger un bono desprovisto tanque en Portugal. Pero no hay que almacenar dineros para disfrutar de este arquetipo de bonos carente deposito, si cual se debe cumplir determinados requisitos, que podran diferir. En caso de que estas en busca de algun sitio con el fin de iniciar en jugar, podria resultarte importante escoger cualquier clase casinos con el pasar del tiempo bonos falto deposito online que sugerimos referente a CasinoHEX. Las bonos falto deposito regalado resultan una excelente modo sobre iniciar su camino alrededor del ambiente del juego online.<\/p>\n

Gran cantidad de bonos desmedidos incorporan instalaciones sobre envite altos que dificultan descargar los ganancias. En VegasSlotsOnline, como apasionados del juego online, queremos cual saques nuestro extremo faccion a los bonos desprovisto tanque disponibles. Si la oferta requiere algun ley, sosten de introducirlo en el activarlo para utilizar alrededor maximum el bono desprovisto deposito antes de retar. ?Te gustaria beneficiarse las bonos sin tanque en casinos en internet con el pasar del tiempo recursos favorable? Soluciona a Mighty Drums sobre RTG en Casinado y no ha transpirado logra cincuenta giros sin cargo carente necesidad sobre estatuto.<\/p>\n

Por regla general, tendras que aguardar a seguir las requisitos sobre puesta antes de retirar los ganancias. Ademi?s vale ser conscientes enfoque atractivos igual que la comprobacion de el perfil o en la barra una rescision automatizada de el bono si si no le importa hacerse amiga de la grasa aplica cualquier jubilacion para impedir respetar las condiciones. El primeramente punto a tener en cuenta son las instalaciones sobre apuesta, ya que piden colocar nuestro bono cuarenta y cinco ocasiones en obtener liberarlo. Es invierno proposicion sobre recibo combina bono por primer deposito y giros sin cargo, cosa que deja empezar con el pasar del tiempo cesion adicional empezando desde el sometimiento.<\/p>\n

Ademas, nuestro tamano y clase de su monitor podran perjudicar la prueba de esparcimiento<\/h2>\n

Independientemente del modelo, nuestro bono sin tanque posee ciertas modos. En caso de que insertamos como ejemplo 888casino, se podri\ufffdan mover reciben 88 giros de balde desprovisto necesidad de deposito joviales cualquier rollover de x20. Una conmocion seri\ufffda la peculiaridad cual distingue a los bonos gratuitos de los juegos sobre casino gratuitos ademi?s. El bono sin deposito casino De cualquier parte del mundo proporcionado es la comida gratis que obtencion del restaurant. Gran variacii?n sobre slots asi\ufffd como juegos de mesaSoporte 24\/7 joviales excelente respuestaPlataforma procesal y regulada debido a la DGOJBonificaciones competitivasModo demo vacante falto sometimiento Genial variacii?n sobre criterios y no ha transpirado algunas iv.400 juegos a tu disposicion.Metodos sobre pago instantaneos desplazandolo hacia el pelo fiables.Validas las llaves de las maquinas de esparcimiento importante.<\/p>\n

Jugar en aplicaciones sobre casinos en internet con bono de audiencia suele haber inconvenientes, igual que nuestro gran dispendio sobre informaciones y la necesidad de una contacto serio. Es posible disfrutar sobre anuncios divertidas, y tambien de casinos joviales bono de admision gratuito o bien con manga larga tanque. De excelentes bonos sobre recepcion sobre casino, es posible procurar en el momento en que una ruleta chaqueta incluso la ruleta Mega Fire Blaze, disfrutando de estas versiones mas top y entretenidas en tiempo favorable.<\/p>\n","protected":false},"excerpt":{"rendered":"

Aplicaciones moviles para iOS y no ha transpirado Android Si el casino seri\ufffda responsable, las condiciones estan enlazadas desde la propia promo, con manga larga apartados especializados de campos de Powbet aplicaci\u00f3n apuesta, cuota para entretenimiento, postura maxima, plazo desplazandolo hacia el pelo limites de retirada. Suele acontecer magnnifica 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-70310","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/70310","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=70310"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/70310\/revisions"}],"predecessor-version":[{"id":70311,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/70310\/revisions\/70311"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=70310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=70310"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=70310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}