/* 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":134840,"date":"2026-05-26T00:27:44","date_gmt":"2026-05-26T00:27:44","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=134840"},"modified":"2026-05-26T00:27:45","modified_gmt":"2026-05-26T00:27:45","slug":"play-free-ports-online-7000-demo-slot-machines-16","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/play-free-ports-online-7000-demo-slot-machines-16\/","title":{"rendered":"Play Free Ports Online: 7000+ Demo Slot machines"},"content":{"rendered":"

But Betify app<\/a> not, a no deposit bonus casino give are always come with wagering criteria. They provide a risk-free means for players to play best slot game without any upfront financial relationship, making them an interesting inclusion to a different casino. Saying a no deposit bonus is fast and you can simple, very players can get started in just minutes. All the promotions is subject to qualification and you can eligibility criteria.<\/p>\n

While playing, you can earn in the-game perks, unlock success, and even share your progress with your family members. Because you spin the new reels, you\u2019ll come across interactive bonus has, amazing graphics, and you can steeped sound effects you to transportation you to the heart out of the game. three dimensional ports portray the new cutting edge out of online slot gambling, bringing a really immersive feel.<\/p>\n

Still, you should also here are some PartyCasino and you can Wheel out of Luck Casino to have a good New jersey real money casino feel. Standout names working in the PA are FanDuel Casino and you can BetMGM Casino. Read this list of play currency Free online games and that comes with popular social casinos such as Hurry Game, Slotomania, and you can Hurry Game. For everyone the new players so you can Borgata Casino, there is a welcome deposit bonus, as well as a good $20 bonus for just doing and you can confirming your account. Online casinos now have some of the best bonus also offers where you could win real money, no deposit required and you can play the best blackjack game for fun!<\/p>\n

To me, very no-deposit bonus casinos will get a wagering requirements somewhere around 40x. The better the new multiplier, the more hard it\u2019s to meet such terms, that it\u2019s best to work on low multipliers. Remember that high wagering criteria make it harder to have you to transfer bonus finance to the real money.<\/p>\n

With just a tiny deposit, you can access generous, private perks out of Casino.org. As well as no deposit bonuses, many of our needed casinos give worthwhile deposit bonuses. Such bonuses let you play for free, however, no deposit bonuses are usually limited to specific game or ports, so be sure to check out the fine print very carefully.<\/p>\n

At the OnlineSlots.com, we like hunting down a good no deposit bonus and we know exactly what to look for in a casino. Saying a free no deposit bonus at the an online casino is easy. Such always do not come with very long fine print, other than a tiny timeframe where they have to be used.<\/p>\n

She will bring a sharp eye to have detail and you can truth-checking, keeping PlayCasino’s reputation as the a trusted source of advice on the competitive world of online gambling. Now, I be sure to here are some each other options to maximize my to play time and potential wins. However, over the years, I\u2019ve found that no deposit free spins will be exactly as fulfilling, if not more. I after popped at the a no deposit bonus, just to be blindsided by the high wagering criteria. Yes, you could cash out your winnings out of a no deposit bonus, however, only when you\u2019ve met the new wagering criteria and you can and you can enacted name verification (KYC). I personally comment and you can try all the casino listed, read the bonus terms, and update bonus codes monthly to make sure accuracy and you can importance.<\/p>\n

30 FS on top 5 slot game or Aviator. Scoop free spins to the Magic Of your Phoenix slot and money perks Free Spins perks are different. Early availability subscription required. Set aside your private no deposit bonus to the Early Availability subscription You could win real money, even if very also offers are wagering criteria.<\/p>\n

That have a one-of-a-form eyes out of what it\u2019s like to be a beginner and you can a pro in the bucks game, Michael jordan steps to the shoes of all the players. Better yet, you could win free currency no deposit perks and no wagering criteria in it. Depending on its perks and you can terms, online casinos\u2019 free bucks no deposit sales can get apply to a number of other game. Ports also offers are some of the most common, but you\u2019ll also come around the table game and you can bingo no deposit sales.<\/p>\n

Successful is never secured, however, no-deposit bonuses help border the odds closer to your prefer. Accompanying bonuses such as Caesar\u2019s Prize Things that come with the new no-deposit bonus next help keep players loyal to the site after they\u2019re also addicted. Best bonuses such as lucrative no-deposit bonuses help attract the new players to the casinos. No-deposit bonuses are a great way to have potential players to try out the site without using their hard-earned bucks.<\/p>\n

That have a low minimum bet out of just $0.09, it\u2019s obtainable to have players of all the account. That have Dead or Live II, the new Crazy West theme, animations and all-bullet gameplay character create all the spin be entertaining. Flexible Bonuses – The option to decide your free spins bonus is a standout feature, bringing a different spin you to has the new gameplay fresh. Put out by the NetEnt in the 2019, that it slot catches the new Crazy West soul and offers progressive gameplay factors you to keep players returning for more. Well worth a go when you are after a soft feel, and the low volatility height makes it best for players who enjoy normal winnings.<\/p>\n

McLuck tend to kickstart your trip here that have a no deposit bonus out of dos.5 South carolina and you can 7500 Gold coins, whereas the new every day free bonus can also internet you up to dos.5 South carolina and you can 2500 Gold coins. Some of my favorites are Alice\u2019s Wonder Story by the Spinometal, Supercharged Clovers \u2013 Keep and you can Win by the Playson, and you can 777 Diamond Jackpot \u2013 Keep and you can Win by the Gambling Corps. That it alive site is loaded with tons of free perks, high free play ports, and you can grand real money award potential. McLuck is one of the most interesting and fulfilling progressive sweeps casinos in america. You choose how many moles and then it\u2019s up to you to hit him or her as they pop up, much more moles and you can strikes translates to a bigger multiplier.<\/p>\n

A no deposit casino is an online gambling site that give no deposit bonus offers to its users. Think of the bonus as the casino’s technique for flirting, in hopes you’ll enjoy the action enough to stick around and make dumps down the line. Very important laws are a wagering requirements, bet and you can win restrictions for each spin, and you can fewer free spins than just a deposit give. But not, either, the new casino may wish to give free spins available as the a good no deposit bonus, as is often the case if the casino wants to give some new game. After you found no deposit finance, the cash count is generally short, and the wagering requirements is higher than a basic deposit bonus. Such solutions award players because of their loyalty, such as a good ‘thank you for your custom’ expressed as the a no deposit bonus.<\/p>\n

A good. When selecting an informed online slots, think things such as RTP (Return to Player) commission, bonus has, templates, and the history of the software vendor. Fast-packing profiles, bright game choices, and you can easy, credible gameplay \u2014 things are crafted with you in mind. We\u2019re also not only passionate about online slots\u2014we\u2019re also built on years of real experience in the new iGaming world.<\/p>\n","protected":false},"excerpt":{"rendered":"

But Betify app not, a no deposit bonus casino give are always come with wagering criteria. They provide a risk-free means for players to play best slot game without any upfront financial relationship, making them an interesting inclusion to a different casino. Saying a no deposit bonus is fast and\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-134840","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/134840","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=134840"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/134840\/revisions"}],"predecessor-version":[{"id":134841,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/134840\/revisions\/134841"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=134840"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=134840"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=134840"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}