PluginProbe
TablePress – Tables in WordPress made easy / 3.2
TablePress – Tables in WordPress made easy v3.2
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 2.4.4 All 44 releases
← All changes | views/view-edit.php +143 -301 2.23.2 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.
@@ -36,8 +36,9 @@
36 36 *
37 37 * @param string $action Action for this view.
38 38 * @param array<string, mixed> $data Data for this view.
39 39 */
40 + #[\Override]
40 41 public function setup( /* string */ $action, array $data ) /* : void */ {
41 42 // Don't use type hints in the method declaration to prevent PHP errors, as the method is inherited.
42 43
43 44 parent::setup( $action, $data );
@@ -55,18 +56,22 @@
55 56 'success_import' => __( 'The table was imported successfully.', 'tablepress' ),
56 57 'error_delete' => __( 'Error: The table could not be deleted.', 'tablepress' ),
57 58 ) );
58 59
60 + // For the Advanced Editor.
59 61 wp_enqueue_style( 'wp-jquery-ui-dialog' );
60 62 wp_enqueue_style( 'editor-buttons' );
61 - wp_enqueue_script( 'wpdialogs' ); // For the Advanced Editor, Table Preview, and Help Boxes.
63 + wp_enqueue_script( 'wpdialogs' );
64 + // For the "Insert Image" dialog.
62 65 add_filter( 'media_view_strings', array( $this, 'change_media_view_strings' ) );
63 66 wp_enqueue_media();
64 - wp_enqueue_script( 'wplink' ); // JS for the "Insert Link" button.
67 + // For the "Insert Link" dialog.
68 + wp_enqueue_script( 'wplink' );
69 +
65 70 $this->admin_page->enqueue_style( 'jspreadsheet' );
66 71 $this->admin_page->enqueue_style( 'jsuites', array( 'tablepress-jspreadsheet' ) );
67 72 $this->admin_page->enqueue_style( 'edit', array( 'tablepress-jspreadsheet', 'tablepress-jsuites' ) );
68 - if ( tb_tp_fs()->is_free_plan() ) {
73 + if ( ! TABLEPRESS_IS_PLAYGROUND_PREVIEW && tb_tp_fs()->is_free_plan() ) {
69 74 $this->admin_page->enqueue_style( 'edit-features', array( 'tablepress-edit' ) );
70 75 }
71 76 $this->admin_page->enqueue_script( 'jspreadsheet' );
72 77 $this->admin_page->enqueue_script( 'jsuites', array( 'tablepress-jspreadsheet' ) );
@@ -72,9 +77,9 @@
72 77 $this->admin_page->enqueue_script( 'jsuites', array( 'tablepress-jspreadsheet' ) );
73 78 $this->admin_page->enqueue_script( 'edit', array( 'tablepress-jspreadsheet', 'tablepress-jsuites', 'jquery-core' ) );
74 79
75 80 $this->add_text_box( 'head', array( $this, 'textbox_head' ), 'normal' );
76 - $this->add_text_box( 'buttons-1', array( $this, 'textbox_buttons' ), 'normal' );
81 + $this->add_text_box( 'buttons-top', array( $this, 'textbox_buttons' ), 'normal' );
77 82 $this->add_meta_box( 'table-information', __( 'Table Information', 'tablepress' ), array( $this, 'postbox_table_information' ), 'normal' );
78 83 $this->add_meta_box( 'table-data', __( 'Table Content', 'tablepress' ), array( $this, 'postbox_table_data' ), 'normal' );
79 84 $this->add_meta_box( 'table-manipulation', __( 'Table Manipulation', 'tablepress' ), array( $this, 'postbox_table_manipulation' ), 'normal' );
80 85 $this->add_meta_box( 'table-options', __( 'Table Options', 'tablepress' ), array( $this, 'postbox_table_options' ), 'normal' );
@@ -79,9 +84,9 @@
79 84 $this->add_meta_box( 'table-manipulation', __( 'Table Manipulation', 'tablepress' ), array( $this, 'postbox_table_manipulation' ), 'normal' );
80 85 $this->add_meta_box( 'table-options', __( 'Table Options', 'tablepress' ), array( $this, 'postbox_table_options' ), 'normal' );
81 86 $this->add_meta_box( 'datatables-features', __( 'Table Features for Site Visitors', 'tablepress' ), array( $this, 'postbox_datatables_features' ), 'normal' );
82 87 $this->add_text_box( 'hidden-containers', array( $this, 'textbox_hidden_containers' ), 'additional' );
83 - $this->add_text_box( 'buttons-2', array( $this, 'textbox_buttons' ), 'additional' );
88 + $this->add_text_box( 'buttons-bottom', array( $this, 'textbox_buttons' ), 'additional' );
84 89 $this->add_text_box( 'other-actions', array( $this, 'textbox_other_actions' ), 'submit' );
85 90
86 91 add_filter( 'screen_settings', array( $this, 'add_screen_options_output' ), 10, 2 );
87 92 }
@@ -86,9 +91,9 @@
86 91 add_filter( 'screen_settings', array( $this, 'add_screen_options_output' ), 10, 2 );
87 92 }
88 93
89 94 /**
90 - * Change Media View string "Insert into post" to "Insert into Table".
95 + * Changes the Media View string "Insert into post" to "Insert into Table".
91 96 *
92 97 * @since 1.0.0
93 98 *
94 99 * @param array<string, string> $strings Current set of Media View strings.
@@ -107,9 +112,16 @@
107 112 * @param string $screen_settings Screen settings.
108 113 * @param WP_Screen $screen WP_Screen object.
109 114 * @return string Extended Screen settings.
110 115 */
111 - public function add_screen_options_output( string $screen_settings, WP_Screen $screen ): string {
116 + public function add_screen_options_output( /* string */ $screen_settings, WP_Screen $screen ): string {
117 + // 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.
118 +
119 + // Protect against other plugins not returning a string for the `$screen_settings` argument.
120 + if ( ! is_string( $screen_settings ) ) { // @phpstan-ignore function.alreadyNarrowedType (The `is_string()` check is needed as the input is coming from a filter hook.)
121 + $screen_settings = '';
122 + }
123 +
112 124 $screen_settings = '<fieldset id="tablepress-screen-options" class="screen-options">';
113 125 $screen_settings .= '<legend>' . __( 'Table editor settings', 'tablepress' ) . '</legend>';
114 126 $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>';
115 127 $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>';
@@ -114,14 +126,16 @@
114 126 $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>';
115 127 $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>';
116 128 $screen_settings .= '<div>';
117 129 $screen_settings .= '<label for="table_editor_column_width">' . __( 'Default column width:', 'tablepress' ) . '</label> ';
118 - $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" />';
130 + $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">';
131 + /* translators: %s: Input field for the number of pixels */
119 132 $screen_settings .= sprintf( __( '%s pixels', 'tablepress' ), $input );
120 133 $screen_settings .= '</div>';
121 134 $screen_settings .= '<div style="margin-top: 6px;">';
122 135 $screen_settings .= '<label for="table_editor_line_clamp">' . __( 'Maximum visible lines of text:', 'tablepress' ) . '</label> ';
123 - $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" />';
136 + $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">';
137 + /* translators: %s: Input field for the number of lines */
124 138 $screen_settings .= sprintf( __( '%s lines', 'tablepress' ), $input );
125 139 $screen_settings .= '</div>';
126 140 $screen_settings .= '</fieldset>';
127 141 return $screen_settings;
@@ -126,9 +140,8 @@
126 140 $screen_settings .= '</fieldset>';
127 141 return $screen_settings;
128 142 }
129 143
130 -
131 144 /**
132 145 * Renders the current view.
133 146 *
134 147 * In comparison to the parent class method, this contains handling for the no-js case and adjusts the HTML code structure.
@@ -134,9 +147,12 @@
134 147 * In comparison to the parent class method, this contains handling for the no-js case and adjusts the HTML code structure.
135 148 *
136 149 * @since 2.0.0
137 150 */
151 + #[\Override]
138 152 public function render(): void {
153 + $this->print_javascript_data();
154 +
139 155 ?>
140 156 <div id="tablepress-page" class="wrap">
141 157 <form>
142 158 <?php
@@ -142,9 +158,9 @@
142 158 <?php
143 159 $this->print_nav_tab_menu();
144 160 ?>
145 161 <div id="tablepress-body">
146 - <hr class="wp-header-end" />
162 + <hr class="wp-header-end">
147 163 <?php
148 164 // Print all header messages.
149 165 foreach ( $this->header_messages as $message ) {
150 166 echo $message;
@@ -168,9 +184,9 @@
168 184 $this->do_meta_boxes( 'side' );
169 185 ?>
170 186 </div>
171 187 </div>
172 - <br class="clear" />
188 + <br class="clear">
173 189 </div>
174 190 </form>
175 191 </div>
176 192 </div>
@@ -177,9 +193,9 @@
177 193 <?php
178 194 }
179 195
180 196 /**
181 - * Override parent class method, as the nonces for this view are generated in the JS code.
197 + * Overrides parent class method, as the nonces for this view are generated in the JS code.
182 198 *
183 199 * @since 1.0.0
184 200 *
185 201 * @param array<string, mixed> $data Data for this screen.
@@ -184,15 +200,73 @@
184 200 *
185 201 * @param array<string, mixed> $data Data for this screen.
186 202 * @param array<string, mixed> $box Information about the text box.
187 203 */
204 + #[\Override]
188 205 protected function action_nonce_field( array $data, array $box ): void {
189 - // Intentionally left empty. Nonces for this view are generated in postbox_table_data().
206 + // Intentionally left empty. Nonces for this view are generated in `print_javascript_data()`.
190 207 }
191 208
192 209 /**
193 - * Print the content of the "Table Information" post meta box.
210 + * Prints the table data for use in JS code and the main React container.
194 211 *
212 + * @since 3.0.0
213 + */
214 + public function print_javascript_data(): void {
215 + echo "<script>\n";
216 + echo "window.tp = window.tp || {};\n";
217 +
218 + echo "tp.nonces = {\n";
219 + echo "\tedit_table: '" . wp_create_nonce( TablePress::nonce( $this->action, $this->data['table']['id'] ) ) . "',\n";
220 + echo "\tpreview_table: '" . wp_create_nonce( TablePress::nonce( 'preview_table', $this->data['table']['id'] ) ) . "',\n";
221 + echo "\tcopy_table: '" . wp_create_nonce( TablePress::nonce( 'copy_table', $this->data['table']['id'] ) ) . "',\n";
222 + echo "\tdelete_table: '" . wp_create_nonce( TablePress::nonce( 'delete_table', $this->data['table']['id'] ) ) . "',\n";
223 + echo "\tscreen_options: '" . wp_create_nonce( TablePress::nonce( 'screen_options' ) ) . "',\n";
224 + echo "};\n";
225 +
226 + echo "tp.table = {\n";
227 + echo "\tid: '{$this->data['table']['id']}',\n";
228 + echo "\tshortcode: '" . esc_js( TablePress::$shortcode ) . "',\n";
229 +
230 + // Add the table meta data.
231 + $this->data['table']['meta'] = array(
232 + 'id' => $this->data['table']['id'],
233 + 'name' => $this->data['table']['name'],
234 + 'description' => $this->data['table']['description'],
235 + 'lastModified' => TablePress::format_datetime( $this->data['table']['last_modified'] ),
236 + 'lastEditor' => TablePress::get_user_display_name( $this->data['table']['options']['last_editor'] ),
237 + );
238 +
239 + // JSON-encode array items separately to save some PHP memory.
240 + foreach ( array( 'meta', 'data', 'options', 'visibility' ) as $item ) {
241 + $json = $this->convert_to_json_parse_output( $this->data['table'][ $item ] );
242 + echo "\t{$item}: {$json},\n";
243 + }
244 + echo "};\n";
245 +
246 + echo "tp.screenOptions = {\n";
247 + echo "\ttable_editor_column_width: " . absint( TablePress::$model_options->get( 'table_editor_column_width' ) ) . ",\n";
248 + echo "\tshowCustomCommands: " . ( current_user_can( 'unfiltered_html' ) ? 'true' : 'false' ) . ",\n";
249 + echo "\toptionsUrl: '" . TablePress::url( array( 'action' => 'options' ) ) . "',\n";
250 + echo "\tcurrentUserCanEditTableId: " . ( current_user_can( 'tablepress_edit_table_id', $this->data['table']['id'] ) ? 'true' : 'false' ) . ",\n";
251 + echo "\tcurrentUserCanCopyTable: " . ( current_user_can( 'tablepress_copy_table', $this->data['table']['id'] ) ? 'true' : 'false' ) . ",\n";
252 + echo "\tcurrentUserCanDeleteTable: " . ( current_user_can( 'tablepress_delete_table', $this->data['table']['id'] ) ? 'true' : 'false' ) . ",\n";
253 + echo "\tcurrentUserCanExportTable: " . ( current_user_can( 'tablepress_export_table', $this->data['table']['id'] ) ? 'true' : 'false' ) . ",\n";
254 + echo "\tcurrentUserCanPreviewTable: " . ( current_user_can( 'tablepress_preview_table', $this->data['table']['id'] ) ? 'true' : 'false' ) . ",\n";
255 + echo "\tcopyUrl: '" . str_replace( '&amp;', '&', TablePress::url( array( 'action' => 'copy_table', 'item' => $this->data['table']['id'], 'return' => 'edit' ), true, 'admin-post.php' ) ) . "',\n";
256 + echo "\tdeleteUrl: '" . str_replace( '&amp;', '&', TablePress::url( array( 'action' => 'delete_table', 'item' => $this->data['table']['id'], 'return' => 'edit', 'return_item' => $this->data['table']['id'] ), true, 'admin-post.php' ) ) . "',\n";
257 + echo "\texportUrl: '" . str_replace( '&amp;', '&', TablePress::url( array( 'action' => 'export', 'table_id' => $this->data['table']['id'] ) ) ) . "',\n";
258 + echo "\tpreviewUrl: '" . 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";
259 + echo "};\n";
260 +
261 + echo "</script>\n";
262 +
263 + echo '<div id="tablepress-edit-screen"></div>'; // React container.
264 + }
265 +
266 + /**
267 + * Prints the content of the "Table Information" post meta box.
268 + *
195 269 * @since 1.0.0
196 270 *
197 271 * @param array<string, mixed> $data Data for this screen.
198 272 * @param array<string, mixed> $box Information about the meta box.
@@ -197,40 +271,17 @@
197 271 * @param array<string, mixed> $data Data for this screen.
198 272 * @param array<string, mixed> $box Information about the meta box.
199 273 */
200 274 public function postbox_table_information( array $data, array $box ): void {
201 - ?>
202 -<table class="tablepress-postbox-table fixed">
203 - <tr class="bottom-border">
204 - <th class="column-1" scope="row"><label for="table-id"><?php _e( 'Table ID', 'tablepress' ); ?>:</label></th>
205 - <td class="column-2">
206 - <div id="table-id-shortcode-wrapper">
207 - <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 ' : ''; ?>/>
208 - <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>
209 - </div>
210 - </td>
211 - </tr>
212 - <tr class="top-border">
213 - <th class="column-1" scope="row"><label for="table-name"><?php _e( 'Table Name', 'tablepress' ); ?>:</label></th>
214 - <td class="column-2"><input type="text" id="table-name" class="large-text" value="<?php echo esc_attr( $data['table']['name'] ); ?>" /></td>
215 - </tr>
216 - <tr class="bottom-border">
217 - <th class="column-1 top-align" scope="row"><label for="table-description"><?php _e( 'Description', 'tablepress' ); ?>:</label></th>
218 - <td class="column-2"><textarea id="table-description" class="large-text" rows="4"><?php echo esc_textarea( $data['table']['description'] ); ?></textarea></td>
219 - </tr>
220 - <tr class="top-border">
221 - <th class="column-1" scope="row"><?php _e( 'Last Modified', 'tablepress' ); ?>:</th>
222 - <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>
223 - </tr>
224 -</table>
225 - <?php
226 - if ( tb_tp_fs()->is_free_plan() ) :
275 + echo '<div id="tablepress-table-information-section"></div>';
276 +
277 + if ( ! TABLEPRESS_IS_PLAYGROUND_PREVIEW && tb_tp_fs()->is_free_plan() ) :
227 278 ?>
228 279 <div class="postbox premium-features">
229 280 <div>
230 281 <div>
231 282 <div class="postbox-header">
232 - <h2><span class="dashicons dashicons-heart"></span> <?php _e( 'TablePress has more to offer!', 'tablepress' ); ?></h2>
283 + <h2><span class="dashicons dashicons-lightbulb"></span> <?php _e( 'TablePress has more to offer!', 'tablepress' ); ?></h2>
233 284 </div>
234 285 <div class="inside">
235 286 <?php
236 287 TablePress::init_modules();
@@ -244,9 +295,9 @@
244 295 ?>
245 296 </div>
246 297 </div>
247 298 <div class="buttons">
248 - <a href="<?php echo 'https://tablepress.org/premium/?utm_source=plugin&utm_medium=textlink&utm_content=edit-screen'; ?>" class="tablepress-button">
299 + <a href="https://tablepress.org/premium/?utm_source=plugin&utm_medium=textlink&utm_content=edit-screen" class="tablepress-button">
249 300 <span><?php _e( 'Compare the TablePress premium versions', 'tablepress' ); ?></span>
250 301 <span class="dashicons dashicons-arrow-right-alt"></span>
251 302 </a>
252 303 </div>
@@ -256,9 +307,9 @@
256 307 endif;
257 308 }
258 309
259 310 /**
260 - * Print the content of the "Table Content" post meta box.
311 + * Prints the content of the "Table Content" post meta box.
261 312 *
262 313 * @since 1.0.0
263 314 *
264 315 * @param array<string, mixed> $data Data for this screen.
@@ -264,30 +315,8 @@
264 315 * @param array<string, mixed> $data Data for this screen.
265 316 * @param array<string, mixed> $box Information about the meta box.
266 317 */
267 318 public function postbox_table_data( array $data, array $box ): void {
268 - echo "<script>\n";
269 - echo "window.tp = window.tp || {};\n";
270 -
271 - echo "tp.nonces = {};\n";
272 - echo "tp.nonces.edit_table = '" . wp_create_nonce( TablePress::nonce( $this->action, $data['table']['id'] ) ) . "';\n";
273 - echo "tp.nonces.preview_table = '" . wp_create_nonce( TablePress::nonce( 'preview_table', $data['table']['id'] ) ) . "';\n";
274 - echo "tp.nonces.screen_options = '" . wp_create_nonce( TablePress::nonce( 'screen_options' ) ) . "';\n";
275 -
276 - echo "tp.table = {};\n";
277 - echo "tp.table.shortcode = '" . esc_js( TablePress::$shortcode ) . "';\n";
278 - echo "tp.table.id = '{$data['table']['id']}';\n";
279 - echo "tp.table.new_id = '{$data['table']['id']}';\n";
280 - // JSON-encode array items separately to save some PHP memory.
281 - foreach ( array( 'data', 'options', 'visibility' ) as $item ) {
282 - $json = $this->admin_page->convert_to_json_parse_output( $data['table'][ $item ] );
283 - printf( 'tp.table.%1$s = %2$s;' . "\n", $item, $json );
284 - }
285 -
286 - echo "tp.screen_options = {};\n";
287 - echo 'tp.screen_options.table_editor_column_width = ' . absint( TablePress::$model_options->get( 'table_editor_column_width' ) ) . ";\n";
288 - echo "</script>\n";
289 -
290 319 $css_variables = '--table-editor-line-clamp:' . absint( TablePress::$model_options->get( 'table_editor_line_clamp' ) ) . ';';
291 320 $css_variables = esc_attr( $css_variables );
292 321 echo "<div id=\"table-editor\" style=\"{$css_variables}\"></div>";
293 322 }
@@ -292,9 +321,9 @@
292 321 echo "<div id=\"table-editor\" style=\"{$css_variables}\"></div>";
293 322 }
294 323
295 324 /**
296 - * Print the content of the "Table Manipulation" post meta box.
325 + * Prints the content of the "Table Manipulation" post meta box.
297 326 *
298 327 * @since 1.0.0
299 328 *
300 329 * @param array<string, mixed> $data Data for this screen.
@@ -300,77 +329,13 @@
300 329 * @param array<string, mixed> $data Data for this screen.
301 330 * @param array<string, mixed> $box Information about the meta box.
302 331 */
303 332 public function postbox_table_manipulation( array $data, array $box ): void {
304 - ?>
305 -<table id="tablepress-manipulation-controls" class="tablepress-postbox-table fixed">
306 - <tr class="bottom-border">
307 - <td class="column-1">
308 - <?php _e( 'Selected cells', 'tablepress' ); ?>:&nbsp;
309 - <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' ) ); ?>" />
310 - <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' ) ); ?>" />
311 - <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' ) ); ?>" />
312 - </td>
313 - <td class="column-2">
314 - <?php _e( 'Selected cells', 'tablepress' ); ?>:&nbsp;
315 - <input type="button" class="button button-merge-unmerge" data-action="merge" value="<?php esc_attr_e( 'Combine/Merge', 'tablepress' ); ?>" />
316 - <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" />
317 - </td>
318 - </tr>
319 - <tr class="top-border">
320 - <td class="column-1">
321 - <?php _e( 'Selected rows', 'tablepress' ); ?>:&nbsp;
322 - <input type="button" class="button button-insert-duplicate" data-type="rows" data-action="duplicate" value="<?php esc_attr_e( 'Duplicate', 'tablepress' ); ?>" />
323 - <input type="button" class="button button-insert-duplicate" data-type="rows" data-action="insert" value="<?php esc_attr_e( 'Insert', 'tablepress' ); ?>" />
324 - <input type="button" class="button button-remove" data-type="rows" value="<?php esc_attr_e( 'Delete', 'tablepress' ); ?>" />
325 - </td>
326 - <td class="column-2">
327 - <?php _e( 'Selected columns', 'tablepress' ); ?>:&nbsp;
328 - <input type="button" class="button button-insert-duplicate" data-type="columns" data-action="duplicate" value="<?php esc_attr_e( 'Duplicate', 'tablepress' ); ?>" />
329 - <input type="button" class="button button-insert-duplicate" data-type="columns" data-action="insert" value="<?php esc_attr_e( 'Insert', 'tablepress' ); ?>" />
330 - <input type="button" class="button button-remove" data-type="columns" value="<?php esc_attr_e( 'Delete', 'tablepress' ); ?>" />
331 - </td>
332 - </tr>
333 - <tr>
334 - <td class="column-1">
335 - <?php _e( 'Selected rows', 'tablepress' ); ?>:&nbsp;
336 - <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' ) ); ?>" />
337 - <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' ) ); ?>" />
338 - </td>
339 - <td class="column-2">
340 - <?php _e( 'Selected columns', 'tablepress' ); ?>:&nbsp;
341 - <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' ) ); ?>" />
342 - <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' ) ); ?>" />
343 - </td>
344 - </tr>
345 - <tr class="bottom-border">
346 - <td class="column-1">
347 - <?php _e( 'Selected rows', 'tablepress' ); ?>:&nbsp;
348 - <input type="button" class="button button-hide-unhide" data-type="rows" data-action="hide" value="<?php esc_attr_e( 'Hide', 'tablepress' ); ?>" />
349 - <input type="button" class="button button-hide-unhide" data-type="rows" data-action="unhide" value="<?php esc_attr_e( 'Show', 'tablepress' ); ?>" />
350 - </td>
351 - <td class="column-2">
352 - <?php _e( 'Selected columns', 'tablepress' ); ?>:&nbsp;
353 - <input type="button" class="button button-hide-unhide" data-type="columns" data-action="hide" value="<?php esc_attr_e( 'Hide', 'tablepress' ); ?>" />
354 - <input type="button" class="button button-hide-unhide" data-type="columns" data-action="unhide" value="<?php esc_attr_e( 'Show', 'tablepress' ); ?>" />
355 - </td>
356 - </tr>
357 - <tr class="top-border">
358 - <td class="column-1">
359 - <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;
360 - <input type="button" class="button button-append" data-type="rows" value="<?php esc_attr_e( 'Add', 'tablepress' ); ?>" />
361 - </td>
362 - <td class="column-2">
363 - <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;
364 - <input type="button" class="button button-append" data-type="columns" value="<?php esc_attr_e( 'Add', 'tablepress' ); ?>" />
365 - </td>
366 - </tr>
367 -</table>
368 - <?php
333 + echo '<div id="tablepress-table-manipulation-section"></div>';
369 334 }
370 335
371 336 /**
372 - * Print the "Preview" and "Save Changes" button.
337 + * Prints the container for the "Preview" and "Save Changes" buttons.
373 338 *
374 339 * @since 1.0.0
375 340 *
376 341 * @param array<string, mixed> $data Data for this screen.
@@ -376,22 +341,14 @@
376 341 * @param array<string, mixed> $data Data for this screen.
377 342 * @param array<string, mixed> $box Information about the text box.
378 343 */
379 344 public function textbox_buttons( array $data, array $box ): void {
380 - $preview_url = TablePress::url( array( 'action' => 'preview_table', 'item' => $data['table']['id'], 'return' => 'edit', 'return_item' => $data['table']['id'] ), true, 'admin-post.php' );
381 -
382 - echo '<p id="' . $box['id'] . '-submit" class="submit">';
383 - if ( current_user_can( 'tablepress_preview_table', $data['table']['id'] ) ) {
384 - 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>';
385 - }
386 - ?>
387 - <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' ) ); ?>" />
388 - <?php
389 - echo '</p>';
345 + echo '<div id="tablepress-' . $box['id'] . '-section" class="section-has-react-loading-text">';
346 + echo '</div>';
390 347 }
391 348
392 349 /**
393 - * Print the "Delete Table" and "Export Table" buttons.
350 + * Prints the container for the "Copy Table, "Export Table", and "Delete Table" buttons.
394 351 *
395 352 * @since 1.0.0
396 353 *
397 354 * @param array<string, mixed> $data Data for this screen.
@@ -397,32 +354,13 @@
397 354 * @param array<string, mixed> $data Data for this screen.
398 355 * @param array<string, mixed> $box Information about the text box.
399 356 */
400 357 public function textbox_other_actions( array $data, array $box ): void {
401 - $user_can_copy_table = current_user_can( 'tablepress_copy_table', $data['table']['id'] );
402 - $user_can_export_table = current_user_can( 'tablepress_export_table', $data['table']['id'] );
403 - $user_can_delete_table = current_user_can( 'tablepress_delete_table', $data['table']['id'] );
404 -
405 - if ( ! $user_can_copy_table && ! $user_can_export_table && ! $user_can_delete_table ) {
406 - return;
407 - }
408 -
409 - echo '<p class="submit">';
410 - echo __( 'Other Actions', 'tablepress' ) . ':&nbsp; ';
411 - if ( $user_can_copy_table ) {
412 - 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> ';
413 - }
414 - if ( $user_can_export_table ) {
415 - echo '<a href="' . TablePress::url( array( 'action' => 'export', 'table_id' => $data['table']['id'] ) ) . '" class="button">' . __( 'Export Table', 'tablepress' ) . '</a> ';
416 - }
417 - if ( $user_can_delete_table ) {
418 - 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>';
419 - }
420 - echo '</p>';
358 + echo '<div id="tablepress-other-actions-section"></div>';
421 359 }
422 360
423 361 /**
424 - * Print the hidden containers for the Preview.
362 + * Prints the hidden containers for the Preview.
425 363 *
426 364 * @since 1.0.0
427 365 *
428 366 * @param array<string, mixed> $data Data for this screen.
@@ -429,8 +367,9 @@
429 367 * @param array<string, mixed> $box Information about the text box.
430 368 */
431 369 public function textbox_hidden_containers( array $data, array $box ): void {
432 370 ?>
371 +<div id="tablepress-table-preview-section"></div>
433 372 <div class="hidden-container">
434 373 <div id="advanced-editor">
435 374 <label id="advanced-editor-label" for="advanced-editor-content" class="screen-reader-text"><?php esc_html_e( 'Advanced Editor', 'tablepress' ); ?></label>
436 375 <?php
@@ -443,32 +382,15 @@
443 382 );
444 383 wp_editor( '', 'advanced-editor-content', $wp_editor_options );
445 384 ?>
446 385 </div>
447 -</div>
448 -<div id="preview-container" class="hidden-container">
449 - <div id="table-preview">
450 - <iframe id="table-preview-iframe" src="about:blank"></iframe>
451 - </div>
452 -</div>
453 -<div class="hidden-container">
454 386 <textarea id="textarea-insert-helper" class="hidden"></textarea>
455 387 </div>
456 -<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">
457 388 <?php
458 - echo '<p>' . __( 'Table cells can span across more than one column or row.', 'tablepress' ) . '</p>';
459 - echo '<p>' . __( 'Combining consecutive cells within the same row is called &#8220;colspanning&#8221;.', 'tablepress' )
460 - . ' ' . __( 'Combining consecutive cells within the same column is called &#8220;rowspanning&#8221;.', 'tablepress' ) . '</p>';
461 - 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' ) )
462 - . ' ' . __( 'The corresponding keywords, <code>#colspan#</code> and <code>#rowspan#</code>, will then be added for you.', 'tablepress' ) . '</p>';
463 - 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>';
464 - ?>
465 -</div>
466 - <?php
467 389 }
468 390
469 391 /**
470 - * Print the content of the "Table Options" post meta box.
392 + * Prints the content of the "Table Options" post meta box.
471 393 *
472 394 * @since 1.0.0
473 395 *
474 396 * @param array<string, mixed> $data Data for this screen.
@@ -474,56 +396,13 @@
474 396 * @param array<string, mixed> $data Data for this screen.
475 397 * @param array<string, mixed> $box Information about the meta box.
476 398 */
477 399 public function postbox_table_options( array $data, array $box ): void {
478 - ?>
479 -<table class="tablepress-postbox-table fixed">
480 - <tr>
481 - <th class="column-1" scope="row"><?php _e( 'Table Head Row', 'tablepress' ); ?>:</th>
482 - <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>
483 - </tr>
484 - <tr class="bottom-border">
485 - <th class="column-1" scope="row"><?php _e( 'Table Foot Row', 'tablepress' ); ?>:</th>
486 - <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>
487 - </tr>
488 - <tr class="top-border">
489 - <th class="column-1" scope="row"><?php _e( 'Alternating Row Colors', 'tablepress' ); ?>:</th>
490 - <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>
491 - </tr>
492 - <tr class="bottom-border">
493 - <th class="column-1" scope="row"><?php _e( 'Row Hover Highlighting', 'tablepress' ); ?>:</th>
494 - <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>
495 - </tr>
496 - <tr class="top-border">
497 - <th class="column-1" scope="row"><label for="option-print_name"><?php _e( 'Print Table Name', 'tablepress' ); ?></label>:</th>
498 - <?php
499 - $position_select = '<select id="option-print_name_position" name="print_name_position">';
500 - $position_select .= '<option value="above">' . __( 'above', 'tablepress' ) . '</option>';
501 - $position_select .= '<option value="below">' . __( 'below', 'tablepress' ) . '</option>';
502 - $position_select .= '</select>';
503 - ?>
504 - <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>
505 - </tr>
506 - <tr class="bottom-border">
507 - <th class="column-1" scope="row"><label for="option-print_description"><?php _e( 'Print Table Description', 'tablepress' ); ?></label>:</th>
508 - <?php
509 - $position_select = '<select id="option-print_description_position" name="print_description_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_description" name="print_description" /> <label><?php printf( _x( 'Show the table description %s the table.', 'position (above or below)', 'tablepress' ), $position_select ); ?></label></td>
515 - </tr>
516 - <tr class="top-border">
517 - <th class="column-1" scope="row"><?php _e( 'Extra CSS Classes', 'tablepress' ); ?>:</th>
518 - <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>
519 - </tr>
520 -</table>
521 - <?php
400 + echo '<div id="tablepress-table-options-section"></div>';
522 401 }
523 402
524 403 /**
525 - * Print the content of the "Table Features for Site Visitors" post meta box.
404 + * Prints the content of the "Table Features for Site Visitors" post meta box.
526 405 *
527 406 * @since 1.0.0
528 407 *
529 408 * @param array<string, mixed> $data Data for this screen.
@@ -529,57 +408,13 @@
529 408 * @param array<string, mixed> $data Data for this screen.
530 409 * @param array<string, mixed> $box Information about the meta box.
531 410 */
532 411 public function postbox_datatables_features( array $data, array $box ): void {
533 - ?>
534 -<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>
535 -<table class="tablepress-postbox-table fixed">
536 - <tr class="bottom-border">
537 - <th class="column-1" scope="row"><?php _e( 'Enable Visitor Features', 'tablepress' ); ?>:</th>
538 - <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>
539 - </tr>
540 - <tr class="top-border">
541 - <th class="column-1" scope="row"><?php _e( 'Sorting', 'tablepress' ); ?>:</th>
542 - <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>
543 - </tr>
544 - <tr>
545 - <th class="column-1" scope="row"><?php _e( 'Search/Filtering', 'tablepress' ); ?>:</th>
546 - <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>
547 - </tr>
548 - <tr>
549 - <th class="column-1" scope="row" style="vertical-align: top;"><?php _e( 'Pagination', 'tablepress' ); ?>:</th>
550 - <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 />
551 - <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>
552 - </tr>
553 - <tr>
554 - <th class="column-1" scope="row"><?php _e( 'Pagination Length Change', 'tablepress' ); ?>:</th>
555 - <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>
556 - </tr>
557 - <tr>
558 - <th class="column-1" scope="row"><?php _e( 'Info', 'tablepress' ); ?>:</th>
559 - <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>
560 - </tr>
561 - <tr<?php echo current_user_can( 'unfiltered_html' ) ? ' class="bottom-border"' : ''; ?>>
562 - <th class="column-1" scope="row"><?php _e( 'Horizontal Scrolling', 'tablepress' ); ?>:</th>
563 - <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>
564 - </tr>
565 - <?php
566 - // "Custom Commands" must only be available to trusted users.
567 - if ( current_user_can( 'unfiltered_html' ) ) {
568 - ?>
569 - <tr class="top-border">
570 - <th class="column-1" scope="row"><?php _e( 'Custom Commands', 'tablepress' ); ?>:</th>
571 - <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>
572 - </tr>
573 - <?php
574 - } // if
575 - ?>
576 -</table>
577 - <?php
412 + echo '<div id="tablepress-datatables-features-section"></div>';
578 413 }
579 414
580 415 /**
581 - * Print a notification about a corrupted table.
416 + * Prints a notification about a corrupted table.
582 417 *
583 418 * @since 1.4.0
584 419 *
585 420 * @param array<string, mixed> $data Data for this screen.
@@ -586,35 +421,40 @@
586 421 * @param array<string, mixed> $box Information about the text box.
587 422 */
588 423 public function textbox_corrupted_table( array $data, array $box ): void {
589 424 ?>
590 - <div class="notice notice-error notice-large">
591 - <h3><em>
592 - <?php _e( 'Attention: Unfortunately, an error occurred.', 'tablepress' ); ?>
593 - </em></h3>
594 - <p>
595 - <?php
596 - printf( __( 'The internal data of table &#8220;%1$s&#8221; (ID %2$s) is corrupted.', 'tablepress' ), esc_html( $data['table']['name'] ), esc_html( $data['table']['id'] ) );
597 - echo ' ';
598 - printf( __( 'The following error was registered: %s.', 'tablepress' ), '<code>' . esc_html( $data['table']['json_error'] ) . '</code>' );
599 - ?>
600 - </p>
601 - <p>
602 - <?php
603 - _e( 'Because of this error, the table can not be edited at this time, to prevent possible further data loss.', 'tablepress' );
604 - echo ' ';
605 - printf( __( 'Please see the <a href="%s">TablePress FAQ page</a> for further instructions.', 'tablepress' ), 'https://tablepress.org/faq/corrupted-tables/' );
606 - ?>
607 - </p>
608 - <p>
609 - <?php echo '<a href="' . TablePress::url( array( 'action' => 'list' ) ) . '" class="button">' . __( 'Back to the List of Tables', 'tablepress' ) . '</a>'; ?>
610 - </p>
425 + <div class="notice components-notice is-error">
426 + <div class="components-notice__content">
427 + <h3><em>
428 + <?php _e( 'Attention: Unfortunately, an error occurred.', 'tablepress' ); ?>
429 + </em></h3>
430 + <p>
431 + <?php
432 + /* translators: %1$s: Table name, %2$s: Table ID */
433 + printf( __( 'The internal data of table &#8220;%1$s&#8221; (ID %2$s) is corrupted.', 'tablepress' ), esc_html( $data['table']['name'] ), esc_html( $data['table']['id'] ) );
434 + echo ' ';
435 + /* translators: %s: Error message */
436 + printf( __( 'The following error was registered: %s.', 'tablepress' ), '<code>' . esc_html( $data['table']['json_error'] ) . '</code>' );
437 + ?>
438 + </p>
439 + <p>
440 + <?php
441 + _e( 'Because of this error, the table can not be edited at this time, to prevent possible further data loss.', 'tablepress' );
442 + echo ' ';
443 + /* translators: %s: URL to TablePress FAQ page */
444 + printf( __( 'Please see the <a href="%s">TablePress FAQ page</a> for further instructions.', 'tablepress' ), 'https://tablepress.org/faq/corrupted-tables/' );
445 + ?>
446 + </p>
447 + <p>
448 + <?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>'; ?>
449 + </p>
450 + </div>
611 451 </div>
612 452 <?php
613 453 }
614 454
615 455 /**
616 - * Print the screen head text.
456 + * Prints the screen head text.
617 457 *
618 458 * @since 1.0.0
619 459 *
620 460 * @param array<string, mixed> $data Data for this screen.
@@ -624,10 +464,12 @@
624 464 echo '<p>';
625 465 _e( 'To edit the content or modify the structure of this table, use the input fields and buttons below.', 'tablepress' );
626 466 echo ' ';
627 467 // Show the instructions string depending on whether the Block Editor is used on the site or not.
628 - if ( $data['site_uses_block_editor'] ) {
468 + if ( 'block' === $data['site_used_editor'] ) {
629 469 printf( __( 'To insert a table into a post or page, add a “%1$s” block in the block editor and select the desired table.', 'tablepress' ), __( 'TablePress table', 'tablepress' ) );
470 + } elseif ( 'elementor' === $data['site_used_editor'] ) {
471 + printf( __( 'To insert a table into a post or page, add a “%1$s” widget in the Elementor editor and select the desired table.', 'tablepress' ), __( 'TablePress table', 'tablepress' ) );
630 472 } else {
631 473 _e( 'To insert a table into a post or page, paste its Shortcode at the desired place in the editor.', 'tablepress' );
632 474 }
633 475 echo '</p>';
@@ -647,9 +489,9 @@
647 489 '#table-editor',
648 490 array(
649 491 'content' => $content,
650 492 'position' => array( 'edge' => 'bottom', 'align' => 'center' ),
651 - )
493 + ),
652 494 );
653 495 }
654 496
655 497 /**
@@ -667,9 +509,9 @@
667 509 array(
668 510 'content' => $content,
669 511 'position' => array( 'edge' => 'top', 'align' => 'right' ),
670 512 'pointerClass' => 'wp-pointer pointer-tp21_edit_screen_options',
671 - )
513 + ),
672 514 );
673 515 }
674 516
675 517 } // class TablePress_Edit_View