/* 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":133449,"date":"2026-05-25T20:37:29","date_gmt":"2026-05-25T20:37:29","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=133449"},"modified":"2026-05-25T20:37:30","modified_gmt":"2026-05-25T20:37:30","slug":"play-jackpot-ports-online-fifty-free-spins","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/play-jackpot-ports-online-fifty-free-spins\/","title":{"rendered":"Play Jackpot Ports Online fifty Free Spins"},"content":{"rendered":"

Ports Betovo GR<\/a> Magic Mobile Casino is well designed and you can outlined, so it is, hence, so easy to use. Ports Magic Casino also offers a different mix of online slots, vintage casino table game, and you can a wide range of live broker casino games to give all the type of gambler the leader out of online games. WR out of 30x Deposit + Bonus count and you can 60x Spin winnings count (just Ports count) in this 30 days. Step to the probably one of the most dear casino sites one of players in the uk, offering the latest casino games and you can a whopping welcome bonus.<\/p>\n

Crack da Bank Again is a good 5-reel, 9-line slot game that takes the original design and you can cranks it up to eleven, giving a sparkling and you can smart gambling feel. Fire and you can Roses Joker™ also offers easy gameplay, high image, and you can fun has. In a nutshell, you\u2019ll find everything you need to know, prefer, and enjoy online slots at the Jackpot City with confidence.<\/p>\n

Step to the delightful world of “Comedy Ports,” a sequence filled with bright, humorous templates designed to tickle your love and you can potentially your purse. When selecting ports by the theme, you\u2019re also not only to play\u2014you\u2019re creating your novel thrill. They provide mythology, adventures, and you can novel storylines you won\u2019t find anywhere else.<\/p>\n

With various templates and you can exciting has, you\u2019ll find plenty of game to choose from. All the withdrawal requests would be subject to a processing lifetime of up to two days, and you can from there eWallet will get commission in a single – two days, credit\/debit cards in two – five days, and you can bank transmits in the about three-one week. The new design is very comparable and has all the same game, such as the free-to-play mode, Progressive Ports, Live Broker game, and you can promotions. WR out of 30x Deposit + Bonus count and you can 60x Free Spin winnings count (just Ports count) in this 30 days. Gather generous casino bonuses and try your hand at the to play the new popular buffalo ports server.The most a great vintage virtual-mobile casino slot machines are only a faucet away.<\/p>\n

⭐ Over 100 free slot machines that have the new casino ports put out each week! No matter where you are taking the new casino Jackpot Madness ports app, you\u2019ll feel the thrill out of gambling step to play free ports online. Get the be out of a bona fide online casino, to play real casino ports and you can sensing the true Vegas casino atmosphere without any risk of real money gambling – you\u2019ll love Jackpot Madness Ports free online ports game! Jackpot Madness Ports will bring exciting slot machines and you can big casino winnings at the you – a vegas casino feel in hand! Get your step 3,one hundred thousand,one hundred thousand bonus gold coins and enjoy a range of online casino slot server game that have fun micro game!<\/p>\n

Book out of Dead by the Play\u2019n Wade takes you deep to the ancient Egypt together with the adventurous explorer Steeped Wilde. With her, i have picked some of our favourite online slots, that you\u2019ll find lower than, reflecting what we very liked on the to play him or her. This gives our team out of ports pros novel knowledge, enabling me to share our legitimate thoughts and opinions based on gameplay, has, RTP prices and you can volatility.<\/p>\n

step 3 Oaks shines for its highly identifiable \u201cstep 3 Containers\u201d series, a grip-and-win format that has become a staple around the sweepstakes casino lobbies. You to solid marketing consolidation \u2014 along with unstable, feature-steeped gameplay \u2014 helps Playson look after outsized profile than the a number of other sweeps-focused company. They\u2019re also such as visible to the major sweeps platforms such as Crown Gold coins and you can McLuck, where it actively participate in networked jackpots and you can recurring award incidents.<\/p>\n

The new mobile type of the new casino looks and feels nearly identical to the desktop version, that’s good news for those who are intimidated by the servers. Jackpot Magic Ports has a ton of bonus has that can help bettors to maximize its winnings. Giving plenty of high-quality ports, that it casino is made for someone looking to a fun and you can exciting gambling feel. This includes plenty of grand branded headings such as the wildly popular “Netent rocks” series you to saw a threesome out of ports written according to the iconic music out of Guns n Roses, Jimi Hendrix, and you can Motorhead. But not, when you are its table game and you can live casino offerings is each other popular, the true mark is in the ever-expanding portfolio out of Netent slots. NetEnt’s portfolio incorporates realistic image and you can generous return to player percentages that make play as the interesting that you can.<\/p>\n

The new dropping Avalanche Reels structure and you can ascending multipliers keep all the spin impression dynamic, filled with potential combinations. I love how all the bonus bullet feels like a lucky fishing trip, and how you to high hook can change what you. The new hopeful theme and easy but really fulfilling gameplay make it easy to love.<\/p>\n

If you want to get the be out of to play at the a good brick and mortar casino, and have a supplier then the live casino games is a good prime options. If you want to feel the magic, it is the right time to register at the Magical Vegas and enjoy a magical feel. Sign up now and you can talk about our society of five,one hundred thousand casino games as well as the new jackpot ports added per month! Anybody can play all your Red Tiger favourites and still get in that have a shot out of successful a progressive jackpot. You to spin to the epic progressive jackpot ports such as Cleopatra or its famous Wolf Work on slot will make you a millionaire!<\/p>\n

The new responsive design matches very well to the desktops and you can mobile phones the same bringing uniform performance around the windows. Performance stand entirely random thanks to official RNG solutions promising objective consequences. The new casino sets in itself apart to the Romanian industry with its mix of game diversity and you can service quality.<\/p>\n

Looking for the new ports and features is as simple as staying those people slot reels spinning. All the free ports that have free spins or other bonuses is also be played to the multiple Android and ios mobile phones, as well as mobile phones and you can tablets. I feel such as I’m in the Vegas getting the lifetime of my life.<\/p>\n

Barcrest is a vendor you to specializes in giving high-quality image and you can voice in its casino games. If you think uncomfortable on the one aspect of a casino\u2019s protection rules, you can also prefer another one. Below are the main reasons players prefer that it ports casino, for each giving something novel. Our stand alone platform lets players feel the privilege out of a top gambling feel thanks to high-quality image and you can eye-catching patterns. Our easy-to-navigate site makes it a good doddle to find and start watching a favourite bingo game. And you can, with our easy-to-play with site, looking for and you can to play a favourite game is a good doddle.<\/p>\n

It has earned solid trust one of players thanks to clear operations and you can top-notch security features as well as SSL encryption and you can KYC process. The platform works less than full court compliance in the Romania with all required licences. Magic Jackpot Casino shines as more than just an online gambling platform. Our registered platform welcomes the new players that have a generous bonus out of up to \u00a3five hundred next to free spins. For each subscription tend to automatically replenish three days until the expiration date for the same time period. I have been to play BF casino for around 7 years to the some other device and i uninstalled it cuatro weeks ago.<\/p>\n","protected":false},"excerpt":{"rendered":"

Ports Betovo GR Magic Mobile Casino is well designed and you can outlined, so it is, hence, so easy to use. Ports Magic Casino also offers a different mix of online slots, vintage casino table game, and you can a wide range of live broker casino games to give all\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-133449","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/133449","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=133449"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/133449\/revisions"}],"predecessor-version":[{"id":133450,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/133449\/revisions\/133450"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=133449"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=133449"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=133449"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}