/* 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":130144,"date":"2026-05-25T13:32:16","date_gmt":"2026-05-25T13:32:16","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=130144"},"modified":"2026-05-25T13:32:21","modified_gmt":"2026-05-25T13:32:21","slug":"princess-styled-ports-was-unique-and-often-feature-enchanting-incentives","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/princess-styled-ports-was-unique-and-often-feature-enchanting-incentives\/","title":{"rendered":"Princess-styled ports was unique and often feature enchanting incentives"},"content":{"rendered":"

You don’t have to enjoy fishing to love to relax and play Larger Trout Bonanza<\/h2>\n

NetEnt has long been a respected label regarding the slot gaming globe, noted for getting ideal-top quality slots that have breathtaking graphics, innovative layouts, and you may enjoyable game play. The boasts numerous well-known builders whose slots stand out having its top quality, creativity, and you will activities value. Whether it’s the fresh weird auto mechanics off Coba or the nostalgic class feel of your own Rave, there is always something new to understand more about.<\/p>\n

Online slots need a connection to the internet to stream video game assets, in addition to run-in an internet browser<\/h2>\n

In addition, it’s not necessary to sign in otherwise deposit to play the fresh new game, what you we have found free! The list is filterable, enabling you to sector the latest games as a result of software vendor otherwise because of the title to be able to stick with a designer you enjoy. This video game provider’s feature ‘s the novel graphics and you can voice outcomes you cannot get a hold of any kind of time video game provider. A different sort of renowned Netent Position is actually Gonzo’s Journey and you will Starburst, that you usually see at best local casino incentives totally free twist-greeting games. He or she is fabled for the wonderful theme build and you can sound recording, specially when you are some of its best harbors on line particularly because Narcos, designed for free play on all of our<\/p>\n

Mining-styled slots will ability explosive bonuses and you may active game play. Halloween-themed slots are perfect for thrill-hunters looking for a hauntingly fun time. Gem-inspired harbors is visually brilliant and sometimes function easy yet , enjoyable game play. Fish-inspired harbors are light-hearted and show colorful marine lifetime.<\/p>\n

Area of the tip is that you can enjoy free online slots using Coins enjoyment, and a prize money (for example Sweeps Gold coins) getting prize-qualified enjoy once meeting the rules. McLuck brings one,000+ online game off thirty+ providers (and Playtech, Novomatic, Playson, Settle down, and you will M2Play) while the slot top quality seems continuously good. With regards to the overall slots experience, LoneStar really does good work and work out a big lobby become playable with quite a few classes and you can filter systems, therefore it is an easy task to dive right to a design you adore (like, with the eating plan to get upwards Hold & Winnings jackpot harbors). Social gambling enterprises focus on activities having fun with digital coins (Gold coins), if you are sweepstakes gambling enterprises put another money which you can use to own prize-eligible gamble (Sweeps Coins).<\/p>\n

Speak about a mystical forest having Green Elephants Trinity in Tip Top Casino NL<\/a> which Thunderkick’s trademark psychedelic style fits a great tribal, nature-infused form. Give it a try first in our very own 100 % free ports library to see in case it is best for you. With a maximum winnings from 150,000x, large volatility and you will enjoyable bonus series, it offers everything high rollers could be looking for. A candy-styled slot that have tumbling icons and multipliers up to 100x, Nice Bonanza try treasured because of its brilliant visuals and you will rewarding extra series.<\/p>\n

Which have optimized touching control, on-the-wade accessibility, and you will uniform high quality, mobile slots enables you to hold the brand new thrill from spinning the latest reels right in their pocket. Playing slot demos is over simply a means to violation the time-it’s an important part of reading why are a position online game tick, from its illustrations or photos and game play possess in order to its incentives and you may victory potential. These types of demos offer you an appartment equilibrium – usually doing 5,000 gold coins or higher – so you can discuss the overall game with no economic chance. The brand new game’s vintage-layout image and you will atmospheric soundtrack carry out a moody yet , charming gambling experience, and work out Rip Town a necessity-play for those who like a twist to your vintage cat-and-mouse rivalry.<\/p>\n

Both solution will enable you to tackle free ports to your wade, to enjoy the excitement of online slots irrespective of where your are already. Since you are not risking any money, it isn’t a kind of gambling – it\ufffds purely enjoyment. Do not speed harbors until we now have spent occasions investigating all facets of each video game. Lower than, there is game right up a few of the most preferred templates you can find towards 100 % free slot games on the internet, in addition to some of the most common records for each genre.<\/p>\n

On your computer otherwise portable, from the gambling establishment-accommodation otherwise home, it\ufffds your decision to decide the device! Having CasinosAvenue, anybody can enjoy 100 % free slots inside the a quick and easy ways. Creating large-top quality free online slots without download needed comes to a collective work out of competent teams of builders, music artists, along with mathematicians.<\/p>\n

Of several slots members like another online game because they like the look of it at first sight. It is possible to either set the brand new coin value, payline worthy of, or overall choice. This will are very different a little while depending on the position, but it’s not absolutely all one to tricky.<\/p>\n

Check always the fresh slot’s “i” tab discover highest RTPs, bonus laws, and you will payment tables. Therefore, you could play 100 % free harbors to your tablets, se for which you don’t need to spend time opening the newest web browser. After you have acquired a modern jackpot don’t bet inside. Definitely, ensure on the quality and you may program. He could be simple to use and also have readable setup.<\/p>\n

Which means you’ll need to bet $350 in advance of cashing your payouts. This means you will have to choice your own payouts a particular matter of that time period before you can withdraw all of them. Same picture, same game play, same impressive incentive enjoys \ufffd merely no chance. After you eventually use up all your loans, dont worry.<\/p>\n

This is because harbors was well-known activities. You ought to talk about a lot more video game through this application supplier. Although not, each one of these features its own motif and you can framework one set it besides the someone else. Like, you can observe the fresh paytable observe how much the newest position can pay aside when you are extremely happy. Of the opting for free slots on the internet, additionally you give yourself the opportunity to in fact check out the latest high style of ports that exist. With the help of our harbors, you don’t have to put any cash prior to you’ll be able to start to experience.<\/p>\n

Any kind of option you decide on, you will have accessibility the best 100 % free harbors playing to possess enjoyable online. Casual players as well as like the fresh activities worth-just spin demonstration slots for fun and relish the excitement away from the video game without worrying on deposits or loss. They balance higher-end construction top quality having fun mechanics and you will a good winnings possible. But never getting fooled by the first look of this game \ufffd the fresh earn potentials are actual, having multipliers as much as 500x within the beds base game!<\/p>\n

An enthusiastic RTP off % and you may high volatility makes that it pleasant position which have Ancient Egypt means an appropriate option for each other the new and you can educated people. This video game is an excellent matches if you are looking having a high volatility game which have bells and whistles and you may vibrant picture. Since gaming markets is growing, video game builders constantly build the newest habits and features, very members have an amazing array to pick from.<\/p>\n","protected":false},"excerpt":{"rendered":"

You don’t have to enjoy fishing to love to relax and play Larger Trout Bonanza NetEnt has long been a respected label regarding the slot gaming globe, noted for getting ideal-top quality slots that have breathtaking graphics, innovative layouts, and you may enjoyable game play. The boasts numerous well-known builders\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-130144","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/130144","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=130144"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/130144\/revisions"}],"predecessor-version":[{"id":130161,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/130144\/revisions\/130161"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=130144"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=130144"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=130144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}