/* 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":132309,"date":"2026-05-25T19:00:22","date_gmt":"2026-05-25T19:00:22","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=132309"},"modified":"2026-05-25T19:00:23","modified_gmt":"2026-05-25T19:00:23","slug":"free-ports-online-play-dos450-online-slots-for-fun-at-the-slotorama","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/free-ports-online-play-dos450-online-slots-for-fun-at-the-slotorama\/","title":{"rendered":"Free Ports Online Play dos,450+ Online slots for fun at the Slotorama"},"content":{"rendered":"

As zetbet casino<\/a> such, it\u2019s very well suitable for the new gamblers that have shorter bankrolls or people who are just much more risk-averse. With so many ports to choose from, players is savvier than ever. You could download its apps, where available, or just play with an up-to-date type of one popular mobile browser. Come across multiple feminine animals in their natural habitat and choose up plenty of perks in the process. Play Your way Opt for prompt spins to have short excitement or much time lessons so you can unlock powerful bonus has \u2014 it\u2019s your casino, your laws. Loaded with roaring jackpots, thrilling bonus game, and you can eye-popping image, that it free-to-play Vegas-design ports thrill will bring all the casino thrill right to your pocket\u2014no real-currency play, just pure fun!<\/p>\n

Our best picks all the has mobile-optimized sites or apps that work. Free no download ports are generally obtainable around the all the Canadian provinces, as they don\u2019t encompass real money gambling. As such, online casinos have to receive licenses so that its platforms follow so you can strict criteria out of research protection, game fairness, as well as in control gambling steps. As the guided by the Canadian Criminal Password, provincial regulatory platforms make sure safe, safe gambling surroundings to have residents when you are blocking scam out of illegal wagering.<\/p>\n

No deposit free spins is granted limited to doing an account, and no deposit required. Because of this, we\u2019ve written a list of tips on how to choose the right slot to you. That it creates an unprecedented amount of access to and you can comfort to have players. To have players, everything you need to do is load the game up whether or not you\u2019re also to the mobile internet or has downloaded an app, and the slot is to scale to the mobile screen and be up and running. In the now\u2019s online casino world, very ports, for both free and for real-currency, will be played to the mobile.<\/p>\n

You can also try out most other diversions for free to the our website to compare and choose the right one. On the bonus game, you\u2019ll get to play 8, 15 or 20 free spins to have step 3, 4 or 5 Gold Bonus symbols landed to the screen. The new Sunset icon stands for the new crazy card here, and you can looking anywhere to the screen it does try to be a good option to all the server\u2019s symbols with the exception of the new Gold Bonus token. There are two exciting has offered in the new journey by the Aristocrat, let\u2019s has a quick look at they both. The new play gifts a beautifully tailored screen you to\u2019s mainly dominated by the blue and you can red the color. You take advantage of multiple symbols and you can bonus has such as the Crazy icon, Spread icon, Free Spins, Multipliers, and the Xtra Reel Ability to improve your possibilities of successful.<\/p>\n

Buffalo will be played thanks to registered online casino apps or personally in the a mobile browser to the each other android and ios gadgets. There are no tricky bonus wheels or front game here, just simple has you to hold the work on landing solid icon combinations and you can chasing big strikes. Buffalo spends step 1,024 a way to win, and no old-fashioned paylines to adjust, so you can just choose the count we want to bet.<\/p>\n

Leading app developers give free Canadian ports rather than downloads, making sure quality, protection, and you can exciting lessons. Free ports no download no subscription that have bonus cycles tend to causes free spins by the landing scatters or wilds. Such launches feature free spins, wilds, find \u2018em, or progressive jackpots, catering so you can beginners next to knowledgeable players. Not all ports are made equal and various app also offers other has, image and you can game features.<\/p>\n

Wins in the Buffalo Gold slot machine online by the Aristocrat is somewhat improved by the bonus cycles as well as has. Enjoy its demo version rather than downloads or subscription, so it is available to all the players. Property mummies and you can gems so you can result in different features, such as the exciting the new Bucks Gather! Symbols, combinations and you can bonus has are still a similar, whatever the device the new gambler spends.<\/p>\n

However,, for those who\u2019re also after cutting-border graphics, advanced has, or super-high RTP, you can also talk about the new new Buffalo series game you to create on this vintage foundation. While it lacks the new polish and you can breadth out of new ports, it still will bring a vibrant feel, especially if you such as big wins thanks to free spins and you can multipliers. It\u2019s, hence, important for players to decide a gamble count that meets its limit, and not risk currency they can’t afford to get rid of. \u201d roar stays popular when big wins hit, staying the new thrill intact no matter where you play. As the graphics is vintage, the new animations and you can music translate well so you can shorter windows.<\/p>\n

All the ports to the our site is free so just use the navigation bar at the top of the new page so you can prefer free videos ports, 3-reels, i-Slots™, or one of many other types of game you love. The company is known for creative has and you can entertaining templates around the its comprehensive game portfolio. Buffalo Gold was created by the Aristocrat Gambling, a keen Australian company based in the 1953 that has become one of the new world’s largest slot machine manufacturers. The new free spins bonus provides the best payout potential, too many players just benefit from the trip when you are hoping for you to bonus result in. An informed approach would be to lay a budget, prefer a gamble size that allows extended play, and enjoy the game as the entertainment.<\/p>\n

The game pays if the there are at least step 3 symbols to the the new adjacent reels to the screen. The new hit frequency lies at the 21.13%, suggesting wins exist approximately after all the five spins, that have the average win out of cuatro.thirty five moments the new stake. That means you could fill the entire screen that have Buffalo and that do result in a monstrous win, unfathomable how big you to jackpot would be! Buffalo Feature Free Game \u2013 Win 8, 15 or 20 free game that have one step 3, 4 or 5 Coin spread strikes respectively.<\/p>\n

During this bullet, crazy symbols proliferate winnings by the two or three, boosting perks by the up to 27x. Demo version offers instant access, demanding no downloads or subscription, that have 20 free spins and additional free bullet features. Free Buffalo Gold slot works to the desktop solutions, Android or ios mobile platforms. After they are done, Noah takes over with this particular novel truth-checking approach based on factual details.<\/p>\n

As the dated image and you can lack of a plus Buy you’ll be slow, Buffalo packs serious energy. To conclude, here at Ports Hurra our free buffalo ports no download is a famous and you can exciting game that offers players the opportunity to win big. The game is a quick hit and you can quickly became one of the most popular slots in the casinos and online. Sign up Now our buffalo penny ports that have Free Spins bonus featuresClaim free pop ports chips to play that have now!<\/p>\n

And we\u2019ve had plenty of Mecca of them for taking your choose from here at the Mecca Bingo. This includes crazy symbols, free spins, bonus game and you can jackpots. All the game has their own unique has to compliment the new gameplay and you can improve your winnings in the process.<\/p>\n

Such as, successful multipliers and you can jackpots can only hit in Torrid Spins. Players can find multiple bonus has as well as multipliers and you can free spins. The new Buffalo free ports game also offers steeped image that have beautiful photos out of Western wildlife. Gambino Ports social casino is home to over 150 novel free ports established in household. Such buffalo-themed online slot game take the new soul of your crazy and you can give exciting opportunities to have players so you can win big.<\/p>\n","protected":false},"excerpt":{"rendered":"

As zetbet casino such, it\u2019s very well suitable for the new gamblers that have shorter bankrolls or people who are just much more risk-averse. With so many ports to choose from, players is savvier than ever. You could download its apps, where available, or just play with an up-to-date type\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-132309","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/132309","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=132309"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/132309\/revisions"}],"predecessor-version":[{"id":132310,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/132309\/revisions\/132310"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=132309"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=132309"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=132309"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}