/* 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":95682,"date":"2026-05-24T01:52:50","date_gmt":"2026-05-24T01:52:50","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=95682"},"modified":"2026-05-24T01:52:52","modified_gmt":"2026-05-24T01:52:52","slug":"enjoy-keno-on-line-ideal-free-keno-games-2026-zero-down-load","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/enjoy-keno-on-line-ideal-free-keno-games-2026-zero-down-load\/","title":{"rendered":"Enjoy Keno On line Ideal Free Keno Games 2026 Zero Down load"},"content":{"rendered":"

Which rules falls under a broader build filled with necessary put limitations and a national worry about-exemption check in (Spelpaus.se). To view any game, together with demos, players need certainly to sign in and you may ensure their title, typically using BankID. it enforces responsible gaming chatting and you may supply controls. Simply because brand new GGL makes it necessary that all online providers need certainly to make certain a player\u2019s term prior to granting entry to one game. In order to comply, you need to signup and properly verify that you\u2019re more than 18 prior to opening people free online game.<\/p>\n

Therefore, our very own web page promises to provide the greatest feel actually ever having availability across the every systems such as Cellphones and you will Pcs. You dreamed from effective larger honours with greatest gambling establishment slots, and in addition we help make your dream a reality. If you try playing with no currency, you could potentially place such options for the fresh new enhanced betting experience and you can get knowledge having coming wins. Free slots are accessible using devices and you can pills. New funny character ones slots is more than sufficient to overshadow the newest complexity off numerous paylines. Great features and symbols eg scatters and wilds usually are included to boost up your gambling experience.<\/p>\n

In addition ensures that including servers was tried with greater regularity and you will provides the extra cycles upcoming https:\/\/knightslotscasino-ca.com\/<\/a> around more often. That is because someone could use free change to is this type of headings and you will won’t enjoy long otherwise choice more about for example reels. Nonetheless they don\u2019t predict high payouts and hence, the servers also are perhaps not designed or perhaps in a stage in order to offer higher paybacks. And that, servers which might be played appear to or gambled with the maximum is actually planning to clean out big wins.<\/p>\n

A long time ago, Flash are the newest go-to help you technology you to definitely online casinos depended to function properly. The game’s distinctive Fire Blast and Mega Flames Blaze Added bonus enjoys add a little bit of spruce to your play, giving professionals the chance to profit significant profits as much as 9,999 to just one. In order to profit, users must house three or more coordinating icons within the succession round the the paylines, which range from this new leftmost reel. As for the gameplay, brand new position are played to the a good grid you to definitely include four rows and you will five columns.<\/p>\n

Today, you don’t need so you can always use a desktop computer to experience 100 percent free slots on line. Furthermore, the portability means you might take them with your no matter where you decide to go, therefore it is easy to access your 100 percent free slots rather than getting one thing. You are able to accessibility this type of free slots from anywhere, thanks to the capacity for smartphones.<\/p>\n

This page can tell you the best way to track down the better free casino games that with our band of depending-during the filter systems and you may sorting tools. These are typically all preferences, including blackjack, roulette, and you will video poker, plus specific game you might not know regarding prior to, such as for example keno otherwise crash video game. After all, how will you be aware that a slot machine game otherwise roulette online game may be worth your time (and money) if you have never ever played they just before? Explore our very own filter systems to help you kinds of the “Newest Releases” or consider our “The fresh Online slots” part to discover the current games.<\/p>\n

Even after 100 percent free slots game, knowing what symbols to look at getting makes the spinning reels even more pleasing. You could potentially inquire why play 100 percent free harbors after you you’ll profit a real income that have paid slots. For the 2023, Aristocrat released an online office called Anaxi, and that lead new Buffalo position so you can casinos on the internet. Though it enjoys motivated many sequels instance Cleopatra II and you will Cleopatra Silver, the original 5-reel slot has been popular both in shopping and online casinos. Each time you get another you to, your own revolves reset, as well as your payouts can pile up.<\/p>\n

A number of the online game ability stacking wilds although some offer several added bonus series. The actual only real difference is you\u2019re using a virtual balance in place of their cash. To be certain equity, gaming authorities need you to free demos have the same RTP, volatility, and you will incentive features as his or her actual-currency products.<\/p>\n

Tomb raiders commonly discover many cost within Egyptian-themed identity, hence has 5 reels, ten paylines, and you will hieroglyphic-design picture. You won’t just manage to enjoy totally free ports, you\u2019ll even be able to make some funds as you\u2019re within they! Big spenders will often like highest volatility harbors with the cause that it\u2019s sometimes easier to get larger early on in the games. He is the ultimate treatment for familiarize yourself with the video game technicians, paylines, procedures and you will incentive has actually. With the slots o rama webpages, you\u2019re also provided access to a varied group of position online game that you might enjoy without the need to install people application.<\/p>\n

We\u2019ve starred video game you to definitely searched higher but had a negative element. Moreover, considering the signifigant amounts regarding book function series readily available; it\u2019s always a good tip playing some time to see you to pop very first. If you decide playing Davinci Diamonds 100 percent free slots zero obtain, such, you\u2019re planning to see how the game work actually in operation.<\/p>\n

When you\u2019lso are to try out free harbors, you\u2019ll manage to result in a great \u201cwin\u201d out-of virtual money. You could begin to relax and play free ports here from the Casinos.com or head over to an informed casinos on the internet, the place you may additionally come across 100 percent free sizes of the market leading video game. After you gamble free casino ports, you\u2019ll get to experience all of the enjoyable possess and templates of one’s online game. All of our hundreds of headings is obtainable to try out in place of your being required to check in an account, obtain app, otherwise put money. not, you won\u2019t receive any economic settlement during these added bonus rounds; rather, you\u2019ll become rewarded situations, additional spins, or something like that equivalent. You could cause a similar incentive cycles might find out if you’re to experience for real currency, sure.<\/p>\n

Regardless if you are searching for 100 percent free slot machine games having 100 percent free revolves and you may added bonus series, for example labeled harbors, or classic AWPs, we\u2019ve had your secure. Anytime a modern jackpot slot was starred and never obtained, the new jackpot expands. As to why play 40 or 50 paylines whenever you can use the entire screen? Educated residential property-built providers, eg IGT and WMS\/SG Gambling, also also provide on the web sizes of their free local casino slots. It is unusual to get any 100 percent free position game that have extra features but you might get a beneficial ‘HOLD’ otherwise ‘Nudge’ switch that makes it more straightforward to setting profitable combinations.<\/p>\n

Most other known team were Microgaming, Play\u2019Letter Wade, Alive Gambling and many more. In case your merchant is a minimal tier you to definitely, then you may assume very first graphics, lags or other hitches. Other available choices you can try become Book out of Ra, Payback away from Loki Megaways, Sweet bonanza, 7s Crazy and many more.<\/p>\n

All of our specialist party usually means that all of our 100 percent free gambling establishment harbors is safe, safe, and you will legitimate. To try out 100 percent free local casino harbors is the perfect solution to loosen up, take pleasure in your chosen slot machines online. Software providers keep establishing game according to such templates with enhanced features and you may picture.<\/p>\n","protected":false},"excerpt":{"rendered":"

Which rules falls under a broader build filled with necessary put limitations and a national worry about-exemption check in (Spelpaus.se). To view any game, together with demos, players need certainly to sign in and you may ensure their title, typically using BankID. it enforces responsible gaming chatting and you may\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-95682","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/95682","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=95682"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/95682\/revisions"}],"predecessor-version":[{"id":95683,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/95682\/revisions\/95683"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=95682"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=95682"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=95682"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}