/* 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":32208,"date":"2026-05-17T15:01:54","date_gmt":"2026-05-17T15:01:54","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=32208"},"modified":"2026-05-17T15:01:55","modified_gmt":"2026-05-17T15:01:55","slug":"play-5400-100-percent-free-position-games-online-in-canada-no-down-load","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/play-5400-100-percent-free-position-games-online-in-canada-no-down-load\/","title":{"rendered":"Play 5400+ 100 percent free Position Games Online in Canada No Down load"},"content":{"rendered":"

You\u2019re also lucky \u2013 of a lot online casinos do let you play for free. Follow on, spin, and relish the thrill \u2013 every bells, whistles, and you may incentive series integrated. Wilds still replacement, scatters however discover 100 percent free revolves, multipliers however raise wins, and you will bonus series however fire when you hit the best signs. Totally free harbors come in demonstration mode, and that means you normally jump straight into the instead joining otherwise while making a deposit. Viking Runecraft one hundred try a dramatic position video game set in a keen ancient business. For many who property an adequate amount of brand new spread out symbols, you can choose between around three other free spins rounds.<\/p>\n

Free harbors provide a simple and you can chance-100 percent free way of try out a-game if you are retaining the majority of the fresh thrill and you may fun that comes of hitting the reels. The top-ranked totally free harbors casinos all provide brilliant cellular solutions, which you are able to accessibility into iphone 3gs or Android os through the gambling enterprise\u2019s mobile web site or dedicated application. This information can be useful whenever choosing in the event it\u2019s worthy of staking actual cash to your a game. For those who\u2019re also happy to test free slots, you\u2019ll become thrilled to be aware that doing so is straightforward.<\/p>\n

Online harbors are great for practice, but to relax and play for real money adds adventure\u2014and you may real advantages. This will make totally free position game best for behavior otherwise everyday activities. The sole differences is you may be having fun with digital loans as opposed to a real income. Sure, free trial harbors mirror the a real income competitors with respect to gameplay, has actually, and you will image.<\/p>\n

If you choose to enjoy for real, definitely place limits, play sensibly, while focusing into the experience, not only the fresh new wins. But if you need to wager a real income, we\u2019ve examined an informed casinos on the internet. Total, Blue Wizard are a wacky slot games that have simple image and a romance-it-or-hate-they sound recording.<\/p>\n

\u2022 Chinese \u2013 Our Chinese-themed harbors transportation one the far east, the place you\u2019ll look for a secure out-of customs and you will opportunity. That have really to pick from, we realize you\u2019ll pick your ideal fairy tale excitement. Away from extremely easy antique ports harking to the new wonderful decades out-of Las vegas so you can more complicated games that have innovative incentives cycles, we\u2019ve got it every.<\/p>\n

Lower than, discover every type off position you can enjoy within Let\u2019s Play Slots, followed closely by the new great number of bonus has imbedded within this each position as well. Rather stick to Assist\u2019s Enjoy Harbors and enjoy a deposit free sense in place of passing out goldenbet casino<\/a> your monetary pointers to accomplish complete strangers. On Let\u2019s Play Harbors, you can look toward no-deposit slot online game, and thus all of our ports might be liked during the 100 percent free play function, so there\u2019s no reason to also consider spending your tough earned money. On Let\u2019s Gamble Ports, you\u2019ll end up being happy to remember that indeed there\u2019s zero subscription involved. This enables users to help you educated graced picture, amazing animations quality, and you will superior sound effects without the need to obtain things before to experience a position game. Yet not, delight keep in mind that particular harbors aren\u2019t always in totally free trial mode so there several grounds for so it also.<\/p>\n

Practical Gamble focuses on starting entertaining added bonus possess, particularly 100 percent free spins and you can multipliers, enhancing the player feel. Its harbors function vibrant image and you will book themes, from the wilds off Wolf Gold into nice snacks in Nice Bonanza. Why don’t we mention a few of the ideal online game business framing on the internet slots’ upcoming.<\/p>\n

The dog Family collection is dear because of its funny graphics, enjoyable enjoys, in addition to pleasure it brings in order to dog couples and slot fans equivalent. For those who favor a less heavy, more lively motif, “Canine Home” series has the benefit of an excellent betting sense. This collection is known for their added bonus buy solutions plus the adrenaline-moving action of the incentive series. Brand new repayment, “Currency Instruct step three”, continues on the brand new history with enhanced graphics, extra special icons, plus high earn possible. The journey been on brand spanking new “Money Instruct”, immersing members during the an untamed West heist which have interesting extra enjoys and profile symbols you to trigger special overall performance. The bucks Illustrate series by Settle down Gaming possess set the fresh new club high to own high-volatility ports.<\/p>\n

100 percent free harbors are usually to own entertainment and practice intentions, and you may any winnings are virtual. Rather, if you would like the opportunity to victory real money on the totally free harbors, we\u2019ve given a beneficial shortlist of the best no-deposit free spins even offers. Whether you’re trying to find free slots with totally free revolves and incentive cycles, like labeled harbors, otherwise classic AWPs, we\u2019ve had your shielded. Some free slot online game enjoys bonus provides and you will incentive cycles for the the form of unique icons and you can front side video game. It\u2019s a great routine to check a game\u2019s RTP from the paytable just before playing with real cash, as certain gambling enterprises may offer the same position with different RTP options. This new Swedish iGaming powerhouse has determined this new large business time and go out once more, providing landmark designs particularly three-dimensional image and you can tumbling reels (that they phone call Avalanche reels).<\/p>\n

Whether or not you adore classic slots which have simple gameplay otherwise crave new excitement of the latest game which have cutting-boundary has actually, these developers have you ever protected. If you\u2019re also following most significant jackpots, many entertaining incentive series, or simply should like to play your favorite harbors, i help you find the best web based casinos for the gaming need. Finding the right internet casino to own position games isn\u2019t only about flashy graphics otherwise huge pledges\u2014it\u2019s on the trying to find a web site that gives on every level. If or not you want the new thrill of higher-chance, high-award ports and\/or morale out of typical, faster prizes, expertise volatility makes it possible to choose the right position video game to suit your version of play.<\/p>\n

See one certification facts from the gambling establishment\u2019s footer and even simply click you to licensing amount to confirm they (you\u2019ll become rerouted on the UKGC web site). But, you\u2019ll be allowed to play some of the most recent position releases, hottest headings in the business, and you may a number of exclusive slots which you\u2019ll merely see right here. And you will yes, you\u2019ll need to join and you can be certain that your account very first. To go straight to the main benefit bullet getting a beneficial put rate.<\/p>\n

Some online casinos offer faithful gambling establishment apps also, however if you will be concerned about using up space on your unit, i encourage the fresh new within the-internet browser choice. Most contemporary online slots are designed to end up being played into the one another desktop computer and smartphones, particularly mobile devices otherwise tablets. Make a deposit and choose new ‘Real Money’ alternative close to the online game regarding gambling enterprise reception. People ports having fun bonus rounds and you may big names are common having slots members. Don\u2019t disregard, you’ll be able to check out all of our local casino ratings for individuals who\u2019lso are seeking 100 percent free gambling enterprises so you can install.<\/p>\n","protected":false},"excerpt":{"rendered":"

You\u2019re also lucky \u2013 of a lot online casinos do let you play for free. Follow on, spin, and relish the thrill \u2013 every bells, whistles, and you may incentive series integrated. Wilds still replacement, scatters however discover 100 percent free revolves, multipliers however raise wins, and you will bonus\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-32208","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/32208","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=32208"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/32208\/revisions"}],"predecessor-version":[{"id":32209,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/32208\/revisions\/32209"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=32208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=32208"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=32208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}