/* 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":32532,"date":"2026-05-17T18:57:19","date_gmt":"2026-05-17T18:57:19","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=32532"},"modified":"2026-05-17T18:57:20","modified_gmt":"2026-05-17T18:57:20","slug":"free-ports-demo-slots-play-totally-free-slots","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/free-ports-demo-slots-play-totally-free-slots\/","title":{"rendered":"Free Ports & Demo Slots Play Totally free Slots"},"content":{"rendered":"

Known mainly because of their higher level bonus series and you can free spin products, the title Currency Show 2 has been recognized as among the absolute most profitable harbors of the past a decade. A pioneer inside the three- https:\/\/bof-casino-login.nl\/<\/a> dimensional gaming, their headings are notable for unique graphics, charming soundtracks, and several quite immersive skills up to. If the big winnings are the thing that you\u2019re also shortly after, next Microgaming is the term knowing. If this\u2019s thrilling bonus series or captivating storylines, these game are so enjoyable it doesn’t matter what your enjoy.<\/p>\n

\u2013 If you are being unsure of exactly how a real income ports performs, here are some our very own scholar-friendly guide on precisely how to enjoy internet casino ports. That have 75+ 100 percent free video game readily available, its talked about titles were Jammin\u2019 Containers, Shaver Shark, and you can Vintage Tapes. IGT (Globally Online game Technology) try an international frontrunner inside playing, providing 150+ popular free gambling enterprise ports. Its renowned headings like Starburst, Gonzo\u2019s Trip, and you can Lifeless otherwise Alive dos possess place globe conditions to own visual high quality and you may gameplay development. Always sample several online game and look RTPs if you plan to help you transition out-of 100 percent free ports so you can real money play.<\/p>\n

Themes one to resonate having professionals usually become pleasant storylines, culturally rich elements, otherwise preferred styles for example old civilizations otherwise fantasy realms. High-top quality illustrations or photos promote the online game\u2019s theme your, form the newest tone and you will improving your gambling experience. It\u2019s not merely throughout the clicking \u2018spin\u2019; it\u2019s in regards to the unique has and you will aspects that make each video game special. Online slots promote an abundant mix of entertaining game play, beautiful graphics, and ranged templates, that are necessary to possess a keen immersive betting feel. When you find yourself recreation and you will fun are subjective, we\u2019ve tried to manage a ranking oriented a very universal position away from enjoyment and you will liveliness a large number of slot members are searching for when playing on the web.<\/p>\n

For those who\u2019lso are seeking anything a tad bit more cutting-edge and adrenaline moving, then dive towards the all of our 5 reel videos ports collection? Discuss classic step three reel slots which happen to be according to the supply casino slot games concept for optimum fun and you may entertainment. We endeavor to supply the widest set of titles regarding an effective wide range out of service providers. Indeed, the sort of online slots games United kingdom participants love is actually varied just like the they vary from vintage slots & fresh fruit hosts, through to the latest video harbors progressive headings.<\/p>\n

And finally, is our private online game and you will Pulsz-inspired slots having book fun into the the platform. Or even notice it, excite look at your Junk e-mail folder and you will mark it ‘not spam’ otherwise ‘looks safe’. And you can Immortal Relationship also provides a giant max winnings and you will highest RTP, nevertheless\u2019s none of newest online slot machines. Our top four were Ages of the brand new Gods, which happy with its build and earn prospective. For those who\u2019lso are seeking take pleasure in harbors free-of-charge inside the Canada, your best option is actually demo ports. Players can be desensitised so you’re able to chance when playing demo game, so it\u2019s additional important that they explore safer gambling equipment.<\/p>\n

While you are RTP ways the fresh new long-label mediocre get back, volatility actions this new frequency and size of payouts. It\u2019s in addition to notable you to online casinos can transform RTPs, very a slot get exhibit different RTPs across the certain systems. Whilst each and every slot possesses its own signs, gameplay, and you will winning combos (paylines), the intention of every position is similar \u2014 end for each and every spin on the slot symbols straightening to your a winning succession. When comparing to almost every other online casino games and playing choices such as recreations gaming (33%), live casino games (32%), lotteries (17%), and you will bingo (12%), it\u2019s obvious one to gamblers like harbors. To ensure that you\u2019re to play fair ports, constantly follow video game from credible designers and you will subscribed gambling enterprises.<\/p>\n

Our very own dedicated party in the SlotsCalendar scours the fresh new digital land to curate a range of the finest casino incentives, making sure you can access the most satisfying and you will reputable selling. These types of bonuses offer you a set level of revolves to your chose ports in place of requiring people put, enabling you to twist the brand new reels and you will victory real money rather than risking the financing. All of our goal should be to always obtain access to credible and dependable systems one to prioritize fair gamble and athlete pleasure. This type of extra provides evoke nostalgia to own arcade enthusiasts, because professionals need to reveal the dexterity and you can way to become successful.<\/p>\n

For individuals who\u2019ve actually ever hesitated just before setting a bona fide-currency choice, you\u2019lso are not the only one. Gamble quickly from your browser and you can possess top headings off ideal builders. Was trial slots of most useful providers and explore other layouts, added bonus rounds, and you may mechanics ahead of to relax and play the real deal money. Tim was a seasoned pro when you look at the online casinos and you will slots, with many years of hands-into the sense.<\/p>\n

When you play slot demonstrations, you\u2019lso are essentially diving for the free items regarding actual-currency slot games. For individuals who\u2019re keen on the big Trout series, this\u2019s a must-play for the ability to profit up to 5,000 moments the wager! The online game\u2019s vintage-build picture and you may atmospheric sound recording create good cranky yet , pleasant playing sense, and come up with Tear Town necessary-play for people who like a twist to the antique cat-and-mouse competition. Higher volatility and you will strong multipliers\u2014doing 1,000x\u2014lead to electrifying game play, as the Tumble function guarantees the spin can result in numerous wins. With an enthusiastic RTP regarding 96.5% while the possibility to win around x15,000, it\u2019s a good select to have players looking to thrill and good-sized benefits.<\/p>\n

Once you discover a position games, you will also see a comprehensive overview of brand new position and therefore comes with the newest motif, application creator, paylines, reel framework, and a lot more. At the same time, we shelter the many extra has you\u2019ll stumble on on each position as well, together with totally free spins, insane signs, enjoy has actually, extra rounds, and moving forward reels to mention but a few. In place of certain web based casinos which need one to obtain more application before you access the variety of harbors, during the Let\u2019s Gamble Ports it is not a requirement. If you wear\u2019t imagine yourself to be an expert regarding online slots games, do not have concern, due to the fact to relax and play totally free harbors toward the web site offers the brand new advantage to earliest discover the amazing bonus enjoys infused towards the for every single slot.<\/p>\n

100 percent free casino games are basically a similar online game that one can enjoy in real-currency web based casinos, however, versus real money involved. When you see a game title you want to stake a real income when you look at the, next browse the casinos beneath the games screen. Less, much easier, and mobile-friendly, HTML-5 has grown to become universal and you may vitality the fresh new video game the truth is into the house windows now. Not so long ago, Thumb was the fresh wade-to tech that casinos on the internet relied to function properly.<\/p>\n","protected":false},"excerpt":{"rendered":"

Known mainly because of their higher level bonus series and you can free spin products, the title Currency Show 2 has been recognized as among the absolute most profitable harbors of the past a decade. A pioneer inside the three- https:\/\/bof-casino-login.nl\/ dimensional gaming, their headings are notable for unique graphics,\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-32532","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/32532","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=32532"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/32532\/revisions"}],"predecessor-version":[{"id":32533,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/32532\/revisions\/32533"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=32532"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=32532"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=32532"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}