/* 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":132315,"date":"2026-05-25T19:00:49","date_gmt":"2026-05-25T19:00:49","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=132315"},"modified":"2026-05-25T19:00:50","modified_gmt":"2026-05-25T19:00:50","slug":"free-ports-ports-you-to-pay-real-money-and-no-deposit-2","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/free-ports-ports-you-to-pay-real-money-and-no-deposit-2\/","title":{"rendered":"Free Ports Ports you to pay Real money and no Deposit"},"content":{"rendered":"

Make Spin Galaxy<\/a> sure you\u2019re also conscious of the new wagering requirements prior to withdrawing. That it simple bonus has players engaged to the its platform. Its library is filled with a wide array of ports and you can live-studio options out of credible app developers. Total, BetMGM players can actually enjoy solid real money worth out of date you to. You can use the advantage finance to love the new casino\u2019s high-RTP ports as well as well-tailored table game. For those who\u2019re also wondering, \u201cWere there free online casino games so you can win real money that have no deposit?<\/p>\n

Its mix of themed bonus cycles, expanding reels, and you can jackpot-linked mechanics has helped hold the franchise in front of players for years. After you\u2019re also to play for free, you to lingering momentum makes it easy to stay engaged without worrying on the bankroll, and it\u2019s a great way to talk about the game\u2019s volatility and you can hit potential risk-free. Magic Mother Megaways is one of the best free ports so you can is at the sweeps casinos this week, thanks to its high-time gameplay and you can solid feature lay, and that very shines in the demo mode. First of all, all the slot demo you\u2019ll find in this post is a good \u201cfree slot.\u201d Even if it\u2019s made by a bona fide-currency slot writer, such as White & Wonder or IGT. Certain kinds of slot bonuses are exciting welcome also offers, fabulous free spins, and you can unbelievable no-deposit bonuses. The advantage features on the Zeus slot game encompass wilds and you can free spins, that have players able to unlock up to one hundred Zeus free game when gathering five feature scatters.<\/p>\n

Tramp Date is a fun sot to have players looking to play something a little more out of the ordinary. Tramp Date is a different-looking slot out of BGaming featuring a good 6×5 grid that have a good Spread Pays mechanic you to replaces the conventional paylines. Stacked symbols and you can multipliers add to the successful potential, but it is the new free spins bullet that all players is setting out to have.<\/p>\n

While you\u2019ll find prompt and you can attentive guidance when you visit any of our casinos, the new responsiveness and you can helpfulness of our online support group is hard to beat. It prize players that have things in accordance with its hobby to the-site and you can, depending on the casino, can be used in many ways, such as improving your bankroll. High RTP (Return to Player) prices understandably rating very high up on the list of something players find when selecting an online slot to play. And if you were wondering, you\u2019re also unrealistic to see a dip in the game quality to play to the the new wade. Whether or not you\u2019re also on the go or just need to stand lay at the household, a trip to the new casino either isn\u2019t you can. But some weeks \u2013 for some reason \u2013 that can not be an option.<\/p>\n

When you are DraftKings Casino does not already give a classic no-deposit bonus, he has a vibrant campaign that’s nearly as simple so you can allege. On top of the no-deposit bonus, Borgata Casino also offers a generous one hundred% deposit fits bonus of up to $step 1,one hundred thousand after you make your first deposit. With your no-deposit bonus, you could play a bunch of real money ports for free. Table game and you can live broker game are also available for free play with its no deposit bonus if you want to is your hand at the blackjack, roulette, baccarat, and more. Table game admirers can be upset, as the only option is a single keep\u2019em poker game. Most other jobs \u2014 such as signing up, logging in, or redeeming awards \u2014 are only as the simple.<\/p>\n

After you gather cuatro+ Scatters, you\u2019ll unlock a plus game that have 15 FS and you can a good retrigger (5 FS). Doors out of Olympus a thousand out of Pragmatic Play is a good branded slot about the Greek god where you\u2019ll spin 6 reels of your 5×6 grid. Thanks to of many bonuses, such as ten Free Spins that have a good retrigger and you can a good multiplier of up to 100x, you\u2019ll feel successful potential that comes up to 21,100x.<\/p>\n

Such personalized-tailored free slot game tend to feature creative mechanics and you can exciting bonus has. Don’t worry even if, as the whole process is incredibly easy and quick – not least because you usually have the option of signing up using your Google or Facebook membership. Most other popular game available at many of our best needed sweepstakes casinos are Mines, Dice and you can Plinko, but it\u2019s Stake.us that offers the new broadest group of options. Crash is among the best-known option, where you\u2019ll have to stop the game until the ascending line comes so you can a sudden halt.<\/p>\n

A few of the best ports that you can play with free spins no deposit bonuses are Starburst, Book out of Dead, and you can Gonzo\u2019s Journey. Knowledge such calculations helps players package its gameplay and you can do its bankroll efficiently to meet the new wagering criteria. Saying free spins no deposit bonuses is a simple process that requires following the several simple steps. Such bonuses are made to tell you love to have players\u2019 loyalty and to prompt went on play. Such free spins give high worth, increasing the total gambling feel to have loyal players.<\/p>\n

Talk about our grand catalogue out of online slots at your leisure, feel free to here are some headings in the demo play first if the you want. To have every day promotions and offers be sure to here are some our Every day Picks section. You could play ports for real currency with us on your popular device(s) as well as mobile phones. Connect with most other players in our online chat rooms to add a fun the new dimension to the game, and you can compete to have an opportunity to win jackpot awards. Whether or not you\u2019re also a fan of old-fashioned scratch cards or if you\u2019ve never tried him or her prior to, our online scratch cards give plenty of fun.<\/p>\n

In that case, free online slot game would be best for you. Would you like to have the thrill out of to play slot game rather than taking the risk of losing your real money? Publishers assign related stories so you can in the-household team publishers that have experience in for each type of matter city.<\/p>\n

I prompt you to talk about what game are on give and you can find the of them that fit you the best, but the list lower than will be a good first step as the i work on high RTP game which might be probably so you can help you get real money awards out of. Of many free online casinos now give mobile apps that let you play and you can win real money awards and no deposit required. After you sign up, you will get free bonus gold coins to use to the one slot game.<\/p>\n

Konami ports tend to adjust popular property-based headings to the online formats, with many game featuring stacked symbols, expanding reels, and you can multiple-height bonus cycles. Popular headings such as Bucks Server, Smokin Sexy Gems, and you can Triple Jackpot Gems give identifiable casino-floor templates to the online play. The new game generally emphasize simple gameplay, solid bonus causes, and you can average-to-high volatility, closely mirroring the feel of old-fashioned U.S. casino ports. Play\u2019n Wade ports seem to feature proprietary mechanics such as group-pays solutions, flowing wins, expanding symbols, and you can progressive multiplier chains you to create momentum during the bonus cycles. Popular headings such as Doors out of Olympus, Sweet Bonanza, and you can Big Trout Bonanza has helped introduce the new vendor\u2019s history of ambitious graphics, fast-paced gameplay, and you can highly repeatable bonus has.<\/p>\n

A free spins no deposit bonus also offers a flat amount of free spins after you subscribe to a different no deposit bonus casino. Such are high for no deposit bonuses and should be met before you can withdraw one winnings from your membership. No deposit free spins will be the most common type of give, granting players a flat amount of spins to the specific slot game picked by the casino. Slot structure will continue to evolve up to larger win potential and more feature-motivated gameplay.<\/p>\n","protected":false},"excerpt":{"rendered":"

Make Spin Galaxy sure you\u2019re also conscious of the new wagering requirements prior to withdrawing. That it simple bonus has players engaged to the its platform. Its library is filled with a wide array of ports and you can live-studio options out of credible app developers. Total, BetMGM players can\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-132315","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/132315","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=132315"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/132315\/revisions"}],"predecessor-version":[{"id":132316,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/132315\/revisions\/132316"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=132315"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=132315"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=132315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}