/* 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":134890,"date":"2026-05-26T00:42:01","date_gmt":"2026-05-26T00:42:01","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=134890"},"modified":"2026-05-26T00:42:03","modified_gmt":"2026-05-26T00:42:03","slug":"get-into-a-world-of-quality-gambling-at-the-ruby-luck-online-casino","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/get-into-a-world-of-quality-gambling-at-the-ruby-luck-online-casino\/","title":{"rendered":"Get into a world of Quality Gambling at the Ruby Luck Online casino"},"content":{"rendered":"

Her Wcasino Online<\/a> top priority would be to educate the readers about the best online slots, its mechanics and you can winnings. Such as, you might get a deposit fits, free spins, or certain cashback. For those who\u2019re also a very keen mobile player, you may want to prefer Hacksaw game over RubyPlay game, as they\u2019re also set up especially for mobile play.<\/p>\n

That have speedy transactions, state-of-the-art protection, and you can ten\/ten customer service, i make sure your trip is easy, seamless, and you can fulfilling. Whether or not you\u2019re also a casual player or a top roller, our game are made that have amazing graphics, entertaining templates, and you can fair-play mechanics to store you entertained year round. With over eight hundred premium game, such as the latest and you can most popular ports, vintage table game, and you can a keen immersive list of video poker variants, Ruby Ports also offers something for everyone.<\/p>\n

Registered in the Costa Rica, the site is driven entirely by the Live Gambling (RTG) and features over three hundred game, as well as progressive jackpots, table game, and you can vintage online slots. Bitcoin winnings at the Ruby Ports is canned a similar date you to you make the new request, and you can due to the fact that no third parties are needed when creating a good BTC transaction it means that your winnings is straight back with you so much shorter than just while using most other steps. You are available with awesome freespins cycles, special second screen bonus cycles and you can grand jackpots and if such super the new ports end up in the new lobby you are always able to enjoy them with bags out of more money thanks to the awesome Ruby Ports the new ports bonus and you can freespins also offers. The good Ruby Ports structure will bring instant access so you can a scene out of quality casino gambling and you\u2019ll find that registering your account, and make your dumps and you can enjoying the awesome quality casino ports and you can game is all so easy, and you can highly fun. The company also offers of many slot headings, as well as vintage templates, creative has, and you can novel bonus mechanics to have players.<\/p>\n

By the focusing on player preferences, RubyPlay means that its game resonate in what players enjoy very, fostering loyalty. The new theme here helps do a good aesthetically interesting mode and you can combines it that have fun bonus has. The game has bright, amazing image you to take the new appeal and you can fun of the book-made pop-society icon. Its game are in multiple templates and feature multiple bonuses and you can mechanics. This approach has resulted in the production of multiple popular headings that have gained traction on the iGaming community.<\/p>\n

Welcome to the new “Dragons” slot series, where epic monsters shield not only its lairs however, heaps of winnings! Tools up to have a rotating thrill that have Explorer Ports, where for each spin you will find out wealth outside the wildest dreams! On the racy spins out of “Fruit Warp” to the zesty cycles… Dive to the bright world of fruit-themed ports, I have hit the jackpot out of fun!<\/p>\n

The new Wade High feature unlocks more rows and you can awards step 3 respins after you gather cuatro+ Award symbols. Wade High Olympus sets the new phase to have a keen thrill to the gods thanks to a good 5-reel, 4-row design that have fifty paylines and you can average so you can high volatility. For those who gather 6+ gold coins in the latter, you can also result in respins so you can fill rows that have African masks and you can potentially activate the new Minor, Major, or Grand jackpots. That\u2019s let alone the possibility of unlocking 8 free spins by the landing step 3+ scatters on the feet game. That being said, i have as well as saw the occasional RubyPlay slot at the real-currency Us online casinos such as FanDuel and you can Wheel out of Luck. These features is cutting-edge; there\u2019s an explanation we now rating him or her as the no. step 1 free slot studio in america sweepstakes room.<\/p>\n

Steeped that have five reel game, Ruby Ports also features a powerful part of three reel game to go as well as table game and you can a whole section loyal so you can video poker. That it high step five reel game has an explosive bonus bullet known as the Kaboom feature. That it five reel game that have 30 pay lines has a soothing soundtrack and you can super free spins, Cai Hong is quickly bringing its rightful put in the new slot game repertoire here at Ruby Ports. Based on the new Chinese God out of wealth, the new inclusion to the Ruby Ports Catalog is filled with Chinese language mysticism, awards and you can perks. Not status pat with their already spectacular slot game, he is on the habit of seem to adding much more ports game. To begin your thrill to the Ruby Ports world you can also either download the software, or use the instant play option and that gets you to your slot quickly which is exactly as safe and secure as the downloaded app.<\/p>\n

RubyPlay is an active and you can creative gambling app innovation company you to entered the online gambling scene in the 2018. Tournaments can add a vibrant competitive feature to the gambling feel, but it is necessary to note that RubyPlay Gambling Game mainly focuses to the bringing players with high-quality slot game or other casino offerings. Property a good Paw and you can a prize icon that has free spins, and you can get your share out of freebies.<\/p>\n

The player out of Norway had tried to withdraw his winnings to have about three weeks however, faced frequent requests out of Rubyslot to have a pocket screenshot that he had already filed multiple times. He was not knowing of your cause of that it and you can asked guidance in the finding his winnings. The player out of Ontario was trying to withdraw finance to have over 30 days however, faced frequent asks for ID verification and you can banking advice. The security Index of the casino is calculated based on our search and you can research collected by the our casino comment group. Low value of withheld winnings in the player complaints when it comes to the new casino’s size<\/p>\n

Ruby Ports Casino has over 80 online slot game which is the big options casino to have slot game played for real or fun currency. RubyPlay is a keen iGaming innovation studio based in Kiev, Ukraine, that’s working in the Malta too. Unfortunately, I need to say that the new table game options in the Ruby Ports Casino is a bit underwhelming, with just five game to choose from. Players can choose one of videos ports, table game, video poker, and you can specialization game. After you\u2019re also willing to cash in on your winnings in the Ruby Ports Casino, you could choose one of your about three options available \u2014 cord import, checks, or Bitcoin.<\/p>\n

So you can play game at the Ruby Ports Casino and make dumps, redeem bonus codes & withdraw your winnings, you are required to log on to the casino membership. They can redeem bonus codes, play its favourite game and you can withdraw winnings on their bank accounts. The site of the casino has all the features needed to enjoy a fine gambling date. As a result, it\u2019s imperative to have online casinos so you can either make their site mobile amicable or release independent apps.<\/p>\n

Return to Professional (RTP) is an analytical algorithm you to steps the new section of your time you to a man or server wins if not covers to lose currency much more confirmed months. I definitely liked to play that it status and build highly recommend it to those who are seraching so you can very own a great time. And that fun status requires someone directly into the heart away a good a good Chinese The new-year be, exploding to the the color, time and the opportunity high innovation. At the same time, you\u2019ll find table game, video poker, live member game, as well as specialization game such as bingo and you can get keno.<\/p>\n","protected":false},"excerpt":{"rendered":"

Her Wcasino Online top priority would be to educate the readers about the best online slots, its mechanics and you can winnings. Such as, you might get a deposit fits, free spins, or certain cashback. For those who\u2019re also a very keen mobile player, you may want to prefer Hacksaw\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-134890","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/134890","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=134890"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/134890\/revisions"}],"predecessor-version":[{"id":134891,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/134890\/revisions\/134891"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=134890"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=134890"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=134890"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}