/* 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":132875,"date":"2026-05-25T19:24:22","date_gmt":"2026-05-25T19:24:22","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=132875"},"modified":"2026-05-25T19:24:23","modified_gmt":"2026-05-25T19:24:23","slug":"play-free-ports-that-have-bonus-free-spins-is-in-the-demo-mode-2","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/play-free-ports-that-have-bonus-free-spins-is-in-the-demo-mode-2\/","title":{"rendered":"Play Free Ports that have Bonus Free Spins: Is in the Demo Mode"},"content":{"rendered":"

99% betmgm offici\u00eble website<\/a> of time, the new spins are only available on picked game picked by the site. Be sure to allege bonuses that have shorter wagering criteria, if not free spins no deposit or wagering! No deposit free spins can often has high wagering criteria than just free spins granted after and make a deposit. Mr Q as well as servers an impressive line of live casino games, as well as blackjack, roulette and you can novel live game suggests. This week, we are spotlighting Mr Q for your next free spins no deposit bonus. This includes mobile-private promotions and the same site’s casino free spins also offers.<\/p>\n

I make sure you get a variety of bonus sales even following the welcome give. I find prompt spending casinos that have short processing moments \u2013 of course, remember that this also relies on the new withdrawal approach you choose. I have a good 23-step technique to comment all the casino and ensure it meet our strict criteria to have protection, fairness, and you can entertainment. Whether you are after a welcome package or an ongoing deal, you can always score best promotions such as no deposit bonuses to have Us players..<\/p>\n

But not, of many online casinos do not give one no wagering bonuses as there is a danger of losing money if the thousands of someone wins big. Second, such bonuses become more glamorous to the casinos than just no deposit bonuses, that are given for free and frequently the players who allege such do not make any dumps. Be aware that for those who withdraw the new free spins winnings, you’ll forfeit the new deposit fits for those who still have to done you to part of the bonus criteria. But not, at the NetBet you can buy each other free spins no deposit and you can free spins no wagering also offers! There are no “free spins no deposit, no wagering” also offers out of credible Uk casinos available in Can get 2026.<\/p>\n

Opt in the, deposit \u00a310+ in this one week out of registering & bet 1x to the eligible casino games in this one week to find fifty Bet-Free Free Spins to the Big Trout Splash. Deposit \u00a3ten & bet 1x to the casino games (wagering contributions are different) to have two hundred Free Spins worth 10p for each to the Big Trout Splash. I compare over fifty promotions, define how they works, and how i prefer him or her, filtering away one misleading or not sure sales to you.<\/p>\n

The way to allege a free spins bonus may differ anywhere between other free spins promos. Playthrough criteria will be the key status connected to free spins winnings. Us online casinos give free spins as the an extra bonus to have people to sign up and you can play. A common analogy is landing step 3 or more spread symbols in the very slot game, such as on the Da Vinci Diamonds slot, where scatters is also internet you up to three hundred free spins. We\u2019ll update that it as soon as there\u2019s a difference, however, already; the new casino giving a free spins bonus is PlayStar, and that released in the 2022. Whether or not you\u2019re also new to online casinos or a loyal lover, PlayStar has the fun upcoming every day.<\/p>\n

After active, you have made 5 no deposit free spins that have a good 10x wagering requirements. The new free spins no deposit give at the Cop Ports will give you freebies to the Chilli Temperature slot. We believe the new no deposit free spins give at the Casilando Casino will bring a great way to try this casino with reduced relationship. Even after no deposit free spins you\u2019ll have to ticket ID checks (KYC) before you can cash out everything you win. To stay safe, play with debit cards, PayPal, or another accepted commission option when saying deposit free spins. Certain casinos ban Skrill and you can Neteller dumps out of free spins bonus eligibility as the those people commission steps are sometimes used for bonus punishment, so they cut off him or her to have protection.<\/p>\n

Yes – very no deposit bonuses can come that have win restrictions, capping the amount you could withdraw out of winnings. No deposit bonuses are in different forms, as well as free spins to have specific slot game, bonus bucks to use to the a range of game or free play credits over time restrictions. Yes – you could win real money out of no deposit bonuses, however, specific criteria tend to apply. Prior to saying one no deposit bonuses, we may highly recommend checking the new fine print, as they will most likely are different somewhat. Saying a no deposit bonus is a simple process that is to only take a few minutes. The new online casinos tend to occasionally give players bucks bonuses to have registering.<\/p>\n

But not, you can try away certain no deposit bonuses so you can potentially win certain real money rather than committing to your bankroll. For those who visit one of our needed online casinos right now, you might be to play free ports within a few minutes. Score about three spread symbols to the screen so you can result in a free spins bonus, and enjoy more time to play your favorite free slot game!<\/p>\n

Slots will be the very played free casino games that have a good type of real money ports to play at the. Such slot templates are in our best list as the players keep returning on them. Access to of many templates \u2013 Out of vintage fruit servers so you can branded videos ports and you can jackpots To have Us players specifically, free ports is an easy way to play casino games before deciding whether to play for real money. The new game i list all are from best slot company, has other templates – Vampires, Step and you can everything in anywhere between – and you can play all the 32,178+ for free, here. Such as game give more frequent winnings, so there is opportunity to win shorter amounts a few times and you can still attract more than others who aim for the biggest.<\/p>\n

Free spins no deposit Uk bonuses are a good risk-free means for players, the new and you can existing, to explore and you can play other online casinos and you can casino games. It has worthwhile promotions such as welcome bonuses, cashback also offers, deposit bonuses, and you can a valuable free spins bonus to use along the platform’s array of slot headings. 30 free spins no deposit bonuses is a familiar mid-diversity give and will give a good harmony anywhere between number and you can worth. So, whether or not you\u2019re also to the vintage fruit servers or cutting-border videos ports, play our free game and see the new headings that fit your liking.<\/p>\n

That\u2019s right, to play any of the casino and you can slot game here at Fantasy Jackpot provides the opportunity to win real money. There are a range of live casino games to the our site, as well as Twice Ball Roulette, Energy Blackjack, Greatest Texas Keep\u2019Em Poker, and even more. Live casino games give the new genuine contact with a classic casino right to your screen. He is your greatest book in choosing the very best online casinos, bringing knowledge to the regional sites that offer each other thrill and you can protection.<\/p>\n

Of many players such as the convenience of no wagering free spins bonuses. Because these “keep your winnings” sales are quite a good, you could wonder as to why Uk online casinos give such as bonuses so you can players. Because there are multiple advanced options, i have picked best about three no wagering free spins also offers i such as the very; simply click our links to sign up and start to play! This page compares leading, UK-registered casinos giving no wagering free spins, helping you buy the most valuable sales quickly. This action is same as no-deposit free spins, but the huge difference is the fact winnings is your own to store without any wagering. This is our best lits of your free spins no deposit bonuses to have Uk players in the 2026.<\/p>\n","protected":false},"excerpt":{"rendered":"

99% betmgm offici\u00eble website of time, the new spins are only available on picked game picked by the site. Be sure to allege bonuses that have shorter wagering criteria, if not free spins no deposit or wagering! No deposit free spins can often has high wagering criteria than just free\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-132875","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/132875","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=132875"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/132875\/revisions"}],"predecessor-version":[{"id":132876,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/132875\/revisions\/132876"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=132875"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=132875"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=132875"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}