/* 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":154880,"date":"2026-06-15T04:03:38","date_gmt":"2026-06-15T04:03:38","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=154880"},"modified":"2026-06-15T04:03:38","modified_gmt":"2026-06-15T04:03:38","slug":"kasino-spinjoy","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/kasino-spinjoy\/","title":{"rendered":"Spelsamlingen p\u00e5 Spinjoy Casino f\u00f6r svenska spelare"},"content":{"rendered":"
\n\"JILI\"<\/p>\n

Hej till Spinjoy Casino, en spelplattform utformad f\u00f6r svenska entusiaster. H\u00e4r st\u00e5r spelbiblioteket i centrum. Det \u00e4r en levande samling av de b\u00e4sta spelen, utvalda f\u00f6r att tillfredsst\u00e4lla smaken hos spelare i Sverige. Det r\u00f6r sig inte bara om spel, utan om en hel v\u00e4rld av sp\u00e4nning d\u00e4r varje klick kan bli n\u00e4sta stora vinst eller en spelrunda du minns. Vi vill presentera ett brett, intressant och s\u00e4kert utbud som hela tiden \u00f6kar med nya titlar och eviga klassiker. L\u00e5t oss presentera vad som g\u00f6r Spinjoys spelbibliotek till en bra plats f\u00f6r svenska spelare som letar efter kvalitet, variation och rent spelgl\u00e4dje.<\/p>\n

En v\u00e4rld av spel: Presentation \u00f6ver v\u00e5rt bibliotek<\/h2>\n

Spinjoy Casinos spelbibliotek \u00e4r skapat f\u00f6r att ge intryck. Vi vill vara det givna valet f\u00f6r svenska spelare genom att kombinera stort utbud med h\u00f6g kvalitet. Tusentals titlar finns tillg\u00e4ngliga, och varje m\u00e5nad kommer nya spel fr\u00e5n ledande leverant\u00f6rer till. Eftersom spelare har olika smak \u00e4r v\u00e5rt bibliotek uppdelat i tydliga kategorier. Det g\u00f6r det l\u00e4tt att hitta precis det du vill ha, vare sig det \u00e4r ett snabbt slots-spinn eller ett bordsspel som kr\u00e4ver taktik. M\u00e5ngsidighet \u00e4r viktigt, och vi kan erbjuda allt fr\u00e5n grafiskt imponerande video slots till \u00e4kta live dealer-spel, alla anpassade f\u00f6r spel i Sverige.<\/p>\n

Det \u00e4r simpelt att hitta runt i v\u00e5rt bibliotek. Du kan bl\u00e4ddra efter kategori, s\u00f6ka direkt p\u00e5 ett spelnamn eller titta p\u00e5 v\u00e5ra listor f\u00f6r “Nya spel”, “Popul\u00e4ra just nu” och “Spelares favoriter”. Varje spel har en egen sida med information om regler, funktioner och utbetalningar. Vi vill att du ska veta vad du ger dig in i innan du b\u00f6rjar. Oavsett om du spelat l\u00e4nge eller precis b\u00f6rjat, finns det n\u00e5got f\u00f6r dig i Spinjoys v\u00e4lfyllda spelv\u00e4rld.<\/p>\n

Slots Galore: Allt fr\u00e5n klassiker till nutida videoslots<\/h2>\n

Enarmade banditerna \u00e4r utan tvekan stj\u00e4rnan h\u00e4r p\u00e5 Spinjoy. Vi har brett sortiment som innefattar alla teman och spelstilar du kan dr\u00f6mma om. \u00c4r du f\u00f6rtjust i de klassiska fruktsymbolerna och st\u00e4mplarna? V\u00e5ra traditionella slots med en enkel spelupplevelse erbjuder en nostalgisk k\u00e4nsla. Den som vill ha mer fart och nyt\u00e4nkande \u00e4r v\u00e5rt urval av nutida videoslots storslaget.<\/p>\n

Megaways™ och Beyond: Innovativa spelmekaniker<\/h3>\n

Vi har ett brett sortiment av spel med nya spelmekaniker. H\u00e4r har vi de v\u00e4lk\u00e4nda Megaways™-slotsen, d\u00e4r antalet vinstlinjer kan komma upp i hundratusentals p\u00e5 en enda snurr. Sp\u00e4nningen \u00e4r p\u00e5 topp. Vi har \u00e4ven spel med kaskadande symboler, utvidgande wilds, klusterutbetalningar och multi-v\u00e4g-vinstsystem. Dessa inslag skapar varje omg\u00e5ng till en dynamisk h\u00e4ndelse d\u00e4r bonusinslag och h\u00f6ga multiplikatorer kan utl\u00f6sas n\u00e4r som helst.<\/p>\n

Bonusar och Jackpottar som f\u00e5r hj\u00e4rtat att sl\u00e5 snabbare<\/h3>\n

Bonusomg\u00e5ngarna \u00e4r ofta det b\u00e4sta spinjoy<\/a> med en slot. Hos Spinjoy har vi spel med gratis spins, “pick-and-click”-bonusar, interaktiva minispel och progressiva jackpottar som stiger f\u00f6r varje spelomg\u00e5ng. De progressiva jackpottarna \u00e4r extra h\u00e4ftiga. De kan komma upp i enorma summor, och ett enda lyckosamt snurr kan \u00e4ndra allt. Om du f\u00f6redrar spel med h\u00f6g volatilitet och h\u00f6g vinstpotential, eller spel med l\u00e4gre risk och frekventa sm\u00e5vinster, har vi n\u00e5got som passar din stil och budget.<\/p>\n

Traditionella bordsspel: Blackjack, Roulette & Baccarat<\/h2>\n

F\u00f6r dig som uppskattar spelplanering, klassisk k\u00e4nsla och k\u00e4nslan av ett \u00e4kta kasinobord blir v\u00e5ra traditionella bordsspel sv\u00e5ra att \u00f6vertr\u00e4ffa. P\u00e5 Spinjoy Casino vet vi att svenskar vill ha autentiska spel med f\u00f6rm\u00e5nliga odds, och det \u00e4r vad vi levererar. V\u00e5rt sortiment best\u00e5r av virtuella versioner av dina favoritspel, med klara regler, mjuka animationer och chans att spela i din egen takt. Det \u00e4r ett perfekt s\u00e4tt att \u00f6va din strategi eller bara njuta av spelets elegans.<\/p>\n