/* 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":47199,"date":"2026-05-20T12:23:38","date_gmt":"2026-05-20T12:23:38","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=47199"},"modified":"2026-05-20T12:23:39","modified_gmt":"2026-05-20T12:23:39","slug":"when-looking-for-free-slot-machines-on-the-web-you-should-look-no-further-than-onlineslotsx","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/when-looking-for-free-slot-machines-on-the-web-you-should-look-no-further-than-onlineslotsx\/","title":{"rendered":"When looking for free slot machines on the web, you should look no further than OnlineSlotsX"},"content":{"rendered":"

The goal of no down load zero membership ports game is to try to deliver the exact same thrill since typical slot machines. Players love to play free online harbors, nowadays you certainly can do thus in place of downloading things otherwise registering a free account with our team! A number of other high casino games including Short Hit and you will 5 Dragons exist as well however, many cannot be starred instead and work out a keen first put so you can access all of them. This particular article walks your through the present 5,000+ totally free slot machines with incentive cycles and indicates for you to play such totally free games as opposed to money otherwise registration.<\/p>\n

That it meter is actually reset for each twist, however, landing ranging from six and fourteen link & earn symbols commonly lead to the hyperlink & winnings feature, awarding participants a small, lesser otherwise significant jackpot award. The fresh of one’s online slots regarding Neon Valley Studios try the brand new icy-cool Cold Enchantress casino slot games. They have titles ranging from the new old Roman motif of the Caesar Augustus slot machine to your deep-sea adventures open to users on the Atlantean Secrets Megah Moolah slot machine. You can speak, work together and you will fool around with almost every other people that’s an effective bonus who has generated on the web slots popular.<\/p>\n

The newest game’s retro-style graphics and you can atmospheric soundtrack manage a moody yet , captivating betting experience, and work out Tear Urban area necessary-wager people that love a-twist to the antique cat-and-mouse rivalry. This may has only been from the winning good cigar and you may an excellent nod regarding the bartender in the past, nonetheless it place the brand new phase to the fascinating video slot feel we now see in both gambling enterprises an internet-based gambling platforms. Therefore, regardless of where and you can however you enjoy slot machines, discover what you’re looking for once you create an enthusiastic membership within Slotomania!<\/p>\n

TheBestFreeSlots is the ultimate destination for anyone trying to speak about an excellent huge distinct over 24,000 free online slots. The inexhaustible set of video Dbosses SE<\/a> game has the best ports ever before designed to the fresh new titles from application company all around the community. Below are a few try all of our set of free online slots spanning a great deal more than just twenty five,000 headings you proceed through batch from the group.<\/p>\n

Playing with virtual currency, you may enjoy to tackle your favorite slots so long as you would like, as well as well-known titles as you know. 100 % free harbors try digital slot machines as you are able to see in place of the requirement to wager real money. Towards the website, there’s countless totally free slots to try out instead of getting, registering, or purchasing something. Most of the online slots was personally available on every web browser, in order to play as opposed to downloading anything right from SlotJava or from the connecting on the casino site.<\/p>\n

Because details may differ, such bonuses will draw motivation of classic arcade games, immersing participants inside fascinating ability-established challenges. Whether you’re trying to solution the time or drench yourself for the an exciting betting training, our 100 % free games slots casino titles be sure a pleasant journey. Help make your earliest deposit and you will discover a fantastic invited bonus off 100 Totally free Revolves to your selected slots! Whether you are trying violation the time, discuss the newest headings, or score comfortable with online casinos, online harbors provide a simple and easy fun cure for gamble. Whether it is the brand new quirky mechanics from Coba or perhaps the sentimental party getting of one’s Rave, there is always something new to understand more about. Triggering added bonus cycles the most fascinating areas of playing ports, however, sometimes it feels as though they take forever going to.<\/p>\n

Here you can find the best selection away from totally free demo harbors for the the web. As well as, we’re going to struck their email on occasion with original offers, big jackpots, or other something we had hate on how to miss. The most challenging part of online slots try knowing what the rules are. Free harbors will always be entirely safe simply because they dont undertake real cash. Because you will not need to carry out a merchant account, you’re not taking any private information. That is because a lot of the gaming application builders give their titles to help you one another brick-and-mortar casinos plus online casinos.<\/p>\n

They could learn the inner functions of your cockpit whilst that great excitement of journey during the a virtual playground versus previously delivering flight. Regardless if you are an amateur or a skilled online gambler, you might have see online slots games – they are the preferred style of gambling. My personal goal, will be to provide you with just the top online slots games sense and this form only evaluating and recommending sites that will be licensed to perform in britain.<\/p>\n

Frankly, there’s a no cost position out there together with your name inside it<\/h2>\n

The obvious work with is that there is no monetary chance; you can enjoy era out of enjoyment plus the thrill of your own \ufffdwin\ufffd versus coming in contact with their money. Offering a full roster of legendary competitors particularly Ryu, Chun-Li, and Ken, the online game allows you to get a hold of your reputation and you may battle across reels using a thrilling team will pay auto technician. Our very own big distinctive line of trial harbors helps make the choices to own thrilling gameplay practically unlimited. Whether you’re a player trying to find an enticing desired extra otherwise a professional casino player seeking to lingering offers for example 100 % free ports on line no-deposit now offers, SlotsCalendar is your top partner.<\/p>\n

Credible providers like NetEnt, Microgaming, and you can Playtech produce highest-high quality online slots<\/h2>\n

While to experience 100 % free ports, you can easily result in an effective \ufffdwin\ufffd regarding digital money. Top harbors team such NetEnt, Pragmatic Enjoy, Online game Global, and Play’n Go manage these types of harbors, which you can opt for 100 % free. Once you play 100 % free casino slots, you are getting to try out the enjoyable has and you will themes of the video game. Would you like to have the thrill regarding to play slot online game versus using the likelihood of shedding your a real income?<\/p>\n

When you’re shortly after risk-free activity, totally free ports are the path to take. In lieu of totally free spins, 100 % free slot game are completely chance-free and don’t bring real cash honors. For each and every totally free spin usually has a tiny dollars worthy of, commonly doing $0.ten for every spin, and people payouts you get normally come with wagering requirements. You can found all of them because a welcome bonus after you indication up otherwise create your earliest deposit. Simply click, spin, and relish the thrill \ufffd all bells, whistles, and you can extra series integrated.<\/p>\n

This type of demo means games try totally free slot machine game enjoyment, he could be there to make use of as the a tool away from recreation and you can to greatly help professionals that have strategical learning. ? Sure, you have 100% unique and authentic gambling games and you will servers. From the confirming your actual age, your accept that game is for entertainment aim simply and commit to gamble responsibly. Slotomania\ufffd are a free-to-gamble personal local casino games based only to have activities.<\/p>\n","protected":false},"excerpt":{"rendered":"

The goal of no down load zero membership ports game is to try to deliver the exact same thrill since typical slot machines. Players love to play free online harbors, nowadays you certainly can do thus in place of downloading things otherwise registering a free account with our team! A\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-47199","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/47199","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=47199"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/47199\/revisions"}],"predecessor-version":[{"id":47201,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/47199\/revisions\/47201"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=47199"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=47199"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=47199"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}