/* 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":1123,"date":"2025-11-27T21:21:24","date_gmt":"2025-11-27T21:21:24","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=1123"},"modified":"2025-12-10T19:01:55","modified_gmt":"2025-12-10T19:01:55","slug":"parimatch-online-review-testbericht","status":"publish","type":"post","link":"https:\/\/klecet.edu.in\/alumni\/parimatch-online-review-testbericht\/","title":{"rendered":"Parimatch online Review & Testbericht"},"content":{"rendered":"

Parimatch online Review & Testbericht<\/p>\n

Parimatch online: Funktiounen Analysebericht <\/h1>\n

\nEt g\u00ebtt Plattformen, d\u00e9i een s\u00e9ier test, an et g\u00ebtt Plattformen, d\u00e9i ee gradlinneg kennel\u00e9iere muss. Parimatch Luxembourg<\/strong> f\u00e4llt kloer an d\u00e9i zweet Kategorie. D\u00e9i \u00e9ischt Impressioun ass dacks grafesch, \u2013 e neutral Interface, e rouege Faarfcode, a vill Informatiounen, d\u00e9i awer erstaunlech net iwwerfuerdert erstellt. Wat awer wierklech opf\u00e4llt, ass de Versuch, sech un d\u2019Erwaardungen vun engem klengen, mee technologesch oppe Maart w\u00e9i L\u00ebtzebuerg entgegenzekommen. <\/p>\n

\nD \u2019 Land ass keen typesche Gaming-Maart: d\u2019Populatioun ass kleng, international, a gewinnt un h\u00e9ich Qualit\u00e9it an digital Effizienz. An do position\u00e9iert sech Parimatch op eng interessant Man\u00e9ier. Et ass net n\u00ebmmen eng Plattform d\u00e9i Servicer ubitt, mee \u00e9ischter eng digital Struktur, d\u00e9i prob\u00e9iert esou transparent w\u00e9i m\u00e9iglech ze gewinnen. Doj\u00e9nger geh\u00e9iert och eng transparent Navigatioun an eng Rei Features, d\u00e9i net onbed\u00e9ngt spektakul\u00e4r sinn, mee einfach effizient. <\/p>\n

\n\u00c9ischt Kontakt mat Parimatch Luxembourg: w\u00e9i wierkt et?
\n<\/h2>\n

\nWann een d\u2019Webs\u00e4it oder d\u2019App fir d\u2019\u00e9ischt opm\u00e9cht, ass dat \u00e9ischt Gefill \u00e9ischter bal minimal \u2013 an dat ass eigentlech positiv. Keng Reklammebl\u00e9nker, keen l\u00e4steg Fensteren, just eng Iwwersiicht mat Rubriken d\u00e9i einfach organis\u00e9iert sinn. Dat passt perfekt zu L\u00ebtzebuerg, wou d\u2019Leit \u00e9ischter Eleganz an Einfachheet virz\u00e9ien. <\/p>\n

\nD\u2019Login-Prozedur geet an engem Minimum u Schr\u00ebtt Dat ass wichteg, well vill Residenten \u2013 virun allem d\u00e9i, d\u00e9i berufflech vill beweegen \u2013 w\u00ebllen direkt un hir Pers\u00e9inlech Donn\u00e9e\u00ebn ouni D\u00e9touren a laang Erkl\u00e4rungen zougr\u00e4ifen. D\u2019S\u00e4it erkennt automatesch d’Sprooch vum Browser, mee et bitt och eng manuell Wiel, dor\u00ebnner italienesch http:\/\/news.psu.edu\/story\/285314\/2013\/08\/27\/arts-and-entertainment\/%E2%80%98conversations-penn-state%E2%80%99-season-wraps-beverly<\/a>. D\u00e9i M\u00e9isproochegkeet ass e kloert Pluspunkt, besonnesch an enger Gesellschaft d\u00e9i staark international gepr\u00e4gt ass. <\/p>\n

\nD\u2019App-Experienz am alldeegleche Gebrauch
\n<\/h2>\n

\nD\u2019Parimatch-App fir L\u00ebtzebuerg ass technesch gesinn ganz zouverl\u00e4sseg. Si leeft glat op iOS Ger\u00e4ter a souguer op e puer m\u00e9i ale Android-Ger\u00e4ter onspektakul\u00e4r. D\u2019Interface vun der App ass m\u00e9i kompakt w\u00e9i d\u00e9i vum Browser, mee dat ass net ongew\u00e9inlech fir Mobiloptimis\u00e9ierung. D\u00e9i wichtegst Aktiounen \u2013 Account-Tools, Push-Infos, User-Options \u2013 sinn \u00ebmmer mat zwee oder dr\u00e4i Touchen erreechbar. <\/p>\n

\nEng Saach d\u00e9i mech positiv iwwerrascht huet, ass w\u00e9i s\u00e9ier d\u2019App reag\u00e9iert, wann een t\u00ebscht Aktualis\u00e9ierungen a m\u00e9i statesch Men\u00fcpunkten wiesselt. Vill international Apps hunn hei Verz\u00f6gerungen, mee d\u00ebs hei ass deutlich m\u00e9i s\u00e9ier. Dat heescht net, datt alles perfekt ass. Heiansdo wierkt d\u2019Grafik minimal ze einfach, bal ze rudiment\u00e4r. Mee ech verstinn, datt dat vl\u00e4icht bewosst esou gemaach gouf: e Fokus op d\u2019Funktioun \u00e9ischter w\u00e9i op d\u2019Design. <\/p>\n

\nParimatch L\u00ebtzebuerg vs. aner digitale Offeren <\/h2>\n

\nWat https:\/\/parimatch-lu.com\/<\/a> interessant m\u00e9cht, ass d\u2019Art a Weis w\u00e9i et sech am Verglach mat g\u00e9int aner Wettplattformen position\u00e9iert. Et prob\u00e9iert net d\u00e9i \u201ecoolst\u201c Marke ze sinn, mee \u00e9ischter eng d\u00e9i op Zouverl\u00e4ssegkeet setzt. Dat ass eppes, wat vill L\u00ebtzebuerger ganz gutt fannen. <\/p>\n

\nD\u2019Navigatioun am Online-Bereich ass bemierkensw\u00e4ert einfach. D\u2019Informatiounen aktualis\u00e9iere sech fl\u00e9issend, ouni datt ee muss d\u2019F\u00ebnster nei lueden. Sou kleng technesch Detailer maachen en \u00cbnnerscheed, besonnesch bei Leit, d\u00e9i un digital Perfektioun kompetent am Online-Bereich sinn. <\/p>\n

\nWat ech bemierkensw\u00e4ert fannen, ass datt d\u2019Plattform net prob\u00e9iert aggressiv ze dr\u00e4ngen. Et feelen d\u00e9i gefillten \u201edo musst du elo drop klicken\u201c-Elementer komplett. Dat ass e Respekt fir d\u2019Benotzerautonomie, an ech mengen, dat ass bewosst esou fir de L\u00ebtzebuerger Maart ausgeriicht ginn. <\/p>\n","protected":false},"excerpt":{"rendered":"

Parimatch online Review & Testbericht Parimatch online: Funktiounen Analysebericht Et g\u00ebtt Plattformen, d\u00e9i een s\u00e9ier test, an et g\u00ebtt Plattformen, d\u00e9i ee gradlinneg kennel\u00e9iere muss. Parimatch Luxembourg f\u00e4llt kloer an d\u00e9i zweet Kategorie. D\u00e9i \u00e9ischt Impressioun ass dacks grafesch, \u2013 e neutral Interface, e rouege Faarfcode, a vill Informatiounen, d\u00e9i\u2026<\/p>\n

Continue reading<\/span><\/i><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1123","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/1123","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=1123"}],"version-history":[{"count":1,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/1123\/revisions"}],"predecessor-version":[{"id":1124,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/1123\/revisions\/1124"}],"wp:attachment":[{"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=1123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=1123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=1123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}