/* 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":126699,"date":"2026-05-25T13:28:16","date_gmt":"2026-05-25T13:28:16","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=126699"},"modified":"2026-05-25T13:28:23","modified_gmt":"2026-05-25T13:28:23","slug":"princess-styled-ports-was-whimsical-and-sometimes-come-with-passionate-bonuses","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/princess-styled-ports-was-whimsical-and-sometimes-come-with-passionate-bonuses\/","title":{"rendered":"Princess-styled ports was whimsical and sometimes come with passionate bonuses"},"content":{"rendered":"

It’s not necessary to see fishing to enjoy to experience Large Trout Bonanza<\/h2>\n

NetEnt is definitely the leading label regarding position betting business, recognized for taking better-quality slots having stunning image, innovative layouts, and you will entertaining gameplay. The industry comes with numerous notable builders whose slots stand out for the top quality, invention, and you can activities worthy of. Whether it’s the latest quirky technicians from Coba and\/or emotional team feel of your Rave, there’s always new stuff to understand more about.<\/p>\n

Free online ports want an internet connection so you can load game assets, as well as run-in an internet browser<\/h2>\n

Additionally, you don’t have to register otherwise put playing the new video game, what you the following is completely free! Record was filterable, enabling you to sector the fresh video game owing to software seller otherwise of the identity so that you can stay glued to a developer you love. This game provider’s feature is the unique graphics and voice outcomes you can’t pick any kind of time online game seller. A different renowned Netent Slot is actually Gonzo’s Journey and you will Starburst, you often find at best gambling enterprise bonuses free spin-greeting game. He or she is well-known for its great motif build and sound recording, particularly when your is the their top slots on the internet like since the Narcos, readily available for free use the<\/p>\n

Mining-themed slots usually element explosive incentives and you can dynamic gameplay. Halloween-inspired slots are perfect for thrill-candidates trying to find an excellent hauntingly good-time. Gem-styled ports is actually visually stunning and frequently element easy but really enjoyable game play. Fish-styled harbors usually are white-hearted and have colorful marine lifestyle.<\/p>\n

Part of the idea is that you can gamble free online ports having fun with Gold coins for fun, and you may a reward currency (such Sweeps Coins) getting award-eligible gamble once conference the principles. McLuck provides 1,000+ online game out of thirty+ team (together with Playtech, Novomatic, Playson, Calm down, and you may M2Play) and the position top quality feels constantly strong. In terms of the complete slots experience, LoneStar really does an excellent jobs and then make a massive reception end up being playable with several kinds and you can filters, making it an easy task to diving straight to a theme you like (like, with the diet plan to pull right up Keep & Earn jackpot slots). Societal casinos manage activities playing with digital coins (Coins), when you are sweepstakes gambling enterprises include a second currency used for prize-qualified enjoy (Sweeps Gold coins).<\/p>\n

Mention a mysterious forest with Pink Elephants Trinity in which Thunderkick’s signature psychedelic flair suits an effective tribal, nature-infused mode. Give it a shot first in our very own free slots collection to see if it is effectively for you. Which have a max profit of 150,000x, large volatility and pleasing bonus cycles, it has that which you big spenders could be looking for. A chocolate-styled slot with tumbling signs and multipliers doing 100x, Sweet Bonanza is actually loved for the vibrant graphics and you will satisfying bonus series.<\/p>\n

Having enhanced reach controls, on-the-wade usage of, and you will uniform quality, cellular ports will let you hold the fresh excitement out of spinning the fresh new reels in your pocket. To try out slot demonstrations is over just an effective way to citation committed-it’s a very important help learning exactly why are a slot games tick, from the artwork and game play possess to help you the incentives and victory prospective. These demos present a-flat equilibrium – constantly doing 5,000 gold coins or maybe more – to help you explore the online game without any economic exposure. The newest game’s vintage-style picture and you can atmospheric sound recording perform a moody but really pleasant playing experience, making Split Urban area a necessity-play for those who love a twist for the antique pet-and-mouse rivalry.<\/p>\n

Often option will allow you to tackle totally free ports for the go, to benefit from the thrill from online slots games wherever you seem to be. Because you commonly https:\/\/supacasi-casino.net\/<\/a> risking any cash, it is not a form of gambling – it’s purely activities. We don’t speed slots until we now have invested instances exploring all aspects of each games. Lower than, we’ve got circular up a few of the most popular templates there are to your totally free position games online, in addition to some of the most well-known entries for every single style.<\/p>\n

On your personal computer otherwise portable, from your gambling establishment-hotel room otherwise domestic, it\ufffds your responsibility to determine your own tool! Having CasinosAvenue, anyone can enjoy 100 % free slots during the a simple and fast ways. Starting large-quality free online ports without download needed comes to a collaborative work out of competent groups of developers, music artists, along with mathematicians.<\/p>\n

Many harbors members prefer a different video game while they such as the look of they at first. You’ll both lay the newest coin worthy of, payline worthy of, otherwise complete choice. This will will vary a little while according to the slot, but it’s never assume all one to complicated.<\/p>\n

Check the new slot’s “i” case to locate higher RTPs, extra regulations, and you will commission tables. Therefore, you might enjoy free slots on the pills, se where you won’t need to spend your own time starting the newest internet browser. After you have obtained a modern jackpot do not wager on it. Naturally, ensure regarding their high quality and you may program. He is user friendly and now have understandable configurations.<\/p>\n

That means you’ll want to wager $350 in advance of cashing out your winnings. It means you will need to wager your own earnings a specific amount of that time period one which just withdraw them. Exact same picture, same gameplay, exact same impressive extra enjoys \ufffd just no exposure. Once you sooner use up all your credits, usually do not worry.<\/p>\n

The reason is that slots was common enjoyment. You will want to speak about much more game from this software vendor. not, each of them possesses its own motif and structure you to definitely sets it aside from the other people. Such as, you will find the fresh new paytable observe just how much the brand new position can pay away when you are most fortunate. By the going for 100 % free slots online, you give yourself a way to actually check out the fresh new high sort of ports available. With the help of our ports, you don’t have to deposit any cash ahead of you can start playing.<\/p>\n

Any sort of choice you choose, you’ll have entry to the best 100 % free harbors to experience for enjoyable on line. Casual participants and love the fresh new recreation worthy of-just twist demonstration slots for fun and enjoy the adventure off the game without having to worry on deposits otherwise losings. It balances higher-prevent design quality having fun auto mechanics and you can a good victory potential. But never getting fooled because of the first appearance of this game \ufffd the newest winnings potentials are very real, having multipliers as much as 500x within just the bottom video game!<\/p>\n

A keen RTP from % and you will highest volatility can make this pleasant position which have Old Egypt form the ideal option for each other the fresh and you can experienced people. The game is a good match if you are searching getting a top volatility video game that have great features and you may brilliant graphics. Since the gaming market keeps growing, video game builders constantly assembled the fresh new activities and you can bells and whistles, so players possess all kinds to select from.<\/p>\n","protected":false},"excerpt":{"rendered":"

It’s not necessary to see fishing to enjoy to experience Large Trout Bonanza NetEnt is definitely the leading label regarding position betting business, recognized for taking better-quality slots having stunning image, innovative layouts, and you will entertaining gameplay. The industry comes with numerous notable builders whose slots stand out for\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-126699","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/126699","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=126699"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/126699\/revisions"}],"predecessor-version":[{"id":126719,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/126699\/revisions\/126719"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=126699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=126699"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=126699"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}