/* 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":38817,"date":"2026-05-20T05:06:51","date_gmt":"2026-05-20T05:06:51","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=38817"},"modified":"2026-05-20T05:06:53","modified_gmt":"2026-05-20T05:06:53","slug":"when-shopping-for-totally-free-slot-machines-on-line-you-should-look-no-further-than-onlineslotsx","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/when-shopping-for-totally-free-slot-machines-on-line-you-should-look-no-further-than-onlineslotsx\/","title":{"rendered":"When shopping for totally free slot machines on line, you should look no further than OnlineSlotsX"},"content":{"rendered":"

The reason for zero download zero membership slots game is to provide the exact same vegaz casino<\/a> excitement as the regular slot machines. Gamblers love playing free online ports, and from now on you could do therefore instead of getting anything otherwise joining a free account with our team! A great many other higher gambling games particularly Small Hit and you will 5 Dragons exists too but the majority of can’t be played rather than to make an enthusiastic very first deposit to help you access all of them. This information guides you through the established 5,000+ free slot machines having incentive cycles and implies for you to gamble these types of totally free game rather than money otherwise subscription.<\/p>\n

It meter are reset per spin, however, landing anywhere between six and 14 link & earn symbols will result in the web link & profit feature, awarding users a mini, slight or biggest jackpot honor. The fresh new of your online slots games off Neon Area Studios is actually the fresh new icy-cool Snowy Enchantress slot machine. He has got titles between the fresh new old Roman motif of your own Caesar Augustus casino slot games to your deep-sea adventures offered to people regarding the Atlantean Treasures Megah Moolah slot machine. You could potentially cam, come together and you can explore almost every other professionals that is good incentive who’s got made online slot machines popular.<\/p>\n

The brand new game’s classic-concept image and you can atmospheric sound recording do a temperamental yet pleasant playing feel, and work out Split Urban area a necessity-play for those who love a twist into the vintage cat-and-mouse rivalry. It might provides only been in the successful an excellent cigar and a good nod regarding bartender in the past, it put the fresh phase on the exciting casino slot games skills we now delight in in casinos an internet-based betting networks. Therefore, regardless of where and however you gamble slots, you can find exactly what you’re looking for once you carry out an account from the Slotomania!<\/p>\n

TheBestFreeSlots ‘s the greatest destination for someone trying talk about an effective big type of more 24,000 online harbors. The limitless directory of online game is sold with the most used slots ever before intended to the newest headings off application providers all over the business. Listed below are some is all of our directory of online slots spanning a lot more than simply 25,000 titles you go through group by group.<\/p>\n

Using virtual money, you may enjoy to relax and play your preferred ports provided you desire, in addition to preferred titles as you know. Totally free harbors is digital slots that you could enjoy instead of the need to bet a real income. Towards our very own webpages, there is certainly numerous 100 % free slots to experience in place of downloading, joining, otherwise spending one thing. Every online slot machines is actually personally available on most of the browser, in order to play in place of getting anything right from SlotJava or by linking into the gambling establishment site.<\/p>\n

Because facts may differ, these types of incentives commonly mark inspiration out of antique arcade online game, immersing members for the thrilling ability-founded pressures. Whether you’re trying pass the full time otherwise soak oneself during the an exciting gaming class, our very own free online game ports gambling establishment headings be certain that a great journey. Make your earliest deposit and unlock an exciting allowed added bonus regarding 100 100 % free Spins into the picked slots! Whether you’re seeking admission the time, talk about the fresh new titles, otherwise rating confident with casinos on the internet, free online ports offer a simple and easy fun answer to gamble. Be it the fresh new weird technicians of Coba or perhaps the emotional people become of Rave, almost always there is new stuff to understand more about. Creating extra series the most exciting parts of to play harbors, however, sometimes it feels like it need forever going to.<\/p>\n

Here you can find the best choice of 100 % free trial ports on the the net. Along with, we will strike the inbox now and then with exclusive also offers, larger jackpots, or any other some thing we’d dislike on exactly how to miss. The hardest section of online slots games is actually knowing what the rules is. 100 % free harbors will always totally safe simply because they usually do not accept real money. As you don’t need to would a merchant account, you’re not delivering many personal information. This is because a lot of the gambling app designers bring its titles so you’re able to one another brick-and-mortar casinos plus online casinos.<\/p>\n

They can learn the internal functions of the seat whilst experiencing the excitement off trip within the an online playground instead ever taking journey. Whether you are a beginner or a skilled on the web casino player, you have find online slots games – these represent the most widely used style of gambling. My personal mission, is always to give you precisely the better online slots games sense and therefore function only looking at and you will indicating sites which might be signed up to run in britain.<\/p>\n

Frankly, there is certainly a free of charge slot around with your label inside<\/h2>\n

The obvious work with is the fact there’s absolutely no monetary chance; you may enjoy circumstances out of enjoyment as well as the excitement of \ufffdwin\ufffd versus holding the bankroll. Offering an entire roster regarding iconic fighters such Ryu, Chun-Li, and Ken, the overall game lets you pick their profile and you may race across the reels using a thrilling party will pay mechanic. Our huge distinctive line of demo ports helps make the choice to possess fascinating gameplay practically limitless. Whether you are a player looking an enticing acceptance added bonus or a seasoned gambler looking to ongoing offers particularly 100 % free ports on line no deposit offers, SlotsCalendar is your top companion.<\/p>\n

Reliable providers for example NetEnt, Microgaming, and you will Playtech produce large-top quality online slots games<\/h2>\n

If you are playing totally free harbors, you are able to trigger an effective \ufffdwin\ufffd away from digital money. Best ports company including NetEnt, Pragmatic Gamble, Games All over the world, and you can Play’n Wade carry out these types of ports, which you are able to select free. After you play 100 % free casino ports, you are getting to try out every enjoyable features and themes of the online game. Do you want to possess excitement away from to play slot online game as opposed to using chance of dropping your own real cash?<\/p>\n

While shortly after chance-totally free recreation, free ports are the route to take. Instead of 100 % free revolves, free position online game are entirely exposure-100 % free and don’t render a real income honors. For each and every free twist typically has a little cash worthy of, usually as much as $0.10 per twist, and you may one winnings you have made generally include wagering criteria. You can found all of them while the a pleasant added bonus after you signal right up or build your first put. Just click, spin, and enjoy the adventure \ufffd all of the bells, whistles, and added bonus series incorporated.<\/p>\n

Such demo function video game is free video slot enjoyment, he or she is around to utilize since a hack away from enjoyment and you will to aid members with strategical studying. ? Yes, you will have 100% new and you will genuine gambling games and hosts. Because of the verifying how old you are, your recognize that this games is actually for amusement aim merely and agree to play responsibly. Slotomania\ufffd is actually a totally free-to-gamble public local casino games dependent only to have recreation.<\/p>\n","protected":false},"excerpt":{"rendered":"

The reason for zero download zero membership slots game is to provide the exact same vegaz casino excitement as the regular slot machines. Gamblers love playing free online ports, and from now on you could do therefore instead of getting anything otherwise joining 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-38817","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/38817","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=38817"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/38817\/revisions"}],"predecessor-version":[{"id":38818,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/38817\/revisions\/38818"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=38817"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=38817"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=38817"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}