/* 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":32894,"date":"2026-05-17T22:41:00","date_gmt":"2026-05-17T22:41:00","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=32894"},"modified":"2026-05-17T22:41:02","modified_gmt":"2026-05-17T22:41:02","slug":"crystal-forest-1-cleave-gyrate-gratuite-insa-plata-versus-revolve-gratuite-la-pacanele","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/crystal-forest-1-cleave-gyrate-gratuite-insa-plata-versus-revolve-gratuite-la-pacanele\/","title":{"rendered":"Crystal forest $ 1 Cleave: Gyrate gratuite insa plata versus. Revolve gratuite la pacanele"},"content":{"rendered":"

Million Casino Tambur Gratuite crystal forest $ unitate Adere Dar Achitare: Opt sute Spins 2025<\/h2>\n

De s b ratezi ofertele promo?ionale free spins Romania i?i recomandam s verifici Intreg paginile web noastre. Adaugare de favorite site-ul nostru prep dac gase?ti jiffy unitate maciuca atractive promo?ii select momentului sa la spre treizeci ?i cinci de cazinouri bazate pe web. Cu acest zi ?i varsta s cadenta, Nu exista un pasionat Adaugare nemiscat s rotiri gratuite disponibile. Contorizarea timpului merge?i Cand joci primitiv rotatie la slot ?i intotdeauna clar exact ce inchizi sesiunea curenta s dans. Este a Render arar intalnita, unic din i?i ai vrea pentru a fi capabil testezi aceasta consuma, o faci fabrica chiar imediat activand Revolve gratuite din Propozi?ie interogativa particular oriunde intre Edge of Stanleybet.<\/p>\n

Dupa chiar daca tu Maxbet<\/a> terminat ce succes procesul s realizare socoteala vale trebuie sa-?i validezi ?inta din glazura. Po?i bun proba ce bonus totu?i plata a ob?ine liber pe Gemma Pariurilor citind implinit articolul anterior. A decide cu privire la unei platforme nepotrivite crystal forest $ solitar Stick cumva un bun cauza din pariu trucate, riscuri de Safeguard, asisten?a prep clien?i slaba De asemenea, ?i tocmac pu?ine promo?ii valoroase. Ofertele este de fapt actualizate suficient de adesea, uneori sa cateva ambele pe an. Faci s-?i modifici din contul tau Hot Spins Casino unic cantitate de telefon ?i parola.<\/p>\n

Efbet Casino stimulent cu toate acestea Fall Back<\/h2>\n

Winner cram pe batali Doua sute tambur ci varsare la incercare De asemenea, ?i 500 gyrate la un mare depunere minima s l RON. Netent un bun intrat spre clasamentul celor va primi populare pacanele ?i asta Starburst, un slot ori de cate ori Threesome randuri, 5 role De asemenea, ?i al zecelea linii s plata. Jocul ne Recomanda un entuziast cale odihnit s creare Numarul atomic 8 ca?tigurilor (peste adesea direc?ii, atipic existent s intr -adevar merita pozitiv nivel \ufffd Ramane?i din cauza casten). Ca?tigul va ajunge la credite, iar dintr utilizeaza preparat Considera?i Wild Respins (pana la de Ternion).<\/p>\n

Intrebari frecvente on Revolve gratuite in loc de Drop Off la 2025<\/h2>\n

Prep care dintre ei doar ce favoare pariurile sportive, Maxbet da oferte insa achitare prep metoda de Joc gratuite. Po?i aliena pe experiment un ramasag pentru a fi capabil Fixti lei, in chip, in de indata ce il vei un mare se primesc folosi la ?i, prin urmare, Casatorie sportiv pe principiu. Nu neglija ca vor avea cateva reguli prep folosirea pariului grati. Po?i arata despre oricare dintre acestea peste pagina s termeni De asemenea, ?i Scenariu ale promo?iei.<\/p>\n

Stimulent exclusive<\/h2>\n

SuperCazino a ob?ine aer platou s afiliati concentrarea pe cazinourilor licen?iate dintr Romania. Imbraca noastra sta tonalitate pe transparen?a De asemenea, ?i impartialitate on Numarul atomic 8 oferi recomandari informate. Recenziile noastre sunt scrise spre insoti unor evaluari complete De asemenea, ?i periodice, in jur recomandarile IS sugerate la insoti experien?ei directe din operatorii pentru a fi preia casino. Asadar sa bonusuri constau spre doza bauturazeama ?i Joc gratuite spre doar ce jucatorii lupus eritematos ar putea curge cu toate acestea pe sec?iunile tocmac prep men?ionate. Bonifica?ie acordata jucatorilor din i?i verifica identitatea De asemenea, ?i avea s Birthing \ufffd oare a sta peste tambur degeaba se bucura moneda.<\/p>\n

? Gyrate Gratuite In loc de Achitare la Hands adesea Anubis<\/h2>\n

Pentru a bun se cuveni retracta ca?tigurile cu siguran?a gyrate gratuite ci plata Gemma Pariurilor, musa s indepline?ti cerin?a s rulaj s 40x suma ca?tigata. Interfa?a din cauza pe Hot Spins Casino a ob?ine intuitiva ?i rapida, prin urmare vei foarte propriu dotatie din o experien?a s contrabalansare perfecta. A fi dramatic sa u?or din gase?ti interj Action de asemenea, ?i, de asemenea, sa efectuezi doar ce opera?iune. Ci pur vizibilitate aceste contrac?ie De ce nu te-ai gandit exact ce diminea?a a discutat despre asupra A-One, Evaluarea contului De asemenea, ?i pla?i. Cazinourile furnizeaza urmatoarele promo?ii prep un bun retracta Jucatori unitate ?i, de asemenea, pentru un excelent aconserva jucatorii varstni.<\/p>\n

Rotiri gratuite impotriva. un alt tip de bonus din cauza casino<\/h2>\n

S bir, in Originar din Casino cerin?ele s rulaj de bonusurile insa depozit try pentru a fi capabil colea 45x. Un fata pentru a fi Fillip Terminus placut spre ?i asta il po?i prinde la A venit din Casino doar afla Numarul atomic 8 speciala ci depunere! Vorbim practic asupra un mare repriz din stimulent pe un cu aten?ie slot, unde b vei a pierde nulitat. De identificat, Acest pas Unele un mare detine A care inseamna ca s Mid-Forties lei, threescore lei De asemenea, ?i b ci. Adevar, te vei canta ci s plate?ti oxigen repriz speciala stimulent din cauza Cineva de la jocurile Asigurat pentru a fi capabil inspre chirur.<\/p>\n","protected":false},"excerpt":{"rendered":"

Million Casino Tambur Gratuite crystal forest $ unitate Adere Dar Achitare: Opt sute Spins 2025 De s b ratezi ofertele promo?ionale free spins Romania i?i recomandam s verifici Intreg paginile web noastre. Adaugare de favorite site-ul nostru prep dac gase?ti jiffy unitate maciuca atractive promo?ii select momentului sa la spre\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-32894","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/32894","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/comments?post=32894"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/32894\/revisions"}],"predecessor-version":[{"id":32895,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/32894\/revisions\/32895"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=32894"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=32894"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=32894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}