/* 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":142425,"date":"2026-06-12T10:05:32","date_gmt":"2026-06-12T10:05:32","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=142425"},"modified":"2026-06-12T10:05:32","modified_gmt":"2026-06-12T10:05:32","slug":"join-today-and-get-special-deals-from-spinstein-casino-in-canada","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/join-today-and-get-special-deals-from-spinstein-casino-in-canada\/","title":{"rendered":"Join Today and Get Special Deals from Spinstein Casino in Canada"},"content":{"rendered":"
\n\"Casino<\/p>\n

Your start in online gaming calls for a proper welcome. Spinstein Casino has assembled a sign-up experience just for players in Canada. Create an account today and you will obtain immediate access to a exclusive set of bonuses and promotions, superior than the usual offer. We give you a safe and thrilling place to play, where your first deposit does more for you. It is the beginning of great entertainment and your first chance to win.<\/p>\n

After the Sign-Up: Continuing Offers for Regular Users<\/h2>\n

Our focus on your enjoyment does not stop after your first deposit. As a Spinstein Casino member, you receive a rotating lineup of recurring bonuses made for loyal players. You will see weekly reload bonuses that add funds to your later deposits, cashback offers to help after a run of bad luck, and regular free spin giveaways on new and featured slots. There is always something new on the horizon.<\/p>\n

For our most committed players, the loyalty program offers the best rewards. Every real-money bet you place awards you comp points that accumulate over time. You can exchange these points for bonus credits, free spins, or other rewards. The more you play, the farther you advance through our VIP tiers. Each level grants better benefits like custom bonuses, quicker withdrawals, and your own account manager. At Spinstein Casino, we truly recognize your loyalty and compensate you for it well.<\/p>\n

Why Creating Your Spinstein Casino Account is a Smart Move<\/h2>\n

Selecting an online casino matters a lot. We try to make it easy. Our platform is designed with security, fairness, and the player as a priority. When you register with us, you are not simply opening an account. You are joining a licensed and regulated space where your safety is the top priority. We use advanced encryption to guard your data. Our game library features titles from the best software makers, so every game session is enjoyable and trustworthy.<\/p>\n

The security is solid, but we also focus on how it feels to game here https:\/\/spinsteinscasino.com\/<\/a>. Our interface is user-friendly, whether you are on a PC or a phone. You can access your favorite games without hassle. We know smooth payments are important too. That is why we offer many trusted payment methods available in Canada. Your deposits and withdrawals are speedy and hassle-free. Joining our community means entering a place where quality and player satisfaction matter most.<\/p>\n

Unpacking Your Exclusive Spinstein Casino Welcome Package<\/h2>\n

We appreciate your decision to join us with a welcome package designed to extend your first deposit. This package is intended to give you more playing time and more ways to try our large game collection. It often features a strong match bonus on your first deposit. That means we add a percentage of extra bonus funds to the money you put in. For example, a 100% match bonus on a $100 deposit gives you $200 total to begin with.<\/p>\n

The value keeps going. We frequently add free spins on chosen, popular slot games to the package. These spins enable you to try our best slots without using your own deposited cash. It is our way of demonstrating you the quality and variety we have. Every part of the welcome package has specific wagering requirements. We spell these out clearly in the promotion’s terms and conditions. We value being transparent, so you always know how to turn your bonus funds into cash you can withdraw.<\/p>\n

\"Europa<\/p>\n

Deciphering Bonus Terms and Wagering Requirements<\/h2>\n

Every bonus deal has its own terms and conditions. This maintains things equitable and fun for everyone. We think it is our role to clarify these transparently, so you can employ your promotions efficiently. The most critical term to know is the wagering requirement, sometimes referred to as playthrough. This is a coefficient that indicates you how many times you must play through the bonus amount (or the bonus plus deposit) before you can withdraw any winnings from it.<\/p>\n

Let us assume you obtain a $100 bonus with a 30x wagering requirement. You would have to make total bets of $3,000 before you could withdraw. These rules pertain to particular games. Generally slots account for 100% toward the requirement, while table games might account for less. Game constraints, maximum bet limits when using bonus money, and time limits to finish wagering are all in the deal’s T&Cs. Please examine these details thoroughly. Comprehending them is how you successfully transform bonus funds into actual, withdrawable money.<\/p>\n

Complete Guide to Your Spinstein Casino Registration<\/h2>\n

We created our sign-up process quick. You can transition from visitor to player in just a few minutes. First, locate and click the prominent “Sign Up” or “Join Now” button on our homepage. This opens our secure registration form. We will request some basic details to create your profile. You should give a valid email, choose a secure password, and enter some personal information for account verification and security.<\/p>\n

Make sure everything you enter matches your official ID, like a driver’s license. This is part of our standard Know Your Customer (KYC) process. It is crucial for keeping the gaming environment secure for all our players. After you complete the form, you might have to verify your email by clicking a link we send you. Once that is done, your account is active. You can then complete your first deposit. That deposit immediately renders you eligible for our exclusive welcome package, activating the bonuses we reserved for new Canadian members.<\/p>\n

Key Details for a Seamless Sign-Up<\/h3>\n

\"Crypto<\/p>\n

A bit of preparation assists your registration completes without any hold-ups. Preparing the right information ready lets you submit the form correctly on the first try, so you can commence playing faster. We recommend you prepare a couple of things together before you click the sign-up button.<\/p>\n

What You’ll Need to Provide<\/h4>\n

You must be old enough to gamble legally in your province. We will require your full legal name, your current home address, your date of birth, and a working email address. This information must be truthful and true. We also require a phone number for account security and service messages. Please use an email and phone number you actually check. We require them to verify your account and to provide you important updates about your bonuses and cashouts.<\/p>\n

Picking Your Account Credentials<\/h4>\n

Choosing a strong username and password is a key part of protecting your account and money. We suggest a password you do not reuse anywhere else online. A good password combines uppercase and lowercase letters, numbers, and symbols. Your username should be easy for you to remember but not too personal. These login details are your key to your account and all your exclusive deals, so hold them private and safe.<\/p>\n

Maximizing Your Premium Deals: Expert Tips from Us<\/h2>\n

We hope you to get the most from our premium deals, so here is some helpful advice. First, always read the full terms and conditions for any promotion you accept. Being aware of the wagering rules, game contributions, and deadlines enables you avoid surprises and play smart. Second, think about starting with games that contribute 100% to the wagering requirements. You will meet them faster that way. Slots are usually the main category for this, but you should still confirm the specific rules first.<\/p>\n

Watch your bankroll, even when you are playing with bonus funds. Establishing limits for your gaming sessions means the fun lasts longer. Also, remember to check your account’s promotions page and your email inbox. We often dispatch limited-time offers and personal bonuses to our players. Keeping informed means you will not lose a chance to increase your balance. Finally, our customer support team is prepared to answer any questions about our bonuses or your account. We hope your experience with our exclusive deals to be both enjoyable and rewarding.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"

Your start in online gaming calls for a proper welcome. Spinstein Casino has assembled a sign-up experience just for players in Canada. Create an account today and you will obtain immediate access to a exclusive set of bonuses and promotions, superior than the usual offer. We give you a safe\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-142425","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/142425","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=142425"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/142425\/revisions"}],"predecessor-version":[{"id":142426,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/142425\/revisions\/142426"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=142425"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=142425"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=142425"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}