Simple Custom CSS and JS - Version 3.39

Version Description

  • 03/16/2022
  • Fix: load the CodeMirror options from a localized variable
  • Tweak: add the "ccj_code_editor_settings" filter for modifying the editor's options
Download this release

Release Info

Developer diana_burduja
Plugin Icon 128x128 Simple Custom CSS and JS
Version 3.39
Comparing to
See all releases

Code changes from version 3.38 to 3.39

Files changed (4) hide show
  1. assets/ccj_admin.js +11 -26
  2. custom-css-js.php +40 -35
  3. includes/admin-screens.php +28 -16
  4. readme.txt +14 -20
assets/ccj_admin.js CHANGED
@@ -12,36 +12,21 @@ jQuery(document).ready( function($) {
12
  mode: null}]
13
  };
14
  }
15
- var options = {
16
- lineNumbers: true,
17
- mode: content_mode,
18
- matchBrackets: true,
19
- autoCloseBrackets: true,
20
- styleActiveLine: true,
21
- extraKeys: {
22
- "F11": function(cm) {
23
- cm.setOption("fullScreen", !cm.getOption("fullScreen"));
24
- fullscreen_buttons( true );
25
- },
26
- "Esc": function(cm) {
27
- if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
28
- fullscreen_buttons( false );
29
- },
30
- "Ctrl-Space": "autocomplete",
31
- "Cmd-Space": "autocomplete",
32
- "Ctrl-F": "findPersistent",
33
- "Cmd-F": "findPersistent",
34
- "Ctrl-/": "toggleComment",
35
- "Cmd-/": "toggleComment",
36
- "Ctrl-J": "toMatchingTag",
37
- },
38
- };
39
 
40
  var cm_width = $('#title').width() + 16;
41
  var cm_height = 500;
42
 
43
- var editor = CodeMirror.fromTextArea(document.getElementById("ccj_content"), options);
44
-
45
  editor.setSize(cm_width, cm_height);
46
 
47
  $('.CodeMirror').resizable({
12
  mode: null}]
13
  };
14
  }
15
+
16
+ CCJ.codemirror.mode = content_mode;
17
+ CCJ.codemirror.extraKeys.F11 = function(cm) {
18
+ cm.setOption("fullScreen", !cm.getOption("fullScreen"));
19
+ fullscreen_buttons( true );
20
+ };
21
+ CCJ.codemirror.extraKeys.Esc = function(cm) {
22
+ if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
23
+ fullscreen_buttons( false );
24
+ };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
 
26
  var cm_width = $('#title').width() + 16;
27
  var cm_height = 500;
28
 
29
+ var editor = CodeMirror.fromTextArea(document.getElementById("ccj_content"), CCJ.codemirror);
 
30
  editor.setSize(cm_width, cm_height);
31
 
