PluginProbe
TablePress – Tables in WordPress made easy / 3.0.4
TablePress – Tables in WordPress made easy v3.0.4
3.4 3.3.4 3.3.3 3.3.2 3.3.1 trunk 1.12 1.14 1.9.2 2.0.4 2.1.7 2.1.8 2.2 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.3 2.3.1 2.3.2 2.4 2.4.1 2.4.2 2.4.3 All 45 releases
← All changes | views/view-edit.php +85 -241 2.2.4 → 3.0.4 View file →
@@ -26,12 +26,12 @@
26 26 *
27 27 * @since 2.0.0
28 28 * @var string[]
29 29 */
30 - protected $wp_pointers = array( 'tp20_edit_context_menu', 'tp21_edit_screen_options' );
30 + protected array $wp_pointers = array( 'tp20_edit_context_menu', 'tp21_edit_screen_options' );
31 31
32 32 /**
33 - * Set up the view with data and do things that are specific for this view.
33 + * Sets up the view with data and do things that are specific for this view.
34 34 *
35 35 * @since 1.0.0
36 36 *
37 37 * @param string $action Action for this view.
@@ -65,9 +65,9 @@
65 65 wp_enqueue_script( 'wplink' ); // JS for the "Insert Link" button.
66 66 $this->admin_page->enqueue_style( 'jspreadsheet' );
67 67 $this->admin_page->enqueue_style( 'jsuites', array( 'tablepress-jspreadsheet' ) );
68 68 $this->admin_page->enqueue_style( 'edit', array( 'tablepress-jspreadsheet', 'tablepress-jsuites' ) );
69 - if ( tb_tp_fs()->is_free_plan() ) {
69 + if ( ! TABLEPRESS_IS_PLAYGROUND_PREVIEW && tb_tp_fs()->is_free_plan() ) {
70 70 $this->admin_page->enqueue_style( 'edit-features', array( 'tablepress-edit' ) );
71 71 }
72 72 $this->admin_page->enqueue_script( 'jspreadsheet' );
73 73 $this->admin_page->enqueue_script( 'jsuites', array( 'tablepress-jspreadsheet' ) );
@@ -87,9 +87,9 @@
87 87 add_filter( 'screen_settings', array( $this, 'add_screen_options_output' ), 10, 2 );
88 88 }
89 89
90 90 /**
91 - * Change Media View string "Insert into post" to "Insert into Table".
91 + * Changes the Media View string "Insert into post" to "Insert into Table".
92 92 *
93 93 * @since 1.0.0
94 94 *
95 95 * @param array<string, string> $strings Current set of Media View strings.
@@ -112,9 +112,9 @@
112 112 public function add_screen_options_output( /* string */ $screen_settings, WP_Screen $screen ): string {
113 113 // Don't use a type hint for the `$screen_settings` argument as many WordPress plugins seem to be returning `null` in their filter hook handlers.
114 114
115 115 // Protect against other plugins not returning a string for the `$screen_settings` argument.
116 - if ( ! is_string( $screen_settings ) ) {
116 + if ( ! is_string( $screen_settings ) ) { // @phpstan-ignore function.alreadyNarrowedType (The `is_string()` check is needed as the input is coming from a filter hook.)
117 117 $screen_settings = '';
118 118 }
119 119
120 120 $screen_settings = '<fieldset id="tablepress-screen-options" class="screen-options">';
@@ -122,14 +122,14 @@
122 122 $screen_settings .= '<p>' . __( 'Adjust the default size of the table cells in the table editor below.', 'tablepress' ) . ' ' . __( 'Cells with many lines of text will expand to their full height when they are edited.', 'tablepress' ) . '</p>';
123 123 $screen_settings .= '<p><em>' . __( 'Please note: These settings only influence the table editor view on this screen, but not the table that the site visitor sees!', 'tablepress' ) . '</em></p>';
124 124 $screen_settings .= '<div>';
125 125 $screen_settings .= '<label for="table_editor_column_width">' . __( 'Default column width:', 'tablepress' ) . '</label> ';
126 - $input = '<input type="number" id="table_editor_column_width" class="small-text" value="' . esc_attr( TablePress::$model_options->get( 'table_editor_column_width' ) ) . '" min="30" max="9999" />';
126 + $input = '<input type="number" id="table_editor_column_width" class="small-text" value="' . esc_attr( TablePress::$model_options->get( 'table_editor_column_width' ) ) . '" min="30" max="9999">';
127 127 $screen_settings .= sprintf( __( '%s pixels', 'tablepress' ), $input );
128 128 $screen_settings .= '</div>';
129 129 $screen_settings .= '<div style="margin-top: 6px;">';
130 130 $screen_settings .= '<label for="table_editor_line_clamp">' . __( 'Maximum visible lines of text:', 'tablepress' ) . '</label> ';
131 - $input = '<input type="number" id="table_editor_line_clamp" class="tiny-text" value="' . esc_attr( TablePress::$model_options->get( 'table_editor_line_clamp' ) ) . '" min="0" max="999" />';
131 + $input = '<input type="number" id="table_editor_line_clamp" class="tiny-text" value="' . esc_attr( TablePress::$model_options->get( 'table_editor_line_clamp' ) ) . '" min="0" max="999">';
132 132 $screen_settings .= sprintf( __( '%s lines', 'tablepress' ), $input );
133 133 $screen_settings .= '</div>';
134 134 $screen_settings .= '</fieldset>';
135 135 return $screen_settings;
@@ -134,9 +134,8 @@
134 134 $screen_settings .= '</fieldset>';
135 135 return $screen_settings;
136 136 }
137 137
138 -
139 138 /**
140 139 * Renders the current view.
141 140 *
142 141 * In comparison to the parent class method, this contains handling for the no-js case and adjusts the HTML code structure.
@@ -144,8 +143,10 @@
144 143 * @since 2.0.0
145 144 */
146 145 #[\Override]
147 146 public function render(): void {
147 + $this->print_javascript_data();
148 +
148 149 ?>
149 150 <div id="tablepress-page" class="wrap">
150 151 <form>
151 152 <?php
@@ -151,9 +152,9 @@
151 152 <?php
152 153 $this->print_nav_tab_menu();
153 154 ?>
154 155 <div id="tablepress-body">
155 - <hr class="wp-header-end" />
156 + <hr class="wp-header-end">
156 157 <?php
157 158 // Print all header messages.
158 159 foreach ( $this->header_messages as $message ) {
159 160 echo $message;
@@ -177,9 +178,9 @@
177 178 $this->do_meta_boxes( 'side' );
178 179 ?>
179 180 </div>
180 181 </div>
181 - <br class="clear" />
182 + <br class="clear">
182 183 </div>
183 184 </form>
184 185 </div>
185 186 </div>
@@ -186,9 +187,9 @@
186 187 <?php
187 188 }
188 189
189 190 /**
190 - * Override parent class method, as the nonces for this view are generated in the JS code.
191 + * Overrides parent class method, as the nonces for this view are generated in the JS code.
191 192 *
192 193 * @since 1.0.0
193 194 *
194 195 * @param array<string, mixed> $data Data for this screen.
@@ -199,10 +200,57 @@
199 200 // Intentionally left empty. Nonces for this view are generated in postbox_table_data().
200 201 }
201 202
202 203 /**
203 - * Print the content of the "Table Information" post meta box.
204 + * Prints the table data for use in JS code and the main React container.
204 205 *
206 + * @since 3.0.0
207 + */
208 + public function print_javascript_data(): void {
209 + echo "<script>\n";
210 + echo "window.tp = window.tp || {};\n";
211 +
212 + echo "tp.nonces = {};\n";
213 + echo "tp.nonces.edit_table = '" . wp_create_nonce( TablePress::nonce( $this->action, $this->data['table']['id'] ) ) . "';\n";
214 + echo "tp.nonces.preview_table = '" . wp_create_nonce( TablePress::nonce( 'preview_table', $this->data['table']['id'] ) ) . "';\n";
215 + echo "tp.nonces.copy_table = '" . wp_create_nonce( TablePress::nonce( 'copy_table', $this->data['table']['id'] ) ) . "';\n";
216 + echo "tp.nonces.delete_table = '" . wp_create_nonce( TablePress::nonce( 'delete_table', $this->data['table']['id'] ) ) . "';\n";
217 + echo "tp.nonces.screen_options = '" . wp_create_nonce( TablePress::nonce( 'screen_options' ) ) . "';\n";
218 +
219 + echo "tp.table = {};\n";
220 + echo "tp.table.shortcode = '" . esc_js( TablePress::$shortcode ) . "';\n";
221 + echo "tp.table.id = '{$this->data['table']['id']}';\n";
222 +
223 + // Add the table meta data.
224 + $this->data['table']['meta'] = array(
225 + 'newId' => $this->data['table']['id'],
226 + 'name' => $this->data['table']['name'],
227 + 'description' => $this->data['table']['description'],
228 + 'lastModified' => TablePress::format_datetime( $this->data['table']['last_modified'] ),
229 + 'lastEditor' => TablePress::get_user_display_name( $this->data['table']['options']['last_editor'] ),
230 + );
231 +
232 + // JSON-encode array items separately to save some PHP memory.
233 + foreach ( array( 'meta', 'data', 'options', 'visibility' ) as $item ) {
234 + $json = $this->admin_page->convert_to_json_parse_output( $this->data['table'][ $item ] );
235 + printf( 'tp.table.%1$s = %2$s;' . "\n", $item, $json );
236 + }
237 +
238 + echo "tp.screen_options = {};\n";
239 + echo 'tp.screen_options.table_editor_column_width = ' . absint( TablePress::$model_options->get( 'table_editor_column_width' ) ) . ";\n";
240 + echo 'tp.screen_options.showCustomCommands = ' . ( current_user_can( 'unfiltered_html' ) ? 'true' : 'false' ) . ";\n";
241 + echo "tp.screen_options.optionsUrl = '" . TablePress::url( array( 'action' => 'options' ) ) . "';\n";
242 + echo 'tp.screen_options.currentUserCanEditTableId = ' . ( current_user_can( 'tablepress_edit_table_id', $this->data['table']['id'] ) ? 'true' : 'false' ) . ";\n";
243 + echo 'tp.screen_options.currentUserCanPreviewTable = ' . ( current_user_can( 'tablepress_preview_table', $this->data['table']['id'] ) ? 'true' : 'false' ) . ";\n";
244 + echo "tp.screen_options.previewUrl = '" . str_replace( '&amp;', '&', TablePress::url( array( 'action' => 'preview_table', 'item' => $this->data['table']['id'], 'return' => 'edit', 'return_item' => $this->data['table']['id'] ), true, 'admin-post.php' ) ) . "';\n";
245 + echo "</script>\n";
246 +
247 + echo '<div id="tablepress-edit-screen"></div>'; // React container.
248 + }
249 +
250 + /**
251 + * Prints the content of the "Table Information" post meta box.
252 + *
205 253 * @since 1.0.0
206 254 *
207 255 * @param array<string, mixed> $data Data for this screen.
208 256 * @param array<string, mixed> $box Information about the meta box.
@@ -207,34 +255,11 @@
207 255 * @param array<string, mixed> $data Data for this screen.
208 256 * @param array<string, mixed> $box Information about the meta box.
209 257 */
210 258 public function postbox_table_information( array $data, array $box ): void {
211 - ?>
212 -<table class="tablepress-postbox-table fixed">
213 - <tr class="bottom-border">
214 - <th class="column-1" scope="row"><label for="table-id"><?php _e( 'Table ID', 'tablepress' ); ?>:</label></th>
215 - <td class="column-2">
216 - <div id="table-id-shortcode-wrapper">
217 - <input type="text" id="table-id" value="<?php echo esc_attr( $data['table']['id'] ); ?>" title="<?php esc_attr_e( 'The Table ID can only consist of letters, numbers, hyphens (-), and underscores (_).', 'tablepress' ); ?>" pattern="[A-Za-z1-9_-]|[A-Za-z0-9_-]{2,}" required <?php echo ( ! current_user_can( 'tablepress_edit_table_id', $data['table']['id'] ) ) ? 'readonly ' : ''; ?>/>
218 - <div><label for="table-information-shortcode"><?php _e( 'Shortcode', 'tablepress' ); ?>:</label> <input type="text" id="table-information-shortcode" value="<?php echo esc_attr( '[' . TablePress::$shortcode . " id={$data['table']['id']} /]" ); ?>" readonly /></div>
219 - </div>
220 - </td>
221 - </tr>
222 - <tr class="top-border">
223 - <th class="column-1" scope="row"><label for="table-name"><?php _e( 'Table Name', 'tablepress' ); ?>:</label></th>
224 - <td class="column-2"><input type="text" id="table-name" class="large-text" value="<?php echo esc_attr( $data['table']['name'] ); ?>" /></td>
225 - </tr>
226 - <tr class="bottom-border">
227 - <th class="column-1 top-align" scope="row"><label for="table-description"><?php _e( 'Description', 'tablepress' ); ?>:</label></th>
228 - <td class="column-2"><textarea id="table-description" class="large-text" rows="4"><?php echo esc_textarea( $data['table']['description'] ); ?></textarea></td>
229 - </tr>
230 - <tr class="top-border">
231 - <th class="column-1" scope="row"><?php _e( 'Last Modified', 'tablepress' ); ?>:</th>
232 - <td class="column-2"><?php printf( __( '%1$s by %2$s', 'tablepress' ), '<span id="last-modified">' . TablePress::format_datetime( $data['table']['last_modified'] ) . '</span>', '<span id="last-editor">' . TablePress::get_user_display_name( $data['table']['options']['last_editor'] ) . '</span>' ); ?></td>
233 - </tr>
234 -</table>
235 - <?php
236 - if ( tb_tp_fs()->is_free_plan() ) :
259 + echo '<div id="tablepress-table-information-section"></div>';
260 +
261 + if ( ! TABLEPRESS_IS_PLAYGROUND_PREVIEW && tb_tp_fs()->is_free_plan() ) :
237 262 ?>
238 263 <div class="postbox premium-features">
239 264 <div>
240 265 <div>
@@ -266,9 +291,9 @@
266 291 endif;
267 292 }
268 293
269 294 /**
270 - * Print the content of the "Table Content" post meta box.
295 + * Prints the content of the "Table Content" post meta box.
271 296 *
272 297 * @since 1.0.0
273 298 *
274 299 * @param array<string, mixed> $data Data for this screen.
@@ -274,30 +299,8 @@
274 299 * @param array<string, mixed> $data Data for this screen.
275 300 * @param array<string, mixed> $box Information about the meta box.
276 301 */
277 302 public function postbox_table_data( array $data, array $box ): void {
278 - echo "<script>\n";
279 - echo "window.tp = window.tp || {};\n";
280 -
281 - echo "tp.nonces = {};\n";
282 - echo "tp.nonces.edit_table = '" . wp_create_nonce( TablePress::nonce( $this->action, $data['table']['id'] ) ) . "';\n";
283 - echo "tp.nonces.preview_table = '" . wp_create_nonce( TablePress::nonce( 'preview_table', $data['table']['id'] ) ) . "';\n";
284 - echo "tp.nonces.screen_options = '" . wp_create_nonce( TablePress::nonce( 'screen_options' ) ) . "';\n";
285 -
286 - echo "tp.table = {};\n";
287 - echo "tp.table.shortcode = '" . esc_js( TablePress::$shortcode ) . "';\n";
288 - echo "tp.table.id = '{$data['table']['id']}';\n";
289 - echo "tp.table.new_id = '{$data['table']['id']}';\n";
290 - // JSON-encode array items separately to save some PHP memory.
291 - foreach ( array( 'data', 'options', 'visibility' ) as $item ) {
292 - $json = $this->admin_page->convert_to_json_parse_output( $data['table'][ $item ] );
293 - printf( 'tp.table.%1$s = %2$s;' . "\n", $item, $json );
294 - }
295 -
296 - echo "tp.screen_options = {};\n";
297 - echo 'tp.screen_options.table_editor_column_width = ' . absint( TablePress::$model_options->get( 'table_editor_column_width' ) ) . ";\n";
298 - echo "</script>\n";
299 -
300 303 $css_variables = '--table-editor-line-clamp:' . absint( TablePress::$model_options->get( 'table_editor_line_clamp' ) ) . ';';
301 304 $css_variables = esc_attr( $css_variables );
302 305 echo "<div id=\"table-editor\" style=\"{$css_variables}\"></div>";
303 306 }
@@ -302,9 +305,9 @@
302 305 echo "<div id=\"table-editor\" style=\"{$css_variables}\"></div>";
303 306 }
304 307
305 308 /**
306 - * Print the content of the "Table Manipulation" post meta box.
309 + * Prints the content of the "Table Manipulation" post meta box.
307 310 *
308 311 * @since 1.0.0
309 312 *
310 313 * @param array<string, mixed> $data Data for this screen.
@@ -310,77 +313,13 @@
310 313 * @param array<string, mixed> $data Data for this screen.
311 314 * @param array<string, mixed> $box Information about the meta box.
312 315 */
313 316 public function postbox_table_manipulation( array $data, array $box ): void {
314 - ?>
315 -<table id="tablepress-manipulation-controls" class="tablepress-postbox-table fixed">
316 - <tr class="bottom-border">
317 - <td class="column-1">
318 - <?php _e( 'Selected cells', 'tablepress' ); ?>:&nbsp;
319 - <input type="button" class="button" id="button-insert-link" value="<?php esc_attr_e( 'Insert Link', 'tablepress' ); ?>" data-shortcut="<?php echo esc_attr( _x( '%1$sL', 'keyboard shortcut for Insert Link', 'tablepress' ) ); ?>" />
320 - <input type="button" class="button" id="button-insert-image" value="<?php esc_attr_e( 'Insert Image', 'tablepress' ); ?>" data-shortcut="<?php echo esc_attr( _x( '%1$sI', 'keyboard shortcut for Insert Image', 'tablepress' ) ); ?>" />
321 - <input type="button" class="button" id="button-advanced-editor" value="<?php esc_attr_e( 'Advanced Editor', 'tablepress' ); ?>" data-shortcut="<?php echo esc_attr( _x( '%1$sE', 'keyboard shortcut for Advanced Editor', 'tablepress' ) ); ?>" />
322 - </td>
323 - <td class="column-2">
324 - <?php _e( 'Selected cells', 'tablepress' ); ?>:&nbsp;
325 - <input type="button" class="button button-merge-unmerge" data-action="merge" value="<?php esc_attr_e( 'Combine/Merge', 'tablepress' ); ?>" />
326 - <input type="button" class="button button-show-help-box" value="<?php esc_attr_e( '?', 'tablepress' ); ?>" title="<?php esc_attr_e( 'Help on combining cells', 'tablepress' ); ?>" data-help-box="#help-box-combine-cells" />
327 - </td>
328 - </tr>
329 - <tr class="top-border">
330 - <td class="column-1">
331 - <?php _e( 'Selected rows', 'tablepress' ); ?>:&nbsp;
332 - <input type="button" class="button button-insert-duplicate" data-type="rows" data-action="duplicate" value="<?php esc_attr_e( 'Duplicate', 'tablepress' ); ?>" />
333 - <input type="button" class="button button-insert-duplicate" data-type="rows" data-action="insert" value="<?php esc_attr_e( 'Insert', 'tablepress' ); ?>" />
334 - <input type="button" class="button button-remove" data-type="rows" value="<?php esc_attr_e( 'Delete', 'tablepress' ); ?>" />
335 - </td>
336 - <td class="column-2">
337 - <?php _e( 'Selected columns', 'tablepress' ); ?>:&nbsp;
338 - <input type="button" class="button button-insert-duplicate" data-type="columns" data-action="duplicate" value="<?php esc_attr_e( 'Duplicate', 'tablepress' ); ?>" />
339 - <input type="button" class="button button-insert-duplicate" data-type="columns" data-action="insert" value="<?php esc_attr_e( 'Insert', 'tablepress' ); ?>" />
340 - <input type="button" class="button button-remove" data-type="columns" value="<?php esc_attr_e( 'Delete', 'tablepress' ); ?>" />
341 - </td>
342 - </tr>
343 - <tr>
344 - <td class="column-1">
345 - <?php _e( 'Selected rows', 'tablepress' ); ?>:&nbsp;
346 - <input type="button" class="button button-move" data-type="rows" data-direction="up" value="<?php esc_attr_e( 'Move up', 'tablepress' ); ?>" data-shortcut="<?php echo esc_attr( _x( '%1$s⇧↑', 'keyboard shortcut for Move up', 'tablepress' ) ); ?>" />
347 - <input type="button" class="button button-move" data-type="rows" data-direction="down" value="<?php esc_attr_e( 'Move down', 'tablepress' ); ?>" data-shortcut="<?php echo esc_attr( _x( '%1$s⇧↓', 'keyboard shortcut for Move down', 'tablepress' ) ); ?>" />
348 - </td>
349 - <td class="column-2">
350 - <?php _e( 'Selected columns', 'tablepress' ); ?>:&nbsp;
351 - <input type="button" class="button button-move" data-type="columns" data-direction="left" value="<?php esc_attr_e( 'Move left', 'tablepress' ); ?>" data-shortcut="<?php echo esc_attr( _x( '%1$s⇧←', 'keyboard shortcut for Move left', 'tablepress' ) ); ?>" />
352 - <input type="button" class="button button-move" data-type="columns" data-direction="right" value="<?php esc_attr_e( 'Move right', 'tablepress' ); ?>" data-shortcut="<?php echo esc_attr( _x( '%1$s⇧→', 'keyboard shortcut for Move right', 'tablepress' ) ); ?>" />
353 - </td>
354 - </tr>
355 - <tr class="bottom-border">
356 - <td class="column-1">
357 - <?php _e( 'Selected rows', 'tablepress' ); ?>:&nbsp;
358 - <input type="button" class="button button-hide-unhide" data-type="rows" data-action="hide" value="<?php esc_attr_e( 'Hide', 'tablepress' ); ?>" />
359 - <input type="button" class="button button-hide-unhide" data-type="rows" data-action="unhide" value="<?php esc_attr_e( 'Show', 'tablepress' ); ?>" />
360 - </td>
361 - <td class="column-2">
362 - <?php _e( 'Selected columns', 'tablepress' ); ?>:&nbsp;
363 - <input type="button" class="button button-hide-unhide" data-type="columns" data-action="hide" value="<?php esc_attr_e( 'Hide', 'tablepress' ); ?>" />
364 - <input type="button" class="button button-hide-unhide" data-type="columns" data-action="unhide" value="<?php esc_attr_e( 'Show', 'tablepress' ); ?>" />
365 - </td>
366 - </tr>
367 - <tr class="top-border">
368 - <td class="column-1">
369 - <label><?php printf( __( 'Add %s row(s)', 'tablepress' ), '<input type="number" id="rows-append-number" class="small-text" title="' . esc_attr__( 'This field must contain a positive number.', 'tablepress' ) . '" value="1" min="1" max="99999" required />' ); ?></label>&nbsp;
370 - <input type="button" class="button button-append" data-type="rows" value="<?php esc_attr_e( 'Add', 'tablepress' ); ?>" />
371 - </td>
372 - <td class="column-2">
373 - <label><?php printf( __( 'Add %s column(s)', 'tablepress' ), '<input type="number" id="columns-append-number" class="small-text" title="' . esc_attr__( 'This field must contain a positive number.', 'tablepress' ) . '" value="1" min="1" max="99999" required />' ); ?></label>&nbsp;
374 - <input type="button" class="button button-append" data-type="columns" value="<?php esc_attr_e( 'Add', 'tablepress' ); ?>" />
375 - </td>
376 - </tr>
377 -</table>
378 - <?php
317 + echo '<div id="tablepress-table-manipulation-section"></div>';
379 318 }
380 319
381 320 /**
382 - * Print the "Preview" and "Save Changes" button.
321 + * Prints the container for the "Preview" and "Save Changes" buttons.
383 322 *
384 323 * @since 1.0.0
385 324 *
386 325 * @param array<string, mixed> $data Data for this screen.
@@ -386,22 +325,13 @@
386 325 * @param array<string, mixed> $data Data for this screen.
387 326 * @param array<string, mixed> $box Information about the text box.
388 327 */
389 328 public function textbox_buttons( array $data, array $box ): void {
390 - $preview_url = TablePress::url( array( 'action' => 'preview_table', 'item' => $data['table']['id'], 'return' => 'edit', 'return_item' => $data['table']['id'] ), true, 'admin-post.php' );
391 -
392 - echo '<p id="' . $box['id'] . '-submit" class="submit">';
393 - if ( current_user_can( 'tablepress_preview_table', $data['table']['id'] ) ) {
394 - echo '<a href="' . $preview_url . '" class="button button-large button-show-preview" target="_blank" data-shortcut="' . esc_attr( _x( '%1$sP', 'keyboard shortcut for Preview', 'tablepress' ) ) . '">' . __( 'Preview', 'tablepress' ) . '</a>';
395 - }
396 - ?>
397 - <input type="button" class="button button-primary button-large button-save-changes" value="<?php esc_attr_e( 'Save Changes', 'tablepress' ); ?>" data-shortcut="<?php echo esc_attr( _x( '%1$sS', 'keyboard shortcut for Save Changes', 'tablepress' ) ); ?>" />
398 - <?php
399 - echo '</p>';
329 + echo '<div id="tablepress-' . $box['id'] . '-section"></div>';
400 330 }
401 331
402 332 /**
403 - * Print the "Delete Table" and "Export Table" buttons.
333 + * Prints the "Delete Table" and "Export Table" buttons.
404 334 *
405 335 * @since 1.0.0
406 336 *
407 337 * @param array<string, mixed> $data Data for this screen.
@@ -418,21 +348,21 @@
418 348
419 349 echo '<p class="submit">';
420 350 echo __( 'Other Actions', 'tablepress' ) . ':&nbsp; ';
421 351 if ( $user_can_copy_table ) {
422 - echo '<a href="' . TablePress::url( array( 'action' => 'copy_table', 'item' => $data['table']['id'], 'return' => 'edit' ), true, 'admin-post.php' ) . '" class="button">' . __( 'Copy Table', 'tablepress' ) . '</a> ';
352 + echo '<a href="' . esc_url( TablePress::url( array( 'action' => 'copy_table', 'item' => $data['table']['id'], 'return' => 'edit' ), true, 'admin-post.php' ) ) . '" class="components-button is-secondary is-compact button-copy">' . __( 'Copy Table', 'tablepress' ) . '</a> ';
423 353 }
424 354 if ( $user_can_export_table ) {
425 - echo '<a href="' . TablePress::url( array( 'action' => 'export', 'table_id' => $data['table']['id'] ) ) . '" class="button">' . __( 'Export Table', 'tablepress' ) . '</a> ';
355 + echo '<a href="' . esc_url( TablePress::url( array( 'action' => 'export', 'table_id' => $data['table']['id'] ) ) ) . '" class="components-button is-secondary is-compact button-export">' . __( 'Export Table', 'tablepress' ) . '</a> ';
426 356 }
427 357 if ( $user_can_delete_table ) {
428 - echo '<a href="' . TablePress::url( array( 'action' => 'delete_table', 'item' => $data['table']['id'], 'return' => 'edit', 'return_item' => $data['table']['id'] ), true, 'admin-post.php' ) . '" class="button delete-link">' . __( 'Delete Table', 'tablepress' ) . '</a>';
358 + echo '<a href="' . esc_url( TablePress::url( array( 'action' => 'delete_table', 'item' => $data['table']['id'], 'return' => 'edit', 'return_item' => $data['table']['id'] ), true, 'admin-post.php' ) ) . '" class="components-button is-secondary is-compact button-delete delete-link">' . __( 'Delete Table', 'tablepress' ) . '</a>';
429 359 }
430 360 echo '</p>';
431 361 }
432 362
433 363 /**
434 - * Print the hidden containers for the Preview.
364 + * Prints the hidden containers for the Preview.
435 365 *
436 366 * @since 1.0.0
437 367 *
438 368 * @param array<string, mixed> $data Data for this screen.
@@ -462,9 +392,9 @@
462 392 </div>
463 393 <div class="hidden-container">
464 394 <textarea id="textarea-insert-helper" class="hidden"></textarea>
465 395 </div>
466 -<div id="help-box-combine-cells" class="help-box hidden-container" title="<?php esc_attr_e( 'Help on combining cells', 'tablepress' ); ?>" data-height="380" data-width="420">
396 +<div id="help-box-combine-cells" class="help-box hidden-container" title="<?php esc_attr_e( 'Help on combining cells', 'tablepress' ); ?>" data-height="420" data-width="500">
467 397 <?php
468 398 echo '<p>' . __( 'Table cells can span across more than one column or row.', 'tablepress' ) . '</p>';
469 399 echo '<p>' . __( 'Combining consecutive cells within the same row is called &#8220;colspanning&#8221;.', 'tablepress' )
470 400 . ' ' . __( 'Combining consecutive cells within the same column is called &#8220;rowspanning&#8221;.', 'tablepress' ) . '</p>';
@@ -469,9 +399,10 @@
469 399 echo '<p>' . __( 'Combining consecutive cells within the same row is called &#8220;colspanning&#8221;.', 'tablepress' )
470 400 . ' ' . __( 'Combining consecutive cells within the same column is called &#8220;rowspanning&#8221;.', 'tablepress' ) . '</p>';
471 401 echo '<p>' . sprintf( __( 'To combine adjacent cells, select the desired cells and click the “%s” button or use the context menu.', 'tablepress' ), __( 'Combine/Merge', 'tablepress' ) )
472 402 . ' ' . __( 'The corresponding keywords, <code>#colspan#</code> and <code>#rowspan#</code>, will then be added for you.', 'tablepress' ) . '</p>';
473 - echo '<p><strong>' . __( 'Be aware that the Table Features for Site Visitors, like sorting, filtering, and pagination, will not work on tables which have combined cells.', 'tablepress' ) . '</strong></p>';
403 + echo '<p><strong>' . __( 'Be aware that the Table Features for Site Visitors, like sorting, filtering, and pagination, will not work in tables which have combined cells in their body rows.', 'tablepress' ) . '</strong>'
404 + . ' ' . __( 'It is however possible to use these features in tables that have combined cells in the table header or footer rows, to allow for creating complex header and footer layouts.', 'tablepress' ) . '</p>';
474 405 ?>
475 406 </div>
476 407 <?php
477 408 }
@@ -476,9 +407,9 @@
476 407 <?php
477 408 }
478 409
479 410 /**
480 - * Print the content of the "Table Options" post meta box.
411 + * Prints the content of the "Table Options" post meta box.
481 412 *
482 413 * @since 1.0.0
483 414 *
484 415 * @param array<string, mixed> $data Data for this screen.
@@ -484,56 +415,13 @@
484 415 * @param array<string, mixed> $data Data for this screen.
485 416 * @param array<string, mixed> $box Information about the meta box.
486 417 */
487 418 public function postbox_table_options( array $data, array $box ): void {
488 - ?>
489 -<table class="tablepress-postbox-table fixed">
490 - <tr>
491 - <th class="column-1" scope="row"><?php _e( 'Table Head Row', 'tablepress' ); ?>:</th>
492 - <td class="column-2"><label for="option-table_head"><input type="checkbox" id="option-table_head" name="table_head" /> <?php _e( 'The first row of the table is the table header.', 'tablepress' ); ?></label></td>
493 - </tr>
494 - <tr class="bottom-border">
495 - <th class="column-1" scope="row"><?php _e( 'Table Foot Row', 'tablepress' ); ?>:</th>
496 - <td class="column-2"><label for="option-table_foot"><input type="checkbox" id="option-table_foot" name="table_foot" /> <?php _e( 'The last row of the table is the table footer.', 'tablepress' ); ?></label></td>
497 - </tr>
498 - <tr class="top-border">
499 - <th class="column-1" scope="row"><?php _e( 'Alternating Row Colors', 'tablepress' ); ?>:</th>
500 - <td class="column-2"><label for="option-alternating_row_colors"><input type="checkbox" id="option-alternating_row_colors" name="alternating_row_colors" /> <?php _e( 'The background colors of consecutive rows shall alternate.', 'tablepress' ); ?></label></td>
501 - </tr>
502 - <tr class="bottom-border">
503 - <th class="column-1" scope="row"><?php _e( 'Row Hover Highlighting', 'tablepress' ); ?>:</th>
504 - <td class="column-2"><label for="option-row_hover"><input type="checkbox" id="option-row_hover" name="row_hover" /> <?php _e( 'Highlight a row while the mouse cursor hovers above it by changing its background color.', 'tablepress' ); ?></label></td>
505 - </tr>
506 - <tr class="top-border">
507 - <th class="column-1" scope="row"><label for="option-print_name"><?php _e( 'Print Table Name', 'tablepress' ); ?></label>:</th>
508 - <?php
509 - $position_select = '<select id="option-print_name_position" name="print_name_position">';
510 - $position_select .= '<option value="above">' . __( 'above', 'tablepress' ) . '</option>';
511 - $position_select .= '<option value="below">' . __( 'below', 'tablepress' ) . '</option>';
512 - $position_select .= '</select>';
513 - ?>
514 - <td class="column-2"><input type="checkbox" id="option-print_name" name="print_name" /> <label><?php printf( _x( 'Show the table name %s the table.', 'position (above or below)', 'tablepress' ), $position_select ); ?></label></td>
515 - </tr>
516 - <tr class="bottom-border">
517 - <th class="column-1" scope="row"><label for="option-print_description"><?php _e( 'Print Table Description', 'tablepress' ); ?></label>:</th>
518 - <?php
519 - $position_select = '<select id="option-print_description_position" name="print_description_position">';
520 - $position_select .= '<option value="above">' . __( 'above', 'tablepress' ) . '</option>';
521 - $position_select .= '<option value="below">' . __( 'below', 'tablepress' ) . '</option>';
522 - $position_select .= '</select>';
523 - ?>
524 - <td class="column-2"><input type="checkbox" id="option-print_description" name="print_description" /> <label><?php printf( _x( 'Show the table description %s the table.', 'position (above or below)', 'tablepress' ), $position_select ); ?></label></td>
525 - </tr>
526 - <tr class="top-border">
527 - <th class="column-1" scope="row"><?php _e( 'Extra CSS Classes', 'tablepress' ); ?>:</th>
528 - <td class="column-2"><label for="option-extra_css_classes"><input type="text" id="option-extra_css_classes" name="extra_css_classes" class="large-text code" title="<?php esc_attr_e( 'This field can only contain letters, numbers, spaces, hyphens (-), underscores (_), and colons (:).', 'tablepress' ); ?>" pattern="[A-Za-z0-9- _:]*" /><p class="description"><?php echo __( 'Additional CSS classes for styling purposes can be entered here.', 'tablepress' ) . ' ' . sprintf( __( 'This is NOT the place to enter <a href="%s">Custom CSS</a> code!', 'tablepress' ), TablePress::url( array( 'action' => 'options' ) ) ); ?></p></label></td>
529 - </tr>
530 -</table>
531 - <?php
419 + echo '<div id="tablepress-table-options-section"></div>';
532 420 }
533 421
534 422 /**
535 - * Print the content of the "Table Features for Site Visitors" post meta box.
423 + * Prints the content of the "Table Features for Site Visitors" post meta box.
536 424 *
537 425 * @since 1.0.0
538 426 *
539 427 * @param array<string, mixed> $data Data for this screen.
@@ -539,57 +427,13 @@
539 427 * @param array<string, mixed> $data Data for this screen.
540 428 * @param array<string, mixed> $box Information about the meta box.
541 429 */
542 430 public function postbox_datatables_features( array $data, array $box ): void {
543 - ?>
544 -<p id="notice-datatables-head-row"><em><?php printf( __( 'These features and options are only available when the &#8220;%1$s&#8221; checkbox in the &#8220;%2$s&#8221; section is checked.', 'tablepress' ), __( 'Table Head Row', 'tablepress' ), __( 'Table Options', 'tablepress' ) ); ?></em></p>
545 -<table class="tablepress-postbox-table fixed">
546 - <tr class="bottom-border">
547 - <th class="column-1" scope="row"><?php _e( 'Enable Visitor Features', 'tablepress' ); ?>:</th>
548 - <td class="column-2"><label for="option-use_datatables"><input type="checkbox" id="option-use_datatables" name="use_datatables" /> <?php _e( 'Offer the following functions for site visitors with this table:', 'tablepress' ); ?></label></td>
549 - </tr>
550 - <tr class="top-border">
551 - <th class="column-1" scope="row"><?php _e( 'Sorting', 'tablepress' ); ?>:</th>
552 - <td class="column-2"><label for="option-datatables_sort"><input type="checkbox" id="option-datatables_sort" name="datatables_sort" /> <?php _e( 'Enable sorting of the table by the visitor.', 'tablepress' ); ?></label></td>
553 - </tr>
554 - <tr>
555 - <th class="column-1" scope="row"><?php _e( 'Search/Filtering', 'tablepress' ); ?>:</th>
556 - <td class="column-2"><label for="option-datatables_filter"><input type="checkbox" id="option-datatables_filter" name="datatables_filter" /> <?php _e( 'Enable the visitor to filter or search the table. Only rows with the search word in them are shown.', 'tablepress' ); ?></label></td>
557 - </tr>
558 - <tr>
559 - <th class="column-1" scope="row" style="vertical-align: top;"><?php _e( 'Pagination', 'tablepress' ); ?>:</th>
560 - <td class="column-2"><label for="option-datatables_paginate"><input type="checkbox" id="option-datatables_paginate" name="datatables_paginate" /> <?php _e( 'Enable pagination of the table (viewing only a certain number of rows at a time) by the visitor.', 'tablepress' ); ?></label><br />
561 - <label for="option-datatables_paginate_entries" class="checkbox-left">&nbsp;<?php printf( __( 'Show %s rows per page.', 'tablepress' ), '<input type="number" id="option-datatables_paginate_entries" class="small-text" name="datatables_paginate_entries" min="1" max="99999" required />' ); ?></label></td>
562 - </tr>
563 - <tr>
564 - <th class="column-1" scope="row"><?php _e( 'Pagination Length Change', 'tablepress' ); ?>:</th>
565 - <td class="column-2"><label for="option-datatables_lengthchange"><input type="checkbox" id="option-datatables_lengthchange" name="datatables_lengthchange" /> <?php _e( 'Allow the visitor to change the number of rows shown when using pagination.', 'tablepress' ); ?></label></td>
566 - </tr>
567 - <tr>
568 - <th class="column-1" scope="row"><?php _e( 'Info', 'tablepress' ); ?>:</th>
569 - <td class="column-2"><label for="option-datatables_info"><input type="checkbox" id="option-datatables_info" name="datatables_info" /> <?php _e( 'Enable the table information display, with information about the currently visible data, like the number of rows.', 'tablepress' ); ?></label></td>
570 - </tr>
571 - <tr<?php echo current_user_can( 'unfiltered_html' ) ? ' class="bottom-border"' : ''; ?>>
572 - <th class="column-1" scope="row"><?php _e( 'Horizontal Scrolling', 'tablepress' ); ?>:</th>
573 - <td class="column-2"><label for="option-datatables_scrollx"><input type="checkbox" id="option-datatables_scrollx" name="datatables_scrollx" /> <?php _e( 'Enable horizontal scrolling, to make viewing tables with many columns easier.', 'tablepress' ); ?></label></td>
574 - </tr>
575 - <?php
576 - // "Custom Commands" must only be available to trusted users.
577 - if ( current_user_can( 'unfiltered_html' ) ) {
578 - ?>
579 - <tr class="top-border">
580 - <th class="column-1" scope="row"><?php _e( 'Custom Commands', 'tablepress' ); ?>:</th>
581 - <td class="column-2"><label for="option-datatables_custom_commands"><textarea id="option-datatables_custom_commands" name="datatables_custom_commands" class="large-text code" rows="1"></textarea><p class="description"><?php echo sprintf( __( 'Additional parameters from the <a href="%s">DataTables documentation</a> to be added to the JS call.', 'tablepress' ), 'https://www.datatables.net/' ) . ' ' . __( 'For advanced use only.', 'tablepress' ); ?></p></label></td>
582 - </tr>
583 - <?php
584 - } // if
585 - ?>
586 -</table>
587 - <?php
431 + echo '<div id="tablepress-datatables-features-section"></div>';
588 432 }
589 433
590 434 /**
591 - * Print a notification about a corrupted table.
435 + * Prints a notification about a corrupted table.
592 436 *
593 437 * @since 1.4.0
594 438 *
595 439 * @param array<string, mixed> $data Data for this screen.
@@ -615,9 +459,9 @@
615 459 printf( __( 'Please see the <a href="%s">TablePress FAQ page</a> for further instructions.', 'tablepress' ), 'https://tablepress.org/faq/corrupted-tables/' );
616 460 ?>
617 461 </p>
618 462 <p>
619 - <?php echo '<a href="' . TablePress::url( array( 'action' => 'list' ) ) . '" class="button">' . __( 'Back to the List of Tables', 'tablepress' ) . '</a>'; ?>
463 + <?php echo '<a href="' . esc_url( TablePress::url( array( 'action' => 'list' ) ) ) . '" class="components-button is-secondary is-compact">' . __( 'Back to the List of Tables', 'tablepress' ) . '</a>'; ?>
620 464 </p>
621 465 </div>
622 466 <?php
623 467 }
@@ -622,9 +466,9 @@
622 466 <?php
623 467 }
624 468
625 469 /**
626 - * Print the screen head text.
470 + * Prints the screen head text.
627 471 *
628 472 * @since 1.0.0
629 473 *
630 474 * @param array<string, mixed> $data Data for this screen.
@@ -657,9 +501,9 @@
657 501 '#table-editor',
658 502 array(
659 503 'content' => $content,
660 504 'position' => array( 'edge' => 'bottom', 'align' => 'center' ),
661 - )
505 + ),
662 506 );
663 507 }
664 508
665 509 /**
@@ -677,9 +521,9 @@
677 521 array(
678 522 'content' => $content,
679 523 'position' => array( 'edge' => 'top', 'align' => 'right' ),
680 524 'pointerClass' => 'wp-pointer pointer-tp21_edit_screen_options',
681 - )
525 + ),
682 526 );
683 527 }
684 528
685 529 } // class TablePress_Edit_View