diff --git a/display-featured-image-genesis.php b/display-featured-image-genesis.php
index 50b0bf0..c8187b3 100644
--- a/display-featured-image-genesis.php
+++ b/display-featured-image-genesis.php
@@ -45,6 +45,7 @@ function display_featured_image_genesis_require() {
'class-displayfeaturedimagegenesis-rss',
'class-displayfeaturedimagegenesis-settings',
'class-displayfeaturedimagegenesis-taxonomies',
+ 'sixtenpress-shortcodes/sixtenpress-shortcodes',
);
foreach ( $files as $file ) {
diff --git a/includes/class-displayfeaturedimagegenesis-getsetting.php b/includes/class-displayfeaturedimagegenesis-getsetting.php
index 86f5026..3d8058c 100644
--- a/includes/class-displayfeaturedimagegenesis-getsetting.php
+++ b/includes/class-displayfeaturedimagegenesis-getsetting.php
@@ -2,14 +2,14 @@
/**
* Class DisplayFeaturedImageGenesisDoSetting
- * @package Display_Featured_Image_Genesis
+ * @package Display_Featured_Image_Genesis
* @copyright 2016 Robin Cornett
*/
class DisplayFeaturedImageGenesisGetSetting {
/**
* Define the default plugin settings.
- * @return mixed|void
+ * @return array
* @since 2.6.0
*/
public function defaults() {
@@ -30,6 +30,11 @@ class DisplayFeaturedImageGenesisGetSetting {
'centeredX' => 1,
'centeredY' => 1,
'fade' => 750,
+ 'shortcode' => array(
+ 'displayfeaturedimagegenesis_term' => 0,
+ 'displayfeaturedimagegenesis_author' => 0,
+ 'displayfeaturedimagegenesis_post_type' => 0,
+ ),
) );
}
@@ -42,6 +47,7 @@ class DisplayFeaturedImageGenesisGetSetting {
public function get_display_setting() {
$defaults = $this->defaults();
$setting = get_option( 'displayfeaturedimagegenesis', $defaults );
+
return wp_parse_args( $setting, $defaults );
}
diff --git a/includes/class-displayfeaturedimagegenesis-helper.php b/includes/class-displayfeaturedimagegenesis-helper.php
index e93afa7..322aa41 100644
--- a/includes/class-displayfeaturedimagegenesis-helper.php
+++ b/includes/class-displayfeaturedimagegenesis-helper.php
@@ -134,14 +134,12 @@ class Display_Featured_Image_Genesis_Helper extends DisplayFeaturedImageGenesisG
* @param $args
*/
public function do_checkbox_array( $args ) {
- $post_types = $this->get_content_types_built_in();
- foreach ( $post_types as $post_type ) {
- $object = get_post_type_object( $post_type );
+ foreach ( $args['options'] as $key => $value ) {
$type_args = array(
- 'setting' => "{$args['setting']}][{$post_type}",
- 'label' => $object->label,
+ 'setting' => "{$args['setting']}][{$key}",
+ 'label' => $value,
'setting_name' => $args['setting'],
- 'name' => $post_type,
+ 'name' => $key,
);
$this->do_checkbox( $type_args );
}
diff --git a/includes/class-displayfeaturedimagegenesis-settings.php b/includes/class-displayfeaturedimagegenesis-settings.php
index 09c0bd5..3cbb1dc 100644
--- a/includes/class-displayfeaturedimagegenesis-settings.php
+++ b/includes/class-displayfeaturedimagegenesis-settings.php
@@ -23,7 +23,7 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen
/**
* The plugin setting.
- * @var $setting string
+ * @var $setting array
*/
protected $setting;
@@ -107,6 +107,7 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen
$previous_user = get_option( 'displayfeaturedimagegenesis', false );
if ( ! $previous_user ) {
update_option( 'displayfeaturedimagegenesis_updatedterms', true );
+
return;
}
$this->term_option_query = $this->check_term_images();
@@ -140,12 +141,14 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen
/**
* Settings for options screen
- * @return array settings for backstretch image options
*
* @since 1.1.0
*/
public function register_settings() {
- register_setting( 'displayfeaturedimagegenesis', 'displayfeaturedimagegenesis', array( $this, 'do_validation_things' ) );
+ register_setting( 'displayfeaturedimagegenesis', 'displayfeaturedimagegenesis', array(
+ $this,
+ 'do_validation_things',
+ ) );
}
/**
@@ -155,9 +158,18 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen
*/
protected function define_tabs() {
return array(
- 'main' => array( 'id' => 'main', 'tab' => __( 'Main', 'display-featured-image-genesis' ) ),
- 'style' => array( 'id' => 'style', 'tab' => __( 'Backstretch Output', 'display-featured-image-genesis' ) ),
- 'cpt' => array( 'id' => 'cpt', 'tab' => __( 'Content Types', 'display-featured-image-genesis' ) ),
+ 'main' => array(
+ 'id' => 'main',
+ 'tab' => __( 'Main', 'display-featured-image-genesis' ),
+ ),
+ 'style' => array(
+ 'id' => 'style',
+ 'tab' => __( 'Backstretch Output', 'display-featured-image-genesis' ),
+ ),
+ 'cpt' => array(
+ 'id' => 'cpt',
+ 'tab' => __( 'Content Types', 'display-featured-image-genesis' ),
+ ),
);
}
@@ -168,7 +180,7 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen
*/
protected function register_sections() {
return array(
- 'main' => array(
+ 'main' => array(
'id' => 'main',
'title' => __( 'Optional Sitewide Settings', 'display-featured-image-genesis' ),
),
@@ -176,7 +188,7 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen
'id' => 'style',
'title' => __( 'Display Settings', 'display-featured-image-genesis' ),
),
- 'cpt' => array(
+ 'cpt' => array(
'id' => 'cpt',
'title' => __( 'Featured Images for Custom Content Types', 'display-featured-image-genesis' ),
),
@@ -211,49 +223,84 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen
'title' => __( 'Always Use Default', 'display-featured-image-genesis' ),
'callback' => 'do_checkbox',
'section' => 'main',
- 'args' => array( 'setting' => 'always_default', 'label' => __( 'Always use the default image, even if a featured image is set.', 'display-featured-image-genesis' ) ),
+ 'args' => array(
+ 'setting' => 'always_default',
+ 'label' => __( 'Always use the default image, even if a featured image is set.', 'display-featured-image-genesis' ),
+ ),
),
array(
'id' => 'exclude_front',
'title' => __( 'Skip Front Page', 'display-featured-image-genesis' ),
'callback' => 'do_checkbox',
'section' => 'main',
- 'args' => array( 'setting' => 'exclude_front', 'label' => __( 'Do not show the Featured Image on the Front Page of the site.', 'display-featured-image-genesis' ) ),
+ 'args' => array(
+ 'setting' => 'exclude_front',
+ 'label' => __( 'Do not show the Featured Image on the Front Page of the site.', 'display-featured-image-genesis' ),
+ ),
),
array(
'id' => 'keep_titles',
'title' => __( 'Do Not Move Titles', 'display-featured-image-genesis' ),
'callback' => 'do_checkbox',
'section' => 'main',
- 'args' => array( 'setting' => 'keep_titles', 'label' => __( 'Do not move the titles to overlay the backstretch Featured Image.', 'display-featured-image-genesis' ) ),
+ 'args' => array(
+ 'setting' => 'keep_titles',
+ 'label' => __( 'Do not move the titles to overlay the backstretch Featured Image.', 'display-featured-image-genesis' ),
+ ),
),
array(
'id' => 'move_excerpts',
'title' => __( 'Move Excerpts/Archive Descriptions', 'display-featured-image-genesis' ),
'callback' => 'do_checkbox',
'section' => 'main',
- 'args' => array( 'setting' => 'move_excerpts', 'label' => __( 'Move excerpts (if used) on single pages and move archive/taxonomy descriptions to overlay the Featured Image.', 'display-featured-image-genesis' ) ),
+ 'args' => array(
+ 'setting' => 'move_excerpts',
+ 'label' => __( 'Move excerpts (if used) on single pages and move archive/taxonomy descriptions to overlay the Featured Image.', 'display-featured-image-genesis' ),
+ ),
),
array(
'id' => 'is_paged',
'title' => __( 'Show Featured Image on Subsequent Blog Pages', 'display-featured-image-genesis' ),
'callback' => 'do_checkbox',
'section' => 'main',
- 'args' => array( 'setting' => 'is_paged', 'label' => __( 'Show featured image on pages 2+ of blogs and archives.', 'display-featured-image-genesis' ) ),
+ 'args' => array(
+ 'setting' => 'is_paged',
+ 'label' => __( 'Show featured image on pages 2+ of blogs and archives.', 'display-featured-image-genesis' ),
+ ),
),
array(
'id' => 'feed_image',
'title' => __( 'Add Featured Image to Feed?', 'display-featured-image-genesis' ),
'callback' => 'do_checkbox',
'section' => 'main',
- 'args' => array( 'setting' => 'feed_image', 'label' => __( 'Optionally, add the featured image to your RSS feed.', 'display-featured-image-genesis' ) ),
+ 'args' => array(
+ 'setting' => 'feed_image',
+ 'label' => __( 'Optionally, add the featured image to your RSS feed.', 'display-featured-image-genesis' ),
+ ),
),
array(
'id' => 'thumbnails',
'title' => __( 'Archive Thumbnails', 'display-featured-image-genesis' ),
'callback' => 'do_checkbox',
'section' => 'main',
- 'args' => array( 'setting' => 'thumbnails', 'label' => __( 'Use term/post type fallback images for content archives?', 'display-featured-image-genesis' ) ),
+ 'args' => array(
+ 'setting' => 'thumbnails',
+ 'label' => __( 'Use term/post type fallback images for content archives?', 'display-featured-image-genesis' ),
+ ),
+ ),
+ array(
+ 'id' => 'shortcode',
+ 'title' => __( 'Add Shortcode Buttons', 'display-featured-image-genesis' ),
+ 'callback' => 'do_checkbox_array',
+ 'section' => 'main',
+ 'args' => array(
+ 'setting' => 'shortcode',
+ 'options' => array(
+ 'displayfeaturedimagegenesis_term' => __( 'Featured Term Widget', 'display-featured-image-genesis' ),
+ 'displayfeaturedimagegenesis_author' => __( 'Featured Author Widget', 'display-featured-image-genesis' ),
+ 'displayfeaturedimagegenesis_post_type' => __( 'Featured Post Type Widget', 'display-featured-image-genesis' ),
+ ),
+ ),
),
);
}
@@ -266,21 +313,31 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen
return array(
array(
'id' => 'less_header',
- 'title' => __( 'Height' , 'display-featured-image-genesis' ),
+ 'title' => __( 'Height', 'display-featured-image-genesis' ),
'callback' => 'do_number',
'section' => 'style',
- 'args' => array( 'setting' => 'less_header', 'label' => __( 'pixels to remove', 'display-featured-image-genesis' ), 'min' => 0, 'max' => 400 ),
+ 'args' => array(
+ 'setting' => 'less_header',
+ 'label' => __( 'pixels to remove', 'display-featured-image-genesis' ),
+ 'min' => 0,
+ 'max' => 400,
+ ),
),
array(
'id' => 'max_height',
- 'title' => __( 'Maximum Height' , 'display-featured-image-genesis' ),
+ 'title' => __( 'Maximum Height', 'display-featured-image-genesis' ),
'callback' => 'do_number',
'section' => 'style',
- 'args' => array( 'setting' => 'max_height', 'label' => __( 'pixels', 'display-featured-image-genesis' ), 'min' => 100, 'max' => 1000 ),
+ 'args' => array(
+ 'setting' => 'max_height',
+ 'label' => __( 'pixels', 'display-featured-image-genesis' ),
+ 'min' => 100,
+ 'max' => 1000,
+ ),
),
array(
'id' => 'centeredX',
- 'title' => __( 'Center Horizontally' , 'display-featured-image-genesis' ),
+ 'title' => __( 'Center Horizontally', 'display-featured-image-genesis' ),
'callback' => 'do_radio_buttons',
'section' => 'style',
'args' => array(
@@ -291,7 +348,7 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen
),
array(
'id' => 'centeredY',
- 'title' => __( 'Center Vertically' , 'display-featured-image-genesis' ),
+ 'title' => __( 'Center Vertically', 'display-featured-image-genesis' ),
'callback' => 'do_radio_buttons',
'section' => 'style',
'args' => array(
@@ -302,10 +359,15 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen
),
array(
'id' => 'fade',
- 'title' => __( 'Fade' , 'display-featured-image-genesis' ),
+ 'title' => __( 'Fade', 'display-featured-image-genesis' ),
'callback' => 'do_number',
'section' => 'style',
- 'args' => array( 'setting' => 'fade', 'label' => __( 'milliseconds', 'display-featured-image-genesis' ), 'min' => 0, 'max' => 20000 ),
+ 'args' => array(
+ 'setting' => 'fade',
+ 'label' => __( 'milliseconds', 'display-featured-image-genesis' ),
+ 'min' => 0,
+ 'max' => 20000,
+ ),
),
);
}
@@ -335,14 +397,17 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen
'title' => __( 'Skip Content Types', 'display-featured-image-genesis' ),
'callback' => 'do_checkbox_array',
'section' => 'cpt',
- 'args' => array( 'setting' => 'skip' ),
+ 'args' => array(
+ 'setting' => 'skip',
+ 'options' => $this->get_post_types(),
+ ),
),
);
if ( $this->post_types ) {
foreach ( $this->post_types as $post ) {
- $object = get_post_type_object( $post );
+ $object = get_post_type_object( $post );
$fields[] = array(
'id' => 'post_types][' . esc_attr( $object->name ),
'title' => esc_attr( $object->label ),
@@ -352,6 +417,7 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen
);
}
}
+
return $fields;
}
@@ -432,6 +498,7 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen
*/
protected function default_image_description() {
$large = $this->common->minimum_backstretch_width();
+
return sprintf(
esc_html__( 'If you would like to use a default image for the featured image, upload it here. Must be at least %1$s pixels wide.', 'display-featured-image-genesis' ),
absint( $large + 1 )
@@ -489,9 +556,26 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen
);
}
+ /**
+ * Get the post types as options.
+ * @return array
+ */
+ protected function get_post_types() {
+ $post_types = $this->get_content_types_built_in();
+ $options = array();
+ foreach ( $post_types as $post_type ) {
+ $object = get_post_type_object( $post_type );
+ $options[ $post_type ] = $object->label;
+ }
+
+ return $options;
+ }
+
/**
* validate all inputs
+ *
* @param string $new_value various settings
+ *
* @return string number or URL
*
* @since 1.4.0
@@ -519,6 +603,10 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen
$new_value[ $field['id'] ] = $this->check_value( $new_value[ $field['id'] ], $this->setting[ $field['id'] ], $field['args']['min'], $field['args']['max'] );
} elseif ( 'do_radio_buttons' === $field['callback'] ) {
$new_value[ $field['id'] ] = absint( $new_value[ $field['id'] ] );
+ } elseif ( 'do_checkbox_array' === $field['callback'] ) {
+ foreach ( $field['args']['options'] as $option ) {
+ $new_value[ $field['id'] ][ $option ] = $this->one_zero( $new_value[ $field['id'] ][ $option ] );
+ }
}
}
@@ -569,11 +657,13 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen
}
/**
- * Check the numeric value against the allowed range. If it's within the range, return it; otherwise, return the old value.
+ * Check the numeric value against the allowed range. If it's within the range, return it; otherwise, return the
+ * old value.
+ *
* @param $new_value int new submitted value
* @param $old_value int old setting value
- * @param $min int minimum value
- * @param $max int maximum value
+ * @param $min int minimum value
+ * @param $max int maximum value
*
* @return int
*/
@@ -581,6 +671,7 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen
if ( $new_value >= $min && $new_value <= $max ) {
return (int) $new_value;
}
+
return (int) $old_value;
}
@@ -601,21 +692,22 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen
$rows = $this->term_option_query;
if ( ! $rows ) {
update_option( 'displayfeaturedimagegenesis_updatedterms', true );
+
return;
}
- $message = sprintf( '
%s
', __( 'WordPress 4.4 introduces term metadata for categories, tags, and other taxonomies. This is your opportunity to optionally update all impacted terms on your site to use the new metadata.', 'display-featured-image-genesis' ) );
+ $message = sprintf( '
%s
', __( 'WordPress 4.4 introduces term metadata for categories, tags, and other taxonomies. This is your opportunity to optionally update all impacted terms on your site to use the new metadata.', 'display-featured-image-genesis' ) );
$message .= sprintf( '
%s
', __( 'This will modify your database (potentially many entries at once), so if you\'d rather do it yourself, you can. Here\'s a list of the affected terms:', 'display-featured-image-genesis' ) );
$message .= '
', __( 'To get rid of this notice, you can 1) update your terms by hand; 2) click the update button (please check your terms afterward); or 3) click the dismiss button.', 'display-featured-image-genesis' ) );
- $faq = sprintf( __( 'For more information, please visit the plugin\'s Frequently Asked Questions on WordPress.org.', 'display-featured-image-genesis' ), esc_url( 'https://wordpress.org/plugins/display-featured-image-genesis/faq/' ) );
+ $faq = sprintf( __( 'For more information, please visit the plugin\'s Frequently Asked Questions on WordPress.org.', 'display-featured-image-genesis' ), esc_url( 'https://wordpress.org/plugins/display-featured-image-genesis/faq/' ) );
$message .= sprintf( '
%s
', $faq );
echo '
' . wp_kses_post( $message );
echo '';
+ cmb2_metabox_form( $object, 'prefix-build-shortcode', array(
+ 'form_format' => $form,
+ ) );
+}
+
+/**
+ * Define the fields for the modal CMB2 form.
+ * @return array
+ */
+function prefix_custom_shortcode_config() {
+ return array(
+ 'id' => 'prefix_custom_shortcode', // Required for CMB2
+ 'fields' => array(
+ array(
+ 'name' => __( 'Test Text Small', 'prefix-textdomain' ),
+ 'desc' => __( 'field description (optional)', 'prefix-textdomain' ),
+ 'default' => __( 'default shortcode param value', 'prefix-textdomain' ),
+ 'id' => 'shortcode_param',
+ 'type' => 'text_small',
+ ),
+ ),
+ );
+}
+```
+
+Depending on how your form is built, you may need to also enqueue additional scripts and/or styles.
+
+With this example, your shortcode will be output like this:
+
+[prefix_custom_shortcode shortcode_param="text value"]
+
+### Current Notes and Limitations
+
+If your shortcode form that defaults to `true` and should be included as `false` if it is unchecked, make the checkbox a required field. Otherwise, the attribute is assumed to be optional and will be omitted from the final shortcode.
+
+Currently, CMB2 image fields do not play well in the modal form. The preview fails due to a JavaScript error, and since the form creates both an image and an image_id input, both are passed as attributes, when presumably only the ID is desired.
+
+CMB2 WYSIWYG fields fail completely, with no errors. If content is needed using CMB2, a textarea is currently a better choice.
+
+If an image ID is required, Six/Ten Press image fields in a group will work, as in the Leaven Proofing plugin. Images in groups are saved as ID only.
+
+## Credits
+* built by [Robin Cornett](https://robincornett.com)
+
+### Changelog
+
+#### 0.3.2
+* reduced unnecessary CSS
+* tweaked filter for hooks on which to load the modal buttons
+
+#### 0.3.1
+* added: filter to restrict media buttons to certain editors
+
+#### 0.3.0
+* added: reset inputs to default/original parameters
+
+#### 0.2.0
+* change modal show/hide (enables easier implementation of tinyMCE)
+* allow required fields (originally, unchecked checkboxes were not passed to output string)
+* improve checkbox validation
+
+#### 0.1.1
+* fix inline style running multiple times
+
+#### 0.1.0
+* initial release
diff --git a/includes/sixtenpress-shortcodes/includes/class-sixtenpress-shortcodes.php b/includes/sixtenpress-shortcodes/includes/class-sixtenpress-shortcodes.php
new file mode 100644
index 0000000..2da926e
--- /dev/null
+++ b/includes/sixtenpress-shortcodes/includes/class-sixtenpress-shortcodes.php
@@ -0,0 +1,230 @@
+shortcode = $shortcode;
+ $this->shortcode_args = $this->merge( $shortcode_args, $this->defaults() );
+ if ( ! $this->shortcode_args ) {
+ return;
+ }
+ foreach ( $this->hooks() as $hook ) {
+ add_action( $hook, array( $this, 'start_editor' ) );
+ }
+ }
+
+ /**
+ * Select which hooks to call the shortcode buttons on.
+ * load-{post}.php is the earliest.
+ *
+ * @return array
+ */
+ protected function hooks() {
+ return apply_filters( 'sixtenpress_shortcode_hooks', array( 'load-post.php', 'load-post-new.php' ) );
+ }
+
+ /**
+ * Merge any custom args with the defaults.
+ *
+ * @param $custom_args
+ * @param $defaults
+ *
+ * @return array
+ */
+ protected function merge( $custom_args, $defaults ) {
+ foreach ( array( 'button', 'labels' ) as $key ) {
+ if ( array_key_exists( $key, $custom_args ) ) {
+ $custom_args[ $key ] = wp_parse_args( $custom_args[ $key ], $defaults[ $key ] );
+ }
+ }
+ $custom_args['slug'] = ! isset( $custom_args['slug'] ) && isset( $custom_args['modal'] ) ? $custom_args['modal'] : $custom_args['slug'];
+
+ return wp_parse_args( $custom_args, $defaults );
+ }
+
+ /**
+ * Default shortcode args.
+ *
+ * @return array
+ */
+ protected function defaults() {
+ return array(
+ 'modal' => false,
+ 'button' => array(
+ 'id' => $this->prefix,
+ 'class' => $this->prefix,
+ 'dashicon' => false,
+ 'label' => __( 'Add Element', 'sixtenpress-shortcodes' ),
+ ),
+ 'self' => true,
+ 'labels' => array(
+ 'title' => __( 'Create', 'sixtenpress-shortcodes' ),
+ 'close' => __( 'Close', 'sixtenpress-shortcodes' ),
+ 'cancel' => __( 'Cancel', 'sixtenpress-shortcodes' ),
+ 'insert' => __( 'Insert', 'sixtenpress-shortcodes' ),
+ ),
+ 'slug' => $this->prefix,
+ 'group' => array(),
+ );
+ }
+
+ /**
+ * Load all needful functions for the editor.
+ */
+ public function start_editor() {
+ add_filter( 'sixtenpress_shortcode_localization', array( $this, 'localization_args' ) );
+ add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ) );
+ add_action( 'media_buttons', array( $this, 'media_buttons' ), 98 );
+ add_action( 'admin_footer', array( $this, 'widget_builder_modal' ) );
+ add_filter( 'sixtenpress_admin_color_picker', '__return_true' );
+ add_action( 'admin_print_scripts', array( $this, 'localize' ) );
+ }
+
+ /**
+ * Adds a custom button beside the media uploader button.
+ *
+ * @since 1.0.0
+ *
+ * @param string $id The TinyMCE Editor ID
+ */
+ public function media_buttons( $id ) {
+ // Allow devs to override/cancel media button output.
+ $show = apply_filters( 'sixtenpress_shortcode_media_button', true, $this->shortcode, $id );
+ if ( ! $show ) {
+ return;
+ }
+ printf( '',
+ esc_attr( $this->shortcode_args['button']['id'] ),
+ esc_attr( $this->shortcode_args['button']['class'] ),
+ $this->shortcode_args['button']['dashicon'] ? sprintf( ' ', esc_attr( $this->shortcode_args['button']['dashicon'] ) ) : '',
+ esc_html( $this->shortcode_args['button']['label'] ),
+ esc_attr( $id )
+ );
+ }
+
+ /**
+ * Enqueue the scripts and styles needed for the modal.
+ */
+ public function enqueue() {
+ $minify = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
+ wp_enqueue_script( 'sixtenpress-editor-script', plugin_dir_url( __FILE__ ) . "js/shortcode-editor{$minify}.js", array( 'jquery' ), SIXTENPRESSSHORTCODES_VERSION, true );
+
+ add_filter( 'sixtenpress_admin_style', '__return_true' );
+ wp_enqueue_style( 'sixtenpress-editor', plugin_dir_url( __FILE__ ) . 'css/sixtenpress-editor.css', array(), SIXTENPRESSSHORTCODES_VERSION, 'screen' );
+
+ $css = apply_filters( 'sixtenpress_shortcode_inline_css', '' );
+ if ( $css ) {
+ wp_add_inline_style( 'sixtenpress-editor', $this->minify_css( $css ) );
+ }
+ }
+
+ /**
+ * Minify inline CSS a bit before outputting as inline style.
+ *
+ * @param $css
+ *
+ * @return string
+ */
+ protected function minify_css( $css ) {
+ $css = str_replace( "\t", '', $css );
+ $css = str_replace( array( "\n", "\r" ), ' ', $css );
+
+ return sanitize_text_field( strip_tags( $css ) );
+ }
+
+ /**
+ * Get the data for the script.
+ */
+ public function localize() {
+ wp_localize_script( 'sixtenpress-editor-script', 'SixTenShortcodes', apply_filters( 'sixtenpress_shortcode_localization', array() ) );
+ }
+
+ /**
+ * Build the array of args for our script.
+ *
+ * @param $args
+ *
+ * @return array
+ */
+ public function localization_args( $args ) {
+ $new[ $this->shortcode ] = array(
+ 'modal' => $this->shortcode_args['modal'],
+ 'button' => $this->shortcode_args['button']['class'],
+ 'shortcode' => $this->shortcode,
+ 'self' => $this->shortcode_args['self'],
+ 'slug' => $this->shortcode_args['slug'],
+ 'group' => (array) $this->shortcode_args['group'],
+ );
+
+ return array_merge( $args, $new );
+ }
+
+ /**
+ * Outputs the widget builder modal to insert a widget into an editor.
+ *
+ * @since 0.1.0
+ */
+ public function widget_builder_modal() {
+
+ if ( $this->loaded ) {
+ return;
+ }
+
+ $this->loaded = true;
+ include( plugin_dir_path( __FILE__ ) . 'modal.php' );
+ }
+}
diff --git a/includes/sixtenpress-shortcodes/includes/css/sixtenpress-editor.css b/includes/sixtenpress-shortcodes/includes/css/sixtenpress-editor.css
new file mode 100644
index 0000000..2f876b0
--- /dev/null
+++ b/includes/sixtenpress-shortcodes/includes/css/sixtenpress-editor.css
@@ -0,0 +1 @@
+.sixtenpress-default-ui{-webkit-box-sizing:border-box;box-sizing:border-box}.sixtenpress-default-ui input,.sixtenpress-default-ui select,.sixtenpress-default-ui img{max-width:100%!important}.sixtenpress-default-ui .media-modal-content{margin:0 auto;max-width:800px}.sixtenpress-default-ui .media-frame-content{padding:24px}.sixtenpress-default-ui .media-frame-toolbar{left:0}
\ No newline at end of file
diff --git a/includes/sixtenpress-shortcodes/includes/js/shortcode-editor.js b/includes/sixtenpress-shortcodes/includes/js/shortcode-editor.js
new file mode 100644
index 0000000..5acb214
--- /dev/null
+++ b/includes/sixtenpress-shortcodes/includes/js/shortcode-editor.js
@@ -0,0 +1,257 @@
+/*
+ * Copyright (c) 2017 Robin Cornett
+ */
+
+;(function ( document, $, undefined ) {
+ 'use strict';
+
+ var SixTenShortcodesEditor = {};
+
+ /**
+ * Initialize. Cycle through the parameters for each shortcode button.
+ */
+ SixTenShortcodesEditor.init = function () {
+
+ Object.keys( SixTenShortcodesEditor.params ).forEach( function ( key ) {
+ if ( SixTenShortcodesEditor.params.hasOwnProperty( key ) ) {
+ var IndividualObject = SixTenShortcodesEditor.params[key],
+ sixtenpress_trigger_target = false,
+ sixtenpress_editor_frame = false,
+ modal = '.' + IndividualObject.modal,
+ inputs = $( '#' + IndividualObject.modal ).find( ":input" ),
+ defaults = _defaults( inputs );
+
+ $( '.' + IndividualObject.button ).click( _open );
+ $( '.sixtenpress-default-ui .sixtenpress-insert' ).click( _insert );
+ }
+
+ /**
+ * Open the modal.
+ */
+ function _open( e ) {
+ e.preventDefault();
+
+ // Store the trigger target.
+ sixtenpress_trigger_target = e.target;
+ sixtenpress_editor_frame = true;
+ $( modal ).show();
+
+ $( '.media-modal-close, .media-modal-backdrop, .sixtenpress-cancel-insertion' ).click( _hide );
+ $( document ).on( 'keydown', function ( e ) {
+ if ( 27 === e.keyCode && sixtenpress_editor_frame ) {
+ _hide( e );
+ }
+ } );
+ }
+
+ /**
+ * Insert the parsed shortcode into the editor and hide the modal.
+ */
+ function _insert( e ) {
+ e.preventDefault();
+ if ( $( sixtenpress_trigger_target ).hasClass( IndividualObject.button ) ) {
+ var string = _getAttributes( inputs, IndividualObject.group ),
+ multi = IndividualObject.group ? _getMulti( IndividualObject.group, IndividualObject.slug ) : '',
+ output = '';
+ if ( string ) {
+ output = '[' + IndividualObject.shortcode + multi + string + ']';
+ if ( ! IndividualObject.self ) {
+ output += _getContent( IndividualObject.slug, IndividualObject.modal ) + '[/' + IndividualObject.shortcode + ']';
+ }
+ tinymce.get( $( sixtenpress_trigger_target ).attr( 'data-editor' ) ).execCommand( 'mceInsertContent', false, output );
+ }
+ }
+
+ _hide( e );
+ }
+
+ /**
+ * Hide the modal.
+ * @param e
+ * @private
+ */
+ function _hide( e ) {
+ e.preventDefault();
+ $( modal ).hide();
+ _reset();
+ sixtenpress_trigger_target = sixtenpress_editor_frame = false;
+ }
+
+ /**
+ * Attempt to reset all inputs to their default state.
+ * @private
+ */
+ function _reset() {
+ $( inputs ).each( function ( index ) {
+ var id = $( this ).attr( 'id' ),
+ type = this.type;
+ if ( 'checkbox' === type ) {
+ var checked = ( 'checked' === defaults[id] );
+ $( this ).attr( 'checked', checked );
+ } else {
+ $( this ).val( defaults[id] );
+ }
+ } );
+
+ $( modal + ' .upload-file-preview' ).remove();
+
+ _colorPickers();
+ _tinymceClear();
+ }
+
+ /**
+ * Clear and reset color pickers.
+ * @private
+ */
+ function _colorPickers() {
+ var $colorPicker = $( modal ).find( '.wp-picker-container' );
+
+ if ( $colorPicker.length ) {
+ $colorPicker.each( function () {
+ var $pickerParent = $( this ).parent();
+ $pickerParent.html( $pickerParent.find( 'input[type="text"].color-field' ).attr( 'style', '' ) );
+ $pickerParent.find( 'input[type="text"].wp-color-picker' ).each( function () {
+ var $this = $( this ),
+ settings = $this.data( 'colorpicker' ) || {};
+ $this.wpColorPicker( $.extend( {}, false, settings ) );
+ } );
+ } );
+ }
+ }
+
+ /**
+ * Clear any tinymce editors.
+ * @private
+ */
+ function _tinymceClear() {
+ var $id = $( modal ).find( "textarea[id*='" + IndividualObject.slug + "']" );
+
+ if ( $id.length ) {
+ var editor = $id.attr( 'id' );
+ tinymce.get( editor ).setContent( '' );
+ }
+ }
+ } );
+ };
+
+ /**
+ * Get the default values for each input.
+ *
+ * @param inputs
+ * @returns {Array}
+ * @private
+ */
+ function _defaults( inputs ) {
+ var defaults = [];
+ $( inputs ).each( function ( index ) {
+ var id = $( this ).attr( 'id' );
+ if ( undefined !== id ) {
+ defaults[id] = $( this ).val();
+ }
+ if ( $( this ).is( ':checked' ) ) {
+ defaults[id] = 'checked';
+ }
+ } );
+ return defaults;
+ }
+
+ /**
+ * Get the shortcode attributes as a string.
+ *
+ * @param inputs
+ * @param group
+ * @returns {string}
+ * @private
+ */
+ function _getAttributes( inputs, group ) {
+ var output = '';
+ $( inputs ).each( function ( index ) {
+ var original_id = $( this ).attr( 'id' ),
+ value = $( this ).val(),
+ type = this.type;
+ if ( original_id ) {
+ var id = original_id.substr( original_id.lastIndexOf( '-' ) + 1 );
+ if ( id.includes( 'nonce' ) ) {
+ value = '';
+ }
+ if ( 'checkbox' === type ) {
+ if ( group.length && id.includes( group ) ) {
+ value = '';
+ } else if ( $( this ).is( ':checked' ) ) {
+ var truthy = [ 1, '1', 'on' ],
+ inArray = truthy.indexOf( value );
+ value = ( -1 !== inArray ) ? 'true' : value;
+ } else if ( $( this ).is( ':required' ) ) {
+ value = 'false';
+ } else {
+ value = '';
+ }
+ }
+ if ( 'button' === type ) {
+ value = '';
+ }
+ if ( 'textarea' === type ) {
+ value = '';
+ }
+ if ( value || $( this ).is( ':required' ) ) {
+ output += ' ' + id + '="' + value + '"';
+ }
+ }
+ } );
+
+ return output;
+ }
+
+ /**
+ * We assume that a textarea or wysiwg will be content for a
+ * not self-closing shortcode, so values from either of those
+ * will be handled differently and output within the shortcode tags.
+ *
+ * @param slug
+ * @param modal
+ * @private
+ */
+ function _getContent( slug, modal ) {
+ var $id = $( '#' + modal ),
+ content = $id.find( 'textarea' ).val();
+ if ( ! content ) {
+ var editor = $id.find( "textarea[id*='" + slug + "']" ).attr( 'id' );
+ if ( editor !== 'undefined' && editor.length ) {
+ content = tinymce.get( editor ).getContent( {format: 'text'} );
+ }
+ }
+ return content;
+ }
+
+ /**
+ * Convert a multi checkbox array to a comma separated string.
+ * Must be defined in the shortcode button args.
+ *
+ * @param fields
+ * @param slug
+ * @returns {string}
+ * @private
+ */
+ function _getMulti( fields, slug ) {
+ var output = '';
+ $( fields ).each( function ( index, value ) {
+ var id = $( '#' + slug ).find( "[id*='" + value + "']" ),
+ array = [];
+ $( id ).each( function ( index ) {
+ if ( $( this ).is( ':checked' ) ) {
+ array.push( $( this ).val() );
+ }
+ } );
+ output += array.length ? ' ' + value + '="' + array.toString() + '"' : '';
+ } );
+ return output;
+ }
+
+ $( document ).ready( function () {
+ SixTenShortcodesEditor.params = typeof SixTenShortcodes === 'undefined' ? '' : SixTenShortcodes;
+
+ if ( typeof SixTenShortcodesEditor.params !== 'undefined' ) {
+ SixTenShortcodesEditor.init();
+ }
+ } );
+})( document, jQuery );
diff --git a/includes/sixtenpress-shortcodes/includes/js/shortcode-editor.min.js b/includes/sixtenpress-shortcodes/includes/js/shortcode-editor.min.js
new file mode 100644
index 0000000..2ea3b98
--- /dev/null
+++ b/includes/sixtenpress-shortcodes/includes/js/shortcode-editor.min.js
@@ -0,0 +1 @@
+!function(t,e,i){"use strict";function n(t){var n=[];return e(t).each(function(t){var r=e(this).attr("id");i!==r&&(n[r]=e(this).val()),e(this).is(":checked")&&(n[r]="checked")}),n}function r(t,i){var n="";return e(t).each(function(t){var r=e(this).attr("id"),a=e(this).val(),c=this.type;if(r){var o=r.substr(r.lastIndexOf("-")+1);if(o.includes("nonce")&&(a=""),"checkbox"===c)if(i.length&&o.includes(i))a="";else if(e(this).is(":checked")){var s=[1,"1","on"],d=s.indexOf(a);a=-1!==d?"true":a}else a=e(this).is(":required")?"false":"";"button"===c&&(a=""),"textarea"===c&&(a=""),(a||e(this).is(":required"))&&(n+=" "+o+'="'+a+'"')}}),n}function a(t,i){var n=e("#"+i),r=n.find("textarea").val();if(!r){var a=n.find("textarea[id*='"+t+"']").attr("id");"undefined"!==a&&a.length&&(r=tinymce.get(a).getContent({format:"text"}))}return r}function c(t,i){var n="";return e(t).each(function(t,r){var a=e("#"+i).find("[id*='"+r+"']"),c=[];e(a).each(function(t){e(this).is(":checked")&&c.push(e(this).val())}),n+=c.length?" "+r+'="'+c.toString()+'"':""}),n}var o={};o.init=function(){Object.keys(o.params).forEach(function(i){function s(i){i.preventDefault(),v=i.target,m=!0,e(k).show(),e(".media-modal-close, .media-modal-backdrop, .sixtenpress-cancel-insertion").click(u),e(t).on("keydown",function(t){27===t.keyCode&&m&&u(t)})}function d(t){if(t.preventDefault(),e(v).hasClass(p.button)){var i=r(x,p.group),n=p.group?c(p.group,p.slug):"",o="";i&&(o="["+p.shortcode+n+i+"]",p.self||(o+=a(p.slug,p.modal)+"[/"+p.shortcode+"]"),tinymce.get(e(v).attr("data-editor")).execCommand("mceInsertContent",!1,o))}u(t)}function u(t){t.preventDefault(),e(k).hide(),f(),v=m=!1}function f(){e(x).each(function(t){var i=e(this).attr("id");if("checkbox"===this.type){var n="checked"===g[i];e(this).attr("checked",n)}else e(this).val(g[i])}),e(k+" .upload-file-preview").remove(),h(),l()}function h(){var t=e(k).find(".wp-picker-container");t.length&&t.each(function(){var t=e(this).parent();t.html(t.find('input[type="text"].color-field').attr("style","")),t.find('input[type="text"].wp-color-picker').each(function(){var t=e(this),i=t.data("colorpicker")||{};t.wpColorPicker(e.extend({},!1,i))})})}function l(){var t=e(k).find("textarea[id*='"+p.slug+"']");if(t.length){var i=t.attr("id");tinymce.get(i).setContent("")}}if(o.params.hasOwnProperty(i)){var p=o.params[i],v=!1,m=!1,k="."+p.modal,x=e("#"+p.modal).find(":input"),g=n(x);e("."+p.button).click(s),e(".sixtenpress-default-ui .sixtenpress-insert").click(d)}})},e(t).ready(function(){o.params="undefined"==typeof SixTenShortcodes?"":SixTenShortcodes,void 0!==o.params&&o.init()})}(document,jQuery);
\ No newline at end of file
diff --git a/includes/sixtenpress-shortcodes/includes/modal.php b/includes/sixtenpress-shortcodes/includes/modal.php
new file mode 100644
index 0000000..2e19aa8
--- /dev/null
+++ b/includes/sixtenpress-shortcodes/includes/modal.php
@@ -0,0 +1,40 @@
+
diff --git a/includes/sixtenpress-shortcodes/languages/sixtenpress-shortcodes.pot b/includes/sixtenpress-shortcodes/languages/sixtenpress-shortcodes.pot
new file mode 100644
index 0000000..1370beb
--- /dev/null
+++ b/includes/sixtenpress-shortcodes/languages/sixtenpress-shortcodes.pot
@@ -0,0 +1,29 @@
+# Copyright (C) 2017 A drop in class for adding shortcode buttons to the editor.
+# This file is distributed under the same license as the A drop in class for adding shortcode buttons to the editor. package.
+msgid ""
+msgstr ""
+"Project-Id-Version: A drop in class for adding shortcode buttons to the editor.\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: includes/class-sixtenpress-shortcodes.php:111
+msgid "Add Element"
+msgstr ""
+
+#: includes/class-sixtenpress-shortcodes.php:115
+msgid "Create"
+msgstr ""
+
+#: includes/class-sixtenpress-shortcodes.php:116
+msgid "Close"
+msgstr ""
+
+#: includes/class-sixtenpress-shortcodes.php:117
+msgid "Cancel"
+msgstr ""
+
+#: includes/class-sixtenpress-shortcodes.php:118
+msgid "Insert"
+msgstr ""
diff --git a/includes/sixtenpress-shortcodes/sixtenpress-shortcodes.php b/includes/sixtenpress-shortcodes/sixtenpress-shortcodes.php
new file mode 100644
index 0000000..5702af5
--- /dev/null
+++ b/includes/sixtenpress-shortcodes/sixtenpress-shortcodes.php
@@ -0,0 +1,156 @@
+
+ * @copyright 2016 Robin Cornett
+ * @license GPL-2.0+
+ * @version 0.3.2
+ * @link https://gitlab.com/robincornett/sixtenpress-shortcodes
+ * @since 0.1.0
+ */
+
+/**
+ * Copyright (c) 2017 Robin Cornett (email : hello@robincornett.com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2 or, at
+ * your discretion, any later version, as published by the Free
+ * Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/**
+ * Loader versioning: http://jtsternberg.github.io/wp-lib-loader/
+ */
+
+if ( ! class_exists( 'SixTenPressShortcodes_032', false ) ) {
+
+ /**
+ * Versioned loader class-name
+ *
+ * This ensures each version is loaded/checked.
+ *
+ * @category WordPressLibrary
+ * @package SixTenPressShortcodes
+ * @author Robin Cornett
+ * @license GPL-2.0+
+ * @version 0.3.2
+ * @link https://gitlab.com/robincornett/sixtenpress-shortcodes
+ * @since 0.1.0
+ */
+ class SixTenPressShortcodes_032 {
+
+ /**
+ * SixTenPressShortcodes version number
+ * @var string
+ * @since 0.1.0
+ */
+ const VERSION = '0.3.2';
+
+ /**
+ * Current version hook priority.
+ * Will decrement with each release
+ *
+ * @var int
+ * @since 0.1.0
+ */
+ const PRIORITY = 9992;
+
+ /**
+ * Starts the version checking process.
+ * Creates SIXTENPRESSSHORTCODES_LOADED definition for early detection by
+ * other scripts.
+ *
+ * Hooks SixTenPressShortcodes inclusion to the sixtenpressshortcodes_load hook
+ * on a high priority which decrements (increasing the priority) with
+ * each version release.
+ *
+ * @since 0.1.0
+ */
+ public function __construct() {
+ if ( ! defined( 'SIXTENPRESSSHORTCODES_LOADED' ) ) {
+ /**
+ * A constant you can use to check if SixTenPressShortcodes is loaded
+ * for your plugins/themes with SixTenPressShortcodes dependency.
+ *
+ * Can also be used to determine the priority of the hook
+ * in use for the currently loaded version.
+ */
+ define( 'SIXTENPRESSSHORTCODES_LOADED', self::PRIORITY );
+ }
+
+ // Use the hook system to ensure only the newest version is loaded.
+ add_action( 'sixtenpressshortcodes_load', array( $this, 'include_lib' ), self::PRIORITY );
+
+ /*
+ * Hook in to the first hook we have available and
+ * fire our `sixtenpressshortcodes_load' hook.
+ */
+ add_action( 'muplugins_loaded', array( __CLASS__, 'fire_hook' ), 9 );
+ add_action( 'plugins_loaded', array( __CLASS__, 'fire_hook' ), 9 );
+ add_action( 'after_setup_theme', array( __CLASS__, 'fire_hook' ), 9 );
+ }
+
+ /**
+ * Fires the sixtenpressshortcodes_load action hook.
+ *
+ * @since 0.1.0
+ */
+ public static function fire_hook() {
+ if ( ! did_action( 'sixtenpressshortcodes_load' ) ) {
+ // Then fire our hook.
+ do_action( 'sixtenpressshortcodes_load' );
+ }
+ }
+
+ /**
+ * A final check if SixTenPressShortcodes exists before kicking off
+ * our SixTenPressShortcodes loading.
+ *
+ * SIXTENPRESSSHORTCODES_VERSION and SIXTENPRESSSHORTCODES_DIR constants are
+ * set at this point.
+ *
+ * @since 0.1.0
+ */
+ public function include_lib() {
+ if ( class_exists( 'SixTenPressShortcodes', false ) ) {
+ return;
+ }
+
+ if ( ! defined( 'SIXTENPRESSSHORTCODES_VERSION' ) ) {
+ /**
+ * Defines the currently loaded version of SixTenPressShortcodes.
+ */
+ define( 'SIXTENPRESSSHORTCODES_VERSION', self::VERSION );
+ }
+
+ if ( ! defined( 'SIXTENPRESSSHORTCODES_DIR' ) ) {
+ /**
+ * Defines the directory of the currently loaded version of SixTenPressShortcodes.
+ */
+ define( 'SIXTENPRESSSHORTCODES_DIR', dirname( __FILE__ ) . '/' );
+ }
+
+ // Include and initiate SixTenPressShortcodes.
+ require_once SIXTENPRESSSHORTCODES_DIR . 'includes/class-sixtenpress-shortcodes.php';
+ }
+
+ }
+
+ // Kick it off.
+ new SixTenPressShortcodes_032();
+}
diff --git a/includes/widgets/class-displayfeaturedimagegenesis-widgets-shortcodes.php b/includes/widgets/class-displayfeaturedimagegenesis-widgets-shortcodes.php
index f711216..8e5192d 100644
--- a/includes/widgets/class-displayfeaturedimagegenesis-widgets-shortcodes.php
+++ b/includes/widgets/class-displayfeaturedimagegenesis-widgets-shortcodes.php
@@ -6,6 +6,8 @@
class DisplayFeaturedImageGenesisWidgetsShortcodes {
/**
+ * Build the featured author widget shortcode.
+ *
* @param $atts
*
* @return string
@@ -20,6 +22,8 @@ class DisplayFeaturedImageGenesisWidgetsShortcodes {
}
/**
+ * Build the featured post type widget shortcode.
+ *
* @param $atts
*
* @return string
@@ -34,6 +38,8 @@ class DisplayFeaturedImageGenesisWidgetsShortcodes {
}
/**
+ * Build the featured term widget shortcode.
+ *
* @param $atts
*
* @return string
@@ -48,6 +54,68 @@ class DisplayFeaturedImageGenesisWidgetsShortcodes {
}
/**
+ * Add media shortcode buttons to the editor.
+ */
+ public function shortcode_buttons() {
+ $widgets = array(
+ 'displayfeaturedimagegenesis_term' => __( 'Add Featured Term Widget', 'display-featured-image-genesis' ),
+ 'displayfeaturedimagegenesis_author' => __( 'Add Featured Author Widget', 'display-featured-image-genesis' ),
+ 'displayfeaturedimagegenesis_post_type' => __( 'Add Featured Post Type Widget', 'display-featured-image-genesis' ),
+ );
+ $setting = displayfeaturedimagegenesis_get_setting();
+ foreach ( $widgets as $widget => $button_label ) {
+ if ( ! $setting['shortcode'][ $widget ] ) {
+ continue;
+ }
+ sixtenpress_shortcode_register( $widget, array(
+ 'modal' => $widget,
+ 'button' => array(
+ 'id' => "{$widget}-create",
+ 'class' => "{$widget}-create",
+ 'label' => $button_label,
+ ),
+ 'self' => true,
+ 'labels' => array(
+ 'title' => __( 'Create Widget', 'display-featured-image-genesis' ),
+ 'insert' => __( 'Insert Widget', 'display-featured-image-genesis' ),
+ ),
+ ) );
+ }
+ }
+
+ /**
+ * Add the widget forms to the modal.
+ * @param $shortcode
+ */
+ public function do_modal( $shortcode ) {
+ $widgets = array(
+ 'displayfeaturedimagegenesis_term' => 'Display_Featured_Image_Genesis_Widget_Taxonomy',
+ 'displayfeaturedimagegenesis_author' => 'Display_Featured_Image_Genesis_Author_Widget',
+ 'displayfeaturedimagegenesis_post_type' => 'Display_Featured_Image_Genesis_Widget_CPT',
+ );
+ foreach ( $widgets as $shortcode_text => $widget ) {
+ if ( $shortcode_text === $shortcode ) {
+ $class = new $widget();
+ $class->form( array() );
+ }
+ }
+ }
+
+ /**
+ * Modify our modals' CSS.
+ *
+ * @param $css
+ *
+ * @return string
+ */
+ public function inline_css( $css ) {
+ return '.displayfeaturedimagegenesis_term .media-modal-content, .displayfeaturedimagegenesis_post_type .media-modal-content {max-width: 500px;max-height:475px;}
+ .displayfeaturedimagegenesis_author .media-modal-content {max-width: 300px;}';
+ }
+
+ /**
+ * Get the widget defaults.
+ *
* @param $class
*
* @return mixed
@@ -59,6 +127,7 @@ class DisplayFeaturedImageGenesisWidgetsShortcodes {
}
/**
+ * Return the shortcode output.
* @param $atts
* @param $class
*
@@ -76,6 +145,8 @@ class DisplayFeaturedImageGenesisWidgetsShortcodes {
}
/**
+ * Validate the shortcode.
+ *
* @param $atts
* @param $class
*