32
  $('.CodeMirror').resizable({
custom-css-js.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Simple Custom CSS and JS
4
  * Plugin URI: https://wordpress.org/plugins/custom-css-js/
5
  * Description: Easily add Custom CSS or JS to your website with an awesome editor.
6
- * Version: 3.38
7
  * Author: SilkyPress.com
8
  * Author URI: https://www.silkypress.com
9
  * License: GPL2
@@ -12,7 +12,7 @@
12
  * Domain Path: /languages/
13
  *
14
  * WC requires at least: 3.0.0
15
- * WC tested up to: 6.0
16
  */
17
 
18
  if ( ! defined( 'ABSPATH' ) ) {
@@ -95,7 +95,7 @@ if ( ! class_exists( 'CustomCSSandJS' ) ) :
95
 
96
  if ( is_null( self::$_instance ) ) {
97
  $this->print_code_actions();
98
- if ( isset ( $this->search_tree['jquery'] ) && $this->search_tree['jquery'] === true ) {
99
  add_action( 'wp_enqueue_scripts', 'CustomCSSandJS::wp_enqueue_scripts' );
100
  }
101
  }
@@ -104,7 +104,7 @@ if ( ! class_exists( 'CustomCSSandJS' ) ) :
104
  /**
105
  * Add the appropriate wp actions
106
  */
107
- function print_code_actions() {
108
  foreach ( $this->search_tree as $_key => $_value ) {
109
  $action = 'wp_';
110
  if ( strpos( $_key, 'admin' ) !== false ) {
@@ -121,7 +121,7 @@ if ( ! class_exists( 'CustomCSSandJS' ) ) :
121
  $action .= 'footer';
122
  }
123
 
124
- $priority = ( $action == 'wp_footer' ) ? 40 : 10;
125
 
126
  add_action( $action, array( $this, 'print_' . $_key ), $priority );
127
  }
@@ -154,17 +154,17 @@ if ( ! class_exists( 'CustomCSSandJS' ) ) :
154
  $type = strpos( $function, 'html' ) !== false ? 'html' : $type;
155
  $tag = array( 'css' => 'style', 'js' => 'script' );
156
 
157
- $type_attr = ( $type === 'js' && ! current_theme_supports( 'html5', 'script' ) ) ? ' type="text/javascript"' : '';
158
- $type_attr = ( $type === 'css' && ! current_theme_supports( 'html5', 'style' ) ) ? ' type="text/css"' : $type_attr;
159
 
160
  $upload_url = str_replace( array( 'https://', 'http://' ), '//', CCJ_UPLOAD_URL ) . '/';
161
 
162
- if ( $where === 'internal' ) {
163
 
164
  $before = $this->settings['remove_comments'] ? '' : '<!-- start Simple Custom CSS and JS -->' . PHP_EOL;
165
  $after = $this->settings['remove_comments'] ? '' : '<!-- end Simple Custom CSS and JS -->' . PHP_EOL;
166
 
167
- if ( $type === 'css' || $type === 'js' ) {
168
  $before .= '<' . $tag[ $type ] . ' ' . $type_attr . '>' . PHP_EOL;
169
  $after = '</' . $tag[ $type ] . '>' . PHP_EOL . $after;
170
  }
@@ -173,7 +173,7 @@ if ( ! class_exists( 'CustomCSSandJS' ) ) :
173
 
174
  foreach ( $args as $_filename ) {
175
 
176
- if ( $where === 'internal' && ( strstr( $_filename, 'css' ) || strstr( $_filename, 'js' ) ) ) {
177
  if ( $this->settings['remove_comments'] || empty( $type_attr ) ) {
178
  $custom_code = @file_get_contents( CCJ_UPLOAD_DIR . '/' . $_filename );
179
  if ( $this->settings['remove_comments'] ) {
@@ -191,21 +191,21 @@ if ( ! class_exists( 'CustomCSSandJS' ) ) :
191
  }
192
  }
193
 
194
- if ( $where === 'internal' && ! strstr( $_filename, 'css' ) && ! strstr( $_filename, 'js' ) ) {
195
  $post = get_post( $_filename );
196
  echo $before . $post->post_content . $after;
197
  }
198
 
199
- if ( $where === 'external' && $type === 'js' ) {
200
  echo PHP_EOL . "<script{$type_attr} src='{$upload_url}{$_filename}'></script>" . PHP_EOL;
201
  }
202
 
203
- if ( $where === 'external' && $type === 'css' ) {
204
  $shortfilename = preg_replace( '@\.css\?v=.*$@', '', $_filename );
205
  echo PHP_EOL . "<link rel='stylesheet' id='{$shortfilename}-css' href='{$upload_url}{$_filename}'{$type_attr} media='all' />" . PHP_EOL;
206
  }
207
 
208
- if ( $where === 'external' && $type === 'html' ) {
209
  $_filename = str_replace( '.html', '', $_filename );
210
  $post = get_post( $_filename );
211
  echo $post->post_content . PHP_EOL;
@@ -225,10 +225,10 @@ if ( ! class_exists( 'CustomCSSandJS' ) ) :
225
  /**
226
  * Set constants for later use
227
  */
228
- function set_constants() {
229
  $dir = wp_upload_dir();
230
  $constants = array(
231
- 'CCJ_VERSION' => '3.38',
232
  'CCJ_UPLOAD_DIR' => $dir['basedir'] . '/custom-css-js',
233
  'CCJ_UPLOAD_URL' => $dir['baseurl'] . '/custom-css-js',
234
  'CCJ_PLUGIN_FILE' => __FILE__,
@@ -240,21 +240,22 @@ if ( ! class_exists( 'CustomCSSandJS' ) ) :
240
  }
241
  }
242
 
243
-
 
 
244
  public function load_plugin_textdomain() {
245
  load_plugin_textdomain( 'custom-css-js', false, plugin_basename( dirname( __FILE__ ) ) . '/languages' );
246
  }
247
-
248
  }
249
 
250
  endif;
251
 
252
- /**
253
- * Returns the main instance of CustomCSSandJS
254
- *
255
- * @return CustomCSSandJS
256
- */
257
  if ( ! function_exists( 'CustomCSSandJS' ) ) {
 
 
 
 
 
258
  function CustomCSSandJS() {
259
  return CustomCSSandJS::instance();
260
  }
@@ -262,11 +263,14 @@ if ( ! function_exists( 'CustomCSSandJS' ) ) {
262
  CustomCSSandJS();
263
  }
264
 
265
-
266
- /**
267
- * Plugin action link to Settings page
268
- */
269
  if ( ! function_exists( 'custom_css_js_plugin_action_links' ) ) {
 
 
 
 
 
 
 
270
  function custom_css_js_plugin_action_links( $links ) {
271
 
272
  $settings_link = '<a href="edit.php?post_type=custom-css-js">' .
@@ -278,16 +282,17 @@ if ( ! function_exists( 'custom_css_js_plugin_action_links' ) ) {
278
  add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'custom_css_js_plugin_action_links' );
279
  }
280
 
281
-
282
-
283
- /**
284
- * Compatibility with the WP Quads Pro plugin,
285
- * otherwise on a Custom Code save there is a
286
- * "The link you followed has expired." page shown.
287
- */
288
  if ( ! function_exists( 'custom_css_js_quads_pro_compat' ) ) {
 
 
 
 
 
 
 
 
289
  function custom_css_js_quads_pro_compat( $post_types ) {
290
- $match = array_search( 'custom-css-js', $post_types );
291
  if ( $match ) {
292
  unset( $post_types[ $match ] );
293
  }
3
  * Plugin Name: Simple Custom CSS and JS
4
  * Plugin URI: https://wordpress.org/plugins/custom-css-js/
5
  * Description: Easily add Custom CSS or JS to your website with an awesome editor.
6
+ * Version: 3.39
7
  * Author: SilkyPress.com
8
  * Author URI: https://www.silkypress.com
9
  * License: GPL2
12
  * Domain Path: /languages/
13
  *
14
  * WC requires at least: 3.0.0
15
+ * WC tested up to: 6.5
16
  */
17
 
18
  if ( ! defined( 'ABSPATH' ) ) {
95
 
96
  if ( is_null( self::$_instance ) ) {
97
  $this->print_code_actions();
98
+ if ( isset ( $this->search_tree['jquery'] ) && true === $this->search_tree['jquery'] ) {
99
  add_action( 'wp_enqueue_scripts', 'CustomCSSandJS::wp_enqueue_scripts' );
100
  }
101
  }
104
  /**
105
  * Add the appropriate wp actions
106
  */
107
+ public function print_code_actions() {
108
  foreach ( $this->search_tree as $_key => $_value ) {
109
  $action = 'wp_';
110
  if ( strpos( $_key, 'admin' ) !== false ) {
121
  $action .= 'footer';
122
  }
123
 
124
+ $priority = ( 'wp_footer' === $action ) ? 40 : 10;
125
 
126
  add_action( $action, array( $this, 'print_' . $_key ), $priority );
127
  }
154
  $type = strpos( $function, 'html' ) !== false ? 'html' : $type;
155
  $tag = array( 'css' => 'style', 'js' => 'script' );
156
 
157
+ $type_attr = ( 'js' === $type && ! current_theme_supports( 'html5', 'script' ) ) ? ' type="text/javascript"' : '';
158
+ $type_attr = ( 'css' === $type && ! current_theme_supports( 'html5', 'style' ) ) ? ' type="text/css"' : $type_attr;
159
 
160
  $upload_url = str_replace( array( 'https://', 'http://' ), '//', CCJ_UPLOAD_URL ) . '/';
161
 
162
+ if ( 'internal' === $where ) {
163
 
164
  $before = $this->settings['remove_comments'] ? '' : '<!-- start Simple Custom CSS and JS -->' . PHP_EOL;
165
  $after = $this->settings['remove_comments'] ? '' : '<!-- end Simple Custom CSS and JS -->' . PHP_EOL;
166
 
167
+ if ( 'css' === $type || 'js' === $type ) {
168
  $before .= '<' . $tag[ $type ] . ' ' . $type_attr . '>' . PHP_EOL;
169
  $after = '</' . $tag[ $type ] . '>' . PHP_EOL . $after;
170
  }
173
 
174
  foreach ( $args as $_filename ) {
175
 
176
+ if ( 'internal' === $where && ( strstr( $_filename, 'css' ) || strstr( $_filename, 'js' ) ) ) {
177
  if ( $this->settings['remove_comments'] || empty( $type_attr ) ) {
178
  $custom_code = @file_get_contents( CCJ_UPLOAD_DIR . '/' . $_filename );
179
  if ( $this->settings['remove_comments'] ) {
191
  }
192
  }
193
 
194
+ if ( 'internal' === $where && ! strstr( $_filename, 'css' ) && ! strstr( $_filename, 'js' ) ) {
195
  $post = get_post( $_filename );
196
  echo $before . $post->post_content . $after;
197
  }
198
 
199
+ if ( 'external' === $where && 'js' === $type ) {
200
  echo PHP_EOL . "<script{$type_attr} src='{$upload_url}{$_filename}'></script>" . PHP_EOL;
201
  }
202
 
203
+ if ( 'external' === $where && 'css' === $type ) {
204
  $shortfilename = preg_replace( '@\.css\?v=.*$@', '', $_filename );
205
  echo PHP_EOL . "<link rel='stylesheet' id='{$shortfilename}-css' href='{$upload_url}{$_filename}'{$type_attr} media='all' />" . PHP_EOL;
206
  }
207
 
208
+ if ( 'external' === $where && 'html' === $type ) {
209
  $_filename = str_replace( '.html', '', $_filename );
210
  $post = get_post( $_filename );
211
  echo $post->post_content . PHP_EOL;
225
  /**
226
  * Set constants for later use
227
  */
228
+ public function set_constants() {
229
  $dir = wp_upload_dir();
230
  $constants = array(
231
+ 'CCJ_VERSION' => '3.39',
232
  'CCJ_UPLOAD_DIR' => $dir['basedir'] . '/custom-css-js',
233
  'CCJ_UPLOAD_URL' => $dir['baseurl'] . '/custom-css-js',
234
  'CCJ_PLUGIN_FILE' => __FILE__,
240
  }
241
  }
242
 
243
+ /**
244
+ * Loads a plugin’s translated strings.
245
+ */
246
  public function load_plugin_textdomain() {
247
  load_plugin_textdomain( 'custom-css-js', false, plugin_basename( dirname( __FILE__ ) ) . '/languages' );
248
  }
 
249
  }
250
 
251
  endif;
252
 
 
 
 
 
 
253
  if ( ! function_exists( 'CustomCSSandJS' ) ) {
254
+ /**
255
+ * Returns the main instance of CustomCSSandJS
256
+ *
257
+ * @return CustomCSSandJS
258
+ */
259
  function CustomCSSandJS() {
260
  return CustomCSSandJS::instance();
261
  }
263
  CustomCSSandJS();
264
  }
265
 
 
 
 
 
266
  if ( ! function_exists( 'custom_css_js_plugin_action_links' ) ) {
267
+ /**
268
+ * Plugin action link to Settings page.
269
+ *
270
+ * @param array $links The settings links.
271
+ *
272
+ * @return array The settings links.
273
+ */
274
  function custom_css_js_plugin_action_links( $links ) {
275
 
276
  $settings_link = '<a href="edit.php?post_type=custom-css-js">' .
282
  add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'custom_css_js_plugin_action_links' );
283
  }
284
 
 
 
 
 
 
 
 
285
  if ( ! function_exists( 'custom_css_js_quads_pro_compat' ) ) {
286
+ /**
287
+ * Compatibility with the WP Quads Pro plugin,
288
+ * otherwise on a Custom Code save there is a
289
+ * "The link you followed has expired." page shown.
290
+ *
291
+ * @param array $post_types The Post types.
292
+ * @return array The Post types.
293
+ */
294
  function custom_css_js_quads_pro_compat( $post_types ) {
295
+ $match = array_search( 'custom-css-js', $post_types, true );
296
  if ( $match ) {
297
  unset( $post_types[ $match ] );
298
  }
includes/admin-screens.php CHANGED
@@ -60,7 +60,6 @@ class CustomCSSandJS_Admin {
60
  'save_post' => 'options_save_meta_box_data',
61
  'trashed_post' => 'trash_post',
62
  'untrashed_post' => 'trash_post',
63
- 'wp_loaded' => 'wp_loaded',
64
  'wp_ajax_ccj_active_code' => 'wp_ajax_ccj_active_code',
65
  'wp_ajax_ccj_permalink' => 'wp_ajax_ccj_permalink',
66
  'post_submitbox_start' => 'post_submitbox_start',
@@ -215,9 +214,36 @@ class CustomCSSandJS_Admin {
215
  'deactivate' => __( 'Deactivate', 'custom-css-js' ),
216
  'active_title' => __( 'The code is active. Click to deactivate it', 'custom-css-js' ),
217
  'deactive_title' => __( 'The code is inactive. Click to activate it', 'custom-css-js' ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
218
  );
219
 
220
- return $vars;
221
  }
222
 
223
  public function add_meta_boxes() {
@@ -1283,20 +1309,6 @@ endif;
1283
  $this->build_search_tree();
1284
  }
1285
 
1286
-
1287
- /**
1288
- * Compatibility with `HTML Editor Syntax Highlighter` plugin
1289
- */
1290
- function wp_loaded() {
1291
- global $wp_filter;
1292
- foreach ( $wp_filter['admin_enqueue_scripts']->callbacks[10] as $_id => $_function ) {
1293
- if ( strstr( $_id, 'hesh_admin_enqueue_scripts' ) ) {
1294
- unset( $wp_filter['admin_enqueue_scripts']->callbacks[10][$_id] );
1295
- }
1296
- }
1297
- }
1298
-
1299
-
1300
  /**
1301
  * Render the checkboxes, radios, selects and inputs
1302
  */
60
  'save_post' => 'options_save_meta_box_data',
61
  'trashed_post' => 'trash_post',
62
  'untrashed_post' => 'trash_post',
 
63
  'wp_ajax_ccj_active_code' => 'wp_ajax_ccj_active_code',
64
  'wp_ajax_ccj_permalink' => 'wp_ajax_ccj_permalink',
65
  'post_submitbox_start' => 'post_submitbox_start',
214
  'deactivate' => __( 'Deactivate', 'custom-css-js' ),
215
  'active_title' => __( 'The code is active. Click to deactivate it', 'custom-css-js' ),
216
  'deactive_title' => __( 'The code is inactive. Click to activate it', 'custom-css-js' ),
217
+
218
+ /* CodeMirror options */
219
+ 'codemirror' => array(
220
+ 'indentUnit' => 4,
221
+ 'indentWithTabs' => true,
222
+ 'inputStyle' => 'contenteditable',
223
+ 'lineNumbers' => true,
224
+ 'lineWrapping' => true,
225
+ 'styleActiveLine' => true,
226
+ 'continueComments' => true,
227
+ 'extraKeys' => array(
228
+ 'Ctrl-Space' => 'autocomplete',
229
+ 'Cmd-Space' => 'autocomplete',
230
+ 'Ctrl-/' => 'toggleComment',
231
+ 'Cmd-/' => 'toggleComment',
232
+ 'Alt-F' => 'findPersistent',
233
+ 'Ctrl-F' => 'findPersistent',
234
+ 'Cmd-F' => 'findPersistent',
235
+ 'Ctrl-J' => 'toMatchingTag',
236
+ ),
237
+ 'direction' => 'ltr', // Code is shown in LTR even in RTL languages.
238
+ 'gutters' => array( 'CodeMirror-lint-markers' ),
239
+ 'matchBrackets' => true,
240
+ 'matchTags' => array( 'bothTags' => true ),
241
+ 'autoCloseBrackets' => true,
242
+ 'autoCloseTags' => true,
243
+ )
244
  );
245
 
246
+ return apply_filters( 'ccj_code_editor_settings', $vars);
247
  }
248
 
249
  public function add_meta_boxes() {
1309
  $this->build_search_tree();
1310
  }
1311
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1312
  /**
1313
  * Render the checkboxes, radios, selects and inputs
1314
  */
readme.txt CHANGED
@@ -4,8 +4,8 @@ Contributors: diana_burduja
4
  Email: diana@burduja.eu
5
  Tags: CSS, JS, javascript, custom CSS, custom JS, custom style, site css, add style, customize theme, custom code, external css, css3, style, styles, stylesheet, theme, editor, design, admin
6
  Requires at least: 3.0.1
7
- Tested up to: 5.9
8
- Stable tag: 3.38
9
  License: GPLv3
10
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
11
  Requires PHP: 5.2.4
@@ -105,9 +105,17 @@ $. Add/Edit HTML
105
 
106
  == Changelog ==
107
 
 
 
 
 
 
 
 
 
 
108
  = 3.38 =
109
  * 11/09/2021
110
- * Fix: compatibility with the `HTML Editor Syntax Highlighter` plugin
111
  * Fix: escape labels on the "Add new custom code" page
112
  * Feature: Keep the last cursor position in the editor and let the editor get focus when the page loads
113
 
@@ -127,11 +135,6 @@ $. Add/Edit HTML
127
  * Fix: replace the deprecated postL10n JS object with wp.i18n
128
  * Fix: add "tipsy-no-html" to the tooltips on the settings page
129
 
130
-
131
- = 3.34.1 =
132
- * 11/24/2020
133
- * Fix: PHP error when filtering the custom codes
134
-
135
  = 3.34 =
136
  * 11/01/2020
137
  * Feature: enqueue the jQuery library if one of the JS custom codes requires it
@@ -145,27 +148,18 @@ $. Add/Edit HTML
145
  * Feature: fullscreen editor
146
  * Feature: button for beautifying the code
147
 
148
- = 3.32.3 =
149
- * 08/02/2020
150
- * Fix: add "Cmd + " editor shortcuts for MacOS computers
151
-
152
- = 3.32.2 =
153
- * 07/14/2020
154
- * Fix: use file_get_contents instead of include_once to load the custom codes
155
-
156
  = 3.32 =
157
  * 07/08/2020
 
 
158
  * Fix: compatibility issue with the Product Slider for WooCommerce by ShapedPlugin
159
  * Feature: "Ctrl + /" in the editor will comment out the code
160
  * Feature: order custom codes table by "type" and "active" state
161
  * Feature: autocomplete in the editor
162
 
163
- = 3.31.1 =
164
- * 05/05/2020
165
- * Declare compatibility WooCommerce 4.1
166
-
167
  = 3.31 =
168
  * 03/21/2020
 
169
  * Feature: add "After <body> tag" option for HTML codes, if the theme allows it
170
  * Feature: don't show type attribute for script and style tags if the theme adds html5 support for it
171
  * Code refactory
4
  Email: diana@burduja.eu
5
  Tags: CSS, JS, javascript, custom CSS, custom JS, custom style, site css, add style, customize theme, custom code, external css, css3, style, styles, stylesheet, theme, editor, design, admin
6
  Requires at least: 3.0.1
7
+ Tested up to: 6.0
8
+ Stable tag: 3.39
9
  License: GPLv3
10
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
11
  Requires PHP: 5.2.4
105
 
106
  == Changelog ==
107
 
108
+ = 3.39 =
109
+ * 03/16/2022
110
+ * Fix: load the CodeMirror options from a localized variable
111
+ * Tweak: add the "ccj_code_editor_settings" filter for modifying the editor's options
112
+
113
+ = 3.38.1 =
114
+ * 12/02/2021
115
+ * Fix: revert the code related to the compatibility with the `HTML Editor Syntax Highlighter` plugin
116
+
117
  = 3.38 =
118
  * 11/09/2021
 
119
  * Fix: escape labels on the "Add new custom code" page
120
  * Feature: Keep the last cursor position in the editor and let the editor get focus when the page loads
121
 
135
  * Fix: replace the deprecated postL10n JS object with wp.i18n
136
  * Fix: add "tipsy-no-html" to the tooltips on the settings page
137
 
 
 
 
 
 
138
  = 3.34 =
139
  * 11/01/2020
140
  * Feature: enqueue the jQuery library if one of the JS custom codes requires it
148
  * Feature: fullscreen editor
149
  * Feature: button for beautifying the code
150
 
 
 
 
 
 
 
 
 
151
  = 3.32 =
152
  * 07/08/2020
153
+ * Fix: add "Cmd + " editor shortcuts for MacOS computers
154
+ * Fix: use file_get_contents instead of include_once to load the custom codes
155
  * Fix: compatibility issue with the Product Slider for WooCommerce by ShapedPlugin
156
  * Feature: "Ctrl + /" in the editor will comment out the code
157
  * Feature: order custom codes table by "type" and "active" state
158
  * Feature: autocomplete in the editor
159
 
 
 
 
 
160
  = 3.31 =
161
  * 03/21/2020
162
+ * Declare compatibility WooCommerce 4.1
163
  * Feature: add "After <body> tag" option for HTML codes, if the theme allows it
164
  * Feature: don't show type attribute for script and style tags if the theme adds html5 support for it
165
  * Code refactory