/* 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":141458,"date":"2026-06-12T08:50:18","date_gmt":"2026-06-12T08:50:18","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=141458"},"modified":"2026-06-12T08:50:18","modified_gmt":"2026-06-12T08:50:18","slug":"unike-arrangementer-bare-crystalroll-casino-organiserer-medlemsmter-i-norge","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/unike-arrangementer-bare-crystalroll-casino-organiserer-medlemsmter-i-norge\/","title":{"rendered":"Unike arrangementer: Bare CrystalRoll Casino organiserer medlemsm\u00f8ter i Norge"},"content":{"rendered":"
\n\"Best<\/p>\n

Vi i CrystalRoll Casino setter v\u00e5re norske spillere mye. Derfor har vi bestandig hatt et \u00f8nske om \u00e5 m\u00f8te dere bortenfor skjermen ogs\u00e5. De fleste casinoer treffer dere kun p\u00e5 nett, men vi har en egen tradisjon med ekte sammenkomster. Faktisk er vi de eksklusive som stadig arrangerer reelle medlemsarrangementer i Norge. Disse m\u00f8tene feirer ikke bare god aktivitet. De er en mulighet til \u00e5 skape et fellesskap, h\u00f8re hva dere mener direkte, og vise takknemlighet til de som hjelper oss. Her f\u00e5r du en ekte titt bak kulissene. Vi forteller hva disse hendelsene egentlig er, hvordan de skjer, og hvorfor de har blitt s\u00e5 ettertraktede blant v\u00e5re dedikerte medlemmer. Alt fra hvem som blir bedt til den grundige planleggingen som gj\u00f8r hvert minutt minneverdig \u00e5 huske.<\/p>\n

En s\u00e6regen tradisjon i norsk casinobransje<\/h2>\n

I en bransje fylt med algoritmer og automatiske prosesser, kan det menneskelige aspektet forsvinne. Det var grunnen til at vi begynte med fysiske m\u00f8ter for flere \u00e5r siden. Ideen var klar: vi ville fange engasjementet og gleden fra nettet og omdanne dem til noe fysisk og uforglemmelig. Andre operat\u00f8rer fokuserer kanskje bare om bonuser og spilleautomater. For oss er relasjonen til spillerne avgj\u00f8rende. Disse samlingene er v\u00e5r takkemiddag. De har beveget seg fra \u00e5 v\u00e6re en id\u00e9 til \u00e5 bli en sentral del av hvem vi er. Ingen andre benytter tid og penger p\u00e5 denne typen direkte kontakt i Norge. Det demonstrerer v\u00e5r engasjement i det norske markedet og at vi vil v\u00e6re mer enn et navn i en spillmeny. Denne prioriteringen skiller oss fra resten. Den viser at vi ser p\u00e5 spillerne v\u00e5re som personer, ikke bare brukerkontoer. Tradisjonen har satt sitt preg hele m\u00e5ten vi driver virksomhet p\u00e5.<\/p>\n

Hvordan f\u00e5r du invitasjon til et s\u00e6rskilt m\u00f8te?<\/h2>\n

Innbydelsene er, som du skj\u00f8nner, s\u00e6regne. De grunnes p\u00e5 flere forskjellige ting. Vi \u00f8nsker \u00e5 ha med et mangfold av v\u00e5re trofaste medlemmer. Det som er mest avgj\u00f8rende er deltakelse og trofasthet over utstrakt tid. Det indikerer ikke at den som omsetter mest penger per definisjon f\u00e5r innbydelse. Vi vurderer hele helheten. Medlemmer som er aktive i diskusjonsgruppene v\u00e5re, som gir oss nyttige innspill, eller som har spilt hos oss i mange \u00e5r, har alle en mulighet. Du f\u00e5r invitasjonen p\u00e5 e-post eller som en melding i din brukerkonto, med alle praktiske informasjoner. La oss v\u00e6re helt klare: du beh\u00f8ver ikke deponere penger eller trappe opp spillingen din for \u00e5 v\u00e6re med. Disse kveldene er v\u00e5r gave til deg, en takknemlighet for at du er med. For \u00e5 v\u00e6re rettvise har vi en begrenset gruppe som vurderer gjestelisten f\u00f8r hvert enkelt m\u00f8te. P\u00e5 den metoden sikrer vi et mangfoldig og interessant f\u00f8lge som gj\u00f8r kvelden bedre for alle.<\/p>\n

Slik planlegger det ideelle arrangementet<\/h2>\n

Planleggingen starter flere m\u00e5neder f\u00f8r den aktuelle dagen. Til \u00e5 begynne med skaffer vi et lokale som har riktig beliggenhet, atmosf\u00e6re og standard. Deretter holder vi p\u00e5 med invitasjonslisten for \u00e5 f\u00e5 en fin blanding av mennesker. M\u00e5ltidet bestemmes med omhu, som regel med lokale sesongvarer, og vi passer p\u00e5 alternativer for de med bestemt diett. P\u00e5 selve dagen er teamet v\u00e5rt p\u00e5 plass lenge f\u00f8r gjestene kommer, for \u00e5 bekrefte at alt er som det skal. V\u00e5r overbevisning er at detaljene utgj\u00f8r opplevelsen. Samtlige elementer fra den innledende hilsenen til den beskjedne avskjedsgaven har betydning. Vi har som m\u00e5l at hvert \u00f8yeblikk skal kjennes verdifullt, og at alle skal dra hjem med et smil og en f\u00f8lelse av \u00e5 ha blitt lyttet til. For \u00e5 opprettholde kvaliteten h\u00f8y anvender vi alltid denne listen:<\/p>\n

    \n
  1. Utvelgelse av tema og konsept, basert p\u00e5 \u00e5rstid og hva medlemmene liker.<\/li>\n
  2. Jakt og booking av et velegnet og s\u00e6rpreget lokale.<\/li>\n
  3. Samarbeid med kj\u00f8kken eller catering om en spesiallaget meny, inkludert allergivennlige valg.<\/li>\n
  4. Sammensetning av en invitasjonsliste som gir et livlig og innbydende gjesteselskap.<\/li>\n
  5. Forberedelse av informasjon og aktuelle overraskelser til gjestene.<\/li>\n
  6. En avsluttende gjennomgang av programmet med alle ansatte rett f\u00f8r start.<\/li>\n<\/ol>\n

    Hva kan du forvente deg n\u00e5r du deltar?<\/h2>\n

    N\u00e5r du kommer, treffer du det vennlige ansiktet til CrystalRoll-teamet. Det er sammensatt av norsk\u00e6ttede og globale ansatte, fra kundeservice til ledelsen. Milj\u00f8et er stadig behagelig, omtenksom og opptatt av god dialog. Du har sjansen til \u00e5 m\u00f8te andre spillere fra hele landet, dele tips og kanskje f\u00e5 nye kamerater. Hyppig viser vi et lite blikk inn i casinoets fremtidsutsikter, h\u00f8rer p\u00e5 dine ideer, og av og til r\u00f8per vi noe som n\u00e6rmer seg. M\u00e5ltider og drikkevarer er ordnet, og vi har styr p\u00e5 de logistiske punktene. Forvent ingen salgsfremst\u00f8t eller p\u00e5trykk. Denne kvelden handler kun om \u00e5 slappe av i hyggelig lag og erfare noe vi \u00f8nsker du husker. Et vanlig m\u00f8te starter med en velkomstdrink og litt sosialisering. S\u00e5 setter vi oss til middagsbordet for en flerretters middag, der vi har blandet setene for at alle skal f\u00e5 prate med nye mennesker.<\/p>\n

    Hvilke slags arrangementer organiserer vi?<\/h2>\n

    \"bitcoin<\/p>\n

    V\u00e5re medlemsm\u00f8ter skal v\u00e6re varierte, sosiale og trivelige https:\/\/crystalroll-casino.eu\/no-no\/<\/a>. De inneholder aldri gambling, for vekten ligger p\u00e5 sosialt samv\u00e6r og personlig kontakt. Vanligvis byr vi inn til eksklusive middager p\u00e5 finere spisesteder, med mat i s\u00e6rklasse og hyggelig samv\u00e6r. Vi tilbyr ogs\u00e5 sightseeing-turer eller andre hendelser som matcher tiden p\u00e5 \u00e5ret, kanskje en tur p\u00e5 julemarked eller en b\u00e5ttur om om sommeren. Innimellom er det mindre formelle treff med en forfriskning og noe \u00e5 bite i, der praten og tilbakemeldingene st\u00e5r i fokus. Alle arrangement forberedes grundig for at hver og en skal trives og ha det fint. Oppsettet endrer seg for \u00e5 passe til forskjellige \u00f8nsker. En h\u00f8stmiddag kan handle om norsk viltmat, mens et v\u00e5rsamling kanskje finner sted p\u00e5 en trivelig kafeteria med blikk over fjorden.<\/p>\n