diff --git a/CITATION.cff b/CITATION.cff index 548daf4..c265bde 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -6,7 +6,7 @@ authors: given-names: Justin - family-names: Tresova given-names: Armand -version: 1.11.2 +version: 1.12.0 doi: 10.5281/zenodo.1171250 date-released: 2017-05-08 url: "https://github.com/XjSv/cooked" \ No newline at end of file diff --git a/SECURITY.md b/SECURITY.md index 0e088ba..d152361 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -5,8 +5,8 @@ Versions that are currently being supported with security updates. | Version | Supported | | ----------- | ------------------ | -| 1.11.2 | :white_check_mark: | -| <= 1.11.1 | :x: | +| 1.12.0 | :white_check_mark: | +| <= 1.11.4 | :x: | ## Reporting a Vulnerability diff --git a/assets/admin/css/style.css b/assets/admin/css/style.css index 828ee1a..6c46942 100644 --- a/assets/admin/css/style.css +++ b/assets/admin/css/style.css @@ -213,6 +213,7 @@ body.post-type-cp_recipe #titlediv #title-prompt-text { font-size:15px; color:#8 #cooked-ingredients-builder .cooked-ingredient-block > .cooked-heading-element select, #cooked-directions-builder .cooked-direction-block > .cooked-heading-element select { color: #0685ba; + width: 100%; } #cooked-ingredients-builder .cooked-ingredient-block > .cooked-heading-element label, @@ -225,6 +226,18 @@ body.post-type-cp_recipe #titlediv #title-prompt-text { font-size:15px; color:#8 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:hover .cooked-show-substitution, +#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded .cooked-show-substitution, +#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-substitution .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:hover > .cooked-ingredient-name, +#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded > .cooked-ingredient-name, +#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-substitution > .cooked-ingredient-name { padding-right:32px; } /* Switchery */ body.post-type-cp_recipe .switchery-small, @@ -240,11 +253,15 @@ body.post-type-cp_recipe .switchery-small > small, .cooked-progress.cooked-active, .cooked-progress-text.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-migration-progress.cooked-progress, #cooked-import-progress.cooked-progress { background:#ccc; margin:25px 0 0 0; border-radius:6px; height:12px; max-width:600px; } -#cooked-migration-progress.cooked-progress .cooked-progress-bar, #cooked-import-progress.cooked-progress .cooked-progress-bar { border-radius:6px; height:12px; } -#cooked-migration-progress-text.cooked-progress-text, #cooked-import-progress-text.cooked-progress-text { font-size:11px; color:#888; max-width:600px; } -#cooked-migration-completed, #cooked-import-completed { display:none; } -#cooked-migration-completed.cooked-active, #cooked-import-completed.cooked-active { display:block; } +#cooked-migration-progress.cooked-progress, #cooked-import-progress.cooked-progress, #cooked-related-progress.cooked-progress { background:#ccc; margin:25px 0 0 0; border-radius:6px; height:12px; max-width:600px; } +#cooked-migration-progress.cooked-progress .cooked-progress-bar, #cooked-import-progress.cooked-progress .cooked-progress-bar, #cooked-related-progress.cooked-progress .cooked-progress-bar { border-radius:6px; height:12px; } +#cooked-migration-progress-text.cooked-progress-text, #cooked-import-progress-text.cooked-progress-text, #cooked-related-progress-text.cooked-progress-text { font-size:11px; color:#888; max-width:600px; } +#cooked-migration-completed, #cooked-import-completed, #cooked-related-completed { display:none; } +#cooked-migration-completed.cooked-active, #cooked-import-completed.cooked-active, #cooked-related-completed.cooked-active { display:block; } + +/* Related Recipes Tools status (last run + completed) */ +.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; } /* Save as Default */ #cooked_recipe_settings .cooked-layout-save-default { position:relative; top:-2px; z-index:10; margin:0 0 0 15px; padding:0 8px 1px; } @@ -260,7 +277,7 @@ body .button.button-cooked-reset:hover { color:#555; } #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 25px 5px 35px; } +#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="text"], #cooked-ingredients-builder .cooked-ingredient-block input[type="number"], @@ -271,6 +288,8 @@ body .button.button-cooked-reset:hover { color:#555; } #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; } @@ -605,6 +624,7 @@ body .button.button-cooked-reset:hover { color:#555; } #cooked_recipe_settings select, #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 { -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; } @@ -637,4 +657,35 @@ body .button.button-cooked-reset:hover { color:#555; } @media screen and ( max-width: 960px ) { #cooked_recipe_settings.stuck #cooked-recipe-tabs { margin-left:36px; } -} \ No newline at end of file +} + +/* Substitution Fields */ +#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; +} diff --git a/assets/admin/css/style.min.css b/assets/admin/css/style.min.css index c121adc..3ccb375 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}#cooked-settings-prewrap{display:flex;justify-content:center}#cooked-settings-wrap{position:relative;border-radius:10px;margin:40px 40px 40px 20px;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}#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_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_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 25px 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-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}#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-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}#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_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}} \ 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}#cooked-settings-prewrap{display:flex;justify-content:center}#cooked-settings-wrap{position:relative;border-radius:10px;margin:40px 40px 40px 20px;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,#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}#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-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}#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 diff --git a/assets/admin/js/cooked-functions.js b/assets/admin/js/cooked-functions.js index 0a718de..94ed23d 100644 --- a/assets/admin/js/cooked-functions.js +++ b/assets/admin/js/cooked-functions.js @@ -21,7 +21,8 @@ var $_CookedConditionalTimeout = false; $_CookedRecipeGallery = $('#cooked-recipe-image-gallery'), $_CookedNutritionFactsTab = $('#cooked-recipe-tab-content-nutrition'), $_CookedSettingsPanel = $('#cooked-settings-panel'), - $_CookedSettingsTabs = $('#cooked-settings-tabs'); + $_CookedSettingsTabs = $('#cooked-settings-tabs'), + $_CookedCalculateRelatedButton = $('#cooked-calculate-related-button'); // Cooked Color Pickers if ($_CookedColorPickers.length) { @@ -229,6 +230,48 @@ var $_CookedConditionalTimeout = false; }); } + // Calculate Related Recipes Button (Settings > Tools) + if ($_CookedCalculateRelatedButton.length) { + $_CookedCalculateRelatedButton.on('click', function(e) { + e.preventDefault(); + var thisButton = $(this), + msg = cooked_functions_js_vars.i18n_confirm_calculate_related; + + if (!confirm(msg) || thisButton.hasClass('disabled')) { return; } + + thisButton.addClass('disabled').attr('disabled', true); + thisButton.hide(); + + // Get related recipes IDs + $.post(cooked_functions_js_vars.ajax_url, { action: 'cooked_get_related_recipes_ids' }, function(data) { + var response; + try { + response = typeof data === 'string' ? JSON.parse(data) : data; + } catch (e) { + thisButton.removeClass('disabled').attr('disabled', false).show(); + return; + } + var ids = (response && response.ids) ? response.ids : []; + var total = (response && typeof response.total === 'number') ? response.total : 0; + + if (total === 0 || ids.length === 0) { + thisButton.removeClass('disabled').attr('disabled', false).show(); + return; + } + var progress = $('#cooked-related-progress'), + progress_bar = progress.find('.cooked-progress-bar'), + progress_text = $('#cooked-related-progress-text'); + progress.addClass('cooked-active'); + progress_text.addClass('cooked-active'); + progress_bar.css('width', '0%'); + progress_text.text('0 / ' + total); + cooked_calculate_related_recipes(ids, total, 0); + }).fail(function() { + thisButton.removeClass('disabled').attr('disabled', false).show(); + }); + }); + } + // Conditional Fields (Recipes and Settings Pages) if ($_CookedConditionals.length) { var conditionalFields = []; @@ -409,14 +452,25 @@ var $_CookedConditionalTimeout = false; } }); - $_CookedIngredientBuilder.parent().on('click', '.cooked-show-heading-element', function(e) { + $_CookedIngredientBuilder.parent().on('click', '.cooked-show-substitution', function(e) { e.preventDefault(); var thisParent = $(this).parent(); if ( thisParent.hasClass('cooked-expanded') ) { thisParent.removeClass('cooked-expanded'); } else { thisParent.addClass('cooked-expanded'); - thisParent.find('input[data-ingredient-part="section_heading_element"]').focus(); + thisParent.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 parentBlock = $(this).parents('.recipe-setting-block'), + subName = parentBlock.find('input[data-ingredient-part="sub_name"]').val(); + + if (subName && subName.trim()){ + parentBlock.addClass('cooked-has-substitution'); + } else { + parentBlock.removeClass('cooked-has-substitution'); } }); @@ -687,6 +741,79 @@ var $_CookedConditionalTimeout = false; var cooked_recipe_update_counter = 0; +function cooked_calculate_related_recipes(recipe_ids, total_recipes, processed_count) { + processed_count = processed_count || 0; + + if (total_recipes <= 0 || !recipe_ids || recipe_ids.length === 0) { + jQuery('#cooked-related-progress').hide(); + jQuery('#cooked-related-progress-text').hide(); + jQuery('.recipe-setting-block.calculate_related_button').find('h3').hide(); + jQuery('.recipe-setting-block.calculate_related_button').find('p:nth-child(2)').hide(); + jQuery('#cooked-related-completed').addClass('cooked-active').show(); + return; + } + var progress = jQuery('#cooked-related-progress'), + progress_bar = progress.find('.cooked-progress-bar'), + progress_text = jQuery('#cooked-related-progress-text'); + + if (!progress.hasClass('cooked-active')) { + progress.addClass('cooked-active'); + progress_text.addClass('cooked-active'); + } + + jQuery.post( + cooked_functions_js_vars.ajax_url, + { + action: 'cooked_calculate_related_recipes', + recipe_ids: JSON.stringify(recipe_ids), + total_recipes: total_recipes, + processed_count: processed_count + }, + function(response) { + var newProcessedCount = processed_count + 1; + var doneMeta = null; + var leftover = []; + + // Backend returns either: { complete: true, count, date_formatted } or an array of remaining IDs (possibly as JSON string). + if (response && typeof response === 'object' && response.complete === true) { + doneMeta = { count: response.count, date_formatted: response.date_formatted }; + } else { + try { + leftover = Array.isArray(response) ? response : JSON.parse(response); + } catch (e) {} + } + + var done = newProcessedCount; + var pct = total_recipes > 0 ? Math.min(100, Math.round((done / total_recipes) * 100)) : 100; + if (pct < 2) { pct = 2; } + progress_bar.css('width', pct + '%'); + progress_text.text(done + ' / ' + total_recipes); + + if (!Array.isArray(leftover) || leftover.length === 0) { + progress.hide(); + progress_text.hide(); + jQuery('.recipe-setting-block.calculate_related_button').find('h3').hide(); + jQuery('.recipe-setting-block.calculate_related_button').find('p:nth-child(2)').hide(); + $_CookedCalculateRelatedButton.hide(); + jQuery('#cooked-related-completed').addClass('cooked-active').show(); + if (doneMeta && doneMeta.date_formatted != null && doneMeta.count != null) { + var tpl = cooked_functions_js_vars.i18n_last_calculated; + var msg = tpl.replace(/%1\$s/g, doneMeta.date_formatted).replace(/%2\$s/g, String(doneMeta.count)); + jQuery('#cooked-related-last-done').text(msg).show(); + } + } else { + cooked_calculate_related_recipes(leftover, total_recipes, newProcessedCount); + } + } + ).fail(function() { + progress.removeClass('cooked-active').hide(); + progress_text.removeClass('cooked-active').hide(); + jQuery('.recipe-setting-block.calculate_related_button').find('h3').show(); + jQuery('.recipe-setting-block.calculate_related_button').find('p:nth-child(2)').show(); + $_CookedCalculateRelatedButton.removeClass('disabled').attr('disabled', false).show(); + }); +} + function cooked_set_default_template(recipe_ids, total_recipes, content, nonce, instance) { var temp_counter = 0, total_counter = 0, @@ -978,4 +1105,4 @@ function cooked_init_conditional_field(thisID) { }, 25); }); -} +} \ No newline at end of file diff --git a/assets/admin/js/cooked-functions.min.js b/assets/admin/js/cooked-functions.min.js index ec07bab..383e03b 100644 --- a/assets/admin/js/cooked-functions.min.js +++ b/assets/admin/js/cooked-functions.min.js @@ -1 +1 @@ -var $_CookedConditionalTimeout=!1,cooked_recipe_update_counter=((p=>{p(document).ready(function(){var c,o,t,e,i,n,a,d,r,l=p(".cooked-color-field"),s=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"),l.length&&l.wpColorPicker(),$_CookedSortable.length&&($_CookedSortable.find(".cooked-icon-drag")?$_CookedSortable.sortable({stop:function(e,t){var t=t.item.find("textarea"),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()),$_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 o,i=p(this),e=i.data("nonce"),n=i.data("bulk-nonce"),t=i.parent(),a=confirm(cooked_functions_js_vars.i18n_confirm_save_default_all),d=p("#_recipe_settings_content"),c=tinymce.get("_recipe_settings_content");o=null===c?d.val():c.getContent(),a&&!i.hasClass("disabled")&&(t.find(".button, .button-primary").addClass("disabled"),p.post(cooked_functions_js_vars.ajax_url,{action:"cooked_save_default",default_content:o,nonce:e},function(e){p.post(cooked_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,r)})}))}),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_functions_js_vars.ajax_url,{action:"cooked_save_default",default_content:i,nonce:e},function(e){t.text(cooked_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_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_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")}))})),s.length&&s.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&&(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(),s.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-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-ingredient-part="section_heading_element"]').focus())}),$_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(),p(this).parent().remove(),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".remove-image-button",function(e){e.preventDefault(),p(this).parent().removeClass("cooked-has-image"),p(this).parent().find("img").remove(),p(this).parent().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_functions_js_vars.i18n_image_title,button:{text:cooked_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).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_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_functions_js_vars.i18n_gallery_image_title,button:{text:cooked_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(''));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_functions_js_vars.i18n_edit_image_title,button:{text:cooked_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(''));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_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,c,r,l;0{p(document).ready(function(){var c,o,t,e,i,n,a,d,r,l=p(".cooked-color-field"),s=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"),$_CookedCalculateRelatedButton=p("#cooked-calculate-related-button"),l.length&&l.wpColorPicker(),$_CookedSortable.length&&($_CookedSortable.find(".cooked-icon-drag")?$_CookedSortable.sortable({stop:function(e,t){var t=t.item.find("textarea"),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()),$_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 o,i=p(this),e=i.data("nonce"),n=i.data("bulk-nonce"),t=i.parent(),a=confirm(cooked_functions_js_vars.i18n_confirm_save_default_all),d=p("#_recipe_settings_content"),c=tinymce.get("_recipe_settings_content");o=null===c?d.val():c.getContent(),a&&!i.hasClass("disabled")&&(t.find(".button, .button-primary").addClass("disabled"),p.post(cooked_functions_js_vars.ajax_url,{action:"cooked_save_default",default_content:o,nonce:e},function(e){p.post(cooked_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,r)})}))}),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_functions_js_vars.ajax_url,{action:"cooked_save_default",default_content:i,nonce:e},function(e){t.text(cooked_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_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_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")}))})),s.length&&s.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()}),$_CookedCalculateRelatedButton.length&&$_CookedCalculateRelatedButton.on("click",function(e){e.preventDefault();var a=p(this),e=cooked_functions_js_vars.i18n_confirm_calculate_related;confirm(e)&&!a.hasClass("disabled")&&(a.addClass("disabled").attr("disabled",!0),a.hide(),p.post(cooked_functions_js_vars.ajax_url,{action:"cooked_get_related_recipes_ids"},function(e){try{n="string"==typeof e?JSON.parse(e):e}catch(e){return void a.removeClass("disabled").attr("disabled",!1).show()}var t,o,i,e=n&&n.ids?n.ids:[],n=n&&"number"==typeof n.total?n.total:0;0===n||0===e.length?a.removeClass("disabled").attr("disabled",!1).show():(o=(t=p("#cooked-related-progress")).find(".cooked-progress-bar"),i=p("#cooked-related-progress-text"),t.addClass("cooked-active"),i.addClass("cooked-active"),o.css("width","0%"),i.text("0 / "+n),cooked_calculate_related_recipes(e,n,0))}).fail(function(){a.removeClass("disabled").attr("disabled",!1).show()}))}),$_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(),s.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(),p(this).parent().remove(),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".remove-image-button",function(e){e.preventDefault(),p(this).parent().removeClass("cooked-has-image"),p(this).parent().find("img").remove(),p(this).parent().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_functions_js_vars.i18n_image_title,button:{text:cooked_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).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_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_functions_js_vars.i18n_gallery_image_title,button:{text:cooked_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(''));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_functions_js_vars.i18n_edit_image_title,button:{text:cooked_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(''));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_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_calculate_related_recipes(e,a,d){var c,r,l;d=d||0,a<=0||!e||0===e.length?(jQuery("#cooked-related-progress").hide(),jQuery("#cooked-related-progress-text").hide(),jQuery(".recipe-setting-block.calculate_related_button").find("h3").hide(),jQuery(".recipe-setting-block.calculate_related_button").find("p:nth-child(2)").hide(),jQuery("#cooked-related-completed").addClass("cooked-active").show()):(c=jQuery("#cooked-related-progress"),r=c.find(".cooked-progress-bar"),l=jQuery("#cooked-related-progress-text"),c.hasClass("cooked-active")||(c.addClass("cooked-active"),l.addClass("cooked-active")),jQuery.post(cooked_functions_js_vars.ajax_url,{action:"cooked_calculate_related_recipes",recipe_ids:JSON.stringify(e),total_recipes:a,processed_count:d},function(e){var t=d+1,o=null,i=[];if(e&&"object"==typeof e&&!0===e.complete)o={count:e.count,date_formatted:e.date_formatted};else try{i=Array.isArray(e)?e:JSON.parse(e)}catch(e){}var e=t,n=0section.cooked-left>span,.cooked-recipe-info>span{line-height:1.25rem;position:relative;box-sizing:border-box;vertical-align:top;margin:0 2rem 1rem 0;display:inline-block;width:auto}.cooked-recipe-info>section.cooked-right>span{line-height:1.3rem;position:relative;box-sizing:border-box;vertical-align:top;margin:0 0 1rem 2rem;display:inline-block;width:auto}.cooked-recipe-info>section.cooked-left>span:last-child,.cooked-recipe-info>span:last-child{margin-right:0}.cooked-recipe-info>section.cooked-right>span:first-child{margin-left:0}.cooked-recipe-info strong{font-size:.75rem;letter-spacing:.03rem;font-weight:800;text-transform:uppercase;display:block}.cooked-recipe-notes{display:block;padding:0;margin:0 0 2rem}.cooked-recipe-notes .cooked-heading{margin:0 0 1rem;display:block;font-weight:600;font-size:1.25rem;line-height:1.5}.cooked-recipe-info span.cooked-print,.cooked-recipe-info span.cooked-print>a{height:2rem;display:inline-block}.cooked-recipe-info span.cooked-print>a{color:rgba(0,0,0,.4)}.cooked-recipe-info span.cooked-print>a:hover{color:rgba(0,0,0,.6)}.cooked-recipe-info span.cooked-print .cooked-icon{font-size:2.25rem;line-height:2.5rem}.cooked-recipe-info span.cooked-fsm-button{cursor:pointer;color:rgba(0,0,0,.4);height:2rem;display:inline-block}.cooked-recipe-info span.cooked-fsm-button:hover{color:rgba(0,0,0,.6)}.cooked-recipe-info span.cooked-fsm-button .cooked-icon{font-size:2.25rem;line-height:2.5rem}.cooked-recipe span.cooked-author,.cooked-recipe-info span.cooked-author{padding-left:3.25rem}.cooked-recipe span.cooked-author.cooked-no-avatar,.cooked-recipe-info span.cooked-author.cooked-no-avatar{padding-left:0}.cooked-recipe span.cooked-author-avatar,.cooked-recipe-info span.cooked-author-avatar{width:2.5rem;height:2.5rem;display:block;position:absolute;top:50%;left:0;margin:-1.25rem 0 0 0}.cooked-recipe span.cooked-author-avatar img,.cooked-recipe-info span.cooked-author-avatar img{margin:0;padding:0;display:block;height:auto;width:100%;max-width:100%;max-height:100%;border-radius:100px}.cooked-author-avatar,.cooked-author-avatar img{border-radius:5rem}.cooked-recipe-info span.cooked-time{padding-left:3rem}.cooked-recipe-info span.cooked-time-icon{opacity:.5;width:1rem;height:1rem;font-size:2.2rem;display:block;position:absolute;top:50%;left:0;margin:-1.1rem 0 0 0}.cooked-recipe-info span.cooked-time-icon i.cooked-icon{display:block}.cooked-timer{padding-left:2px}.cooked-timer i.cooked-icon{opacity:.6}body .cooked-timer a{font-weight:600;cursor:pointer;text-decoration:none}body .cooked-timer a:hover{text-decoration:none}#cooked-timers-wrap{z-index:99999;white-space:nowrap;overflow:hidden;border-radius:10px 10px 0 0;background:#fff;box-shadow:0 -5px 30px rgba(0,0,0,.15);line-height:1.6rem;font-size:1rem;width:50%;max-width:100%;height:7.5rem;position:fixed;transform:translate3d(0,7.2em,0);opacity:0;bottom:0;right:50%;margin:0 -25% 0 0;box-sizing:border-box}#cooked-timers-wrap.cooked-visible{transform:translate3d(0,0,0);opacity:1}#cooked-timers-wrap .cooked-timer-block{overflow:hidden;position:relative;display:block;height:0;padding:0;width:100%;opacity:0;padding:0 1.5rem 0 6rem;box-sizing:border-box}#cooked-timers-wrap .cooked-timer-block.cooked-visible{opacity:1;height:7.5rem;padding:1.9rem 1.5rem 1.55rem 6rem}#cooked-timers-wrap .cooked-timer-block>span{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:auto}#cooked-timers-wrap .cooked-timer-block i.cooked-icon-times{line-height:2rem;color:rgba(0,0,0,.25);position:absolute;font-size:2rem;top:2.5rem;left:2rem;cursor:pointer}#cooked-timers-wrap .cooked-timer-block i.cooked-icon-times:hover{color:inherit}#cooked-timers-wrap .cooked-timer-block .cooked-timer-step{font-size:1.1rem;font-weight:800;text-transform:uppercase}#cooked-timers-wrap .cooked-timer-block .cooked-timer-desc{font-size:1.2rem;width:100%;padding-right:14rem;box-sizing:border-box;font-weight:400;color:rgba(0,0,0,.65)}#cooked-timers-wrap .cooked-timer-block .cooked-timer-obj{font-weight:600;position:absolute;top:2.5rem;right:2rem;width:13.5rem;font-size:2rem;line-height:2rem}#cooked-timers-wrap .cooked-timer-block .cooked-timer-obj>div,#cooked-timers-wrap .cooked-timer-block .cooked-timer-obj>i.cooked-icon{display:inline-block}#cooked-timers-wrap .cooked-timer-block .cooked-timer-obj>i.cooked-icon-pause,#cooked-timers-wrap .cooked-timer-block .cooked-timer-obj>i.cooked-icon-play,#cooked-timers-wrap .cooked-timer-block .cooked-timer-obj>i.cooked-icon-reverse{cursor:pointer;opacity:.5;width:2rem;text-align:center;margin-right:.5rem;position:relative;font-size:2rem;transform:scale(.75)}#cooked-timers-wrap .cooked-timer-block .cooked-timer-obj>i.cooked-icon-play{display:none}#cooked-timers-wrap .cooked-timer-block .cooked-timer-obj>i.cooked-icon:hover{opacity:1}#cooked-timers-wrap.cooked-multiples{margin:0;right:0;border-radius:10px 0 0 0;width:20rem}#cooked-timers-wrap.cooked-multiples .cooked-timer-block{padding-left:3.25rem}#cooked-timers-wrap.cooked-multiples .cooked-timer-block.cooked-visible{padding-top:1rem;line-height:1.5rem;padding-left:3.25rem}#cooked-timers-wrap.cooked-multiples .cooked-timer-block .cooked-timer-step{font-size:.9rem}#cooked-timers-wrap.cooked-multiples .cooked-timer-block .cooked-timer-desc{font-size:1rem;padding:0}#cooked-timers-wrap.cooked-multiples .cooked-timer-block .cooked-timer-obj{top:auto;right:auto;width:auto;font-size:1.5rem;line-height:2rem}#cooked-timers-wrap.cooked-multiples .cooked-timer-block .cooked-timer-obj>i.cooked-icon{font-size:1.5rem;width:1.3rem;margin-right:.5rem}#cooked-timers-wrap.cooked-multiples .cooked-timer-block i.cooked-icon-times{line-height:1rem;font-size:1rem;top:1.4rem;left:1.2rem}#cooked-timers-wrap .cooked-timer-block .cooked-progress{display:block;position:absolute;left:0;bottom:0;height:.5rem;width:100%;background:rgba(0,0,0,.15)}#cooked-timers-wrap .cooked-timer-block .cooked-progress span{width:0;display:block;position:absolute;left:0;top:0;height:.5rem}#cooked-timers-wrap .cooked-timer-block.cooked-paused{background:#f9f9f9}#cooked-timers-wrap .cooked-timer-block.cooked-paused .cooked-timer-obj{color:rgba(0,0,0,.5)}#cooked-timers-wrap .cooked-timer-block.cooked-complete{background:rgba(255,0,0,.05)}#cooked-timers-wrap .cooked-timer-block.cooked-complete .cooked-progress span{background:red}#cooked-timers-wrap .cooked-timer-block.cooked-complete .cooked-timer-obj{color:red}.cooked-recipe-info span.cooked-servings{padding-left:3rem}.cooked-recipe-info span.cooked-servings select.cooked-servings-changer{opacity:0;position:absolute;bottom:0;left:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;border:none;background:0 0;width:100%;padding:0;margin:0}.cooked-recipe-info span.cooked-servings-icon{opacity:.5;width:1rem;height:1rem;font-size:2.2rem;display:block;position:absolute;top:50%;left:0;margin:-1.1rem 0 0 0}.cooked-recipe-info span.cooked-servings-icon i.cooked-icon{display:block}.cooked-left{float:left;display:inline-block;width:auto}.cooked-right{float:right;display:inline-block;width:auto}.cooked-recipe-gallery{height:1px;overflow:hidden;opacity:0;transform:translate3d(0,10px,0);padding:0;margin:0}.cooked-recipe-gallery .fotorama__thumb-border{border-color:#333}.cooked-recipe-gallery .fotorama__caption__wrap{background:#333;color:#fff}.cooked-recipe-gallery .fotorama__stage__frame.fotorama__active{background:#333}.cooked-recipe-gallery.cooked-gallery-loaded{height:auto;overflow:inherit;opacity:1;transform:translate3d(0,0,0);margin:0 0 2rem}.cooked-nutrition-label{background:#fff;font-size:.9rem;border:1px solid #aaa;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:10px;margin:0 0 2rem;font-family:Helvetica,Arial,sans-serif;container-name:nutrition-label;container-type:inline-size}.cooked-nutrition-label .cooked-nutrition-title{font-size:2.3rem;line-height:1;letter-spacing:0;font-weight:800;padding:0 0 .5rem 0;margin:0;color:#333;border-bottom:1px solid #aaa}.cooked-nutrition-label.cooked-float-left{max-width:45%;margin:0 3rem 3rem 0;float:left}body .cooked-nutrition-label p{margin:0!important;padding:0!important}body .cooked-nutrition-label p.cooked-daily-value-text{padding:.75rem 0 .15rem 0!important;margin:0!important;font-size:.9rem;line-height:1.3rem!important}body .cooked-nutrition-label p.cooked-daily-value-text strong{font-weight:400}body .cooked-nutrition-label dl{margin:0!important;padding:0!important}body .cooked-nutrition-label dt{position:relative;margin:0;padding:2px 0;border-top:1px solid #aaa}body .cooked-nutrition-label dt.cooked-calories{border-top:none;display:flex;justify-content:space-between;align-items:baseline;padding-bottom:10px}body .cooked-nutrition-label dt.cooked-calories strong{font-size:2rem;font-weight:800}body .cooked-nutrition-label dt.cooked-calories strong.cooked-nut-label{font-size:2.5rem}body .cooked-nutrition-label dt.cooked-nut-servings{border-top:none;padding-bottom:0}body .cooked-nutrition-label dt.cooked-serving-size{border-top:none;padding-top:0}body .cooked-nutrition-label div.cooked-serving-size strong,body .cooked-nutrition-label dt.cooked-serving-size strong,body .cooked-nutrition-label dt.cooked-serving-size strong.cooked-nut-label{font-size:1.3rem;font-weight:800}body .cooked-nutrition-label div.cooked-nut-servings p,body .cooked-nutrition-label dt.cooked-nut-servings p{font-size:1.2rem}body .cooked-nutrition-label dt dt{padding:2px 0 0;margin:2px 0 0}body .cooked-nutrition-label dt:after{content:"";display:table;clear:both}body .cooked-nutrition-label dt.no-after:after{content:none}body .cooked-nutrition-label div.cooked-nut-spacer,body .cooked-nutrition-label dt.cooked-nut-spacer{border:none;height:.5rem;padding:0;background:#333;margin-top:.3rem}body .cooked-nutrition-label dl dt.cooked-nut-no-border,body .cooked-nutrition-label>dl>dt:first-child{border:none}body .cooked-nutrition-label dt dl{margin:0 0 0 1.5rem!important}body .cooked-nutrition-label .cooked-nut-hr{border:none;border-top:1rem solid #333;margin:.1rem 0 0;padding:0}body .cooked-nutrition-label strong{font-weight:800}body .cooked-nutrition-label strong.cooked-nut-heading{font-size:1rem}body .cooked-nutrition-label strong.cooked-nut-label{font-weight:400}body .cooked-nutrition-label dl dl strong.cooked-nut-right{font-weight:800}body .cooked-nutrition-label .cooked-nut-right{float:right}body .cooked-nutrition-label dl.cooked-nut-bottom dt{border-top:none;border-bottom:1px solid #aaa;float:left;width:100%;box-sizing:border-box}body .cooked-nutrition-label dl.cooked-nut-bottom dt strong{font-weight:400}body .cooked-nutrition-label dl.cooked-nut-bottom dt:last-child{border:none}body .cooked-nutrition-label dl.cooked-nut-bottom dt:nth-last-child(2):nth-child(even){border-bottom:1px solid #aaa}.widget .cooked-nutrition-label{margin:0}body .cooked-nutrition-label .cooked-nutrition-facts-powered-by-edamam img{float:right;height:2rem}.cooked-recipe-search{box-sizing:border-box;padding:0;margin:0;width:100%;display:block;border:1px solid transparent;position:relative}.cooked-recipe-search .cooked-field-wrap,.cooked-recipe-search .cooked-fields-wrap{display:inline-block;box-sizing:border-box;width:100%;margin:0 1% 0 0}.cooked-recipe-search .cooked-fields-wrap{margin:0}.cooked-recipe-search .cooked-browse-select{display:block;cursor:pointer;position:relative;border-radius:3px;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;background:rgba(0,0,0,.075);box-shadow:inset 0 0 0 1px rgba(0,0,0,.05);width:100%;font-size:1rem;line-height:3rem;height:auto;padding:0 1rem}.cooked-recipe-search .cooked-browse-select:hover{background:rgba(0,0,0,.1)}.cooked-recipe-search .cooked-browse-select .cooked-field-title{font-size:.9rem;vertical-align:top}.cooked-recipe-search .cooked-taxonomy-selected{border-radius:3px}.cooked-recipe-search .cooked-sortby-wrap{background:#f5f5f5;position:absolute;top:0;height:3rem;width:12rem;display:inline-block;margin:0 1px 0 0;right:3.5rem}.cooked-recipe-search .cooked-sortby-wrap>select{margin:0;box-shadow:none;position:relative;width:100%;background:0 0;cursor:pointer;font-size:.9rem;border:none;border-top:1px solid rgba(0,0,0,.1);border-bottom:1px solid rgba(0,0,0,.1);-webkit-appearance:none;-moz-appearance:none;appearance:none;height:100%;border-radius:0;display:inline-block;padding:0 1.25rem}.cooked-recipe-search .cooked-sortby-wrap:hover{background:#eee}.cooked-recipe-search input[type=text]{margin:0;vertical-align:initial;box-shadow:none;display:inline-block;box-sizing:border-box;background:#fff;width:100%;height:3rem;padding:0 1rem;font-size:1rem;border:1px solid rgba(0,0,0,.15);border-right:none}.cooked-recipe-search .cooked-3-search-fields>*,.cooked-recipe-search .cooked-4-search-fields>*{float:left}.cooked-recipe-search .cooked-field-wrap-select{position:relative}.cooked-recipe-search .cooked-field-wrap-select:before,.cooked-recipe-search .cooked-sortby-wrap:before{content:"\f00b";opacity:.25;font-family:CookedIcons;font-size:.75rem;position:absolute;top:50%;right:1.5rem;line-height:1.25rem;height:1.25rem;margin-top:-.5rem}.cooked-recipe-search .cooked-field-wrap-select:hover:before,.cooked-recipe-search .cooked-sortby-wrap:hover:before{opacity:.75;margin-top:-.5rem}.cooked-recipe-search .cooked-fields-wrap{padding-right:3.5rem;position:relative}.cooked-recipe-search .cooked-fields-wrap>.cooked-field-wrap-select{width:14%}.cooked-recipe-search .cooked-fields-wrap>.cooked-browse-search{width:85%;max-width:85%;margin:0}.cooked-recipe-search.cooked-search-no-sorting.cooked-search-no-browse .cooked-fields-wrap>.cooked-browse-search{width:100%}.cooked-recipe-search .cooked-browse-search-button{position:absolute;top:0;right:1px;width:3.5rem;text-decoration:none;font-size:1rem;text-align:center;color:#fff;line-height:3rem;height:3rem}.cooked-recipe-search .cooked-browse-search-button:hover{color:#fff;text-decoration:none}.cooked-recipe-search .cooked-browse-select-block{display:flex;color:inherit;cursor:default;visibility:hidden;opacity:0;transform:translate3d(0,-6px,0);box-sizing:border-box;z-index:99;position:absolute;width:auto;background:#fff;top:4rem;left:-10px;margin:0;line-height:1.5rem;border-radius:6px}.cooked-recipe-search .cooked-browse-select-block .cooked-tax-column{display:block;width:25%;min-width:25%;box-sizing:border-box;padding:0 .75rem}.cooked-recipe-search .cooked-browse-select-block .cooked-tax-column>div{max-height:16rem;overflow:auto}.cooked-recipe-search .cooked-browse-select-block .cooked-tax-column>div>span{display:block}.cooked-recipe-search .cooked-browse-select-block .cooked-tax-column>div>a,.cooked-recipe-search .cooked-browse-select-block .cooked-tax-column>span{display:block;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}.cooked-recipe-search .cooked-browse-select-block .cooked-tax-column>span.cooked-tax-column-title{font-size:.9rem;font-weight:800;text-transform:uppercase;margin:0 0 .6rem;padding:0 10px .6rem 0;border-bottom:1px solid rgba(0,0,0,.15)}.cooked-recipe-search .cooked-browse-select-block .cooked-tax-column>div>a{line-height:1.6rem}.cooked-recipe-search .cooked-browse-select-block .cooked-tax-column>div>span.cooked-tax-sub-item{margin-left:.75rem}.cooked-recipe-search .cooked-browse-select-block .cooked-tax-column i.cooked-icon{font-size:.9rem;color:rgba(0,0,0,.5)}.cooked-recipe-search .cooked-fields-wrap.cooked-1-search-fields .cooked-browse-select-block{width:170%;padding:1.5rem}.cooked-recipe-search .cooked-fields-wrap.cooked-1-search-fields .cooked-browse-select-block .cooked-tax-column{width:100%;padding:0}.cooked-recipe-search .cooked-browse-select.cooked-active .cooked-browse-select-block{visibility:visible;opacity:1;transform:translate3d(0,-1px,0)}.cooked-recipe-search .cooked-browse-select-block{box-shadow:0 2px 2px rgba(0,0,0,.05),0 4px 4px rgba(0,0,0,.05),0 8px 8px rgba(0,0,0,.05),0 16px 16px rgba(0,0,0,.05),0 32px 32px rgba(0,0,0,.05),0 64px 64px rgba(0,0,0,.05)}.cooked-browse-select-inline-block{display:flex;color:inherit;cursor:default;visibility:visible;opacity:1;box-sizing:border-box;z-index:99;position:relative;width:auto;background:#fff;margin:10px 2px 3rem;line-height:1.5rem;border-radius:6px;padding:1.5rem}.cooked-browse-select-inline-block .cooked-tax-column{display:block;width:100%;box-sizing:border-box;padding:0 .75rem}.cooked-browse-select-inline-block .cooked-tax-column>div{max-height:16rem;overflow:auto}.cooked-browse-select-inline-block .cooked-tax-column>div>span{display:block}.cooked-browse-select-inline-block .cooked-tax-column>div>a,.cooked-browse-select-inline-block .cooked-tax-column>span{display:block;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}.cooked-browse-select-inline-block .cooked-tax-column>span.cooked-tax-column-title{font-size:.9rem;font-weight:800;text-transform:uppercase;margin:0 0 .6rem;padding:0 10px .6rem 0;border-bottom:1px solid rgba(0,0,0,.15)}.cooked-browse-select-inline-block .cooked-tax-column>div>a{line-height:1.6rem}.cooked-browse-select-inline-block .cooked-tax-column>div>span.cooked-tax-sub-item{margin-left:.75rem}.cooked-browse-select-inline-block .cooked-tax-column i.cooked-icon{font-size:.9rem;color:rgba(0,0,0,.5)}.cooked-browse-select-inline-block{box-shadow:0 2px 2px -1px rgba(0,0,0,.15)}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap{padding:0;display:block}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap>.cooked-browse-search{width:100%;max-width:100%;border-right:1px solid rgba(0,0,0,.15);margin:3% 0}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap.cooked-1-search-fields .cooked-browse-select-block{width:100%;left:0}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap>.cooked-field-wrap-select{display:block;width:100%}.cooked-recipe-search.cooked-search-compact .cooked-sortby-wrap{display:block;position:relative;width:67%;right:auto;top:auto;float:left;margin:0}.cooked-recipe-search.cooked-search-compact .cooked-sortby-wrap>select{position:absolute;width:100%;border:1px solid rgba(0,0,0,.15);margin:0}.cooked-recipe-search.cooked-search-compact .cooked-browse-search-button{width:30%;right:auto;position:relative;display:block;float:right}.cooked-recipe-search.cooked-search-compact .cooked-browse-select-block{top:3rem;left:0;max-height:16rem;overflow:auto;transform:translate3d(0,-1px,0)}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap.cooked-1-search-fields .cooked-browse-select-block{width:100%;padding:1.5rem}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap.cooked-2-search-fields .cooked-browse-select-block{width:100%;padding:1.5rem}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap.cooked-3-search-fields .cooked-browse-select-block{width:100%;padding:1.5rem}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap.cooked-4-search-fields .cooked-browse-select-block{width:100%;padding:1.5rem}.cooked-recipe-search.cooked-search-compact .cooked-browse-select-block .cooked-tax-column{float:none;padding:0 0 1.5rem 0}.cooked-recipe-search.cooked-search-compact .cooked-browse-select-block .cooked-tax-column:last-child{padding:0}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap.cooked-1-search-fields .cooked-browse-select-block .cooked-tax-column{width:100%}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap.cooked-2-search-fields .cooked-browse-select-block .cooked-tax-column{width:100%}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap.cooked-3-search-fields .cooked-browse-select-block .cooked-tax-column{width:100%}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap.cooked-4-search-fields .cooked-browse-select-block .cooked-tax-column{width:100%}.cooked-recipe-search.cooked-search-compact.cooked-search-no-sorting .cooked-fields-wrap>.cooked-browse-search{width:80%;margin:3% 0}.cooked-recipe-search.cooked-search-compact.cooked-search-no-sorting .cooked-browse-search-button{width:20%;margin:3% 0}.cooked-recipe-search.cooked-search-compact.cooked-search-no-browse .cooked-browse-search-button,.cooked-recipe-search.cooked-search-compact.cooked-search-no-browse .cooked-fields-wrap>.cooked-browse-search{margin:0 0 3%}.cooked-recipe-search.cooked-search-compact.cooked-search-no-sorting.cooked-search-no-browse .cooked-browse-search-button,.cooked-recipe-search.cooked-search-compact.cooked-search-no-sorting.cooked-search-no-browse .cooked-fields-wrap>.cooked-browse-search{margin:0}.cooked-author-list-heading{display:block;margin:0 0 2rem}.cooked-author-list-heading .cooked-author-avatar{float:left;width:3rem;height:auto;display:block;margin:0 1rem 0 0}.cooked-author-list-heading .cooked-author-avatar img{display:block;margin:0}.cooked-author-list-heading .cooked-meta-title{font-size:1.25rem;line-height:1.2rem;margin:0}.cooked-author-list-heading a{font-size:.9rem}body p.cooked-none-found{display:block;margin:0;padding:1rem 0 2rem;color:#888;text-align:center;font-style:italic}.cooked-recipe-grid{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);position:relative;box-sizing:border-box;padding:0;margin:3% -1.5%;width:103%;display:flex;flex-wrap:wrap}.cooked-recipe-grid .cooked-recipe{width:30.333%;min-width:30.333%;display:block;box-sizing:border-box;margin:0 1.5% 3%;padding:0}.cooked-recipe-grid .cooked-recipe .cooked-recipe-card-title{cursor:pointer;color:inherit;text-decoration:none}.cooked-recipe-grid .cooked-recipe .cooked-recipe-card-title:hover{text-decoration:none!important}.cooked-recipe-grid.cooked-columns-1 .cooked-recipe{width:97%;min-width:97%}.cooked-recipe-grid.cooked-columns-2 .cooked-recipe{width:47%;min-width:47%}.cooked-recipe-grid.cooked-columns-3 .cooked-recipe{width:30.333%;min-width:30.333%}.cooked-recipe-grid.cooked-columns-4 .cooked-recipe{width:22%;min-width:22%}.cooked-recipe-grid.cooked-columns-5 .cooked-recipe{width:17%;min-width:17%}.cooked-recipe-grid.cooked-columns-6 .cooked-recipe{width:13.666%;min-width:13.666%}.cooked-recipe a,.cooked-recipe a:hover,.cooked-recipe-info a,.cooked-recipe-info a:hover,.cooked-recipe-search a,.cooked-recipe-search:hover{box-shadow:none!important}.cooked-recipe-card{text-align:left;background:#fff;text-decoration:none!important;border:none!important;color:inherit!important;display:block;overflow:hidden;border-radius:3px;margin:0 auto 1rem;box-shadow:inset 0 0 0 1px rgba(0,0,0,.15)}.cooked-recipe-card-content>span,.cooked-recipe-card>span{display:block!important}.cooked-recipe-card:hover{text-decoration:none!important;border:none!important;color:inherit!important}.cooked-recipe-card-image{background-size:cover;background-position:center;display:block;margin:0;padding:0;height:250px;width:100%;position:relative}.cooked-recipe-card .cooked-recipe-image-empty{display:block;margin:0;padding:0;height:250px;width:100%;position:relative}.cooked-recipe-card .cooked-recipe-card-sep{display:none}.cooked-recipe-card-content{padding:1rem 1.5rem;margin:0}.cooked-recipe-card-title{display:block;font-weight:600;margin:.5rem 0;font-size:1.25rem;line-height:1.65rem}.cooked-recipe-card-author{margin:.5rem 0;font-size:.9rem}.cooked-recipe-card-excerpt{display:block;margin:.5rem 0;font-size:1rem}.cooked-recipe-card-centered,.cooked-recipe-card-modern-centered{text-align:center}.cooked-recipe-card-modern,.cooked-recipe-card-modern-centered{transform:translate3d(0,0,0);border-radius:10px;box-shadow:0 2px 3px rgba(0,0,0,.04),inset 0 0 0 1px rgba(0,0,0,.1)}.cooked-recipe-card-modern .cooked-recipe-card-author,.cooked-recipe-card-modern .cooked-recipe-card-excerpt,.cooked-recipe-card-modern .cooked-recipe-card-title,.cooked-recipe-card-modern-centered .cooked-recipe-card-author,.cooked-recipe-card-modern-centered .cooked-recipe-card-excerpt,.cooked-recipe-card-modern-centered .cooked-recipe-card-title{margin:.25rem 0}.cooked-recipe-card-modern .cooked-recipe-card-content,.cooked-recipe-card-modern-centered .cooked-recipe-card-content{padding:1.25rem 1.5rem}.cooked-recipe-card-modern .cooked-recipe-card-author,.cooked-recipe-card-modern-centered .cooked-recipe-card-author{opacity:.75}.cooked-recipe-card-modern .cooked-recipe-card-sep,.cooked-recipe-card-modern-centered .cooked-recipe-card-sep{margin:1rem 0;display:block;width:15%;height:6px;border-radius:3px;background:#ddd}.cooked-recipe-card-modern-centered .cooked-recipe-card-sep{margin:1rem auto}.cooked-recipe-card-modern-centered:hover,.cooked-recipe-card-modern:hover{transform:translate3d(0,-2px,0)!important;box-shadow:0 5px 5px rgba(0,0,0,.05),inset 0 0 0 1px rgba(0,0,0,.1)}.cooked-recipe-card-modern-centered:hover .cooked-recipe-card-sep,.cooked-recipe-card-modern:hover .cooked-recipe-card-sep{width:25%}.widget .cooked-recipe-card{margin:0 auto}.cooked-recipe-term-list .cooked-term-item a{display:block;padding:5px 0;border-top:1px solid rgba(0,0,0,.1)}.cooked-shortcode-recipe-list{margin:0 auto 1rem}.cooked-shortcode-recipe-list .cooked-srl-single{box-sizing:border-box;border:none;border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.15);position:relative;display:block;padding:.6rem 0 0 0;margin:0 0 1rem}.cooked-shortcode-recipe-list .cooked-srl-single:hover{border:none;border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.15)}.cooked-shortcode-recipe-list .cooked-srl-single.cooked-srl-has-image{padding-left:4rem;min-height:3.75rem}.cooked-shortcode-recipe-list .cooked-srl-image{margin:0;padding:0}.cooked-shortcode-recipe-list .cooked-srl-image img{width:3rem;height:3rem;border-radius:3px;position:absolute;top:.9rem;left:0;display:block;margin:0;padding:0}.cooked-shortcode-recipe-list .cooked-srl-sep{display:none}.cooked-shortcode-recipe-list .cooked-srl-content{line-height:1.4rem;padding:0;margin:0}.cooked-shortcode-recipe-list .cooked-srl-title{line-height:1.4rem;display:block;font-weight:600;margin:.25rem 0;font-size:1rem}.cooked-shortcode-recipe-list .cooked-srl-author{line-height:1.4rem;margin:.25rem 0;font-size:.9rem;opacity:.75}.cooked-shortcode-recipe-list .cooked-srl-single:first-child{border:none;padding-top:0}.cooked-shortcode-recipe-list .cooked-srl-single:first-child .cooked-srl-image img{top:0}.cooked-shortcode-recipe-list .cooked-srl-single.cooked-srl-has-image:first-child{min-height:3rem}.cooked-pagination-numbered{text-align:center;display:block;margin:0 0 2rem}.cooked-pagination-numbered>a,.cooked-pagination-numbered>span{font-size:1.2rem;font-weight:600;display:inline-block;padding:0 5px;background:0 0}.cooked-pagination-numbered>span{color:rgba(0,0,0,.25)}body .cooked-pagination-numbered>a{text-decoration:none;border:none}body .cooked-pagination-numbered>a:hover{text-decoration:none;border:none}.cooked-fsm{box-sizing:border-box;display:none;opacity:0;transform:scale(.95);position:fixed;top:0;left:0;width:100%;height:100%;background:#fff;z-index:99998}.cooked-fsm.cooked-visible{display:block}.cooked-fsm.cooked-active{opacity:1;transform:scale(1)}.cooked-fsm .cooked-fsm-top{font-size:1.2rem;font-weight:300;text-align:center;box-sizing:border-box;position:absolute;top:0;left:0;width:100%;color:#fff;padding:0 4rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:3.5rem;height:3.5rem}.cooked-fsm .cooked-fsm-ingredients{box-sizing:border-box;padding:5.5rem 2rem 1rem;font-size:1rem;line-height:1.6rem;width:30%;height:100%;background:#f9f9f9;overflow-y:scroll;-webkit-overflow-scrolling:touch;position:absolute;top:0;left:0}.cooked-fsm .cooked-recipe-ingredients{margin-top:-.75rem}.cooked-fsm .cooked-recipe-ingredients .cooked-ingredient{padding:.75rem 0 0 2rem}.cooked-fsm .cooked-recipe-ingredients .cooked-heading{font-size:1.25rem}.cooked-fsm .cooked-recipe-ingredients .cooked-heading:first-child{padding-top:.75rem}.cooked-fsm .cooked-recipe-ingredients .cooked-ingredient-checkbox{top:.75rem}.cooked-fsm .cooked-fsm-directions-wrap{box-sizing:border-box;padding:5.5rem 2rem 1rem;font-size:1rem;line-height:1.6rem;width:70%;height:100%;overflow-y:scroll;-webkit-overflow-scrolling:touch;position:absolute;top:0;left:30%}.cooked-fsm .cooked-fsm-directions p{margin:0 0 1.5rem;font-size:1.2rem;line-height:1.6rem}.cooked-fsm .cooked-recipe-directions .cooked-heading{font-size:1.5rem}.cooked-fsm .cooked-recipe-directions .cooked-direction-number{font-size:1.8rem}.cooked-fsm .cooked-recipe-directions .cooked-direction.cooked-direction-has-number .cooked-dir-content{padding-left:2.3rem}.cooked-fsm .cooked-recipe-directions .cooked-direction.cooked-direction-has-number-wide .cooked-dir-content{padding-left:3.05rem}.cooked-fsm .cooked-close-fsm{color:#fff;position:absolute;top:0;right:1.25rem}.cooked-fsm h2{margin:0 0 2rem;padding:0;font-size:1rem;text-transform:uppercase;letter-spacing:.05rem;font-weight:800}.cooked-fsm-directions .cooked-panel,.cooked-fsm-ingredients .cooked-panel,.cooked-fsm-notes .cooked-panel{padding-left:1%;padding-right:2%}.cooked-fsm-notes .cooked-panel .cooked-recipe-notes{font-size:1.2rem;line-height:1.6rem}.cooked-fsm-notes .cooked-panel .cooked-recipe-notes{margin:0 0 1rem}.cooked-fsm-notes .cooked-panel .cooked-recipe-notes ol,.cooked-fsm-notes .cooked-panel .cooked-recipe-notes ul{padding-left:1.5rem}.cooked-fsm-notes .cooked-panel .cooked-recipe-notes ul li{margin:0 0 1rem 1rem}.cooked-fsm .cooked-fsm-mobile-nav{box-sizing:border-box;position:absolute;top:3.5rem;left:0;margin:-1px 0 0 0;width:100%;padding:0;line-height:3.5rem;z-index:9999999}.cooked-fsm .cooked-fsm-mobile-nav a{text-transform:uppercase;font-size:.9rem;font-weight:700;letter-spacing:.03rem;display:block;float:left;width:50%;text-align:center;color:#fff;color:rgba(255,255,255,.6);background:rgba(25,25,25,.3);box-shadow:inset -1px 0 0 0 rgba(0,0,0,.15)}.cooked-fsm .cooked-fsm-mobile-nav a.cooked-active{color:#fff}.cooked-fsm .cooked-fsm-mobile-nav a.cooked-active{box-shadow:none}.cooked-fsm .cooked-fsm-mobile-nav a:last-child{box-shadow:inset 1px 0 0 0 rgba(0,0,0,.15)}body.cooked-fsm-active #wpadminbar{display:none}.cooked-recipe-term-grid{margin:3% -1%;position:relative}.cooked-term-block{box-sizing:border-box;display:block;background:0 0;position:relative;float:left}.cooked-term-block .cooked-recipe-card{margin:0}.cooked-term-block .cooked-recipe-card .cooked-recipe-card-sep{margin:.65rem auto;height:3px}.cooked-term-block.cooked-col-33{width:31.333%;margin:1%}.cooked-term-block.cooked-col-25{width:23%;margin:1%}.cooked-recipe-gallery{-webkit-transition:all .5s cubic-bezier(.42,0,.15,1);-moz-transition:all .5s cubic-bezier(.42,0,.15,1);-o-transition:all .5s cubic-bezier(.42,0,.15,1);transition:all .5s cubic-bezier(.42,0,.15,1)}#cooked-timers-wrap,#cooked-timers-wrap .cooked-timer-block,#cooked-timers-wrap .cooked-timer-block .cooked-timer-obj,.cooked-fsm,.cooked-icon-loading-wrap,.cooked-progress>span,.cooked-recipe,.cooked-recipe-card-modern,.cooked-recipe-card-modern-centered,.cooked-recipe-card-sep,.cooked-recipe-info span.cooked-fsm-button,.cooked-recipe-info span.cooked-print>a,.cooked-recipe-search .cooked-browse-search-button,.cooked-recipe-search .cooked-browse-select,.cooked-recipe-search .cooked-field-wrap-select:before,.cooked-recipe-search .cooked-sortby-wrap,.cooked-recipe-search .cooked-sortby-wrap:before,.cooked-recipe-search .cooked-taxonomy-selected,.cooked-recipe-search>form>div:last-child .cooked-browse-search-button{-webkit-transition:all .2s cubic-bezier(.42,0,.15,1);-moz-transition:all .2s cubic-bezier(.42,0,.15,1);-o-transition:all .2s cubic-bezier(.42,0,.15,1);transition:all .2s cubic-bezier(.42,0,.15,1)}.cooked-term-block{-webkit-transition:all .1s cubic-bezier(.25,.25,.75,.75);-moz-transition:all .1s cubic-bezier(.25,.25,.75,.75);-o-transition:all .1s cubic-bezier(.25,.25,.75,.75);transition:all .1s cubic-bezier(.25,.25,.75,.75)}.cooked-term-block .cooked-term-name,.cooked-term-block .cooked-term-thumbnail img{-webkit-transition:all .3s cubic-bezier(.47,0,0,1);-moz-transition:all .3s cubic-bezier(.47,0,0,1);-o-transition:all .3s cubic-bezier(.47,0,0,1);transition:all .3s cubic-bezier(.47,0,0,1)}.cooked-button,.cooked-button i.cooked-icon{-webkit-transition:border .2s cubic-bezier(.42,0,.15,1),background .2s cubic-bezier(.42,0,.15,1),color .2s cubic-bezier(.42,0,.15,1);-moz-transition:border .2s cubic-bezier(.42,0,.15,1),background .2s cubic-bezier(.42,0,.15,1),color .2s cubic-bezier(.42,0,.15,1);-o-transition:border .2s cubic-bezier(.42,0,.15,1),background .2s cubic-bezier(.42,0,.15,1),color .2s cubic-bezier(.42,0,.15,1);transition:border .2s cubic-bezier(.42,0,.15,1),background .2s cubic-bezier(.42,0,.15,1),color .2s cubic-bezier(.42,0,.15,1)}.cooked-recipe-ingredients .cooked-ingredient-checkbox,.cooked-recipe-search .cooked-browse-select.cooked-active .cooked-browse-select-block{-webkit-transition:all .1s cubic-bezier(.42,0,.15,1);-moz-transition:all .1s cubic-bezier(.42,0,.15,1);-o-transition:all .1s cubic-bezier(.42,0,.15,1);transition:all .1s cubic-bezier(.42,0,.15,1)} \ No newline at end of file +#wp-admin-bar-cooked-ab .ab-icon:before{font-family:CookedIcons;content:"\f035";font-size:17px;top:-2px}.cooked-clearfix:after{content:"";display:table;clear:both}.cooked-noscroll{overflow:hidden;width:100%;height:100%}.cooked-hidden-schema{display:none}.cooked-fsm .cooked-fsm-mobile-nav{display:none}.cooked-browse-search-button,.cooked-button,.cooked-fsm .cooked-fsm-top,.cooked-icon-loading,.cooked-profile-tabs,.cooked-progress span{color:#fff!important;text-decoration:none!important}.cooked-recipe-search .cooked-taxonomy-selected .cooked-field-title,.cooked-recipe-search .cooked-taxonomy-selected:before{color:#fff}.cooked-button,button.cooked-button,input[type=button].cooked-button,input[type=submit].cooked-button{box-sizing:border-box;cursor:pointer;display:inline-block;padding:.4rem .65rem;height:2.1rem;line-height:1.25rem;font-size:.9rem;font-weight:500;letter-spacing:.03rem;color:#fff;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cooked-button i.cooked-icon{color:#fff;font-size:1rem;font-weight:400}.cooked-button.cooked-square-button{padding:0;width:2.25rem;height:2.25rem;line-height:2.25rem;text-align:center}.cooked-button.cooked-square-button i.cooked-icon{font-size:1rem}.cooked-servings-switcher{display:block}.cooked-servings-switcher .cooked-button:first-child{margin-right:1rem}.cooked-servings-switcher .cooked-button:last-child{margin-left:1rem}.cooked-post-featured-image{max-width:100%;height:auto;border:none;display:block;margin:0 0 2rem;padding:0}body .cooked-post-featured-image img{display:block;width:100%;height:auto}.cooked-recipe-ingredients{display:block;padding:0;margin:0 0 2rem}.cooked-recipe-ingredients .cooked-heading{margin:1rem 0 .3rem;display:block;font-weight:600;font-size:1.25rem;line-height:1.5}.cooked-recipe-ingredients .cooked-heading:first-child{margin-top:0}.cooked-recipe-ingredients .cooked-ingredient{position:relative;padding:.5rem 0 0 2rem;margin:0;font-size:inherit}.cooked-recipe-ingredients .cooked-ingredient.cooked-ing-no-checkbox{padding-left:0}.cooked-recipe-ingredients .cooked-ingredient .cooked-ing-name{line-height:1.4rem;padding:1px 0}.cooked-recipe-ingredients .cooked-ingredient-checkbox{transform:scale(1);position:absolute;top:.9rem;left:0;cursor:pointer;display:inline-block;width:1rem;height:1rem;line-height:1rem;border:1px solid #ddd;border-color:rgba(0,0,0,.2);margin:0 .8rem 0 0}.cooked-recipe-ingredients .cooked-ingredient-checkbox:active{transform:scale(.9)}.cooked-recipe-ingredients .cooked-ingredient-checkbox:hover{border-color:#bbb;border-color:rgba(0,0,0,.5)}.cooked-recipe-ingredients .cooked-ingredient-checkbox.cooked-checked:after{font-family:CookedIcons;content:"\f01d";position:absolute;top:0;left:0;font-size:.6rem;line-height:1rem;width:100%;height:100%;text-align:center}.cooked-recipe-ingredients .cooked-ingredient.cooked-checked{text-decoration:line-through;opacity:.5}.cooked-ingredient-substitution{font-style:italic;color:#777;margin-left:5px;display:inline-block}.cooked-ing-sub-label{font-style:normal;font-weight:600;font-size:.85em;color:#999;margin-right:2px}.cooked-recipe-directions{display:block;padding:0;margin:0 0 2rem}.cooked-recipe-directions .cooked-heading{margin:0 0 1rem;display:block;font-weight:600;font-size:1.25rem;line-height:1.5}.cooked-recipe-directions .cooked-direction{position:relative;padding:0;margin:0;font-size:inherit}.cooked-recipe-directions .cooked-direction img{max-width:100%;height:auto;display:block;margin:0 0 2rem;padding:0;border:none}.cooked-recipe-directions .cooked-direction.cooked-direction-has-number .cooked-dir-content{padding-left:2rem}.cooked-recipe-directions .cooked-direction.cooked-direction-has-number-wide .cooked-dir-content{padding-left:2.75rem}.cooked-recipe-directions .cooked-direction-number{opacity:.35;position:absolute;display:inline-block;width:auto;height:1.5rem;line-height:1.5rem;font-weight:800;top:0;left:0;font-size:1.5rem}.cooked-recipe-excerpt{display:block;padding:0;margin:0 0 1rem}.cooked-recipe-info{display:block;padding:0;margin:0 0 1rem}.cooked-recipe-info>section.cooked-left>span,.cooked-recipe-info>span{line-height:1.25rem;position:relative;box-sizing:border-box;vertical-align:top;margin:0 2rem 1rem 0;display:inline-block;width:auto}.cooked-recipe-info>section.cooked-right>span{line-height:1.3rem;position:relative;box-sizing:border-box;vertical-align:top;margin:0 0 1rem 2rem;display:inline-block;width:auto}.cooked-recipe-info>section.cooked-left>span:last-child,.cooked-recipe-info>span:last-child{margin-right:0}.cooked-recipe-info>section.cooked-right>span:first-child{margin-left:0}.cooked-recipe-info strong{font-size:.75rem;letter-spacing:.03rem;font-weight:800;text-transform:uppercase;display:block}.cooked-recipe-notes{display:block;padding:0;margin:0 0 2rem}.cooked-recipe-notes .cooked-heading{margin:0 0 1rem;display:block;font-weight:600;font-size:1.25rem;line-height:1.5}.cooked-recipe-info span.cooked-print,.cooked-recipe-info span.cooked-print>a{height:2rem;display:inline-block}.cooked-recipe-info span.cooked-print>a{color:rgba(0,0,0,.4)}.cooked-recipe-info span.cooked-print>a:hover{color:rgba(0,0,0,.6)}.cooked-recipe-info span.cooked-print .cooked-icon{font-size:2.25rem;line-height:2.5rem}.cooked-recipe-info span.cooked-fsm-button{cursor:pointer;color:rgba(0,0,0,.4);height:2rem;display:inline-block}.cooked-recipe-info span.cooked-fsm-button:hover{color:rgba(0,0,0,.6)}.cooked-recipe-info span.cooked-fsm-button .cooked-icon{font-size:2.25rem;line-height:2.5rem}.cooked-recipe span.cooked-author,.cooked-recipe-info span.cooked-author{padding-left:3.25rem}.cooked-recipe span.cooked-author.cooked-no-avatar,.cooked-recipe-info span.cooked-author.cooked-no-avatar{padding-left:0}.cooked-recipe span.cooked-author-avatar,.cooked-recipe-info span.cooked-author-avatar{width:2.5rem;height:2.5rem;display:block;position:absolute;top:50%;left:0;margin:-1.25rem 0 0 0}.cooked-recipe span.cooked-author-avatar img,.cooked-recipe-info span.cooked-author-avatar img{margin:0;padding:0;display:block;height:auto;width:100%;max-width:100%;max-height:100%;border-radius:100px}.cooked-author-avatar,.cooked-author-avatar img{border-radius:5rem}.cooked-recipe-info span.cooked-time{padding-left:3rem}.cooked-recipe-info span.cooked-time-icon{opacity:.5;width:1rem;height:1rem;font-size:2.2rem;display:block;position:absolute;top:50%;left:0;margin:-1.1rem 0 0 0}.cooked-recipe-info span.cooked-time-icon i.cooked-icon{display:block}.cooked-timer{padding-left:2px}.cooked-timer i.cooked-icon{opacity:.6}body .cooked-timer a{font-weight:600;cursor:pointer;text-decoration:none}body .cooked-timer a:hover{text-decoration:none}#cooked-timers-wrap{z-index:99999;white-space:nowrap;overflow:hidden;border-radius:10px 10px 0 0;background:#fff;box-shadow:0 -5px 30px rgba(0,0,0,.15);line-height:1.6rem;font-size:1rem;width:50%;max-width:100%;height:7.5rem;position:fixed;transform:translate3d(0,7.2em,0);opacity:0;bottom:0;right:50%;margin:0 -25% 0 0;box-sizing:border-box}#cooked-timers-wrap.cooked-visible{transform:translate3d(0,0,0);opacity:1}#cooked-timers-wrap .cooked-timer-block{overflow:hidden;position:relative;display:block;height:0;padding:0;width:100%;opacity:0;padding:0 1.5rem 0 6rem;box-sizing:border-box}#cooked-timers-wrap .cooked-timer-block.cooked-visible{opacity:1;height:7.5rem;padding:1.9rem 1.5rem 1.55rem 6rem}#cooked-timers-wrap .cooked-timer-block>span{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:auto}#cooked-timers-wrap .cooked-timer-block i.cooked-icon-times{line-height:2rem;color:rgba(0,0,0,.25);position:absolute;font-size:2rem;top:2.5rem;left:2rem;cursor:pointer}#cooked-timers-wrap .cooked-timer-block i.cooked-icon-times:hover{color:inherit}#cooked-timers-wrap .cooked-timer-block .cooked-timer-step{font-size:1.1rem;font-weight:800;text-transform:uppercase}#cooked-timers-wrap .cooked-timer-block .cooked-timer-desc{font-size:1.2rem;width:100%;padding-right:14rem;box-sizing:border-box;font-weight:400;color:rgba(0,0,0,.65)}#cooked-timers-wrap .cooked-timer-block .cooked-timer-obj{font-weight:600;position:absolute;top:2.5rem;right:2rem;width:13.5rem;font-size:2rem;line-height:2rem}#cooked-timers-wrap .cooked-timer-block .cooked-timer-obj>div,#cooked-timers-wrap .cooked-timer-block .cooked-timer-obj>i.cooked-icon{display:inline-block}#cooked-timers-wrap .cooked-timer-block .cooked-timer-obj>i.cooked-icon-pause,#cooked-timers-wrap .cooked-timer-block .cooked-timer-obj>i.cooked-icon-play,#cooked-timers-wrap .cooked-timer-block .cooked-timer-obj>i.cooked-icon-reverse{cursor:pointer;opacity:.5;width:2rem;text-align:center;margin-right:.5rem;position:relative;font-size:2rem;transform:scale(.75)}#cooked-timers-wrap .cooked-timer-block .cooked-timer-obj>i.cooked-icon-play{display:none}#cooked-timers-wrap .cooked-timer-block .cooked-timer-obj>i.cooked-icon:hover{opacity:1}#cooked-timers-wrap.cooked-multiples{margin:0;right:0;border-radius:10px 0 0 0;width:20rem}#cooked-timers-wrap.cooked-multiples .cooked-timer-block{padding-left:3.25rem}#cooked-timers-wrap.cooked-multiples .cooked-timer-block.cooked-visible{padding-top:1rem;line-height:1.5rem;padding-left:3.25rem}#cooked-timers-wrap.cooked-multiples .cooked-timer-block .cooked-timer-step{font-size:.9rem}#cooked-timers-wrap.cooked-multiples .cooked-timer-block .cooked-timer-desc{font-size:1rem;padding:0}#cooked-timers-wrap.cooked-multiples .cooked-timer-block .cooked-timer-obj{top:auto;right:auto;width:auto;font-size:1.5rem;line-height:2rem}#cooked-timers-wrap.cooked-multiples .cooked-timer-block .cooked-timer-obj>i.cooked-icon{font-size:1.5rem;width:1.3rem;margin-right:.5rem}#cooked-timers-wrap.cooked-multiples .cooked-timer-block i.cooked-icon-times{line-height:1rem;font-size:1rem;top:1.4rem;left:1.2rem}#cooked-timers-wrap .cooked-timer-block .cooked-progress{display:block;position:absolute;left:0;bottom:0;height:.5rem;width:100%;background:rgba(0,0,0,.15)}#cooked-timers-wrap .cooked-timer-block .cooked-progress span{width:0;display:block;position:absolute;left:0;top:0;height:.5rem}#cooked-timers-wrap .cooked-timer-block.cooked-paused{background:#f9f9f9}#cooked-timers-wrap .cooked-timer-block.cooked-paused .cooked-timer-obj{color:rgba(0,0,0,.5)}#cooked-timers-wrap .cooked-timer-block.cooked-complete{background:rgba(255,0,0,.05)}#cooked-timers-wrap .cooked-timer-block.cooked-complete .cooked-progress span{background:red}#cooked-timers-wrap .cooked-timer-block.cooked-complete .cooked-timer-obj{color:red}.cooked-recipe-info span.cooked-servings{padding-left:3rem}.cooked-recipe-info span.cooked-servings select.cooked-servings-changer{opacity:0;position:absolute;bottom:0;left:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;border:none;background:0 0;width:100%;padding:0;margin:0}.cooked-recipe-info span.cooked-servings-icon{opacity:.5;width:1rem;height:1rem;font-size:2.2rem;display:block;position:absolute;top:50%;left:0;margin:-1.1rem 0 0 0}.cooked-recipe-info span.cooked-servings-icon i.cooked-icon{display:block}.cooked-left{float:left;display:inline-block;width:auto}.cooked-right{float:right;display:inline-block;width:auto}.cooked-recipe-gallery{height:1px;overflow:hidden;opacity:0;transform:translate3d(0,10px,0);padding:0;margin:0}.cooked-recipe-gallery .fotorama__thumb-border{border-color:#333}.cooked-recipe-gallery .fotorama__caption__wrap{background:#333;color:#fff}.cooked-recipe-gallery .fotorama__stage__frame.fotorama__active{background:#333}.cooked-recipe-gallery.cooked-gallery-loaded{height:auto;overflow:inherit;opacity:1;transform:translate3d(0,0,0);margin:0 0 2rem}.cooked-nutrition-label{background:#fff;font-size:.9rem;border:1px solid #aaa;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:10px;margin:0 0 2rem;font-family:Helvetica,Arial,sans-serif;container-name:nutrition-label;container-type:inline-size}.cooked-nutrition-label .cooked-nutrition-title{font-size:2.3rem;line-height:1;letter-spacing:0;font-weight:800;padding:0 0 .5rem 0;margin:0;color:#333;border-bottom:1px solid #aaa}.cooked-nutrition-label.cooked-float-left{max-width:45%;margin:0 3rem 3rem 0;float:left}body .cooked-nutrition-label p{margin:0!important;padding:0!important}body .cooked-nutrition-label p.cooked-daily-value-text{padding:.75rem 0 .15rem 0!important;margin:0!important;font-size:.9rem;line-height:1.3rem!important}body .cooked-nutrition-label p.cooked-daily-value-text strong{font-weight:400}body .cooked-nutrition-label dl{margin:0!important;padding:0!important}body .cooked-nutrition-label dt{position:relative;margin:0;padding:2px 0;border-top:1px solid #aaa}body .cooked-nutrition-label dt.cooked-calories{border-top:none;display:flex;justify-content:space-between;align-items:baseline;padding-bottom:10px}body .cooked-nutrition-label dt.cooked-calories strong{font-size:2rem;font-weight:800}body .cooked-nutrition-label dt.cooked-calories strong.cooked-nut-label{font-size:2.5rem}body .cooked-nutrition-label dt.cooked-nut-servings{border-top:none;padding-bottom:0}body .cooked-nutrition-label dt.cooked-serving-size{border-top:none;padding-top:0}body .cooked-nutrition-label div.cooked-serving-size strong,body .cooked-nutrition-label dt.cooked-serving-size strong,body .cooked-nutrition-label dt.cooked-serving-size strong.cooked-nut-label{font-size:1.3rem;font-weight:800}body .cooked-nutrition-label div.cooked-nut-servings p,body .cooked-nutrition-label dt.cooked-nut-servings p{font-size:1.2rem}body .cooked-nutrition-label dt dt{padding:2px 0 0;margin:2px 0 0}body .cooked-nutrition-label dt:after{content:"";display:table;clear:both}body .cooked-nutrition-label dt.no-after:after{content:none}body .cooked-nutrition-label div.cooked-nut-spacer,body .cooked-nutrition-label dt.cooked-nut-spacer{border:none;height:.5rem;padding:0;background:#333;margin-top:.3rem}body .cooked-nutrition-label dl dt.cooked-nut-no-border,body .cooked-nutrition-label>dl>dt:first-child{border:none}body .cooked-nutrition-label dt dl{margin:0 0 0 1.5rem!important}body .cooked-nutrition-label .cooked-nut-hr{border:none;border-top:1rem solid #333;margin:.1rem 0 0;padding:0}body .cooked-nutrition-label strong{font-weight:800}body .cooked-nutrition-label strong.cooked-nut-heading{font-size:1rem}body .cooked-nutrition-label strong.cooked-nut-label{font-weight:400}body .cooked-nutrition-label dl dl strong.cooked-nut-right{font-weight:800}body .cooked-nutrition-label .cooked-nut-right{float:right}body .cooked-nutrition-label dl.cooked-nut-bottom dt{border-top:none;border-bottom:1px solid #aaa;float:left;width:100%;box-sizing:border-box}body .cooked-nutrition-label dl.cooked-nut-bottom dt strong{font-weight:400}body .cooked-nutrition-label dl.cooked-nut-bottom dt:last-child{border:none}body .cooked-nutrition-label dl.cooked-nut-bottom dt:nth-last-child(2):nth-child(even){border-bottom:1px solid #aaa}.widget .cooked-nutrition-label{margin:0}body .cooked-nutrition-label .cooked-nutrition-facts-powered-by-edamam img{float:right;height:2rem}.cooked-recipe-search{box-sizing:border-box;padding:0;margin:0;width:100%;display:block;border:1px solid transparent;position:relative}.cooked-recipe-search .cooked-field-wrap,.cooked-recipe-search .cooked-fields-wrap{display:inline-block;box-sizing:border-box;width:100%;margin:0 1% 0 0}.cooked-recipe-search .cooked-fields-wrap{margin:0}.cooked-recipe-search .cooked-browse-select{display:block;cursor:pointer;position:relative;border-radius:3px;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;background:rgba(0,0,0,.075);box-shadow:inset 0 0 0 1px rgba(0,0,0,.05);width:100%;font-size:1rem;line-height:3rem;height:auto;padding:0 1rem}.cooked-recipe-search .cooked-browse-select:hover{background:rgba(0,0,0,.1)}.cooked-recipe-search .cooked-browse-select .cooked-field-title{font-size:.9rem;vertical-align:top}.cooked-recipe-search .cooked-taxonomy-selected{border-radius:3px}.cooked-recipe-search .cooked-sortby-wrap{background:#f5f5f5;position:absolute;top:0;height:3rem;width:12rem;display:inline-block;margin:0 1px 0 0;right:3.5rem}.cooked-recipe-search .cooked-sortby-wrap>select{margin:0;box-shadow:none;position:relative;width:100%;background:0 0;cursor:pointer;font-size:.9rem;border:none;border-top:1px solid rgba(0,0,0,.1);border-bottom:1px solid rgba(0,0,0,.1);-webkit-appearance:none;-moz-appearance:none;appearance:none;height:100%;border-radius:0;display:inline-block;padding:0 1.25rem}.cooked-recipe-search .cooked-sortby-wrap:hover{background:#eee}.cooked-recipe-search input[type=text]{margin:0;vertical-align:initial;box-shadow:none;display:inline-block;box-sizing:border-box;background:#fff;width:100%;height:3rem;padding:0 1rem;font-size:1rem;border:1px solid rgba(0,0,0,.15);border-right:none}.cooked-recipe-search .cooked-3-search-fields>*,.cooked-recipe-search .cooked-4-search-fields>*{float:left}.cooked-recipe-search .cooked-field-wrap-select{position:relative}.cooked-recipe-search .cooked-field-wrap-select:before,.cooked-recipe-search .cooked-sortby-wrap:before{content:"\f00b";opacity:.25;font-family:CookedIcons;font-size:.75rem;position:absolute;top:50%;right:1.5rem;line-height:1.25rem;height:1.25rem;margin-top:-.5rem}.cooked-recipe-search .cooked-field-wrap-select:hover:before,.cooked-recipe-search .cooked-sortby-wrap:hover:before{opacity:.75;margin-top:-.5rem}.cooked-recipe-search .cooked-fields-wrap{padding-right:3.5rem;position:relative}.cooked-recipe-search .cooked-fields-wrap>.cooked-field-wrap-select{width:14%}.cooked-recipe-search .cooked-fields-wrap>.cooked-browse-search{width:85%;max-width:85%;margin:0}.cooked-recipe-search.cooked-search-no-sorting.cooked-search-no-browse .cooked-fields-wrap>.cooked-browse-search{width:100%}.cooked-recipe-search .cooked-browse-search-button{position:absolute;top:0;right:1px;width:3.5rem;text-decoration:none;font-size:1rem;text-align:center;color:#fff;line-height:3rem;height:3rem}.cooked-recipe-search .cooked-browse-search-button:hover{color:#fff;text-decoration:none}.cooked-recipe-search .cooked-browse-select-block{display:flex;color:inherit;cursor:default;visibility:hidden;opacity:0;transform:translate3d(0,-6px,0);box-sizing:border-box;z-index:99;position:absolute;width:auto;background:#fff;top:4rem;left:-10px;margin:0;line-height:1.5rem;border-radius:6px}.cooked-recipe-search .cooked-browse-select-block .cooked-tax-column{display:block;width:25%;min-width:25%;box-sizing:border-box;padding:0 .75rem}.cooked-recipe-search .cooked-browse-select-block .cooked-tax-column>div{max-height:16rem;overflow:auto}.cooked-recipe-search .cooked-browse-select-block .cooked-tax-column>div>span{display:block}.cooked-recipe-search .cooked-browse-select-block .cooked-tax-column>div>a,.cooked-recipe-search .cooked-browse-select-block .cooked-tax-column>span{display:block;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}.cooked-recipe-search .cooked-browse-select-block .cooked-tax-column>span.cooked-tax-column-title{font-size:.9rem;font-weight:800;text-transform:uppercase;margin:0 0 .6rem;padding:0 10px .6rem 0;border-bottom:1px solid rgba(0,0,0,.15)}.cooked-recipe-search .cooked-browse-select-block .cooked-tax-column>div>a{line-height:1.6rem}.cooked-recipe-search .cooked-browse-select-block .cooked-tax-column>div>span.cooked-tax-sub-item{margin-left:.75rem}.cooked-recipe-search .cooked-browse-select-block .cooked-tax-column i.cooked-icon{font-size:.9rem;color:rgba(0,0,0,.5)}.cooked-recipe-search .cooked-fields-wrap.cooked-1-search-fields .cooked-browse-select-block{width:170%;padding:1.5rem}.cooked-recipe-search .cooked-fields-wrap.cooked-1-search-fields .cooked-browse-select-block .cooked-tax-column{width:100%;padding:0}.cooked-recipe-search .cooked-browse-select.cooked-active .cooked-browse-select-block{visibility:visible;opacity:1;transform:translate3d(0,-1px,0)}.cooked-recipe-search .cooked-browse-select-block{box-shadow:0 2px 2px rgba(0,0,0,.05),0 4px 4px rgba(0,0,0,.05),0 8px 8px rgba(0,0,0,.05),0 16px 16px rgba(0,0,0,.05),0 32px 32px rgba(0,0,0,.05),0 64px 64px rgba(0,0,0,.05)}.cooked-browse-select-inline-block{display:flex;color:inherit;cursor:default;visibility:visible;opacity:1;box-sizing:border-box;z-index:99;position:relative;width:auto;background:#fff;margin:10px 2px 3rem;line-height:1.5rem;border-radius:6px;padding:1.5rem}.cooked-browse-select-inline-block .cooked-tax-column{display:block;width:100%;box-sizing:border-box;padding:0 .75rem}.cooked-browse-select-inline-block .cooked-tax-column>div{max-height:16rem;overflow:auto}.cooked-browse-select-inline-block .cooked-tax-column>div>span{display:block}.cooked-browse-select-inline-block .cooked-tax-column>div>a,.cooked-browse-select-inline-block .cooked-tax-column>span{display:block;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}.cooked-browse-select-inline-block .cooked-tax-column>span.cooked-tax-column-title{font-size:.9rem;font-weight:800;text-transform:uppercase;margin:0 0 .6rem;padding:0 10px .6rem 0;border-bottom:1px solid rgba(0,0,0,.15)}.cooked-browse-select-inline-block .cooked-tax-column>div>a{line-height:1.6rem}.cooked-browse-select-inline-block .cooked-tax-column>div>span.cooked-tax-sub-item{margin-left:.75rem}.cooked-browse-select-inline-block .cooked-tax-column i.cooked-icon{font-size:.9rem;color:rgba(0,0,0,.5)}.cooked-browse-select-inline-block{box-shadow:0 2px 2px -1px rgba(0,0,0,.15)}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap{padding:0;display:block}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap>.cooked-browse-search{width:100%;max-width:100%;border-right:1px solid rgba(0,0,0,.15);margin:3% 0}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap.cooked-1-search-fields .cooked-browse-select-block{width:100%;left:0}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap>.cooked-field-wrap-select{display:block;width:100%}.cooked-recipe-search.cooked-search-compact .cooked-sortby-wrap{display:block;position:relative;width:67%;right:auto;top:auto;float:left;margin:0}.cooked-recipe-search.cooked-search-compact .cooked-sortby-wrap>select{position:absolute;width:100%;border:1px solid rgba(0,0,0,.15);margin:0}.cooked-recipe-search.cooked-search-compact .cooked-browse-search-button{width:30%;right:auto;position:relative;display:block;float:right}.cooked-recipe-search.cooked-search-compact .cooked-browse-select-block{top:3rem;left:0;max-height:16rem;overflow:auto;transform:translate3d(0,-1px,0)}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap.cooked-1-search-fields .cooked-browse-select-block{width:100%;padding:1.5rem}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap.cooked-2-search-fields .cooked-browse-select-block{width:100%;padding:1.5rem}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap.cooked-3-search-fields .cooked-browse-select-block{width:100%;padding:1.5rem}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap.cooked-4-search-fields .cooked-browse-select-block{width:100%;padding:1.5rem}.cooked-recipe-search.cooked-search-compact .cooked-browse-select-block .cooked-tax-column{float:none;padding:0 0 1.5rem 0}.cooked-recipe-search.cooked-search-compact .cooked-browse-select-block .cooked-tax-column:last-child{padding:0}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap.cooked-1-search-fields .cooked-browse-select-block .cooked-tax-column{width:100%}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap.cooked-2-search-fields .cooked-browse-select-block .cooked-tax-column{width:100%}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap.cooked-3-search-fields .cooked-browse-select-block .cooked-tax-column{width:100%}.cooked-recipe-search.cooked-search-compact .cooked-fields-wrap.cooked-4-search-fields .cooked-browse-select-block .cooked-tax-column{width:100%}.cooked-recipe-search.cooked-search-compact.cooked-search-no-sorting .cooked-fields-wrap>.cooked-browse-search{width:80%;margin:3% 0}.cooked-recipe-search.cooked-search-compact.cooked-search-no-sorting .cooked-browse-search-button{width:20%;margin:3% 0}.cooked-recipe-search.cooked-search-compact.cooked-search-no-browse .cooked-browse-search-button,.cooked-recipe-search.cooked-search-compact.cooked-search-no-browse .cooked-fields-wrap>.cooked-browse-search{margin:0 0 3%}.cooked-recipe-search.cooked-search-compact.cooked-search-no-sorting.cooked-search-no-browse .cooked-browse-search-button,.cooked-recipe-search.cooked-search-compact.cooked-search-no-sorting.cooked-search-no-browse .cooked-fields-wrap>.cooked-browse-search{margin:0}.cooked-author-list-heading{display:block;margin:0 0 2rem}.cooked-author-list-heading .cooked-author-avatar{float:left;width:3rem;height:auto;display:block;margin:0 1rem 0 0}.cooked-author-list-heading .cooked-author-avatar img{display:block;margin:0}.cooked-author-list-heading .cooked-meta-title{font-size:1.25rem;line-height:1.2rem;margin:0}.cooked-author-list-heading a{font-size:.9rem}body p.cooked-none-found{display:block;margin:0;padding:1rem 0 2rem;color:#888;text-align:center;font-style:italic}.cooked-recipe-grid{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);position:relative;box-sizing:border-box;padding:0;margin:3% -1.5%;width:103%;display:flex;flex-wrap:wrap}.cooked-recipe-grid .cooked-recipe{width:30.333%;min-width:30.333%;display:block;box-sizing:border-box;margin:0 1.5% 3%;padding:0}.cooked-recipe-grid .cooked-recipe .cooked-recipe-card-title{cursor:pointer;color:inherit;text-decoration:none}.cooked-recipe-grid .cooked-recipe .cooked-recipe-card-title:hover{text-decoration:none!important}.cooked-recipe-grid.cooked-columns-1 .cooked-recipe{width:97%;min-width:97%}.cooked-recipe-grid.cooked-columns-2 .cooked-recipe{width:47%;min-width:47%}.cooked-recipe-grid.cooked-columns-3 .cooked-recipe{width:30.333%;min-width:30.333%}.cooked-recipe-grid.cooked-columns-4 .cooked-recipe{width:22%;min-width:22%}.cooked-recipe-grid.cooked-columns-5 .cooked-recipe{width:17%;min-width:17%}.cooked-recipe-grid.cooked-columns-6 .cooked-recipe{width:13.666%;min-width:13.666%}.cooked-recipe a,.cooked-recipe a:hover,.cooked-recipe-info a,.cooked-recipe-info a:hover,.cooked-recipe-search a,.cooked-recipe-search:hover{box-shadow:none!important}.cooked-recipe-card{text-align:left;background:#fff;text-decoration:none!important;border:none!important;color:inherit!important;display:block;overflow:hidden;border-radius:3px;margin:0 auto 1rem;box-shadow:inset 0 0 0 1px rgba(0,0,0,.15)}.cooked-recipe-card-content>span,.cooked-recipe-card>span{display:block!important}.cooked-recipe-card:hover{text-decoration:none!important;border:none!important;color:inherit!important}.cooked-recipe-card-image{background-size:cover;background-position:center;display:block;margin:0;padding:0;height:250px;width:100%;position:relative}.cooked-recipe-card .cooked-recipe-image-empty{display:block;margin:0;padding:0;height:250px;width:100%;position:relative}.cooked-recipe-card .cooked-recipe-card-sep{display:none}.cooked-recipe-card-content{padding:1rem 1.5rem;margin:0}.cooked-recipe-card-title{display:block;font-weight:600;margin:.5rem 0;font-size:1.25rem;line-height:1.65rem}.cooked-recipe-card-author{margin:.5rem 0;font-size:.9rem}.cooked-recipe-card-excerpt{display:block;margin:.5rem 0;font-size:1rem}.cooked-recipe-card-centered,.cooked-recipe-card-modern-centered{text-align:center}.cooked-recipe-card-modern,.cooked-recipe-card-modern-centered{transform:translate3d(0,0,0);border-radius:10px;box-shadow:0 2px 3px rgba(0,0,0,.04),inset 0 0 0 1px rgba(0,0,0,.1)}.cooked-recipe-card-modern .cooked-recipe-card-author,.cooked-recipe-card-modern .cooked-recipe-card-excerpt,.cooked-recipe-card-modern .cooked-recipe-card-title,.cooked-recipe-card-modern-centered .cooked-recipe-card-author,.cooked-recipe-card-modern-centered .cooked-recipe-card-excerpt,.cooked-recipe-card-modern-centered .cooked-recipe-card-title{margin:.25rem 0}.cooked-recipe-card-modern .cooked-recipe-card-content,.cooked-recipe-card-modern-centered .cooked-recipe-card-content{padding:1.25rem 1.5rem}.cooked-recipe-card-modern .cooked-recipe-card-author,.cooked-recipe-card-modern-centered .cooked-recipe-card-author{opacity:.75}.cooked-recipe-card-modern .cooked-recipe-card-sep,.cooked-recipe-card-modern-centered .cooked-recipe-card-sep{margin:1rem 0;display:block;width:15%;height:6px;border-radius:3px;background:#ddd}.cooked-recipe-card-modern-centered .cooked-recipe-card-sep{margin:1rem auto}.cooked-recipe-card-modern-centered:hover,.cooked-recipe-card-modern:hover{transform:translate3d(0,-2px,0)!important;box-shadow:0 5px 5px rgba(0,0,0,.05),inset 0 0 0 1px rgba(0,0,0,.1)}.cooked-recipe-card-modern-centered:hover .cooked-recipe-card-sep,.cooked-recipe-card-modern:hover .cooked-recipe-card-sep{width:25%}.widget .cooked-recipe-card{margin:0 auto}.cooked-recipe-term-list .cooked-term-item a{display:block;padding:5px 0;border-top:1px solid rgba(0,0,0,.1)}.cooked-shortcode-recipe-list{margin:0 auto 1rem}.cooked-shortcode-recipe-list .cooked-srl-single{box-sizing:border-box;border:none;border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.15);position:relative;display:block;padding:.6rem 0 0 0;margin:0 0 1rem}.cooked-shortcode-recipe-list .cooked-srl-single:hover{border:none;border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.15)}.cooked-shortcode-recipe-list .cooked-srl-single.cooked-srl-has-image{padding-left:4rem;min-height:3.75rem}.cooked-shortcode-recipe-list .cooked-srl-image{margin:0;padding:0}.cooked-shortcode-recipe-list .cooked-srl-image img{width:3rem;height:3rem;border-radius:3px;position:absolute;top:.9rem;left:0;display:block;margin:0;padding:0}.cooked-shortcode-recipe-list .cooked-srl-sep{display:none}.cooked-shortcode-recipe-list .cooked-srl-content{line-height:1.4rem;padding:0;margin:0}.cooked-shortcode-recipe-list .cooked-srl-title{line-height:1.4rem;display:block;font-weight:600;margin:.25rem 0;font-size:1rem}.cooked-shortcode-recipe-list .cooked-srl-author{line-height:1.4rem;margin:.25rem 0;font-size:.9rem;opacity:.75}.cooked-shortcode-recipe-list .cooked-srl-single:first-child{border:none;padding-top:0}.cooked-shortcode-recipe-list .cooked-srl-single:first-child .cooked-srl-image img{top:0}.cooked-shortcode-recipe-list .cooked-srl-single.cooked-srl-has-image:first-child{min-height:3rem}.cooked-pagination-numbered{text-align:center;display:block;margin:0 0 2rem}.cooked-pagination-numbered>a,.cooked-pagination-numbered>span{font-size:1.2rem;font-weight:600;display:inline-block;padding:0 5px;background:0 0}.cooked-pagination-numbered>span{color:rgba(0,0,0,.25)}body .cooked-pagination-numbered>a{text-decoration:none;border:none}body .cooked-pagination-numbered>a:hover{text-decoration:none;border:none}.cooked-fsm{box-sizing:border-box;display:none;opacity:0;transform:scale(.95);position:fixed;top:0;left:0;width:100%;height:100%;background:#fff;z-index:99998}.cooked-fsm.cooked-visible{display:block}.cooked-fsm.cooked-active{opacity:1;transform:scale(1)}.cooked-fsm .cooked-fsm-top{font-size:1.2rem;font-weight:300;text-align:center;box-sizing:border-box;position:absolute;top:0;left:0;width:100%;color:#fff;padding:0 4rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:3.5rem;height:3.5rem}.cooked-fsm .cooked-fsm-ingredients{box-sizing:border-box;padding:5.5rem 2rem 1rem;font-size:1rem;line-height:1.6rem;width:30%;height:100%;background:#f9f9f9;overflow-y:scroll;-webkit-overflow-scrolling:touch;position:absolute;top:0;left:0}.cooked-fsm .cooked-recipe-ingredients{margin-top:-.75rem}.cooked-fsm .cooked-recipe-ingredients .cooked-ingredient{padding:.75rem 0 0 2rem}.cooked-fsm .cooked-recipe-ingredients .cooked-heading{font-size:1.25rem}.cooked-fsm .cooked-recipe-ingredients .cooked-heading:first-child{padding-top:.75rem}.cooked-fsm .cooked-recipe-ingredients .cooked-ingredient-checkbox{top:.75rem}.cooked-fsm .cooked-fsm-directions-wrap{box-sizing:border-box;padding:5.5rem 2rem 1rem;font-size:1rem;line-height:1.6rem;width:70%;height:100%;overflow-y:scroll;-webkit-overflow-scrolling:touch;position:absolute;top:0;left:30%}.cooked-fsm .cooked-fsm-directions p{margin:0 0 1.5rem;font-size:1.2rem;line-height:1.6rem}.cooked-fsm .cooked-recipe-directions .cooked-heading{font-size:1.5rem}.cooked-fsm .cooked-recipe-directions .cooked-direction-number{font-size:1.8rem}.cooked-fsm .cooked-recipe-directions .cooked-direction.cooked-direction-has-number .cooked-dir-content{padding-left:2.3rem}.cooked-fsm .cooked-recipe-directions .cooked-direction.cooked-direction-has-number-wide .cooked-dir-content{padding-left:3.05rem}.cooked-fsm .cooked-close-fsm{color:#fff;position:absolute;top:0;right:1.25rem}.cooked-fsm h2{margin:0 0 2rem;padding:0;font-size:1rem;text-transform:uppercase;letter-spacing:.05rem;font-weight:800}.cooked-fsm-directions .cooked-panel,.cooked-fsm-ingredients .cooked-panel,.cooked-fsm-notes .cooked-panel{padding-left:1%;padding-right:2%}.cooked-fsm-notes .cooked-panel .cooked-recipe-notes{font-size:1.2rem;line-height:1.6rem}.cooked-fsm-notes .cooked-panel .cooked-recipe-notes{margin:0 0 1rem}.cooked-fsm-notes .cooked-panel .cooked-recipe-notes ol,.cooked-fsm-notes .cooked-panel .cooked-recipe-notes ul{padding-left:1.5rem}.cooked-fsm-notes .cooked-panel .cooked-recipe-notes ul li{margin:0 0 1rem 1rem}.cooked-fsm .cooked-fsm-mobile-nav{box-sizing:border-box;position:absolute;top:3.5rem;left:0;margin:-1px 0 0 0;width:100%;padding:0;line-height:3.5rem;z-index:9999999}.cooked-fsm .cooked-fsm-mobile-nav a{text-transform:uppercase;font-size:.9rem;font-weight:700;letter-spacing:.03rem;display:block;float:left;width:50%;text-align:center;color:#fff;color:rgba(255,255,255,.6);background:rgba(25,25,25,.3);box-shadow:inset -1px 0 0 0 rgba(0,0,0,.15)}.cooked-fsm .cooked-fsm-mobile-nav a.cooked-active{color:#fff}.cooked-fsm .cooked-fsm-mobile-nav a.cooked-active{box-shadow:none}.cooked-fsm .cooked-fsm-mobile-nav a:last-child{box-shadow:inset 1px 0 0 0 rgba(0,0,0,.15)}body.cooked-fsm-active #wpadminbar{display:none}.cooked-recipe-term-grid{margin:3% -1%;position:relative}.cooked-term-block{box-sizing:border-box;display:block;background:0 0;position:relative;float:left}.cooked-term-block .cooked-recipe-card{margin:0}.cooked-term-block .cooked-recipe-card .cooked-recipe-card-sep{margin:.65rem auto;height:3px}.cooked-term-block.cooked-col-33{width:31.333%;margin:1%}.cooked-term-block.cooked-col-25{width:23%;margin:1%}.cooked-recipe-gallery{-webkit-transition:all .5s cubic-bezier(.42,0,.15,1);-moz-transition:all .5s cubic-bezier(.42,0,.15,1);-o-transition:all .5s cubic-bezier(.42,0,.15,1);transition:all .5s cubic-bezier(.42,0,.15,1)}#cooked-timers-wrap,#cooked-timers-wrap .cooked-timer-block,#cooked-timers-wrap .cooked-timer-block .cooked-timer-obj,.cooked-fsm,.cooked-icon-loading-wrap,.cooked-progress>span,.cooked-recipe,.cooked-recipe-card-modern,.cooked-recipe-card-modern-centered,.cooked-recipe-card-sep,.cooked-recipe-info span.cooked-fsm-button,.cooked-recipe-info span.cooked-print>a,.cooked-recipe-search .cooked-browse-search-button,.cooked-recipe-search .cooked-browse-select,.cooked-recipe-search .cooked-field-wrap-select:before,.cooked-recipe-search .cooked-sortby-wrap,.cooked-recipe-search .cooked-sortby-wrap:before,.cooked-recipe-search .cooked-taxonomy-selected,.cooked-recipe-search>form>div:last-child .cooked-browse-search-button{-webkit-transition:all .2s cubic-bezier(.42,0,.15,1);-moz-transition:all .2s cubic-bezier(.42,0,.15,1);-o-transition:all .2s cubic-bezier(.42,0,.15,1);transition:all .2s cubic-bezier(.42,0,.15,1)}.cooked-term-block{-webkit-transition:all .1s cubic-bezier(.25,.25,.75,.75);-moz-transition:all .1s cubic-bezier(.25,.25,.75,.75);-o-transition:all .1s cubic-bezier(.25,.25,.75,.75);transition:all .1s cubic-bezier(.25,.25,.75,.75)}.cooked-term-block .cooked-term-name,.cooked-term-block .cooked-term-thumbnail img{-webkit-transition:all .3s cubic-bezier(.47,0,0,1);-moz-transition:all .3s cubic-bezier(.47,0,0,1);-o-transition:all .3s cubic-bezier(.47,0,0,1);transition:all .3s cubic-bezier(.47,0,0,1)}.cooked-button,.cooked-button i.cooked-icon{-webkit-transition:border .2s cubic-bezier(.42,0,.15,1),background .2s cubic-bezier(.42,0,.15,1),color .2s cubic-bezier(.42,0,.15,1);-moz-transition:border .2s cubic-bezier(.42,0,.15,1),background .2s cubic-bezier(.42,0,.15,1),color .2s cubic-bezier(.42,0,.15,1);-o-transition:border .2s cubic-bezier(.42,0,.15,1),background .2s cubic-bezier(.42,0,.15,1),color .2s cubic-bezier(.42,0,.15,1);transition:border .2s cubic-bezier(.42,0,.15,1),background .2s cubic-bezier(.42,0,.15,1),color .2s cubic-bezier(.42,0,.15,1)}.cooked-recipe-ingredients .cooked-ingredient-checkbox,.cooked-recipe-search .cooked-browse-select.cooked-active .cooked-browse-select-block{-webkit-transition:all .1s cubic-bezier(.42,0,.15,1);-moz-transition:all .1s cubic-bezier(.42,0,.15,1);-o-transition:all .1s cubic-bezier(.42,0,.15,1);transition:all .1s cubic-bezier(.42,0,.15,1)}.cooked-related-recipes-title{margin:0 0 20px 0;font-size:1.5em;font-weight:600;color:#333}.cooked-related-recipes-grid{margin:20px 0}.cooked-related-recipes-empty,.cooked-related-recipes-error{padding:15px;margin:20px 0;background:#f9f9f9;border-left:4px solid #d63638;color:#666;font-style:italic}.cooked-related-recipes-empty{border-left-color:#0073aa;text-align:center}.cooked-related-recipes-grid .cooked-recipe-card{margin-bottom:20px}@media (max-width:768px){.cooked-related-recipes-grid.cooked-columns-3,.cooked-related-recipes-grid.cooked-columns-4{margin-left:-1.5%;width:103%}.cooked-related-recipes-grid.cooked-columns-3 .cooked-recipe,.cooked-related-recipes-grid.cooked-columns-4 .cooked-recipe{width:47%;min-width:47%}}@media (max-width:480px){.cooked-related-recipes-grid.cooked-columns-2 .cooked-recipe,.cooked-related-recipes-grid.cooked-columns-3 .cooked-recipe,.cooked-related-recipes-grid.cooked-columns-4 .cooked-recipe{width:97%;min-width:97%}} \ No newline at end of file diff --git a/assets/js/cooked-functions.js b/assets/js/cooked-functions.js index 3443766..0045676 100644 --- a/assets/js/cooked-functions.js +++ b/assets/js/cooked-functions.js @@ -129,10 +129,6 @@ var cooked_loading = false; // Create URL segments with proper encoding const urlSegments = []; - if (cooked_functions_js_vars.front_page !== cooked_functions_js_vars.browse_page) { - urlSegments.push(encodeURIComponent(cooked_functions_js_vars.browse_recipes_slug)); - } - // Add taxonomy segments with improved encoding const taxonomyFields = [ { value: formValues.category, prefix: cooked_functions_js_vars.recipe_category_slug }, @@ -158,12 +154,10 @@ var cooked_loading = false; // Add sort segment urlSegments.push(`sort/${encodeURIComponent(formValues.sort)}`); - // Build URL + // Build URL using browse_page_url as base (includes language prefix for multilingual sites) const prettyUrl = urlSegments.filter(Boolean).join('/'); - - // Use WordPress site URL as base - const siteUrl = new URL(cooked_functions_js_vars.site_url); - const finalUrl = `${siteUrl.pathname}/${prettyUrl}`.replace(/\/+/g, '/'); + const baseUrl = cooked_functions_js_vars.browse_page_url || cooked_functions_js_vars.site_url; + const finalUrl = `${baseUrl}/${prettyUrl}`.replace(/\/+/g, '/').replace(':/', '://'); // Navigate to URL window.location.href = finalUrl; diff --git a/assets/js/cooked-functions.min.js b/assets/js/cooked-functions.min.js index d3a9ea5..f61a9f6 100644 --- a/assets/js/cooked-functions.min.js +++ b/assets/js/cooked-functions.min.js @@ -1 +1 @@ -var cooked_loading=!1;(k=>{$_Cooked_Ingredient_Boxes=k(".cooked-ingredient-checkbox"),$_Cooked_Fotorama=k(".cooked-recipe-gallery"),$_Cooked_Ajax_List=k(".cooked-recipe-loader"),$_Cooked_Recipe_Search=k(".cooked-recipe-search"),$_Cooked_Timers=k(".cooked-timer > a"),$_Cooked_FSM_Button=k(".cooked-fsm-button"),$_Cooked_Fotorama.length&&$_Cooked_Fotorama.on("fotorama:ready",function(e,o){setTimeout(function(){$_Cooked_Fotorama.addClass("cooked-gallery-loaded")},100)}),k(document).ready(function(){$_Cooked_Fotorama.length&&$_Cooked_Fotorama.fotorama();{function c(e){e.on("click",function(e){var o=k(this);o.hasClass("cooked-checked")?(o.parent().removeClass("cooked-checked"),o.removeClass("cooked-checked")):(o.parent().addClass("cooked-checked"),o.addClass("cooked-checked"))})}$_Cooked_Ingredient_Boxes.length&&c($_Cooked_Ingredient_Boxes)}var n,i;function d(e){e.on("click",function(e){e.preventDefault();var o,s,e=k(this),c="cookedTimer-"+e.data("timer-id"),i=k("#cooked-timers-wrap").find(".cooked-timer-block").length;k("div#"+c).length?(k("div#"+c).css({background:"#eeeeee"}),setTimeout(function(){k("div#"+c).css({background:""})},200)):4==i?(k("#cooked-timers-wrap").css({transform:"translate3d(0,0.5em,0)"}),setTimeout(function(){k("#cooked-timers-wrap").css({transform:""})},200)):(o=7.5*(i+=1),s=e.parents(".cooked-single-direction").length?e.parents(".cooked-single-direction").data("step"):cooked_functions_i18n_js_vars.i18n_timer,s={id:c,seconds:e.data("seconds"),step:s,desc:e.data("desc")},k("#cooked-timers-wrap").length?(e=1==i?" cooked-visible":"",n",{id:"cooked-timers-wrap"}),i=t(s),e.append(i),k("body").append(e),a(k("#"+s.id).find(".cooked-timer-obj"),!1),setTimeout(function(){k("#cooked-timers-wrap").addClass("cooked-visible")},50)))})}function t(e,o="cooked-visible"){o=k("
",{id:e.id,class:"cooked-timer-block "+o}),k("",{class:"cooked-timer-step",text:e.step}).appendTo(o),k("",{class:"cooked-timer-desc",text:e.desc}).appendTo(o),k("
",{class:"cooked-timer-obj","data-seconds-left":e.seconds}).appendTo(o),k("",{class:"cooked-icon cooked-icon-times"}).appendTo(o),e=k("
",{class:"cooked-progress"});return k("").appendTo(e),e.appendTo(o),o}function a(o,e){var s=cooked_functions_js_vars.timer_sound,c=new Audio(s),i=o.parents(".cooked-timer-block").attr("id"),d=o.data("seconds-left"),t=o.parents(".cooked-timer-block");o.startTimer({classNames:{hours:"cooked-timer-hours",minutes:"cooked-timer-minutes",seconds:"cooked-timer-seconds",clearDiv:"cooked-timer-clearDiv",timeout:"cooked-timer-timeout"},onComplete:function(){c.play(),o.addClass("cooked-timer-complete")}}),o.prepend(''),e&&(o.trigger("pause"),t.addClass("cooked-paused"),t.find("i.cooked-icon-pause").hide(),t.find("i.cooked-icon-play").css({display:"inline-block"}),t.addClass("cooked-paused"),k(this).parent().find("i.cooked-icon-play").css({display:"inline-block"})),r(t,10,10),o.on("update",function(e,o){r(t,o,d)}),o.on("complete",function(e,o){c.play(),t.find("i.cooked-icon-pause").hide(),t.find("i.cooked-icon-play").hide(),t.find(".cooked-timer-seconds").html("00")}),o.on("click","i.cooked-icon-pause",function(e){e.preventDefault(),k(this).hide(),t.addClass("cooked-paused"),k(this).parent().find("i.cooked-icon-play").css({display:"inline-block"}),o.trigger("pause")}),o.on("click","i.cooked-icon-play",function(e){e.preventDefault(),k(this).hide(),t.removeClass("cooked-paused cooked-complete"),k(this).parent().find("i.cooked-icon-pause").css({display:"inline-block"}),o.trigger("resume")}),o.on("click","i.cooked-icon-reverse",function(e){e.preventDefault(),t.removeClass("cooked-paused cooked-complete"),k(this).parent().find("i.cooked-icon-play").css({display:"inline-block"}),k(this).parent().find("i.cooked-icon-pause").hide(),o.remove(),k("#"+i).append('
'),a(k("#"+i).find(".cooked-timer-obj"),!0)}),t.on("click","i.cooked-icon-times",function(e){var o;e.preventDefault(),1==k("#cooked-timers-wrap").find(".cooked-timer-block").length?k("#cooked-timers-wrap").removeClass("cooked-visible"):(o=7.5*(e=k("#cooked-timers-wrap").find(".cooked-timer-block").length-1),k("#cooked-timers-wrap").css({height:o+"em"}),t.removeClass("cooked-visible"),e==n&&k("#cooked-timers-wrap").removeClass("cooked-multiples")),setTimeout(function(){t.remove()},200)})}function r(e,o,s){o=100-o/s*100;e.find(".cooked-progress > span").css({width:o+"%"}),100<=o&&e.addClass("cooked-complete")}k(".cooked-servings").length&&k(".cooked-servings").find("select").on("change",function(e){e.preventDefault();var e=k(this).children("option:selected").val(),o=new URL(window.location.href);o.searchParams.set("servings",e),window.location.href=o.toString()}),$_Cooked_Recipe_Search.length&&(k("body").on("click",function(e){var o=!1;0{var o;e.value&&(o=encodeURIComponent(e.prefix),e=encodeURIComponent(e.value),s.push(o+"/"+e))}),e.search&&s.push("search/"+encodeURIComponent(e.search)),s.push("sort/"+encodeURIComponent(e.sort));e=s.filter(Boolean).join("/"),e=(new URL(cooked_functions_js_vars.site_url).pathname+"/"+e).replace(/\/+/g,"/");window.location.href=e}),$_Cooked_Timers.length&&(n=1,d($_Cooked_Timers)),$_Cooked_FSM_Button.length&&(i=new NoSleep,$_Cooked_FSM_Button.on("click",function(e){e.preventDefault();var e=k(this).data("recipe-id"),e=k('.cooked-fsm[data-recipe-id="'+e+'"]'),o=(k("body").addClass("cooked-noscroll cooked-fsm-active"),e.clone().appendTo("body")),e=(setTimeout(function(){o.addClass("cooked-visible")},10),setTimeout(function(){o.addClass("cooked-active")},50),o.find(".cooked-timer > a")),s=o.find(".cooked-ingredient-checkbox");d(e),c(s),i.enable(),o.on("click",".cooked-close-fsm",function(e){e.preventDefault(),o.removeClass("cooked-active"),k("body").removeClass("cooked-noscroll cooked-fsm-active"),i.disable(),setTimeout(function(){o.remove()},350)})}),k("body").on("click",".cooked-fsm-mobile-nav > a",function(e){e.preventDefault();var e=k(this),o=e.data("nav-id"),s=e.parents(".cooked-fsm");s.find(".cooked-fsm-mobile-nav > a").removeClass("cooked-active"),s.find(".cooked-fsm-content").removeClass("cooked-active"),e.addClass("cooked-active"),("ingredients"==o?s.find(".cooked-fsm-content.cooked-fsm-ingredients"):(s.find(".cooked-fsm-content.cooked-fsm-directions-wrap").addClass("cooked-active"),s.find(".cooked-fsm-content.cooked-fsm-directions").addClass("cooked-active"),s.find(".cooked-fsm-content.cooked-fsm-notes"))).addClass("cooked-active")}))})})(jQuery); \ No newline at end of file +var cooked_loading=!1;(l=>{$_Cooked_Ingredient_Boxes=l(".cooked-ingredient-checkbox"),$_Cooked_Fotorama=l(".cooked-recipe-gallery"),$_Cooked_Ajax_List=l(".cooked-recipe-loader"),$_Cooked_Recipe_Search=l(".cooked-recipe-search"),$_Cooked_Timers=l(".cooked-timer > a"),$_Cooked_FSM_Button=l(".cooked-fsm-button"),$_Cooked_Fotorama.length&&$_Cooked_Fotorama.on("fotorama:ready",function(e,o){setTimeout(function(){$_Cooked_Fotorama.addClass("cooked-gallery-loaded")},100)}),l(document).ready(function(){$_Cooked_Fotorama.length&&$_Cooked_Fotorama.fotorama();{function i(e){e.on("click",function(e){var o=l(this);o.hasClass("cooked-checked")?(o.parent().removeClass("cooked-checked"),o.removeClass("cooked-checked")):(o.parent().addClass("cooked-checked"),o.addClass("cooked-checked"))})}$_Cooked_Ingredient_Boxes.length&&i($_Cooked_Ingredient_Boxes)}var a,c;function d(e){e.on("click",function(e){e.preventDefault();var o,s,e=l(this),i="cookedTimer-"+e.data("timer-id"),c=l("#cooked-timers-wrap").find(".cooked-timer-block").length;l("div#"+i).length?(l("div#"+i).css({background:"#eeeeee"}),setTimeout(function(){l("div#"+i).css({background:""})},200)):4==c?(l("#cooked-timers-wrap").css({transform:"translate3d(0,0.5em,0)"}),setTimeout(function(){l("#cooked-timers-wrap").css({transform:""})},200)):(o=7.5*(c+=1),s=e.parents(".cooked-single-direction").length?e.parents(".cooked-single-direction").data("step"):cooked_functions_i18n_js_vars.i18n_timer,s={id:i,seconds:e.data("seconds"),step:s,desc:e.data("desc")},l("#cooked-timers-wrap").length?(e=1==c?" cooked-visible":"",a",{id:"cooked-timers-wrap"}),c=t(s),e.append(c),l("body").append(e),n(l("#"+s.id).find(".cooked-timer-obj"),!1),setTimeout(function(){l("#cooked-timers-wrap").addClass("cooked-visible")},50)))})}function t(e,o="cooked-visible"){o=l("
",{id:e.id,class:"cooked-timer-block "+o}),l("",{class:"cooked-timer-step",text:e.step}).appendTo(o),l("",{class:"cooked-timer-desc",text:e.desc}).appendTo(o),l("
",{class:"cooked-timer-obj","data-seconds-left":e.seconds}).appendTo(o),l("",{class:"cooked-icon cooked-icon-times"}).appendTo(o),e=l("
",{class:"cooked-progress"});return l("").appendTo(e),e.appendTo(o),o}function n(o,e){var s=cooked_functions_js_vars.timer_sound,i=new Audio(s),c=o.parents(".cooked-timer-block").attr("id"),d=o.data("seconds-left"),t=o.parents(".cooked-timer-block");o.startTimer({classNames:{hours:"cooked-timer-hours",minutes:"cooked-timer-minutes",seconds:"cooked-timer-seconds",clearDiv:"cooked-timer-clearDiv",timeout:"cooked-timer-timeout"},onComplete:function(){i.play(),o.addClass("cooked-timer-complete")}}),o.prepend(''),e&&(o.trigger("pause"),t.addClass("cooked-paused"),t.find("i.cooked-icon-pause").hide(),t.find("i.cooked-icon-play").css({display:"inline-block"}),t.addClass("cooked-paused"),l(this).parent().find("i.cooked-icon-play").css({display:"inline-block"})),r(t,10,10),o.on("update",function(e,o){r(t,o,d)}),o.on("complete",function(e,o){i.play(),t.find("i.cooked-icon-pause").hide(),t.find("i.cooked-icon-play").hide(),t.find(".cooked-timer-seconds").html("00")}),o.on("click","i.cooked-icon-pause",function(e){e.preventDefault(),l(this).hide(),t.addClass("cooked-paused"),l(this).parent().find("i.cooked-icon-play").css({display:"inline-block"}),o.trigger("pause")}),o.on("click","i.cooked-icon-play",function(e){e.preventDefault(),l(this).hide(),t.removeClass("cooked-paused cooked-complete"),l(this).parent().find("i.cooked-icon-pause").css({display:"inline-block"}),o.trigger("resume")}),o.on("click","i.cooked-icon-reverse",function(e){e.preventDefault(),t.removeClass("cooked-paused cooked-complete"),l(this).parent().find("i.cooked-icon-play").css({display:"inline-block"}),l(this).parent().find("i.cooked-icon-pause").hide(),o.remove(),l("#"+c).append('
'),n(l("#"+c).find(".cooked-timer-obj"),!0)}),t.on("click","i.cooked-icon-times",function(e){var o;e.preventDefault(),1==l("#cooked-timers-wrap").find(".cooked-timer-block").length?l("#cooked-timers-wrap").removeClass("cooked-visible"):(o=7.5*(e=l("#cooked-timers-wrap").find(".cooked-timer-block").length-1),l("#cooked-timers-wrap").css({height:o+"em"}),t.removeClass("cooked-visible"),e==a&&l("#cooked-timers-wrap").removeClass("cooked-multiples")),setTimeout(function(){t.remove()},200)})}function r(e,o,s){o=100-o/s*100;e.find(".cooked-progress > span").css({width:o+"%"}),100<=o&&e.addClass("cooked-complete")}l(".cooked-servings").length&&l(".cooked-servings").find("select").on("change",function(e){e.preventDefault();var e=l(this).children("option:selected").val(),o=new URL(window.location.href);o.searchParams.set("servings",e),window.location.href=o.toString()}),$_Cooked_Recipe_Search.length&&(l("body").on("click",function(e){var o=!1;0{var o;e.value&&(o=encodeURIComponent(e.prefix),e=encodeURIComponent(e.value),s.push(o+"/"+e))}),e.search&&s.push("search/"+encodeURIComponent(e.search)),s.push("sort/"+encodeURIComponent(e.sort));e=s.filter(Boolean).join("/"),e=((cooked_functions_js_vars.browse_page_url||cooked_functions_js_vars.site_url)+"/"+e).replace(/\/+/g,"/").replace(":/","://");window.location.href=e}),$_Cooked_Timers.length&&(a=1,d($_Cooked_Timers)),$_Cooked_FSM_Button.length&&(c=new NoSleep,$_Cooked_FSM_Button.on("click",function(e){e.preventDefault();var e=l(this).data("recipe-id"),e=l('.cooked-fsm[data-recipe-id="'+e+'"]'),o=(l("body").addClass("cooked-noscroll cooked-fsm-active"),e.clone().appendTo("body")),e=(setTimeout(function(){o.addClass("cooked-visible")},10),setTimeout(function(){o.addClass("cooked-active")},50),o.find(".cooked-timer > a")),s=o.find(".cooked-ingredient-checkbox");d(e),i(s),c.enable(),o.on("click",".cooked-close-fsm",function(e){e.preventDefault(),o.removeClass("cooked-active"),l("body").removeClass("cooked-noscroll cooked-fsm-active"),c.disable(),setTimeout(function(){o.remove()},350)})}),l("body").on("click",".cooked-fsm-mobile-nav > a",function(e){e.preventDefault();var e=l(this),o=e.data("nav-id"),s=e.parents(".cooked-fsm");s.find(".cooked-fsm-mobile-nav > a").removeClass("cooked-active"),s.find(".cooked-fsm-content").removeClass("cooked-active"),e.addClass("cooked-active"),("ingredients"==o?s.find(".cooked-fsm-content.cooked-fsm-ingredients"):(s.find(".cooked-fsm-content.cooked-fsm-directions-wrap").addClass("cooked-active"),s.find(".cooked-fsm-content.cooked-fsm-directions").addClass("cooked-active"),s.find(".cooked-fsm-content.cooked-fsm-notes"))).addClass("cooked-active")}))})})(jQuery); \ No newline at end of file diff --git a/composer.json b/composer.json index d2470cc..8b6bb76 100644 --- a/composer.json +++ b/composer.json @@ -6,7 +6,7 @@ "recipe" ], "homepage": "https://wordpress.org/plugins/cooked/", - "version": "1.11.2", + "version": "1.12.0", "type": "wordpress-plugin", "license": "GPL-3.0-or-later", "prefer-stable": true, diff --git a/composer.lock b/composer.lock index 6ec8aea..334a064 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": "3acf7edb747ae766b765a212b4a1476c", + "content-hash": "fa62c0daf35b8a2c705ffc4eafca6089", "packages": [ { "name": "nxp/math-executor", diff --git a/cooked.php b/cooked.php index 0238746..c38a98c 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.11.2 +Version: 1.12.0 Text Domain: cooked Domain Path: languages License: GPL2 @@ -30,7 +30,7 @@ require_once __DIR__ . '/vendor/autoload.php'; -define( 'COOKED_VERSION', '1.11.2' ); +define( 'COOKED_VERSION', '1.12.0' ); define( 'COOKED_DEV', false ); if ( ! class_exists( 'Cooked_Plugin' ) ) : @@ -208,10 +208,26 @@ final class Cooked_Plugin { */ public $yoastseo; + /** + * Cooked Multilingual Object. + * + * @var object|Cooked_Multilingual + * @since 1.12.0 + */ + public $multilingual; + + /** + * Cooked Related Recipes Object. + * + * @var object|Cooked_Related_Recipes + * @since 1.12.0 + */ + public $related_recipes; + /** * Cooked Extra Object. * - * @var object|Cooked_Extra + * @var object|Cooked_Plugin_Extra * @since 1.8.7 */ public $extra; @@ -251,10 +267,11 @@ public static function instance() { self::$instance->admin_settings = new Cooked_Settings(); self::$instance->migration = new Cooked_Migration(); + self::$instance->related_recipes = new Cooked_Related_Recipes(); self::$instance->updates = new Cooked_Updates(); self::$instance->post_types = new Cooked_Post_Types(); self::$instance->recipe_meta = new Cooked_Recipe_Meta(); - self::$instance->recipe_meta = new Cooked_Measurements(); + self::$instance->measurements = new Cooked_Measurements(); self::$instance->users = new Cooked_Users(); self::$instance->recipes = new Cooked_Recipes(); self::$instance->shortcodes = new Cooked_Shortcodes(); @@ -264,6 +281,7 @@ public static function instance() { self::$instance->gutenberg = new Cooked_Gutenberg(); self::$instance->elementor = new Cooked_Elementor(); self::$instance->extra = new Cooked_Plugin_Extra(); + self::$instance->multilingual = new Cooked_Multilingual(); self::$instance->module_setup(); @@ -449,6 +467,7 @@ private function includes() { require_once COOKED_DIR . 'includes/class.cooked-post-types.php'; require_once COOKED_DIR . 'includes/class.cooked-seo.php'; require_once COOKED_DIR . 'includes/class.cooked-recipes.php'; + require_once COOKED_DIR . 'includes/class.cooked-related-recipes.php'; require_once COOKED_DIR . 'includes/class.cooked-recipe-meta.php'; require_once COOKED_DIR . 'includes/class.cooked-shortcodes.php'; require_once COOKED_DIR . 'includes/class.cooked-measurements.php'; @@ -464,6 +483,7 @@ private function includes() { require_once COOKED_DIR . 'includes/class.cooked-gutenberg.php'; require_once COOKED_DIR . 'includes/class.cooked-elementor.php'; require_once COOKED_DIR . 'includes/class.cooked-plugin-extra.php'; + require_once COOKED_DIR . 'includes/class.cooked-multilingual.php'; } /** diff --git a/includes/class.cooked-admin-enqueues.php b/includes/class.cooked-admin-enqueues.php index dd611fe..1b13a14 100644 --- a/includes/class.cooked-admin-enqueues.php +++ b/includes/class.cooked-admin-enqueues.php @@ -148,6 +148,9 @@ public function admin_enqueues( $hook ) { /* translators: confirmation for migrating all ### recipes, where ### displays the total number for the migration. */ 'i18n_confirm_migrate_recipes' => sprintf(__('Please confirm that you are ready to migrate all %s recipes.', 'cooked'), number_format($total_old_recipes)), 'i18n_confirm_import_recipes' => __('Please confirm that you are ready to import all recipes.', 'cooked'), + 'i18n_confirm_calculate_related' => __('Pre-calculate related recipes for all published recipes? This may take a while on large sites.', 'cooked'), + /* 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), ]; diff --git a/includes/class.cooked-ajax.php b/includes/class.cooked-ajax.php index 65e2aa1..d556d46 100644 --- a/includes/class.cooked-ajax.php +++ b/includes/class.cooked-ajax.php @@ -47,6 +47,11 @@ function __construct() { // Import Recipes add_action( 'wp_ajax_cooked_import_recipes', [&$this, 'import_recipes']); + + // Related Recipes: get IDs for pre-calculation + add_action( 'wp_ajax_cooked_get_related_recipes_ids', [ &$this, 'get_related_recipes_ids' ] ); + // Related Recipes: calculate for one recipe per request + add_action( 'wp_ajax_cooked_calculate_related_recipes', [ &$this, 'calculate_related_recipes' ] ); } public function get_migrate_ids() { @@ -259,6 +264,179 @@ public function import_recipes() { wp_die(); } + /** + * Return all published recipe IDs for the Related Recipes pre-calculation tool. + * Returns count and first batch to avoid memory issues with large sites. + */ + public function get_related_recipes_ids() { + if ( ! current_user_can( 'edit_cooked_recipes' ) ) { + wp_die(); + } + + // Get total count first (lightweight query) + $count_args = [ + 'post_type' => 'cp_recipe', + 'post_status' => 'publish', + 'fields' => 'ids', + 'posts_per_page' => 1, + ]; + $count_query = new \WP_Query( $count_args ); + $total = (int) $count_query->found_posts; + wp_reset_postdata(); + + if ( $total === 0 ) { + wp_send_json( [ 'total' => 0, 'ids' => [] ] ); + return; + } + + // For very large sites, return first batch and let calculate_related_recipes fetch more server-side + // This avoids sending 100,000+ IDs in a single AJAX response + $batch_size = apply_filters( 'cooked_related_recipes_ids_batch_size', 1000 ); + + $args = [ + 'post_type' => 'cp_recipe', + 'post_status' => 'publish', + 'fields' => 'ids', + 'posts_per_page' => min( $batch_size, $total ), + 'orderby' => 'ID', + 'order' => 'ASC', + ]; + + $query = new \WP_Query( $args ); + $ids = ! empty( $query->posts ) ? $query->posts : []; + wp_reset_postdata(); + + wp_send_json( [ + 'total' => $total, + 'ids' => $ids, + 'offset' => count( $ids ), + ] ); + } + + /** + * Process one recipe for Related Recipes pre-calculation; returns remaining IDs. + * Fetches more IDs server-side when running low to avoid sending all IDs at once. + */ + public function calculate_related_recipes() { + if ( ! current_user_can( 'edit_cooked_recipes' ) ) { + wp_die(); + } + + $total_recipes = isset( $_POST['total_recipes'] ) ? (int) $_POST['total_recipes'] : 0; + $processed_count = isset( $_POST['processed_count'] ) ? (int) $_POST['processed_count'] : 0; + + if ( ! isset( $_POST['recipe_ids'] ) ) { + // No IDs provided, try to fetch first batch + $recipe_ids = $this->get_next_batch_of_recipe_ids( 0 ); + } else { + $recipe_ids = json_decode( stripslashes( (string) $_POST['recipe_ids'] ), true ); + if ( ! is_array( $recipe_ids ) ) { + $recipe_ids = []; + } + } + + // If we're running low on IDs and there are more to fetch, get next batch + if ( count( $recipe_ids ) < 10 && $processed_count < $total_recipes ) { + $next_batch = $this->get_next_batch_of_recipe_ids( $processed_count ); + $recipe_ids = array_merge( $recipe_ids, $next_batch ); + } + + if ( empty( $recipe_ids ) ) { + $ts = current_time( 'timestamp' ); + if ( $total_recipes > 0 ) { + update_option( 'cooked_related_calculation_last', [ + 'time' => $ts, + 'count' => $total_recipes, + ] ); + } + wp_send_json( [ + 'complete' => true, + 'count' => $total_recipes, + 'date_formatted' => date_i18n( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ), $ts ), + ] ); + return; + } + + $sanitized = []; + foreach ( $recipe_ids as $id ) { + $id = (int) $id; + if ( $id > 0 ) { + $sanitized[] = $id; + } + } + $recipe_ids = $sanitized; + + $current = array_shift( $recipe_ids ); + if ( $current ) { + Cooked_Related_Recipes::prime_cache_for_recipe( $current ); + $processed_count++; + } + + if ( ! empty( $recipe_ids ) ) { + echo wp_json_encode( $recipe_ids ); + } else { + // No more IDs in current batch, check if there are more to fetch + if ( $processed_count < $total_recipes ) { + // Fetch next batch + $next_batch = $this->get_next_batch_of_recipe_ids( $processed_count ); + if ( ! empty( $next_batch ) ) { + echo wp_json_encode( $next_batch ); + } else { + // Truly done + $ts = current_time( 'timestamp' ); + update_option( 'cooked_related_calculation_last', [ + 'time' => $ts, + 'count' => $total_recipes, + ] ); + wp_send_json( [ + 'complete' => true, + 'count' => $total_recipes, + 'date_formatted' => date_i18n( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ), $ts ), + ] ); + } + } else { + // All done + $ts = current_time( 'timestamp' ); + update_option( 'cooked_related_calculation_last', [ + 'time' => $ts, + 'count' => $total_recipes, + ] ); + wp_send_json( [ + 'complete' => true, + 'count' => $total_recipes, + 'date_formatted' => date_i18n( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ), $ts ), + ] ); + } + } + wp_die(); + } + + /** + * Get next batch of recipe IDs for processing. + * + * @param int $offset Number of recipes already processed. + * @return array Array of recipe IDs. + */ + private function get_next_batch_of_recipe_ids( $offset = 0 ) { + $batch_size = apply_filters( 'cooked_related_recipes_ids_batch_size', 1000 ); + + $args = [ + 'post_type' => 'cp_recipe', + 'post_status' => 'publish', + 'fields' => 'ids', + 'posts_per_page' => $batch_size, + 'offset' => $offset, + 'orderby' => 'ID', + 'order' => 'ASC', + ]; + + $query = new \WP_Query( $args ); + $ids = ! empty( $query->posts ) ? $query->posts : []; + wp_reset_postdata(); + + return $ids; + } + public function get_recipe_ids() { if (!wp_verify_nonce($_POST['nonce'], 'cooked_save_default_bulk') || !current_user_can('edit_cooked_default_template')) { wp_die(); @@ -351,7 +529,7 @@ public function load_default() { } if (isset($_cooked_settings['default_content'])) { - $default_content = stripslashes($_cooked_settings['default_content']); + $default_content = wp_unslash($_cooked_settings['default_content']); } else { $default_content = Cooked_Recipes::default_content(); } diff --git a/includes/class.cooked-delicious-recipes.php b/includes/class.cooked-delicious-recipes.php index b3a722d..d6abd51 100644 --- a/includes/class.cooked-delicious-recipes.php +++ b/includes/class.cooked-delicious-recipes.php @@ -104,7 +104,7 @@ public static function import_recipe($id) { } if (isset($_cooked_settings['default_content'])) { - $default_content = stripslashes($_cooked_settings['default_content']); + $default_content = wp_unslash($_cooked_settings['default_content']); } else { $default_content = Cooked_Recipes::default_content(); } diff --git a/includes/class.cooked-enqueues.php b/includes/class.cooked-enqueues.php index 6967a64..8cb4671 100644 --- a/includes/class.cooked-enqueues.php +++ b/includes/class.cooked-enqueues.php @@ -29,16 +29,20 @@ function __construct() { public function enqueues($hook) { global $_cooked_settings; - $browse_page_id = !empty($_cooked_settings['browse_page']) ? $_cooked_settings['browse_page'] : false; + $browse_page_id = Cooked_Multilingual::get_browse_page_id(); $browse_page = get_post($browse_page_id); $browse_recipes_slug = !empty($browse_page) ? $browse_page->post_name : ''; + // Get the full browse page URL (includes language prefix when using Polylang/WPML) + $browse_page_url = $browse_page_id ? get_permalink($browse_page_id) : get_site_url(); + $cooked_js_vars = [ 'ajax_url' => admin_url('admin-ajax.php'), 'timer_sound' => apply_filters('cooked_timer_sound_mp3', COOKED_URL . 'assets/audio/ding.mp3'), 'permalink_structure' => get_option('permalink_structure'), 'site_url' => get_site_url(), 'browse_page' => $browse_page_id, + 'browse_page_url' => untrailingslashit($browse_page_url), 'front_page' => get_option( 'page_on_front' ), 'browse_recipes_slug' => $browse_recipes_slug, 'recipe_category_slug' => !isset($_cooked_settings['recipe_category_permalink']) ? 'recipe-category' : $_cooked_settings['recipe_category_permalink'], diff --git a/includes/class.cooked-functions.php b/includes/class.cooked-functions.php index e6d86a3..b47b0ab 100644 --- a/includes/class.cooked-functions.php +++ b/includes/class.cooked-functions.php @@ -20,7 +20,7 @@ class Cooked_Functions { private static $guest_message_id = false; public static function sanitize_text_field( $text ) { - $text = htmlentities( stripslashes( $text ) ); + $text = htmlentities( wp_unslash( $text ) ); $text = sanitize_text_field( $text ); return $text; } diff --git a/includes/class.cooked-measurements.php b/includes/class.cooked-measurements.php index b599de3..24f8e53 100644 --- a/includes/class.cooked-measurements.php +++ b/includes/class.cooked-measurements.php @@ -13,9 +13,9 @@ use NXP\MathExecutor; /** - * Cooked_Recipe_Meta Class + * Cooked_Measurements Class * - * This class handles the Cooked Recipe Meta Box creation. + * This class handles the Cooked Measurements. * * @since 1.0.0 */ diff --git a/includes/class.cooked-multilingual.php b/includes/class.cooked-multilingual.php new file mode 100644 index 0000000..d8ed9ba --- /dev/null +++ b/includes/class.cooked-multilingual.php @@ -0,0 +1,273 @@ + ['id' => int, 'slug' => string]] + */ + public static function get_all_browse_pages() { + global $_cooked_settings; + + $pages = []; + $default_page_id = ! empty( $_cooked_settings['browse_page'] ) ? $_cooked_settings['browse_page'] : false; + + if ( ! $default_page_id ) { + return $pages; + } + + // Default page (always include) + $pages['default'] = [ + 'id' => $default_page_id, + 'slug' => self::get_page_slug( $default_page_id ) + ]; + + // Polylang translations (check first, as it's more common) + if ( self::is_polylang_active() && function_exists( 'pll_get_post_translations' ) ) { + $translations = pll_get_post_translations( $default_page_id ); + foreach ( $translations as $lang => $translated_id ) { + if ( $translated_id && $translated_id != $default_page_id ) { + $pages[ $lang ] = [ + 'id' => $translated_id, + 'slug' => self::get_page_slug( $translated_id ) + ]; + } + } + } + // WPML translations (only if Polylang is not active) + elseif ( self::is_wpml_active() ) { + $languages = apply_filters( 'wpml_active_languages', null ); + if ( is_array( $languages ) ) { + foreach ( $languages as $lang_code => $lang_data ) { + $translated_id = icl_object_id( $default_page_id, 'page', false, $lang_code ); + if ( $translated_id && $translated_id != $default_page_id ) { + $pages[ $lang_code ] = [ + 'id' => $translated_id, + 'slug' => self::get_page_slug( $translated_id ) + ]; + } + } + } + } + + return $pages; + } + + /** + * Get page slug from ID + * + * @param int $page_id The page ID + * @return string|null The page slug (empty string for homepage), or null if page doesn't exist + */ + private static function get_page_slug( $page_id ) { + if ( ! $page_id ) { + return null; + } + + $permalink = get_permalink( $page_id ); + if ( ! $permalink ) { + return null; + } + + // Returns empty string for homepage, which is valid + return ltrim( untrailingslashit( str_replace( home_url(), '', $permalink ) ), '/' ); + } + + /** + * Check if browse page has translations + * + * @return array Array of missing language codes + */ + public static function get_missing_translations() { + global $_cooked_settings; + + $missing = []; + $default_page_id = ! empty( $_cooked_settings['browse_page'] ) ? $_cooked_settings['browse_page'] : false; + + if ( ! $default_page_id ) { + return $missing; + } + + // Check Polylang translations (check first, as it's more common) + if ( self::is_polylang_active() && function_exists( 'pll_languages_list' ) && function_exists( 'pll_get_post_translations' ) ) { + $languages = pll_languages_list( [ 'fields' => 'slug' ] ); + $translations = pll_get_post_translations( $default_page_id ); + + foreach ( $languages as $lang ) { + if ( ! isset( $translations[ $lang ] ) || ! $translations[ $lang ] ) { + $missing[] = $lang; + } + } + } + // Check WPML translations (only if Polylang is not active) + elseif ( self::is_wpml_active() ) { + $languages = apply_filters( 'wpml_active_languages', null ); + if ( is_array( $languages ) ) { + foreach ( $languages as $lang_code => $lang_data ) { + $translated_id = icl_object_id( $default_page_id, 'page', false, $lang_code ); + if ( ! $translated_id ) { + $missing[] = $lang_code; + } + } + } + } + + return $missing; + } + + /** + * Display admin notice about missing browse page translations + */ + public function translation_notice() { + // Only show on Cooked settings page + if ( ! isset( $_GET['page'] ) || $_GET['page'] !== 'cooked_settings' ) { + return; + } + + // Only show if multilingual plugin is active + if ( ! self::is_multilingual_active() ) { + return; + } + + global $_cooked_settings; + + // Only show if browse page is set + if ( empty( $_cooked_settings['browse_page'] ) ) { + return; + } + + $missing = self::get_missing_translations(); + + if ( ! empty( $missing ) ) { + $plugin_name = self::is_polylang_active() ? 'Polylang' : 'WPML'; + $class = 'notice notice-warning'; + $message = sprintf( + '%s %s %s', + __( 'Multilingual Setup:', 'cooked' ), + __( 'Your Browse/Search Recipes page is missing translations for:', 'cooked' ), + strtoupper( implode( ', ', $missing ) ) + ); + $message .= '
' . sprintf( + /* translators: %s is the multilingual plugin name (Polylang or WPML) */ + __( 'Create translations of your browse page in %s for full multilingual support.', 'cooked' ), + $plugin_name + ) . ''; + + printf( '

%2$s

', esc_attr( $class ), $message ); + } + } +} diff --git a/includes/class.cooked-post-types.php b/includes/class.cooked-post-types.php index fd2dc6a..8f73165 100644 --- a/includes/class.cooked-post-types.php +++ b/includes/class.cooked-post-types.php @@ -46,7 +46,7 @@ function __construct() { } function disable_taxonomy_page_title( $nav_menu, $args ) { - remove_filter( 'the_title', [&$this, 'taxonomy_page_title'], 10, 2 ); + remove_filter( 'the_title', [&$this, 'taxonomy_page_title'], 10 ); return $nav_menu; } @@ -59,7 +59,7 @@ function taxonomy_page_title( $title = '', $id = 0 ) { if ( is_admin() ) return $title; global $wp_query, $post, $_cooked_settings; - $browse_page_id = !empty($_cooked_settings['browse_page']) ? $_cooked_settings['browse_page'] : false; + $browse_page_id = Cooked_Multilingual::get_browse_page_id(); if ( is_page( $browse_page_id ) && $id == $browse_page_id && isset($wp_query->query['cp_recipe_category']) && taxonomy_exists('cp_recipe_category') && term_exists( $wp_query->query['cp_recipe_category'], 'cp_recipe_category' ) ): $cooked_term = get_term_by( 'slug', $wp_query->query['cp_recipe_category'], 'cp_recipe_category' ); @@ -71,7 +71,7 @@ function taxonomy_page_title( $title = '', $id = 0 ) { function taxonomy_meta_title( $title = '' ) { global $wp_query, $post, $_cooked_settings; - $browse_page_id = !empty($_cooked_settings['browse_page']) ? $_cooked_settings['browse_page'] : false; + $browse_page_id = Cooked_Multilingual::get_browse_page_id(); if ( is_page( $browse_page_id ) && $post->ID == $browse_page_id && isset($wp_query->query['cp_recipe_category']) && taxonomy_exists('cp_recipe_category') && term_exists( $wp_query->query['cp_recipe_category'], 'cp_recipe_category' ) ): $cooked_term = get_term_by( 'slug', $wp_query->query['cp_recipe_category'], 'cp_recipe_category' ); @@ -103,7 +103,7 @@ function custom_columns_data( $column, $post_id ) { public static function cooked_nav_classes( $classes, $item ) { global $_cooked_settings; $blog_page_id = get_option( 'page_for_posts', false ); - $browse_page_id = $_cooked_settings['browse_page']; + $browse_page_id = Cooked_Multilingual::get_browse_page_id(); if ( ( is_post_type_archive( 'cp_recipe' ) || is_singular( 'cp_recipe' ) ) && $item->object_id == $blog_page_id ){ @@ -205,9 +205,8 @@ public static function init() { $_cooked_settings = Cooked_Settings::get(); $_cooked_taxonomies = Cooked_Taxonomies::get(); - $parent_page_slug = ( isset($_cooked_settings['browse_page']) && $_cooked_settings['browse_page'] ? ltrim( untrailingslashit( str_replace( home_url(), '', get_permalink( $_cooked_settings['browse_page'] ) ) ), '/' ) : false ); - - if (!empty($_GET['settings-updated'])) { + // Security check: Only allow settings update from admin area with proper permissions + if (!empty($_GET['settings-updated']) && is_admin() && current_user_can('manage_options') && isset($_GET['page']) && $_GET['page'] === 'cooked_settings') { // Recipe Permalink $permalink_parts = explode( '/', $_cooked_settings['recipe_permalink'] ); if ( isset( $permalink_parts[1] ) ): @@ -260,131 +259,161 @@ public static function init() { flush_rewrite_rules(); } - // Get base path - either parent page slug or empty - $base_path = $parent_page_slug ? $parent_page_slug . '/' : ''; - global $cooked_taxonomies_for_menu; + // Register taxonomies first (only once) if ( !empty($_cooked_taxonomies) ) { foreach ( $_cooked_taxonomies as $slug => $args ) { register_taxonomy( $slug, ['cp_recipe'], $args ); add_rewrite_tag("%{$slug}%", '([^/]+)'); + $cooked_taxonomies_for_menu[] = [ + 'menu' => 'cooked_recipes_menu', + 'name' => $args['labels']['menu_name'], + 'capability' => 'manage_categories', + 'url' => 'edit-tags.php?taxonomy=' . $slug . '&post_type=cp_recipe' + ]; + } + } + + // Get all browse page translations (including default) + $browse_pages = Cooked_Multilingual::get_all_browse_pages(); + + // Create rewrite rules for each browse page translation + foreach ( $browse_pages as $lang => $page_data ) { + self::add_browse_page_rewrite_rules( $page_data['id'], $page_data['slug'], $_cooked_taxonomies ); + } + + add_rewrite_tag('%cooked_search_s%', '([^&]+)'); + add_rewrite_tag('%cooked_browse_sort_by%', '([^&]+)'); + + $post_types = self::get(); + if ( !empty($post_types) ) { + foreach ( $post_types as $slug => $args ) { + register_post_type( $slug, $args ); + } + } + } + + /** + * Add rewrite rules for a specific browse page + * + * @param int $page_id The browse page ID + * @param string|null $page_slug The browse page slug/path (empty string for homepage, null if invalid) + * @param array $taxonomies The registered taxonomies + */ + private static function add_browse_page_rewrite_rules( $page_id, $page_slug, $taxonomies ) { + // Page ID is required, but slug can be empty string (for homepage) + if ( ! $page_id || $page_slug === null ) { + return; + } + + // Get base path - either parent page slug or empty (for homepage) + $base_path = $page_slug !== '' ? $page_slug . '/' : ''; + + // Add taxonomy rewrite rules + if ( !empty($taxonomies) ) { + foreach ( $taxonomies as $slug => $args ) { // Taxonomy search sort pagination add_rewrite_rule( '^' . $base_path . $args['rewrite']['slug'] . '/([^/]*)/search/([^/]*)/sort/([^/]*)/page/([^/]*)/?', - 'index.php?page_id=' . $_cooked_settings['browse_page'] . '&' . $slug . '=$matches[1]&cooked_search_s=$matches[2]&cooked_browse_sort_by=$matches[3]&paged=$matches[4]', + 'index.php?page_id=' . $page_id . '&' . $slug . '=$matches[1]&cooked_search_s=$matches[2]&cooked_browse_sort_by=$matches[3]&paged=$matches[4]', 'top' ); // Taxonomy search sort add_rewrite_rule( '^' . $base_path . $args['rewrite']['slug'] . '/([^/]*)/search/([^/]*)/sort/([^/]*)/?', - 'index.php?page_id=' . $_cooked_settings['browse_page'] . '&' . $slug . '=$matches[1]&cooked_search_s=$matches[2]&cooked_browse_sort_by=$matches[3]', + 'index.php?page_id=' . $page_id . '&' . $slug . '=$matches[1]&cooked_search_s=$matches[2]&cooked_browse_sort_by=$matches[3]', 'top' ); // Taxonomy sort pagination add_rewrite_rule( '^' . $base_path . $args['rewrite']['slug'] . '/([^/]*)/sort/([^/]*)/page/([^/]*)/?', - 'index.php?page_id=' . $_cooked_settings['browse_page'] . '&' . $slug . '=$matches[1]&cooked_browse_sort_by=$matches[2]&paged=$matches[3]', + 'index.php?page_id=' . $page_id . '&' . $slug . '=$matches[1]&cooked_browse_sort_by=$matches[2]&paged=$matches[3]', 'top' ); // Taxonomy sort add_rewrite_rule( '^' . $base_path . $args['rewrite']['slug'] . '/([^/]*)/sort/([^/]*)/?', - 'index.php?page_id=' . $_cooked_settings['browse_page'] . '&' . $slug . '=$matches[1]&cooked_browse_sort_by=$matches[2]', + 'index.php?page_id=' . $page_id . '&' . $slug . '=$matches[1]&cooked_browse_sort_by=$matches[2]', 'top' ); // Taxonomy search add_rewrite_rule( '^' . $base_path . $args['rewrite']['slug'] . '/([^/]*)/search/([^/]*)/?', - 'index.php?page_id=' . $_cooked_settings['browse_page'] . '&' . $slug . '=$matches[1]&cooked_search_s=$matches[2]', + 'index.php?page_id=' . $page_id . '&' . $slug . '=$matches[1]&cooked_search_s=$matches[2]', 'top' ); // Taxonomy pagination add_rewrite_rule( '^' . $base_path . $args['rewrite']['slug'] . '/([^/]*)/page/([^/]*)/?', - 'index.php?page_id=' . $_cooked_settings['browse_page'] . '&paged=$matches[2]&' . $slug . '=$matches[1]', + 'index.php?page_id=' . $page_id . '&paged=$matches[2]&' . $slug . '=$matches[1]', 'top' ); // Taxonomy add_rewrite_rule( '^' . $base_path . $args['rewrite']['slug'] . '/([^/]*)/?', - 'index.php?page_id=' . $_cooked_settings['browse_page'] . '&' . $slug . '=$matches[1]', + 'index.php?page_id=' . $page_id . '&' . $slug . '=$matches[1]', 'top' ); - - $cooked_taxonomies_for_menu[] = [ - 'menu' => 'cooked_recipes_menu', - 'name' => $args['labels']['menu_name'], - 'capability' => 'manage_categories', - 'url' => 'edit-tags.php?taxonomy=' . $slug . '&post_type=cp_recipe' - ]; } } // Search sort pagination add_rewrite_rule( '^' . $base_path . 'search/([^/]*)/sort/([^/]*)/page/([^/]*)/?', - 'index.php?page_id=' . $_cooked_settings['browse_page'] . '&cooked_search_s=$matches[1]&cooked_browse_sort_by=$matches[2]&paged=$matches[3]', + 'index.php?page_id=' . $page_id . '&cooked_search_s=$matches[1]&cooked_browse_sort_by=$matches[2]&paged=$matches[3]', 'top' ); // Search sort add_rewrite_rule( '^' . $base_path . 'search/([^/]*)/sort/([^/]*)/?', - 'index.php?page_id=' . $_cooked_settings['browse_page'] . '&cooked_search_s=$matches[1]&cooked_browse_sort_by=$matches[2]', + 'index.php?page_id=' . $page_id . '&cooked_search_s=$matches[1]&cooked_browse_sort_by=$matches[2]', 'top' ); // Sort Pagination add_rewrite_rule( '^' . $base_path . 'sort/([^/]*)/page/([^/]*)/?', - 'index.php?page_id=' . $_cooked_settings['browse_page'] . '&cooked_browse_sort_by=$matches[1]&paged=$matches[2]', + 'index.php?page_id=' . $page_id . '&cooked_browse_sort_by=$matches[1]&paged=$matches[2]', 'top' ); // Sort add_rewrite_rule( '^' . $base_path . 'sort/([^/]*)/?', - 'index.php?page_id=' . $_cooked_settings['browse_page'] . '&cooked_browse_sort_by=$matches[1]', + 'index.php?page_id=' . $page_id . '&cooked_browse_sort_by=$matches[1]', 'top' ); // Search add_rewrite_rule( '^' . $base_path . 'search/([^/]*)/?', - 'index.php?page_id=' . $_cooked_settings['browse_page'] . '&cooked_search_s=$matches[1]', + 'index.php?page_id=' . $page_id . '&cooked_search_s=$matches[1]', 'top' ); // Pagination add_rewrite_rule( '^' . $base_path . 'page/([^/]*)/?', - 'index.php?page_id=' . $_cooked_settings['browse_page'] . '&paged=$matches[1]', - 'top' - ); - - // Plain - add_rewrite_rule( - '^' . $parent_page_slug . '/?$', - 'index.php?page_id=' . $_cooked_settings['browse_page'], + 'index.php?page_id=' . $page_id . '&paged=$matches[1]', 'top' ); - add_rewrite_tag('%cooked_search_s%', '([^&]+)'); - add_rewrite_tag('%cooked_browse_sort_by%', '([^&]+)'); - - $post_types = self::get(); - if ( !empty($post_types) ) { - foreach ( $post_types as $slug => $args ) { - register_post_type( $slug, $args ); - } + // Plain - only add for non-homepage pages (WordPress handles homepage already) + if ( $page_slug !== '' ) { + add_rewrite_rule( + '^' . $page_slug . '/?$', + 'index.php?page_id=' . $page_id, + 'top' + ); } } @@ -471,9 +500,22 @@ public function change_new_recipe_title($title) { public function add_display_post_states( $post_states, $post ) { global $_cooked_settings; - $browse_page_id = !empty($_cooked_settings['browse_page']) ? $_cooked_settings['browse_page'] : false; + // Check both the main browse page and any translations + $main_browse_page_id = !empty($_cooked_settings['browse_page']) ? $_cooked_settings['browse_page'] : false; + $browse_pages = Cooked_Multilingual::get_all_browse_pages(); + + // Check if this post is the main browse page or any translation + $is_browse_page = ( $main_browse_page_id == $post->ID ); + if ( ! $is_browse_page && ! empty( $browse_pages ) ) { + foreach ( $browse_pages as $lang => $page_data ) { + if ( $page_data['id'] == $post->ID ) { + $is_browse_page = true; + break; + } + } + } - if ( $browse_page_id == $post->ID ) { + if ( $is_browse_page ) { $post_states['cooked_page_for_browse_recipes'] = __( 'Cooked Browse Recipes Page', 'cooked' ); } diff --git a/includes/class.cooked-rankmathseo.php b/includes/class.cooked-rankmathseo.php index fe5df5d..e512e21 100644 --- a/includes/class.cooked-rankmathseo.php +++ b/includes/class.cooked-rankmathseo.php @@ -69,7 +69,7 @@ public function modify_browse_page_canonical_url($canonical_url, $post = null) { return $canonical_url; } - $browse_page_id = !empty($_cooked_settings['browse_page']) ? $_cooked_settings['browse_page'] : false; + $browse_page_id = Cooked_Multilingual::get_browse_page_id(); // Only modify for browse page with category. if (is_page($browse_page_id) && diff --git a/includes/class.cooked-recipe-maker.php b/includes/class.cooked-recipe-maker.php index 226b318..aeca158 100644 --- a/includes/class.cooked-recipe-maker.php +++ b/includes/class.cooked-recipe-maker.php @@ -105,7 +105,7 @@ public static function import_recipe($id) { } if (isset($_cooked_settings['default_content'])) { - $default_content = stripslashes($_cooked_settings['default_content']); + $default_content = wp_unslash($_cooked_settings['default_content']); } else { $default_content = Cooked_Recipes::default_content(); } diff --git a/includes/class.cooked-recipe-meta.php b/includes/class.cooked-recipe-meta.php index 418f056..0cfc828 100644 --- a/includes/class.cooked-recipe-meta.php +++ b/includes/class.cooked-recipe-meta.php @@ -39,13 +39,20 @@ public static function meta_cleanup( $recipe_settings ) { if (!is_array($val)) { if ( $key === "content" || $key === "excerpt" || $key === "notes" ) { if ($wp_editor_roles_allowed) { - $_recipe_settings[$key] = wp_kses_post( $val ); + // Decode HTML entities first so wp_kses_post can see actual HTML tags + $decoded_val = wp_specialchars_decode( $val, ENT_QUOTES ); + $_recipe_settings[$key] = wp_kses_post( $decoded_val ); } else { - $_recipe_settings[$key] = Cooked_Functions::sanitize_text_field( $val ); + // Strip all HTML tags - don't encode entities since format_content() will decode them + // Decode entities first in case they're already encoded + $decoded_val = wp_specialchars_decode( $val, ENT_QUOTES ); + $_recipe_settings[$key] = wp_strip_all_tags( $decoded_val ); } } else { if ($key === "post_title") { - $_recipe_settings[$key] = wp_kses_post( $val ); + // Decode HTML entities first so wp_kses_post can see actual HTML tags + $decoded_val = wp_specialchars_decode( $val, ENT_QUOTES ); + $_recipe_settings[$key] = wp_kses_post( $decoded_val ); } else { $_recipe_settings[$key] = Cooked_Functions::sanitize_text_field( $val ); } @@ -57,11 +64,23 @@ public static function meta_cleanup( $recipe_settings ) { } else { foreach ( $subval as $sub_subkey => $sub_subval ) { if ( !is_array($sub_subval) ) { - if ( $sub_subkey == 'content' || $key == 'ingredients' && $sub_subkey == 'name' || $key == 'ingredients' && ($sub_subkey == 'section_heading_name' || $sub_subkey == 'section_heading_element') || $key == 'directions' && ($sub_subkey == 'section_heading_name' || $sub_subkey == 'section_heading_element') ) { + if ( + // For content keys: allow 'content' + ($sub_subkey === 'content') || + // For ingredients: allow 'name' and section heading fields + ($key === 'ingredients' && ($sub_subkey === 'name' || $sub_subkey === 'section_heading_name' || $sub_subkey === 'section_heading_element')) || + // For directions: allow 'content' and section heading fields + ($key === 'directions' && ($sub_subkey === 'content' || $sub_subkey === 'section_heading_name' || $sub_subkey === 'section_heading_element')) + ) { if ($wp_editor_roles_allowed) { - $_recipe_settings[$key][$subkey][$sub_subkey] = wp_kses_post( $sub_subval ); + // Decode HTML entities first so wp_kses_post can see actual HTML tags + $decoded_sub_subval = wp_specialchars_decode( $sub_subval, ENT_QUOTES ); + $_recipe_settings[$key][$subkey][$sub_subkey] = wp_kses_post( $decoded_sub_subval ); } else { - $_recipe_settings[$key][$subkey][$sub_subkey] = Cooked_Functions::sanitize_text_field( $sub_subval ); + // Strip all HTML tags - don't encode entities since format_content() will decode them + // Decode entities first in case they're already encoded + $decoded_sub_subval = wp_specialchars_decode( $sub_subval, ENT_QUOTES ); + $_recipe_settings[$key][$subkey][$sub_subkey] = wp_strip_all_tags( $decoded_sub_subval ); } } else { $_recipe_settings[$key][$subkey][$sub_subkey] = Cooked_Functions::sanitize_text_field( $sub_subval ); @@ -129,7 +148,7 @@ public function save_recipe_meta_box( $post_id ) { global $recipe_settings; /* OK, it's safe for us to validate/sanitize the data now. */ - $recipe_settings = isset($_POST['_recipe_settings']) ? self::meta_cleanup( $_POST['_recipe_settings'] ) : []; + $recipe_settings = isset($_POST['_recipe_settings']) ? self::meta_cleanup( wp_unslash( $_POST['_recipe_settings'] ) ) : []; if ( isset( $recipe_settings['content'] ) ) { $recipe_settings['content'] = str_replace( ["\r\n", "\r"], "\n", $recipe_settings['content'] ); @@ -352,7 +371,7 @@ function cooked_render_recipe_fields( $post_id ) {
- + false, @@ -369,7 +388,7 @@ function cooked_render_recipe_fields( $post_id ) {

- + true, @@ -429,7 +448,7 @@ function cooked_render_recipe_fields( $post_id ) {

- + false, @@ -441,7 +460,7 @@ function cooked_render_recipe_fields( $post_id ) { ]); ?> - +
@@ -466,8 +485,9 @@ function cooked_render_recipe_fields( $post_id ) { + -
+
@@ -496,7 +516,26 @@ function cooked_render_recipe_fields( $post_id ) { - + + + +
+ +
+ +
+
+ +
+
+ +
+
@@ -569,7 +608,26 @@ function cooked_render_recipe_fields( $post_id ) { - + + + +
+ +
+ +
+
+ +
+
+ +
+
@@ -616,7 +674,26 @@ function cooked_render_recipe_fields( $post_id ) { - + + + +
+ +
+ +
+
+ +
+
+ +
+
@@ -644,9 +721,9 @@ function cooked_render_recipe_fields( $post_id ) {
- + - +
@@ -1369,6 +1446,141 @@ function cooked_render_recipe_fields( $post_id ) {
+
+ + +
+ +
+ +

+

+
+ +
+

+ +
+ +
+

+

+ +

+
+ +
+ +
+ + +
+ +
+ +

+

+
+ +
+ +
+
+

"id"

+

+
+ +
+
+
+

"title"

+

+
+ +
+
+
+ +
+
+

"limit"

+

+
+ +
+
+
+

"columns"

+

+
+ +
+
+
+ +
+
+

"hide_image"

+

+
+ +
+
+
+

"hide_excerpt"

+

+
+ +
+
+
+ +
+
+

"hide_author"

+

+
+ +
+
+
+

"match_*"

+

+
+ +
+
+
+ +

+

+ +

+

+ +
+ +
+

+

+ id ()
+ title ()
+ limit ()
+ columns ()
+ hide_image ()
+ hide_excerpt ()
+ hide_author ()
+ match_* ()
+ *_weight () +

+

+

+ [cooked-related-recipes limit="4" columns="2" title="Related Recipes"] +

+
+ +
+
@@ -1382,4 +1594,4 @@ function cooked_render_recipe_fields( $post_id ) { '; - echo ''; + echo ''; if ( in_array('author', $_cooked_settings['recipe_info_display_options']) && !$hide_author ): echo '
'; @@ -869,8 +869,41 @@ public static function single_ingredient( $ing, $checkboxes = true, $plain_text $name = ( isset($ing['name']) && $ing['name'] ? apply_filters( 'cooked_ingredient_name', wp_kses_post( $ing['name'] ), $ing ) : false ); + // Substitution Logic + $sub_name = ( isset($ing['sub_name']) && $ing['sub_name'] ? wp_kses_post( $ing['sub_name'] ) : false ); + $sub_amount = false; + $sub_measurement = false; + $sub_float_amount = 0; + + if ( $sub_name ) { + if ($multiplier === 1) { + $sub_amount = ( isset($ing['sub_amount']) && $ing['sub_amount'] ? esc_html( $ing['sub_amount'] ) : false ); + $sub_amount = $Cooked_Measurements->cleanup_amount($sub_amount); + $sub_format = ( strpos($sub_amount, '/') === false ? ( strpos($sub_amount, '.') !== false || strpos($sub_amount, ',') !== false ? 'decimal' : 'fraction' ) : 'fraction' ); + $sub_float_amount = $Cooked_Measurements->calculate( $sub_amount, 'decimal' ); + $sub_amount = $Cooked_Measurements->format_amount( $sub_float_amount, $sub_format ); + } else { + $sub_amount = ( isset($ing['sub_amount']) && $ing['sub_amount'] ? esc_html( $ing['sub_amount'] ) : false ); + $sub_amount = $Cooked_Measurements->cleanup_amount($sub_amount); + $sub_format = ( strpos($sub_amount, '/') === false ? ( strpos($sub_amount, '.') !== false || strpos($sub_amount, ',') !== false ? 'decimal' : 'fraction' ) : 'fraction' ); + $sub_float_amount = $Cooked_Measurements->calculate( $sub_amount, 'decimal' ); + + if ($sub_float_amount) { + $sub_float_amount = $sub_float_amount * $multiplier; + $sub_amount = $Cooked_Measurements->format_amount( $sub_float_amount, $sub_format ); + } + } + + $sub_measurement_key = ( isset($ing['sub_measurement']) && $ing['sub_measurement'] ? esc_html( $ing['sub_measurement'] ) : false ); + $sub_measurement = ( $sub_measurement_key && $sub_float_amount && isset($measurements[$sub_measurement_key]) ? $Cooked_Measurements->singular_plural( $measurements[ $sub_measurement_key ]['singular_abbr'], $measurements[ $sub_measurement_key ]['plural_abbr'], $sub_float_amount ) : false ); + } + if ( $plain_text ) { - return ( $amount ? $amount . ' ' : '' ) . ( $measurement ? $measurement . ' ' : '' ) . ( $name ? $name : '' ); + $output = ( $amount ? $amount . ' ' : '' ) . ( $measurement ? $measurement . ' ' : '' ) . ( $name ? $name : '' ); + if ( $sub_name ) { + $output .= ' (' . __('or', 'cooked') . ' ' . ( $sub_amount ? $sub_amount . ' ' : '' ) . ( $sub_measurement ? $sub_measurement . ' ' : '' ) . $sub_name . ')'; + } + return $output; } else { echo '
'; echo ( $checkboxes ? ' ' : '' ); @@ -879,6 +912,14 @@ public static function single_ingredient( $ing, $checkboxes = true, $plain_text do_action( 'cooked_ingredient_after_amount', $ing ); echo ( $name ? '' . wp_kses_post( $name ) . '' : '' ); do_action( 'cooked_ingredient_after_name', $ing ); + + if ( $sub_name ) { + echo ''; + echo ' ' . __('or', 'cooked') . ' '; + echo ( $sub_amount ? '' . wp_kses_post($sub_amount) . ' ' . wp_kses_post( $sub_measurement ) . ' ' : '' ); + echo '' . wp_kses_post( $sub_name ) . ''; + echo ''; + } echo '
'; } } @@ -988,7 +1029,8 @@ public static function recipe_search_box( $options = false ) { do_action( 'cooked_before_search_filter_columns' ); if ( isset($active_taxonomy) ): - $recipes_page_id = ( $_cooked_settings['browse_page'] ? $_cooked_settings['browse_page'] : get_the_ID() ); + $recipes_page_id = Cooked_Multilingual::get_browse_page_id(); + $recipes_page_id = $recipes_page_id ? $recipes_page_id : get_the_ID(); $view_all_recipes_url = get_permalink( $recipes_page_id ); else: $view_all_recipes_url = false; @@ -1048,7 +1090,8 @@ public static function recipe_search_box( $options = false ) { $taxonomy_search_fields = false; endif; - $page_id = $_cooked_settings['browse_page'] ? $_cooked_settings['browse_page'] : get_the_ID(); + $page_id = Cooked_Multilingual::get_browse_page_id(); + $page_id = $page_id ? $page_id : get_the_ID(); $form_redirect = get_permalink($page_id); $cooked_search_s = get_query_var('cooked_search_s', ''); @@ -1317,7 +1360,7 @@ public function modify_browse_page_canonical_url($canonical_url, $post = null) { return $canonical_url; } - $browse_page_id = !empty($_cooked_settings['browse_page']) ? $_cooked_settings['browse_page'] : false; + $browse_page_id = Cooked_Multilingual::get_browse_page_id(); // Only modify for browse page with category. if (is_page($browse_page_id) && @@ -1340,4 +1383,4 @@ public function modify_browse_page_canonical_url($canonical_url, $post = null) { } global $Cooked_Recipes; -$Cooked_Recipes = new Cooked_Recipes(); +$Cooked_Recipes = new Cooked_Recipes(); \ No newline at end of file diff --git a/includes/class.cooked-related-recipes.php b/includes/class.cooked-related-recipes.php new file mode 100644 index 0000000..0ea6f1e --- /dev/null +++ b/includes/class.cooked-related-recipes.php @@ -0,0 +1,472 @@ + __( 'Tools', 'cooked' ), + 'icon' => 'gear', + 'fields' => [ + 'cooked_calculate_related_button' => [ + 'title' => __( 'Calculate Related Recipes', 'cooked' ), + 'desc' => __( 'Pre-calculate related recipes for every published recipe. Uses default shortcode options. Run this after importing or adding many recipes, or when the cache was cleared. One recipe is processed per step to avoid memory issues on large sites.', 'cooked' ), + 'type' => 'calculate_related_button', + ], + ], + ]; + return $tabs; + } + + /** + * Bump cache version when a recipe is saved or deleted. + * + * @param int $post_id Post ID. + */ + public function maybe_bump_cache_version( $post_id ) { + if ( get_post_type( $post_id ) === 'cp_recipe' ) { + self::bump_related_cache_version(); + } + } + + /** + * Get default shortcode attributes. + * + * @return array + */ + public static function get_default_atts() { + $default_atts = [ + 'id' => false, + 'title' => __( 'Related Recipes', 'cooked' ), + 'limit' => 4, + 'columns' => 2, + 'hide_image' => false, + 'hide_excerpt' => false, + 'hide_author' => false, + 'match_categories' => true, + 'match_cuisines' => true, + 'match_cooking_methods' => true, + 'match_tags' => true, + 'match_diets' => true, + 'match_ingredients' => true, + 'match_author' => false, + 'match_difficulty' => false, + 'category_weight' => 10, + 'cuisine_weight' => 8, + 'ingredient_weight' => 9, + 'cooking_method_weight' => 5, + 'tag_weight' => 5, + 'diet_weight' => 4, + 'author_weight' => 3, + 'difficulty_weight' => 2, + ]; + + /** + * Filter default attributes for the related recipes shortcode. + * + * @since 1.12.0 + * + * @param array $default_atts Default shortcode attributes. + */ + return apply_filters( 'cooked_related_recipes_default_atts', $default_atts ); + } + + /** + * Extract only scoring-related attributes (excludes display-only attributes). + * + * @param array $atts All shortcode attributes. + * @return array Scoring-related attributes only. + */ + public static function get_scoring_atts( $atts ) { + return [ + 'match_categories' => isset( $atts['match_categories'] ) ? $atts['match_categories'] : true, + 'match_cuisines' => isset( $atts['match_cuisines'] ) ? $atts['match_cuisines'] : true, + 'match_cooking_methods' => isset( $atts['match_cooking_methods'] ) ? $atts['match_cooking_methods'] : true, + 'match_tags' => isset( $atts['match_tags'] ) ? $atts['match_tags'] : true, + 'match_diets' => isset( $atts['match_diets'] ) ? $atts['match_diets'] : true, + 'match_ingredients' => isset( $atts['match_ingredients'] ) ? $atts['match_ingredients'] : true, + 'match_author' => isset( $atts['match_author'] ) ? $atts['match_author'] : false, + 'match_difficulty' => isset( $atts['match_difficulty'] ) ? $atts['match_difficulty'] : false, + 'category_weight' => isset( $atts['category_weight'] ) ? $atts['category_weight'] : 10, + 'cuisine_weight' => isset( $atts['cuisine_weight'] ) ? $atts['cuisine_weight'] : 8, + 'cooking_method_weight' => isset( $atts['cooking_method_weight'] ) ? $atts['cooking_method_weight'] : 6, + 'tag_weight' => isset( $atts['tag_weight'] ) ? $atts['tag_weight'] : 5, + 'diet_weight' => isset( $atts['diet_weight'] ) ? $atts['diet_weight'] : 4, + 'ingredient_weight' => isset( $atts['ingredient_weight'] ) ? $atts['ingredient_weight'] : 7, + 'author_weight' => isset( $atts['author_weight'] ) ? $atts['author_weight'] : 3, + 'difficulty_weight' => isset( $atts['difficulty_weight'] ) ? $atts['difficulty_weight'] : 2, + ]; + } + + /** + * Build cache key for related recipes. + * Uses scoring-related attributes + limit + language (since they affect what we store in cache). + * + * @param int $recipe_id Recipe ID. + * @param array $atts Shortcode attributes. + * @return string + */ + public static function get_cache_key( $recipe_id, $atts ) { + $version = (int) get_option( 'cooked_related_version', 1 ); + $scoring_atts = self::get_scoring_atts( $atts ); + // Include limit in cache key since it affects what we store + $limit = isset( $atts['limit'] ) ? (int) $atts['limit'] : 0; + $cache_key_data = $scoring_atts; + $cache_key_data['limit'] = $limit; + + // Include current language in cache key for multilingual support + $current_language = false; + if ( class_exists( 'Cooked_Multilingual' ) && Cooked_Multilingual::is_multilingual_active() ) { + $current_language = Cooked_Multilingual::get_current_language(); + } + if ( $current_language ) { + $cache_key_data['lang'] = $current_language; + } + + return 'cooked_related_v' . $version . '_' . $recipe_id . '_' . md5( serialize( $cache_key_data ) ); + } + + /** + * Bump the related recipes cache version to invalidate all cached results. + */ + public static function bump_related_cache_version() { + update_option( 'cooked_related_version', (int) get_option( 'cooked_related_version', 1 ) + 1 ); + } + + /** + * Get related recipes: check cache first, compute and store on miss. + * Cache is based on scoring attributes only, so it works across different display settings. + * + * @param int $recipe_id Recipe ID. + * @param array $atts Shortcode attributes. + * @return array Array of [ 'id' => int, 'score' => int ]. + */ + public static function get_related_recipes( $recipe_id, $atts ) { + $key = self::get_cache_key( $recipe_id, $atts ); + $cached = get_transient( $key ); + if ( $cached !== false && is_array( $cached ) ) { + // Cache already has the limit applied, just return it + return $cached; + } + + $source_recipe = Cooked_Recipes::get( $recipe_id, true ); + if ( ! $source_recipe || empty( $source_recipe ) ) { + return []; + } + + $scores = self::find_related_recipes( $source_recipe, $atts ); + + // Apply limit when storing in cache - store only what we'll actually use + $limit = isset( $atts['limit'] ) ? (int) $atts['limit'] : 0; + if ( $limit > 0 && count( $scores ) > $limit ) { + $scores = array_slice( $scores, 0, $limit ); + } + + $ttl = (int) apply_filters( 'cooked_related_recipes_cache_ttl', 7 * DAY_IN_SECONDS ); + set_transient( $key, $scores, $ttl ); + + return $scores; + } + + /** + * Pre-fill cache for one recipe using default atts. Used by admin Calculate tool. + * + * @param int $recipe_id Recipe ID. + */ + public static function prime_cache_for_recipe( $recipe_id ) { + $source_recipe = Cooked_Recipes::get( $recipe_id, true ); + if ( ! $source_recipe || empty( $source_recipe ) ) { + return; + } + + $atts = self::get_default_atts(); + $scores = self::find_related_recipes( $source_recipe, $atts ); + + // Apply default limit when storing in cache - store only what we'll actually use + $limit = isset( $atts['limit'] ) ? (int) $atts['limit'] : 0; + if ( $limit > 0 && count( $scores ) > $limit ) { + $scores = array_slice( $scores, 0, $limit ); + } + + $key = self::get_cache_key( $recipe_id, $atts ); + $ttl = (int) apply_filters( 'cooked_related_recipes_cache_ttl', 7 * DAY_IN_SECONDS ); + set_transient( $key, $scores, $ttl ); + } + + /** + * Find related recipes based on various factors. + * Processes recipes in batches to avoid memory issues with large sites. + * + * @param array $source_recipe Source recipe data. + * @param array $atts Shortcode attributes. + * @return array [ ['id' => int, 'score' => int], ... ] + */ + public static function find_related_recipes( $source_recipe, $atts ) { + $recipe_id = $source_recipe['id']; + $scores = []; + + // Batch size for processing recipes (process 100 at a time to avoid memory issues) + $batch_size = apply_filters( 'cooked_related_recipes_batch_size', 100 ); + $paged = 1; + + // Pre-calculate source recipe data once + $source_categories = self::get_recipe_terms( $recipe_id, 'cp_recipe_category' ); + $source_cuisines = self::get_recipe_terms( $recipe_id, 'cp_recipe_cuisine' ); + $source_cooking_methods = self::get_recipe_terms( $recipe_id, 'cp_recipe_cooking_method' ); + $source_tags = self::get_recipe_terms( $recipe_id, 'cp_recipe_tags' ); + $source_diets = self::get_recipe_terms( $recipe_id, 'cp_recipe_diet' ); + $source_ingredients = self::get_recipe_ingredients( $source_recipe ); + $source_author = isset( $source_recipe['author']['id'] ) ? $source_recipe['author']['id'] : false; + $source_difficulty = isset( $source_recipe['difficulty_level'] ) ? $source_recipe['difficulty_level'] : false; + + // Get current language for multilingual support + $current_language = false; + if ( class_exists( 'Cooked_Multilingual' ) && Cooked_Multilingual::is_multilingual_active() ) { + $current_language = Cooked_Multilingual::get_current_language(); + } + + // Process recipes in batches using WP_Query directly + while ( true ) { + $query_args = [ + 'post_type' => 'cp_recipe', + 'post_status' => 'publish', + 'post__not_in' => [ $recipe_id ], + 'posts_per_page' => $batch_size, + 'paged' => $paged, + 'fields' => 'ids', // Only get IDs to save memory + 'no_found_rows' => false, // We need to know if there are more pages + ]; + + // Allow multilingual plugins to filter the query + $query_args = apply_filters( 'cooked_related_recipes_query_args', $query_args, $current_language ); + + $query = new \WP_Query( $query_args ); + $recipe_ids = $query->posts; + + if ( empty( $recipe_ids ) ) { + break; + } + + // Process each recipe in the current batch + foreach ( $recipe_ids as $rid ) { + $score = 0; + + // Get recipe settings only when needed (lazy loading) + $recipe_settings = null; + + if ( $atts['match_categories'] && $atts['match_categories'] !== 'false' ) { + $categories = self::get_recipe_terms( $rid, 'cp_recipe_category' ); + $score += count( array_intersect( $source_categories, $categories ) ) * (int) $atts['category_weight']; + } + + if ( $atts['match_cuisines'] && $atts['match_cuisines'] !== 'false' ) { + $cuisines = self::get_recipe_terms( $rid, 'cp_recipe_cuisine' ); + $score += count( array_intersect( $source_cuisines, $cuisines ) ) * (int) $atts['cuisine_weight']; + } + + if ( $atts['match_cooking_methods'] && $atts['match_cooking_methods'] !== 'false' ) { + $cooking_methods = self::get_recipe_terms( $rid, 'cp_recipe_cooking_method' ); + $score += count( array_intersect( $source_cooking_methods, $cooking_methods ) ) * (int) $atts['cooking_method_weight']; + } + + if ( $atts['match_tags'] && $atts['match_tags'] !== 'false' ) { + $tags = self::get_recipe_terms( $rid, 'cp_recipe_tags' ); + $score += count( array_intersect( $source_tags, $tags ) ) * (int) $atts['tag_weight']; + } + + if ( $atts['match_diets'] && $atts['match_diets'] !== 'false' ) { + $diets = self::get_recipe_terms( $rid, 'cp_recipe_diet' ); + $score += count( array_intersect( $source_diets, $diets ) ) * (int) $atts['diet_weight']; + } + + // Only load full recipe data if we need ingredients, author, or difficulty + if ( ( $atts['match_ingredients'] && $atts['match_ingredients'] !== 'false' ) || + ( $atts['match_author'] && $atts['match_author'] !== 'false' && $source_author ) || + ( $atts['match_difficulty'] && $atts['match_difficulty'] !== 'false' && $source_difficulty ) ) { + + if ( is_null( $recipe_settings ) ) { + $recipe_settings = Cooked_Recipes::get_settings( $rid ); + } + + if ( $atts['match_ingredients'] && $atts['match_ingredients'] !== 'false' ) { + $recipe_data = [ 'ingredients' => isset( $recipe_settings['ingredients'] ) ? $recipe_settings['ingredients'] : [] ]; + $ingredients = self::get_recipe_ingredients( $recipe_data ); + $score += self::compare_ingredients( $source_ingredients, $ingredients ) * (int) $atts['ingredient_weight']; + unset( $recipe_data ); // Free memory immediately + } + + if ( $atts['match_author'] && $atts['match_author'] !== 'false' && $source_author ) { + $post = get_post( $rid ); + $author = $post ? (int) $post->post_author : false; + if ( $author && $author === (int) $source_author ) { + $score += (int) $atts['author_weight']; + } + } + + if ( $atts['match_difficulty'] && $atts['match_difficulty'] !== 'false' && $source_difficulty ) { + $difficulty = isset( $recipe_settings['difficulty_level'] ) ? $recipe_settings['difficulty_level'] : false; + if ( $difficulty && $difficulty === $source_difficulty ) { + $score += (int) $atts['difficulty_weight']; + } + } + } + + if ( $score > 0 ) { + $recipe_score = [ 'id' => $rid, 'score' => $score ]; + + /** + * Filter individual recipe score before adding to results. + * + * @since 1.12.0 + * + * @param array $recipe_score Recipe score data ['id' => int, 'score' => int]. + * @param int $rid Recipe ID. + * @param array $source_recipe Source recipe data. + * @param array $atts Shortcode attributes. + */ + $recipe_score = apply_filters( 'cooked_related_recipes_recipe_score', $recipe_score, $rid, $source_recipe, $atts ); + + if ( $recipe_score && isset( $recipe_score['id'] ) && isset( $recipe_score['score'] ) && $recipe_score['score'] > 0 ) { + $scores[] = $recipe_score; + } + } + + // Clear recipe settings for next iteration + $recipe_settings = null; + } + + // Clean up query to free memory + wp_reset_postdata(); + + // Check if there are more recipes to process + if ( $paged >= $query->max_num_pages ) { + break; + } + $paged++; + } + + /** + * Filter scores before sorting. + * + * @since 1.12.0 + * + * @param array $scores Array of recipe scores [ ['id' => int, 'score' => int], ... ]. + * @param array $source_recipe Source recipe data. + * @param array $atts Shortcode attributes. + */ + $scores = apply_filters( 'cooked_related_recipes_scores_before_sort', $scores, $source_recipe, $atts ); + + // Sort by score descending + usort( $scores, function ( $a, $b ) { + return $b['score'] - $a['score']; + } ); + + /** + * Filter final sorted scores. + * + * @since 1.12.0 + * + * @param array $scores Array of sorted recipe scores [ ['id' => int, 'score' => int], ... ]. + * @param array $source_recipe Source recipe data. + * @param array $atts Shortcode attributes. + */ + $scores = apply_filters( 'cooked_related_recipes_scores', $scores, $source_recipe, $atts ); + + return $scores; + } + + /** + * Get recipe term IDs for a taxonomy. + * + * @param int $recipe_id Recipe ID. + * @param string $taxonomy Taxonomy name. + * @return array + */ + public static function get_recipe_terms( $recipe_id, $taxonomy ) { + if ( ! taxonomy_exists( $taxonomy ) ) { + return []; + } + $terms = wp_get_object_terms( $recipe_id, $taxonomy, [ 'fields' => 'ids' ] ); + return is_wp_error( $terms ) ? [] : $terms; + } + + /** + * Get normalized ingredient names from recipe data. + * + * @param array $recipe Recipe data. + * @return array + */ + public static function get_recipe_ingredients( $recipe ) { + $ingredients = []; + if ( ! isset( $recipe['ingredients'] ) || empty( $recipe['ingredients'] ) ) { + return $ingredients; + } + foreach ( $recipe['ingredients'] as $ing ) { + if ( isset( $ing['section_heading_name'] ) ) { + continue; + } + $name = isset( $ing['name'] ) ? trim( strtolower( $ing['name'] ) ) : ''; + if ( $name ) { + $ingredients[] = $name; + } + } + return array_unique( $ingredients ); + } + + /** + * Compare ingredient overlap between two recipes. + * + * @param array $ingredients1 First recipe ingredients. + * @param array $ingredients2 Second recipe ingredients. + * @return float + */ + public static function compare_ingredients( $ingredients1, $ingredients2 ) { + if ( empty( $ingredients1 ) || empty( $ingredients2 ) ) { + return 0; + } + $exact = count( array_intersect( $ingredients1, $ingredients2 ) ); + $partial = 0; + foreach ( $ingredients1 as $ing1 ) { + foreach ( $ingredients2 as $ing2 ) { + if ( $ing1 !== $ing2 && ( strpos( $ing1, $ing2 ) !== false || strpos( $ing2, $ing1 ) !== false ) ) { + $partial += 0.5; + break; + } + } + } + return $exact + $partial; + } +} diff --git a/includes/class.cooked-settings.php b/includes/class.cooked-settings.php index 6e97321..a2d7c39 100644 --- a/includes/class.cooked-settings.php +++ b/includes/class.cooked-settings.php @@ -32,8 +32,21 @@ public function browse_page_saved( $post_id ) { if ( wp_is_post_revision( $post_id ) ) return; $_cooked_settings = Cooked_Settings::get(); - if ( isset($_cooked_settings['browse_page']) && $_cooked_settings['browse_page'] == $post_id ) { + $main_browse_page_id = isset($_cooked_settings['browse_page']) ? $_cooked_settings['browse_page'] : false; + + // Check if this is the main browse page + if ( $main_browse_page_id == $post_id ) { flush_rewrite_rules(false); + return; + } + + // Also flush if this is a translation of the browse page + $browse_pages = Cooked_Multilingual::get_all_browse_pages(); + foreach ( $browse_pages as $lang => $page_data ) { + if ( $page_data['id'] == $post_id ) { + flush_rewrite_rules(false); + return; + } } } @@ -594,6 +607,25 @@ public static function field_migrate_button( $field_name, $title ) { } } + public static function field_calculate_related_button( $field_name, $title ) { + $last = get_option( 'cooked_related_calculation_last', [] ); + $last_ts = isset( $last['time'] ) ? (int) $last['time'] : 0; + $last_count = isset( $last['count'] ) ? (int) $last['count'] : -1; + $last_text = ''; + if ( $last_ts && $last_count >= 0 ) { + $date = date_i18n( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ), $last_ts ); + $last_text = sprintf( __( 'Last: %1$s · %2$s recipes', 'cooked' ), $date, number_format_i18n( $last_count ) ); + } + echo ''; + echo '

'; + echo ''; + echo '

'; + echo '

'; + echo '0 / 0'; + echo '

'; + echo ''; + } + public static function field_text($field_name, $placeholder) { global $_cooked_settings; diff --git a/includes/class.cooked-shortcodes.php b/includes/class.cooked-shortcodes.php index 1fc74b1..bf23a9d 100644 --- a/includes/class.cooked-shortcodes.php +++ b/includes/class.cooked-shortcodes.php @@ -31,6 +31,7 @@ function __construct() { add_shortcode('cooked-categories', [$this, 'cooked_categories_shortcode'] ); add_shortcode('cooked-recipe-list', [$this, 'cooked_recipe_list_shortcode'] ); add_shortcode('cooked-recipe-card', [$this, 'cooked_recipe_card_shortcode'] ); + add_shortcode('cooked-related-recipes', [$this, 'cooked_related_recipes_shortcode'] ); if ( shortcode_exists( 'timer' ) ): add_shortcode('cooked-timer', [$this, 'cooked_timer'] ); @@ -591,7 +592,7 @@ public static function cooked_info_author() { global $recipe_settings, $_cooked_settings; if (in_array('author', $_cooked_settings['recipe_info_display_options'])) { - $browse_page_id = isset($_cooked_settings['browse_page']) && $_cooked_settings['browse_page'] ? $_cooked_settings['browse_page'] : false; + $browse_page_id = Cooked_Multilingual::get_browse_page_id(); $front_page_id = get_option( 'page_on_front' ); $browse_page_url = $browse_page_id ? get_permalink( $browse_page_id ) : false; $author = !empty($recipe_settings['author']) ? $recipe_settings['author'] : false; @@ -607,7 +608,7 @@ public static function cooked_info_author() { $permalink = $front_page_id != $browse_page_id && get_option('permalink_structure') ? esc_url( untrailingslashit( $browse_page_url ) . '/' . $_cooked_settings['recipe_author_permalink'] . '/' . trailingslashit( $author_slug ) ) : - esc_url( trailingslashit( get_home_url() ) . 'index.php?page_id=' . $_cooked_settings['browse_page'] . '&recipe_author=' . $author['id'] ); + esc_url( trailingslashit( get_home_url() ) . 'index.php?page_id=' . $browse_page_id . '&recipe_author=' . $author['id'] ); $permalink = apply_filters( 'cooked_author_permalink', $permalink, $author['id'], $author_slug ); } else { @@ -790,7 +791,7 @@ public function cooked_title_shortcode($atts, $content = null) { $recipe_settings['id'] = $recipe->ID; } - return get_the_title($recipe_settings['id']); + return esc_html( get_the_title($recipe_settings['id']) ); } public function cooked_image_shortcode($atts, $content = null) { @@ -1003,7 +1004,7 @@ public function cooked_nutrition_shortcode($atts, $content = null) { foreach ( $bottom_facts as $slug => $nf ): if ( isset( $nutrition_facts[$slug] ) && $nutrition_facts[$slug] || isset( $nutrition_facts[$slug] ) && $nutrition_facts[$slug] === '0' ): echo '
'; - echo '' . esc_html($nf['name']) . ' ' . esc_html( $nutrition_facts[$slug] ) . '' . ( isset($nf['measurement']) ? '' . esc_html($nf['measurement']) . '' : '' ); + echo '' . esc_html($nf['name']) . ' ' . esc_html( $nutrition_facts[$slug] ) . '' . ( isset($nf['measurement']) ? '' . esc_html($nf['measurement']) . '' : '' ); echo ( isset( $nf['pdv'] ) ? '' . ceil( ( esc_html( $nutrition_facts[$slug] ) / $nf['pdv'] ) * 100 ) . '%' : '' ); echo '
'; endif; @@ -1081,4 +1082,128 @@ public function cooked_nutrition_shortcode($atts, $content = null) { return ob_get_clean(); } + + /** + * Related Recipes Shortcode + * + * Displays related recipes based on keywords, cuisines, ingredients, categories, and other factors. + * + * @param array $atts Shortcode attributes + * @param string $content Shortcode content + * @return string Related recipes HTML + * @since 1.0.0 + */ + public function cooked_related_recipes_shortcode($atts, $content = null) { + if ( is_admin() ) return false; + + global $post, $_cooked_settings; + + // Shortcode Attributes + $atts = shortcode_atts( Cooked_Related_Recipes::get_default_atts(), $atts ); + + // Get recipe ID - validate if provided, otherwise try current post + $recipe_id = false; + + if (!empty($atts['id'])) { + // Validate that the ID is numeric before converting + if (is_numeric($atts['id']) && $atts['id'] > 0) { + $recipe_id = (int) $atts['id']; + } else { + // Invalid ID provided (e.g., "asdas", "", "0", "-5") + return ''; + } + } else { + // No ID provided, try to get from current post + if (isset($post->ID) && get_post_type($post->ID) === 'cp_recipe') { + $recipe_id = $post->ID; + } + } + + if (!$recipe_id) { + return ''; + } + + // Get the source recipe (allow any status to support drafts/pending) + $source_recipe = Cooked_Recipes::get($recipe_id, true, false, false, false, 'any'); + + if (!$source_recipe || empty($source_recipe)) { + $error_msg = __('Recipe not found.', 'cooked'); + // Check if it's a different post type + $post_check = get_post($recipe_id); + if ($post_check && $post_check->post_type !== 'cp_recipe') { + $error_msg .= ' ' . sprintf(__('The specified ID (%d) is not a recipe.', 'cooked'), $recipe_id); + } elseif (!$post_check) { + $error_msg .= ' ' . sprintf(__('No post found with ID %d.', 'cooked'), $recipe_id); + } + return ''; + } + + // Find related recipes (uses transient cache; pre-calc via Settings > Related Recipes) + // Limit is applied inside get_related_recipes() based on $atts['limit'] + $related_recipes = Cooked_Related_Recipes::get_related_recipes( $recipe_id, $atts ); + + if (empty($related_recipes)) { + $empty_msg = __('No related recipes found.', 'cooked'); + // Provide helpful context + if (class_exists('Cooked_Multilingual') && Cooked_Multilingual::is_multilingual_active()) { + $empty_msg .= ' ' . __('This may be because there are no other recipes in the current language with matching attributes.', 'cooked'); + } else { + $empty_msg .= ' ' . __('Try adjusting the matching criteria or ensure you have other published recipes with shared categories, tags, or ingredients.', 'cooked'); + } + return ''; + } + + // Get recipe IDs for display and filter out deleted/invalid recipes + // Note: Language filtering is already handled by WP_Query in find_related_recipes() + $recipe_ids = array_column($related_recipes, 'id'); + + /** + * Filter recipe IDs before display. + * + * @since 1.12.0 + * + * @param array $recipe_ids Array of recipe IDs to display. + * @param array $related_recipes Full related recipes array with scores. + * @param int $recipe_id Source recipe ID. + * @param array $atts Shortcode attributes. + */ + $recipe_ids = apply_filters( 'cooked_related_recipes_display_ids', $recipe_ids, $related_recipes, $recipe_id, $atts ); + + ob_start(); + + // Display title + if ($atts['title']) { + echo ''; + } + + // Display recipes in grid + $columns = intval($atts['columns']); + $hide_image = $atts['hide_image'] && $atts['hide_image'] !== 'false'; + $hide_excerpt = $atts['hide_excerpt'] && $atts['hide_excerpt'] !== 'false'; + $hide_author = $atts['hide_author'] && $atts['hide_author'] !== 'false'; + + echo ''; + + $output = ob_get_clean(); + + /** + * Filter the related recipes shortcode output HTML. + * + * @since 1.12.0 + * + * @param string $output The shortcode HTML output. + * @param array $recipe_ids Array of recipe IDs being displayed. + * @param int $recipe_id Source recipe ID. + * @param array $atts Shortcode attributes. + */ + return apply_filters( 'cooked_related_recipes_output', $output, $recipe_ids, $recipe_id, $atts ); + } } diff --git a/includes/class.cooked-taxonomies.php b/includes/class.cooked-taxonomies.php index f2cf640..2e06539 100644 --- a/includes/class.cooked-taxonomies.php +++ b/includes/class.cooked-taxonomies.php @@ -150,7 +150,8 @@ public static function card( $term_id = false, $width = false, $hide_image = fal public static function term_link_filter( $url, $term, $taxonomy ) { $_cooked_settings = Cooked_Settings::get(); - $parent_page_browse_page = isset($_cooked_settings['browse_page']) && $_cooked_settings['browse_page'] ? $_cooked_settings['browse_page'] : false; + // Get the translated browse page for the current language + $parent_page_browse_page = Cooked_Multilingual::get_browse_page_id(); $front_page = get_option( 'page_on_front' ); $cooked_taxonomies = ['cp_recipe_category']; diff --git a/includes/class.cooked-users.php b/includes/class.cooked-users.php index 24f220d..060c0c8 100644 --- a/includes/class.cooked-users.php +++ b/includes/class.cooked-users.php @@ -31,16 +31,28 @@ function __construct() { public static function recipe_author_rewrite() { global $_cooked_settings; - $browse_page_id = isset($_cooked_settings['browse_page']) && $_cooked_settings['browse_page'] ? $_cooked_settings['browse_page'] : false; $front_page_id = get_option( 'page_on_front' ); - $browse_page_slug = $browse_page_id ? basename( get_permalink( $browse_page_id ) ) : false; - if ( $browse_page_id != $front_page_id ) { - add_rewrite_tag('%recipe_author%', '([^&]+)'); - if ( isset( $_cooked_settings['browse_page'] ) ) { - add_rewrite_rule('^' . $browse_page_slug . '/' . $_cooked_settings['recipe_author_permalink'] . '/([^/]*)/page/([^/]*)/?', 'index.php?page_id=' . esc_attr( $_cooked_settings['browse_page'] ) . '&paged=$matches[2]&recipe_author=$matches[1]', 'top' ); - add_rewrite_rule('^' . $browse_page_slug . '/' . $_cooked_settings['recipe_author_permalink'] . '/([^/]*)/?', 'index.php?page_id=' . esc_attr( $_cooked_settings['browse_page'] ) . '&recipe_author=$matches[1]', 'top' ); + // Get all browse page translations for rewrite rules + $browse_pages = Cooked_Multilingual::get_all_browse_pages(); + + if ( empty( $browse_pages ) ) { + return; + } + + add_rewrite_tag('%recipe_author%', '([^&]+)'); + + // Create rewrite rules for each browse page translation + foreach ( $browse_pages as $lang => $page_data ) { + $browse_page_id = $page_data['id']; + $browse_page_slug = $page_data['slug'] ? basename( $page_data['slug'] ) : false; + + if ( ! $browse_page_slug || $browse_page_id == $front_page_id ) { + continue; } + + add_rewrite_rule('^' . $browse_page_slug . '/' . $_cooked_settings['recipe_author_permalink'] . '/([^/]*)/page/([^/]*)/?', 'index.php?page_id=' . esc_attr( $browse_page_id ) . '&paged=$matches[2]&recipe_author=$matches[1]', 'top' ); + add_rewrite_rule('^' . $browse_page_slug . '/' . $_cooked_settings['recipe_author_permalink'] . '/([^/]*)/?', 'index.php?page_id=' . esc_attr( $browse_page_id ) . '&recipe_author=$matches[1]', 'top' ); } } diff --git a/includes/class.cooked-yoastseo.php b/includes/class.cooked-yoastseo.php index 67ba2ca..3ebb5f5 100644 --- a/includes/class.cooked-yoastseo.php +++ b/includes/class.cooked-yoastseo.php @@ -60,7 +60,7 @@ public function modify_browse_page_canonical_url($canonical_url, $post = null) { return $canonical_url; } - $browse_page_id = !empty($_cooked_settings['browse_page']) ? $_cooked_settings['browse_page'] : false; + $browse_page_id = Cooked_Multilingual::get_browse_page_id(); // Only modify for browse page with category. if (is_page($browse_page_id) && diff --git a/languages/cooked.po b/languages/cooked.po index 25b37e0..364774f 100644 --- a/languages/cooked.po +++ b/languages/cooked.po @@ -41,14 +41,14 @@ msgid "remaining" msgstr "" #: includes/class.cooked-admin-enqueues.php:138 -#: includes/class.cooked-recipe-meta.php:681 -#: includes/class.cooked-recipe-meta.php:736 -#: includes/class.cooked-recipe-meta.php:776 +#: includes/class.cooked-recipe-meta.php:758 +#: includes/class.cooked-recipe-meta.php:813 +#: includes/class.cooked-recipe-meta.php:853 msgid "Add Image" msgstr "" #: includes/class.cooked-admin-enqueues.php:139 -#: includes/class.cooked-recipe-meta.php:681 +#: includes/class.cooked-recipe-meta.php:758 msgid "Change Image" msgstr "" @@ -57,7 +57,7 @@ msgid "Use this Image" msgstr "" #: includes/class.cooked-admin-enqueues.php:141 -#: includes/class.cooked-recipe-meta.php:1008 +#: includes/class.cooked-recipe-meta.php:1085 msgid "Add to Gallery" msgstr "" @@ -97,23 +97,23 @@ msgstr "" #: includes/class.cooked-admin-menus.php:36 #: includes/class.cooked-admin-menus.php:59 -#: includes/class.cooked-post-types.php:421 -#: includes/class.cooked-post-types.php:433 -#: includes/class.cooked-users.php:154 +#: includes/class.cooked-post-types.php:450 +#: includes/class.cooked-post-types.php:462 +#: includes/class.cooked-users.php:166 msgid "Recipes" msgstr "" #: includes/class.cooked-admin-menus.php:37 #: includes/class.cooked-admin-menus.php:61 -#: includes/class.cooked-post-types.php:423 +#: includes/class.cooked-post-types.php:452 msgid "Add New" msgstr "" #. translators: referring to the bottom of the Settings page. #: includes/class.cooked-admin-menus.php:45 #: includes/class.cooked-admin-menus.php:65 -#: includes/class.cooked-recipe-meta.php:98 -#: includes/class.cooked-shortcodes.php:149 +#: includes/class.cooked-recipe-meta.php:117 +#: includes/class.cooked-shortcodes.php:150 #: templates/admin/welcome.php:18 msgid "Settings" msgstr "" @@ -132,7 +132,7 @@ msgid "Upgrade to Pro" msgstr "" #: includes/class.cooked-admin-menus.php:60 -#: includes/class.cooked-post-types.php:428 +#: includes/class.cooked-post-types.php:457 msgid "All Recipes" msgstr "" @@ -143,28 +143,28 @@ msgstr "" msgid "You do not have sufficient permissions to access this page." msgstr "" -#: includes/class.cooked-ajax.php:174 +#: includes/class.cooked-ajax.php:179 #: includes/class.cooked-functions.php:134 -#: includes/class.cooked-recipe-meta.php:157 -#: includes/class.cooked-recipe-meta.php:244 -#: includes/class.cooked-recipe-meta.php:1086 +#: includes/class.cooked-recipe-meta.php:176 +#: includes/class.cooked-recipe-meta.php:263 +#: includes/class.cooked-recipe-meta.php:1163 #: includes/class.cooked-recipes.php:636 #: templates/front/recipe.php:34 msgid "Ingredients" msgstr "" -#: includes/class.cooked-ajax.php:174 +#: includes/class.cooked-ajax.php:179 #: includes/class.cooked-functions.php:135 -#: includes/class.cooked-recipe-meta.php:157 -#: includes/class.cooked-recipe-meta.php:250 -#: includes/class.cooked-recipe-meta.php:1117 +#: includes/class.cooked-recipe-meta.php:176 +#: includes/class.cooked-recipe-meta.php:269 +#: includes/class.cooked-recipe-meta.php:1194 #: includes/class.cooked-recipes.php:640 #: templates/front/recipe.php:35 msgid "Directions" msgstr "" -#: includes/class.cooked-enqueues.php:52 -#: includes/class.cooked-recipe-meta.php:1332 +#: includes/class.cooked-enqueues.php:56 +#: includes/class.cooked-recipe-meta.php:1409 msgid "Timer" msgstr "" @@ -175,7 +175,7 @@ msgid "What's new in %s?" msgstr "" #: includes/class.cooked-functions.php:127 -#: includes/class.cooked-shortcodes.php:655 +#: includes/class.cooked-shortcodes.php:656 msgid "Print" msgstr "" @@ -192,8 +192,8 @@ msgid "Information" msgstr "" #: includes/class.cooked-functions.php:132 -#: includes/class.cooked-recipe-meta.php:1277 -#: includes/class.cooked-settings.php:218 +#: includes/class.cooked-recipe-meta.php:1354 +#: includes/class.cooked-settings.php:231 msgid "Excerpt" msgstr "" @@ -202,15 +202,15 @@ msgid "Images" msgstr "" #: includes/class.cooked-functions.php:136 -#: includes/class.cooked-recipe-meta.php:1301 +#: includes/class.cooked-recipe-meta.php:1378 #: includes/class.cooked-recipes.php:643 -#: includes/class.cooked-settings.php:219 -#: includes/class.cooked-shortcodes.php:774 +#: includes/class.cooked-settings.php:232 +#: includes/class.cooked-shortcodes.php:775 msgid "Notes" msgstr "" #: includes/class.cooked-functions.php:137 -#: includes/class.cooked-recipe-meta.php:256 +#: includes/class.cooked-recipe-meta.php:275 msgid "Nutrition" msgstr "" @@ -300,7 +300,7 @@ msgid "Begin Import" msgstr "" #: includes/class.cooked-import.php:178 -#: includes/class.cooked-settings.php:592 +#: includes/class.cooked-settings.php:605 msgid "reload" msgstr "" @@ -584,7 +584,7 @@ msgstr "" #: includes/class.cooked-measurements.php:202 #: includes/class.cooked-recipes.php:799 -#: includes/class.cooked-settings.php:223 +#: includes/class.cooked-settings.php:236 msgid "Servings" msgstr "" @@ -855,47 +855,47 @@ msgstr "" msgid "Photo" msgstr "" -#: includes/class.cooked-post-types.php:403 +#: includes/class.cooked-post-types.php:432 msgid "Recipe Archive" msgstr "" -#: includes/class.cooked-post-types.php:422 +#: includes/class.cooked-post-types.php:451 msgid "Recipe" msgstr "" -#: includes/class.cooked-post-types.php:424 +#: includes/class.cooked-post-types.php:453 msgid "Add New Recipe" msgstr "" -#: includes/class.cooked-post-types.php:425 +#: includes/class.cooked-post-types.php:454 msgid "New Recipe" msgstr "" -#: includes/class.cooked-post-types.php:426 +#: includes/class.cooked-post-types.php:455 msgid "Edit Recipe" msgstr "" -#: includes/class.cooked-post-types.php:427 +#: includes/class.cooked-post-types.php:456 msgid "View Recipe" msgstr "" -#: includes/class.cooked-post-types.php:429 +#: includes/class.cooked-post-types.php:458 msgid "Search Recipes" msgstr "" -#: includes/class.cooked-post-types.php:430 +#: includes/class.cooked-post-types.php:459 msgid "No recipes found." msgstr "" -#: includes/class.cooked-post-types.php:431 +#: includes/class.cooked-post-types.php:460 msgid "No recipes found in trash." msgstr "" -#: includes/class.cooked-post-types.php:459 +#: includes/class.cooked-post-types.php:488 msgid "Recipe title ..." msgstr "" -#: includes/class.cooked-post-types.php:477 +#: includes/class.cooked-post-types.php:519 msgid "Cooked Browse Recipes Page" msgstr "" @@ -908,442 +908,443 @@ msgstr "" msgid "Current recipe category being viewed." msgstr "" -#: includes/class.cooked-recipe-meta.php:202 +#: includes/class.cooked-recipe-meta.php:221 msgid "Display Recipe" msgstr "" -#: includes/class.cooked-recipe-meta.php:203 +#: includes/class.cooked-recipe-meta.php:222 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:238 +#: includes/class.cooked-recipe-meta.php:257 msgid "Layout" msgstr "" -#: includes/class.cooked-recipe-meta.php:262 -#: includes/class.cooked-recipe-meta.php:1198 +#: includes/class.cooked-recipe-meta.php:281 +#: includes/class.cooked-recipe-meta.php:1275 msgid "Gallery" msgstr "" -#: includes/class.cooked-recipe-meta.php:268 +#: includes/class.cooked-recipe-meta.php:287 msgid "Shortcodes" msgstr "" -#: includes/class.cooked-recipe-meta.php:325 +#: includes/class.cooked-recipe-meta.php:344 msgid "Recipe Review Required" msgstr "" #. translators: for displaying singular or plural versions depending on the number of recipes. -#: includes/class.cooked-recipe-meta.php:328 +#: includes/class.cooked-recipe-meta.php:347 #, 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:336 +#: includes/class.cooked-recipe-meta.php:355 msgid "Recipe Shortcode" msgstr "" -#: includes/class.cooked-recipe-meta.php:337 +#: includes/class.cooked-recipe-meta.php:356 msgid "You can use the following shortcode to display your recipe anywhere:" msgstr "" -#: includes/class.cooked-recipe-meta.php:351 +#: includes/class.cooked-recipe-meta.php:370 msgid "Recipe Template" msgstr "" -#: includes/class.cooked-recipe-meta.php:351 +#: includes/class.cooked-recipe-meta.php:370 msgid "Default Recipe Template" msgstr "" -#: includes/class.cooked-recipe-meta.php:351 +#: includes/class.cooked-recipe-meta.php:370 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:351 +#: includes/class.cooked-recipe-meta.php:370 msgid "Save as Default" msgstr "" -#: includes/class.cooked-recipe-meta.php:351 +#: includes/class.cooked-recipe-meta.php:370 msgid "Apply to All" msgstr "" -#: includes/class.cooked-recipe-meta.php:351 +#: includes/class.cooked-recipe-meta.php:370 msgid "Reset" msgstr "" -#: includes/class.cooked-recipe-meta.php:351 +#: includes/class.cooked-recipe-meta.php:370 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:369 +#: includes/class.cooked-recipe-meta.php:388 msgid "Recipe Excerpt" msgstr "" -#: includes/class.cooked-recipe-meta.php:369 +#: includes/class.cooked-recipe-meta.php:388 msgid "The excerpt is used on recipe listing templates, where the full recipe should not be displayed." msgstr "" -#: includes/class.cooked-recipe-meta.php:392 +#: includes/class.cooked-recipe-meta.php:411 msgid "SEO Description" msgstr "" -#: includes/class.cooked-recipe-meta.php:392 +#: includes/class.cooked-recipe-meta.php:411 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:403 -#: includes/class.cooked-settings.php:217 +#: includes/class.cooked-recipe-meta.php:422 +#: includes/class.cooked-settings.php:230 msgid "Difficulty Level" msgstr "" -#: includes/class.cooked-recipe-meta.php:412 -#: includes/class.cooked-recipe-meta.php:1060 -#: includes/class.cooked-settings.php:220 -#: includes/class.cooked-shortcodes.php:448 -#: includes/class.cooked-shortcodes.php:670 +#: includes/class.cooked-recipe-meta.php:431 +#: includes/class.cooked-recipe-meta.php:1137 +#: includes/class.cooked-settings.php:233 +#: includes/class.cooked-shortcodes.php:449 +#: includes/class.cooked-shortcodes.php:671 msgid "Prep Time" msgstr "" -#: includes/class.cooked-recipe-meta.php:414 -#: includes/class.cooked-recipe-meta.php:419 -#: includes/class.cooked-recipe-meta.php:424 +#: includes/class.cooked-recipe-meta.php:433 +#: includes/class.cooked-recipe-meta.php:438 +#: includes/class.cooked-recipe-meta.php:443 msgid "minutes" msgstr "" -#: includes/class.cooked-recipe-meta.php:417 -#: includes/class.cooked-recipe-meta.php:1061 -#: includes/class.cooked-settings.php:221 -#: includes/class.cooked-shortcodes.php:449 -#: includes/class.cooked-shortcodes.php:679 +#: includes/class.cooked-recipe-meta.php:436 +#: includes/class.cooked-recipe-meta.php:1138 +#: includes/class.cooked-settings.php:234 +#: includes/class.cooked-shortcodes.php:450 +#: includes/class.cooked-shortcodes.php:680 msgid "Cook Time" msgstr "" -#: includes/class.cooked-recipe-meta.php:422 -#: includes/class.cooked-recipe-meta.php:1062 -#: includes/class.cooked-settings.php:222 -#: includes/class.cooked-shortcodes.php:450 -#: includes/class.cooked-shortcodes.php:690 -#: includes/class.cooked-shortcodes.php:697 +#: includes/class.cooked-recipe-meta.php:441 +#: includes/class.cooked-recipe-meta.php:1139 +#: includes/class.cooked-settings.php:235 +#: includes/class.cooked-shortcodes.php:451 +#: includes/class.cooked-shortcodes.php:691 +#: includes/class.cooked-shortcodes.php:698 msgid "Total Time" msgstr "" -#: includes/class.cooked-recipe-meta.php:430 +#: includes/class.cooked-recipe-meta.php:449 msgid "Recipe Notes" msgstr "" -#: includes/class.cooked-recipe-meta.php:430 +#: includes/class.cooked-recipe-meta.php:449 msgid "The notes are displayed in the recipe." msgstr "" -#: includes/class.cooked-recipe-meta.php:455 +#: includes/class.cooked-recipe-meta.php:474 msgid "Amount" msgstr "" -#: includes/class.cooked-recipe-meta.php:456 +#: includes/class.cooked-recipe-meta.php:475 msgid "Measurement" msgstr "" -#: includes/class.cooked-recipe-meta.php:457 +#: includes/class.cooked-recipe-meta.php:476 msgid "Item" msgstr "" -#: includes/class.cooked-recipe-meta.php:494 -#: includes/class.cooked-recipe-meta.php:567 -#: includes/class.cooked-recipe-meta.php:614 +#: includes/class.cooked-recipe-meta.php:514 +#: includes/class.cooked-recipe-meta.php:606 +#: includes/class.cooked-recipe-meta.php:672 msgid "ex. Eggs, Milk, etc." msgstr "" -#: includes/class.cooked-recipe-meta.php:508 -#: includes/class.cooked-recipe-meta.php:625 -#: includes/class.cooked-recipe-meta.php:697 -#: includes/class.cooked-recipe-meta.php:789 +#: includes/class.cooked-recipe-meta.php:547 +#: includes/class.cooked-recipe-meta.php:702 +#: includes/class.cooked-recipe-meta.php:774 +#: includes/class.cooked-recipe-meta.php:866 msgid "Section Heading" msgstr "" -#: includes/class.cooked-recipe-meta.php:584 +#: includes/class.cooked-recipe-meta.php:642 msgid "Add Ingredient" msgstr "" -#: includes/class.cooked-recipe-meta.php:585 -#: includes/class.cooked-recipe-meta.php:768 +#: includes/class.cooked-recipe-meta.php:643 +#: includes/class.cooked-recipe-meta.php:845 msgid "Add Section Heading" msgstr "" -#: includes/class.cooked-recipe-meta.php:767 +#: includes/class.cooked-recipe-meta.php:844 msgid "Add Direction" msgstr "" -#: includes/class.cooked-recipe-meta.php:824 +#: includes/class.cooked-recipe-meta.php:901 msgid "Nutrition Information" msgstr "" -#: includes/class.cooked-recipe-meta.php:862 -#: includes/class.cooked-shortcodes.php:1061 +#: includes/class.cooked-recipe-meta.php:939 +#: includes/class.cooked-shortcodes.php:1062 msgid "Nutrition Facts" msgstr "" -#: includes/class.cooked-recipe-meta.php:880 -#: includes/class.cooked-shortcodes.php:1029 +#: includes/class.cooked-recipe-meta.php:957 +#: includes/class.cooked-shortcodes.php:1030 msgid "Amount per serving" msgstr "" -#: includes/class.cooked-recipe-meta.php:890 -#: includes/class.cooked-shortcodes.php:1039 +#: includes/class.cooked-recipe-meta.php:967 +#: includes/class.cooked-shortcodes.php:1040 msgid "% Daily Value *" msgstr "" -#: includes/class.cooked-recipe-meta.php:909 -#: includes/class.cooked-shortcodes.php:971 +#: includes/class.cooked-recipe-meta.php:986 +#: includes/class.cooked-shortcodes.php:972 msgid "Includes" msgstr "" -#: includes/class.cooked-recipe-meta.php:941 -#: includes/class.cooked-shortcodes.php:1065 +#: includes/class.cooked-recipe-meta.php:1018 +#: includes/class.cooked-shortcodes.php:1066 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:957 +#: includes/class.cooked-recipe-meta.php:1034 msgid "Recipe Gallery Type" msgstr "" -#: includes/class.cooked-recipe-meta.php:970 +#: includes/class.cooked-recipe-meta.php:1047 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:984 +#: includes/class.cooked-recipe-meta.php:1061 #, 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:988 +#: includes/class.cooked-recipe-meta.php:1065 #, 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:993 +#: includes/class.cooked-recipe-meta.php:1070 msgid "Gallery Items" msgstr "" -#: includes/class.cooked-recipe-meta.php:1024 +#: includes/class.cooked-recipe-meta.php:1101 msgid "Recipe Information" msgstr "" -#: includes/class.cooked-recipe-meta.php:1025 +#: includes/class.cooked-recipe-meta.php:1102 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:1034 -#: includes/class.cooked-recipe-meta.php:1044 +#: includes/class.cooked-recipe-meta.php:1111 +#: includes/class.cooked-recipe-meta.php:1121 #, php-format msgid "\"%1$s\" and \"%2$s\"" msgstr "" -#: includes/class.cooked-recipe-meta.php:1036 +#: includes/class.cooked-recipe-meta.php:1113 msgid "This will allow you to include or exclude content from the shortcode output." msgstr "" -#: includes/class.cooked-recipe-meta.php:1045 +#: includes/class.cooked-recipe-meta.php:1122 msgid "Used like \"include\", but will position the content to the left or right." msgstr "" -#: includes/class.cooked-recipe-meta.php:1055 -#: includes/class.cooked-recipe-meta.php:1101 #: includes/class.cooked-recipe-meta.php:1132 -#: includes/class.cooked-recipe-meta.php:1157 -#: includes/class.cooked-recipe-meta.php:1181 -#: includes/class.cooked-recipe-meta.php:1241 -#: includes/class.cooked-recipe-meta.php:1286 -#: includes/class.cooked-recipe-meta.php:1316 -#: includes/class.cooked-recipe-meta.php:1361 +#: includes/class.cooked-recipe-meta.php:1178 +#: includes/class.cooked-recipe-meta.php:1209 +#: includes/class.cooked-recipe-meta.php:1234 +#: includes/class.cooked-recipe-meta.php:1258 +#: includes/class.cooked-recipe-meta.php:1318 +#: includes/class.cooked-recipe-meta.php:1363 +#: includes/class.cooked-recipe-meta.php:1393 +#: includes/class.cooked-recipe-meta.php:1438 +#: includes/class.cooked-recipe-meta.php:1564 msgid "Available Variables" msgstr "" -#: includes/class.cooked-recipe-meta.php:1059 -#: includes/class.cooked-settings.php:215 -#: includes/class.cooked-shortcodes.php:445 -#: includes/class.cooked-shortcodes.php:623 +#: includes/class.cooked-recipe-meta.php:1136 +#: includes/class.cooked-settings.php:228 +#: includes/class.cooked-shortcodes.php:446 +#: includes/class.cooked-shortcodes.php:624 msgid "Author" msgstr "" -#: includes/class.cooked-recipe-meta.php:1063 -#: includes/class.cooked-shortcodes.php:446 -#: includes/class.cooked-shortcodes.php:634 +#: includes/class.cooked-recipe-meta.php:1140 +#: includes/class.cooked-shortcodes.php:447 +#: includes/class.cooked-shortcodes.php:635 msgid "Difficulty" msgstr "" -#: includes/class.cooked-recipe-meta.php:1064 +#: includes/class.cooked-recipe-meta.php:1141 msgid "Servings Switcher" msgstr "" -#: includes/class.cooked-recipe-meta.php:1065 -#: includes/class.cooked-settings.php:216 -#: includes/class.cooked-shortcodes.php:717 -#: includes/class.cooked-shortcodes.php:720 +#: includes/class.cooked-recipe-meta.php:1142 +#: includes/class.cooked-settings.php:229 +#: includes/class.cooked-shortcodes.php:718 +#: includes/class.cooked-shortcodes.php:721 #: includes/class.cooked-taxonomies.php:39 msgid "Category" msgstr "" -#: includes/class.cooked-recipe-meta.php:1066 +#: includes/class.cooked-recipe-meta.php:1143 msgid "Print Mode" msgstr "" -#: includes/class.cooked-recipe-meta.php:1067 +#: includes/class.cooked-recipe-meta.php:1144 msgid "Full-Screen Mode" msgstr "" -#: includes/class.cooked-recipe-meta.php:1087 +#: includes/class.cooked-recipe-meta.php:1164 msgid "This will display the list of ingredients, added via the \"Ingredients\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1093 +#: includes/class.cooked-recipe-meta.php:1170 msgid "This will allow you to hide or show the checkboxes:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1103 +#: includes/class.cooked-recipe-meta.php:1180 msgid "Show checkboxes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1104 +#: includes/class.cooked-recipe-meta.php:1181 msgid "Hide checkboxes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1118 +#: includes/class.cooked-recipe-meta.php:1195 msgid "This will display the list of directions, added via the \"Directions\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1124 +#: includes/class.cooked-recipe-meta.php:1201 msgid "This will allow you to hide or show the numbers:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1134 +#: includes/class.cooked-recipe-meta.php:1211 msgid "Show numbers" msgstr "" -#: includes/class.cooked-recipe-meta.php:1135 +#: includes/class.cooked-recipe-meta.php:1212 msgid "Hide numbers" msgstr "" -#: includes/class.cooked-recipe-meta.php:1148 +#: includes/class.cooked-recipe-meta.php:1225 msgid "Featured Image" msgstr "" -#: includes/class.cooked-recipe-meta.php:1149 +#: includes/class.cooked-recipe-meta.php:1226 msgid "This will display the featured image, if one is set." msgstr "" -#: includes/class.cooked-recipe-meta.php:1159 -#: includes/class.cooked-recipe-meta.php:1183 -#: includes/class.cooked-recipe-meta.php:1288 +#: includes/class.cooked-recipe-meta.php:1236 +#: includes/class.cooked-recipe-meta.php:1260 +#: includes/class.cooked-recipe-meta.php:1365 msgid "None" msgstr "" -#: includes/class.cooked-recipe-meta.php:1172 +#: includes/class.cooked-recipe-meta.php:1249 msgid "Nutrition Label" msgstr "" -#: includes/class.cooked-recipe-meta.php:1173 +#: includes/class.cooked-recipe-meta.php:1250 msgid "This will display the Nutrition Facts label, if data is present." msgstr "" -#: includes/class.cooked-recipe-meta.php:1199 +#: includes/class.cooked-recipe-meta.php:1276 msgid "This will display the gallery, if one is set or created from the \"Gallery\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1207 +#: includes/class.cooked-recipe-meta.php:1284 msgid "Set the width of the gallery." msgstr "" -#: includes/class.cooked-recipe-meta.php:1214 +#: includes/class.cooked-recipe-meta.php:1291 msgid "Set the image size ratio." msgstr "" -#: includes/class.cooked-recipe-meta.php:1224 +#: includes/class.cooked-recipe-meta.php:1301 msgid "Set the navigation style." msgstr "" -#: includes/class.cooked-recipe-meta.php:1231 +#: includes/class.cooked-recipe-meta.php:1308 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:1246 +#: includes/class.cooked-recipe-meta.php:1323 #, 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:1251 +#: includes/class.cooked-recipe-meta.php:1328 #, 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:1256 +#: includes/class.cooked-recipe-meta.php:1333 #, 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:1261 +#: includes/class.cooked-recipe-meta.php:1338 #, php-format msgid "\"%1$s\" or \"%2$s\"" msgstr "" -#: includes/class.cooked-recipe-meta.php:1278 +#: includes/class.cooked-recipe-meta.php:1355 msgid "This will display the excerpt, if one is available from the \"Layout & Content\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1302 +#: includes/class.cooked-recipe-meta.php:1379 msgid "This will display the notes, if one is available from the \"Layout & Content\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1308 +#: includes/class.cooked-recipe-meta.php:1385 msgid "This will allow you to hide or show the header for the notes section:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1318 +#: includes/class.cooked-recipe-meta.php:1395 msgid "Show header" msgstr "" -#: includes/class.cooked-recipe-meta.php:1319 +#: includes/class.cooked-recipe-meta.php:1396 msgid "Hide header" msgstr "" -#: includes/class.cooked-recipe-meta.php:1333 +#: includes/class.cooked-recipe-meta.php:1410 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:1342 +#: includes/class.cooked-recipe-meta.php:1419 #, php-format msgid "\"%1$s\", \"%2$s\" and \"%3$s\"" msgstr "" -#: includes/class.cooked-recipe-meta.php:1344 +#: includes/class.cooked-recipe-meta.php:1421 msgid "Use just one or a combination of all three to set the timer length" msgstr "" -#: includes/class.cooked-recipe-meta.php:1351 +#: includes/class.cooked-recipe-meta.php:1428 msgid "Add a short description for this timer, if applicable." msgstr "" -#: includes/class.cooked-recipe-meta.php:1363 +#: includes/class.cooked-recipe-meta.php:1440 msgid "Time in seconds" msgstr "" -#: includes/class.cooked-recipe-meta.php:1364 +#: includes/class.cooked-recipe-meta.php:1441 msgid "Time in minutes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1365 +#: includes/class.cooked-recipe-meta.php:1442 msgid "Time in hours" msgstr "" -#: includes/class.cooked-recipe-meta.php:1366 +#: includes/class.cooked-recipe-meta.php:1443 msgid "Timer Description" msgstr "" @@ -1427,7 +1428,7 @@ msgid "Triple (%s Servings)" msgstr "" #: includes/class.cooked-recipes.php:792 -#: includes/class.cooked-shortcodes.php:447 +#: includes/class.cooked-shortcodes.php:448 msgid "Yields" msgstr "" @@ -1441,51 +1442,51 @@ msgstr[0] "" msgstr[1] "" #. translators: singular and plural "steps" -#: includes/class.cooked-recipes.php:921 +#: includes/class.cooked-recipes.php:962 #: includes/class.cooked-seo.php:83 #, php-format msgid "Step %d" msgstr "" -#: includes/class.cooked-recipes.php:981 +#: includes/class.cooked-recipes.php:1022 msgid "Browse" msgstr "" -#: includes/class.cooked-recipes.php:998 -#: includes/class.cooked-settings.php:144 +#: includes/class.cooked-recipes.php:1040 +#: includes/class.cooked-settings.php:157 msgid "No categories" msgstr "" -#: includes/class.cooked-recipes.php:1001 -#: includes/class.cooked-settings.php:191 +#: includes/class.cooked-recipes.php:1043 +#: includes/class.cooked-settings.php:204 #: includes/class.cooked-taxonomies.php:38 #: includes/class.cooked-taxonomies.php:48 msgid "Categories" msgstr "" -#: includes/class.cooked-recipes.php:1003 +#: includes/class.cooked-recipes.php:1045 #: includes/class.cooked-taxonomies.php:41 #: includes/widgets/recipe-categories.php:48 msgid "All Categories" msgstr "" -#: includes/class.cooked-recipes.php:1073 +#: includes/class.cooked-recipes.php:1116 msgid "Find a recipe..." msgstr "" -#: includes/class.cooked-recipes.php:1088 +#: includes/class.cooked-recipes.php:1131 msgid "Newest first" msgstr "" -#: includes/class.cooked-recipes.php:1092 +#: includes/class.cooked-recipes.php:1135 msgid "Oldest first" msgstr "" -#: includes/class.cooked-recipes.php:1096 +#: includes/class.cooked-recipes.php:1139 msgid "Alphabetical (A-Z)" msgstr "" -#: includes/class.cooked-recipes.php:1100 +#: includes/class.cooked-recipes.php:1143 msgid "Alphabetical (Z-A)" msgstr "" @@ -1493,323 +1494,323 @@ msgstr "" msgid "Recipe Editor" msgstr "" -#: includes/class.cooked-settings.php:85 +#: includes/class.cooked-settings.php:98 msgid "Cooked settings has been updated!" msgstr "" -#: includes/class.cooked-settings.php:144 +#: includes/class.cooked-settings.php:157 msgid "No default" msgstr "" -#: includes/class.cooked-settings.php:164 +#: includes/class.cooked-settings.php:177 msgid "General" msgstr "" -#: includes/class.cooked-settings.php:106 -#: includes/class.cooked-settings.php:168 +#: includes/class.cooked-settings.php:119 +#: includes/class.cooked-settings.php:181 msgid "Browse/Search Recipes Page" msgstr "" #. translators: a description on how to add the [cooked-browse] shortcode to a page -#: includes/class.cooked-settings.php:170 +#: includes/class.cooked-settings.php:183 #, php-format msgid "Create a page with the %s shortcode on it, then choose it from this dropdown." msgstr "" -#: includes/class.cooked-settings.php:176 +#: includes/class.cooked-settings.php:189 msgid "Recipes Per Page" msgstr "" #. translators: a description on how to choose the default number of recipes per page. -#: includes/class.cooked-settings.php:178 +#: includes/class.cooked-settings.php:191 #, php-format msgid "Choose the default (set via the %s panel) or choose a different number here." msgstr "" #. translators: a description on how to choose the default number of recipes per page. -#: includes/class.cooked-settings.php:178 +#: includes/class.cooked-settings.php:191 msgid "Settings > Reading" msgstr "" -#: includes/class.cooked-settings.php:184 +#: includes/class.cooked-settings.php:197 msgid "Recipe Taxonomies" msgstr "" -#: includes/class.cooked-settings.php:185 +#: includes/class.cooked-settings.php:198 msgid "Choose which taxonomies you want to enable for your recipes." msgstr "" -#: includes/class.cooked-settings.php:196 +#: includes/class.cooked-settings.php:209 msgid "Global Recipe Toggles" msgstr "" -#: includes/class.cooked-settings.php:197 +#: includes/class.cooked-settings.php:210 msgid "You can quickly hide or show different recipe elements (site-wide) with these checkboxes." msgstr "" -#: includes/class.cooked-settings.php:228 +#: includes/class.cooked-settings.php:241 msgid "Carbs Format" msgstr "" -#: includes/class.cooked-settings.php:229 +#: includes/class.cooked-settings.php:242 msgid "You can display carbs as \"Total\" or \"Net\"." msgstr "" -#: includes/class.cooked-settings.php:235 +#: includes/class.cooked-settings.php:248 msgid "Total Carbs" msgstr "" -#: includes/class.cooked-settings.php:236 +#: includes/class.cooked-settings.php:249 msgid "Net Carbs" msgstr "" -#: includes/class.cooked-settings.php:241 +#: includes/class.cooked-settings.php:254 msgid "Author Name Format" msgstr "" -#: includes/class.cooked-settings.php:242 +#: includes/class.cooked-settings.php:255 msgid "You can show the full author's name or just a part of it." msgstr "" -#: includes/class.cooked-settings.php:248 +#: includes/class.cooked-settings.php:261 msgid "Full name" msgstr "" -#: includes/class.cooked-settings.php:249 +#: includes/class.cooked-settings.php:262 msgid "Full first name w/last name initial" msgstr "" -#: includes/class.cooked-settings.php:250 +#: includes/class.cooked-settings.php:263 msgid "First name initial w/full last name" msgstr "" -#: includes/class.cooked-settings.php:251 +#: includes/class.cooked-settings.php:264 msgid "First name only" msgstr "" -#: includes/class.cooked-settings.php:256 +#: includes/class.cooked-settings.php:269 msgid "Author Links" msgstr "" -#: includes/class.cooked-settings.php:257 +#: includes/class.cooked-settings.php:270 msgid "If you do not want the author names to link to the author recipe listings, you can disable them here." msgstr "" -#: includes/class.cooked-settings.php:264 +#: includes/class.cooked-settings.php:277 msgid "Disable Author Links" msgstr "" -#: includes/class.cooked-settings.php:269 +#: includes/class.cooked-settings.php:282 msgid "Default Category" msgstr "" #. translators: a description on how to set the default recipe category for the [cooked-browse] shortcode. -#: includes/class.cooked-settings.php:271 +#: includes/class.cooked-settings.php:284 #, php-format msgid "Optionally set the default recipe category for your %s shortcode display." msgstr "" -#: includes/class.cooked-settings.php:277 +#: includes/class.cooked-settings.php:290 msgid "Default Sort Order" msgstr "" #. translators: a description on how to set the default sort order for the [cooked-browse] shortcode. -#: includes/class.cooked-settings.php:279 +#: includes/class.cooked-settings.php:292 #, php-format msgid "Set the default sort order for your %s shortcode display." msgstr "" -#: includes/class.cooked-settings.php:285 +#: includes/class.cooked-settings.php:298 msgid "Newest First" msgstr "" -#: includes/class.cooked-settings.php:286 +#: includes/class.cooked-settings.php:299 msgid "Oldest First" msgstr "" -#: includes/class.cooked-settings.php:287 +#: includes/class.cooked-settings.php:300 msgid "Alphabetical" msgstr "" -#: includes/class.cooked-settings.php:288 +#: includes/class.cooked-settings.php:301 msgid "Alphabetical (reversed)" msgstr "" -#: includes/class.cooked-settings.php:311 +#: includes/class.cooked-settings.php:324 msgid "WP Editor Roles" msgstr "" -#: includes/class.cooked-settings.php:312 +#: includes/class.cooked-settings.php:325 msgid "Choose which user roles can use the WP Editor for the Excerpt, Directions & Notes fields." msgstr "" -#: includes/class.cooked-settings.php:318 +#: includes/class.cooked-settings.php:331 msgid "Advanced Settings" msgstr "" #. translators: an option to only show recipes with the [cooked-recipe] shortcode. -#: includes/class.cooked-settings.php:328 +#: includes/class.cooked-settings.php:341 msgid "Disable Public Recipes" msgstr "" #. translators: an option to only show recipes with the [cooked-recipe] shortcode. -#: includes/class.cooked-settings.php:328 +#: includes/class.cooked-settings.php:341 #, php-format msgid "Only show recipes using the %s shortcode." msgstr "" #. translators: an option to disable "meta" tags. -#: includes/class.cooked-settings.php:330 +#: includes/class.cooked-settings.php:343 #, php-format msgid "Disable %s Tags" msgstr "" #. translators: an option to disable "meta" tags. -#: includes/class.cooked-settings.php:330 +#: includes/class.cooked-settings.php:343 msgid "Prevents duplicates when tags already exist." msgstr "" -#: includes/class.cooked-settings.php:331 +#: includes/class.cooked-settings.php:344 msgid "Disable \"Servings Switcher\"" msgstr "" -#: includes/class.cooked-settings.php:331 +#: includes/class.cooked-settings.php:344 msgid "Removes the servings dropdown on recipes." msgstr "" -#: includes/class.cooked-settings.php:332 +#: includes/class.cooked-settings.php:345 msgid "Disable Recipe Schema Output" msgstr "" -#: includes/class.cooked-settings.php:332 +#: includes/class.cooked-settings.php:345 msgid "You should only do this if you're using something else to output schema information." msgstr "" -#: includes/class.cooked-settings.php:333 +#: includes/class.cooked-settings.php:346 msgid "Disable Recipe Archive Page" msgstr "" -#: includes/class.cooked-settings.php:333 +#: includes/class.cooked-settings.php:346 msgid "Prevents the recipe archive from being displayed." msgstr "" -#: includes/class.cooked-settings.php:340 +#: includes/class.cooked-settings.php:353 msgid "Design" msgstr "" -#: includes/class.cooked-settings.php:344 +#: includes/class.cooked-settings.php:357 msgid "Dark Mode" msgstr "" -#: includes/class.cooked-settings.php:345 +#: includes/class.cooked-settings.php:358 msgid "If your site has a dark background, you should enable \"Dark Mode\" so that Cooked can match this style." msgstr "" -#: includes/class.cooked-settings.php:351 +#: includes/class.cooked-settings.php:364 msgid "Enable \"Dark Mode\"" msgstr "" -#: includes/class.cooked-settings.php:356 +#: includes/class.cooked-settings.php:369 msgid "Author Images" msgstr "" -#: includes/class.cooked-settings.php:357 +#: includes/class.cooked-settings.php:370 msgid "If you do not want to display the author images (avatars), you can disable them here." msgstr "" -#: includes/class.cooked-settings.php:364 +#: includes/class.cooked-settings.php:377 msgid "Hide Author Images" msgstr "" -#: includes/class.cooked-settings.php:369 +#: includes/class.cooked-settings.php:382 msgid "Main Color" msgstr "" -#: includes/class.cooked-settings.php:370 +#: includes/class.cooked-settings.php:383 msgid "Used on buttons, cooking timer, etc." msgstr "" -#: includes/class.cooked-settings.php:376 +#: includes/class.cooked-settings.php:389 msgid "Main Color (on hover)" msgstr "" -#: includes/class.cooked-settings.php:377 +#: includes/class.cooked-settings.php:390 msgid "Used when hovering over buttons." msgstr "" -#: includes/class.cooked-settings.php:383 +#: includes/class.cooked-settings.php:396 msgid "First Responsive Breakpoint" msgstr "" -#: includes/class.cooked-settings.php:384 +#: includes/class.cooked-settings.php:397 msgid "Set the first responsive breakpoint. Best for large tablets." msgstr "" -#: includes/class.cooked-settings.php:390 +#: includes/class.cooked-settings.php:403 msgid "Second Responsive Breakpoint" msgstr "" -#: includes/class.cooked-settings.php:391 +#: includes/class.cooked-settings.php:404 msgid "Set the second responsive breakpoint. Best for small tablets." msgstr "" -#: includes/class.cooked-settings.php:397 +#: includes/class.cooked-settings.php:410 msgid "Third Responsive Breakpoint" msgstr "" -#: includes/class.cooked-settings.php:398 +#: includes/class.cooked-settings.php:411 msgid "Set the third responsive breakpoint. Best for phones and other small devices." msgstr "" -#: includes/class.cooked-settings.php:406 +#: includes/class.cooked-settings.php:419 msgid "Permalinks" msgstr "" -#: includes/class.cooked-settings.php:410 +#: includes/class.cooked-settings.php:423 msgid "Recipe Permalink" msgstr "" -#: includes/class.cooked-settings.php:413 +#: includes/class.cooked-settings.php:426 msgid "recipe-name" msgstr "" -#: includes/class.cooked-settings.php:417 +#: includes/class.cooked-settings.php:430 msgid "Recipe Author Permalink" msgstr "" -#: includes/class.cooked-settings.php:420 +#: includes/class.cooked-settings.php:433 msgid "author-name" msgstr "" -#: includes/class.cooked-settings.php:424 +#: includes/class.cooked-settings.php:437 msgid "Recipe Category Permalink" msgstr "" -#: includes/class.cooked-settings.php:427 +#: includes/class.cooked-settings.php:440 msgid "recipe-category-name" msgstr "" #. translators: posts_per_page default -#: includes/class.cooked-settings.php:438 +#: includes/class.cooked-settings.php:451 #, php-format msgid "WordPress Default %s" msgstr "" -#: includes/class.cooked-settings.php:443 +#: includes/class.cooked-settings.php:456 msgid "Show All (no pagination)" msgstr "" -#: includes/class.cooked-settings.php:587 +#: includes/class.cooked-settings.php:600 msgid "Begin Migration" msgstr "" #. translators: referring to the bottom of the Settings page. -#: includes/class.cooked-shortcodes.php:149 +#: includes/class.cooked-shortcodes.php:150 #, php-format msgid "Public recipes are currently disabled. You can change this at the bottom of the %s page." msgstr "" -#: includes/class.cooked-shortcodes.php:297 +#: includes/class.cooked-shortcodes.php:298 msgid "(recipe not found or in draft status)" msgstr "" @@ -2104,14 +2105,14 @@ msgstr "" msgid "Recipes by %s" msgstr "" -#: templates/front/recipe-list.php:38 +#: templates/front/recipe-list.php:39 msgid "View all recipes" msgstr "" -#: includes/class.cooked-recipe-meta.php:512 -#: includes/class.cooked-recipe-meta.php:629 -#: includes/class.cooked-recipe-meta.php:701 -#: includes/class.cooked-recipe-meta.php:793 +#: includes/class.cooked-recipe-meta.php:551 +#: includes/class.cooked-recipe-meta.php:706 +#: includes/class.cooked-recipe-meta.php:778 +#: includes/class.cooked-recipe-meta.php:870 msgid "Heading Element:" msgstr "" @@ -2128,52 +2129,52 @@ msgstr "" msgid "deciliters" msgstr "" -#: includes/class.cooked-settings.php:293 +#: includes/class.cooked-settings.php:306 msgid "Section Heading Default HTML Tag" msgstr "" #. translators: a description on how to set the default sort order for the [cooked-browse] shortcode. -#: includes/class.cooked-settings.php:295 +#: includes/class.cooked-settings.php:308 msgid "Set the default HTML tag for your section headings." msgstr "" -#: includes/class.cooked-settings.php:301 +#: includes/class.cooked-settings.php:314 msgid "div" msgstr "" -#: includes/class.cooked-settings.php:302 +#: includes/class.cooked-settings.php:315 msgid "h2" msgstr "" -#: includes/class.cooked-settings.php:303 +#: includes/class.cooked-settings.php:316 msgid "h3" msgstr "" -#: includes/class.cooked-settings.php:304 +#: includes/class.cooked-settings.php:317 msgid "h4" msgstr "" -#: includes/class.cooked-settings.php:305 +#: includes/class.cooked-settings.php:318 msgid "h5" msgstr "" -#: includes/class.cooked-settings.php:306 +#: includes/class.cooked-settings.php:319 msgid "h6" msgstr "" -#: includes/class.cooked-recipes.php:1075 +#: includes/class.cooked-recipes.php:1118 msgid "Search" msgstr "" -#: includes/class.cooked-shortcodes.php:661 +#: includes/class.cooked-shortcodes.php:662 msgid "Fullscreen" msgstr "" -#: includes/class.cooked-settings.php:143 +#: includes/class.cooked-settings.php:156 msgid "Choose a page..." msgstr "" -#: includes/class.cooked-settings.php:143 +#: includes/class.cooked-settings.php:156 msgid "No pages" msgstr "" @@ -2198,20 +2199,225 @@ msgstr "" msgid "Error importing WP Recipe Maker recipe." msgstr "" -#: includes/class.cooked-settings.php:104 +#: includes/class.cooked-settings.php:117 msgid "Cooked Plugin Setup" msgstr "" -#: includes/class.cooked-settings.php:105 +#: includes/class.cooked-settings.php:118 #, php-format msgid "To display your recipes properly, please set up your %s." msgstr "" #. translators: a description on how to add the [cooked-browse] shortcode to a page -#: includes/class.cooked-settings.php:170 +#: includes/class.cooked-settings.php:183 msgid "Note: This setting is required for the plugin to function properly." msgstr "" -#: includes/class.cooked-settings.php:257 +#: includes/class.cooked-settings.php:270 msgid "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 +msgid "Substitution:" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:536 +#: includes/class.cooked-recipe-meta.php:628 +#: includes/class.cooked-recipe-meta.php:694 +msgid "ex. Apple Sauce, Tofu, etc." +msgstr "" + +#: includes/class.cooked-recipes.php:904 +#: includes/class.cooked-recipes.php:918 +msgid "or" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1456 +msgid "Next & Previous Recipe Navigation" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1457 +msgid "This will display navigation links to the next and previous recipes." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1461 +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:1466 +msgid "Usage" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1468 +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:1481 +#: includes/class.cooked-related-recipes.php:73 +msgid "Related Recipes" +msgstr "" + +#: includes/class.cooked-shortcodes.php:1130 +msgid "Recipe not found." +msgstr "" + +#: includes/class.cooked-shortcodes.php:1146 +msgid "No related recipes found." +msgstr "" + +#: includes/class.cooked-multilingual.php:260 +msgid "Multilingual Setup:" +msgstr "" + +#: includes/class.cooked-multilingual.php:261 +msgid "Your Browse/Search Recipes page is missing translations for:" +msgstr "" + +#. translators: %s is the multilingual plugin name (Polylang or WPML) +#: includes/class.cooked-multilingual.php:266 +#, php-format +msgid "Create translations of your browse page in %s for full multilingual support." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1482 +msgid "This will display a grid of related recipes based on categories, cuisines, ingredients, and other factors." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1490 +msgid "Specify a recipe ID. If not provided, uses the current recipe." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1497 +msgid "Set the heading text for the related recipes section." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1507 +msgid "Number of recipes to display (default: 6)." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1514 +msgid "Number of columns in the grid (default: 3)." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1524 +msgid "Hide recipe card images." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1531 +msgid "Hide recipe card excerpts." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1541 +msgid "Hide recipe card authors." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1548 +msgid "Enable/disable matching by categories, cuisines, ingredients, etc. (default: true for most)." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1555 +msgid "Matching Options:" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1556 +msgid "Control which factors are used to find related recipes: match_categories, match_cuisines, match_cooking_methods, match_tags, match_diets, match_ingredients, match_author, match_difficulty." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1558 +msgid "Weight Options:" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1559 +msgid "Adjust the importance of each matching factor: category_weight, cuisine_weight, cooking_method_weight, tag_weight, diet_weight, ingredient_weight, author_weight, difficulty_weight." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1566 +msgid "Recipe ID" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1567 +msgid "Section heading" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1568 +msgid "Number of recipes" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1569 +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 +msgid "true/false" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1574 +msgid "Numeric value" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1576 +msgid "Example" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:151 +msgid "Pre-calculate related recipes for all published recipes? This may take a while on large sites." +msgstr "" + +#. translators: 1: date and time, 2: number of recipes +#: includes/class.cooked-admin-enqueues.php:153 +#: includes/class.cooked-settings.php:617 +#, php-format +msgid "Last: %1$s · %2$s recipes" +msgstr "" + +#: includes/class.cooked-related-recipes.php:41 +msgid "Tools" +msgstr "" + +#: includes/class.cooked-related-recipes.php:45 +#: includes/class.cooked-settings.php:621 +msgid "Calculate Related Recipes" +msgstr "" + +#: includes/class.cooked-related-recipes.php:46 +msgid "Pre-calculate related recipes for every published recipe. Uses default shortcode options. Run this after importing or adding many recipes, or when the cache was cleared. One recipe is processed per step to avoid memory issues on large sites." +msgstr "" + +#: includes/class.cooked-settings.php:626 +msgid "Done." +msgstr "" + +#: includes/class.cooked-settings.php:626 +msgid "Related recipes cached." +msgstr "" + +#: includes/class.cooked-shortcodes.php:1113 +msgid "Invalid recipe ID specified. Please provide a valid numeric recipe ID." +msgstr "" + +#: includes/class.cooked-shortcodes.php:1123 +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:1134 +#, php-format +msgid "The specified ID (%d) is not a recipe." +msgstr "" + +#: includes/class.cooked-shortcodes.php:1136 +#, php-format +msgid "No post found with ID %d." +msgstr "" + +#: includes/class.cooked-shortcodes.php:1149 +msgid "This may be because there are no other recipes in the current language with matching attributes." +msgstr "" + +#: includes/class.cooked-shortcodes.php:1151 +msgid "Try adjusting the matching criteria or ensure you have other published recipes with shared categories, tags, or ingredients." +msgstr "" diff --git a/languages/cooked.pot b/languages/cooked.pot index 355fb31..79380de 100644 --- a/languages/cooked.pot +++ b/languages/cooked.pot @@ -1,15 +1,15 @@ -# Copyright (C) 2025 Gora Tech +# Copyright (C) 2026 Gora Tech # This file is distributed under the GPL2. msgid "" msgstr "" -"Project-Id-Version: Cooked - Recipe Management 1.11.2\n" +"Project-Id-Version: Cooked - Recipe Management 1.12.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: 2025-09-27T12:25:34-04:00\n" +"POT-Creation-Date: 2026-01-28T10:29:58-05: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:681 -#: includes/class.cooked-recipe-meta.php:736 -#: includes/class.cooked-recipe-meta.php:776 +#: includes/class.cooked-recipe-meta.php:758 +#: includes/class.cooked-recipe-meta.php:813 +#: includes/class.cooked-recipe-meta.php:853 msgid "Add Image" msgstr "" #: includes/class.cooked-admin-enqueues.php:139 -#: includes/class.cooked-recipe-meta.php:681 +#: includes/class.cooked-recipe-meta.php:758 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:1008 +#: includes/class.cooked-recipe-meta.php:1085 msgid "Add to Gallery" msgstr "" @@ -98,25 +98,36 @@ msgstr "" msgid "Please confirm that you are ready to import all recipes." msgstr "" +#: includes/class.cooked-admin-enqueues.php:151 +msgid "Pre-calculate related recipes for all published recipes? This may take a while on large sites." +msgstr "" + +#. translators: 1: date and time, 2: number of recipes +#: includes/class.cooked-admin-enqueues.php:153 +#: includes/class.cooked-settings.php:617 +#, php-format +msgid "Last: %1$s · %2$s recipes" +msgstr "" + #: includes/class.cooked-admin-menus.php:36 #: includes/class.cooked-admin-menus.php:59 -#: includes/class.cooked-post-types.php:421 -#: includes/class.cooked-post-types.php:433 -#: includes/class.cooked-users.php:154 +#: includes/class.cooked-post-types.php:450 +#: includes/class.cooked-post-types.php:462 +#: includes/class.cooked-users.php:166 msgid "Recipes" msgstr "" #: includes/class.cooked-admin-menus.php:37 #: includes/class.cooked-admin-menus.php:61 -#: includes/class.cooked-post-types.php:423 +#: includes/class.cooked-post-types.php:452 msgid "Add New" msgstr "" #. translators: referring to the bottom of the Settings page. #: includes/class.cooked-admin-menus.php:45 #: includes/class.cooked-admin-menus.php:65 -#: includes/class.cooked-recipe-meta.php:98 -#: includes/class.cooked-shortcodes.php:149 +#: includes/class.cooked-recipe-meta.php:117 +#: includes/class.cooked-shortcodes.php:150 #: templates/admin/welcome.php:18 msgid "Settings" msgstr "" @@ -135,7 +146,7 @@ msgid "Upgrade to Pro" msgstr "" #: includes/class.cooked-admin-menus.php:60 -#: includes/class.cooked-post-types.php:428 +#: includes/class.cooked-post-types.php:457 msgid "All Recipes" msgstr "" @@ -146,21 +157,21 @@ msgstr "" msgid "You do not have sufficient permissions to access this page." msgstr "" -#: includes/class.cooked-ajax.php:174 +#: includes/class.cooked-ajax.php:179 #: includes/class.cooked-functions.php:134 -#: includes/class.cooked-recipe-meta.php:157 -#: includes/class.cooked-recipe-meta.php:244 -#: includes/class.cooked-recipe-meta.php:1086 +#: includes/class.cooked-recipe-meta.php:176 +#: includes/class.cooked-recipe-meta.php:263 +#: includes/class.cooked-recipe-meta.php:1163 #: includes/class.cooked-recipes.php:636 #: templates/front/recipe.php:34 msgid "Ingredients" msgstr "" -#: includes/class.cooked-ajax.php:174 +#: includes/class.cooked-ajax.php:179 #: includes/class.cooked-functions.php:135 -#: includes/class.cooked-recipe-meta.php:157 -#: includes/class.cooked-recipe-meta.php:250 -#: includes/class.cooked-recipe-meta.php:1117 +#: includes/class.cooked-recipe-meta.php:176 +#: includes/class.cooked-recipe-meta.php:269 +#: includes/class.cooked-recipe-meta.php:1194 #: includes/class.cooked-recipes.php:640 #: templates/front/recipe.php:35 msgid "Directions" @@ -170,8 +181,8 @@ msgstr "" msgid "Error importing WP Delicious recipe." msgstr "" -#: includes/class.cooked-enqueues.php:52 -#: includes/class.cooked-recipe-meta.php:1332 +#: includes/class.cooked-enqueues.php:56 +#: includes/class.cooked-recipe-meta.php:1409 msgid "Timer" msgstr "" @@ -182,7 +193,7 @@ msgid "What's new in %s?" msgstr "" #: includes/class.cooked-functions.php:127 -#: includes/class.cooked-shortcodes.php:655 +#: includes/class.cooked-shortcodes.php:656 msgid "Print" msgstr "" @@ -199,8 +210,8 @@ msgid "Information" msgstr "" #: includes/class.cooked-functions.php:132 -#: includes/class.cooked-recipe-meta.php:1277 -#: includes/class.cooked-settings.php:218 +#: includes/class.cooked-recipe-meta.php:1354 +#: includes/class.cooked-settings.php:231 msgid "Excerpt" msgstr "" @@ -209,15 +220,15 @@ msgid "Images" msgstr "" #: includes/class.cooked-functions.php:136 -#: includes/class.cooked-recipe-meta.php:1301 +#: includes/class.cooked-recipe-meta.php:1378 #: includes/class.cooked-recipes.php:643 -#: includes/class.cooked-settings.php:219 -#: includes/class.cooked-shortcodes.php:774 +#: includes/class.cooked-settings.php:232 +#: includes/class.cooked-shortcodes.php:775 msgid "Notes" msgstr "" #: includes/class.cooked-functions.php:137 -#: includes/class.cooked-recipe-meta.php:256 +#: includes/class.cooked-recipe-meta.php:275 msgid "Nutrition" msgstr "" @@ -320,7 +331,7 @@ msgid "Begin Import" msgstr "" #: includes/class.cooked-import.php:178 -#: includes/class.cooked-settings.php:592 +#: includes/class.cooked-settings.php:605 msgid "reload" msgstr "" @@ -617,7 +628,7 @@ msgstr "" #: includes/class.cooked-measurements.php:202 #: includes/class.cooked-recipes.php:799 -#: includes/class.cooked-settings.php:223 +#: includes/class.cooked-settings.php:236 msgid "Servings" msgstr "" @@ -880,6 +891,20 @@ msgstr[1] "" msgid "click here" msgstr "" +#: includes/class.cooked-multilingual.php:260 +msgid "Multilingual Setup:" +msgstr "" + +#: includes/class.cooked-multilingual.php:261 +msgid "Your Browse/Search Recipes page is missing translations for:" +msgstr "" + +#. translators: %s is the multilingual plugin name (Polylang or WPML) +#: includes/class.cooked-multilingual.php:266 +#, php-format +msgid "Create translations of your browse page in %s for full multilingual support." +msgstr "" + #: includes/class.cooked-plugin-extra.php:31 msgid "Required by Cooked Pro" msgstr "" @@ -888,47 +913,47 @@ msgstr "" msgid "Photo" msgstr "" -#: includes/class.cooked-post-types.php:403 +#: includes/class.cooked-post-types.php:432 msgid "Recipe Archive" msgstr "" -#: includes/class.cooked-post-types.php:422 +#: includes/class.cooked-post-types.php:451 msgid "Recipe" msgstr "" -#: includes/class.cooked-post-types.php:424 +#: includes/class.cooked-post-types.php:453 msgid "Add New Recipe" msgstr "" -#: includes/class.cooked-post-types.php:425 +#: includes/class.cooked-post-types.php:454 msgid "New Recipe" msgstr "" -#: includes/class.cooked-post-types.php:426 +#: includes/class.cooked-post-types.php:455 msgid "Edit Recipe" msgstr "" -#: includes/class.cooked-post-types.php:427 +#: includes/class.cooked-post-types.php:456 msgid "View Recipe" msgstr "" -#: includes/class.cooked-post-types.php:429 +#: includes/class.cooked-post-types.php:458 msgid "Search Recipes" msgstr "" -#: includes/class.cooked-post-types.php:430 +#: includes/class.cooked-post-types.php:459 msgid "No recipes found." msgstr "" -#: includes/class.cooked-post-types.php:431 +#: includes/class.cooked-post-types.php:460 msgid "No recipes found in trash." msgstr "" -#: includes/class.cooked-post-types.php:459 +#: includes/class.cooked-post-types.php:488 msgid "Recipe title ..." msgstr "" -#: includes/class.cooked-post-types.php:477 +#: includes/class.cooked-post-types.php:519 msgid "Cooked Browse Recipes Page" msgstr "" @@ -945,452 +970,573 @@ msgstr "" msgid "Error importing WP Recipe Maker recipe." msgstr "" -#: includes/class.cooked-recipe-meta.php:202 +#: includes/class.cooked-recipe-meta.php:221 msgid "Display Recipe" msgstr "" -#: includes/class.cooked-recipe-meta.php:203 +#: includes/class.cooked-recipe-meta.php:222 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:238 +#: includes/class.cooked-recipe-meta.php:257 msgid "Layout" msgstr "" -#: includes/class.cooked-recipe-meta.php:262 -#: includes/class.cooked-recipe-meta.php:1198 +#: includes/class.cooked-recipe-meta.php:281 +#: includes/class.cooked-recipe-meta.php:1275 msgid "Gallery" msgstr "" -#: includes/class.cooked-recipe-meta.php:268 +#: includes/class.cooked-recipe-meta.php:287 msgid "Shortcodes" msgstr "" -#: includes/class.cooked-recipe-meta.php:325 +#: includes/class.cooked-recipe-meta.php:344 msgid "Recipe Review Required" msgstr "" #. translators: for displaying singular or plural versions depending on the number of recipes. -#: includes/class.cooked-recipe-meta.php:328 +#: includes/class.cooked-recipe-meta.php:347 #, 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:336 +#: includes/class.cooked-recipe-meta.php:355 msgid "Recipe Shortcode" msgstr "" -#: includes/class.cooked-recipe-meta.php:337 +#: includes/class.cooked-recipe-meta.php:356 msgid "You can use the following shortcode to display your recipe anywhere:" msgstr "" -#: includes/class.cooked-recipe-meta.php:351 +#: includes/class.cooked-recipe-meta.php:370 msgid "Recipe Template" msgstr "" -#: includes/class.cooked-recipe-meta.php:351 +#: includes/class.cooked-recipe-meta.php:370 msgid "Default Recipe Template" msgstr "" -#: includes/class.cooked-recipe-meta.php:351 +#: includes/class.cooked-recipe-meta.php:370 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:351 +#: includes/class.cooked-recipe-meta.php:370 msgid "Save as Default" msgstr "" -#: includes/class.cooked-recipe-meta.php:351 +#: includes/class.cooked-recipe-meta.php:370 msgid "Apply to All" msgstr "" -#: includes/class.cooked-recipe-meta.php:351 +#: includes/class.cooked-recipe-meta.php:370 msgid "Reset" msgstr "" -#: includes/class.cooked-recipe-meta.php:351 +#: includes/class.cooked-recipe-meta.php:370 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:369 +#: includes/class.cooked-recipe-meta.php:388 msgid "Recipe Excerpt" msgstr "" -#: includes/class.cooked-recipe-meta.php:369 +#: includes/class.cooked-recipe-meta.php:388 msgid "The excerpt is used on recipe listing templates, where the full recipe should not be displayed." msgstr "" -#: includes/class.cooked-recipe-meta.php:392 +#: includes/class.cooked-recipe-meta.php:411 msgid "SEO Description" msgstr "" -#: includes/class.cooked-recipe-meta.php:392 +#: includes/class.cooked-recipe-meta.php:411 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:403 -#: includes/class.cooked-settings.php:217 +#: includes/class.cooked-recipe-meta.php:422 +#: includes/class.cooked-settings.php:230 msgid "Difficulty Level" msgstr "" -#: includes/class.cooked-recipe-meta.php:412 -#: includes/class.cooked-recipe-meta.php:1060 -#: includes/class.cooked-settings.php:220 -#: includes/class.cooked-shortcodes.php:448 -#: includes/class.cooked-shortcodes.php:670 +#: includes/class.cooked-recipe-meta.php:431 +#: includes/class.cooked-recipe-meta.php:1137 +#: includes/class.cooked-settings.php:233 +#: includes/class.cooked-shortcodes.php:449 +#: includes/class.cooked-shortcodes.php:671 msgid "Prep Time" msgstr "" -#: includes/class.cooked-recipe-meta.php:414 -#: includes/class.cooked-recipe-meta.php:419 -#: includes/class.cooked-recipe-meta.php:424 +#: includes/class.cooked-recipe-meta.php:433 +#: includes/class.cooked-recipe-meta.php:438 +#: includes/class.cooked-recipe-meta.php:443 msgid "minutes" msgstr "" -#: includes/class.cooked-recipe-meta.php:417 -#: includes/class.cooked-recipe-meta.php:1061 -#: includes/class.cooked-settings.php:221 -#: includes/class.cooked-shortcodes.php:449 -#: includes/class.cooked-shortcodes.php:679 +#: includes/class.cooked-recipe-meta.php:436 +#: includes/class.cooked-recipe-meta.php:1138 +#: includes/class.cooked-settings.php:234 +#: includes/class.cooked-shortcodes.php:450 +#: includes/class.cooked-shortcodes.php:680 msgid "Cook Time" msgstr "" -#: includes/class.cooked-recipe-meta.php:422 -#: includes/class.cooked-recipe-meta.php:1062 -#: includes/class.cooked-settings.php:222 -#: includes/class.cooked-shortcodes.php:450 -#: includes/class.cooked-shortcodes.php:690 -#: includes/class.cooked-shortcodes.php:697 +#: includes/class.cooked-recipe-meta.php:441 +#: includes/class.cooked-recipe-meta.php:1139 +#: includes/class.cooked-settings.php:235 +#: includes/class.cooked-shortcodes.php:451 +#: includes/class.cooked-shortcodes.php:691 +#: includes/class.cooked-shortcodes.php:698 msgid "Total Time" msgstr "" -#: includes/class.cooked-recipe-meta.php:430 +#: includes/class.cooked-recipe-meta.php:449 msgid "Recipe Notes" msgstr "" -#: includes/class.cooked-recipe-meta.php:430 +#: includes/class.cooked-recipe-meta.php:449 msgid "The notes are displayed in the recipe." msgstr "" -#: includes/class.cooked-recipe-meta.php:455 +#: includes/class.cooked-recipe-meta.php:474 msgid "Amount" msgstr "" -#: includes/class.cooked-recipe-meta.php:456 +#: includes/class.cooked-recipe-meta.php:475 msgid "Measurement" msgstr "" -#: includes/class.cooked-recipe-meta.php:457 +#: includes/class.cooked-recipe-meta.php:476 msgid "Item" msgstr "" -#: includes/class.cooked-recipe-meta.php:494 -#: includes/class.cooked-recipe-meta.php:567 -#: includes/class.cooked-recipe-meta.php:614 +#: includes/class.cooked-recipe-meta.php:514 +#: includes/class.cooked-recipe-meta.php:606 +#: includes/class.cooked-recipe-meta.php:672 msgid "ex. Eggs, Milk, etc." msgstr "" -#: includes/class.cooked-recipe-meta.php:508 -#: includes/class.cooked-recipe-meta.php:625 -#: includes/class.cooked-recipe-meta.php:697 -#: includes/class.cooked-recipe-meta.php:789 +#: includes/class.cooked-recipe-meta.php:523 +#: includes/class.cooked-recipe-meta.php:615 +#: includes/class.cooked-recipe-meta.php:681 +msgid "Substitution:" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:536 +#: includes/class.cooked-recipe-meta.php:628 +#: includes/class.cooked-recipe-meta.php:694 +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:774 +#: includes/class.cooked-recipe-meta.php:866 msgid "Section Heading" msgstr "" -#: includes/class.cooked-recipe-meta.php:512 -#: includes/class.cooked-recipe-meta.php:629 -#: includes/class.cooked-recipe-meta.php:701 -#: includes/class.cooked-recipe-meta.php:793 +#: includes/class.cooked-recipe-meta.php:551 +#: includes/class.cooked-recipe-meta.php:706 +#: includes/class.cooked-recipe-meta.php:778 +#: includes/class.cooked-recipe-meta.php:870 msgid "Heading Element:" msgstr "" -#: includes/class.cooked-recipe-meta.php:584 +#: includes/class.cooked-recipe-meta.php:642 msgid "Add Ingredient" msgstr "" -#: includes/class.cooked-recipe-meta.php:585 -#: includes/class.cooked-recipe-meta.php:768 +#: includes/class.cooked-recipe-meta.php:643 +#: includes/class.cooked-recipe-meta.php:845 msgid "Add Section Heading" msgstr "" -#: includes/class.cooked-recipe-meta.php:767 +#: includes/class.cooked-recipe-meta.php:844 msgid "Add Direction" msgstr "" -#: includes/class.cooked-recipe-meta.php:824 +#: includes/class.cooked-recipe-meta.php:901 msgid "Nutrition Information" msgstr "" -#: includes/class.cooked-recipe-meta.php:862 -#: includes/class.cooked-shortcodes.php:1061 +#: includes/class.cooked-recipe-meta.php:939 +#: includes/class.cooked-shortcodes.php:1062 msgid "Nutrition Facts" msgstr "" -#: includes/class.cooked-recipe-meta.php:880 -#: includes/class.cooked-shortcodes.php:1029 +#: includes/class.cooked-recipe-meta.php:957 +#: includes/class.cooked-shortcodes.php:1030 msgid "Amount per serving" msgstr "" -#: includes/class.cooked-recipe-meta.php:890 -#: includes/class.cooked-shortcodes.php:1039 +#: includes/class.cooked-recipe-meta.php:967 +#: includes/class.cooked-shortcodes.php:1040 msgid "% Daily Value *" msgstr "" -#: includes/class.cooked-recipe-meta.php:909 -#: includes/class.cooked-shortcodes.php:971 +#: includes/class.cooked-recipe-meta.php:986 +#: includes/class.cooked-shortcodes.php:972 msgid "Includes" msgstr "" -#: includes/class.cooked-recipe-meta.php:941 -#: includes/class.cooked-shortcodes.php:1065 +#: includes/class.cooked-recipe-meta.php:1018 +#: includes/class.cooked-shortcodes.php:1066 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:957 +#: includes/class.cooked-recipe-meta.php:1034 msgid "Recipe Gallery Type" msgstr "" -#: includes/class.cooked-recipe-meta.php:970 +#: includes/class.cooked-recipe-meta.php:1047 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:984 +#: includes/class.cooked-recipe-meta.php:1061 #, 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:988 +#: includes/class.cooked-recipe-meta.php:1065 #, 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:993 +#: includes/class.cooked-recipe-meta.php:1070 msgid "Gallery Items" msgstr "" -#: includes/class.cooked-recipe-meta.php:1024 +#: includes/class.cooked-recipe-meta.php:1101 msgid "Recipe Information" msgstr "" -#: includes/class.cooked-recipe-meta.php:1025 +#: includes/class.cooked-recipe-meta.php:1102 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:1034 -#: includes/class.cooked-recipe-meta.php:1044 +#: includes/class.cooked-recipe-meta.php:1111 +#: includes/class.cooked-recipe-meta.php:1121 #, php-format msgid "\"%1$s\" and \"%2$s\"" msgstr "" -#: includes/class.cooked-recipe-meta.php:1036 +#: includes/class.cooked-recipe-meta.php:1113 msgid "This will allow you to include or exclude content from the shortcode output." msgstr "" -#: includes/class.cooked-recipe-meta.php:1045 +#: includes/class.cooked-recipe-meta.php:1122 msgid "Used like \"include\", but will position the content to the left or right." msgstr "" -#: includes/class.cooked-recipe-meta.php:1055 -#: includes/class.cooked-recipe-meta.php:1101 #: includes/class.cooked-recipe-meta.php:1132 -#: includes/class.cooked-recipe-meta.php:1157 -#: includes/class.cooked-recipe-meta.php:1181 -#: includes/class.cooked-recipe-meta.php:1241 -#: includes/class.cooked-recipe-meta.php:1286 -#: includes/class.cooked-recipe-meta.php:1316 -#: includes/class.cooked-recipe-meta.php:1361 +#: includes/class.cooked-recipe-meta.php:1178 +#: includes/class.cooked-recipe-meta.php:1209 +#: includes/class.cooked-recipe-meta.php:1234 +#: includes/class.cooked-recipe-meta.php:1258 +#: includes/class.cooked-recipe-meta.php:1318 +#: includes/class.cooked-recipe-meta.php:1363 +#: includes/class.cooked-recipe-meta.php:1393 +#: includes/class.cooked-recipe-meta.php:1438 +#: includes/class.cooked-recipe-meta.php:1564 msgid "Available Variables" msgstr "" -#: includes/class.cooked-recipe-meta.php:1059 -#: includes/class.cooked-settings.php:215 -#: includes/class.cooked-shortcodes.php:445 -#: includes/class.cooked-shortcodes.php:623 +#: includes/class.cooked-recipe-meta.php:1136 +#: includes/class.cooked-settings.php:228 +#: includes/class.cooked-shortcodes.php:446 +#: includes/class.cooked-shortcodes.php:624 msgid "Author" msgstr "" -#: includes/class.cooked-recipe-meta.php:1063 -#: includes/class.cooked-shortcodes.php:446 -#: includes/class.cooked-shortcodes.php:634 +#: includes/class.cooked-recipe-meta.php:1140 +#: includes/class.cooked-shortcodes.php:447 +#: includes/class.cooked-shortcodes.php:635 msgid "Difficulty" msgstr "" -#: includes/class.cooked-recipe-meta.php:1064 +#: includes/class.cooked-recipe-meta.php:1141 msgid "Servings Switcher" msgstr "" -#: includes/class.cooked-recipe-meta.php:1065 -#: includes/class.cooked-settings.php:216 -#: includes/class.cooked-shortcodes.php:717 -#: includes/class.cooked-shortcodes.php:720 +#: includes/class.cooked-recipe-meta.php:1142 +#: includes/class.cooked-settings.php:229 +#: includes/class.cooked-shortcodes.php:718 +#: includes/class.cooked-shortcodes.php:721 #: includes/class.cooked-taxonomies.php:39 msgid "Category" msgstr "" -#: includes/class.cooked-recipe-meta.php:1066 +#: includes/class.cooked-recipe-meta.php:1143 msgid "Print Mode" msgstr "" -#: includes/class.cooked-recipe-meta.php:1067 +#: includes/class.cooked-recipe-meta.php:1144 msgid "Full-Screen Mode" msgstr "" -#: includes/class.cooked-recipe-meta.php:1087 +#: includes/class.cooked-recipe-meta.php:1164 msgid "This will display the list of ingredients, added via the \"Ingredients\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1093 +#: includes/class.cooked-recipe-meta.php:1170 msgid "This will allow you to hide or show the checkboxes:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1103 +#: includes/class.cooked-recipe-meta.php:1180 msgid "Show checkboxes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1104 +#: includes/class.cooked-recipe-meta.php:1181 msgid "Hide checkboxes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1118 +#: includes/class.cooked-recipe-meta.php:1195 msgid "This will display the list of directions, added via the \"Directions\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1124 +#: includes/class.cooked-recipe-meta.php:1201 msgid "This will allow you to hide or show the numbers:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1134 +#: includes/class.cooked-recipe-meta.php:1211 msgid "Show numbers" msgstr "" -#: includes/class.cooked-recipe-meta.php:1135 +#: includes/class.cooked-recipe-meta.php:1212 msgid "Hide numbers" msgstr "" -#: includes/class.cooked-recipe-meta.php:1148 +#: includes/class.cooked-recipe-meta.php:1225 msgid "Featured Image" msgstr "" -#: includes/class.cooked-recipe-meta.php:1149 +#: includes/class.cooked-recipe-meta.php:1226 msgid "This will display the featured image, if one is set." msgstr "" -#: includes/class.cooked-recipe-meta.php:1159 -#: includes/class.cooked-recipe-meta.php:1183 -#: includes/class.cooked-recipe-meta.php:1288 +#: includes/class.cooked-recipe-meta.php:1236 +#: includes/class.cooked-recipe-meta.php:1260 +#: includes/class.cooked-recipe-meta.php:1365 msgid "None" msgstr "" -#: includes/class.cooked-recipe-meta.php:1172 +#: includes/class.cooked-recipe-meta.php:1249 msgid "Nutrition Label" msgstr "" -#: includes/class.cooked-recipe-meta.php:1173 +#: includes/class.cooked-recipe-meta.php:1250 msgid "This will display the Nutrition Facts label, if data is present." msgstr "" -#: includes/class.cooked-recipe-meta.php:1199 +#: includes/class.cooked-recipe-meta.php:1276 msgid "This will display the gallery, if one is set or created from the \"Gallery\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1207 +#: includes/class.cooked-recipe-meta.php:1284 msgid "Set the width of the gallery." msgstr "" -#: includes/class.cooked-recipe-meta.php:1214 +#: includes/class.cooked-recipe-meta.php:1291 msgid "Set the image size ratio." msgstr "" -#: includes/class.cooked-recipe-meta.php:1224 +#: includes/class.cooked-recipe-meta.php:1301 msgid "Set the navigation style." msgstr "" -#: includes/class.cooked-recipe-meta.php:1231 +#: includes/class.cooked-recipe-meta.php:1308 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:1246 +#: includes/class.cooked-recipe-meta.php:1323 #, 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:1251 +#: includes/class.cooked-recipe-meta.php:1328 #, 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:1256 +#: includes/class.cooked-recipe-meta.php:1333 #, 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:1261 +#: includes/class.cooked-recipe-meta.php:1338 #, php-format msgid "\"%1$s\" or \"%2$s\"" msgstr "" -#: includes/class.cooked-recipe-meta.php:1278 +#: includes/class.cooked-recipe-meta.php:1355 msgid "This will display the excerpt, if one is available from the \"Layout & Content\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1302 +#: includes/class.cooked-recipe-meta.php:1379 msgid "This will display the notes, if one is available from the \"Layout & Content\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1308 +#: includes/class.cooked-recipe-meta.php:1385 msgid "This will allow you to hide or show the header for the notes section:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1318 +#: includes/class.cooked-recipe-meta.php:1395 msgid "Show header" msgstr "" -#: includes/class.cooked-recipe-meta.php:1319 +#: includes/class.cooked-recipe-meta.php:1396 msgid "Hide header" msgstr "" -#: includes/class.cooked-recipe-meta.php:1333 +#: includes/class.cooked-recipe-meta.php:1410 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:1342 +#: includes/class.cooked-recipe-meta.php:1419 #, php-format msgid "\"%1$s\", \"%2$s\" and \"%3$s\"" msgstr "" -#: includes/class.cooked-recipe-meta.php:1344 +#: includes/class.cooked-recipe-meta.php:1421 msgid "Use just one or a combination of all three to set the timer length" msgstr "" -#: includes/class.cooked-recipe-meta.php:1351 +#: includes/class.cooked-recipe-meta.php:1428 msgid "Add a short description for this timer, if applicable." msgstr "" -#: includes/class.cooked-recipe-meta.php:1363 +#: includes/class.cooked-recipe-meta.php:1440 msgid "Time in seconds" msgstr "" -#: includes/class.cooked-recipe-meta.php:1364 +#: includes/class.cooked-recipe-meta.php:1441 msgid "Time in minutes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1365 +#: includes/class.cooked-recipe-meta.php:1442 msgid "Time in hours" msgstr "" -#: includes/class.cooked-recipe-meta.php:1366 +#: includes/class.cooked-recipe-meta.php:1443 msgid "Timer Description" msgstr "" +#: includes/class.cooked-recipe-meta.php:1456 +msgid "Next & Previous Recipe Navigation" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1457 +msgid "This will display navigation links to the next and previous recipes." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1461 +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:1466 +msgid "Usage" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1468 +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:1481 +#: includes/class.cooked-related-recipes.php:73 +msgid "Related Recipes" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1482 +msgid "This will display a grid of related recipes based on categories, cuisines, ingredients, and other factors." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1490 +msgid "Specify a recipe ID. If not provided, uses the current recipe." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1497 +msgid "Set the heading text for the related recipes section." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1507 +msgid "Number of recipes to display (default: 6)." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1514 +msgid "Number of columns in the grid (default: 3)." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1524 +msgid "Hide recipe card images." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1531 +msgid "Hide recipe card excerpts." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1541 +msgid "Hide recipe card authors." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1548 +msgid "Enable/disable matching by categories, cuisines, ingredients, etc. (default: true for most)." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1555 +msgid "Matching Options:" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1556 +msgid "Control which factors are used to find related recipes: match_categories, match_cuisines, match_cooking_methods, match_tags, match_diets, match_ingredients, match_author, match_difficulty." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1558 +msgid "Weight Options:" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1559 +msgid "Adjust the importance of each matching factor: category_weight, cuisine_weight, cooking_method_weight, tag_weight, diet_weight, ingredient_weight, author_weight, difficulty_weight." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1566 +msgid "Recipe ID" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1567 +msgid "Section heading" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1568 +msgid "Number of recipes" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1569 +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 +msgid "true/false" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1574 +msgid "Numeric value" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1576 +msgid "Example" +msgstr "" + #. translators: stating the recipe author with a "By" in front of it. (ex: "By John Smith") #. translators: referring to the author (ex: By John Smith) #: includes/class.cooked-recipes.php:268 @@ -1471,7 +1617,7 @@ msgid "Triple (%s Servings)" msgstr "" #: includes/class.cooked-recipes.php:792 -#: includes/class.cooked-shortcodes.php:447 +#: includes/class.cooked-shortcodes.php:448 msgid "Yields" msgstr "" @@ -1484,446 +1630,506 @@ msgid_plural "%s Servings" msgstr[0] "" msgstr[1] "" +#: includes/class.cooked-recipes.php:904 +#: includes/class.cooked-recipes.php:918 +msgid "or" +msgstr "" + #. translators: singular and plural "steps" -#: includes/class.cooked-recipes.php:921 +#: includes/class.cooked-recipes.php:962 #: includes/class.cooked-seo.php:83 #, php-format msgid "Step %d" msgstr "" -#: includes/class.cooked-recipes.php:981 +#: includes/class.cooked-recipes.php:1022 msgid "Browse" msgstr "" -#: includes/class.cooked-recipes.php:998 -#: includes/class.cooked-settings.php:144 +#: includes/class.cooked-recipes.php:1040 +#: includes/class.cooked-settings.php:157 msgid "No categories" msgstr "" -#: includes/class.cooked-recipes.php:1001 -#: includes/class.cooked-settings.php:191 +#: includes/class.cooked-recipes.php:1043 +#: includes/class.cooked-settings.php:204 #: includes/class.cooked-taxonomies.php:38 #: includes/class.cooked-taxonomies.php:48 msgid "Categories" msgstr "" -#: includes/class.cooked-recipes.php:1003 +#: includes/class.cooked-recipes.php:1045 #: includes/class.cooked-taxonomies.php:41 #: includes/widgets/recipe-categories.php:48 msgid "All Categories" msgstr "" -#: includes/class.cooked-recipes.php:1073 +#: includes/class.cooked-recipes.php:1116 msgid "Find a recipe..." msgstr "" -#: includes/class.cooked-recipes.php:1075 +#: includes/class.cooked-recipes.php:1118 msgid "Search" msgstr "" -#: includes/class.cooked-recipes.php:1088 +#: includes/class.cooked-recipes.php:1131 msgid "Newest first" msgstr "" -#: includes/class.cooked-recipes.php:1092 +#: includes/class.cooked-recipes.php:1135 msgid "Oldest first" msgstr "" -#: includes/class.cooked-recipes.php:1096 +#: includes/class.cooked-recipes.php:1139 msgid "Alphabetical (A-Z)" msgstr "" -#: includes/class.cooked-recipes.php:1100 +#: includes/class.cooked-recipes.php:1143 msgid "Alphabetical (Z-A)" msgstr "" +#: includes/class.cooked-related-recipes.php:41 +msgid "Tools" +msgstr "" + +#: includes/class.cooked-related-recipes.php:45 +#: includes/class.cooked-settings.php:621 +msgid "Calculate Related Recipes" +msgstr "" + +#: includes/class.cooked-related-recipes.php:46 +msgid "Pre-calculate related recipes for every published recipe. Uses default shortcode options. Run this after importing or adding many recipes, or when the cache was cleared. One recipe is processed per step to avoid memory issues on large sites." +msgstr "" + #: includes/class.cooked-roles.php:22 msgid "Recipe Editor" msgstr "" -#: includes/class.cooked-settings.php:85 +#: includes/class.cooked-settings.php:98 msgid "Cooked settings has been updated!" msgstr "" -#: includes/class.cooked-settings.php:104 +#: includes/class.cooked-settings.php:117 msgid "Cooked Plugin Setup" msgstr "" -#: includes/class.cooked-settings.php:105 +#: includes/class.cooked-settings.php:118 #, php-format msgid "To display your recipes properly, please set up your %s." msgstr "" -#: includes/class.cooked-settings.php:106 -#: includes/class.cooked-settings.php:168 +#: includes/class.cooked-settings.php:119 +#: includes/class.cooked-settings.php:181 msgid "Browse/Search Recipes Page" msgstr "" -#: includes/class.cooked-settings.php:143 +#: includes/class.cooked-settings.php:156 msgid "Choose a page..." msgstr "" -#: includes/class.cooked-settings.php:143 +#: includes/class.cooked-settings.php:156 msgid "No pages" msgstr "" -#: includes/class.cooked-settings.php:144 +#: includes/class.cooked-settings.php:157 msgid "No default" msgstr "" -#: includes/class.cooked-settings.php:164 +#: includes/class.cooked-settings.php:177 msgid "General" msgstr "" #. translators: a description on how to add the [cooked-browse] shortcode to a page -#: includes/class.cooked-settings.php:170 +#: includes/class.cooked-settings.php:183 #, php-format msgid "Create a page with the %s shortcode on it, then choose it from this dropdown." msgstr "" #. translators: a description on how to add the [cooked-browse] shortcode to a page -#: includes/class.cooked-settings.php:170 +#: includes/class.cooked-settings.php:183 msgid "Note: This setting is required for the plugin to function properly." msgstr "" -#: includes/class.cooked-settings.php:176 +#: includes/class.cooked-settings.php:189 msgid "Recipes Per Page" msgstr "" #. translators: a description on how to choose the default number of recipes per page. -#: includes/class.cooked-settings.php:178 +#: includes/class.cooked-settings.php:191 #, php-format msgid "Choose the default (set via the %s panel) or choose a different number here." msgstr "" #. translators: a description on how to choose the default number of recipes per page. -#: includes/class.cooked-settings.php:178 +#: includes/class.cooked-settings.php:191 msgid "Settings > Reading" msgstr "" -#: includes/class.cooked-settings.php:184 +#: includes/class.cooked-settings.php:197 msgid "Recipe Taxonomies" msgstr "" -#: includes/class.cooked-settings.php:185 +#: includes/class.cooked-settings.php:198 msgid "Choose which taxonomies you want to enable for your recipes." msgstr "" -#: includes/class.cooked-settings.php:196 +#: includes/class.cooked-settings.php:209 msgid "Global Recipe Toggles" msgstr "" -#: includes/class.cooked-settings.php:197 +#: includes/class.cooked-settings.php:210 msgid "You can quickly hide or show different recipe elements (site-wide) with these checkboxes." msgstr "" -#: includes/class.cooked-settings.php:228 +#: includes/class.cooked-settings.php:241 msgid "Carbs Format" msgstr "" -#: includes/class.cooked-settings.php:229 +#: includes/class.cooked-settings.php:242 msgid "You can display carbs as \"Total\" or \"Net\"." msgstr "" -#: includes/class.cooked-settings.php:235 +#: includes/class.cooked-settings.php:248 msgid "Total Carbs" msgstr "" -#: includes/class.cooked-settings.php:236 +#: includes/class.cooked-settings.php:249 msgid "Net Carbs" msgstr "" -#: includes/class.cooked-settings.php:241 +#: includes/class.cooked-settings.php:254 msgid "Author Name Format" msgstr "" -#: includes/class.cooked-settings.php:242 +#: includes/class.cooked-settings.php:255 msgid "You can show the full author's name or just a part of it." msgstr "" -#: includes/class.cooked-settings.php:248 +#: includes/class.cooked-settings.php:261 msgid "Full name" msgstr "" -#: includes/class.cooked-settings.php:249 +#: includes/class.cooked-settings.php:262 msgid "Full first name w/last name initial" msgstr "" -#: includes/class.cooked-settings.php:250 +#: includes/class.cooked-settings.php:263 msgid "First name initial w/full last name" msgstr "" -#: includes/class.cooked-settings.php:251 +#: includes/class.cooked-settings.php:264 msgid "First name only" msgstr "" -#: includes/class.cooked-settings.php:256 +#: includes/class.cooked-settings.php:269 msgid "Author Links" msgstr "" -#: includes/class.cooked-settings.php:257 +#: includes/class.cooked-settings.php:270 msgid "If you do not want the author names to link to the author recipe listings, you can disable them here." msgstr "" -#: includes/class.cooked-settings.php:257 +#: includes/class.cooked-settings.php:270 msgid "Note: Author links require the Browse/Search Recipes Page to be set up correctly to function properly." msgstr "" -#: includes/class.cooked-settings.php:264 +#: includes/class.cooked-settings.php:277 msgid "Disable Author Links" msgstr "" -#: includes/class.cooked-settings.php:269 +#: includes/class.cooked-settings.php:282 msgid "Default Category" msgstr "" #. translators: a description on how to set the default recipe category for the [cooked-browse] shortcode. -#: includes/class.cooked-settings.php:271 +#: includes/class.cooked-settings.php:284 #, php-format msgid "Optionally set the default recipe category for your %s shortcode display." msgstr "" -#: includes/class.cooked-settings.php:277 +#: includes/class.cooked-settings.php:290 msgid "Default Sort Order" msgstr "" #. translators: a description on how to set the default sort order for the [cooked-browse] shortcode. -#: includes/class.cooked-settings.php:279 +#: includes/class.cooked-settings.php:292 #, php-format msgid "Set the default sort order for your %s shortcode display." msgstr "" -#: includes/class.cooked-settings.php:285 +#: includes/class.cooked-settings.php:298 msgid "Newest First" msgstr "" -#: includes/class.cooked-settings.php:286 +#: includes/class.cooked-settings.php:299 msgid "Oldest First" msgstr "" -#: includes/class.cooked-settings.php:287 +#: includes/class.cooked-settings.php:300 msgid "Alphabetical" msgstr "" -#: includes/class.cooked-settings.php:288 +#: includes/class.cooked-settings.php:301 msgid "Alphabetical (reversed)" msgstr "" -#: includes/class.cooked-settings.php:293 +#: includes/class.cooked-settings.php:306 msgid "Section Heading Default HTML Tag" msgstr "" #. translators: a description on how to set the default sort order for the [cooked-browse] shortcode. -#: includes/class.cooked-settings.php:295 +#: includes/class.cooked-settings.php:308 msgid "Set the default HTML tag for your section headings." msgstr "" -#: includes/class.cooked-settings.php:301 +#: includes/class.cooked-settings.php:314 msgid "div" msgstr "" -#: includes/class.cooked-settings.php:302 +#: includes/class.cooked-settings.php:315 msgid "h2" msgstr "" -#: includes/class.cooked-settings.php:303 +#: includes/class.cooked-settings.php:316 msgid "h3" msgstr "" -#: includes/class.cooked-settings.php:304 +#: includes/class.cooked-settings.php:317 msgid "h4" msgstr "" -#: includes/class.cooked-settings.php:305 +#: includes/class.cooked-settings.php:318 msgid "h5" msgstr "" -#: includes/class.cooked-settings.php:306 +#: includes/class.cooked-settings.php:319 msgid "h6" msgstr "" -#: includes/class.cooked-settings.php:311 +#: includes/class.cooked-settings.php:324 msgid "WP Editor Roles" msgstr "" -#: includes/class.cooked-settings.php:312 +#: includes/class.cooked-settings.php:325 msgid "Choose which user roles can use the WP Editor for the Excerpt, Directions & Notes fields." msgstr "" -#: includes/class.cooked-settings.php:318 +#: includes/class.cooked-settings.php:331 msgid "Advanced Settings" msgstr "" #. translators: an option to only show recipes with the [cooked-recipe] shortcode. -#: includes/class.cooked-settings.php:328 +#: includes/class.cooked-settings.php:341 msgid "Disable Public Recipes" msgstr "" #. translators: an option to only show recipes with the [cooked-recipe] shortcode. -#: includes/class.cooked-settings.php:328 +#: includes/class.cooked-settings.php:341 #, php-format msgid "Only show recipes using the %s shortcode." msgstr "" #. translators: an option to disable "meta" tags. -#: includes/class.cooked-settings.php:330 +#: includes/class.cooked-settings.php:343 #, php-format msgid "Disable %s Tags" msgstr "" #. translators: an option to disable "meta" tags. -#: includes/class.cooked-settings.php:330 +#: includes/class.cooked-settings.php:343 msgid "Prevents duplicates when tags already exist." msgstr "" -#: includes/class.cooked-settings.php:331 +#: includes/class.cooked-settings.php:344 msgid "Disable \"Servings Switcher\"" msgstr "" -#: includes/class.cooked-settings.php:331 +#: includes/class.cooked-settings.php:344 msgid "Removes the servings dropdown on recipes." msgstr "" -#: includes/class.cooked-settings.php:332 +#: includes/class.cooked-settings.php:345 msgid "Disable Recipe Schema Output" msgstr "" -#: includes/class.cooked-settings.php:332 +#: includes/class.cooked-settings.php:345 msgid "You should only do this if you're using something else to output schema information." msgstr "" -#: includes/class.cooked-settings.php:333 +#: includes/class.cooked-settings.php:346 msgid "Disable Recipe Archive Page" msgstr "" -#: includes/class.cooked-settings.php:333 +#: includes/class.cooked-settings.php:346 msgid "Prevents the recipe archive from being displayed." msgstr "" -#: includes/class.cooked-settings.php:340 +#: includes/class.cooked-settings.php:353 msgid "Design" msgstr "" -#: includes/class.cooked-settings.php:344 +#: includes/class.cooked-settings.php:357 msgid "Dark Mode" msgstr "" -#: includes/class.cooked-settings.php:345 +#: includes/class.cooked-settings.php:358 msgid "If your site has a dark background, you should enable \"Dark Mode\" so that Cooked can match this style." msgstr "" -#: includes/class.cooked-settings.php:351 +#: includes/class.cooked-settings.php:364 msgid "Enable \"Dark Mode\"" msgstr "" -#: includes/class.cooked-settings.php:356 +#: includes/class.cooked-settings.php:369 msgid "Author Images" msgstr "" -#: includes/class.cooked-settings.php:357 +#: includes/class.cooked-settings.php:370 msgid "If you do not want to display the author images (avatars), you can disable them here." msgstr "" -#: includes/class.cooked-settings.php:364 +#: includes/class.cooked-settings.php:377 msgid "Hide Author Images" msgstr "" -#: includes/class.cooked-settings.php:369 +#: includes/class.cooked-settings.php:382 msgid "Main Color" msgstr "" -#: includes/class.cooked-settings.php:370 +#: includes/class.cooked-settings.php:383 msgid "Used on buttons, cooking timer, etc." msgstr "" -#: includes/class.cooked-settings.php:376 +#: includes/class.cooked-settings.php:389 msgid "Main Color (on hover)" msgstr "" -#: includes/class.cooked-settings.php:377 +#: includes/class.cooked-settings.php:390 msgid "Used when hovering over buttons." msgstr "" -#: includes/class.cooked-settings.php:383 +#: includes/class.cooked-settings.php:396 msgid "First Responsive Breakpoint" msgstr "" -#: includes/class.cooked-settings.php:384 +#: includes/class.cooked-settings.php:397 msgid "Set the first responsive breakpoint. Best for large tablets." msgstr "" -#: includes/class.cooked-settings.php:390 +#: includes/class.cooked-settings.php:403 msgid "Second Responsive Breakpoint" msgstr "" -#: includes/class.cooked-settings.php:391 +#: includes/class.cooked-settings.php:404 msgid "Set the second responsive breakpoint. Best for small tablets." msgstr "" -#: includes/class.cooked-settings.php:397 +#: includes/class.cooked-settings.php:410 msgid "Third Responsive Breakpoint" msgstr "" -#: includes/class.cooked-settings.php:398 +#: includes/class.cooked-settings.php:411 msgid "Set the third responsive breakpoint. Best for phones and other small devices." msgstr "" -#: includes/class.cooked-settings.php:406 +#: includes/class.cooked-settings.php:419 msgid "Permalinks" msgstr "" -#: includes/class.cooked-settings.php:410 +#: includes/class.cooked-settings.php:423 msgid "Recipe Permalink" msgstr "" -#: includes/class.cooked-settings.php:413 +#: includes/class.cooked-settings.php:426 msgid "recipe-name" msgstr "" -#: includes/class.cooked-settings.php:417 +#: includes/class.cooked-settings.php:430 msgid "Recipe Author Permalink" msgstr "" -#: includes/class.cooked-settings.php:420 +#: includes/class.cooked-settings.php:433 msgid "author-name" msgstr "" -#: includes/class.cooked-settings.php:424 +#: includes/class.cooked-settings.php:437 msgid "Recipe Category Permalink" msgstr "" -#: includes/class.cooked-settings.php:427 +#: includes/class.cooked-settings.php:440 msgid "recipe-category-name" msgstr "" #. translators: posts_per_page default -#: includes/class.cooked-settings.php:438 +#: includes/class.cooked-settings.php:451 #, php-format msgid "WordPress Default %s" msgstr "" -#: includes/class.cooked-settings.php:443 +#: includes/class.cooked-settings.php:456 msgid "Show All (no pagination)" msgstr "" -#: includes/class.cooked-settings.php:587 +#: includes/class.cooked-settings.php:600 msgid "Begin Migration" msgstr "" +#: includes/class.cooked-settings.php:626 +msgid "Done." +msgstr "" + +#: includes/class.cooked-settings.php:626 +msgid "Related recipes cached." +msgstr "" + #. translators: referring to the bottom of the Settings page. -#: includes/class.cooked-shortcodes.php:149 +#: includes/class.cooked-shortcodes.php:150 #, php-format msgid "Public recipes are currently disabled. You can change this at the bottom of the %s page." msgstr "" -#: includes/class.cooked-shortcodes.php:297 +#: includes/class.cooked-shortcodes.php:298 msgid "(recipe not found or in draft status)" msgstr "" -#: includes/class.cooked-shortcodes.php:661 +#: includes/class.cooked-shortcodes.php:662 msgid "Fullscreen" msgstr "" +#: includes/class.cooked-shortcodes.php:1113 +msgid "Invalid recipe ID specified. Please provide a valid numeric recipe ID." +msgstr "" + +#: includes/class.cooked-shortcodes.php:1123 +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:1130 +msgid "Recipe not found." +msgstr "" + +#: includes/class.cooked-shortcodes.php:1134 +#, php-format +msgid "The specified ID (%d) is not a recipe." +msgstr "" + +#: includes/class.cooked-shortcodes.php:1136 +#, php-format +msgid "No post found with ID %d." +msgstr "" + +#: includes/class.cooked-shortcodes.php:1146 +msgid "No related recipes found." +msgstr "" + +#: includes/class.cooked-shortcodes.php:1149 +msgid "This may be because there are no other recipes in the current language with matching attributes." +msgstr "" + +#: includes/class.cooked-shortcodes.php:1151 +msgid "Try adjusting the matching criteria or ensure you have other published recipes with shared categories, tags, or ingredients." +msgstr "" + #: includes/class.cooked-taxonomies.php:40 msgid "Search Categories" msgstr "" @@ -2215,6 +2421,6 @@ msgstr "" msgid "Recipes by %s" msgstr "" -#: templates/front/recipe-list.php:38 +#: templates/front/recipe-list.php:39 msgid "View all recipes" msgstr "" diff --git a/package-lock.json b/package-lock.json index 9da2a42..525134c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,16 @@ { "name": "cooked", - "version": "1.11.2", + "version": "1.12.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cooked", - "version": "1.11.2", + "version": "1.12.0", "license": "ISC", "devDependencies": { "@playwright/test": "^1.48.2", - "@types/node": "^22.13.10", + "@types/node": "^20.17.10", "@wordpress/e2e-test-utils-playwright": "^1.11.0", "gulp": "^5.0.0", "gulp-clean-css": "^4.3.0", @@ -22,14 +22,14 @@ } }, "node_modules/@formatjs/ecma402-abstract": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.4.tgz", - "integrity": "sha512-qrycXDeaORzIqNhBOx0btnhpD1c+/qFIHAN9znofuMJX6QBwtbrmlpWfD4oiUUD2vJUOIYFA/gYtg2KAMGG7sA==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz", + "integrity": "sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==", "dev": true, "license": "MIT", "dependencies": { "@formatjs/fast-memoize": "2.2.7", - "@formatjs/intl-localematcher": "0.6.1", + "@formatjs/intl-localematcher": "0.6.2", "decimal.js": "^10.4.3", "tslib": "^2.8.0" } @@ -45,32 +45,32 @@ } }, "node_modules/@formatjs/icu-messageformat-parser": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.2.tgz", - "integrity": "sha512-AfiMi5NOSo2TQImsYAg8UYddsNJ/vUEv/HaNqiFjnI3ZFfWihUtD5QtuX6kHl8+H+d3qvnE/3HZrfzgdWpsLNA==", + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.4.tgz", + "integrity": "sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==", "dev": true, "license": "MIT", "dependencies": { - "@formatjs/ecma402-abstract": "2.3.4", - "@formatjs/icu-skeleton-parser": "1.8.14", + "@formatjs/ecma402-abstract": "2.3.6", + "@formatjs/icu-skeleton-parser": "1.8.16", "tslib": "^2.8.0" } }, "node_modules/@formatjs/icu-skeleton-parser": { - "version": "1.8.14", - "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.14.tgz", - "integrity": "sha512-i4q4V4qslThK4Ig8SxyD76cp3+QJ3sAqr7f6q9VVfeGtxG9OhiAk3y9XF6Q41OymsKzsGQ6OQQoJNY4/lI8TcQ==", + "version": "1.8.16", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.16.tgz", + "integrity": "sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==", "dev": true, "license": "MIT", "dependencies": { - "@formatjs/ecma402-abstract": "2.3.4", + "@formatjs/ecma402-abstract": "2.3.6", "tslib": "^2.8.0" } }, "node_modules/@formatjs/intl-localematcher": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.1.tgz", - "integrity": "sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz", + "integrity": "sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==", "dev": true, "license": "MIT", "dependencies": { @@ -648,9 +648,9 @@ } }, "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.37.0.tgz", - "integrity": "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==", + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.39.0.tgz", + "integrity": "sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -674,18 +674,18 @@ } }, "node_modules/@parcel/watcher": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", - "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, "dependencies": { - "detect-libc": "^1.0.3", + "detect-libc": "^2.0.3", "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" }, "engines": { "node": ">= 10.0.0" @@ -695,25 +695,25 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.1", - "@parcel/watcher-darwin-arm64": "2.5.1", - "@parcel/watcher-darwin-x64": "2.5.1", - "@parcel/watcher-freebsd-x64": "2.5.1", - "@parcel/watcher-linux-arm-glibc": "2.5.1", - "@parcel/watcher-linux-arm-musl": "2.5.1", - "@parcel/watcher-linux-arm64-glibc": "2.5.1", - "@parcel/watcher-linux-arm64-musl": "2.5.1", - "@parcel/watcher-linux-x64-glibc": "2.5.1", - "@parcel/watcher-linux-x64-musl": "2.5.1", - "@parcel/watcher-win32-arm64": "2.5.1", - "@parcel/watcher-win32-ia32": "2.5.1", - "@parcel/watcher-win32-x64": "2.5.1" + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" } }, "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", - "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", "cpu": [ "arm64" ], @@ -732,9 +732,9 @@ } }, "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", - "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", + "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", "cpu": [ "arm64" ], @@ -753,9 +753,9 @@ } }, "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", - "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", "cpu": [ "x64" ], @@ -774,9 +774,9 @@ } }, "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", - "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", "cpu": [ "x64" ], @@ -795,9 +795,9 @@ } }, "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", - "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", "cpu": [ "arm" ], @@ -816,9 +816,9 @@ } }, "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", - "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", "cpu": [ "arm" ], @@ -837,9 +837,9 @@ } }, "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", - "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", "cpu": [ "arm64" ], @@ -858,9 +858,9 @@ } }, "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", - "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", "cpu": [ "arm64" ], @@ -879,9 +879,9 @@ } }, "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", - "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", "cpu": [ "x64" ], @@ -900,9 +900,9 @@ } }, "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", - "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", "cpu": [ "x64" ], @@ -921,9 +921,9 @@ } }, "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", - "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", "cpu": [ "arm64" ], @@ -942,9 +942,9 @@ } }, "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", - "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", "cpu": [ "ia32" ], @@ -963,9 +963,9 @@ } }, "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", - "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", + "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", "cpu": [ "x64" ], @@ -983,6 +983,20 @@ "url": "https://opencollective.com/parcel" } }, + "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==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@paulirish/trace_engine": { "version": "0.0.59", "resolved": "https://registry.npmjs.org/@paulirish/trace_engine/-/trace_engine-0.0.59.tgz", @@ -995,13 +1009,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.55.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.55.1.tgz", - "integrity": "sha512-IVAh/nOJaw6W9g+RJVlIQJ6gSiER+ae6mKQ5CX1bERzQgbC1VSeBlwdvczT7pxb0GWiyrxH4TGKbMfDb4Sq/ig==", + "version": "1.58.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.0.tgz", + "integrity": "sha512-fWza+Lpbj6SkQKCrU6si4iu+fD2dD3gxNHFhUPxsfXBPhnv3rRSQVd0NtBUT9Z/RhF/boCBcuUaMUSTRTopjZg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.55.1" + "playwright": "1.58.0" }, "bin": { "playwright": "cli.js" @@ -1024,9 +1038,9 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "2.10.10", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.10.tgz", - "integrity": "sha512-3ZG500+ZeLql8rE0hjfhkycJjDj0pI/btEh3L9IkWUYcOrgP0xCNRq3HbtbqOPbvDhFaAWD88pDFtlLv8ns8gA==", + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.11.2.tgz", + "integrity": "sha512-GBY0+2lI9fDrjgb5dFL9+enKXqyOPok9PXg/69NVkjW3bikbK9RQrNrI3qccQXmDNN7ln4j/yL89Qgvj/tfqrw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1034,8 +1048,8 @@ "extract-zip": "^2.0.1", "progress": "^2.0.3", "proxy-agent": "^6.5.0", - "semver": "^7.7.2", - "tar-fs": "^3.1.0", + "semver": "^7.7.3", + "tar-fs": "^3.1.1", "yargs": "^17.7.2" }, "bin": { @@ -1080,9 +1094,9 @@ } }, "node_modules/@sentry/core": { - "version": "9.46.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-9.46.0.tgz", - "integrity": "sha512-it7JMFqxVproAgEtbLgCVBYtQ9fIb+Bu0JD+cEplTN/Ukpe6GaolyYib5geZqslVxhp2sQgT+58aGvfd/k0N8Q==", + "version": "9.47.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-9.47.1.tgz", + "integrity": "sha512-KX62+qIt4xgy8eHKHiikfhz2p5fOciXd0Cl+dNzhgPFq8klq4MGMNaf148GB3M/vBqP4nw/eFvRMAayFCgdRQw==", "dev": true, "license": "MIT", "engines": { @@ -1090,9 +1104,9 @@ } }, "node_modules/@sentry/node": { - "version": "9.46.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-9.46.0.tgz", - "integrity": "sha512-pRLqAcd7GTGvN8gex5FtkQR5Mcol8gOy1WlyZZFq4rBbVtMbqKOQRhohwqnb+YrnmtFpj7IZ7KNDo077MvNeOQ==", + "version": "9.47.1", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-9.47.1.tgz", + "integrity": "sha512-CDbkasBz3fnWRKSFs6mmaRepM2pa+tbZkrqhPWifFfIkJDidtVW40p6OnquTvPXyPAszCnDZRnZT14xyvNmKPQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1126,9 +1140,9 @@ "@opentelemetry/sdk-trace-base": "^1.30.1", "@opentelemetry/semantic-conventions": "^1.34.0", "@prisma/instrumentation": "6.11.1", - "@sentry/core": "9.46.0", - "@sentry/node-core": "9.46.0", - "@sentry/opentelemetry": "9.46.0", + "@sentry/core": "9.47.1", + "@sentry/node-core": "9.47.1", + "@sentry/opentelemetry": "9.47.1", "import-in-the-middle": "^1.14.2", "minimatch": "^9.0.0" }, @@ -1137,14 +1151,14 @@ } }, "node_modules/@sentry/node-core": { - "version": "9.46.0", - "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-9.46.0.tgz", - "integrity": "sha512-XRVu5pqoklZeh4wqhxCLZkz/ipoKhitctgEFXX9Yh1e1BoHM2pIxT52wf+W6hHM676TFmFXW3uKBjsmRM3AjgA==", + "version": "9.47.1", + "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-9.47.1.tgz", + "integrity": "sha512-7TEOiCGkyShJ8CKtsri9lbgMCbB+qNts2Xq37itiMPN2m+lIukK3OX//L8DC5nfKYZlgikrefS63/vJtm669hQ==", "dev": true, "license": "MIT", "dependencies": { - "@sentry/core": "9.46.0", - "@sentry/opentelemetry": "9.46.0", + "@sentry/core": "9.47.1", + "@sentry/opentelemetry": "9.47.1", "import-in-the-middle": "^1.14.2" }, "engines": { @@ -1161,13 +1175,13 @@ } }, "node_modules/@sentry/opentelemetry": { - "version": "9.46.0", - "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-9.46.0.tgz", - "integrity": "sha512-w2zTxqrdmwRok0cXBoh+ksXdGRUHUZhlpfL/H2kfTodOL+Mk8rW72qUmfqQceXoqgbz8UyK8YgJbyt+XS5H4Qg==", + "version": "9.47.1", + "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-9.47.1.tgz", + "integrity": "sha512-STtFpjF7lwzeoedDJV+5XA6P89BfmFwFftmHSGSe3UTI8z8IoiR5yB6X2vCjSPvXlfeOs13qCNNCEZyznxM8Xw==", "dev": true, "license": "MIT", "dependencies": { - "@sentry/core": "9.46.0" + "@sentry/core": "9.47.1" }, "engines": { "node": ">=18" @@ -1208,9 +1222,9 @@ } }, "node_modules/@types/node": { - "version": "22.18.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.6.tgz", - "integrity": "sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ==", + "version": "20.19.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.30.tgz", + "integrity": "sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==", "dev": true, "license": "MIT", "dependencies": { @@ -1268,14 +1282,13 @@ } }, "node_modules/@wordpress/e2e-test-utils-playwright": { - "version": "1.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.31.0.tgz", - "integrity": "sha512-iOMZfnYxartxmI/9nnCzPH6LbveFxKdtpT040U4ccTYtN33YiUTPap9pDmwmR+Lc6UC9nIzdfQVmgbFly25q1A==", + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.38.0.tgz", + "integrity": "sha512-/3Qo6/N5BtCbQJJShy3pY5xr68OkMctouYcz1mvL8Q8tMO1fdiZTlJvU9bSMwdM1G1NEbE8pa/9q2F1Va/2S2A==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "change-case": "^4.1.2", - "form-data": "^4.0.0", "get-port": "^5.1.1", "lighthouse": "^12.2.2", "mime": "^3.0.0", @@ -1286,7 +1299,8 @@ "npm": ">=8.19.2" }, "peerDependencies": { - "@playwright/test": ">=1" + "@playwright/test": ">=1", + "@types/node": "^20.17.10" } }, "node_modules/acorn": { @@ -1473,27 +1487,21 @@ "node": ">= 10.13.0" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "license": "MIT" - }, "node_modules/atomically": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.0.3.tgz", - "integrity": "sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.0.tgz", + "integrity": "sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q==", "dev": true, + "license": "MIT", "dependencies": { - "stubborn-fs": "^1.2.5", - "when-exit": "^2.1.1" + "stubborn-fs": "^2.0.0", + "when-exit": "^2.1.4" } }, "node_modules/axe-core": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", - "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.1.tgz", + "integrity": "sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==", "dev": true, "license": "MPL-2.0", "engines": { @@ -1501,9 +1509,9 @@ } }, "node_modules/b4a": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.2.tgz", - "integrity": "sha512-DyUOdz+E8R6+sruDpQNOaV0y/dBbV6X/8ZkxrDcR0Ifc3BgKlpgG0VAtfOozA0eMtJO5GGe9FsZhueLs00pTww==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", + "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -1538,16 +1546,24 @@ "license": "MIT" }, "node_modules/bare-events": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.7.0.tgz", - "integrity": "sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", "dev": true, - "license": "Apache-2.0" + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } }, "node_modules/bare-fs": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.4.4.tgz", - "integrity": "sha512-Q8yxM1eLhJfuM7KXVP3zjhBvtMJCYRByoTT+wHXjpdMELv0xICFJX+1w4c7csa+WZEOsq4ItJ4RGwvzid6m/dw==", + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.3.tgz", + "integrity": "sha512-9+kwVx8QYvt3hPWnmb19tPnh38c6Nihz8Lx3t0g9+4GoIf3/fTgYwM4Z6NxgI+B9elLQA7mLE9PpqcWtOMRDiQ==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -1616,9 +1632,9 @@ } }, "node_modules/bare-url": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.2.2.tgz", - "integrity": "sha512-g+ueNGKkrjMazDG3elZO1pNs3HY5+mMmOet1jtKyhOaCnkLzitxf26z7hoAEkDNgdNmnc1KIlt/dw6Po6xZMpA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz", + "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -1648,9 +1664,9 @@ "license": "MIT" }, "node_modules/basic-ftp": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", - "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.1.0.tgz", + "integrity": "sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==", "dev": true, "license": "MIT", "engines": { @@ -1740,20 +1756,6 @@ "node": "*" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/camel-case": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", @@ -1841,9 +1843,9 @@ } }, "node_modules/chrome-launcher": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-1.2.0.tgz", - "integrity": "sha512-JbuGuBNss258bvGil7FT4HKdC3SC2K7UAEUqiPy3ACS3Yxo3hAW6bvFpCu2HsIJLgTqxgEX6BkujvzZfLpUD0Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-1.2.1.tgz", + "integrity": "sha512-qmFR5PLMzHyuNJHwOloHPAHhbaNglkfeV/xDtt5b7xiFFyU1I+AZZX0PYseMuhenJSSirgxELYIbswcoc+5H4A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1860,9 +1862,9 @@ } }, "node_modules/chromium-bidi": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-9.1.0.tgz", - "integrity": "sha512-rlUzQ4WzIAWdIbY/viPShhZU2n21CxDUgazXVbw4Hu1MwaeUSEksSeM6DqPgpRjCLXRk702AVRxJxoOz0dw4OA==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-13.0.1.tgz", + "integrity": "sha512-c+RLxH0Vg2x2syS9wPw378oJgiJNXtYXUvnVAldUlt5uaHekn0CCU7gPksNgHjrH1qFhmjVXQj4esvuthuC7OQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1935,19 +1937,6 @@ "dev": true, "license": "MIT" }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/configstore": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.1.0.tgz", @@ -2074,16 +2063,6 @@ "node": ">= 14" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", @@ -2095,17 +2074,14 @@ } }, "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, "license": "Apache-2.0", "optional": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, "engines": { - "node": ">=0.10" + "node": ">=8" } }, "node_modules/devtools-protocol": { @@ -2142,21 +2118,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/each-props": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/each-props/-/each-props-3.0.0.tgz", @@ -2202,55 +2163,6 @@ "node": ">=8.6" } }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "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/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -2423,9 +2335,9 @@ } }, "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "dev": true, "license": "ISC", "dependencies": { @@ -2521,23 +2433,6 @@ "node": ">=0.10.0" } }, - "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/forwarded-parse": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/forwarded-parse/-/forwarded-parse-2.1.2.tgz", @@ -2594,31 +2489,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/get-port": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", @@ -2632,20 +2502,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -2782,19 +2638,6 @@ "node": ">= 10.13.0" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -3034,35 +2877,6 @@ "node": ">= 0.10" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -3180,16 +2994,16 @@ "license": "MIT" }, "node_modules/immutable": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", - "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", + "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", "dev": true, "license": "MIT" }, "node_modules/import-in-the-middle": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.14.3.tgz", - "integrity": "sha512-ajmxBgfBxVO9GWzD79xktBvMk2kTrqsXPKV0jg5pcwwcFpuLNSHwcPPvp4cgCQshlWz2ivgu5JiuRgDh+2ixGQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.15.0.tgz", + "integrity": "sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3224,22 +3038,22 @@ } }, "node_modules/intl-messageformat": { - "version": "10.7.16", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.16.tgz", - "integrity": "sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug==", + "version": "10.7.18", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.18.tgz", + "integrity": "sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "@formatjs/ecma402-abstract": "2.3.4", + "@formatjs/ecma402-abstract": "2.3.6", "@formatjs/fast-memoize": "2.2.7", - "@formatjs/icu-messageformat-parser": "2.11.2", + "@formatjs/icu-messageformat-parser": "2.11.4", "tslib": "^2.8.0" } }, "node_modules/ip-address": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", - "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", "dev": true, "license": "MIT", "engines": { @@ -3637,9 +3451,9 @@ } }, "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz", + "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==", "dev": true, "license": "MIT" }, @@ -3711,16 +3525,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/metaviewport-parser": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/metaviewport-parser/-/metaviewport-parser-0.3.0.tgz", @@ -3755,29 +3559,6 @@ "node": ">=10.0.0" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -4080,9 +3861,9 @@ } }, "node_modules/pg-protocol": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", - "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.11.0.tgz", + "integrity": "sha512-pfsxk2M9M3BuGgDOfuy37VNRRX3jmKgMjcvAcWqNDpZSf4cUmv8HSOl5ViRQFsfARFn0KuUQTgLxVMbNq5NW3g==", "dev": true, "license": "MIT" }, @@ -4124,13 +3905,13 @@ } }, "node_modules/playwright": { - "version": "1.55.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.55.1.tgz", - "integrity": "sha512-cJW4Xd/G3v5ovXtJJ52MAOclqeac9S/aGGgRzLabuF8TnIb6xHvMzKIa6JmrRzUkeXJgfL1MhukP0NK6l39h3A==", + "version": "1.58.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.0.tgz", + "integrity": "sha512-2SVA0sbPktiIY/MCOPX8e86ehA/e+tDNq+e5Y8qjKYti2Z/JG7xnronT/TXTIkKbYGWlCbuucZ6dziEgkoEjQQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.55.1" + "playwright-core": "1.58.0" }, "bin": { "playwright": "cli.js" @@ -4143,9 +3924,9 @@ } }, "node_modules/playwright-core": { - "version": "1.55.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.1.tgz", - "integrity": "sha512-Z6Mh9mkwX+zxSlHqdr5AOcJnfp+xUWLCt9uKV18fhzA8eyxUd8NUWzAjxUh55RZKSYwDGX0cfaySdhZJGMoJ+w==", + "version": "1.58.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.0.tgz", + "integrity": "sha512-aaoB1RWrdNi3//rOeKuMiS65UCcgOVljU46At6eFcOFPFHWtd2weHRRow6z/n+Lec0Lvu0k9ZPKJSjPugikirw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -4210,9 +3991,9 @@ } }, "node_modules/postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz", + "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==", "dev": true, "license": "MIT", "engines": { @@ -4298,35 +4079,35 @@ } }, "node_modules/puppeteer-core": { - "version": "24.22.3", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.22.3.tgz", - "integrity": "sha512-M/Jhg4PWRANSbL/C9im//Yb55wsWBS5wdp+h59iwM+EPicVQQCNs56iC5aEAO7avfDPRfxs4MM16wHjOYHNJEw==", + "version": "24.36.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.36.1.tgz", + "integrity": "sha512-L7ykMWc3lQf3HS7ME3PSjp7wMIjJeW6+bKfH/RSTz5l6VUDGubnrC2BKj3UvM28Y5PMDFW0xniJOZHBZPpW1dQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.10.10", - "chromium-bidi": "9.1.0", + "@puppeteer/browsers": "2.11.2", + "chromium-bidi": "13.0.1", "debug": "^4.4.3", - "devtools-protocol": "0.0.1495869", + "devtools-protocol": "0.0.1551306", "typed-query-selector": "^2.12.0", - "webdriver-bidi-protocol": "0.2.11", - "ws": "^8.18.3" + "webdriver-bidi-protocol": "0.4.0", + "ws": "^8.19.0" }, "engines": { "node": ">=18" } }, "node_modules/puppeteer-core/node_modules/devtools-protocol": { - "version": "0.0.1495869", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1495869.tgz", - "integrity": "sha512-i+bkd9UYFis40RcnkW7XrOprCujXRAHg62IVh/Ah3G8MmNXpCGt1m0dTFhSdx/AVs8XEMbdOGRwdkR1Bcta8AA==", + "version": "0.0.1551306", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1551306.tgz", + "integrity": "sha512-CFx8QdSim8iIv+2ZcEOclBKTQY6BI1IEDa7Tm9YkwAXzEWFndTEzpTo5jAUhSnq24IC7xaDw0wvGcm96+Y3PEg==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/puppeteer-core/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", "dev": true, "license": "MIT", "engines": { @@ -4439,13 +4220,13 @@ } }, "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -4536,9 +4317,9 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.93.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.2.tgz", - "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==", + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.3.tgz", + "integrity": "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==", "dev": true, "license": "MIT", "dependencies": { @@ -4587,9 +4368,9 @@ } }, "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -4796,10 +4577,21 @@ } }, "node_modules/stubborn-fs": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-1.2.5.tgz", - "integrity": "sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-2.0.0.tgz", + "integrity": "sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "stubborn-utils": "^1.0.1" + } + }, + "node_modules/stubborn-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stubborn-utils/-/stubborn-utils-1.0.2.tgz", + "integrity": "sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==", + "dev": true, + "license": "MIT" }, "node_modules/supports-color": { "version": "7.2.0", @@ -4913,20 +4705,20 @@ } }, "node_modules/tldts-core": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.16.tgz", - "integrity": "sha512-XHhPmHxphLi+LGbH0G/O7dmUH9V65OY20R7vH8gETHsp5AZCjBk9l8sqmRKLaGOxnETU7XNSDUPtewAy/K6jbA==", + "version": "7.0.19", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.19.tgz", + "integrity": "sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==", "dev": true, "license": "MIT" }, "node_modules/tldts-icann": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/tldts-icann/-/tldts-icann-7.0.16.tgz", - "integrity": "sha512-WS/pPasPs2cx6orcxCcIz01SlG3dwYlgjLAnQt7vLAusTuTLqdI8zmkqbM8TWYEf3Z0o1S4BzM3oSRFPk/6WnA==", + "version": "7.0.19", + "resolved": "https://registry.npmjs.org/tldts-icann/-/tldts-icann-7.0.19.tgz", + "integrity": "sha512-PZgda8E2cXMNa7QlBbiZh3vcS8UaPTDRIBmcGPDlujSMtQLrzjvikeJxzQSqWxn3muaMJ7BsC+aL464Yl2I6cA==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^7.0.16" + "tldts-core": "^7.0.19" } }, "node_modules/to-regex-range": { @@ -5187,16 +4979,16 @@ "license": "Apache-2.0" }, "node_modules/webdriver-bidi-protocol": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.2.11.tgz", - "integrity": "sha512-Y9E1/oi4XMxcR8AT0ZC4OvYntl34SPgwjmELH+owjBr0korAX4jKgZULBWILGCVGdVCQ0dodTToIETozhG8zvA==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.0.tgz", + "integrity": "sha512-U9VIlNRrq94d1xxR9JrCEAx5Gv/2W7ERSv8oWRoNe/QYbfccS0V3h/H6qeNeCRJxXGMhhnkqvwNrvPAYeuP9VA==", "dev": true, "license": "Apache-2.0" }, "node_modules/when-exit": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.4.tgz", - "integrity": "sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.5.tgz", + "integrity": "sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==", "dev": true, "license": "MIT" }, diff --git a/package.json b/package.json index e892d1d..99d191b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cooked", - "version": "1.11.2", + "version": "1.12.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": { @@ -24,7 +24,7 @@ "homepage": "https://github.com/XjSv/Cooked#readme", "devDependencies": { "@playwright/test": "^1.48.2", - "@types/node": "^22.13.10", + "@types/node": "^20.17.10", "@wordpress/e2e-test-utils-playwright": "^1.11.0", "gulp": "^5.0.0", "gulp-clean-css": "^4.3.0", diff --git a/readme.txt b/readme.txt index 2cf673b..cbc37a0 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.8.2 -Stable tag: 1.11.2 +Tested up to: 6.9 +Stable tag: 1.12.0 Requires PHP: 7.4 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -14,7 +14,7 @@ Cooked is the absolute best way to create & display recipes with WordPress. SEO Cooked is the absolute best way to create & display recipes with WordPress. SEO optimized (rich snippets), galleries, cooking timers, printable recipes and much more. Check out the full list below. -Be sure to check out the **[Live Preview](https://wordpress.org/plugins/cooked/?preview=1)** as well as the **[Cooked Wiki](https://github.com/XjSv/Cooked/wiki)** if you need some help! +Be sure to check out the **[Live Preview](https://wordpress.org/plugins/cooked/?preview=1)** as well as the **[Cooked Documentation](https://docs.cooked.pro/)** if you need some help! = Quality design & usability = @@ -47,7 +47,7 @@ Of course, if you want even more, you can always check out the [PRO](https://coo = Developers love it = -Cooked has a whole bunch of actions and filters to customize Cooked as much as you need to. Be sure to check out the [Developer Documentation](https://github.com/XjSv/Cooked/wiki). +Cooked has a whole bunch of actions and filters to customize Cooked as much as you need to. Be sure to check out the [Developer Documentation](https://docs.cooked.pro/). == Installation == @@ -55,13 +55,15 @@ Cooked has a whole bunch of actions and filters to customize Cooked as much as y 2. Activate the plugin through the 'Plugins' screen in WordPress. 3. Use the Recipes > Settings screen to configure the plugin. 4. Go to Recipes > Add New to start adding your recipes! -5. Head over to the [Cooked Documentation](https://github.com/XjSv/Cooked/wiki) for more help. +5. Head over to the [Cooked Documentation](https://docs.cooked.pro/) for more help. == Frequently Asked Questions == = Having issues with the plugin? = +Be sure to check the [Cooked Documentation](https://docs.cooked.pro/) for guides and documentation. If you're still having issues, create a new support topic and let me know what's going on. I'm happy to help! Please don't post a bad review without discussing here first, I really appreciate it! -Be sure to check the [Cooked Documentation](https://github.com/XjSv/Cooked/wiki) for guides and documentation. If you're still having issues, create a new support topic and let me know what's going on. I'm happy to help! Please don't post a bad review without discussing here first, I really appreciate it! += Where do I report security bugs found in this plugin? = +Please report security bugs found in the source code of the Cooked plugin through the [Patchstack Vulnerability Disclosure Program](https://patchstack.com/database/vdp/9e5fbd28-34aa-4ce6-9dfd-8a2024a2170f). The Patchstack team will assist you with verification, CVE assignment, and notify the developers of this plugin. == Screenshots == @@ -76,10 +78,23 @@ Be sure to check the [Cooked Documentation](https://github.com/XjSv/Cooked/wiki) == Upgrade Notice == -Version 1.11.2 includes a new import for WP Recipe Maker recipes, transient message handling for guests to support guest recipe submissions, and developer hooks: `cooked_info_shortcode_output` filter and `cooked_ingredients_shortcode_before`/`cooked_ingredients_shortcode_after` actions for enhanced customization. +Version 1.12.0 includes the ability to add ingredients substitutions. == Changelog == += 1.12.0 = +* **NEW:** Added the ability to add ingredients substitutions thanks to @mgiannopoulos24. +* **NEW:** Added new [cooked-related-recipes] shortcode to display related recipes based on categories, cuisines, ingredients, and other factors. +* **NEW:** Added Polylang & WPML plugin support. +* **TWEAK:** Added [cooked-next-previous] shortcode documentation in recipe "Shortcodes" tab. + += 1.11.4 = +* **FIX:** Addressed the CVE-2025-68586 security vulnerability. +* **FIX:** Addressed the CVE-2025-62989 security vulnerability. + += 1.11.3 = +* **NEW:** Added the Patchstack Vulnerability Disclosure Program. + = 1.11.2 = * **NEW:** Added import for WP Recipe Maker recipes. * **TWEAK:** Improved author permalink generation and rewrite rules for recipe authors. @@ -98,7 +113,7 @@ Version 1.11.2 includes a new import for WP Recipe Maker recipes, transient mess = 1.11.0 = * **FIX:** Fixed a bug when users have multiple roles where the WP Editor does not appear in the recipe edit screen. -* **NEW:** Added the 'cooked_format_author_name' developer filter for customizing how author names are displayed via code. View the [Cooked Documentation](https://github.com/XjSv/Cooked/wiki/Author-Name) for more information. +* **NEW:** Added the 'cooked_format_author_name' developer filter for customizing how author names are displayed via code. View the [Cooked Documentation](https://docs.cooked.pro/docs/author-name/) for more information. * **NEW:** Added 'Default Heading Tags' settings option to allow users to choose between H2, H3, H4, H5, H6 or Div for the Directions and Ingredients sections. * **FIX:** Fixed a couple of PHP related issues. * **FIX:** Fixed a bug with the Browse Recipe filters that would not work when the Browse Recipe Page is set as the Homepage. diff --git a/templates/front/recipe-list.php b/templates/front/recipe-list.php index a111fff..88b1763 100644 --- a/templates/front/recipe-list.php +++ b/templates/front/recipe-list.php @@ -35,7 +35,8 @@ echo ( isset($author['profile_photo']) && $author['profile_photo'] ? ( !$hide_avatars ? '' . esc_html( $author['profile_photo'] ) . '' : '' ) : '' ); /* translators: referring to the author (ex: Recipes by John Smith) */ echo '' . sprintf( __('Recipes by %s','cooked'), $author['name'] ) . ''; - echo ( isset($_cooked_settings['browse_page']) && $_cooked_settings['browse_page'] ? '
' . __( 'View all recipes','cooked' ) . '' : '' ); + $browse_page_id = Cooked_Multilingual::get_browse_page_id(); + echo ( $browse_page_id ? '
' . __( 'View all recipes','cooked' ) . '' : '' ); echo '
'; elseif ( $atts['search'] === 'true' ): diff --git a/templates/front/recipe-print.php b/templates/front/recipe-print.php index b775d85..afc82c1 100644 --- a/templates/front/recipe-print.php +++ b/templates/front/recipe-print.php @@ -22,7 +22,7 @@ function cooked_print_enqueues(){ Cooked_Functions::print_options(); -echo '

' . get_the_title() . '

'; +echo '

' . esc_html( get_the_title() ) . '

'; echo wpautop( do_shortcode( Cooked_Recipes::print_content() ) ); Cooked_Functions::print_options_js(); diff --git a/templates/front/recipe-single.php b/templates/front/recipe-single.php index 91b5907..8000431 100644 --- a/templates/front/recipe-single.php +++ b/templates/front/recipe-single.php @@ -30,7 +30,7 @@ do_action( 'cooked_recipe_grid_before_name', $recipe ); - echo '' . wp_kses_post( $recipe_settings['title'] ) . ''; + echo '' . esc_html( $recipe_settings['title'] ) . ''; do_action( 'cooked_recipe_grid_after_name', $recipe ); diff --git a/templates/front/recipe.php b/templates/front/recipe.php index c7991b5..0c42156 100644 --- a/templates/front/recipe.php +++ b/templates/front/recipe.php @@ -29,7 +29,7 @@ $recipe_content = $wp_embed->autoembed( $recipe_content ); $recipe_content .= '
'; $recipe_content .= do_shortcode( Cooked_Recipes::fsm_content() ); - $recipe_content .= '
' . wp_kses_post( $recipe_settings['title'] ) . '
'; + $recipe_content .= '
' . esc_html( $recipe_settings['title'] ) . '
'; $recipe_content .= '
'; $recipe_content .= '' . __( 'Ingredients', 'cooked' ) . ''; $recipe_content .= '' . __( 'Directions', 'cooked' ) . ''; diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 44986d5..06f5a91 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -1,8 +1,8 @@ array( 'name' => 'xjsv/cooked', - 'pretty_version' => '1.11.2', - 'version' => '1.11.2.0', + 'pretty_version' => '1.12.0', + 'version' => '1.12.0.0', 'reference' => null, 'type' => 'wordpress-plugin', 'install_path' => __DIR__ . '/../../', @@ -20,8 +20,8 @@ 'dev_requirement' => false, ), 'xjsv/cooked' => array( - 'pretty_version' => '1.11.2', - 'version' => '1.11.2.0', + 'pretty_version' => '1.12.0', + 'version' => '1.12.0.0', 'reference' => null, 'type' => 'wordpress-plugin', 'install_path' => __DIR__ . '/../../',