Skip to:
Content

BuddyPress.org

Ticket #7226: 7226-05.patch

File 7226-05.patch, 7.6 KB (added by hnla, 3 years ago)

Minor adjustments, data attr esc_html.

  • src/bp-core/classes/class-bp-button.php

     
    3333 *                                          Default: ''.
    3434 *     @type string      $wrapper_class     Optional. DOM class of the button wrapper
    3535 *                                          element. Default: ''.
     36 *     @type string      $li_class          Optional: Available if $wrapper set to ul & li elements created
     37 *                                          Default: ''.
     38 *     @type string      $element           Optional. The type of element to use e.g 'anchor', 'button'
     39 *                                          Default: 'anchor'.
     40 *     @type string      $button_type       Optional. Set the button type i.e like input types
     41 *                                          Defaults to 'button' [type="button"] can be 'submit' [type="submit"]
     42 *     @type string      $button_name       Optional: Button 'name' value - if type == 'submit'.
     43 *     @type string      $button_value      Optional: Button 'value' value - if type == 'submit'.
    3644 *     @type string      $link_href         Optional. Destination link of the button.
    3745 *                                          Default: ''.
     46 *     @type string      $data_attr         Optional. Allow a data attributte to be set. e.g 'data-bp-buttons=""'
     47 *                                          Default: ''.
    3848 *     @type string      $link_class        Optional. DOM class of the button. Default: ''.
    3949 *     @type string      $link_id           Optional. DOM ID of the button. Default: ''.
    4050 *     @type string      $link_rel          Optional. DOM 'rel' attribute of the button.
     
    8292        /**
    8393         * The type of DOM element to use for a wrapper.
    8494         *
    85          * @var string|bool 'div', 'span', 'p', 'li', or false for no wrapper.
     95         * @var string|bool 'div', 'li',  'p', 'span' or false for no wrapper.
    8696         */
    8797        public $wrapper = 'div';
    8898
     
    100110         */
    101111        public $wrapper_id = '';
    102112
     113        /**
     114         * The DOM class of li child elements the wrapper as a ul.
     115         *
     116         * @var string
     117         */
     118
     119        public $li_class = '';
     120
    103121        /** Button ****************************************************************/
    104122
    105123        /**
     124        * The node element type type i.e. a true '<button>' element or '<a>' anchor:
     125        * 'button', 'anchor'
     126        *
     127        * @var string
     128        */
     129        public $element = 'anchor';
     130
     131        /**
     132        * The button elements type i.e. 'submit', 'button'.
     133        *
     134        *
     135        * @var string
     136        */
     137        public $button_type = 'button';
     138
     139        /**
     140        * The button elements name attr i.e. 'name=""'.
     141        *
     142        *
     143        * @var string
     144        */
     145        public $button_name = '';
     146
     147        /**
     148        * The button elements value attr i.e. 'value=""'.
     149        *
     150        *
     151        * @var string
     152        */
     153        public $button_value = '';
     154
     155
     156        /**
    106157         * The destination link of the button.
    107158         *
    108159         * @var string
     
    138189        public $link_title = '';
    139190
    140191        /**
     192         * A data attribute.
     193         *
     194         * @var string
     195         */
     196        public $data_attr = '';
     197
     198        /**
    141199         * The contents of the button link.
    142200         *
    143201         * @var string
     
    202260                // Wrapper properties.
    203261                if ( false !== $this->wrapper ) {
    204262
     263                /**
     264                        * Currently BP does not provide for a wrapping group element, templates
     265                        * would need to provide the  parent wrapper in the template if li
     266                        * specified as wrapper.
     267                        */
     268
     269                /**
     270                        * If 'li' is set for $wrapper we'll create
     271                        * & add class tokens if args not empty.
     272                        */
     273                        if( 'li' == $this->wrapper ) {
     274                                if( !empty( $r['li_class'] ) ) $this->li_class = ' class="' . $r['li_class'] . '"';
     275                        }
     276
    205277                        // Wrapper ID.
    206278                        if ( !empty( $r['wrapper_id'] ) ) {
    207                                 $this->wrapper_id    = ' id="' . $r['wrapper_id'] . '"';
     279                                $this->wrapper_id  = ' id="' . $r['wrapper_id'] . '"';
    208280                        }
    209281
    210282                        // Wrapper class.
    211                         if ( !empty( $r['wrapper_class'] ) ) {
    212                                 $this->wrapper_class = ' class="generic-button ' . $r['wrapper_class'] . '"';
     283                        if ( !empty( $r['wrapper_class'] ) && 'li' !== $this->wrapper ) {
     284                                                $this->wrapper_class = ' class="generic-button ' . $r['wrapper_class'] . '"';
     285                        } elseif( 'li' == $this->wrapper ) {
     286                                                if( !empty( $r['li_class'] ) ) $this->wrapper_class = ' class="generic-button ' . $r['li_class'] . '"';
    213287                        } else {
    214288                                $this->wrapper_class = ' class="generic-button"';
    215289                        }
    216290
    217291                        // Set before and after.
    218                         $before = '<' . $r['wrapper'] . $this->wrapper_class . $this->wrapper_id . '>';
     292                        // Include 'li' elements if wrapper = 'ul'
     293                        $before = '<'  . $r['wrapper'] . $this->wrapper_class . $this->wrapper_id . '>';
    219294                        $after  = '</' . $r['wrapper'] . '>';
    220295
    221296                // No wrapper.
     
    223298                        $before = $after = '';
    224299                }
    225300
    226                 // Link properties.
     301
     302                // Link/Button  properties.
     303                //if ( !empty( $r['element']    ) ) $this->element    =
     304                if ( !empty( $r['button_type']  )  && 'button' == $r['element'] ) $this->button_type = ' type="' . $r['button_type'] . '"';
     305                if ( !empty( $r['button_name']  )  && 'button' == $r['element'] && 'submit' == $r['button_type'] ) $this->button_name = ' name="' . $r['button_name'] . '"';
     306                if ( !empty( $r['button_value'] )  && 'button' == $r['element'] && 'submit' == $r['button_type'] ) $this->button_value = ' value="' . $r['button_value'] . '"';
    227307                if ( !empty( $r['link_id']    ) ) $this->link_id    = ' id="' .    $r['link_id']    . '"';
     308                // No href if we're a button please!
    228309                if ( !empty( $r['link_href']  ) ) $this->link_href  = ' href="' .  $r['link_href']  . '"';
    229310                if ( !empty( $r['link_title'] ) ) $this->link_title = ' title="' . $r['link_title'] . '"';
    230311                if ( !empty( $r['link_rel']   ) ) $this->link_rel   = ' rel="' .   $r['link_rel']   . '"';
    231312                if ( !empty( $r['link_class'] ) ) $this->link_class = ' class="' . $r['link_class'] . '"';
    232                 if ( !empty( $r['link_text']  ) ) $this->link_text  =              $r['link_text'];
     313                if ( !empty( $r['data_attr']  ) ) $this->data_attr  = ' ' . esc_html( $r['data_attr'] ) ;
     314                if ( !empty( $r['link_text']  ) ) $this->link_text  =   $r['link_text'];
    233315
     316                // The wrapper element
     317
     318                // The element tag: e.g '<a', '<button'
     319
     320                if ( 'button' == $r['element'] ) {
     321
     322                        // If the button type is submit we'll build the button form controls attr here
     323                        if( 'submit' == $r['button_type'] ) {
     324                                $button_controls = $this->button_name . $this->button_value ;
     325                        } else {
     326                                $button_controls = '';
     327                        }
     328
     329                        $before_element = '<button ' . $this->button_type . $button_controls;
     330                        $after_element  = '</button>';
     331
     332                } else {
     333                        $before_element = '<a ' . $this->link_href;
     334                        $after_element  = '</a>';
     335                }
     336
    234337                // Build the button.
    235                 $this->contents = $before . '<a'. $this->link_href . $this->link_title . $this->link_id . $this->link_rel . $this->link_class . '>' . $this->link_text . '</a>' . $after;
     338                // attr here can be applicable/common to anchors or button elements
     339                $this->contents = $before . $before_element . $this->link_title . $this->link_id . $this->link_rel . $this->data_attr . $this->link_class . '>' . $this->link_text . $after_element . $after;
    236340
    237341                /**
    238342                 * Filters the button based on class parameters.
     
    246350                 * @param BP_Button $this     Current BP_Button instance.
    247351                 * @param string    $before   HTML appended before the actual button.
    248352                 * @param string    $after    HTML appended after the actual button.
     353                 * @param string    $before_element  Actual items opening element.
     354                 * @param string    $after_element   Actual items closing element  .
    249355                 */
    250                 $this->contents = apply_filters( 'bp_button_' . $this->component . '_' . $this->id, $this->contents, $this, $before, $after );
     356                $this->contents = apply_filters( 'bp_button_' . $this->component . '_' . $this->id, $this->contents, $this, $before, $after, $before_element, $after_element );
    251357        }
    252358
    253359        /**