/* 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":37775,"date":"2026-05-19T20:32:37","date_gmt":"2026-05-19T20:32:37","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=37775"},"modified":"2026-05-19T20:32:39","modified_gmt":"2026-05-19T20:32:39","slug":"dragons-lanterns-and-much-more-expect-when-you-spin-the-latest-reels-of-your-chinese-slot-machines","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/dragons-lanterns-and-much-more-expect-when-you-spin-the-latest-reels-of-your-chinese-slot-machines\/","title":{"rendered":"Dragons, lanterns, and much more expect when you spin the latest reels of your Chinese slot machines"},"content":{"rendered":"

The fresh image and you will animations within games is decent, ensuring an effective fun time getting users<\/h2>\n

This page can tell you the best way to find the brand new finest totally free online casino games that with all of our set of centered-in the strain and you will sorting equipment. All of the online game offered listed below are virtual slot machines, since they’re the most popular sort of video game, however, there are even other sorts of online casino games. If you need gambling games but don’t want to risk your own individual currency, it element of the webpages providing online casino games are just for you. While the a well known fact-checker, and you can all of our Captain Gambling Manager, Alex Korsager verifies all games informative data on this site. Following here are some your loyal profiles playing blackjack, roulette, video poker online game, and even 100 % free poker – no-deposit or signal-up needed.<\/p>\n

As you can plainly see on significantly more than demos and you can information, you will find lots of position application company that give games having online casinos. Developers like NetEnt, LGT, and you will Play’n Wade play with proprietary app to style picture, auto mechanics, and added bonus enjoys for the most preferred harbors on line. Due to this, there is authored a listing of tips on how to find the right slot for you. Quite often, real money casinos on the internet need applications becoming downloaded in order to relax and play.<\/p>\n

To experience zero download free slot machines is strictly according to fortune as it comes to game off possibility. The on the internet free position game are among the better you could discover online, that have an enormous assortment of highest-high quality slots you simply will not see elsewhere. Here you can access an array of free position online game that will be good for one another the fresh and you will knowledgeable professionals. Mention our very own handpicked group of better-ranked gambling enterprises and you will find the greatest even offers tailored for you personally. The latest popularity of free online slot games provides increased with an increase of access to the internet.<\/p>\n

Area of the suggestion would be the fact it is possible to play free online ports playing with Coins enjoyment, and a prize money (particularly Sweeps Coins) getting award-eligible enjoy immediately after appointment the principles. If you’ve never played at the sweepstakes casinos ahead of, the process is simple. It\ufffds good for participants who require a polished totally free ports sense, and it also facilitate you to definitely McLuck has Limitless Play ports with ultra-low minimums. Strain and you will subcategories try clean (plus a genuinely helpful theme filter), and you can video game thumbnails preview key stats to find something such min\/maximum spin, maximum victory, and jackpot information instead digging thanks to paytables. McLuck will bring 1,000+ online game regarding thirty+ providers (together with Playtech, Novomatic, Playson, Calm down, and you may M2Play) and the slot top quality feels constantly good. The newest seller combine comes with rarer picks (particularly Peter & Sons and you will Habanero), therefore the collection feels greater than \ufffdexact same game every where.\ufffd<\/p>\n

As the we’re a personal casino, it\ufffds judge to enjoy our very own slots anywhere, possibly on your pc or your mobile device. I also offer plenty of possibilities to collect a lot more 100 % free gold coins, and that means you don’t need to purchase hardly any money, otherwise need certainly to. It means we have the same type of ports on line that you will find in the real world gambling enterprises, without the threat of making use of your very own currency.<\/p>\n

These could take of several models, while they commonly limited by amount of reels or paylines. It’s important to find out how the game performs – as well as just how much it can spend – before you could start. Thus, our pros check to see how fast and you https:\/\/betsamigo.se\/<\/a> can smoothly game load to your phones, tablets, and you may anything else you might have fun with. While we are verifying the latest RTP each and every slot, we plus consider to make certain the volatility try exact because really. We provide good blend of reasonable, highest, and you may medium-volatility slots to give normally choice since the it is possible to.<\/p>\n

And you can once more, the fresh new game is internet browser-centered, very you do not have so you’re able to obtain anything for the portable otherwise tablet. But with Slotomania, you will not need certainly to down load anything, because all our online casino games are completely internet browser-centered! This really is that facile! Initiate to play an informed gambling enterprise slots enjoyment. You can enjoy free pokies right here or inside my shortlisted online casinos that deal with players out of Australian continent.<\/p>\n

With 75+ free game available, its talked about headings include Jammin’ Jars, Razor Shark, and Retro Tapes. IGT (Worldwide Game Technology) was a global commander inside gambling, giving 150+ well-known totally free gambling establishment harbors. Its legendary headings including Starburst, Gonzo’s Quest, and you may Deceased otherwise Alive 2 has place industry conditions getting graphic high quality and you will game play advancement. Play’n Wade try awarded \ufffdSlot Vendor of the year\ufffd and you may will continue to innovate which have High definition picture and you can multilingual help. With 380+ totally free slots to experience for fun, its headings particularly Book out of Deceased, Reactoonz, and Moon Princess try all over the world noted for immersive storytelling, large RTP, and you may vibrant auto mechanics. With more than 500 100 % free demo ports offered, its profile comes with highest-volatility moves particularly Sweet Bonanza, Gates from Olympus, plus the Puppy Home.<\/p>\n

You can either set the fresh new coin well worth, payline value, otherwise complete choice. Before you can drive the brand new twist button into the a slot machine game, you have got to place the degree of their choice. A couple, you may need to play max choice so you’re able to be eligible for specific honours, like the modern jackpot. That’s, up to it’s won from the a lucky player, this may be resets and you can begins again. Nuts symbols usually takes the place of every other symbol away on the spread out (and perhaps most other expertise symbols) to help make successful combos.<\/p>\n

Remember, you’ll be able to listed below are some all of our local casino recommendations if you are looking free of charge casinos in order to install. These have simple gameplay, constantly one to half dozen paylines, and you can a straightforward money choice diversity. OnlineSlots is not an on-line casino, we’re an independent online slots games opinion webpages one pricing and you can recommendations web based casinos and you can position video game. If you utilize certain advertising blocking app, excite take a look at its configurations.<\/p>\n

Local casino harbors are super-simple to enjoy<\/h2>\n

All of our evaluations aim to provide players a reputable and you may in depth information each and every video game, helping them build told possibilities. You happen to be prepared to get the newest evaluations, qualified advice, and you can exclusive now offers right to the email. That it brings an unmatched quantity of usage of and you can convenience for participants. All of our distinctive line of 100 % free harbors includes classic slot machines, films harbors, and you may progressive online game which have incentive possess, modern jackpots, and pleasing layouts…Find out more They are providing accessibility your custom dashboard where you could look at their playing history or keep your favorite games.<\/p>\n","protected":false},"excerpt":{"rendered":"

The fresh image and you will animations within games is decent, ensuring an effective fun time getting users This page can tell you the best way to find the brand new finest totally free online casino games that with all of our set of centered-in the strain and you will\u2026<\/p>\n

Continue reading<\/span><\/i><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-37775","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/37775","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=37775"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/37775\/revisions"}],"predecessor-version":[{"id":37776,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/37775\/revisions\/37776"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=37775"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=37775"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=37775"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}