From d8349db01912bdda468ff6932421473c7f964122 Mon Sep 17 00:00:00 2001
From: Armand Tresova
Date: Tue, 17 Mar 2026 21:28:44 -0400
Subject: [PATCH 1/8] Validated cooked-recipe-card & cooked-category shortcodes
style attribute #97
---
includes/class.cooked-shortcodes.php | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/includes/class.cooked-shortcodes.php b/includes/class.cooked-shortcodes.php
index 83c1ad1..e4b82fc 100644
--- a/includes/class.cooked-shortcodes.php
+++ b/includes/class.cooked-shortcodes.php
@@ -198,7 +198,8 @@ public function cooked_recipe_card_shortcode( $atts, $content = null ) {
$recipe_id = intval( $atts['id'] );
$category_id = intval( $atts['category'] );
$width = Cooked_Functions::sanitize_text_field( $atts['width'] );
- $style = Cooked_Functions::sanitize_text_field( $atts['style'] );
+ $valid_styles = [ 'modern', 'modern-centered' ];
+ $style = in_array( $atts['style'], $valid_styles, true ) ? $atts['style'] : false;
$hide_image = Cooked_Functions::sanitize_text_field( $atts['hide_image'] );
$hide_total = Cooked_Functions::sanitize_text_field( $atts['hide_total'] );
$hide_title = Cooked_Functions::sanitize_text_field( $atts['hide_title'] );
@@ -228,7 +229,8 @@ public function cooked_categories_shortcode( $atts, $content = null ) {
$hide_empty = Cooked_Functions::sanitize_text_field( $atts['hide_empty'] );
$child_of = Cooked_Functions::sanitize_text_field( $atts['child_of'] );
- $style = Cooked_Functions::sanitize_text_field( $atts['style'] );
+ $valid_styles = [ 'block', 'list' ];
+ $style = in_array( $atts['style'], $valid_styles, true ) ? $atts['style'] : 'block';
$parents_only = $child_of ? false : true;
ob_start();
From 4d9f4f8730d80235e9b7af92b25c5d5616600fa7 Mon Sep 17 00:00:00 2001
From: Armand Tresova
Date: Tue, 17 Mar 2026 21:42:17 -0400
Subject: [PATCH 2/8] Fixed Migrations and Imports Don't Handle Ingredient
Substitutions #125
---
includes/class.cooked-delicious-recipes.php | 3 +++
includes/class.cooked-recipe-maker.php | 3 +++
includes/class.cooked-recipes.php | 6 ++++++
3 files changed, 12 insertions(+)
diff --git a/includes/class.cooked-delicious-recipes.php b/includes/class.cooked-delicious-recipes.php
index d6abd51..f18711d 100644
--- a/includes/class.cooked-delicious-recipes.php
+++ b/includes/class.cooked-delicious-recipes.php
@@ -147,6 +147,9 @@ public static function import_recipe($id) {
'name' => (!empty($ingredient['ingredient']) ? $ingredient['ingredient'] : ''),
'url' => '',
'description' => (!empty($ingredient['notes']) ? $ingredient['notes'] : ''),
+ 'sub_amount' => '',
+ 'sub_measurement' => '',
+ 'sub_name' => '',
];
}
}
diff --git a/includes/class.cooked-recipe-maker.php b/includes/class.cooked-recipe-maker.php
index aeca158..d5202dc 100644
--- a/includes/class.cooked-recipe-maker.php
+++ b/includes/class.cooked-recipe-maker.php
@@ -148,6 +148,9 @@ public static function import_recipe($id) {
'name' => (!empty($ingredient['name']) ? $ingredient['name'] : ''),
'url' => '',
'description' => (!empty($ingredient['notes']) ? $ingredient['notes'] : ''),
+ 'sub_amount' => '',
+ 'sub_measurement' => '',
+ 'sub_name' => '',
];
}
}
diff --git a/includes/class.cooked-recipes.php b/includes/class.cooked-recipes.php
index ea8d778..c970606 100644
--- a/includes/class.cooked-recipes.php
+++ b/includes/class.cooked-recipes.php
@@ -1349,6 +1349,9 @@ public static function sync_c2_recipe_settings( $c2_recipe_settings, $recipe_id
$recipe_settings['ingredients'][$rand_id]['amount'] = $ing['amount'];
$recipe_settings['ingredients'][$rand_id]['measurement'] = $ing['measurement'];
$recipe_settings['ingredients'][$rand_id]['name'] = $ing['name'];
+ $recipe_settings['ingredients'][$rand_id]['sub_amount'] = '';
+ $recipe_settings['ingredients'][$rand_id]['sub_measurement'] = '';
+ $recipe_settings['ingredients'][$rand_id]['sub_name'] = '';
elseif ( isset($ing['type']) && $ing['type'] == 'section' ):
$recipe_settings['ingredients'][$rand_id]['section_heading_name'] = $ing['value'];
else:
@@ -1358,6 +1361,9 @@ public static function sync_c2_recipe_settings( $c2_recipe_settings, $recipe_id
$recipe_settings['ingredients'][$rand_id]['amount'] = false;
$recipe_settings['ingredients'][$rand_id]['measurement'] = false;
$recipe_settings['ingredients'][$rand_id]['name'] = $ing;
+ $recipe_settings['ingredients'][$rand_id]['sub_amount'] = '';
+ $recipe_settings['ingredients'][$rand_id]['sub_measurement'] = '';
+ $recipe_settings['ingredients'][$rand_id]['sub_name'] = '';
endif;
endif;
endforeach;
From 01b1ddad68e64145f45e4fc3c5f97fd2d40324b6 Mon Sep 17 00:00:00 2001
From: Armand Tresova
Date: Wed, 18 Mar 2026 14:22:33 -0400
Subject: [PATCH 3/8] Fixed Potential Performance Issues When Updating Recipe
Template in Bulk #123
---
assets/admin/js/cooked-functions.js | 98 ++++++++++++-------------
assets/admin/js/cooked-functions.min.js | 2 +-
includes/class.cooked-ajax.php | 87 +++++++++++++---------
3 files changed, 100 insertions(+), 87 deletions(-)
diff --git a/assets/admin/js/cooked-functions.js b/assets/admin/js/cooked-functions.js
index 638fbe1..00dd580 100644
--- a/assets/admin/js/cooked-functions.js
+++ b/assets/admin/js/cooked-functions.js
@@ -178,32 +178,29 @@ var cookedSortableTouchHandler = function(event) {
if (confirm_save && !thisButton.hasClass('disabled')) {
thisContainer.find('.button, .button-primary').addClass('disabled');
- var ajax__save_default_new = $.post(
+ $.post(
cooked_admin_functions_js_vars.ajax_url,
{
action: 'cooked_save_default',
'default_content': recipe_editor_content,
nonce: cooked_save_default_nonce
},
- function(result) {
- var ajax__save_default_all = $.post(
+ function() {
+ $.post(
cooked_admin_functions_js_vars.ajax_url,
{
- action: 'cooked_get_recipe_ids',
+ action: 'cooked_get_recipe_count',
nonce: cooked_save_default_bulk_nonce
},
- function(json_recipe_ids) {
+ function(response) {
thisButton.removeClass("button-primary").addClass("button");
- if (json_recipe_ids) {
- var recipe_ids = JSON.parse(json_recipe_ids),
- total_recipes = Object.keys(recipe_ids).length;
-
- if (total_recipes > 0) {
- cooked_set_default_template(json_recipe_ids, total_recipes, recipe_editor_content, cooked_save_default_bulk_nonce, instance);
- }
+ if (response && response.success && response.data.total > 0) {
+ cooked_recipe_update_counter = 0;
+ cooked_set_default_template(0, response.data.total, recipe_editor_content, cooked_save_default_bulk_nonce, instance);
}
- }
+ },
+ 'json'
);
}
);
@@ -794,54 +791,55 @@ var cookedSortableTouchHandler = function(event) {
})( jQuery );
var cooked_recipe_update_counter = 0;
+var cooked_bulk_per_page = 20;
-function cooked_set_default_template(recipe_ids, total_recipes, content, nonce, instance) {
- var temp_counter = 0,
- total_counter = 0,
- progress_percent = 0;
-
- if (total_recipes > 0) {
- var progress = jQuery('#cooked-template-progress');
- var progress_bar = progress.find('.cooked-progress-bar');
- var progress_text = jQuery('#cooked-template-progress-text');
-
- if (!progress.hasClass('cooked-active')) {
- progress.addClass('cooked-active');
- progress_text.addClass('cooked-active');
- progress_bar.css({ "width" : "0%" });
- instance.reposition();
- }
+function cooked_set_default_template(page, total_recipes, content, nonce, instance) {
+ if (total_recipes <= 0) {
+ return;
+ }
+
+ var progress = jQuery('#cooked-template-progress');
+ var progress_bar = progress.find('.cooked-progress-bar');
+ var progress_text = jQuery('#cooked-template-progress-text');
- var ajax__bulk_save_default_template = jQuery.post(
- cooked_admin_functions_js_vars.ajax_url,
- {
- action: 'cooked_save_default_bulk',
- recipe_ids: recipe_ids,
- default_content: content,
- nonce: nonce
- },
- function(new_recipe_ids) {
- if (new_recipe_ids && new_recipe_ids != 'false' && new_recipe_ids != false) {
- var leftover_recipe_ids = JSON.parse(new_recipe_ids),
- leftover_recipes = Object.keys(leftover_recipe_ids).length;
-
- cooked_recipe_update_counter = total_recipes - leftover_recipes;
-
- progress_percent = Math.round((cooked_recipe_update_counter / total_recipes ) * 100);
- progress_bar.css({ "width" : progress_percent + "%" });
- progress_text.text(cooked_recipe_update_counter + " / " + total_recipes);
- cooked_set_default_template(new_recipe_ids, total_recipes, content, nonce, instance);
+ if (!progress.hasClass('cooked-active')) {
+ progress.addClass('cooked-active');
+ progress_text.addClass('cooked-active');
+ progress_bar.css({ "width" : "0%" });
+ instance.reposition();
+ }
+
+ jQuery.post(
+ cooked_admin_functions_js_vars.ajax_url,
+ {
+ action: 'cooked_save_default_bulk',
+ page: page,
+ default_content: content,
+ nonce: nonce
+ },
+ function(response) {
+ if (response && response.success) {
+ cooked_recipe_update_counter = Math.min((page + 1) * cooked_bulk_per_page, total_recipes);
+
+ var progress_percent = Math.round((cooked_recipe_update_counter / total_recipes) * 100);
+ progress_bar.css({ "width" : progress_percent + "%" });
+ progress_text.text(cooked_recipe_update_counter + " / " + total_recipes);
+
+ if (response.data.has_more) {
+ cooked_set_default_template(page + 1, total_recipes, content, nonce, instance);
} else {
jQuery('.cooked-save-default-all').text(cooked_admin_functions_js_vars.i18n_applied);
progress_bar.css({ "width" : "100%" });
+ progress_text.text(total_recipes + " / " + total_recipes);
progress.removeClass('cooked-active');
progress_text.removeClass('cooked-active').text("");
instance.reposition();
}
}
- );
- };
+ },
+ 'json'
+ );
}
function cooked_updateTotalTimeValue( prepTime, cookTime ) {
diff --git a/assets/admin/js/cooked-functions.min.js b/assets/admin/js/cooked-functions.min.js
index 2d9cc3e..8981ee5 100644
--- a/assets/admin/js/cooked-functions.min.js
+++ b/assets/admin/js/cooked-functions.min.js
@@ -1 +1 @@
-var $_CookedConditionalTimeout=!1,cookedSortableTouchHandler=function(e){var t={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup"},o=e.target.closest(".cooked-icon-drag");o&&o.closest(".cooked-sortable")&&e.changedTouches&&e.changedTouches.length&&t[e.type]&&(o=e.changedTouches[0],e.preventDefault(),t=new MouseEvent(t[e.type],{bubbles:!0,cancelable:!0,view:window,detail:1,screenX:o.screenX,screenY:o.screenY,clientX:o.clientX,clientY:o.clientY,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null}),o.target.dispatchEvent(t))},cooked_recipe_update_counter=((p=>{p(document).ready(function(){var r,o,t,e,i,n,a,d,c,s=p(".cooked-color-field"),l=p("#cooked_recipe_settings").find("select"),u=p("#cooked-recipe-tabs"),k=(p("#cooked-settings-wrap"),p("#cooked_recipe_settings")),_=k.find("input#submit");$_CookedTooltips=p(".cooked-tooltip"),$_CookedConditionals=p(".cooked-conditional-hidden"),$_CookedSortable=p(".cooked-sortable"),$_CookedRecipeSaveDefault=p(".cooked-layout-save-default"),$_CookedShortcodeField=p(".cooked-shortcode-field"),$_CookedIngredientBuilder=p("#cooked-ingredients-builder"),$_CookedAutoNutritionButton=p(".cooked-auto-nutrition-button"),$_CookedDirectionBuilder=p("#cooked-directions-builder"),$_CookedRecipeGallery=p("#cooked-recipe-image-gallery"),$_CookedNutritionFactsTab=p("#cooked-recipe-tab-content-nutrition"),$_CookedSettingsPanel=p("#cooked-settings-panel"),$_CookedSettingsTabs=p("#cooked-settings-tabs"),s.length&&s.wpColorPicker(),$_CookedSortable.length&&(document.addEventListener("touchstart",cookedSortableTouchHandler,{passive:!1}),document.addEventListener("touchmove",cookedSortableTouchHandler,{passive:!1}),document.addEventListener("touchend",cookedSortableTouchHandler,{passive:!1}),$_CookedSortable.find(".cooked-icon-drag").length?$_CookedSortable.sortable({handle:".cooked-icon-drag",stop:function(e,t){t.item.closest("#cooked-directions-builder").length&&cooked_reset_direction_builder();var t=t.item.find("textarea"),o=!(!cooked_admin_functions_js_vars.wp_editor_roles_allowed||"undefined"==typeof wp||!wp.editor||"function"!=typeof wp.editor.remove||"function"!=typeof wp.editor.initialize);t.length&&o&&(o=t.attr("name"),t=t.attr("id"),wp.editor.remove(t),wp.editor.initialize(t,{tinymce:{wpautop:!1,toolbar1:"bold,italic,underline,blockquote,strikethrough,bullist,numlist,alignleft,aligncenter,alignright,undo,redo,wp_link_advanced,unlink,fullscreen",toolbar2:"",toolbar3:"",toolbar4:"",height:100,textarea_name:o,plugins:"link lists fullscreen wordpress wplink",setup:function(e){}},quicktags:!0,mediaButtons:!1}))}}):$_CookedSortable.sortable({stop:function(e,t){t.item.closest("#cooked-directions-builder").length&&cooked_reset_direction_builder()}})),$_CookedRecipeSaveDefault.length&&($_CookedRecipeSaveDefault.tooltipster({theme:["tooltipster-light","tooltipster-sideTip-cooked"],trigger:"click",animation:"grow",delay:0,speed:200,maxWidth:275,contentAsHTML:!0,interactive:!0,functionReady:function(c,e){p(".cooked-save-default-all").on("click",function(e){e.preventDefault();var o,i=p(this),e=i.data("nonce"),n=i.data("bulk-nonce"),t=i.parent(),a=confirm(cooked_admin_functions_js_vars.i18n_confirm_save_default_all),d=p("#_recipe_settings_content"),r=tinymce.get("_recipe_settings_content");o=null===r?d.val():r.getContent(),a&&!i.hasClass("disabled")&&(t.find(".button, .button-primary").addClass("disabled"),p.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_save_default",default_content:o,nonce:e},function(e){p.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_get_recipe_ids",nonce:n},function(e){var t;i.removeClass("button-primary").addClass("button"),e&&(t=JSON.parse(e),0<(t=Object.keys(t).length))&&cooked_set_default_template(e,t,o,n,c)})}))}),p(".cooked-save-default-new").on("click",function(e){e.preventDefault();var t=p(this),e=t.data("nonce"),o=t.parent(),i=p("#_recipe_settings_content"),n=tinymce.get("_recipe_settings_content");i=null===n?i.val():n.getContent(),t.hasClass("disabled")||(o.find(".button, .button-primary").addClass("disabled"),p.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_save_default",default_content:i,nonce:e},function(e){t.text(cooked_admin_functions_js_vars.i18n_saved),o.find(".button-primary").removeClass("disabled")}).fail(function(e){}))})}}),p(".cooked-layout-load-default").on("click",function(e){e.preventDefault();var e=p(this),t=e.parent(),o=confirm(cooked_admin_functions_js_vars.i18n_confirm_load_default),i=p("#_recipe_settings_content"),n=tinymce.get("_recipe_settings_content");o&&!e.hasClass("disabled")&&(t.find(".button, .button-primary").addClass("disabled"),p.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_load_default"},function(e){null===n?i.val(e):(i.val(e),n.setContent(e)),t.find(".button, .button-primary").removeClass("disabled")}).fail(function(e){t.find(".button, .button-primary").removeClass("disabled")}))})),l.length&&l.each(function(){p(this).wrap('')}),$_CookedTooltips.length&&$_CookedTooltips.tooltipster({theme:["tooltipster-light","tooltipster-sideTip-cooked"],animation:"grow",delay:100,speed:200,maxWidth:275,contentAsHTML:!0,interactive:!0}),$_CookedShortcodeField.length&&$_CookedShortcodeField.on("click",function(e){p(this).select()}),$_CookedConditionals.length&&(r=[],$_CookedConditionals.each(function(){var e=p(this),t=p(this).data("condition"),o=p(this).data("value"),i=p("#"+t),o=!!o&&o.split(" "),n=e.is("li")||e.is("span")?"inline-block":"block";i.is(":checkbox")&&i.is(":checked")||i.is(":radio")&&i.is(":checked")||!(i.is(":checkbox")&&!i.is(":checked")||i.is(":radio")&&!i.is(":checked"))&&(!i.is(":checkbox")&&!o&&i.val()||!i.is(":checkbox")&&o&&-1 a").attr("href")).split("#"))[1],p(".cooked-settings-tab-content").hide(),p("#cooked-settings-tab-content-"+n).show(),l.on("click",function(e){p(".tab-content").hide();var t=p(this).find("a"),t=($_CookedSettingsTabs.find("li").removeClass("active"),p(this).addClass("active"),t.attr("href"));"migration"==(t=(t=t.split("#"))[1])?_.hide():_.show(),p(".cooked-settings-tab-content").hide(),p("#cooked-settings-tab-content-"+t).show(),p("#cooked-settings-panel").hasClass("stuck")?window.scrollTo(0,130):window.scrollTo(0,0)})),$_CookedIngredientBuilder.length&&(cooked_reset_ingredient_builder(),$_CookedIngredientBuilder.on("keydown",'input[data-ingredient-part="name"]',function(e){9!==e.keyCode&&13!==e.keyCode||p(this).parents(".cooked-ingredient-block").is(":last-child")&&(e.preventDefault(),p("#cooked-recipe-tab-content-ingredients").find(".cooked-add-ingredient-button").trigger("click"),$_CookedIngredientBuilder.find('.cooked-ingredient-block:last-child input[data-ingredient-part="amount"]').focus())}),$_CookedIngredientBuilder.parent().on("click",".cooked-show-substitution",function(e){e.preventDefault();e=p(this).parent();e.hasClass("cooked-expanded")?e.removeClass("cooked-expanded"):(e.addClass("cooked-expanded"),e.find('input[data-ingredient-part="sub_amount"]').focus())}),$_CookedIngredientBuilder.on("keyup change",'input[data-ingredient-part="sub_amount"], input[data-ingredient-part="sub_name"], select[data-ingredient-part="sub_measurement"]',function(e){var t=p(this).parents(".recipe-setting-block"),o=t.find('input[data-ingredient-part="sub_name"]').val();o&&o.trim()?t.addClass("cooked-has-substitution"):t.removeClass("cooked-has-substitution")}),$_CookedAutoNutritionButton.length&&$_CookedIngredientBuilder.on("change",'input[data-ingredient-part="name"]',function(e){var t=!1;$_CookedIngredientBuilder.find('input[data-ingredient-part="name"]').each(function(){if(""!=p(this).val())return!(t=!0)}),t?$_CookedAutoNutritionButton.prop("disabled",!1):$_CookedAutoNutritionButton.prop("disabled",!0)}),$_CookedIngredientBuilder.on("keyup",'input[data-ingredient-part="url"]',function(e){var t=p(this).val(),o=p(this).parents(".recipe-setting-block");t?o.addClass("cooked-has-url"):o.removeClass("cooked-has-url")}),$_CookedIngredientBuilder.parent().on("click",".cooked-add-ingredient-button",function(e){e.preventDefault();e=$_CookedIngredientBuilder.parent().find(".cooked-ingredient-template").clone().removeClass("cooked-template cooked-ingredient-template").addClass("cooked-ingredient-block");$_CookedIngredientBuilder.append(e),cooked_reset_ingredient_builder()}),$_CookedIngredientBuilder.parent().on("click",".cooked-add-heading-button",function(e){e.preventDefault();e=$_CookedIngredientBuilder.parent().find(".cooked-heading-template").clone().removeClass("cooked-template cooked-heading-template").addClass("cooked-ingredient-block cooked-ingredient-heading");$_CookedIngredientBuilder.append(e),cooked_reset_ingredient_builder()}),$_CookedIngredientBuilder.parent().on("click",".cooked-delete-ingredient",function(e){e.preventDefault(),p(this).parent().remove(),cooked_reset_ingredient_builder()})),$_CookedDirectionBuilder.length&&(cooked_reset_direction_builder(),$_CookedDirectionBuilder.parent().on("click",".cooked-show-heading-element",function(e){e.preventDefault();e=p(this).parent();e.hasClass("cooked-expanded")?e.removeClass("cooked-expanded"):(e.addClass("cooked-expanded"),e.find('input[data-direction-part="section_heading_element"]').focus())}),$_CookedDirectionBuilder.parent().on("click",".cooked-add-direction-button",function(e){e.preventDefault();e=$_CookedDirectionBuilder.parent().find(".cooked-direction-template").clone().removeClass("cooked-template cooked-direction-template").addClass("cooked-direction-block");$_CookedDirectionBuilder.append(e),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".cooked-add-heading-button",function(e){e.preventDefault();e=$_CookedDirectionBuilder.parent().find(".cooked-heading-template").clone().removeClass("cooked-template cooked-heading-template").addClass("cooked-direction-block cooked-direction-heading");$_CookedDirectionBuilder.append(e),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".cooked-delete-direction",function(e){e.preventDefault();var t,e=p(this).parent();cooked_admin_functions_js_vars.wp_editor_roles_allowed&&"undefined"!=typeof wp&&wp.editor&&"function"==typeof wp.editor.remove&&(t=e.find('textarea[data-direction-part="content"]').attr("id"))&&wp.editor.remove(t),e.remove(),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".remove-image-button",function(e){e.preventDefault();e=p(this).parent();e.removeClass("cooked-has-image"),e.find("img").attr("src","").removeAttr("srcset").removeAttr("sizes"),e.find('input[data-direction-part="image"]').val(""),cooked_reset_direction_builder()}),p("body").on("click",".cooked-direction-img-placeholder, .cooked-direction-img",function(e){e.preventDefault(),p(this).parent().find(".direction-image-button").trigger("click")}),p("body").on("click",".direction-image-button",function(e){var t=p(this);d=t.data("id"),e.preventDefault(),a||(a=wp.media.frames.direction_image_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_image_title,button:{text:cooked_admin_functions_js_vars.i18n_image_button},library:{type:"image"}})).on("select",function(){var e=a.state().get("selection").first().toJSON();p("#direction-"+d+"-image-src").attr("src",e.sizes.thumbnail.url).removeAttr("srcset").removeAttr("sizes").parent().addClass("cooked-has-image"),p('input[name="_recipe_settings[directions]['+d+'][image]"]').val(e.id),p('.direction-image-button[data-id="'+d+'"]').prop("value",cooked_admin_functions_js_vars.i18n_image_change)}),a.open()})),$_CookedRecipeGallery.length&&(cooked_init_gallery_sorting(),p("body").on("click",".cooked-gallery-add-button",function(e){p(this);e.preventDefault(),c||(c=wp.media.frames.gallery_images_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_gallery_image_title,button:{text:cooked_admin_functions_js_vars.i18n_gallery_image_title},library:{type:"image"},multiple:!0})).on("select",function(){var e,t,o,i=c.state().get("selection").toJSON();for(e in i)i.hasOwnProperty(e)&&(o=(t=i[e]).sizes.thumbnail.url,p("#cooked-recipe-image-gallery").append('
'+t.title+' '));cooked_init_gallery_sorting()}),c.open()}),p("body").on("click",".cooked-recipe-gallery-item img",function(e){e.preventDefault(),p(this).parent().find(".cooked-gallery-edit-button").trigger("click")}),p("body").on("click",".cooked-gallery-edit-button",function(e){var n=p(this),t=n.data("attachment-id"),a=(e.preventDefault(),wp.media.frames.gallery_images_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_edit_image_title,button:{text:cooked_admin_functions_js_vars.i18n_edit_image_button},library:{type:"image"},multiple:!1}));a.on("open",function(){var e=a.state().get("selection");(attachment=wp.media.attachment(t)).fetch(),e.add(attachment?[attachment]:[])}),a.open(),a.on("select",function(){var e,t,o,i=a.state().get("selection").toJSON();for(e in i)i.hasOwnProperty(e)&&(o=(t=i[e]).sizes.thumbnail.url,n.parent().replaceWith('
'+t.title+' '));cooked_init_gallery_sorting()})}),$_CookedRecipeGallery.on("click",".remove-image-button",function(e){var t=p(this);d=t.data("id"),e.preventDefault(),d?(p("#direction-"+d+"-image-src").parent().removeClass("cooked-has-image").prop("src",!1),p('input[name="_recipe_settings[directions]['+d+'][image]"]').val(""),p('.direction-image-button[data-id="'+d+'"]').prop("value",cooked_admin_functions_js_vars.i18n_image_title)):t.parent().remove()})),$_CookedNutritionFactsTab.length&&(init_nutrition_facts($_CookedNutritionFactsTab),$_CookedNutritionFactsTab.on("keyup","input",function(e){init_nutrition_facts($_CookedNutritionFactsTab)})),p("#cooked-prep-time").length&&p("#cooked-prep-time,#cooked-cook-time").on("change",function(){cooked_updateTotalTimeValue(parseInt(p("#cooked-prep-time").val()),parseInt(p("#cooked-cook-time").val()))})})})(jQuery),0);function cooked_set_default_template(e,o,i,n,a){var d,r,c,s;0{p(document).ready(function(){var c,o,t,e,i,n,a,d,r,s=p(".cooked-color-field"),l=p("#cooked_recipe_settings").find("select"),u=p("#cooked-recipe-tabs"),_=(p("#cooked-settings-wrap"),p("#cooked_recipe_settings")),k=_.find("input#submit");$_CookedTooltips=p(".cooked-tooltip"),$_CookedConditionals=p(".cooked-conditional-hidden"),$_CookedSortable=p(".cooked-sortable"),$_CookedRecipeSaveDefault=p(".cooked-layout-save-default"),$_CookedShortcodeField=p(".cooked-shortcode-field"),$_CookedIngredientBuilder=p("#cooked-ingredients-builder"),$_CookedAutoNutritionButton=p(".cooked-auto-nutrition-button"),$_CookedDirectionBuilder=p("#cooked-directions-builder"),$_CookedRecipeGallery=p("#cooked-recipe-image-gallery"),$_CookedNutritionFactsTab=p("#cooked-recipe-tab-content-nutrition"),$_CookedSettingsPanel=p("#cooked-settings-panel"),$_CookedSettingsTabs=p("#cooked-settings-tabs"),s.length&&s.wpColorPicker(),$_CookedSortable.length&&(document.addEventListener("touchstart",cookedSortableTouchHandler,{passive:!1}),document.addEventListener("touchmove",cookedSortableTouchHandler,{passive:!1}),document.addEventListener("touchend",cookedSortableTouchHandler,{passive:!1}),$_CookedSortable.find(".cooked-icon-drag").length?$_CookedSortable.sortable({handle:".cooked-icon-drag",stop:function(e,t){t.item.closest("#cooked-directions-builder").length&&cooked_reset_direction_builder();var t=t.item.find("textarea"),o=!(!cooked_admin_functions_js_vars.wp_editor_roles_allowed||"undefined"==typeof wp||!wp.editor||"function"!=typeof wp.editor.remove||"function"!=typeof wp.editor.initialize);t.length&&o&&(o=t.attr("name"),t=t.attr("id"),wp.editor.remove(t),wp.editor.initialize(t,{tinymce:{wpautop:!1,toolbar1:"bold,italic,underline,blockquote,strikethrough,bullist,numlist,alignleft,aligncenter,alignright,undo,redo,wp_link_advanced,unlink,fullscreen",toolbar2:"",toolbar3:"",toolbar4:"",height:100,textarea_name:o,plugins:"link lists fullscreen wordpress wplink",setup:function(e){}},quicktags:!0,mediaButtons:!1}))}}):$_CookedSortable.sortable({stop:function(e,t){t.item.closest("#cooked-directions-builder").length&&cooked_reset_direction_builder()}})),$_CookedRecipeSaveDefault.length&&($_CookedRecipeSaveDefault.tooltipster({theme:["tooltipster-light","tooltipster-sideTip-cooked"],trigger:"click",animation:"grow",delay:0,speed:200,maxWidth:275,contentAsHTML:!0,interactive:!0,functionReady:function(r,e){p(".cooked-save-default-all").on("click",function(e){e.preventDefault();var t,o=p(this),e=o.data("nonce"),i=o.data("bulk-nonce"),n=o.parent(),a=confirm(cooked_admin_functions_js_vars.i18n_confirm_save_default_all),d=p("#_recipe_settings_content"),c=tinymce.get("_recipe_settings_content");t=null===c?d.val():c.getContent(),a&&!o.hasClass("disabled")&&(n.find(".button, .button-primary").addClass("disabled"),p.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_save_default",default_content:t,nonce:e},function(){p.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_get_recipe_count",nonce:i},function(e){o.removeClass("button-primary").addClass("button"),e&&e.success&&0')}),$_CookedTooltips.length&&$_CookedTooltips.tooltipster({theme:["tooltipster-light","tooltipster-sideTip-cooked"],animation:"grow",delay:100,speed:200,maxWidth:275,contentAsHTML:!0,interactive:!0}),$_CookedShortcodeField.length&&$_CookedShortcodeField.on("click",function(e){p(this).select()}),$_CookedConditionals.length&&(c=[],$_CookedConditionals.each(function(){var e=p(this),t=p(this).data("condition"),o=p(this).data("value"),i=p("#"+t),o=!!o&&o.split(" "),n=e.is("li")||e.is("span")?"inline-block":"block";i.is(":checkbox")&&i.is(":checked")||i.is(":radio")&&i.is(":checked")||!(i.is(":checkbox")&&!i.is(":checked")||i.is(":radio")&&!i.is(":checked"))&&(!i.is(":checkbox")&&!o&&i.val()||!i.is(":checkbox")&&o&&-1 a").attr("href")).split("#"))[1],p(".cooked-settings-tab-content").hide(),p("#cooked-settings-tab-content-"+n).show(),l.on("click",function(e){p(".tab-content").hide();var t=p(this).find("a"),t=($_CookedSettingsTabs.find("li").removeClass("active"),p(this).addClass("active"),t.attr("href"));"migration"==(t=(t=t.split("#"))[1])?k.hide():k.show(),p(".cooked-settings-tab-content").hide(),p("#cooked-settings-tab-content-"+t).show(),p("#cooked-settings-panel").hasClass("stuck")?window.scrollTo(0,130):window.scrollTo(0,0)})),$_CookedIngredientBuilder.length&&(cooked_reset_ingredient_builder(),$_CookedIngredientBuilder.on("keydown",'input[data-ingredient-part="name"]',function(e){9!==e.keyCode&&13!==e.keyCode||p(this).parents(".cooked-ingredient-block").is(":last-child")&&(e.preventDefault(),p("#cooked-recipe-tab-content-ingredients").find(".cooked-add-ingredient-button").trigger("click"),$_CookedIngredientBuilder.find('.cooked-ingredient-block:last-child input[data-ingredient-part="amount"]').focus())}),$_CookedIngredientBuilder.parent().on("click",".cooked-show-substitution",function(e){e.preventDefault();e=p(this).parent();e.hasClass("cooked-expanded")?e.removeClass("cooked-expanded"):(e.addClass("cooked-expanded"),e.find('input[data-ingredient-part="sub_amount"]').focus())}),$_CookedIngredientBuilder.on("keyup change",'input[data-ingredient-part="sub_amount"], input[data-ingredient-part="sub_name"], select[data-ingredient-part="sub_measurement"]',function(e){var t=p(this).parents(".recipe-setting-block"),o=t.find('input[data-ingredient-part="sub_name"]').val();o&&o.trim()?t.addClass("cooked-has-substitution"):t.removeClass("cooked-has-substitution")}),$_CookedAutoNutritionButton.length&&$_CookedIngredientBuilder.on("change",'input[data-ingredient-part="name"]',function(e){var t=!1;$_CookedIngredientBuilder.find('input[data-ingredient-part="name"]').each(function(){if(""!=p(this).val())return!(t=!0)}),t?$_CookedAutoNutritionButton.prop("disabled",!1):$_CookedAutoNutritionButton.prop("disabled",!0)}),$_CookedIngredientBuilder.on("keyup",'input[data-ingredient-part="url"]',function(e){var t=p(this).val(),o=p(this).parents(".recipe-setting-block");t?o.addClass("cooked-has-url"):o.removeClass("cooked-has-url")}),$_CookedIngredientBuilder.parent().on("click",".cooked-add-ingredient-button",function(e){e.preventDefault();e=$_CookedIngredientBuilder.parent().find(".cooked-ingredient-template").clone().removeClass("cooked-template cooked-ingredient-template").addClass("cooked-ingredient-block");$_CookedIngredientBuilder.append(e),cooked_reset_ingredient_builder()}),$_CookedIngredientBuilder.parent().on("click",".cooked-add-heading-button",function(e){e.preventDefault();e=$_CookedIngredientBuilder.parent().find(".cooked-heading-template").clone().removeClass("cooked-template cooked-heading-template").addClass("cooked-ingredient-block cooked-ingredient-heading");$_CookedIngredientBuilder.append(e),cooked_reset_ingredient_builder()}),$_CookedIngredientBuilder.parent().on("click",".cooked-delete-ingredient",function(e){e.preventDefault(),p(this).parent().remove(),cooked_reset_ingredient_builder()})),$_CookedDirectionBuilder.length&&(cooked_reset_direction_builder(),$_CookedDirectionBuilder.parent().on("click",".cooked-show-heading-element",function(e){e.preventDefault();e=p(this).parent();e.hasClass("cooked-expanded")?e.removeClass("cooked-expanded"):(e.addClass("cooked-expanded"),e.find('input[data-direction-part="section_heading_element"]').focus())}),$_CookedDirectionBuilder.parent().on("click",".cooked-add-direction-button",function(e){e.preventDefault();e=$_CookedDirectionBuilder.parent().find(".cooked-direction-template").clone().removeClass("cooked-template cooked-direction-template").addClass("cooked-direction-block");$_CookedDirectionBuilder.append(e),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".cooked-add-heading-button",function(e){e.preventDefault();e=$_CookedDirectionBuilder.parent().find(".cooked-heading-template").clone().removeClass("cooked-template cooked-heading-template").addClass("cooked-direction-block cooked-direction-heading");$_CookedDirectionBuilder.append(e),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".cooked-delete-direction",function(e){e.preventDefault();var t,e=p(this).parent();cooked_admin_functions_js_vars.wp_editor_roles_allowed&&"undefined"!=typeof wp&&wp.editor&&"function"==typeof wp.editor.remove&&(t=e.find('textarea[data-direction-part="content"]').attr("id"))&&wp.editor.remove(t),e.remove(),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".remove-image-button",function(e){e.preventDefault();e=p(this).parent();e.removeClass("cooked-has-image"),e.find("img").attr("src","").removeAttr("srcset").removeAttr("sizes"),e.find('input[data-direction-part="image"]').val(""),cooked_reset_direction_builder()}),p("body").on("click",".cooked-direction-img-placeholder, .cooked-direction-img",function(e){e.preventDefault(),p(this).parent().find(".direction-image-button").trigger("click")}),p("body").on("click",".direction-image-button",function(e){var t=p(this);d=t.data("id"),e.preventDefault(),a||(a=wp.media.frames.direction_image_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_image_title,button:{text:cooked_admin_functions_js_vars.i18n_image_button},library:{type:"image"}})).on("select",function(){var e=a.state().get("selection").first().toJSON();p("#direction-"+d+"-image-src").attr("src",e.sizes.thumbnail.url).removeAttr("srcset").removeAttr("sizes").parent().addClass("cooked-has-image"),p('input[name="_recipe_settings[directions]['+d+'][image]"]').val(e.id),p('.direction-image-button[data-id="'+d+'"]').prop("value",cooked_admin_functions_js_vars.i18n_image_change)}),a.open()})),$_CookedRecipeGallery.length&&(cooked_init_gallery_sorting(),p("body").on("click",".cooked-gallery-add-button",function(e){p(this);e.preventDefault(),r||(r=wp.media.frames.gallery_images_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_gallery_image_title,button:{text:cooked_admin_functions_js_vars.i18n_gallery_image_title},library:{type:"image"},multiple:!0})).on("select",function(){var e,t,o,i=r.state().get("selection").toJSON();for(e in i)i.hasOwnProperty(e)&&(o=(t=i[e]).sizes.thumbnail.url,p("#cooked-recipe-image-gallery").append('
'+t.title+' '));cooked_init_gallery_sorting()}),r.open()}),p("body").on("click",".cooked-recipe-gallery-item img",function(e){e.preventDefault(),p(this).parent().find(".cooked-gallery-edit-button").trigger("click")}),p("body").on("click",".cooked-gallery-edit-button",function(e){var n=p(this),t=n.data("attachment-id"),a=(e.preventDefault(),wp.media.frames.gallery_images_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_edit_image_title,button:{text:cooked_admin_functions_js_vars.i18n_edit_image_button},library:{type:"image"},multiple:!1}));a.on("open",function(){var e=a.state().get("selection");(attachment=wp.media.attachment(t)).fetch(),e.add(attachment?[attachment]:[])}),a.open(),a.on("select",function(){var e,t,o,i=a.state().get("selection").toJSON();for(e in i)i.hasOwnProperty(e)&&(o=(t=i[e]).sizes.thumbnail.url,n.parent().replaceWith('
'+t.title+' '));cooked_init_gallery_sorting()})}),$_CookedRecipeGallery.on("click",".remove-image-button",function(e){var t=p(this);d=t.data("id"),e.preventDefault(),d?(p("#direction-"+d+"-image-src").parent().removeClass("cooked-has-image").prop("src",!1),p('input[name="_recipe_settings[directions]['+d+'][image]"]').val(""),p('.direction-image-button[data-id="'+d+'"]').prop("value",cooked_admin_functions_js_vars.i18n_image_title)):t.parent().remove()})),$_CookedNutritionFactsTab.length&&(init_nutrition_facts($_CookedNutritionFactsTab),$_CookedNutritionFactsTab.on("keyup","input",function(e){init_nutrition_facts($_CookedNutritionFactsTab)})),p("#cooked-prep-time").length&&p("#cooked-prep-time,#cooked-cook-time").on("change",function(){cooked_updateTotalTimeValue(parseInt(p("#cooked-prep-time").val()),parseInt(p("#cooked-cook-time").val()))})})})(jQuery),0),cooked_bulk_per_page=20;function cooked_set_default_template(o,i,n,a,d){var c,r,s;i<=0||(c=jQuery("#cooked-template-progress"),r=c.find(".cooked-progress-bar"),s=jQuery("#cooked-template-progress-text"),c.hasClass("cooked-active")||(c.addClass("cooked-active"),s.addClass("cooked-active"),r.css({width:"0%"}),d.reposition()),jQuery.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_save_default_bulk",page:o,default_content:n,nonce:a},function(e){var t;e&&e.success&&(cooked_recipe_update_counter=Math.min((o+1)*cooked_bulk_per_page,i),t=Math.round(cooked_recipe_update_counter/i*100),r.css({width:t+"%"}),s.text(cooked_recipe_update_counter+" / "+i),e.data.has_more?cooked_set_default_template(o+1,i,n,a,d):(jQuery(".cooked-save-default-all").text(cooked_admin_functions_js_vars.i18n_applied),r.css({width:"100%"}),s.text(i+" / "+i),c.removeClass("cooked-active"),s.removeClass("cooked-active").text(""),d.reposition()))},"json"))}function cooked_updateTotalTimeValue(e,t){jQuery("#cooked-total-time").val(e+t)}function cooked_init_gallery_sorting(){jQuery("#cooked-recipe-image-gallery").sortable()}function init_nutrition_facts(e){e.find("input").each(function(){var e,t=jQuery(this),o=t.attr("id"),t=t.val(),i=jQuery('.cooked-nut-percent[data-labeltype="'+o+'"]').length;jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').length&&(t?(jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').text(t),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("li").eq(0).show(),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("p").eq(0).show(),i&&(e=(i=jQuery('.cooked-nut-percent[data-labeltype="'+o+'"]')).data("pdv"))&&(thisPercent=Math.ceil(t/e*100),i.text(thisPercent))):(jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').text("___"),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("li").eq(0).hide(),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("p").eq(0).hide()))})}function cooked_reset_ingredient_builder(){var e=jQuery(".cooked-ingredient-block"),t=0,i=0,o=!1;0 'cp_recipe',
+ 'posts_per_page' => 1,
+ 'post_status' => 'any',
+ 'fields' => 'ids',
+ ];
+
+ $query = new WP_Query( $args );
+ wp_send_json_success( [ 'total' => $query->found_posts ] );
+ }
+
public function save_default_bulk() {
- $bulk_amount = 5;
+ $per_page = 20;
if (!wp_verify_nonce($_POST['nonce'], 'cooked_save_default_bulk') || !current_user_can('edit_cooked_default_template')) {
wp_die();
}
- if (isset($_POST['recipe_ids'])) {
- $recipe_ids = json_decode($_POST['recipe_ids'], true);
- if (is_array($recipe_ids) && !empty($recipe_ids)) {
- $_recipe_ids = [];
- foreach ($recipe_ids as $_rid) {
- $safe_id = intval($_rid);
- if ($safe_id) {
- $_recipe_ids[] = $_rid;
- }
- }
- $recipe_ids = $_recipe_ids;
- } else {
- return false;
- }
+ if (!isset($_POST['default_content'])) {
+ wp_send_json_error( [ 'message' => __( 'No default content provided.', 'cooked' ) ] );
+ }
- $leftover_recipe_ids = array_slice($recipe_ids, $bulk_amount);
- $recipe_ids = array_slice($recipe_ids, 0, $bulk_amount);
+ $page = isset($_POST['page']) ? absint($_POST['page']) : 0;
+ $content = wp_kses_post($_POST['default_content']);
- if (empty($recipe_ids)) {
- echo 'false';
- wp_die();
- } else {
- foreach ($recipe_ids as $rid) {
- $recipe_settings = get_post_meta($rid, '_recipe_settings', true);
- if (!empty($recipe_settings)) {
- $recipe_settings['content'] = wp_kses_post($_POST['default_content']);
- update_post_meta($rid, '_recipe_settings', $recipe_settings);
- }
- }
+ $args = [
+ 'post_type' => 'cp_recipe',
+ 'posts_per_page' => $per_page,
+ 'offset' => $page * $per_page,
+ 'post_status' => 'any',
+ 'fields' => 'ids',
+ 'orderby' => 'ID',
+ 'order' => 'ASC',
+ ];
- if (!empty($leftover_recipe_ids)) {
- echo wp_json_encode($leftover_recipe_ids);
- wp_die();
- } else {
- echo 'false';
- wp_die();
- }
+ $query = new WP_Query( $args );
+ $recipe_ids = $query->posts;
+ $updated = 0;
+
+ foreach ($recipe_ids as $rid) {
+ $recipe_settings = get_post_meta($rid, '_recipe_settings', true);
+ if (!empty($recipe_settings)) {
+ $recipe_settings['content'] = $content;
+ update_post_meta($rid, '_recipe_settings', $recipe_settings);
+ $updated++;
}
}
- wp_die();
+ $processed = ( $page * $per_page ) + count( $recipe_ids );
+ $has_more = $processed < $query->found_posts;
+
+ wp_send_json_success( [
+ 'updated' => $updated,
+ 'has_more' => $has_more,
+ ] );
}
public function save_default() {
From 92fc4d1ee2d060418714033ee2ff42ce0a3af835 Mon Sep 17 00:00:00 2001
From: Armand Tresova
Date: Tue, 7 Apr 2026 19:06:04 -0400
Subject: [PATCH 4/8] Fixed bug with Cooked Classic Migration
---
assets/admin/js/cooked-migration.js | 6 +++---
assets/admin/js/cooked-migration.min.js | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/assets/admin/js/cooked-migration.js b/assets/admin/js/cooked-migration.js
index e3c26b4..904a05f 100644
--- a/assets/admin/js/cooked-migration.js
+++ b/assets/admin/js/cooked-migration.js
@@ -17,7 +17,7 @@
e.preventDefault();
var thisButton = $(this),
- confirm_migrate = confirm(cooked_migration_js_vars.i18n_confirm_migrate_recipe);
+ confirm_migrate = confirm(cooked_migration_js_vars.i18n_confirm_migrate_recipes);
if (confirm_migrate && !thisButton.hasClass('disabled')) {
thisButton.addClass('disabled').attr('disabled', true);
@@ -34,7 +34,7 @@
total_recipes = Object.keys(recipe_ids).length;
if (total_recipes > 0) {
- cooked_migrate_recipes(json_recipe_ids, total_recipe);
+ cooked_migrate_recipes(json_recipe_ids, total_recipes);
}
}
}
@@ -401,4 +401,4 @@ function cooked_import_recipes(recipe_ids, total_recipes, import_type) {
}
})
}
-}
\ No newline at end of file
+}
diff --git a/assets/admin/js/cooked-migration.min.js b/assets/admin/js/cooked-migration.min.js
index 26c3f10..24373ef 100644
--- a/assets/admin/js/cooked-migration.min.js
+++ b/assets/admin/js/cooked-migration.min.js
@@ -1 +1 @@
-(d=>{d(document).ready(function(){var e=d("#cooked-migration-button"),o=d("#cooked-import-button"),i=d("#cooked-csv-import-button"),r=(d("#cooked-csv-import-form"),d("#cooked-migration-progress"),d("#cooked-migration-progress-text"),d("#cooked-csv-import-progress")),a=d("#cooked-csv-import-progress-text");e.length&&e.on("click",function(e){e.preventDefault();e=d(this);confirm(cooked_migration_js_vars.i18n_confirm_migrate_recipe)&&!e.hasClass("disabled")&&(e.addClass("disabled").attr("disabled",!0),e.hide(),d.post(cooked_migration_js_vars.ajax_url,{action:"cooked_get_migrate_ids"},function(e){var o;e&&(o=JSON.parse(e),0"+cooked_migration_js_vars.i18n_errors+"
",e.data.errors.forEach(function(e){o+="- "+e+"
"}),o+="
",s.html(o).show()),setTimeout(function(){r.hide(),a.hide(),d("#cooked-csv-import-completed").show(),i.hide(),t.hide()},2e3)):(s.html(""+(e.data.message||cooked_migration_js_vars.i18n_import_failed)+"
").show(),i.removeClass("disabled").attr("disabled",!1),t.attr("disabled",!1),r.removeClass("cooked-active"),a.removeClass("cooked-active"))},"json").fail(function(){s.html(""+cooked_migration_js_vars.i18n_failed_process_csv+"
").show(),i.removeClass("disabled").attr("disabled",!1),t.attr("disabled",!1),r.removeClass("cooked-active"),a.removeClass("cooked-active")})):(s.html(""+(e.data.message||cooked_migration_js_vars.i18n_file_upload_failed)+"
").show(),i.removeClass("disabled").attr("disabled",!1),t.attr("disabled",!1),r.removeClass("cooked-active"),a.removeClass("cooked-active"))},error:function(){s.html(""+cooked_migration_js_vars.i18n_failed_upload_csv+"
").show(),i.removeClass("disabled").attr("disabled",!1),t.attr("disabled",!1),r.removeClass("cooked-active"),a.removeClass("cooked-active")}})):s.html(""+cooked_migration_js_vars.i18n_csv_invalid_file+"
").show():s.html(""+cooked_migration_js_vars.i18n_csv_no_file+"
").show()})})})(jQuery);{function cookedDecimalAdjust(e,o,i){return void 0===i||0==+i?Math[e](o):(i=+i,null===(o=+o)||isNaN(o)||"number"!=typeof i||i%1!=0?NaN:o<0?-cookedDecimalAdjust(e,-o,i):(o=o.toString().split("e"),+((o=(o=Math[e](+(o[0]+"e"+(o[1]?+o[1]-i:-i)))).toString().split("e"))[0]+"e"+(o[1]?+o[1]+i:i))))}}Math.round10||(Math.round10=function(e,o){return cookedDecimalAdjust("round",e,o)});var cooked_recipe_migrate_counter=0,progressIterations=0;function cooked_migrate_recipes(e,r){var a,d,c,o,n=0;0"+t+" "+cooked_migration_js_vars.i18n_hrs+", "+s+" "+cooked_migration_js_vars.i18n_mins+" "+cooked_migration_js_vars.i18n_remaining+""):1<=s?c.html(i+" / "+o+""+s+" "+cooked_migration_js_vars.i18n_mins+" "+cooked_migration_js_vars.i18n_remaining+""):c.text(i+" / "+o)):c.text(i+" / "+o),cooked_migrate_recipes(e,r)):(a.hide(),c.hide(),jQuery(".recipe-setting-block.migrate_button").find("h3").hide(),jQuery(".recipe-setting-block.migrate_button").find("p:nth-child(2)").hide(),jQuery(".recipe-setting-block.migrate_button").find("ul.cooked-admin-ul").hide(),jQuery("#cooked-migration-button").hide(),jQuery("#cooked-migration-completed").addClass("cooked-active"))}))}function cooked_import_recipes(e,r,a){var d,c,n,o,_=0;0"+t+" "+cooked_migration_js_vars.i18n_hrs+", "+s+" "+cooked_migration_js_vars.i18n_mins+" "+cooked_migration_js_vars.i18n_remaining+""):1<=s?n.html(i+" / "+o+""+s+" "+cooked_migration_js_vars.i18n_mins+" "+cooked_migration_js_vars.i18n_remaining+""):n.text(i+" / "+o)):n.text(i+" / "+o),cooked_import_recipes(e,r,a)):(d.hide(),n.hide(),jQuery(".recipe-setting-block.import_button").find("h3").hide(),jQuery(".recipe-setting-block.import_button").find("p:nth-child(2)").hide(),jQuery(".recipe-setting-block.import_button").find(".cooked-import-note").hide(),jQuery(".recipe-setting-block.import_button").find("ul.cooked-admin-ul").hide(),jQuery("#cooked-import-button").hide(),jQuery("#cooked-import-completed").addClass("cooked-active"))}))}
\ No newline at end of file
+(d=>{d(document).ready(function(){var e=d("#cooked-migration-button"),o=d("#cooked-import-button"),i=d("#cooked-csv-import-button"),r=(d("#cooked-csv-import-form"),d("#cooked-migration-progress"),d("#cooked-migration-progress-text"),d("#cooked-csv-import-progress")),a=d("#cooked-csv-import-progress-text");e.length&&e.on("click",function(e){e.preventDefault();e=d(this);confirm(cooked_migration_js_vars.i18n_confirm_migrate_recipes)&&!e.hasClass("disabled")&&(e.addClass("disabled").attr("disabled",!0),e.hide(),d.post(cooked_migration_js_vars.ajax_url,{action:"cooked_get_migrate_ids"},function(e){var o;e&&(o=JSON.parse(e),0<(o=Object.keys(o).length))&&cooked_migrate_recipes(e,o)}))}),o.length&&o.on("click",function(e){e.preventDefault();var i=d(this),t=i.data("import-type");confirm(cooked_migration_js_vars.i18n_confirm_import_recipes)&&!i.hasClass("disabled")&&(i.addClass("disabled").attr("disabled",!0),i.hide(),d.post(cooked_migration_js_vars.ajax_url,{action:"cooked_get_import_ids",import_type:t},function(e){var o;e?(o=JSON.parse(e),0<(o=Object.keys(o).length)&&cooked_import_recipes(e,o,t)):(console.log(cooked_migration_js_vars.i18n_something_wrong),i.addClass("disabled").attr("disabled",!1),i.show())}))}),i.length&&i.on("click",function(e){e.preventDefault();var o,i=d(this),t=d("#cooked-csv-file"),e=t[0].files[0],s=d("#cooked-csv-import-errors");s.hide().empty(),e?"text/csv"===e.type||e.name.endsWith(".csv")?i.hasClass("disabled")||confirm(cooked_migration_js_vars.i18n_confirm_csv_import)&&(i.addClass("disabled").attr("disabled",!0),t.attr("disabled",!0),(o=new FormData).append("action","cooked_upload_csv"),o.append("csv_file",e),r.hasClass("cooked-active")||(r.addClass("cooked-active"),a.addClass("cooked-active"),r.find(".cooked-progress-bar").css({width:"0%"}),a.text(cooked_migration_js_vars.i18n_uploading)),d.ajax({url:cooked_migration_js_vars.ajax_url,type:"POST",data:o,processData:!1,contentType:!1,success:function(e){e.success?(a.text(cooked_migration_js_vars.i18n_processing),r.find(".cooked-progress-bar").css({width:"50%"}),d.post(cooked_migration_js_vars.ajax_url,{action:"cooked_process_csv",transient_key:e.data.transient_key},function(e){var o;e.success?(r.find(".cooked-progress-bar").css({width:"100%"}),a.text(e.data.success+" / "+e.data.total+" "+cooked_migration_js_vars.i18n_recipes_imported),e.data.errors&&0"+cooked_migration_js_vars.i18n_errors+"",e.data.errors.forEach(function(e){o+="- "+e+"
"}),o+="
",s.html(o).show()),setTimeout(function(){r.hide(),a.hide(),d("#cooked-csv-import-completed").show(),i.hide(),t.hide()},2e3)):(s.html(""+(e.data.message||cooked_migration_js_vars.i18n_import_failed)+"
").show(),i.removeClass("disabled").attr("disabled",!1),t.attr("disabled",!1),r.removeClass("cooked-active"),a.removeClass("cooked-active"))},"json").fail(function(){s.html(""+cooked_migration_js_vars.i18n_failed_process_csv+"
").show(),i.removeClass("disabled").attr("disabled",!1),t.attr("disabled",!1),r.removeClass("cooked-active"),a.removeClass("cooked-active")})):(s.html(""+(e.data.message||cooked_migration_js_vars.i18n_file_upload_failed)+"
").show(),i.removeClass("disabled").attr("disabled",!1),t.attr("disabled",!1),r.removeClass("cooked-active"),a.removeClass("cooked-active"))},error:function(){s.html(""+cooked_migration_js_vars.i18n_failed_upload_csv+"
").show(),i.removeClass("disabled").attr("disabled",!1),t.attr("disabled",!1),r.removeClass("cooked-active"),a.removeClass("cooked-active")}})):s.html(""+cooked_migration_js_vars.i18n_csv_invalid_file+"
").show():s.html(""+cooked_migration_js_vars.i18n_csv_no_file+"
").show()})})})(jQuery);{function cookedDecimalAdjust(e,o,i){return void 0===i||0==+i?Math[e](o):(i=+i,null===(o=+o)||isNaN(o)||"number"!=typeof i||i%1!=0?NaN:o<0?-cookedDecimalAdjust(e,-o,i):(o=o.toString().split("e"),+((o=(o=Math[e](+(o[0]+"e"+(o[1]?+o[1]-i:-i)))).toString().split("e"))[0]+"e"+(o[1]?+o[1]+i:i))))}}Math.round10||(Math.round10=function(e,o){return cookedDecimalAdjust("round",e,o)});var cooked_recipe_migrate_counter=0,progressIterations=0;function cooked_migrate_recipes(e,r){var a,d,c,o,n=0;0"+t+" "+cooked_migration_js_vars.i18n_hrs+", "+s+" "+cooked_migration_js_vars.i18n_mins+" "+cooked_migration_js_vars.i18n_remaining+""):1<=s?c.html(i+" / "+o+""+s+" "+cooked_migration_js_vars.i18n_mins+" "+cooked_migration_js_vars.i18n_remaining+""):c.text(i+" / "+o)):c.text(i+" / "+o),cooked_migrate_recipes(e,r)):(a.hide(),c.hide(),jQuery(".recipe-setting-block.migrate_button").find("h3").hide(),jQuery(".recipe-setting-block.migrate_button").find("p:nth-child(2)").hide(),jQuery(".recipe-setting-block.migrate_button").find("ul.cooked-admin-ul").hide(),jQuery("#cooked-migration-button").hide(),jQuery("#cooked-migration-completed").addClass("cooked-active"))}))}function cooked_import_recipes(e,r,a){var d,c,n,o,_=0;0"+t+" "+cooked_migration_js_vars.i18n_hrs+", "+s+" "+cooked_migration_js_vars.i18n_mins+" "+cooked_migration_js_vars.i18n_remaining+""):1<=s?n.html(i+" / "+o+""+s+" "+cooked_migration_js_vars.i18n_mins+" "+cooked_migration_js_vars.i18n_remaining+""):n.text(i+" / "+o)):n.text(i+" / "+o),cooked_import_recipes(e,r,a)):(d.hide(),n.hide(),jQuery(".recipe-setting-block.import_button").find("h3").hide(),jQuery(".recipe-setting-block.import_button").find("p:nth-child(2)").hide(),jQuery(".recipe-setting-block.import_button").find(".cooked-import-note").hide(),jQuery(".recipe-setting-block.import_button").find("ul.cooked-admin-ul").hide(),jQuery("#cooked-import-button").hide(),jQuery("#cooked-import-completed").addClass("cooked-active"))}))}
\ No newline at end of file
From 42991251c99d70cfe8a51f228e30dae9f3d50a5c Mon Sep 17 00:00:00 2001
From: Armand Tresova
Date: Sat, 18 Apr 2026 23:38:07 -0400
Subject: [PATCH 5/8] Add ability to bulk insert ingredients and directions #52
---
.github/dependabot.yml | 11 +-
assets/admin/css/style.css | 212 ++++++++++
assets/admin/css/style.min.css | 2 +-
assets/admin/js/cooked-functions.js | 412 +++++++++++++++++-
assets/admin/js/cooked-functions.min.js | 2 +-
assets/admin/js/cooked-migration.js | 218 +++++-----
composer.json | 2 +-
composer.lock | 2 +-
cooked.php | 4 +-
includes/class.cooked-admin-enqueues.php | 13 +
includes/class.cooked-ajax.php | 115 +++++
includes/class.cooked-recipe-meta.php | 45 ++
languages/cooked.po | 487 ++++++++++++---------
languages/cooked.pot | 515 +++++++++++++----------
package-lock.json | 275 ++++++------
package.json | 2 +-
readme.txt | 14 +-
vendor/composer/installed.php | 8 +-
18 files changed, 1642 insertions(+), 697 deletions(-)
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 9b6de3f..b5670f1 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -6,10 +6,15 @@
version: 2
updates:
- - package-ecosystem: composer
+ - package-ecosystem: "composer"
target-branch: develop
- directory: /
+ directory: "/"
schedule:
- interval: weekly
+ interval: "weekly"
allow:
- dependency-type: production
+ - package-ecosystem: "npm"
+ target-branch: develop
+ directory: "/"
+ schedule:
+ interval: "weekly"
diff --git a/assets/admin/css/style.css b/assets/admin/css/style.css
index fdb546e..e8b0938 100644
--- a/assets/admin/css/style.css
+++ b/assets/admin/css/style.css
@@ -711,3 +711,215 @@ body .button.button-cooked-reset:hover { color:#555; }
box-sizing: border-box;
padding-right: 10px;
}
+
+/* Bulk Add Modal */
+.cooked-bulk-add-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: rgba(0, 0, 0, 0.6);
+ z-index: 100100;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+.cooked-bulk-add-modal {
+ background: #fff;
+ border-radius: 6px;
+ width: 600px;
+ max-width: 90vw;
+ max-height: 80vh;
+ display: flex;
+ flex-direction: column;
+ box-shadow: 0 5px 30px rgba(0, 0, 0, 0.3);
+}
+.cooked-bulk-add-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 16px 20px;
+ border-bottom: 1px solid #ddd;
+}
+.cooked-bulk-add-header h2 {
+ margin: 0;
+ font-size: 18px;
+ line-height: 1.3;
+}
+.cooked-bulk-add-close {
+ font-size: 24px;
+ text-decoration: none;
+ color: #666;
+ line-height: 1;
+ padding: 0 4px;
+}
+.cooked-bulk-add-close:hover { color: #d63638; }
+.cooked-bulk-add-body {
+ padding: 20px;
+ overflow-y: auto;
+ flex: 1;
+}
+.cooked-bulk-add-help {
+ margin-top: 0;
+ color: #666;
+ font-size: 13px;
+}
+#cooked-bulk-add-textarea {
+ width: 100%;
+ min-height: 160px;
+ font-size: 14px;
+ padding: 10px;
+ box-sizing: border-box;
+ resize: vertical;
+}
+.cooked-bulk-add-preview {
+ margin-top: 16px;
+}
+.cooked-bulk-add-preview-label {
+ margin: 0 0 8px;
+ font-size: 13px;
+}
+.cooked-bulk-add-preview-notice-ingredients {
+ display: none;
+ margin: 10px 0 0;
+ font-size: 12px;
+ line-height: 1.45;
+ color: #b45309;
+ font-weight: 700;
+ gap: 6px;
+ align-items: flex-start;
+}
+#cooked-bulk-add-preview[data-bulk-type="ingredients"] .cooked-bulk-add-preview-notice-ingredients {
+ display: flex;
+}
+.cooked-bulk-add-preview-notice-mark {
+ flex-shrink: 0;
+ font-weight: 700;
+ line-height: 1.45;
+ color: #b45309;
+}
+.cooked-bulk-add-preview-notice-text {
+ flex: 1;
+ min-width: 0;
+ font-weight: 700;
+ color: #b45309;
+}
+.cooked-bulk-add-preview-list {
+ max-height: 200px;
+ overflow-y: auto;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ padding: 4px;
+}
+.cooked-bulk-add-preview-row {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ padding: 4px 6px;
+ border-bottom: 1px solid #f0f0f0;
+}
+.cooked-bulk-add-preview-row:last-child { border-bottom: 0; }
+.cooked-bulk-add-heading-toggle {
+ display: flex;
+ align-items: center;
+ gap: 4px;
+ white-space: nowrap;
+ font-size: 12px;
+ color: #666;
+ cursor: pointer;
+ flex-shrink: 0;
+}
+.cooked-bulk-add-heading-toggle input[type="checkbox"] { margin: 0; }
+.cooked-bulk-add-preview-text {
+ flex: 1;
+ border: 1px solid #ddd;
+ border-radius: 3px;
+ padding: 4px 8px;
+ font-size: 13px;
+}
+.cooked-bulk-add-preview-row:not(.cooked-bulk-add-preview-row-ingredient).cooked-bulk-add-is-heading .cooked-bulk-add-preview-text { font-weight: 700; }
+.cooked-bulk-add-preview-row-ingredient .cooked-bulk-add-heading-line-wrap {
+ display: none;
+ flex: 1;
+ align-items: center;
+ gap: 8px;
+ min-width: 0;
+}
+.cooked-bulk-add-preview-row-ingredient.cooked-bulk-add-is-heading .cooked-bulk-add-heading-line-wrap { display: flex; }
+.cooked-bulk-add-preview-row-ingredient.cooked-bulk-add-is-heading .cooked-bulk-add-parsed-amount,
+.cooked-bulk-add-preview-row-ingredient.cooked-bulk-add-is-heading .cooked-bulk-add-parsed-unit,
+.cooked-bulk-add-preview-row-ingredient.cooked-bulk-add-is-heading .cooked-bulk-add-parsed-name { display: none; }
+.cooked-bulk-add-heading-line-label {
+ flex-shrink: 0;
+ font-size: 12px;
+ font-weight: 600;
+ color: #666;
+}
+.cooked-bulk-add-preview-row-ingredient .cooked-bulk-add-heading-line-wrap .cooked-bulk-add-preview-text {
+ flex: 1;
+ min-width: 0;
+ border: 1px solid #ddd;
+ border-radius: 3px;
+ padding: 4px 8px;
+ font-size: 13px;
+ font-weight: 600;
+}
+.cooked-bulk-add-preview-header {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ padding: 4px 6px 6px;
+ border-bottom: 1px solid #ddd;
+ font-size: 11px;
+ font-weight: 600;
+ color: #999;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+}
+.cooked-bulk-add-col-heading { flex-shrink: 0; width: 108px; }
+.cooked-bulk-add-col-amount { width: 72px; flex-shrink: 0; }
+.cooked-bulk-add-col-unit { width: 108px; flex-shrink: 0; }
+.cooked-bulk-add-col-name { flex: 1; }
+.cooked-bulk-add-parsed-amount {
+ width: 72px;
+ flex-shrink: 0;
+ border: 1px solid #ddd;
+ border-radius: 3px;
+ padding: 4px 6px;
+ font-size: 13px;
+ text-align: center;
+}
+.cooked-bulk-add-parsed-unit {
+ width: 108px;
+ flex-shrink: 0;
+ border: 1px solid #ddd;
+ border-radius: 3px;
+ padding: 4px 6px;
+ font-size: 13px;
+}
+.cooked-bulk-add-parsed-name {
+ flex: 1;
+ border: 1px solid #ddd;
+ border-radius: 3px;
+ padding: 4px 6px;
+ font-size: 13px;
+}
+.cooked-bulk-add-footer {
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+ gap: 8px;
+ padding: 14px 20px;
+ border-top: 1px solid #ddd;
+}
+.cooked-bulk-add-footer .button,
+.cooked-bulk-add-footer .button.button-primary {
+ float: none;
+ margin: 0;
+ vertical-align: middle;
+}
+.cooked-bulk-add-spinner {
+ float: none !important;
+ margin: 0 !important;
+}
diff --git a/assets/admin/css/style.min.css b/assets/admin/css/style.min.css
index 55b25f5..39da16c 100644
--- a/assets/admin/css/style.min.css
+++ b/assets/admin/css/style.min.css
@@ -1 +1 @@
-.cooked-clearfix:after{content:"";display:table;clear:both}#post-body-content #postdivrich{display:none}body.post-type-cp_recipe .wp-list-table tfoot th.check-column,body.post-type-cp_recipe .wp-list-table thead th.check-column{padding:15px 0 0 7px}body.post-type-cp_recipe .wp-list-table tfoot td,body.post-type-cp_recipe .wp-list-table tfoot th,body.post-type-cp_recipe .wp-list-table thead td,body.post-type-cp_recipe .wp-list-table thead th{padding:10px 10px}body.post-type-cp_recipe .wp-list-table tfoot th.sortable a,body.post-type-cp_recipe .wp-list-table tfoot th.sorted a,body.post-type-cp_recipe .wp-list-table thead th.sortable a,body.post-type-cp_recipe .wp-list-table thead th.sorted a{padding-left:0;padding-right:0}body.post-type-cp_recipe .wp-list-table tbody th.check-column{padding:15px 0 0 10px}body.post-type-cp_recipe .wp-list-table tbody td,body.post-type-cp_recipe .wp-list-table tbody th{padding:12px 10px}body.post-type-cp_recipe .wp-list-table tbody td.column-title strong{margin-top:6px}body.post-type-cp_recipe .wp-list-table tbody td.column-title strong .row-title{padding-top:10px;font-size:1rem!important}th.column-featured_image{width:50px;text-align:center}td.column-featured_image{width:50px;text-align:center}.cooked-admin-recipes-list-image img{width:49px;height:auto;border-radius:3px;position:relative;top:3px}body.post-type-cp_recipe #titlediv #title{box-shadow:none;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:0 12px;font-weight:400;font-size:19px;letter-spacing:0;height:44px}body.post-type-cp_recipe #titlediv #title-prompt-text{font-size:15px;color:#888;font-weight:400;letter-spacing:0;padding:12px 15px}body.post-type-cp_recipe .mce-fullscreen{z-index:100100!important}#cooked-settings-prewrap{display:flex;justify-content:center}#cooked-settings-wrap{position:relative;border-radius:10px;margin:40px 40px 40px 20px;max-width:1200px;min-width:1000px;background:#fff;box-shadow:0 4px 4px rgba(0,0,0,.05),0 8px 8px rgba(0,0,0,.05),0 32px 32px rgba(0,0,0,.05),0 64px 64px rgba(0,0,0,.05)}#cooked-settings-wrap.is-stuck{position:static!important}#cooked-settings-wrap .cooked-settings-update-button{position:absolute;top:30px;right:30px}#cooked-settings-wrap .cooked-settings-update-button>.button-primary{box-shadow:none;border:none}#cooked-settings-wrap.is-stuck .cooked-settings-update-button{position:fixed;top:40px;right:11px;z-index:100001}#cooked_recipe_settings .hndle,#cooked_recipe_settings button.handlediv{display:none}#cooked_recipe_settings .inside{padding:0;margin:0}#cooked-recipe-tabs{list-style:none;padding:0;margin:0;position:absolute;top:0;left:0;width:100%}#cooked-recipe-tabs li{font-size:.9rem;line-height:3rem;height:3rem;font-weight:500;display:inline-block;padding:0 1.25rem;margin:0;color:#fff}#cooked-recipe-tabs li:hover{cursor:pointer}#cooked-recipe-tabs li.active,#cooked-recipe-tabs li.active:hover{cursor:default}#cooked-recipe-tabs li:last-child{border-right:none!important}#cooked-recipe-tabs li.cooked-loading{opacity:0;background:0 0;color:#fff;position:absolute;top:0;right:0;cursor:default;font-size:14px;width:40px;height:40px;text-align:center;display:block;line-height:40px;padding:0}#cooked-recipe-tabs li.cooked-loading:hover{background:0 0;color:#fff}#cooked_recipe_settings.cooked-loading #cooked-recipe-tabs li.cooked-loading{opacity:1}#cooked_recipe_settings .inside{padding-top:41px}#cooked_recipe_settings.stuck #cooked-recipe-tabs{position:fixed;width:auto;top:32px;left:23px;z-index:100000;margin-left:160px;box-shadow:0 3px 50px rgba(0,0,0,.25)}#cooked_recipe_settings.stuck #cooked-recipe-tabs li.cooked-loading{right:160px}.cooked-recipe-tab-content-wrapper .cooked-recipe-tab-content{display:none}.cooked-recipe-tab-content-wrapper .cooked-recipe-tab-content:first-child{display:block}.cooked-left{float:left;display:inline-block;width:auto}.cooked-right{float:right;display:inline-block;width:auto}#cooked_field--cooked_pro_license_key{font-family:monospace}#cooked_recipe_settings .cooked-bm-5{margin-bottom:5px!important}#cooked_recipe_settings .cooked-bm-10{margin-bottom:10px!important}#cooked_recipe_settings .cooked-tm-10{margin-top:10px!important}#cooked_recipe_settings .cooked-bm-15{margin-bottom:15px!important}#cooked_recipe_settings .cooked-bm-20{margin-bottom:20px!important}#cooked_recipe_settings .cooked-bm-30{margin-bottom:30px!important}#cooked_recipe_settings .cooked-bm-5-up{margin-bottom:-5px!important}#cooked_recipe_settings .cooked-bm-10-up{margin-bottom:-10px!important}#cooked_recipe_settings .cooked-bm-15-up{margin-bottom:-15px!important}#cooked_recipe_settings .cooked-bm-20-up{margin-bottom:-20px!important}#cooked_recipe_settings .cooked-bm-30-up{margin-bottom:-30px!important}#cooked_recipe_settings .cooked-hr{border:none;border-top:2px solid #ddd;margin:10px 0 0 0;padding:15px 0 0 0}#cooked_recipe_settings .cooked-conditional-hidden{display:none}#cooked_recipe_settings .cooked-recipe-tab-content{padding:23px 30px 15px 30px}#cooked_recipe_settings .recipe-setting-block{margin:0 0 20px;width:100%}#cooked_recipe_settings .recipe-setting-block p{font-size:.9rem;line-height:1.5rem;margin:0 0 1rem;padding:0}#cooked_recipe_settings .recipe-setting-block p.cooked-padded{line-height:1.75rem;font-size:.85rem}#cooked_recipe_settings .recipe-setting-block .cooked-conditional-hidden{padding:0}#cooked_recipe_settings textarea{width:100%;height:75px;padding:15px;box-sizing:border-box;position:relative;top:5px}#cooked_recipe_settings .recipe-setting-block>label.cooked-select-label{top:5px}#cooked_recipe_settings select{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-shadow:none;border-radius:3px;padding:0 45px 0 9px;line-height:31px;height:33px;box-sizing:border-box;background:#fff}#cooked_recipe_settings .cooked-select-wrapper{background:#fff;position:relative;width:auto;display:inline-block;border-radius:3px;margin:0 5px 0 0}#cooked_recipe_settings .cooked-select-wrapper select{margin:0;background:0 0;position:relative}#cooked_recipe_settings .cooked-select-wrapper:before{font-family:CookedIcons;display:block;width:15px;height:15px;line-height:14px;color:#000;font-size:14px;content:"\f00b";position:absolute;right:12px;top:11px;color:rgba(0,0,0,.3)}#cooked_recipe_settings .cooked-select-wrapper:hover:before{color:#000}#cooked_recipe_settings .cooked-select-wrapper:hover select{border-color:#ccc}#cooked_recipe_settings .cooked-checkbox-radio-label{position:relative;left:1px}#cooked_recipe_settings .recipe-setting-block input[type=checkbox],#cooked_recipe_settings .recipe-setting-block input[type=radio]{margin-top:0}#cooked_recipe_settings .recipe-setting-block input[type=number]{width:65px}#cooked_recipe_settings .recipe-setting-block input[type=password],#cooked_recipe_settings .recipe-setting-block input[type=text]{width:75%}#cooked_recipe_settings .recipe-setting-block input[type=number],#cooked_recipe_settings .recipe-setting-block input[type=password],#cooked_recipe_settings .recipe-setting-block input[type=text]{margin:0 6px 5px 0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;height:33px;box-shadow:none;position:relative;top:2px;padding:0 10px}#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs .cooked-measurement-column{width:43%;margin-right:3%;display:inline-block}#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs .cooked-select-wrapper,#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs input,#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs label{width:100%;display:block}#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs .cooked-select-wrapper select{width:100%}#cooked_recipe_settings .recipe-setting-block input[type=number],#cooked_recipe_settings .recipe-setting-block input[type=password].cooked-small-textfield,#cooked_recipe_settings .recipe-setting-block input[type=text].cooked-small-textfield{width:150px}#cooked_recipe_settings small{display:block;line-height:1.5;font-size:12px;color:#888;padding:10px 0 0}#cooked_recipe_settings .recipe-setting-block em{color:#aaa}#cooked_recipe_settings .recipe-setting-block,#cooked_recipe_settings .recipe-setting-block .cooked-repositioned{display:block;position:relative;box-sizing:border-box;line-height:1}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned{padding-left:157px}#cooked_recipe_settings .recipe-setting-block h3.cooked-settings-title{width:70%;position:relative;z-index:2;padding:.5rem 0 .5rem;margin:0;font-size:1rem;line-height:1.5rem;font-weight:600}#cooked_recipe_settings .recipe-setting-block strong.cooked-heading{font-size:14px}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned>label{position:absolute;top:1px;left:0;width:147px;cursor:default;font-weight:600}#cooked_recipe_settings .recipe-setting-block .cooked-tooltip-icon{color:#aaa;cursor:help;display:inline-block;margin-left:10px}#cooked_recipe_settings .recipe-setting-block .cooked-tooltip-icon:hover{color:#eee}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned>.cooked-checkbox-radio-label{top:7px}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned>label{top:auto;height:33px;line-height:30px;padding:0;width:130px}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned:first-child label:first-child{padding-top:12px;margin-top:-12px}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned span.cooked-padded{padding:0 0 15px;display:block;line-height:1.9}#cooked_recipe_settings .recipe-setting-block .wp-picker-container .cooked-color-field.wp-color-picker{padding:5px;height:25px;top:0;margin:0;width:74px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #ccc}#cooked_recipe_settings .recipe-setting-block input[type=text].cooked-shortcode-field{font-family:monospace;background:#f5f5f5;font-size:12px}#cooked_recipe_settings .cooked-banner-block{margin:30px -30px -17px;display:block;box-sizing:content-box;padding:10px 30px 15px;background:#f9f9f9;width:100%;border-top:1px solid #e5e5e5}#cooked_recipe_settings .cooked-advanced-options-hr{border:none;border-bottom:1px solid #ddd;height:1px;padding:10px 0 0 0;margin:0 0 20px}#cooked_recipe_settings .recipe-setting-block input.cooked-time-picker{top:0;width:100%;padding-right:70%;margin:0 0 3px}#cooked_recipe_settings .recipe-setting-block .cooked-time-picker-text{position:absolute;bottom:13px;right:40px;color:#888}#cooked_recipe_settings .cooked-alert-block{background:#fffbdc;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;margin:10px 0 15px;padding:10px 22px 2px;border:2px solid #ece8c4}#cooked_recipe_settings .recipe-setting-block.cooked-template{display:none}#cooked_recipe_settings ul.cooked-admin-ul{font-size:.9rem;margin:0 0 1rem 2rem;list-style:disc}#cooked_recipe_settings ul.cooked-admin-ul li{font-size:.9rem;padding:0;margin:0 0 .5rem}#cooked_recipe_settings .cooked-html-block{background:#fff;width:auto;min-width:300px;display:inline-block;padding:.5rem 1.3rem .25rem;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15)}#cooked_recipe_settings .recipe-setting-block .cooked-html-block h3.cooked-settings-title{width:100%;color:#333}#cooked_recipe_settings .recipe-setting-block .cooked-html-block.valid{background:#fff;border:2px solid #0aa780;box-shadow:none;border-radius:5px}#cooked_recipe_settings .recipe-setting-block .cooked-html-block.valid>.cooked-settings-title{color:#0aa780}#cooked_recipe_settings .recipe-setting-block .cooked-html-block.expired{border:2px solid #ca4a20}#cooked-directions-builder .cooked-direction-block.cooked-expanded>.cooked-heading-name,#cooked-directions-builder .cooked-direction-block.cooked-has-heading-element>.cooked-heading-name,#cooked-directions-builder .cooked-direction-block:hover>.cooked-heading-name,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded>.cooked-heading-name,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-heading-element>.cooked-heading-name,#cooked-ingredients-builder .cooked-ingredient-block:hover>.cooked-heading-name{padding-right:32px}#cooked-directions-builder .cooked-direction-block .cooked-show-heading-element,#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-heading-element{opacity:0;cursor:pointer;font-size:14px;position:absolute;top:14px;right:35px}#cooked-directions-builder .cooked-direction-block .cooked-show-heading-element .cooked-icon,#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-heading-element .cooked-icon{color:#888}#cooked-directions-builder .cooked-direction-block.cooked-expanded .cooked-show-heading-element,#cooked-directions-builder .cooked-direction-block.cooked-has-heading-element .cooked-show-heading-element,#cooked-directions-builder .cooked-direction-block:hover .cooked-show-heading-element,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded .cooked-show-heading-element,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-heading-element .cooked-show-heading-element,#cooked-ingredients-builder .cooked-ingredient-block:hover .cooked-show-heading-element{opacity:1}#cooked-directions-builder .cooked-direction-block .cooked-show-heading-element .cooked-icon:hover,#cooked-directions-builder .cooked-direction-block.cooked-expanded .cooked-show-heading-element .cooked-icon,#cooked-directions-builder .cooked-direction-block.cooked-has-heading-element .cooked-show-heading-element .cooked-icon,#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-heading-element .cooked-icon:hover,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded .cooked-show-heading-element .cooked-icon,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-heading-element .cooked-show-heading-element .cooked-icon{color:#0685ba}#cooked-directions-builder .cooked-direction-block>.cooked-heading-element,#cooked-ingredients-builder .cooked-ingredient-block>.cooked-heading-element{display:none;width:65%;float:right;margin-top:4px;padding-right:32px}#cooked-directions-builder .cooked-direction-block>.cooked-heading-element select,#cooked-ingredients-builder .cooked-ingredient-block>.cooked-heading-element select{color:#0685ba;width:100%}#cooked-directions-builder .cooked-direction-block>.cooked-heading-element label,#cooked-ingredients-builder .cooked-ingredient-block>.cooked-heading-element label{font-weight:600}#cooked-directions-builder .cooked-direction-block.cooked-expanded>.cooked-heading-element,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded>.cooked-heading-element{display:block}#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-substitution{opacity:0;cursor:pointer;font-size:14px;position:absolute;top:15px;right:58px}#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-substitution .cooked-icon{color:#888}#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded .cooked-show-substitution,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-substitution .cooked-show-substitution,#cooked-ingredients-builder .cooked-ingredient-block:hover .cooked-show-substitution{opacity:1;right:50px}#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-substitution .cooked-icon:hover,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded .cooked-show-substitution .cooked-icon,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-substitution .cooked-show-substitution .cooked-icon{color:#0685ba}#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded>.cooked-ingredient-name,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-substitution>.cooked-ingredient-name,#cooked-ingredients-builder .cooked-ingredient-block:hover>.cooked-ingredient-name{padding-right:32px}#cooked_recipe_settings .switchery-small,body.post-type-cp_recipe .switchery-small{height:1rem;width:1.75rem;border-radius:1rem;margin-right:.4rem}#cooked_recipe_settings .switchery-small>small,body.post-type-cp_recipe .switchery-small>small{width:1rem;height:1rem;padding:0}.cooked-tooltip-buttons .cooked-icon-spin{margin-top:10px;font-size:15px}.cooked-tooltip-buttons .cooked-saved-default{height:28px;line-height:28px;font-weight:700;font-size:15px;color:#888}.cooked-progress{display:none;position:relative;background:#eee;width:100%;height:6px;padding:0;border-radius:3px;margin:10px 0 0 0}.cooked-progress-text{display:none;font-size:10px;color:#aaa;padding:2px 0 5px}.cooked-progress-text.cooked-active,.cooked-progress.cooked-active{display:block}.cooked-progress .cooked-progress-bar{display:block;position:absolute;background:#0085ba;width:0%;height:6px;top:0;left:0;border-radius:3px}#cooked-import-progress.cooked-progress,#cooked-migration-progress.cooked-progress{background:#ccc;margin:25px 0 0 0;border-radius:6px;height:12px;max-width:600px}#cooked-import-progress.cooked-progress .cooked-progress-bar,#cooked-migration-progress.cooked-progress .cooked-progress-bar{border-radius:6px;height:12px}#cooked-import-progress-text.cooked-progress-text,#cooked-migration-progress-text.cooked-progress-text{font-size:11px;color:#888;max-width:600px}#cooked-import-completed,#cooked-migration-completed{display:none}#cooked-import-completed.cooked-active,#cooked-migration-completed.cooked-active{display:block}#cooked-csv-import-progress.cooked-progress{background:#ccc;margin:25px 0 0 0;border-radius:6px;height:12px;max-width:600px}#cooked-csv-import-progress.cooked-progress .cooked-progress-bar{border-radius:6px;height:12px}#cooked-csv-import-progress-text.cooked-progress-text{font-size:11px;color:#888;max-width:600px}#cooked-csv-import-completed{display:none}#cooked-csv-import-completed.cooked-active{display:block}#cooked-csv-import-form{max-width:100%;box-sizing:border-box}#cooked-csv-import-form input[type=file]{max-width:100%;box-sizing:border-box;width:100%}#cooked-csv-import-errors{max-width:100%;box-sizing:border-box;word-wrap:break-word}#cooked-import-progress.cooked-progress,#cooked-migration-progress.cooked-progress,#cooked-related-progress.cooked-progress{background:#ccc;margin:25px 0 0 0;border-radius:6px;height:12px;max-width:600px}#cooked-import-progress.cooked-progress .cooked-progress-bar,#cooked-migration-progress.cooked-progress .cooked-progress-bar,#cooked-related-progress.cooked-progress .cooked-progress-bar{border-radius:6px;height:12px}#cooked-import-progress-text.cooked-progress-text,#cooked-migration-progress-text.cooked-progress-text,#cooked-related-progress-text.cooked-progress-text{font-size:11px;color:#888;max-width:600px}#cooked-import-completed,#cooked-migration-completed,#cooked-related-completed{display:none}#cooked-import-completed.cooked-active,#cooked-migration-completed.cooked-active,#cooked-related-completed.cooked-active{display:block}.cooked-related-status{margin:0 0 12px 0;padding:8px 12px;font-size:13px;line-height:1.4;border-radius:4px;border-left:3px solid #00a878;background:#f0f9f6;color:#2d4a42;max-width:480px}#cooked-related-last-done.cooked-related-status{border-left-color:#8c9b99;background:#f6f8f7;color:#5c6b69}#cooked_recipe_settings .cooked-layout-save-default{position:relative;top:-2px;z-index:10;margin:0 0 0 15px;padding:0 8px 1px}#cooked_recipe_settings .cooked-layout-load-default{position:relative;top:-2px;z-index:10;margin:0 0 0 10px;padding:0 8px 1px}body .button.button-cooked-reset{color:#999}body .button.button-cooked-reset:hover{color:#555}#cooked_recipe_settings .cooked-ingredient-headers{display:block;padding:5px 25px 0 35px}#cooked_recipe_settings .cooked-ingredient-headers span{font-size:.7rem;font-weight:700;letter-spacing:.03rem;text-transform:uppercase;color:#0085ba;box-sizing:border-box;display:inline-block;float:left}#cooked_recipe_settings .cooked-ingredient-headers span.cooked-ingredient-header-amount{width:15%}#cooked_recipe_settings .cooked-ingredient-headers span.cooked-ingredient-header-measurement{width:20%}#cooked_recipe_settings .cooked-ingredient-headers span.cooked-ingredient-header-item{width:65%}#cooked-ingredients-builder{margin:0 0 20px}#cooked-ingredients-builder .cooked-ingredient-block{display:block;padding:5px 45px 5px 35px}#cooked-ingredients-builder .cooked-ingredient-block:hover{background:#eee}#cooked-ingredients-builder .cooked-ingredient-block input[type=number],#cooked-ingredients-builder .cooked-ingredient-block input[type=text],#cooked-ingredients-builder .cooked-ingredient-block select{margin:0;display:block;top:0}#cooked-ingredients-builder .cooked-ingredient-block>div{display:inline-block;float:left;box-sizing:border-box;padding-right:10px}#cooked-ingredients-builder .cooked-ingredient-block>div input[type=text]{width:100%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-amount{width:15%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-measurement{width:20%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-measurement .cooked-select-wrapper{width:100%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-measurement .cooked-select-wrapper select{width:100%}#cooked-ingredients-builder .cooked-ingredient-block .cooked-substitution-fields>.cooked-ingredient-measurement .cooked-select-wrapper{width:100%}#cooked-ingredients-builder .cooked-ingredient-block .cooked-substitution-fields>.cooked-ingredient-measurement .cooked-select-wrapper select{width:100%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-name{width:65%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-heading-name{width:100%}#cooked-ingredients-builder .cooked-ingredient-block>div small.cooked-input-ex{display:block;padding:5px 0 0 2px}#cooked-ingredients-builder .cooked-ingredient-block{margin:0}#cooked-ingredients-builder .cooked-ingredient-block i.cooked-icon-drag{cursor:move;color:#ccc;font-size:32px;position:absolute;top:5px;left:1px;touch-action:none}#cooked-ingredients-builder .cooked-ingredient-block:hover i.cooked-icon-drag{color:#888}#cooked-ingredients-builder .cooked-ingredient-block.ui-sortable-helper{background:#f5f5f5;box-shadow:0 10px 20px rgba(0,0,0,.15);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}#cooked-ingredients-builder .cooked-ingredient-block.ui-sortable-placeholder{visibility:visible!important;background:#eee;display:block;width:100%;height:43px;border-top:6px solid #fff;border-bottom:6px solid #fff}#cooked-ingredients-builder .cooked-ingredient-block .cooked-delete-ingredient{cursor:pointer;font-size:14px;position:absolute;top:14px;right:11px}#cooked-ingredients-builder .cooked-ingredient-block .cooked-delete-ingredient .cooked-icon{color:#fff}#cooked-ingredients-builder .cooked-ingredient-block:hover .cooked-delete-ingredient .cooked-icon{color:#888}#cooked-ingredients-builder .cooked-ingredient-block .cooked-delete-ingredient .cooked-icon:hover{color:#de2020}#cooked-ingredients-builder .cooked-ingredient-block.cooked-ingredient-heading{margin:10px 0}#cooked-ingredients-builder .cooked-ingredient-block.cooked-ingredient-heading>div input[type=text]{padding:0 7px;font-size:16px;background:#f9f9f9;font-weight:600}#cooked-directions-builder{margin:0 0 20px}#cooked-directions-builder .cooked-direction-block{display:block;padding:15px 25px 15px 35px}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading{padding:5px 25px 5px 35px}#cooked-directions-builder .cooked-direction-block:hover{background:#f5f5f5}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading:hover{background:#eee}#cooked-directions-builder .cooked-direction-block textarea{margin:0;display:block;height:191px;top:0}#cooked-directions-builder .cooked-direction-block>div{display:inline-block;float:left;box-sizing:border-box;padding-right:15px}#cooked-directions-builder .cooked-direction-block>div:last-child{padding:0}#cooked-directions-builder .cooked-direction-block>div input[type=text]{width:100%}#cooked-directions-builder .cooked-direction-block .mce-statusbar{display:none}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image{width:120px;position:absolute;top:15px;left:35px}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image img{cursor:pointer;display:none;border-radius:3px}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .cooked-direction-img-placeholder{box-sizing:border-box;cursor:pointer;border-radius:3px;width:100%;padding-bottom:100%;background:0 0;border:2px dashed #ddd;border-radius:3px;margin-top:15px}#cooked-directions-builder .cooked-direction-block:hover>.cooked-direction-image .cooked-direction-img-placeholder{background:0 0}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .cooked-direction-img-placeholder:hover{background:#ddd;border:2px solid #ddd}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .direction-image-button{width:100%;text-align:center}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .remove-image-button{display:none;position:absolute;top:43px;right:15px}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image.cooked-has-image .remove-image-button{display:inline-block;padding:10px;background:rgba(0,0,0,.25);color:#fff}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image.cooked-has-image .remove-image-button:hover{background:#ff0100}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image.cooked-has-image img{width:100%;height:auto;display:block;margin:15px 0 0}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image.cooked-has-image .cooked-direction-img-placeholder{display:none}#cooked-directions-builder .cooked-direction-block>.cooked-direction-content{width:100%;padding-left:120px}#cooked-directions-builder .cooked-direction-block .cooked-direction-number{opacity:.4;position:absolute;display:inline-block;font-weight:800;top:17px;left:35px;font-size:1.25rem;line-height:1}#cooked-directions-builder .cooked-direction-block.cooked-direction-has-number>.cooked-direction-image{left:65px}#cooked-directions-builder .cooked-direction-block.cooked-direction-has-number>.cooked-direction-content{padding-left:175px}#cooked-directions-builder .cooked-direction-block.cooked-direction-has-number-wide>.cooked-direction-content{padding-left:185px}#cooked-directions-builder .cooked-direction-block>.cooked-heading-name{width:100%}#cooked-directions-builder .cooked-direction-block{margin:0}#cooked-directions-builder .cooked-direction-block i.cooked-icon-drag{cursor:move;color:#ccc;font-size:32px;position:absolute;top:13px;left:1px;touch-action:none}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading i.cooked-icon-drag{top:5px}#cooked-directions-builder .cooked-direction-block:hover i.cooked-icon-drag{color:#888}#cooked-directions-builder .cooked-direction-block.ui-sortable-helper{background:#f5f5f5;box-shadow:0 10px 20px rgba(0,0,0,.15);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}#cooked-directions-builder .cooked-direction-block.ui-sortable-placeholder{visibility:visible!important;background:#eee;display:block;width:100%;height:221px;border-top:6px solid #fff;border-bottom:6px solid #fff}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading.ui-sortable-placeholder{height:43px}#cooked-directions-builder .cooked-direction-block .cooked-delete-direction{cursor:pointer;font-size:14px;position:absolute;right:14px}#cooked-directions-builder .cooked-direction-block .cooked-delete-direction .cooked-icon{color:#fff}#cooked-directions-builder .cooked-direction-block:hover .cooked-delete-direction .cooked-icon{color:#888}#cooked-directions-builder .cooked-direction-block .cooked-delete-direction .cooked-icon:hover{color:#de2020}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading{margin:10px 0}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading>div input[type=text]{padding:0 7px;font-size:16px;background:#f9f9f9;font-weight:600;top:0;margin:0}#cooked-directions-builder .cooked-direction-block .cooked-delete-direction{top:16px}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading .cooked-delete-direction{top:14px}#cooked-recipe-image-gallery{margin:0 -1% 0}#cooked-recipe-image-gallery .cooked-recipe-gallery-item{position:relative;overflow:hidden;cursor:move;box-sizing:border-box;display:inline-block;width:18%;height:auto;padding:0;margin:0 1% 2% 1%}#cooked-recipe-image-gallery .cooked-recipe-gallery-item:hover{opacity:.9}#cooked-recipe-image-gallery .cooked-recipe-gallery-item img{width:100%;height:auto;border-radius:3px;display:block;margin:0;padding:0;border:none}#cooked-recipe-image-gallery .cooked-recipe-gallery-item.ui-sortable-helper,#cooked-recipe-image-gallery .cooked-recipe-gallery-item.ui-sortable-helper:hover{opacity:.75;box-shadow:0 10px 20px rgba(0,0,0,.15)}#cooked-recipe-image-gallery .cooked-recipe-gallery-item.ui-sortable-placeholder{width:18%;height:auto;visibility:visible!important;border-radius:3px;background:#ddd;display:inline-block}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .remove-image-button{border-radius:0 3px 0 0;display:inline-block;position:absolute;top:0;right:0;padding:10px;background:rgba(0,0,0,.25);color:#fff}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .remove-image-button:hover{background:#ff0100}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .cooked-gallery-edit-button{border-radius:3px 0 0 0;display:inline-block;position:absolute;top:0;left:0;padding:10px;background:rgba(0,0,0,.25);color:#fff}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .cooked-gallery-edit-button:hover{background:#0084bc}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .cooked-gallery-item-title{position:absolute;left:0;bottom:0;box-sizing:border-box;width:100%;border-radius:0 0 3px 3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;padding:10px 10px 11px;text-align:center;background:#000;background:rgba(0,0,0,.3);color:#fff;font-size:12px}#cooked-recipe-image-gallery .cooked-recipe-gallery-item:hover .cooked-gallery-item-title{background:#000;background:rgba(0,0,0,.75)}#cooked-recipe-image-gallery .cooked-recipe-gallery-item.ui-sortable-helper{-webkit-animation:cooked-wiggle .4s infinite;-moz-animation:cooked-wiggle .4s infinite;-o-animation:cooked-wiggle .4s infinite;animation:cooked-wiggle .4s infinite}#cooked_recipe_settings label.cooked-nutrition-label{display:block;font-size:.7rem;letter-spacing:.03rem;font-weight:700;text-transform:uppercase;line-height:1;margin:0 0 7px}#cooked_recipe_settings #cooked-nutrition-label{line-height:1.6;font-size:1.1rem;border:1px solid #aaa;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:5%;margin:0 0 2rem;font-family:Helvetica,Arial,sans-serif;container-name:nutrition-label;container-type:inline-size}#cooked_recipe_settings #cooked-nutrition-label h2{font-size:2.5rem;line-height:1;letter-spacing:0;font-weight:800;padding:0 0 .5rem 0;margin:0 0 .4rem;color:#333;border-bottom:1px solid #aaa}#cooked_recipe_settings #cooked-nutrition-label p.cooked-daily-value-text{padding:.5rem 0 0 0;margin:0;font-size:.9rem}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-servings p{font-size:1.5rem}#cooked_recipe_settings #cooked-nutrition-label ul{list-style:none;margin:0;padding:0}#cooked_recipe_settings #cooked-nutrition-label li{position:relative;margin:0;padding:0 0 3px 0;border-top:1px solid #aaa}#cooked_recipe_settings #cooked-nutrition-label li li{padding:3px 0 0;margin:3px 0 0}#cooked_recipe_settings #cooked-nutrition-label li:after{content:"";display:table;clear:both}#cooked_recipe_settings #cooked-nutrition-label li.no-after:after{content:none}#cooked_recipe_settings #cooked-nutrition-label li.cooked-nut-spacer{border:none;height:.6rem;padding:0;background:#333}#cooked_recipe_settings #cooked-nutrition-label ul li.cooked-nut-no-border,#cooked_recipe_settings #cooked-nutrition-label>ul>li:first-child{border:none}#cooked_recipe_settings #cooked-nutrition-label li ul{padding:0;margin:0 0 0 20px}#cooked_recipe_settings #cooked-nutrition-label li ul.cooked-right{margin:0}#cooked_recipe_settings #cooked-nutrition-label li ul.cooked-right li{border:none;padding:0;margin:0}#cooked_recipe_settings #cooked-nutrition-label li.cooked-calories ul.cooked-right li strong.cooked-nut-label{font-size:2.5rem;line-height:1}#cooked_recipe_settings #cooked-nutrition-label .cooked-calories{border-top:none;display:flex;justify-content:space-between;align-items:baseline;padding:0}#cooked_recipe_settings #cooked-nutrition-label .cooked-calories strong,#cooked_recipe_settings #cooked-nutrition-label .cooked-calories strong.cooked-nut-label{font-size:2rem;font-weight:800}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-servings li{border:none}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-servings{margin:0}#cooked_recipe_settings #cooked-nutrition-label .cooked-nut-hr{border:none;border-top:1.3rem solid #333;margin:.1rem 0 0;padding:0}#cooked_recipe_settings #cooked-nutrition-label strong{font-weight:800}#cooked_recipe_settings #cooked-nutrition-label .cooked-serving-size strong,#cooked_recipe_settings #cooked-nutrition-label .cooked-serving-size strong.cooked-nut-label{font-size:1.5rem;font-weight:800}#cooked_recipe_settings #cooked-nutrition-label strong.cooked-nut-heading{font-size:1rem}#cooked_recipe_settings #cooked-nutrition-label strong.cooked-nut-label{font-weight:400}#cooked_recipe_settings #cooked-nutrition-label .cooked-nut-right{float:right}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-bottom{margin:0 0 .75rem}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-bottom li{border-top:none;border-bottom:1px solid #aaa;float:left;width:100%;box-sizing:border-box}#cooked_recipe_settings .cooked-measurement-inputs .cooked-select-wrapper:before{top:8px}.cooked-auto-nutrition{display:flex;justify-content:end;margin:0 0 1rem}#cooked-tooltip-auto-nutrition-notice{margin:0}.cooked-settings-header{border-radius:10px 10px 0 0;width:auto;height:90px;line-height:85px;padding:0 30px;font-weight:600;box-sizing:border-box;background:#33373c;color:#fff;font-size:29px;letter-spacing:-.03rem}.cooked-settings-header .cooked-icon{color:#00e0a9}.cooked-settings-submit-wrap{padding:0 0 35px 35px;margin:-20px 0 0}#cooked_recipe_settings .recipe-setting-block .cooked-permalink-field-wrapper span{font-size:14px;display:inline-block;line-height:32px;padding:5px 0 0 0}#cooked_recipe_settings .recipe-setting-block input[type=text].cooked-permalink-field{position:relative;top:0;display:inline-block;width:150px;margin:0 10px}#cooked-settings-panel{position:relative;margin:0;padding:0}#cooked-settings-tabs{display:flex;width:auto;padding:0 20px 0 0;margin:0;list-style:none}#cooked-settings-tabs li{font-size:13px;line-height:1;font-weight:400;display:block;padding:0;margin:0;color:#fff}#cooked-settings-tabs li .cooked-icon{font-size:14px}#cooked-settings-tabs li .cooked-icon.cooked-icon-recipe-icon{font-size:20px;top:2px;position:relative}#cooked-settings-tabs li:hover{cursor:pointer}#cooked-settings-tabs li.active,#cooked-settings-tabs li.active:hover{cursor:default}#cooked-settings-tabs a{line-height:41px;font-size:.9rem;letter-spacing:.03rem;padding:2px 15px 4px;display:block;outline:0;box-shadow:none;border:none;white-space:nowrap}#cooked-settings-panel.stuck{padding-top:41px}#cooked-settings-panel.stuck #cooked-settings-tabs{position:fixed;width:calc(100% - 180px);top:32px;left:0;z-index:100000;margin-left:160px}#cooked-settings-panel .cooked-settings-tab-content-wrapper .cooked-settings-tab-content{display:none}#cooked-settings-panel .cooked-settings-tab-content-wrapper .cooked-settings-tab-content:first-child{display:block}#cooked-settings-panel .cooked-settings-tab-content{padding:25px 35px;margin-right:0}#cooked-settings-panel #cooked_recipe_settings .recipe-setting-block h3.cooked-settings-title{padding-bottom:.2rem}#cooked_recipe_settings .cooked-setting-column-14{position:relative;width:25%;float:left;padding-right:20px;box-sizing:border-box}#cooked_recipe_settings .cooked-setting-column-13{position:relative;width:33%;float:left;padding-right:20px;box-sizing:border-box}#cooked_recipe_settings .cooked-setting-column-23{position:relative;width:66%;float:left;padding-right:20px;box-sizing:border-box}#cooked_recipe_settings .cooked-setting-column-12{position:relative;width:50%;float:left;padding-right:20px;box-sizing:border-box}#cooked_recipe_settings .cooked-setting-column-12 input[type=text],#cooked_recipe_settings .cooked-setting-column-13 input[type=text],#cooked_recipe_settings .cooked-setting-column-14 input[type=text],#cooked_recipe_settings .cooked-setting-column-23 input[type=text],#cooked_recipe_settings .recipe-setting-block input[type=text].cooked-shortcode-field{width:95%}#cooked_recipe_settings .cooked-setting-column-12 .cooked-select-wrapper,#cooked_recipe_settings .cooked-setting-column-12 select,#cooked_recipe_settings .cooked-setting-column-13 .cooked-select-wrapper,#cooked_recipe_settings .cooked-setting-column-13 select,#cooked_recipe_settings .cooked-setting-column-14 .cooked-select-wrapper,#cooked_recipe_settings .cooked-setting-column-14 select,#cooked_recipe_settings .cooked-setting-column-23 select{width:100%}#cooked_recipe_settings .cooked-setting-column-14.cooked-tb-col{padding:0}#cooked-welcome-screen{padding:15px 50px 0 30px;position:relative}#cooked-welcome-screen .cooked-badge{position:absolute;top:0;right:0}#cooked-welcome-screen .cooked-badge img{border:none;width:150px;height:150px;display:block;margin:0}#cooked-welcome-screen .about-text{margin-bottom:40px;line-height:1.8;font-size:17px;margin-right:260px}#cooked-welcome-screen .about-wrap{margin:25px auto 0;max-width:1000px}#cooked-welcome-screen .about-wrap h1{font-size:2.25rem}#cooked-welcome-screen .about-wrap p{font-size:1rem;margin:0 0 2rem;line-height:1.7rem}#cooked-welcome-screen #cooked-welcome-panel{background:#fff;padding:30px 30px 15px 30px;-moz-border-radius:15px;-webkit-border-radius:15px;border-radius:15px;border:none;box-shadow:0 4px 4px rgba(0,0,0,.05),0 8px 8px rgba(0,0,0,.05),0 32px 32px rgba(0,0,0,.05),0 64px 64px rgba(0,0,0,.05)}#cooked-welcome-screen #cooked-welcome-panel img.cooked-welcome-banner{border:none;display:block;padding:0;margin:0 0 30px;box-sizing:border-box;border-radius:5px 5px 0 0}#cooked-welcome-screen #cooked-welcome-panel .cooked-welcome-panel-intro{text-align:center;margin:0 50px 2rem;padding:15px 0;border-bottom:1px solid #e5e5e5}#cooked-welcome-screen #cooked-welcome-panel .cooked-welcome-panel-intro h1{font-size:1.75rem;margin:0 0 1rem;padding:0}#cooked-welcome-screen #cooked-welcome-panel .cooked-welcome-panel-intro p{max-width:600px;font-size:1.1rem;line-height:1.8rem;margin:0 auto 2rem;padding:0}#cooked-welcome-screen .cooked-welcome-panel a{text-decoration:none}#cooked-welcome-screen .cooked-welcome-panel-column{display:block!important}#cooked-welcome-screen .cooked-welcome-panel-column>strong{font-size:1rem}#cooked-welcome-screen .cooked-welcome-panel-column h3{font-size:1.75rem;margin:0 0 1rem;position:relative}#cooked-welcome-screen .cooked-welcome-panel-column h3 a{position:absolute;top:0;right:0;font-size:12px;font-weight:400}#cooked-welcome-screen .cooked-welcome-panel-column h3 a i.fa{position:relative;top:1px}#cooked-welcome-screen .cooked-welcome-panel-column h4{font-size:1.25rem;margin:0 0 1rem;position:relative}#cooked-welcome-screen .cooked-welcome-panel-column h4 a{position:absolute;top:0;right:0;font-size:12px;font-weight:400}#cooked-welcome-screen .cooked-welcome-panel-column h4 a i.fa{position:relative;top:1px}#cooked-welcome-screen .cooked-welcome-panel-column.cooked-welcome-panel-full{width:100%;padding-right:0;float:none}#cooked-welcome-screen .cooked-welcome-panel-column.cooked-welcome-panel-last{width:70%;padding-right:0;float:right}#cooked-welcome-screen .cooked-welcome-panel-column .fa-external-link{color:#888}#cooked-welcome-screen .cooked-welcome-panel-content{min-height:1px;padding:10px 50px 20px;margin:0}#cooked-welcome-screen .cooked-welcome-panel .cooked-welcome-panel-column-container{display:flex;justify-content:between!important;padding:0!important;flex-wrap:wrap}#cooked-welcome-screen .cooked-welcome-panel-column{box-sizing:border-box;padding-right:2rem;width:30%}#cooked-welcome-screen .cooked-pro-features{width:85%;margin:0 auto;padding:0 0 10px;display:flex;flex-wrap:wrap}#cooked-welcome-screen ul.cooked-whatsnew-list{margin-right:0}#cooked-welcome-screen ul.cooked-whatsnew-list li{line-height:1.7;position:relative;margin-right:0;border-top:1px solid #e5e5e5;padding:8px 0 4px 0}#cooked-welcome-screen ul.cooked-whatsnew-list li:first-child{border:none;padding-top:0}#cooked-welcome-screen ul.cooked-whatsnew-list em.fix,#cooked-welcome-screen ul.cooked-whatsnew-list strong.new,#cooked-welcome-screen ul.cooked-whatsnew-list strong.tweak{position:absolute;font-style:normal;display:inline-block;background:#aaa;text-transform:uppercase;top:11px;left:0;color:#fff;font-weight:600;-moz-border-radius:3px;-webkit-border-radius:3px;text-align:center;width:38px;border-radius:3px;font-size:10px;line-height:19px;height:19px;padding:0 6px;margin:0 6px 0 0}#cooked-welcome-screen ul.cooked-whatsnew-list li:first-child em.fix,#cooked-welcome-screen ul.cooked-whatsnew-list li:first-child strong.new,#cooked-welcome-screen ul.cooked-whatsnew-list li:first-child strong.tweak{top:3px}#cooked-welcome-screen ul.cooked-whatsnew-list strong.new{background:#56c477}#cooked-welcome-screen ul.cooked-whatsnew-list strong.tweak{background:#0073aa}#cooked-welcome-screen ul.cooked-whatsnew-list em.fix{background:#ffad10}#cooked-welcome-screen ul li.cooked-pro i.cooked-icon{color:#ffad10}#cooked-welcome-screen ul li.cooked-pro a{font-weight:600;color:#ffad10}#cooked-welcome-screen ul li.cooked-pro a:hover{color:#d3910f}#cooked-welcome-screen ul.cooked-whatsnew-pro{margin-bottom:0;flex:1 0 auto;width:33.333%}#cooked-welcome-screen ul.cooked-whatsnew-pro li{padding-left:0;font-size:1.15rem;font-weight:400}#cooked-welcome-screen ul.cooked-whatsnew-pro li i.cooked-icon-star{color:#ffad10;margin:0 7px 0 0;font-size:19px;position:relative;top:1px}#cooked-welcome-screen .cooked-welcome-bottom{text-align:center;background:#f9f9f9;margin:30px -80px -15px;border-top:1px solid #f1f1f1}#cooked-welcome-screen .cooked-pro-button{display:inline-block;clear:both;text-align:center;width:auto;margin:30px auto;padding:20px 25px 21px;font-size:1.25rem;line-height:1rem;font-weight:600;color:#fff;background:#ffad10;border-radius:50px}#cooked-welcome-screen .cooked-pro-button:hover{background:#e08704}#cooked-welcome-screen .cooked-coupon-code{color:#4c5e65;display:inline-block;font-size:17px;padding:0 0 0 1.5rem}@media screen and (max-width:1050px){#cooked-welcome-screen ul.cooked-whatsnew-pro{width:100%;margin-top:0}#cooked-welcome-screen ul.cooked-whatsnew-pro:first-child{margin-top:10px}#cooked-welcome-screen ul.cooked-whatsnew-pro li:first-child{border-top:1px solid #e5e5e5;padding-top:8px}#cooked-welcome-screen ul.cooked-whatsnew-pro:first-child li:first-child{border:none;padding-top:0}}@media screen and (max-width:870px){#cooked-welcome-screen .cooked-pro-features{width:90%}#cooked-welcome-screen .cooked-welcome-panel-column{padding-right:0}#cooked-welcome-screen .cooked-welcome-panel-column.cooked-welcome-panel-last{width:100%;padding-top:20px}#cooked-welcome-screen .about-wrap{margin-top:0}#cooked-welcome-screen .cooked-welcome-panel .cooked-welcome-panel-column li{display:block}}@media screen and (max-width:782px){#cooked-welcome-screen .cooked-pro-features{width:100%}#cooked-welcome-screen{padding:15px 40px 0 30px}#cooked-welcome-screen .cooked-badge{display:none}#cooked-welcome-screen .about-text,#cooked-welcome-screen .about-wrap h1{margin-right:0}#cooked-welcome-screen .cooked-welcome-panel-column h3 a{display:block;position:relative}}@media screen and (max-width:500px){#cooked-welcome-screen #cooked-welcome-panel img.cooked-welcome-banner{display:none}#cooked-welcome-screen .about-wrap h1{font-size:1.8rem}#cooked-welcome-screen .about-text{font-size:15px}}#cooked_recipe_settings #cooked-nutrition-label .cooked-nut-label,#cooked_recipe_settings .recipe-setting-block h3.cooked-settings-title{color:#0173aa}#cooked_recipe_settings .recipe-setting-block.cooked-danger h3.cooked-settings-title{color:#d44d1f}#cooked_recipe_settings .cooked-alert-block h3.cooked-settings-title{color:#c02a2a}#cooked-recipe-tabs{background:#fff}#cooked-recipe-tabs li{background:#454b52;color:#fff;color:rgba(255,255,255,.75);border-right:1px solid rgba(0,0,0,.15)}#cooked-recipe-tabs li:hover{background:#535a62;color:#fff;border-right:1px solid rgba(0,0,0,.15)}#cooked-recipe-tabs li.active{background:#fff;color:#333;border-right:1px solid #fff}#cooked-settings-tabs{background:#454b52}#cooked-settings-tabs a{color:#fff;text-decoration:none}#cooked-settings-tabs li{background:#454b52;color:#fff;color:rgba(255,255,255,.75)}#cooked-settings-tabs li:hover{background:#535a62;color:#fff}#cooked-settings-tabs li.active{background:#fff}#cooked-settings-tabs li.active a{color:#000}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .cooked-direction-img-placeholder,#cooked-migration-progress.cooked-progress .cooked-progress-bar,#cooked-related-progress.cooked-progress .cooked-progress-bar,#cooked_recipe_settings .cooked-select-wrapper:before,#cooked_recipe_settings .cooked-tooltip-icon,#cooked_recipe_settings select{-webkit-transition:all .15s ease-out;-moz-transition:all .15s ease-out;transition:all .15s ease-out}#cooked-recipe-image-gallery .cooked-recipe-gallery-item{-webkit-transition:transform .15s ease-out;-moz-transition:all .15s ease-out;transition:transform .15s ease-out}#cooked-recipe-tabs li.cooked-loading{-webkit-transition:opacity .15s ease-out;-moz-transition:all .15s ease-out;transition:opacity .15s ease-out}@-webkit-keyframes cooked-wiggle{0%{-webkit-transform:scale(1)}50%{-webkit-transform:scale(1.03)}100%{-webkit-transform:scale(1)}}@-moz-keyframes cooked-wiggle{0%{-moz-transform:scale(1)}50%{-moz-transform:scale(1.03)}100%{-moz-transform:scale(1)}}@-o-keyframes cooked-wiggle{0%{-o-transform:scale(1)}50%{-o-transform:scale(1.03)}100%{-o-transform:scale(1)}}@keyframes cooked-wiggle{0%{transform:scale(1)}50%{transform:scale(1.03)}100%{transform:scale(1)}}@media screen and (max-width:1150px){#cooked-recipe-tabs li{font-size:.8rem;padding:0 1.2rem 0 .7rem}#cooked-recipe-tabs li .cooked-icon{display:none}}@media screen and (max-width:960px){#cooked_recipe_settings.stuck #cooked-recipe-tabs{margin-left:36px}}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields{width:100%;float:left;clear:both;margin-top:10px;padding-top:10px;padding-right:0;padding-left:0;margin-left:0;box-sizing:border-box;padding-bottom:5px;position:relative}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields .cooked-ingredient-amount{width:15%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields .cooked-ingredient-measurement{width:20%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields .cooked-ingredient-name{width:65%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields .cooked-sub-label{color:#7c7c7c;font-size:14px;font-weight:300}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields>div{display:inline-block;float:left;box-sizing:border-box;padding-right:10px}
\ No newline at end of file
+.cooked-clearfix:after{content:"";display:table;clear:both}#post-body-content #postdivrich{display:none}body.post-type-cp_recipe .wp-list-table tfoot th.check-column,body.post-type-cp_recipe .wp-list-table thead th.check-column{padding:15px 0 0 7px}body.post-type-cp_recipe .wp-list-table tfoot td,body.post-type-cp_recipe .wp-list-table tfoot th,body.post-type-cp_recipe .wp-list-table thead td,body.post-type-cp_recipe .wp-list-table thead th{padding:10px 10px}body.post-type-cp_recipe .wp-list-table tfoot th.sortable a,body.post-type-cp_recipe .wp-list-table tfoot th.sorted a,body.post-type-cp_recipe .wp-list-table thead th.sortable a,body.post-type-cp_recipe .wp-list-table thead th.sorted a{padding-left:0;padding-right:0}body.post-type-cp_recipe .wp-list-table tbody th.check-column{padding:15px 0 0 10px}body.post-type-cp_recipe .wp-list-table tbody td,body.post-type-cp_recipe .wp-list-table tbody th{padding:12px 10px}body.post-type-cp_recipe .wp-list-table tbody td.column-title strong{margin-top:6px}body.post-type-cp_recipe .wp-list-table tbody td.column-title strong .row-title{padding-top:10px;font-size:1rem!important}th.column-featured_image{width:50px;text-align:center}td.column-featured_image{width:50px;text-align:center}.cooked-admin-recipes-list-image img{width:49px;height:auto;border-radius:3px;position:relative;top:3px}body.post-type-cp_recipe #titlediv #title{box-shadow:none;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:0 12px;font-weight:400;font-size:19px;letter-spacing:0;height:44px}body.post-type-cp_recipe #titlediv #title-prompt-text{font-size:15px;color:#888;font-weight:400;letter-spacing:0;padding:12px 15px}body.post-type-cp_recipe .mce-fullscreen{z-index:100100!important}#cooked-settings-prewrap{display:flex;justify-content:center}#cooked-settings-wrap{position:relative;border-radius:10px;margin:40px 40px 40px 20px;max-width:1200px;min-width:1000px;background:#fff;box-shadow:0 4px 4px rgba(0,0,0,.05),0 8px 8px rgba(0,0,0,.05),0 32px 32px rgba(0,0,0,.05),0 64px 64px rgba(0,0,0,.05)}#cooked-settings-wrap.is-stuck{position:static!important}#cooked-settings-wrap .cooked-settings-update-button{position:absolute;top:30px;right:30px}#cooked-settings-wrap .cooked-settings-update-button>.button-primary{box-shadow:none;border:none}#cooked-settings-wrap.is-stuck .cooked-settings-update-button{position:fixed;top:40px;right:11px;z-index:100001}#cooked_recipe_settings .hndle,#cooked_recipe_settings button.handlediv{display:none}#cooked_recipe_settings .inside{padding:0;margin:0}#cooked-recipe-tabs{list-style:none;padding:0;margin:0;position:absolute;top:0;left:0;width:100%}#cooked-recipe-tabs li{font-size:.9rem;line-height:3rem;height:3rem;font-weight:500;display:inline-block;padding:0 1.25rem;margin:0;color:#fff}#cooked-recipe-tabs li:hover{cursor:pointer}#cooked-recipe-tabs li.active,#cooked-recipe-tabs li.active:hover{cursor:default}#cooked-recipe-tabs li:last-child{border-right:none!important}#cooked-recipe-tabs li.cooked-loading{opacity:0;background:0 0;color:#fff;position:absolute;top:0;right:0;cursor:default;font-size:14px;width:40px;height:40px;text-align:center;display:block;line-height:40px;padding:0}#cooked-recipe-tabs li.cooked-loading:hover{background:0 0;color:#fff}#cooked_recipe_settings.cooked-loading #cooked-recipe-tabs li.cooked-loading{opacity:1}#cooked_recipe_settings .inside{padding-top:41px}#cooked_recipe_settings.stuck #cooked-recipe-tabs{position:fixed;width:auto;top:32px;left:23px;z-index:100000;margin-left:160px;box-shadow:0 3px 50px rgba(0,0,0,.25)}#cooked_recipe_settings.stuck #cooked-recipe-tabs li.cooked-loading{right:160px}.cooked-recipe-tab-content-wrapper .cooked-recipe-tab-content{display:none}.cooked-recipe-tab-content-wrapper .cooked-recipe-tab-content:first-child{display:block}.cooked-left{float:left;display:inline-block;width:auto}.cooked-right{float:right;display:inline-block;width:auto}#cooked_field--cooked_pro_license_key{font-family:monospace}#cooked_recipe_settings .cooked-bm-5{margin-bottom:5px!important}#cooked_recipe_settings .cooked-bm-10{margin-bottom:10px!important}#cooked_recipe_settings .cooked-tm-10{margin-top:10px!important}#cooked_recipe_settings .cooked-bm-15{margin-bottom:15px!important}#cooked_recipe_settings .cooked-bm-20{margin-bottom:20px!important}#cooked_recipe_settings .cooked-bm-30{margin-bottom:30px!important}#cooked_recipe_settings .cooked-bm-5-up{margin-bottom:-5px!important}#cooked_recipe_settings .cooked-bm-10-up{margin-bottom:-10px!important}#cooked_recipe_settings .cooked-bm-15-up{margin-bottom:-15px!important}#cooked_recipe_settings .cooked-bm-20-up{margin-bottom:-20px!important}#cooked_recipe_settings .cooked-bm-30-up{margin-bottom:-30px!important}#cooked_recipe_settings .cooked-hr{border:none;border-top:2px solid #ddd;margin:10px 0 0 0;padding:15px 0 0 0}#cooked_recipe_settings .cooked-conditional-hidden{display:none}#cooked_recipe_settings .cooked-recipe-tab-content{padding:23px 30px 15px 30px}#cooked_recipe_settings .recipe-setting-block{margin:0 0 20px;width:100%}#cooked_recipe_settings .recipe-setting-block p{font-size:.9rem;line-height:1.5rem;margin:0 0 1rem;padding:0}#cooked_recipe_settings .recipe-setting-block p.cooked-padded{line-height:1.75rem;font-size:.85rem}#cooked_recipe_settings .recipe-setting-block .cooked-conditional-hidden{padding:0}#cooked_recipe_settings textarea{width:100%;height:75px;padding:15px;box-sizing:border-box;position:relative;top:5px}#cooked_recipe_settings .recipe-setting-block>label.cooked-select-label{top:5px}#cooked_recipe_settings select{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-shadow:none;border-radius:3px;padding:0 45px 0 9px;line-height:31px;height:33px;box-sizing:border-box;background:#fff}#cooked_recipe_settings .cooked-select-wrapper{background:#fff;position:relative;width:auto;display:inline-block;border-radius:3px;margin:0 5px 0 0}#cooked_recipe_settings .cooked-select-wrapper select{margin:0;background:0 0;position:relative}#cooked_recipe_settings .cooked-select-wrapper:before{font-family:CookedIcons;display:block;width:15px;height:15px;line-height:14px;color:#000;font-size:14px;content:"\f00b";position:absolute;right:12px;top:11px;color:rgba(0,0,0,.3)}#cooked_recipe_settings .cooked-select-wrapper:hover:before{color:#000}#cooked_recipe_settings .cooked-select-wrapper:hover select{border-color:#ccc}#cooked_recipe_settings .cooked-checkbox-radio-label{position:relative;left:1px}#cooked_recipe_settings .recipe-setting-block input[type=checkbox],#cooked_recipe_settings .recipe-setting-block input[type=radio]{margin-top:0}#cooked_recipe_settings .recipe-setting-block input[type=number]{width:65px}#cooked_recipe_settings .recipe-setting-block input[type=password],#cooked_recipe_settings .recipe-setting-block input[type=text]{width:75%}#cooked_recipe_settings .recipe-setting-block input[type=number],#cooked_recipe_settings .recipe-setting-block input[type=password],#cooked_recipe_settings .recipe-setting-block input[type=text]{margin:0 6px 5px 0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;height:33px;box-shadow:none;position:relative;top:2px;padding:0 10px}#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs .cooked-measurement-column{width:43%;margin-right:3%;display:inline-block}#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs .cooked-select-wrapper,#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs input,#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs label{width:100%;display:block}#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs .cooked-select-wrapper select{width:100%}#cooked_recipe_settings .recipe-setting-block input[type=number],#cooked_recipe_settings .recipe-setting-block input[type=password].cooked-small-textfield,#cooked_recipe_settings .recipe-setting-block input[type=text].cooked-small-textfield{width:150px}#cooked_recipe_settings small{display:block;line-height:1.5;font-size:12px;color:#888;padding:10px 0 0}#cooked_recipe_settings .recipe-setting-block em{color:#aaa}#cooked_recipe_settings .recipe-setting-block,#cooked_recipe_settings .recipe-setting-block .cooked-repositioned{display:block;position:relative;box-sizing:border-box;line-height:1}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned{padding-left:157px}#cooked_recipe_settings .recipe-setting-block h3.cooked-settings-title{width:70%;position:relative;z-index:2;padding:.5rem 0 .5rem;margin:0;font-size:1rem;line-height:1.5rem;font-weight:600}#cooked_recipe_settings .recipe-setting-block strong.cooked-heading{font-size:14px}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned>label{position:absolute;top:1px;left:0;width:147px;cursor:default;font-weight:600}#cooked_recipe_settings .recipe-setting-block .cooked-tooltip-icon{color:#aaa;cursor:help;display:inline-block;margin-left:10px}#cooked_recipe_settings .recipe-setting-block .cooked-tooltip-icon:hover{color:#eee}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned>.cooked-checkbox-radio-label{top:7px}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned>label{top:auto;height:33px;line-height:30px;padding:0;width:130px}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned:first-child label:first-child{padding-top:12px;margin-top:-12px}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned span.cooked-padded{padding:0 0 15px;display:block;line-height:1.9}#cooked_recipe_settings .recipe-setting-block .wp-picker-container .cooked-color-field.wp-color-picker{padding:5px;height:25px;top:0;margin:0;width:74px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #ccc}#cooked_recipe_settings .recipe-setting-block input[type=text].cooked-shortcode-field{font-family:monospace;background:#f5f5f5;font-size:12px}#cooked_recipe_settings .cooked-banner-block{margin:30px -30px -17px;display:block;box-sizing:content-box;padding:10px 30px 15px;background:#f9f9f9;width:100%;border-top:1px solid #e5e5e5}#cooked_recipe_settings .cooked-advanced-options-hr{border:none;border-bottom:1px solid #ddd;height:1px;padding:10px 0 0 0;margin:0 0 20px}#cooked_recipe_settings .recipe-setting-block input.cooked-time-picker{top:0;width:100%;padding-right:70%;margin:0 0 3px}#cooked_recipe_settings .recipe-setting-block .cooked-time-picker-text{position:absolute;bottom:13px;right:40px;color:#888}#cooked_recipe_settings .cooked-alert-block{background:#fffbdc;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;margin:10px 0 15px;padding:10px 22px 2px;border:2px solid #ece8c4}#cooked_recipe_settings .recipe-setting-block.cooked-template{display:none}#cooked_recipe_settings ul.cooked-admin-ul{font-size:.9rem;margin:0 0 1rem 2rem;list-style:disc}#cooked_recipe_settings ul.cooked-admin-ul li{font-size:.9rem;padding:0;margin:0 0 .5rem}#cooked_recipe_settings .cooked-html-block{background:#fff;width:auto;min-width:300px;display:inline-block;padding:.5rem 1.3rem .25rem;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15)}#cooked_recipe_settings .recipe-setting-block .cooked-html-block h3.cooked-settings-title{width:100%;color:#333}#cooked_recipe_settings .recipe-setting-block .cooked-html-block.valid{background:#fff;border:2px solid #0aa780;box-shadow:none;border-radius:5px}#cooked_recipe_settings .recipe-setting-block .cooked-html-block.valid>.cooked-settings-title{color:#0aa780}#cooked_recipe_settings .recipe-setting-block .cooked-html-block.expired{border:2px solid #ca4a20}#cooked-directions-builder .cooked-direction-block.cooked-expanded>.cooked-heading-name,#cooked-directions-builder .cooked-direction-block.cooked-has-heading-element>.cooked-heading-name,#cooked-directions-builder .cooked-direction-block:hover>.cooked-heading-name,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded>.cooked-heading-name,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-heading-element>.cooked-heading-name,#cooked-ingredients-builder .cooked-ingredient-block:hover>.cooked-heading-name{padding-right:32px}#cooked-directions-builder .cooked-direction-block .cooked-show-heading-element,#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-heading-element{opacity:0;cursor:pointer;font-size:14px;position:absolute;top:14px;right:35px}#cooked-directions-builder .cooked-direction-block .cooked-show-heading-element .cooked-icon,#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-heading-element .cooked-icon{color:#888}#cooked-directions-builder .cooked-direction-block.cooked-expanded .cooked-show-heading-element,#cooked-directions-builder .cooked-direction-block.cooked-has-heading-element .cooked-show-heading-element,#cooked-directions-builder .cooked-direction-block:hover .cooked-show-heading-element,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded .cooked-show-heading-element,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-heading-element .cooked-show-heading-element,#cooked-ingredients-builder .cooked-ingredient-block:hover .cooked-show-heading-element{opacity:1}#cooked-directions-builder .cooked-direction-block .cooked-show-heading-element .cooked-icon:hover,#cooked-directions-builder .cooked-direction-block.cooked-expanded .cooked-show-heading-element .cooked-icon,#cooked-directions-builder .cooked-direction-block.cooked-has-heading-element .cooked-show-heading-element .cooked-icon,#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-heading-element .cooked-icon:hover,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded .cooked-show-heading-element .cooked-icon,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-heading-element .cooked-show-heading-element .cooked-icon{color:#0685ba}#cooked-directions-builder .cooked-direction-block>.cooked-heading-element,#cooked-ingredients-builder .cooked-ingredient-block>.cooked-heading-element{display:none;width:65%;float:right;margin-top:4px;padding-right:32px}#cooked-directions-builder .cooked-direction-block>.cooked-heading-element select,#cooked-ingredients-builder .cooked-ingredient-block>.cooked-heading-element select{color:#0685ba;width:100%}#cooked-directions-builder .cooked-direction-block>.cooked-heading-element label,#cooked-ingredients-builder .cooked-ingredient-block>.cooked-heading-element label{font-weight:600}#cooked-directions-builder .cooked-direction-block.cooked-expanded>.cooked-heading-element,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded>.cooked-heading-element{display:block}#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-substitution{opacity:0;cursor:pointer;font-size:14px;position:absolute;top:15px;right:58px}#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-substitution .cooked-icon{color:#888}#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded .cooked-show-substitution,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-substitution .cooked-show-substitution,#cooked-ingredients-builder .cooked-ingredient-block:hover .cooked-show-substitution{opacity:1;right:50px}#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-substitution .cooked-icon:hover,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded .cooked-show-substitution .cooked-icon,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-substitution .cooked-show-substitution .cooked-icon{color:#0685ba}#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded>.cooked-ingredient-name,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-substitution>.cooked-ingredient-name,#cooked-ingredients-builder .cooked-ingredient-block:hover>.cooked-ingredient-name{padding-right:32px}#cooked_recipe_settings .switchery-small,body.post-type-cp_recipe .switchery-small{height:1rem;width:1.75rem;border-radius:1rem;margin-right:.4rem}#cooked_recipe_settings .switchery-small>small,body.post-type-cp_recipe .switchery-small>small{width:1rem;height:1rem;padding:0}.cooked-tooltip-buttons .cooked-icon-spin{margin-top:10px;font-size:15px}.cooked-tooltip-buttons .cooked-saved-default{height:28px;line-height:28px;font-weight:700;font-size:15px;color:#888}.cooked-progress{display:none;position:relative;background:#eee;width:100%;height:6px;padding:0;border-radius:3px;margin:10px 0 0 0}.cooked-progress-text{display:none;font-size:10px;color:#aaa;padding:2px 0 5px}.cooked-progress-text.cooked-active,.cooked-progress.cooked-active{display:block}.cooked-progress .cooked-progress-bar{display:block;position:absolute;background:#0085ba;width:0%;height:6px;top:0;left:0;border-radius:3px}#cooked-import-progress.cooked-progress,#cooked-migration-progress.cooked-progress{background:#ccc;margin:25px 0 0 0;border-radius:6px;height:12px;max-width:600px}#cooked-import-progress.cooked-progress .cooked-progress-bar,#cooked-migration-progress.cooked-progress .cooked-progress-bar{border-radius:6px;height:12px}#cooked-import-progress-text.cooked-progress-text,#cooked-migration-progress-text.cooked-progress-text{font-size:11px;color:#888;max-width:600px}#cooked-import-completed,#cooked-migration-completed{display:none}#cooked-import-completed.cooked-active,#cooked-migration-completed.cooked-active{display:block}#cooked-csv-import-progress.cooked-progress{background:#ccc;margin:25px 0 0 0;border-radius:6px;height:12px;max-width:600px}#cooked-csv-import-progress.cooked-progress .cooked-progress-bar{border-radius:6px;height:12px}#cooked-csv-import-progress-text.cooked-progress-text{font-size:11px;color:#888;max-width:600px}#cooked-csv-import-completed{display:none}#cooked-csv-import-completed.cooked-active{display:block}#cooked-csv-import-form{max-width:100%;box-sizing:border-box}#cooked-csv-import-form input[type=file]{max-width:100%;box-sizing:border-box;width:100%}#cooked-csv-import-errors{max-width:100%;box-sizing:border-box;word-wrap:break-word}#cooked-import-progress.cooked-progress,#cooked-migration-progress.cooked-progress,#cooked-related-progress.cooked-progress{background:#ccc;margin:25px 0 0 0;border-radius:6px;height:12px;max-width:600px}#cooked-import-progress.cooked-progress .cooked-progress-bar,#cooked-migration-progress.cooked-progress .cooked-progress-bar,#cooked-related-progress.cooked-progress .cooked-progress-bar{border-radius:6px;height:12px}#cooked-import-progress-text.cooked-progress-text,#cooked-migration-progress-text.cooked-progress-text,#cooked-related-progress-text.cooked-progress-text{font-size:11px;color:#888;max-width:600px}#cooked-import-completed,#cooked-migration-completed,#cooked-related-completed{display:none}#cooked-import-completed.cooked-active,#cooked-migration-completed.cooked-active,#cooked-related-completed.cooked-active{display:block}.cooked-related-status{margin:0 0 12px 0;padding:8px 12px;font-size:13px;line-height:1.4;border-radius:4px;border-left:3px solid #00a878;background:#f0f9f6;color:#2d4a42;max-width:480px}#cooked-related-last-done.cooked-related-status{border-left-color:#8c9b99;background:#f6f8f7;color:#5c6b69}#cooked_recipe_settings .cooked-layout-save-default{position:relative;top:-2px;z-index:10;margin:0 0 0 15px;padding:0 8px 1px}#cooked_recipe_settings .cooked-layout-load-default{position:relative;top:-2px;z-index:10;margin:0 0 0 10px;padding:0 8px 1px}body .button.button-cooked-reset{color:#999}body .button.button-cooked-reset:hover{color:#555}#cooked_recipe_settings .cooked-ingredient-headers{display:block;padding:5px 25px 0 35px}#cooked_recipe_settings .cooked-ingredient-headers span{font-size:.7rem;font-weight:700;letter-spacing:.03rem;text-transform:uppercase;color:#0085ba;box-sizing:border-box;display:inline-block;float:left}#cooked_recipe_settings .cooked-ingredient-headers span.cooked-ingredient-header-amount{width:15%}#cooked_recipe_settings .cooked-ingredient-headers span.cooked-ingredient-header-measurement{width:20%}#cooked_recipe_settings .cooked-ingredient-headers span.cooked-ingredient-header-item{width:65%}#cooked-ingredients-builder{margin:0 0 20px}#cooked-ingredients-builder .cooked-ingredient-block{display:block;padding:5px 45px 5px 35px}#cooked-ingredients-builder .cooked-ingredient-block:hover{background:#eee}#cooked-ingredients-builder .cooked-ingredient-block input[type=number],#cooked-ingredients-builder .cooked-ingredient-block input[type=text],#cooked-ingredients-builder .cooked-ingredient-block select{margin:0;display:block;top:0}#cooked-ingredients-builder .cooked-ingredient-block>div{display:inline-block;float:left;box-sizing:border-box;padding-right:10px}#cooked-ingredients-builder .cooked-ingredient-block>div input[type=text]{width:100%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-amount{width:15%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-measurement{width:20%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-measurement .cooked-select-wrapper{width:100%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-measurement .cooked-select-wrapper select{width:100%}#cooked-ingredients-builder .cooked-ingredient-block .cooked-substitution-fields>.cooked-ingredient-measurement .cooked-select-wrapper{width:100%}#cooked-ingredients-builder .cooked-ingredient-block .cooked-substitution-fields>.cooked-ingredient-measurement .cooked-select-wrapper select{width:100%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-name{width:65%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-heading-name{width:100%}#cooked-ingredients-builder .cooked-ingredient-block>div small.cooked-input-ex{display:block;padding:5px 0 0 2px}#cooked-ingredients-builder .cooked-ingredient-block{margin:0}#cooked-ingredients-builder .cooked-ingredient-block i.cooked-icon-drag{cursor:move;color:#ccc;font-size:32px;position:absolute;top:5px;left:1px;touch-action:none}#cooked-ingredients-builder .cooked-ingredient-block:hover i.cooked-icon-drag{color:#888}#cooked-ingredients-builder .cooked-ingredient-block.ui-sortable-helper{background:#f5f5f5;box-shadow:0 10px 20px rgba(0,0,0,.15);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}#cooked-ingredients-builder .cooked-ingredient-block.ui-sortable-placeholder{visibility:visible!important;background:#eee;display:block;width:100%;height:43px;border-top:6px solid #fff;border-bottom:6px solid #fff}#cooked-ingredients-builder .cooked-ingredient-block .cooked-delete-ingredient{cursor:pointer;font-size:14px;position:absolute;top:14px;right:11px}#cooked-ingredients-builder .cooked-ingredient-block .cooked-delete-ingredient .cooked-icon{color:#fff}#cooked-ingredients-builder .cooked-ingredient-block:hover .cooked-delete-ingredient .cooked-icon{color:#888}#cooked-ingredients-builder .cooked-ingredient-block .cooked-delete-ingredient .cooked-icon:hover{color:#de2020}#cooked-ingredients-builder .cooked-ingredient-block.cooked-ingredient-heading{margin:10px 0}#cooked-ingredients-builder .cooked-ingredient-block.cooked-ingredient-heading>div input[type=text]{padding:0 7px;font-size:16px;background:#f9f9f9;font-weight:600}#cooked-directions-builder{margin:0 0 20px}#cooked-directions-builder .cooked-direction-block{display:block;padding:15px 25px 15px 35px}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading{padding:5px 25px 5px 35px}#cooked-directions-builder .cooked-direction-block:hover{background:#f5f5f5}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading:hover{background:#eee}#cooked-directions-builder .cooked-direction-block textarea{margin:0;display:block;height:191px;top:0}#cooked-directions-builder .cooked-direction-block>div{display:inline-block;float:left;box-sizing:border-box;padding-right:15px}#cooked-directions-builder .cooked-direction-block>div:last-child{padding:0}#cooked-directions-builder .cooked-direction-block>div input[type=text]{width:100%}#cooked-directions-builder .cooked-direction-block .mce-statusbar{display:none}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image{width:120px;position:absolute;top:15px;left:35px}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image img{cursor:pointer;display:none;border-radius:3px}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .cooked-direction-img-placeholder{box-sizing:border-box;cursor:pointer;border-radius:3px;width:100%;padding-bottom:100%;background:0 0;border:2px dashed #ddd;border-radius:3px;margin-top:15px}#cooked-directions-builder .cooked-direction-block:hover>.cooked-direction-image .cooked-direction-img-placeholder{background:0 0}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .cooked-direction-img-placeholder:hover{background:#ddd;border:2px solid #ddd}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .direction-image-button{width:100%;text-align:center}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .remove-image-button{display:none;position:absolute;top:43px;right:15px}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image.cooked-has-image .remove-image-button{display:inline-block;padding:10px;background:rgba(0,0,0,.25);color:#fff}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image.cooked-has-image .remove-image-button:hover{background:#ff0100}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image.cooked-has-image img{width:100%;height:auto;display:block;margin:15px 0 0}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image.cooked-has-image .cooked-direction-img-placeholder{display:none}#cooked-directions-builder .cooked-direction-block>.cooked-direction-content{width:100%;padding-left:120px}#cooked-directions-builder .cooked-direction-block .cooked-direction-number{opacity:.4;position:absolute;display:inline-block;font-weight:800;top:17px;left:35px;font-size:1.25rem;line-height:1}#cooked-directions-builder .cooked-direction-block.cooked-direction-has-number>.cooked-direction-image{left:65px}#cooked-directions-builder .cooked-direction-block.cooked-direction-has-number>.cooked-direction-content{padding-left:175px}#cooked-directions-builder .cooked-direction-block.cooked-direction-has-number-wide>.cooked-direction-content{padding-left:185px}#cooked-directions-builder .cooked-direction-block>.cooked-heading-name{width:100%}#cooked-directions-builder .cooked-direction-block{margin:0}#cooked-directions-builder .cooked-direction-block i.cooked-icon-drag{cursor:move;color:#ccc;font-size:32px;position:absolute;top:13px;left:1px;touch-action:none}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading i.cooked-icon-drag{top:5px}#cooked-directions-builder .cooked-direction-block:hover i.cooked-icon-drag{color:#888}#cooked-directions-builder .cooked-direction-block.ui-sortable-helper{background:#f5f5f5;box-shadow:0 10px 20px rgba(0,0,0,.15);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}#cooked-directions-builder .cooked-direction-block.ui-sortable-placeholder{visibility:visible!important;background:#eee;display:block;width:100%;height:221px;border-top:6px solid #fff;border-bottom:6px solid #fff}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading.ui-sortable-placeholder{height:43px}#cooked-directions-builder .cooked-direction-block .cooked-delete-direction{cursor:pointer;font-size:14px;position:absolute;right:14px}#cooked-directions-builder .cooked-direction-block .cooked-delete-direction .cooked-icon{color:#fff}#cooked-directions-builder .cooked-direction-block:hover .cooked-delete-direction .cooked-icon{color:#888}#cooked-directions-builder .cooked-direction-block .cooked-delete-direction .cooked-icon:hover{color:#de2020}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading{margin:10px 0}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading>div input[type=text]{padding:0 7px;font-size:16px;background:#f9f9f9;font-weight:600;top:0;margin:0}#cooked-directions-builder .cooked-direction-block .cooked-delete-direction{top:16px}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading .cooked-delete-direction{top:14px}#cooked-recipe-image-gallery{margin:0 -1% 0}#cooked-recipe-image-gallery .cooked-recipe-gallery-item{position:relative;overflow:hidden;cursor:move;box-sizing:border-box;display:inline-block;width:18%;height:auto;padding:0;margin:0 1% 2% 1%}#cooked-recipe-image-gallery .cooked-recipe-gallery-item:hover{opacity:.9}#cooked-recipe-image-gallery .cooked-recipe-gallery-item img{width:100%;height:auto;border-radius:3px;display:block;margin:0;padding:0;border:none}#cooked-recipe-image-gallery .cooked-recipe-gallery-item.ui-sortable-helper,#cooked-recipe-image-gallery .cooked-recipe-gallery-item.ui-sortable-helper:hover{opacity:.75;box-shadow:0 10px 20px rgba(0,0,0,.15)}#cooked-recipe-image-gallery .cooked-recipe-gallery-item.ui-sortable-placeholder{width:18%;height:auto;visibility:visible!important;border-radius:3px;background:#ddd;display:inline-block}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .remove-image-button{border-radius:0 3px 0 0;display:inline-block;position:absolute;top:0;right:0;padding:10px;background:rgba(0,0,0,.25);color:#fff}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .remove-image-button:hover{background:#ff0100}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .cooked-gallery-edit-button{border-radius:3px 0 0 0;display:inline-block;position:absolute;top:0;left:0;padding:10px;background:rgba(0,0,0,.25);color:#fff}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .cooked-gallery-edit-button:hover{background:#0084bc}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .cooked-gallery-item-title{position:absolute;left:0;bottom:0;box-sizing:border-box;width:100%;border-radius:0 0 3px 3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;padding:10px 10px 11px;text-align:center;background:#000;background:rgba(0,0,0,.3);color:#fff;font-size:12px}#cooked-recipe-image-gallery .cooked-recipe-gallery-item:hover .cooked-gallery-item-title{background:#000;background:rgba(0,0,0,.75)}#cooked-recipe-image-gallery .cooked-recipe-gallery-item.ui-sortable-helper{-webkit-animation:cooked-wiggle .4s infinite;-moz-animation:cooked-wiggle .4s infinite;-o-animation:cooked-wiggle .4s infinite;animation:cooked-wiggle .4s infinite}#cooked_recipe_settings label.cooked-nutrition-label{display:block;font-size:.7rem;letter-spacing:.03rem;font-weight:700;text-transform:uppercase;line-height:1;margin:0 0 7px}#cooked_recipe_settings #cooked-nutrition-label{line-height:1.6;font-size:1.1rem;border:1px solid #aaa;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:5%;margin:0 0 2rem;font-family:Helvetica,Arial,sans-serif;container-name:nutrition-label;container-type:inline-size}#cooked_recipe_settings #cooked-nutrition-label h2{font-size:2.5rem;line-height:1;letter-spacing:0;font-weight:800;padding:0 0 .5rem 0;margin:0 0 .4rem;color:#333;border-bottom:1px solid #aaa}#cooked_recipe_settings #cooked-nutrition-label p.cooked-daily-value-text{padding:.5rem 0 0 0;margin:0;font-size:.9rem}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-servings p{font-size:1.5rem}#cooked_recipe_settings #cooked-nutrition-label ul{list-style:none;margin:0;padding:0}#cooked_recipe_settings #cooked-nutrition-label li{position:relative;margin:0;padding:0 0 3px 0;border-top:1px solid #aaa}#cooked_recipe_settings #cooked-nutrition-label li li{padding:3px 0 0;margin:3px 0 0}#cooked_recipe_settings #cooked-nutrition-label li:after{content:"";display:table;clear:both}#cooked_recipe_settings #cooked-nutrition-label li.no-after:after{content:none}#cooked_recipe_settings #cooked-nutrition-label li.cooked-nut-spacer{border:none;height:.6rem;padding:0;background:#333}#cooked_recipe_settings #cooked-nutrition-label ul li.cooked-nut-no-border,#cooked_recipe_settings #cooked-nutrition-label>ul>li:first-child{border:none}#cooked_recipe_settings #cooked-nutrition-label li ul{padding:0;margin:0 0 0 20px}#cooked_recipe_settings #cooked-nutrition-label li ul.cooked-right{margin:0}#cooked_recipe_settings #cooked-nutrition-label li ul.cooked-right li{border:none;padding:0;margin:0}#cooked_recipe_settings #cooked-nutrition-label li.cooked-calories ul.cooked-right li strong.cooked-nut-label{font-size:2.5rem;line-height:1}#cooked_recipe_settings #cooked-nutrition-label .cooked-calories{border-top:none;display:flex;justify-content:space-between;align-items:baseline;padding:0}#cooked_recipe_settings #cooked-nutrition-label .cooked-calories strong,#cooked_recipe_settings #cooked-nutrition-label .cooked-calories strong.cooked-nut-label{font-size:2rem;font-weight:800}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-servings li{border:none}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-servings{margin:0}#cooked_recipe_settings #cooked-nutrition-label .cooked-nut-hr{border:none;border-top:1.3rem solid #333;margin:.1rem 0 0;padding:0}#cooked_recipe_settings #cooked-nutrition-label strong{font-weight:800}#cooked_recipe_settings #cooked-nutrition-label .cooked-serving-size strong,#cooked_recipe_settings #cooked-nutrition-label .cooked-serving-size strong.cooked-nut-label{font-size:1.5rem;font-weight:800}#cooked_recipe_settings #cooked-nutrition-label strong.cooked-nut-heading{font-size:1rem}#cooked_recipe_settings #cooked-nutrition-label strong.cooked-nut-label{font-weight:400}#cooked_recipe_settings #cooked-nutrition-label .cooked-nut-right{float:right}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-bottom{margin:0 0 .75rem}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-bottom li{border-top:none;border-bottom:1px solid #aaa;float:left;width:100%;box-sizing:border-box}#cooked_recipe_settings .cooked-measurement-inputs .cooked-select-wrapper:before{top:8px}.cooked-auto-nutrition{display:flex;justify-content:end;margin:0 0 1rem}#cooked-tooltip-auto-nutrition-notice{margin:0}.cooked-settings-header{border-radius:10px 10px 0 0;width:auto;height:90px;line-height:85px;padding:0 30px;font-weight:600;box-sizing:border-box;background:#33373c;color:#fff;font-size:29px;letter-spacing:-.03rem}.cooked-settings-header .cooked-icon{color:#00e0a9}.cooked-settings-submit-wrap{padding:0 0 35px 35px;margin:-20px 0 0}#cooked_recipe_settings .recipe-setting-block .cooked-permalink-field-wrapper span{font-size:14px;display:inline-block;line-height:32px;padding:5px 0 0 0}#cooked_recipe_settings .recipe-setting-block input[type=text].cooked-permalink-field{position:relative;top:0;display:inline-block;width:150px;margin:0 10px}#cooked-settings-panel{position:relative;margin:0;padding:0}#cooked-settings-tabs{display:flex;width:auto;padding:0 20px 0 0;margin:0;list-style:none}#cooked-settings-tabs li{font-size:13px;line-height:1;font-weight:400;display:block;padding:0;margin:0;color:#fff}#cooked-settings-tabs li .cooked-icon{font-size:14px}#cooked-settings-tabs li .cooked-icon.cooked-icon-recipe-icon{font-size:20px;top:2px;position:relative}#cooked-settings-tabs li:hover{cursor:pointer}#cooked-settings-tabs li.active,#cooked-settings-tabs li.active:hover{cursor:default}#cooked-settings-tabs a{line-height:41px;font-size:.9rem;letter-spacing:.03rem;padding:2px 15px 4px;display:block;outline:0;box-shadow:none;border:none;white-space:nowrap}#cooked-settings-panel.stuck{padding-top:41px}#cooked-settings-panel.stuck #cooked-settings-tabs{position:fixed;width:calc(100% - 180px);top:32px;left:0;z-index:100000;margin-left:160px}#cooked-settings-panel .cooked-settings-tab-content-wrapper .cooked-settings-tab-content{display:none}#cooked-settings-panel .cooked-settings-tab-content-wrapper .cooked-settings-tab-content:first-child{display:block}#cooked-settings-panel .cooked-settings-tab-content{padding:25px 35px;margin-right:0}#cooked-settings-panel #cooked_recipe_settings .recipe-setting-block h3.cooked-settings-title{padding-bottom:.2rem}#cooked_recipe_settings .cooked-setting-column-14{position:relative;width:25%;float:left;padding-right:20px;box-sizing:border-box}#cooked_recipe_settings .cooked-setting-column-13{position:relative;width:33%;float:left;padding-right:20px;box-sizing:border-box}#cooked_recipe_settings .cooked-setting-column-23{position:relative;width:66%;float:left;padding-right:20px;box-sizing:border-box}#cooked_recipe_settings .cooked-setting-column-12{position:relative;width:50%;float:left;padding-right:20px;box-sizing:border-box}#cooked_recipe_settings .cooked-setting-column-12 input[type=text],#cooked_recipe_settings .cooked-setting-column-13 input[type=text],#cooked_recipe_settings .cooked-setting-column-14 input[type=text],#cooked_recipe_settings .cooked-setting-column-23 input[type=text],#cooked_recipe_settings .recipe-setting-block input[type=text].cooked-shortcode-field{width:95%}#cooked_recipe_settings .cooked-setting-column-12 .cooked-select-wrapper,#cooked_recipe_settings .cooked-setting-column-12 select,#cooked_recipe_settings .cooked-setting-column-13 .cooked-select-wrapper,#cooked_recipe_settings .cooked-setting-column-13 select,#cooked_recipe_settings .cooked-setting-column-14 .cooked-select-wrapper,#cooked_recipe_settings .cooked-setting-column-14 select,#cooked_recipe_settings .cooked-setting-column-23 select{width:100%}#cooked_recipe_settings .cooked-setting-column-14.cooked-tb-col{padding:0}#cooked-welcome-screen{padding:15px 50px 0 30px;position:relative}#cooked-welcome-screen .cooked-badge{position:absolute;top:0;right:0}#cooked-welcome-screen .cooked-badge img{border:none;width:150px;height:150px;display:block;margin:0}#cooked-welcome-screen .about-text{margin-bottom:40px;line-height:1.8;font-size:17px;margin-right:260px}#cooked-welcome-screen .about-wrap{margin:25px auto 0;max-width:1000px}#cooked-welcome-screen .about-wrap h1{font-size:2.25rem}#cooked-welcome-screen .about-wrap p{font-size:1rem;margin:0 0 2rem;line-height:1.7rem}#cooked-welcome-screen #cooked-welcome-panel{background:#fff;padding:30px 30px 15px 30px;-moz-border-radius:15px;-webkit-border-radius:15px;border-radius:15px;border:none;box-shadow:0 4px 4px rgba(0,0,0,.05),0 8px 8px rgba(0,0,0,.05),0 32px 32px rgba(0,0,0,.05),0 64px 64px rgba(0,0,0,.05)}#cooked-welcome-screen #cooked-welcome-panel img.cooked-welcome-banner{border:none;display:block;padding:0;margin:0 0 30px;box-sizing:border-box;border-radius:5px 5px 0 0}#cooked-welcome-screen #cooked-welcome-panel .cooked-welcome-panel-intro{text-align:center;margin:0 50px 2rem;padding:15px 0;border-bottom:1px solid #e5e5e5}#cooked-welcome-screen #cooked-welcome-panel .cooked-welcome-panel-intro h1{font-size:1.75rem;margin:0 0 1rem;padding:0}#cooked-welcome-screen #cooked-welcome-panel .cooked-welcome-panel-intro p{max-width:600px;font-size:1.1rem;line-height:1.8rem;margin:0 auto 2rem;padding:0}#cooked-welcome-screen .cooked-welcome-panel a{text-decoration:none}#cooked-welcome-screen .cooked-welcome-panel-column{display:block!important}#cooked-welcome-screen .cooked-welcome-panel-column>strong{font-size:1rem}#cooked-welcome-screen .cooked-welcome-panel-column h3{font-size:1.75rem;margin:0 0 1rem;position:relative}#cooked-welcome-screen .cooked-welcome-panel-column h3 a{position:absolute;top:0;right:0;font-size:12px;font-weight:400}#cooked-welcome-screen .cooked-welcome-panel-column h3 a i.fa{position:relative;top:1px}#cooked-welcome-screen .cooked-welcome-panel-column h4{font-size:1.25rem;margin:0 0 1rem;position:relative}#cooked-welcome-screen .cooked-welcome-panel-column h4 a{position:absolute;top:0;right:0;font-size:12px;font-weight:400}#cooked-welcome-screen .cooked-welcome-panel-column h4 a i.fa{position:relative;top:1px}#cooked-welcome-screen .cooked-welcome-panel-column.cooked-welcome-panel-full{width:100%;padding-right:0;float:none}#cooked-welcome-screen .cooked-welcome-panel-column.cooked-welcome-panel-last{width:70%;padding-right:0;float:right}#cooked-welcome-screen .cooked-welcome-panel-column .fa-external-link{color:#888}#cooked-welcome-screen .cooked-welcome-panel-content{min-height:1px;padding:10px 50px 20px;margin:0}#cooked-welcome-screen .cooked-welcome-panel .cooked-welcome-panel-column-container{display:flex;justify-content:between!important;padding:0!important;flex-wrap:wrap}#cooked-welcome-screen .cooked-welcome-panel-column{box-sizing:border-box;padding-right:2rem;width:30%}#cooked-welcome-screen .cooked-pro-features{width:85%;margin:0 auto;padding:0 0 10px;display:flex;flex-wrap:wrap}#cooked-welcome-screen ul.cooked-whatsnew-list{margin-right:0}#cooked-welcome-screen ul.cooked-whatsnew-list li{line-height:1.7;position:relative;margin-right:0;border-top:1px solid #e5e5e5;padding:8px 0 4px 0}#cooked-welcome-screen ul.cooked-whatsnew-list li:first-child{border:none;padding-top:0}#cooked-welcome-screen ul.cooked-whatsnew-list em.fix,#cooked-welcome-screen ul.cooked-whatsnew-list strong.new,#cooked-welcome-screen ul.cooked-whatsnew-list strong.tweak{position:absolute;font-style:normal;display:inline-block;background:#aaa;text-transform:uppercase;top:11px;left:0;color:#fff;font-weight:600;-moz-border-radius:3px;-webkit-border-radius:3px;text-align:center;width:38px;border-radius:3px;font-size:10px;line-height:19px;height:19px;padding:0 6px;margin:0 6px 0 0}#cooked-welcome-screen ul.cooked-whatsnew-list li:first-child em.fix,#cooked-welcome-screen ul.cooked-whatsnew-list li:first-child strong.new,#cooked-welcome-screen ul.cooked-whatsnew-list li:first-child strong.tweak{top:3px}#cooked-welcome-screen ul.cooked-whatsnew-list strong.new{background:#56c477}#cooked-welcome-screen ul.cooked-whatsnew-list strong.tweak{background:#0073aa}#cooked-welcome-screen ul.cooked-whatsnew-list em.fix{background:#ffad10}#cooked-welcome-screen ul li.cooked-pro i.cooked-icon{color:#ffad10}#cooked-welcome-screen ul li.cooked-pro a{font-weight:600;color:#ffad10}#cooked-welcome-screen ul li.cooked-pro a:hover{color:#d3910f}#cooked-welcome-screen ul.cooked-whatsnew-pro{margin-bottom:0;flex:1 0 auto;width:33.333%}#cooked-welcome-screen ul.cooked-whatsnew-pro li{padding-left:0;font-size:1.15rem;font-weight:400}#cooked-welcome-screen ul.cooked-whatsnew-pro li i.cooked-icon-star{color:#ffad10;margin:0 7px 0 0;font-size:19px;position:relative;top:1px}#cooked-welcome-screen .cooked-welcome-bottom{text-align:center;background:#f9f9f9;margin:30px -80px -15px;border-top:1px solid #f1f1f1}#cooked-welcome-screen .cooked-pro-button{display:inline-block;clear:both;text-align:center;width:auto;margin:30px auto;padding:20px 25px 21px;font-size:1.25rem;line-height:1rem;font-weight:600;color:#fff;background:#ffad10;border-radius:50px}#cooked-welcome-screen .cooked-pro-button:hover{background:#e08704}#cooked-welcome-screen .cooked-coupon-code{color:#4c5e65;display:inline-block;font-size:17px;padding:0 0 0 1.5rem}@media screen and (max-width:1050px){#cooked-welcome-screen ul.cooked-whatsnew-pro{width:100%;margin-top:0}#cooked-welcome-screen ul.cooked-whatsnew-pro:first-child{margin-top:10px}#cooked-welcome-screen ul.cooked-whatsnew-pro li:first-child{border-top:1px solid #e5e5e5;padding-top:8px}#cooked-welcome-screen ul.cooked-whatsnew-pro:first-child li:first-child{border:none;padding-top:0}}@media screen and (max-width:870px){#cooked-welcome-screen .cooked-pro-features{width:90%}#cooked-welcome-screen .cooked-welcome-panel-column{padding-right:0}#cooked-welcome-screen .cooked-welcome-panel-column.cooked-welcome-panel-last{width:100%;padding-top:20px}#cooked-welcome-screen .about-wrap{margin-top:0}#cooked-welcome-screen .cooked-welcome-panel .cooked-welcome-panel-column li{display:block}}@media screen and (max-width:782px){#cooked-welcome-screen .cooked-pro-features{width:100%}#cooked-welcome-screen{padding:15px 40px 0 30px}#cooked-welcome-screen .cooked-badge{display:none}#cooked-welcome-screen .about-text,#cooked-welcome-screen .about-wrap h1{margin-right:0}#cooked-welcome-screen .cooked-welcome-panel-column h3 a{display:block;position:relative}}@media screen and (max-width:500px){#cooked-welcome-screen #cooked-welcome-panel img.cooked-welcome-banner{display:none}#cooked-welcome-screen .about-wrap h1{font-size:1.8rem}#cooked-welcome-screen .about-text{font-size:15px}}#cooked_recipe_settings #cooked-nutrition-label .cooked-nut-label,#cooked_recipe_settings .recipe-setting-block h3.cooked-settings-title{color:#0173aa}#cooked_recipe_settings .recipe-setting-block.cooked-danger h3.cooked-settings-title{color:#d44d1f}#cooked_recipe_settings .cooked-alert-block h3.cooked-settings-title{color:#c02a2a}#cooked-recipe-tabs{background:#fff}#cooked-recipe-tabs li{background:#454b52;color:#fff;color:rgba(255,255,255,.75);border-right:1px solid rgba(0,0,0,.15)}#cooked-recipe-tabs li:hover{background:#535a62;color:#fff;border-right:1px solid rgba(0,0,0,.15)}#cooked-recipe-tabs li.active{background:#fff;color:#333;border-right:1px solid #fff}#cooked-settings-tabs{background:#454b52}#cooked-settings-tabs a{color:#fff;text-decoration:none}#cooked-settings-tabs li{background:#454b52;color:#fff;color:rgba(255,255,255,.75)}#cooked-settings-tabs li:hover{background:#535a62;color:#fff}#cooked-settings-tabs li.active{background:#fff}#cooked-settings-tabs li.active a{color:#000}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .cooked-direction-img-placeholder,#cooked-migration-progress.cooked-progress .cooked-progress-bar,#cooked-related-progress.cooked-progress .cooked-progress-bar,#cooked_recipe_settings .cooked-select-wrapper:before,#cooked_recipe_settings .cooked-tooltip-icon,#cooked_recipe_settings select{-webkit-transition:all .15s ease-out;-moz-transition:all .15s ease-out;transition:all .15s ease-out}#cooked-recipe-image-gallery .cooked-recipe-gallery-item{-webkit-transition:transform .15s ease-out;-moz-transition:all .15s ease-out;transition:transform .15s ease-out}#cooked-recipe-tabs li.cooked-loading{-webkit-transition:opacity .15s ease-out;-moz-transition:all .15s ease-out;transition:opacity .15s ease-out}@-webkit-keyframes cooked-wiggle{0%{-webkit-transform:scale(1)}50%{-webkit-transform:scale(1.03)}100%{-webkit-transform:scale(1)}}@-moz-keyframes cooked-wiggle{0%{-moz-transform:scale(1)}50%{-moz-transform:scale(1.03)}100%{-moz-transform:scale(1)}}@-o-keyframes cooked-wiggle{0%{-o-transform:scale(1)}50%{-o-transform:scale(1.03)}100%{-o-transform:scale(1)}}@keyframes cooked-wiggle{0%{transform:scale(1)}50%{transform:scale(1.03)}100%{transform:scale(1)}}@media screen and (max-width:1150px){#cooked-recipe-tabs li{font-size:.8rem;padding:0 1.2rem 0 .7rem}#cooked-recipe-tabs li .cooked-icon{display:none}}@media screen and (max-width:960px){#cooked_recipe_settings.stuck #cooked-recipe-tabs{margin-left:36px}}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields{width:100%;float:left;clear:both;margin-top:10px;padding-top:10px;padding-right:0;padding-left:0;margin-left:0;box-sizing:border-box;padding-bottom:5px;position:relative}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields .cooked-ingredient-amount{width:15%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields .cooked-ingredient-measurement{width:20%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields .cooked-ingredient-name{width:65%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields .cooked-sub-label{color:#7c7c7c;font-size:14px;font-weight:300}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields>div{display:inline-block;float:left;box-sizing:border-box;padding-right:10px}.cooked-bulk-add-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.6);z-index:100100;display:flex;align-items:center;justify-content:center}.cooked-bulk-add-modal{background:#fff;border-radius:6px;width:600px;max-width:90vw;max-height:80vh;display:flex;flex-direction:column;box-shadow:0 5px 30px rgba(0,0,0,.3)}.cooked-bulk-add-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #ddd}.cooked-bulk-add-header h2{margin:0;font-size:18px;line-height:1.3}.cooked-bulk-add-close{font-size:24px;text-decoration:none;color:#666;line-height:1;padding:0 4px}.cooked-bulk-add-close:hover{color:#d63638}.cooked-bulk-add-body{padding:20px;overflow-y:auto;flex:1}.cooked-bulk-add-help{margin-top:0;color:#666;font-size:13px}#cooked-bulk-add-textarea{width:100%;min-height:160px;font-size:14px;padding:10px;box-sizing:border-box;resize:vertical}.cooked-bulk-add-preview{margin-top:16px}.cooked-bulk-add-preview-label{margin:0 0 8px;font-size:13px}.cooked-bulk-add-preview-notice-ingredients{display:none;margin:10px 0 0;font-size:12px;line-height:1.45;color:#b45309;font-weight:700;gap:6px;align-items:flex-start}#cooked-bulk-add-preview[data-bulk-type=ingredients] .cooked-bulk-add-preview-notice-ingredients{display:flex}.cooked-bulk-add-preview-notice-mark{flex-shrink:0;font-weight:700;line-height:1.45;color:#b45309}.cooked-bulk-add-preview-notice-text{flex:1;min-width:0;font-weight:700;color:#b45309}.cooked-bulk-add-preview-list{max-height:200px;overflow-y:auto;border:1px solid #ddd;border-radius:4px;padding:4px}.cooked-bulk-add-preview-row{display:flex;align-items:center;gap:8px;padding:4px 6px;border-bottom:1px solid #f0f0f0}.cooked-bulk-add-preview-row:last-child{border-bottom:0}.cooked-bulk-add-heading-toggle{display:flex;align-items:center;gap:4px;white-space:nowrap;font-size:12px;color:#666;cursor:pointer;flex-shrink:0}.cooked-bulk-add-heading-toggle input[type=checkbox]{margin:0}.cooked-bulk-add-preview-text{flex:1;border:1px solid #ddd;border-radius:3px;padding:4px 8px;font-size:13px}.cooked-bulk-add-preview-row:not(.cooked-bulk-add-preview-row-ingredient).cooked-bulk-add-is-heading .cooked-bulk-add-preview-text{font-weight:700}.cooked-bulk-add-preview-row-ingredient .cooked-bulk-add-heading-line-wrap{display:none;flex:1;align-items:center;gap:8px;min-width:0}.cooked-bulk-add-preview-row-ingredient.cooked-bulk-add-is-heading .cooked-bulk-add-heading-line-wrap{display:flex}.cooked-bulk-add-preview-row-ingredient.cooked-bulk-add-is-heading .cooked-bulk-add-parsed-amount,.cooked-bulk-add-preview-row-ingredient.cooked-bulk-add-is-heading .cooked-bulk-add-parsed-name,.cooked-bulk-add-preview-row-ingredient.cooked-bulk-add-is-heading .cooked-bulk-add-parsed-unit{display:none}.cooked-bulk-add-heading-line-label{flex-shrink:0;font-size:12px;font-weight:600;color:#666}.cooked-bulk-add-preview-row-ingredient .cooked-bulk-add-heading-line-wrap .cooked-bulk-add-preview-text{flex:1;min-width:0;border:1px solid #ddd;border-radius:3px;padding:4px 8px;font-size:13px;font-weight:600}.cooked-bulk-add-preview-header{display:flex;align-items:center;gap:8px;padding:4px 6px 6px;border-bottom:1px solid #ddd;font-size:11px;font-weight:600;color:#999;text-transform:uppercase;letter-spacing:.5px}.cooked-bulk-add-col-heading{flex-shrink:0;width:108px}.cooked-bulk-add-col-amount{width:72px;flex-shrink:0}.cooked-bulk-add-col-unit{width:108px;flex-shrink:0}.cooked-bulk-add-col-name{flex:1}.cooked-bulk-add-parsed-amount{width:72px;flex-shrink:0;border:1px solid #ddd;border-radius:3px;padding:4px 6px;font-size:13px;text-align:center}.cooked-bulk-add-parsed-unit{width:108px;flex-shrink:0;border:1px solid #ddd;border-radius:3px;padding:4px 6px;font-size:13px}.cooked-bulk-add-parsed-name{flex:1;border:1px solid #ddd;border-radius:3px;padding:4px 6px;font-size:13px}.cooked-bulk-add-footer{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:14px 20px;border-top:1px solid #ddd}.cooked-bulk-add-footer .button,.cooked-bulk-add-footer .button.button-primary{float:none;margin:0;vertical-align:middle}.cooked-bulk-add-spinner{float:none!important;margin:0!important}
\ No newline at end of file
diff --git a/assets/admin/js/cooked-functions.js b/assets/admin/js/cooked-functions.js
index 00dd580..5e0bed7 100644
--- a/assets/admin/js/cooked-functions.js
+++ b/assets/admin/js/cooked-functions.js
@@ -1,6 +1,6 @@
var $_CookedConditionalTimeout = false;
-// Touch event support for sortable drag handles on mobile devices
+/** Maps touch events on sortable drag handles to mouse events so sortable works on touch devices. */
var cookedSortableTouchHandler = function(event) {
var target = event.target;
var types = {
@@ -663,6 +663,9 @@ var cookedSortableTouchHandler = function(event) {
});
}
+ // Bulk Add Modal
+ cooked_init_bulk_add($);
+
if ( $_CookedRecipeGallery.length ) {
var gallery_images_frame;
@@ -793,6 +796,7 @@ var cookedSortableTouchHandler = function(event) {
var cooked_recipe_update_counter = 0;
var cooked_bulk_per_page = 20;
+/** Applies default recipe content in paginated AJAX batches and updates the progress UI. */
function cooked_set_default_template(page, total_recipes, content, nonce, instance) {
if (total_recipes <= 0) {
return;
@@ -842,6 +846,7 @@ function cooked_set_default_template(page, total_recipes, content, nonce, instan
);
}
+/** Sets the total time field to prep time plus cook time. */
function cooked_updateTotalTimeValue( prepTime, cookTime ) {
var totalTimeInput = jQuery( '#cooked-total-time' ),
totalTime = prepTime + cookTime;
@@ -856,6 +861,7 @@ function cooked_init_gallery_sorting() {
jQuery('#cooked-recipe-image-gallery').sortable();
}
+/** Syncs nutrition tab inputs with the live nutrition label preview (values and daily-value percents). */
function init_nutrition_facts( nutritionTab ) {
nutritionTab.find('input').each(function() {
var thisInput = jQuery(this),
@@ -1106,3 +1112,407 @@ function cooked_init_conditional_field(thisID) {
}, 25);
});
}
+
+/** Wires the bulk-add modal (preview, parse, submit) for ingredients and directions. */
+function cooked_init_bulk_add($) {
+ var $overlay = $('#cooked-bulk-add-overlay');
+ if (!$overlay.length) return;
+
+ var $textarea = $('#cooked-bulk-add-textarea'),
+ $preview = $('#cooked-bulk-add-preview'),
+ $previewList = $('#cooked-bulk-add-preview-list'),
+ $title = $('#cooked-bulk-add-title'),
+ $typeField = $('#cooked-bulk-add-type'),
+ $submitBtn = $overlay.find('.cooked-bulk-add-submit'),
+ $spinner = $overlay.find('.cooked-bulk-add-spinner'),
+ jsVars = cooked_admin_functions_js_vars,
+ parseTimer = null,
+ lastParsedText = '';
+
+ /** Opens the bulk-add overlay for the given type and sets copy/placeholders. */
+ function openModal(type) {
+ $typeField.val(type);
+ $textarea.val('');
+ $previewList.empty();
+ $preview.attr('data-bulk-type', '');
+ $preview.hide();
+ $submitBtn.attr('disabled', 'disabled');
+ $spinner.hide();
+ lastParsedText = '';
+
+ if (type === 'ingredients') {
+ $title.text(jsVars.i18n_bulk_add_ingredients);
+ $textarea.attr('placeholder', jsVars.i18n_bulk_add_placeholder_ingredients);
+ $submitBtn.text(jsVars.i18n_bulk_add_submit_ingredients);
+ } else {
+ $title.text(jsVars.i18n_bulk_add_directions);
+ $textarea.attr('placeholder', jsVars.i18n_bulk_add_placeholder_directions);
+ $submitBtn.text(jsVars.i18n_bulk_add_submit_directions);
+ }
+
+ $overlay.show();
+ $textarea.focus();
+ }
+
+ /** Hides the bulk-add overlay and clears its state. */
+ function closeModal() {
+ $overlay.hide();
+ $textarea.val('');
+ $previewList.empty();
+ $preview.attr('data-bulk-type', '');
+ $preview.hide();
+ lastParsedText = '';
+ if (parseTimer) clearTimeout(parseTimer);
+ }
+
+ /** Strips leading list markers from a single line of bulk text. */
+ function cleanLine(line) {
+ line = line.trim();
+ line = line.replace(/^(\d+\)\s+|\d+\.\s+|[a-z]+\)\s+|[•·\-\*]\s+|[A-Z]+\.\s+|[IVX]+\.\s+)/, '');
+ return line.trim();
+ }
+
+ /** Splits bulk textarea content into non-empty cleaned lines. */
+ function parseTextToLines(text) {
+ var lines = text.split(/[\r\n]+/);
+ var result = [];
+ for (var i = 0; i < lines.length; i++) {
+ var cleaned = cleanLine(lines[i]);
+ if (cleaned) {
+ result.push(cleaned);
+ }
+ }
+ return result;
+ }
+
+ /** Escapes a string for safe insertion into HTML attribute strings. */
+ function escHtml(str) {
+ return $('').text(str).html();
+ }
+
+ /** Renders bulk directions preview rows from parsed lines. */
+ function renderDirectionsPreview(lines) {
+ $previewList.empty();
+ if (!lines.length) {
+ $preview.attr('data-bulk-type', '');
+ $preview.hide();
+ $submitBtn.attr('disabled', 'disabled');
+ return;
+ }
+ $preview.attr('data-bulk-type', 'directions');
+ $preview.show();
+ $submitBtn.removeAttr('disabled');
+
+ for (var i = 0; i < lines.length; i++) {
+ var $row = $('');
+ var $cb = $('');
+ var $text = $('');
+ $row.append($cb).append($text);
+ $previewList.append($row);
+ }
+ }
+
+ /** Renders bulk ingredients preview rows (optionally with server-parsed amount/unit/name). */
+ function renderIngredientsPreview(lines, parsed) {
+ $previewList.empty();
+ if (!lines.length) {
+ $preview.attr('data-bulk-type', '');
+ $preview.hide();
+ $submitBtn.attr('disabled', 'disabled');
+ return;
+ }
+ $preview.attr('data-bulk-type', 'ingredients');
+ $preview.show();
+ $submitBtn.removeAttr('disabled');
+
+ if (!$previewList.find('.cooked-bulk-add-preview-header').length) {
+ $previewList.prepend(
+ ''
+ );
+ }
+
+ for (var i = 0; i < lines.length; i++) {
+ var p = parsed && parsed[i] ? parsed[i] : { amount: '', measurement: '', name: lines[i] };
+ var $row = $('');
+ var $cb = $('');
+ var $headingWrap = $('');
+ var $headingLbl = $('').text(jsVars.i18n_bulk_add_heading_line_label);
+ var $lineInput = $('').val(lines[i]);
+ $headingWrap.append($headingLbl).append($lineInput);
+ var $amt = $('');
+ var $unit = $('');
+ var $name = $('');
+ $row.append($cb).append($headingWrap).append($amt).append($unit).append($name);
+ $previewList.append($row);
+ }
+ }
+
+ /** Fetches AJAX-parsed ingredient lines and refreshes the preview. */
+ function fetchIngredientParse(lines) {
+ if (!lines.length) {
+ renderIngredientsPreview([], null);
+ return;
+ }
+
+ $spinner.show().css('visibility', 'visible');
+
+ $.post(jsVars.ajax_url, {
+ action: 'cooked_parse_bulk_ingredients',
+ nonce: jsVars.cooked_bulk_add_nonce,
+ lines: lines
+ }, function(response) {
+ $spinner.hide();
+ var parsed = (response.success && response.data && response.data.parsed) ? response.data.parsed : null;
+ renderIngredientsPreview(lines, parsed);
+ }).fail(function() {
+ $spinner.hide();
+ renderIngredientsPreview(lines, null);
+ });
+ }
+
+ $textarea.on('input', function() {
+ var type = $typeField.val();
+ var lines = parseTextToLines($(this).val());
+ var textKey = lines.join('\n');
+
+ if (type === 'directions') {
+ renderDirectionsPreview(lines);
+ } else {
+ if (textKey === lastParsedText) return;
+ lastParsedText = textKey;
+ renderIngredientsPreview(lines, null);
+ if (parseTimer) clearTimeout(parseTimer);
+ parseTimer = setTimeout(function() {
+ fetchIngredientParse(lines);
+ }, 400);
+ }
+ });
+
+ $(document).on('click', '.cooked-bulk-add-button', function(e) {
+ e.preventDefault();
+ var type = $(this).data('type');
+ openModal(type);
+ });
+
+ $overlay.on('click', '.cooked-bulk-add-close, .cooked-bulk-add-cancel', function(e) {
+ e.preventDefault();
+ closeModal();
+ });
+
+ $overlay.on('click', function(e) {
+ if ($(e.target).is($overlay)) {
+ closeModal();
+ }
+ });
+
+ $(document).on('keydown', function(e) {
+ if (e.key === 'Escape' && $overlay.is(':visible')) {
+ closeModal();
+ }
+ });
+
+ $previewList.on('change', 'input[type="checkbox"]', function() {
+ var $row = $(this).closest('.cooked-bulk-add-preview-row');
+ var isHeading = $(this).is(':checked');
+ $row.toggleClass('cooked-bulk-add-is-heading', isHeading);
+ });
+
+ $submitBtn.on('click', function(e) {
+ e.preventDefault();
+ if ($(this).attr('disabled')) return;
+
+ var type = $typeField.val();
+ var items = [];
+
+ if (type === 'ingredients') {
+ $previewList.find('.cooked-bulk-add-preview-row').each(function() {
+ var $row = $(this);
+ var isHeading = $row.find('input[type="checkbox"]').is(':checked');
+ var text = $row.find('.cooked-bulk-add-preview-text').val().trim();
+ if (!text) return;
+
+ if (isHeading) {
+ items.push({ text: text, heading: true });
+ } else {
+ items.push({
+ heading: false,
+ amount: $row.find('.cooked-bulk-add-parsed-amount').val().trim(),
+ measurement: $row.find('.cooked-bulk-add-parsed-unit').val().trim(),
+ name: $row.find('.cooked-bulk-add-parsed-name').val().trim() || text
+ });
+ }
+ });
+ } else {
+ $previewList.find('.cooked-bulk-add-preview-row').each(function() {
+ var $row = $(this);
+ var text = $row.find('.cooked-bulk-add-preview-text').val().trim();
+ var isHeading = $row.find('input[type="checkbox"]').is(':checked');
+ if (text) {
+ items.push({ text: text, heading: isHeading });
+ }
+ });
+ }
+
+ if (!items.length) return;
+
+ if (type === 'directions') {
+ cooked_bulk_add_directions(items);
+ closeModal();
+ } else {
+ cooked_bulk_add_ingredients_parsed(items);
+ closeModal();
+ }
+ });
+}
+
+/** Returns true if an ingredient row has no meaningful field values (heading or line fields). */
+function cooked_is_ingredient_block_empty($block) {
+ if ($block.hasClass('cooked-ingredient-heading')) {
+ return ($block.find('[data-ingredient-part="section_heading_name"]').val() || '').trim() === '';
+ }
+ var hasContent = false;
+ $block.find('[data-ingredient-part]').each(function() {
+ var part = jQuery(this).data('ingredient-part');
+ if (part === 'section_heading_element') {
+ return;
+ }
+ var $f = jQuery(this);
+ var v = $f.is('select') ? $f.val() : ($f.val() || '').trim();
+ if (v !== null && v !== '' && String(v).trim() !== '') {
+ hasContent = true;
+ return false;
+ }
+ });
+ return !hasContent;
+}
+
+/** Plain-text direction step content from TinyMCE or textarea (HTML stripped, NBSPs normalized). */
+function cooked_direction_block_content_text($block) {
+ var $ta = $block.find('textarea[data-direction-part="content"]');
+ if (!$ta.length) {
+ return '';
+ }
+ var id = $ta.attr('id');
+ var raw = '';
+ if (id && typeof tinymce !== 'undefined' && tinymce.get(id)) {
+ raw = tinymce.get(id).getContent() || '';
+ } else {
+ raw = $ta.val() || '';
+ }
+ return jQuery('').html(raw).text().replace(/\u00a0/g, ' ').trim();
+}
+
+/** Returns true if a direction row is empty (no heading text, image, or body content). */
+function cooked_is_direction_block_empty($block) {
+ if ($block.hasClass('cooked-direction-heading')) {
+ return ($block.find('[data-direction-part="section_heading_name"]').val() || '').trim() === '';
+ }
+ if (($block.find('input[data-direction-part="image"]').val() || '').trim() !== '') {
+ return false;
+ }
+ return cooked_direction_block_content_text($block) === '';
+}
+
+/** Removes ingredient rows that are empty before bulk-adding new items. */
+function cooked_bulk_remove_empty_ingredient_rows() {
+ jQuery('#cooked-ingredients-builder').children('.cooked-ingredient-block').each(function() {
+ var $b = jQuery(this);
+ if (cooked_is_ingredient_block_empty($b)) {
+ $b.remove();
+ }
+ });
+}
+
+/** Removes empty direction rows before bulk-adding, and removes WP editors when needed. */
+function cooked_bulk_remove_empty_direction_rows() {
+ var canRemoveWpEditor = !!(
+ cooked_admin_functions_js_vars.wp_editor_roles_allowed &&
+ typeof wp !== 'undefined' &&
+ wp.editor &&
+ typeof wp.editor.remove === 'function'
+ );
+
+ jQuery('#cooked-directions-builder').children('.cooked-direction-block').each(function() {
+ var $b = jQuery(this);
+ if (!cooked_is_direction_block_empty($b)) {
+ return;
+ }
+ if (canRemoveWpEditor) {
+ var $ta = $b.find('textarea[data-direction-part="content"]');
+ var fieldID = $ta.attr('id');
+ if (fieldID) {
+ wp.editor.remove(fieldID);
+ }
+ }
+ $b.remove();
+ });
+}
+
+/** Appends direction rows from bulk-add items (headings or plain steps) and resets the builder. */
+function cooked_bulk_add_directions(items) {
+ cooked_bulk_remove_empty_direction_rows();
+
+ var $_builder = jQuery('#cooked-directions-builder');
+ var $_parent = $_builder.parent();
+
+ for (var i = 0; i < items.length; i++) {
+ var item = items[i];
+
+ if (item.heading) {
+ var $heading = $_parent.find('.cooked-heading-template').clone()
+ .removeClass('cooked-template cooked-heading-template')
+ .addClass('cooked-direction-block cooked-direction-heading');
+ $heading.find('[data-direction-part="section_heading_name"]').val(item.text);
+ $_builder.append($heading);
+ } else {
+ var $direction = $_parent.find('.cooked-direction-template').clone()
+ .removeClass('cooked-template cooked-direction-template')
+ .addClass('cooked-direction-block');
+ $direction.find('[data-direction-part="content"]').val(item.text);
+ $_builder.append($direction);
+ }
+ }
+
+ cooked_reset_direction_builder();
+}
+
+/** Appends ingredient rows from bulk-add items (headings or amount/unit/name) and resets the builder. */
+function cooked_bulk_add_ingredients_parsed(items) {
+ cooked_bulk_remove_empty_ingredient_rows();
+
+ var $_builder = jQuery('#cooked-ingredients-builder');
+ var $_parent = $_builder.parent();
+
+ for (var i = 0; i < items.length; i++) {
+ var item = items[i];
+
+ if (item.heading) {
+ var $heading = $_parent.find('.cooked-heading-template').clone()
+ .removeClass('cooked-template cooked-heading-template')
+ .addClass('cooked-ingredient-block cooked-ingredient-heading');
+ $heading.find('[data-ingredient-part="section_heading_name"]').val(item.text);
+ $_builder.append($heading);
+ } else {
+ var $ingredient = $_parent.find('.cooked-ingredient-template').clone()
+ .removeClass('cooked-template cooked-ingredient-template')
+ .addClass('cooked-ingredient-block');
+
+ $ingredient.find('[data-ingredient-part="amount"]').val(item.amount || '');
+
+ if (item.measurement) {
+ $ingredient.find('[data-ingredient-part="measurement"]').val(item.measurement);
+ }
+
+ $ingredient.find('[data-ingredient-part="name"]').val(item.name || '');
+
+ $_builder.append($ingredient);
+ }
+ }
+
+ cooked_reset_ingredient_builder();
+}
diff --git a/assets/admin/js/cooked-functions.min.js b/assets/admin/js/cooked-functions.min.js
index 8981ee5..12e54b8 100644
--- a/assets/admin/js/cooked-functions.min.js
+++ b/assets/admin/js/cooked-functions.min.js
@@ -1 +1 @@
-var $_CookedConditionalTimeout=!1,cookedSortableTouchHandler=function(e){var t={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup"},o=e.target.closest(".cooked-icon-drag");o&&o.closest(".cooked-sortable")&&e.changedTouches&&e.changedTouches.length&&t[e.type]&&(o=e.changedTouches[0],e.preventDefault(),t=new MouseEvent(t[e.type],{bubbles:!0,cancelable:!0,view:window,detail:1,screenX:o.screenX,screenY:o.screenY,clientX:o.clientX,clientY:o.clientY,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null}),o.target.dispatchEvent(t))},cooked_recipe_update_counter=((p=>{p(document).ready(function(){var c,o,t,e,i,n,a,d,r,s=p(".cooked-color-field"),l=p("#cooked_recipe_settings").find("select"),u=p("#cooked-recipe-tabs"),_=(p("#cooked-settings-wrap"),p("#cooked_recipe_settings")),k=_.find("input#submit");$_CookedTooltips=p(".cooked-tooltip"),$_CookedConditionals=p(".cooked-conditional-hidden"),$_CookedSortable=p(".cooked-sortable"),$_CookedRecipeSaveDefault=p(".cooked-layout-save-default"),$_CookedShortcodeField=p(".cooked-shortcode-field"),$_CookedIngredientBuilder=p("#cooked-ingredients-builder"),$_CookedAutoNutritionButton=p(".cooked-auto-nutrition-button"),$_CookedDirectionBuilder=p("#cooked-directions-builder"),$_CookedRecipeGallery=p("#cooked-recipe-image-gallery"),$_CookedNutritionFactsTab=p("#cooked-recipe-tab-content-nutrition"),$_CookedSettingsPanel=p("#cooked-settings-panel"),$_CookedSettingsTabs=p("#cooked-settings-tabs"),s.length&&s.wpColorPicker(),$_CookedSortable.length&&(document.addEventListener("touchstart",cookedSortableTouchHandler,{passive:!1}),document.addEventListener("touchmove",cookedSortableTouchHandler,{passive:!1}),document.addEventListener("touchend",cookedSortableTouchHandler,{passive:!1}),$_CookedSortable.find(".cooked-icon-drag").length?$_CookedSortable.sortable({handle:".cooked-icon-drag",stop:function(e,t){t.item.closest("#cooked-directions-builder").length&&cooked_reset_direction_builder();var t=t.item.find("textarea"),o=!(!cooked_admin_functions_js_vars.wp_editor_roles_allowed||"undefined"==typeof wp||!wp.editor||"function"!=typeof wp.editor.remove||"function"!=typeof wp.editor.initialize);t.length&&o&&(o=t.attr("name"),t=t.attr("id"),wp.editor.remove(t),wp.editor.initialize(t,{tinymce:{wpautop:!1,toolbar1:"bold,italic,underline,blockquote,strikethrough,bullist,numlist,alignleft,aligncenter,alignright,undo,redo,wp_link_advanced,unlink,fullscreen",toolbar2:"",toolbar3:"",toolbar4:"",height:100,textarea_name:o,plugins:"link lists fullscreen wordpress wplink",setup:function(e){}},quicktags:!0,mediaButtons:!1}))}}):$_CookedSortable.sortable({stop:function(e,t){t.item.closest("#cooked-directions-builder").length&&cooked_reset_direction_builder()}})),$_CookedRecipeSaveDefault.length&&($_CookedRecipeSaveDefault.tooltipster({theme:["tooltipster-light","tooltipster-sideTip-cooked"],trigger:"click",animation:"grow",delay:0,speed:200,maxWidth:275,contentAsHTML:!0,interactive:!0,functionReady:function(r,e){p(".cooked-save-default-all").on("click",function(e){e.preventDefault();var t,o=p(this),e=o.data("nonce"),i=o.data("bulk-nonce"),n=o.parent(),a=confirm(cooked_admin_functions_js_vars.i18n_confirm_save_default_all),d=p("#_recipe_settings_content"),c=tinymce.get("_recipe_settings_content");t=null===c?d.val():c.getContent(),a&&!o.hasClass("disabled")&&(n.find(".button, .button-primary").addClass("disabled"),p.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_save_default",default_content:t,nonce:e},function(){p.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_get_recipe_count",nonce:i},function(e){o.removeClass("button-primary").addClass("button"),e&&e.success&&0
')}),$_CookedTooltips.length&&$_CookedTooltips.tooltipster({theme:["tooltipster-light","tooltipster-sideTip-cooked"],animation:"grow",delay:100,speed:200,maxWidth:275,contentAsHTML:!0,interactive:!0}),$_CookedShortcodeField.length&&$_CookedShortcodeField.on("click",function(e){p(this).select()}),$_CookedConditionals.length&&(c=[],$_CookedConditionals.each(function(){var e=p(this),t=p(this).data("condition"),o=p(this).data("value"),i=p("#"+t),o=!!o&&o.split(" "),n=e.is("li")||e.is("span")?"inline-block":"block";i.is(":checkbox")&&i.is(":checked")||i.is(":radio")&&i.is(":checked")||!(i.is(":checkbox")&&!i.is(":checked")||i.is(":radio")&&!i.is(":checked"))&&(!i.is(":checkbox")&&!o&&i.val()||!i.is(":checkbox")&&o&&-1
a").attr("href")).split("#"))[1],p(".cooked-settings-tab-content").hide(),p("#cooked-settings-tab-content-"+n).show(),l.on("click",function(e){p(".tab-content").hide();var t=p(this).find("a"),t=($_CookedSettingsTabs.find("li").removeClass("active"),p(this).addClass("active"),t.attr("href"));"migration"==(t=(t=t.split("#"))[1])?k.hide():k.show(),p(".cooked-settings-tab-content").hide(),p("#cooked-settings-tab-content-"+t).show(),p("#cooked-settings-panel").hasClass("stuck")?window.scrollTo(0,130):window.scrollTo(0,0)})),$_CookedIngredientBuilder.length&&(cooked_reset_ingredient_builder(),$_CookedIngredientBuilder.on("keydown",'input[data-ingredient-part="name"]',function(e){9!==e.keyCode&&13!==e.keyCode||p(this).parents(".cooked-ingredient-block").is(":last-child")&&(e.preventDefault(),p("#cooked-recipe-tab-content-ingredients").find(".cooked-add-ingredient-button").trigger("click"),$_CookedIngredientBuilder.find('.cooked-ingredient-block:last-child input[data-ingredient-part="amount"]').focus())}),$_CookedIngredientBuilder.parent().on("click",".cooked-show-substitution",function(e){e.preventDefault();e=p(this).parent();e.hasClass("cooked-expanded")?e.removeClass("cooked-expanded"):(e.addClass("cooked-expanded"),e.find('input[data-ingredient-part="sub_amount"]').focus())}),$_CookedIngredientBuilder.on("keyup change",'input[data-ingredient-part="sub_amount"], input[data-ingredient-part="sub_name"], select[data-ingredient-part="sub_measurement"]',function(e){var t=p(this).parents(".recipe-setting-block"),o=t.find('input[data-ingredient-part="sub_name"]').val();o&&o.trim()?t.addClass("cooked-has-substitution"):t.removeClass("cooked-has-substitution")}),$_CookedAutoNutritionButton.length&&$_CookedIngredientBuilder.on("change",'input[data-ingredient-part="name"]',function(e){var t=!1;$_CookedIngredientBuilder.find('input[data-ingredient-part="name"]').each(function(){if(""!=p(this).val())return!(t=!0)}),t?$_CookedAutoNutritionButton.prop("disabled",!1):$_CookedAutoNutritionButton.prop("disabled",!0)}),$_CookedIngredientBuilder.on("keyup",'input[data-ingredient-part="url"]',function(e){var t=p(this).val(),o=p(this).parents(".recipe-setting-block");t?o.addClass("cooked-has-url"):o.removeClass("cooked-has-url")}),$_CookedIngredientBuilder.parent().on("click",".cooked-add-ingredient-button",function(e){e.preventDefault();e=$_CookedIngredientBuilder.parent().find(".cooked-ingredient-template").clone().removeClass("cooked-template cooked-ingredient-template").addClass("cooked-ingredient-block");$_CookedIngredientBuilder.append(e),cooked_reset_ingredient_builder()}),$_CookedIngredientBuilder.parent().on("click",".cooked-add-heading-button",function(e){e.preventDefault();e=$_CookedIngredientBuilder.parent().find(".cooked-heading-template").clone().removeClass("cooked-template cooked-heading-template").addClass("cooked-ingredient-block cooked-ingredient-heading");$_CookedIngredientBuilder.append(e),cooked_reset_ingredient_builder()}),$_CookedIngredientBuilder.parent().on("click",".cooked-delete-ingredient",function(e){e.preventDefault(),p(this).parent().remove(),cooked_reset_ingredient_builder()})),$_CookedDirectionBuilder.length&&(cooked_reset_direction_builder(),$_CookedDirectionBuilder.parent().on("click",".cooked-show-heading-element",function(e){e.preventDefault();e=p(this).parent();e.hasClass("cooked-expanded")?e.removeClass("cooked-expanded"):(e.addClass("cooked-expanded"),e.find('input[data-direction-part="section_heading_element"]').focus())}),$_CookedDirectionBuilder.parent().on("click",".cooked-add-direction-button",function(e){e.preventDefault();e=$_CookedDirectionBuilder.parent().find(".cooked-direction-template").clone().removeClass("cooked-template cooked-direction-template").addClass("cooked-direction-block");$_CookedDirectionBuilder.append(e),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".cooked-add-heading-button",function(e){e.preventDefault();e=$_CookedDirectionBuilder.parent().find(".cooked-heading-template").clone().removeClass("cooked-template cooked-heading-template").addClass("cooked-direction-block cooked-direction-heading");$_CookedDirectionBuilder.append(e),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".cooked-delete-direction",function(e){e.preventDefault();var t,e=p(this).parent();cooked_admin_functions_js_vars.wp_editor_roles_allowed&&"undefined"!=typeof wp&&wp.editor&&"function"==typeof wp.editor.remove&&(t=e.find('textarea[data-direction-part="content"]').attr("id"))&&wp.editor.remove(t),e.remove(),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".remove-image-button",function(e){e.preventDefault();e=p(this).parent();e.removeClass("cooked-has-image"),e.find("img").attr("src","").removeAttr("srcset").removeAttr("sizes"),e.find('input[data-direction-part="image"]').val(""),cooked_reset_direction_builder()}),p("body").on("click",".cooked-direction-img-placeholder, .cooked-direction-img",function(e){e.preventDefault(),p(this).parent().find(".direction-image-button").trigger("click")}),p("body").on("click",".direction-image-button",function(e){var t=p(this);d=t.data("id"),e.preventDefault(),a||(a=wp.media.frames.direction_image_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_image_title,button:{text:cooked_admin_functions_js_vars.i18n_image_button},library:{type:"image"}})).on("select",function(){var e=a.state().get("selection").first().toJSON();p("#direction-"+d+"-image-src").attr("src",e.sizes.thumbnail.url).removeAttr("srcset").removeAttr("sizes").parent().addClass("cooked-has-image"),p('input[name="_recipe_settings[directions]['+d+'][image]"]').val(e.id),p('.direction-image-button[data-id="'+d+'"]').prop("value",cooked_admin_functions_js_vars.i18n_image_change)}),a.open()})),$_CookedRecipeGallery.length&&(cooked_init_gallery_sorting(),p("body").on("click",".cooked-gallery-add-button",function(e){p(this);e.preventDefault(),r||(r=wp.media.frames.gallery_images_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_gallery_image_title,button:{text:cooked_admin_functions_js_vars.i18n_gallery_image_title},library:{type:"image"},multiple:!0})).on("select",function(){var e,t,o,i=r.state().get("selection").toJSON();for(e in i)i.hasOwnProperty(e)&&(o=(t=i[e]).sizes.thumbnail.url,p("#cooked-recipe-image-gallery").append('
'+t.title+' '));cooked_init_gallery_sorting()}),r.open()}),p("body").on("click",".cooked-recipe-gallery-item img",function(e){e.preventDefault(),p(this).parent().find(".cooked-gallery-edit-button").trigger("click")}),p("body").on("click",".cooked-gallery-edit-button",function(e){var n=p(this),t=n.data("attachment-id"),a=(e.preventDefault(),wp.media.frames.gallery_images_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_edit_image_title,button:{text:cooked_admin_functions_js_vars.i18n_edit_image_button},library:{type:"image"},multiple:!1}));a.on("open",function(){var e=a.state().get("selection");(attachment=wp.media.attachment(t)).fetch(),e.add(attachment?[attachment]:[])}),a.open(),a.on("select",function(){var e,t,o,i=a.state().get("selection").toJSON();for(e in i)i.hasOwnProperty(e)&&(o=(t=i[e]).sizes.thumbnail.url,n.parent().replaceWith('
'+t.title+' '));cooked_init_gallery_sorting()})}),$_CookedRecipeGallery.on("click",".remove-image-button",function(e){var t=p(this);d=t.data("id"),e.preventDefault(),d?(p("#direction-"+d+"-image-src").parent().removeClass("cooked-has-image").prop("src",!1),p('input[name="_recipe_settings[directions]['+d+'][image]"]').val(""),p('.direction-image-button[data-id="'+d+'"]').prop("value",cooked_admin_functions_js_vars.i18n_image_title)):t.parent().remove()})),$_CookedNutritionFactsTab.length&&(init_nutrition_facts($_CookedNutritionFactsTab),$_CookedNutritionFactsTab.on("keyup","input",function(e){init_nutrition_facts($_CookedNutritionFactsTab)})),p("#cooked-prep-time").length&&p("#cooked-prep-time,#cooked-cook-time").on("change",function(){cooked_updateTotalTimeValue(parseInt(p("#cooked-prep-time").val()),parseInt(p("#cooked-cook-time").val()))})})})(jQuery),0),cooked_bulk_per_page=20;function cooked_set_default_template(o,i,n,a,d){var c,r,s;i<=0||(c=jQuery("#cooked-template-progress"),r=c.find(".cooked-progress-bar"),s=jQuery("#cooked-template-progress-text"),c.hasClass("cooked-active")||(c.addClass("cooked-active"),s.addClass("cooked-active"),r.css({width:"0%"}),d.reposition()),jQuery.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_save_default_bulk",page:o,default_content:n,nonce:a},function(e){var t;e&&e.success&&(cooked_recipe_update_counter=Math.min((o+1)*cooked_bulk_per_page,i),t=Math.round(cooked_recipe_update_counter/i*100),r.css({width:t+"%"}),s.text(cooked_recipe_update_counter+" / "+i),e.data.has_more?cooked_set_default_template(o+1,i,n,a,d):(jQuery(".cooked-save-default-all").text(cooked_admin_functions_js_vars.i18n_applied),r.css({width:"100%"}),s.text(i+" / "+i),c.removeClass("cooked-active"),s.removeClass("cooked-active").text(""),d.reposition()))},"json"))}function cooked_updateTotalTimeValue(e,t){jQuery("#cooked-total-time").val(e+t)}function cooked_init_gallery_sorting(){jQuery("#cooked-recipe-image-gallery").sortable()}function init_nutrition_facts(e){e.find("input").each(function(){var e,t=jQuery(this),o=t.attr("id"),t=t.val(),i=jQuery('.cooked-nut-percent[data-labeltype="'+o+'"]').length;jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').length&&(t?(jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').text(t),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("li").eq(0).show(),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("p").eq(0).show(),i&&(e=(i=jQuery('.cooked-nut-percent[data-labeltype="'+o+'"]')).data("pdv"))&&(thisPercent=Math.ceil(t/e*100),i.text(thisPercent))):(jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').text("___"),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("li").eq(0).hide(),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("p").eq(0).hide()))})}function cooked_reset_ingredient_builder(){var e=jQuery(".cooked-ingredient-block"),t=0,i=0,o=!1;0{_(document).ready(function(){var c,o,t,e,i,n,d,a,r,l=_(".cooked-color-field"),s=_("#cooked_recipe_settings").find("select"),u=_("#cooked-recipe-tabs"),k=(_("#cooked-settings-wrap"),_("#cooked_recipe_settings")),p=k.find("input#submit");$_CookedTooltips=_(".cooked-tooltip"),$_CookedConditionals=_(".cooked-conditional-hidden"),$_CookedSortable=_(".cooked-sortable"),$_CookedRecipeSaveDefault=_(".cooked-layout-save-default"),$_CookedShortcodeField=_(".cooked-shortcode-field"),$_CookedIngredientBuilder=_("#cooked-ingredients-builder"),$_CookedAutoNutritionButton=_(".cooked-auto-nutrition-button"),$_CookedDirectionBuilder=_("#cooked-directions-builder"),$_CookedRecipeGallery=_("#cooked-recipe-image-gallery"),$_CookedNutritionFactsTab=_("#cooked-recipe-tab-content-nutrition"),$_CookedSettingsPanel=_("#cooked-settings-panel"),$_CookedSettingsTabs=_("#cooked-settings-tabs"),l.length&&l.wpColorPicker(),$_CookedSortable.length&&(document.addEventListener("touchstart",cookedSortableTouchHandler,{passive:!1}),document.addEventListener("touchmove",cookedSortableTouchHandler,{passive:!1}),document.addEventListener("touchend",cookedSortableTouchHandler,{passive:!1}),$_CookedSortable.find(".cooked-icon-drag").length?$_CookedSortable.sortable({handle:".cooked-icon-drag",stop:function(e,t){t.item.closest("#cooked-directions-builder").length&&cooked_reset_direction_builder();var t=t.item.find("textarea"),o=!(!cooked_admin_functions_js_vars.wp_editor_roles_allowed||"undefined"==typeof wp||!wp.editor||"function"!=typeof wp.editor.remove||"function"!=typeof wp.editor.initialize);t.length&&o&&(o=t.attr("name"),t=t.attr("id"),wp.editor.remove(t),wp.editor.initialize(t,{tinymce:{wpautop:!1,toolbar1:"bold,italic,underline,blockquote,strikethrough,bullist,numlist,alignleft,aligncenter,alignright,undo,redo,wp_link_advanced,unlink,fullscreen",toolbar2:"",toolbar3:"",toolbar4:"",height:100,textarea_name:o,plugins:"link lists fullscreen wordpress wplink",setup:function(e){}},quicktags:!0,mediaButtons:!1}))}}):$_CookedSortable.sortable({stop:function(e,t){t.item.closest("#cooked-directions-builder").length&&cooked_reset_direction_builder()}})),$_CookedRecipeSaveDefault.length&&($_CookedRecipeSaveDefault.tooltipster({theme:["tooltipster-light","tooltipster-sideTip-cooked"],trigger:"click",animation:"grow",delay:0,speed:200,maxWidth:275,contentAsHTML:!0,interactive:!0,functionReady:function(r,e){_(".cooked-save-default-all").on("click",function(e){e.preventDefault();var t,o=_(this),e=o.data("nonce"),i=o.data("bulk-nonce"),n=o.parent(),d=confirm(cooked_admin_functions_js_vars.i18n_confirm_save_default_all),a=_("#_recipe_settings_content"),c=tinymce.get("_recipe_settings_content");t=null===c?a.val():c.getContent(),d&&!o.hasClass("disabled")&&(n.find(".button, .button-primary").addClass("disabled"),_.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_save_default",default_content:t,nonce:e},function(){_.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_get_recipe_count",nonce:i},function(e){o.removeClass("button-primary").addClass("button"),e&&e.success&&0')}),$_CookedTooltips.length&&$_CookedTooltips.tooltipster({theme:["tooltipster-light","tooltipster-sideTip-cooked"],animation:"grow",delay:100,speed:200,maxWidth:275,contentAsHTML:!0,interactive:!0}),$_CookedShortcodeField.length&&$_CookedShortcodeField.on("click",function(e){_(this).select()}),$_CookedConditionals.length&&(c=[],$_CookedConditionals.each(function(){var e=_(this),t=_(this).data("condition"),o=_(this).data("value"),i=_("#"+t),o=!!o&&o.split(" "),n=e.is("li")||e.is("span")?"inline-block":"block";i.is(":checkbox")&&i.is(":checked")||i.is(":radio")&&i.is(":checked")||!(i.is(":checkbox")&&!i.is(":checked")||i.is(":radio")&&!i.is(":checked"))&&(!i.is(":checkbox")&&!o&&i.val()||!i.is(":checkbox")&&o&&-1<_.inArray(i.val(),o)||!i.is(":radio")&&!o&&i.val()||!i.is(":radio")&&o&&-1<_.inArray(i.val(),o))?e.css({display:n}):e.hide(),-1==_.inArray(t,c)&&c.push(t);for(var d=c.length,a=0;a a").attr("href")).split("#"))[1],_(".cooked-settings-tab-content").hide(),_("#cooked-settings-tab-content-"+n).show(),s.on("click",function(e){_(".tab-content").hide();var t=_(this).find("a"),t=($_CookedSettingsTabs.find("li").removeClass("active"),_(this).addClass("active"),t.attr("href"));"migration"==(t=(t=t.split("#"))[1])?p.hide():p.show(),_(".cooked-settings-tab-content").hide(),_("#cooked-settings-tab-content-"+t).show(),_("#cooked-settings-panel").hasClass("stuck")?window.scrollTo(0,130):window.scrollTo(0,0)})),$_CookedIngredientBuilder.length&&(cooked_reset_ingredient_builder(),$_CookedIngredientBuilder.on("keydown",'input[data-ingredient-part="name"]',function(e){9!==e.keyCode&&13!==e.keyCode||_(this).parents(".cooked-ingredient-block").is(":last-child")&&(e.preventDefault(),_("#cooked-recipe-tab-content-ingredients").find(".cooked-add-ingredient-button").trigger("click"),$_CookedIngredientBuilder.find('.cooked-ingredient-block:last-child input[data-ingredient-part="amount"]').focus())}),$_CookedIngredientBuilder.parent().on("click",".cooked-show-substitution",function(e){e.preventDefault();e=_(this).parent();e.hasClass("cooked-expanded")?e.removeClass("cooked-expanded"):(e.addClass("cooked-expanded"),e.find('input[data-ingredient-part="sub_amount"]').focus())}),$_CookedIngredientBuilder.on("keyup change",'input[data-ingredient-part="sub_amount"], input[data-ingredient-part="sub_name"], select[data-ingredient-part="sub_measurement"]',function(e){var t=_(this).parents(".recipe-setting-block"),o=t.find('input[data-ingredient-part="sub_name"]').val();o&&o.trim()?t.addClass("cooked-has-substitution"):t.removeClass("cooked-has-substitution")}),$_CookedAutoNutritionButton.length&&$_CookedIngredientBuilder.on("change",'input[data-ingredient-part="name"]',function(e){var t=!1;$_CookedIngredientBuilder.find('input[data-ingredient-part="name"]').each(function(){if(""!=_(this).val())return!(t=!0)}),t?$_CookedAutoNutritionButton.prop("disabled",!1):$_CookedAutoNutritionButton.prop("disabled",!0)}),$_CookedIngredientBuilder.on("keyup",'input[data-ingredient-part="url"]',function(e){var t=_(this).val(),o=_(this).parents(".recipe-setting-block");t?o.addClass("cooked-has-url"):o.removeClass("cooked-has-url")}),$_CookedIngredientBuilder.parent().on("click",".cooked-add-ingredient-button",function(e){e.preventDefault();e=$_CookedIngredientBuilder.parent().find(".cooked-ingredient-template").clone().removeClass("cooked-template cooked-ingredient-template").addClass("cooked-ingredient-block");$_CookedIngredientBuilder.append(e),cooked_reset_ingredient_builder()}),$_CookedIngredientBuilder.parent().on("click",".cooked-add-heading-button",function(e){e.preventDefault();e=$_CookedIngredientBuilder.parent().find(".cooked-heading-template").clone().removeClass("cooked-template cooked-heading-template").addClass("cooked-ingredient-block cooked-ingredient-heading");$_CookedIngredientBuilder.append(e),cooked_reset_ingredient_builder()}),$_CookedIngredientBuilder.parent().on("click",".cooked-delete-ingredient",function(e){e.preventDefault(),_(this).parent().remove(),cooked_reset_ingredient_builder()})),$_CookedDirectionBuilder.length&&(cooked_reset_direction_builder(),$_CookedDirectionBuilder.parent().on("click",".cooked-show-heading-element",function(e){e.preventDefault();e=_(this).parent();e.hasClass("cooked-expanded")?e.removeClass("cooked-expanded"):(e.addClass("cooked-expanded"),e.find('input[data-direction-part="section_heading_element"]').focus())}),$_CookedDirectionBuilder.parent().on("click",".cooked-add-direction-button",function(e){e.preventDefault();e=$_CookedDirectionBuilder.parent().find(".cooked-direction-template").clone().removeClass("cooked-template cooked-direction-template").addClass("cooked-direction-block");$_CookedDirectionBuilder.append(e),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".cooked-add-heading-button",function(e){e.preventDefault();e=$_CookedDirectionBuilder.parent().find(".cooked-heading-template").clone().removeClass("cooked-template cooked-heading-template").addClass("cooked-direction-block cooked-direction-heading");$_CookedDirectionBuilder.append(e),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".cooked-delete-direction",function(e){e.preventDefault();var t,e=_(this).parent();cooked_admin_functions_js_vars.wp_editor_roles_allowed&&"undefined"!=typeof wp&&wp.editor&&"function"==typeof wp.editor.remove&&(t=e.find('textarea[data-direction-part="content"]').attr("id"))&&wp.editor.remove(t),e.remove(),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".remove-image-button",function(e){e.preventDefault();e=_(this).parent();e.removeClass("cooked-has-image"),e.find("img").attr("src","").removeAttr("srcset").removeAttr("sizes"),e.find('input[data-direction-part="image"]').val(""),cooked_reset_direction_builder()}),_("body").on("click",".cooked-direction-img-placeholder, .cooked-direction-img",function(e){e.preventDefault(),_(this).parent().find(".direction-image-button").trigger("click")}),_("body").on("click",".direction-image-button",function(e){var t=_(this);a=t.data("id"),e.preventDefault(),d||(d=wp.media.frames.direction_image_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_image_title,button:{text:cooked_admin_functions_js_vars.i18n_image_button},library:{type:"image"}})).on("select",function(){var e=d.state().get("selection").first().toJSON();_("#direction-"+a+"-image-src").attr("src",e.sizes.thumbnail.url).removeAttr("srcset").removeAttr("sizes").parent().addClass("cooked-has-image"),_('input[name="_recipe_settings[directions]['+a+'][image]"]').val(e.id),_('.direction-image-button[data-id="'+a+'"]').prop("value",cooked_admin_functions_js_vars.i18n_image_change)}),d.open()})),cooked_init_bulk_add(_),$_CookedRecipeGallery.length&&(cooked_init_gallery_sorting(),_("body").on("click",".cooked-gallery-add-button",function(e){_(this);e.preventDefault(),r||(r=wp.media.frames.gallery_images_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_gallery_image_title,button:{text:cooked_admin_functions_js_vars.i18n_gallery_image_title},library:{type:"image"},multiple:!0})).on("select",function(){var e,t,o,i=r.state().get("selection").toJSON();for(e in i)i.hasOwnProperty(e)&&(o=(t=i[e]).sizes.thumbnail.url,_("#cooked-recipe-image-gallery").append('
'+t.title+' '));cooked_init_gallery_sorting()}),r.open()}),_("body").on("click",".cooked-recipe-gallery-item img",function(e){e.preventDefault(),_(this).parent().find(".cooked-gallery-edit-button").trigger("click")}),_("body").on("click",".cooked-gallery-edit-button",function(e){var n=_(this),t=n.data("attachment-id"),d=(e.preventDefault(),wp.media.frames.gallery_images_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_edit_image_title,button:{text:cooked_admin_functions_js_vars.i18n_edit_image_button},library:{type:"image"},multiple:!1}));d.on("open",function(){var e=d.state().get("selection");(attachment=wp.media.attachment(t)).fetch(),e.add(attachment?[attachment]:[])}),d.open(),d.on("select",function(){var e,t,o,i=d.state().get("selection").toJSON();for(e in i)i.hasOwnProperty(e)&&(o=(t=i[e]).sizes.thumbnail.url,n.parent().replaceWith('
'+t.title+' '));cooked_init_gallery_sorting()})}),$_CookedRecipeGallery.on("click",".remove-image-button",function(e){var t=_(this);a=t.data("id"),e.preventDefault(),a?(_("#direction-"+a+"-image-src").parent().removeClass("cooked-has-image").prop("src",!1),_('input[name="_recipe_settings[directions]['+a+'][image]"]').val(""),_('.direction-image-button[data-id="'+a+'"]').prop("value",cooked_admin_functions_js_vars.i18n_image_title)):t.parent().remove()})),$_CookedNutritionFactsTab.length&&(init_nutrition_facts($_CookedNutritionFactsTab),$_CookedNutritionFactsTab.on("keyup","input",function(e){init_nutrition_facts($_CookedNutritionFactsTab)})),_("#cooked-prep-time").length&&_("#cooked-prep-time,#cooked-cook-time").on("change",function(){cooked_updateTotalTimeValue(parseInt(_("#cooked-prep-time").val()),parseInt(_("#cooked-cook-time").val()))})})})(jQuery),0),cooked_bulk_per_page=20;function cooked_set_default_template(o,i,n,d,a){var c,r,l;i<=0||(c=jQuery("#cooked-template-progress"),r=c.find(".cooked-progress-bar"),l=jQuery("#cooked-template-progress-text"),c.hasClass("cooked-active")||(c.addClass("cooked-active"),l.addClass("cooked-active"),r.css({width:"0%"}),a.reposition()),jQuery.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_save_default_bulk",page:o,default_content:n,nonce:d},function(e){var t;e&&e.success&&(cooked_recipe_update_counter=Math.min((o+1)*cooked_bulk_per_page,i),t=Math.round(cooked_recipe_update_counter/i*100),r.css({width:t+"%"}),l.text(cooked_recipe_update_counter+" / "+i),e.data.has_more?cooked_set_default_template(o+1,i,n,d,a):(jQuery(".cooked-save-default-all").text(cooked_admin_functions_js_vars.i18n_applied),r.css({width:"100%"}),l.text(i+" / "+i),c.removeClass("cooked-active"),l.removeClass("cooked-active").text(""),a.reposition()))},"json"))}function cooked_updateTotalTimeValue(e,t){jQuery("#cooked-total-time").val(e+t)}function cooked_init_gallery_sorting(){jQuery("#cooked-recipe-image-gallery").sortable()}function init_nutrition_facts(e){e.find("input").each(function(){var e,t=jQuery(this),o=t.attr("id"),t=t.val(),i=jQuery('.cooked-nut-percent[data-labeltype="'+o+'"]').length;jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').length&&(t?(jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').text(t),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("li").eq(0).show(),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("p").eq(0).show(),i&&(e=(i=jQuery('.cooked-nut-percent[data-labeltype="'+o+'"]')).data("pdv"))&&(thisPercent=Math.ceil(t/e*100),i.text(thisPercent))):(jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').text("___"),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("li").eq(0).hide(),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("p").eq(0).hide()))})}function cooked_reset_ingredient_builder(){var e=jQuery(".cooked-ingredient-block"),t=0,i=0,o=!1;0").text(e).html()}function f(e,t){if(u.empty(),e.length){s.attr("data-bulk-type","ingredients"),s.show(),k.removeAttr("disabled"),u.find(".cooked-bulk-add-preview-header").length||u.prepend('");for(var o=0;o '),d=l('"),a=l(''),c=l('').text(_.i18n_bulk_add_heading_line_label),r=l('').val(e[o]),c=(a.append(c).append(r),l('')),r=l(''),i=l('');n.append(d).append(a).append(c).append(r).append(i),u.append(n)}}else s.attr("data-bulk-type",""),s.hide(),k.attr("disabled","disabled")}i.length&&(t=l("#cooked-bulk-add-textarea"),s=l("#cooked-bulk-add-preview"),u=l("#cooked-bulk-add-preview-list"),o=l("#cooked-bulk-add-title"),r=l("#cooked-bulk-add-type"),k=i.find(".cooked-bulk-add-submit"),p=i.find(".cooked-bulk-add-spinner"),_=cooked_admin_functions_js_vars,m=null,g="",t.on("input",function(){var e=r.val(),o=(e=>{for(var t=e.split(/[\r\n]+/),o=[],i=0;i'),a=l('"),c=l('');d.append(a).append(c),u.append(d)}}else s.attr("data-bulk-type",""),s.hide(),k.attr("disabled","disabled")}else t!==g&&(g=t,f(o,null),m&&clearTimeout(m),m=setTimeout(function(){var t;(t=o).length?(p.show().css("visibility","visible"),l.post(_.ajax_url,{action:"cooked_parse_bulk_ingredients",nonce:_.cooked_bulk_add_nonce,lines:t},function(e){p.hide();e=e.success&&e.data&&e.data.parsed?e.data.parsed:null;f(t,e)}).fail(function(){p.hide(),f(t,null)})):f([],null)},400))}),l(document).on("click",".cooked-bulk-add-button",function(e){e.preventDefault();var e=l(this).data("type");e=e,r.val(e),t.val(""),u.empty(),s.attr("data-bulk-type",""),s.hide(),k.attr("disabled","disabled"),p.hide(),g="","ingredients"===e?(o.text(_.i18n_bulk_add_ingredients),t.attr("placeholder",_.i18n_bulk_add_placeholder_ingredients),k.text(_.i18n_bulk_add_submit_ingredients)):(o.text(_.i18n_bulk_add_directions),t.attr("placeholder",_.i18n_bulk_add_placeholder_directions),k.text(_.i18n_bulk_add_submit_directions)),i.show(),t.focus()}),i.on("click",".cooked-bulk-add-close, .cooked-bulk-add-cancel",function(e){e.preventDefault(),n()}),i.on("click",function(e){l(e.target).is(i)&&n()}),l(document).on("keydown",function(e){"Escape"===e.key&&i.is(":visible")&&n()}),u.on("change",'input[type="checkbox"]',function(){var e=l(this).closest(".cooked-bulk-add-preview-row"),t=l(this).is(":checked");e.toggleClass("cooked-bulk-add-is-heading",t)}),k.on("click",function(e){var i;e.preventDefault(),l(this).attr("disabled")||(e=r.val(),i=[],"ingredients"===e?u.find(".cooked-bulk-add-preview-row").each(function(){var e=l(this),t=e.find('input[type="checkbox"]').is(":checked"),o=e.find(".cooked-bulk-add-preview-text").val().trim();o&&i.push(t?{text:o,heading:!0}:{heading:!1,amount:e.find(".cooked-bulk-add-parsed-amount").val().trim(),measurement:e.find(".cooked-bulk-add-parsed-unit").val().trim(),name:e.find(".cooked-bulk-add-parsed-name").val().trim()||o})}):u.find(".cooked-bulk-add-preview-row").each(function(){var e=l(this),t=e.find(".cooked-bulk-add-preview-text").val().trim(),e=e.find('input[type="checkbox"]').is(":checked");t&&i.push({text:t,heading:e})}),i.length&&(("directions"===e?cooked_bulk_add_directions:cooked_bulk_add_ingredients_parsed)(i),n()))}))}function cooked_is_ingredient_block_empty(e){var t;return e.hasClass("cooked-ingredient-heading")?""===(e.find('[data-ingredient-part="section_heading_name"]').val()||"").trim():(t=!1,e.find("[data-ingredient-part]").each(function(){var e;return"section_heading_element"!==jQuery(this).data("ingredient-part")&&null!==(e=(e=jQuery(this)).is("select")?e.val():(e.val()||"").trim())&&""!==e&&""!==String(e).trim()?!(t=!0):void 0}),!t)}function cooked_direction_block_content_text(e){var t,o,e=e.find('textarea[data-direction-part="content"]');return e.length?(o="",o=(t=e.attr("id"))&&"undefined"!=typeof tinymce&&tinymce.get(t)?tinymce.get(t).getContent()||"":e.val()||"",jQuery("").html(o).text().replace(/\u00a0/g," ").trim()):""}function cooked_is_direction_block_empty(e){return e.hasClass("cooked-direction-heading")?""===(e.find('[data-direction-part="section_heading_name"]').val()||"").trim():""===(e.find('input[data-direction-part="image"]').val()||"").trim()&&""===cooked_direction_block_content_text(e)}function cooked_bulk_remove_empty_ingredient_rows(){jQuery("#cooked-ingredients-builder").children(".cooked-ingredient-block").each(function(){var e=jQuery(this);cooked_is_ingredient_block_empty(e)&&e.remove()})}function cooked_bulk_remove_empty_direction_rows(){var o=!(!cooked_admin_functions_js_vars.wp_editor_roles_allowed||"undefined"==typeof wp||!wp.editor||"function"!=typeof wp.editor.remove);jQuery("#cooked-directions-builder").children(".cooked-direction-block").each(function(){var e,t=jQuery(this);cooked_is_direction_block_empty(t)&&(o&&(e=t.find('textarea[data-direction-part="content"]').attr("id"))&&wp.editor.remove(e),t.remove())})}function cooked_bulk_add_directions(e){cooked_bulk_remove_empty_direction_rows();for(var t=jQuery("#cooked-directions-builder"),o=t.parent(),i=0;i
0) {
- cooked_migrate_recipes(json_recipe_ids, total_recipes);
- }
- }
- }
+ function (json_recipe_ids) {
+ if (json_recipe_ids) {
+ var recipe_ids = JSON.parse(json_recipe_ids),
+ total_recipes = Object.keys(recipe_ids).length;
+
+ if (total_recipes > 0) {
+ cooked_migrate_recipes(json_recipe_ids, total_recipes);
+ }
+ }
+ }
);
- }
+ }
});
}
// Import Button Exists?
- if ($_CookedImportButton.length) {
- $_CookedImportButton.on('click', function(e) {
- e.preventDefault();
+ if ($_CookedImportButton.length) {
+ $_CookedImportButton.on('click', function(e) {
+ e.preventDefault();
- var thisButton = $(this),
+ var thisButton = $(this),
import_type = thisButton.data('import-type'),
- confirm_import = confirm(cooked_migration_js_vars.i18n_confirm_import_recipes);
+ confirm_import = confirm(cooked_migration_js_vars.i18n_confirm_import_recipes);
- if (confirm_import && !thisButton.hasClass('disabled')) {
- thisButton.addClass('disabled').attr('disabled', true);
- thisButton.hide();
+ if (confirm_import && !thisButton.hasClass('disabled')) {
+ thisButton.addClass('disabled').attr('disabled', true);
+ thisButton.hide();
- var ajax__bulk_import_recipes = $.post(
- cooked_migration_js_vars.ajax_url,
- {
+ var ajax__bulk_import_recipes = $.post(
+ cooked_migration_js_vars.ajax_url,
+ {
action: 'cooked_get_import_ids',
import_type: import_type
},
- function (json_recipe_ids) {
- if (json_recipe_ids) {
- var recipe_ids = JSON.parse(json_recipe_ids),
- total_recipes = Object.keys(recipe_ids).length;
-
- if (total_recipes > 0) {
- cooked_import_recipes(json_recipe_ids, total_recipes, import_type);
- }
- } else {
+ function (json_recipe_ids) {
+ if (json_recipe_ids) {
+ var recipe_ids = JSON.parse(json_recipe_ids),
+ total_recipes = Object.keys(recipe_ids).length;
+
+ if (total_recipes > 0) {
+ cooked_import_recipes(json_recipe_ids, total_recipes, import_type);
+ }
+ } else {
console.log(cooked_migration_js_vars.i18n_something_wrong);
thisButton.addClass('disabled').attr('disabled', false);
- thisButton.show();
+ thisButton.show();
}
- },
+ },
);
- }
+ }
});
}
@@ -242,20 +242,20 @@ var cooked_recipe_migrate_counter = 0;
var progressIterations = 0;
function cooked_migrate_recipes(recipe_ids, total_recipes ) {
- var temp_counter = 0,
- total_counter = 0,
- progress_percent = 0;
-
- if (total_recipes > 0) {
- var progress = jQuery( '#cooked-migration-progress' );
- var progress_bar = progress.find( '.cooked-progress-bar' );
- var progress_text = jQuery( '#cooked-migration-progress-text' );
-
- if ( !progress.hasClass('cooked-active') ) {
- progress.addClass('cooked-active');
- progress_text.addClass('cooked-active');
- progress_bar.css( { "width" : "0%" } );
- }
+ var temp_counter = 0,
+ total_counter = 0,
+ progress_percent = 0;
+
+ if (total_recipes > 0) {
+ var progress = jQuery( '#cooked-migration-progress' );
+ var progress_bar = progress.find( '.cooked-progress-bar' );
+ var progress_text = jQuery( '#cooked-migration-progress-text' );
+
+ if ( !progress.hasClass('cooked-active') ) {
+ progress.addClass('cooked-active');
+ progress_text.addClass('cooked-active');
+ progress_bar.css( { "width" : "0%" } );
+ }
var this_recipe_ids = JSON.parse( recipe_ids ),
this_total_recipe_ids = Object.keys(this_recipe_ids).length;
@@ -263,18 +263,18 @@ function cooked_migrate_recipes(recipe_ids, total_recipes ) {
var formattedTotal = total_recipes;
formattedTotal.toLocaleString();
- var ajax__bulk_migrate_recipes = jQuery.post(
+ var ajax__bulk_migrate_recipes = jQuery.post(
cooked_migration_js_vars.ajax_url,
{
action: 'cooked_migrate_recipes',
recipe_ids: recipe_ids
},
function( new_recipe_ids ) {
- if ( new_recipe_ids && new_recipe_ids != 'false' && new_recipe_ids != false ){
- var leftover_recipe_ids = JSON.parse( new_recipe_ids ),
- leftover_recipes = Object.keys(leftover_recipe_ids).length;
+ if ( new_recipe_ids && new_recipe_ids != 'false' && new_recipe_ids != false ){
+ var leftover_recipe_ids = JSON.parse( new_recipe_ids ),
+ leftover_recipes = Object.keys(leftover_recipe_ids).length;
- cooked_recipe_migrate_counter = total_recipes - leftover_recipes;
+ cooked_recipe_migrate_counter = total_recipes - leftover_recipes;
var formattedTotal = total_recipes;
formattedTotal.toLocaleString();
@@ -282,9 +282,9 @@ function cooked_migrate_recipes(recipe_ids, total_recipes ) {
var formattedComplete = cooked_recipe_migrate_counter;
formattedComplete.toLocaleString();
- progress_percent = Math.round10( ( cooked_recipe_migrate_counter / total_recipes ) * 100, -1 );
+ progress_percent = Math.round10( ( cooked_recipe_migrate_counter / total_recipes ) * 100, -1 );
if ( progress_percent < 2 ) { progress_percent = 2; }
- progress_bar.css( { "width" : progress_percent + "%" } );
+ progress_bar.css( { "width" : progress_percent + "%" } );
var remainingProgress = 100 - progress_percent;
var estimatedCompletionTime = Math.round( ( remainingProgress / progress_percent ) * progressIterations );
@@ -306,36 +306,36 @@ function cooked_migrate_recipes(recipe_ids, total_recipes ) {
progress_text.text( formattedComplete + " / " + formattedTotal );
}
- cooked_migrate_recipes( new_recipe_ids, total_recipes );
- } else {
- progress.hide();
- progress_text.hide();
+ cooked_migrate_recipes( new_recipe_ids, total_recipes );
+ } else {
+ progress.hide();
+ progress_text.hide();
- jQuery('.recipe-setting-block.migrate_button').find('h3').hide();
- jQuery('.recipe-setting-block.migrate_button').find('p:nth-child(2)').hide();
+ jQuery('.recipe-setting-block.migrate_button').find('h3').hide();
+ jQuery('.recipe-setting-block.migrate_button').find('p:nth-child(2)').hide();
jQuery('.recipe-setting-block.migrate_button').find('ul.cooked-admin-ul').hide();
- jQuery('#cooked-migration-button').hide();
- jQuery('#cooked-migration-completed').addClass('cooked-active');
- }
- }
+ jQuery('#cooked-migration-button').hide();
+ jQuery('#cooked-migration-completed').addClass('cooked-active');
+ }
+ }
)
- }
+ }
}
function cooked_import_recipes(recipe_ids, total_recipes, import_type) {
- var progress_percent = 0;
+ var progress_percent = 0;
- if (total_recipes > 0) {
- var progress = jQuery( '#cooked-import-progress' );
- var progress_bar = progress.find( '.cooked-progress-bar' );
- var progress_text = jQuery( '#cooked-import-progress-text' );
+ if (total_recipes > 0) {
+ var progress = jQuery( '#cooked-import-progress' );
+ var progress_bar = progress.find( '.cooked-progress-bar' );
+ var progress_text = jQuery( '#cooked-import-progress-text' );
- if (!progress.hasClass('cooked-active')) {
- progress.addClass('cooked-active');
- progress_text.addClass('cooked-active');
- progress_bar.css( { "width" : "0%" } );
- }
+ if (!progress.hasClass('cooked-active')) {
+ progress.addClass('cooked-active');
+ progress_text.addClass('cooked-active');
+ progress_bar.css( { "width" : "0%" } );
+ }
var this_recipe_ids = JSON.parse(recipe_ids),
this_total_recipe_ids = Object.keys(this_recipe_ids).length;
@@ -343,7 +343,7 @@ function cooked_import_recipes(recipe_ids, total_recipes, import_type) {
var formattedTotal = total_recipes;
formattedTotal.toLocaleString();
- var ajax__bulk_migrate_recipes = jQuery.post(
+ var ajax__bulk_migrate_recipes = jQuery.post(
cooked_migration_js_vars.ajax_url,
{
action: 'cooked_import_recipes',
@@ -351,11 +351,11 @@ function cooked_import_recipes(recipe_ids, total_recipes, import_type) {
import_type: import_type
},
function (new_recipe_ids) {
- if (new_recipe_ids && new_recipe_ids != 'false' && new_recipe_ids != false) {
- var leftover_recipe_ids = JSON.parse( new_recipe_ids ),
- leftover_recipes = Object.keys(leftover_recipe_ids).length;
+ if (new_recipe_ids && new_recipe_ids != 'false' && new_recipe_ids != false) {
+ var leftover_recipe_ids = JSON.parse( new_recipe_ids ),
+ leftover_recipes = Object.keys(leftover_recipe_ids).length;
- cooked_recipe_migrate_counter = total_recipes - leftover_recipes;
+ cooked_recipe_migrate_counter = total_recipes - leftover_recipes;
var formattedTotal = total_recipes;
formattedTotal.toLocaleString();
@@ -363,9 +363,9 @@ function cooked_import_recipes(recipe_ids, total_recipes, import_type) {
var formattedComplete = cooked_recipe_migrate_counter;
formattedComplete.toLocaleString();
- progress_percent = Math.round10( ( cooked_recipe_migrate_counter / total_recipes ) * 100, -1 );
+ progress_percent = Math.round10( ( cooked_recipe_migrate_counter / total_recipes ) * 100, -1 );
if ( progress_percent < 2 ) { progress_percent = 2; }
- progress_bar.css({ "width" : progress_percent + "%" });
+ progress_bar.css({ "width" : progress_percent + "%" });
var remainingProgress = 100 - progress_percent;
var estimatedCompletionTime = Math.round( ( remainingProgress / progress_percent ) * progressIterations );
@@ -387,18 +387,18 @@ function cooked_import_recipes(recipe_ids, total_recipes, import_type) {
progress_text.text( formattedComplete + " / " + formattedTotal );
}
- cooked_import_recipes( new_recipe_ids, total_recipes, import_type );
- } else {
- progress.hide();
- progress_text.hide();
+ cooked_import_recipes( new_recipe_ids, total_recipes, import_type );
+ } else {
+ progress.hide();
+ progress_text.hide();
- jQuery('.recipe-setting-block.import_button').find('h3').hide();
- jQuery('.recipe-setting-block.import_button').find('p:nth-child(2)').hide();
+ jQuery('.recipe-setting-block.import_button').find('h3').hide();
+ jQuery('.recipe-setting-block.import_button').find('p:nth-child(2)').hide();
jQuery('.recipe-setting-block.import_button').find('.cooked-import-note').hide();
jQuery('.recipe-setting-block.import_button').find('ul.cooked-admin-ul').hide();
- jQuery('#cooked-import-button').hide();
- jQuery('#cooked-import-completed').addClass('cooked-active');
- }
- })
- }
+ jQuery('#cooked-import-button').hide();
+ jQuery('#cooked-import-completed').addClass('cooked-active');
+ }
+ })
+ }
}
diff --git a/composer.json b/composer.json
index 2cdad74..51b6d80 100644
--- a/composer.json
+++ b/composer.json
@@ -6,7 +6,7 @@
"recipe"
],
"homepage": "https://wordpress.org/plugins/cooked/",
- "version": "1.13.0",
+ "version": "1.14.0",
"type": "wordpress-plugin",
"license": "GPL-3.0-or-later",
"prefer-stable": true,
diff --git a/composer.lock b/composer.lock
index 734c712..dd13b69 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "a4203b5d737ffaa046a8695c4a300dc7",
+ "content-hash": "93dff3879d013694a97a2b65c557b9d8",
"packages": [
{
"name": "nxp/math-executor",
diff --git a/cooked.php b/cooked.php
index 125f27a..230b73b 100644
--- a/cooked.php
+++ b/cooked.php
@@ -6,7 +6,7 @@
Description: A recipe plugin for WordPress.
Author: Gora Tech
Author URI: https://goratech.dev
-Version: 1.13.0
+Version: 1.14.0
Text Domain: cooked
Domain Path: languages
License: GPL2
@@ -31,7 +31,7 @@
require_once __DIR__ . '/vendor/autoload.php';
define( 'COOKED_DEV', false );
-define( 'COOKED_VERSION', '1.13.0' );
+define( 'COOKED_VERSION', '1.14.0' );
if ( ! class_exists( 'Cooked_Plugin' ) ) :
diff --git a/includes/class.cooked-admin-enqueues.php b/includes/class.cooked-admin-enqueues.php
index 1a752cd..9580d5f 100644
--- a/includes/class.cooked-admin-enqueues.php
+++ b/includes/class.cooked-admin-enqueues.php
@@ -166,6 +166,19 @@ public function admin_enqueues( $hook ) {
/* translators: 1: date and time, 2: number of recipes */
'i18n_last_calculated' => __( 'Last: %1$s · %2$s recipes', 'cooked' ),
'wp_editor_roles_allowed' => esc_attr($wp_editor_roles_allowed),
+ 'cooked_bulk_add_nonce' => wp_create_nonce( 'cooked_bulk_add' ),
+ 'i18n_bulk_add_ingredients' => __( 'Bulk Add Ingredients', 'cooked' ),
+ 'i18n_bulk_add_directions' => __( 'Bulk Add Directions', 'cooked' ),
+ 'i18n_bulk_add_placeholder_ingredients' => __( "2 cups flour\n1 tsp salt\n1/2 cup sugar\n3 large eggs", 'cooked' ),
+ 'i18n_bulk_add_placeholder_directions' => __( "Preheat oven to 350°F.\nMix dry ingredients together.\nAdd wet ingredients and stir.", 'cooked' ),
+ 'i18n_bulk_add_section_heading' => __( 'Section heading', 'cooked' ),
+ 'i18n_bulk_add_parsing' => __( 'Parsing...', 'cooked' ),
+ 'i18n_bulk_add_submit_ingredients' => __( 'Add Ingredients', 'cooked' ),
+ 'i18n_bulk_add_submit_directions' => __( 'Add Directions', 'cooked' ),
+ 'i18n_bulk_add_amount' => __( 'Amount', 'cooked' ),
+ 'i18n_bulk_add_unit' => __( 'Measurement', 'cooked' ),
+ 'i18n_bulk_add_name' => __( 'Item', 'cooked' ),
+ 'i18n_bulk_add_heading_line_label' => __( 'Heading text', 'cooked' ),
];
// Cooked Admin Style Assets
diff --git a/includes/class.cooked-ajax.php b/includes/class.cooked-ajax.php
index bd300f4..2f01fe9 100644
--- a/includes/class.cooked-ajax.php
+++ b/includes/class.cooked-ajax.php
@@ -56,6 +56,10 @@ function __construct() {
// CSV Import - Process file
add_action( 'wp_ajax_cooked_process_csv', [&$this, 'process_csv']);
+
+ // Bulk Add - Parse Ingredients
+ add_action( 'wp_ajax_cooked_parse_bulk_ingredients', [&$this, 'parse_bulk_ingredients'] );
+ add_action( 'wp_ajax_nopriv_cooked_parse_bulk_ingredients', [&$this, 'parse_bulk_ingredients'] );
}
public function get_migrate_ids() {
@@ -460,4 +464,115 @@ public function process_csv() {
]);
}
}
+
+ public function parse_bulk_ingredients() {
+ if ( ! check_ajax_referer( 'cooked_bulk_add', 'nonce', false ) ) {
+ wp_send_json_error( [ 'message' => __( 'Security check failed.', 'cooked' ) ] );
+ }
+
+ $lines = isset( $_POST['lines'] ) ? (array) $_POST['lines'] : [];
+
+ if ( empty( $lines ) ) {
+ wp_send_json_error( [ 'message' => __( 'No ingredients provided.', 'cooked' ) ] );
+ }
+
+ $measurements = Cooked_Measurements::get();
+
+ $variations_map = [];
+ foreach ( $measurements as $key => $m ) {
+ if ( ! empty( $m['variations'] ) ) {
+ foreach ( $m['variations'] as $variation ) {
+ $variations_map[ $variation ] = $key;
+ }
+ }
+ }
+
+ // Sort variations longest-first to avoid partial matches.
+ $variation_strings = array_keys( $variations_map );
+ usort( $variation_strings, function( $a, $b ) {
+ return strlen( $b ) - strlen( $a );
+ });
+
+ $escaped = array_map( function( $v ) {
+ return preg_quote( $v, '/' );
+ }, $variation_strings );
+
+ $units_pattern = '/^(' . implode( '|', $escaped ) . ')\.?\s+/iu';
+
+ $parsed = [];
+
+ foreach ( $lines as $index => $line ) {
+ // Do not use Cooked_Functions::sanitize_text_field() here — it runs htmlentities() and turns
+ // Unicode like en dash or ½ into – / ½, which breaks parsing and leaks into output.
+ $line = is_string( $line ) ? $line : '';
+ $line = wp_unslash( $line );
+ $line = html_entity_decode( $line, ENT_QUOTES | ENT_HTML5, 'UTF-8' );
+ $line = trim( sanitize_text_field( $line ) );
+
+ if ( '' === $line ) {
+ $parsed[ $index ] = [ 'amount' => '', 'measurement' => '', 'name' => '' ];
+ continue;
+ }
+
+ $raw = $line;
+ $amount = '';
+ $measurement = '';
+
+ $raw = str_replace( "\xE2\x81\x84", '/', $raw );
+
+ $fraction_map = [
+ "\xC2\xBC" => '1/4', "\xC2\xBD" => '1/2', "\xC2\xBE" => '3/4',
+ "\xE2\x85\x93" => '1/3', "\xE2\x85\x94" => '2/3',
+ "\xE2\x85\x95" => '1/5', "\xE2\x85\x96" => '2/5',
+ "\xE2\x85\x97" => '3/5', "\xE2\x85\x98" => '4/5',
+ "\xE2\x85\x99" => '1/6', "\xE2\x85\x9A" => '5/6',
+ "\xE2\x85\x9B" => '1/8', "\xE2\x85\x9C" => '3/8',
+ "\xE2\x85\x9D" => '5/8', "\xE2\x85\x9E" => '7/8',
+ ];
+ // "1½" must become "1 1/2", not "11/2".
+ foreach ( $fraction_map as $symbol => $replacement ) {
+ $raw = preg_replace( '/(\d)' . preg_quote( $symbol, '/' ) . '/u', '$1 ' . $replacement, $raw );
+ }
+ foreach ( $fraction_map as $symbol => $replacement ) {
+ $raw = str_replace( $symbol, $replacement, $raw );
+ }
+
+ // Allow en dash (U+2013) and em dash (U+2014) in amounts like "2–3".
+ $amount_regex = '/^\s*([\d][\s\/\-\d.,\x{2013}\x{2014}]*)\s*/u';
+ if ( preg_match( $amount_regex, $raw, $match ) ) {
+ $amount = trim( $match[1] );
+ $raw = trim( substr( $raw, strlen( $match[0] ) ) );
+ }
+
+ if ( preg_match( $units_pattern, $raw, $match ) ) {
+ $matched_variation = trim( rtrim( $match[1], '.' ) );
+ $matched_lower = strtolower( $matched_variation );
+
+ foreach ( $variations_map as $variation => $key ) {
+ if ( strtolower( $variation ) === $matched_lower ) {
+ $measurement = $key;
+ break;
+ }
+ }
+
+ $raw = trim( substr( $raw, strlen( $match[0] ) ) );
+ }
+
+ $name = trim( $raw );
+
+ if ( ! $name ) {
+ $amount = '';
+ $measurement = '';
+ $name = trim( $line );
+ }
+
+ $parsed[ $index ] = [
+ 'amount' => $amount,
+ 'measurement' => $measurement,
+ 'name' => $name,
+ ];
+ }
+
+ wp_send_json_success( [ 'parsed' => $parsed ] );
+ }
}
diff --git a/includes/class.cooked-recipe-meta.php b/includes/class.cooked-recipe-meta.php
index 93257be..7ce06e9 100644
--- a/includes/class.cooked-recipe-meta.php
+++ b/includes/class.cooked-recipe-meta.php
@@ -209,6 +209,45 @@ public function render_recipe_meta_box() {
// Add an nonce field so we can check for it later.
wp_nonce_field( 'cooked_recipe_custom_box', 'cooked_recipe_custom_box_nonce' );
}
+
+ public static function bulk_add_modal() {
+ // Frontend submit form uses cooked-button + colors.php; wp-admin uses core .button styles.
+ if ( is_admin() ) {
+ $bulk_cancel_class = 'button cooked-bulk-add-cancel';
+ $bulk_submit_class = 'button button-primary cooked-bulk-add-submit';
+ } else {
+ $bulk_cancel_class = 'cooked-button cooked-secondary-button cooked-bulk-add-cancel';
+ $bulk_submit_class = 'cooked-button cooked-bulk-add-submit';
+ }
+ ?>
+
+
+
@@ -843,8 +883,11 @@ function cooked_render_recipe_fields( $post_id ) {
+
+
+
@@ -1590,6 +1633,8 @@ function cooked_render_recipe_fields( $post_id ) {
+
+
Note: Author links require the Browse/Search Recipes Page to be set up correctly to function properly."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:523
-#: includes/class.cooked-recipe-meta.php:615
-#: includes/class.cooked-recipe-meta.php:681
+#: includes/class.cooked-recipe-meta.php:562
+#: includes/class.cooked-recipe-meta.php:654
+#: includes/class.cooked-recipe-meta.php:721
msgid "Substitution:"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:536
-#: includes/class.cooked-recipe-meta.php:628
-#: includes/class.cooked-recipe-meta.php:694
+#: includes/class.cooked-recipe-meta.php:575
+#: includes/class.cooked-recipe-meta.php:667
+#: includes/class.cooked-recipe-meta.php:734
msgid "ex. Apple Sauce, Tofu, etc."
msgstr ""
@@ -2239,36 +2242,36 @@ msgstr ""
msgid "or"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1459
+#: includes/class.cooked-recipe-meta.php:1502
msgid "Next & Previous Recipe Navigation"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1460
+#: includes/class.cooked-recipe-meta.php:1503
msgid "This will display navigation links to the next and previous recipes."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1464
+#: includes/class.cooked-recipe-meta.php:1507
msgid "This shortcode automatically displays the previous and next recipe links based on the current recipe page. No parameters are required."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1469
+#: includes/class.cooked-recipe-meta.php:1512
msgid "Usage"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1471
+#: includes/class.cooked-recipe-meta.php:1514
msgid "Simply add the shortcode to your recipe template or content area. The navigation will automatically show the previous and next recipes based on recipe ID order."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1484
+#: includes/class.cooked-recipe-meta.php:1527
#: includes/class.cooked-related-recipes.php:34
msgid "Related Recipes"
msgstr ""
-#: includes/class.cooked-shortcodes.php:1131
+#: includes/class.cooked-shortcodes.php:1133
msgid "Recipe not found."
msgstr ""
-#: includes/class.cooked-shortcodes.php:1146
+#: includes/class.cooked-shortcodes.php:1148
msgid "No related recipes found."
msgstr ""
@@ -2286,100 +2289,101 @@ msgstr ""
msgid "Create translations of your browse page in %s for full multilingual support."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1493
+#: includes/class.cooked-recipe-meta.php:1536
msgid "Specify a recipe ID. If not provided, uses the current recipe."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1500
+#: includes/class.cooked-recipe-meta.php:1543
msgid "Set the heading text for the related recipes section."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1527
+#: includes/class.cooked-recipe-meta.php:1570
msgid "Hide recipe card images."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1534
+#: includes/class.cooked-recipe-meta.php:1577
msgid "Hide recipe card excerpts."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1544
+#: includes/class.cooked-recipe-meta.php:1587
msgid "Hide recipe card authors."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1566
+#: includes/class.cooked-recipe-meta.php:1609
msgid "Recipe ID"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1567
+#: includes/class.cooked-admin-enqueues.php:174
+#: includes/class.cooked-recipe-meta.php:1610
msgid "Section heading"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1568
+#: includes/class.cooked-recipe-meta.php:1611
msgid "Number of recipes"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1569
+#: includes/class.cooked-recipe-meta.php:1612
msgid "Grid columns"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1570
-#: includes/class.cooked-recipe-meta.php:1571
-#: includes/class.cooked-recipe-meta.php:1572
-#: includes/class.cooked-recipe-meta.php:1573
+#: includes/class.cooked-recipe-meta.php:1613
+#: includes/class.cooked-recipe-meta.php:1614
+#: includes/class.cooked-recipe-meta.php:1615
+#: includes/class.cooked-recipe-meta.php:1616
msgid "true/false"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1575
+#: includes/class.cooked-recipe-meta.php:1618
msgid "Example"
msgstr ""
-#: includes/class.cooked-shortcodes.php:1114
+#: includes/class.cooked-shortcodes.php:1116
msgid "Invalid recipe ID specified. Please provide a valid numeric recipe ID."
msgstr ""
-#: includes/class.cooked-shortcodes.php:1124
+#: includes/class.cooked-shortcodes.php:1126
msgid "No recipe found. Please specify a recipe ID using the id attribute, or use this shortcode on a recipe page."
msgstr ""
-#: includes/class.cooked-shortcodes.php:1135
+#: includes/class.cooked-shortcodes.php:1137
#, php-format
msgid "The specified ID (%d) is not a recipe."
msgstr ""
-#: includes/class.cooked-shortcodes.php:1137
+#: includes/class.cooked-shortcodes.php:1139
#, php-format
msgid "No post found with ID %d."
msgstr ""
-#: includes/class.cooked-shortcodes.php:1149
+#: includes/class.cooked-shortcodes.php:1151
msgid "This may be because there are no other recipes in the current language with matching attributes."
msgstr ""
-#: includes/class.cooked-shortcodes.php:1151
+#: includes/class.cooked-shortcodes.php:1153
msgid "Try adjusting the matching criteria or ensure you have other published recipes with shared categories, tags, or ingredients."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1485
+#: includes/class.cooked-recipe-meta.php:1528
msgid "Displays a grid of related recipes based on shared terms in any of the recipe taxonomies (categories, cuisines, cooking methods, tags, diets), shown in random order. No cache or pre-calculation."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1510
+#: includes/class.cooked-recipe-meta.php:1553
msgid "Number of recipes to display (default: 4)."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1517
+#: includes/class.cooked-recipe-meta.php:1560
msgid "Number of columns in the grid (default: 2)."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1551
+#: includes/class.cooked-recipe-meta.php:1594
msgid "Toggle which taxonomies are used: match_categories, match_cuisines, match_cooking_methods, match_tags, match_diets (default: true)."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1558
+#: includes/class.cooked-recipe-meta.php:1601
msgid "Matching options:"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1559
+#: includes/class.cooked-recipe-meta.php:1602
msgid "Set to false to exclude a taxonomy from related recipes, e.g. match_cuisines=\"false\" to ignore cuisines."
msgstr ""
@@ -2482,7 +2486,7 @@ msgid "Failed to upload CSV file."
msgstr ""
#: includes/class.cooked-admin-enqueues.php:161
-#: includes/class.cooked-ajax.php:379
+#: includes/class.cooked-ajax.php:398
msgid "File upload failed."
msgstr ""
@@ -2508,29 +2512,30 @@ msgstr ""
msgid "Last: %1$s · %2$s recipes"
msgstr ""
-#: includes/class.cooked-ajax.php:346
+#: includes/class.cooked-ajax.php:316
+#: includes/class.cooked-ajax.php:365
msgid "No default content provided."
msgstr ""
-#: includes/class.cooked-ajax.php:375
-#: includes/class.cooked-ajax.php:411
+#: includes/class.cooked-ajax.php:394
+#: includes/class.cooked-ajax.php:430
msgid "You do not have permission to import recipes."
msgstr ""
-#: includes/class.cooked-ajax.php:385
+#: includes/class.cooked-ajax.php:404
msgid "Invalid file type. Please upload a CSV file."
msgstr ""
-#: includes/class.cooked-ajax.php:418
+#: includes/class.cooked-ajax.php:437
msgid "CSV file not found. Please upload again."
msgstr ""
-#: includes/class.cooked-ajax.php:434
+#: includes/class.cooked-ajax.php:453
#, php-format
msgid "Successfully imported %d recipe(s)."
msgstr ""
-#: includes/class.cooked-ajax.php:443
+#: includes/class.cooked-ajax.php:462
msgid "No recipes were imported."
msgstr ""
@@ -2647,3 +2652,71 @@ msgstr ""
#: includes/class.cooked-import.php:167
msgid "Restricted diet type (Schema.org RestrictedDiet), separated by comma"
msgstr ""
+
+#: includes/class.cooked-admin-enqueues.php:170
+msgid "Bulk Add Ingredients"
+msgstr ""
+
+#: includes/class.cooked-admin-enqueues.php:171
+msgid "Bulk Add Directions"
+msgstr ""
+
+#: includes/class.cooked-admin-enqueues.php:172
+msgid ""
+"2 cups flour\n"
+"1 tsp salt\n"
+"1/2 cup sugar\n"
+"3 large eggs"
+msgstr ""
+
+#: includes/class.cooked-admin-enqueues.php:173
+msgid ""
+"Preheat oven to 350°F.\n"
+"Mix dry ingredients together.\n"
+"Add wet ingredients and stir."
+msgstr ""
+
+#: includes/class.cooked-admin-enqueues.php:175
+msgid "Parsing..."
+msgstr ""
+
+#: includes/class.cooked-admin-enqueues.php:176
+msgid "Add Ingredients"
+msgstr ""
+
+#: includes/class.cooked-admin-enqueues.php:177
+msgid "Add Directions"
+msgstr ""
+
+#: includes/class.cooked-admin-enqueues.php:181
+msgid "Heading text"
+msgstr ""
+
+#: includes/class.cooked-ajax.php:470
+msgid "Security check failed."
+msgstr ""
+
+#: includes/class.cooked-ajax.php:476
+msgid "No ingredients provided."
+msgstr ""
+
+#: includes/class.cooked-recipe-meta.php:230
+msgid "Enter one item per line. Use the checkboxes below to mark section headings."
+msgstr ""
+
+#: includes/class.cooked-recipe-meta.php:233
+msgid "Preview"
+msgstr ""
+
+#: includes/class.cooked-recipe-meta.php:237
+msgid "Please review the parsed fields before adding. Automatic parsing may misread amounts—for example, a range written as 2-3 could appear as 23 unless you correct it."
+msgstr ""
+
+#: includes/class.cooked-recipe-meta.php:242
+msgid "Cancel"
+msgstr ""
+
+#: includes/class.cooked-recipe-meta.php:684
+#: includes/class.cooked-recipe-meta.php:890
+msgid "Bulk Add"
+msgstr ""
diff --git a/languages/cooked.pot b/languages/cooked.pot
index 4459be8..30b6284 100644
--- a/languages/cooked.pot
+++ b/languages/cooked.pot
@@ -2,14 +2,14 @@
# This file is distributed under the GPL2.
msgid ""
msgstr ""
-"Project-Id-Version: Cooked - Recipe Management 1.13.0\n"
+"Project-Id-Version: Cooked - Recipe Management 1.14.0\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/cooked\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"POT-Creation-Date: 2026-02-24T19:15:02-05:00\n"
+"POT-Creation-Date: 2026-04-18T23:32:28-04:00\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"X-Generator: WP-CLI 2.12.0\n"
"X-Domain: cooked\n"
@@ -44,14 +44,14 @@ msgid "remaining"
msgstr ""
#: includes/class.cooked-admin-enqueues.php:138
-#: includes/class.cooked-recipe-meta.php:759
-#: includes/class.cooked-recipe-meta.php:815
-#: includes/class.cooked-recipe-meta.php:856
+#: includes/class.cooked-recipe-meta.php:799
+#: includes/class.cooked-recipe-meta.php:855
+#: includes/class.cooked-recipe-meta.php:899
msgid "Add Image"
msgstr ""
#: includes/class.cooked-admin-enqueues.php:139
-#: includes/class.cooked-recipe-meta.php:759
+#: includes/class.cooked-recipe-meta.php:799
msgid "Change Image"
msgstr ""
@@ -60,7 +60,7 @@ msgid "Use this Image"
msgstr ""
#: includes/class.cooked-admin-enqueues.php:141
-#: includes/class.cooked-recipe-meta.php:1088
+#: includes/class.cooked-recipe-meta.php:1131
msgid "Add to Gallery"
msgstr ""
@@ -139,7 +139,7 @@ msgid "Failed to upload CSV file."
msgstr ""
#: includes/class.cooked-admin-enqueues.php:161
-#: includes/class.cooked-ajax.php:379
+#: includes/class.cooked-ajax.php:398
msgid "File upload failed."
msgstr ""
@@ -165,6 +165,65 @@ msgstr ""
msgid "Last: %1$s · %2$s recipes"
msgstr ""
+#: includes/class.cooked-admin-enqueues.php:170
+msgid "Bulk Add Ingredients"
+msgstr ""
+
+#: includes/class.cooked-admin-enqueues.php:171
+msgid "Bulk Add Directions"
+msgstr ""
+
+#: includes/class.cooked-admin-enqueues.php:172
+msgid ""
+"2 cups flour\n"
+"1 tsp salt\n"
+"1/2 cup sugar\n"
+"3 large eggs"
+msgstr ""
+
+#: includes/class.cooked-admin-enqueues.php:173
+msgid ""
+"Preheat oven to 350°F.\n"
+"Mix dry ingredients together.\n"
+"Add wet ingredients and stir."
+msgstr ""
+
+#: includes/class.cooked-admin-enqueues.php:174
+#: includes/class.cooked-recipe-meta.php:1610
+msgid "Section heading"
+msgstr ""
+
+#: includes/class.cooked-admin-enqueues.php:175
+msgid "Parsing..."
+msgstr ""
+
+#: includes/class.cooked-admin-enqueues.php:176
+msgid "Add Ingredients"
+msgstr ""
+
+#: includes/class.cooked-admin-enqueues.php:177
+msgid "Add Directions"
+msgstr ""
+
+#: includes/class.cooked-admin-enqueues.php:178
+#: includes/class.cooked-recipe-meta.php:513
+msgid "Amount"
+msgstr ""
+
+#: includes/class.cooked-admin-enqueues.php:179
+#: includes/class.cooked-recipe-meta.php:514
+msgid "Measurement"
+msgstr ""
+
+#: includes/class.cooked-admin-enqueues.php:180
+#: includes/class.cooked-recipe-meta.php:515
+msgid "Item"
+msgstr ""
+
+#: includes/class.cooked-admin-enqueues.php:181
+msgid "Heading text"
+msgstr ""
+
#: includes/class.cooked-admin-menus.php:36
#: includes/class.cooked-admin-menus.php:59
#: includes/class.cooked-post-types.php:450
@@ -213,54 +272,63 @@ msgstr ""
msgid "You do not have sufficient permissions to access this page."
msgstr ""
-#: includes/class.cooked-ajax.php:180
+#: includes/class.cooked-ajax.php:187
#: includes/class.cooked-csv-import.php:307
#: includes/class.cooked-functions.php:134
#: includes/class.cooked-recipe-meta.php:176
-#: includes/class.cooked-recipe-meta.php:263
-#: includes/class.cooked-recipe-meta.php:1166
+#: includes/class.cooked-recipe-meta.php:302
+#: includes/class.cooked-recipe-meta.php:1209
#: includes/class.cooked-recipes.php:635
#: includes/class.cooked-recipes.php:667
msgid "Ingredients"
msgstr ""
-#: includes/class.cooked-ajax.php:180
+#: includes/class.cooked-ajax.php:187
#: includes/class.cooked-csv-import.php:307
#: includes/class.cooked-functions.php:135
#: includes/class.cooked-recipe-meta.php:176
-#: includes/class.cooked-recipe-meta.php:269
-#: includes/class.cooked-recipe-meta.php:1197
+#: includes/class.cooked-recipe-meta.php:308
+#: includes/class.cooked-recipe-meta.php:1240
#: includes/class.cooked-recipes.php:639
#: includes/class.cooked-recipes.php:668
msgid "Directions"
msgstr ""
-#: includes/class.cooked-ajax.php:346
+#: includes/class.cooked-ajax.php:316
+#: includes/class.cooked-ajax.php:365
msgid "No default content provided."
msgstr ""
-#: includes/class.cooked-ajax.php:375
-#: includes/class.cooked-ajax.php:411
+#: includes/class.cooked-ajax.php:394
+#: includes/class.cooked-ajax.php:430
msgid "You do not have permission to import recipes."
msgstr ""
-#: includes/class.cooked-ajax.php:385
+#: includes/class.cooked-ajax.php:404
msgid "Invalid file type. Please upload a CSV file."
msgstr ""
-#: includes/class.cooked-ajax.php:418
+#: includes/class.cooked-ajax.php:437
msgid "CSV file not found. Please upload again."
msgstr ""
-#: includes/class.cooked-ajax.php:434
+#: includes/class.cooked-ajax.php:453
#, php-format
msgid "Successfully imported %d recipe(s)."
msgstr ""
-#: includes/class.cooked-ajax.php:443
+#: includes/class.cooked-ajax.php:462
msgid "No recipes were imported."
msgstr ""
+#: includes/class.cooked-ajax.php:470
+msgid "Security check failed."
+msgstr ""
+
+#: includes/class.cooked-ajax.php:476
+msgid "No ingredients provided."
+msgstr ""
+
#: includes/class.cooked-cli.php:41
msgid "Please provide a tool name. Use `wp cooked tools list` to see available tools."
msgstr ""
@@ -308,7 +376,7 @@ msgid "Error importing WP Delicious recipe."
msgstr ""
#: includes/class.cooked-enqueues.php:56
-#: includes/class.cooked-recipe-meta.php:1412
+#: includes/class.cooked-recipe-meta.php:1455
msgid "Timer"
msgstr ""
@@ -319,7 +387,7 @@ msgid "What's new in %s?"
msgstr ""
#: includes/class.cooked-functions.php:127
-#: includes/class.cooked-shortcodes.php:656
+#: includes/class.cooked-shortcodes.php:658
msgid "Print"
msgstr ""
@@ -336,7 +404,7 @@ msgid "Information"
msgstr ""
#: includes/class.cooked-functions.php:132
-#: includes/class.cooked-recipe-meta.php:1357
+#: includes/class.cooked-recipe-meta.php:1400
#: includes/class.cooked-settings.php:231
msgid "Excerpt"
msgstr ""
@@ -347,15 +415,15 @@ msgstr ""
#: includes/class.cooked-functions.php:136
#: includes/class.cooked-import.php:161
-#: includes/class.cooked-recipe-meta.php:1381
+#: includes/class.cooked-recipe-meta.php:1424
#: includes/class.cooked-recipes.php:642
#: includes/class.cooked-settings.php:232
-#: includes/class.cooked-shortcodes.php:775
+#: includes/class.cooked-shortcodes.php:777
msgid "Notes"
msgstr ""
#: includes/class.cooked-functions.php:137
-#: includes/class.cooked-recipe-meta.php:275
+#: includes/class.cooked-recipe-meta.php:314
msgid "Nutrition"
msgstr ""
@@ -1183,558 +1251,563 @@ msgstr ""
msgid "Error importing WP Recipe Maker recipe."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:221
+#: includes/class.cooked-recipe-meta.php:230
+msgid "Enter one item per line. Use the checkboxes below to mark section headings."
+msgstr ""
+
+#: includes/class.cooked-recipe-meta.php:233
+msgid "Preview"
+msgstr ""
+
+#: includes/class.cooked-recipe-meta.php:237
+msgid "Please review the parsed fields before adding. Automatic parsing may misread amounts—for example, a range written as 2-3 could appear as 23 unless you correct it."
+msgstr ""
+
+#: includes/class.cooked-recipe-meta.php:242
+msgid "Cancel"
+msgstr ""
+
+#: includes/class.cooked-recipe-meta.php:260
msgid "Display Recipe"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:222
+#: includes/class.cooked-recipe-meta.php:261
msgid "This shortcode displays the recipe in its entirety, using the \"Recipe Template\" field in the first tab."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:257
+#: includes/class.cooked-recipe-meta.php:296
msgid "Layout"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:281
-#: includes/class.cooked-recipe-meta.php:1278
+#: includes/class.cooked-recipe-meta.php:320
+#: includes/class.cooked-recipe-meta.php:1321
msgid "Gallery"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:287
+#: includes/class.cooked-recipe-meta.php:326
msgid "Shortcodes"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:344
+#: includes/class.cooked-recipe-meta.php:383
msgid "Recipe Review Required"
msgstr ""
#. translators: for displaying singular or plural versions depending on the number of recipes.
-#: includes/class.cooked-recipe-meta.php:347
+#: includes/class.cooked-recipe-meta.php:386
#, php-format
msgid "It looks like this recipe is from a different version of %s. Please review and click \"Update\" to save it."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:355
+#: includes/class.cooked-recipe-meta.php:394
msgid "Recipe Shortcode"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:356
+#: includes/class.cooked-recipe-meta.php:395
msgid "You can use the following shortcode to display your recipe anywhere:"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:370
+#: includes/class.cooked-recipe-meta.php:409
msgid "Recipe Template"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:370
+#: includes/class.cooked-recipe-meta.php:409
msgid "Default Recipe Template"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:370
+#: includes/class.cooked-recipe-meta.php:409
msgid "Choose from the options below to use this layout as the default for new recipes or for all recipes."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:370
+#: includes/class.cooked-recipe-meta.php:409
msgid "Save as Default"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:370
+#: includes/class.cooked-recipe-meta.php:409
msgid "Apply to All"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:370
+#: includes/class.cooked-recipe-meta.php:409
msgid "Reset"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:370
+#: includes/class.cooked-recipe-meta.php:409
msgid "Using the built-in recipe shortcodes found on the \"Shortcodes\" tab, you can create the layout of your recipe below. Use the \"Save as Default\" button to save your template."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:388
+#: includes/class.cooked-recipe-meta.php:427
msgid "Recipe Excerpt"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:388
+#: includes/class.cooked-recipe-meta.php:427
msgid "The excerpt is used on recipe listing templates, where the full recipe should not be displayed."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:411
+#: includes/class.cooked-recipe-meta.php:450
msgid "SEO Description"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:411
+#: includes/class.cooked-recipe-meta.php:450
msgid "This description is used for SEO purposes and is optional. By default, Cooked will use the Recipe Excerpt above if available or the Recipe Title if not."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:422
+#: includes/class.cooked-recipe-meta.php:461
#: includes/class.cooked-settings.php:230
msgid "Difficulty Level"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:431
-#: includes/class.cooked-recipe-meta.php:1140
+#: includes/class.cooked-recipe-meta.php:470
+#: includes/class.cooked-recipe-meta.php:1183
#: includes/class.cooked-settings.php:233
-#: includes/class.cooked-shortcodes.php:449
-#: includes/class.cooked-shortcodes.php:671
+#: includes/class.cooked-shortcodes.php:451
+#: includes/class.cooked-shortcodes.php:673
msgid "Prep Time"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:433
-#: includes/class.cooked-recipe-meta.php:438
-#: includes/class.cooked-recipe-meta.php:443
+#: includes/class.cooked-recipe-meta.php:472
+#: includes/class.cooked-recipe-meta.php:477
+#: includes/class.cooked-recipe-meta.php:482
msgid "minutes"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:436
-#: includes/class.cooked-recipe-meta.php:1141
+#: includes/class.cooked-recipe-meta.php:475
+#: includes/class.cooked-recipe-meta.php:1184
#: includes/class.cooked-settings.php:234
-#: includes/class.cooked-shortcodes.php:450
-#: includes/class.cooked-shortcodes.php:680
+#: includes/class.cooked-shortcodes.php:452
+#: includes/class.cooked-shortcodes.php:682
msgid "Cook Time"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:441
-#: includes/class.cooked-recipe-meta.php:1142
+#: includes/class.cooked-recipe-meta.php:480
+#: includes/class.cooked-recipe-meta.php:1185
#: includes/class.cooked-settings.php:235
-#: includes/class.cooked-shortcodes.php:451
-#: includes/class.cooked-shortcodes.php:691
-#: includes/class.cooked-shortcodes.php:698
+#: includes/class.cooked-shortcodes.php:453
+#: includes/class.cooked-shortcodes.php:693
+#: includes/class.cooked-shortcodes.php:700
msgid "Total Time"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:449
+#: includes/class.cooked-recipe-meta.php:488
msgid "Recipe Notes"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:449
+#: includes/class.cooked-recipe-meta.php:488
msgid "The notes are displayed in the recipe."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:474
-msgid "Amount"
-msgstr ""
-
-#: includes/class.cooked-recipe-meta.php:475
-msgid "Measurement"
-msgstr ""
-
-#: includes/class.cooked-recipe-meta.php:476
-msgid "Item"
-msgstr ""
-
-#: includes/class.cooked-recipe-meta.php:514
-#: includes/class.cooked-recipe-meta.php:606
-#: includes/class.cooked-recipe-meta.php:672
+#: includes/class.cooked-recipe-meta.php:553
+#: includes/class.cooked-recipe-meta.php:645
+#: includes/class.cooked-recipe-meta.php:712
msgid "ex. Eggs, Milk, etc."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:523
-#: includes/class.cooked-recipe-meta.php:615
-#: includes/class.cooked-recipe-meta.php:681
+#: includes/class.cooked-recipe-meta.php:562
+#: includes/class.cooked-recipe-meta.php:654
+#: includes/class.cooked-recipe-meta.php:721
msgid "Substitution:"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:536
-#: includes/class.cooked-recipe-meta.php:628
-#: includes/class.cooked-recipe-meta.php:694
+#: includes/class.cooked-recipe-meta.php:575
+#: includes/class.cooked-recipe-meta.php:667
+#: includes/class.cooked-recipe-meta.php:734
msgid "ex. Apple Sauce, Tofu, etc."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:547
-#: includes/class.cooked-recipe-meta.php:702
-#: includes/class.cooked-recipe-meta.php:775
-#: includes/class.cooked-recipe-meta.php:869
+#: includes/class.cooked-recipe-meta.php:586
+#: includes/class.cooked-recipe-meta.php:742
+#: includes/class.cooked-recipe-meta.php:815
+#: includes/class.cooked-recipe-meta.php:912
msgid "Section Heading"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:551
-#: includes/class.cooked-recipe-meta.php:706
-#: includes/class.cooked-recipe-meta.php:779
-#: includes/class.cooked-recipe-meta.php:873
+#: includes/class.cooked-recipe-meta.php:590
+#: includes/class.cooked-recipe-meta.php:746
+#: includes/class.cooked-recipe-meta.php:819
+#: includes/class.cooked-recipe-meta.php:916
msgid "Heading Element:"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:642
+#: includes/class.cooked-recipe-meta.php:681
msgid "Add Ingredient"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:643
-#: includes/class.cooked-recipe-meta.php:847
+#: includes/class.cooked-recipe-meta.php:682
+#: includes/class.cooked-recipe-meta.php:888
msgid "Add Section Heading"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:846
+#: includes/class.cooked-recipe-meta.php:684
+#: includes/class.cooked-recipe-meta.php:890
+msgid "Bulk Add"
+msgstr ""
+
+#: includes/class.cooked-recipe-meta.php:887
msgid "Add Direction"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:904
+#: includes/class.cooked-recipe-meta.php:947
msgid "Nutrition Information"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:942
-#: includes/class.cooked-shortcodes.php:1062
+#: includes/class.cooked-recipe-meta.php:985
+#: includes/class.cooked-shortcodes.php:1064
msgid "Nutrition Facts"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:960
-#: includes/class.cooked-shortcodes.php:1030
+#: includes/class.cooked-recipe-meta.php:1003
+#: includes/class.cooked-shortcodes.php:1032
msgid "Amount per serving"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:970
-#: includes/class.cooked-shortcodes.php:1040
+#: includes/class.cooked-recipe-meta.php:1013
+#: includes/class.cooked-shortcodes.php:1042
msgid "% Daily Value *"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:989
-#: includes/class.cooked-shortcodes.php:972
+#: includes/class.cooked-recipe-meta.php:1032
+#: includes/class.cooked-shortcodes.php:974
msgid "Includes"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1021
-#: includes/class.cooked-shortcodes.php:1066
+#: includes/class.cooked-recipe-meta.php:1064
+#: includes/class.cooked-shortcodes.php:1068
msgid "The % Daily Value (DV) tells you how much a nutrient in a serving of food contributes to a daily diet. 2,000 calories a day is used for general nutrition advice."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1037
+#: includes/class.cooked-recipe-meta.php:1080
msgid "Recipe Gallery Type"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1050
+#: includes/class.cooked-recipe-meta.php:1093
msgid "Choose one..."
msgstr ""
#. translators: a title for the video section of the recipe editor, where users can paste a YouToub or Vimeo URL into the field below.
-#: includes/class.cooked-recipe-meta.php:1064
+#: includes/class.cooked-recipe-meta.php:1107
#, php-format
msgid "%1$s or %2$s Video"
msgstr ""
#. translators: a message describing how to display a video from YouTube or Vimeo.
-#: includes/class.cooked-recipe-meta.php:1068
+#: includes/class.cooked-recipe-meta.php:1111
#, php-format
msgid "If you would like to display a video as the first item in your gallery, you can paste a valid %1$s or %2$s URL below."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1073
+#: includes/class.cooked-recipe-meta.php:1116
msgid "Gallery Items"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1104
+#: includes/class.cooked-recipe-meta.php:1147
msgid "Recipe Information"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1105
+#: includes/class.cooked-recipe-meta.php:1148
msgid "This will display the recipe author, cooking times, etc."
msgstr ""
#. translators: "include and exclude" section title
#. translators: "left and right" section title
-#: includes/class.cooked-recipe-meta.php:1114
-#: includes/class.cooked-recipe-meta.php:1124
+#: includes/class.cooked-recipe-meta.php:1157
+#: includes/class.cooked-recipe-meta.php:1167
#, php-format
msgid "\"%1$s\" and \"%2$s\""
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1116
+#: includes/class.cooked-recipe-meta.php:1159
msgid "This will allow you to include or exclude content from the shortcode output."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1125
+#: includes/class.cooked-recipe-meta.php:1168
msgid "Used like \"include\", but will position the content to the left or right."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1135
-#: includes/class.cooked-recipe-meta.php:1181
-#: includes/class.cooked-recipe-meta.php:1212
-#: includes/class.cooked-recipe-meta.php:1237
-#: includes/class.cooked-recipe-meta.php:1261
-#: includes/class.cooked-recipe-meta.php:1321
-#: includes/class.cooked-recipe-meta.php:1366
-#: includes/class.cooked-recipe-meta.php:1396
-#: includes/class.cooked-recipe-meta.php:1441
-#: includes/class.cooked-recipe-meta.php:1564
+#: includes/class.cooked-recipe-meta.php:1178
+#: includes/class.cooked-recipe-meta.php:1224
+#: includes/class.cooked-recipe-meta.php:1255
+#: includes/class.cooked-recipe-meta.php:1280
+#: includes/class.cooked-recipe-meta.php:1304
+#: includes/class.cooked-recipe-meta.php:1364
+#: includes/class.cooked-recipe-meta.php:1409
+#: includes/class.cooked-recipe-meta.php:1439
+#: includes/class.cooked-recipe-meta.php:1484
+#: includes/class.cooked-recipe-meta.php:1607
msgid "Available Variables"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1139
+#: includes/class.cooked-recipe-meta.php:1182
#: includes/class.cooked-settings.php:228
-#: includes/class.cooked-shortcodes.php:446
-#: includes/class.cooked-shortcodes.php:624
+#: includes/class.cooked-shortcodes.php:448
+#: includes/class.cooked-shortcodes.php:626
msgid "Author"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1143
-#: includes/class.cooked-shortcodes.php:447
-#: includes/class.cooked-shortcodes.php:635
+#: includes/class.cooked-recipe-meta.php:1186
+#: includes/class.cooked-shortcodes.php:449
+#: includes/class.cooked-shortcodes.php:637
msgid "Difficulty"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1144
+#: includes/class.cooked-recipe-meta.php:1187
msgid "Servings Switcher"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1145
+#: includes/class.cooked-recipe-meta.php:1188
#: includes/class.cooked-settings.php:229
-#: includes/class.cooked-shortcodes.php:718
-#: includes/class.cooked-shortcodes.php:721
+#: includes/class.cooked-shortcodes.php:720
+#: includes/class.cooked-shortcodes.php:723
#: includes/class.cooked-taxonomies.php:39
msgid "Category"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1146
+#: includes/class.cooked-recipe-meta.php:1189
msgid "Print Mode"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1147
+#: includes/class.cooked-recipe-meta.php:1190
msgid "Full-Screen Mode"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1167
+#: includes/class.cooked-recipe-meta.php:1210
msgid "This will display the list of ingredients, added via the \"Ingredients\" tab."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1173
+#: includes/class.cooked-recipe-meta.php:1216
msgid "This will allow you to hide or show the checkboxes:"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1183
+#: includes/class.cooked-recipe-meta.php:1226
msgid "Show checkboxes"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1184
+#: includes/class.cooked-recipe-meta.php:1227
msgid "Hide checkboxes"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1198
+#: includes/class.cooked-recipe-meta.php:1241
msgid "This will display the list of directions, added via the \"Directions\" tab."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1204
+#: includes/class.cooked-recipe-meta.php:1247
msgid "This will allow you to hide or show the numbers:"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1214
+#: includes/class.cooked-recipe-meta.php:1257
msgid "Show numbers"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1215
+#: includes/class.cooked-recipe-meta.php:1258
msgid "Hide numbers"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1228
+#: includes/class.cooked-recipe-meta.php:1271
msgid "Featured Image"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1229
+#: includes/class.cooked-recipe-meta.php:1272
msgid "This will display the featured image, if one is set."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1239
-#: includes/class.cooked-recipe-meta.php:1263
-#: includes/class.cooked-recipe-meta.php:1368
+#: includes/class.cooked-recipe-meta.php:1282
+#: includes/class.cooked-recipe-meta.php:1306
+#: includes/class.cooked-recipe-meta.php:1411
msgid "None"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1252
+#: includes/class.cooked-recipe-meta.php:1295
msgid "Nutrition Label"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1253
+#: includes/class.cooked-recipe-meta.php:1296
msgid "This will display the Nutrition Facts label, if data is present."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1279
+#: includes/class.cooked-recipe-meta.php:1322
msgid "This will display the gallery, if one is set or created from the \"Gallery\" tab."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1287
+#: includes/class.cooked-recipe-meta.php:1330
msgid "Set the width of the gallery."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1294
+#: includes/class.cooked-recipe-meta.php:1337
msgid "Set the image size ratio."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1304
+#: includes/class.cooked-recipe-meta.php:1347
msgid "Set the navigation style."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1311
+#: includes/class.cooked-recipe-meta.php:1354
msgid "Enable or disable \"Full-Screen\" mode."
msgstr ""
#. translators: related to the width of slideshows: "80% or 300px" section title
-#: includes/class.cooked-recipe-meta.php:1326
+#: includes/class.cooked-recipe-meta.php:1369
#, php-format
msgid "ex: \"%1$s\" or \"%2$s\""
msgstr ""
#. translators: related to the image ratio for slideshows: "ex: 800/600" section title
-#: includes/class.cooked-recipe-meta.php:1331
+#: includes/class.cooked-recipe-meta.php:1374
#, php-format
msgid "ex: \"%s\""
msgstr ""
#. translators: related to the navigation style for slideshows: "dots, thumbs or false" section title
-#: includes/class.cooked-recipe-meta.php:1336
+#: includes/class.cooked-recipe-meta.php:1379
#, php-format
msgid "\"%1$s\", \"%2$s\", or \"%3$s\""
msgstr ""
#. translators: related to allowing full screen for slideshows: "true or false" section title
-#: includes/class.cooked-recipe-meta.php:1341
+#: includes/class.cooked-recipe-meta.php:1384
#, php-format
msgid "\"%1$s\" or \"%2$s\""
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1358
+#: includes/class.cooked-recipe-meta.php:1401
msgid "This will display the excerpt, if one is available from the \"Layout & Content\" tab."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1382
+#: includes/class.cooked-recipe-meta.php:1425
msgid "This will display the notes, if one is available from the \"Layout & Content\" tab."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1388
+#: includes/class.cooked-recipe-meta.php:1431
msgid "This will allow you to hide or show the header for the notes section:"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1398
+#: includes/class.cooked-recipe-meta.php:1441
msgid "Show header"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1399
+#: includes/class.cooked-recipe-meta.php:1442
msgid "Hide header"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1413
+#: includes/class.cooked-recipe-meta.php:1456
msgid "This will display a special link to start a cooking timer."
msgstr ""
#. translators: "seconds, minutes and hours" section title
-#: includes/class.cooked-recipe-meta.php:1422
+#: includes/class.cooked-recipe-meta.php:1465
#, php-format
msgid "\"%1$s\", \"%2$s\" and \"%3$s\""
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1424
+#: includes/class.cooked-recipe-meta.php:1467
msgid "Use just one or a combination of all three to set the timer length"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1431
+#: includes/class.cooked-recipe-meta.php:1474
msgid "Add a short description for this timer, if applicable."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1443
+#: includes/class.cooked-recipe-meta.php:1486
msgid "Time in seconds"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1444
+#: includes/class.cooked-recipe-meta.php:1487
msgid "Time in minutes"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1445
+#: includes/class.cooked-recipe-meta.php:1488
msgid "Time in hours"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1446
+#: includes/class.cooked-recipe-meta.php:1489
msgid "Timer Description"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1459
+#: includes/class.cooked-recipe-meta.php:1502
msgid "Next & Previous Recipe Navigation"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1460
+#: includes/class.cooked-recipe-meta.php:1503
msgid "This will display navigation links to the next and previous recipes."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1464
+#: includes/class.cooked-recipe-meta.php:1507
msgid "This shortcode automatically displays the previous and next recipe links based on the current recipe page. No parameters are required."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1469
+#: includes/class.cooked-recipe-meta.php:1512
msgid "Usage"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1471
+#: includes/class.cooked-recipe-meta.php:1514
msgid "Simply add the shortcode to your recipe template or content area. The navigation will automatically show the previous and next recipes based on recipe ID order."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1484
+#: includes/class.cooked-recipe-meta.php:1527
#: includes/class.cooked-related-recipes.php:34
msgid "Related Recipes"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1485
+#: includes/class.cooked-recipe-meta.php:1528
msgid "Displays a grid of related recipes based on shared terms in any of the recipe taxonomies (categories, cuisines, cooking methods, tags, diets), shown in random order. No cache or pre-calculation."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1493
+#: includes/class.cooked-recipe-meta.php:1536
msgid "Specify a recipe ID. If not provided, uses the current recipe."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1500
+#: includes/class.cooked-recipe-meta.php:1543
msgid "Set the heading text for the related recipes section."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1510
+#: includes/class.cooked-recipe-meta.php:1553
msgid "Number of recipes to display (default: 4)."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1517
+#: includes/class.cooked-recipe-meta.php:1560
msgid "Number of columns in the grid (default: 2)."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1527
+#: includes/class.cooked-recipe-meta.php:1570
msgid "Hide recipe card images."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1534
+#: includes/class.cooked-recipe-meta.php:1577
msgid "Hide recipe card excerpts."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1544
+#: includes/class.cooked-recipe-meta.php:1587
msgid "Hide recipe card authors."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1551
+#: includes/class.cooked-recipe-meta.php:1594
msgid "Toggle which taxonomies are used: match_categories, match_cuisines, match_cooking_methods, match_tags, match_diets (default: true)."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1558
+#: includes/class.cooked-recipe-meta.php:1601
msgid "Matching options:"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1559
+#: includes/class.cooked-recipe-meta.php:1602
msgid "Set to false to exclude a taxonomy from related recipes, e.g. match_cuisines=\"false\" to ignore cuisines."
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1566
+#: includes/class.cooked-recipe-meta.php:1609
msgid "Recipe ID"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1567
-msgid "Section heading"
-msgstr ""
-
-#: includes/class.cooked-recipe-meta.php:1568
+#: includes/class.cooked-recipe-meta.php:1611
msgid "Number of recipes"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1569
+#: includes/class.cooked-recipe-meta.php:1612
msgid "Grid columns"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1570
-#: includes/class.cooked-recipe-meta.php:1571
-#: includes/class.cooked-recipe-meta.php:1572
-#: includes/class.cooked-recipe-meta.php:1573
+#: includes/class.cooked-recipe-meta.php:1613
+#: includes/class.cooked-recipe-meta.php:1614
+#: includes/class.cooked-recipe-meta.php:1615
+#: includes/class.cooked-recipe-meta.php:1616
msgid "true/false"
msgstr ""
-#: includes/class.cooked-recipe-meta.php:1575
+#: includes/class.cooked-recipe-meta.php:1618
msgid "Example"
msgstr ""
@@ -1818,7 +1891,7 @@ msgid "Triple (%s Servings)"
msgstr ""
#: includes/class.cooked-recipes.php:865
-#: includes/class.cooked-shortcodes.php:448
+#: includes/class.cooked-shortcodes.php:450
msgid "Yields"
msgstr ""
@@ -2268,45 +2341,45 @@ msgstr ""
msgid "Public recipes are currently disabled. You can change this at the bottom of the %s page."
msgstr ""
-#: includes/class.cooked-shortcodes.php:298
+#: includes/class.cooked-shortcodes.php:300
msgid "(recipe not found or in draft status)"
msgstr ""
-#: includes/class.cooked-shortcodes.php:662
+#: includes/class.cooked-shortcodes.php:664
msgid "Fullscreen"
msgstr ""
-#: includes/class.cooked-shortcodes.php:1114
+#: includes/class.cooked-shortcodes.php:1116
msgid "Invalid recipe ID specified. Please provide a valid numeric recipe ID."
msgstr ""
-#: includes/class.cooked-shortcodes.php:1124
+#: includes/class.cooked-shortcodes.php:1126
msgid "No recipe found. Please specify a recipe ID using the id attribute, or use this shortcode on a recipe page."
msgstr ""
-#: includes/class.cooked-shortcodes.php:1131
+#: includes/class.cooked-shortcodes.php:1133
msgid "Recipe not found."
msgstr ""
-#: includes/class.cooked-shortcodes.php:1135
+#: includes/class.cooked-shortcodes.php:1137
#, php-format
msgid "The specified ID (%d) is not a recipe."
msgstr ""
-#: includes/class.cooked-shortcodes.php:1137
+#: includes/class.cooked-shortcodes.php:1139
#, php-format
msgid "No post found with ID %d."
msgstr ""
-#: includes/class.cooked-shortcodes.php:1146
+#: includes/class.cooked-shortcodes.php:1148
msgid "No related recipes found."
msgstr ""
-#: includes/class.cooked-shortcodes.php:1149
+#: includes/class.cooked-shortcodes.php:1151
msgid "This may be because there are no other recipes in the current language with matching attributes."
msgstr ""
-#: includes/class.cooked-shortcodes.php:1151
+#: includes/class.cooked-shortcodes.php:1153
msgid "Try adjusting the matching criteria or ensure you have other published recipes with shared categories, tags, or ingredients."
msgstr ""
diff --git a/package-lock.json b/package-lock.json
index f3e3eda..07f1a42 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "cooked",
- "version": "1.13.0",
+ "version": "1.14.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "cooked",
- "version": "1.13.0",
+ "version": "1.14.0",
"license": "ISC",
"devDependencies": {
"@playwright/test": "^1.48.2",
@@ -101,12 +101,11 @@
}
},
"node_modules/@opentelemetry/api": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz",
- "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==",
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.1.tgz",
+ "integrity": "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"engines": {
"node": ">=8.0.0"
}
@@ -130,7 +129,6 @@
"integrity": "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"engines": {
"node": ">=14"
},
@@ -144,7 +142,6 @@
"integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@opentelemetry/semantic-conventions": "1.28.0"
},
@@ -171,7 +168,6 @@
"integrity": "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@opentelemetry/api-logs": "0.57.2",
"@types/shimmer": "^1.2.0",
@@ -602,7 +598,6 @@
"integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@opentelemetry/core": "1.30.1",
"@opentelemetry/semantic-conventions": "1.28.0"
@@ -630,7 +625,6 @@
"integrity": "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@opentelemetry/core": "1.30.1",
"@opentelemetry/resources": "1.30.1",
@@ -654,12 +648,11 @@
}
},
"node_modules/@opentelemetry/semantic-conventions": {
- "version": "1.39.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.39.0.tgz",
- "integrity": "sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==",
+ "version": "1.40.0",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.40.0.tgz",
+ "integrity": "sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"engines": {
"node": ">=14"
}
@@ -991,9 +984,9 @@
}
},
"node_modules/@parcel/watcher/node_modules/picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
"license": "MIT",
"optional": true,
@@ -1016,14 +1009,13 @@
}
},
"node_modules/@playwright/test": {
- "version": "1.58.2",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.2.tgz",
- "integrity": "sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==",
+ "version": "1.59.1",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz",
+ "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
- "playwright": "1.58.2"
+ "playwright": "1.59.1"
},
"bin": {
"playwright": "cli.js"
@@ -1230,12 +1222,11 @@
}
},
"node_modules/@types/node": {
- "version": "20.19.33",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.33.tgz",
- "integrity": "sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==",
+ "version": "20.19.39",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.39.tgz",
+ "integrity": "sha512-orrrD74MBUyK8jOAD/r0+lfa1I2MO6I+vAkmAWzMYbCcgrN4lCrmK52gRFQq/JRxfYPfonkr4b0jcY7Olqdqbw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"undici-types": "~6.21.0"
}
@@ -1291,9 +1282,9 @@
}
},
"node_modules/@wordpress/e2e-test-utils-playwright": {
- "version": "1.40.0",
- "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.40.0.tgz",
- "integrity": "sha512-7EMx/5R0l9mlR4s01I06x8bw7qq30VlU98T/tvYJa+ycFQK3oetkoPyiNfki2Y2SILQGjI3Mu4MSV1NPCa/mEw==",
+ "version": "1.44.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.44.0.tgz",
+ "integrity": "sha512-iUKHGH8TjW1s0cpkcHF6y/APOmy4YnwBfzdBNCITK4+4fuSZnTV7vZyzBU3adthGcBSMGQ9w8MTE2AzGLtlG3w==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
@@ -1318,7 +1309,6 @@
"integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
"dev": true,
"license": "MIT",
- "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -1509,9 +1499,9 @@
}
},
"node_modules/axe-core": {
- "version": "4.11.1",
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.1.tgz",
- "integrity": "sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==",
+ "version": "4.11.3",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.3.tgz",
+ "integrity": "sha512-zBQouZixDTbo3jMGqHKyePxYxr1e5W8UdTmBQ7sNtaA9M2bE32daxxPLS/jojhKOHxQ7LWwPjfiwf/fhaJWzlg==",
"dev": true,
"license": "MPL-2.0",
"engines": {
@@ -1549,14 +1539,11 @@
}
},
"node_modules/balanced-match": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
- "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true,
- "license": "MIT",
- "engines": {
- "node": "18 || 20 || >=22"
- }
+ "license": "MIT"
},
"node_modules/bare-events": {
"version": "2.8.2",
@@ -1564,7 +1551,6 @@
"integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"peerDependencies": {
"bare-abort-controller": "*"
},
@@ -1575,12 +1561,11 @@
}
},
"node_modules/bare-fs": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.4.tgz",
- "integrity": "sha512-POK4oplfA7P7gqvetNmCs4CNtm9fNsx+IAh7jH7GgU0OJdge2rso0R20TNWVq6VoWcCvsTdlNDaleLHGaKx8CA==",
+ "version": "4.7.1",
+ "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.1.tgz",
+ "integrity": "sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw==",
"dev": true,
"license": "Apache-2.0",
- "optional": true,
"dependencies": {
"bare-events": "^2.5.4",
"bare-path": "^3.0.0",
@@ -1601,12 +1586,11 @@
}
},
"node_modules/bare-os": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz",
- "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==",
+ "version": "3.8.7",
+ "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.8.7.tgz",
+ "integrity": "sha512-G4Gr1UsGeEy2qtDTZwL7JFLo2wapUarz7iTMcYcMFdS89AIQuBoyjgXZz0Utv7uHs3xA9LckhVbeBi8lEQrC+w==",
"dev": true,
"license": "Apache-2.0",
- "optional": true,
"engines": {
"bare": ">=1.14.0"
}
@@ -1617,27 +1601,29 @@
"integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==",
"dev": true,
"license": "Apache-2.0",
- "optional": true,
"dependencies": {
"bare-os": "^3.0.1"
}
},
"node_modules/bare-stream": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.8.0.tgz",
- "integrity": "sha512-reUN0M2sHRqCdG4lUK3Fw8w98eeUIZHL5c3H7Mbhk2yVBL+oofgaIp0ieLfD5QXwPCypBpmEEKU2WZKzbAk8GA==",
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.0.tgz",
+ "integrity": "sha512-3zAJRZMDFGjdn+RVnNpF9kuELw+0Fl3lpndM4NcEOhb9zwtSo/deETfuIwMSE5BXanA0FrN1qVjffGwAg2Y7EA==",
"dev": true,
"license": "Apache-2.0",
- "optional": true,
"dependencies": {
- "streamx": "^2.21.0",
+ "streamx": "^2.25.0",
"teex": "^1.0.1"
},
"peerDependencies": {
+ "bare-abort-controller": "*",
"bare-buffer": "*",
"bare-events": "*"
},
"peerDependenciesMeta": {
+ "bare-abort-controller": {
+ "optional": true
+ },
"bare-buffer": {
"optional": true
},
@@ -1647,12 +1633,11 @@
}
},
"node_modules/bare-url": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz",
- "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.1.tgz",
+ "integrity": "sha512-fZapLWNB25gS+etK27NV9KgBNXgo2yeYHuj+OyPblQd6GYAE3JVy6aKxszMV5jhGGFwraXQKA5fldvf3lMyEqw==",
"dev": true,
"license": "Apache-2.0",
- "optional": true,
"dependencies": {
"bare-path": "^3.0.0"
}
@@ -1679,9 +1664,9 @@
"license": "MIT"
},
"node_modules/basic-ftp": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.2.0.tgz",
- "integrity": "sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.0.tgz",
+ "integrity": "sha512-5K9eNNn7ywHPsYnFwjKgYH8Hf8B5emh7JKcPaVjjrMJFQQwGpwowEnZNEtHs7DfR7hCZsmaK3VA4HUK0YarT+w==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1714,16 +1699,13 @@
}
},
"node_modules/brace-expansion": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz",
- "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz",
+ "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "balanced-match": "^4.0.2"
- },
- "engines": {
- "node": "18 || 20 || >=22"
+ "balanced-match": "^1.0.0"
}
},
"node_modules/braces": {
@@ -2107,8 +2089,7 @@
"resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1507524.tgz",
"integrity": "sha512-OjaNE7qpk6GRTXtqQjAE5bGx6+c4F1zZH0YXtpZQLM92HNXx4zMAaqlKhP4T52DosG6hDW8gPMNhGOF8xbwk/w==",
"dev": true,
- "license": "BSD-3-Clause",
- "peer": true
+ "license": "BSD-3-Clause"
},
"node_modules/dot-case": {
"version": "3.0.4",
@@ -2182,6 +2163,16 @@
"node": ">=8.6"
}
},
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/escalade": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
@@ -2897,9 +2888,9 @@
}
},
"node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz",
+ "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3013,9 +3004,9 @@
"license": "MIT"
},
"node_modules/immutable": {
- "version": "5.1.4",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz",
- "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==",
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz",
+ "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==",
"dev": true,
"license": "MIT"
},
@@ -3470,9 +3461,9 @@
}
},
"node_modules/lodash-es": {
- "version": "4.17.23",
- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz",
- "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz",
+ "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==",
"dev": true,
"license": "MIT"
},
@@ -3579,13 +3570,13 @@
}
},
"node_modules/minimatch": {
- "version": "9.0.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.6.tgz",
- "integrity": "sha512-kQAVowdR33euIqeA0+VZTDqU+qo1IeVY+hrKYtZMio3Pg0P0vuh/kwRylLUddJhB6pf3q/botcOvRtx4IN1wqQ==",
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
"dev": true,
"license": "ISC",
"dependencies": {
- "brace-expansion": "^5.0.2"
+ "brace-expansion": "^2.0.2"
},
"engines": {
"node": ">=16 || 14 >=14.17"
@@ -3626,9 +3617,9 @@
}
},
"node_modules/netmask": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
- "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.1.1.tgz",
+ "integrity": "sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3880,9 +3871,9 @@
}
},
"node_modules/pg-protocol": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.11.0.tgz",
- "integrity": "sha512-pfsxk2M9M3BuGgDOfuy37VNRRX3jmKgMjcvAcWqNDpZSf4cUmv8HSOl5ViRQFsfARFn0KuUQTgLxVMbNq5NW3g==",
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.13.0.tgz",
+ "integrity": "sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==",
"dev": true,
"license": "MIT"
},
@@ -3911,9 +3902,9 @@
"license": "ISC"
},
"node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3924,13 +3915,13 @@
}
},
"node_modules/playwright": {
- "version": "1.58.2",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz",
- "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==",
+ "version": "1.59.1",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz",
+ "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "playwright-core": "1.58.2"
+ "playwright-core": "1.59.1"
},
"bin": {
"playwright": "cli.js"
@@ -3943,9 +3934,9 @@
}
},
"node_modules/playwright-core": {
- "version": "1.58.2",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz",
- "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==",
+ "version": "1.59.1",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz",
+ "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -4087,9 +4078,9 @@
"license": "MIT"
},
"node_modules/pump": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz",
- "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz",
+ "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4098,17 +4089,17 @@
}
},
"node_modules/puppeteer-core": {
- "version": "24.37.5",
- "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.37.5.tgz",
- "integrity": "sha512-ybL7iE78YPN4T6J+sPLO7r0lSByp/0NN6PvfBEql219cOnttoTFzCWKiBOjstXSqi/OKpwae623DWAsL7cn2MQ==",
+ "version": "24.41.0",
+ "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.41.0.tgz",
+ "integrity": "sha512-rLIUri7E/NQ3APSEYCCozaSJx0u8Tu9wxO6BJwnvXmIgILSK3L0TombaVh3izp1njAGrO6H2ru0hcIrLF+gWLw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@puppeteer/browsers": "2.13.0",
"chromium-bidi": "14.0.0",
"debug": "^4.4.3",
- "devtools-protocol": "0.0.1566079",
- "typed-query-selector": "^2.12.0",
+ "devtools-protocol": "0.0.1595872",
+ "typed-query-selector": "^2.12.1",
"webdriver-bidi-protocol": "0.4.1",
"ws": "^8.19.0"
},
@@ -4117,16 +4108,16 @@
}
},
"node_modules/puppeteer-core/node_modules/devtools-protocol": {
- "version": "0.0.1566079",
- "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1566079.tgz",
- "integrity": "sha512-MJfAEA1UfVhSs7fbSQOG4czavUp1ajfg6prlAN0+cmfa2zNjaIbvq8VneP7do1WAQQIvgNJWSMeP6UyI90gIlQ==",
+ "version": "0.0.1595872",
+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1595872.tgz",
+ "integrity": "sha512-kRfgp8vWVjBu/fbYCiVFiOqsCk3CrMKEo3WbgGT2NXK2dG7vawWPBljixajVgGK9II8rDO9G0oD0zLt3I1daRg==",
"dev": true,
"license": "BSD-3-Clause"
},
"node_modules/puppeteer-core/node_modules/ws": {
- "version": "8.19.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz",
- "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==",
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz",
+ "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4239,12 +4230,13 @@
}
},
"node_modules/resolve": {
- "version": "1.22.11",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
- "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
+ "version": "1.22.12",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz",
+ "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==",
"dev": true,
"license": "MIT",
"dependencies": {
+ "es-errors": "^1.3.0",
"is-core-module": "^2.16.1",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
@@ -4336,14 +4328,14 @@
"license": "MIT"
},
"node_modules/sass": {
- "version": "1.97.3",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.3.tgz",
- "integrity": "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==",
+ "version": "1.99.0",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.99.0.tgz",
+ "integrity": "sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"chokidar": "^4.0.0",
- "immutable": "^5.0.2",
+ "immutable": "^5.1.5",
"source-map-js": ">=0.6.2 <2.0.0"
},
"bin": {
@@ -4546,9 +4538,9 @@
"license": "MIT"
},
"node_modules/streamx": {
- "version": "2.23.0",
- "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz",
- "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==",
+ "version": "2.25.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.25.0.tgz",
+ "integrity": "sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4660,9 +4652,9 @@
}
},
"node_modules/tar-fs": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz",
- "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.2.tgz",
+ "integrity": "sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4675,13 +4667,14 @@
}
},
"node_modules/tar-stream": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
- "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.8.tgz",
+ "integrity": "sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"b4a": "^1.6.4",
+ "bare-fs": "^4.5.5",
"fast-fifo": "^1.2.0",
"streamx": "^2.15.0"
}
@@ -4724,20 +4717,20 @@
}
},
"node_modules/tldts-core": {
- "version": "7.0.23",
- "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.23.tgz",
- "integrity": "sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==",
+ "version": "7.0.28",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.28.tgz",
+ "integrity": "sha512-7W5Efjhsc3chVdFhqtaU0KtK32J37Zcr9RKtID54nG+tIpcY79CQK/veYPODxtD/LJ4Lue66jvrQzIX2Z2/pUQ==",
"dev": true,
"license": "MIT"
},
"node_modules/tldts-icann": {
- "version": "7.0.23",
- "resolved": "https://registry.npmjs.org/tldts-icann/-/tldts-icann-7.0.23.tgz",
- "integrity": "sha512-LMc6V1KOHFjKDU8wyDsIEJdV8o2bpc2OaYw2NxncJB2oZxJMPpiNVAbiu1HnqsUy81fkK1QWwFztVqY81hUFEg==",
+ "version": "7.0.28",
+ "resolved": "https://registry.npmjs.org/tldts-icann/-/tldts-icann-7.0.28.tgz",
+ "integrity": "sha512-brkN3yIgYTzBpSxB71XYBwUMDgutmKmA+6TWzgGD/EPcvCc6LHMTRaYj9ik1u3BxhSW53qIK/7cgjA2rF7BgbA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "tldts-core": "^7.0.23"
+ "tldts-core": "^7.0.28"
}
},
"node_modules/to-regex-range": {
@@ -4787,9 +4780,9 @@
}
},
"node_modules/typed-query-selector": {
- "version": "2.12.0",
- "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz",
- "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==",
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.1.tgz",
+ "integrity": "sha512-uzR+FzI8qrUEIu96oaeBJmd9E7CFEiQ3goA5qCVgc4s5llSubcfGHq9yUstZx/k4s9dXHVKsE35YWoFyvEqEHA==",
"dev": true,
"license": "MIT"
},
diff --git a/package.json b/package.json
index c8bd75c..589fe64 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "cooked",
- "version": "1.13.0",
+ "version": "1.14.0",
"description": "Cooked is the absolute best way to create & display recipes with WordPress. SEO optimized (rich snippets), galleries, cooking timers, printable recipes and much more.",
"main": "index.js",
"scripts": {
diff --git a/readme.txt b/readme.txt
index 8ddc143..7d2e567 100644
--- a/readme.txt
+++ b/readme.txt
@@ -2,8 +2,8 @@
Contributors: xjsv, boxystudio
Tags: recipe, recipes, food, cooking, nutrition
Requires at least: 4.7
-Tested up to: 6.9.1
-Stable tag: 1.13.0
+Tested up to: 6.9.4
+Stable tag: 1.14.0
Requires PHP: 7.4
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
@@ -80,12 +80,18 @@ Please report security bugs found in the source code of the Cooked plugin throug
== Upgrade Notice ==
-Version 1.13.0 includes CSV import functionality, changes to the [cooked-related-recipes] shortcode, and other minor improvements and bug fixes.
+Version 1.14.0 includes
== Changelog ==
+= 1.14.0 =
+* **NEW:** Added a new "Add Bulk Ingredients" and "Add Bulk Directions" buttons to the recipe builder.
+* **FIX:** Validated style attribute for the [cooked-recipe-card] and [cooked-categories] shortcodes.
+* **TWEAK:** Added Ingredient Substitution fields to the migration and imports features.
+* **TWEAK:** Updated the "Apply to All" template update feature to fix potential performance issues with large recipe collections.
+
= 1.13.0 =
-* **NEW:** Added CSV import functionality for bulk importing recipes from CSV files. Supports all recipe fields including ingredients with substitutions, directions, nutrition data, categories, and tags.
+* **NEW:** Added CSV import functionality for bulk importing recipes from CSV files. Supports all recipe fields including ingredients with substitutions, directions, nutrition data, categories, and tags (thanks to @mgiannopoulos24).
* **TWEAK:** Simplified the way the [cooked-related-recipes] shortcode works.
* **FIX:** Fixed a bug with the recipe directions and ingredients not being sortable in mobile devices.
* **FIX:** Fixed a bug when toggling full screen view in recipe fields that use the WP Editor.
diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php
index 90e264a..98ed554 100644
--- a/vendor/composer/installed.php
+++ b/vendor/composer/installed.php
@@ -1,8 +1,8 @@
array(
'name' => 'xjsv/cooked',
- 'pretty_version' => '1.13.0',
- 'version' => '1.13.0.0',
+ 'pretty_version' => '1.14.0',
+ 'version' => '1.14.0.0',
'reference' => null,
'type' => 'wordpress-plugin',
'install_path' => __DIR__ . '/../../',
@@ -20,8 +20,8 @@
'dev_requirement' => false,
),
'xjsv/cooked' => array(
- 'pretty_version' => '1.13.0',
- 'version' => '1.13.0.0',
+ 'pretty_version' => '1.14.0',
+ 'version' => '1.14.0.0',
'reference' => null,
'type' => 'wordpress-plugin',
'install_path' => __DIR__ . '/../../',
From 04d3e7a406f475b7e91422513a2536a5f5cb3823 Mon Sep 17 00:00:00 2001
From: Armand Tresova
Date: Mon, 20 Apr 2026 20:34:22 -0400
Subject: [PATCH 6/8] Removed automatic removal of empty ingredient or
directions
---
assets/admin/js/cooked-functions.js | 87 -------------------------
assets/admin/js/cooked-functions.min.js | 2 +-
2 files changed, 1 insertion(+), 88 deletions(-)
diff --git a/assets/admin/js/cooked-functions.js b/assets/admin/js/cooked-functions.js
index 5e0bed7..021d0a5 100644
--- a/assets/admin/js/cooked-functions.js
+++ b/assets/admin/js/cooked-functions.js
@@ -1370,93 +1370,8 @@ function cooked_init_bulk_add($) {
});
}
-/** Returns true if an ingredient row has no meaningful field values (heading or line fields). */
-function cooked_is_ingredient_block_empty($block) {
- if ($block.hasClass('cooked-ingredient-heading')) {
- return ($block.find('[data-ingredient-part="section_heading_name"]').val() || '').trim() === '';
- }
- var hasContent = false;
- $block.find('[data-ingredient-part]').each(function() {
- var part = jQuery(this).data('ingredient-part');
- if (part === 'section_heading_element') {
- return;
- }
- var $f = jQuery(this);
- var v = $f.is('select') ? $f.val() : ($f.val() || '').trim();
- if (v !== null && v !== '' && String(v).trim() !== '') {
- hasContent = true;
- return false;
- }
- });
- return !hasContent;
-}
-
-/** Plain-text direction step content from TinyMCE or textarea (HTML stripped, NBSPs normalized). */
-function cooked_direction_block_content_text($block) {
- var $ta = $block.find('textarea[data-direction-part="content"]');
- if (!$ta.length) {
- return '';
- }
- var id = $ta.attr('id');
- var raw = '';
- if (id && typeof tinymce !== 'undefined' && tinymce.get(id)) {
- raw = tinymce.get(id).getContent() || '';
- } else {
- raw = $ta.val() || '';
- }
- return jQuery('').html(raw).text().replace(/\u00a0/g, ' ').trim();
-}
-
-/** Returns true if a direction row is empty (no heading text, image, or body content). */
-function cooked_is_direction_block_empty($block) {
- if ($block.hasClass('cooked-direction-heading')) {
- return ($block.find('[data-direction-part="section_heading_name"]').val() || '').trim() === '';
- }
- if (($block.find('input[data-direction-part="image"]').val() || '').trim() !== '') {
- return false;
- }
- return cooked_direction_block_content_text($block) === '';
-}
-
-/** Removes ingredient rows that are empty before bulk-adding new items. */
-function cooked_bulk_remove_empty_ingredient_rows() {
- jQuery('#cooked-ingredients-builder').children('.cooked-ingredient-block').each(function() {
- var $b = jQuery(this);
- if (cooked_is_ingredient_block_empty($b)) {
- $b.remove();
- }
- });
-}
-
-/** Removes empty direction rows before bulk-adding, and removes WP editors when needed. */
-function cooked_bulk_remove_empty_direction_rows() {
- var canRemoveWpEditor = !!(
- cooked_admin_functions_js_vars.wp_editor_roles_allowed &&
- typeof wp !== 'undefined' &&
- wp.editor &&
- typeof wp.editor.remove === 'function'
- );
-
- jQuery('#cooked-directions-builder').children('.cooked-direction-block').each(function() {
- var $b = jQuery(this);
- if (!cooked_is_direction_block_empty($b)) {
- return;
- }
- if (canRemoveWpEditor) {
- var $ta = $b.find('textarea[data-direction-part="content"]');
- var fieldID = $ta.attr('id');
- if (fieldID) {
- wp.editor.remove(fieldID);
- }
- }
- $b.remove();
- });
-}
-
/** Appends direction rows from bulk-add items (headings or plain steps) and resets the builder. */
function cooked_bulk_add_directions(items) {
- cooked_bulk_remove_empty_direction_rows();
-
var $_builder = jQuery('#cooked-directions-builder');
var $_parent = $_builder.parent();
@@ -1483,8 +1398,6 @@ function cooked_bulk_add_directions(items) {
/** Appends ingredient rows from bulk-add items (headings or amount/unit/name) and resets the builder. */
function cooked_bulk_add_ingredients_parsed(items) {
- cooked_bulk_remove_empty_ingredient_rows();
-
var $_builder = jQuery('#cooked-ingredients-builder');
var $_parent = $_builder.parent();
diff --git a/assets/admin/js/cooked-functions.min.js b/assets/admin/js/cooked-functions.min.js
index 12e54b8..a93de4f 100644
--- a/assets/admin/js/cooked-functions.min.js
+++ b/assets/admin/js/cooked-functions.min.js
@@ -1 +1 @@
-var $_CookedConditionalTimeout=!1,cookedSortableTouchHandler=function(e){var t={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup"},o=e.target.closest(".cooked-icon-drag");o&&o.closest(".cooked-sortable")&&e.changedTouches&&e.changedTouches.length&&t[e.type]&&(o=e.changedTouches[0],e.preventDefault(),t=new MouseEvent(t[e.type],{bubbles:!0,cancelable:!0,view:window,detail:1,screenX:o.screenX,screenY:o.screenY,clientX:o.clientX,clientY:o.clientY,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null}),o.target.dispatchEvent(t))},cooked_recipe_update_counter=((_=>{_(document).ready(function(){var c,o,t,e,i,n,d,a,r,l=_(".cooked-color-field"),s=_("#cooked_recipe_settings").find("select"),u=_("#cooked-recipe-tabs"),k=(_("#cooked-settings-wrap"),_("#cooked_recipe_settings")),p=k.find("input#submit");$_CookedTooltips=_(".cooked-tooltip"),$_CookedConditionals=_(".cooked-conditional-hidden"),$_CookedSortable=_(".cooked-sortable"),$_CookedRecipeSaveDefault=_(".cooked-layout-save-default"),$_CookedShortcodeField=_(".cooked-shortcode-field"),$_CookedIngredientBuilder=_("#cooked-ingredients-builder"),$_CookedAutoNutritionButton=_(".cooked-auto-nutrition-button"),$_CookedDirectionBuilder=_("#cooked-directions-builder"),$_CookedRecipeGallery=_("#cooked-recipe-image-gallery"),$_CookedNutritionFactsTab=_("#cooked-recipe-tab-content-nutrition"),$_CookedSettingsPanel=_("#cooked-settings-panel"),$_CookedSettingsTabs=_("#cooked-settings-tabs"),l.length&&l.wpColorPicker(),$_CookedSortable.length&&(document.addEventListener("touchstart",cookedSortableTouchHandler,{passive:!1}),document.addEventListener("touchmove",cookedSortableTouchHandler,{passive:!1}),document.addEventListener("touchend",cookedSortableTouchHandler,{passive:!1}),$_CookedSortable.find(".cooked-icon-drag").length?$_CookedSortable.sortable({handle:".cooked-icon-drag",stop:function(e,t){t.item.closest("#cooked-directions-builder").length&&cooked_reset_direction_builder();var t=t.item.find("textarea"),o=!(!cooked_admin_functions_js_vars.wp_editor_roles_allowed||"undefined"==typeof wp||!wp.editor||"function"!=typeof wp.editor.remove||"function"!=typeof wp.editor.initialize);t.length&&o&&(o=t.attr("name"),t=t.attr("id"),wp.editor.remove(t),wp.editor.initialize(t,{tinymce:{wpautop:!1,toolbar1:"bold,italic,underline,blockquote,strikethrough,bullist,numlist,alignleft,aligncenter,alignright,undo,redo,wp_link_advanced,unlink,fullscreen",toolbar2:"",toolbar3:"",toolbar4:"",height:100,textarea_name:o,plugins:"link lists fullscreen wordpress wplink",setup:function(e){}},quicktags:!0,mediaButtons:!1}))}}):$_CookedSortable.sortable({stop:function(e,t){t.item.closest("#cooked-directions-builder").length&&cooked_reset_direction_builder()}})),$_CookedRecipeSaveDefault.length&&($_CookedRecipeSaveDefault.tooltipster({theme:["tooltipster-light","tooltipster-sideTip-cooked"],trigger:"click",animation:"grow",delay:0,speed:200,maxWidth:275,contentAsHTML:!0,interactive:!0,functionReady:function(r,e){_(".cooked-save-default-all").on("click",function(e){e.preventDefault();var t,o=_(this),e=o.data("nonce"),i=o.data("bulk-nonce"),n=o.parent(),d=confirm(cooked_admin_functions_js_vars.i18n_confirm_save_default_all),a=_("#_recipe_settings_content"),c=tinymce.get("_recipe_settings_content");t=null===c?a.val():c.getContent(),d&&!o.hasClass("disabled")&&(n.find(".button, .button-primary").addClass("disabled"),_.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_save_default",default_content:t,nonce:e},function(){_.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_get_recipe_count",nonce:i},function(e){o.removeClass("button-primary").addClass("button"),e&&e.success&&0
')}),$_CookedTooltips.length&&$_CookedTooltips.tooltipster({theme:["tooltipster-light","tooltipster-sideTip-cooked"],animation:"grow",delay:100,speed:200,maxWidth:275,contentAsHTML:!0,interactive:!0}),$_CookedShortcodeField.length&&$_CookedShortcodeField.on("click",function(e){_(this).select()}),$_CookedConditionals.length&&(c=[],$_CookedConditionals.each(function(){var e=_(this),t=_(this).data("condition"),o=_(this).data("value"),i=_("#"+t),o=!!o&&o.split(" "),n=e.is("li")||e.is("span")?"inline-block":"block";i.is(":checkbox")&&i.is(":checked")||i.is(":radio")&&i.is(":checked")||!(i.is(":checkbox")&&!i.is(":checked")||i.is(":radio")&&!i.is(":checked"))&&(!i.is(":checkbox")&&!o&&i.val()||!i.is(":checkbox")&&o&&-1<_.inArray(i.val(),o)||!i.is(":radio")&&!o&&i.val()||!i.is(":radio")&&o&&-1<_.inArray(i.val(),o))?e.css({display:n}):e.hide(),-1==_.inArray(t,c)&&c.push(t);for(var d=c.length,a=0;a
a").attr("href")).split("#"))[1],_(".cooked-settings-tab-content").hide(),_("#cooked-settings-tab-content-"+n).show(),s.on("click",function(e){_(".tab-content").hide();var t=_(this).find("a"),t=($_CookedSettingsTabs.find("li").removeClass("active"),_(this).addClass("active"),t.attr("href"));"migration"==(t=(t=t.split("#"))[1])?p.hide():p.show(),_(".cooked-settings-tab-content").hide(),_("#cooked-settings-tab-content-"+t).show(),_("#cooked-settings-panel").hasClass("stuck")?window.scrollTo(0,130):window.scrollTo(0,0)})),$_CookedIngredientBuilder.length&&(cooked_reset_ingredient_builder(),$_CookedIngredientBuilder.on("keydown",'input[data-ingredient-part="name"]',function(e){9!==e.keyCode&&13!==e.keyCode||_(this).parents(".cooked-ingredient-block").is(":last-child")&&(e.preventDefault(),_("#cooked-recipe-tab-content-ingredients").find(".cooked-add-ingredient-button").trigger("click"),$_CookedIngredientBuilder.find('.cooked-ingredient-block:last-child input[data-ingredient-part="amount"]').focus())}),$_CookedIngredientBuilder.parent().on("click",".cooked-show-substitution",function(e){e.preventDefault();e=_(this).parent();e.hasClass("cooked-expanded")?e.removeClass("cooked-expanded"):(e.addClass("cooked-expanded"),e.find('input[data-ingredient-part="sub_amount"]').focus())}),$_CookedIngredientBuilder.on("keyup change",'input[data-ingredient-part="sub_amount"], input[data-ingredient-part="sub_name"], select[data-ingredient-part="sub_measurement"]',function(e){var t=_(this).parents(".recipe-setting-block"),o=t.find('input[data-ingredient-part="sub_name"]').val();o&&o.trim()?t.addClass("cooked-has-substitution"):t.removeClass("cooked-has-substitution")}),$_CookedAutoNutritionButton.length&&$_CookedIngredientBuilder.on("change",'input[data-ingredient-part="name"]',function(e){var t=!1;$_CookedIngredientBuilder.find('input[data-ingredient-part="name"]').each(function(){if(""!=_(this).val())return!(t=!0)}),t?$_CookedAutoNutritionButton.prop("disabled",!1):$_CookedAutoNutritionButton.prop("disabled",!0)}),$_CookedIngredientBuilder.on("keyup",'input[data-ingredient-part="url"]',function(e){var t=_(this).val(),o=_(this).parents(".recipe-setting-block");t?o.addClass("cooked-has-url"):o.removeClass("cooked-has-url")}),$_CookedIngredientBuilder.parent().on("click",".cooked-add-ingredient-button",function(e){e.preventDefault();e=$_CookedIngredientBuilder.parent().find(".cooked-ingredient-template").clone().removeClass("cooked-template cooked-ingredient-template").addClass("cooked-ingredient-block");$_CookedIngredientBuilder.append(e),cooked_reset_ingredient_builder()}),$_CookedIngredientBuilder.parent().on("click",".cooked-add-heading-button",function(e){e.preventDefault();e=$_CookedIngredientBuilder.parent().find(".cooked-heading-template").clone().removeClass("cooked-template cooked-heading-template").addClass("cooked-ingredient-block cooked-ingredient-heading");$_CookedIngredientBuilder.append(e),cooked_reset_ingredient_builder()}),$_CookedIngredientBuilder.parent().on("click",".cooked-delete-ingredient",function(e){e.preventDefault(),_(this).parent().remove(),cooked_reset_ingredient_builder()})),$_CookedDirectionBuilder.length&&(cooked_reset_direction_builder(),$_CookedDirectionBuilder.parent().on("click",".cooked-show-heading-element",function(e){e.preventDefault();e=_(this).parent();e.hasClass("cooked-expanded")?e.removeClass("cooked-expanded"):(e.addClass("cooked-expanded"),e.find('input[data-direction-part="section_heading_element"]').focus())}),$_CookedDirectionBuilder.parent().on("click",".cooked-add-direction-button",function(e){e.preventDefault();e=$_CookedDirectionBuilder.parent().find(".cooked-direction-template").clone().removeClass("cooked-template cooked-direction-template").addClass("cooked-direction-block");$_CookedDirectionBuilder.append(e),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".cooked-add-heading-button",function(e){e.preventDefault();e=$_CookedDirectionBuilder.parent().find(".cooked-heading-template").clone().removeClass("cooked-template cooked-heading-template").addClass("cooked-direction-block cooked-direction-heading");$_CookedDirectionBuilder.append(e),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".cooked-delete-direction",function(e){e.preventDefault();var t,e=_(this).parent();cooked_admin_functions_js_vars.wp_editor_roles_allowed&&"undefined"!=typeof wp&&wp.editor&&"function"==typeof wp.editor.remove&&(t=e.find('textarea[data-direction-part="content"]').attr("id"))&&wp.editor.remove(t),e.remove(),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".remove-image-button",function(e){e.preventDefault();e=_(this).parent();e.removeClass("cooked-has-image"),e.find("img").attr("src","").removeAttr("srcset").removeAttr("sizes"),e.find('input[data-direction-part="image"]').val(""),cooked_reset_direction_builder()}),_("body").on("click",".cooked-direction-img-placeholder, .cooked-direction-img",function(e){e.preventDefault(),_(this).parent().find(".direction-image-button").trigger("click")}),_("body").on("click",".direction-image-button",function(e){var t=_(this);a=t.data("id"),e.preventDefault(),d||(d=wp.media.frames.direction_image_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_image_title,button:{text:cooked_admin_functions_js_vars.i18n_image_button},library:{type:"image"}})).on("select",function(){var e=d.state().get("selection").first().toJSON();_("#direction-"+a+"-image-src").attr("src",e.sizes.thumbnail.url).removeAttr("srcset").removeAttr("sizes").parent().addClass("cooked-has-image"),_('input[name="_recipe_settings[directions]['+a+'][image]"]').val(e.id),_('.direction-image-button[data-id="'+a+'"]').prop("value",cooked_admin_functions_js_vars.i18n_image_change)}),d.open()})),cooked_init_bulk_add(_),$_CookedRecipeGallery.length&&(cooked_init_gallery_sorting(),_("body").on("click",".cooked-gallery-add-button",function(e){_(this);e.preventDefault(),r||(r=wp.media.frames.gallery_images_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_gallery_image_title,button:{text:cooked_admin_functions_js_vars.i18n_gallery_image_title},library:{type:"image"},multiple:!0})).on("select",function(){var e,t,o,i=r.state().get("selection").toJSON();for(e in i)i.hasOwnProperty(e)&&(o=(t=i[e]).sizes.thumbnail.url,_("#cooked-recipe-image-gallery").append('
'+t.title+' '));cooked_init_gallery_sorting()}),r.open()}),_("body").on("click",".cooked-recipe-gallery-item img",function(e){e.preventDefault(),_(this).parent().find(".cooked-gallery-edit-button").trigger("click")}),_("body").on("click",".cooked-gallery-edit-button",function(e){var n=_(this),t=n.data("attachment-id"),d=(e.preventDefault(),wp.media.frames.gallery_images_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_edit_image_title,button:{text:cooked_admin_functions_js_vars.i18n_edit_image_button},library:{type:"image"},multiple:!1}));d.on("open",function(){var e=d.state().get("selection");(attachment=wp.media.attachment(t)).fetch(),e.add(attachment?[attachment]:[])}),d.open(),d.on("select",function(){var e,t,o,i=d.state().get("selection").toJSON();for(e in i)i.hasOwnProperty(e)&&(o=(t=i[e]).sizes.thumbnail.url,n.parent().replaceWith('
'+t.title+' '));cooked_init_gallery_sorting()})}),$_CookedRecipeGallery.on("click",".remove-image-button",function(e){var t=_(this);a=t.data("id"),e.preventDefault(),a?(_("#direction-"+a+"-image-src").parent().removeClass("cooked-has-image").prop("src",!1),_('input[name="_recipe_settings[directions]['+a+'][image]"]').val(""),_('.direction-image-button[data-id="'+a+'"]').prop("value",cooked_admin_functions_js_vars.i18n_image_title)):t.parent().remove()})),$_CookedNutritionFactsTab.length&&(init_nutrition_facts($_CookedNutritionFactsTab),$_CookedNutritionFactsTab.on("keyup","input",function(e){init_nutrition_facts($_CookedNutritionFactsTab)})),_("#cooked-prep-time").length&&_("#cooked-prep-time,#cooked-cook-time").on("change",function(){cooked_updateTotalTimeValue(parseInt(_("#cooked-prep-time").val()),parseInt(_("#cooked-cook-time").val()))})})})(jQuery),0),cooked_bulk_per_page=20;function cooked_set_default_template(o,i,n,d,a){var c,r,l;i<=0||(c=jQuery("#cooked-template-progress"),r=c.find(".cooked-progress-bar"),l=jQuery("#cooked-template-progress-text"),c.hasClass("cooked-active")||(c.addClass("cooked-active"),l.addClass("cooked-active"),r.css({width:"0%"}),a.reposition()),jQuery.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_save_default_bulk",page:o,default_content:n,nonce:d},function(e){var t;e&&e.success&&(cooked_recipe_update_counter=Math.min((o+1)*cooked_bulk_per_page,i),t=Math.round(cooked_recipe_update_counter/i*100),r.css({width:t+"%"}),l.text(cooked_recipe_update_counter+" / "+i),e.data.has_more?cooked_set_default_template(o+1,i,n,d,a):(jQuery(".cooked-save-default-all").text(cooked_admin_functions_js_vars.i18n_applied),r.css({width:"100%"}),l.text(i+" / "+i),c.removeClass("cooked-active"),l.removeClass("cooked-active").text(""),a.reposition()))},"json"))}function cooked_updateTotalTimeValue(e,t){jQuery("#cooked-total-time").val(e+t)}function cooked_init_gallery_sorting(){jQuery("#cooked-recipe-image-gallery").sortable()}function init_nutrition_facts(e){e.find("input").each(function(){var e,t=jQuery(this),o=t.attr("id"),t=t.val(),i=jQuery('.cooked-nut-percent[data-labeltype="'+o+'"]').length;jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').length&&(t?(jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').text(t),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("li").eq(0).show(),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("p").eq(0).show(),i&&(e=(i=jQuery('.cooked-nut-percent[data-labeltype="'+o+'"]')).data("pdv"))&&(thisPercent=Math.ceil(t/e*100),i.text(thisPercent))):(jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').text("___"),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("li").eq(0).hide(),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("p").eq(0).hide()))})}function cooked_reset_ingredient_builder(){var e=jQuery(".cooked-ingredient-block"),t=0,i=0,o=!1;0").text(e).html()}function f(e,t){if(u.empty(),e.length){s.attr("data-bulk-type","ingredients"),s.show(),k.removeAttr("disabled"),u.find(".cooked-bulk-add-preview-header").length||u.prepend('");for(var o=0;o '),d=l('"),a=l(''),c=l('').text(_.i18n_bulk_add_heading_line_label),r=l('').val(e[o]),c=(a.append(c).append(r),l('')),r=l(''),i=l('');n.append(d).append(a).append(c).append(r).append(i),u.append(n)}}else s.attr("data-bulk-type",""),s.hide(),k.attr("disabled","disabled")}i.length&&(t=l("#cooked-bulk-add-textarea"),s=l("#cooked-bulk-add-preview"),u=l("#cooked-bulk-add-preview-list"),o=l("#cooked-bulk-add-title"),r=l("#cooked-bulk-add-type"),k=i.find(".cooked-bulk-add-submit"),p=i.find(".cooked-bulk-add-spinner"),_=cooked_admin_functions_js_vars,m=null,g="",t.on("input",function(){var e=r.val(),o=(e=>{for(var t=e.split(/[\r\n]+/),o=[],i=0;i '),a=l('"),c=l('');d.append(a).append(c),u.append(d)}}else s.attr("data-bulk-type",""),s.hide(),k.attr("disabled","disabled")}else t!==g&&(g=t,f(o,null),m&&clearTimeout(m),m=setTimeout(function(){var t;(t=o).length?(p.show().css("visibility","visible"),l.post(_.ajax_url,{action:"cooked_parse_bulk_ingredients",nonce:_.cooked_bulk_add_nonce,lines:t},function(e){p.hide();e=e.success&&e.data&&e.data.parsed?e.data.parsed:null;f(t,e)}).fail(function(){p.hide(),f(t,null)})):f([],null)},400))}),l(document).on("click",".cooked-bulk-add-button",function(e){e.preventDefault();var e=l(this).data("type");e=e,r.val(e),t.val(""),u.empty(),s.attr("data-bulk-type",""),s.hide(),k.attr("disabled","disabled"),p.hide(),g="","ingredients"===e?(o.text(_.i18n_bulk_add_ingredients),t.attr("placeholder",_.i18n_bulk_add_placeholder_ingredients),k.text(_.i18n_bulk_add_submit_ingredients)):(o.text(_.i18n_bulk_add_directions),t.attr("placeholder",_.i18n_bulk_add_placeholder_directions),k.text(_.i18n_bulk_add_submit_directions)),i.show(),t.focus()}),i.on("click",".cooked-bulk-add-close, .cooked-bulk-add-cancel",function(e){e.preventDefault(),n()}),i.on("click",function(e){l(e.target).is(i)&&n()}),l(document).on("keydown",function(e){"Escape"===e.key&&i.is(":visible")&&n()}),u.on("change",'input[type="checkbox"]',function(){var e=l(this).closest(".cooked-bulk-add-preview-row"),t=l(this).is(":checked");e.toggleClass("cooked-bulk-add-is-heading",t)}),k.on("click",function(e){var i;e.preventDefault(),l(this).attr("disabled")||(e=r.val(),i=[],"ingredients"===e?u.find(".cooked-bulk-add-preview-row").each(function(){var e=l(this),t=e.find('input[type="checkbox"]').is(":checked"),o=e.find(".cooked-bulk-add-preview-text").val().trim();o&&i.push(t?{text:o,heading:!0}:{heading:!1,amount:e.find(".cooked-bulk-add-parsed-amount").val().trim(),measurement:e.find(".cooked-bulk-add-parsed-unit").val().trim(),name:e.find(".cooked-bulk-add-parsed-name").val().trim()||o})}):u.find(".cooked-bulk-add-preview-row").each(function(){var e=l(this),t=e.find(".cooked-bulk-add-preview-text").val().trim(),e=e.find('input[type="checkbox"]').is(":checked");t&&i.push({text:t,heading:e})}),i.length&&(("directions"===e?cooked_bulk_add_directions:cooked_bulk_add_ingredients_parsed)(i),n()))}))}function cooked_is_ingredient_block_empty(e){var t;return e.hasClass("cooked-ingredient-heading")?""===(e.find('[data-ingredient-part="section_heading_name"]').val()||"").trim():(t=!1,e.find("[data-ingredient-part]").each(function(){var e;return"section_heading_element"!==jQuery(this).data("ingredient-part")&&null!==(e=(e=jQuery(this)).is("select")?e.val():(e.val()||"").trim())&&""!==e&&""!==String(e).trim()?!(t=!0):void 0}),!t)}function cooked_direction_block_content_text(e){var t,o,e=e.find('textarea[data-direction-part="content"]');return e.length?(o="",o=(t=e.attr("id"))&&"undefined"!=typeof tinymce&&tinymce.get(t)?tinymce.get(t).getContent()||"":e.val()||"",jQuery("").html(o).text().replace(/\u00a0/g," ").trim()):""}function cooked_is_direction_block_empty(e){return e.hasClass("cooked-direction-heading")?""===(e.find('[data-direction-part="section_heading_name"]').val()||"").trim():""===(e.find('input[data-direction-part="image"]').val()||"").trim()&&""===cooked_direction_block_content_text(e)}function cooked_bulk_remove_empty_ingredient_rows(){jQuery("#cooked-ingredients-builder").children(".cooked-ingredient-block").each(function(){var e=jQuery(this);cooked_is_ingredient_block_empty(e)&&e.remove()})}function cooked_bulk_remove_empty_direction_rows(){var o=!(!cooked_admin_functions_js_vars.wp_editor_roles_allowed||"undefined"==typeof wp||!wp.editor||"function"!=typeof wp.editor.remove);jQuery("#cooked-directions-builder").children(".cooked-direction-block").each(function(){var e,t=jQuery(this);cooked_is_direction_block_empty(t)&&(o&&(e=t.find('textarea[data-direction-part="content"]').attr("id"))&&wp.editor.remove(e),t.remove())})}function cooked_bulk_add_directions(e){cooked_bulk_remove_empty_direction_rows();for(var t=jQuery("#cooked-directions-builder"),o=t.parent(),i=0;i
{_(document).ready(function(){var c,o,t,e,i,n,d,a,r,l=_(".cooked-color-field"),s=_("#cooked_recipe_settings").find("select"),u=_("#cooked-recipe-tabs"),k=(_("#cooked-settings-wrap"),_("#cooked_recipe_settings")),p=k.find("input#submit");$_CookedTooltips=_(".cooked-tooltip"),$_CookedConditionals=_(".cooked-conditional-hidden"),$_CookedSortable=_(".cooked-sortable"),$_CookedRecipeSaveDefault=_(".cooked-layout-save-default"),$_CookedShortcodeField=_(".cooked-shortcode-field"),$_CookedIngredientBuilder=_("#cooked-ingredients-builder"),$_CookedAutoNutritionButton=_(".cooked-auto-nutrition-button"),$_CookedDirectionBuilder=_("#cooked-directions-builder"),$_CookedRecipeGallery=_("#cooked-recipe-image-gallery"),$_CookedNutritionFactsTab=_("#cooked-recipe-tab-content-nutrition"),$_CookedSettingsPanel=_("#cooked-settings-panel"),$_CookedSettingsTabs=_("#cooked-settings-tabs"),l.length&&l.wpColorPicker(),$_CookedSortable.length&&(document.addEventListener("touchstart",cookedSortableTouchHandler,{passive:!1}),document.addEventListener("touchmove",cookedSortableTouchHandler,{passive:!1}),document.addEventListener("touchend",cookedSortableTouchHandler,{passive:!1}),$_CookedSortable.find(".cooked-icon-drag").length?$_CookedSortable.sortable({handle:".cooked-icon-drag",stop:function(e,t){t.item.closest("#cooked-directions-builder").length&&cooked_reset_direction_builder();var t=t.item.find("textarea"),o=!(!cooked_admin_functions_js_vars.wp_editor_roles_allowed||"undefined"==typeof wp||!wp.editor||"function"!=typeof wp.editor.remove||"function"!=typeof wp.editor.initialize);t.length&&o&&(o=t.attr("name"),t=t.attr("id"),wp.editor.remove(t),wp.editor.initialize(t,{tinymce:{wpautop:!1,toolbar1:"bold,italic,underline,blockquote,strikethrough,bullist,numlist,alignleft,aligncenter,alignright,undo,redo,wp_link_advanced,unlink,fullscreen",toolbar2:"",toolbar3:"",toolbar4:"",height:100,textarea_name:o,plugins:"link lists fullscreen wordpress wplink",setup:function(e){}},quicktags:!0,mediaButtons:!1}))}}):$_CookedSortable.sortable({stop:function(e,t){t.item.closest("#cooked-directions-builder").length&&cooked_reset_direction_builder()}})),$_CookedRecipeSaveDefault.length&&($_CookedRecipeSaveDefault.tooltipster({theme:["tooltipster-light","tooltipster-sideTip-cooked"],trigger:"click",animation:"grow",delay:0,speed:200,maxWidth:275,contentAsHTML:!0,interactive:!0,functionReady:function(r,e){_(".cooked-save-default-all").on("click",function(e){e.preventDefault();var t,o=_(this),e=o.data("nonce"),i=o.data("bulk-nonce"),n=o.parent(),d=confirm(cooked_admin_functions_js_vars.i18n_confirm_save_default_all),a=_("#_recipe_settings_content"),c=tinymce.get("_recipe_settings_content");t=null===c?a.val():c.getContent(),d&&!o.hasClass("disabled")&&(n.find(".button, .button-primary").addClass("disabled"),_.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_save_default",default_content:t,nonce:e},function(){_.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_get_recipe_count",nonce:i},function(e){o.removeClass("button-primary").addClass("button"),e&&e.success&&0')}),$_CookedTooltips.length&&$_CookedTooltips.tooltipster({theme:["tooltipster-light","tooltipster-sideTip-cooked"],animation:"grow",delay:100,speed:200,maxWidth:275,contentAsHTML:!0,interactive:!0}),$_CookedShortcodeField.length&&$_CookedShortcodeField.on("click",function(e){_(this).select()}),$_CookedConditionals.length&&(c=[],$_CookedConditionals.each(function(){var e=_(this),t=_(this).data("condition"),o=_(this).data("value"),i=_("#"+t),o=!!o&&o.split(" "),n=e.is("li")||e.is("span")?"inline-block":"block";i.is(":checkbox")&&i.is(":checked")||i.is(":radio")&&i.is(":checked")||!(i.is(":checkbox")&&!i.is(":checked")||i.is(":radio")&&!i.is(":checked"))&&(!i.is(":checkbox")&&!o&&i.val()||!i.is(":checkbox")&&o&&-1<_.inArray(i.val(),o)||!i.is(":radio")&&!o&&i.val()||!i.is(":radio")&&o&&-1<_.inArray(i.val(),o))?e.css({display:n}):e.hide(),-1==_.inArray(t,c)&&c.push(t);for(var d=c.length,a=0;a a").attr("href")).split("#"))[1],_(".cooked-settings-tab-content").hide(),_("#cooked-settings-tab-content-"+n).show(),s.on("click",function(e){_(".tab-content").hide();var t=_(this).find("a"),t=($_CookedSettingsTabs.find("li").removeClass("active"),_(this).addClass("active"),t.attr("href"));"migration"==(t=(t=t.split("#"))[1])?p.hide():p.show(),_(".cooked-settings-tab-content").hide(),_("#cooked-settings-tab-content-"+t).show(),_("#cooked-settings-panel").hasClass("stuck")?window.scrollTo(0,130):window.scrollTo(0,0)})),$_CookedIngredientBuilder.length&&(cooked_reset_ingredient_builder(),$_CookedIngredientBuilder.on("keydown",'input[data-ingredient-part="name"]',function(e){9!==e.keyCode&&13!==e.keyCode||_(this).parents(".cooked-ingredient-block").is(":last-child")&&(e.preventDefault(),_("#cooked-recipe-tab-content-ingredients").find(".cooked-add-ingredient-button").trigger("click"),$_CookedIngredientBuilder.find('.cooked-ingredient-block:last-child input[data-ingredient-part="amount"]').focus())}),$_CookedIngredientBuilder.parent().on("click",".cooked-show-substitution",function(e){e.preventDefault();e=_(this).parent();e.hasClass("cooked-expanded")?e.removeClass("cooked-expanded"):(e.addClass("cooked-expanded"),e.find('input[data-ingredient-part="sub_amount"]').focus())}),$_CookedIngredientBuilder.on("keyup change",'input[data-ingredient-part="sub_amount"], input[data-ingredient-part="sub_name"], select[data-ingredient-part="sub_measurement"]',function(e){var t=_(this).parents(".recipe-setting-block"),o=t.find('input[data-ingredient-part="sub_name"]').val();o&&o.trim()?t.addClass("cooked-has-substitution"):t.removeClass("cooked-has-substitution")}),$_CookedAutoNutritionButton.length&&$_CookedIngredientBuilder.on("change",'input[data-ingredient-part="name"]',function(e){var t=!1;$_CookedIngredientBuilder.find('input[data-ingredient-part="name"]').each(function(){if(""!=_(this).val())return!(t=!0)}),t?$_CookedAutoNutritionButton.prop("disabled",!1):$_CookedAutoNutritionButton.prop("disabled",!0)}),$_CookedIngredientBuilder.on("keyup",'input[data-ingredient-part="url"]',function(e){var t=_(this).val(),o=_(this).parents(".recipe-setting-block");t?o.addClass("cooked-has-url"):o.removeClass("cooked-has-url")}),$_CookedIngredientBuilder.parent().on("click",".cooked-add-ingredient-button",function(e){e.preventDefault();e=$_CookedIngredientBuilder.parent().find(".cooked-ingredient-template").clone().removeClass("cooked-template cooked-ingredient-template").addClass("cooked-ingredient-block");$_CookedIngredientBuilder.append(e),cooked_reset_ingredient_builder()}),$_CookedIngredientBuilder.parent().on("click",".cooked-add-heading-button",function(e){e.preventDefault();e=$_CookedIngredientBuilder.parent().find(".cooked-heading-template").clone().removeClass("cooked-template cooked-heading-template").addClass("cooked-ingredient-block cooked-ingredient-heading");$_CookedIngredientBuilder.append(e),cooked_reset_ingredient_builder()}),$_CookedIngredientBuilder.parent().on("click",".cooked-delete-ingredient",function(e){e.preventDefault(),_(this).parent().remove(),cooked_reset_ingredient_builder()})),$_CookedDirectionBuilder.length&&(cooked_reset_direction_builder(),$_CookedDirectionBuilder.parent().on("click",".cooked-show-heading-element",function(e){e.preventDefault();e=_(this).parent();e.hasClass("cooked-expanded")?e.removeClass("cooked-expanded"):(e.addClass("cooked-expanded"),e.find('input[data-direction-part="section_heading_element"]').focus())}),$_CookedDirectionBuilder.parent().on("click",".cooked-add-direction-button",function(e){e.preventDefault();e=$_CookedDirectionBuilder.parent().find(".cooked-direction-template").clone().removeClass("cooked-template cooked-direction-template").addClass("cooked-direction-block");$_CookedDirectionBuilder.append(e),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".cooked-add-heading-button",function(e){e.preventDefault();e=$_CookedDirectionBuilder.parent().find(".cooked-heading-template").clone().removeClass("cooked-template cooked-heading-template").addClass("cooked-direction-block cooked-direction-heading");$_CookedDirectionBuilder.append(e),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".cooked-delete-direction",function(e){e.preventDefault();var t,e=_(this).parent();cooked_admin_functions_js_vars.wp_editor_roles_allowed&&"undefined"!=typeof wp&&wp.editor&&"function"==typeof wp.editor.remove&&(t=e.find('textarea[data-direction-part="content"]').attr("id"))&&wp.editor.remove(t),e.remove(),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".remove-image-button",function(e){e.preventDefault();e=_(this).parent();e.removeClass("cooked-has-image"),e.find("img").attr("src","").removeAttr("srcset").removeAttr("sizes"),e.find('input[data-direction-part="image"]').val(""),cooked_reset_direction_builder()}),_("body").on("click",".cooked-direction-img-placeholder, .cooked-direction-img",function(e){e.preventDefault(),_(this).parent().find(".direction-image-button").trigger("click")}),_("body").on("click",".direction-image-button",function(e){var t=_(this);a=t.data("id"),e.preventDefault(),d||(d=wp.media.frames.direction_image_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_image_title,button:{text:cooked_admin_functions_js_vars.i18n_image_button},library:{type:"image"}})).on("select",function(){var e=d.state().get("selection").first().toJSON();_("#direction-"+a+"-image-src").attr("src",e.sizes.thumbnail.url).removeAttr("srcset").removeAttr("sizes").parent().addClass("cooked-has-image"),_('input[name="_recipe_settings[directions]['+a+'][image]"]').val(e.id),_('.direction-image-button[data-id="'+a+'"]').prop("value",cooked_admin_functions_js_vars.i18n_image_change)}),d.open()})),cooked_init_bulk_add(_),$_CookedRecipeGallery.length&&(cooked_init_gallery_sorting(),_("body").on("click",".cooked-gallery-add-button",function(e){_(this);e.preventDefault(),r||(r=wp.media.frames.gallery_images_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_gallery_image_title,button:{text:cooked_admin_functions_js_vars.i18n_gallery_image_title},library:{type:"image"},multiple:!0})).on("select",function(){var e,t,o,i=r.state().get("selection").toJSON();for(e in i)i.hasOwnProperty(e)&&(o=(t=i[e]).sizes.thumbnail.url,_("#cooked-recipe-image-gallery").append('
'+t.title+' '));cooked_init_gallery_sorting()}),r.open()}),_("body").on("click",".cooked-recipe-gallery-item img",function(e){e.preventDefault(),_(this).parent().find(".cooked-gallery-edit-button").trigger("click")}),_("body").on("click",".cooked-gallery-edit-button",function(e){var n=_(this),t=n.data("attachment-id"),d=(e.preventDefault(),wp.media.frames.gallery_images_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_edit_image_title,button:{text:cooked_admin_functions_js_vars.i18n_edit_image_button},library:{type:"image"},multiple:!1}));d.on("open",function(){var e=d.state().get("selection");(attachment=wp.media.attachment(t)).fetch(),e.add(attachment?[attachment]:[])}),d.open(),d.on("select",function(){var e,t,o,i=d.state().get("selection").toJSON();for(e in i)i.hasOwnProperty(e)&&(o=(t=i[e]).sizes.thumbnail.url,n.parent().replaceWith('
'+t.title+' '));cooked_init_gallery_sorting()})}),$_CookedRecipeGallery.on("click",".remove-image-button",function(e){var t=_(this);a=t.data("id"),e.preventDefault(),a?(_("#direction-"+a+"-image-src").parent().removeClass("cooked-has-image").prop("src",!1),_('input[name="_recipe_settings[directions]['+a+'][image]"]').val(""),_('.direction-image-button[data-id="'+a+'"]').prop("value",cooked_admin_functions_js_vars.i18n_image_title)):t.parent().remove()})),$_CookedNutritionFactsTab.length&&(init_nutrition_facts($_CookedNutritionFactsTab),$_CookedNutritionFactsTab.on("keyup","input",function(e){init_nutrition_facts($_CookedNutritionFactsTab)})),_("#cooked-prep-time").length&&_("#cooked-prep-time,#cooked-cook-time").on("change",function(){cooked_updateTotalTimeValue(parseInt(_("#cooked-prep-time").val()),parseInt(_("#cooked-cook-time").val()))})})})(jQuery),0),cooked_bulk_per_page=20;function cooked_set_default_template(o,i,n,d,a){var c,r,l;i<=0||(c=jQuery("#cooked-template-progress"),r=c.find(".cooked-progress-bar"),l=jQuery("#cooked-template-progress-text"),c.hasClass("cooked-active")||(c.addClass("cooked-active"),l.addClass("cooked-active"),r.css({width:"0%"}),a.reposition()),jQuery.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_save_default_bulk",page:o,default_content:n,nonce:d},function(e){var t;e&&e.success&&(cooked_recipe_update_counter=Math.min((o+1)*cooked_bulk_per_page,i),t=Math.round(cooked_recipe_update_counter/i*100),r.css({width:t+"%"}),l.text(cooked_recipe_update_counter+" / "+i),e.data.has_more?cooked_set_default_template(o+1,i,n,d,a):(jQuery(".cooked-save-default-all").text(cooked_admin_functions_js_vars.i18n_applied),r.css({width:"100%"}),l.text(i+" / "+i),c.removeClass("cooked-active"),l.removeClass("cooked-active").text(""),a.reposition()))},"json"))}function cooked_updateTotalTimeValue(e,t){jQuery("#cooked-total-time").val(e+t)}function cooked_init_gallery_sorting(){jQuery("#cooked-recipe-image-gallery").sortable()}function init_nutrition_facts(e){e.find("input").each(function(){var e,t=jQuery(this),o=t.attr("id"),t=t.val(),i=jQuery('.cooked-nut-percent[data-labeltype="'+o+'"]').length;jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').length&&(t?(jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').text(t),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("li").eq(0).show(),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("p").eq(0).show(),i&&(e=(i=jQuery('.cooked-nut-percent[data-labeltype="'+o+'"]')).data("pdv"))&&(thisPercent=Math.ceil(t/e*100),i.text(thisPercent))):(jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').text("___"),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("li").eq(0).hide(),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("p").eq(0).hide()))})}function cooked_reset_ingredient_builder(){var e=jQuery(".cooked-ingredient-block"),t=0,i=0,o=!1;0").text(e).html()}function b(e,t){if(u.empty(),e.length){s.attr("data-bulk-type","ingredients"),s.show(),k.removeAttr("disabled"),u.find(".cooked-bulk-add-preview-header").length||u.prepend('");for(var o=0;o '),d=l('"),a=l(''),c=l('').text(_.i18n_bulk_add_heading_line_label),r=l('').val(e[o]),c=(a.append(c).append(r),l('')),r=l(''),i=l('');n.append(d).append(a).append(c).append(r).append(i),u.append(n)}}else s.attr("data-bulk-type",""),s.hide(),k.attr("disabled","disabled")}i.length&&(t=l("#cooked-bulk-add-textarea"),s=l("#cooked-bulk-add-preview"),u=l("#cooked-bulk-add-preview-list"),o=l("#cooked-bulk-add-title"),r=l("#cooked-bulk-add-type"),k=i.find(".cooked-bulk-add-submit"),p=i.find(".cooked-bulk-add-spinner"),_=cooked_admin_functions_js_vars,g=null,m="",t.on("input",function(){var e=r.val(),o=(e=>{for(var t=e.split(/[\r\n]+/),o=[],i=0;i'),a=l('"),c=l('');d.append(a).append(c),u.append(d)}}else s.attr("data-bulk-type",""),s.hide(),k.attr("disabled","disabled")}else t!==m&&(m=t,b(o,null),g&&clearTimeout(g),g=setTimeout(function(){var t;(t=o).length?(p.show().css("visibility","visible"),l.post(_.ajax_url,{action:"cooked_parse_bulk_ingredients",nonce:_.cooked_bulk_add_nonce,lines:t},function(e){p.hide();e=e.success&&e.data&&e.data.parsed?e.data.parsed:null;b(t,e)}).fail(function(){p.hide(),b(t,null)})):b([],null)},400))}),l(document).on("click",".cooked-bulk-add-button",function(e){e.preventDefault();var e=l(this).data("type");e=e,r.val(e),t.val(""),u.empty(),s.attr("data-bulk-type",""),s.hide(),k.attr("disabled","disabled"),p.hide(),m="","ingredients"===e?(o.text(_.i18n_bulk_add_ingredients),t.attr("placeholder",_.i18n_bulk_add_placeholder_ingredients),k.text(_.i18n_bulk_add_submit_ingredients)):(o.text(_.i18n_bulk_add_directions),t.attr("placeholder",_.i18n_bulk_add_placeholder_directions),k.text(_.i18n_bulk_add_submit_directions)),i.show(),t.focus()}),i.on("click",".cooked-bulk-add-close, .cooked-bulk-add-cancel",function(e){e.preventDefault(),n()}),i.on("click",function(e){l(e.target).is(i)&&n()}),l(document).on("keydown",function(e){"Escape"===e.key&&i.is(":visible")&&n()}),u.on("change",'input[type="checkbox"]',function(){var e=l(this).closest(".cooked-bulk-add-preview-row"),t=l(this).is(":checked");e.toggleClass("cooked-bulk-add-is-heading",t)}),k.on("click",function(e){var i;e.preventDefault(),l(this).attr("disabled")||(e=r.val(),i=[],"ingredients"===e?u.find(".cooked-bulk-add-preview-row").each(function(){var e=l(this),t=e.find('input[type="checkbox"]').is(":checked"),o=e.find(".cooked-bulk-add-preview-text").val().trim();o&&i.push(t?{text:o,heading:!0}:{heading:!1,amount:e.find(".cooked-bulk-add-parsed-amount").val().trim(),measurement:e.find(".cooked-bulk-add-parsed-unit").val().trim(),name:e.find(".cooked-bulk-add-parsed-name").val().trim()||o})}):u.find(".cooked-bulk-add-preview-row").each(function(){var e=l(this),t=e.find(".cooked-bulk-add-preview-text").val().trim(),e=e.find('input[type="checkbox"]').is(":checked");t&&i.push({text:t,heading:e})}),i.length&&(("directions"===e?cooked_bulk_add_directions:cooked_bulk_add_ingredients_parsed)(i),n()))}))}function cooked_bulk_add_directions(e){for(var t=jQuery("#cooked-directions-builder"),o=t.parent(),i=0;i
Date: Mon, 20 Apr 2026 20:42:01 -0400
Subject: [PATCH 7/8] Updated Readme
---
readme.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/readme.txt b/readme.txt
index 7d2e567..6e8cb71 100644
--- a/readme.txt
+++ b/readme.txt
@@ -80,7 +80,7 @@ Please report security bugs found in the source code of the Cooked plugin throug
== Upgrade Notice ==
-Version 1.14.0 includes
+Version 1.14.0 adds bulk ingredient and direction entry, validates shortcode style attributes, extends migration and imports with ingredient substitution fields, and speeds up “Apply to All” template updates on large sites.
== Changelog ==
From b99cf37c4d27cc5520d1f0708c3605e793888904 Mon Sep 17 00:00:00 2001
From: Armand Tresova
Date: Mon, 20 Apr 2026 21:06:37 -0400
Subject: [PATCH 8/8] Bumped Tested up to: 7.0
---
readme.txt | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/readme.txt b/readme.txt
index 6e8cb71..4f35878 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,8 +1,8 @@
=== Cooked - Recipe Management ===
Contributors: xjsv, boxystudio
Tags: recipe, recipes, food, cooking, nutrition
-Requires at least: 4.7
-Tested up to: 6.9.4
+Requires at least: 5.0.0
+Tested up to: 7.0
Stable tag: 1.14.0
Requires PHP: 7.4
License: GPLv2 or later