PluginProbe
Gutenify – Visual Site Builder Blocks & Starter Templates / trunk
Gutenify – Visual Site Builder Blocks & Starter Templates vtrunk
1.7.0 1.6.6 1.6.5 1.6.4 trunk 0.0.1 0.0.2 0.0.3 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 All 72 releases
gutenify / core / dist / blocks / section-title / index.php

index.php in Gutenify – Visual Site Builder Blocks & Starter Templates trunk, at core/dist/blocks/section-title/index.php

182 lines 7.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace gutenify;
3
4 defined( 'ABSPATH' ) || exit;
5
6 class Section_Title {
7
8 public static function init() {
9 add_action( 'init', array( __CLASS__, 'register_block' ) );
10 add_filter( 'gutenify_render_block_gutenify/section-title', array( __CLASS__, 'render_block' ), 10, 4 );
11 }
12
13 public static function register_block() {
14 register_block_type(
15 __DIR__,
16 array(
17 'render_callback' => array( __CLASS__, 'render_callback' ),
18 )
19 );
20 }
21
22 public static function render_callback( $attr ) {
23
24 // Only allow safe heading tags for title_level to prevent XSS.
25 $allowed_title_tags = array( 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'p' );
26
27 $prefix_level = ! empty( $attr['prefixTag'] ) && in_array( strtolower( $attr['prefixTag'] ), $allowed_title_tags, true ) ? strtolower( $attr['prefixTag'] ) : 'h4';
28
29 $prefix_css_classes = ! empty( $attr['blockAdvanceOptions']['prefixTitleClasses'] ) ? $attr['blockAdvanceOptions']['prefixTitleClasses'] : '';
30 $prefix_css_classes = $prefix_css_classes . ' gutenify-section-title-prefix';
31 $prefix_wrapper_attributes = '';
32 if ( ! empty( $attr['prefixColor'] ) ) {
33 $safe_prefix_color = sanitize_hex_color( $attr['prefixColor'] ) ? sanitize_hex_color( $attr['prefixColor'] ) : esc_attr( $attr['prefixColor'] );
34 $prefix_wrapper_attributes = 'style="color:' . $safe_prefix_color . '"';
35 }
36 $prefix_wrapper_attributes .= ' class="' . esc_attr( $prefix_css_classes ) . '"';
37 $prefix_content = ! empty( $attr['prefixContent'] ) ? $attr['prefixContent'] : '';
38
39 $prefix = sprintf(
40 '<%1$s %2$s>%3$s</%1$s>',
41 $prefix_level,
42 $prefix_wrapper_attributes,
43 $prefix_content
44 );
45
46 // Heading.
47 $title_level = ! empty( $attr['titleTag'] ) ? esc_attr( $attr['titleTag'] ) : 'h2';
48 $main_css_classes = ! empty( $attr['blockAdvanceOptions']['mainTitleClasses'] ) ? $attr['blockAdvanceOptions']['mainTitleClasses'] : '';
49 $main_css_classes = $main_css_classes . ' gutenify-section-title-main';
50
51 $title_wrapper_attributes = '';
52 if ( ! empty( $attr['titleColor'] ) ) {
53 $safe_title_color = sanitize_hex_color( $attr['titleColor'] ) ? sanitize_hex_color( $attr['titleColor'] ) : esc_attr( $attr['titleColor'] );
54 $title_wrapper_attributes = 'style="color:' . $safe_title_color . '"';
55 }
56 $title_wrapper_attributes .= ' class="' . esc_attr( $main_css_classes ) . '"';
57 $title_content = ! empty( $attr['titleContent'] ) ? $attr['titleContent'] : '';
58
59 $safe_title_level = in_array( strtolower( $title_level ), $allowed_title_tags, true ) ? strtolower( $title_level ) : 'h2';
60 $title = sprintf(
61 '<%1$s %2$s>%3$s</%1$s>',
62 $safe_title_level,
63 $title_wrapper_attributes,
64 $title_content
65 );
66
67 // Suffix.
68 // $suffix_level = ! empty( $attr['suffixTag'] ) ? $attr['suffixTag'] : 'p';
69 $suffix_level = ! empty( $attr['suffixTag'] ) && in_array( strtolower( $attr['suffixTag'] ), $allowed_title_tags, true ) ? strtolower( $attr['suffixTag'] ) : 'p';
70 $suffix_css_classes = ! empty( $attr['blockAdvanceOptions']['suffixTitleClasses'] ) ? $attr['blockAdvanceOptions']['suffixTitleClasses'] : '';
71 $suffix_css_classes = $suffix_css_classes . ' gutenify-section-title-suffix';
72
73 $suffix_wrapper_attributes = '';
74 if ( ! empty( $attr['suffixColor'] ) ) {
75 $safe_suffix_color = sanitize_hex_color( $attr['suffixColor'] ) ? sanitize_hex_color( $attr['suffixColor'] ) : esc_attr( $attr['suffixColor'] );
76 $suffix_wrapper_attributes = 'style="color:' . $safe_suffix_color . '"';
77 }
78 $suffix_wrapper_attributes .= ' class="' . esc_attr( $suffix_css_classes ) . '"';
79 $suffix_content = ! empty( $attr['suffixContent'] ) ? $attr['suffixContent'] : '';
80
81 $suffix = sprintf(
82 '<%1$s %2$s>%3$s</%1$s>',
83 $suffix_level,
84 $suffix_wrapper_attributes,
85 $suffix_content
86 );
87
88 /**
89 * End output.
90 */
91
92 $textAlignment = ! empty( $attr['textAlignment'] ) ? esc_attr( $attr['textAlignment'] ) : 'center';
93 $wrapper_attributes = get_block_wrapper_attributes(
94 array(
95 'class' => implode(
96 ' ',
97 array(
98 'has-text-align-' . $textAlignment,
99 )
100 ),
101 )
102 );
103 $new_content = sprintf( '<div %s>', $wrapper_attributes );
104
105 $new_content .= '<div class="gutenify-section-title-section ">';
106 if ( ! empty( $attr['displayPrefix'] ) ) {
107 $new_content .= $prefix;
108 }
109 $new_content .= $title;
110 if ( ! empty( $attr['displaySuffix'] ) ) {
111 $new_content .= $suffix;
112 }
113 $new_content .= '</div>';
114
115 $new_content .= '</div>';
116
117 return $new_content;
118 }
119
120 public static function render_block( $block_content, $block, $instance, $block_id ) {
121
122 $block_content = new \WP_HTML_Tag_Processor( $block_content );
123 if ( ! empty( $block['attrs']['blockAdvanceOptions']['prefixTitleClasses'] ) ) {
124 $block_content->next_tag( array( 'class_name' => 'gutenify-section-title-prefix' ) );
125 $block_content->add_class( esc_attr( $block['attrs']['blockAdvanceOptions']['prefixTitleClasses'] ) );
126 }
127
128 if ( ! empty( $block['attrs']['blockAdvanceOptions']['mainTitleClasses'] ) ) {
129 $block_content->next_tag( array( 'class_name' => 'gutenify-section-title-main' ) );
130 $block_content->add_class( esc_attr( $block['attrs']['blockAdvanceOptions']['mainTitleClasses'] ) );
131 }
132
133 if ( ! empty( $block['attrs']['blockAdvanceOptions']['suffixTitleClasses'] ) ) {
134 $block_content->next_tag( array( 'class_name' => 'gutenify-section-title-suffix' ) );
135 $block_content->add_class( esc_attr( $block['attrs']['blockAdvanceOptions']['suffixTitleClasses'] ) );
136 }
137
138 $block_content = $block_content->get_updated_html();
139
140 $root_selector = '.' . $block_id;
141 $css = '';
142
143 /**
144 * Prefix
145 */
146 $css_chunk = '';
147 $css_chunk .= ! empty( $block['attrs']['prefixFontSize'] ) ? 'font-size:' . esc_attr( $block['attrs']['prefixFontSize'] ) . ';' : '';
148 $css_chunk .= ! empty( $block['attrs']['prefixColor'] ) ? 'color:' . esc_attr( sanitize_hex_color( $block['attrs']['prefixColor'] ) ? sanitize_hex_color( $block['attrs']['prefixColor'] ) : $block['attrs']['prefixColor'] ) . ';' : '';
149 $css_chunk .= isset( $block['attrs']['displayPrefix'] ) && false === $block['attrs']['displayPrefix'] ? 'display:none;' : '';
150 if ( ! empty( $css_chunk ) ) {
151 $css .= $root_selector . ' .gutenify-section-title-prefix{' . $css_chunk . '}';
152 }
153
154 /**
155 * Title
156 */
157 $css_chunk = '';
158 $css_chunk .= ! empty( $block['attrs']['titleFontSize'] ) ? 'font-size:' . esc_attr( $block['attrs']['titleFontSize'] ) . ';' : '';
159 $css_chunk .= ! empty( $block['attrs']['titleColor'] ) ? 'color:' . esc_attr( sanitize_hex_color( $block['attrs']['titleColor'] ) ? sanitize_hex_color( $block['attrs']['titleColor'] ) : $block['attrs']['titleColor'] ) . ';' : '';
160 if ( ! empty( $css_chunk ) ) {
161 $css .= $root_selector . ' .gutenify-section-title-main{' . $css_chunk . '}';
162 }
163
164 /**
165 * Suffix Title
166 */
167 $css_chunk = '';
168 $css_chunk .= ! empty( $block['attrs']['suffixFontSize'] ) ? 'font-size:' . esc_attr( $block['attrs']['suffixFontSize'] ) . ';' : '';
169 $css_chunk .= ! empty( $block['attrs']['suffixColor'] ) ? 'color:' . esc_attr( sanitize_hex_color( $block['attrs']['suffixColor'] ) ? sanitize_hex_color( $block['attrs']['suffixColor'] ) : $block['attrs']['suffixColor'] ) . ';' : '';
170 $css_chunk .= isset( $block['attrs']['displaySuffix'] ) && false === $block['attrs']['displaySuffix'] ? 'display:none;' : '';
171 if ( ! empty( $css_chunk ) ) {
172 $css .= $root_selector . ' .gutenify-section-title-suffix{' . $css_chunk . '}';
173 }
174
175 $handle = 'gutenify_' . str_replace( '/', '_', $block['blockName'] ) . '_' . $block_id;
176 wp_add_inline_style( $handle, $css );
177 return $block_content;
178 }
179 }
180
181 Section_Title::init();
182