/* 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":40843,"date":"2026-05-20T10:20:25","date_gmt":"2026-05-20T10:20:25","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=40843"},"modified":"2026-05-20T10:20:25","modified_gmt":"2026-05-20T10:20:25","slug":"most-readily-useful-pragmatic-enjoy-demo-ports-pragmatic-gamble-fre","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/most-readily-useful-pragmatic-enjoy-demo-ports-pragmatic-gamble-fre\/","title":{"rendered":"Most readily useful Pragmatic Enjoy Demo Ports Pragmatic Gamble Fre"},"content":{"rendered":"

With a varied games profile, commitment to innovation, and you may a major international exposure, they produces a commendable rating. Their profile includes game off differing groups, out of reasonable-volatility slots to help you highest-volatility harbors with https:\/\/bety-casino-no.com\/<\/a> large wins starting up to ten,000x the latest bet. Moreover, the offering usually has a great mixture of added bonus game having free revolves and you can high pleasure regarding the legs online game. The collection is actually comprehensive for everybody variety of players that have jackpot game, real time casino games and more. Which have a huge collection also countless games, you\u2019re guaranteed to find something each version of athlete.<\/p>\n

Nothing can beat to play the real deal currency, and you may Practical Enjoy possess a massive collection to select from with titles offering large real cash honors and you may progressive jackpots. Regarding games, it is important to declare that the newest game regarding the gambling merchant are varied and you may available has with a list of 150+ video game, half of which are optimized for cellular playing. Now, the organization also offers its multi-equipment profile from games, being found in 29 dialects plus in all sorts of currencies.<\/p>\n

What exactly is fascinating about Nice Bonanza a thousand try its ability to mix ease that have adventure. In the event you crave rates, the latest Quick Spin function commonly speed the game play, making it good for those short gambling sessions throughout breaks otherwise when you feel just like inserting certain thrill into the big date. It\u2019s particularly providing an extra information out-of ice cream \u2013 who wouldn\u2019t like one? Away from the screen, you\u2019ll usually come across your out on the latest golf course looking to all the way down their impairment. The greatest max winnings in the Pragmatic Gamble profile happens to be found in the a lot of collection titles (elizabeth.g., Glucose Hurry a thousand, Doorways out-of Olympus a thousand), that offer a maximum profit out-of twenty-five,000x the risk. When the limitation was reached, you\u2019ll feel automatically signed away.<\/p>\n

By following this type of steps, you\u2019ll have the ability to transition smoothly of a newcomer so you’re able to a great experienced member at Pragmatic Gamble casinos, seeing an over-all spectrum of fascinating and fulfilling video game. In the event that fortune is on your own top and also you be able to victory, you\u2019ll want to withdraw your revenue. For individuals who\u2019re also new to this type of online game, you can test out the 100 percent free demonstrations supplied by of several casinos, which permit you to receive a become into game play versus risking real cash. This option offers privacy and control over paying, therefore it is a greatest option for of numerous members. Including, you can get fifty free revolves toward renowned harbors eg Wolf Silver and\/or Dog Domestic, letting you pursue real money awards instead individual expense. Having 100 percent free spins bonuses, participants discovered a specific amount of spins with the appointed Pragmatic Gamble slot machines, whether or not utilized in a pleasant plan or given that special advertisements.<\/p>\n

Practical Gamble is a notable online casino app seller on the iGaming world, recognized for its exceptional and you will creative slot machines. With the legs online game signs, an excellent spread icon amongst the reels was represented by a red lollipop. The playgrid has actually 9 legs game symbols, which differ in worthy of away from all the way down-value icons such as for instance bananas, red grapes, watermelon, plum, and you can fruit to better-really worth symbols such as for instance bluish, green, purple, and you will reddish candy. Because of Pragmatic Play’s expansive portfolio, and more than 750 online game, you will find ended a few of the most useful British online slots games. Adopting the popularity of this identity, the organization continued to roll-out online slots, establishing creative bonus possess and you may feet game play auto mechanics that further solidified its condition in the uk on-line casino world. Pragmatic Enjoy, an effective United kingdom-oriented on the web slot creator, joined the newest iGaming industry during the 2015 and become popular by simply making high-top quality video harbors which have a wide range of novel templates.<\/p>\n

With respect to online slots, you to definitely nothing RTP count makes a fairly massive difference into the simply how much your\u2019ll likely walk off which have. Below there was a listing of Pragmatic Enjoy slots with a decreased RTP. Lower than ‘s the top 20 record having Practical enjoy slots that have the best Return to Player. Practical Play stands out from the playing industry which have effective slots, such Wolf Silver, Your dog Household Megaways otherwise Nice Bonanza you to definitely lead my personal best ten most popular Practical Enjoy harbors record.<\/p>\n

While they are best known due to their slots \u2014 and this make up all the the collection \u2014 they also write live gambling games, virtual recreations, bingo activities, and you can abrasion notes. Other factors you to definitely amount likewise incorporate playing options, incentive keeps and more than of all of the individual alternatives. Choosing the best Pragmatic Gamble slot for your requirements are enjoyable, 100 percent free harbors are an easy way to check on and attempt the fresh slots offering a knowledgeable RTPs, large volatility, and\/or limitation profit potential. Anticipate several and you may book incentive has regarding the Pragmatic Gaming portfolio.<\/p>\n

The overall game\u2019s brilliant image and reasonable sound-effects create an enthusiastic immersive sense which can make one feel as you\u2019re also out on water. Getting three or higher Spread signs usually lead to so it enjoyable ability, where you\u2019ll have the possibility to reel into the a whole lot larger gains. However it\u2019s not only this new artwork that produce this game tempting; the game play is very entertaining. With each twist of one’s reels, you\u2019ll feel like you\u2019re also there towards lake, looking forward to you to definitely huge connect. The newest sound recording simply adds a lot more toward adventure, creating a lively atmosphere since you spin this new reels. This type of ports revolve within adventure out-of getting huge seafood and you may drawing for the massive benefits.<\/p>\n

The new invited bundle also boasts a betting dependence on x29, and additional promotions tend to be per week 5% cashback and no betting and you may quest-established 100 percent free spins. Membership is quick and can be carried out with merely a contact, phone number, otherwise through Telegram, steering clear of the a long time verification inspections many UKGC gambling enterprises require. Beyond their smooth user interface, HunnyPlay stands out having good incentives, in addition to deposit bonuses, totally free revolves because the a welcome current, and you can each day advantages. It 5-reel, 25-payline games mixes vibrant illustrations or photos which have rewarding game play, so it’s an engaging choice for admirers out-of Asian-inspired ports. With a keen RTP out-of 96.13% and typical volatility, Ancient Egypt impacts the perfect harmony anywhere between regular earnings therefore the possibility good perks. Brand new thrill intensifies after you home three or maybe more pyramid symbols, creating the new Totally free Spins ability.<\/p>\n

Up-to-go out set of casinos which have online game out-of Pragmatic Gamble. We ask you to below are a few most other popular Practical Gamble casino video game appreciate trial playing within the best on the web casinos available to you. Specifically, it\u2019s an asian position determined from the fortune which was mainly based right back inside the 2017.<\/p>\n","protected":false},"excerpt":{"rendered":"

With a varied games profile, commitment to innovation, and you may a major international exposure, they produces a commendable rating. Their profile includes game off differing groups, out of reasonable-volatility slots to help you highest-volatility harbors with https:\/\/bety-casino-no.com\/ large wins starting up to ten,000x the latest bet. Moreover, the offering\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-40843","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/40843","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=40843"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/40843\/revisions"}],"predecessor-version":[{"id":40844,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/40843\/revisions\/40844"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=40843"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=40843"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=40843"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}