/* 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":134918,"date":"2026-05-26T00:49:00","date_gmt":"2026-05-26T00:49:00","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=134918"},"modified":"2026-05-26T00:49:02","modified_gmt":"2026-05-26T00:49:02","slug":"spartans-bitcoin-crypto-game-online-leading-gambling-site","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/spartans-bitcoin-crypto-game-online-leading-gambling-site\/","title":{"rendered":"Spartans: Bitcoin & Crypto Game Online Leading Gambling Site"},"content":{"rendered":"

Such winmasters \u03bc\u03c0\u03cc\u03bd\u03bf\u03c5\u03c2 \u03c7\u03c9\u03c1\u03af\u03c2 \u03ba\u03b1\u03c4\u03ac\u03b8\u03b5\u03c3\u03b7<\/a> bundles is also turbocharge what you owe prompt, however, always compare playthrough laws prior to committing. There are even alternative welcome strategies floating around (as well as big multiple-deposit fits also offers), so look at promotions closely \u2014 certain sales is spread over multiple dumps and you can carry other wagering criteria. That it give is date-sensitive; if you want free step rather than spending a dime, now is as soon as to try it. If you want diversity in the app company, flexible banking options and you can a loyalty road you to perks went on play, the platform gives so much to work with \u2014 just allege also offers on time and you can mind the new terms so you score the most out of all the campaign. For those who aim to take advantage of bonuses and you can tournament step, leveling up in the VIP ladder speeds up productivity and you can unlocks premium award pools.<\/p>\n

At the Spartan Ports, very deposit bonuses is sticky, meaning the advantage in itself isn\u2019t withdrawable which is removed for those who cash out\u2014just your deposit and you can winnings count. Free Play is best here for getting a gamble height you\u2019re also comfortable recurring\u2014as the texture matters to the compact reels. That have 20 paylines and you can bonus mechanics such as Re also-Spin, Icon Stores, and you can Superspin, it\u2019s the kind of game where Free Play helps you know what to expect when has initiate stacking. After you\u2019ve had a popular, exchanging so you can real play is a smoother circulate\u2014because you\u2019re also not guessing any more. For those who\u2019re also experimenting with new features, paylines, or bet models, Free Play will give you room to play ambitious without paying to have the learning curve. At the Spartan Ports Casino, it\u2019s as well as an intelligent solution to know mechanics, place volatility patterns, and determine and that headings in fact fit your design\u2014before you can switch to real-currency spins.<\/p>\n

As for the table game, it looks to play in the a bona fide casino, even after special experience, when talking about Royal Blackjack, Roulette Crystal, Keno, Micro Baccarat, video poker with its five variants such as Deuces and you can Joker, Deuces Crazy, Joker Poker and you can Jacks or Best. The new app streamlines sign-up, dumps, and you can spins for getting to play prompt \u2014 just check out the bonus terms, choose the give that meets your playstyle, and enjoy the list of game available. App diversity mode you\u2019ll find each other easy reel game and feature-steeped videos ports to match other solutions to bonus play.<\/p>\n

Admirers out of skill-based play can choose from half a dozen single- and you can multiple-hand variants, for each spending based on old-fashioned Vegas paytables. Spartan Ports Casino\u2019s mobile version has the brand\u2019s ancient-warrior mood intact when you are allowing players enjoy hundreds of HTML5 headings, live-broker tables and on-the-wade banking. Dean\u2019s solutions spans around the in the-breadth casino reviews, detailed slot analyses, and you can reviews out of top app company, bringing clear and you can entertaining posts tailored so you can each other industry experts and you can casual players. Dean McHugh is a full-date self-employed posts writer specialising on the Sports and you can iGaming markets. Best for spinners and you can slot fans chasing big wins to the mobile.<\/p>\n

Just find your favorite commission approach, enter the details, and you can voila! It\u2019s super fast and you can safe, so you can focus on the fun posts. Just choose from our list of accepted cards, e-wallets if not crypto to get started.<\/p>\n

The new safe banking interface spends advanced encryption tech to protect your financial advice, making sure safe and credible transactions each time you play. Table avid gamers can access some blackjack, roulette, and you can poker variants, when you are specialization game such as scratch cards and you can keno give more entertainment options. Spartan Slots’ instant play platform servers an impressive line of game out of world-top app company as well as NetEnt, Microgaming, Pragmatic Play, and you can Betsoft.<\/p>\n

The new Angler is another Betsoft game that have a good fishing fun theme and the opportunity to reel in the bonuses and enjoy free spins that have a sticky crazy octopus who speeds up winnings much more. More bonuses and you can bells and whistles add free spins, instant random winnings, interactive pressures, and you can game that have progressive jackpots and you can play options. The new live casino games is real-date, real-currency game that have a live broker powering the game.<\/p>\n

An informed casinos partner that have world leaders and give players so much of choice. Spartan Ports deposit bonuses are generally sticky, meaning the advantage count itself is to have wagering which is removed for those who request a withdrawal\u2014your deposit and you can winnings are what you\u2019re also aiming to cash out. After you\u2019re also signed in the and ready to finance your account, the new cashier makes it easy to apply deposit promos. For those who\u2019re also the new and still deciding, you can check the new casino review to the Spartan Ports Mobile Casino prior to doing an account. Every single date i reached out to him or her, i obtained a response within 24 hours, that’s a lot faster than other online casinos i\u2019ve related to historically. It still have room to have upgrade, especially when it comes to its limited banking options and their short group of live casino games.<\/p>\n

Such incidents is mission-designed to prize active players quickly, so mark your calendar and you can act prompt when a tournament goes live. The new welcome give is also reach up to 7,five hundred that have a good 35x wagering requirements, and the bonus being spread over about three dumps affects how fast you could transfer bonus finance so you can withdrawable bucks. To have a full brand comment and to find the app download page, read the Spartan Ports Casino comment and you can visit the app download page to have direct access to the mobile customer. Promotions will be date-sensitive, and you can subscription freebies generally expire quickly, so comment the new app\u2019s campaign details and you can allege window when you first log in. If you love big bonus formations, multiple a way to pay, and you can mobile-optimized gameplay, the new app will bring those people pros with her.<\/p>\n

As well as i can add that this casino post plenty of deposit bonuses that have a good WR as well as other promotions and you can free chips, and i can only aspire to has such as bonuses and you can promotions in the netent or microgaming casinos, as the even after such as a good also offers that it casino continues to be not so good for me. I played in the spartan ports casino three times, and you can after i has enacted withdrawal process i’m obviously choose that this casino written not for me. The site is a scam…i have won some money but they will not pay me…i obtained free spins and then i played much more next dos times and then it took out of me 110 usd and you can leve me that have one hundred that have a narrative I cant cashable him or her..here is my photos that have a chat boy The new casino you will yes play with certain upgrade even if – a much better group of video poker and you can table game would be a start. There are only a handful of such as game to choose from and is pretty clear that they are just there as the a side distraction to have predominately ports players.<\/p>\n","protected":false},"excerpt":{"rendered":"

Such winmasters \u03bc\u03c0\u03cc\u03bd\u03bf\u03c5\u03c2 \u03c7\u03c9\u03c1\u03af\u03c2 \u03ba\u03b1\u03c4\u03ac\u03b8\u03b5\u03c3\u03b7 bundles is also turbocharge what you owe prompt, however, always compare playthrough laws prior to committing. There are even alternative welcome strategies floating around (as well as big multiple-deposit fits also offers), so look at promotions closely \u2014 certain sales is spread over multiple dumps\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-134918","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/134918","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=134918"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/134918\/revisions"}],"predecessor-version":[{"id":134919,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/134918\/revisions\/134919"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=134918"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=134918"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=134918"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}