/* 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":132343,"date":"2026-05-25T19:02:36","date_gmt":"2026-05-25T19:02:36","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=132343"},"modified":"2026-05-25T19:02:37","modified_gmt":"2026-05-25T19:02:37","slug":"free-ports-casino-games-so-you-can-win-real-money-and-no-deposit","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/free-ports-casino-games-so-you-can-win-real-money-and-no-deposit\/","title":{"rendered":"Free Ports & Casino games so you can Win Real money And no Deposit"},"content":{"rendered":"

But https:\/\/betovo-casino.com.gr\/el-gr\/<\/a> it needs to pay if it gets to the new jackpot count and that involves drawing money from the players\u2019 stakes. That it, generally, comes from the players who look forward to the new freebies. The same thing receives to the commission options with which you is also deposit the cash we want to play with and you can withdraw your winnings. A player wins a different bonus payout that have about three scatters. The big gameplay out of a very hot server comes to looking to create a couple so you can five comparable symbols to seem to the reels meanwhile. So, when over five scatters stands up in the a game, you are looking towards the new jackpot.<\/p>\n

Real money ports is online slot game where players on the Us is also bet actual cash so you can win real winnings. Our best free slot machine that have bonus cycles are Siberian Storm, Starburst, and you can 88 Fortunes. VegasSlotsOnline ‘s the internet\u2019s decisive ports attraction, connecting players to over 32,178 free ports online, all the and no download or sign-up required. Such slot templates are in our best list as the players keep returning on them. By the knowledge such core has, you could quickly compare ports and acquire options that offer the new right harmony out of risk, prize, and you can gameplay design to you.<\/p>\n

This will help us cover bonuses, keep gameplay fair, and maintain a trusted gambling ecosystem. Just click Sign up on the best-right corner, get into several first details, and you\u2019re also good to go. With over twenty five,one hundred thousand supporters to the Instagram and you can YouTube, Sloto\u2019Money is over a casino\u2014it\u2019s a vibrant, expanding community. You can see those people criteria by the checking all the information section when you are on the game. Yes, most of the time one bonus also offers obtained thanks to a good promo or bonus password, whether or not its free play, a first-deposit bonus, or free spins, are often used to play online slots. Real money slot game come at all of your online casino sites said in this post.<\/p>\n

And as you\u2019ll find, there are templates, has and you can mechanics to match definitely all types out of gambling lover, so prepare yourself to be entertained! Look online and you\u2019ll see that it\u2019s not easy to find casino games you to pay real money and no deposit required. And it\u2019s those people free Sweeps Gold coins and that hold the key to redeeming real money awards because you play him or her thanks to depending on the site\u2019s laws. Very no deposit bonuses come with high wagering criteria that must be met before you can withdraw your finance. Yes, you are able to allege no deposit bonuses at the certain sites and enjoy certain free online ports that way. Slotomania is one of the most popular social casino apps, featuring hundreds of free ports that have exciting templates, every day pressures, and you can interactive gameplay.<\/p>\n

Survive the action-packaged bonus cycles by the to play free ports such as the Walking Dead. Thanks to the unbelievable sweepstake casino extension, players can take its date to play free ports at the worthy sites such as Mega Bonanza Social Casino. Buffalo is a well-known slot machine that you\u2019ll find in best casinos in the Vegas, Reno, and you can Atlantic City. It requires seven reels so you can soak players in the a virtual world out of chocolates and you can candy. Adding such bonus has has taken in the a whole new height out of gameplay. Of course, to play free ports and no download also offers a faster gameplay feel.<\/p>\n

Let\u2019s be real \u2014 for those who\u2019re also here, you\u2019re also not only looking to spin for fun. So while you won\u2019t walk away that have a good jackpot, you\u2019ll get the full feel rather than putting something at stake. It\u2019s not quite just like demo mode, but it\u2019s a great way to start off rather than putting much of your cash on the new line. That means even if you\u2019re also technically to play for real currency, you\u2019re also playing with household credits or free spins to do it. The dog Household MegawaysBonus buy options here take you directly into free spins that have sticky wilds, boosting your likelihood of a huge payout. Dead or Live 2This vintage online slot allows you to get one out of about three bonus cycles \u2014 out of sticky crazy free spins so you can high-volatility shootout modes.<\/p>\n

Sweepstakes casinos are very a go-so you can option for players who need free casino games that have free gold coins and the potential to redeem awards. In the free online casino games, scratchers are usually included as the a portable option for players who need something short and you can fulfilling. If you want the option to play to have awards, sweepstakes casinos will be the most popular channel as the Sweeps Gold coins (where given) will be redeemed for real currency awards in the eligible says and you can under the site\u2019s laws. While many sites give easy demo game, sweepstakes casinos take free play a step next by letting players engage playing with Gold coins and you can Sweeps Gold coins – the latter at which will be redeemed for real currency awards in the eligible says. If the all of this still isn\u2019t enough, it\u2019s time to head over to the game lobby and see much more has that our players love in our casino game…<\/p>\n

There is something for everyone, out of progressive jackpots so you can niche templates. Browsing through thousands of fun headings with various templates and features is so easy to the our amicable gambling site. We offer the new players a good one hundred% fits bonus up to $eight hundred online casino bonus on each of its first five dumps.<\/p>\n

Even if online slots is a matter of opportunity, it\u2019s good to has a game package. It\u2019s always a good tip to pick up a plus, because you\u2019re also stretching your game date rather than spending more money. After you\u2019re also used to the new mechanics, you could set out a bona fide currency slot bet. To play free ports prior to moving on to the real thing helps for those who\u2019re also not knowledgeable.<\/p>\n

Featuring high-quality image, entertaining bonus cycles, and you can every day perks, that it social casino has something fun and you can fresh. Here are some our full Slotomania comment and see as to why millions of players love this game! That have frequent status, in-game missions, and you can a thriving community forum, Slotomania has players engaged that have fresh posts and lots of opportunities so you can win free gold coins. That have every day bonuses, loyalty perks, and you can an easy-to-navigate interface, Hurry Game is a top option for players looking for a good fun and you can free casino feel. You could easily and quickly look at our guide to an informed Real money Casinos to find the best cities to play in the your location!<\/p>\n

You can often find you to free spins is along with most other bonuses, and several of them may need a deposit for new players, before you can get the free spins. In the Canada and you can elsewhere, 888casino is the best option if you are looking to play online slots. In the uk, an informed casino bonus we have found to have ports, is out of Sky Vegas who give the new players that have fifty Free Spins and no Deposit! Speaking of worthwhile casino bonuses as they make it players to try away specific game at the a bona fide currency casino, rather than risking one finance. Of course, speaking of high as it mode players can play free casino game you to pay real money.<\/p>\n

It\u2019s important to read the fine print of your bonus give for the required codes and you can follow the guidelines very carefully so you can ensure the spins is credited to the membership. If the no specific bonus password is needed, players can only allege the new free spins rather than more steps. So you can allege free spins also offers, players tend to have to get into specific bonus codes in the subscription process or in its membership\u2019s cashier section. In the subscription process, players have to fill out its details and you can make sure its name that have court files. Membership verification is a critical step that helps stop scam and you can guarantees protection for everyone players. Casinos such as DuckyLuck Casino generally give no deposit free spins you to be valid after subscription, enabling players first off spinning the new reels straight away.<\/p>\n","protected":false},"excerpt":{"rendered":"

But https:\/\/betovo-casino.com.gr\/el-gr\/ it needs to pay if it gets to the new jackpot count and that involves drawing money from the players\u2019 stakes. That it, generally, comes from the players who look forward to the new freebies. The same thing receives to the commission options with which you is also\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-132343","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/132343","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=132343"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/132343\/revisions"}],"predecessor-version":[{"id":132344,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/132343\/revisions\/132344"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=132343"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=132343"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=132343"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}