/* 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":79621,"date":"2026-05-22T22:35:36","date_gmt":"2026-05-22T22:35:36","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=79621"},"modified":"2026-05-22T22:35:37","modified_gmt":"2026-05-22T22:35:37","slug":"free-ports-play-twenty-fiveone-hundred-thousand-of-the-best-free-online-ports-2026-4","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/free-ports-play-twenty-fiveone-hundred-thousand-of-the-best-free-online-ports-2026-4\/","title":{"rendered":"Free Ports Play +twenty five,one hundred thousand Of the best Free online Ports 2026"},"content":{"rendered":"

It Razor Returns online<\/a> means you to spin is also suddenly fill the new screen that have wilds, doing multiple successful lines at once. Double up is one of the most tempting and you can high-risk has in the ports. Energy Containers will be caused at random, grow with each bet, and if you property the right combination, you\u2019ll scoop up any kind of\u2019s on the pot. Think spinning the new reels and you can suddenly watching a different award pot fill up and you can burst that have perks\u2014this is the magic out of Xtreme Energy Containers. Let\u2019s dive to the world of slot game has, explaining the most iconic, universally loved, and you can cutting-border mechanics you\u2019ll come across at the Slotified. The new broke up icon mechanic, as the name would suggest is a phenomenon where an icon can seem more than once in a single status to the reel grid.<\/p>\n

When you are to purchase bonus purchases takes you right to feature cycles, doing so tend to will cost you fifty\u2013200x your for each-spin bet. This is best, because you don\u2019t need to miss out on a huge jackpot because you didn\u2019t protection the new payline that the successful symbols looked to the. Will let you property consecutive wins on one spin, as the successful symbols drop off and are replaced with new ones; tend to causing more wins. As they cut down on wait moments to have potentially big wins, you\u2019ll pay a paid to the bonus and no make sure out of and make your bank account straight back. Choosing the right ports is important, however, knowing and that slot game has will be on the game you\u2019re also to play is equally important.<\/p>\n

Whether or not you enjoy steady bonuses or unstable twists, you could filter out about what has you spinning. Out of flowing reels and you can expanding wilds so you can multipliers and feature buy options, such mechanics shape how a game feels and you can pays. All the slot has its own rhythm, and you can game has are what lay him or her apart.<\/p>\n

Best Dawg$ is an online slot game created by Calm down Gambling, it has a hip-Jump theme which is place in South Central La. Players can obtain one of about three has so you can result in free spins; to the cost of 100x, 200x, or 400x the new bet, step 3, cuatro, or 5 scatters will look to the second lose. Successful clusters pop on the grid, enabling the new symbols so you can tumble down into the new blank tissue, and the process repeats up until no the new clusters come. The game has an upbeat soundtrack and you can a cheerful atmosphere, but it is much less uniquely themed as the most other game out of Hacksaw.<\/p>\n

For those who\u2019re also seeking the best total online slots casino, look no further than Sloto\u2019Bucks. As the name means, this is a member where you score given a flat count out of spins, and no more wagering is needed. As a result, we\u2019ve put together a quick inclusion to the most common has found on online slots and you can comprehensive definitions of every option when you simply click it. Because of this shift, a wide range of online slots has came up, that have all the more tricky feature cycles and you can bonus game. That\u2019s why we has liked a long relationship that have Playtech, the nation\u2019s largest vendor out of casino games. So you can utilise a good converting crazy, you may have to find a different icon altogether so you can result in the new reaction.<\/p>\n

This is a significant factor for those who\u2019re also to the hunt for the biggest awards. Certain game result in the new progressive at random, while others shell out after you\u2019ve effectively navigated a plus game. It\u2019s important to choose the right game for those who\u2019re also search away ports. You\u2019ll as well as find a list of winnings, jackpot awards, or other advice such as RTP.<\/p>\n

To stay secure, stop sites known for slow winnings, not sure fine print, or bad customer service. It\u2019s entirely safe to play at the slot casinos you to screen valid licensing, give safe research encryption, and you can upload fair-play analysis licenses out of credible 3rd-group auditors. Yes, you could, as the certain online casinos give no-deposit bonuses that allow you to win real money to play ports rather than risking your currency.<\/p>\n

This is an example of a regular slot machine\u2019s bonus feature lay, maybe without the jackpots, and that aren\u2019t as the popular as the wilds and you can free spins. Certain bonus symbols could cost up to 150x the new stake, and you should think whether the bonus is even worth the price you\u2019re also spending. To purchase an element will cost you a simultaneous of your stake (e.g. 100x your bet size). Bonus Purchases do not always make sure larger winnings, but if you are powering cold and getting chowed, causing the advantage bullet can certainly help you have made lucky! Although this will cost you much more for each-spin than just to play shorter paylines, it means that you\u2019re also to play the entire game board.<\/p>\n

Causing wins is more common with low volatility ports, the new disadvantage being that those same wins will most likely just prize short winnings. But not, the new extended you play rather than causing him or her, the more they will build up, meaning that much more multipliers, much more wilds and you can larger winnings. The most popular has include the likes out of bonus game, free spins and you can multipliers. Played to the a good 6×6 grid that have Spread Pays, you join the bandits on their past ride of your rails in the a good dystopian futuristic mode. “He is very intimate, and also i don\u2019t need to take one threats. That’s not what you do that have a player and that isn\u2019t what we do now.”<\/p>\n

At the VegasSlotsOnline, i don\u2019t just rate casinos\u2014i leave you trust to play. If the a player doesn\u2019t need to risk it, they can just prefer not to use the feature. But not, however they prompt risk-bringing behaviour you to isn\u2019t always best out of a strategic angle.<\/p>\n

Presented with flowing reels you to shatter and you can lose, sharing symbols out of ancient artifacts, the game also offers not only big wins however, an adventurous narrative. Bright cherries, lemons, or other fruit whirl to the reels, to the game\u2019s \u2018ReWin\u2019 feature promising racy winnings. Because you\u2019re also about to find, it\u2019s more than just a good flip out of a coin; it\u2019s a strategic dancing that have luck, a problem to one\u2019s instincts, and you can an opportunity to magnify your winnings in the a heartbeat. Dice game in the ancient civilizations, gambling to the gladiator bouts in the Roman stadiums, or wagering to the result of a coin throw have all encapsulated that it primal appeal out of risk and you can prize. The new essence out of \u2018gambling\u2019 \u2013 the new act out of risking something worthwhile in the hope out of putting on much more \u2013 could have been instilled in the human history to have millennia.<\/p>\n

For those who\u2019re also dealing with a smaller finances, it\u2019s best to stick to normal gameplay, that can still give plenty of perks over the years. It\u2019s a good option for those who\u2019re also looking for a thrill and have enough on your bankroll for taking the danger. Volatility refers to the game\u2019s risk height\u2014if it pays away seem to in the small amounts or delivers big winnings shorter tend to.<\/p>\n

That it unusual type of slot range from certain appropriately novel gameplay has. Most of the time, re-causes will be activated by the gathering a flat amount of spread symbols. While not the most popular feature, synced reels is game that come with the option for a couple of or much more reels so you can spin up to with her.<\/p>\n","protected":false},"excerpt":{"rendered":"

It Razor Returns online means you to spin is also suddenly fill the new screen that have wilds, doing multiple successful lines at once. Double up is one of the most tempting and you can high-risk has in the ports. Energy Containers will be caused at random, grow with each\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-79621","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/79621","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=79621"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/79621\/revisions"}],"predecessor-version":[{"id":79623,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/79621\/revisions\/79623"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=79621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=79621"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=79621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}