/* 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":140790,"date":"2026-06-11T01:51:44","date_gmt":"2026-06-11T01:51:44","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=140790"},"modified":"2026-06-11T01:51:44","modified_gmt":"2026-06-11T01:51:44","slug":"spinsy-casino-tilbyr-sikker-gaming-og-store-uttak-for-norge","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/spinsy-casino-tilbyr-sikker-gaming-og-store-uttak-for-norge\/","title":{"rendered":"Spinsy Casino Tilbyr Sikker Gaming og Store Uttak for Norge"},"content":{"rendered":"
\n\"The<\/p>\n

\u00c5 oppdage et casino som virkes trygt imens det skaper spenning, er en utfordring mange norske spillere opplever https:\/\/sspinsy.net\/no-no\/<\/a>. Spinsy Casino har klart \u00e5 bli et popul\u00e6rt valg akkurat ved \u00e5 besvare den. De gir et stort spillbibliotek, flotte bonuser og tar bevisst spilling p\u00e5 alvor. Dette etablerer et milj\u00f8 der du kan slappe av og konsentrere p\u00e5 moroa. Jeg observerer at de har satt seg inn det norske markedet, med l\u00f8sninger som gj\u00f8r det lett \u00e5 spille fra Norge. Denne guiden tar deg med igjennom alt Spinsy har \u00e5 by p\u00e5, fra det f\u00f8rste registreringssteget til \u00e5 ta ut premie, slik at du kan ta kloke valg.<\/p>\n

P\u00e5litelige Transaksjoner: Depositum og Uttak i Norge<\/h2>\n

\u00c5 sende penger til og fra et casino skal v\u00e6re lett og sikkert. Spinsy Casino har flere betalingsm\u00e5ter som norske spillere anvender. Du kan anvende bankkort (Visa\/Mastercard), e-lommeb\u00f8ker som MuchBetter og EcoPayz, eller vanlig bankoverf\u00f8ring. En \u00e5penbar styrke er benyttelsen av SSL-kryptering, som beskytter alle dine betalingsdata. N\u00e5r du skal ta ut penger, er prosedyren enkel: du g\u00e5r til kassa, selekterer metode, fyller inn bel\u00f8p og godkjenner. De fleste uttak blir h\u00e5ndtert av casinoet innen en dag, men den faktiske tiden pengene er p\u00e5 kontoen din avhenger p\u00e5 betalingsleverand\u00f8ren. En helt verifisert konto er et krav f\u00f8r ditt f\u00f8rste uttak.<\/p>\n

Spinsy p\u00e5 mobilen: Spill Uansett Sted<\/h2>\n

En moderne spilleside m\u00e5 opptre like bra p\u00e5 mobilen som p\u00e5 maskinen. Spinsy Casino har en hjemmeside som er utviklet for mobil. Den virker direkte i leseren, uten at du beh\u00f8ver \u00e5 installere noen app. Det betyr at du kan f\u00e5 tilgang til kontoen din, f\u00e5 bonuser, legge inn penger og spille spill hvor du oppholder deg, s\u00e5 sant du har internett. Designet er utformet den mindre skjermen, med brukervennlige menyer og knapper som er enkle \u00e5 ber\u00f8re. Enten du er p\u00e5 vei til jobb, tar en kaffepause eller hviler hjemme, er alt kasinoet tilgjengelig med et lett tastetrykk. Denne tilpasningsevnen er noe jeg egentlig ikke hadde vert foruten.<\/p>\n

En Sikker Begynnelse: P\u00e5melding og Godkjenning p\u00e5 Spinsy<\/h2>\n

F\u00f8rste inntrykk spiller stor vekt. Hos Spinsy er det lett og sikkert \u00e5 sette i gang. Du fyller ut et par felt, og s\u00e5 kan du starte \u00e5 finne dine favorittspill. For \u00e5 ivareta alle betalinger og bekrefte at spilleren er myndig, utf\u00f8res alle kontoer en bekreftelsessjekk. Du m\u00e5 laste inn et gyldig ID-bevis, for eksempel som pass, og en adressebevis. Dette standard hos anerkjente selskaper, og det er faktisk en garanti for trygghet for deg. Det beviser at casinoet tar tryggheten p\u00e5 alvorlig og overholder reglene.<\/p>\n

Slik Oppretter du Konto<\/h3>\n

Opprettelsen varer kun et par minutter. Du trenger en e-postadresse, et profilnavn og et godt passord. Mitt r\u00e5d er \u00e5 velge et passord du ikke bruker andre steder. Etter at du har samtykket til reglene og bekreftet eposten din, er du i m\u00e5l. Pass p\u00e5 at du oppgir riktig navn og dato for f\u00f8dsel i profilen din. Denne informasjonen m\u00e5 matche med dokumentene du leverer senere. En presis profil bidrar til ogs\u00e5 bonusutbetaling og uttak av penger mye raskere.<\/p>\n

Sentrale Papirer for Bekreftelse<\/h4>\n

For \u00e5 slippe forsinkelser b\u00f8r du forberede f\u00f8lgende papirer klare: et offisielt ID-kort med bilde, en nylig faktura som viser din adresse (fortrinnsvis ikke gammel enn tre m\u00e5neder), og av og til en godkjenning for debetkortet ditt. \u00c5 forberede dette p\u00e5 forh\u00e5nd sparer deg for mye venting n\u00e5r du skal ta ut penger for f\u00f8rste gang. Spinsy behandler dokumentene dine privat og smidig, slik at du oppn\u00e5r full tilgang til alle muligheter uten overfl\u00f8dig ventetid.<\/p>\n

Bonusprogrammer og Kampanjer Tilpasset for Norske Spillere<\/h2>\n

Spinsy Casino vet hvordan de skal gi nye spillere en god innledning, og de tenker p\u00e5 de som allerede er med der. Velkomstbonusen er som regel en helhet som gjelder flere av dine f\u00f8rste innbetalinger. Det skaper mer spilletid og flere sjanser. Det er viktig \u00e5 gjennomg\u00e5 vilk\u00e5rene og betingelsene (V&V) omhyggelig, spesielt seksjonen om omsetningskrav. Disse reglene forteller deg hvor mange ganger du m\u00e5 omsette bonusen f\u00f8r du kan hente ut eventuelle vinster. Spinsy har ogs\u00e5 jevnlige tilbud, som gratisspinn, nye innbetalingsbonuser og turneringer. For meg i Norge er det lurt \u00e5 verifisere at kampanjene virkelig fungerer for spillere fra Norge, noe Spinsy som vanligvis s\u00f8rger for.<\/p>\n

Innsikt i Omsetningskrav<\/h3>\n

\u00c5 forst\u00e5 omsetningskrav er viktig for \u00e5 ha det bra med en bonus. La oss anta du f\u00e5r en 100% bonus opp til 1000 kroner, med et vilk\u00e5r p\u00e5 30x. Da m\u00e5 du satse det kombinerte bel\u00f8pet (ditt eget innskudd pluss bonusen) 30 omganger. Regnestykket blir: (1000 + 1000) * 30 = 60 000 kroner i total spillomsetning. Det h\u00f8res mye ut, men husk at hvert spillrunde du deltar i beregnes med. Vanlige spillautomater regnes som vanligvis for 100% av hvert satset bel\u00f8p, mens bordspill ofte regnes med en mye mindre prosent. Se alltid spillbidragstabellen i V&V for \u00e5 f\u00e5 vite hvor mye som regnes.<\/p>\n

Ansvarlig spilling og Kundest\u00f8tte<\/h2>\n

Et skikkelig casino prioriterer spillerens helse. Spinsy Casino har et klart engasjement for spilleansvar, noe jeg ser p\u00e5 som er viktig. P\u00e5 nettsiden finnes det praktiske verkt\u00f8y som hjelper deg \u00e5 holde kontrollen. Du kan for eksempel bestemme grenser for hvor mye du setter inn, taper eller spiller per dag, uke eller m\u00e5ned. Du kan ogs\u00e5 be om en pause fra spillingen. Dersom spillet skulle bli utfordrende \u00e5 styre, er disse funksjonene til betydelig hjelp. Brukerst\u00f8tten er ogs\u00e5 der for \u00e5 besvare sp\u00f8rsm\u00e5l. De har som regel live chat og epost, og teamet er b\u00e5de kompetente og vennlige. En god kundeservice er et sikkert tegn p\u00e5 et casino som bryr seg om sine brukere.<\/p>\n

Et Stort Utvalg av Underholdning: Spillbiblioteket p\u00e5 Spinsy<\/h2>\n

Spinsy Casino har bredt spillutvalg fra mange av de beste leverand\u00f8rene i bransjen. Enten du er liker tradisjonelle slots, utfordrende bordspill som blackjack, eller den livlige atmosf\u00e6ren i live casino, oppdager en som passer. Jeg synes at spilleautomater er lett \u00e5 navigere \u2013 du kan filtrere etter leverand\u00f8rer som NetEnt, Play’n GO og Pragmatic Play, eller bla gjennom forskjellige tema. En rekke spill har ogs\u00e5 en “spill for moro”-funksjon. Den er ypperlig for \u00e5 til \u00e5 pr\u00f8ve et spill og l\u00e6re seg reglene f\u00f8r setter inn <\/p>\n