'blockstrap', 'output_types' => array( 'block', 'shortcode' ), 'block-icon' => 'fas fa-stop', 'block-category' => 'layout', 'block-keywords' => "['button','nav','icon']", 'block-wrap' => '', 'block-supports' => array( 'customClassName' => false, ), 'block-edit-return' => "el('span', wp.blockEditor.useBlockProps({ dangerouslySetInnerHTML: {__html: onChangeContent()}, style: {'minHeight': '30px'}, className: '', }))", 'class_name' => __CLASS__, 'base_id' => 'bs_button', 'name' => __( 'BS > Button', 'blockstrap' ), 'widget_ops' => array( 'classname' => 'bs-button', 'description' => esc_html__( 'A bootstrap button, badge or iconbox.', 'blockstrap' ), ), 'example' => array( 'attributes' => array( 'after_text' => 'Earth', ), ), 'no_wrap' => true, 'block_group_tabs' => array( 'content' => array( 'groups' => array( __( 'Link', 'blockstrap' ) ), 'tab' => array( 'title' => __( 'Content', 'blockstrap' ), 'key' => 'bs_tab_content', 'tabs_open' => true, 'open' => true, 'class' => 'text-center flex-fill d-flex justify-content-center', ), ), 'styles' => array( 'groups' => array( __( 'Button', 'blockstrap' ), __( 'Typography', 'blockstrap' ) ), 'tab' => array( 'title' => __( 'Styles', 'blockstrap' ), 'key' => 'bs_tab_styles', 'tabs_open' => true, 'open' => true, 'class' => 'text-center flex-fill d-flex justify-content-center', ), ), 'advanced' => array( 'groups' => array( __( 'Wrapper Styles', 'blockstrap' ), __( 'Advanced', 'blockstrap' ) ), 'tab' => array( 'title' => __( 'Advanced', 'blockstrap' ), 'key' => 'bs_tab_advanced', 'tabs_open' => true, 'open' => true, 'class' => 'text-center flex-fill d-flex justify-content-center', ), ), ), ); parent::__construct( $options ); } /** * Set the arguments later. * * @return array */ public function set_arguments() { $arguments = array(); $arguments['type'] = array( 'type' => 'select', 'title' => __( 'Link Type', 'blockstrap' ), 'options' => $this->link_types(), 'default' => 'home', 'desc_tip' => true, 'group' => __( 'Link', 'blockstrap' ), ); $arguments['page_id'] = array( 'type' => 'select', 'title' => __( 'Page', 'blockstrap' ), 'options' => $this->get_pages_array(), 'placeholder' => __( 'Select Page', 'blockstrap' ), 'default' => '', 'desc_tip' => true, 'group' => __( 'Link', 'blockstrap' ), 'element_require' => '[%type%]=="page"', ); $arguments['post_id'] = array( 'type' => 'number', 'title' => __( 'Post ID', 'blockstrap' ), 'placeholder' => 123, 'default' => '', 'desc_tip' => true, 'group' => __( 'Link', 'blockstrap' ), 'element_require' => '[%type%]=="post-id"', ); $arguments['custom_url'] = array( 'type' => 'text', 'title' => __( 'Custom URL', 'blockstrap' ), 'desc' => __( 'Add custom link URL', 'blockstrap' ), 'placeholder' => __( 'https://example.com', 'blockstrap' ), 'default' => '', 'desc_tip' => true, 'group' => __( 'Link', 'blockstrap' ), 'element_require' => '[%type%]=="custom"', ); $arguments['text'] = array( 'type' => 'text', 'title' => __( 'Link Text', 'blockstrap' ), 'desc' => __( 'Add custom link text or leave blank for dynamic', 'blockstrap' ), 'placeholder' => __( 'Home', 'blockstrap' ), 'default' => '', 'desc_tip' => true, 'group' => __( 'Link', 'blockstrap' ), ); $arguments['icon_class'] = array( 'type' => 'text', 'title' => __( 'Icon class', 'blockstrap' ), 'desc' => __( 'Enter a font awesome icon class.', 'blockstrap' ), 'placeholder' => __( 'fas fa-ship', 'blockstrap' ), 'default' => '', 'desc_tip' => true, 'group' => __( 'Link', 'blockstrap' ), ); $arguments['icon_position'] = array( 'type' => 'select', 'title' => __( 'Icon position', 'blockstrap' ), 'options' => array( 'left' => __( 'Left', 'blockstrap' ), 'right' => __( 'right', 'blockstrap' ), ), 'default' => '', 'desc_tip' => true, 'group' => __( 'Link', 'blockstrap' ), 'element_require' => '[%icon_class%]!=""', ); // button styles $arguments['link_type'] = array( 'type' => 'select', 'title' => __( 'Link style', 'blockstrap' ), 'options' => array( '' => __( 'None', 'blockstrap' ), 'btn' => __( 'Button', 'blockstrap' ), 'btn-round' => __( 'Button rounded', 'blockstrap' ), 'iconbox' => __( 'Iconbox bordered', 'blockstrap' ), 'iconbox-fill' => __( 'Iconbox filled', 'blockstrap' ), 'badge' => __( 'Badge', 'blockstrap' ), 'badge-pill' => __( 'Pill Badge', 'blockstrap' ), ), 'default' => 'btn', 'desc_tip' => true, 'group' => __( 'Button', 'blockstrap' ), ); $arguments['link_size'] = array( 'type' => 'select', 'title' => __( 'Size', 'blockstrap' ), 'options' => array( '' => __( 'Default', 'blockstrap' ), 'small' => __( 'Small', 'blockstrap' ), 'medium' => __( 'Medium', 'blockstrap' ), 'large' => __( 'Large', 'blockstrap' ), ), 'default' => '', 'desc_tip' => true, 'group' => __( 'Button', 'blockstrap' ), 'element_require' => '[%link_type%]!="badge" && [%link_type%]!="badge-pill"', ); $arguments['badge_size_notice'] = array( 'type' => 'notice', 'desc' => __( 'Badge size is inherited from the parent text size', 'blockstrap' ), 'status' => 'info', 'group' => __( 'Button', 'blockstrap' ), 'element_require' => '([%link_type%]=="badge" || [%link_type%]=="badge-pill")', ); $arguments['link_bg'] = array( 'title' => __( 'Color', 'blockstrap' ), 'type' => 'select', 'options' => array( '' => __( 'Default (primary)', 'blockstrap' ), ) + sd_aui_colors( true, true, true ), 'default' => 'primary', 'desc_tip' => true, 'advanced' => false, 'group' => __( 'Button', 'blockstrap' ), 'element_require' => '[%link_type%]!="iconbox"', 'tab' => array( 'title' => __( 'Normal', 'blockstrap' ), 'key' => 'button_normal', 'tabs_open' => true, 'open' => true, 'class' => 'text-center w-50 d-flex justify-content-center', ), ); $arguments['text_color'] = sd_get_text_color_input( 'text_color', array( 'group' => __( 'Button', 'blockstrap' ), 'tab' => array( 'close' => true, ), ) ); $arguments['link_bg_hover'] = array( 'title' => __( 'Color', 'blockstrap' ), 'type' => 'select', 'options' => array( '' => __( 'Default (primary)', 'blockstrap' ), ) + sd_aui_colors( true, true, true ), 'default' => 'primary', 'desc_tip' => true, 'advanced' => false, 'group' => __( 'Button', 'blockstrap' ), 'element_require' => '[%link_type%]!="iconbox"', 'tab' => array( 'title' => __( 'Hover', 'blockstrap' ), 'key' => 'button_hover', 'open' => true, 'class' => 'text-center w-50 d-flex justify-content-center', ), ); // text color $arguments['text_color_hover'] = sd_get_text_color_input( 'text_color', array( 'group' => __( 'Button', 'blockstrap' ), 'tab' => array( 'close' => true, 'tabs_close' => true, ), ) ); // Typography // custom font size $arguments['font_size_custom'] = sd_get_font_custom_size_input(); // font weight. $arguments['font_weight'] = sd_get_font_weight_input(); // font case $arguments['font_case'] = sd_get_font_case_input(); // margins mobile $arguments['mt'] = sd_get_margin_input( 'mt', array( 'device_type' => 'Mobile' ) ); $arguments['mr'] = sd_get_margin_input( 'mr', array( 'device_type' => 'Mobile' ) ); $arguments['mb'] = sd_get_margin_input( 'mb', array( 'device_type' => 'Mobile' ) ); $arguments['ml'] = sd_get_margin_input( 'ml', array( 'device_type' => 'Mobile' ) ); // margins tablet $arguments['mt_md'] = sd_get_margin_input( 'mt', array( 'device_type' => 'Tablet' ) ); $arguments['mr_md'] = sd_get_margin_input( 'mr', array( 'device_type' => 'Tablet' ) ); $arguments['mb_md'] = sd_get_margin_input( 'mb', array( 'device_type' => 'Tablet' ) ); $arguments['ml_md'] = sd_get_margin_input( 'ml', array( 'device_type' => 'Tablet' ) ); // margins desktop $arguments['mt_lg'] = sd_get_margin_input( 'mt', array( 'device_type' => 'Desktop' ) ); $arguments['mr_lg'] = sd_get_margin_input( 'mr', array( 'device_type' => 'Desktop' ) ); $arguments['mb_lg'] = sd_get_margin_input( 'mb', array( 'device_type' => 'Desktop' ) ); $arguments['ml_lg'] = sd_get_margin_input( 'ml', array( 'device_type' => 'Desktop' ) ); // padding $arguments['pt'] = sd_get_padding_input( 'pt', array( 'device_type' => 'Mobile' ) ); $arguments['pr'] = sd_get_padding_input( 'pr', array( 'device_type' => 'Mobile' ) ); $arguments['pb'] = sd_get_padding_input( 'pb', array( 'device_type' => 'Mobile' ) ); $arguments['pl'] = sd_get_padding_input( 'pl', array( 'device_type' => 'Mobile' ) ); // padding tablet $arguments['pt_md'] = sd_get_padding_input( 'pt', array( 'device_type' => 'Tablet' ) ); $arguments['pr_md'] = sd_get_padding_input( 'pr', array( 'device_type' => 'Tablet' ) ); $arguments['pb_md'] = sd_get_padding_input( 'pb', array( 'device_type' => 'Tablet' ) ); $arguments['pl_md'] = sd_get_padding_input( 'pl', array( 'device_type' => 'Tablet' ) ); // padding desktop $arguments['pt_lg'] = sd_get_padding_input( 'pt', array( 'device_type' => 'Desktop' ) ); $arguments['pr_lg'] = sd_get_padding_input( 'pr', array( 'device_type' => 'Desktop' ) ); $arguments['pb_lg'] = sd_get_padding_input( 'pb', array( 'device_type' => 'Desktop' ) ); $arguments['pl_lg'] = sd_get_padding_input( 'pl', array( 'device_type' => 'Desktop' ) ); // border $arguments['border'] = sd_get_border_input( 'border' ); $arguments['rounded'] = sd_get_border_input( 'rounded' ); $arguments['rounded_size'] = sd_get_border_input( 'rounded_size' ); // shadow $arguments['shadow'] = sd_get_shadow_input( 'shadow' ); $arguments['css_class'] = sd_get_class_input(); return $arguments; } public function link_types() { $links = array( 'home' => __( 'Home', 'blockstrap' ), 'none' => __( 'None (non link)', 'blockstrap' ), 'page' => __( 'Page', 'blockstrap' ), 'post-id' => __( 'Post ID', 'blockstrap' ), 'custom' => __( 'Custom URL', 'blockstrap' ), ); if ( defined( 'GEODIRECTORY_VERSION' ) ) { $post_types = geodir_get_posttypes( 'options-plural' ); $links['gd_search'] = __( 'GD Search', 'blockstrap' ); $links['gd_location'] = __( 'GD Location', 'blockstrap' ); foreach ( $post_types as $cpt => $cpt_name ) { /* translators: Custom Post Type name. */ $links[ $cpt ] = sprintf( __( '%s (archive)', 'blockstrap' ), $cpt_name ); /* translators: Custom Post Type name. */ $links[ 'add_' . $cpt ] = sprintf( __( '%s (add listing)', 'blockstrap' ), $cpt_name ); } } return $links; } public function get_pages_array() { $options = array( '' => __( 'Select Page', 'blockstrap' ) ); $pages = get_pages(); if ( ! empty( $pages ) ) { foreach ( $pages as $page ) { if ( $page->post_title ) { $options[ $page->ID ] = esc_attr( $page->post_title ); } } } return $options; } /** * This is the output function for the widget, shortcode and block (front end). * * @param array $args The arguments values. * @param array $widget_args The widget arguments when used. * @param string $content The shortcode content argument * * @return string */ public function output( $args = array(), $widget_args = array(), $content = '' ) { $tag = 'a'; $link = '#'; $link_text = ''; if ( 'none' === $args['type'] ) { $tag = 'span'; } elseif ( 'home' === $args['type'] ) { $link = get_home_url(); $link_text = __( 'Home', 'blockstrap' ); } elseif ( 'page' === $args['type'] || 'post-id' === $args['type'] ) { $page_id = ! empty( $args['page_id'] ) ? absint( $args['page_id'] ) : 0; $post_id = ! empty( $args['post_id'] ) ? absint( $args['post_id'] ) : 0; $id = 'page' === $args['type'] ? $page_id : $post_id; if ( $id ) { $page = get_post( $id ); if ( ! empty( $page->post_title ) ) { $link = get_permalink( $id ); $link_text = esc_attr( $page->post_title ); } } } elseif ( 'custom' === $args['type'] ) { $link = ! empty( $args['custom_url'] ) ? esc_url_raw( $args['custom_url'] ) : '#'; $link_text = __( 'Custom', 'blockstrap' ); } elseif ( 'gd_search' === $args['type'] ) { $link = function_exists( 'geodir_search_page_base_url' ) ? geodir_search_page_base_url() : '#'; $link_text = __( 'Search', 'blockstrap' ); } elseif ( 'gd_location' === $args['type'] ) { $link = function_exists( 'geodir_location_page_id' ) ? get_permalink( geodir_location_page_id() ) : '#'; $link_text = __( 'Location', 'blockstrap' ); } elseif ( substr( $args['type'], 0, 3 ) === 'gd_' ) { $post_types = function_exists( 'geodir_get_posttypes' ) ? geodir_get_posttypes( 'options-plural' ) : ''; if ( ! empty( $post_types ) ) { foreach ( $post_types as $cpt => $cpt_name ) { if ( $cpt === $args['type'] ) { $link = get_post_type_archive_link( $cpt ); $link_text = $cpt_name; } } } } elseif ( substr( $args['type'], 0, 7 ) === 'add_gd_' ) { $post_types = function_exists( 'geodir_get_posttypes' ) ? geodir_get_posttypes( 'options' ) : ''; if ( ! empty( $post_types ) ) { foreach ( $post_types as $cpt => $cpt_name ) { if ( 'add_' . $cpt === $args['type'] ) { $link = function_exists( 'geodir_add_listing_page_url' ) ? geodir_add_listing_page_url( $cpt ) : ''; /* translators: Custom Post Type name. */ $link_text = sprintf( __( 'Add %s', 'blockstrap' ), $cpt_name ); } } } } // maybe set custom link text $link_text = ! empty( $args['text'] ) ? esc_attr( $args['text'] ) : $link_text; // link type $link_class = 'nav-link'; if ( ! empty( $args['link_type'] ) ) { if ( 'btn' === $args['link_type'] ) { $link_class = 'btn'; } elseif ( 'btn-round' === $args['link_type'] ) { $link_class = 'btn btn-round'; } elseif ( 'iconbox' === $args['link_type'] ) { $link_class = 'iconbox rounded-circle'; } elseif ( 'iconbox-fill' === $args['link_type'] ) { $link_class = 'iconbox fill rounded-circle'; } elseif ( 'badge' === $args['link_type'] ) { $link_class = 'badge'; } elseif ( 'badge-pill' === $args['link_type'] ) { $link_class = 'badge badge-pill'; } // colour prefix if ( 'btn' === $args['link_type'] || 'btn-round' === $args['link_type'] ) { $link_class .= ' btn-' . sanitize_html_class( $args['link_bg'] ); if ( 'small' === $args['link_size'] ) { $link_class .= ' btn-sm'; } elseif ( 'large' === $args['link_size'] ) { $link_class .= ' btn-lg'; } } elseif ( 'badge' === $args['link_type'] || 'badge-pill' === $args['link_type'] ) { $link_class .= ' badge-' . sanitize_html_class( $args['link_bg'] ); } else { $link_class .= 'iconbox-fill' === $args['link_type'] ? ' btn-' . sanitize_html_class( $args['link_bg'] ) : ''; if ( empty( $args['link_size'] ) || 'small' === $args['link_size'] ) { $link_class .= ' iconsmall'; } elseif ( 'medium' === $args['link_size'] ) { $link_class .= ' iconmedium'; } elseif ( 'large' === $args['link_size'] ) { $link_class .= ' iconlarge'; } } } if ( ! empty( $args['text_color'] ) ) { $link_class .= ' text-' . esc_attr( $args['text_color'] ); } if ( ! empty( $args['css_class'] ) ) { $link_class .= ' ' . sd_sanitize_html_classes( $args['css_class'] ); } $icon_left = ''; $icon_right = ''; if ( ! empty( $args['icon_class'] ) ) { // remove default text if icon exists. if ( empty( $args['text'] ) ) { $link_text = ''; } if ( 'right' === $args['icon_position'] ) { $icon_right = ! empty( $link_text ) ? '' : ''; } else { $icon_left = ! empty( $link_text ) ? '' : ''; } } $wrap_class = sd_build_aui_class( $args ); // if a button add form-inline // if ( ! empty( $args['link_type'] ) ) { // $wrap_class .= ' form-inline'; // } $href = 'a' === $tag ? 'href="' . esc_url_raw( $link ) . '"' : ''; if ( $this->is_preview() ) { $href = '';//'href="#"'; } $styles = sd_build_aui_styles( $args ); $style = $styles ? 'style="' . $styles . '"' : ''; return $link_text || $icon_left || $icon_right ? '<' . esc_attr( $tag ) . ' ' . $style . ' ' . $href . ' class="' . esc_attr( $link_class ) . ' ' . esc_attr( $wrap_class ) . '">' . $icon_left . esc_attr( $link_text ) . $icon_right . ' ' : ''; // shortcode } } // register it. add_action( 'widgets_init', function () { register_widget( 'BlockStrap_Widget_Button' ); } );