/* 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":32146,"date":"2026-05-17T14:42:05","date_gmt":"2026-05-17T14:42:05","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=32146"},"modified":"2026-05-17T14:42:06","modified_gmt":"2026-05-17T14:42:06","slug":"free-casino-games-wager-fun-22800-demo-online-game","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/free-casino-games-wager-fun-22800-demo-online-game\/","title":{"rendered":"Free Casino games Wager Fun 22,800+ Demo Online game"},"content":{"rendered":"

Please always evaluate and this games qualify for this new tournament prior to using. Insane Gambling enterprise possess repeated slot tournaments which have award pools about thousands and you can leaderboard races to own consistent large-volume participants around the several online game. Very reload bonuses is associated with sportsbooks, so they really aren’t usually an option for the best online harbors to play. Total, an educated online slots games internet sites render reasonable and you can transparent promotions one prefer slot players with low lowest dumps and you will higher position share pricing. Extremely promotions come with wagering conditions, games limits, and go out limits, so always check the latest conditions and terms. They frequently tend to be entertaining added bonus cycles and you may storylines you to unfold because the you gamble, making them feel more like games than just slots.<\/p>\n

Shaver Shark is set for the good neon underwater business, which have sea animals, radiant signs, and you may a deep sea backdrop that has actually brand new display viewable if you find yourself nevertheless impact modern. They uses a cluster pay structure on a larger grid, very gains are from sets of icons rather than fixed paylines, and you can effective groups obvious to let cascades. The online game runs with the an easy 5-reel build that have a straightforward element lay, you commonly balancing advanced top mechanics otherwise multiple incentive settings. Many selections work at inside the browser, because free ports don’t have any down load criteria, and sweepstakes\/personal networks constantly keep some thing fresh which have daily coins, promos, and you may spinning free gambling games parts which means you\u2019re also not caught replaying the same few headings. You can discover just how extra rounds work, figure out what volatility you enjoy, and decide to try new launches instead risking your money. You could investigate reception before registering, and once you\u2019lso are into the, SweepsRoyal feels as though a leading-volume ports centre where you are able to bounce anywhere between conventional preferences and you can Keep & Win-concept jackpot slots.<\/p>\n

And you can yes, you\u2019ll need subscribe and verify your account very first. There\u2019s a whole lot more \u2013 check up on-web site. Even so they\u2019ll gain access to one of the primary lineups of slots the preference. Because Luckster is additionally a good sportsbook, you\u2019ll see smaller gambling establishment promotions right here, but still decent. The greater you\u2019ll deposit, the greater number of 100 percent free game you\u2019ll discover.<\/p>\n

Besides the old-fashioned stone and you will mortal casinos they also provide great band of online slots. After you enjoy this type of free online slots, you\u2019re probably find out about the potential. New online game was available for the certain equipment giving a smooth betting feel into cellular and you can desktop.<\/p>\n

Online slot machines are an easy way to test your choice of game within a real income casinos. To play 100 percent free gambling enterprise slots is the ideal treatment for unwind, take pleasure in your favorite slot elf bingo casino<\/a> machines online. Application business continue opening game centered on these themes that have enhanced has and you can image. Wilds stay in put all over several revolves having bigger earn potential. An informed this new slot machines feature a good amount of extra cycles and you may free revolves to have a rewarding sense. Availableness this new free slot online game and attempt trial items out of real Las vegas casino slots on this page.<\/p>\n

Also, you should check the brand new RTP of each and every video game to see which of those give you the most useful enough time-term output. Some enables you to to switch exactly how many active paylines, providing more control more than your own wagers, and others keeps repaired paylines in which most of the lines is actually energetic into the all of the twist. Certain ports provides but a few paylines, although some feature dozens or even numerous a method to victory. They give all of the adventure and you will recreation off genuine-money slots without having any economic chance. To tackle 100 percent free slots is a great treatment for experience the excitement of your video game and get your favorite slots ahead of moving on so you can genuine-money gamble. Sign up for get the newest wagering selections and will be offering sent to their email.<\/p>\n

With these harbors, your wear\u2019t need deposit anything before you\u2019re able to begin to tackle. The main reason you need to gamble 100 percent free ports is due to the way they works. You could choose have fun with real money or rather turn so you’re able to totally free ports. This makes sure you go searching for Buffalo harbors you to tend as alot more ample and make certain you decide on the brand new titles one to is enjoyable to relax and play. For many who\u2019re also to try out to the a smartphone, you’ll be able to bunch free Buffalo slots towards one another Android and you can ios phones. For people who\u2019ve come to relax and play online slots for a time, upcoming there\u2019s a high probability you\u2019ve discover a minumum of one Buffalo slot.<\/p>\n

If or not your\u2019re also looking to test the latest actions, select your chosen video game, or have a great time, the line of free slots enjoys something for everybody. You can enjoy all the features, mechanics, and you can added bonus rounds you to definitely actual-currency ports give rather than using a penny. Playing 100 percent free ports offers a threat-totally free, funny means to fix mention the world of online slots.<\/p>\n

For the best sense, constantly prefer reputable casinos that will be registered, safe, and frequently audited to ensure fair play. With respect to online slots games, their shelter and you can reasonable play try greatest concerns. Therefore the very next time you\u2019re also going for an on-line slot game, think the volatility\u2014since the picking out the primary harmony tends to make your web gambling sense alot more fulfilling and fun. On the bright side, high-volatility slots are all about this new thrill of going after big payouts. Of many platforms let you gamble free online ports, to see risk-free activity plus have the opportunity to receive a real income awards using sweepstakes or casino promotions.<\/p>\n

It indicates your discover so much more extra enjoys, and you may probably creating even more 100 percent free spins, multipliers and growing symbols. Here is a summary of most readily useful-rated slots before everything else for folks who\u2019re also in search of brilliant internet casino amusement. On-line casino harbors could be the most popular online game one of professionals as the he’s easy to gamble, small and you can worthwhile. The inexhaustible a number of game is sold with the best slots ever intended to the headings from app providers all around the community. Check out are the selection of free online harbors spanning alot more than simply twenty five,000 headings which you go through batch because of the group. I regret to declare that we’re currently required in order to stop the entry to our webpages so long as you\u2019re opening it from inside the united states.<\/p>\n

Experienced land-centered organization, instance IGT and you will WMS\/SG Betting, together with likewise have on line brands of the totally free casino harbors. It\u2019s uncommon to obtain people totally free slot video game having bonus has actually but you gets a great ‘HOLD’ otherwise ‘Nudge’ button that makes they easier to setting winning combos. They have already effortless gameplay, always that half dozen paylines, and you may a straightforward money wager assortment. Even if you gamble 100 percent free harbors, you will find local casino incentives for taking benefit of. You can attempt away numerous online slots earliest to obtain a game title which you see. You will be in the a bonus as the an on-line harbors user for many who have a great comprehension of the fundamentals, eg volatility, symbols, and you will incentives.<\/p>\n","protected":false},"excerpt":{"rendered":"

Please always evaluate and this games qualify for this new tournament prior to using. Insane Gambling enterprise possess repeated slot tournaments which have award pools about thousands and you can leaderboard races to own consistent large-volume participants around the several online game. Very reload bonuses is associated with sportsbooks, so\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-32146","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/32146","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=32146"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/32146\/revisions"}],"predecessor-version":[{"id":32147,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/32146\/revisions\/32147"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=32146"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=32146"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=32146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}