/* 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":25049,"date":"2026-05-15T02:19:26","date_gmt":"2026-05-15T02:19:26","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=25049"},"modified":"2026-05-15T02:19:28","modified_gmt":"2026-05-15T02:19:28","slug":"play-free-slot-game-no-down-load-no-subscription","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/play-free-slot-game-no-down-load-no-subscription\/","title":{"rendered":"Play Free Slot Game No Down load No Subscription"},"content":{"rendered":"

Jackpot Town ‘s the longest-mainly based internet casino on this subject list. That implies opting for slot internet sites that will be legitimate, reasonable, and you will licensed. BetNFlix<\/a> Fund \u2013 You should pick a safe and you will safer technique for resource the gambling establishment membership and you can cashing out your payouts. This can help you pick the best local casino and you can slot game for you. Our very own advantages has actually age of expertise, as well as know exactly what things to look for in real-currency online slot online game. As a result when you like to head to a gambling establishment listed inside our article and you may allege the deal by way of our very own hyperlinks, we possibly may earn an affiliate marketer percentage.<\/p>\n

It\u2019s one of the recommended online slots gambling enterprises having players for the Ontario, providing several games, frequent advertisements, and you will 100 percent free spins one Canada offers. It’s got a multitude of slots and casino games having an emphasis on the reasonable gamble and you will member-centric properties. Ruby Slots has the benefit of fantastic greet incentives, guaranteeing professionals initiate its trip that have a giant increase. If or not you like a 5-reel slot or a modern jackpot games, there are lots of an approach to victory here. People enjoy simple routing and you may security, so it’s a top choice for Ontario and you may Canadian participants. Of course, they also bring high incentives and desired also offers.<\/p>\n

Like antique slots, they often times ability antique symbols however, prepare within the modern extra provides for added excitement. So it wildlife themed large-volatility slot offers up in order to two hundred,704 an approach to earn! Which have 50 paylines, offering expanding wilds, scatter-caused totally free spins, and you will a bonus bullet which have stacked wilds, there\u2019s plenty of likelihood of huge wins.<\/p>\n

After all, what you\u2019ll become after within video game try entry to its specials. Such experts create simple yet , simpler for anyone to enjoy top-top quality position game without having any trouble regarding membership, downloads, or deposits. To winnings when you look at the no down load slot online game, use means and you will learn mechanics.<\/p>\n

Once you enjoy 100 percent free slot video game on the internet, your claimed\u2019t be eligible for as much bonuses since you create in the event that your starred real cash harbors. Which modern markup tech enjoys enabled app builders to create much more smart, mobile-amicable online game that require a lot fewer resources and tend to be much less out of a power supply drainer! Once you gamble totally free ports on line, you could strike twist as many times as you wish without worrying about your own money.<\/p>\n

It\u2019s labeled as getting extremely unpredictable, having a lot fewer wins but high potential winnings should you earn. It has got Canadian players a thorough number of harbors for the good totally registered environment. Duelz Canada are a properly-oriented on-line casino that gives thousands of slot online game and you may fun modern jackpots.<\/p>\n

You could play on sweepstake casinos, that are absolve to play social casinos and provide the danger to help you get gains having awards. That said, you can find methods get hook chance of taking currency towards the you family savings, because of the redeeming gains, if you live in the usa. Large 5 offer finest position video game including Hoot loot, Twice Da Vinci Diamonds, Moonlight Warriors, The newest Charleston, Renoir Wealth, and Gypsy.Raging Rhino, Kronos and you can Zeus.<\/p>\n

Totally free Spins series usually give you the largest earnings, and so they go along with features one aren\u2019t found in the base online game. I\u2019d plus need to talk about your most useful totally free position game offer a terrific way to find out the ropes and you can shot some has actually. People that gamble free ports fundamentally get it done because it\u2019s fun. Totally free slot game along with supply the possible opportunity to acquaint yourself having the brand new games or attempt possess that you aren\u2019t but really used to. Commonly, there is certainly incentive also offers having a primary position hitting theaters. Position firms must receive certificates and you may unique consent which will make such video game.<\/p>\n

A few of the most prominent has the benefit of would be the Day-after-day Totally free Spins \u2013 where people can take advantage of a range of step one-big date has the benefit of for almost all quite prominent slots. If you are totally free revolves in Canada could offer one another fun and you will pretty good profits, it\u2019s usually smart to review new terms in advance of dive in. I prompt members to determine incentives and offers that suit their betting needs, nevertheless\u2019s crucial that you be careful.<\/p>\n

WMS slot game on line free render over optimization for everybody gizmos, which means that they truly are played to the laptop computers, desktop computer Pcs, mobile devices, and you will tablets. Other innovative aspects tend to be The Ways Pays, Wider grids that have Huge contours, Mighty Ways, and you will improved free spin bonuses. Keeps include bright animated graphics which have appealing musical sounds book to various bonus has actually. This type of titles include high volatility, appearing there may be dead spells before obtaining a fantastic twist, although winnings will be substantial after they struck. They differ from repaired jackpots simply because they will keep increasing, giving solutions getting significant, big winnings. This type of WMS free enjoy titles give digital loans to exchange real currency bets, allowing players to understand mechanics paytables and you can package unique methods.<\/p>\n

We have compared countless position internet sites to be certain you really have availability so you can tens of thousands of online game, winnings cost up to 99%, profits within this 72 circumstances, and you can aggressive incentives. So that it\u2019s crucial that you try to find casinos which might be securely managed and totally authorized. Lowest volatility slots help you maintain your bankroll afloat because of a great selection of smaller, low value wins. Highest volatility ports tend to to obtain the RTP inside the large spending incentive has you\u2019ll observe plenty of dry spins before you open them. This type of mathematical metrics let you gauge one another their prospective payouts and you can in which your victories usually house.<\/p>\n

100 percent free harbors point our very own SlotCatalog collection having Canadian people, which have 40,000+ trial harbors and 100 percent free casino games willing to release on your own browser \u2013 totally free slots zero install, no signup required. If you don’t find it, excite check your Spam folder and you will mark it as ‘not spam’ or ‘looks safe’. They have been some time and put constraints, plus truth checks although some. Members can become desensitised to chance whenever to tackle demonstration online game, so it\u2019s even more essential that they fool around with safer gambling equipment. Nolimit City game might be popular with exposure-takers which see trying to games at no cost in advance of wagering.<\/p>\n

It means that French-speaking pages from inside the Canada, especially in Quebec, can access a familiar and comfortable gaming sense. Progressive jackpots grow up until acquired, to make such games glamorous to possess pages seeking to large payouts. Canadian profiles look for IGT ports toward several signed up programs, guaranteeing an abundance of betting choices. Exactly what are the preferred IGT slot games certainly Canadian members? To relax and play the real deal CAD, see an authorized on-line casino giving IGT harbors. Why does IGT make sure the randomness and fairness of its position game?<\/p>\n","protected":false},"excerpt":{"rendered":"

Jackpot Town ‘s the longest-mainly based internet casino on this subject list. That implies opting for slot internet sites that will be legitimate, reasonable, and you will licensed. BetNFlix Fund \u2013 You should pick a safe and you will safer technique for resource the gambling establishment membership and you can\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-25049","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/25049","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=25049"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/25049\/revisions"}],"predecessor-version":[{"id":25050,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/25049\/revisions\/25050"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=25049"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=25049"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=25049"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}