/* 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":58308,"date":"2026-05-20T13:52:43","date_gmt":"2026-05-20T13:52:43","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=58308"},"modified":"2026-05-20T13:52:43","modified_gmt":"2026-05-20T13:52:43","slug":"the-latest-ten-most-readily-useful-free-position-programs-best-picks-to-have-android-and-ios","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/the-latest-ten-most-readily-useful-free-position-programs-best-picks-to-have-android-and-ios\/","title":{"rendered":"The latest ten Most readily useful Free Position Programs: Best Picks to have Android and ios"},"content":{"rendered":"

This slot gambling enterprise is always unlock and the slot games never ever neglect to show 777 and bring double Jackpot wins to help you people. Totally free Vegas slots give you the excitement regarding actual online casino games, so play ports free that have extra spins all the time. Discover treasures of Leprechaun’s invisible silver within vagas ports, navigate by way of primitive terrain, and you can spin your way to reach the top of the VIP jackpot gambling enterprise. Each and every day Advantages and you can Unique EventsStay updated having each and every day log in perks and you can private betting incidents where you are able to twice if you don’t triple the winningsin our very own casino apps. Our very own online casino games even offers an abundance of totally free spins, day-after-day incentives, and you will private advantages to store you rotating throughout the day. Climb up this new VIP LeaderboardCompete up against fellow slots followers having a way to most useful the latest VIP leaderboard.<\/p>\n

Whether or not your\u2019lso are tinkering with a dotty bingo app<\/a> special online game or to try out for fun, such element-rich ports submit the step out of a bona-fide gambling enterprise experience. Our very own slots are created having credibility at heart, and that means you\u2019ll become the adventure out-of a genuine money online casino. Having a whole lot to pick from, we understand your\u2019ll find your perfect fairytale excitement. Whether it\u2019s variety your\u2019re trying to find, you\u2019re throughout the best source for information! A remarkable slot machine game with several totally free revolves, big victories, and you will nuts monkeys \ud83d\ude09 ⭐ Lord regarding Olympus.<\/p>\n

They provide the same thrill and you may possibility of huge wins since the the land-oriented counterparts, however with the additional convenience of to experience when, anyplace. Every action happens for the a good 6×6 game grid in which discover a good amount of amazing enjoys, and additionally FS, Top Upwards, Remove Icons, Signs Collection, and. Therefore, if your\u2019re also a newbie otherwise a pro, Tobi\u2019s info will always for the part and simple to adhere to. For many who\u2019re the sort of pro who wants chasing after lifestyle-switching within the-games prizes, Jackpot Learn tend to feel house. The fresh new application possess modern jackpots, mega reels, and you may computers customized generally getting professionals who happen to live to the adrenaline hurry of getting big victories. If or not your\u2019lso are set for small spins otherwise a more longer enjoy session, Regal Spin even offers steady profits and you may low-avoid action.<\/p>\n

You might be wanting to know if you have any area to experience 100 percent free slot games on the web, to possess once you play harbors at zero chance then there’s will be not a way that you can winnings a real income when performing very, and as such you could getting you would be throwing away your big date to relax and play any harbors for free in lieu of to relax and play her or him the real deal money. Except that offering a comprehensive selection of free position online game on the our site, we also provide rewarding details about different sorts of harbors you\u2019ll get in the internet betting business. I strongly recommend which you end the internet sites since they are on purpose made to ripoff your. When you play our group of free slot online game, you don\u2019t must be concerned about providing your own credit card info otherwise people economic guidance, just like the everything on all of our website is completely totally free. This allows participants so you’re able to educated enriched image, amazing animated graphics top quality, and you may superior sound clips without having to install things prior to to play a position game.<\/p>\n

Gambino Ports offers lots of a way to assemble and you may show 100 percent free Coins to have large online casino position online game enjoyable. Are priced between Buffalo ports otherwise classic slots and you can go on to styled slot machines and you may amazing online casino games as you started to high profile! If you want a no obtain requisite experience, then go for mobile browser. Enjoy your preferred slots on the go, if this\u2019s from your own cellphone or pill.<\/p>\n

This website is using a protection services to safeguard alone out of online attacks.<\/p>\n

We\u2019re also disappointed the fresh advertisements become disruptive, specifically throughout game play. Are able to find on your own completely absorbed day long otherwise an excellent online game to relax which have. Fill the fresh pots with gold and possess wonders gains. Win this new like of Zeus as well as the incentive revolves are yours. Limitless an approach to collect Big local casino bonuses.\u2022 The Standing Program perks enough time-big date people which have large incentives. Fool around with all of our filter systems so you’re able to sort by “Current Launches” or take a look at our very own “New Online slots games” area to get the current game.<\/p>\n

All twist offer big perks from the games\u2019s dynamic jackpot system and you will open-concluded bonus systems. The latest interface is simple and you will appealing, to such an extent that new people can certainly enter the brand new step and begin spinning. The game is constantly upgraded which have temporary incidents and you can the fresh new servers, therefore, the experience seems the latest.<\/p>\n

Produced by SpinX Games, Jackpot Break features a healthy band of slots with gorgeous graphics, incredible sounds and you can an user-friendly design you to encourages easy navigation. Plus ports, the video game even offers black-jack, roulette, and you may video poker, providing a lot of options to select. For people who\u2019re also trying to find a fun and easy way to eliminate specific go out, this is actually the video game to you.<\/p>\n

You can even down load which 100 percent free position apps regarding the Google Enjoy Shop if you are using a good Blackberry unit. They\u2019re available and certainly will feel played regarding smartphones or downloaded with very little effort from you. Jackpot Industry Local casino is actually for enjoyment, maybe not real cash playing.<\/p>\n

Whether you’re a professional player seeking talk about brand new titles otherwise an amateur desperate to find out the ropes, Slotspod comes with the prime platform to enhance your gambling trip. To tackle totally free harbors at the Slotspod now offers an unmatched experience that combines activity, education, and you can excitement\u2014all the without any economic partnership. Effortlessly browse all of our slot games list playing with filter systems to have video game form of, theme, and you may seller, or utilize the lookup bar in order to jump directly to the favourites. He including discusses most other various subject areas such as for instance activity, standard sports betting resources, and a lot more. An alternative choice is to try to listed below are some a real income gambling enterprises and you can ports programs.<\/p>\n

With no put gameplay and you can thrilling extra rounds, the experience is definitely with the during the Gambino Harbors! Las vegas ports offer the same locks-elevating excitement and you will super-measurements of wins without the need for take a trip. If or not your\u2019re also a video slot grasp otherwise a beneficial spinner simply getting started, there\u2019s something here for all! Dive into the glitz, glamor, and you can an opportunity for larger victories now! Sales improve the feel however, don\u2019t be certain that gains.<\/p>\n

Except that video harbors, the new gambling establishment provides slot competitions to save its people entertained. For those who\u2019re interested in an alternative gambling establishment, Local casino.com will be your select. Along with, this new gambling establishment brings the online game through the finest casino position programs within the a smart phone.<\/p>\n","protected":false},"excerpt":{"rendered":"

This slot gambling enterprise is always unlock and the slot games never ever neglect to show 777 and bring double Jackpot wins to help you people. Totally free Vegas slots give you the excitement regarding actual online casino games, so play ports free that have extra spins all the time.\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-58308","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/58308","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=58308"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/58308\/revisions"}],"predecessor-version":[{"id":58309,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/58308\/revisions\/58309"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=58308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=58308"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=58308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}