/* 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":43421,"date":"2026-05-20T12:01:32","date_gmt":"2026-05-20T12:01:32","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=43421"},"modified":"2026-05-20T12:01:33","modified_gmt":"2026-05-20T12:01:33","slug":"when-searching-for-free-slot-machines-on-the-web-its-important-to-look-no-further-than-onlineslotsx","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/when-searching-for-free-slot-machines-on-the-web-its-important-to-look-no-further-than-onlineslotsx\/","title":{"rendered":"When searching for free slot machines on the web, it’s important to look no further than OnlineSlotsX"},"content":{"rendered":"

The objective of no obtain no subscription ports game is to try to provide the same thrill since normal slot machines. Players love playing online slots, now can be done so in place of getting some thing otherwise joining a merchant account with us! A great many other higher online casino games such as Small Hit and you can 5 Dragons exists also however, many cannot be played instead and make a keen initially put to help you availableness all of them. This post guides you from present 5,000+ free slots which have bonus cycles and you can ways on exactly how to enjoy these totally free game in place of currency or subscription.<\/p>\n

Which meter is reset for every single twist, however, getting anywhere between six and you may fourteen link & profit icons often cause the hyperlink & profit element, awarding members a micro, lesser otherwise big jackpot prize. The new of the online slots games of Fluorescent Area Studios are the new cool-cool Snowy Enchantress slot machine game. He’s got headings anywhere between the newest ancient Roman motif of one’s Caesar Augustus slot machine game towards deep-sea adventures offered to players in the Atlantean Treasures Megah Moolah slot machine. You could potentially speak, interact and explore most other members which is an effective incentive that has made on line slots well-known.<\/p>\n

The latest game’s retro-concept graphics and atmospheric sound recording perform a moody but really captivating gambling sense, and make Rip City vital-play for those who like a twist to the vintage cat-and-mouse competition. It may features merely become regarding profitable a great cigar and you will good nod from the bartender back then, nonetheless it lay the fresh phase to your exciting slot machine game feel we have now take pleasure in both in gambling enterprises and online betting networks. So, irrespective of where and you will nevertheless gamble slot machines, discover what you are searching for when you perform an membership within Slotomania!<\/p>\n

TheBestFreeSlots ‘s the ultimate place to go for anybody seeking to mention a great huge line of over 24,000 online harbors. Our very own limitless listing of game is energy casino no deposit bonus<\/a> sold with the most common harbors actually ever created to the fresh new titles out of software organization all around the world. Here are a few is the variety of free online slots comprising a lot more than simply twenty-five,000 headings which you read group by batch.<\/p>\n

Using digital money, you can enjoy to relax and play your favorite slots provided you want, and preferred headings everbody knows. 100 % free harbors are virtual slots you could see in place of the need to wager real cash. To the all of our webpages, there is numerous 100 % free slots playing rather than getting, registering, otherwise purchasing some thing. All of the online slot machines is privately on all browser, in order to gamble versus downloading anything directly from SlotJava or by hooking up on the gambling establishment site.<\/p>\n

Because the facts can differ, these bonuses often mark motivation from vintage arcade online game, immersing players during the fascinating skill-dependent pressures. Whether you’re trying to violation the full time otherwise drench your self in the a thrilling gambling tutorial, all of our totally free game ports gambling enterprise titles make sure a nice trip. Make your earliest put and open a fantastic acceptance bonus regarding 100 Totally free Revolves for the chosen slots! Whether you’re trying citation the time, discuss the new headings, or get comfortable with online casinos, online harbors give a simple and easy fun cure for enjoy. Should it be the fresh quirky mechanics out of Coba or perhaps the emotional group become of Rave, there’s always new things to explore. Creating extra rounds is one of the most thrilling parts of playing harbors, but sometimes it is like they capture permanently going to.<\/p>\n

Right here you will find the best selection of totally free trial slots to the the internet. Together with, we’re going to strike their inbox on occasion with exclusive also offers, huge jackpots, and other one thing we’d dislike on precisely how to skip. The hardest part of online slots is knowing what the guidelines is actually. 100 % free ports will always be entirely safe given that they dont accept real money. Because you needn’t manage a merchant account, you aren’t delivering any private information. That’s because a lot of the playing app designers render its titles to help you both brick-and-mortar casinos plus online casinos.<\/p>\n

They may be able learn the inner workings of one’s cockpit while also that great thrill from journey inside a virtual playground as opposed to ever before taking airline. Regardless if you are a beginner otherwise an experienced on the web casino player, you may have get a hold of online slots – these are the best kind of gaming. My personal objective, would be to present just the top online slots feel which function only looking at and you may recommending sites which might be authorized to operate in the uk.<\/p>\n

Honestly, you will find a free of charge slot on the market along with your identity involved<\/h2>\n

Well-known work with is that there’s absolutely no economic risk; you may enjoy instances out of entertainment while the adventure of one’s \ufffdwin\ufffd instead of pressing your bankroll. Presenting a full lineup of iconic competitors including Ryu, Chun-Li, and Ken, the video game allows you to get a hold of their reputation and you will race all over reels playing with a thrilling class will pay mechanic. The big collection of demo ports makes the possibilities to own fascinating game play virtually limitless. Regardless if you are a new player in search of a tempting desired bonus otherwise a professional casino player seeking to constant advertising particularly totally free harbors on the internet no-deposit has the benefit of, SlotsCalendar is your respected mate.<\/p>\n

Credible company for example NetEnt, Microgaming, and you will Playtech build higher-quality online slots games<\/h2>\n

When you are to play 100 % free ports, you can easily result in an excellent \ufffdwin\ufffd off virtual currency. Better harbors company such NetEnt, Pragmatic Gamble, Games Worldwide, and you will Play’n Wade manage these types of harbors, which you are able to go for free. When you gamble free gambling establishment harbors, you’ll receive to tackle all the enjoyable has and you can themes of online game. Do you need to experience the excitement off to tackle slot video game versus taking the risk of losing their a real income?<\/p>\n

When you find yourself after chance-free entertainment, free slots would be the path to take. Instead of 100 % free spins, totally free position game are entirely exposure-free and do not give real money prizes. Per free spin typically has a small dollars well worth, usually up to $0.ten for each twist, and one winnings you get generally include wagering conditions. You might receive them since the a welcome bonus when you sign up otherwise help make your basic put. Just click, spin, and enjoy the thrill \ufffd all the bells, whistles, and you will extra cycles included.<\/p>\n

These trial mode games is 100 % free video slot for fun, he is there to utilize while the a tool from activities and you will to simply help members having strategical understanding. ? Yes, you have 100% brand new and you can authentic gambling games and you may hosts. From the confirming your age, you accept that game is actually for enjoyment aim just and you may agree to play sensibly. Slotomania\ufffd was a free-to-gamble societal casino video game established entirely to possess entertainment.<\/p>\n","protected":false},"excerpt":{"rendered":"

The objective of no obtain no subscription ports game is to try to provide the same thrill since normal slot machines. Players love playing online slots, now can be done so in place of getting some thing otherwise joining a merchant account with us! A great many other higher online\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-43421","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/43421","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=43421"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/43421\/revisions"}],"predecessor-version":[{"id":43422,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/43421\/revisions\/43422"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=43421"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=43421"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=43421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}