From f04ff3ff09a698a22ff0666f1b4c09b29b2df1b3 Mon Sep 17 00:00:00 2001 From: kevinfodness Date: Sat, 24 Aug 2019 12:57:59 -0400 Subject: [PATCH 01/16] Use the new wp.domReady helper if it is available. Fixes issues with Fieldmanager fields that require JavaScript hooks not initializing properly when Gutenberg is active. wp.domReady fires later than jQuery's document.ready, so this should resolve race conditions that prevent initialization of dynamic fields across the board in Fieldmanager. --- js/fieldmanager.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/js/fieldmanager.js b/js/fieldmanager.js index 14684fd66b..ac77aed25a 100644 --- a/js/fieldmanager.js +++ b/js/fieldmanager.js @@ -173,7 +173,7 @@ fm_remove = function( $element ) { fm_renumber( $wrapper ); } -$( document ).ready( function () { +var fm_init = function () { $( document ).on( 'click', '.fm-add-another', function( e ) { e.preventDefault(); fm_add_another( $( this ) ); @@ -276,6 +276,13 @@ $( document ).ready( function () { init_sortable(); $( document ).on( 'fm_activate_tab', init_sortable ); -} ); +}; + +// Use the wp.domReady helper, if it is available. +if (wp && wp.domReady) { + wp.domReady(fm_init); +} else { + $(document).ready(fm_init); +} } )( jQuery ); From 8e93e6083eaee0a9e240ea50361fbf3de06aae9d Mon Sep 17 00:00:00 2001 From: kevinfodness Date: Sat, 24 Aug 2019 13:31:48 -0400 Subject: [PATCH 02/16] Configure Fieldmanager scripts to use the current Fieldmanager version --- php/class-fieldmanager-autocomplete.php | 2 +- php/class-fieldmanager-colorpicker.php | 2 +- php/class-fieldmanager-datepicker.php | 2 +- php/class-fieldmanager-draggablepost.php | 4 ++-- php/class-fieldmanager-field.php | 4 ++-- php/class-fieldmanager-grid.php | 2 +- php/class-fieldmanager-group.php | 4 ++-- php/class-fieldmanager-media.php | 2 +- php/class-fieldmanager-options.php | 2 +- php/class-fieldmanager-richtextarea.php | 2 +- php/class-fieldmanager-select.php | 2 +- php/context/class-fieldmanager-context-quickedit.php | 2 +- 12 files changed, 15 insertions(+), 15 deletions(-) diff --git a/php/class-fieldmanager-autocomplete.php b/php/class-fieldmanager-autocomplete.php index 2c9cc08d1f..eacf3a1d44 100644 --- a/php/class-fieldmanager-autocomplete.php +++ b/php/class-fieldmanager-autocomplete.php @@ -78,7 +78,7 @@ public function __construct( $label = '', $options = array() ) { 'fm_autocomplete_js', 'js/fieldmanager-autocomplete.js', array( 'fieldmanager_script', 'jquery-ui-autocomplete' ), - '1.0.6', + FM_VERSION, false, 'fm_search', array( diff --git a/php/class-fieldmanager-colorpicker.php b/php/class-fieldmanager-colorpicker.php index a98758094d..127db71b0a 100644 --- a/php/class-fieldmanager-colorpicker.php +++ b/php/class-fieldmanager-colorpicker.php @@ -36,7 +36,7 @@ class Fieldmanager_Colorpicker extends Fieldmanager_Field { * @param array $options The options. */ public function __construct( $label = '', $options = array() ) { - fm_add_script( 'fm_colorpicker', 'js/fieldmanager-colorpicker.js', array( 'jquery', 'wp-color-picker' ), '1.0', true ); + fm_add_script( 'fm_colorpicker', 'js/fieldmanager-colorpicker.js', array( 'jquery', 'wp-color-picker' ), FM_VERSION, true ); fm_add_style( 'wp-color-picker' ); $this->sanitize = 'sanitize_hex_color'; diff --git a/php/class-fieldmanager-datepicker.php b/php/class-fieldmanager-datepicker.php index ec835c60e3..510bebd932 100644 --- a/php/class-fieldmanager-datepicker.php +++ b/php/class-fieldmanager-datepicker.php @@ -70,7 +70,7 @@ class Fieldmanager_Datepicker extends Fieldmanager_Field { */ public function __construct( $label = '', $options = array() ) { fm_add_style( 'fm-jquery-ui', 'css/jquery-ui/jquery-ui-1.10.2.custom.min.css' ); - fm_add_script( 'fm_datepicker', 'js/fieldmanager-datepicker.js', array( 'fieldmanager_script', 'jquery-ui-datepicker' ) ); + fm_add_script( 'fm_datepicker', 'js/fieldmanager-datepicker.js', array( 'fieldmanager_script', 'jquery-ui-datepicker' ), FM_VERSION ); parent::__construct( $label, $options ); if ( empty( $this->js_opts ) ) { diff --git a/php/class-fieldmanager-draggablepost.php b/php/class-fieldmanager-draggablepost.php index a3f2b4950d..87135dd48c 100644 --- a/php/class-fieldmanager-draggablepost.php +++ b/php/class-fieldmanager-draggablepost.php @@ -57,8 +57,8 @@ public function __construct( $label = '', $options = array() ) { // Refuse to allow more than one instance of this field type. $this->limit = 1; - fm_add_script( 'fm_draggablepost_js', 'js/fieldmanager-draggablepost.js', array( 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable' ) ); - fm_add_style( 'fm_draggablepost_css', 'css/fieldmanager-draggablepost.css' ); + fm_add_script( 'fm_draggablepost_js', 'js/fieldmanager-draggablepost.js', array( 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable' ), FM_VERSION ); + fm_add_style( 'fm_draggablepost_css', 'css/fieldmanager-draggablepost.css', array(), FM_VERSION ); } /** diff --git a/php/class-fieldmanager-field.php b/php/class-fieldmanager-field.php index f267506fd0..1cc4715ada 100644 --- a/php/class-fieldmanager-field.php +++ b/php/class-fieldmanager-field.php @@ -409,8 +409,8 @@ public function __construct( $label = '', $options = array() ) { // Only enqueue base assets once, and only when we have a field. if ( ! self::$enqueued_base_assets ) { - fm_add_script( 'fieldmanager_script', 'js/fieldmanager.js', array( 'jquery', 'jquery-ui-sortable' ), '1.2.1' ); - fm_add_style( 'fieldmanager_style', 'css/fieldmanager.css', array(), '1.0.4' ); + fm_add_script( 'fieldmanager_script', 'js/fieldmanager.js', array( 'jquery', 'jquery-ui-sortable' ), FM_VERSION ); + fm_add_style( 'fieldmanager_style', 'css/fieldmanager.css', array(), FM_VERSION ); self::$enqueued_base_assets = true; } } diff --git a/php/class-fieldmanager-grid.php b/php/class-fieldmanager-grid.php index 07b5e44b83..b11170eb09 100644 --- a/php/class-fieldmanager-grid.php +++ b/php/class-fieldmanager-grid.php @@ -55,7 +55,7 @@ public function __construct( $label = '', $options = array() ) { fm_add_script( 'handsontable', 'js/grid/jquery.handsontable.js' ); fm_add_script( 'contextmenu', 'js/grid/lib/jQuery-contextMenu/jquery.contextMenu.js' ); fm_add_script( 'ui_position', 'js/grid/lib/jQuery-contextMenu/jquery.ui.position.js' ); - fm_add_script( 'grid', 'js/grid.js' ); + fm_add_script( 'grid', 'js/grid.js', array( 'handsontable', 'contextmenu', 'ui_position' ), FM_VERSION ); fm_add_style( 'context_menu_css', 'js/grid/lib/jQuery-contextMenu/jquery.contextMenu.css' ); fm_add_style( 'handsontable_css', 'js/grid/jquery.handsontable.css' ); } diff --git a/php/class-fieldmanager-group.php b/php/class-fieldmanager-group.php index 6020f77240..6c42690eea 100644 --- a/php/class-fieldmanager-group.php +++ b/php/class-fieldmanager-group.php @@ -196,8 +196,8 @@ public function __construct( $label = '', $options = array() ) { // Add the tab JS and CSS if it is needed. if ( $this->tabbed ) { fm_add_script( 'jquery-hoverintent', 'js/jquery.hoverIntent.js', array( 'jquery' ), '1.8.1' ); - fm_add_script( 'fm_group_tabs_js', 'js/fieldmanager-group-tabs.js', array( 'jquery', 'jquery-hoverintent' ), '1.0.4' ); - fm_add_style( 'fm_group_tabs_css', 'css/fieldmanager-group-tabs.css', array(), '1.0.5' ); + fm_add_script( 'fm_group_tabs_js', 'js/fieldmanager-group-tabs.js', array( 'jquery', 'jquery-hoverintent' ), FM_VERSION ); + fm_add_style( 'fm_group_tabs_css', 'css/fieldmanager-group-tabs.css', array(), FM_VERSION ); } } diff --git a/php/class-fieldmanager-media.php b/php/class-fieldmanager-media.php index 77e7744afe..a87fb2cbc7 100644 --- a/php/class-fieldmanager-media.php +++ b/php/class-fieldmanager-media.php @@ -107,7 +107,7 @@ public function __construct( $label = '', $options = array() ) { $this->remove_media_label = __( 'remove', 'fieldmanager' ); if ( ! self::$has_registered_media ) { - fm_add_script( 'fm_media', 'js/media/fieldmanager-media.js', array( 'jquery' ), '1.0.4' ); + fm_add_script( 'fm_media', 'js/media/fieldmanager-media.js', array( 'jquery' ), FM_VERSION ); if ( did_action( 'admin_print_scripts' ) ) { $this->admin_print_scripts(); } else { diff --git a/php/class-fieldmanager-options.php b/php/class-fieldmanager-options.php index aa90afe3ff..a901952514 100644 --- a/php/class-fieldmanager-options.php +++ b/php/class-fieldmanager-options.php @@ -76,7 +76,7 @@ public function __construct( $label = '', $options = array() ) { } // Add the options CSS. - fm_add_style( 'fm_options_css', 'css/fieldmanager-options.css' ); + fm_add_style( 'fm_options_css', 'css/fieldmanager-options.css', array(), FM_VERSION ); } /** diff --git a/php/class-fieldmanager-richtextarea.php b/php/class-fieldmanager-richtextarea.php index b0a3e530d8..0cc80e8e2b 100644 --- a/php/class-fieldmanager-richtextarea.php +++ b/php/class-fieldmanager-richtextarea.php @@ -104,7 +104,7 @@ public function __construct( $label = '', $options = array() ) { $this->sanitize = array( $this, 'sanitize' ); // 'utils' provides getUserSetting(). - fm_add_script( 'fm_richtext', 'js/richtext.js', array( 'jquery', 'fieldmanager_script', 'utils' ), '1.0.8' ); + fm_add_script( 'fm_richtext', 'js/richtext.js', array( 'jquery', 'fieldmanager_script', 'utils' ), FM_VERSION ); parent::__construct( $label, $options ); } diff --git a/php/class-fieldmanager-select.php b/php/class-fieldmanager-select.php index 8f9b30bd56..10ac81fb5d 100644 --- a/php/class-fieldmanager-select.php +++ b/php/class-fieldmanager-select.php @@ -60,7 +60,7 @@ public function __construct( $label = '', $options = array() ) { 'fm_select_js', 'js/fieldmanager-select.js', array(), - '1.0.2', + FM_VERSION, false, 'fm_select', array( diff --git a/php/context/class-fieldmanager-context-quickedit.php b/php/context/class-fieldmanager-context-quickedit.php index eef4374858..e8347ed07e 100644 --- a/php/context/class-fieldmanager-context-quickedit.php +++ b/php/context/class-fieldmanager-context-quickedit.php @@ -93,7 +93,7 @@ public function __construct( $title, $post_types, $column_display_callback, $col $post_type = ! isset( $_GET['post_type'] ) ? 'post' : sanitize_text_field( wp_unslash( $_GET['post_type'] ) ); // WPCS: input var okay. if ( in_array( $post_type, $this->post_types ) ) { - fm_add_script( 'quickedit-js', 'js/fieldmanager-quickedit.js' ); + fm_add_script( 'quickedit-js', 'js/fieldmanager-quickedit.js', array(), FM_VERSION ); } } From ed875d55fa80678bd1ad7217a3f86e7449b4724d Mon Sep 17 00:00:00 2001 From: kevinfodness Date: Sat, 24 Aug 2019 13:33:49 -0400 Subject: [PATCH 03/16] Bump version number to 1.2.5. --- fieldmanager.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fieldmanager.php b/fieldmanager.php index f6fc45bee1..42702a2b4f 100644 --- a/fieldmanager.php +++ b/fieldmanager.php @@ -3,7 +3,7 @@ * Fieldmanager Base Plugin File. * * @package Fieldmanager - * @version 1.2.4 + * @version 1.2.5 */ /* @@ -11,14 +11,14 @@ Plugin URI: https://github.com/alleyinteractive/wordpress-fieldmanager Description: Add fields to WordPress programatically. Author: Alley -Version: 1.2.4 +Version: 1.2.5 Author URI: https://www.alley.co/ */ /** * Current version of Fieldmanager. */ -define( 'FM_VERSION', '1.2.4' ); +define( 'FM_VERSION', '1.2.5' ); /** * Filesystem path to Fieldmanager. From 0f836e50e7b96ae947b89afc2793d8ea4f57e806 Mon Sep 17 00:00:00 2001 From: kevinfodness Date: Sat, 24 Aug 2019 14:08:02 -0400 Subject: [PATCH 04/16] Wrap domReady and use it everywhere --- js/fieldmanager-autocomplete.js | 2 +- js/fieldmanager-colorpicker.js | 4 +-- js/fieldmanager-datepicker.js | 4 +-- js/fieldmanager-draggablepost.js | 4 +-- js/fieldmanager-group-tabs.js | 2 +- js/fieldmanager-post.js | 30 +++++++++---------- js/fieldmanager-quickedit.js | 4 +-- js/fieldmanager-select.js | 4 +-- js/fieldmanager.js | 18 +++++++---- js/grid.js | 4 +-- php/class-fieldmanager-colorpicker.php | 2 +- php/class-fieldmanager-draggablepost.php | 2 +- php/class-fieldmanager-field.php | 2 +- php/class-fieldmanager-grid.php | 2 +- php/class-fieldmanager-group.php | 2 +- php/class-fieldmanager-media.php | 2 +- .../class-fieldmanager-context-quickedit.php | 2 +- 17 files changed, 49 insertions(+), 41 deletions(-) diff --git a/js/fieldmanager-autocomplete.js b/js/fieldmanager-autocomplete.js index b6630f06f8..c26372e246 100644 --- a/js/fieldmanager-autocomplete.js +++ b/js/fieldmanager-autocomplete.js @@ -82,7 +82,7 @@ fm.autocomplete = { } } -$( document ).ready( fm.autocomplete.enable_autocomplete ); +fm_domready( fm.autocomplete.enable_autocomplete ); $( document ).on( 'fm_collapsible_toggle fm_added_element fm_displayif_toggle fm_activate_tab', fm.autocomplete.enable_autocomplete ); } ) ( jQuery ); diff --git a/js/fieldmanager-colorpicker.js b/js/fieldmanager-colorpicker.js index 4d6fc278f8..7fcb8b8010 100644 --- a/js/fieldmanager-colorpicker.js +++ b/js/fieldmanager-colorpicker.js @@ -6,7 +6,7 @@ } } - $( document ).ready( fm.colorpicker.init ); + fm_domready( fm.colorpicker.init ); $( document ).on( 'fm_collapsible_toggle fm_added_element fm_displayif_toggle fm_activate_tab', fm.colorpicker.init ); -} )( jQuery ); \ No newline at end of file +} )( jQuery ); diff --git a/js/fieldmanager-datepicker.js b/js/fieldmanager-datepicker.js index cc785253ee..e1287b98b8 100644 --- a/js/fieldmanager-datepicker.js +++ b/js/fieldmanager-datepicker.js @@ -10,6 +10,6 @@ } } - $( document ).ready( fm.datepicker.add_datepicker ); + fm_domready( fm.datepicker.add_datepicker ); $( document ).on( 'fm_collapsible_toggle fm_added_element fm_displayif_toggle fm_activate_tab', fm.datepicker.add_datepicker ); -} ) ( jQuery ); \ No newline at end of file +} ) ( jQuery ); diff --git a/js/fieldmanager-draggablepost.js b/js/fieldmanager-draggablepost.js index de9fac0061..0caca14d43 100644 --- a/js/fieldmanager-draggablepost.js +++ b/js/fieldmanager-draggablepost.js @@ -1,5 +1,5 @@ (function($) { - $(document).ready(function() { + fm_domready(function() { resetEmptyMessages(); $('.sortables').sortable({ connectWith: '.sortables', @@ -40,4 +40,4 @@ $('#' + input_name).val(post_ids.join(',')); }); } -})(jQuery); \ No newline at end of file +})(jQuery); diff --git a/js/fieldmanager-group-tabs.js b/js/fieldmanager-group-tabs.js index b1c9398581..8a6b1597e0 100644 --- a/js/fieldmanager-group-tabs.js +++ b/js/fieldmanager-group-tabs.js @@ -164,7 +164,7 @@ var FieldmanagerGroupTabs; }; - $(document).ready( function(){ + fm_domready( function(){ FieldmanagerGroupTabs.init(); diff --git a/js/fieldmanager-post.js b/js/fieldmanager-post.js index d9868d15e2..a2bd86a769 100644 --- a/js/fieldmanager-post.js +++ b/js/fieldmanager-post.js @@ -12,7 +12,7 @@ var fm_show_post_type = function( $element, post_type ) { var fm_show_post_date = function( $element, post_date ) { if ( $element.data( 'showPostDate' ) == 1 ) { $element.parent().siblings('.fmjs-post-date').remove(); - $element.parent().siblings(".fmjs-remove, .fmjs-clear").after(''); + $element.parent().siblings(".fmjs-remove, .fmjs-clear").after(''); } } @@ -35,22 +35,22 @@ var fm_typeahead_action = function( $element ) { }); } }, - updater: function ( item ) { + updater: function ( item ) { // Get the post ID and post type and store them in data attributes $element.data( 'id', fm_typeahead_results[item]['id'] ); $element.data( 'postType', fm_typeahead_results[item]['post_type'] ); $element.data( 'postDate', fm_typeahead_results[item]['post_date'] ); - + // If the clear handle is enabled, show it $element.parent().siblings('.fmjs-clear').show(); - + // Show the selected post type and/or date after the clear/remove handle fm_show_post_type($element, fm_typeahead_results[item]['post_type']); fm_show_post_date($element, fm_typeahead_results[item]['post_date']); - + // Trigger that the update happened in case any other functions want to execute something here $element.trigger( 'fm_post_update', [item, fm_typeahead_results[item]] ); - + // Remove the post type and/or date from the title and return the title for the text field return fm_typeahead_results[item]['post_title']; }, @@ -58,24 +58,24 @@ var fm_typeahead_action = function( $element ) { } ); } -$( document ).ready( function () { +fm_domready( function () { $( '.fm-post-element' ).each( function( index ) { // Enable typeahead for each post field fm_typeahead_action( $( this ) ); - + // Show the post type, date and/or clear handle (if exists) if the field is not empty and those fields are specified for display - if ( $( this ).data('postType') != '' ) { + if ( $( this ).data('postType') != '' ) { fm_show_post_type( $( this ), $( this ).data('postType') ); } - - if ( $( this ).data('postDate') != '' ) { + + if ( $( this ).data('postDate') != '' ) { fm_show_post_date( $( this ), $( this ).data('postDate') ); } - - if ( $( this ).data('id') != '' ) { + + if ( $( this ).data('id') != '' ) { $( this ).parent().siblings('.fmjs-clear').show(); } - + } ); $( "#post" ).submit( function( e ) { $( '.fm-post-element' ).each( function( index ) { @@ -92,4 +92,4 @@ $( document ).ready( function () { } ); } ); -} )( jQuery ); \ No newline at end of file +} )( jQuery ); diff --git a/js/fieldmanager-quickedit.js b/js/fieldmanager-quickedit.js index e6cc68c012..a2a72342a1 100644 --- a/js/fieldmanager-quickedit.js +++ b/js/fieldmanager-quickedit.js @@ -1,6 +1,6 @@ ( function( $ ) { - $( document ).ready( function() { + fm_domready( function() { if ( typeof( inlineEditPost ) == 'undefined' ) { return; } @@ -31,4 +31,4 @@ } } ); -} )( jQuery ); \ No newline at end of file +} )( jQuery ); diff --git a/js/fieldmanager-select.js b/js/fieldmanager-select.js index 24a7ed8d84..4f09a18be1 100644 --- a/js/fieldmanager-select.js +++ b/js/fieldmanager-select.js @@ -42,7 +42,7 @@ fm_reset_chosen = function( $fm_text_field, fm_text_field_val ) { } ); } -$( document ).ready( function() { +fm_domready( function() { // Track changes to the chosen text field linked to the select in order to update options via Ajax // Used for taxonomy-based fields where preload is disabled @@ -101,4 +101,4 @@ $( document ).ready( function() { } ); -} )( jQuery ); \ No newline at end of file +} )( jQuery ); diff --git a/js/fieldmanager.js b/js/fieldmanager.js index ac77aed25a..87f535c7d5 100644 --- a/js/fieldmanager.js +++ b/js/fieldmanager.js @@ -278,11 +278,19 @@ var fm_init = function () { $( document ).on( 'fm_activate_tab', init_sortable ); }; -// Use the wp.domReady helper, if it is available. -if (wp && wp.domReady) { - wp.domReady(fm_init); -} else { - $(document).ready(fm_init); +/** + * A wrapper for either wp.domReady or jQuery's ready function. + * @param {function} callback - A callback function to execute on DOM ready. + */ +var fm_domready = function ( callback ) { + if ( wp && wp.domReady ) { + wp.domReady( callback ); + } else { + $( document ).ready( callback ); + } } +// Initialize Fieldmanager when the DOM is ready. +fm_domready( fm_init ); + } )( jQuery ); diff --git a/js/grid.js b/js/grid.js index c4af498e7a..40801741e9 100644 --- a/js/grid.js +++ b/js/grid.js @@ -107,8 +107,8 @@ $( document ).on( 'fm_collapsible_toggle fm_added_element fm_displayif_toggle fm $.fm_grid_init(); } ); -$( document ).ready( function() { +fm_domready( function() { $.fm_grid_init(); } ); -})( jQuery ); \ No newline at end of file +})( jQuery ); diff --git a/php/class-fieldmanager-colorpicker.php b/php/class-fieldmanager-colorpicker.php index 127db71b0a..6f133abd5b 100644 --- a/php/class-fieldmanager-colorpicker.php +++ b/php/class-fieldmanager-colorpicker.php @@ -36,7 +36,7 @@ class Fieldmanager_Colorpicker extends Fieldmanager_Field { * @param array $options The options. */ public function __construct( $label = '', $options = array() ) { - fm_add_script( 'fm_colorpicker', 'js/fieldmanager-colorpicker.js', array( 'jquery', 'wp-color-picker' ), FM_VERSION, true ); + fm_add_script( 'fm_colorpicker', 'js/fieldmanager-colorpicker.js', array( 'fieldmanager_script', 'jquery', 'wp-color-picker' ), FM_VERSION, true ); fm_add_style( 'wp-color-picker' ); $this->sanitize = 'sanitize_hex_color'; diff --git a/php/class-fieldmanager-draggablepost.php b/php/class-fieldmanager-draggablepost.php index 87135dd48c..5e220ad45e 100644 --- a/php/class-fieldmanager-draggablepost.php +++ b/php/class-fieldmanager-draggablepost.php @@ -57,7 +57,7 @@ public function __construct( $label = '', $options = array() ) { // Refuse to allow more than one instance of this field type. $this->limit = 1; - fm_add_script( 'fm_draggablepost_js', 'js/fieldmanager-draggablepost.js', array( 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable' ), FM_VERSION ); + fm_add_script( 'fm_draggablepost_js', 'js/fieldmanager-draggablepost.js', array( 'fieldmanager_script', 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable' ), FM_VERSION ); fm_add_style( 'fm_draggablepost_css', 'css/fieldmanager-draggablepost.css', array(), FM_VERSION ); } diff --git a/php/class-fieldmanager-field.php b/php/class-fieldmanager-field.php index 1cc4715ada..8fa295d54b 100644 --- a/php/class-fieldmanager-field.php +++ b/php/class-fieldmanager-field.php @@ -409,7 +409,7 @@ public function __construct( $label = '', $options = array() ) { // Only enqueue base assets once, and only when we have a field. if ( ! self::$enqueued_base_assets ) { - fm_add_script( 'fieldmanager_script', 'js/fieldmanager.js', array( 'jquery', 'jquery-ui-sortable' ), FM_VERSION ); + fm_add_script( 'fieldmanager_script', 'js/fieldmanager.js', array( 'fieldmanager_script', 'jquery', 'jquery-ui-sortable' ), FM_VERSION ); fm_add_style( 'fieldmanager_style', 'css/fieldmanager.css', array(), FM_VERSION ); self::$enqueued_base_assets = true; } diff --git a/php/class-fieldmanager-grid.php b/php/class-fieldmanager-grid.php index b11170eb09..67f87fd33f 100644 --- a/php/class-fieldmanager-grid.php +++ b/php/class-fieldmanager-grid.php @@ -55,7 +55,7 @@ public function __construct( $label = '', $options = array() ) { fm_add_script( 'handsontable', 'js/grid/jquery.handsontable.js' ); fm_add_script( 'contextmenu', 'js/grid/lib/jQuery-contextMenu/jquery.contextMenu.js' ); fm_add_script( 'ui_position', 'js/grid/lib/jQuery-contextMenu/jquery.ui.position.js' ); - fm_add_script( 'grid', 'js/grid.js', array( 'handsontable', 'contextmenu', 'ui_position' ), FM_VERSION ); + fm_add_script( 'grid', 'js/grid.js', array( 'fieldmanager_script', 'handsontable', 'contextmenu', 'ui_position' ), FM_VERSION ); fm_add_style( 'context_menu_css', 'js/grid/lib/jQuery-contextMenu/jquery.contextMenu.css' ); fm_add_style( 'handsontable_css', 'js/grid/jquery.handsontable.css' ); } diff --git a/php/class-fieldmanager-group.php b/php/class-fieldmanager-group.php index 6c42690eea..9d4464749e 100644 --- a/php/class-fieldmanager-group.php +++ b/php/class-fieldmanager-group.php @@ -196,7 +196,7 @@ public function __construct( $label = '', $options = array() ) { // Add the tab JS and CSS if it is needed. if ( $this->tabbed ) { fm_add_script( 'jquery-hoverintent', 'js/jquery.hoverIntent.js', array( 'jquery' ), '1.8.1' ); - fm_add_script( 'fm_group_tabs_js', 'js/fieldmanager-group-tabs.js', array( 'jquery', 'jquery-hoverintent' ), FM_VERSION ); + fm_add_script( 'fm_group_tabs_js', 'js/fieldmanager-group-tabs.js', array( 'fieldmanager_script', 'jquery', 'jquery-hoverintent' ), FM_VERSION ); fm_add_style( 'fm_group_tabs_css', 'css/fieldmanager-group-tabs.css', array(), FM_VERSION ); } } diff --git a/php/class-fieldmanager-media.php b/php/class-fieldmanager-media.php index a87fb2cbc7..585970a674 100644 --- a/php/class-fieldmanager-media.php +++ b/php/class-fieldmanager-media.php @@ -107,7 +107,7 @@ public function __construct( $label = '', $options = array() ) { $this->remove_media_label = __( 'remove', 'fieldmanager' ); if ( ! self::$has_registered_media ) { - fm_add_script( 'fm_media', 'js/media/fieldmanager-media.js', array( 'jquery' ), FM_VERSION ); + fm_add_script( 'fm_media', 'js/media/fieldmanager-media.js', array( 'fieldmanager_script', 'jquery' ), FM_VERSION ); if ( did_action( 'admin_print_scripts' ) ) { $this->admin_print_scripts(); } else { diff --git a/php/context/class-fieldmanager-context-quickedit.php b/php/context/class-fieldmanager-context-quickedit.php index e8347ed07e..0d86ad1306 100644 --- a/php/context/class-fieldmanager-context-quickedit.php +++ b/php/context/class-fieldmanager-context-quickedit.php @@ -93,7 +93,7 @@ public function __construct( $title, $post_types, $column_display_callback, $col $post_type = ! isset( $_GET['post_type'] ) ? 'post' : sanitize_text_field( wp_unslash( $_GET['post_type'] ) ); // WPCS: input var okay. if ( in_array( $post_type, $this->post_types ) ) { - fm_add_script( 'quickedit-js', 'js/fieldmanager-quickedit.js', array(), FM_VERSION ); + fm_add_script( 'quickedit-js', 'js/fieldmanager-quickedit.js', array( 'fieldmanager_script' ), FM_VERSION ); } } From d7111f53bbec1e898660ddefd285d0168d4ee8dc Mon Sep 17 00:00:00 2001 From: kevinfodness Date: Sat, 24 Aug 2019 14:12:00 -0400 Subject: [PATCH 05/16] Revert "Wrap domReady and use it everywhere" This reverts commit 0f836e50e7b96ae947b89afc2793d8ea4f57e806. --- js/fieldmanager-autocomplete.js | 2 +- js/fieldmanager-colorpicker.js | 4 +-- js/fieldmanager-datepicker.js | 4 +-- js/fieldmanager-draggablepost.js | 4 +-- js/fieldmanager-group-tabs.js | 2 +- js/fieldmanager-post.js | 30 +++++++++---------- js/fieldmanager-quickedit.js | 4 +-- js/fieldmanager-select.js | 4 +-- js/fieldmanager.js | 18 ++++------- js/grid.js | 4 +-- php/class-fieldmanager-colorpicker.php | 2 +- php/class-fieldmanager-draggablepost.php | 2 +- php/class-fieldmanager-field.php | 2 +- php/class-fieldmanager-grid.php | 2 +- php/class-fieldmanager-group.php | 2 +- php/class-fieldmanager-media.php | 2 +- .../class-fieldmanager-context-quickedit.php | 2 +- 17 files changed, 41 insertions(+), 49 deletions(-) diff --git a/js/fieldmanager-autocomplete.js b/js/fieldmanager-autocomplete.js index c26372e246..b6630f06f8 100644 --- a/js/fieldmanager-autocomplete.js +++ b/js/fieldmanager-autocomplete.js @@ -82,7 +82,7 @@ fm.autocomplete = { } } -fm_domready( fm.autocomplete.enable_autocomplete ); +$( document ).ready( fm.autocomplete.enable_autocomplete ); $( document ).on( 'fm_collapsible_toggle fm_added_element fm_displayif_toggle fm_activate_tab', fm.autocomplete.enable_autocomplete ); } ) ( jQuery ); diff --git a/js/fieldmanager-colorpicker.js b/js/fieldmanager-colorpicker.js index 7fcb8b8010..4d6fc278f8 100644 --- a/js/fieldmanager-colorpicker.js +++ b/js/fieldmanager-colorpicker.js @@ -6,7 +6,7 @@ } } - fm_domready( fm.colorpicker.init ); + $( document ).ready( fm.colorpicker.init ); $( document ).on( 'fm_collapsible_toggle fm_added_element fm_displayif_toggle fm_activate_tab', fm.colorpicker.init ); -} )( jQuery ); +} )( jQuery ); \ No newline at end of file diff --git a/js/fieldmanager-datepicker.js b/js/fieldmanager-datepicker.js index e1287b98b8..cc785253ee 100644 --- a/js/fieldmanager-datepicker.js +++ b/js/fieldmanager-datepicker.js @@ -10,6 +10,6 @@ } } - fm_domready( fm.datepicker.add_datepicker ); + $( document ).ready( fm.datepicker.add_datepicker ); $( document ).on( 'fm_collapsible_toggle fm_added_element fm_displayif_toggle fm_activate_tab', fm.datepicker.add_datepicker ); -} ) ( jQuery ); +} ) ( jQuery ); \ No newline at end of file diff --git a/js/fieldmanager-draggablepost.js b/js/fieldmanager-draggablepost.js index 0caca14d43..de9fac0061 100644 --- a/js/fieldmanager-draggablepost.js +++ b/js/fieldmanager-draggablepost.js @@ -1,5 +1,5 @@ (function($) { - fm_domready(function() { + $(document).ready(function() { resetEmptyMessages(); $('.sortables').sortable({ connectWith: '.sortables', @@ -40,4 +40,4 @@ $('#' + input_name).val(post_ids.join(',')); }); } -})(jQuery); +})(jQuery); \ No newline at end of file diff --git a/js/fieldmanager-group-tabs.js b/js/fieldmanager-group-tabs.js index 8a6b1597e0..b1c9398581 100644 --- a/js/fieldmanager-group-tabs.js +++ b/js/fieldmanager-group-tabs.js @@ -164,7 +164,7 @@ var FieldmanagerGroupTabs; }; - fm_domready( function(){ + $(document).ready( function(){ FieldmanagerGroupTabs.init(); diff --git a/js/fieldmanager-post.js b/js/fieldmanager-post.js index a2bd86a769..d9868d15e2 100644 --- a/js/fieldmanager-post.js +++ b/js/fieldmanager-post.js @@ -12,7 +12,7 @@ var fm_show_post_type = function( $element, post_type ) { var fm_show_post_date = function( $element, post_date ) { if ( $element.data( 'showPostDate' ) == 1 ) { $element.parent().siblings('.fmjs-post-date').remove(); - $element.parent().siblings(".fmjs-remove, .fmjs-clear").after(''); + $element.parent().siblings(".fmjs-remove, .fmjs-clear").after(''); } } @@ -35,22 +35,22 @@ var fm_typeahead_action = function( $element ) { }); } }, - updater: function ( item ) { + updater: function ( item ) { // Get the post ID and post type and store them in data attributes $element.data( 'id', fm_typeahead_results[item]['id'] ); $element.data( 'postType', fm_typeahead_results[item]['post_type'] ); $element.data( 'postDate', fm_typeahead_results[item]['post_date'] ); - + // If the clear handle is enabled, show it $element.parent().siblings('.fmjs-clear').show(); - + // Show the selected post type and/or date after the clear/remove handle fm_show_post_type($element, fm_typeahead_results[item]['post_type']); fm_show_post_date($element, fm_typeahead_results[item]['post_date']); - + // Trigger that the update happened in case any other functions want to execute something here $element.trigger( 'fm_post_update', [item, fm_typeahead_results[item]] ); - + // Remove the post type and/or date from the title and return the title for the text field return fm_typeahead_results[item]['post_title']; }, @@ -58,24 +58,24 @@ var fm_typeahead_action = function( $element ) { } ); } -fm_domready( function () { +$( document ).ready( function () { $( '.fm-post-element' ).each( function( index ) { // Enable typeahead for each post field fm_typeahead_action( $( this ) ); - + // Show the post type, date and/or clear handle (if exists) if the field is not empty and those fields are specified for display - if ( $( this ).data('postType') != '' ) { + if ( $( this ).data('postType') != '' ) { fm_show_post_type( $( this ), $( this ).data('postType') ); } - - if ( $( this ).data('postDate') != '' ) { + + if ( $( this ).data('postDate') != '' ) { fm_show_post_date( $( this ), $( this ).data('postDate') ); } - - if ( $( this ).data('id') != '' ) { + + if ( $( this ).data('id') != '' ) { $( this ).parent().siblings('.fmjs-clear').show(); } - + } ); $( "#post" ).submit( function( e ) { $( '.fm-post-element' ).each( function( index ) { @@ -92,4 +92,4 @@ fm_domready( function () { } ); } ); -} )( jQuery ); +} )( jQuery ); \ No newline at end of file diff --git a/js/fieldmanager-quickedit.js b/js/fieldmanager-quickedit.js index a2a72342a1..e6cc68c012 100644 --- a/js/fieldmanager-quickedit.js +++ b/js/fieldmanager-quickedit.js @@ -1,6 +1,6 @@ ( function( $ ) { - fm_domready( function() { + $( document ).ready( function() { if ( typeof( inlineEditPost ) == 'undefined' ) { return; } @@ -31,4 +31,4 @@ } } ); -} )( jQuery ); +} )( jQuery ); \ No newline at end of file diff --git a/js/fieldmanager-select.js b/js/fieldmanager-select.js index 4f09a18be1..24a7ed8d84 100644 --- a/js/fieldmanager-select.js +++ b/js/fieldmanager-select.js @@ -42,7 +42,7 @@ fm_reset_chosen = function( $fm_text_field, fm_text_field_val ) { } ); } -fm_domready( function() { +$( document ).ready( function() { // Track changes to the chosen text field linked to the select in order to update options via Ajax // Used for taxonomy-based fields where preload is disabled @@ -101,4 +101,4 @@ fm_domready( function() { } ); -} )( jQuery ); +} )( jQuery ); \ No newline at end of file diff --git a/js/fieldmanager.js b/js/fieldmanager.js index 87f535c7d5..ac77aed25a 100644 --- a/js/fieldmanager.js +++ b/js/fieldmanager.js @@ -278,19 +278,11 @@ var fm_init = function () { $( document ).on( 'fm_activate_tab', init_sortable ); }; -/** - * A wrapper for either wp.domReady or jQuery's ready function. - * @param {function} callback - A callback function to execute on DOM ready. - */ -var fm_domready = function ( callback ) { - if ( wp && wp.domReady ) { - wp.domReady( callback ); - } else { - $( document ).ready( callback ); - } +// Use the wp.domReady helper, if it is available. +if (wp && wp.domReady) { + wp.domReady(fm_init); +} else { + $(document).ready(fm_init); } -// Initialize Fieldmanager when the DOM is ready. -fm_domready( fm_init ); - } )( jQuery ); diff --git a/js/grid.js b/js/grid.js index 40801741e9..c4af498e7a 100644 --- a/js/grid.js +++ b/js/grid.js @@ -107,8 +107,8 @@ $( document ).on( 'fm_collapsible_toggle fm_added_element fm_displayif_toggle fm $.fm_grid_init(); } ); -fm_domready( function() { +$( document ).ready( function() { $.fm_grid_init(); } ); -})( jQuery ); +})( jQuery ); \ No newline at end of file diff --git a/php/class-fieldmanager-colorpicker.php b/php/class-fieldmanager-colorpicker.php index 6f133abd5b..127db71b0a 100644 --- a/php/class-fieldmanager-colorpicker.php +++ b/php/class-fieldmanager-colorpicker.php @@ -36,7 +36,7 @@ class Fieldmanager_Colorpicker extends Fieldmanager_Field { * @param array $options The options. */ public function __construct( $label = '', $options = array() ) { - fm_add_script( 'fm_colorpicker', 'js/fieldmanager-colorpicker.js', array( 'fieldmanager_script', 'jquery', 'wp-color-picker' ), FM_VERSION, true ); + fm_add_script( 'fm_colorpicker', 'js/fieldmanager-colorpicker.js', array( 'jquery', 'wp-color-picker' ), FM_VERSION, true ); fm_add_style( 'wp-color-picker' ); $this->sanitize = 'sanitize_hex_color'; diff --git a/php/class-fieldmanager-draggablepost.php b/php/class-fieldmanager-draggablepost.php index 5e220ad45e..87135dd48c 100644 --- a/php/class-fieldmanager-draggablepost.php +++ b/php/class-fieldmanager-draggablepost.php @@ -57,7 +57,7 @@ public function __construct( $label = '', $options = array() ) { // Refuse to allow more than one instance of this field type. $this->limit = 1; - fm_add_script( 'fm_draggablepost_js', 'js/fieldmanager-draggablepost.js', array( 'fieldmanager_script', 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable' ), FM_VERSION ); + fm_add_script( 'fm_draggablepost_js', 'js/fieldmanager-draggablepost.js', array( 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable' ), FM_VERSION ); fm_add_style( 'fm_draggablepost_css', 'css/fieldmanager-draggablepost.css', array(), FM_VERSION ); } diff --git a/php/class-fieldmanager-field.php b/php/class-fieldmanager-field.php index 8fa295d54b..1cc4715ada 100644 --- a/php/class-fieldmanager-field.php +++ b/php/class-fieldmanager-field.php @@ -409,7 +409,7 @@ public function __construct( $label = '', $options = array() ) { // Only enqueue base assets once, and only when we have a field. if ( ! self::$enqueued_base_assets ) { - fm_add_script( 'fieldmanager_script', 'js/fieldmanager.js', array( 'fieldmanager_script', 'jquery', 'jquery-ui-sortable' ), FM_VERSION ); + fm_add_script( 'fieldmanager_script', 'js/fieldmanager.js', array( 'jquery', 'jquery-ui-sortable' ), FM_VERSION ); fm_add_style( 'fieldmanager_style', 'css/fieldmanager.css', array(), FM_VERSION ); self::$enqueued_base_assets = true; } diff --git a/php/class-fieldmanager-grid.php b/php/class-fieldmanager-grid.php index 67f87fd33f..b11170eb09 100644 --- a/php/class-fieldmanager-grid.php +++ b/php/class-fieldmanager-grid.php @@ -55,7 +55,7 @@ public function __construct( $label = '', $options = array() ) { fm_add_script( 'handsontable', 'js/grid/jquery.handsontable.js' ); fm_add_script( 'contextmenu', 'js/grid/lib/jQuery-contextMenu/jquery.contextMenu.js' ); fm_add_script( 'ui_position', 'js/grid/lib/jQuery-contextMenu/jquery.ui.position.js' ); - fm_add_script( 'grid', 'js/grid.js', array( 'fieldmanager_script', 'handsontable', 'contextmenu', 'ui_position' ), FM_VERSION ); + fm_add_script( 'grid', 'js/grid.js', array( 'handsontable', 'contextmenu', 'ui_position' ), FM_VERSION ); fm_add_style( 'context_menu_css', 'js/grid/lib/jQuery-contextMenu/jquery.contextMenu.css' ); fm_add_style( 'handsontable_css', 'js/grid/jquery.handsontable.css' ); } diff --git a/php/class-fieldmanager-group.php b/php/class-fieldmanager-group.php index 9d4464749e..6c42690eea 100644 --- a/php/class-fieldmanager-group.php +++ b/php/class-fieldmanager-group.php @@ -196,7 +196,7 @@ public function __construct( $label = '', $options = array() ) { // Add the tab JS and CSS if it is needed. if ( $this->tabbed ) { fm_add_script( 'jquery-hoverintent', 'js/jquery.hoverIntent.js', array( 'jquery' ), '1.8.1' ); - fm_add_script( 'fm_group_tabs_js', 'js/fieldmanager-group-tabs.js', array( 'fieldmanager_script', 'jquery', 'jquery-hoverintent' ), FM_VERSION ); + fm_add_script( 'fm_group_tabs_js', 'js/fieldmanager-group-tabs.js', array( 'jquery', 'jquery-hoverintent' ), FM_VERSION ); fm_add_style( 'fm_group_tabs_css', 'css/fieldmanager-group-tabs.css', array(), FM_VERSION ); } } diff --git a/php/class-fieldmanager-media.php b/php/class-fieldmanager-media.php index 585970a674..a87fb2cbc7 100644 --- a/php/class-fieldmanager-media.php +++ b/php/class-fieldmanager-media.php @@ -107,7 +107,7 @@ public function __construct( $label = '', $options = array() ) { $this->remove_media_label = __( 'remove', 'fieldmanager' ); if ( ! self::$has_registered_media ) { - fm_add_script( 'fm_media', 'js/media/fieldmanager-media.js', array( 'fieldmanager_script', 'jquery' ), FM_VERSION ); + fm_add_script( 'fm_media', 'js/media/fieldmanager-media.js', array( 'jquery' ), FM_VERSION ); if ( did_action( 'admin_print_scripts' ) ) { $this->admin_print_scripts(); } else { diff --git a/php/context/class-fieldmanager-context-quickedit.php b/php/context/class-fieldmanager-context-quickedit.php index 0d86ad1306..e8347ed07e 100644 --- a/php/context/class-fieldmanager-context-quickedit.php +++ b/php/context/class-fieldmanager-context-quickedit.php @@ -93,7 +93,7 @@ public function __construct( $title, $post_types, $column_display_callback, $col $post_type = ! isset( $_GET['post_type'] ) ? 'post' : sanitize_text_field( wp_unslash( $_GET['post_type'] ) ); // WPCS: input var okay. if ( in_array( $post_type, $this->post_types ) ) { - fm_add_script( 'quickedit-js', 'js/fieldmanager-quickedit.js', array( 'fieldmanager_script' ), FM_VERSION ); + fm_add_script( 'quickedit-js', 'js/fieldmanager-quickedit.js', array(), FM_VERSION ); } } From 15ab0d84ea4160059160a2c1cb5f0f713301a131 Mon Sep 17 00:00:00 2001 From: kevinfodness Date: Sat, 24 Aug 2019 16:12:09 -0400 Subject: [PATCH 06/16] WIP extended fmLoadModule function --- fieldmanager.php | 11 +++++ js/fieldmanager-autocomplete.js | 5 +- js/fieldmanager-colorpicker.js | 7 +-- js/fieldmanager-datepicker.js | 7 +-- js/fieldmanager-draggablepost.js | 8 ++-- js/fieldmanager-group-tabs.js | 7 +-- js/fieldmanager-loader.js | 46 +++++++++++++++++++ js/fieldmanager-post.js | 34 +++++++------- js/fieldmanager-quickedit.js | 7 +-- js/fieldmanager-select.js | 8 ++-- js/fieldmanager.js | 7 +-- js/grid.js | 6 +-- php/class-fieldmanager-autocomplete.php | 4 +- php/class-fieldmanager-colorpicker.php | 2 +- php/class-fieldmanager-datepicker.php | 2 +- php/class-fieldmanager-draggablepost.php | 2 +- php/class-fieldmanager-field.php | 2 +- php/class-fieldmanager-grid.php | 2 +- php/class-fieldmanager-group.php | 2 +- php/class-fieldmanager-richtextarea.php | 2 +- php/class-fieldmanager-select.php | 2 +- .../class-fieldmanager-context-quickedit.php | 2 +- 22 files changed, 115 insertions(+), 60 deletions(-) create mode 100644 js/fieldmanager-loader.js diff --git a/fieldmanager.php b/fieldmanager.php index 42702a2b4f..2f37cf3538 100644 --- a/fieldmanager.php +++ b/fieldmanager.php @@ -160,6 +160,17 @@ function fieldmanager_get_template( $tpl_slug ) { * @param bool $admin Deprecated. */ function fm_add_script( $handle, $path = false, $deps = array(), $ver = false, $in_footer = false, $data_object = '', $data = array(), $plugin_dir = '', $admin = true ) { + // Ensure the Fieldmanager loader has been enqueued. + if ( ! wp_script_is( 'fm_loader', 'enqueued' ) ) { + Fieldmanager_Util_Assets::instance()->add_script( [ + 'handle' => 'fm_loader', + 'path' => 'js/fieldmanager-loader.js', + 'deps' => array( 'jquery' ), + 'ver' => FM_VERSION, + ] ); + } + + // Enqueue the requested script. Fieldmanager_Util_Assets::instance()->add_script( compact( 'handle', 'path', 'deps', 'ver', 'in_footer', 'data_object', 'data', 'plugin_dir' ) ); } diff --git a/js/fieldmanager-autocomplete.js b/js/fieldmanager-autocomplete.js index b6630f06f8..cfce666966 100644 --- a/js/fieldmanager-autocomplete.js +++ b/js/fieldmanager-autocomplete.js @@ -80,9 +80,10 @@ fm.autocomplete = { } } ); } -} +}; + +fmLoadModule( fm.autocomplete.enable_autocomplete ); -$( document ).ready( fm.autocomplete.enable_autocomplete ); $( document ).on( 'fm_collapsible_toggle fm_added_element fm_displayif_toggle fm_activate_tab', fm.autocomplete.enable_autocomplete ); } ) ( jQuery ); diff --git a/js/fieldmanager-colorpicker.js b/js/fieldmanager-colorpicker.js index 4d6fc278f8..dcbc59cefe 100644 --- a/js/fieldmanager-colorpicker.js +++ b/js/fieldmanager-colorpicker.js @@ -4,9 +4,10 @@ init: function() { $( '.fm-colorpicker-popup:visible' ).wpColorPicker(); } - } + }; + + fmLoadModule( fm.colorpicker.init ); - $( document ).ready( fm.colorpicker.init ); $( document ).on( 'fm_collapsible_toggle fm_added_element fm_displayif_toggle fm_activate_tab', fm.colorpicker.init ); -} )( jQuery ); \ No newline at end of file +} )( jQuery ); diff --git a/js/fieldmanager-datepicker.js b/js/fieldmanager-datepicker.js index cc785253ee..52f2b16064 100644 --- a/js/fieldmanager-datepicker.js +++ b/js/fieldmanager-datepicker.js @@ -8,8 +8,9 @@ } } ); } - } + }; + + fmLoadModule( fm.datepicker.add_datepicker ); - $( document ).ready( fm.datepicker.add_datepicker ); $( document ).on( 'fm_collapsible_toggle fm_added_element fm_displayif_toggle fm_activate_tab', fm.datepicker.add_datepicker ); -} ) ( jQuery ); \ No newline at end of file +} ) ( jQuery ); diff --git a/js/fieldmanager-draggablepost.js b/js/fieldmanager-draggablepost.js index de9fac0061..f364c83f64 100644 --- a/js/fieldmanager-draggablepost.js +++ b/js/fieldmanager-draggablepost.js @@ -1,5 +1,5 @@ (function($) { - $(document).ready(function() { + function draggablePostInit() { resetEmptyMessages(); $('.sortables').sortable({ connectWith: '.sortables', @@ -19,7 +19,7 @@ setTimeout(function() { resetEmptyMessages(); populateHiddenElements(); }, 10); } }); - }); + } function resetEmptyMessages() { $('.post-bin').each(function(i) { if ($(this).find('.draggable-post').length > 0) { @@ -40,4 +40,6 @@ $('#' + input_name).val(post_ids.join(',')); }); } -})(jQuery); \ No newline at end of file + + fmLoadModule( draggablePostInit ); +})(jQuery); diff --git a/js/fieldmanager-group-tabs.js b/js/fieldmanager-group-tabs.js index b1c9398581..2054625664 100644 --- a/js/fieldmanager-group-tabs.js +++ b/js/fieldmanager-group-tabs.js @@ -164,10 +164,5 @@ var FieldmanagerGroupTabs; }; - $(document).ready( function(){ - - FieldmanagerGroupTabs.init(); - - }); - + fmLoadModule( FieldmanagerGroupTabs.init ); } )( jQuery ); diff --git a/js/fieldmanager-loader.js b/js/fieldmanager-loader.js new file mode 100644 index 0000000000..d5c99b88db --- /dev/null +++ b/js/fieldmanager-loader.js @@ -0,0 +1,46 @@ +/** + * A wrapper for DOM ready handlers in the global wp object and jQuery, + * with a shim fallback that mimics the behavior of wp.domReady. + * Ensures that metaboxes have loaded before initializing functionality. + * @param {function} callback - The callback function to execute when the DOM is ready. + */ +function fmLoadModule( callback ) { + // Use a Gutenberg subscription to listen for metaboxes being ready. + if ( wp && wp.data && wp.data.subscribe ) { + var unsubscribe = wp.data.subscribe( + function () { + // Attempt to get an instance of core/edit-post. + var editPost = wp.data.select( 'core/edit-post' ); + if ( ! editPost ) { + return; + } + + // Check for metaboxes in normal and side locations. + if ( editPost.isMetaBoxLocationVisible( 'normal' ) ) { + if ( document.querySelector( '.edit-post-meta-boxes-area.is-normal' ) ) { + unsubscribe(); + callback(); + } + } else if ( editPost.isMetaBoxLocationVisible( 'side' ) ) { + if ( document.querySelector( '.edit-post-meta-boxes-area.is-side' ) ) { + unsubscribe(); + callback(); + } + } + } + ); + } else if ( jQuery ) { + jQuery( document ).ready( callback ); + } else { + // Shim wp.domReady. + if ( + document.readyState === 'complete' || // DOMContentLoaded + Images/Styles/etc loaded, so we call directly. + document.readyState === 'interactive' // DOMContentLoaded fires at this point, so we call directly. + ) { + callback(); + } + + // DOMContentLoaded has not fired yet, delay callback until then. + document.addEventListener( 'DOMContentLoaded', callback ); + } +} diff --git a/js/fieldmanager-post.js b/js/fieldmanager-post.js index d9868d15e2..ceb2d2604a 100644 --- a/js/fieldmanager-post.js +++ b/js/fieldmanager-post.js @@ -12,7 +12,7 @@ var fm_show_post_type = function( $element, post_type ) { var fm_show_post_date = function( $element, post_date ) { if ( $element.data( 'showPostDate' ) == 1 ) { $element.parent().siblings('.fmjs-post-date').remove(); - $element.parent().siblings(".fmjs-remove, .fmjs-clear").after(''); + $element.parent().siblings(".fmjs-remove, .fmjs-clear").after(''); } } @@ -35,22 +35,22 @@ var fm_typeahead_action = function( $element ) { }); } }, - updater: function ( item ) { + updater: function ( item ) { // Get the post ID and post type and store them in data attributes $element.data( 'id', fm_typeahead_results[item]['id'] ); $element.data( 'postType', fm_typeahead_results[item]['post_type'] ); $element.data( 'postDate', fm_typeahead_results[item]['post_date'] ); - + // If the clear handle is enabled, show it $element.parent().siblings('.fmjs-clear').show(); - + // Show the selected post type and/or date after the clear/remove handle fm_show_post_type($element, fm_typeahead_results[item]['post_type']); fm_show_post_date($element, fm_typeahead_results[item]['post_date']); - + // Trigger that the update happened in case any other functions want to execute something here $element.trigger( 'fm_post_update', [item, fm_typeahead_results[item]] ); - + // Remove the post type and/or date from the title and return the title for the text field return fm_typeahead_results[item]['post_title']; }, @@ -58,24 +58,24 @@ var fm_typeahead_action = function( $element ) { } ); } -$( document ).ready( function () { +function fm_post_init() { $( '.fm-post-element' ).each( function( index ) { // Enable typeahead for each post field fm_typeahead_action( $( this ) ); - + // Show the post type, date and/or clear handle (if exists) if the field is not empty and those fields are specified for display - if ( $( this ).data('postType') != '' ) { + if ( $( this ).data('postType') != '' ) { fm_show_post_type( $( this ), $( this ).data('postType') ); } - - if ( $( this ).data('postDate') != '' ) { + + if ( $( this ).data('postDate') != '' ) { fm_show_post_date( $( this ), $( this ).data('postDate') ); } - - if ( $( this ).data('id') != '' ) { + + if ( $( this ).data('id') != '' ) { $( this ).parent().siblings('.fmjs-clear').show(); } - + } ); $( "#post" ).submit( function( e ) { $( '.fm-post-element' ).each( function( index ) { @@ -90,6 +90,8 @@ $( document ).ready( function () { $post_element = $(event.target).find( '.fm-post-element' ); if ( $post_element.length != 0 ) fm_typeahead_action( $post_element ); } ); -} ); +} + +fmLoadModule( fm_post_init ); -} )( jQuery ); \ No newline at end of file +} )( jQuery ); diff --git a/js/fieldmanager-quickedit.js b/js/fieldmanager-quickedit.js index e6cc68c012..0ba53cf4fa 100644 --- a/js/fieldmanager-quickedit.js +++ b/js/fieldmanager-quickedit.js @@ -1,6 +1,6 @@ ( function( $ ) { - $( document ).ready( function() { + function fm_quickedit_init() { if ( typeof( inlineEditPost ) == 'undefined' ) { return; } @@ -29,6 +29,7 @@ } ); } } - } ); + } -} )( jQuery ); \ No newline at end of file + fmLoadModule( fm_quickedit_init ); +} )( jQuery ); diff --git a/js/fieldmanager-select.js b/js/fieldmanager-select.js index 24a7ed8d84..83d07e4e6d 100644 --- a/js/fieldmanager-select.js +++ b/js/fieldmanager-select.js @@ -42,7 +42,7 @@ fm_reset_chosen = function( $fm_text_field, fm_text_field_val ) { } ); } -$( document ).ready( function() { +function fm_select_init() { // Track changes to the chosen text field linked to the select in order to update options via Ajax // Used for taxonomy-based fields where preload is disabled @@ -99,6 +99,8 @@ $( document ).ready( function() { if( $this_select_field.data("taxonomy") != "" && $this_select_field.data("taxonomyPreload") == false ) fm_select_clear_terms( $this_select_field, $(this).parents('.chosen-choices'), true ); } ); -} ); +} + +fmLoadModule( fm_select_init ); -} )( jQuery ); \ No newline at end of file +} )( jQuery ); diff --git a/js/fieldmanager.js b/js/fieldmanager.js index ac77aed25a..5f99973e99 100644 --- a/js/fieldmanager.js +++ b/js/fieldmanager.js @@ -278,11 +278,6 @@ var fm_init = function () { $( document ).on( 'fm_activate_tab', init_sortable ); }; -// Use the wp.domReady helper, if it is available. -if (wp && wp.domReady) { - wp.domReady(fm_init); -} else { - $(document).ready(fm_init); -} +fmLoadModule( fm_init ); } )( jQuery ); diff --git a/js/grid.js b/js/grid.js index c4af498e7a..8841b652b4 100644 --- a/js/grid.js +++ b/js/grid.js @@ -107,8 +107,6 @@ $( document ).on( 'fm_collapsible_toggle fm_added_element fm_displayif_toggle fm $.fm_grid_init(); } ); -$( document ).ready( function() { - $.fm_grid_init(); -} ); +fmLoadModule( $.fm_grid_init ); -})( jQuery ); \ No newline at end of file +})( jQuery ); diff --git a/php/class-fieldmanager-autocomplete.php b/php/class-fieldmanager-autocomplete.php index eacf3a1d44..c0551b7983 100644 --- a/php/class-fieldmanager-autocomplete.php +++ b/php/class-fieldmanager-autocomplete.php @@ -77,9 +77,9 @@ public function __construct( $label = '', $options = array() ) { fm_add_script( 'fm_autocomplete_js', 'js/fieldmanager-autocomplete.js', - array( 'fieldmanager_script', 'jquery-ui-autocomplete' ), + array( 'fm_loader', 'fieldmanager_script', 'jquery-ui-autocomplete' ), FM_VERSION, - false, + true, 'fm_search', array( 'nonce' => wp_create_nonce( 'fm_search_nonce' ), diff --git a/php/class-fieldmanager-colorpicker.php b/php/class-fieldmanager-colorpicker.php index 127db71b0a..8cfe9897e3 100644 --- a/php/class-fieldmanager-colorpicker.php +++ b/php/class-fieldmanager-colorpicker.php @@ -36,7 +36,7 @@ class Fieldmanager_Colorpicker extends Fieldmanager_Field { * @param array $options The options. */ public function __construct( $label = '', $options = array() ) { - fm_add_script( 'fm_colorpicker', 'js/fieldmanager-colorpicker.js', array( 'jquery', 'wp-color-picker' ), FM_VERSION, true ); + fm_add_script( 'fm_colorpicker', 'js/fieldmanager-colorpicker.js', array( 'fm_loader', 'jquery', 'wp-color-picker' ), FM_VERSION, true ); fm_add_style( 'wp-color-picker' ); $this->sanitize = 'sanitize_hex_color'; diff --git a/php/class-fieldmanager-datepicker.php b/php/class-fieldmanager-datepicker.php index 510bebd932..379dd8ebb8 100644 --- a/php/class-fieldmanager-datepicker.php +++ b/php/class-fieldmanager-datepicker.php @@ -70,7 +70,7 @@ class Fieldmanager_Datepicker extends Fieldmanager_Field { */ public function __construct( $label = '', $options = array() ) { fm_add_style( 'fm-jquery-ui', 'css/jquery-ui/jquery-ui-1.10.2.custom.min.css' ); - fm_add_script( 'fm_datepicker', 'js/fieldmanager-datepicker.js', array( 'fieldmanager_script', 'jquery-ui-datepicker' ), FM_VERSION ); + fm_add_script( 'fm_datepicker', 'js/fieldmanager-datepicker.js', array( 'fm_loader', 'fieldmanager_script', 'jquery-ui-datepicker' ), FM_VERSION, true ); parent::__construct( $label, $options ); if ( empty( $this->js_opts ) ) { diff --git a/php/class-fieldmanager-draggablepost.php b/php/class-fieldmanager-draggablepost.php index 87135dd48c..9b239d7e2b 100644 --- a/php/class-fieldmanager-draggablepost.php +++ b/php/class-fieldmanager-draggablepost.php @@ -57,7 +57,7 @@ public function __construct( $label = '', $options = array() ) { // Refuse to allow more than one instance of this field type. $this->limit = 1; - fm_add_script( 'fm_draggablepost_js', 'js/fieldmanager-draggablepost.js', array( 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable' ), FM_VERSION ); + fm_add_script( 'fm_draggablepost_js', 'js/fieldmanager-draggablepost.js', array( 'fm_loader', 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable' ), FM_VERSION, true ); fm_add_style( 'fm_draggablepost_css', 'css/fieldmanager-draggablepost.css', array(), FM_VERSION ); } diff --git a/php/class-fieldmanager-field.php b/php/class-fieldmanager-field.php index 1cc4715ada..eff6cf1873 100644 --- a/php/class-fieldmanager-field.php +++ b/php/class-fieldmanager-field.php @@ -409,7 +409,7 @@ public function __construct( $label = '', $options = array() ) { // Only enqueue base assets once, and only when we have a field. if ( ! self::$enqueued_base_assets ) { - fm_add_script( 'fieldmanager_script', 'js/fieldmanager.js', array( 'jquery', 'jquery-ui-sortable' ), FM_VERSION ); + fm_add_script( 'fieldmanager_script', 'js/fieldmanager.js', array( 'fm_loader', 'jquery', 'jquery-ui-sortable' ), FM_VERSION, true ); fm_add_style( 'fieldmanager_style', 'css/fieldmanager.css', array(), FM_VERSION ); self::$enqueued_base_assets = true; } diff --git a/php/class-fieldmanager-grid.php b/php/class-fieldmanager-grid.php index b11170eb09..76ef5fe341 100644 --- a/php/class-fieldmanager-grid.php +++ b/php/class-fieldmanager-grid.php @@ -55,7 +55,7 @@ public function __construct( $label = '', $options = array() ) { fm_add_script( 'handsontable', 'js/grid/jquery.handsontable.js' ); fm_add_script( 'contextmenu', 'js/grid/lib/jQuery-contextMenu/jquery.contextMenu.js' ); fm_add_script( 'ui_position', 'js/grid/lib/jQuery-contextMenu/jquery.ui.position.js' ); - fm_add_script( 'grid', 'js/grid.js', array( 'handsontable', 'contextmenu', 'ui_position' ), FM_VERSION ); + fm_add_script( 'grid', 'js/grid.js', array( 'fm_loader', 'handsontable', 'contextmenu', 'ui_position' ), FM_VERSION, true ); fm_add_style( 'context_menu_css', 'js/grid/lib/jQuery-contextMenu/jquery.contextMenu.css' ); fm_add_style( 'handsontable_css', 'js/grid/jquery.handsontable.css' ); } diff --git a/php/class-fieldmanager-group.php b/php/class-fieldmanager-group.php index 6c42690eea..4fa73830a2 100644 --- a/php/class-fieldmanager-group.php +++ b/php/class-fieldmanager-group.php @@ -196,7 +196,7 @@ public function __construct( $label = '', $options = array() ) { // Add the tab JS and CSS if it is needed. if ( $this->tabbed ) { fm_add_script( 'jquery-hoverintent', 'js/jquery.hoverIntent.js', array( 'jquery' ), '1.8.1' ); - fm_add_script( 'fm_group_tabs_js', 'js/fieldmanager-group-tabs.js', array( 'jquery', 'jquery-hoverintent' ), FM_VERSION ); + fm_add_script( 'fm_group_tabs_js', 'js/fieldmanager-group-tabs.js', array( 'fm_loader', 'jquery', 'jquery-hoverintent' ), FM_VERSION, true ); fm_add_style( 'fm_group_tabs_css', 'css/fieldmanager-group-tabs.css', array(), FM_VERSION ); } } diff --git a/php/class-fieldmanager-richtextarea.php b/php/class-fieldmanager-richtextarea.php index 0cc80e8e2b..d34f6857c3 100644 --- a/php/class-fieldmanager-richtextarea.php +++ b/php/class-fieldmanager-richtextarea.php @@ -104,7 +104,7 @@ public function __construct( $label = '', $options = array() ) { $this->sanitize = array( $this, 'sanitize' ); // 'utils' provides getUserSetting(). - fm_add_script( 'fm_richtext', 'js/richtext.js', array( 'jquery', 'fieldmanager_script', 'utils' ), FM_VERSION ); + fm_add_script( 'fm_richtext', 'js/richtext.js', array( 'fm_loader', 'jquery', 'fieldmanager_script', 'utils' ), FM_VERSION, true ); parent::__construct( $label, $options ); } diff --git a/php/class-fieldmanager-select.php b/php/class-fieldmanager-select.php index 10ac81fb5d..38452df9de 100644 --- a/php/class-fieldmanager-select.php +++ b/php/class-fieldmanager-select.php @@ -59,7 +59,7 @@ public function __construct( $label = '', $options = array() ) { fm_add_script( 'fm_select_js', 'js/fieldmanager-select.js', - array(), + array( 'fm_loader' ), FM_VERSION, false, 'fm_select', diff --git a/php/context/class-fieldmanager-context-quickedit.php b/php/context/class-fieldmanager-context-quickedit.php index e8347ed07e..bdaaa0c044 100644 --- a/php/context/class-fieldmanager-context-quickedit.php +++ b/php/context/class-fieldmanager-context-quickedit.php @@ -93,7 +93,7 @@ public function __construct( $title, $post_types, $column_display_callback, $col $post_type = ! isset( $_GET['post_type'] ) ? 'post' : sanitize_text_field( wp_unslash( $_GET['post_type'] ) ); // WPCS: input var okay. if ( in_array( $post_type, $this->post_types ) ) { - fm_add_script( 'quickedit-js', 'js/fieldmanager-quickedit.js', array(), FM_VERSION ); + fm_add_script( 'quickedit-js', 'js/fieldmanager-quickedit.js', array( 'fm_loader' ), FM_VERSION, true ); } } From 627aa8e9f34487478f019313ef53d19bb131e63d Mon Sep 17 00:00:00 2001 From: kevinfodness Date: Sat, 24 Aug 2019 17:22:22 -0400 Subject: [PATCH 07/16] Finalize move to abstracted loader function --- js/fieldmanager-group-tabs.js | 4 +-- js/fieldmanager-loader.js | 26 ++----------------- js/richtext.js | 16 +++++++----- php/class-fieldmanager-autocomplete.php | 2 +- php/class-fieldmanager-colorpicker.php | 2 +- php/class-fieldmanager-datepicker.php | 2 +- php/class-fieldmanager-draggablepost.php | 2 +- php/class-fieldmanager-field.php | 2 +- php/class-fieldmanager-grid.php | 2 +- php/class-fieldmanager-group.php | 2 +- php/class-fieldmanager-richtextarea.php | 2 +- .../class-fieldmanager-context-quickedit.php | 2 +- 12 files changed, 22 insertions(+), 42 deletions(-) diff --git a/js/fieldmanager-group-tabs.js b/js/fieldmanager-group-tabs.js index 2054625664..e94bf78fac 100644 --- a/js/fieldmanager-group-tabs.js +++ b/js/fieldmanager-group-tabs.js @@ -8,9 +8,9 @@ var FieldmanagerGroupTabs; */ init: function() { - this.bindEvents(); + FieldmanagerGroupTabs.bindEvents(); - this.restoreSelectedTabs(); + FieldmanagerGroupTabs.restoreSelectedTabs(); }, diff --git a/js/fieldmanager-loader.js b/js/fieldmanager-loader.js index d5c99b88db..a0ffd088c1 100644 --- a/js/fieldmanager-loader.js +++ b/js/fieldmanager-loader.js @@ -5,30 +5,8 @@ * @param {function} callback - The callback function to execute when the DOM is ready. */ function fmLoadModule( callback ) { - // Use a Gutenberg subscription to listen for metaboxes being ready. - if ( wp && wp.data && wp.data.subscribe ) { - var unsubscribe = wp.data.subscribe( - function () { - // Attempt to get an instance of core/edit-post. - var editPost = wp.data.select( 'core/edit-post' ); - if ( ! editPost ) { - return; - } - - // Check for metaboxes in normal and side locations. - if ( editPost.isMetaBoxLocationVisible( 'normal' ) ) { - if ( document.querySelector( '.edit-post-meta-boxes-area.is-normal' ) ) { - unsubscribe(); - callback(); - } - } else if ( editPost.isMetaBoxLocationVisible( 'side' ) ) { - if ( document.querySelector( '.edit-post-meta-boxes-area.is-side' ) ) { - unsubscribe(); - callback(); - } - } - } - ); + if ( wp && wp.domReady ) { + wp.domReady( callback ); } else if ( jQuery ) { jQuery( document ).ready( callback ); } else { diff --git a/js/richtext.js b/js/richtext.js index 0b6ad0cc3a..29f29ddb06 100644 --- a/js/richtext.js +++ b/js/richtext.js @@ -151,10 +151,12 @@ * On document.load, init the editors and make the global meta box drag-drop * event reload the editors. */ - $( function() { - fm.richtextarea.add_rte_to_visible_textareas(); - $( '.meta-box-sortables' ).on( 'sortstop', function( e, obj ) { - fm.richtextarea.reload_editors( e, obj.item[0] ); - } ); - } ); -} ) ( jQuery ); \ No newline at end of file + fmLoadModule( + function() { + fm.richtextarea.add_rte_to_visible_textareas(); + $( '.meta-box-sortables' ).on( 'sortstop', function( e, obj ) { + fm.richtextarea.reload_editors( e, obj.item[0] ); + } ); + } + ); +} ) ( jQuery ); diff --git a/php/class-fieldmanager-autocomplete.php b/php/class-fieldmanager-autocomplete.php index c0551b7983..8b2071ebd7 100644 --- a/php/class-fieldmanager-autocomplete.php +++ b/php/class-fieldmanager-autocomplete.php @@ -79,7 +79,7 @@ public function __construct( $label = '', $options = array() ) { 'js/fieldmanager-autocomplete.js', array( 'fm_loader', 'fieldmanager_script', 'jquery-ui-autocomplete' ), FM_VERSION, - true, + false, 'fm_search', array( 'nonce' => wp_create_nonce( 'fm_search_nonce' ), diff --git a/php/class-fieldmanager-colorpicker.php b/php/class-fieldmanager-colorpicker.php index 8cfe9897e3..a9610028db 100644 --- a/php/class-fieldmanager-colorpicker.php +++ b/php/class-fieldmanager-colorpicker.php @@ -36,7 +36,7 @@ class Fieldmanager_Colorpicker extends Fieldmanager_Field { * @param array $options The options. */ public function __construct( $label = '', $options = array() ) { - fm_add_script( 'fm_colorpicker', 'js/fieldmanager-colorpicker.js', array( 'fm_loader', 'jquery', 'wp-color-picker' ), FM_VERSION, true ); + fm_add_script( 'fm_colorpicker', 'js/fieldmanager-colorpicker.js', array( 'fm_loader', 'jquery', 'wp-color-picker' ), FM_VERSION ); fm_add_style( 'wp-color-picker' ); $this->sanitize = 'sanitize_hex_color'; diff --git a/php/class-fieldmanager-datepicker.php b/php/class-fieldmanager-datepicker.php index 379dd8ebb8..4303eb66ad 100644 --- a/php/class-fieldmanager-datepicker.php +++ b/php/class-fieldmanager-datepicker.php @@ -70,7 +70,7 @@ class Fieldmanager_Datepicker extends Fieldmanager_Field { */ public function __construct( $label = '', $options = array() ) { fm_add_style( 'fm-jquery-ui', 'css/jquery-ui/jquery-ui-1.10.2.custom.min.css' ); - fm_add_script( 'fm_datepicker', 'js/fieldmanager-datepicker.js', array( 'fm_loader', 'fieldmanager_script', 'jquery-ui-datepicker' ), FM_VERSION, true ); + fm_add_script( 'fm_datepicker', 'js/fieldmanager-datepicker.js', array( 'fm_loader', 'fieldmanager_script', 'jquery-ui-datepicker' ), FM_VERSION ); parent::__construct( $label, $options ); if ( empty( $this->js_opts ) ) { diff --git a/php/class-fieldmanager-draggablepost.php b/php/class-fieldmanager-draggablepost.php index 9b239d7e2b..ce446f0a9b 100644 --- a/php/class-fieldmanager-draggablepost.php +++ b/php/class-fieldmanager-draggablepost.php @@ -57,7 +57,7 @@ public function __construct( $label = '', $options = array() ) { // Refuse to allow more than one instance of this field type. $this->limit = 1; - fm_add_script( 'fm_draggablepost_js', 'js/fieldmanager-draggablepost.js', array( 'fm_loader', 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable' ), FM_VERSION, true ); + fm_add_script( 'fm_draggablepost_js', 'js/fieldmanager-draggablepost.js', array( 'fm_loader', 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable' ), FM_VERSION ); fm_add_style( 'fm_draggablepost_css', 'css/fieldmanager-draggablepost.css', array(), FM_VERSION ); } diff --git a/php/class-fieldmanager-field.php b/php/class-fieldmanager-field.php index eff6cf1873..ca6c7f32c8 100644 --- a/php/class-fieldmanager-field.php +++ b/php/class-fieldmanager-field.php @@ -409,7 +409,7 @@ public function __construct( $label = '', $options = array() ) { // Only enqueue base assets once, and only when we have a field. if ( ! self::$enqueued_base_assets ) { - fm_add_script( 'fieldmanager_script', 'js/fieldmanager.js', array( 'fm_loader', 'jquery', 'jquery-ui-sortable' ), FM_VERSION, true ); + fm_add_script( 'fieldmanager_script', 'js/fieldmanager.js', array( 'fm_loader', 'jquery', 'jquery-ui-sortable' ), FM_VERSION ); fm_add_style( 'fieldmanager_style', 'css/fieldmanager.css', array(), FM_VERSION ); self::$enqueued_base_assets = true; } diff --git a/php/class-fieldmanager-grid.php b/php/class-fieldmanager-grid.php index 76ef5fe341..e5eb806001 100644 --- a/php/class-fieldmanager-grid.php +++ b/php/class-fieldmanager-grid.php @@ -55,7 +55,7 @@ public function __construct( $label = '', $options = array() ) { fm_add_script( 'handsontable', 'js/grid/jquery.handsontable.js' ); fm_add_script( 'contextmenu', 'js/grid/lib/jQuery-contextMenu/jquery.contextMenu.js' ); fm_add_script( 'ui_position', 'js/grid/lib/jQuery-contextMenu/jquery.ui.position.js' ); - fm_add_script( 'grid', 'js/grid.js', array( 'fm_loader', 'handsontable', 'contextmenu', 'ui_position' ), FM_VERSION, true ); + fm_add_script( 'grid', 'js/grid.js', array( 'fm_loader', 'handsontable', 'contextmenu', 'ui_position' ), FM_VERSION ); fm_add_style( 'context_menu_css', 'js/grid/lib/jQuery-contextMenu/jquery.contextMenu.css' ); fm_add_style( 'handsontable_css', 'js/grid/jquery.handsontable.css' ); } diff --git a/php/class-fieldmanager-group.php b/php/class-fieldmanager-group.php index 4fa73830a2..288049d26f 100644 --- a/php/class-fieldmanager-group.php +++ b/php/class-fieldmanager-group.php @@ -196,7 +196,7 @@ public function __construct( $label = '', $options = array() ) { // Add the tab JS and CSS if it is needed. if ( $this->tabbed ) { fm_add_script( 'jquery-hoverintent', 'js/jquery.hoverIntent.js', array( 'jquery' ), '1.8.1' ); - fm_add_script( 'fm_group_tabs_js', 'js/fieldmanager-group-tabs.js', array( 'fm_loader', 'jquery', 'jquery-hoverintent' ), FM_VERSION, true ); + fm_add_script( 'fm_group_tabs_js', 'js/fieldmanager-group-tabs.js', array( 'fm_loader', 'jquery', 'jquery-hoverintent' ), FM_VERSION ); fm_add_style( 'fm_group_tabs_css', 'css/fieldmanager-group-tabs.css', array(), FM_VERSION ); } } diff --git a/php/class-fieldmanager-richtextarea.php b/php/class-fieldmanager-richtextarea.php index d34f6857c3..0a2944305d 100644 --- a/php/class-fieldmanager-richtextarea.php +++ b/php/class-fieldmanager-richtextarea.php @@ -104,7 +104,7 @@ public function __construct( $label = '', $options = array() ) { $this->sanitize = array( $this, 'sanitize' ); // 'utils' provides getUserSetting(). - fm_add_script( 'fm_richtext', 'js/richtext.js', array( 'fm_loader', 'jquery', 'fieldmanager_script', 'utils' ), FM_VERSION, true ); + fm_add_script( 'fm_richtext', 'js/richtext.js', array( 'fm_loader', 'jquery', 'fieldmanager_script', 'utils' ), FM_VERSION ); parent::__construct( $label, $options ); } diff --git a/php/context/class-fieldmanager-context-quickedit.php b/php/context/class-fieldmanager-context-quickedit.php index bdaaa0c044..90c7103c0e 100644 --- a/php/context/class-fieldmanager-context-quickedit.php +++ b/php/context/class-fieldmanager-context-quickedit.php @@ -93,7 +93,7 @@ public function __construct( $title, $post_types, $column_display_callback, $col $post_type = ! isset( $_GET['post_type'] ) ? 'post' : sanitize_text_field( wp_unslash( $_GET['post_type'] ) ); // WPCS: input var okay. if ( in_array( $post_type, $this->post_types ) ) { - fm_add_script( 'quickedit-js', 'js/fieldmanager-quickedit.js', array( 'fm_loader' ), FM_VERSION, true ); + fm_add_script( 'quickedit-js', 'js/fieldmanager-quickedit.js', array( 'fm_loader' ), FM_VERSION ); } } From ad01a21050f74c17f32eee9b06ded4e9092e28cb Mon Sep 17 00:00:00 2001 From: kevinfodness Date: Sat, 24 Aug 2019 17:22:41 -0400 Subject: [PATCH 08/16] Update Travis config, make php 7.2 and 7.3 mandatory --- .travis.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index 117c93d87a..3394d3d95a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,27 +2,27 @@ language: php matrix: include: - - php: 5.3 + - php: '5.3' env: WP_VERSION=4.7.6 dist: precise - - php: 5.3 + - php: '5.3' env: WP_VERSION=latest dist: precise - - php: 5.6 + - php: '5.6' env: WP_VERSION=latest - - php: 5.6 + - php: '5.6' env: WP_TRAVISCI=phpcs - - php: 7.0 + - php: '7.0' env: WP_VERSION=latest - - php: 7.0 - env: WP_VERSION=nightly - - php: 7.1 + - php: '7.1' env: WP_VERSION=latest - - php: 7.2 + - php: '7.2' env: WP_VERSION=latest + - php: '7.3' + env: WP_VERSION=latest + - php: '7.3' + env: WP_VERSION=nightly fast_finish: true - allow_failures: - - php: 7.2 branches: only: @@ -88,4 +88,4 @@ script: if [[ "$WP_TRAVISCI" == "phpcs" ]] ; then cd $OG_DIR grunt phpcs - fi \ No newline at end of file + fi From 5379944882cf20742ea9bf544c58de09bcbe64f2 Mon Sep 17 00:00:00 2001 From: kevinfodness Date: Sat, 24 Aug 2019 17:26:29 -0400 Subject: [PATCH 09/16] Load Fieldmanager JS in the footer, mostly --- php/class-fieldmanager-autocomplete.php | 2 +- php/class-fieldmanager-colorpicker.php | 2 +- php/class-fieldmanager-datepicker.php | 2 +- php/class-fieldmanager-draggablepost.php | 2 +- php/class-fieldmanager-grid.php | 2 +- php/class-fieldmanager-group.php | 2 +- php/class-fieldmanager-media.php | 2 +- php/class-fieldmanager-richtextarea.php | 2 +- php/class-fieldmanager-select.php | 2 +- php/context/class-fieldmanager-context-quickedit.php | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/php/class-fieldmanager-autocomplete.php b/php/class-fieldmanager-autocomplete.php index 8b2071ebd7..c0551b7983 100644 --- a/php/class-fieldmanager-autocomplete.php +++ b/php/class-fieldmanager-autocomplete.php @@ -79,7 +79,7 @@ public function __construct( $label = '', $options = array() ) { 'js/fieldmanager-autocomplete.js', array( 'fm_loader', 'fieldmanager_script', 'jquery-ui-autocomplete' ), FM_VERSION, - false, + true, 'fm_search', array( 'nonce' => wp_create_nonce( 'fm_search_nonce' ), diff --git a/php/class-fieldmanager-colorpicker.php b/php/class-fieldmanager-colorpicker.php index a9610028db..8cfe9897e3 100644 --- a/php/class-fieldmanager-colorpicker.php +++ b/php/class-fieldmanager-colorpicker.php @@ -36,7 +36,7 @@ class Fieldmanager_Colorpicker extends Fieldmanager_Field { * @param array $options The options. */ public function __construct( $label = '', $options = array() ) { - fm_add_script( 'fm_colorpicker', 'js/fieldmanager-colorpicker.js', array( 'fm_loader', 'jquery', 'wp-color-picker' ), FM_VERSION ); + fm_add_script( 'fm_colorpicker', 'js/fieldmanager-colorpicker.js', array( 'fm_loader', 'jquery', 'wp-color-picker' ), FM_VERSION, true ); fm_add_style( 'wp-color-picker' ); $this->sanitize = 'sanitize_hex_color'; diff --git a/php/class-fieldmanager-datepicker.php b/php/class-fieldmanager-datepicker.php index 4303eb66ad..379dd8ebb8 100644 --- a/php/class-fieldmanager-datepicker.php +++ b/php/class-fieldmanager-datepicker.php @@ -70,7 +70,7 @@ class Fieldmanager_Datepicker extends Fieldmanager_Field { */ public function __construct( $label = '', $options = array() ) { fm_add_style( 'fm-jquery-ui', 'css/jquery-ui/jquery-ui-1.10.2.custom.min.css' ); - fm_add_script( 'fm_datepicker', 'js/fieldmanager-datepicker.js', array( 'fm_loader', 'fieldmanager_script', 'jquery-ui-datepicker' ), FM_VERSION ); + fm_add_script( 'fm_datepicker', 'js/fieldmanager-datepicker.js', array( 'fm_loader', 'fieldmanager_script', 'jquery-ui-datepicker' ), FM_VERSION, true ); parent::__construct( $label, $options ); if ( empty( $this->js_opts ) ) { diff --git a/php/class-fieldmanager-draggablepost.php b/php/class-fieldmanager-draggablepost.php index ce446f0a9b..9b239d7e2b 100644 --- a/php/class-fieldmanager-draggablepost.php +++ b/php/class-fieldmanager-draggablepost.php @@ -57,7 +57,7 @@ public function __construct( $label = '', $options = array() ) { // Refuse to allow more than one instance of this field type. $this->limit = 1; - fm_add_script( 'fm_draggablepost_js', 'js/fieldmanager-draggablepost.js', array( 'fm_loader', 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable' ), FM_VERSION ); + fm_add_script( 'fm_draggablepost_js', 'js/fieldmanager-draggablepost.js', array( 'fm_loader', 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable' ), FM_VERSION, true ); fm_add_style( 'fm_draggablepost_css', 'css/fieldmanager-draggablepost.css', array(), FM_VERSION ); } diff --git a/php/class-fieldmanager-grid.php b/php/class-fieldmanager-grid.php index e5eb806001..76ef5fe341 100644 --- a/php/class-fieldmanager-grid.php +++ b/php/class-fieldmanager-grid.php @@ -55,7 +55,7 @@ public function __construct( $label = '', $options = array() ) { fm_add_script( 'handsontable', 'js/grid/jquery.handsontable.js' ); fm_add_script( 'contextmenu', 'js/grid/lib/jQuery-contextMenu/jquery.contextMenu.js' ); fm_add_script( 'ui_position', 'js/grid/lib/jQuery-contextMenu/jquery.ui.position.js' ); - fm_add_script( 'grid', 'js/grid.js', array( 'fm_loader', 'handsontable', 'contextmenu', 'ui_position' ), FM_VERSION ); + fm_add_script( 'grid', 'js/grid.js', array( 'fm_loader', 'handsontable', 'contextmenu', 'ui_position' ), FM_VERSION, true ); fm_add_style( 'context_menu_css', 'js/grid/lib/jQuery-contextMenu/jquery.contextMenu.css' ); fm_add_style( 'handsontable_css', 'js/grid/jquery.handsontable.css' ); } diff --git a/php/class-fieldmanager-group.php b/php/class-fieldmanager-group.php index 288049d26f..4fa73830a2 100644 --- a/php/class-fieldmanager-group.php +++ b/php/class-fieldmanager-group.php @@ -196,7 +196,7 @@ public function __construct( $label = '', $options = array() ) { // Add the tab JS and CSS if it is needed. if ( $this->tabbed ) { fm_add_script( 'jquery-hoverintent', 'js/jquery.hoverIntent.js', array( 'jquery' ), '1.8.1' ); - fm_add_script( 'fm_group_tabs_js', 'js/fieldmanager-group-tabs.js', array( 'fm_loader', 'jquery', 'jquery-hoverintent' ), FM_VERSION ); + fm_add_script( 'fm_group_tabs_js', 'js/fieldmanager-group-tabs.js', array( 'fm_loader', 'jquery', 'jquery-hoverintent' ), FM_VERSION, true ); fm_add_style( 'fm_group_tabs_css', 'css/fieldmanager-group-tabs.css', array(), FM_VERSION ); } } diff --git a/php/class-fieldmanager-media.php b/php/class-fieldmanager-media.php index a87fb2cbc7..31ef5d33de 100644 --- a/php/class-fieldmanager-media.php +++ b/php/class-fieldmanager-media.php @@ -107,7 +107,7 @@ public function __construct( $label = '', $options = array() ) { $this->remove_media_label = __( 'remove', 'fieldmanager' ); if ( ! self::$has_registered_media ) { - fm_add_script( 'fm_media', 'js/media/fieldmanager-media.js', array( 'jquery' ), FM_VERSION ); + fm_add_script( 'fm_media', 'js/media/fieldmanager-media.js', array( 'jquery' ), FM_VERSION, true ); if ( did_action( 'admin_print_scripts' ) ) { $this->admin_print_scripts(); } else { diff --git a/php/class-fieldmanager-richtextarea.php b/php/class-fieldmanager-richtextarea.php index 0a2944305d..d34f6857c3 100644 --- a/php/class-fieldmanager-richtextarea.php +++ b/php/class-fieldmanager-richtextarea.php @@ -104,7 +104,7 @@ public function __construct( $label = '', $options = array() ) { $this->sanitize = array( $this, 'sanitize' ); // 'utils' provides getUserSetting(). - fm_add_script( 'fm_richtext', 'js/richtext.js', array( 'fm_loader', 'jquery', 'fieldmanager_script', 'utils' ), FM_VERSION ); + fm_add_script( 'fm_richtext', 'js/richtext.js', array( 'fm_loader', 'jquery', 'fieldmanager_script', 'utils' ), FM_VERSION, true ); parent::__construct( $label, $options ); } diff --git a/php/class-fieldmanager-select.php b/php/class-fieldmanager-select.php index 38452df9de..87efd826b0 100644 --- a/php/class-fieldmanager-select.php +++ b/php/class-fieldmanager-select.php @@ -61,7 +61,7 @@ public function __construct( $label = '', $options = array() ) { 'js/fieldmanager-select.js', array( 'fm_loader' ), FM_VERSION, - false, + true, 'fm_select', array( 'nonce' => wp_create_nonce( 'fm_search_terms_nonce' ), diff --git a/php/context/class-fieldmanager-context-quickedit.php b/php/context/class-fieldmanager-context-quickedit.php index 90c7103c0e..bdaaa0c044 100644 --- a/php/context/class-fieldmanager-context-quickedit.php +++ b/php/context/class-fieldmanager-context-quickedit.php @@ -93,7 +93,7 @@ public function __construct( $title, $post_types, $column_display_callback, $col $post_type = ! isset( $_GET['post_type'] ) ? 'post' : sanitize_text_field( wp_unslash( $_GET['post_type'] ) ); // WPCS: input var okay. if ( in_array( $post_type, $this->post_types ) ) { - fm_add_script( 'quickedit-js', 'js/fieldmanager-quickedit.js', array( 'fm_loader' ), FM_VERSION ); + fm_add_script( 'quickedit-js', 'js/fieldmanager-quickedit.js', array( 'fm_loader' ), FM_VERSION, true ); } } From b5418105c3e03685a593dd36f44b22ea8f2ae9b9 Mon Sep 17 00:00:00 2001 From: kevinfodness Date: Sat, 24 Aug 2019 17:30:21 -0400 Subject: [PATCH 10/16] phpcs fixes --- fieldmanager.php | 14 ++++++++------ package.json | 6 +++--- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/fieldmanager.php b/fieldmanager.php index 2f37cf3538..da944a1be5 100644 --- a/fieldmanager.php +++ b/fieldmanager.php @@ -162,12 +162,14 @@ function fieldmanager_get_template( $tpl_slug ) { function fm_add_script( $handle, $path = false, $deps = array(), $ver = false, $in_footer = false, $data_object = '', $data = array(), $plugin_dir = '', $admin = true ) { // Ensure the Fieldmanager loader has been enqueued. if ( ! wp_script_is( 'fm_loader', 'enqueued' ) ) { - Fieldmanager_Util_Assets::instance()->add_script( [ - 'handle' => 'fm_loader', - 'path' => 'js/fieldmanager-loader.js', - 'deps' => array( 'jquery' ), - 'ver' => FM_VERSION, - ] ); + Fieldmanager_Util_Assets::instance()->add_script( + array( + 'handle' => 'fm_loader', + 'path' => 'js/fieldmanager-loader.js', + 'deps' => array( 'jquery' ), + 'ver' => FM_VERSION, + ) + ); } // Enqueue the requested script. diff --git a/package.json b/package.json index 478e171154..bfcbfb8be7 100644 --- a/package.json +++ b/package.json @@ -2,9 +2,9 @@ "name": "Fieldmanager", "description": "Fieldmanager is a comprehensive toolkit for building forms, metaboxes, and custom admin screens for WordPress.", "version": "1.2.4", - "repository" : { - "type" : "git", - "url" : "https://github.com/alleyinteractive/wordpress-fieldmanager" + "repository": { + "type": "git", + "url": "https://github.com/alleyinteractive/wordpress-fieldmanager" }, "license": "GPL-2.0", "devDependencies": { From 79bdee32bb407dfe19384d8646bc5e48a5768ee8 Mon Sep 17 00:00:00 2001 From: kevinfodness Date: Sun, 25 Aug 2019 08:27:51 -0400 Subject: [PATCH 11/16] Update dependency checks in phpunit tests --- tests/php/test-fieldmanager-script-loading.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/php/test-fieldmanager-script-loading.php b/tests/php/test-fieldmanager-script-loading.php index 81b6051b09..3240d30f6c 100644 --- a/tests/php/test-fieldmanager-script-loading.php +++ b/tests/php/test-fieldmanager-script-loading.php @@ -33,15 +33,15 @@ public function setUp() { */ public function script_data() { return array( - array( 'fieldmanager_script', array( 'jquery', 'jquery-ui-sortable' ) ), - array( 'fm_autocomplete_js', array( 'fieldmanager_script', 'jquery-ui-autocomplete' ) ), - array( 'fm_datepicker', array( 'fieldmanager_script', 'jquery-ui-datepicker' ) ), - array( 'fm_group_tabs_js', array( 'jquery', 'jquery-hoverintent' ) ), + array( 'fieldmanager_script', array( 'fm_loader', 'jquery', 'jquery-ui-sortable' ) ), + array( 'fm_autocomplete_js', array( 'fm_loader', 'fieldmanager_script', 'jquery-ui-autocomplete' ) ), + array( 'fm_datepicker', array( 'fm_loader', 'fieldmanager_script', 'jquery-ui-datepicker' ) ), + array( 'fm_group_tabs_js', array( 'fm_loader', 'jquery', 'jquery-hoverintent' ) ), array( 'fm_media', array( 'jquery' ) ), - array( 'fm_richtext', array( 'jquery', 'fieldmanager_script', 'utils' ) ), - array( 'fm_select_js', array() ), - array( 'grid', array() ), - array( 'fm_colorpicker', array( 'jquery', 'wp-color-picker' ) ), + array( 'fm_richtext', array( 'fm_loader', 'jquery', 'fieldmanager_script', 'utils' ) ), + array( 'fm_select_js', array( 'fm_loader' ) ), + array( 'grid', array( 'fm_loader', 'handsontable', 'contextmenu', 'ui_position' ) ), + array( 'fm_colorpicker', array( 'fm_loader', 'jquery', 'wp-color-picker' ) ), ); } From 64bfc67d2d2da48b82849fc90ffea4fe7383abeb Mon Sep 17 00:00:00 2001 From: kevinfodness Date: Sun, 25 Aug 2019 14:23:04 -0400 Subject: [PATCH 12/16] Tabs vs. spaces in Travis config --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3394d3d95a..44dda8c286 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,10 +18,10 @@ matrix: env: WP_VERSION=latest - php: '7.2' env: WP_VERSION=latest - - php: '7.3' - env: WP_VERSION=latest - - php: '7.3' - env: WP_VERSION=nightly + - php: '7.3' + env: WP_VERSION=latest + - php: '7.3' + env: WP_VERSION=nightly fast_finish: true branches: From f0bb9e9d992f9bbcb46d823f6b9bc9d2c738c7dc Mon Sep 17 00:00:00 2001 From: kevinfodness Date: Sun, 25 Aug 2019 14:25:14 -0400 Subject: [PATCH 13/16] Add missing return to loader --- js/fieldmanager-loader.js | 1 + 1 file changed, 1 insertion(+) diff --git a/js/fieldmanager-loader.js b/js/fieldmanager-loader.js index a0ffd088c1..b153efb9c9 100644 --- a/js/fieldmanager-loader.js +++ b/js/fieldmanager-loader.js @@ -16,6 +16,7 @@ function fmLoadModule( callback ) { document.readyState === 'interactive' // DOMContentLoaded fires at this point, so we call directly. ) { callback(); + return; } // DOMContentLoaded has not fired yet, delay callback until then. From 6e46daf1a0e643f28802a7ca0c5466870a0530fb Mon Sep 17 00:00:00 2001 From: kevinfodness Date: Thu, 5 Dec 2019 11:20:27 -0500 Subject: [PATCH 14/16] Better safety check for non-existent wp object --- js/fieldmanager-loader.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/fieldmanager-loader.js b/js/fieldmanager-loader.js index b153efb9c9..348ef6fc10 100644 --- a/js/fieldmanager-loader.js +++ b/js/fieldmanager-loader.js @@ -5,7 +5,7 @@ * @param {function} callback - The callback function to execute when the DOM is ready. */ function fmLoadModule( callback ) { - if ( wp && wp.domReady ) { + if ( 'object' === typeof wp && 'function' === typeof wp.domReady ) { wp.domReady( callback ); } else if ( jQuery ) { jQuery( document ).ready( callback ); From 020ab8a2b47dbe507363c24a1ed57f5f1d9315b8 Mon Sep 17 00:00:00 2001 From: kevinfodness Date: Tue, 17 Dec 2019 13:10:43 -0500 Subject: [PATCH 15/16] Bump version to 1.2.5-beta2 to bust cache --- fieldmanager.php | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/fieldmanager.php b/fieldmanager.php index da944a1be5..a64e917b15 100644 --- a/fieldmanager.php +++ b/fieldmanager.php @@ -3,7 +3,7 @@ * Fieldmanager Base Plugin File. * * @package Fieldmanager - * @version 1.2.5 + * @version 1.2.5-beta2 */ /* @@ -11,14 +11,14 @@ Plugin URI: https://github.com/alleyinteractive/wordpress-fieldmanager Description: Add fields to WordPress programatically. Author: Alley -Version: 1.2.5 +Version: 1.2.5-beta2 Author URI: https://www.alley.co/ */ /** * Current version of Fieldmanager. */ -define( 'FM_VERSION', '1.2.5' ); +define( 'FM_VERSION', '1.2.5-beta2' ); /** * Filesystem path to Fieldmanager. diff --git a/package.json b/package.json index bfcbfb8be7..d9068f76be 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Fieldmanager", "description": "Fieldmanager is a comprehensive toolkit for building forms, metaboxes, and custom admin screens for WordPress.", - "version": "1.2.4", + "version": "1.2.5-beta2", "repository": { "type": "git", "url": "https://github.com/alleyinteractive/wordpress-fieldmanager" From 7173784bc35ea9381e8604e6d5dfb76b84f7c98e Mon Sep 17 00:00:00 2001 From: kevinfodness Date: Wed, 15 Apr 2020 10:06:58 -0400 Subject: [PATCH 16/16] Move check for wp_script_is 'enqueued' to pre_enqueue_script --- fieldmanager.php | 18 ++++++++---------- php/util/class-fieldmanager-util-assets.php | 5 ++++- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/fieldmanager.php b/fieldmanager.php index a64e917b15..befc0d4d9f 100644 --- a/fieldmanager.php +++ b/fieldmanager.php @@ -161,16 +161,14 @@ function fieldmanager_get_template( $tpl_slug ) { */ function fm_add_script( $handle, $path = false, $deps = array(), $ver = false, $in_footer = false, $data_object = '', $data = array(), $plugin_dir = '', $admin = true ) { // Ensure the Fieldmanager loader has been enqueued. - if ( ! wp_script_is( 'fm_loader', 'enqueued' ) ) { - Fieldmanager_Util_Assets::instance()->add_script( - array( - 'handle' => 'fm_loader', - 'path' => 'js/fieldmanager-loader.js', - 'deps' => array( 'jquery' ), - 'ver' => FM_VERSION, - ) - ); - } + Fieldmanager_Util_Assets::instance()->add_script( + array( + 'handle' => 'fm_loader', + 'path' => 'js/fieldmanager-loader.js', + 'deps' => array( 'jquery' ), + 'ver' => FM_VERSION, + ) + ); // Enqueue the requested script. Fieldmanager_Util_Assets::instance()->add_script( compact( 'handle', 'path', 'deps', 'ver', 'in_footer', 'data_object', 'data', 'plugin_dir' ) ); diff --git a/php/util/class-fieldmanager-util-assets.php b/php/util/class-fieldmanager-util-assets.php index aa13f29429..1612f3a804 100644 --- a/php/util/class-fieldmanager-util-assets.php +++ b/php/util/class-fieldmanager-util-assets.php @@ -93,7 +93,10 @@ public function enqueue_assets() { */ protected function pre_enqueue_script( $args ) { if ( did_action( 'admin_enqueue_scripts' ) || did_action( 'wp_enqueue_scripts' ) ) { - $this->enqueue_script( $args ); + // Ensure the script isn't already enqueued before performing the enqueue action. + if ( ! wp_script_is( $args['handle'], 'enqueued' ) ) { + $this->enqueue_script( $args ); + } } else { $this->scripts[ $args['handle'] ] = $args; $this->hook_enqueue();