/* 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":139810,"date":"2026-06-09T09:19:54","date_gmt":"2026-06-09T09:19:54","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=139810"},"modified":"2026-06-09T09:19:54","modified_gmt":"2026-06-09T09:19:54","slug":"possu-casino-2026-mitae-uutta-pelaajalle","status":"publish","type":"post","link":"https:\/\/klecet.edu.in\/alumni\/possu-casino-2026-mitae-uutta-pelaajalle\/","title":{"rendered":"Possu Casino 2026: Mit\u00e4 uutta pelaajalle?"},"content":{"rendered":"
\n

Miten Possu Casino rakentaa luottamusta uusien pelaajien keskuudessa<\/h2>\n

Ensivaikutelma possu kasino<\/a> Casinosta muodostuu pelkistetyst\u00e4, mutta v\u00e4rikk\u00e4\u00e4st\u00e4 ilmeest\u00e4, jonka tavoitteena on tehd\u00e4 pelaamisesta nautittavaa ilman tarpeetonta v\u00e4kivahvistusta. Turvallisuus ja l\u00e4pin\u00e4kyvyys on integroitu osaksi k\u00e4ytt\u00e4j\u00e4polkua, joten visuaaliset ohjeet ja varmuuskopiot l\u00f6ytyv\u00e4t helposti. Pelattavien vaihtoehtojen monipuolisuus ei ole vain pintapuolista, vaan se perustuu k\u00e4ytett\u00e4viss\u00e4 olevaan sis\u00e4lt\u00f6\u00f6n ja sen saavutettavuuteen.<\/p>\n

K\u00e4ytt\u00e4j\u00e4kohtainen l\u00e4hestyminen korostuu jo alkumetreill\u00e4: sivuston rakenne ja valikot suunnitellaan siten, ett\u00e4 navigointi on loogista. T\u00e4m\u00e4 n\u00e4kyy sek\u00e4 pelien l\u00f6ytyvyydess\u00e4 ett\u00e4 tilin hallinnan aloittamisessa. T\u00e4m\u00e4n seurauksena uusi pelaaja tuntee saavansa apua juuri siin\u00e4 vaiheessa, kun sit\u00e4 tarvitsee.<\/p>\n

Mobiiliyst\u00e4v\u00e4llisyys on nykyajan olennaista, ja Possu Casino pyrkii takaamaan saumattoman k\u00e4ytt\u00f6kokemuksen sek\u00e4 puhelimella ett\u00e4 tabletilla. Responsiivinen suunnittelu varmistaa, ett\u00e4 navigointi, pelien l\u00f6yt\u00e4minen ja talletusten hallinta toimivat moitteettomasti pienell\u00e4kin n\u00e4yt\u00f6ll\u00e4. Pelaaja voi nauttia saumattomasta siirtym\u00e4st\u00e4 kotisohvalta tien p\u00e4\u00e4ll\u00e4 suoraan pelien pariin.<\/p>\n

Mets\u00e4stet\u00e4\u00e4n nopeaa p\u00e4\u00e4sy\u00e4 peleihin<\/h2>\n

K\u00e4ytt\u00f6liittym\u00e4 pyrit\u00e4\u00e4n pit\u00e4m\u00e4\u00e4n mutkattomana: navigointi on loogista ja etsinty\u00f6kaluilla pelien l\u00f6yt\u00e4minen sujuu. T\u00e4m\u00e4 v\u00e4hent\u00e4\u00e4 turhaa aikaa ja parantaa pelikokemusta.<\/p>\n

Mobiilikokemus on esill\u00e4, ja se n\u00e4kyy responsiivisena suunnitteluna. K\u00e4ytt\u00e4j\u00e4 voi pelata sujuvasti \u00e4lypuhelimella tai tabletilla ilman erillist\u00e4 sovellusta. T\u00e4m\u00e4 sujuvuus helpottaa pelaamista liikkuvassa arjessa ja parantaa yleist\u00e4 tyytyv\u00e4isyytt\u00e4.<\/p>\n

Tilin hallinta antaa k\u00e4ytt\u00e4j\u00e4lle kontrollin omaan pelikokemukseen. Profiilin asetukset, turvallisuusty\u00f6kalut sek\u00e4 rahaliikenteen seuranta ovat keskitetysti saatavilla. N\u00e4in pelaaja voi hallita sek\u00e4 tilin turvallisuutta ett\u00e4 pelikertojen m\u00e4\u00e4r\u00e4\u00e4.<\/p>\n

Pelaamisen vastuullisuusn\u00e4k\u00f6kulma<\/h2>\n

Turvallisuus ja vastuu: ty\u00f6kalut auttavat pelaajia pysym\u00e4\u00e4n hallinnassa ja tekem\u00e4\u00e4n harkittuja valintoja<\/p>\n

Soveltuvuus riippuu pelaajasta: ne, jotka arvostavat suomalaista l\u00e4hestymistapaa ja selke\u00e4\u00e4 ulkoasua, voivat l\u00f6yt\u00e4\u00e4 t\u00e4st\u00e4 alustasta paljon.<\/p>\n

Kenelle: soveltuu erityisesti niille, jotka arvostavat helppoutta, vastuullisuutta sek\u00e4 nopeaa p\u00e4\u00e4sy\u00e4 peleihin.<\/p>\n\n\n\n
Ominaisuus<\/th>\nTiedot<\/th>\n<\/tr>\n
K\u00e4ytt\u00f6liittym\u00e4<\/td>\nSelke\u00e4 ja responsiivinen<\/td>\n<\/tr>\n<\/table>\n

Miten vastuullinen pelaaminen kannattaa toteuttaa k\u00e4yt\u00e4nn\u00f6ss\u00e4<\/h2>\n

Turvallisuusn\u00e4k\u00f6kohdat: miten voit varmistaa, ett\u00e4 pelaaminen on vastuullista ja turvallista?<\/p>\n

Kokonaisvaltainen vastaus: aloita maltillisesti ja tutustu ensin perustoimintoihin<\/p>\n

Miten aloittaa ja mit\u00e4 tulee huomioida ensimm\u00e4isell\u00e4 kerralla, kun l\u00e4htee pelaamaan?<\/p>\n

Explore the casino today and remember to set your gaming limits before starting.<\/p>\n

Kannustamme vastuulliseen pelaamiseen ja tarjolla on tuki ongelmapelaamisen ehk\u00e4isyss\u00e4.<\/em><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"

Miten Possu Casino rakentaa luottamusta uusien pelaajien keskuudessa Ensivaikutelma possu kasino Casinosta muodostuu pelkistetyst\u00e4, mutta v\u00e4rikk\u00e4\u00e4st\u00e4 ilmeest\u00e4, jonka tavoitteena on tehd\u00e4 pelaamisesta nautittavaa ilman tarpeetonta v\u00e4kivahvistusta. Turvallisuus ja l\u00e4pin\u00e4kyvyys on integroitu osaksi k\u00e4ytt\u00e4j\u00e4polkua, joten visuaaliset ohjeet ja varmuuskopiot l\u00f6ytyv\u00e4t helposti. Pelattavien vaihtoehtojen monipuolisuus ei ole vain pintapuolista, vaan se perustuu\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-139810","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/139810","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/comments?post=139810"}],"version-history":[{"count":1,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/139810\/revisions"}],"predecessor-version":[{"id":139811,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/139810\/revisions\/139811"}],"wp:attachment":[{"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=139810"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=139810"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=139810"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}