/* 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":5359,"date":"2026-04-24T11:03:50","date_gmt":"2026-04-24T11:03:50","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=5359"},"modified":"2026-04-24T11:03:51","modified_gmt":"2026-04-24T11:03:51","slug":"playgrand-casino-score-fifty-free-spins-no-deposit-to-have-book-out-of-dead","status":"publish","type":"post","link":"https:\/\/klecet.edu.in\/alumni\/playgrand-casino-score-fifty-free-spins-no-deposit-to-have-book-out-of-dead\/","title":{"rendered":"Playgrand Casino: Score fifty Free Spins No deposit to have Book out of Dead"},"content":{"rendered":"

Top-tier Ice Fishing game<\/a> online casinos such as PlayGrand either forego no deposit promotions so you can work on keeping a top-quality member feet. Such as, in early 2021, new users you will allege 30 free spins to the Book out of Dead rather than depositing, a deal you to attracted thousands of registrations. When you are players can find promotions giving bonus spins or free spins elsewhere, PlayGrand focuses instead to the fulfilling first dumps that have generous fits bonuses and you can spin also offers.<\/p>\n

You can see what you owe, dumps, and you can withdrawals in the The new Zealand bucks, and that saves you money to the exchange rates. For those who unlock our site in the Chrome or Safari and you can tap “Add to Household Screen,” you will have a quick and easy way to get to the casino. Enjoy instant dumps, anonymous play, and you can lightning-prompt withdrawals on your favourite cryptocurrencies. The new Zealand dollar ‘s the chief currency in our casino, and it’s able to you when you are. For those who find PlayGrand Online The new Zealand, there are live chat that works quickly and you can devices that make yes people plays pretty. Feel free to play with our KYC book that offers step-by-step guidelines to make sure your account verification is fast and easy.<\/p>\n

If the there are fees to have short winnings, create fewer requests. To cut down on churn, don’t let someone entirely cancel withdrawals. Talk about pending withdrawals to the support group at the Playgrand Casino and be sure to add the order ID. Pause or initiate mind-isolation straight away if you think such as you are losing manage. Filters such as Internet Nanny or Qustodio can be used by the parents and you can guardians so you can cut off gambling posts. All the transaction is filed to the date, approach, and you can count in the \u00a3 so it is easy to track.<\/p>\n

Playgrand Casino accepts most major commission options and you can lets users so you can find its popular means for dumps and you can withdrawals. For real currency dumps and you can withdrawals, Playgrand Casino also offers some safe commission steps. Now that you are familiar with the minimum deposit at the PlayGrand or other key details, it\u2019s time to utilize it all in habit.<\/p>\n

This is not a noisy brand in the sense out of star endorsements or tv ads, but instead retains unbelievable profile one of analysis sites. PlayGrand Casino might not create headlines tend to, but it is been live as the 2013 and now servers over cuatro,two hundred game out of over fifty app company \u2013 over double the Uk world mediocre. There are wagering criteria to have players to turn such Bonus Finance to the Bucks Finance. Completing checks early guarantees withdrawals in the GBP is also go ahead without delay after all the criteria is met.<\/p>\n

The new minimalist theme does make it easy to navigate the site without any distracting image and you can banners. The only disadvantage is the fact there is nothing version in terms out of stake restrictions and so you\u2019ll need to be careful and check the new restrictions prior to putting your bank account off. Collect up to two hundred things and you\u2019ll be able to initiate saying bonus awards with each two hundred things awarding you \u20acstep 1. The new loyalty campaign at the PlayGrand Casino is a simple give you to makes it easy to follow and enjoy. The maximum bet is capped at the \u20ac5 and you can one dumps via Neteller and you can Skrill can make the new bonus void.<\/p>\n

No deposit casino bonuses come with of many laws and you can restrictions, such as limit bet restrictions and you can wagering criteria. If you get a good $ten no deposit bonus that have wagering criteria out of 40x bonus, it means you should bet $eight hundred in order to withdraw your bonus finance and you can winnings. After you allege a no deposit bonus, you always have to meet up with the wagering criteria. At the same time, no deposit bonuses are generally very easy so you can allege.<\/p>\n

With the very important details in mind, here\u2019s a quick review of what works well \u2014 and you can what doesn\u2019t. For anyone worried about ports, short winnings, and you can trouble-free navigation, the site delivers just that. If the short dumps, leading game company, and you can unlimited ports are what you want, there is so much here to work with. The working design and you can compliance that have fair-play terms are some of the things that have obtained PlayGrand rated high by the credible world supply.<\/p>\n

The new steps listed below give all the information related to the new subscription process at the casino. It offers a good interface to have players with its simple and easy navigation. If you have problems confirming your account or your withdrawal is held up, play with live chat and be willing to tell you proof of who you\u2019re. The site supports GAMSTOP to have mind-exception around the multiple operators and offer profiles access to help-looking to groups such as GamCare. There can be commission steps that are not eligible for the new campaign, so be sure to check out the Uk fine print very carefully.<\/p>\n

Along with the e-purse restrictions, the true banking options be much more limited than the comprehensive commission approach list first means. I noticed withdrawals will be reversed in this 48 hours, and that certain you’ll find as the a safety net even if anyone else look at it as potential friction. Visa and you can Credit card cashouts take dos-five days, and that feels basic but not such as prompt. The new videos quality is crisp, and the interface combines smoothly to the chief casino platform.<\/p>\n

Playgrand Casino will give you a finance and you can free spins bonus to the the original step 3 dumps. After you create a deposit out of \u20acten or more at the Playgrand Casino you get a plus to the your first step 3 dumps. Playgrand casino knows he has a good online casino but they also want you to have the same impression. After you unlock Playgrand Casino personally you don\u2019t found free spins at all. Most other other sites don\u2019t leave you fifty free spins to the Book out of Dead. Our people love this game as the bonus game is exciting.<\/p>\n

Such as, bets put on slot game is counted because of their full count, whereas those people to the table game are only worth ten% of its face value. Overall, you can buy up to \u20acstep 1,one hundred thousand in the bonus finance and you can one hundred free spins along the direction of your first about three dumps. Ian Mac is a loyal posts writer and you can editor that have uniform five-star opinions to have high-quality gambling posts. It means strict laws on the staying players safe, checking man’s identities, ensuring that game is fair, and you can staying currency safe. For each lesson, write down your wins and you can losses, and prevent when you’ve made 30 so you can half of your lesson bankroll.<\/p>\n

Let\u2019s dive directly into the new bonuses and you can talk about as to why PlayGrand stays a leading option for players around the The uk and you can beyond. Based in the 2015, PlayGrand works under the strict licensing of your Uk Gambling Commission and the Malta Gambling Authority, making sure high criteria out of fairness and you can protection. PlayGrand Casino will continue to stand out on the online gambling world, charming players with its feminine structure, comprehensive bonus offerings, and you can wide variety of ports and you can table game. High wins may need more checks prior to release. Crypto winnings (BTC\/ETH\/USDT) are usually accepted within a few minutes to some times after verification. Cards can take up to dos-5 business days, when you are bank winnings trust your bank (1-5 business days).<\/p>\n

The new in control gambling settings feels enough too, that have mind-exception options and you can chill-out of devices that work when you need breathing room. The new eCOGRA acceptance instantly stuck my interest\u2014it\u2019s a strong trust marker that many casinos forget. Being fully registered in the uk, they\u2019re also a great choice out of casino to have SpinWizard profiles. For those who don\u2019t has an account, follow the steps lower than to make you to. Finance your account that have \u00a315 or more and you can as well as the ten no deposit free spins, you\u2019ll score 70 much more to use to the Book out of Dead slot! If you want to allege ten no deposit spins that have PlayGrand, follow the simple steps lower than and you\u2019ll be spinning away to the Book out of Dead in no time.<\/p>\n","protected":false},"excerpt":{"rendered":"

Top-tier Ice Fishing game online casinos such as PlayGrand either forego no deposit promotions so you can work on keeping a top-quality member feet. Such as, in early 2021, new users you will allege 30 free spins to the Book out of Dead rather than depositing, a deal you to\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-5359","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/5359","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/comments?post=5359"}],"version-history":[{"count":1,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/5359\/revisions"}],"predecessor-version":[{"id":5360,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/5359\/revisions\/5360"}],"wp:attachment":[{"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=5359"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=5359"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=5359"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}