diff --git a/CITATION.cff b/CITATION.cff index c265bde..2310618 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -6,7 +6,7 @@ authors: given-names: Justin - family-names: Tresova given-names: Armand -version: 1.12.0 +version: 1.13.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 d152361..6b5a7e3 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -5,8 +5,8 @@ Versions that are currently being supported with security updates. | Version | Supported | | ----------- | ------------------ | -| 1.12.0 | :white_check_mark: | -| <= 1.11.4 | :x: | +| 1.13.0 | :white_check_mark: | +| <= 1.12.0 | :x: | ## Reporting a Vulnerability diff --git a/assets/admin/css/style.css b/assets/admin/css/style.css index 6c46942..fdb546e 100644 --- a/assets/admin/css/style.css +++ b/assets/admin/css/style.css @@ -30,12 +30,17 @@ td.column-featured_image { width:50px; text-align:center; } 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; } +/* TinyMCE fullscreen above admin menu and Cooked sticky UI */ +body.post-type-cp_recipe .mce-fullscreen { + z-index: 100100 !important; +} + #cooked-settings-prewrap { display:flex; justify-content:center; } #cooked-settings-wrap { position: relative; border-radius: 10px; margin: 40px 40px 40px 20px; - /* max-width:1000px; */ + max-width: 1200px; min-width: 1000px; background: #fff; box-shadow: @@ -253,6 +258,19 @@ 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-csv-import-progress.cooked-progress { background:#ccc; margin:25px 0 0 0; border-radius:6px; height:12px; max-width:600px; } +#cooked-csv-import-progress.cooked-progress .cooked-progress-bar { border-radius:6px; height:12px; } +#cooked-csv-import-progress-text.cooked-progress-text { font-size:11px; color:#888; max-width:600px; } +#cooked-csv-import-completed { display:none; } +#cooked-csv-import-completed.cooked-active { display:block; } +#cooked-csv-import-form { max-width:100%; box-sizing:border-box; } +#cooked-csv-import-form input[type="file"] { max-width:100%; box-sizing:border-box; width:100%; } +#cooked-csv-import-errors { max-width:100%; box-sizing:border-box; word-wrap:break-word; } #cooked-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; } @@ -294,7 +312,7 @@ body .button.button-cooked-reset:hover { color:#555; } #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 i.cooked-icon-drag { cursor:move; color:#ccc; font-size:32px; position:absolute; top:5px; left:1px; touch-action:none; } #cooked-ingredients-builder .cooked-ingredient-block:hover i.cooked-icon-drag { color:#888; } #cooked-ingredients-builder .cooked-ingredient-block.ui-sortable-helper { background:#f5f5f5; box-shadow:0 10px 20px rgba(0,0,0,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; } @@ -327,9 +345,13 @@ body .button.button-cooked-reset:hover { color:#555; } #cooked-directions-builder .cooked-direction-block > .cooked-direction-image.cooked-has-image img { width:100%; height:auto; display:block; margin:15px 0 0; } #cooked-directions-builder .cooked-direction-block > .cooked-direction-image.cooked-has-image .cooked-direction-img-placeholder { display:none; } #cooked-directions-builder .cooked-direction-block > .cooked-direction-content { width:100%; padding-left:120px; } +#cooked-directions-builder .cooked-direction-block .cooked-direction-number { opacity:0.4; position:absolute; display:inline-block; font-weight:800; top:17px; left:35px; font-size:1.25rem; line-height:1; } +#cooked-directions-builder .cooked-direction-block.cooked-direction-has-number > .cooked-direction-image { left: 65px; } +#cooked-directions-builder .cooked-direction-block.cooked-direction-has-number > .cooked-direction-content { padding-left:175px; } +#cooked-directions-builder .cooked-direction-block.cooked-direction-has-number-wide > .cooked-direction-content { padding-left:185px; } #cooked-directions-builder .cooked-direction-block > .cooked-heading-name { width:100%; } #cooked-directions-builder .cooked-direction-block { margin:0; } -#cooked-directions-builder .cooked-direction-block i.cooked-icon-drag { cursor:move; color:#ccc; font-size:32px; position:absolute; top:13px; left:1px; } +#cooked-directions-builder .cooked-direction-block i.cooked-icon-drag { cursor:move; color:#ccc; font-size:32px; position:absolute; top:13px; left:1px; touch-action:none; } #cooked-directions-builder .cooked-direction-block.cooked-direction-heading i.cooked-icon-drag { top:5px; } #cooked-directions-builder .cooked-direction-block:hover i.cooked-icon-drag { color:#888; } #cooked-directions-builder .cooked-direction-block.ui-sortable-helper { background:#f5f5f5; box-shadow:0 10px 20px rgba(0,0,0,0.15); -moz-border-radius:3px; -webkit-border-radius:3px; border-radius:3px; } diff --git a/assets/admin/css/style.min.css b/assets/admin/css/style.min.css index 3ccb375..55b25f5 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;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 +.cooked-clearfix:after{content:"";display:table;clear:both}#post-body-content #postdivrich{display:none}body.post-type-cp_recipe .wp-list-table tfoot th.check-column,body.post-type-cp_recipe .wp-list-table thead th.check-column{padding:15px 0 0 7px}body.post-type-cp_recipe .wp-list-table tfoot td,body.post-type-cp_recipe .wp-list-table tfoot th,body.post-type-cp_recipe .wp-list-table thead td,body.post-type-cp_recipe .wp-list-table thead th{padding:10px 10px}body.post-type-cp_recipe .wp-list-table tfoot th.sortable a,body.post-type-cp_recipe .wp-list-table tfoot th.sorted a,body.post-type-cp_recipe .wp-list-table thead th.sortable a,body.post-type-cp_recipe .wp-list-table thead th.sorted a{padding-left:0;padding-right:0}body.post-type-cp_recipe .wp-list-table tbody th.check-column{padding:15px 0 0 10px}body.post-type-cp_recipe .wp-list-table tbody td,body.post-type-cp_recipe .wp-list-table tbody th{padding:12px 10px}body.post-type-cp_recipe .wp-list-table tbody td.column-title strong{margin-top:6px}body.post-type-cp_recipe .wp-list-table tbody td.column-title strong .row-title{padding-top:10px;font-size:1rem!important}th.column-featured_image{width:50px;text-align:center}td.column-featured_image{width:50px;text-align:center}.cooked-admin-recipes-list-image img{width:49px;height:auto;border-radius:3px;position:relative;top:3px}body.post-type-cp_recipe #titlediv #title{box-shadow:none;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:0 12px;font-weight:400;font-size:19px;letter-spacing:0;height:44px}body.post-type-cp_recipe #titlediv #title-prompt-text{font-size:15px;color:#888;font-weight:400;letter-spacing:0;padding:12px 15px}body.post-type-cp_recipe .mce-fullscreen{z-index:100100!important}#cooked-settings-prewrap{display:flex;justify-content:center}#cooked-settings-wrap{position:relative;border-radius:10px;margin:40px 40px 40px 20px;max-width:1200px;min-width:1000px;background:#fff;box-shadow:0 4px 4px rgba(0,0,0,.05),0 8px 8px rgba(0,0,0,.05),0 32px 32px rgba(0,0,0,.05),0 64px 64px rgba(0,0,0,.05)}#cooked-settings-wrap.is-stuck{position:static!important}#cooked-settings-wrap .cooked-settings-update-button{position:absolute;top:30px;right:30px}#cooked-settings-wrap .cooked-settings-update-button>.button-primary{box-shadow:none;border:none}#cooked-settings-wrap.is-stuck .cooked-settings-update-button{position:fixed;top:40px;right:11px;z-index:100001}#cooked_recipe_settings .hndle,#cooked_recipe_settings button.handlediv{display:none}#cooked_recipe_settings .inside{padding:0;margin:0}#cooked-recipe-tabs{list-style:none;padding:0;margin:0;position:absolute;top:0;left:0;width:100%}#cooked-recipe-tabs li{font-size:.9rem;line-height:3rem;height:3rem;font-weight:500;display:inline-block;padding:0 1.25rem;margin:0;color:#fff}#cooked-recipe-tabs li:hover{cursor:pointer}#cooked-recipe-tabs li.active,#cooked-recipe-tabs li.active:hover{cursor:default}#cooked-recipe-tabs li:last-child{border-right:none!important}#cooked-recipe-tabs li.cooked-loading{opacity:0;background:0 0;color:#fff;position:absolute;top:0;right:0;cursor:default;font-size:14px;width:40px;height:40px;text-align:center;display:block;line-height:40px;padding:0}#cooked-recipe-tabs li.cooked-loading:hover{background:0 0;color:#fff}#cooked_recipe_settings.cooked-loading #cooked-recipe-tabs li.cooked-loading{opacity:1}#cooked_recipe_settings .inside{padding-top:41px}#cooked_recipe_settings.stuck #cooked-recipe-tabs{position:fixed;width:auto;top:32px;left:23px;z-index:100000;margin-left:160px;box-shadow:0 3px 50px rgba(0,0,0,.25)}#cooked_recipe_settings.stuck #cooked-recipe-tabs li.cooked-loading{right:160px}.cooked-recipe-tab-content-wrapper .cooked-recipe-tab-content{display:none}.cooked-recipe-tab-content-wrapper .cooked-recipe-tab-content:first-child{display:block}.cooked-left{float:left;display:inline-block;width:auto}.cooked-right{float:right;display:inline-block;width:auto}#cooked_field--cooked_pro_license_key{font-family:monospace}#cooked_recipe_settings .cooked-bm-5{margin-bottom:5px!important}#cooked_recipe_settings .cooked-bm-10{margin-bottom:10px!important}#cooked_recipe_settings .cooked-tm-10{margin-top:10px!important}#cooked_recipe_settings .cooked-bm-15{margin-bottom:15px!important}#cooked_recipe_settings .cooked-bm-20{margin-bottom:20px!important}#cooked_recipe_settings .cooked-bm-30{margin-bottom:30px!important}#cooked_recipe_settings .cooked-bm-5-up{margin-bottom:-5px!important}#cooked_recipe_settings .cooked-bm-10-up{margin-bottom:-10px!important}#cooked_recipe_settings .cooked-bm-15-up{margin-bottom:-15px!important}#cooked_recipe_settings .cooked-bm-20-up{margin-bottom:-20px!important}#cooked_recipe_settings .cooked-bm-30-up{margin-bottom:-30px!important}#cooked_recipe_settings .cooked-hr{border:none;border-top:2px solid #ddd;margin:10px 0 0 0;padding:15px 0 0 0}#cooked_recipe_settings .cooked-conditional-hidden{display:none}#cooked_recipe_settings .cooked-recipe-tab-content{padding:23px 30px 15px 30px}#cooked_recipe_settings .recipe-setting-block{margin:0 0 20px;width:100%}#cooked_recipe_settings .recipe-setting-block p{font-size:.9rem;line-height:1.5rem;margin:0 0 1rem;padding:0}#cooked_recipe_settings .recipe-setting-block p.cooked-padded{line-height:1.75rem;font-size:.85rem}#cooked_recipe_settings .recipe-setting-block .cooked-conditional-hidden{padding:0}#cooked_recipe_settings textarea{width:100%;height:75px;padding:15px;box-sizing:border-box;position:relative;top:5px}#cooked_recipe_settings .recipe-setting-block>label.cooked-select-label{top:5px}#cooked_recipe_settings select{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-shadow:none;border-radius:3px;padding:0 45px 0 9px;line-height:31px;height:33px;box-sizing:border-box;background:#fff}#cooked_recipe_settings .cooked-select-wrapper{background:#fff;position:relative;width:auto;display:inline-block;border-radius:3px;margin:0 5px 0 0}#cooked_recipe_settings .cooked-select-wrapper select{margin:0;background:0 0;position:relative}#cooked_recipe_settings .cooked-select-wrapper:before{font-family:CookedIcons;display:block;width:15px;height:15px;line-height:14px;color:#000;font-size:14px;content:"\f00b";position:absolute;right:12px;top:11px;color:rgba(0,0,0,.3)}#cooked_recipe_settings .cooked-select-wrapper:hover:before{color:#000}#cooked_recipe_settings .cooked-select-wrapper:hover select{border-color:#ccc}#cooked_recipe_settings .cooked-checkbox-radio-label{position:relative;left:1px}#cooked_recipe_settings .recipe-setting-block input[type=checkbox],#cooked_recipe_settings .recipe-setting-block input[type=radio]{margin-top:0}#cooked_recipe_settings .recipe-setting-block input[type=number]{width:65px}#cooked_recipe_settings .recipe-setting-block input[type=password],#cooked_recipe_settings .recipe-setting-block input[type=text]{width:75%}#cooked_recipe_settings .recipe-setting-block input[type=number],#cooked_recipe_settings .recipe-setting-block input[type=password],#cooked_recipe_settings .recipe-setting-block input[type=text]{margin:0 6px 5px 0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;height:33px;box-shadow:none;position:relative;top:2px;padding:0 10px}#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs .cooked-measurement-column{width:43%;margin-right:3%;display:inline-block}#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs .cooked-select-wrapper,#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs input,#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs label{width:100%;display:block}#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs .cooked-select-wrapper select{width:100%}#cooked_recipe_settings .recipe-setting-block input[type=number],#cooked_recipe_settings .recipe-setting-block input[type=password].cooked-small-textfield,#cooked_recipe_settings .recipe-setting-block input[type=text].cooked-small-textfield{width:150px}#cooked_recipe_settings small{display:block;line-height:1.5;font-size:12px;color:#888;padding:10px 0 0}#cooked_recipe_settings .recipe-setting-block em{color:#aaa}#cooked_recipe_settings .recipe-setting-block,#cooked_recipe_settings .recipe-setting-block .cooked-repositioned{display:block;position:relative;box-sizing:border-box;line-height:1}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned{padding-left:157px}#cooked_recipe_settings .recipe-setting-block h3.cooked-settings-title{width:70%;position:relative;z-index:2;padding:.5rem 0 .5rem;margin:0;font-size:1rem;line-height:1.5rem;font-weight:600}#cooked_recipe_settings .recipe-setting-block strong.cooked-heading{font-size:14px}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned>label{position:absolute;top:1px;left:0;width:147px;cursor:default;font-weight:600}#cooked_recipe_settings .recipe-setting-block .cooked-tooltip-icon{color:#aaa;cursor:help;display:inline-block;margin-left:10px}#cooked_recipe_settings .recipe-setting-block .cooked-tooltip-icon:hover{color:#eee}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned>.cooked-checkbox-radio-label{top:7px}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned>label{top:auto;height:33px;line-height:30px;padding:0;width:130px}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned:first-child label:first-child{padding-top:12px;margin-top:-12px}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned span.cooked-padded{padding:0 0 15px;display:block;line-height:1.9}#cooked_recipe_settings .recipe-setting-block .wp-picker-container .cooked-color-field.wp-color-picker{padding:5px;height:25px;top:0;margin:0;width:74px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #ccc}#cooked_recipe_settings .recipe-setting-block input[type=text].cooked-shortcode-field{font-family:monospace;background:#f5f5f5;font-size:12px}#cooked_recipe_settings .cooked-banner-block{margin:30px -30px -17px;display:block;box-sizing:content-box;padding:10px 30px 15px;background:#f9f9f9;width:100%;border-top:1px solid #e5e5e5}#cooked_recipe_settings .cooked-advanced-options-hr{border:none;border-bottom:1px solid #ddd;height:1px;padding:10px 0 0 0;margin:0 0 20px}#cooked_recipe_settings .recipe-setting-block input.cooked-time-picker{top:0;width:100%;padding-right:70%;margin:0 0 3px}#cooked_recipe_settings .recipe-setting-block .cooked-time-picker-text{position:absolute;bottom:13px;right:40px;color:#888}#cooked_recipe_settings .cooked-alert-block{background:#fffbdc;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;margin:10px 0 15px;padding:10px 22px 2px;border:2px solid #ece8c4}#cooked_recipe_settings .recipe-setting-block.cooked-template{display:none}#cooked_recipe_settings ul.cooked-admin-ul{font-size:.9rem;margin:0 0 1rem 2rem;list-style:disc}#cooked_recipe_settings ul.cooked-admin-ul li{font-size:.9rem;padding:0;margin:0 0 .5rem}#cooked_recipe_settings .cooked-html-block{background:#fff;width:auto;min-width:300px;display:inline-block;padding:.5rem 1.3rem .25rem;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15)}#cooked_recipe_settings .recipe-setting-block .cooked-html-block h3.cooked-settings-title{width:100%;color:#333}#cooked_recipe_settings .recipe-setting-block .cooked-html-block.valid{background:#fff;border:2px solid #0aa780;box-shadow:none;border-radius:5px}#cooked_recipe_settings .recipe-setting-block .cooked-html-block.valid>.cooked-settings-title{color:#0aa780}#cooked_recipe_settings .recipe-setting-block .cooked-html-block.expired{border:2px solid #ca4a20}#cooked-directions-builder .cooked-direction-block.cooked-expanded>.cooked-heading-name,#cooked-directions-builder .cooked-direction-block.cooked-has-heading-element>.cooked-heading-name,#cooked-directions-builder .cooked-direction-block:hover>.cooked-heading-name,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded>.cooked-heading-name,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-heading-element>.cooked-heading-name,#cooked-ingredients-builder .cooked-ingredient-block:hover>.cooked-heading-name{padding-right:32px}#cooked-directions-builder .cooked-direction-block .cooked-show-heading-element,#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-heading-element{opacity:0;cursor:pointer;font-size:14px;position:absolute;top:14px;right:35px}#cooked-directions-builder .cooked-direction-block .cooked-show-heading-element .cooked-icon,#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-heading-element .cooked-icon{color:#888}#cooked-directions-builder .cooked-direction-block.cooked-expanded .cooked-show-heading-element,#cooked-directions-builder .cooked-direction-block.cooked-has-heading-element .cooked-show-heading-element,#cooked-directions-builder .cooked-direction-block:hover .cooked-show-heading-element,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded .cooked-show-heading-element,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-heading-element .cooked-show-heading-element,#cooked-ingredients-builder .cooked-ingredient-block:hover .cooked-show-heading-element{opacity:1}#cooked-directions-builder .cooked-direction-block .cooked-show-heading-element .cooked-icon:hover,#cooked-directions-builder .cooked-direction-block.cooked-expanded .cooked-show-heading-element .cooked-icon,#cooked-directions-builder .cooked-direction-block.cooked-has-heading-element .cooked-show-heading-element .cooked-icon,#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-heading-element .cooked-icon:hover,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded .cooked-show-heading-element .cooked-icon,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-heading-element .cooked-show-heading-element .cooked-icon{color:#0685ba}#cooked-directions-builder .cooked-direction-block>.cooked-heading-element,#cooked-ingredients-builder .cooked-ingredient-block>.cooked-heading-element{display:none;width:65%;float:right;margin-top:4px;padding-right:32px}#cooked-directions-builder .cooked-direction-block>.cooked-heading-element select,#cooked-ingredients-builder .cooked-ingredient-block>.cooked-heading-element select{color:#0685ba;width:100%}#cooked-directions-builder .cooked-direction-block>.cooked-heading-element label,#cooked-ingredients-builder .cooked-ingredient-block>.cooked-heading-element label{font-weight:600}#cooked-directions-builder .cooked-direction-block.cooked-expanded>.cooked-heading-element,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded>.cooked-heading-element{display:block}#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-substitution{opacity:0;cursor:pointer;font-size:14px;position:absolute;top:15px;right:58px}#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-substitution .cooked-icon{color:#888}#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded .cooked-show-substitution,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-substitution .cooked-show-substitution,#cooked-ingredients-builder .cooked-ingredient-block:hover .cooked-show-substitution{opacity:1;right:50px}#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-substitution .cooked-icon:hover,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded .cooked-show-substitution .cooked-icon,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-substitution .cooked-show-substitution .cooked-icon{color:#0685ba}#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded>.cooked-ingredient-name,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-substitution>.cooked-ingredient-name,#cooked-ingredients-builder .cooked-ingredient-block:hover>.cooked-ingredient-name{padding-right:32px}#cooked_recipe_settings .switchery-small,body.post-type-cp_recipe .switchery-small{height:1rem;width:1.75rem;border-radius:1rem;margin-right:.4rem}#cooked_recipe_settings .switchery-small>small,body.post-type-cp_recipe .switchery-small>small{width:1rem;height:1rem;padding:0}.cooked-tooltip-buttons .cooked-icon-spin{margin-top:10px;font-size:15px}.cooked-tooltip-buttons .cooked-saved-default{height:28px;line-height:28px;font-weight:700;font-size:15px;color:#888}.cooked-progress{display:none;position:relative;background:#eee;width:100%;height:6px;padding:0;border-radius:3px;margin:10px 0 0 0}.cooked-progress-text{display:none;font-size:10px;color:#aaa;padding:2px 0 5px}.cooked-progress-text.cooked-active,.cooked-progress.cooked-active{display:block}.cooked-progress .cooked-progress-bar{display:block;position:absolute;background:#0085ba;width:0%;height:6px;top:0;left:0;border-radius:3px}#cooked-import-progress.cooked-progress,#cooked-migration-progress.cooked-progress{background:#ccc;margin:25px 0 0 0;border-radius:6px;height:12px;max-width:600px}#cooked-import-progress.cooked-progress .cooked-progress-bar,#cooked-migration-progress.cooked-progress .cooked-progress-bar{border-radius:6px;height:12px}#cooked-import-progress-text.cooked-progress-text,#cooked-migration-progress-text.cooked-progress-text{font-size:11px;color:#888;max-width:600px}#cooked-import-completed,#cooked-migration-completed{display:none}#cooked-import-completed.cooked-active,#cooked-migration-completed.cooked-active{display:block}#cooked-csv-import-progress.cooked-progress{background:#ccc;margin:25px 0 0 0;border-radius:6px;height:12px;max-width:600px}#cooked-csv-import-progress.cooked-progress .cooked-progress-bar{border-radius:6px;height:12px}#cooked-csv-import-progress-text.cooked-progress-text{font-size:11px;color:#888;max-width:600px}#cooked-csv-import-completed{display:none}#cooked-csv-import-completed.cooked-active{display:block}#cooked-csv-import-form{max-width:100%;box-sizing:border-box}#cooked-csv-import-form input[type=file]{max-width:100%;box-sizing:border-box;width:100%}#cooked-csv-import-errors{max-width:100%;box-sizing:border-box;word-wrap:break-word}#cooked-import-progress.cooked-progress,#cooked-migration-progress.cooked-progress,#cooked-related-progress.cooked-progress{background:#ccc;margin:25px 0 0 0;border-radius:6px;height:12px;max-width:600px}#cooked-import-progress.cooked-progress .cooked-progress-bar,#cooked-migration-progress.cooked-progress .cooked-progress-bar,#cooked-related-progress.cooked-progress .cooked-progress-bar{border-radius:6px;height:12px}#cooked-import-progress-text.cooked-progress-text,#cooked-migration-progress-text.cooked-progress-text,#cooked-related-progress-text.cooked-progress-text{font-size:11px;color:#888;max-width:600px}#cooked-import-completed,#cooked-migration-completed,#cooked-related-completed{display:none}#cooked-import-completed.cooked-active,#cooked-migration-completed.cooked-active,#cooked-related-completed.cooked-active{display:block}.cooked-related-status{margin:0 0 12px 0;padding:8px 12px;font-size:13px;line-height:1.4;border-radius:4px;border-left:3px solid #00a878;background:#f0f9f6;color:#2d4a42;max-width:480px}#cooked-related-last-done.cooked-related-status{border-left-color:#8c9b99;background:#f6f8f7;color:#5c6b69}#cooked_recipe_settings .cooked-layout-save-default{position:relative;top:-2px;z-index:10;margin:0 0 0 15px;padding:0 8px 1px}#cooked_recipe_settings .cooked-layout-load-default{position:relative;top:-2px;z-index:10;margin:0 0 0 10px;padding:0 8px 1px}body .button.button-cooked-reset{color:#999}body .button.button-cooked-reset:hover{color:#555}#cooked_recipe_settings .cooked-ingredient-headers{display:block;padding:5px 25px 0 35px}#cooked_recipe_settings .cooked-ingredient-headers span{font-size:.7rem;font-weight:700;letter-spacing:.03rem;text-transform:uppercase;color:#0085ba;box-sizing:border-box;display:inline-block;float:left}#cooked_recipe_settings .cooked-ingredient-headers span.cooked-ingredient-header-amount{width:15%}#cooked_recipe_settings .cooked-ingredient-headers span.cooked-ingredient-header-measurement{width:20%}#cooked_recipe_settings .cooked-ingredient-headers span.cooked-ingredient-header-item{width:65%}#cooked-ingredients-builder{margin:0 0 20px}#cooked-ingredients-builder .cooked-ingredient-block{display:block;padding:5px 45px 5px 35px}#cooked-ingredients-builder .cooked-ingredient-block:hover{background:#eee}#cooked-ingredients-builder .cooked-ingredient-block input[type=number],#cooked-ingredients-builder .cooked-ingredient-block input[type=text],#cooked-ingredients-builder .cooked-ingredient-block select{margin:0;display:block;top:0}#cooked-ingredients-builder .cooked-ingredient-block>div{display:inline-block;float:left;box-sizing:border-box;padding-right:10px}#cooked-ingredients-builder .cooked-ingredient-block>div input[type=text]{width:100%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-amount{width:15%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-measurement{width:20%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-measurement .cooked-select-wrapper{width:100%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-measurement .cooked-select-wrapper select{width:100%}#cooked-ingredients-builder .cooked-ingredient-block .cooked-substitution-fields>.cooked-ingredient-measurement .cooked-select-wrapper{width:100%}#cooked-ingredients-builder .cooked-ingredient-block .cooked-substitution-fields>.cooked-ingredient-measurement .cooked-select-wrapper select{width:100%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-name{width:65%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-heading-name{width:100%}#cooked-ingredients-builder .cooked-ingredient-block>div small.cooked-input-ex{display:block;padding:5px 0 0 2px}#cooked-ingredients-builder .cooked-ingredient-block{margin:0}#cooked-ingredients-builder .cooked-ingredient-block i.cooked-icon-drag{cursor:move;color:#ccc;font-size:32px;position:absolute;top:5px;left:1px;touch-action:none}#cooked-ingredients-builder .cooked-ingredient-block:hover i.cooked-icon-drag{color:#888}#cooked-ingredients-builder .cooked-ingredient-block.ui-sortable-helper{background:#f5f5f5;box-shadow:0 10px 20px rgba(0,0,0,.15);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}#cooked-ingredients-builder .cooked-ingredient-block.ui-sortable-placeholder{visibility:visible!important;background:#eee;display:block;width:100%;height:43px;border-top:6px solid #fff;border-bottom:6px solid #fff}#cooked-ingredients-builder .cooked-ingredient-block .cooked-delete-ingredient{cursor:pointer;font-size:14px;position:absolute;top:14px;right:11px}#cooked-ingredients-builder .cooked-ingredient-block .cooked-delete-ingredient .cooked-icon{color:#fff}#cooked-ingredients-builder .cooked-ingredient-block:hover .cooked-delete-ingredient .cooked-icon{color:#888}#cooked-ingredients-builder .cooked-ingredient-block .cooked-delete-ingredient .cooked-icon:hover{color:#de2020}#cooked-ingredients-builder .cooked-ingredient-block.cooked-ingredient-heading{margin:10px 0}#cooked-ingredients-builder .cooked-ingredient-block.cooked-ingredient-heading>div input[type=text]{padding:0 7px;font-size:16px;background:#f9f9f9;font-weight:600}#cooked-directions-builder{margin:0 0 20px}#cooked-directions-builder .cooked-direction-block{display:block;padding:15px 25px 15px 35px}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading{padding:5px 25px 5px 35px}#cooked-directions-builder .cooked-direction-block:hover{background:#f5f5f5}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading:hover{background:#eee}#cooked-directions-builder .cooked-direction-block textarea{margin:0;display:block;height:191px;top:0}#cooked-directions-builder .cooked-direction-block>div{display:inline-block;float:left;box-sizing:border-box;padding-right:15px}#cooked-directions-builder .cooked-direction-block>div:last-child{padding:0}#cooked-directions-builder .cooked-direction-block>div input[type=text]{width:100%}#cooked-directions-builder .cooked-direction-block .mce-statusbar{display:none}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image{width:120px;position:absolute;top:15px;left:35px}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image img{cursor:pointer;display:none;border-radius:3px}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .cooked-direction-img-placeholder{box-sizing:border-box;cursor:pointer;border-radius:3px;width:100%;padding-bottom:100%;background:0 0;border:2px dashed #ddd;border-radius:3px;margin-top:15px}#cooked-directions-builder .cooked-direction-block:hover>.cooked-direction-image .cooked-direction-img-placeholder{background:0 0}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .cooked-direction-img-placeholder:hover{background:#ddd;border:2px solid #ddd}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .direction-image-button{width:100%;text-align:center}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .remove-image-button{display:none;position:absolute;top:43px;right:15px}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image.cooked-has-image .remove-image-button{display:inline-block;padding:10px;background:rgba(0,0,0,.25);color:#fff}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image.cooked-has-image .remove-image-button:hover{background:#ff0100}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image.cooked-has-image img{width:100%;height:auto;display:block;margin:15px 0 0}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image.cooked-has-image .cooked-direction-img-placeholder{display:none}#cooked-directions-builder .cooked-direction-block>.cooked-direction-content{width:100%;padding-left:120px}#cooked-directions-builder .cooked-direction-block .cooked-direction-number{opacity:.4;position:absolute;display:inline-block;font-weight:800;top:17px;left:35px;font-size:1.25rem;line-height:1}#cooked-directions-builder .cooked-direction-block.cooked-direction-has-number>.cooked-direction-image{left:65px}#cooked-directions-builder .cooked-direction-block.cooked-direction-has-number>.cooked-direction-content{padding-left:175px}#cooked-directions-builder .cooked-direction-block.cooked-direction-has-number-wide>.cooked-direction-content{padding-left:185px}#cooked-directions-builder .cooked-direction-block>.cooked-heading-name{width:100%}#cooked-directions-builder .cooked-direction-block{margin:0}#cooked-directions-builder .cooked-direction-block i.cooked-icon-drag{cursor:move;color:#ccc;font-size:32px;position:absolute;top:13px;left:1px;touch-action:none}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading i.cooked-icon-drag{top:5px}#cooked-directions-builder .cooked-direction-block:hover i.cooked-icon-drag{color:#888}#cooked-directions-builder .cooked-direction-block.ui-sortable-helper{background:#f5f5f5;box-shadow:0 10px 20px rgba(0,0,0,.15);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}#cooked-directions-builder .cooked-direction-block.ui-sortable-placeholder{visibility:visible!important;background:#eee;display:block;width:100%;height:221px;border-top:6px solid #fff;border-bottom:6px solid #fff}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading.ui-sortable-placeholder{height:43px}#cooked-directions-builder .cooked-direction-block .cooked-delete-direction{cursor:pointer;font-size:14px;position:absolute;right:14px}#cooked-directions-builder .cooked-direction-block .cooked-delete-direction .cooked-icon{color:#fff}#cooked-directions-builder .cooked-direction-block:hover .cooked-delete-direction .cooked-icon{color:#888}#cooked-directions-builder .cooked-direction-block .cooked-delete-direction .cooked-icon:hover{color:#de2020}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading{margin:10px 0}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading>div input[type=text]{padding:0 7px;font-size:16px;background:#f9f9f9;font-weight:600;top:0;margin:0}#cooked-directions-builder .cooked-direction-block .cooked-delete-direction{top:16px}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading .cooked-delete-direction{top:14px}#cooked-recipe-image-gallery{margin:0 -1% 0}#cooked-recipe-image-gallery .cooked-recipe-gallery-item{position:relative;overflow:hidden;cursor:move;box-sizing:border-box;display:inline-block;width:18%;height:auto;padding:0;margin:0 1% 2% 1%}#cooked-recipe-image-gallery .cooked-recipe-gallery-item:hover{opacity:.9}#cooked-recipe-image-gallery .cooked-recipe-gallery-item img{width:100%;height:auto;border-radius:3px;display:block;margin:0;padding:0;border:none}#cooked-recipe-image-gallery .cooked-recipe-gallery-item.ui-sortable-helper,#cooked-recipe-image-gallery .cooked-recipe-gallery-item.ui-sortable-helper:hover{opacity:.75;box-shadow:0 10px 20px rgba(0,0,0,.15)}#cooked-recipe-image-gallery .cooked-recipe-gallery-item.ui-sortable-placeholder{width:18%;height:auto;visibility:visible!important;border-radius:3px;background:#ddd;display:inline-block}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .remove-image-button{border-radius:0 3px 0 0;display:inline-block;position:absolute;top:0;right:0;padding:10px;background:rgba(0,0,0,.25);color:#fff}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .remove-image-button:hover{background:#ff0100}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .cooked-gallery-edit-button{border-radius:3px 0 0 0;display:inline-block;position:absolute;top:0;left:0;padding:10px;background:rgba(0,0,0,.25);color:#fff}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .cooked-gallery-edit-button:hover{background:#0084bc}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .cooked-gallery-item-title{position:absolute;left:0;bottom:0;box-sizing:border-box;width:100%;border-radius:0 0 3px 3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;padding:10px 10px 11px;text-align:center;background:#000;background:rgba(0,0,0,.3);color:#fff;font-size:12px}#cooked-recipe-image-gallery .cooked-recipe-gallery-item:hover .cooked-gallery-item-title{background:#000;background:rgba(0,0,0,.75)}#cooked-recipe-image-gallery .cooked-recipe-gallery-item.ui-sortable-helper{-webkit-animation:cooked-wiggle .4s infinite;-moz-animation:cooked-wiggle .4s infinite;-o-animation:cooked-wiggle .4s infinite;animation:cooked-wiggle .4s infinite}#cooked_recipe_settings label.cooked-nutrition-label{display:block;font-size:.7rem;letter-spacing:.03rem;font-weight:700;text-transform:uppercase;line-height:1;margin:0 0 7px}#cooked_recipe_settings #cooked-nutrition-label{line-height:1.6;font-size:1.1rem;border:1px solid #aaa;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:5%;margin:0 0 2rem;font-family:Helvetica,Arial,sans-serif;container-name:nutrition-label;container-type:inline-size}#cooked_recipe_settings #cooked-nutrition-label h2{font-size:2.5rem;line-height:1;letter-spacing:0;font-weight:800;padding:0 0 .5rem 0;margin:0 0 .4rem;color:#333;border-bottom:1px solid #aaa}#cooked_recipe_settings #cooked-nutrition-label p.cooked-daily-value-text{padding:.5rem 0 0 0;margin:0;font-size:.9rem}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-servings p{font-size:1.5rem}#cooked_recipe_settings #cooked-nutrition-label ul{list-style:none;margin:0;padding:0}#cooked_recipe_settings #cooked-nutrition-label li{position:relative;margin:0;padding:0 0 3px 0;border-top:1px solid #aaa}#cooked_recipe_settings #cooked-nutrition-label li li{padding:3px 0 0;margin:3px 0 0}#cooked_recipe_settings #cooked-nutrition-label li:after{content:"";display:table;clear:both}#cooked_recipe_settings #cooked-nutrition-label li.no-after:after{content:none}#cooked_recipe_settings #cooked-nutrition-label li.cooked-nut-spacer{border:none;height:.6rem;padding:0;background:#333}#cooked_recipe_settings #cooked-nutrition-label ul li.cooked-nut-no-border,#cooked_recipe_settings #cooked-nutrition-label>ul>li:first-child{border:none}#cooked_recipe_settings #cooked-nutrition-label li ul{padding:0;margin:0 0 0 20px}#cooked_recipe_settings #cooked-nutrition-label li ul.cooked-right{margin:0}#cooked_recipe_settings #cooked-nutrition-label li ul.cooked-right li{border:none;padding:0;margin:0}#cooked_recipe_settings #cooked-nutrition-label li.cooked-calories ul.cooked-right li strong.cooked-nut-label{font-size:2.5rem;line-height:1}#cooked_recipe_settings #cooked-nutrition-label .cooked-calories{border-top:none;display:flex;justify-content:space-between;align-items:baseline;padding:0}#cooked_recipe_settings #cooked-nutrition-label .cooked-calories strong,#cooked_recipe_settings #cooked-nutrition-label .cooked-calories strong.cooked-nut-label{font-size:2rem;font-weight:800}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-servings li{border:none}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-servings{margin:0}#cooked_recipe_settings #cooked-nutrition-label .cooked-nut-hr{border:none;border-top:1.3rem solid #333;margin:.1rem 0 0;padding:0}#cooked_recipe_settings #cooked-nutrition-label strong{font-weight:800}#cooked_recipe_settings #cooked-nutrition-label .cooked-serving-size strong,#cooked_recipe_settings #cooked-nutrition-label .cooked-serving-size strong.cooked-nut-label{font-size:1.5rem;font-weight:800}#cooked_recipe_settings #cooked-nutrition-label strong.cooked-nut-heading{font-size:1rem}#cooked_recipe_settings #cooked-nutrition-label strong.cooked-nut-label{font-weight:400}#cooked_recipe_settings #cooked-nutrition-label .cooked-nut-right{float:right}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-bottom{margin:0 0 .75rem}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-bottom li{border-top:none;border-bottom:1px solid #aaa;float:left;width:100%;box-sizing:border-box}#cooked_recipe_settings .cooked-measurement-inputs .cooked-select-wrapper:before{top:8px}.cooked-auto-nutrition{display:flex;justify-content:end;margin:0 0 1rem}#cooked-tooltip-auto-nutrition-notice{margin:0}.cooked-settings-header{border-radius:10px 10px 0 0;width:auto;height:90px;line-height:85px;padding:0 30px;font-weight:600;box-sizing:border-box;background:#33373c;color:#fff;font-size:29px;letter-spacing:-.03rem}.cooked-settings-header .cooked-icon{color:#00e0a9}.cooked-settings-submit-wrap{padding:0 0 35px 35px;margin:-20px 0 0}#cooked_recipe_settings .recipe-setting-block .cooked-permalink-field-wrapper span{font-size:14px;display:inline-block;line-height:32px;padding:5px 0 0 0}#cooked_recipe_settings .recipe-setting-block input[type=text].cooked-permalink-field{position:relative;top:0;display:inline-block;width:150px;margin:0 10px}#cooked-settings-panel{position:relative;margin:0;padding:0}#cooked-settings-tabs{display:flex;width:auto;padding:0 20px 0 0;margin:0;list-style:none}#cooked-settings-tabs li{font-size:13px;line-height:1;font-weight:400;display:block;padding:0;margin:0;color:#fff}#cooked-settings-tabs li .cooked-icon{font-size:14px}#cooked-settings-tabs li .cooked-icon.cooked-icon-recipe-icon{font-size:20px;top:2px;position:relative}#cooked-settings-tabs li:hover{cursor:pointer}#cooked-settings-tabs li.active,#cooked-settings-tabs li.active:hover{cursor:default}#cooked-settings-tabs a{line-height:41px;font-size:.9rem;letter-spacing:.03rem;padding:2px 15px 4px;display:block;outline:0;box-shadow:none;border:none;white-space:nowrap}#cooked-settings-panel.stuck{padding-top:41px}#cooked-settings-panel.stuck #cooked-settings-tabs{position:fixed;width:calc(100% - 180px);top:32px;left:0;z-index:100000;margin-left:160px}#cooked-settings-panel .cooked-settings-tab-content-wrapper .cooked-settings-tab-content{display:none}#cooked-settings-panel .cooked-settings-tab-content-wrapper .cooked-settings-tab-content:first-child{display:block}#cooked-settings-panel .cooked-settings-tab-content{padding:25px 35px;margin-right:0}#cooked-settings-panel #cooked_recipe_settings .recipe-setting-block h3.cooked-settings-title{padding-bottom:.2rem}#cooked_recipe_settings .cooked-setting-column-14{position:relative;width:25%;float:left;padding-right:20px;box-sizing:border-box}#cooked_recipe_settings .cooked-setting-column-13{position:relative;width:33%;float:left;padding-right:20px;box-sizing:border-box}#cooked_recipe_settings .cooked-setting-column-23{position:relative;width:66%;float:left;padding-right:20px;box-sizing:border-box}#cooked_recipe_settings .cooked-setting-column-12{position:relative;width:50%;float:left;padding-right:20px;box-sizing:border-box}#cooked_recipe_settings .cooked-setting-column-12 input[type=text],#cooked_recipe_settings .cooked-setting-column-13 input[type=text],#cooked_recipe_settings .cooked-setting-column-14 input[type=text],#cooked_recipe_settings .cooked-setting-column-23 input[type=text],#cooked_recipe_settings .recipe-setting-block input[type=text].cooked-shortcode-field{width:95%}#cooked_recipe_settings .cooked-setting-column-12 .cooked-select-wrapper,#cooked_recipe_settings .cooked-setting-column-12 select,#cooked_recipe_settings .cooked-setting-column-13 .cooked-select-wrapper,#cooked_recipe_settings .cooked-setting-column-13 select,#cooked_recipe_settings .cooked-setting-column-14 .cooked-select-wrapper,#cooked_recipe_settings .cooked-setting-column-14 select,#cooked_recipe_settings .cooked-setting-column-23 select{width:100%}#cooked_recipe_settings .cooked-setting-column-14.cooked-tb-col{padding:0}#cooked-welcome-screen{padding:15px 50px 0 30px;position:relative}#cooked-welcome-screen .cooked-badge{position:absolute;top:0;right:0}#cooked-welcome-screen .cooked-badge img{border:none;width:150px;height:150px;display:block;margin:0}#cooked-welcome-screen .about-text{margin-bottom:40px;line-height:1.8;font-size:17px;margin-right:260px}#cooked-welcome-screen .about-wrap{margin:25px auto 0;max-width:1000px}#cooked-welcome-screen .about-wrap h1{font-size:2.25rem}#cooked-welcome-screen .about-wrap p{font-size:1rem;margin:0 0 2rem;line-height:1.7rem}#cooked-welcome-screen #cooked-welcome-panel{background:#fff;padding:30px 30px 15px 30px;-moz-border-radius:15px;-webkit-border-radius:15px;border-radius:15px;border:none;box-shadow:0 4px 4px rgba(0,0,0,.05),0 8px 8px rgba(0,0,0,.05),0 32px 32px rgba(0,0,0,.05),0 64px 64px rgba(0,0,0,.05)}#cooked-welcome-screen #cooked-welcome-panel img.cooked-welcome-banner{border:none;display:block;padding:0;margin:0 0 30px;box-sizing:border-box;border-radius:5px 5px 0 0}#cooked-welcome-screen #cooked-welcome-panel .cooked-welcome-panel-intro{text-align:center;margin:0 50px 2rem;padding:15px 0;border-bottom:1px solid #e5e5e5}#cooked-welcome-screen #cooked-welcome-panel .cooked-welcome-panel-intro h1{font-size:1.75rem;margin:0 0 1rem;padding:0}#cooked-welcome-screen #cooked-welcome-panel .cooked-welcome-panel-intro p{max-width:600px;font-size:1.1rem;line-height:1.8rem;margin:0 auto 2rem;padding:0}#cooked-welcome-screen .cooked-welcome-panel a{text-decoration:none}#cooked-welcome-screen .cooked-welcome-panel-column{display:block!important}#cooked-welcome-screen .cooked-welcome-panel-column>strong{font-size:1rem}#cooked-welcome-screen .cooked-welcome-panel-column h3{font-size:1.75rem;margin:0 0 1rem;position:relative}#cooked-welcome-screen .cooked-welcome-panel-column h3 a{position:absolute;top:0;right:0;font-size:12px;font-weight:400}#cooked-welcome-screen .cooked-welcome-panel-column h3 a i.fa{position:relative;top:1px}#cooked-welcome-screen .cooked-welcome-panel-column h4{font-size:1.25rem;margin:0 0 1rem;position:relative}#cooked-welcome-screen .cooked-welcome-panel-column h4 a{position:absolute;top:0;right:0;font-size:12px;font-weight:400}#cooked-welcome-screen .cooked-welcome-panel-column h4 a i.fa{position:relative;top:1px}#cooked-welcome-screen .cooked-welcome-panel-column.cooked-welcome-panel-full{width:100%;padding-right:0;float:none}#cooked-welcome-screen .cooked-welcome-panel-column.cooked-welcome-panel-last{width:70%;padding-right:0;float:right}#cooked-welcome-screen .cooked-welcome-panel-column .fa-external-link{color:#888}#cooked-welcome-screen .cooked-welcome-panel-content{min-height:1px;padding:10px 50px 20px;margin:0}#cooked-welcome-screen .cooked-welcome-panel .cooked-welcome-panel-column-container{display:flex;justify-content:between!important;padding:0!important;flex-wrap:wrap}#cooked-welcome-screen .cooked-welcome-panel-column{box-sizing:border-box;padding-right:2rem;width:30%}#cooked-welcome-screen .cooked-pro-features{width:85%;margin:0 auto;padding:0 0 10px;display:flex;flex-wrap:wrap}#cooked-welcome-screen ul.cooked-whatsnew-list{margin-right:0}#cooked-welcome-screen ul.cooked-whatsnew-list li{line-height:1.7;position:relative;margin-right:0;border-top:1px solid #e5e5e5;padding:8px 0 4px 0}#cooked-welcome-screen ul.cooked-whatsnew-list li:first-child{border:none;padding-top:0}#cooked-welcome-screen ul.cooked-whatsnew-list em.fix,#cooked-welcome-screen ul.cooked-whatsnew-list strong.new,#cooked-welcome-screen ul.cooked-whatsnew-list strong.tweak{position:absolute;font-style:normal;display:inline-block;background:#aaa;text-transform:uppercase;top:11px;left:0;color:#fff;font-weight:600;-moz-border-radius:3px;-webkit-border-radius:3px;text-align:center;width:38px;border-radius:3px;font-size:10px;line-height:19px;height:19px;padding:0 6px;margin:0 6px 0 0}#cooked-welcome-screen ul.cooked-whatsnew-list li:first-child em.fix,#cooked-welcome-screen ul.cooked-whatsnew-list li:first-child strong.new,#cooked-welcome-screen ul.cooked-whatsnew-list li:first-child strong.tweak{top:3px}#cooked-welcome-screen ul.cooked-whatsnew-list strong.new{background:#56c477}#cooked-welcome-screen ul.cooked-whatsnew-list strong.tweak{background:#0073aa}#cooked-welcome-screen ul.cooked-whatsnew-list em.fix{background:#ffad10}#cooked-welcome-screen ul li.cooked-pro i.cooked-icon{color:#ffad10}#cooked-welcome-screen ul li.cooked-pro a{font-weight:600;color:#ffad10}#cooked-welcome-screen ul li.cooked-pro a:hover{color:#d3910f}#cooked-welcome-screen ul.cooked-whatsnew-pro{margin-bottom:0;flex:1 0 auto;width:33.333%}#cooked-welcome-screen ul.cooked-whatsnew-pro li{padding-left:0;font-size:1.15rem;font-weight:400}#cooked-welcome-screen ul.cooked-whatsnew-pro li i.cooked-icon-star{color:#ffad10;margin:0 7px 0 0;font-size:19px;position:relative;top:1px}#cooked-welcome-screen .cooked-welcome-bottom{text-align:center;background:#f9f9f9;margin:30px -80px -15px;border-top:1px solid #f1f1f1}#cooked-welcome-screen .cooked-pro-button{display:inline-block;clear:both;text-align:center;width:auto;margin:30px auto;padding:20px 25px 21px;font-size:1.25rem;line-height:1rem;font-weight:600;color:#fff;background:#ffad10;border-radius:50px}#cooked-welcome-screen .cooked-pro-button:hover{background:#e08704}#cooked-welcome-screen .cooked-coupon-code{color:#4c5e65;display:inline-block;font-size:17px;padding:0 0 0 1.5rem}@media screen and (max-width:1050px){#cooked-welcome-screen ul.cooked-whatsnew-pro{width:100%;margin-top:0}#cooked-welcome-screen ul.cooked-whatsnew-pro:first-child{margin-top:10px}#cooked-welcome-screen ul.cooked-whatsnew-pro li:first-child{border-top:1px solid #e5e5e5;padding-top:8px}#cooked-welcome-screen ul.cooked-whatsnew-pro:first-child li:first-child{border:none;padding-top:0}}@media screen and (max-width:870px){#cooked-welcome-screen .cooked-pro-features{width:90%}#cooked-welcome-screen .cooked-welcome-panel-column{padding-right:0}#cooked-welcome-screen .cooked-welcome-panel-column.cooked-welcome-panel-last{width:100%;padding-top:20px}#cooked-welcome-screen .about-wrap{margin-top:0}#cooked-welcome-screen .cooked-welcome-panel .cooked-welcome-panel-column li{display:block}}@media screen and (max-width:782px){#cooked-welcome-screen .cooked-pro-features{width:100%}#cooked-welcome-screen{padding:15px 40px 0 30px}#cooked-welcome-screen .cooked-badge{display:none}#cooked-welcome-screen .about-text,#cooked-welcome-screen .about-wrap h1{margin-right:0}#cooked-welcome-screen .cooked-welcome-panel-column h3 a{display:block;position:relative}}@media screen and (max-width:500px){#cooked-welcome-screen #cooked-welcome-panel img.cooked-welcome-banner{display:none}#cooked-welcome-screen .about-wrap h1{font-size:1.8rem}#cooked-welcome-screen .about-text{font-size:15px}}#cooked_recipe_settings #cooked-nutrition-label .cooked-nut-label,#cooked_recipe_settings .recipe-setting-block h3.cooked-settings-title{color:#0173aa}#cooked_recipe_settings .recipe-setting-block.cooked-danger h3.cooked-settings-title{color:#d44d1f}#cooked_recipe_settings .cooked-alert-block h3.cooked-settings-title{color:#c02a2a}#cooked-recipe-tabs{background:#fff}#cooked-recipe-tabs li{background:#454b52;color:#fff;color:rgba(255,255,255,.75);border-right:1px solid rgba(0,0,0,.15)}#cooked-recipe-tabs li:hover{background:#535a62;color:#fff;border-right:1px solid rgba(0,0,0,.15)}#cooked-recipe-tabs li.active{background:#fff;color:#333;border-right:1px solid #fff}#cooked-settings-tabs{background:#454b52}#cooked-settings-tabs a{color:#fff;text-decoration:none}#cooked-settings-tabs li{background:#454b52;color:#fff;color:rgba(255,255,255,.75)}#cooked-settings-tabs li:hover{background:#535a62;color:#fff}#cooked-settings-tabs li.active{background:#fff}#cooked-settings-tabs li.active a{color:#000}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .cooked-direction-img-placeholder,#cooked-migration-progress.cooked-progress .cooked-progress-bar,#cooked-related-progress.cooked-progress .cooked-progress-bar,#cooked_recipe_settings .cooked-select-wrapper:before,#cooked_recipe_settings .cooked-tooltip-icon,#cooked_recipe_settings select{-webkit-transition:all .15s ease-out;-moz-transition:all .15s ease-out;transition:all .15s ease-out}#cooked-recipe-image-gallery .cooked-recipe-gallery-item{-webkit-transition:transform .15s ease-out;-moz-transition:all .15s ease-out;transition:transform .15s ease-out}#cooked-recipe-tabs li.cooked-loading{-webkit-transition:opacity .15s ease-out;-moz-transition:all .15s ease-out;transition:opacity .15s ease-out}@-webkit-keyframes cooked-wiggle{0%{-webkit-transform:scale(1)}50%{-webkit-transform:scale(1.03)}100%{-webkit-transform:scale(1)}}@-moz-keyframes cooked-wiggle{0%{-moz-transform:scale(1)}50%{-moz-transform:scale(1.03)}100%{-moz-transform:scale(1)}}@-o-keyframes cooked-wiggle{0%{-o-transform:scale(1)}50%{-o-transform:scale(1.03)}100%{-o-transform:scale(1)}}@keyframes cooked-wiggle{0%{transform:scale(1)}50%{transform:scale(1.03)}100%{transform:scale(1)}}@media screen and (max-width:1150px){#cooked-recipe-tabs li{font-size:.8rem;padding:0 1.2rem 0 .7rem}#cooked-recipe-tabs li .cooked-icon{display:none}}@media screen and (max-width:960px){#cooked_recipe_settings.stuck #cooked-recipe-tabs{margin-left:36px}}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields{width:100%;float:left;clear:both;margin-top:10px;padding-top:10px;padding-right:0;padding-left:0;margin-left:0;box-sizing:border-box;padding-bottom:5px;position:relative}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields .cooked-ingredient-amount{width:15%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields .cooked-ingredient-measurement{width:20%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields .cooked-ingredient-name{width:65%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields .cooked-sub-label{color:#7c7c7c;font-size:14px;font-weight:300}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields>div{display:inline-block;float:left;box-sizing:border-box;padding-right:10px} \ No newline at end of file diff --git a/assets/admin/js/cooked-functions.js b/assets/admin/js/cooked-functions.js index 94ed23d..638fbe1 100644 --- a/assets/admin/js/cooked-functions.js +++ b/assets/admin/js/cooked-functions.js @@ -1,9 +1,51 @@ var $_CookedConditionalTimeout = false; +// Touch event support for sortable drag handles on mobile devices +var cookedSortableTouchHandler = function(event) { + var target = event.target; + var types = { + touchstart: "mousedown", + touchmove: "mousemove", + touchend: "mouseup" + }; + + // Only handle touches on drag handles within cooked sortable containers + var dragHandle = target.closest('.cooked-icon-drag'); + if (!dragHandle || !dragHandle.closest('.cooked-sortable')) { + return; // Let the event proceed normally (allows scrolling) + } + + if (!event.changedTouches || !event.changedTouches.length || !types[event.type]) { + return; + } + + var touch = event.changedTouches[0]; + + // Prevent default to stop page scrolling when dragging + event.preventDefault(); + + var simulatedEvent = new MouseEvent(types[event.type], { + bubbles: true, + cancelable: true, + view: window, + detail: 1, + screenX: touch.screenX, + screenY: touch.screenY, + clientX: touch.clientX, + clientY: touch.clientY, + ctrlKey: false, + altKey: false, + shiftKey: false, + metaKey: false, + button: 0, + relatedTarget: null + }); + touch.target.dispatchEvent(simulatedEvent); +}; + (function( $ ) { $(document).ready(function() { - var $_CookedColorPickers = $('.cooked-color-field'), $_CookedSelectFields = $('#cooked_recipe_settings').find('select'), $_CookedRecipeTabs = $('#cooked-recipe-tabs'), @@ -21,8 +63,7 @@ var $_CookedConditionalTimeout = false; $_CookedRecipeGallery = $('#cooked-recipe-image-gallery'), $_CookedNutritionFactsTab = $('#cooked-recipe-tab-content-nutrition'), $_CookedSettingsPanel = $('#cooked-settings-panel'), - $_CookedSettingsTabs = $('#cooked-settings-tabs'), - $_CookedCalculateRelatedButton = $('#cooked-calculate-related-button'); + $_CookedSettingsTabs = $('#cooked-settings-tabs'); // Cooked Color Pickers if ($_CookedColorPickers.length) { @@ -31,44 +72,77 @@ var $_CookedConditionalTimeout = false; // Cooked Sortables if ($_CookedSortable.length) { - if ($_CookedSortable.find('.cooked-icon-drag')) { + document.addEventListener("touchstart", cookedSortableTouchHandler, { passive: false }); + document.addEventListener("touchmove", cookedSortableTouchHandler, { passive: false }); + document.addEventListener("touchend", cookedSortableTouchHandler, { passive: false }); + + if ($_CookedSortable.find('.cooked-icon-drag').length) { $_CookedSortable.sortable({ + handle: '.cooked-icon-drag', + // scroll: true, + // scrollSensitivity: 80, + // scrollSpeed: 30, stop: function(event, ui) { - let textarea = ui.item.find('textarea'); - let textareaName = textarea.attr('name'); - let fieldID = textarea.attr('id'); + // Update direction step numbers when reordering directions + if (ui.item.closest('#cooked-directions-builder').length) { + cooked_reset_direction_builder(); + } - wp.editor.remove(fieldID); - wp.editor.initialize(fieldID, { - tinymce: { - wpautop: false, - 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: textareaName, - plugins: 'link lists fullscreen wordpress wplink', - setup: function(editor) { - // @TODO: Inline Link editor does not work. - // editor.on('init', function() { - // if (typeof wpLink !== 'undefined') { - // editor.addCommand('WP_Link', function() { - // window.wpActiveEditor = editor.id; - // wpLink.open(editor.id); - // return false; - // }); - // } - // }); - } - }, - quicktags: true, - mediaButtons: false - }); + let textarea = ui.item.find('textarea'); + var canUseWpEditor = !!( + cooked_admin_functions_js_vars.wp_editor_roles_allowed && + typeof wp !== 'undefined' && + wp.editor && + typeof wp.editor.remove === 'function' && + typeof wp.editor.initialize === 'function' + ); + + if (textarea.length && canUseWpEditor) { + let textareaName = textarea.attr('name'); + let fieldID = textarea.attr('id'); + + wp.editor.remove(fieldID); + wp.editor.initialize(fieldID, { + tinymce: { + wpautop: false, + 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: textareaName, + plugins: 'link lists fullscreen wordpress wplink', + setup: function(editor) { + // @TODO: Inline Link editor does not work. + // editor.on('init', function() { + // if (typeof wpLink !== 'undefined') { + // editor.addCommand('WP_Link', function() { + // window.wpActiveEditor = editor.id; + // wpLink.open(editor.id); + // return false; + // }); + // } + // }); + } + }, + quicktags: true, + mediaButtons: false + }); + } } }); } else { - $_CookedSortable.sortable(); + $_CookedSortable.sortable({ + // scroll: true, + // scrollSensitivity: 80, + // scrollSpeed: 30, + stop: function(event, ui) { + // Update direction step numbers when reordering directions + if (ui.item.closest('#cooked-directions-builder').length) { + cooked_reset_direction_builder(); + } + } + }); } } @@ -91,7 +165,7 @@ var $_CookedConditionalTimeout = false; cooked_save_default_nonce = thisButton.data('nonce'), cooked_save_default_bulk_nonce = thisButton.data('bulk-nonce'), thisContainer = thisButton.parent(), - confirm_save = confirm(cooked_functions_js_vars.i18n_confirm_save_default_all), + confirm_save = confirm(cooked_admin_functions_js_vars.i18n_confirm_save_default_all), recipe_editor_textarea = $( "#_recipe_settings_content" ), recipe_editor = tinymce.get('_recipe_settings_content'); @@ -105,7 +179,7 @@ var $_CookedConditionalTimeout = false; thisContainer.find('.button, .button-primary').addClass('disabled'); var ajax__save_default_new = $.post( - cooked_functions_js_vars.ajax_url, + cooked_admin_functions_js_vars.ajax_url, { action: 'cooked_save_default', 'default_content': recipe_editor_content, @@ -113,7 +187,7 @@ var $_CookedConditionalTimeout = false; }, function(result) { var ajax__save_default_all = $.post( - cooked_functions_js_vars.ajax_url, + cooked_admin_functions_js_vars.ajax_url, { action: 'cooked_get_recipe_ids', nonce: cooked_save_default_bulk_nonce @@ -153,14 +227,14 @@ var $_CookedConditionalTimeout = false; if (!thisButton.hasClass('disabled')) { thisContainer.find('.button, .button-primary').addClass('disabled'); var ajax__save_default_new = $.post( - cooked_functions_js_vars.ajax_url, + cooked_admin_functions_js_vars.ajax_url, { action: 'cooked_save_default', 'default_content': recipe_editor_content, nonce: nonce }, function(result) { - thisButton.text( cooked_functions_js_vars.i18n_saved ); + thisButton.text( cooked_admin_functions_js_vars.i18n_saved ); thisContainer.find('.button-primary').removeClass('disabled'); } ).fail(function(result) { @@ -176,14 +250,14 @@ var $_CookedConditionalTimeout = false; var thisButton = $(this), thisContainer = thisButton.parent(), - confirm_load = confirm( cooked_functions_js_vars.i18n_confirm_load_default ), + confirm_load = confirm( cooked_admin_functions_js_vars.i18n_confirm_load_default ), recipe_editor_textarea = $( "#_recipe_settings_content" ), recipe_editor = tinymce.get('_recipe_settings_content'); if (confirm_load && !thisButton.hasClass('disabled')) { thisContainer.find('.button, .button-primary').addClass('disabled'); var ajax__save_default_all = $.post( - cooked_functions_js_vars.ajax_url, + cooked_admin_functions_js_vars.ajax_url, { action: 'cooked_load_default' }, @@ -230,48 +304,6 @@ 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 = []; @@ -554,15 +586,33 @@ var $_CookedConditionalTimeout = false; $_CookedDirectionBuilder.parent().on('click', '.cooked-delete-direction', function(e) { e.preventDefault(); - $(this).parent().remove(); + var directionBlock = $(this).parent(); + var canRemoveWpEditor = !!( + cooked_admin_functions_js_vars.wp_editor_roles_allowed && + typeof wp !== 'undefined' && + wp.editor && + typeof wp.editor.remove === 'function' + ); + + if (canRemoveWpEditor) { + var directionTextarea = directionBlock.find('textarea[data-direction-part="content"]'); + var fieldID = directionTextarea.attr('id'); + + if (fieldID) { + wp.editor.remove(fieldID); + } + } + + directionBlock.remove(); cooked_reset_direction_builder(); }); $_CookedDirectionBuilder.parent().on('click', '.remove-image-button', function(e) { e.preventDefault(); - $(this).parent().removeClass('cooked-has-image'); - $(this).parent().find('img').remove(); - $(this).parent().find('input[data-direction-part="image"]').val(''); + var $parent = $(this).parent(); + $parent.removeClass('cooked-has-image'); + $parent.find('img').attr('src', '').removeAttr('srcset').removeAttr('sizes'); + $parent.find('input[data-direction-part="image"]').val(''); cooked_reset_direction_builder(); }); @@ -576,8 +626,7 @@ var $_CookedConditionalTimeout = false; }); // Runs when the image button is clicked. - $('body').on('click', '.direction-image-button',function(e) { - + $('body').on('click', '.direction-image-button', function(e) { var thisButton = $(this); directionID = thisButton.data('id'); @@ -591,8 +640,8 @@ var $_CookedConditionalTimeout = false; // Sets up the media library frame direction_image_frame = 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 }, + title: cooked_admin_functions_js_vars.i18n_image_title, + button: { text: cooked_admin_functions_js_vars.i18n_image_button }, library: { type: 'image' } }); @@ -602,9 +651,14 @@ var $_CookedConditionalTimeout = false; var media_attachment = direction_image_frame.state().get('selection').first().toJSON(); // Sends the attachment URL to our custom image input field. - $('#direction-'+directionID+'-image-src').attr('src',media_attachment.sizes.thumbnail.url).parent().addClass('cooked-has-image'); - $('input[name="_recipe_settings[directions]['+directionID+'][image]"]').val( media_attachment.id ); - $('.direction-image-button[data-id="'+directionID+'"]').prop( 'value', cooked_functions_js_vars.i18n_image_change ); + // Remove srcset/sizes so the UI updates when an image was previously loaded (WP outputs srcset on edit). + var $directionImg = $('#direction-' + directionID + '-image-src'); + $directionImg.attr('src', media_attachment.sizes.thumbnail.url) + .removeAttr('srcset') + .removeAttr('sizes') + .parent().addClass('cooked-has-image'); + $('input[name="_recipe_settings[directions][' + directionID + '][image]"]').val( media_attachment.id ); + $('.direction-image-button[data-id="' + directionID + '"]').prop( 'value', cooked_admin_functions_js_vars.i18n_image_change ); }); // Opens the media library frame. @@ -630,8 +684,8 @@ var $_CookedConditionalTimeout = false; // Sets up the media library frame gallery_images_frame = 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 }, + title: cooked_admin_functions_js_vars.i18n_gallery_image_title, + button: { text: cooked_admin_functions_js_vars.i18n_gallery_image_title }, library: { type: 'image' }, multiple: true }); @@ -670,8 +724,8 @@ var $_CookedConditionalTimeout = false; // Sets up the media library frame var image_edit_frame = 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 }, + title: cooked_admin_functions_js_vars.i18n_edit_image_title, + button: { text: cooked_admin_functions_js_vars.i18n_edit_image_button }, library: { type: 'image' }, multiple: false }); @@ -711,7 +765,7 @@ var $_CookedConditionalTimeout = false; if ( directionID ) { $('#direction-'+directionID+'-image-src').parent().removeClass('cooked-has-image').prop('src',false); $('input[name="_recipe_settings[directions]['+directionID+'][image]"]').val(''); - $('.direction-image-button[data-id="'+directionID+'"]').prop( 'value',cooked_functions_js_vars.i18n_image_title ); + $('.direction-image-button[data-id="'+directionID+'"]').prop( 'value',cooked_admin_functions_js_vars.i18n_image_title ); } else { thisButton.parent().remove(); } @@ -741,79 +795,6 @@ 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, @@ -832,7 +813,7 @@ function cooked_set_default_template(recipe_ids, total_recipes, content, nonce, } var ajax__bulk_save_default_template = jQuery.post( - cooked_functions_js_vars.ajax_url, + cooked_admin_functions_js_vars.ajax_url, { action: 'cooked_save_default_bulk', recipe_ids: recipe_ids, @@ -851,7 +832,7 @@ function cooked_set_default_template(recipe_ids, total_recipes, content, nonce, progress_text.text(cooked_recipe_update_counter + " / " + total_recipes); cooked_set_default_template(new_recipe_ids, total_recipes, content, nonce, instance); } else { - jQuery('.cooked-save-default-all').text(cooked_functions_js_vars.i18n_applied); + jQuery('.cooked-save-default-all').text(cooked_admin_functions_js_vars.i18n_applied); progress_bar.css({ "width" : "100%" }); progress.removeClass('cooked-active'); progress_text.removeClass('cooked-active').text(""); @@ -996,7 +977,14 @@ function cooked_reset_direction_builder() { var fieldID = 'direction-' + randomKeyForInterval + '-' + directionPartName; thisField.attr('id', fieldID); - if (directionPartName === 'content' && thisField.is('textarea') && cooked_functions_js_vars.wp_editor_roles_allowed) { + var canInitializeWpEditor = !!( + cooked_admin_functions_js_vars.wp_editor_roles_allowed && + typeof wp !== 'undefined' && + wp.editor && + typeof wp.editor.initialize === 'function' + ); + + if (directionPartName === 'content' && thisField.is('textarea') && canInitializeWpEditor) { // Init the WordPress Editor. wp.editor.initialize(fieldID, { tinymce: { @@ -1029,6 +1017,20 @@ function cooked_reset_direction_builder() { }); }); + // Update step numbers for direction blocks (skip section headings). + var stepNum = 0; + jQuery('#cooked-directions-builder').find('.cooked-direction-block').each(function() { + var $_block = jQuery(this); + if ( !$_block.hasClass('cooked-direction-heading') ) { + stepNum++; + $_block.find('.cooked-direction-number').text(stepNum); + $_block.toggleClass('cooked-direction-has-number-wide', stepNum > 9); + $_block.addClass('cooked-direction-has-number'); + } else { + $_block.removeClass('cooked-direction-has-number cooked-direction-has-number-wide'); + } + }); + if ( total_blocks ) { jQuery('#cooked-directions-builder').css( { 'margin-bottom': '20px' } ); } else { @@ -1105,4 +1107,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 383e03b..2d9cc3e 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"),$_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=0{p(document).ready(function(){var r,o,t,e,i,n,a,d,c,s=p(".cooked-color-field"),l=p("#cooked_recipe_settings").find("select"),u=p("#cooked-recipe-tabs"),k=(p("#cooked-settings-wrap"),p("#cooked_recipe_settings")),_=k.find("input#submit");$_CookedTooltips=p(".cooked-tooltip"),$_CookedConditionals=p(".cooked-conditional-hidden"),$_CookedSortable=p(".cooked-sortable"),$_CookedRecipeSaveDefault=p(".cooked-layout-save-default"),$_CookedShortcodeField=p(".cooked-shortcode-field"),$_CookedIngredientBuilder=p("#cooked-ingredients-builder"),$_CookedAutoNutritionButton=p(".cooked-auto-nutrition-button"),$_CookedDirectionBuilder=p("#cooked-directions-builder"),$_CookedRecipeGallery=p("#cooked-recipe-image-gallery"),$_CookedNutritionFactsTab=p("#cooked-recipe-tab-content-nutrition"),$_CookedSettingsPanel=p("#cooked-settings-panel"),$_CookedSettingsTabs=p("#cooked-settings-tabs"),s.length&&s.wpColorPicker(),$_CookedSortable.length&&(document.addEventListener("touchstart",cookedSortableTouchHandler,{passive:!1}),document.addEventListener("touchmove",cookedSortableTouchHandler,{passive:!1}),document.addEventListener("touchend",cookedSortableTouchHandler,{passive:!1}),$_CookedSortable.find(".cooked-icon-drag").length?$_CookedSortable.sortable({handle:".cooked-icon-drag",stop:function(e,t){t.item.closest("#cooked-directions-builder").length&&cooked_reset_direction_builder();var t=t.item.find("textarea"),o=!(!cooked_admin_functions_js_vars.wp_editor_roles_allowed||"undefined"==typeof wp||!wp.editor||"function"!=typeof wp.editor.remove||"function"!=typeof wp.editor.initialize);t.length&&o&&(o=t.attr("name"),t=t.attr("id"),wp.editor.remove(t),wp.editor.initialize(t,{tinymce:{wpautop:!1,toolbar1:"bold,italic,underline,blockquote,strikethrough,bullist,numlist,alignleft,aligncenter,alignright,undo,redo,wp_link_advanced,unlink,fullscreen",toolbar2:"",toolbar3:"",toolbar4:"",height:100,textarea_name:o,plugins:"link lists fullscreen wordpress wplink",setup:function(e){}},quicktags:!0,mediaButtons:!1}))}}):$_CookedSortable.sortable({stop:function(e,t){t.item.closest("#cooked-directions-builder").length&&cooked_reset_direction_builder()}})),$_CookedRecipeSaveDefault.length&&($_CookedRecipeSaveDefault.tooltipster({theme:["tooltipster-light","tooltipster-sideTip-cooked"],trigger:"click",animation:"grow",delay:0,speed:200,maxWidth:275,contentAsHTML:!0,interactive:!0,functionReady:function(c,e){p(".cooked-save-default-all").on("click",function(e){e.preventDefault();var o,i=p(this),e=i.data("nonce"),n=i.data("bulk-nonce"),t=i.parent(),a=confirm(cooked_admin_functions_js_vars.i18n_confirm_save_default_all),d=p("#_recipe_settings_content"),r=tinymce.get("_recipe_settings_content");o=null===r?d.val():r.getContent(),a&&!i.hasClass("disabled")&&(t.find(".button, .button-primary").addClass("disabled"),p.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_save_default",default_content:o,nonce:e},function(e){p.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_get_recipe_ids",nonce:n},function(e){var t;i.removeClass("button-primary").addClass("button"),e&&(t=JSON.parse(e),0<(t=Object.keys(t).length))&&cooked_set_default_template(e,t,o,n,c)})}))}),p(".cooked-save-default-new").on("click",function(e){e.preventDefault();var t=p(this),e=t.data("nonce"),o=t.parent(),i=p("#_recipe_settings_content"),n=tinymce.get("_recipe_settings_content");i=null===n?i.val():n.getContent(),t.hasClass("disabled")||(o.find(".button, .button-primary").addClass("disabled"),p.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_save_default",default_content:i,nonce:e},function(e){t.text(cooked_admin_functions_js_vars.i18n_saved),o.find(".button-primary").removeClass("disabled")}).fail(function(e){}))})}}),p(".cooked-layout-load-default").on("click",function(e){e.preventDefault();var e=p(this),t=e.parent(),o=confirm(cooked_admin_functions_js_vars.i18n_confirm_load_default),i=p("#_recipe_settings_content"),n=tinymce.get("_recipe_settings_content");o&&!e.hasClass("disabled")&&(t.find(".button, .button-primary").addClass("disabled"),p.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_load_default"},function(e){null===n?i.val(e):(i.val(e),n.setContent(e)),t.find(".button, .button-primary").removeClass("disabled")}).fail(function(e){t.find(".button, .button-primary").removeClass("disabled")}))})),l.length&&l.each(function(){p(this).wrap('
')}),$_CookedTooltips.length&&$_CookedTooltips.tooltipster({theme:["tooltipster-light","tooltipster-sideTip-cooked"],animation:"grow",delay:100,speed:200,maxWidth:275,contentAsHTML:!0,interactive:!0}),$_CookedShortcodeField.length&&$_CookedShortcodeField.on("click",function(e){p(this).select()}),$_CookedConditionals.length&&(r=[],$_CookedConditionals.each(function(){var e=p(this),t=p(this).data("condition"),o=p(this).data("value"),i=p("#"+t),o=!!o&&o.split(" "),n=e.is("li")||e.is("span")?"inline-block":"block";i.is(":checkbox")&&i.is(":checked")||i.is(":radio")&&i.is(":checked")||!(i.is(":checkbox")&&!i.is(":checked")||i.is(":radio")&&!i.is(":checked"))&&(!i.is(":checkbox")&&!o&&i.val()||!i.is(":checkbox")&&o&&-1 a").attr("href")).split("#"))[1],p(".cooked-settings-tab-content").hide(),p("#cooked-settings-tab-content-"+n).show(),l.on("click",function(e){p(".tab-content").hide();var t=p(this).find("a"),t=($_CookedSettingsTabs.find("li").removeClass("active"),p(this).addClass("active"),t.attr("href"));"migration"==(t=(t=t.split("#"))[1])?_.hide():_.show(),p(".cooked-settings-tab-content").hide(),p("#cooked-settings-tab-content-"+t).show(),p("#cooked-settings-panel").hasClass("stuck")?window.scrollTo(0,130):window.scrollTo(0,0)})),$_CookedIngredientBuilder.length&&(cooked_reset_ingredient_builder(),$_CookedIngredientBuilder.on("keydown",'input[data-ingredient-part="name"]',function(e){9!==e.keyCode&&13!==e.keyCode||p(this).parents(".cooked-ingredient-block").is(":last-child")&&(e.preventDefault(),p("#cooked-recipe-tab-content-ingredients").find(".cooked-add-ingredient-button").trigger("click"),$_CookedIngredientBuilder.find('.cooked-ingredient-block:last-child input[data-ingredient-part="amount"]').focus())}),$_CookedIngredientBuilder.parent().on("click",".cooked-show-substitution",function(e){e.preventDefault();e=p(this).parent();e.hasClass("cooked-expanded")?e.removeClass("cooked-expanded"):(e.addClass("cooked-expanded"),e.find('input[data-ingredient-part="sub_amount"]').focus())}),$_CookedIngredientBuilder.on("keyup change",'input[data-ingredient-part="sub_amount"], input[data-ingredient-part="sub_name"], select[data-ingredient-part="sub_measurement"]',function(e){var t=p(this).parents(".recipe-setting-block"),o=t.find('input[data-ingredient-part="sub_name"]').val();o&&o.trim()?t.addClass("cooked-has-substitution"):t.removeClass("cooked-has-substitution")}),$_CookedAutoNutritionButton.length&&$_CookedIngredientBuilder.on("change",'input[data-ingredient-part="name"]',function(e){var t=!1;$_CookedIngredientBuilder.find('input[data-ingredient-part="name"]').each(function(){if(""!=p(this).val())return!(t=!0)}),t?$_CookedAutoNutritionButton.prop("disabled",!1):$_CookedAutoNutritionButton.prop("disabled",!0)}),$_CookedIngredientBuilder.on("keyup",'input[data-ingredient-part="url"]',function(e){var t=p(this).val(),o=p(this).parents(".recipe-setting-block");t?o.addClass("cooked-has-url"):o.removeClass("cooked-has-url")}),$_CookedIngredientBuilder.parent().on("click",".cooked-add-ingredient-button",function(e){e.preventDefault();e=$_CookedIngredientBuilder.parent().find(".cooked-ingredient-template").clone().removeClass("cooked-template cooked-ingredient-template").addClass("cooked-ingredient-block");$_CookedIngredientBuilder.append(e),cooked_reset_ingredient_builder()}),$_CookedIngredientBuilder.parent().on("click",".cooked-add-heading-button",function(e){e.preventDefault();e=$_CookedIngredientBuilder.parent().find(".cooked-heading-template").clone().removeClass("cooked-template cooked-heading-template").addClass("cooked-ingredient-block cooked-ingredient-heading");$_CookedIngredientBuilder.append(e),cooked_reset_ingredient_builder()}),$_CookedIngredientBuilder.parent().on("click",".cooked-delete-ingredient",function(e){e.preventDefault(),p(this).parent().remove(),cooked_reset_ingredient_builder()})),$_CookedDirectionBuilder.length&&(cooked_reset_direction_builder(),$_CookedDirectionBuilder.parent().on("click",".cooked-show-heading-element",function(e){e.preventDefault();e=p(this).parent();e.hasClass("cooked-expanded")?e.removeClass("cooked-expanded"):(e.addClass("cooked-expanded"),e.find('input[data-direction-part="section_heading_element"]').focus())}),$_CookedDirectionBuilder.parent().on("click",".cooked-add-direction-button",function(e){e.preventDefault();e=$_CookedDirectionBuilder.parent().find(".cooked-direction-template").clone().removeClass("cooked-template cooked-direction-template").addClass("cooked-direction-block");$_CookedDirectionBuilder.append(e),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".cooked-add-heading-button",function(e){e.preventDefault();e=$_CookedDirectionBuilder.parent().find(".cooked-heading-template").clone().removeClass("cooked-template cooked-heading-template").addClass("cooked-direction-block cooked-direction-heading");$_CookedDirectionBuilder.append(e),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".cooked-delete-direction",function(e){e.preventDefault();var t,e=p(this).parent();cooked_admin_functions_js_vars.wp_editor_roles_allowed&&"undefined"!=typeof wp&&wp.editor&&"function"==typeof wp.editor.remove&&(t=e.find('textarea[data-direction-part="content"]').attr("id"))&&wp.editor.remove(t),e.remove(),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".remove-image-button",function(e){e.preventDefault();e=p(this).parent();e.removeClass("cooked-has-image"),e.find("img").attr("src","").removeAttr("srcset").removeAttr("sizes"),e.find('input[data-direction-part="image"]').val(""),cooked_reset_direction_builder()}),p("body").on("click",".cooked-direction-img-placeholder, .cooked-direction-img",function(e){e.preventDefault(),p(this).parent().find(".direction-image-button").trigger("click")}),p("body").on("click",".direction-image-button",function(e){var t=p(this);d=t.data("id"),e.preventDefault(),a||(a=wp.media.frames.direction_image_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_image_title,button:{text:cooked_admin_functions_js_vars.i18n_image_button},library:{type:"image"}})).on("select",function(){var e=a.state().get("selection").first().toJSON();p("#direction-"+d+"-image-src").attr("src",e.sizes.thumbnail.url).removeAttr("srcset").removeAttr("sizes").parent().addClass("cooked-has-image"),p('input[name="_recipe_settings[directions]['+d+'][image]"]').val(e.id),p('.direction-image-button[data-id="'+d+'"]').prop("value",cooked_admin_functions_js_vars.i18n_image_change)}),a.open()})),$_CookedRecipeGallery.length&&(cooked_init_gallery_sorting(),p("body").on("click",".cooked-gallery-add-button",function(e){p(this);e.preventDefault(),c||(c=wp.media.frames.gallery_images_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_gallery_image_title,button:{text:cooked_admin_functions_js_vars.i18n_gallery_image_title},library:{type:"image"},multiple:!0})).on("select",function(){var e,t,o,i=c.state().get("selection").toJSON();for(e in i)i.hasOwnProperty(e)&&(o=(t=i[e]).sizes.thumbnail.url,p("#cooked-recipe-image-gallery").append(''));cooked_init_gallery_sorting()}),c.open()}),p("body").on("click",".cooked-recipe-gallery-item img",function(e){e.preventDefault(),p(this).parent().find(".cooked-gallery-edit-button").trigger("click")}),p("body").on("click",".cooked-gallery-edit-button",function(e){var n=p(this),t=n.data("attachment-id"),a=(e.preventDefault(),wp.media.frames.gallery_images_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_edit_image_title,button:{text:cooked_admin_functions_js_vars.i18n_edit_image_button},library:{type:"image"},multiple:!1}));a.on("open",function(){var e=a.state().get("selection");(attachment=wp.media.attachment(t)).fetch(),e.add(attachment?[attachment]:[])}),a.open(),a.on("select",function(){var e,t,o,i=a.state().get("selection").toJSON();for(e in i)i.hasOwnProperty(e)&&(o=(t=i[e]).sizes.thumbnail.url,n.parent().replaceWith(''));cooked_init_gallery_sorting()})}),$_CookedRecipeGallery.on("click",".remove-image-button",function(e){var t=p(this);d=t.data("id"),e.preventDefault(),d?(p("#direction-"+d+"-image-src").parent().removeClass("cooked-has-image").prop("src",!1),p('input[name="_recipe_settings[directions]['+d+'][image]"]').val(""),p('.direction-image-button[data-id="'+d+'"]').prop("value",cooked_admin_functions_js_vars.i18n_image_title)):t.parent().remove()})),$_CookedNutritionFactsTab.length&&(init_nutrition_facts($_CookedNutritionFactsTab),$_CookedNutritionFactsTab.on("keyup","input",function(e){init_nutrition_facts($_CookedNutritionFactsTab)})),p("#cooked-prep-time").length&&p("#cooked-prep-time,#cooked-cook-time").on("change",function(){cooked_updateTotalTimeValue(parseInt(p("#cooked-prep-time").val()),parseInt(p("#cooked-cook-time").val()))})})})(jQuery),0);function cooked_set_default_template(e,o,i,n,a){var d,r,c,s;0' + cooked_migration_js_vars.i18n_csv_no_file + '

').show(); + return; + } + + if (file.type !== 'text/csv' && !file.name.endsWith('.csv')) { + errorsDiv.html('

' + cooked_migration_js_vars.i18n_csv_invalid_file + '

').show(); + return; + } + + if (thisButton.hasClass('disabled')) { + return; + } + + var confirm_import = confirm(cooked_migration_js_vars.i18n_confirm_csv_import); + if (!confirm_import) { + return; + } + + thisButton.addClass('disabled').attr('disabled', true); + fileInput.attr('disabled', true); + + var formData = new FormData(); + formData.append('action', 'cooked_upload_csv'); + formData.append('csv_file', file); + + // Show progress + if (!$_CookedCSVImportProgress.hasClass('cooked-active')) { + $_CookedCSVImportProgress.addClass('cooked-active'); + $_CookedCSVImportProgressText.addClass('cooked-active'); + $_CookedCSVImportProgress.find('.cooked-progress-bar').css({ "width" : "0%" }); + $_CookedCSVImportProgressText.text(cooked_migration_js_vars.i18n_uploading); + } + + // Upload file + $.ajax({ + url: cooked_migration_js_vars.ajax_url, + type: 'POST', + data: formData, + processData: false, + contentType: false, + success: function(response) { + if (response.success) { + $_CookedCSVImportProgressText.text(cooked_migration_js_vars.i18n_processing); + $_CookedCSVImportProgress.find('.cooked-progress-bar').css({ "width" : "50%" }); + + // Process CSV + $.post( + cooked_migration_js_vars.ajax_url, + { + action: 'cooked_process_csv', + transient_key: response.data.transient_key + }, + function(processResponse) { + if (processResponse.success) { + $_CookedCSVImportProgress.find('.cooked-progress-bar').css({ "width" : "100%" }); + $_CookedCSVImportProgressText.text(processResponse.data.success + ' / ' + processResponse.data.total + ' ' + cooked_migration_js_vars.i18n_recipes_imported); + + // Show errors if any + if (processResponse.data.errors && processResponse.data.errors.length > 0) { + var errorHtml = '

' + cooked_migration_js_vars.i18n_errors + '

    '; + processResponse.data.errors.forEach(function(error) { + errorHtml += '
  • ' + error + '
  • '; + }); + errorHtml += '
'; + errorsDiv.html(errorHtml).show(); + } + + // Show success message + setTimeout(function() { + $_CookedCSVImportProgress.hide(); + $_CookedCSVImportProgressText.hide(); + $('#cooked-csv-import-completed').show(); + thisButton.hide(); + fileInput.hide(); + }, 2000); + } else { + errorsDiv.html('

' + (processResponse.data.message || cooked_migration_js_vars.i18n_import_failed) + '

').show(); + thisButton.removeClass('disabled').attr('disabled', false); + fileInput.attr('disabled', false); + $_CookedCSVImportProgress.removeClass('cooked-active'); + $_CookedCSVImportProgressText.removeClass('cooked-active'); + } + }, + 'json' + ).fail(function() { + errorsDiv.html('

' + cooked_migration_js_vars.i18n_failed_process_csv + '

').show(); + thisButton.removeClass('disabled').attr('disabled', false); + fileInput.attr('disabled', false); + $_CookedCSVImportProgress.removeClass('cooked-active'); + $_CookedCSVImportProgressText.removeClass('cooked-active'); + }); + } else { + errorsDiv.html('

' + (response.data.message || cooked_migration_js_vars.i18n_file_upload_failed) + '

').show(); + thisButton.removeClass('disabled').attr('disabled', false); + fileInput.attr('disabled', false); + $_CookedCSVImportProgress.removeClass('cooked-active'); + $_CookedCSVImportProgressText.removeClass('cooked-active'); + } + }, + error: function() { + errorsDiv.html('

' + cooked_migration_js_vars.i18n_failed_upload_csv + '

').show(); + thisButton.removeClass('disabled').attr('disabled', false); + fileInput.attr('disabled', false); + $_CookedCSVImportProgress.removeClass('cooked-active'); + $_CookedCSVImportProgressText.removeClass('cooked-active'); + } + }); + }); + } }); })( jQuery ); @@ -156,7 +283,7 @@ function cooked_migrate_recipes(recipe_ids, total_recipes ) { formattedComplete.toLocaleString(); progress_percent = Math.round10( ( cooked_recipe_migrate_counter / total_recipes ) * 100, -1 ); - if ( progress_percent < 2 ){ progress_percent = 2; } + if ( progress_percent < 2 ) { progress_percent = 2; } progress_bar.css( { "width" : progress_percent + "%" } ); var remainingProgress = 100 - progress_percent; @@ -164,13 +291,13 @@ function cooked_migrate_recipes(recipe_ids, total_recipes ) { var estimatedHours, estimatedMinutes; progressIterations += 1; - if ( progress_percent < 100 && progress_percent > 3 && isFinite( estimatedCompletionTime ) ){ + if ( progress_percent < 100 && progress_percent > 3 && isFinite( estimatedCompletionTime ) ) { estimatedHours = Math.floor(estimatedCompletionTime / 3600); estimatedMinutes = Math.floor((estimatedCompletionTime / 60) % 60); if ( estimatedHours >= 1 ){ - progress_text.html( formattedComplete + " / " + formattedTotal + "" + estimatedHours + " hrs, " + estimatedMinutes + " mins " + cooked_migration_js_vars.i18n_remaining + "" ); + progress_text.html( formattedComplete + " / " + formattedTotal + "" + estimatedHours + " " + cooked_migration_js_vars.i18n_hrs + ", " + estimatedMinutes + " " + cooked_migration_js_vars.i18n_mins + " " + cooked_migration_js_vars.i18n_remaining + "" ); } else if ( estimatedMinutes >= 1 ){ - progress_text.html( formattedComplete + " / " + formattedTotal + "" + estimatedMinutes + " mins " + cooked_migration_js_vars.i18n_remaining + "" ); + progress_text.html( formattedComplete + " / " + formattedTotal + "" + estimatedMinutes + " " + cooked_migration_js_vars.i18n_mins + " " + cooked_migration_js_vars.i18n_remaining + "" ); } else { progress_text.text( formattedComplete + " / " + formattedTotal ); } @@ -197,9 +324,7 @@ function cooked_migrate_recipes(recipe_ids, total_recipes ) { function cooked_import_recipes(recipe_ids, total_recipes, import_type) { - var temp_counter = 0, - total_counter = 0, - progress_percent = 0; + var progress_percent = 0; if (total_recipes > 0) { var progress = jQuery( '#cooked-import-progress' ); @@ -250,10 +375,10 @@ function cooked_import_recipes(recipe_ids, total_recipes, import_type) { if ( progress_percent < 100 && progress_percent > 3 && isFinite( estimatedCompletionTime ) ) { estimatedHours = Math.floor(estimatedCompletionTime / 3600); estimatedMinutes = Math.floor((estimatedCompletionTime / 60) % 60); - if ( estimatedHours >= 1 ){ - progress_text.html( formattedComplete + " / " + formattedTotal + "" + estimatedHours + " hrs, " + estimatedMinutes + " mins " + cooked_migration_js_vars.i18n_remaining + "" ); - } else if ( estimatedMinutes >= 1 ){ - progress_text.html( formattedComplete + " / " + formattedTotal + "" + estimatedMinutes + " mins " + cooked_migration_js_vars.i18n_remaining + "" ); + if ( estimatedHours >= 1 ) { + progress_text.html( formattedComplete + " / " + formattedTotal + "" + estimatedHours + " " + cooked_migration_js_vars.i18n_hrs + ", " + estimatedMinutes + " " + cooked_migration_js_vars.i18n_mins + " " + cooked_migration_js_vars.i18n_remaining + "" ); + } else if ( estimatedMinutes >= 1 ) { + progress_text.html( formattedComplete + " / " + formattedTotal + "" + estimatedMinutes + " " + cooked_migration_js_vars.i18n_mins + " " + cooked_migration_js_vars.i18n_remaining + "" ); } else { progress_text.text( formattedComplete + " / " + formattedTotal ); } diff --git a/assets/admin/js/cooked-migration.min.js b/assets/admin/js/cooked-migration.min.js index c632055..26c3f10 100644 --- a/assets/admin/js/cooked-migration.min.js +++ b/assets/admin/js/cooked-migration.min.js @@ -1 +1 @@ -(r=>{r(document).ready(function(){var e=r("#cooked-migration-button"),o=r("#cooked-import-button");r("#cooked-migration-progress"),r("#cooked-migration-progress-text");e.length&&e.on("click",function(e){e.preventDefault();e=r(this);confirm(cooked_migration_js_vars.i18n_confirm_migrate_recipe)&&!e.hasClass("disabled")&&(e.addClass("disabled").attr("disabled",!0),e.hide(),r.post(cooked_migration_js_vars.ajax_url,{action:"cooked_get_migrate_ids"},function(e){var o;e&&(o=JSON.parse(e),0"+i+" hrs, "+r+" mins "+cooked_migration_js_vars.i18n_remaining+""):1<=r?c.html(t+" / "+o+""+r+" mins "+cooked_migration_js_vars.i18n_remaining+""):c.text(t+" / "+o)):c.text(t+" / "+o),cooked_migrate_recipes(e,s)):(a.hide(),c.hide(),jQuery(".recipe-setting-block.migrate_button").find("h3").hide(),jQuery(".recipe-setting-block.migrate_button").find("p:nth-child(2)").hide(),jQuery(".recipe-setting-block.migrate_button").find("ul.cooked-admin-ul").hide(),jQuery("#cooked-migration-button").hide(),jQuery("#cooked-migration-completed").addClass("cooked-active"))}))}function cooked_import_recipes(e,s,a){var n,c,d,o,_=0;0"+i+" hrs, "+r+" mins "+cooked_migration_js_vars.i18n_remaining+""):1<=r?d.html(t+" / "+o+""+r+" mins "+cooked_migration_js_vars.i18n_remaining+""):d.text(t+" / "+o)):d.text(t+" / "+o),cooked_import_recipes(e,s,a)):(n.hide(),d.hide(),jQuery(".recipe-setting-block.import_button").find("h3").hide(),jQuery(".recipe-setting-block.import_button").find("p:nth-child(2)").hide(),jQuery(".recipe-setting-block.import_button").find(".cooked-import-note").hide(),jQuery(".recipe-setting-block.import_button").find("ul.cooked-admin-ul").hide(),jQuery("#cooked-import-button").hide(),jQuery("#cooked-import-completed").addClass("cooked-active"))}))} \ No newline at end of file +(d=>{d(document).ready(function(){var e=d("#cooked-migration-button"),o=d("#cooked-import-button"),i=d("#cooked-csv-import-button"),r=(d("#cooked-csv-import-form"),d("#cooked-migration-progress"),d("#cooked-migration-progress-text"),d("#cooked-csv-import-progress")),a=d("#cooked-csv-import-progress-text");e.length&&e.on("click",function(e){e.preventDefault();e=d(this);confirm(cooked_migration_js_vars.i18n_confirm_migrate_recipe)&&!e.hasClass("disabled")&&(e.addClass("disabled").attr("disabled",!0),e.hide(),d.post(cooked_migration_js_vars.ajax_url,{action:"cooked_get_migrate_ids"},function(e){var o;e&&(o=JSON.parse(e),0

    ",e.data.errors.forEach(function(e){o+="
  • "+e+"
  • "}),o+="
",s.html(o).show()),setTimeout(function(){r.hide(),a.hide(),d("#cooked-csv-import-completed").show(),i.hide(),t.hide()},2e3)):(s.html("

"+(e.data.message||cooked_migration_js_vars.i18n_import_failed)+"

").show(),i.removeClass("disabled").attr("disabled",!1),t.attr("disabled",!1),r.removeClass("cooked-active"),a.removeClass("cooked-active"))},"json").fail(function(){s.html("

"+cooked_migration_js_vars.i18n_failed_process_csv+"

").show(),i.removeClass("disabled").attr("disabled",!1),t.attr("disabled",!1),r.removeClass("cooked-active"),a.removeClass("cooked-active")})):(s.html("

"+(e.data.message||cooked_migration_js_vars.i18n_file_upload_failed)+"

").show(),i.removeClass("disabled").attr("disabled",!1),t.attr("disabled",!1),r.removeClass("cooked-active"),a.removeClass("cooked-active"))},error:function(){s.html("

"+cooked_migration_js_vars.i18n_failed_upload_csv+"

").show(),i.removeClass("disabled").attr("disabled",!1),t.attr("disabled",!1),r.removeClass("cooked-active"),a.removeClass("cooked-active")}})):s.html("

"+cooked_migration_js_vars.i18n_csv_invalid_file+"

").show():s.html("

"+cooked_migration_js_vars.i18n_csv_no_file+"

").show()})})})(jQuery);{function cookedDecimalAdjust(e,o,i){return void 0===i||0==+i?Math[e](o):(i=+i,null===(o=+o)||isNaN(o)||"number"!=typeof i||i%1!=0?NaN:o<0?-cookedDecimalAdjust(e,-o,i):(o=o.toString().split("e"),+((o=(o=Math[e](+(o[0]+"e"+(o[1]?+o[1]-i:-i)))).toString().split("e"))[0]+"e"+(o[1]?+o[1]+i:i))))}}Math.round10||(Math.round10=function(e,o){return cookedDecimalAdjust("round",e,o)});var cooked_recipe_migrate_counter=0,progressIterations=0;function cooked_migrate_recipes(e,r){var a,d,c,o,n=0;0"+t+" "+cooked_migration_js_vars.i18n_hrs+", "+s+" "+cooked_migration_js_vars.i18n_mins+" "+cooked_migration_js_vars.i18n_remaining+""):1<=s?c.html(i+" / "+o+""+s+" "+cooked_migration_js_vars.i18n_mins+" "+cooked_migration_js_vars.i18n_remaining+""):c.text(i+" / "+o)):c.text(i+" / "+o),cooked_migrate_recipes(e,r)):(a.hide(),c.hide(),jQuery(".recipe-setting-block.migrate_button").find("h3").hide(),jQuery(".recipe-setting-block.migrate_button").find("p:nth-child(2)").hide(),jQuery(".recipe-setting-block.migrate_button").find("ul.cooked-admin-ul").hide(),jQuery("#cooked-migration-button").hide(),jQuery("#cooked-migration-completed").addClass("cooked-active"))}))}function cooked_import_recipes(e,r,a){var d,c,n,o,_=0;0"+t+" "+cooked_migration_js_vars.i18n_hrs+", "+s+" "+cooked_migration_js_vars.i18n_mins+" "+cooked_migration_js_vars.i18n_remaining+""):1<=s?n.html(i+" / "+o+""+s+" "+cooked_migration_js_vars.i18n_mins+" "+cooked_migration_js_vars.i18n_remaining+""):n.text(i+" / "+o)):n.text(i+" / "+o),cooked_import_recipes(e,r,a)):(d.hide(),n.hide(),jQuery(".recipe-setting-block.import_button").find("h3").hide(),jQuery(".recipe-setting-block.import_button").find("p:nth-child(2)").hide(),jQuery(".recipe-setting-block.import_button").find(".cooked-import-note").hide(),jQuery(".recipe-setting-block.import_button").find("ul.cooked-admin-ul").hide(),jQuery("#cooked-import-button").hide(),jQuery("#cooked-import-completed").addClass("cooked-active"))}))} \ No newline at end of file diff --git a/assets/css/print.css b/assets/css/print.css index 270a8d7..5bf986a 100644 --- a/assets/css/print.css +++ b/assets/css/print.css @@ -25,8 +25,9 @@ body p { font-size:1rem; line-height:1.6; margin:0 0 1rem; padding:0; } .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 .cooked-dir-content { padding-left:2.75rem; } .cooked-recipe-directions .cooked-direction.cooked-direction-has-number-wide .cooked-dir-content { padding-left:2.75rem; } +.cooked-recipe-directions .cooked-direction.cooked-direction-has-number-wide .cooked-direction-number { width:2ch; text-align:right; font-variant-numeric: tabular-nums; } .cooked-recipe-directions .cooked-direction-number { opacity:0.35; position:absolute; display:inline-block; width:auto; height:1rem; line-height:1rem; font-weight:800; top:0; left:0; font-size:1.5rem; } .cooked-recipe-notes { display:block; padding:0; margin:0 0 2rem; diff --git a/assets/css/print.min.css b/assets/css/print.min.css index 9aceb98..f03fbb8 100644 --- a/assets/css/print.min.css +++ b/assets/css/print.min.css @@ -1 +1 @@ -body,html{color:#000;box-sizing:border-box;padding:0;margin:0;width:100%;height:100%;font-family:sans-serif;font-size:1rem;line-height:1.6rem}body *{box-sizing:border-box}body img{max-width:100%;height:auto}body{padding:0 30px;max-width:800px;margin:0 auto}body a{color:inherit;text-decoration:none}body h1{font-size:1.75rem;line-height:1.5;margin:0 0 1rem;padding:0}body p{font-size:1rem;line-height:1.6;margin:0 0 1rem;padding:0}.cooked-clearfix:after{content:"";display:table;clear:both}.cooked-button,button.cooked-button{cursor:pointer;border:none;display:inline-block;padding:8px 10px;line-height:1;font-size:13px;font-weight:600;color:#fff;background:#666;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cooked-button:hover,button.cooked-button:hover{background:#333}.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{width:100%;max-width:100%;height:auto;border:none;display:block;margin:0 0 2rem;padding:0}.cooked-post-featured-image img{width:100%;max-width:100%}.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: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-name{line-height:1.4rem;padding:1px 0}.cooked-recipe-ingredients .cooked-ingredient-checkbox{transform:scale(1);position:absolute;top:.5rem;left:0;display:inline-block;width:1rem;height:1rem;line-height:1rem;border:1px solid #ddd;border-color:rgba(0,0,0,.2);margin:.2rem .8rem 0 0}.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:1.8rem;width:100%;height:100%;text-align:center}.cooked-recipe-ingredients .cooked-ingredient.cooked-checked{text-decoration:line-through;opacity:.5}.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:1rem;line-height:1rem;font-weight:800;top:0;left:0;font-size:1.5rem}.cooked-recipe-notes{display:block;padding:0;margin:0 0 2rem}.cooked-recipe-notes ol,.cooked-recipe-notes ul{padding-left:1.5rem}.cooked-recipe-notes .cooked-heading{margin:0 0 1rem;display:block;font-weight:600;font-size:1.25rem;line-height:1.5}.cooked-recipe-excerpt{display:block;padding:0;margin:0 0 1rem}.cooked-recipe-info{display:block;padding:0;margin:0 0 1rem;line-height:2.25rem}.cooked-recipe-info>section.cooked-left>span,.cooked-recipe-info>span{line-height:1.3rem;position:relative;box-sizing:border-box;vertical-align:top;margin:0 2rem 1rem 0;font-size:.85rem;display:inline-block;width:auto}.cooked-recipe-info>section.cooked-right>span{line-height:1.4rem;position:relative;box-sizing:border-box;vertical-align:top;margin:0 0 1rem 2rem;font-size:.85rem;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;font-weight:800;text-transform:uppercase;display:block}.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-recipe-info span.cooked-servings{padding-left:3rem}.cooked-recipe-info span.cooked-servings select.cooked-servings-changer{opacity:0;position:absolute;bottom:3px;left:0;-webkit-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-nutrition-label{width:100%;max-width:400px;margin:0 auto 2rem;background:#fff;font-size:.9rem;border:1px solid #aaa;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:15px}.cooked-nutrition-label .cooked-nutrition-title{font-size:2rem;line-height:1;letter-spacing:0;font-weight:800;padding:0;margin:0 0 .4rem;color:#333}.cooked-nutrition-label.cooked-float-right{max-width:45%;margin:0 0 3rem 3rem;float:right}.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:.5rem 0 0 0!important;margin:0!important;font-size:.9rem}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 dt{padding:2px 0 0;margin:2px 0 0}body .cooked-nutrition-label dt:after{content:"";display:table;clear:both}body .cooked-nutrition-label div.cooked-nut-spacer,body .cooked-nutrition-label dt.cooked-nut-spacer{border:none;height:.5rem;padding:0;background:#333}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{padding:0;margin:0 0 0 1.5rem}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:.75rem}body .cooked-nutrition-label span.cooked-calories-fat,body .cooked-nutrition-label strong.cooked-nut-label{font-weight:400}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:50%;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,body .cooked-nutrition-label dl.cooked-nut-bottom dt:nth-last-child(2){border:none}body .cooked-nutrition-label dl.cooked-nut-bottom dt:nth-last-child(2):nth-child(even){border-bottom:1px solid #aaa}#cooked-print-options{margin:0 0 2rem;background:0 0;padding:2.2rem 0 2.5rem;border-bottom:1px dashed rgba(0,0,0,.25)}#cooked-print-options h3{margin:0 0 .25rem;font-size:.75rem;text-transform:uppercase;font-weight:800}#cooked-print-options label{font-size:.9rem;cursor:pointer;position:relative;display:inline-block;top:1px;margin-right:1rem}#cooked-print-options .cooked-button{float:right;margin-top:1.45rem}.cooked-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);-webkit-transition-timing-function:cubic-bezier(.42,0,.15,1);-moz-transition-timing-function:cubic-bezier(.42,0,.15,1);-o-transition-timing-function:cubic-bezier(.42,0,.15,1);transition-timing-function:cubic-bezier(.42,0,.15,1)}@media print{body{padding:20px 30px;font-size:.9rem}#cooked-print-options{display:none}} \ No newline at end of file +body,html{color:#000;box-sizing:border-box;padding:0;margin:0;width:100%;height:100%;font-family:sans-serif;font-size:1rem;line-height:1.6rem}body *{box-sizing:border-box}body img{max-width:100%;height:auto}body{padding:0 30px;max-width:800px;margin:0 auto}body a{color:inherit;text-decoration:none}body h1{font-size:1.75rem;line-height:1.5;margin:0 0 1rem;padding:0}body p{font-size:1rem;line-height:1.6;margin:0 0 1rem;padding:0}.cooked-clearfix:after{content:"";display:table;clear:both}.cooked-button,button.cooked-button{cursor:pointer;border:none;display:inline-block;padding:8px 10px;line-height:1;font-size:13px;font-weight:600;color:#fff;background:#666;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cooked-button:hover,button.cooked-button:hover{background:#333}.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{width:100%;max-width:100%;height:auto;border:none;display:block;margin:0 0 2rem;padding:0}.cooked-post-featured-image img{width:100%;max-width:100%}.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: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-name{line-height:1.4rem;padding:1px 0}.cooked-recipe-ingredients .cooked-ingredient-checkbox{transform:scale(1);position:absolute;top:.5rem;left:0;display:inline-block;width:1rem;height:1rem;line-height:1rem;border:1px solid #ddd;border-color:rgba(0,0,0,.2);margin:.2rem .8rem 0 0}.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:1.8rem;width:100%;height:100%;text-align:center}.cooked-recipe-ingredients .cooked-ingredient.cooked-checked{text-decoration:line-through;opacity:.5}.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:2.75rem}.cooked-recipe-directions .cooked-direction.cooked-direction-has-number-wide .cooked-dir-content{padding-left:2.75rem}.cooked-recipe-directions .cooked-direction.cooked-direction-has-number-wide .cooked-direction-number{width:2ch;text-align:right;font-variant-numeric:tabular-nums}.cooked-recipe-directions .cooked-direction-number{opacity:.35;position:absolute;display:inline-block;width:auto;height:1rem;line-height:1rem;font-weight:800;top:0;left:0;font-size:1.5rem}.cooked-recipe-notes{display:block;padding:0;margin:0 0 2rem}.cooked-recipe-notes ol,.cooked-recipe-notes ul{padding-left:1.5rem}.cooked-recipe-notes .cooked-heading{margin:0 0 1rem;display:block;font-weight:600;font-size:1.25rem;line-height:1.5}.cooked-recipe-excerpt{display:block;padding:0;margin:0 0 1rem}.cooked-recipe-info{display:block;padding:0;margin:0 0 1rem;line-height:2.25rem}.cooked-recipe-info>section.cooked-left>span,.cooked-recipe-info>span{line-height:1.3rem;position:relative;box-sizing:border-box;vertical-align:top;margin:0 2rem 1rem 0;font-size:.85rem;display:inline-block;width:auto}.cooked-recipe-info>section.cooked-right>span{line-height:1.4rem;position:relative;box-sizing:border-box;vertical-align:top;margin:0 0 1rem 2rem;font-size:.85rem;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;font-weight:800;text-transform:uppercase;display:block}.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-recipe-info span.cooked-servings{padding-left:3rem}.cooked-recipe-info span.cooked-servings select.cooked-servings-changer{opacity:0;position:absolute;bottom:3px;left:0;-webkit-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-nutrition-label{width:100%;max-width:400px;margin:0 auto 2rem;background:#fff;font-size:.9rem;border:1px solid #aaa;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:15px}.cooked-nutrition-label .cooked-nutrition-title{font-size:2rem;line-height:1;letter-spacing:0;font-weight:800;padding:0;margin:0 0 .4rem;color:#333}.cooked-nutrition-label.cooked-float-right{max-width:45%;margin:0 0 3rem 3rem;float:right}.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:.5rem 0 0 0!important;margin:0!important;font-size:.9rem}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 dt{padding:2px 0 0;margin:2px 0 0}body .cooked-nutrition-label dt:after{content:"";display:table;clear:both}body .cooked-nutrition-label div.cooked-nut-spacer,body .cooked-nutrition-label dt.cooked-nut-spacer{border:none;height:.5rem;padding:0;background:#333}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{padding:0;margin:0 0 0 1.5rem}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:.75rem}body .cooked-nutrition-label span.cooked-calories-fat,body .cooked-nutrition-label strong.cooked-nut-label{font-weight:400}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:50%;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,body .cooked-nutrition-label dl.cooked-nut-bottom dt:nth-last-child(2){border:none}body .cooked-nutrition-label dl.cooked-nut-bottom dt:nth-last-child(2):nth-child(even){border-bottom:1px solid #aaa}#cooked-print-options{margin:0 0 2rem;background:0 0;padding:2.2rem 0 2.5rem;border-bottom:1px dashed rgba(0,0,0,.25)}#cooked-print-options h3{margin:0 0 .25rem;font-size:.75rem;text-transform:uppercase;font-weight:800}#cooked-print-options label{font-size:.9rem;cursor:pointer;position:relative;display:inline-block;top:1px;margin-right:1rem}#cooked-print-options .cooked-button{float:right;margin-top:1.45rem}.cooked-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);-webkit-transition-timing-function:cubic-bezier(.42,0,.15,1);-moz-transition-timing-function:cubic-bezier(.42,0,.15,1);-o-transition-timing-function:cubic-bezier(.42,0,.15,1);transition-timing-function:cubic-bezier(.42,0,.15,1)}@media print{body{padding:20px 30px;font-size:.9rem}#cooked-print-options{display:none}} \ No newline at end of file diff --git a/assets/css/style.css b/assets/css/style.css index 709a36d..4c25ce9 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -213,13 +213,20 @@ body .cooked-post-featured-image img { .cooked-recipe-directions .cooked-direction.cooked-direction-has-number .cooked-dir-content { - padding-left: 2rem; + padding-left: 2.75rem; } .cooked-recipe-directions .cooked-direction.cooked-direction-has-number-wide .cooked-dir-content { padding-left: 2.75rem; } +.cooked-recipe-directions + .cooked-direction.cooked-direction-has-number-wide + .cooked-direction-number { + width: 2ch; + text-align: right; + font-variant-numeric: tabular-nums; +} .cooked-recipe-directions .cooked-direction-number { opacity: 0.35; position: absolute; @@ -1717,7 +1724,7 @@ body .cooked-pagination-numbered > a:hover { .cooked-recipe-directions .cooked-direction.cooked-direction-has-number .cooked-dir-content { - padding-left: 2.3rem; + padding-left: 3.05rem; } .cooked-fsm .cooked-recipe-directions diff --git a/assets/css/style.min.css b/assets/css/style.min.css index 02042a6..c07e47a 100644 --- a/assets/css/style.min.css +++ b/assets/css/style.min.css @@ -1 +1 @@ -#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 +#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:2.75rem}.cooked-recipe-directions .cooked-direction.cooked-direction-has-number-wide .cooked-dir-content{padding-left:2.75rem}.cooked-recipe-directions .cooked-direction.cooked-direction-has-number-wide .cooked-direction-number{width:2ch;text-align:right;font-variant-numeric:tabular-nums}.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:3.05rem}.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 0045676..ea8981c 100644 --- a/assets/js/cooked-functions.js +++ b/assets/js/cooked-functions.js @@ -47,20 +47,19 @@ var cooked_loading = false; if ( $_Cooked_Ingredient_Boxes.length ) { init_cooked_ingredients($_Cooked_Ingredient_Boxes); + } - function init_cooked_ingredients( Cooked_Ingredient_Boxes ){ - Cooked_Ingredient_Boxes.on( 'click',function(e){ - var thisCheckbox = $(this); - if ( thisCheckbox.hasClass( 'cooked-checked' ) ){ - thisCheckbox.parent().removeClass( 'cooked-checked' ); - thisCheckbox.removeClass( 'cooked-checked' ); - } else { - thisCheckbox.parent().addClass( 'cooked-checked' ); - thisCheckbox.addClass( 'cooked-checked' ); - } - }); - } - + function init_cooked_ingredients( Cooked_Ingredient_Boxes ){ + Cooked_Ingredient_Boxes.on( 'click',function(e){ + var thisCheckbox = $(this); + if ( thisCheckbox.hasClass( 'cooked-checked' ) ){ + thisCheckbox.parent().removeClass( 'cooked-checked' ); + thisCheckbox.removeClass( 'cooked-checked' ); + } else { + thisCheckbox.parent().addClass( 'cooked-checked' ); + thisCheckbox.addClass( 'cooked-checked' ); + } + }); } /**** 4. Servings Switcher ****/ diff --git a/assets/js/cooked-functions.min.js b/assets/js/cooked-functions.min.js index f61a9f6..e31d7e2 100644 --- a/assets/js/cooked-functions.min.js +++ b/assets/js/cooked-functions.min.js @@ -1 +1 @@ -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 +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(){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"))})}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")}$_Cooked_Fotorama.length&&$_Cooked_Fotorama.fotorama(),$_Cooked_Ingredient_Boxes.length&&i($_Cooked_Ingredient_Boxes),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 8b6bb76..2cdad74 100644 --- a/composer.json +++ b/composer.json @@ -6,7 +6,7 @@ "recipe" ], "homepage": "https://wordpress.org/plugins/cooked/", - "version": "1.12.0", + "version": "1.13.0", "type": "wordpress-plugin", "license": "GPL-3.0-or-later", "prefer-stable": true, diff --git a/composer.lock b/composer.lock index 334a064..734c712 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": "fa62c0daf35b8a2c705ffc4eafca6089", + "content-hash": "a4203b5d737ffaa046a8695c4a300dc7", "packages": [ { "name": "nxp/math-executor", @@ -76,5 +76,5 @@ "platform-dev": { "php": "^7 || ^8" }, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" } diff --git a/cooked.php b/cooked.php index c38a98c..125f27a 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.12.0 +Version: 1.13.0 Text Domain: cooked Domain Path: languages License: GPL2 @@ -30,8 +30,8 @@ require_once __DIR__ . '/vendor/autoload.php'; -define( 'COOKED_VERSION', '1.12.0' ); define( 'COOKED_DEV', false ); +define( 'COOKED_VERSION', '1.13.0' ); if ( ! class_exists( 'Cooked_Plugin' ) ) : @@ -484,6 +484,10 @@ private function includes() { 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'; + + if ( defined( 'WP_CLI' ) && WP_CLI ) { + require_once COOKED_DIR . 'includes/class.cooked-cli.php'; + } } /** diff --git a/includes/class.cooked-admin-enqueues.php b/includes/class.cooked-admin-enqueues.php index 1b13a14..1a752cd 100644 --- a/includes/class.cooked-admin-enqueues.php +++ b/includes/class.cooked-admin-enqueues.php @@ -148,6 +148,20 @@ 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_csv_import' => __('Are you sure you want to import recipes from this CSV file?', 'cooked'), + 'i18n_csv_no_file' => __('Please select a CSV file.', 'cooked'), + 'i18n_csv_invalid_file' => __('Please select a valid CSV file.', 'cooked'), + 'i18n_uploading' => __('Uploading...', 'cooked'), + 'i18n_processing' => __('Processing...', 'cooked'), + 'i18n_recipes_imported' => __('recipes imported', 'cooked'), + 'i18n_errors' => __('Errors:', 'cooked'), + 'i18n_import_failed' => __('Import failed.', 'cooked'), + 'i18n_failed_process_csv' => __('Failed to process CSV file.', 'cooked'), + 'i18n_failed_upload_csv' => __('Failed to upload CSV file.', 'cooked'), + 'i18n_file_upload_failed' => __('File upload failed.', 'cooked'), + 'i18n_something_wrong' => __('Something went wrong', 'cooked'), + 'i18n_hrs' => __('hrs', 'cooked'), + 'i18n_mins' => __('mins', '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' ), @@ -155,7 +169,7 @@ public function admin_enqueues( $hook ) { ]; // Cooked Admin Style Assets - wp_register_script( 'cooked-functions', COOKED_URL . 'assets/admin/js/cooked-functions' . $min . '.js', ['jquery'], COOKED_VERSION, true ); + wp_register_script( 'cooked-admin-functions', COOKED_URL . 'assets/admin/js/cooked-functions' . $min . '.js', ['jquery'], COOKED_VERSION, true ); wp_register_script( 'cooked-migration', COOKED_URL . 'assets/admin/js/cooked-migration' . $min . '.js', ['jquery'], COOKED_VERSION, true ); wp_enqueue_style( 'cooked-admin', COOKED_URL . 'assets/admin/css/style' . $min . '.css', [], COOKED_VERSION ); wp_enqueue_style( 'wp-color-picker' ); @@ -166,9 +180,9 @@ public function admin_enqueues( $hook ) { wp_enqueue_style('cooked-tooltipster-theme', COOKED_URL . 'assets/admin/css/tooltipster/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-cooked' . $min . '.css', [], COOKED_VERSION, 'screen' ); // Cooked Admin Script - wp_localize_script('cooked-functions', 'cooked_functions_js_vars', $cooked_js_vars ); + wp_localize_script('cooked-admin-functions', 'cooked_admin_functions_js_vars', $cooked_js_vars ); wp_localize_script('cooked-migration', 'cooked_migration_js_vars', $cooked_js_vars ); - wp_enqueue_script('cooked-functions'); + wp_enqueue_script('cooked-admin-functions'); wp_enqueue_script('cooked-migration'); endif; } diff --git a/includes/class.cooked-admin-menus.php b/includes/class.cooked-admin-menus.php index 8d8860f..f0f7572 100644 --- a/includes/class.cooked-admin-menus.php +++ b/includes/class.cooked-admin-menus.php @@ -93,7 +93,7 @@ public function cooked_settings_page() { include COOKED_DIR . 'templates/admin/settings.php'; } - // Settings Panel + // Import Page public function cooked_import_page() { if (!current_user_can('edit_cooked_settings')) { wp_die(__('You do not have sufficient permissions to access this page.', 'cooked')); diff --git a/includes/class.cooked-ajax.php b/includes/class.cooked-ajax.php index d556d46..115d540 100644 --- a/includes/class.cooked-ajax.php +++ b/includes/class.cooked-ajax.php @@ -48,10 +48,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' ] ); + // CSV Import - Upload file + add_action( 'wp_ajax_cooked_upload_csv', [&$this, 'upload_csv']); + + // CSV Import - Process file + add_action( 'wp_ajax_cooked_process_csv', [&$this, 'process_csv']); } public function get_migrate_ids() { @@ -264,179 +265,6 @@ 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(); @@ -515,7 +343,7 @@ public function save_default() { $_cooked_settings['default_content'] = wp_kses_post( $_POST['default_content'] ); update_option('cooked_settings', $_cooked_settings); } else { - echo 'No default content provided.'; + echo __( 'No default content provided.', 'cooked' ); } wp_die(); @@ -538,4 +366,83 @@ public function load_default() { wp_die(); } + + /** + * Handle CSV file upload + */ + public function upload_csv() { + if (!current_user_can('edit_cooked_recipes')) { + wp_send_json_error(['message' => __('You do not have permission to import recipes.', 'cooked')]); + } + + if (!isset($_FILES['csv_file']) || $_FILES['csv_file']['error'] !== UPLOAD_ERR_OK) { + wp_send_json_error(['message' => __('File upload failed.', 'cooked')]); + } + + // Validate file type + $file_type = wp_check_filetype($_FILES['csv_file']['name']); + if ($file_type['ext'] !== 'csv') { + wp_send_json_error(['message' => __('Invalid file type. Please upload a CSV file.', 'cooked')]); + } + + // Use WordPress upload handler + require_once ABSPATH . 'wp-admin/includes/file.php'; + $upload = wp_handle_upload($_FILES['csv_file'], ['test_form' => false]); + + if (isset($upload['error'])) { + wp_send_json_error(['message' => $upload['error']]); + } + + // Store file path in transient for processing + $transient_key = 'cooked_csv_import_' . get_current_user_id() . '_' . time(); + set_transient($transient_key, $upload['file'], 3600); // 1 hour + + wp_send_json_success([ + 'transient_key' => $transient_key, + 'file_path' => $upload['file'] + ]); + } + + /** + * Process CSV file and import recipes + */ + public function process_csv() { + if (!current_user_can('edit_cooked_recipes')) { + wp_send_json_error(['message' => __('You do not have permission to import recipes.', 'cooked')]); + } + + $transient_key = isset($_POST['transient_key']) ? sanitize_text_field($_POST['transient_key']) : ''; + $file_path = get_transient($transient_key); + + if (!$file_path || !file_exists($file_path)) { + wp_send_json_error(['message' => __('CSV file not found. Please upload again.', 'cooked')]); + } + + // Process the CSV file + require_once COOKED_DIR . 'includes/class.cooked-csv-import.php'; + $results = Cooked_CSV_Import::import_from_file($file_path); + + // Clean up + if (file_exists($file_path)) { + @unlink($file_path); + } + delete_transient($transient_key); + + if ($results['success'] > 0) { + wp_send_json_success([ + 'message' => sprintf( + __('Successfully imported %d recipe(s).', 'cooked'), + $results['success'] + ), + 'success' => $results['success'], + 'total' => $results['total'], + 'errors' => $results['errors'] + ]); + } else { + wp_send_json_error([ + 'message' => __('No recipes were imported.', 'cooked'), + 'errors' => $results['errors'] + ]); + } + } } diff --git a/includes/class.cooked-cli.php b/includes/class.cooked-cli.php new file mode 100644 index 0000000..26b3bf2 --- /dev/null +++ b/includes/class.cooked-cli.php @@ -0,0 +1,85 @@ + + * : The tool to run. Use `wp cooked tools list` to see available tools. + * + * ## EXAMPLES + * + * wp cooked tools run remove_recipes_from_cooked_user_meta + * wp cooked tools run update_rewrite_rules + * + * @param array $args Positional args. 0 = tool name. + * @param array $assoc_args Associative args. + */ + public function run( $args, $assoc_args ) { + if ( empty( $args[0] ) ) { + \WP_CLI::error( __( 'Please provide a tool name. Use `wp cooked tools list` to see available tools.', 'cooked' ) ); + } + + $tool_name = $args[0]; + $result = Cooked_Updates::run_tool( $tool_name ); + + if ( is_wp_error( $result ) ) { + \WP_CLI::error( $result->get_error_message() ); + } + + \WP_CLI::success( __( 'Tool completed successfully.', 'cooked' ) ); + } + + /** + * List available Cooked tools that can be run on demand. + * + * ## EXAMPLES + * + * wp cooked tools list + * + * @param array $args Positional args. + * @param array $assoc_args Associative args. + */ + public function list_tools( $args, $assoc_args ) { + $tools = Cooked_Updates::get_runnable_tools(); + + if ( empty( $tools ) ) { + \WP_CLI::log( __( 'No tools available.', 'cooked' ) ); + return; + } + + $rows = []; + foreach ( $tools as $tool ) { + $rows[] = [ + 'id' => $tool['id'], + 'name' => $tool['name'], + 'description' => $tool['description'], + ]; + } + + \WP_CLI\Utils\format_items( 'table', $rows, [ 'id', 'name', 'description' ] ); + } +} + +\WP_CLI::add_command( 'cooked tools', 'Cooked_CLI_Tools_Command' ); diff --git a/includes/class.cooked-csv-import.php b/includes/class.cooked-csv-import.php new file mode 100644 index 0000000..ec1b72d --- /dev/null +++ b/includes/class.cooked-csv-import.php @@ -0,0 +1,538 @@ + 0, + 'errors' => [], + 'total' => 0 + ]; + + if ( ! file_exists( $file_path ) ) { + $results['errors'][] = __( 'CSV file not found.', 'cooked' ); + return $results; + } + + // Open and parse CSV file + $handle = fopen( $file_path, 'r' ); + if ( $handle === false ) { + $results['errors'][] = __( 'Could not open CSV file.', 'cooked' ); + return $results; + } + + // Read header row + $headers = fgetcsv( $handle ); + if ( $headers === false || empty( $headers ) ) { + $results['errors'][] = __( 'CSV file is empty or invalid.', 'cooked' ); + fclose( $handle ); + return $results; + } + + // Normalize headers (trim and lowercase) + $headers = array_map( 'trim', $headers ); + $headers = array_map( 'strtolower', $headers ); + + // Check for required title column + if ( ! in_array( 'title', $headers ) ) { + $results['errors'][] = __( 'CSV file must contain a "title" column.', 'cooked' ); + fclose( $handle ); + return $results; + } + + $row_number = 1; + while ( ( $row = fgetcsv( $handle ) ) !== false ) { + $row_number++; + $results['total']++; + + // Skip empty rows + if ( empty( array_filter( $row ) ) ) { + continue; + } + + // Map row data to headers + $data = []; + foreach ( $headers as $index => $header ) { + $data[ $header ] = isset( $row[ $index ] ) ? trim( $row[ $index ] ) : ''; + } + + // Import this recipe + try { + $import_result = self::import_recipe( $data, $row_number ); + if ( $import_result['success'] ) { + $results['success']++; + } else { + $error_msg = isset( $import_result['error'] ) ? $import_result['error'] : __( 'Unknown error', 'cooked' ); + $results['errors'][] = sprintf( __( 'Row %d: %s', 'cooked' ), $row_number, $error_msg ); + if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { + error_log( 'Cooked CSV Import Error Row ' . $row_number . ': ' . $error_msg ); + } + } + } catch ( Exception $e ) { + $error_msg = $e->getMessage(); + $results['errors'][] = sprintf( __( 'Row %d: %s', 'cooked' ), $row_number, $error_msg ); + if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { + error_log( 'Cooked CSV Import Exception Row ' . $row_number . ': ' . $error_msg ); + error_log( 'Stack trace: ' . $e->getTraceAsString() ); + } + } + } + + fclose( $handle ); + return $results; + } + + /** + * Import a single recipe from CSV data + * + * @param array $data Recipe data from CSV row + * @param int $row_number Row number for error reporting + * @return array Result with success status and error message if any + */ + public static function import_recipe( $data, $row_number = 0 ) { + global $_cooked_settings; + + // Validate required fields + if ( empty( $data['title'] ) ) { + return [ + 'success' => false, + 'error' => __( 'Title is required', 'cooked' ) + ]; + } + + // Get default content + if ( isset( $_cooked_settings['default_content'] ) ) { + $default_content = stripslashes( $_cooked_settings['default_content'] ); + } else { + $default_content = Cooked_Recipes::default_content(); + } + + // Create new recipe post + $new_recipe = [ + 'post_type' => 'cp_recipe', + 'post_status' => 'draft', + 'post_title' => sanitize_text_field( $data['title'] ), + 'post_content' => '', + 'post_author' => get_current_user_id(), + ]; + + $recipe_id = wp_insert_post( $new_recipe ); + if ( is_wp_error( $recipe_id ) ) { + return [ + 'success' => false, + 'error' => $recipe_id->get_error_message() + ]; + } + + // Prepare recipe meta + $recipe_meta = []; + $recipe_meta['cooked_version'] = COOKED_VERSION; + $recipe_meta['content'] = $default_content; + $recipe_meta['excerpt'] = isset( $data['excerpt'] ) ? sanitize_text_field( $data['excerpt'] ) : ''; + $recipe_meta['seo_description'] = isset( $data['seo_description'] ) ? sanitize_text_field( $data['seo_description'] ) : ( isset( $data['excerpt'] ) ? sanitize_text_field( $data['excerpt'] ) : '' ); + $recipe_meta['notes'] = isset( $data['notes'] ) ? wp_kses_post( $data['notes'] ) : ''; + + // Difficulty level + $difficulty_level = isset( $data['difficulty_level'] ) ? intval( $data['difficulty_level'] ) : 0; + if ( $difficulty_level < 1 || $difficulty_level > 3 ) { + $difficulty_level = 0; + } + $recipe_meta['difficulty_level'] = $difficulty_level; + + // Times + $recipe_meta['prep_time'] = isset( $data['prep_time'] ) ? intval( $data['prep_time'] ) : 0; + $recipe_meta['cook_time'] = isset( $data['cook_time'] ) ? intval( $data['cook_time'] ) : 0; + $recipe_meta['total_time'] = $recipe_meta['prep_time'] + $recipe_meta['cook_time']; + if ( isset( $data['total_time'] ) && ! empty( $data['total_time'] ) ) { + $recipe_meta['total_time'] = intval( $data['total_time'] ); + } + + // Parse ingredients + $recipe_meta['ingredients'] = []; + if ( ! empty( $data['ingredients'] ) ) { + $measurements = Cooked_Measurements::get(); + + // Split by | to get all parts + // Format: amount|measurement|name|amount|measurement|name||sub_amount|sub_measurement|sub_name|... + // When we see ||, it becomes two consecutive empty strings in the array + $all_parts = array_map( 'trim', explode( '|', $data['ingredients'] ) ); + $i = 0; + + while ( $i < count( $all_parts ) ) { + // Skip empty parts (they come from || separator) + if ( empty( $all_parts[ $i ] ) ) { + $i++; + continue; + } + + $part = $all_parts[ $i ]; + + // Check if it's a section heading (starts with #) + if ( strpos( $part, '#' ) === 0 ) { + $recipe_meta['ingredients'][] = [ + 'section_heading_name' => trim( $part, '#' ), + ]; + $i++; + continue; + } + + // Collect next 3 non-empty parts for an ingredient (amount|measurement|name) + $ingredient_parts = []; + $j = $i; + while ( count( $ingredient_parts ) < 3 && $j < count( $all_parts ) ) { + $p = trim( $all_parts[ $j ] ); + if ( ! empty( $p ) ) { + $ingredient_parts[] = $p; + } + $j++; + } + + if ( count( $ingredient_parts ) >= 3 ) { + $ingredient = self::parse_ingredient_parts( $ingredient_parts, $measurements ); + $i = $j; // Move past the collected parts + + // Check if next parts are empty (indicating || separator for substitution) + // Look ahead to see if we have empty parts followed by non-empty parts + $next_empty_count = 0; + $k = $i; + while ( $k < count( $all_parts ) && empty( trim( $all_parts[ $k ] ) ) ) { + $next_empty_count++; + $k++; + } + + // If we have empty parts (from ||) and then more parts, it's a substitution + if ( $next_empty_count > 0 && $k < count( $all_parts ) ) { + // Collect substitution parts (next 3 non-empty parts) + $sub_parts = []; + $sub_i = $k; + while ( count( $sub_parts ) < 3 && $sub_i < count( $all_parts ) ) { + $sub_part = trim( $all_parts[ $sub_i ] ); + if ( ! empty( $sub_part ) ) { + $sub_parts[] = $sub_part; + } + $sub_i++; + } + + // Parse substitution + if ( count( $sub_parts ) >= 3 ) { + $ingredient['sub_amount'] = sanitize_text_field( $sub_parts[0] ); + $sub_measurement = sanitize_text_field( $sub_parts[1] ); + $matched_sub_measurement = self::match_measurement( $sub_measurement, $measurements ); + if ( $matched_sub_measurement ) { + $ingredient['sub_measurement'] = $matched_sub_measurement; + } + $ingredient['sub_name'] = sanitize_text_field( $sub_parts[2] ); + } elseif ( count( $sub_parts ) == 2 ) { + $ingredient['sub_amount'] = sanitize_text_field( $sub_parts[0] ); + $ingredient['sub_name'] = sanitize_text_field( $sub_parts[1] ); + } elseif ( count( $sub_parts ) == 1 ) { + $ingredient['sub_name'] = sanitize_text_field( $sub_parts[0] ); + } + + $i = $sub_i; // Move past substitution + } + + $recipe_meta['ingredients'][] = $ingredient; + } else { + // Not enough parts for a complete ingredient, skip + $i++; + } + } + } + + // Parse directions + $recipe_meta['directions'] = []; + if ( ! empty( $data['directions'] ) ) { + $directions = explode( '|', $data['directions'] ); + foreach ( $directions as $direction_string ) { + $direction_string = trim( $direction_string ); + if ( empty( $direction_string ) ) { + continue; + } + + // Check if it's a section heading (starts with #) + if ( strpos( $direction_string, '#' ) === 0 ) { + $recipe_meta['directions'][] = [ + 'section_heading_name' => trim( $direction_string, '#' ), + ]; + continue; + } + + $recipe_meta['directions'][] = [ + 'content' => wp_kses_post( $direction_string ), + ]; + } + } + + // Nutrition data + $recipe_meta['nutrition'] = []; + if ( isset( $data['servings'] ) && ! empty( $data['servings'] ) ) { + $recipe_meta['nutrition']['servings'] = sanitize_text_field( $data['servings'] ); + } + if ( isset( $data['calories'] ) && ! empty( $data['calories'] ) ) { + $recipe_meta['nutrition']['calories'] = intval( $data['calories'] ); + } + + // Save recipe meta + $recipe_meta = Cooked_Recipe_Meta::meta_cleanup( $recipe_meta ); + update_post_meta( $recipe_id, '_recipe_settings', $recipe_meta ); + + // Update post excerpt + $recipe_excerpt = ! empty( $recipe_meta['excerpt'] ) ? $recipe_meta['excerpt'] : get_the_title( $recipe_id ); + $seo_content = apply_filters( 'cooked_seo_recipe_content', '

' . wp_kses_post( $recipe_excerpt ) . '

' . __( 'Ingredients', 'cooked' ) . '

[cooked-ingredients checkboxes=false]

' . __( 'Directions', 'cooked' ) . '

[cooked-directions numbers=false]' ); + $seo_content = do_shortcode( $seo_content ); + + $should_update_content = apply_filters( 'cooked_should_update_post_content', true, $recipe_id ); + if ( $should_update_content ) { + wp_update_post( [ + 'ID' => $recipe_id, + 'post_excerpt' => $recipe_excerpt, + 'post_content' => $seo_content + ] ); + } else { + wp_update_post( [ + 'ID' => $recipe_id, + 'post_excerpt' => $recipe_excerpt + ] ); + } + + // Handle taxonomies + if ( ! empty( $data['categories'] ) && taxonomy_exists( 'cp_recipe_category' ) ) { + $categories = array_map( 'trim', explode( ',', $data['categories'] ) ); + $category_ids = []; + foreach ( $categories as $category_name ) { + $category_name = sanitize_text_field( $category_name ); + if ( ! empty( $category_name ) ) { + $term = get_term_by( 'name', $category_name, 'cp_recipe_category' ); + if ( ! $term ) { + $term = wp_insert_term( $category_name, 'cp_recipe_category' ); + if ( ! is_wp_error( $term ) ) { + $category_ids[] = $term['term_id']; + } + } else { + $category_ids[] = $term->term_id; + } + } + } + if ( ! empty( $category_ids ) ) { + wp_set_object_terms( $recipe_id, $category_ids, 'cp_recipe_category' ); + } + } + + if ( defined('COOKED_PRO_VERSION') ) { + if ( ! empty( $data['cuisine'] ) && taxonomy_exists( 'cp_recipe_cuisine' ) ) { + $cuisines = array_map( 'trim', explode( ',', $data['cuisine'] ) ); + $cuisine_ids = []; + foreach ( $cuisines as $cuisine_name ) { + $cuisine_name = sanitize_text_field( $cuisine_name ); + if ( ! empty( $cuisine_name ) ) { + $term = get_term_by( 'name', $cuisine_name, 'cp_recipe_cuisine' ); + if ( ! $term ) { + $term = wp_insert_term( $cuisine_name, 'cp_recipe_cuisine' ); + if ( ! is_wp_error( $term ) ) { + $cuisine_ids[] = $term['term_id']; + } + } else { + $cuisine_ids[] = $term->term_id; + } + } + } + if ( ! empty( $cuisine_ids ) ) { + wp_set_object_terms( $recipe_id, $cuisine_ids, 'cp_recipe_cuisine' ); + } + } + + if ( ! empty( $data['cooking_method'] ) && taxonomy_exists( 'cp_recipe_cooking_method' ) ) { + $cooking_methods = array_map( 'trim', explode( ',', $data['cooking_method'] ) ); + $cooking_method_ids = []; + foreach ( $cooking_methods as $cooking_method_name ) { + $cooking_method_name = sanitize_text_field( $cooking_method_name ); + if ( ! empty( $cooking_method_name ) ) { + $term = get_term_by( 'name', $cooking_method_name, 'cp_recipe_cooking_method' ); + if ( ! $term ) { + $term = wp_insert_term( $cooking_method_name, 'cp_recipe_cooking_method' ); + if ( ! is_wp_error( $term ) ) { + $cooking_method_ids[] = $term['term_id']; + } + } else { + $cooking_method_ids[] = $term->term_id; + } + } + } + if ( ! empty( $cooking_method_ids ) ) { + wp_set_object_terms( $recipe_id, $cooking_method_ids, 'cp_recipe_cooking_method' ); + } + } + + if ( ! empty( $data['diet'] ) && taxonomy_exists( 'cp_recipe_diet' ) ) { + $diets = array_map( 'trim', explode( ',', $data['diet'] ) ); + $diet_ids = []; + foreach ( $diets as $diet_name ) { + $diet_name = sanitize_text_field( $diet_name ); + if ( empty( $diet_name ) ) { + continue; + } + // cp_recipe_diet is restricted to Schema.org RestrictedDiet values - only assign existing terms + $term = get_term_by( 'name', $diet_name, 'cp_recipe_diet' ); + + if ( $term ) { + $diet_ids[] = $term->term_id; + } + } + if ( ! empty( $diet_ids ) ) { + wp_set_object_terms( $recipe_id, $diet_ids, 'cp_recipe_diet' ); + } + } + + if ( ! empty( $data['tags'] ) && taxonomy_exists( 'cp_recipe_tags' ) ) { + $tags = array_map( 'trim', explode( ',', $data['tags'] ) ); + $tag_ids = []; + foreach ( $tags as $tag_name ) { + if ( ! empty( $tag_name ) ) { + $term = get_term_by( 'name', $tag_name, 'cp_recipe_tags' ); + if ( ! $term ) { + $term = wp_insert_term( $tag_name, 'cp_recipe_tags' ); + if ( ! is_wp_error( $term ) ) { + $tag_ids[] = $term['term_id']; + } + } else { + $tag_ids[] = $term->term_id; + } + } + } + if ( ! empty( $tag_ids ) ) { + wp_set_object_terms( $recipe_id, $tag_ids, 'cp_recipe_tags' ); + } + } + } + + return [ + 'success' => true, + 'recipe_id' => $recipe_id + ]; + } + + /** + * Match a measurement string to a measurement key + * Checks exact key match, variations, singular, and plural forms + * + * @param string $measurement_string The measurement string from CSV + * @param array $measurements Full measurements array + * @return string|false The measurement key or false if not found + */ + private static function match_measurement( $measurement_string, $measurements ) { + $measurement_string = strtolower( trim( $measurement_string ) ); + + // First, check for exact key match + if ( isset( $measurements[ $measurement_string ] ) ) { + return $measurement_string; + } + + // Check variations, singular, and plural for each measurement + foreach ( $measurements as $key => $measurement_data ) { + // Check variations + if ( isset( $measurement_data['variations'] ) && is_array( $measurement_data['variations'] ) ) { + foreach ( $measurement_data['variations'] as $variation ) { + if ( strtolower( $variation ) === $measurement_string ) { + return $key; + } + } + } + + // Check singular + if ( isset( $measurement_data['singular'] ) && strtolower( $measurement_data['singular'] ) === $measurement_string ) { + return $key; + } + + // Check plural + if ( isset( $measurement_data['plural'] ) && strtolower( $measurement_data['plural'] ) === $measurement_string ) { + return $key; + } + + // Check singular abbreviation + if ( isset( $measurement_data['singular_abbr'] ) && strtolower( $measurement_data['singular_abbr'] ) === $measurement_string ) { + return $key; + } + + // Check plural abbreviation + if ( isset( $measurement_data['plural_abbr'] ) && strtolower( $measurement_data['plural_abbr'] ) === $measurement_string ) { + return $key; + } + } + + return false; + } + + /** + * Parse ingredient parts into ingredient array + * + * @param array $parts Array of ingredient parts (amount, measurement, name, etc.) + * @param array $measurements Full measurements array + * @return array|false Ingredient array or false on error + */ + private static function parse_ingredient_parts( $parts, $measurements ) { + if ( empty( $parts ) ) { + return false; + } + + $ingredient = [ + 'amount' => '', + 'measurement' => '', + 'name' => '', + 'url' => '', + 'description' => '', + 'sub_amount' => '', + 'sub_measurement' => '', + 'sub_name' => '', + ]; + + if ( count( $parts ) >= 3 ) { + // Format: amount|measurement|name + $ingredient['amount'] = sanitize_text_field( $parts[0] ); + $measurement = sanitize_text_field( $parts[1] ); + $matched_measurement = self::match_measurement( $measurement, $measurements ); + if ( $matched_measurement ) { + $ingredient['measurement'] = $matched_measurement; + } + $ingredient['name'] = sanitize_text_field( $parts[2] ); + if ( isset( $parts[3] ) ) { + $ingredient['description'] = sanitize_text_field( $parts[3] ); + } + } elseif ( count( $parts ) == 2 ) { + // Format: amount|name (no measurement) + $ingredient['amount'] = sanitize_text_field( $parts[0] ); + $ingredient['name'] = sanitize_text_field( $parts[1] ); + } else { + // Format: name only + $ingredient['name'] = sanitize_text_field( $parts[0] ); + } + + return $ingredient; + } +} + diff --git a/includes/class.cooked-elementor.php b/includes/class.cooked-elementor.php index 9418158..6a13f25 100644 --- a/includes/class.cooked-elementor.php +++ b/includes/class.cooked-elementor.php @@ -26,7 +26,7 @@ public function __construct() { public function init() { // Check if Elementor installed and activated if ( did_action( 'elementor/loaded' ) ) { - add_filter( 'cooked_recipe_content_filter', [&$this, 'elementor_filter'], 15, 3 ); + add_filter( 'cooked_recipe_content_filter', [&$this, 'elementor_filter'], 15, 4 ); add_filter( 'cooked_should_update_post_content', [&$this, 'should_update_content'], 10, 2 ); // Deprecated. Now handled in pre_do_shortcode_tag filter in class.cooked-shortcodes.php. // add_action( 'elementor/element/before_section_start', [&$this, 'elementor_is_editing'], 10, 3 ); @@ -49,10 +49,15 @@ public function init() { } } */ - public function elementor_filter( $recipe_content, $og_content, $recipe_id ) { + public function elementor_filter( $recipe_content, $og_content, $recipe_id, $layout_content = null ) { $elementor_page = get_post_meta( $recipe_id, '_elementor_edit_mode', true ); if ( $elementor_page ) { + $og_content = (string) $og_content; + if ( Cooked_Recipes::recipe_has_fullscreen( $recipe_id, $layout_content ) ) { + global $recipe_settings; + $og_content .= Cooked_Recipes::get_fsm_markup( $recipe_id, $recipe_settings ); + } return $og_content; } diff --git a/includes/class.cooked-import.php b/includes/class.cooked-import.php index 03a0e7b..9229c6d 100644 --- a/includes/class.cooked-import.php +++ b/includes/class.cooked-import.php @@ -148,6 +148,39 @@ public static function tabs_fields() { ]; } + // CSV Import Tab + $html_desc = __( 'Import recipes from a CSV file. Your CSV file should include the following columns:', 'cooked' ); + $html_desc .= '
    '; + $html_desc .= '
  • title - ' . __( 'Recipe title (required)', 'cooked' ) . '
  • '; + $html_desc .= '
  • excerpt - ' . __( 'Excerpt/description', 'cooked' ) . '
  • '; + $html_desc .= '
  • prep_time - ' . __( 'Prep time in minutes', 'cooked' ) . '
  • '; + $html_desc .= '
  • cook_time - ' . __( 'Cook time in minutes', 'cooked' ) . '
  • '; + $html_desc .= '
  • difficulty_level - ' . __( 'Difficulty level (1=Beginner, 2=Intermediate, 3=Advanced)', 'cooked' ) . '
  • '; + $html_desc .= '
  • ingredients - ' . __( 'Ingredients, separated by pipe (|). Format: "amount|measurement|name" or "name" for simple ingredients. Add substitutions with double pipe (||): "amount|measurement|name||sub_amount|sub_measurement|sub_name"', 'cooked' ) . '
  • '; + $html_desc .= '
  • directions - ' . __( 'Directions/instructions, separated by pipe (|)', 'cooked' ) . '
  • '; + $html_desc .= '
  • notes - ' . __( 'Notes', 'cooked' ) . '
  • '; + $html_desc .= '
  • category - ' . __( 'Category, separated by comma', 'cooked' ) . '
  • '; + if ( defined('COOKED_PRO_VERSION') ) { + $html_desc .= '
  • cuisine - ' . __( 'Cuisine, separated by comma', 'cooked' ) . '
  • '; + $html_desc .= '
  • cooking_method - ' . __( 'Cooking method, separated by comma', 'cooked' ) . '
  • '; + $html_desc .= '
  • tags - ' . __( 'Tags, separated by comma', 'cooked' ) . '
  • '; + $html_desc .= '
  • diet - ' . __( 'Restricted diet type (Schema.org RestrictedDiet), separated by comma', 'cooked' ) . '
  • '; + } + $html_desc .= '
'; + $html_desc .= '

' . __( 'Note:', 'cooked' ) . ' ' . __( 'Recipes will be imported with the \'Draft\' status. After the import is complete, you can bulk edit the recipes and change their status to \'Published\'.', 'cooked' ) . '

'; + + $import_tabs['csv_import'] = [ + 'name' => __('CSV Import', 'cooked'), + 'icon' => 'migrate', + 'fields' => [ + 'cooked_csv_import' => [ + 'title' => __('Import Recipes via CSV', 'cooked'), + 'desc' => $html_desc, + 'type' => 'csv_upload', + ] + ] + ]; + $import_tabs['more_imports_coming_soon'] = [ 'name' => __('More Imports are Coming Soon...', 'cooked'), 'icon' => 'migrate', @@ -183,4 +216,20 @@ public static function field_message( $name, $field_options, $color, $field ) { echo '

' . $field['message'] . '

'; } + public static function field_csv_upload( $name, $field_options, $color, $field ) { + echo '
'; + echo '

'; + echo ''; + echo '

'; + echo '

'; + echo ''; + echo '

'; + echo '

'; + echo ''; + echo '

'; + echo ''; + echo ''; + echo '
'; + } + } diff --git a/includes/class.cooked-recipe-meta.php b/includes/class.cooked-recipe-meta.php index 0cfc828..93257be 100644 --- a/includes/class.cooked-recipe-meta.php +++ b/includes/class.cooked-recipe-meta.php @@ -494,7 +494,7 @@ function cooked_render_recipe_fields( $post_id ) {
- +
@@ -502,8 +502,8 @@ function cooked_render_recipe_fields( $post_id ) {
@@ -511,7 +511,7 @@ function cooked_render_recipe_fields( $post_id ) {
- +
@@ -736,11 +736,11 @@ function cooked_render_recipe_fields( $post_id ) { - $value): ?> + $value): ?> - 'cooked-direction-img', 'data-id' => esc_attr($dir_key), @@ -751,8 +751,9 @@ function cooked_render_recipe_fields( $post_id ) { $image_thumb = false; } ?> -
+
+
@@ -806,8 +807,9 @@ function cooked_render_recipe_fields( $post_id ) { $random_key = wp_rand( 1000000, 9999999 ); ?> -
+
+ 1
@@ -848,6 +850,7 @@ function cooked_render_recipe_fields( $post_id ) {
+
@@ -1479,7 +1482,7 @@ function cooked_render_recipe_fields( $post_id ) {

-

+

@@ -1504,14 +1507,14 @@ function cooked_render_recipe_fields( $post_id ) {

"limit"

-

+

"columns"

-

+

@@ -1545,18 +1548,15 @@ function cooked_render_recipe_fields( $post_id ) {

"match_*"

-

+

-

-

- -

-

+

+

@@ -1570,8 +1570,7 @@ function cooked_render_recipe_fields( $post_id ) { hide_image ()
hide_excerpt ()
hide_author ()
- match_* ()
- *_weight () + match_* ()

diff --git a/includes/class.cooked-recipes.php b/includes/class.cooked-recipes.php index fdd098f..ea8d778 100644 --- a/includes/class.cooked-recipes.php +++ b/includes/class.cooked-recipes.php @@ -182,7 +182,6 @@ public static function get_settings( $post_id, $bc = true ) { // Include the Post ID $recipe_settings['id'] = $post_id; - // You're welcome developers! $recipe_settings = apply_filters( 'cooked_single_recipe_settings', $recipe_settings, $post_id ); return $recipe_settings; @@ -646,6 +645,80 @@ public static function fsm_content() { ' ); } + /** + * Returns the fullscreen modal (FSM) markup for a recipe. + * Used by the recipe template and by the Elementor filter when appending FSM. + * + * @param int $recipe_id Recipe post ID. + * @param array $settings Recipe settings (from get_settings() or global $recipe_settings). + * @return string FSM HTML block. + */ + public static function get_fsm_markup( $recipe_id, array $settings ) { + $recipe_id = intval( $recipe_id ); + if ( ! $recipe_id || empty( $settings['title'] ) ) { + return ''; + } + global $recipe_settings; + $recipe_settings = $settings; + $markup = '

'; + $markup .= do_shortcode( self::fsm_content() ); + $markup .= '
' . esc_html( $settings['title'] ) . '
'; + $markup .= '
'; + $markup .= '' . __( 'Ingredients', 'cooked' ) . ''; + $markup .= '' . __( 'Directions', 'cooked' ) . ''; + $markup .= '
'; + $markup .= '
'; + return $markup; + } + + /** + * Checks whether the recipe content includes the fullscreen option in a [cooked-info] shortcode. + * Looks at left, right, and include attributes. + * + * @param int $recipe_id Recipe post ID. + * @param string $content Raw recipe layout content (shortcodes). + * @return bool True if fullscreen is present in at least one [cooked-info] shortcode. + */ + public static function recipe_has_fullscreen( $recipe_id, $content ) { + $recipe_id = intval( $recipe_id ); + if ( ! $recipe_id ) { + return false; + } + if ( empty( $content ) || strpos( $content, 'cooked-info' ) === false ) { + return false; + } + $regex = get_shortcode_regex( [ 'cooked-info' ] ); + if ( ! preg_match_all( '/' . $regex . '/s', $content, $matches, PREG_SET_ORDER ) ) { + return false; + } + $check_values = function ( $attr_string ) { + if ( empty( $attr_string ) ) { + return false; + } + $atts = shortcode_parse_atts( $attr_string ); + if ( ! is_array( $atts ) ) { + return false; + } + foreach ( [ 'left', 'right', 'include' ] as $key ) { + if ( empty( $atts[ $key ] ) ) { + continue; + } + $parts = array_map( 'trim', explode( ',', $atts[ $key ] ) ); + if ( in_array( 'fullscreen', $parts, true ) ) { + return true; + } + } + return false; + }; + foreach ( $matches as $m ) { + $attr_string = isset( $m[3] ) ? $m[3] : ''; + if ( $check_values( $attr_string ) ) { + return true; + } + } + return false; + } + public static function difficulty_levels() { return apply_filters( 'cooked_difficulty_levels', [ 1 => __('Beginner', 'cooked'), @@ -1181,7 +1254,9 @@ public function recipe_template( $content ) { // load_template( COOKED_DIR . 'templates/front/recipe.php', false ); $recipe_content = ob_get_clean(); - return shortcode_unautop( apply_filters( 'cooked_recipe_content_filter', $recipe_content, $content, $post->ID ) ); + global $cooked_recipe_layout_content; + $layout_content = isset( $cooked_recipe_layout_content ) ? $cooked_recipe_layout_content : null; + return shortcode_unautop( apply_filters( 'cooked_recipe_content_filter', $recipe_content, $content, $post->ID, $layout_content ) ); endif; diff --git a/includes/class.cooked-related-recipes.php b/includes/class.cooked-related-recipes.php index 0ea6f1e..b2493a8 100644 --- a/includes/class.cooked-related-recipes.php +++ b/includes/class.cooked-related-recipes.php @@ -15,53 +15,14 @@ /** * Cooked_Related_Recipes Class * - * Handles related recipes logic, transient caching, and admin pre-calculation. + * Handles related recipes via a single on-demand WP_Query: recipes sharing at least + * one term in any enabled taxonomy (categories, cuisines, cooking methods, tags, diets), + * ordered randomly. No caching or pre-calculation. * * @since 1.12.0 */ class Cooked_Related_Recipes { - /** - * Constructor. - */ - public function __construct() { - add_filter( 'cooked_settings_tabs_fields', [ $this, 'add_related_recipes_tab' ], 15, 1 ); - add_action( 'save_post', [ $this, 'maybe_bump_cache_version' ], 10, 1 ); - add_action( 'delete_post', [ $this, 'maybe_bump_cache_version' ], 10, 1 ); - } - - /** - * Add Tools tab to Settings with Calculate Related Recipes section. - * - * @param array $tabs Existing tabs. - * @return array - */ - public function add_related_recipes_tab( $tabs ) { - $tabs['tools'] = [ - 'name' => __( '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. * @@ -81,17 +42,6 @@ public static function get_default_atts() { '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, ]; /** @@ -105,307 +55,94 @@ public static function get_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. + * Get related recipes (on-demand query, no cache). + * Uses all enabled taxonomies with OR relation and orderby rand. * * @param int $recipe_id Recipe ID. * @param array $atts Shortcode attributes. - * @return array Array of [ 'id' => int, 'score' => int ]. + * @return array Array of [ 'id' => 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; + return self::find_related_recipes( $source_recipe, $atts ); } /** - * 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. + * Find related recipes: one WP_Query with tax_query (all taxonomies OR) and orderby rand. * * @param array $source_recipe Source recipe data. * @param array $atts Shortcode attributes. - * @return array [ ['id' => int, 'score' => int], ... ] + * @return array [ ['id' => int], ... ] */ public static function find_related_recipes( $source_recipe, $atts ) { $recipe_id = $source_recipe['id']; - $scores = []; + $limit = isset( $atts['limit'] ) ? max( 1, (int) $atts['limit'] ) : 4; + + // Build OR clause for each taxonomy that is enabled via match_* and where the source recipe has terms. + $clauses = []; + $taxonomy_atts = [ + 'cp_recipe_category' => 'match_categories', + 'cp_recipe_cuisine' => 'match_cuisines', + 'cp_recipe_cooking_method' => 'match_cooking_methods', + 'cp_recipe_tags' => 'match_tags', + 'cp_recipe_diet' => 'match_diets', + ]; + foreach ( $taxonomy_atts as $taxonomy => $att_key ) { + if ( empty( $atts[ $att_key ] ) || $atts[ $att_key ] === 'false' ) { + continue; + } + $terms = self::get_recipe_terms( $recipe_id, $taxonomy ); + if ( ! empty( $terms ) ) { + $clauses[] = [ 'taxonomy' => $taxonomy, 'field' => 'term_id', 'terms' => $terms ]; + } + } - // 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; + if ( empty( $clauses ) ) { + return []; + } - // 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; + $tax_query = array_merge( [ 'relation' => 'OR' ], $clauses ); + + $query_args = [ + 'post_type' => 'cp_recipe', + 'post_status' => 'publish', + 'post__not_in' => [ $recipe_id ], + 'posts_per_page' => $limit, + 'orderby' => 'rand', + 'fields' => 'ids', + ]; + + $query_args['tax_query'] = $tax_query; - // 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(); } + $query_args = apply_filters( 'cooked_related_recipes_query_args', $query_args, $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; + $query = new \WP_Query( $query_args ); + $ids = ! empty( $query->posts ) ? $query->posts : []; + wp_reset_postdata(); - 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++; + $result = []; + foreach ( $ids as $id ) { + $result[] = [ 'id' => (int) $id ]; } /** - * Filter scores before sorting. + * Filter the related recipe IDs before return. * * @since 1.12.0 * - * @param array $scores Array of recipe scores [ ['id' => int, 'score' => int], ... ]. + * @param array $result Array of [ 'id' => 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; + return apply_filters( 'cooked_related_recipes_result', $result, $source_recipe, $atts ); } /** @@ -422,51 +159,4 @@ public static function get_recipe_terms( $recipe_id, $taxonomy ) { $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 a2d7c39..869024c 100644 --- a/includes/class.cooked-settings.php +++ b/includes/class.cooked-settings.php @@ -607,25 +607,6 @@ 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 bf23a9d..83c1ad1 100644 --- a/includes/class.cooked-shortcodes.php +++ b/includes/class.cooked-shortcodes.php @@ -1086,7 +1086,8 @@ public function cooked_nutrition_shortcode($atts, $content = null) { /** * Related Recipes Shortcode * - * Displays related recipes based on keywords, cuisines, ingredients, categories, and other factors. + * Displays related recipes based on shared terms in any recipe taxonomy (categories, + * cuisines, cooking methods, tags, diets), random order. No scoring, ingredients, or cache. * * @param array $atts Shortcode attributes * @param string $content Shortcode content @@ -1110,7 +1111,7 @@ public function cooked_related_recipes_shortcode($atts, $content = null) { $recipe_id = (int) $atts['id']; } else { // Invalid ID provided (e.g., "asdas", "", "0", "-5") - return ''; + return ''; } } else { // No ID provided, try to get from current post @@ -1120,7 +1121,7 @@ public function cooked_related_recipes_shortcode($atts, $content = null) { } if (!$recipe_id) { - return ''; + return ''; } // Get the source recipe (allow any status to support drafts/pending) @@ -1138,8 +1139,7 @@ public function cooked_related_recipes_shortcode($atts, $content = null) { return ''; } - // Find related recipes (uses transient cache; pre-calc via Settings > Related Recipes) - // Limit is applied inside get_related_recipes() based on $atts['limit'] + // Find related recipes (on-demand query: taxonomies OR + orderby rand, no cache) $related_recipes = Cooked_Related_Recipes::get_related_recipes( $recipe_id, $atts ); if (empty($related_recipes)) { @@ -1150,7 +1150,7 @@ public function cooked_related_recipes_shortcode($atts, $content = null) { } else { $empty_msg .= ' ' . __('Try adjusting the matching criteria or ensure you have other published recipes with shared categories, tags, or ingredients.', 'cooked'); } - return ''; + return ''; } // Get recipe IDs for display and filter out deleted/invalid recipes @@ -1163,7 +1163,7 @@ public function cooked_related_recipes_shortcode($atts, $content = null) { * @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 array $related_recipes Full related recipes array (each item has 'id'). * @param int $recipe_id Source recipe ID. * @param array $atts Shortcode attributes. */ diff --git a/includes/class.cooked-updates.php b/includes/class.cooked-updates.php index c3262e2..5bd9ae4 100644 --- a/includes/class.cooked-updates.php +++ b/includes/class.cooked-updates.php @@ -139,6 +139,85 @@ private static function run_version_updates() { } } + /** + * Get list of tools that can be run on demand (for Tools page and WP-CLI). + * + * @return array[] List of tools: [ 'id' => method_name, 'name' => label, 'description' => desc ] + */ + public static function get_runnable_tools() { + $labels = [ + 'update_rewrite_rules' => [ + 'name' => __( 'Flush rewrite rules', 'cooked' ), + 'description' => __( 'Refreshes permalink rules for recipe and profile URLs.', 'cooked' ), + ], + 'fix_recipe_line_endings' => [ + 'name' => __( 'Fix recipe line endings', 'cooked' ), + 'description' => __( 'Normalizes line endings in recipe content for exporter/importer compatibility.', 'cooked' ), + ], + 'purge_legacy_related_recipes_cache' => [ + 'name' => __( 'Purge legacy related recipes cache', 'cooked' ), + 'description' => __( 'Removes old transients and options from the previous related-recipes cache.', 'cooked' ), + ], + 'remove_recipes_from_cooked_user_meta' => [ + 'name' => __( 'Remove recipes from user meta', 'cooked' ), + 'description' => __( 'Removes the legacy "recipes" key from all users\' cooked_user_meta.', 'cooked' ), + ], + ]; + + $updates = self::get_version_updates(); + $method_names = []; + foreach ( $updates as $methods ) { + foreach ( $methods as $method ) { + $method_names[ $method ] = true; + } + } + $method_names = array_keys( $method_names ); + + $tools = []; + foreach ( $method_names as $method ) { + $tools[] = [ + 'id' => $method, + 'name' => isset( $labels[ $method ]['name'] ) ? $labels[ $method ]['name'] : $method, + 'description' => isset( $labels[ $method ]['description'] ) ? $labels[ $method ]['description'] : '', + ]; + } + return $tools; + } + + /** + * Run a single migration/tool by name (on demand). Used by Tools page and WP-CLI. + * + * @param string $tool_name Method name (must exist in get_version_updates). + * @return true|WP_Error True on success, WP_Error on failure. + */ + public static function run_tool( $tool_name ) { + $tool_name = is_string( $tool_name ) ? trim( $tool_name ) : ''; + if ( $tool_name === '' ) { + return new \WP_Error( 'cooked_tool_empty', __( 'Tool name is required.', 'cooked' ) ); + } + + $updates = self::get_version_updates(); + $allowed = []; + foreach ( $updates as $methods ) { + foreach ( $methods as $method ) { + $allowed[ $method ] = true; + } + } + if ( ! isset( $allowed[ $tool_name ] ) ) { + return new \WP_Error( 'cooked_tool_invalid', sprintf( __( 'Unknown tool: %s.', 'cooked' ), $tool_name ) ); + } + if ( ! method_exists( __CLASS__, $tool_name ) ) { + return new \WP_Error( 'cooked_tool_missing', sprintf( __( 'Tool method %s does not exist.', 'cooked' ), $tool_name ) ); + } + + try { + call_user_func( [ __CLASS__, $tool_name ] ); + return true; + } catch ( \Exception $e ) { + return new \WP_Error( 'cooked_tool_error', $e->getMessage() ); + } + } + /** * Define version-specific updates * @@ -165,6 +244,10 @@ private static function get_version_updates() { 'fix_recipe_line_endings', 'update_rewrite_rules' ], + '1.13.0' => [ + 'purge_legacy_related_recipes_cache', + 'remove_recipes_from_cooked_user_meta', + ], ]); } @@ -249,6 +332,57 @@ private static function fix_recipe_line_endings() { } } + /** + * Purge legacy related-recipes transients and options (cache and pre-calculation data). + * One-time cleanup when moving to on-demand related recipes with no cache. + * + * @since 1.13.0 + */ + private static function purge_legacy_related_recipes_cache() { + global $wpdb; + + $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_cooked_related_%' OR option_name LIKE '_transient_timeout_cooked_related_%'" ); + delete_option( 'cooked_related_version' ); + delete_option( 'cooked_related_calculation_last' ); + + error_log( 'Cooked: Purged legacy related-recipes cache and options.' ); + } + + /** + * Remove legacy 'recipes' key from cooked_user_meta for all users. + * Recipes are computed on demand in Cooked_Users::get(); they must not be stored in user meta. + * + * @since 1.13.0 + */ + private static function remove_recipes_from_cooked_user_meta() { + $user_ids = get_users( [ + 'meta_key' => 'cooked_user_meta', + 'fields' => 'ID', + ] ); + + if ( empty( $user_ids ) ) { + return; + } + + $updated_count = 0; + + foreach ( $user_ids as $user_id ) { + $meta = get_user_meta( $user_id, 'cooked_user_meta', true ); + + if ( ! is_array( $meta ) || ! isset( $meta['recipes'] ) ) { + continue; + } + + unset( $meta['recipes'] ); + update_user_meta( $user_id, 'cooked_user_meta', $meta ); + $updated_count++; + } + + if ( $updated_count > 0 ) { + error_log( sprintf( 'Cooked: Removed legacy recipes key from %d user(s) cooked_user_meta.', $updated_count ) ); + } + } + /** * Update rewrite rules if needed * diff --git a/languages/cooked-fr_FR.mo b/languages/cooked-fr_FR.mo index 141d90b..f0d7136 100644 Binary files a/languages/cooked-fr_FR.mo and b/languages/cooked-fr_FR.mo differ diff --git a/languages/cooked-fr_FR.po b/languages/cooked-fr_FR.po index b96e058..75dbdd5 100644 --- a/languages/cooked-fr_FR.po +++ b/languages/cooked-fr_FR.po @@ -1,7 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: Cooked\n" -"POT-Creation-Date: 2020-01-06 09:14-0500\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/cooked\n" +"POT-Creation-Date: 2026-01-09 20:03+0200\n" "PO-Revision-Date: 2020-01-06 09:16-0500\n" "Last-Translator: \n" "Language-Team: Gora Tech \n" @@ -20,1991 +21,2561 @@ msgstr "" "X-Poedit-SearchPath-0: .\n" "X-Poedit-SearchPathExcluded-0: *.js\n" -#: includes/class.cooked-admin-enqueues.php:134 -msgid "remaining" -msgstr "restant" - -#: includes/class.cooked-admin-enqueues.php:135 -#: includes/class.cooked-recipe-meta.php:563 -#: includes/class.cooked-recipe-meta.php:596 -#: includes/class.cooked-recipe-meta.php:623 -msgid "Add Image" -msgstr "Ajouter une image" - -#: includes/class.cooked-admin-enqueues.php:136 -#: includes/class.cooked-recipe-meta.php:563 -msgid "Change Image" -msgstr "Changer l’image" - -#: includes/class.cooked-admin-enqueues.php:137 -msgid "Use this Image" -msgstr "Utiliser cette image" +#: includes/class.cooked-csv-import.php:39 +msgid "Cooked_Recipes class not found. Plugin may not be properly loaded." +msgstr "" -#: includes/class.cooked-admin-enqueues.php:138 -#: includes/class.cooked-recipe-meta.php:803 -msgid "Add to Gallery" -msgstr "Ajouter à la galerie" +#: includes/class.cooked-csv-import.php:44 +msgid "Cooked_Measurements class not found. Plugin may not be properly loaded." +msgstr "" -#: includes/class.cooked-admin-enqueues.php:139 -msgid "Edit Gallery Item" -msgstr "Modifier un élément de la galerie" +#: includes/class.cooked-csv-import.php:49 +msgid "Cooked_Recipe_Meta class not found. Plugin may not be properly loaded." +msgstr "" -#: includes/class.cooked-admin-enqueues.php:140 -msgid "Update Gallery Item" -msgstr "Mettre à jour l'élément de galerie" +#: includes/class.cooked-csv-import.php:54 +msgid "CSV file not found." +msgstr "" -#: includes/class.cooked-admin-enqueues.php:141 -msgid "Saved" -msgstr "Sauvegarder" +#: includes/class.cooked-csv-import.php:61 +msgid "Could not open CSV file." +msgstr "" -#: includes/class.cooked-admin-enqueues.php:142 -msgid "Applied" -msgstr "Appliquer" +#: includes/class.cooked-csv-import.php:68 +msgid "CSV file is empty or invalid." +msgstr "" -#: includes/class.cooked-admin-enqueues.php:143 -msgid "" -"Are you sure you want to apply this new template to all of your recipes?" +#: includes/class.cooked-csv-import.php:79 +msgid "CSV file must contain a \"title\" column." msgstr "" -"Êtes-vous sûr de vouloir appliquer ce nouveau modèle à toutes vos recettes ?" -#: includes/class.cooked-admin-enqueues.php:144 -msgid "" -"Are you sure you want to reset this recipe template to the Cooked plugin " -"default?" +#: includes/class.cooked-csv-import.php:106 +msgid "Unknown error" msgstr "" -"Êtes-vous sûr de vouloir réinitialiser ce modèle de recette par celui du " -"plugin Cooked par défaut ?" -#: includes/class.cooked-admin-enqueues.php:145 +#: includes/class.cooked-csv-import.php:107 +#: includes/class.cooked-csv-import.php:114 #, php-format -msgid "Please confirm that you are ready to migrate all %s recipes." -msgstr "Veuillez confirmer que vous êtes prêt à migrer toutes les recettes %s." +msgid "Row %d: %s" +msgstr "" -#: includes/class.cooked-admin-menus.php:34 -#: includes/class.cooked-admin-menus.php:53 -#: includes/class.cooked-post-types.php:272 -#: includes/class.cooked-post-types.php:274 -#: includes/class.cooked-post-types.php:286 -msgid "Recipes" -msgstr "Recettes" +#: includes/class.cooked-csv-import.php:140 +#, fuzzy +msgid "Title is required" +msgstr "La recette doit être validée" -#: includes/class.cooked-admin-menus.php:35 -#: includes/class.cooked-admin-menus.php:55 -#: includes/class.cooked-post-types.php:276 -msgid "Add New" -msgstr "Ajouter une recette" +#: includes/class.cooked-csv-import.php:323 +#: includes/class.cooked-recipe-meta.php:157 +#: includes/class.cooked-recipe-meta.php:244 +#: includes/class.cooked-recipe-meta.php:1144 +#: includes/class.cooked-functions.php:134 includes/class.cooked-ajax.php:180 +#: includes/class.cooked-recipes.php:636 +msgid "Ingredients" +msgstr "Ingrédients" -#: includes/class.cooked-admin-menus.php:41 -#: includes/class.cooked-admin-menus.php:56 -#: includes/class.cooked-recipe-meta.php:84 -#: includes/class.cooked-shortcodes.php:109 templates/admin/welcome.php:9 -msgid "Settings" -msgstr "Paramètres" +#: includes/class.cooked-csv-import.php:323 +#: includes/class.cooked-recipe-meta.php:157 +#: includes/class.cooked-recipe-meta.php:250 +#: includes/class.cooked-recipe-meta.php:1175 +#: includes/class.cooked-functions.php:135 includes/class.cooked-ajax.php:180 +#: includes/class.cooked-recipes.php:640 +msgid "Directions" +msgstr "Instructions" -#: includes/class.cooked-admin-menus.php:42 -msgid "What's New?" -msgstr "Quoi de neuf ?" +#: includes/class.cooked-yoastseo.php:33 +#: includes/class.cooked-rankmathseo.php:37 +msgid "Current recipe category being viewed." +msgstr "" -#: includes/class.cooked-admin-menus.php:44 templates/admin/welcome.php:20 -msgid "Upgrade to Pro" -msgstr "Passer à Pro" +#: includes/class.cooked-recipe-meta.php:98 +#: includes/class.cooked-admin-menus.php:45 +#: includes/class.cooked-admin-menus.php:65 +#: includes/class.cooked-shortcodes.php:149 +msgid "Settings" +msgstr "Paramètres" -#: includes/class.cooked-admin-menus.php:54 -#: includes/class.cooked-post-types.php:281 -msgid "All Recipes" -msgstr "Toutes les recettes" +#: includes/class.cooked-recipe-meta.php:202 +msgid "Display Recipe" +msgstr "Afficher la recette" -#: includes/class.cooked-admin-menus.php:63 -#: includes/class.cooked-admin-menus.php:71 -#: includes/class.cooked-admin-menus.php:79 -msgid "You do not have sufficient permissions to access this page." +#: includes/class.cooked-recipe-meta.php:203 +msgid "" +"This shortcode displays the recipe in its entirety, using the \"Recipe " +"Template\" field in the first tab." msgstr "" -"Vous n'avez pas les autorisations suffisantes pour accéder à cette page." - -#: includes/class.cooked-ajax.php:97 includes/class.cooked-functions.php:121 -#: includes/class.cooked-recipe-meta.php:132 -#: includes/class.cooked-recipe-meta.php:225 -#: includes/class.cooked-recipe-meta.php:876 -#: includes/class.cooked-recipes.php:622 templates/front/recipe.php:34 -msgid "Ingredients" -msgstr "Ingrédients" +"Ce shortcode affiche la recette dans son intégralité, en utilisant le champ " +"\"Modèle de recette\" dans le premier onglet." -#: includes/class.cooked-ajax.php:97 includes/class.cooked-functions.php:122 -#: includes/class.cooked-recipe-meta.php:132 -#: includes/class.cooked-recipe-meta.php:231 -#: includes/class.cooked-recipe-meta.php:907 -#: includes/class.cooked-recipes.php:622 templates/front/recipe.php:35 -msgid "Directions" -msgstr "Instructions" +#: includes/class.cooked-recipe-meta.php:238 +msgid "Layout" +msgstr "Disposition" -#: includes/class.cooked-enqueues.php:36 -#: includes/class.cooked-recipe-meta.php:1079 -msgid "Timer" -msgstr "Minuteur" +#: includes/class.cooked-recipe-meta.php:256 +#: includes/class.cooked-functions.php:137 +msgid "Nutrition" +msgstr "Valeurs nutritionnelles" -#: includes/class.cooked-functions.php:79 -#: includes/class.cooked-functions.php:82 -msgid "New" -msgstr "Nouveau" +#: includes/class.cooked-recipe-meta.php:262 +#: includes/class.cooked-recipe-meta.php:1256 +msgid "Gallery" +msgstr "Galerie" -#: includes/class.cooked-functions.php:80 -#: includes/class.cooked-functions.php:83 -msgid "Tweak" -msgstr "Finaliser" +#: includes/class.cooked-recipe-meta.php:268 +msgid "Shortcodes" +msgstr "Shortcodes" -#: includes/class.cooked-functions.php:81 -#: includes/class.cooked-functions.php:84 -msgid "Fixed" -msgstr "Fixer" +#: includes/class.cooked-recipe-meta.php:325 +msgid "Recipe Review Required" +msgstr "La recette doit être validée" -#: includes/class.cooked-functions.php:90 +#: includes/class.cooked-recipe-meta.php:328 #, php-format -msgid "What's new in %s?" -msgstr "Quoi de neuf dans %s ?" +msgid "" +"It looks like this recipe is from a different version of %s. Please review " +"and click \"Update\" to save it." +msgstr "" +"Il semble que cette recette provienne d'une version différente de %s. Merci " +"de la modifier et cliquez sur \"Mettre à jour\" pour l'enregistrer." -#: includes/class.cooked-functions.php:114 -msgid "Print" -msgstr "Imprimer" +#: includes/class.cooked-recipe-meta.php:336 +msgid "Recipe Shortcode" +msgstr "Shortcode de la recette" -#: includes/class.cooked-functions.php:115 -msgid "Print Options:" -msgstr "Options d'impression :" +#: includes/class.cooked-recipe-meta.php:337 +msgid "You can use the following shortcode to display your recipe anywhere:" +msgstr "" +"Vous pouvez utiliser le shortcode suivant pour afficher votre recette " +"n’importe où :" -#: includes/class.cooked-functions.php:117 -msgid "Title" -msgstr "Titre" +#: includes/class.cooked-recipe-meta.php:351 +msgid "Recipe Template" +msgstr "Modèle de recette" -#: includes/class.cooked-functions.php:118 -msgid "Information" -msgstr "Informations" +#: includes/class.cooked-recipe-meta.php:351 +msgid "Default Recipe Template" +msgstr "Modèle de recette par défaut" -#: includes/class.cooked-functions.php:119 -#: includes/class.cooked-recipe-meta.php:1055 -#: includes/class.cooked-settings.php:141 -msgid "Excerpt" -msgstr "Extrait" +#: includes/class.cooked-recipe-meta.php:351 +msgid "" +"Choose from the options below to use this layout as the default for new " +"recipes or for all recipes." +msgstr "" +"Choisissez parmi les options ci-dessous pour utiliser ce modèle comme mise " +"en page par défaut pour les nouvelles recettes uniquement ou pour toutes les " +"recettes." -#: includes/class.cooked-functions.php:120 -msgid "Images" -msgstr "Images" +#: includes/class.cooked-recipe-meta.php:351 +msgid "Save as Default" +msgstr "Enregistrer comme valeur par défaut" -#: includes/class.cooked-functions.php:123 -#: includes/class.cooked-recipe-meta.php:237 -msgid "Nutrition" -msgstr "Valeurs nutritionnelles" +#: includes/class.cooked-recipe-meta.php:351 +msgid "Apply to All" +msgstr "Appliquer à tous" -#: includes/class.cooked-measurements.php:27 -msgctxt "Grams Abbreviation (Singular)" -msgid "g" -msgstr "g" +#: includes/class.cooked-recipe-meta.php:351 +msgid "Reset" +msgstr "Réinitialiser" -#: includes/class.cooked-measurements.php:28 -msgctxt "Grams Abbreviation (Plural)" -msgid "g" -msgstr "g" +#: includes/class.cooked-recipe-meta.php:351 +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 "" +"En utilisant les codes abrégés de recette intégrés dans l’onglet " +"\"Shortcodes\", vous pouvez créer ci-dessous une mise en page pour votre " +"recette. Utilisez ensuite le bouton \"Enregistrer comme valeur par défaut\" " +"pour enregistrer ce nouveau modèle." -#: includes/class.cooked-measurements.php:29 -msgid "gram" -msgstr "gramme" +#: includes/class.cooked-recipe-meta.php:369 +msgid "Recipe Excerpt" +msgstr "Extrait de la recette" -#: includes/class.cooked-measurements.php:30 -msgid "grams" -msgstr "grammes" +#: includes/class.cooked-recipe-meta.php:369 +msgid "" +"The excerpt is used on recipe listing templates, where the full recipe " +"should not be displayed." +msgstr "" +"L’extrait est utilisé sur les modèles de liste de recettes, où la recette " +"complète ne doit pas être affichée." -#: includes/class.cooked-measurements.php:34 -msgctxt "Kilograms Abbreviation (Singular)" -msgid "kg" -msgstr "kg" +#: includes/class.cooked-recipe-meta.php:392 +msgid "SEO Description" +msgstr "Description de la minuterie" -#: includes/class.cooked-measurements.php:35 -msgctxt "Kilograms Abbreviation (Plural)" -msgid "kg" -msgstr "kg" +#: includes/class.cooked-recipe-meta.php:392 +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 "" +"Cette description est utilisée à des fins de SEO et est facultative. Par " +"défaut, Cooked utilisera l'extrait de recette ci-dessus si disponible ou le " +"titre de recette si ce n'est pas le cas." -#: includes/class.cooked-measurements.php:36 -msgid "kilogram" -msgstr "kilogramme" +#: includes/class.cooked-recipe-meta.php:403 +#: includes/class.cooked-settings.php:217 +msgid "Difficulty Level" +msgstr "Niveau de difficulté" -#: includes/class.cooked-measurements.php:37 -msgid "kilograms" -msgstr "kilogrammes" +#: includes/class.cooked-recipe-meta.php:412 +#: includes/class.cooked-recipe-meta.php:1118 +#: includes/class.cooked-settings.php:220 +#: includes/class.cooked-shortcodes.php:448 +#: includes/class.cooked-shortcodes.php:670 +msgid "Prep Time" +msgstr "Préparation" -#: includes/class.cooked-measurements.php:41 -#: includes/class.cooked-measurements.php:42 -msgid "mg" -msgstr "mg" +#: includes/class.cooked-recipe-meta.php:414 +#: includes/class.cooked-recipe-meta.php:419 +#: includes/class.cooked-recipe-meta.php:424 +msgid "minutes" +msgstr "minutes" -#: includes/class.cooked-measurements.php:43 -msgid "milligram" -msgstr "milligramme" +#: includes/class.cooked-recipe-meta.php:417 +#: includes/class.cooked-recipe-meta.php:1119 +#: includes/class.cooked-settings.php:221 +#: includes/class.cooked-shortcodes.php:449 +#: includes/class.cooked-shortcodes.php:679 +msgid "Cook Time" +msgstr "Cuisson" -#: includes/class.cooked-measurements.php:44 -msgid "milligrams" -msgstr "milligrammes" +#: includes/class.cooked-recipe-meta.php:422 +#: includes/class.cooked-recipe-meta.php:1120 +#: includes/class.cooked-settings.php:222 +#: includes/class.cooked-shortcodes.php:450 +#: includes/class.cooked-shortcodes.php:690 +#: includes/class.cooked-shortcodes.php:697 +msgid "Total Time" +msgstr "Temps total" -#: includes/class.cooked-measurements.php:48 -#: includes/class.cooked-measurements.php:49 -msgid "oz" -msgstr "oz" +#: includes/class.cooked-recipe-meta.php:430 +#, fuzzy +msgid "Recipe Notes" +msgstr "Recettes" -#: includes/class.cooked-measurements.php:50 -msgid "ounce" -msgstr "once" +#: includes/class.cooked-recipe-meta.php:430 +msgid "The notes are displayed in the recipe." +msgstr "" -#: includes/class.cooked-measurements.php:51 -msgid "ounces" -msgstr "onces" +#: includes/class.cooked-recipe-meta.php:455 +msgid "Amount" +msgstr "Quantité" -#: includes/class.cooked-measurements.php:55 -#: includes/class.cooked-measurements.php:56 -msgid "fl oz" -msgstr "fl oz" +#: includes/class.cooked-recipe-meta.php:456 +msgid "Measurement" +msgstr "Unité de mesure" -#: includes/class.cooked-measurements.php:57 -msgid "fluid ounce" -msgstr "fluid ounce" +#: includes/class.cooked-recipe-meta.php:457 +msgid "Item" +msgstr "Élément" -#: includes/class.cooked-measurements.php:58 -msgid "fluid ounces" -msgstr "fluid ounces" +#: includes/class.cooked-recipe-meta.php:495 +#: includes/class.cooked-recipe-meta.php:587 +#: includes/class.cooked-recipe-meta.php:653 +msgid "ex. Eggs, Milk, etc." +msgstr "ex : oeufs, lait, etc." -#: includes/class.cooked-measurements.php:62 -#: includes/class.cooked-measurements.php:64 -msgid "cup" -msgstr "tasse" +#: includes/class.cooked-recipe-meta.php:504 +#: includes/class.cooked-recipe-meta.php:596 +#: includes/class.cooked-recipe-meta.php:662 +#, fuzzy +msgid "Substitution:" +msgstr "Valeurs nutritionnelles" -#: includes/class.cooked-measurements.php:63 -#: includes/class.cooked-measurements.php:65 -msgid "cups" -msgstr "tasses" +#: includes/class.cooked-recipe-meta.php:517 +#: includes/class.cooked-recipe-meta.php:609 +#: includes/class.cooked-recipe-meta.php:675 +msgid "ex. Apple Sauce, Tofu, etc." +msgstr "" -#: includes/class.cooked-measurements.php:69 -#: includes/class.cooked-measurements.php:70 -msgid "tsp" -msgstr "c-à-c" +#: includes/class.cooked-recipe-meta.php:528 +#: includes/class.cooked-recipe-meta.php:683 +#: includes/class.cooked-recipe-meta.php:755 +#: includes/class.cooked-recipe-meta.php:847 +msgid "Section Heading" +msgstr "Titre de la section" -#: includes/class.cooked-measurements.php:71 -msgid "teaspoon" -msgstr "cuillère à café (5ml)" +#: includes/class.cooked-recipe-meta.php:532 +#: includes/class.cooked-recipe-meta.php:687 +#: includes/class.cooked-recipe-meta.php:759 +#: includes/class.cooked-recipe-meta.php:851 +msgid "Heading Element:" +msgstr "" -#: includes/class.cooked-measurements.php:72 -msgid "teaspoons" -msgstr "cuillères à café" +#: includes/class.cooked-recipe-meta.php:623 +msgid "Add Ingredient" +msgstr "Ajouter un ingrédient" -#: includes/class.cooked-measurements.php:76 -#: includes/class.cooked-measurements.php:77 -msgid "tbsp" -msgstr "c-à-s" +#: includes/class.cooked-recipe-meta.php:624 +#: includes/class.cooked-recipe-meta.php:826 +msgid "Add Section Heading" +msgstr "Ajouter une entête" -#: includes/class.cooked-measurements.php:78 -msgid "tablespoon" -msgstr "cuillère à soupe (15ml)" +#: includes/class.cooked-recipe-meta.php:739 +#: includes/class.cooked-admin-enqueues.php:139 +msgid "Change Image" +msgstr "Changer l’image" -#: includes/class.cooked-measurements.php:79 -msgid "tablespoons" -msgstr "cuillères à soupe" +#: includes/class.cooked-recipe-meta.php:739 +#: includes/class.cooked-recipe-meta.php:794 +#: includes/class.cooked-recipe-meta.php:834 +#: includes/class.cooked-admin-enqueues.php:138 +msgid "Add Image" +msgstr "Ajouter une image" -#: includes/class.cooked-measurements.php:83 -#: includes/class.cooked-measurements.php:84 -msgid "ml" -msgstr "ml" +#: includes/class.cooked-recipe-meta.php:825 +msgid "Add Direction" +msgstr "Ajouter une étape de la recette" -#: includes/class.cooked-measurements.php:85 -msgid "milliliter" -msgstr "millilitre" +#: includes/class.cooked-recipe-meta.php:882 +msgid "Nutrition Information" +msgstr "Informations nutritionnelles" -#: includes/class.cooked-measurements.php:86 -msgid "milliliters" -msgstr "millilitres" +#: includes/class.cooked-recipe-meta.php:920 +#: includes/class.cooked-shortcodes.php:1061 +msgid "Nutrition Facts" +msgstr "Valeurs nutritionnelles" -#: includes/class.cooked-measurements.php:90 -#: includes/class.cooked-measurements.php:91 -msgid "l" -msgstr "l" +#: includes/class.cooked-recipe-meta.php:938 +#: includes/class.cooked-shortcodes.php:1029 +#, fuzzy +msgid "Amount per serving" +msgstr "Quantité par dose" -#: includes/class.cooked-measurements.php:92 -msgid "liter" -msgstr "litre" +#: includes/class.cooked-recipe-meta.php:948 +#: includes/class.cooked-shortcodes.php:1039 +msgid "% Daily Value *" +msgstr "% Valeur quotidienne *" -#: includes/class.cooked-measurements.php:93 -msgid "liters" -msgstr "litres" +#: includes/class.cooked-recipe-meta.php:967 +#: includes/class.cooked-shortcodes.php:971 +msgid "Includes" +msgstr "" -#: includes/class.cooked-measurements.php:97 -#: includes/class.cooked-measurements.php:99 -msgid "stick" -msgstr "bâton" +#: includes/class.cooked-recipe-meta.php:999 +#: includes/class.cooked-shortcodes.php:1065 +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-measurements.php:98 -#: includes/class.cooked-measurements.php:100 -msgid "sticks" -msgstr "bâtons" +#: includes/class.cooked-recipe-meta.php:1015 +msgid "Recipe Gallery Type" +msgstr "Modifier la galerie de recette" -#: includes/class.cooked-measurements.php:104 -msgid "lb" -msgstr "lb" +#: includes/class.cooked-recipe-meta.php:1028 +msgid "Choose one..." +msgstr "Choisissez une..." -#: includes/class.cooked-measurements.php:105 -msgid "lbs" -msgstr "lbs" +#: includes/class.cooked-recipe-meta.php:1042 +#, fuzzy, php-format +msgid "%1$s or %2$s Video" +msgstr "%s ou %s Vidéo" -#: includes/class.cooked-measurements.php:106 -msgid "pound" -msgstr "livre" +#: includes/class.cooked-recipe-meta.php:1046 +#, fuzzy, 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 "" +"Si vous souhaitez afficher une vidéo en tant que premier élément de votre " +"galerie, vous pouvez coller une URL %s ou %s valide ci-dessous." -#: includes/class.cooked-measurements.php:107 -msgid "pounds" -msgstr "livres" +#: includes/class.cooked-recipe-meta.php:1051 +msgid "Gallery Items" +msgstr "Éléments de la galerie" -#: includes/class.cooked-measurements.php:111 -#: includes/class.cooked-measurements.php:113 -msgid "dash" -msgstr "pincée" +#: includes/class.cooked-recipe-meta.php:1066 +#: includes/class.cooked-admin-enqueues.php:141 +msgid "Add to Gallery" +msgstr "Ajouter à la galerie" -#: includes/class.cooked-measurements.php:112 -#: includes/class.cooked-measurements.php:114 -msgid "dashes" -msgstr "pincées" +#: includes/class.cooked-recipe-meta.php:1082 +msgid "Recipe Information" +msgstr "Informations sur la recette" -#: includes/class.cooked-measurements.php:118 -#: includes/class.cooked-measurements.php:120 -msgid "drop" -msgstr "goutte" +#: includes/class.cooked-recipe-meta.php:1083 +msgid "This will display the recipe author, cooking times, etc." +msgstr "Cela affichera l’auteur de la recette, les temps de cuisson, etc." + +#: includes/class.cooked-recipe-meta.php:1092 +#: includes/class.cooked-recipe-meta.php:1102 +#, fuzzy, php-format +msgid "\"%1$s\" and \"%2$s\"" +msgstr "« %s » et « %s »" + +#: includes/class.cooked-recipe-meta.php:1094 +msgid "" +"This will allow you to include or exclude content from the shortcode output." +msgstr "" +"Cela vous permettra d'inclure ou d'exclure du contenu généré par le " +"shortcode." + +#: includes/class.cooked-recipe-meta.php:1103 +msgid "" +"Used like \"include\", but will position the content to the left or right." +msgstr "" +"Utilisé de la même façon qu'« inclure », mais positionnera le contenu à " +"gauche ou à droite." + +#: includes/class.cooked-recipe-meta.php:1113 +#: includes/class.cooked-recipe-meta.php:1159 +#: includes/class.cooked-recipe-meta.php:1190 +#: includes/class.cooked-recipe-meta.php:1215 +#: includes/class.cooked-recipe-meta.php:1239 +#: includes/class.cooked-recipe-meta.php:1299 +#: includes/class.cooked-recipe-meta.php:1344 +#: includes/class.cooked-recipe-meta.php:1374 +#: includes/class.cooked-recipe-meta.php:1419 +msgid "Available Variables" +msgstr "Variables disponibles" + +#: includes/class.cooked-recipe-meta.php:1117 +#: includes/class.cooked-settings.php:215 +#: includes/class.cooked-shortcodes.php:445 +#: includes/class.cooked-shortcodes.php:623 +msgid "Author" +msgstr "Auteur" + +#: includes/class.cooked-recipe-meta.php:1121 +#: includes/class.cooked-shortcodes.php:446 +#: includes/class.cooked-shortcodes.php:634 +msgid "Difficulty" +msgstr "Difficulté" + +#: includes/class.cooked-recipe-meta.php:1122 +msgid "Servings Switcher" +msgstr "Sélecteur de parts" + +#: includes/class.cooked-recipe-meta.php:1123 +#: includes/class.cooked-taxonomies.php:39 +#: includes/class.cooked-settings.php:216 +#: includes/class.cooked-shortcodes.php:717 +#: includes/class.cooked-shortcodes.php:720 +msgid "Category" +msgstr "Catégorie" + +#: includes/class.cooked-recipe-meta.php:1124 +msgid "Print Mode" +msgstr "Imprimer" + +#: includes/class.cooked-recipe-meta.php:1125 +msgid "Full-Screen Mode" +msgstr "Mode plein écran" + +#: includes/class.cooked-recipe-meta.php:1145 +msgid "" +"This will display the list of ingredients, added via the \"Ingredients\" tab." +msgstr "" +"Cela affichera la liste des ingrédients, ajoutés via l’onglet " +"« Ingrédients »." + +#: includes/class.cooked-recipe-meta.php:1151 +msgid "This will allow you to hide or show the checkboxes:" +msgstr "Cela vous permettra de masquer ou d’afficher les cases à cocher :" + +#: includes/class.cooked-recipe-meta.php:1161 +msgid "Show checkboxes" +msgstr "Afficher les cases à cocher" + +#: includes/class.cooked-recipe-meta.php:1162 +msgid "Hide checkboxes" +msgstr "Masquer les cases à cocher" + +#: includes/class.cooked-recipe-meta.php:1176 +msgid "" +"This will display the list of directions, added via the \"Directions\" tab." +msgstr "" +"Cela affichera la liste des étapes de la recette, ajoutée via l’onglet " +"« Etapes de la recette »." + +#: includes/class.cooked-recipe-meta.php:1182 +msgid "This will allow you to hide or show the numbers:" +msgstr "" +"Cela vous permettra de masquer ou d’afficher la numérotaion des étapes :" + +#: includes/class.cooked-recipe-meta.php:1192 +msgid "Show numbers" +msgstr "Afficher la numérotation" + +#: includes/class.cooked-recipe-meta.php:1193 +msgid "Hide numbers" +msgstr "Masquer la numérotation" + +#: includes/class.cooked-recipe-meta.php:1206 +msgid "Featured Image" +msgstr "Image mise en avant" + +#: includes/class.cooked-recipe-meta.php:1207 +msgid "This will display the featured image, if one is set." +msgstr "Cela affichera l’image sélectionnée, si elle est définie." + +#: includes/class.cooked-recipe-meta.php:1217 +#: includes/class.cooked-recipe-meta.php:1241 +#: includes/class.cooked-recipe-meta.php:1346 +msgid "None" +msgstr "Aucun" + +#: includes/class.cooked-recipe-meta.php:1230 +msgid "Nutrition Label" +msgstr "Étiquette nutritionnelle" + +#: includes/class.cooked-recipe-meta.php:1231 +msgid "This will display the Nutrition Facts label, if data is present." +msgstr "" +"Cela affichera l'étiquette de la valeur nutritive, si des données sont " +"présentes." + +#: includes/class.cooked-recipe-meta.php:1257 +msgid "" +"This will display the gallery, if one is set or created from the \"Gallery\" " +"tab." +msgstr "" +"Cela affichera la galerie, si elle est définie ou créée à partir de l’onglet " +"« Galerie »." + +#: includes/class.cooked-recipe-meta.php:1265 +msgid "Set the width of the gallery." +msgstr "Définissez la largeur de la galerie." + +#: includes/class.cooked-recipe-meta.php:1272 +msgid "Set the image size ratio." +msgstr "Définissez le rapport de taille d’image." + +#: includes/class.cooked-recipe-meta.php:1282 +msgid "Set the navigation style." +msgstr "Défissez le style de navigation." + +#: includes/class.cooked-recipe-meta.php:1289 +msgid "Enable or disable \"Full-Screen\" mode." +msgstr "Activer ou désactiver le mode « Plein écran »." + +#: includes/class.cooked-recipe-meta.php:1304 +#, fuzzy, php-format +msgid "ex: \"%1$s\" or \"%2$s\"" +msgstr "ex : « %s » ou « %s »" + +#: includes/class.cooked-recipe-meta.php:1309 +#, php-format +msgid "ex: \"%s\"" +msgstr "ex : « %s »" + +#: includes/class.cooked-recipe-meta.php:1314 +#, fuzzy, php-format +msgid "\"%1$s\", \"%2$s\", or \"%3$s\"" +msgstr "« %s », « %s », ou « %s »" + +#: includes/class.cooked-recipe-meta.php:1319 +#, fuzzy, php-format +msgid "\"%1$s\" or \"%2$s\"" +msgstr "« %s » ou « %s »" + +#: includes/class.cooked-recipe-meta.php:1335 +#: includes/class.cooked-functions.php:132 +#: includes/class.cooked-settings.php:218 +msgid "Excerpt" +msgstr "Extrait" + +#: includes/class.cooked-recipe-meta.php:1336 +msgid "" +"This will display the excerpt, if one is available from the \"Layout & " +"Content\" tab." +msgstr "" +"Cela affichera l’extrait, s’il en existe un dans l’onglet « Mise en page et " +"contenu »." + +#: includes/class.cooked-recipe-meta.php:1359 +#: includes/class.cooked-functions.php:136 +#: includes/class.cooked-settings.php:219 +#: includes/class.cooked-shortcodes.php:774 +#: includes/class.cooked-recipes.php:643 +#, fuzzy +msgid "Notes" +msgstr "Remarque :" + +#: includes/class.cooked-recipe-meta.php:1360 +#, fuzzy +msgid "" +"This will display the notes, if one is available from the \"Layout & " +"Content\" tab." +msgstr "" +"Cela affichera l’extrait, s’il en existe un dans l’onglet « Mise en page et " +"contenu »." + +#: includes/class.cooked-recipe-meta.php:1366 +#, fuzzy +msgid "This will allow you to hide or show the header for the notes section:" +msgstr "Cela vous permettra de masquer ou d’afficher les cases à cocher :" + +#: includes/class.cooked-recipe-meta.php:1376 +#, fuzzy +msgid "Show header" +msgstr "Afficher les cases à cocher" + +#: includes/class.cooked-recipe-meta.php:1377 +#, fuzzy +msgid "Hide header" +msgstr "Masquer l'image" + +#: includes/class.cooked-recipe-meta.php:1390 +#: includes/class.cooked-enqueues.php:52 +msgid "Timer" +msgstr "Minuteur" + +#: includes/class.cooked-recipe-meta.php:1391 +msgid "This will display a special link to start a cooking timer." +msgstr "Cela affichera un lien spécial pour démarrer une minuterie de cuisson." + +#: includes/class.cooked-recipe-meta.php:1400 +#, fuzzy, php-format +msgid "\"%1$s\", \"%2$s\" and \"%3$s\"" +msgstr "« %s », « %s » et « %s »" + +#: includes/class.cooked-recipe-meta.php:1402 +msgid "Use just one or a combination of all three to set the timer length" +msgstr "" +"Utilisez un seul ou une combinaison des trois pour régler la longueur de la " +"minuterie" + +#: includes/class.cooked-recipe-meta.php:1409 +msgid "Add a short description for this timer, if applicable." +msgstr "Ajoutez une courte description pour cette minuterie, le cas échéant." + +#: includes/class.cooked-recipe-meta.php:1421 +msgid "Time in seconds" +msgstr "Temps en secondes" + +#: includes/class.cooked-recipe-meta.php:1422 +msgid "Time in minutes" +msgstr "Temps en minutes" + +#: includes/class.cooked-recipe-meta.php:1423 +msgid "Time in hours" +msgstr "Temps en heures" + +#: includes/class.cooked-recipe-meta.php:1424 +msgid "Timer Description" +msgstr "Description de la minuterie" + +#: includes/class.cooked-import.php:46 includes/class.cooked-import.php:100 +#, fuzzy, php-format +msgid "There is %1$s recipe that should be imported from %2$s." +msgstr "" +"Il y a %s recette qui devrait être migrée depuis %s pour tirer parti des " +"nouvelles fonctionnalités et de la fiabilité." + +#: includes/class.cooked-import.php:48 includes/class.cooked-import.php:102 +msgid "" +"Before you begin, please make sure you backup your database in case " +"something goes wrong." +msgstr "" + +#: includes/class.cooked-import.php:50 includes/class.cooked-import.php:104 +#, fuzzy +msgid "" +"Click the button below to import these recipes. Here is what will happen to " +"your recipes:" +msgstr "" +"Veuillez cliquer sur le bouton ci-dessous pour migrer ces recettes. Voici ce " +"qui va arriver à vos recettes :" + +#: includes/class.cooked-import.php:52 includes/class.cooked-import.php:106 +msgid "Recipes will be imported with the 'Draft' status." +msgstr "" + +#: includes/class.cooked-import.php:53 includes/class.cooked-import.php:107 +msgid "" +"Comments and ratings data will also be imported (ratings are available in " +"Cooked Pro)." +msgstr "" + +#: includes/class.cooked-import.php:54 includes/class.cooked-import.php:109 +msgid "" +"After the import is complete, you can bulk edit the recipes and change their " +"status to 'Published'." +msgstr "" + +#: includes/class.cooked-import.php:55 +msgid "" +"The existing WP Delicious recipes and data will not be modified or deleted." +msgstr "" + +#: includes/class.cooked-import.php:56 includes/class.cooked-import.php:111 +msgid "" +"Certain data that is not suppoted by Cooked will not be imported (such as " +"Cooking Temp, Estimated Cost, Recipe Keywords, etc)." +msgstr "" + +#: includes/class.cooked-import.php:57 includes/class.cooked-import.php:112 +msgid "" +"You can run the import multiple times, but keep in mind that duplicate " +"recipes will be created." +msgstr "" + +#: includes/class.cooked-import.php:61 includes/class.cooked-import.php:116 +#: includes/class.cooked-migration.php:58 +msgid "Wow, you have a lot of recipes!" +msgstr "Wow, vous avez beaucoup de recettes !" + +#: includes/class.cooked-import.php:61 includes/class.cooked-import.php:116 +#: includes/class.cooked-migration.php:58 +msgid "" +"It is definitely recommended that you get yourself a cup of coffee or tea " +"after clicking this button." +msgstr "" +"Il est fortement recommandé de prendre une tasse de café ou de thé après " +"avoir cliqué sur ce bouton." + +#: includes/class.cooked-import.php:63 includes/class.cooked-import.php:118 +#: includes/class.cooked-import.php:165 includes/class.cooked-migration.php:60 +msgid "Note:" +msgstr "Remarque :" + +#: includes/class.cooked-import.php:63 includes/class.cooked-import.php:118 +#: includes/class.cooked-migration.php:60 +msgid "The more recipes you have, the longer this will take." +msgstr "Plus vous avez de recettes, plus cela prendra de temps." + +#: includes/class.cooked-import.php:68 includes/class.cooked-import.php:83 +msgid "WP Delicious - Import" +msgstr "" + +#: includes/class.cooked-import.php:108 +msgid "" +"The difficulty level will be set to Beginner since it is not " +"supported by WP Recipe Maker." +msgstr "" + +#: includes/class.cooked-import.php:110 +msgid "The existing WP Recipe Maker and data will not be modified or deleted." +msgstr "" + +#: includes/class.cooked-import.php:123 includes/class.cooked-import.php:138 +msgid "WP Recipe Maker - Import" +msgstr "" + +#: includes/class.cooked-import.php:152 +msgid "" +"Import recipes from a CSV file. Your CSV file should include the following " +"columns:" +msgstr "" + +#: includes/class.cooked-import.php:154 +#, fuzzy +msgid "Recipe title (required)" +msgstr "La recette doit être validée" + +#: includes/class.cooked-import.php:155 +#, fuzzy +msgid "Recipe excerpt/description" +msgstr "Extrait de la recette" + +#: includes/class.cooked-import.php:156 +#, fuzzy +msgid "Prep time in minutes" +msgstr "Temps en minutes" + +#: includes/class.cooked-import.php:157 +#, fuzzy +msgid "Cook time in minutes" +msgstr "Temps en minutes" + +#: includes/class.cooked-import.php:158 +msgid "Difficulty level (1=Beginner, 2=Intermediate, 3=Advanced)" +msgstr "" + +#: includes/class.cooked-import.php:159 +msgid "" +"Ingredients separated by pipe (|). Format: \"amount|measurement|name\" or " +"\"name\" for simple ingredients. Add substitutions with double pipe (||): " +"\"amount|measurement|name||sub_amount|sub_measurement|sub_name\"" +msgstr "" + +#: includes/class.cooked-import.php:160 +msgid "Directions/instructions separated by pipe (|)" +msgstr "" + +#: includes/class.cooked-import.php:161 +#, fuzzy +msgid "Recipe notes" +msgstr "Taxonomies des recettes" + +#: includes/class.cooked-import.php:162 +msgid "Categories separated by comma" +msgstr "" + +#: includes/class.cooked-import.php:163 +msgid "Tags separated by comma" +msgstr "" + +#: includes/class.cooked-import.php:165 +msgid "" +"Recipes will be imported with the 'Draft' status. After the import is " +"complete, you can bulk edit the recipes and change their status to " +"'Published'." +msgstr "" + +#: includes/class.cooked-import.php:168 +msgid "CSV Import" +msgstr "" + +#: includes/class.cooked-import.php:172 +msgid "Import Recipes via CSV" +msgstr "" + +#: includes/class.cooked-import.php:180 +msgid "More Imports are Coming Soon..." +msgstr "" + +#: includes/class.cooked-import.php:201 +#, fuzzy +msgid "Begin Import" +msgstr "Facile" + +#: includes/class.cooked-import.php:206 includes/class.cooked-import.php:226 +#: includes/class.cooked-settings.php:592 +msgid "reload" +msgstr "recharger" + +#: includes/class.cooked-import.php:221 +msgid "Upload and Import CSV" +msgstr "" + +#: includes/class.cooked-import.php:226 +msgid "Import Complete!" +msgstr "" + +#: includes/class.cooked-import.php:226 +msgid "You can now" +msgstr "" + +#: includes/class.cooked-import.php:226 +msgid "the import screen or" +msgstr "" + +#: includes/class.cooked-import.php:226 +#, fuzzy +msgid "view your recipes" +msgstr "Voir toutes les recettes" + +#: includes/class.cooked-widgets.php:38 +msgid "Edit Recipe(s)..." +msgstr "Éditer recette(s)..." + +#: includes/class.cooked-widgets.php:38 includes/class.cooked-widgets.php:40 +msgid "Choose recipe(s)..." +msgstr "Choisir recette(s)..." + +#: includes/class.cooked-seo.php:83 includes/class.cooked-recipes.php:962 +#, php-format +msgid "Step %d" +msgstr "Étape %d" + +#: includes/widgets/recipe-card.php:75 +#: includes/widgets/recipe-categories.php:40 +#: includes/widgets/recipe-list.php:48 +msgid "Widget Title (optional):" +msgstr "Nom du Widget (facultatif) :" + +#: includes/widgets/recipe-card.php:80 +msgid "Recipe:" +msgstr "Recette :" + +#: includes/widgets/recipe-card.php:89 +msgid "Style:" +msgstr "Style :" + +#: includes/widgets/recipe-card.php:91 +msgid "Simple" +msgstr "Simple" + +#: includes/widgets/recipe-card.php:92 +msgid "Simple Centered" +msgstr "Simple centré" + +#: includes/widgets/recipe-card.php:93 +msgid "Modern" +msgstr "Moderne" + +#: includes/widgets/recipe-card.php:94 +msgid "Modern Centered" +msgstr "Moderne centré" + +#: includes/widgets/recipe-card.php:99 includes/widgets/recipe-list.php:83 +msgid "Width:" +msgstr "Largeur :" + +#: includes/widgets/recipe-card.php:105 includes/widgets/recipe-list.php:89 +msgid "Hide Image" +msgstr "Masquer l'image" + +#: includes/widgets/recipe-card.php:110 +msgid "Hide Title" +msgstr "Masquer le titre" + +#: includes/widgets/recipe-card.php:115 includes/widgets/recipe-list.php:94 +msgid "Hide Author" +msgstr "Masquer l'auteur" + +#: includes/widgets/recipe-card.php:120 +msgid "Hide Excerpt" +msgstr "Masquer l'extrait" + +#: includes/widgets/recipe-categories.php:45 +#: includes/class.cooked-taxonomies.php:42 +msgid "Parent Category" +msgstr "Catégorie parente" + +#: includes/widgets/recipe-categories.php:48 +#: includes/class.cooked-taxonomies.php:41 +#: includes/class.cooked-recipes.php:1044 +msgid "All Categories" +msgstr "Toutes les catégories" + +#: includes/widgets/recipe-categories.php:58 +msgid "Hide Empty Categories" +msgstr "Masquer les catégories vides" -#: includes/class.cooked-measurements.php:119 -#: includes/class.cooked-measurements.php:121 -msgid "drops" -msgstr "gouttes" +#: includes/widgets/search.php:37 includes/widgets/nutrition.php:31 +msgid "Title (optional):" +msgstr "Titre (facultatif) :" -#: includes/class.cooked-measurements.php:125 -msgid "gal" -msgstr "gal" +#: includes/widgets/search.php:42 +msgid "Size:" +msgstr "Taille :" -#: includes/class.cooked-measurements.php:126 -msgid "gals" -msgstr "gals" +#: includes/widgets/search.php:44 +msgid "Compact" +msgstr "Compact" -#: includes/class.cooked-measurements.php:127 -msgid "gallon" -msgstr "gallon" +#: includes/widgets/search.php:45 +msgid "Wide" +msgstr "Large" -#: includes/class.cooked-measurements.php:128 -msgid "gallons" -msgstr "gallons" +#: includes/widgets/search.php:51 +msgid "Hide \"Browse\" dropdown" +msgstr "Masquer \"Parcourir\" la liste déroulante" -#: includes/class.cooked-measurements.php:132 -#: includes/class.cooked-measurements.php:134 -msgid "pinch" -msgstr "pinch" +#: includes/widgets/search.php:56 +msgid "Hide \"Sorting\" dropdown" +msgstr "Masquer \"Tri\" du menu déroulant" -#: includes/class.cooked-measurements.php:133 -#: includes/class.cooked-measurements.php:135 -msgid "pinches" -msgstr "pinches" +#: includes/widgets/recipe-list.php:53 +msgid "Sorted by:" +msgstr "Trier par :" -#: includes/class.cooked-measurements.php:139 -#: includes/class.cooked-measurements.php:140 -msgid "pt" -msgstr "pt" +#: includes/widgets/recipe-list.php:55 +msgid "Most Recent" +msgstr "Plus récents" -#: includes/class.cooked-measurements.php:141 -msgid "pint" -msgstr "pint" +#: includes/widgets/recipe-list.php:56 +msgid "Choose Recipes" +msgstr "Choisir une recette(s)" -#: includes/class.cooked-measurements.php:142 -msgid "pints" -msgstr "pints" +#: includes/widgets/recipe-list.php:62 +msgid "Show:" +msgstr "Afficher :" -#: includes/class.cooked-measurements.php:146 -msgid "qt" -msgstr "qt" +#: includes/widgets/recipe-list.php:73 +msgid "Recipes:" +msgstr "Recettes :" -#: includes/class.cooked-measurements.php:147 -msgid "qts" -msgstr "qts" +#: includes/class.cooked-recipe-maker.php:103 +msgid "Error importing WP Recipe Maker recipe." +msgstr "" -#: includes/class.cooked-measurements.php:148 -msgid "quart" -msgstr "quart" +#: includes/class.cooked-functions.php:103 +#, php-format +msgid "What's new in %s?" +msgstr "Quoi de neuf dans %s ?" -#: includes/class.cooked-measurements.php:149 -msgid "quarts" -msgstr "quarts" +#: includes/class.cooked-functions.php:127 +#: includes/class.cooked-shortcodes.php:655 +msgid "Print" +msgstr "Imprimer" -#: includes/class.cooked-measurements.php:167 -msgid "Serving Size" -msgstr "Part" +#: includes/class.cooked-functions.php:128 +msgid "Print Options:" +msgstr "Options d'impression :" -#: includes/class.cooked-measurements.php:171 -#: includes/class.cooked-settings.php:145 -msgid "Servings" -msgstr "Parts" +#: includes/class.cooked-functions.php:130 +msgid "Title" +msgstr "Titre" -#: includes/class.cooked-measurements.php:178 -msgid "Calories" -msgstr "Calories" +#: includes/class.cooked-functions.php:131 +msgid "Information" +msgstr "Informations" -#: includes/class.cooked-measurements.php:182 -msgid "Calories from Fat" -msgstr "Calories provenant des lipides" +#: includes/class.cooked-functions.php:133 +msgid "Images" +msgstr "Images" -#: includes/class.cooked-measurements.php:189 -msgid "Total Fat" -msgstr "Graisse totale" +#: includes/class.cooked-post-types.php:89 +msgid "Photo" +msgstr "Photo" -#: includes/class.cooked-measurements.php:195 -msgid "Saturated Fat" -msgstr "Acides gras saturés" +#: includes/class.cooked-post-types.php:403 +msgid "Recipe Archive" +msgstr "Archive des recettes" -#: includes/class.cooked-measurements.php:201 -msgid "Trans Fat" -msgstr "Acides gras insaturés" +#: includes/class.cooked-post-types.php:419 +#: includes/class.cooked-post-types.php:421 +#: includes/class.cooked-post-types.php:433 +#: includes/class.cooked-admin-menus.php:36 +#: includes/class.cooked-admin-menus.php:59 includes/class.cooked-users.php:154 +msgid "Recipes" +msgstr "Recettes" -#: includes/class.cooked-measurements.php:208 -msgid "Cholesterol" -msgstr "Cholesterol" +#: includes/class.cooked-post-types.php:420 +#: includes/class.cooked-post-types.php:422 +msgid "Recipe" +msgstr "Recette" -#: includes/class.cooked-measurements.php:214 -msgid "Sodium" -msgstr "Sodium" +#: includes/class.cooked-post-types.php:423 +#: includes/class.cooked-admin-menus.php:37 +#: includes/class.cooked-admin-menus.php:61 +msgid "Add New" +msgstr "Ajouter une recette" -#: includes/class.cooked-measurements.php:220 -msgid "Potassium" -msgstr "Potassium" +#: includes/class.cooked-post-types.php:424 +msgid "Add New Recipe" +msgstr "Ajouter une nouvelle recette" -#: includes/class.cooked-measurements.php:226 -msgid "Total Carbohydrate" -msgstr "Glucides totaux" +#: includes/class.cooked-post-types.php:425 +msgid "New Recipe" +msgstr "Nouvelle recette" -#: includes/class.cooked-measurements.php:226 -msgid "Net Carbohydrate" -msgstr "Glucides nets" +#: includes/class.cooked-post-types.php:426 +msgid "Edit Recipe" +msgstr "Modifier la recette" -#: includes/class.cooked-measurements.php:232 -msgid "Dietary Fiber" -msgstr "Fibre alimentaire" +#: includes/class.cooked-post-types.php:427 +msgid "View Recipe" +msgstr "Voir la recette" -#: includes/class.cooked-measurements.php:238 -msgid "Sugars" -msgstr "Sucre" +#: includes/class.cooked-post-types.php:428 +#: includes/class.cooked-admin-menus.php:60 +msgid "All Recipes" +msgstr "Toutes les recettes" -#: includes/class.cooked-measurements.php:245 -msgid "Protein" -msgstr "Protéine" +#: includes/class.cooked-post-types.php:429 +msgid "Search Recipes" +msgstr "Rechercher des recettes" -#: includes/class.cooked-measurements.php:254 -msgid "Vitamin A" -msgstr "Vitamine A" +#: includes/class.cooked-post-types.php:430 +msgid "No recipes found." +msgstr "Aucune recette trouvée." -#: includes/class.cooked-measurements.php:259 -msgid "Vitamin C" -msgstr "Vitamine C" +#: includes/class.cooked-post-types.php:431 +msgid "No recipes found in trash." +msgstr "Aucune recette trouvée dans la corbeille." -#: includes/class.cooked-measurements.php:264 -msgid "Calcium" -msgstr "Calcium" +#: includes/class.cooked-post-types.php:459 +msgid "Recipe title ..." +msgstr "Titre de la recette..." -#: includes/class.cooked-measurements.php:269 -msgid "Iron" -msgstr "Fer" +#: includes/class.cooked-post-types.php:477 +#, fuzzy +msgid "Cooked Browse Recipes Page" +msgstr "Parcourir / Rechercher des pages de recettes" -#: includes/class.cooked-measurements.php:274 -msgid "Vitamin D" -msgstr "Vitamine D" +#: includes/class.cooked-ajax.php:346 +msgid "No default content provided." +msgstr "" -#: includes/class.cooked-measurements.php:279 -msgid "Vitamin E" -msgstr "Vitamine E" +#: includes/class.cooked-ajax.php:375 includes/class.cooked-ajax.php:411 +#, fuzzy +msgid "You do not have permission to import recipes." +msgstr "" +"Vous n'avez pas les autorisations suffisantes pour accéder à cette page." -#: includes/class.cooked-measurements.php:284 -msgid "Vitamin K" -msgstr "Vitamine K" +#: includes/class.cooked-ajax.php:379 +#: includes/class.cooked-admin-enqueues.php:161 +msgid "File upload failed." +msgstr "" -#: includes/class.cooked-measurements.php:289 -msgid "Thiamin" -msgstr "Vitamine B1 (Thiamin)" +#: includes/class.cooked-ajax.php:385 +msgid "Invalid file type. Please upload a CSV file." +msgstr "" -#: includes/class.cooked-measurements.php:294 -msgid "Riboflavin" -msgstr "Vitamine B2 (Riboflavine)" +#: includes/class.cooked-ajax.php:418 +msgid "CSV file not found. Please upload again." +msgstr "" -#: includes/class.cooked-measurements.php:299 -msgid "Niacin" -msgstr "Vitamine B3 (Niacine)" +#: includes/class.cooked-ajax.php:436 +msgid "CSV Import class could not be loaded." +msgstr "" -#: includes/class.cooked-measurements.php:304 -msgid "Vitamin B6" -msgstr "Vitamine B6" +#: includes/class.cooked-ajax.php:450 +#, php-format +msgid "Successfully imported %d recipe(s)." +msgstr "" -#: includes/class.cooked-measurements.php:309 -msgid "Folate" -msgstr "Vitamine B9 (Folate)" +#: includes/class.cooked-ajax.php:459 +#, fuzzy +msgid "No recipes were imported." +msgstr "Aucune recette trouvée." -#: includes/class.cooked-measurements.php:314 -msgid "Vitamin B12" -msgstr "Vitamine B12" +#: includes/class.cooked-rankmathseo.php:36 +#, fuzzy +msgid "Recipe Category" +msgstr "Permalien de la catégorie de recette" -#: includes/class.cooked-measurements.php:319 -msgid "Biotin" -msgstr "Vitamine B8 (Biotine)" +#: includes/class.cooked-taxonomies.php:38 +#: includes/class.cooked-taxonomies.php:48 +#: includes/class.cooked-settings.php:191 +#: includes/class.cooked-recipes.php:1042 +msgid "Categories" +msgstr "Catégories" -#: includes/class.cooked-measurements.php:324 -msgid "Pantothenic Acid" -msgstr "Vitamine B5 (Acide pantothénique)" +#: includes/class.cooked-taxonomies.php:40 +msgid "Search Categories" +msgstr "Rechercher des catégories" -#: includes/class.cooked-measurements.php:329 -msgid "Phosphorus" -msgstr "Phosphore" +#: includes/class.cooked-taxonomies.php:43 +msgid "Parent Category:" +msgstr "Catégorie parente :" -#: includes/class.cooked-measurements.php:334 -msgid "Iodine" -msgstr "Iode" +#: includes/class.cooked-taxonomies.php:44 +msgid "Edit Category" +msgstr "Modifier la catégorie" -#: includes/class.cooked-measurements.php:339 -msgid "Magnesium" -msgstr "Magnésium" +#: includes/class.cooked-taxonomies.php:45 +msgid "Update Category" +msgstr "Mise à jour de la catégorie" -#: includes/class.cooked-measurements.php:344 -msgid "Zinc" -msgstr "Zinc" +#: includes/class.cooked-taxonomies.php:46 +msgid "Add New Category" +msgstr "Ajouter une nouvelle catégorie" -#: includes/class.cooked-measurements.php:349 -msgid "Selenium" -msgstr "Sélénium" +#: includes/class.cooked-taxonomies.php:47 +msgid "New Category Name" +msgstr "Nom de la nouvelle catégorie" -#: includes/class.cooked-measurements.php:354 -msgid "Copper" -msgstr "Cuivre" +#: includes/class.cooked-taxonomies.php:49 +msgid "No Categories" +msgstr "Aucune catégorie" -#: includes/class.cooked-measurements.php:359 -msgid "Manganese" -msgstr "Manganèse" +#: includes/class.cooked-taxonomies.php:136 +#, fuzzy, php-format +msgid "%s Recipe" +msgstr "%s recette" -#: includes/class.cooked-measurements.php:364 -msgid "Chromium" -msgstr "Chromium" +#: includes/class.cooked-plugin-extra.php:31 +msgid "Required by Cooked Pro" +msgstr "" -#: includes/class.cooked-measurements.php:369 -msgid "Molybdenum" -msgstr "Molybdène" +#: includes/class.cooked-delicious-recipes.php:102 +msgid "Error importing WP Delicious recipe." +msgstr "" -#: includes/class.cooked-measurements.php:374 -msgid "Chloride" -msgstr "Chlorure" +#: includes/class.cooked-admin-menus.php:46 +msgid "Import" +msgstr "" -#: includes/class.cooked-measurements.php:661 -#: includes/class.cooked-measurements.php:670 -#: includes/class.cooked-measurements.php:684 -#, php-format -msgid "%d min" -msgstr "%d min" +#: includes/class.cooked-admin-menus.php:47 +msgid "What's New?" +msgstr "Quoi de neuf ?" -#: includes/class.cooked-measurements.php:661 -#: includes/class.cooked-measurements.php:670 -#: includes/class.cooked-measurements.php:684 -#, php-format -msgid "%d mins" -msgstr "%d mins" +#: includes/class.cooked-admin-menus.php:50 +msgid "Upgrade to Pro" +msgstr "Passer à Pro" -#: includes/class.cooked-measurements.php:669 -#: includes/class.cooked-measurements.php:683 -#, php-format -msgid "%d hr" -msgstr "%d h" +#: includes/class.cooked-admin-menus.php:90 +#: includes/class.cooked-admin-menus.php:99 +#: includes/class.cooked-admin-menus.php:108 +#: includes/class.cooked-admin-menus.php:117 +msgid "You do not have sufficient permissions to access this page." +msgstr "" +"Vous n'avez pas les autorisations suffisantes pour accéder à cette page." -#: includes/class.cooked-measurements.php:669 -#: includes/class.cooked-measurements.php:683 -#, php-format -msgid "%d hrs" -msgstr "%d h" +#: includes/class.cooked-settings.php:85 +msgid "Cooked settings has been updated!" +msgstr "" -#: includes/class.cooked-measurements.php:682 -#, php-format -msgid "%d day" -msgstr "%d jour" +#: includes/class.cooked-settings.php:104 +msgid "Cooked Plugin Setup" +msgstr "" -#: includes/class.cooked-measurements.php:682 +#: includes/class.cooked-settings.php:105 #, php-format -msgid "%d days" -msgstr "%d jours" +msgid "To display your recipes properly, please set up your %s." +msgstr "" -#: includes/class.cooked-migration.php:52 -#, php-format -msgid "" -"There is %s recipe that should be migrated from %s to take advantage of new " -"features and reliability." -msgid_plural "" -"There are %s recipes that should be migrated from %s to take advantage of " -"new features and reliability." -msgstr[0] "" -"Il y a %s recette qui devrait être migrée depuis %s pour tirer parti des " -"nouvelles fonctionnalités et de la fiabilité." -msgstr[1] "" -"Il y a %s recettes qui devrait être migrée depuis %s pour tirer parti des " -"nouvelles fonctionnalités et de la fiabilité." +#: includes/class.cooked-settings.php:106 +#: includes/class.cooked-settings.php:168 +msgid "Browse/Search Recipes Page" +msgstr "Parcourir / Rechercher des pages de recettes" -#: includes/class.cooked-migration.php:54 -msgid "" -"Please click the button below to migrate these recipes. Here is what will " -"happen to your recipes:" +#: includes/class.cooked-settings.php:104 +#, php-format +msgid "" msgstr "" -"Veuillez cliquer sur le bouton ci-dessous pour migrer ces recettes. Voici ce " -"qui va arriver à vos recettes :" -#: includes/class.cooked-migration.php:56 -msgid "NO DATA LOSS, all fields will be remapped." -msgstr "AUCUNE PERTE DE DONNÉES, tous les champs seront réaffectés." +#: includes/class.cooked-settings.php:143 +msgid "Choose a page..." +msgstr "Choisir une page…" -#: includes/class.cooked-migration.php:57 -msgid "Remapped fields will greatly speed up recipe loading times." -msgstr "" -"Les champs réaffectés vont grandement accélérer les temps de chargement des " -"recettes." +#: includes/class.cooked-settings.php:143 +msgid "No pages" +msgstr "Aucune page" -#: includes/class.cooked-migration.php:58 +#: includes/class.cooked-settings.php:144 +msgid "No default" +msgstr "Pas de choix par défaut" + +#: includes/class.cooked-settings.php:144 +#: includes/class.cooked-recipes.php:1039 +msgid "No categories" +msgstr "Aucune catégories" + +#: includes/class.cooked-settings.php:164 +msgid "General" +msgstr "Général" + +#: includes/class.cooked-settings.php:170 +#, php-format msgid "" -"If recipe excerpt exists, the short description will be moved to the top of " -"the recipe template." +"Create a page with the %s shortcode on it, then choose it from this dropdown." msgstr "" -"Si l'extrait de recette existe, la description courte sera déplacée vers le " -"haut du modèle de recette." +"Créez une page avec le shortcode %s, puis sélectionnez-la dans la liste ci-" +"dessous." -#: includes/class.cooked-migration.php:59 +#: includes/class.cooked-settings.php:170 msgid "" -"If no recipe excerpt exists, the short description will be used instead." +"Note: This setting is required for the plugin to function properly." msgstr "" -"Si aucun extrait de recette n'existe, la description courte sera utilisée à " -"la place." -#: includes/class.cooked-migration.php:60 -msgid "Version number will be applied to each recipe." -msgstr "Le numéro de version sera appliqué à chaque recette." - -#: includes/class.cooked-migration.php:63 -msgid "Wow, you have a lot of recipes!" -msgstr "Wow, vous avez beaucoup de recettes !" +#: includes/class.cooked-settings.php:176 +msgid "Recipes Per Page" +msgstr "Nombre de recettes par page" -#: includes/class.cooked-migration.php:63 +#: includes/class.cooked-settings.php:178 +#, php-format msgid "" -"It is definitely recommended that you get yourself a cup of coffee or tea " -"after clicking this button." +"Choose the default (set via the %s panel) or choose a different number here." msgstr "" -"Il est fortement recommandé de prendre une tasse de café ou de thé après " -"avoir cliqué sur ce bouton." +"Choisissez la valeur par défaut (définie via le panneau %s) ou indiquez une " +"autre valeur ici." -#: includes/class.cooked-migration.php:65 -msgid "Note:" -msgstr "Remarque :" +#: includes/class.cooked-settings.php:178 +msgid "Settings > Reading" +msgstr "Paramètres > Lecture" -#: includes/class.cooked-migration.php:65 -msgid "The more recipes you have, the longer this will take." -msgstr "Plus vous avez de recettes, plus cela prendra de temps." +#: includes/class.cooked-settings.php:184 +msgid "Recipe Taxonomies" +msgstr "Taxonomies des recettes" -#: includes/class.cooked-migration.php:70 -msgid "Migration" -msgstr "Migration" +#: includes/class.cooked-settings.php:185 +msgid "Choose which taxonomies you want to enable for your recipes." +msgstr "" +"Choisissez les taxonomies que vous souhaitez activer pour vos recettes." -#: includes/class.cooked-migration.php:98 -#, php-format +#: includes/class.cooked-settings.php:196 +msgid "Global Recipe Toggles" +msgstr "Bascule de la totalité des recettes" + +#: includes/class.cooked-settings.php:197 msgid "" -"There is %s recipe that is from an older version of Cooked. Please %s to " -"migrate this recipe." -msgid_plural "" -"There are %s recipes that are from an older version of Cooked. Please %s to " -"migrate these recipes." -msgstr[0] "" -"Il y a %s recette qui provient d'une ancienne version de Cooked. S'il vous " -"plaît %s pour migrer cette recette." -msgstr[1] "" -"Il y a %s recettes qui proviennent d'une ancienne version de Cooked. S'il " -"vous plaît %s pour migrer ces recettes." +"You can quickly hide or show different recipe elements (site-wide) with " +"these checkboxes." +msgstr "" +"Vous pouvez masquer ou afficher rapidement différents éléments de recette " +"(sur l’ensemble du site) à l’aide de ces cases à cocher." -#: includes/class.cooked-migration.php:98 -msgid "click here" -msgstr "cliquez ici" +#: includes/class.cooked-settings.php:223 +#: includes/class.cooked-measurements.php:202 +#: includes/class.cooked-recipes.php:799 +msgid "Servings" +msgstr "Parts" -#: includes/class.cooked-post-types.php:45 -msgid "Photo" -msgstr "Photo" +#: includes/class.cooked-settings.php:228 +msgid "Carbs Format" +msgstr "Format des glucides" -#: includes/class.cooked-post-types.php:260 -msgid "Recipe Archive" -msgstr "Archive des recettes" +#: includes/class.cooked-settings.php:229 +msgid "You can display carbs as \"Total\" or \"Net\"." +msgstr "Vous pouvez afficher les glucides comme « total » ou « net »." -#: includes/class.cooked-post-types.php:273 -#: includes/class.cooked-post-types.php:275 -msgid "Recipe" -msgstr "Recette" +#: includes/class.cooked-settings.php:235 +msgid "Total Carbs" +msgstr "Glucides totaux" -#: includes/class.cooked-post-types.php:277 -msgid "Add New Recipe" -msgstr "Ajouter une nouvelle recette" +#: includes/class.cooked-settings.php:236 +msgid "Net Carbs" +msgstr "Glucides nets" -#: includes/class.cooked-post-types.php:278 -msgid "New Recipe" -msgstr "Nouvelle recette" +#: includes/class.cooked-settings.php:241 +msgid "Author Name Format" +msgstr "Format du nom d'auteur" -#: includes/class.cooked-post-types.php:279 -msgid "Edit Recipe" -msgstr "Modifier la recette" +#: includes/class.cooked-settings.php:242 +msgid "You can show the full author's name or just a part of it." +msgstr "" +"Vous pouvez afficher le nom complet de l’auteur ou seulement une partie de " +"celui-ci." -#: includes/class.cooked-post-types.php:280 -msgid "View Recipe" -msgstr "Voir la recette" +#: includes/class.cooked-settings.php:248 +msgid "Full name" +msgstr "Nom complet" -#: includes/class.cooked-post-types.php:282 -msgid "Search Recipes" -msgstr "Rechercher des recettes" +#: includes/class.cooked-settings.php:249 +msgid "Full first name w/last name initial" +msgstr "Prénom complet / 1ère lettre du nom de famille" -#: includes/class.cooked-post-types.php:283 -msgid "No recipes found." -msgstr "Aucune recette trouvée." +#: includes/class.cooked-settings.php:250 +msgid "First name initial w/full last name" +msgstr "1ère lettre du prénom / nom complet" -#: includes/class.cooked-post-types.php:284 -msgid "No recipes found in trash." -msgstr "Aucune recette trouvée dans la corbeille." +#: includes/class.cooked-settings.php:251 +msgid "First name only" +msgstr "Prénom uniquement" -#: includes/class.cooked-post-types.php:313 -msgid "Recipe title ..." -msgstr "Titre de la recette..." +#: includes/class.cooked-settings.php:256 +msgid "Author Links" +msgstr "Liens vers l'auteur" -#: includes/class.cooked-recipe-meta.php:181 -msgid "Display Recipe" -msgstr "Afficher la recette" +#: includes/class.cooked-settings.php:257 +msgid "" +"If you do not want the author names to link to the author recipe listings, " +"you can disable them here." +msgstr "" +"Si vous ne souhaitez pas que les noms des auteurs soient reliés à leurs " +"recettes, vous pouvez les désactiver ici." -#: includes/class.cooked-recipe-meta.php:182 +#: includes/class.cooked-settings.php:257 msgid "" -"This shortcode displays the recipe in its entirety, using the \"Recipe " -"Template\" field in the first tab." +"Note: Author links require the Browse/Search Recipes Page to be set " +"up correctly to function properly." msgstr "" -"Ce shortcode affiche la recette dans son intégralité, en utilisant le champ " -"\"Modèle de recette\" dans le premier onglet." -#: includes/class.cooked-recipe-meta.php:219 -msgid "Layout" -msgstr "Disposition" +#: includes/class.cooked-settings.php:264 +msgid "Disable Author Links" +msgstr "Désactiver les liens vers l’auteur" -#: includes/class.cooked-recipe-meta.php:243 -#: includes/class.cooked-recipe-meta.php:988 -msgid "Gallery" -msgstr "Galerie" +#: includes/class.cooked-settings.php:269 +msgid "Default Category" +msgstr "Catégorie par Défaut" -#: includes/class.cooked-recipe-meta.php:249 -msgid "Shortcodes" -msgstr "Shortcodes" +#: includes/class.cooked-settings.php:271 +#, php-format +msgid "" +"Optionally set the default recipe category for your %s shortcode display." +msgstr "" +"Si vous le voulez, vous pouvez indiquer une catégorie de recettes qui sera " +"utilisée par défaut avec le shortcode %s." -#: includes/class.cooked-recipe-meta.php:301 -msgid "Recipe Review Required" -msgstr "La recette doit être validée" +#: includes/class.cooked-settings.php:277 +msgid "Default Sort Order" +msgstr "Classement par défaut" -#: includes/class.cooked-recipe-meta.php:302 +#: includes/class.cooked-settings.php:279 #, php-format -msgid "" -"It looks like this recipe is from a different version of %s. Please review " -"and click \"Update\" to save it." +msgid "Set the default sort order for your %s shortcode display." msgstr "" -"Il semble que cette recette provienne d'une version différente de %s. Merci " -"de la modifier et cliquez sur \"Mettre à jour\" pour l'enregistrer." +"Indiquez l'ordre de tri qui sera utilisé par défaut avec avec le shortcode " +"%s." -#: includes/class.cooked-recipe-meta.php:309 -msgid "Recipe Shortcode" -msgstr "Shortcode de la recette" +#: includes/class.cooked-settings.php:285 +msgid "Newest First" +msgstr "La plus récente en premier" -#: includes/class.cooked-recipe-meta.php:310 -msgid "You can use the following shortcode to display your recipe anywhere:" +#: includes/class.cooked-settings.php:286 +msgid "Oldest First" +msgstr "La plus ancienne en premier" + +#: includes/class.cooked-settings.php:287 +msgid "Alphabetical" +msgstr "Alphabétique" + +#: includes/class.cooked-settings.php:288 +msgid "Alphabetical (reversed)" +msgstr "Alphabétique (inversé)" + +#: includes/class.cooked-settings.php:293 +#, fuzzy +msgid "Section Heading Default HTML Tag" +msgstr "Titre de la section" + +#: includes/class.cooked-settings.php:295 +#, fuzzy +msgid "Set the default HTML tag for your section headings." msgstr "" -"Vous pouvez utiliser le shortcode suivant pour afficher votre recette " -"n’importe où :" +"Indiquez l'ordre de tri qui sera utilisé par défaut avec avec le shortcode " +"%s." -#: includes/class.cooked-recipe-meta.php:321 -msgid "Recipe Template" -msgstr "Modèle de recette" +#: includes/class.cooked-settings.php:301 +msgid "div" +msgstr "" -#: includes/class.cooked-recipe-meta.php:321 -msgid "Default Recipe Template" -msgstr "Modèle de recette par défaut" +#: includes/class.cooked-settings.php:302 +msgid "h2" +msgstr "" + +#: includes/class.cooked-settings.php:303 +msgid "h3" +msgstr "" + +#: includes/class.cooked-settings.php:304 +msgid "h4" +msgstr "" + +#: includes/class.cooked-settings.php:305 +msgid "h5" +msgstr "" + +#: includes/class.cooked-settings.php:306 +msgid "h6" +msgstr "" + +#: includes/class.cooked-settings.php:311 +msgid "WP Editor Roles" +msgstr "" -#: includes/class.cooked-recipe-meta.php:321 +#: includes/class.cooked-settings.php:312 msgid "" -"Choose from the options below to use this layout as the default for new " -"recipes or for all recipes." +"Choose which user roles can use the WP Editor for the Excerpt, Directions & " +"Notes fields." msgstr "" -"Choisissez parmi les options ci-dessous pour utiliser ce modèle comme mise " -"en page par défaut pour les nouvelles recettes uniquement ou pour toutes les " -"recettes." -#: includes/class.cooked-recipe-meta.php:321 -msgid "Save as Default" -msgstr "Enregistrer comme valeur par défaut" +#: includes/class.cooked-settings.php:318 +msgid "Advanced Settings" +msgstr "Paramètres Avancés" -#: includes/class.cooked-recipe-meta.php:321 -msgid "Apply to All" -msgstr "Appliquer à tous" +#: includes/class.cooked-settings.php:328 +msgid "Disable Public Recipes" +msgstr "Désactiver les recettes publiques" + +#: includes/class.cooked-settings.php:328 +#, php-format +msgid "Only show recipes using the %s shortcode." +msgstr "Afficher uniquement les recettes en utilisant le shortcode %s." + +#: includes/class.cooked-settings.php:330 +#, php-format +msgid "Disable %s Tags" +msgstr "Désactiver les mots-clés %s" + +#: includes/class.cooked-settings.php:330 +msgid "Prevents duplicates when tags already exist." +msgstr "Empêcher les doublons lorsque les mots-clés existent déjà." + +#: includes/class.cooked-settings.php:331 +msgid "Disable \"Servings Switcher\"" +msgstr "Désactiver le \"Sélecteur de parts\"" -#: includes/class.cooked-recipe-meta.php:321 -msgid "Reset" -msgstr "Réinitialiser" +#: includes/class.cooked-settings.php:331 +msgid "Removes the servings dropdown on recipes." +msgstr "" +"Supprimer la liste déroulante indiquant le nombre de parts sur les recettes." + +#: includes/class.cooked-settings.php:332 +msgid "Disable Recipe Schema Output" +msgstr "Désactiver la sortie de schéma de recette" -#: includes/class.cooked-recipe-meta.php:321 +#: includes/class.cooked-settings.php:332 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." +"You should only do this if you're using something else to output schema " +"information." msgstr "" -"En utilisant les codes abrégés de recette intégrés dans l’onglet \"Shortcodes" -"\", vous pouvez créer ci-dessous une mise en page pour votre recette. " -"Utilisez ensuite le bouton \"Enregistrer comme valeur par défaut\" pour " -"enregistrer ce nouveau modèle." +"Vous ne devriez le faire que si vous utilisez autre chose pour produire des " +"informations sur les schémas." -#: includes/class.cooked-recipe-meta.php:329 -msgid "Recipe Excerpt" -msgstr "Extrait de la recette" +#: includes/class.cooked-settings.php:333 +#, fuzzy +msgid "Disable Recipe Archive Page" +msgstr "Désactiver la sortie de schéma de recette" -#: includes/class.cooked-recipe-meta.php:329 -msgid "" -"The excerpt is used on recipe listing templates, where the full recipe " -"should not be displayed." +#: includes/class.cooked-settings.php:333 +msgid "Prevents the recipe archive from being displayed." msgstr "" -"L’extrait est utilisé sur les modèles de liste de recettes, où la recette " -"complète ne doit pas être affichée." -#: includes/class.cooked-recipe-meta.php:334 -msgid "SEO Description" -msgstr "Description de la minuterie" +#: includes/class.cooked-settings.php:340 +msgid "Design" +msgstr "Design" + +#: includes/class.cooked-settings.php:344 +msgid "Dark Mode" +msgstr "Mode sombre" -#: includes/class.cooked-recipe-meta.php:334 +#: includes/class.cooked-settings.php:345 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." +"If your site has a dark background, you should enable \"Dark Mode\" so that " +"Cooked can match this style." msgstr "" -"Cette description est utilisée à des fins de SEO et est facultative. Par " -"défaut, Cooked utilisera l'extrait de recette ci-dessus si disponible ou le " -"titre de recette si ce n'est pas le cas." +"Si votre site a un fond arrière-plan sombre, vous devez activer le \"Mode " +"sombre\" afin que Cooked puisse s'adapter à votre style." -#: includes/class.cooked-recipe-meta.php:344 -#: includes/class.cooked-settings.php:140 -msgid "Difficulty Level" -msgstr "Niveau de difficulté" +#: includes/class.cooked-settings.php:351 +msgid "Enable \"Dark Mode\"" +msgstr "Activer \"Mode sombre\"" -#: includes/class.cooked-recipe-meta.php:353 -#: includes/class.cooked-recipe-meta.php:850 -#: includes/class.cooked-settings.php:142 -#: includes/class.cooked-shortcodes.php:437 -#: includes/class.cooked-shortcodes.php:620 -msgid "Prep Time" -msgstr "Préparation" +#: includes/class.cooked-settings.php:356 +msgid "Author Images" +msgstr "Images de l’auteur" -#: includes/class.cooked-recipe-meta.php:355 -#: includes/class.cooked-recipe-meta.php:360 -#: includes/class.cooked-recipe-meta.php:365 -msgid "minutes" -msgstr "minutes" +#: includes/class.cooked-settings.php:357 +msgid "" +"If you do not want to display the author images (avatars), you can disable " +"them here." +msgstr "" +"Si vous ne voulez pas afficher les images des auteurs (avatars), faites-le " +"ici." -#: includes/class.cooked-recipe-meta.php:358 -#: includes/class.cooked-recipe-meta.php:851 -#: includes/class.cooked-settings.php:143 -#: includes/class.cooked-shortcodes.php:438 -#: includes/class.cooked-shortcodes.php:628 -msgid "Cook Time" -msgstr "Cuisson" +#: includes/class.cooked-settings.php:364 +msgid "Hide Author Images" +msgstr "Masquer l'avatar de l’auteur" -#: includes/class.cooked-recipe-meta.php:363 -#: includes/class.cooked-recipe-meta.php:852 -#: includes/class.cooked-settings.php:144 -#: includes/class.cooked-shortcodes.php:439 -#: includes/class.cooked-shortcodes.php:637 -#: includes/class.cooked-shortcodes.php:643 -msgid "Total Time" -msgstr "Temps total" +#: includes/class.cooked-settings.php:369 +msgid "Main Color" +msgstr "Couleur Principale" -#: includes/class.cooked-recipe-meta.php:377 -msgid "Amount" -msgstr "Quantité" +#: includes/class.cooked-settings.php:370 +msgid "Used on buttons, cooking timer, etc." +msgstr "Utilisée sur les boutons, minuteur, etc.." -#: includes/class.cooked-recipe-meta.php:378 -msgid "Measurement" -msgstr "Unité de mesure" +#: includes/class.cooked-settings.php:376 +msgid "Main Color (on hover)" +msgstr "Couleur Principale (au survol)" -#: includes/class.cooked-recipe-meta.php:379 -msgid "Item" -msgstr "Élément" +#: includes/class.cooked-settings.php:377 +msgid "Used when hovering over buttons." +msgstr "Utilisée lorsque vous passez la souris sur les boutons." -#: includes/class.cooked-recipe-meta.php:416 -#: includes/class.cooked-recipe-meta.php:467 -#: includes/class.cooked-recipe-meta.php:514 -msgid "ex. Eggs, Milk, etc." -msgstr "ex : oeufs, lait, etc." +#: includes/class.cooked-settings.php:383 +msgid "First Responsive Breakpoint" +msgstr "Premier Point de rupture Responsive" -#: includes/class.cooked-recipe-meta.php:430 -#: includes/class.cooked-recipe-meta.php:525 -#: includes/class.cooked-recipe-meta.php:579 -#: includes/class.cooked-recipe-meta.php:636 -msgid "Section Heading" -msgstr "Titre de la section" +#: includes/class.cooked-settings.php:384 +msgid "Set the first responsive breakpoint. Best for large tablets." +msgstr "" +"Définissez le premier point de rupture responsive. Utilisé pour les grandes " +"tablettes." -#: includes/class.cooked-recipe-meta.php:484 -msgid "Add Ingredient" -msgstr "Ajouter un ingrédient" +#: includes/class.cooked-settings.php:390 +msgid "Second Responsive Breakpoint" +msgstr "Second Point de rupture Responsive" -#: includes/class.cooked-recipe-meta.php:485 -#: includes/class.cooked-recipe-meta.php:615 -msgid "Add Section Heading" -msgstr "Ajouter une entête" +#: includes/class.cooked-settings.php:391 +msgid "Set the second responsive breakpoint. Best for small tablets." +msgstr "" +"Définissez le deuxième point de rupture responsive. Utilisé pour les petites " +"tablettes." -#: includes/class.cooked-recipe-meta.php:614 -msgid "Add Direction" -msgstr "Ajouter une étape de la recette" +#: includes/class.cooked-settings.php:397 +msgid "Third Responsive Breakpoint" +msgstr "Troisième Point de rupture Responsive" -#: includes/class.cooked-recipe-meta.php:649 -msgid "Nutrition Information" -msgstr "Informations nutritionnelles" +#: includes/class.cooked-settings.php:398 +msgid "" +"Set the third responsive breakpoint. Best for phones and other small devices." +msgstr "" +"Définissez le troisième point de rupture responsive. Utilisé pour les " +"smartphones." -#: includes/class.cooked-recipe-meta.php:686 -#: includes/class.cooked-shortcodes.php:975 -msgid "Nutrition Facts" -msgstr "Valeurs nutritionnelles" +#: includes/class.cooked-settings.php:406 +msgid "Permalinks" +msgstr "Permaliens" -#: includes/class.cooked-recipe-meta.php:696 -#: includes/class.cooked-shortcodes.php:943 -msgid "Amount Per Serving" -msgstr "Quantité par dose" +#: includes/class.cooked-settings.php:410 +msgid "Recipe Permalink" +msgstr "Permalien de la recette" -#: includes/class.cooked-recipe-meta.php:708 -#: includes/class.cooked-shortcodes.php:953 -msgid "% Daily Value *" -msgstr "% Valeur quotidienne *" +#: includes/class.cooked-settings.php:413 +msgid "recipe-name" +msgstr "nom-de-la-recette" -#: includes/class.cooked-recipe-meta.php:744 -#: includes/class.cooked-shortcodes.php:978 -msgid "" -"Percent Daily Values are based on a 2,000 calorie diet. Your daily value may " -"be higher or lower depending on your calorie needs." -msgstr "" -"* Le pourcentage de la valeur quotidienne est basée sur un régime de 2000 " -"calories. Vos valeurs quotidiennes peuvent être supérieures ou inférieures " -"selon vos besoins caloriques." +#: includes/class.cooked-settings.php:417 +msgid "Recipe Author Permalink" +msgstr "Permalien de l’auteur de la recette" -#: includes/class.cooked-recipe-meta.php:758 -msgid "Recipe Gallery Type" -msgstr "Modifier la galerie de recette" +#: includes/class.cooked-settings.php:420 +msgid "author-name" +msgstr "nom-de-l-auteur" -#: includes/class.cooked-recipe-meta.php:771 -msgid "Choose one..." -msgstr "Choisissez une..." +#: includes/class.cooked-settings.php:424 +msgid "Recipe Category Permalink" +msgstr "Permalien de la catégorie de recette" -#: includes/class.cooked-recipe-meta.php:783 -#, php-format -msgid "%s or %s Video" -msgstr "%s ou %s Vidéo" +#: includes/class.cooked-settings.php:427 +msgid "recipe-category-name" +msgstr "nom-categorie-recette" -#: includes/class.cooked-recipe-meta.php:784 +#: includes/class.cooked-settings.php:438 #, php-format -msgid "" -"If you would like to display a video as the first item in your gallery, you " -"can paste a valid %s or %s URL below." -msgstr "" -"Si vous souhaitez afficher une vidéo en tant que premier élément de votre " -"galerie, vous pouvez coller une URL %s ou %s valide ci-dessous." +msgid "WordPress Default %s" +msgstr "WordPress par défaut %s" -#: includes/class.cooked-recipe-meta.php:788 -msgid "Gallery Items" -msgstr "Éléments de la galerie" +#: includes/class.cooked-settings.php:443 +msgid "Show All (no pagination)" +msgstr "Afficher tout (sans pagination)" -#: includes/class.cooked-recipe-meta.php:819 -msgid "Recipe Information" -msgstr "Informations sur la recette" +#: includes/class.cooked-settings.php:587 +msgid "Begin Migration" +msgstr "Commencez la migration" -#: includes/class.cooked-recipe-meta.php:820 -msgid "This will display the recipe author, cooking times, etc." -msgstr "Cela affichera l’auteur de la recette, les temps de cuisson, etc." +#: includes/class.cooked-roles.php:22 +msgid "Recipe Editor" +msgstr "Éditeur de recette" -#: includes/class.cooked-recipe-meta.php:827 -#: includes/class.cooked-recipe-meta.php:834 -#, php-format -msgid "\"%s\" and \"%s\"" -msgstr "« %s » et « %s »" +#: includes/class.cooked-measurements.php:29 +#: includes/class.cooked-measurements.php:30 +#, fuzzy +msgid "g" +msgstr "g" -#: includes/class.cooked-recipe-meta.php:828 -msgid "" -"This will allow you to include or exclude content from the shortcode output." -msgstr "" -"Cela vous permettra d'inclure ou d'exclure du contenu généré par le " -"shortcode." +#: includes/class.cooked-measurements.php:31 +msgid "gram" +msgstr "gramme" -#: includes/class.cooked-recipe-meta.php:835 -msgid "" -"Used like \"include\", but will position the content to the left or right." -msgstr "" -"Utilisé de la même façon qu'« inclure », mais positionnera le contenu à " -"gauche ou à droite." +#: includes/class.cooked-measurements.php:32 +msgid "grams" +msgstr "grammes" -#: includes/class.cooked-recipe-meta.php:845 -#: includes/class.cooked-recipe-meta.php:891 -#: includes/class.cooked-recipe-meta.php:922 -#: includes/class.cooked-recipe-meta.php:947 -#: includes/class.cooked-recipe-meta.php:971 -#: includes/class.cooked-recipe-meta.php:1031 -#: includes/class.cooked-recipe-meta.php:1064 -#: includes/class.cooked-recipe-meta.php:1105 -msgid "Available Variables" -msgstr "Variables disponibles" +#: includes/class.cooked-measurements.php:36 +#: includes/class.cooked-measurements.php:37 +#, fuzzy +msgid "kg" +msgstr "kg" -#: includes/class.cooked-recipe-meta.php:849 -#: includes/class.cooked-settings.php:138 -#: includes/class.cooked-shortcodes.php:434 -#: includes/class.cooked-shortcodes.php:577 -msgid "Author" -msgstr "Auteur" +#: includes/class.cooked-measurements.php:38 +msgid "kilogram" +msgstr "kilogramme" -#: includes/class.cooked-recipe-meta.php:853 -#: includes/class.cooked-shortcodes.php:435 -#: includes/class.cooked-shortcodes.php:589 -msgid "Difficulty" -msgstr "Difficulté" +#: includes/class.cooked-measurements.php:39 +msgid "kilograms" +msgstr "kilogrammes" -#: includes/class.cooked-recipe-meta.php:854 -msgid "Servings Switcher" -msgstr "Sélecteur de parts" +#: includes/class.cooked-measurements.php:43 +#: includes/class.cooked-measurements.php:44 +msgid "mg" +msgstr "mg" -#: includes/class.cooked-recipe-meta.php:855 -#: includes/class.cooked-settings.php:139 -#: includes/class.cooked-shortcodes.php:663 -#: includes/class.cooked-shortcodes.php:666 -#: includes/class.cooked-taxonomies.php:45 -msgid "Category" -msgstr "Catégorie" +#: includes/class.cooked-measurements.php:45 +msgid "milligram" +msgstr "milligramme" -#: includes/class.cooked-recipe-meta.php:856 -msgid "Print Mode" -msgstr "Imprimer" +#: includes/class.cooked-measurements.php:46 +msgid "milligrams" +msgstr "milligrammes" -#: includes/class.cooked-recipe-meta.php:857 -msgid "Full-Screen Mode" -msgstr "Mode plein écran" +#: includes/class.cooked-measurements.php:50 +#: includes/class.cooked-measurements.php:51 +msgid "oz" +msgstr "oz" -#: includes/class.cooked-recipe-meta.php:877 -msgid "" -"This will display the list of ingredients, added via the \"Ingredients\" tab." -msgstr "" -"Cela affichera la liste des ingrédients, ajoutés via l’onglet " -"« Ingrédients »." +#: includes/class.cooked-measurements.php:52 +msgid "ounce" +msgstr "once" -#: includes/class.cooked-recipe-meta.php:883 -msgid "This will allow you to hide or show the checkboxes:" -msgstr "Cela vous permettra de masquer ou d’afficher les cases à cocher :" +#: includes/class.cooked-measurements.php:53 +msgid "ounces" +msgstr "onces" -#: includes/class.cooked-recipe-meta.php:893 -msgid "Show checkboxes" -msgstr "Afficher les cases à cocher" +#: includes/class.cooked-measurements.php:57 +#: includes/class.cooked-measurements.php:58 +msgid "fl oz" +msgstr "fl oz" -#: includes/class.cooked-recipe-meta.php:894 -msgid "Hide checkboxes" -msgstr "Masquer les cases à cocher" +#: includes/class.cooked-measurements.php:59 +msgid "fluid ounce" +msgstr "fluid ounce" -#: includes/class.cooked-recipe-meta.php:908 -msgid "" -"This will display the list of directions, added via the \"Directions\" tab." -msgstr "" -"Cela affichera la liste des étapes de la recette, ajoutée via l’onglet " -"« Etapes de la recette »." +#: includes/class.cooked-measurements.php:60 +msgid "fluid ounces" +msgstr "fluid ounces" -#: includes/class.cooked-recipe-meta.php:914 -msgid "This will allow you to hide or show the numbers:" -msgstr "" -"Cela vous permettra de masquer ou d’afficher la numérotaion des étapes :" +#: includes/class.cooked-measurements.php:64 +#: includes/class.cooked-measurements.php:66 +msgid "cup" +msgstr "tasse" + +#: includes/class.cooked-measurements.php:65 +#: includes/class.cooked-measurements.php:67 +msgid "cups" +msgstr "tasses" + +#: includes/class.cooked-measurements.php:71 +#: includes/class.cooked-measurements.php:72 +msgid "tsp" +msgstr "c-à-c" -#: includes/class.cooked-recipe-meta.php:924 -msgid "Show numbers" -msgstr "Afficher la numérotation" +#: includes/class.cooked-measurements.php:73 +msgid "teaspoon" +msgstr "cuillère à café (5ml)" -#: includes/class.cooked-recipe-meta.php:925 -msgid "Hide numbers" -msgstr "Masquer la numérotation" +#: includes/class.cooked-measurements.php:74 +msgid "teaspoons" +msgstr "cuillères à café" -#: includes/class.cooked-recipe-meta.php:938 -msgid "Featured Image" -msgstr "Image mise en avant" +#: includes/class.cooked-measurements.php:78 +#: includes/class.cooked-measurements.php:79 +msgid "tbsp" +msgstr "c-à-s" -#: includes/class.cooked-recipe-meta.php:939 -msgid "This will display the featured image, if one is set." -msgstr "Cela affichera l’image sélectionnée, si elle est définie." +#: includes/class.cooked-measurements.php:80 +msgid "tablespoon" +msgstr "cuillère à soupe (15ml)" -#: includes/class.cooked-recipe-meta.php:949 -#: includes/class.cooked-recipe-meta.php:973 -#: includes/class.cooked-recipe-meta.php:1066 -msgid "None" -msgstr "Aucun" +#: includes/class.cooked-measurements.php:81 +msgid "tablespoons" +msgstr "cuillères à soupe" -#: includes/class.cooked-recipe-meta.php:962 -msgid "Nutrition Label" -msgstr "Étiquette nutritionnelle" +#: includes/class.cooked-measurements.php:85 +#: includes/class.cooked-measurements.php:86 +#, fuzzy +msgid "dl" +msgstr "l" -#: includes/class.cooked-recipe-meta.php:963 -msgid "This will display the Nutrition Facts label, if data is present." -msgstr "" -"Cela affichera l'étiquette de la valeur nutritive, si des données sont " -"présentes." +#: includes/class.cooked-measurements.php:87 +#, fuzzy +msgid "deciliter" +msgstr "litre" -#: includes/class.cooked-recipe-meta.php:989 -msgid "" -"This will display the gallery, if one is set or created from the \"Gallery\" " -"tab." -msgstr "" -"Cela affichera la galerie, si elle est définie ou créée à partir de l’onglet " -"« Galerie »." +#: includes/class.cooked-measurements.php:88 +#, fuzzy +msgid "deciliters" +msgstr "litres" -#: includes/class.cooked-recipe-meta.php:997 -msgid "Set the width of the gallery." -msgstr "Définissez la largeur de la galerie." +#: includes/class.cooked-measurements.php:92 +#: includes/class.cooked-measurements.php:93 +msgid "ml" +msgstr "ml" -#: includes/class.cooked-recipe-meta.php:1004 -msgid "Set the image size ratio." -msgstr "Définissez le rapport de taille d’image." +#: includes/class.cooked-measurements.php:94 +msgid "milliliter" +msgstr "millilitre" -#: includes/class.cooked-recipe-meta.php:1014 -msgid "Set the navigation style." -msgstr "Défissez le style de navigation." +#: includes/class.cooked-measurements.php:95 +msgid "milliliters" +msgstr "millilitres" -#: includes/class.cooked-recipe-meta.php:1021 -msgid "Enable or disable \"Full-Screen\" mode." -msgstr "Activer ou désactiver le mode « Plein écran »." +#: includes/class.cooked-measurements.php:99 +#: includes/class.cooked-measurements.php:100 +msgid "l" +msgstr "l" -#: includes/class.cooked-recipe-meta.php:1034 -#, php-format -msgid "ex: \"%s\" or \"%s\"" -msgstr "ex : « %s » ou « %s »" +#: includes/class.cooked-measurements.php:101 +msgid "liter" +msgstr "litre" -#: includes/class.cooked-recipe-meta.php:1036 -#, php-format -msgid "ex: \"%s\"" -msgstr "ex : « %s »" +#: includes/class.cooked-measurements.php:102 +msgid "liters" +msgstr "litres" -#: includes/class.cooked-recipe-meta.php:1038 -#, php-format -msgid "\"%s\", \"%s\", or \"%s\"" -msgstr "« %s », « %s », ou « %s »" +#: includes/class.cooked-measurements.php:106 +#: includes/class.cooked-measurements.php:108 +msgid "stick" +msgstr "bâton" -#: includes/class.cooked-recipe-meta.php:1040 -#, php-format -msgid "\"%s\" or \"%s\"" -msgstr "« %s » ou « %s »" +#: includes/class.cooked-measurements.php:107 +#: includes/class.cooked-measurements.php:109 +msgid "sticks" +msgstr "bâtons" -#: includes/class.cooked-recipe-meta.php:1056 -msgid "" -"This will display the excerpt, if one is available from the \"Layout & " -"Content\" tab." -msgstr "" -"Cela affichera l’extrait, s’il en existe un dans l’onglet « Mise en page et " -"contenu »." +#: includes/class.cooked-measurements.php:113 +msgid "lb" +msgstr "lb" -#: includes/class.cooked-recipe-meta.php:1080 -msgid "This will display a special link to start a cooking timer." -msgstr "Cela affichera un lien spécial pour démarrer une minuterie de cuisson." +#: includes/class.cooked-measurements.php:114 +msgid "lbs" +msgstr "lbs" -#: includes/class.cooked-recipe-meta.php:1087 -#, php-format -msgid "\"%s\", \"%s\" and \"%s\"" -msgstr "« %s », « %s » et « %s »" +#: includes/class.cooked-measurements.php:115 +msgid "pound" +msgstr "livre" -#: includes/class.cooked-recipe-meta.php:1088 -msgid "Use just one or a combination of all three to set the timer length" -msgstr "" -"Utilisez un seul ou une combinaison des trois pour régler la longueur de la " -"minuterie" +#: includes/class.cooked-measurements.php:116 +msgid "pounds" +msgstr "livres" -#: includes/class.cooked-recipe-meta.php:1095 -msgid "Add a short description for this timer, if applicable." -msgstr "Ajoutez une courte description pour cette minuterie, le cas échéant." +#: includes/class.cooked-measurements.php:120 +#: includes/class.cooked-measurements.php:122 +msgid "dash" +msgstr "pincée" -#: includes/class.cooked-recipe-meta.php:1107 -msgid "Time in seconds" -msgstr "Temps en secondes" +#: includes/class.cooked-measurements.php:121 +#: includes/class.cooked-measurements.php:123 +msgid "dashes" +msgstr "pincées" -#: includes/class.cooked-recipe-meta.php:1108 -msgid "Time in minutes" -msgstr "Temps en minutes" +#: includes/class.cooked-measurements.php:127 +#: includes/class.cooked-measurements.php:129 +msgid "drop" +msgstr "goutte" -#: includes/class.cooked-recipe-meta.php:1109 -msgid "Time in hours" -msgstr "Temps en heures" +#: includes/class.cooked-measurements.php:128 +#: includes/class.cooked-measurements.php:130 +msgid "drops" +msgstr "gouttes" -#: includes/class.cooked-recipe-meta.php:1110 -msgid "Timer Description" -msgstr "Description de la minuterie" +#: includes/class.cooked-measurements.php:134 +msgid "gal" +msgstr "gal" -#: includes/class.cooked-recipes.php:265 includes/class.cooked-recipes.php:319 -#: templates/front/recipe-single.php:46 -#, php-format -msgid "By %s" -msgstr "Par %s" +#: includes/class.cooked-measurements.php:135 +msgid "gals" +msgstr "gals" -#: includes/class.cooked-recipes.php:627 -msgid "Beginner" -msgstr "Facile" +#: includes/class.cooked-measurements.php:136 +msgid "gallon" +msgstr "gallon" -#: includes/class.cooked-recipes.php:628 -msgid "Intermediate" -msgstr "Moyen" +#: includes/class.cooked-measurements.php:137 +msgid "gallons" +msgstr "gallons" -#: includes/class.cooked-recipes.php:629 -msgid "Advanced" -msgstr "Avancé" +#: includes/class.cooked-measurements.php:141 +#: includes/class.cooked-measurements.php:143 +msgid "pinch" +msgstr "pinch" -#: includes/class.cooked-recipes.php:659 -msgid "Cooked Gallery" -msgstr "Galerie de recette" +#: includes/class.cooked-measurements.php:142 +#: includes/class.cooked-measurements.php:144 +msgid "pinches" +msgstr "pinches" -#: includes/class.cooked-recipes.php:663 -msgid "Envira Gallery" -msgstr "Galerie Envira" +#: includes/class.cooked-measurements.php:148 +#: includes/class.cooked-measurements.php:149 +msgid "pt" +msgstr "pt" -#: includes/class.cooked-recipes.php:667 -msgid "Soliloquy Slider" -msgstr "Diaporama Soliloquy" +#: includes/class.cooked-measurements.php:150 +msgid "pint" +msgstr "pint" -#: includes/class.cooked-recipes.php:671 -msgid "Slider Revolution" -msgstr "Slider Revolution" +#: includes/class.cooked-measurements.php:151 +msgid "pints" +msgstr "pints" -#: includes/class.cooked-recipes.php:747 -#, php-format -msgid "Quarter (%s Serving)" -msgid_plural "Quarter (%s Servings)" -msgstr[0] "Quart (%s portion)" -msgstr[1] "Quart (%s portions)" +#: includes/class.cooked-measurements.php:155 +msgid "qt" +msgstr "qt" -#: includes/class.cooked-recipes.php:748 -#, php-format -msgid "Half (%s Serving)" -msgid_plural "Half (%s Servings)" -msgstr[0] "Demi (%s portion)" -msgstr[1] "Demi (%s portions)" +#: includes/class.cooked-measurements.php:156 +msgid "qts" +msgstr "qts" -#: includes/class.cooked-recipes.php:749 -#, php-format -msgid "Default (%s Serving)" -msgid_plural "Default (%s Servings)" -msgstr[0] "Par défaut (%s portion)" -msgstr[1] "Par défaut (%s portions)" +#: includes/class.cooked-measurements.php:157 +msgid "quart" +msgstr "quart" -#: includes/class.cooked-recipes.php:750 -#, php-format -msgid "Double (%s Servings)" -msgstr "Double (%s portions)" +#: includes/class.cooked-measurements.php:158 +msgid "quarts" +msgstr "quarts" -#: includes/class.cooked-recipes.php:751 -#, php-format -msgid "Triple (%s Servings)" -msgstr "Triple (%s portions)" +#: includes/class.cooked-measurements.php:162 +#: includes/class.cooked-measurements.php:163 +msgid "drizzle" +msgstr "" -#: includes/class.cooked-recipes.php:758 -#: includes/class.cooked-shortcodes.php:436 -msgid "Yields" -msgstr "Portions" +#: includes/class.cooked-measurements.php:164 +#: includes/class.cooked-measurements.php:165 +msgid "Drizzle" +msgstr "" -#: includes/class.cooked-recipes.php:760 includes/class.cooked-recipes.php:767 -#, php-format -msgid "%s Serving" -msgid_plural "%s Servings" -msgstr[0] "%s portion" -msgstr[1] "%s portions" +#: includes/class.cooked-measurements.php:169 +#: includes/class.cooked-measurements.php:171 +msgid "clove" +msgstr "" -#: includes/class.cooked-recipes.php:866 -#, php-format -msgid "Step %d" -msgstr "Étape %d" +#: includes/class.cooked-measurements.php:170 +#: includes/class.cooked-measurements.php:172 +msgid "cloves" +msgstr "" -#: includes/class.cooked-recipes.php:917 -msgid "Browse" -msgstr "Parcourir" +#: includes/class.cooked-measurements.php:176 +#: includes/class.cooked-measurements.php:178 +msgid "jar" +msgstr "" -#: includes/class.cooked-recipes.php:931 includes/class.cooked-settings.php:100 -msgid "No categories" -msgstr "Aucune catégories" +#: includes/class.cooked-measurements.php:177 +#: includes/class.cooked-measurements.php:179 +msgid "jars" +msgstr "" -#: includes/class.cooked-recipes.php:934 includes/class.cooked-settings.php:129 -#: includes/class.cooked-taxonomies.php:44 -#: includes/class.cooked-taxonomies.php:54 -msgid "Categories" -msgstr "Catégories" +#: includes/class.cooked-measurements.php:183 +#: includes/class.cooked-measurements.php:185 +msgid "can" +msgstr "" -#: includes/class.cooked-recipes.php:936 -#: includes/class.cooked-taxonomies.php:47 -#: includes/widgets/recipe-categories.php:48 -msgid "All Categories" -msgstr "Toutes les catégories" +#: includes/class.cooked-measurements.php:184 +#: includes/class.cooked-measurements.php:186 +msgid "cans" +msgstr "" -#: includes/class.cooked-recipes.php:999 -msgid "Find a recipe..." -msgstr "Trouvez une recette..." +#: includes/class.cooked-measurements.php:206 +#, fuzzy +msgid "Serving size" +msgstr "Part" -#: includes/class.cooked-recipes.php:1019 -msgid "Newest first" -msgstr "Plus récentes en premier" +#: includes/class.cooked-measurements.php:213 +msgid "Calories" +msgstr "Calories" -#: includes/class.cooked-recipes.php:1023 -msgid "Oldest first" -msgstr "Les plus anciennes en premier" +#: includes/class.cooked-measurements.php:220 +msgid "Total Fat" +msgstr "Graisse totale" -#: includes/class.cooked-recipes.php:1027 -msgid "Alphabetical (A-Z)" -msgstr "Ordre Alphabétique (A-Z)" +#: includes/class.cooked-measurements.php:226 +msgid "Saturated Fat" +msgstr "Acides gras saturés" -#: includes/class.cooked-recipes.php:1031 -msgid "Alphabetical (Z-A)" -msgstr "Ordre Alphabétique (Z-A)" +#: includes/class.cooked-measurements.php:232 +msgid "Trans Fat" +msgstr "Acides gras insaturés" -#: includes/class.cooked-roles.php:40 -msgid "Recipe Editor" -msgstr "Éditeur de recette" +#: includes/class.cooked-measurements.php:233 +#, fuzzy +msgid "Trans Fat" +msgstr "Acides gras insaturés" -#: includes/class.cooked-settings.php:99 -msgid "Choose a page..." -msgstr "Choisir une page…" +#: includes/class.cooked-measurements.php:238 +#, fuzzy +msgid "Monounsaturated Fat" +msgstr "Acides gras saturés" -#: includes/class.cooked-settings.php:99 -msgid "No pages" -msgstr "Aucune page" +#: includes/class.cooked-measurements.php:243 +#, fuzzy +msgid "Polyunsaturated Fat" +msgstr "Acides gras saturés" -#: includes/class.cooked-settings.php:100 -msgid "No default" -msgstr "Pas de choix par défaut" +#: includes/class.cooked-measurements.php:250 +msgid "Cholesterol" +msgstr "Cholesterol" -#: includes/class.cooked-settings.php:106 -msgid "General" -msgstr "Général" +#: includes/class.cooked-measurements.php:256 +msgid "Sodium" +msgstr "Sodium" -#: includes/class.cooked-settings.php:110 -msgid "Browse/Search Recipes Page" -msgstr "Parcourir / Rechercher des pages de recettes" +#: includes/class.cooked-measurements.php:262 +msgid "Total Carbohydrate" +msgstr "Glucides totaux" -#: includes/class.cooked-settings.php:111 -#, php-format -msgid "" -"Create a page with the %s shortcode on it, then choose it from this dropdown." -msgstr "" -"Créez une page avec le shortcode %s, puis sélectionnez-la dans la liste ci-" -"dessous." +#: includes/class.cooked-measurements.php:262 +msgid "Net Carbohydrate" +msgstr "Glucides nets" -#: includes/class.cooked-settings.php:117 -msgid "Recipes Per Page" -msgstr "Nombre de recettes par page" +#: includes/class.cooked-measurements.php:268 +msgid "Dietary Fiber" +msgstr "Fibre alimentaire" -#: includes/class.cooked-settings.php:118 -#, php-format -msgid "" -"Choose the default (set via the %s panel) or choose a different number here." -msgstr "" -"Choisissez la valeur par défaut (définie via le panneau %s) ou indiquez une " -"autre valeur ici." +#: includes/class.cooked-measurements.php:274 +#, fuzzy +msgid "Total Sugars" +msgstr "Glucides totaux" -#: includes/class.cooked-settings.php:118 -msgid "Settings > Reading" -msgstr "Paramètres > Lecture" +#: includes/class.cooked-measurements.php:280 +#, fuzzy +msgid "Added Sugars" +msgstr "Sucre" -#: includes/class.cooked-settings.php:124 -msgid "Recipe Taxonomies" -msgstr "Taxonomies des recettes" +#: includes/class.cooked-measurements.php:288 +msgid "Protein" +msgstr "Protéine" -#: includes/class.cooked-settings.php:125 -msgid "Choose which taxonomies you want to enable for your recipes." -msgstr "" -"Choisissez les taxonomies que vous souhaitez activer pour vos recettes." +#: includes/class.cooked-measurements.php:297 +msgid "Vitamin A" +msgstr "Vitamine A" -#: includes/class.cooked-settings.php:133 -msgid "Global Recipe Toggles" -msgstr "Bascule de la totalité des recettes" +#: includes/class.cooked-measurements.php:303 +msgid "Vitamin C" +msgstr "Vitamine C" -#: includes/class.cooked-settings.php:134 -msgid "" -"You can quickly hide or show different recipe elements (site-wide) with " -"these checkboxes." -msgstr "" -"Vous pouvez masquer ou afficher rapidement différents éléments de recette " -"(sur l’ensemble du site) à l’aide de ces cases à cocher." +#: includes/class.cooked-measurements.php:309 +msgid "Calcium" +msgstr "Calcium" -#: includes/class.cooked-settings.php:149 -msgid "Carbs Format" -msgstr "Format des glucides" +#: includes/class.cooked-measurements.php:315 +msgid "Iron" +msgstr "Fer" -#: includes/class.cooked-settings.php:150 -msgid "You can display carbs as \"Total\" or \"Net\"." -msgstr "Vous pouvez afficher les glucides comme « total » ou « net »." +#: includes/class.cooked-measurements.php:321 +msgid "Potassium" +msgstr "Potassium" -#: includes/class.cooked-settings.php:154 -msgid "Total Carbs" -msgstr "Glucides totaux" +#: includes/class.cooked-measurements.php:327 +msgid "Vitamin D" +msgstr "Vitamine D" -#: includes/class.cooked-settings.php:155 -msgid "Net Carbs" -msgstr "Glucides nets" +#: includes/class.cooked-measurements.php:333 +msgid "Vitamin E" +msgstr "Vitamine E" -#: includes/class.cooked-settings.php:159 -msgid "Author Name Format" -msgstr "Format du nom d'auteur" +#: includes/class.cooked-measurements.php:339 +msgid "Vitamin K" +msgstr "Vitamine K" -#: includes/class.cooked-settings.php:160 -msgid "You can show the full author's name or just a part of it." -msgstr "" -"Vous pouvez afficher le nom complet de l’auteur ou seulement une partie de " -"celui-ci." +#: includes/class.cooked-measurements.php:345 +msgid "Thiamin" +msgstr "Vitamine B1 (Thiamin)" -#: includes/class.cooked-settings.php:164 -msgid "Full name" -msgstr "Nom complet" +#: includes/class.cooked-measurements.php:351 +msgid "Riboflavin" +msgstr "Vitamine B2 (Riboflavine)" -#: includes/class.cooked-settings.php:165 -msgid "Full first name w/last name initial" -msgstr "Prénom complet / 1ère lettre du nom de famille" +#: includes/class.cooked-measurements.php:357 +msgid "Niacin" +msgstr "Vitamine B3 (Niacine)" -#: includes/class.cooked-settings.php:166 -msgid "First name initial w/full last name" -msgstr "1ère lettre du prénom / nom complet" +#: includes/class.cooked-measurements.php:363 +msgid "Vitamin B6" +msgstr "Vitamine B6" -#: includes/class.cooked-settings.php:167 -msgid "First name only" -msgstr "Prénom uniquement" +#: includes/class.cooked-measurements.php:369 +msgid "Folate" +msgstr "Vitamine B9 (Folate)" -#: includes/class.cooked-settings.php:171 -msgid "Author Links" -msgstr "Liens vers l'auteur" +#: includes/class.cooked-measurements.php:375 +msgid "Vitamin B12" +msgstr "Vitamine B12" -#: includes/class.cooked-settings.php:172 -msgid "" -"If you do not want the author names to link to the author recipe listings, " -"you can disable them here." -msgstr "" -"Si vous ne souhaitez pas que les noms des auteurs soient reliés à leurs " -"recettes, vous pouvez les désactiver ici." +#: includes/class.cooked-measurements.php:381 +msgid "Biotin" +msgstr "Vitamine B8 (Biotine)" -#: includes/class.cooked-settings.php:177 -msgid "Disable Author Links" -msgstr "Désactiver les liens vers l’auteur" +#: includes/class.cooked-measurements.php:387 +msgid "Pantothenic Acid" +msgstr "Vitamine B5 (Acide pantothénique)" -#: includes/class.cooked-settings.php:181 -msgid "Default Category" -msgstr "Catégorie par Défaut" +#: includes/class.cooked-measurements.php:393 +msgid "Phosphorus" +msgstr "Phosphore" -#: includes/class.cooked-settings.php:182 -#, php-format -msgid "" -"Optionally set the default recipe category for your %s shortcode display." -msgstr "" -"Si vous le voulez, vous pouvez indiquer une catégorie de recettes qui sera " -"utilisée par défaut avec le shortcode %s." +#: includes/class.cooked-measurements.php:399 +msgid "Iodine" +msgstr "Iode" -#: includes/class.cooked-settings.php:188 -msgid "Default Sort Order" -msgstr "Classement par défaut" +#: includes/class.cooked-measurements.php:405 +msgid "Magnesium" +msgstr "Magnésium" -#: includes/class.cooked-settings.php:189 -#, php-format -msgid "Set the default sort order for your %s shortcode display." -msgstr "" -"Indiquez l'ordre de tri qui sera utilisé par défaut avec avec le shortcode " -"%s." +#: includes/class.cooked-measurements.php:411 +msgid "Zinc" +msgstr "Zinc" -#: includes/class.cooked-settings.php:193 -msgid "Newest First" -msgstr "La plus récente en premier" +#: includes/class.cooked-measurements.php:417 +msgid "Selenium" +msgstr "Sélénium" -#: includes/class.cooked-settings.php:194 -msgid "Oldest First" -msgstr "La plus ancienne en premier" +#: includes/class.cooked-measurements.php:423 +msgid "Copper" +msgstr "Cuivre" -#: includes/class.cooked-settings.php:195 -msgid "Alphabetical" -msgstr "Alphabétique" +#: includes/class.cooked-measurements.php:429 +msgid "Manganese" +msgstr "Manganèse" -#: includes/class.cooked-settings.php:196 -msgid "Alphabetical (reversed)" -msgstr "Alphabétique (inversé)" +#: includes/class.cooked-measurements.php:435 +msgid "Chromium" +msgstr "Chromium" -#: includes/class.cooked-settings.php:200 -msgid "Advanced Settings" -msgstr "Paramètres Avancés" +#: includes/class.cooked-measurements.php:441 +msgid "Molybdenum" +msgstr "Molybdène" -#: includes/class.cooked-settings.php:207 -msgid "Disable Public Recipes" -msgstr "Désactiver les recettes publiques" +#: includes/class.cooked-measurements.php:447 +msgid "Chloride" +msgstr "Chlorure" -#: includes/class.cooked-settings.php:207 +#: includes/class.cooked-measurements.php:703 +#: includes/class.cooked-measurements.php:714 +#: includes/class.cooked-measurements.php:732 #, php-format -msgid "Only show recipes using the %s shortcode." -msgstr "Afficher uniquement les recettes en utilisant le shortcode %s." +msgid "%d min" +msgstr "%d min" -#: includes/class.cooked-settings.php:208 +#: includes/class.cooked-measurements.php:703 +#: includes/class.cooked-measurements.php:714 +#: includes/class.cooked-measurements.php:732 #, php-format -msgid "Disable %s Tags" -msgstr "Désactiver les mots-clés %s" +msgid "%d mins" +msgstr "%d mins" -#: includes/class.cooked-settings.php:208 -msgid "Prevents duplicates when tags already exist." -msgstr "Empêcher les doublons lorsque les mots-clés existent déjà." +#: includes/class.cooked-measurements.php:712 +#: includes/class.cooked-measurements.php:730 +#, php-format +msgid "%d hr" +msgstr "%d h" -#: includes/class.cooked-settings.php:209 -msgid "Disable \"Servings Switcher\"" -msgstr "Désactiver le \"Sélecteur de parts\"" +#: includes/class.cooked-measurements.php:712 +#: includes/class.cooked-measurements.php:730 +#, php-format +msgid "%d hrs" +msgstr "%d h" -#: includes/class.cooked-settings.php:209 -msgid "Removes the servings dropdown on recipes." -msgstr "" -"Supprimer la liste déroulante indiquant le nombre de parts sur les recettes." +#: includes/class.cooked-measurements.php:728 +#, php-format +msgid "%d day" +msgstr "%d jour" -#: includes/class.cooked-settings.php:210 -msgid "Disable Recipe Schema Output" -msgstr "Désactiver la sortie de schéma de recette" +#: includes/class.cooked-measurements.php:728 +#, php-format +msgid "%d days" +msgstr "%d jours" -#: includes/class.cooked-settings.php:210 +#: includes/class.cooked-shortcodes.php:149 +#, php-format msgid "" -"You should only do this if you're using something else to output schema " -"information." +"Public recipes are currently disabled. You can change this at the bottom of " +"the %s page." msgstr "" -"Vous ne devriez le faire que si vous utilisez autre chose pour produire des " -"informations sur les schémas." +"Les recettes publiques sont actuellement désactivées. Vous pouvez le " +"modifier en bas de la page %s." -#: includes/class.cooked-settings.php:216 -msgid "Design" -msgstr "Design" +#: includes/class.cooked-shortcodes.php:297 +msgid "(recipe not found or in draft status)" +msgstr "(recette introuvable ou en statut brouillon)" -#: includes/class.cooked-settings.php:220 -msgid "Dark Mode" -msgstr "Mode sombre" +#: includes/class.cooked-shortcodes.php:447 +#: includes/class.cooked-recipes.php:792 +msgid "Yields" +msgstr "Portions" -#: includes/class.cooked-settings.php:221 -msgid "" -"If your site has a dark background, you should enable \"Dark Mode\" so that " -"Cooked can match this style." -msgstr "" -"Si votre site a un fond arrière-plan sombre, vous devez activer le \"Mode " -"sombre\" afin que Cooked puisse s'adapter à votre style." +#: includes/class.cooked-shortcodes.php:661 +#, fuzzy +msgid "Fullscreen" +msgstr "Mode plein écran" -#: includes/class.cooked-settings.php:225 -msgid "Enable \"Dark Mode\"" -msgstr "Activer \"Mode sombre\"" +#: includes/class.cooked-admin-enqueues.php:137 +msgid "remaining" +msgstr "restant" -#: includes/class.cooked-settings.php:229 -msgid "Author Images" -msgstr "Images de l’auteur" +#: includes/class.cooked-admin-enqueues.php:140 +msgid "Use this Image" +msgstr "Utiliser cette image" + +#: includes/class.cooked-admin-enqueues.php:142 +msgid "Edit Gallery Item" +msgstr "Modifier un élément de la galerie" + +#: includes/class.cooked-admin-enqueues.php:143 +msgid "Update Gallery Item" +msgstr "Mettre à jour l'élément de galerie" + +#: includes/class.cooked-admin-enqueues.php:144 +msgid "Saved" +msgstr "Sauvegarder" + +#: includes/class.cooked-admin-enqueues.php:145 +msgid "Applied" +msgstr "Appliquer" -#: includes/class.cooked-settings.php:230 +#: includes/class.cooked-admin-enqueues.php:146 msgid "" -"If you do not want to display the author images (avatars), you can disable " -"them here." +"Are you sure you want to apply this new template to all of your recipes?" msgstr "" -"Si vous ne voulez pas afficher les images des auteurs (avatars), faites-le " -"ici." - -#: includes/class.cooked-settings.php:235 -msgid "Hide Author Images" -msgstr "Masquer l'avatar de l’auteur" +"Êtes-vous sûr de vouloir appliquer ce nouveau modèle à toutes vos recettes ?" -#: includes/class.cooked-settings.php:239 -msgid "Main Color" -msgstr "Couleur Principale" +#: includes/class.cooked-admin-enqueues.php:147 +msgid "" +"Are you sure you want to reset this recipe template to the Cooked plugin " +"default?" +msgstr "" +"Êtes-vous sûr de vouloir réinitialiser ce modèle de recette par celui du " +"plugin Cooked par défaut ?" -#: includes/class.cooked-settings.php:240 -msgid "Used on buttons, cooking timer, etc." -msgstr "Utilisée sur les boutons, minuteur, etc.." +#: includes/class.cooked-admin-enqueues.php:149 +#, php-format +msgid "Please confirm that you are ready to migrate all %s recipes." +msgstr "Veuillez confirmer que vous êtes prêt à migrer toutes les recettes %s." -#: includes/class.cooked-settings.php:246 -msgid "Main Color (on hover)" -msgstr "Couleur Principale (au survol)" +#: includes/class.cooked-admin-enqueues.php:150 +#, fuzzy +msgid "Please confirm that you are ready to import all recipes." +msgstr "Veuillez confirmer que vous êtes prêt à migrer toutes les recettes %s." -#: includes/class.cooked-settings.php:247 -msgid "Used when hovering over buttons." -msgstr "Utilisée lorsque vous passez la souris sur les boutons." +#: includes/class.cooked-admin-enqueues.php:151 +#, fuzzy +msgid "Are you sure you want to import recipes from this CSV file?" +msgstr "" +"Êtes-vous sûr de vouloir réinitialiser ce modèle de recette par celui du " +"plugin Cooked par défaut ?" -#: includes/class.cooked-settings.php:253 -msgid "First Responsive Breakpoint" -msgstr "Premier Point de rupture Responsive" +#: includes/class.cooked-admin-enqueues.php:152 +msgid "Please select a CSV file." +msgstr "" -#: includes/class.cooked-settings.php:254 -msgid "Set the first responsive breakpoint. Best for large tablets." +#: includes/class.cooked-admin-enqueues.php:153 +msgid "Please select a valid CSV file." msgstr "" -"Définissez le premier point de rupture responsive. Utilisé pour les grandes " -"tablettes." -#: includes/class.cooked-settings.php:260 -msgid "Second Responsive Breakpoint" -msgstr "Second Point de rupture Responsive" +#: includes/class.cooked-admin-enqueues.php:154 +msgid "Uploading..." +msgstr "" -#: includes/class.cooked-settings.php:261 -msgid "Set the second responsive breakpoint. Best for small tablets." +#: includes/class.cooked-admin-enqueues.php:155 +msgid "Processing..." msgstr "" -"Définissez le deuxième point de rupture responsive. Utilisé pour les petites " -"tablettes." -#: includes/class.cooked-settings.php:267 -msgid "Third Responsive Breakpoint" -msgstr "Troisième Point de rupture Responsive" +#: includes/class.cooked-admin-enqueues.php:156 +#, fuzzy +msgid "recipes imported" +msgstr "Modèle de recette" -#: includes/class.cooked-settings.php:268 -msgid "" -"Set the third responsive breakpoint. Best for phones and other small devices." +#: includes/class.cooked-admin-enqueues.php:157 +msgid "Errors:" msgstr "" -"Définissez le troisième point de rupture responsive. Utilisé pour les " -"smartphones." - -#: includes/class.cooked-settings.php:276 -msgid "Permalinks" -msgstr "Permaliens" -#: includes/class.cooked-settings.php:280 -msgid "Recipe Permalink" -msgstr "Permalien de la recette" +#: includes/class.cooked-admin-enqueues.php:158 +msgid "Import failed." +msgstr "" -#: includes/class.cooked-settings.php:283 -msgid "recipe-name" -msgstr "nom-de-la-recette" +#: includes/class.cooked-admin-enqueues.php:159 +msgid "Failed to process CSV file." +msgstr "" -#: includes/class.cooked-settings.php:287 -msgid "Recipe Author Permalink" -msgstr "Permalien de l’auteur de la recette" +#: includes/class.cooked-admin-enqueues.php:160 +msgid "Failed to upload CSV file." +msgstr "" -#: includes/class.cooked-settings.php:290 -msgid "author-name" -msgstr "nom-de-l-auteur" +#: includes/class.cooked-admin-enqueues.php:162 +msgid "Something went wrong" +msgstr "" -#: includes/class.cooked-settings.php:294 -msgid "Recipe Category Permalink" -msgstr "Permalien de la catégorie de recette" +#: includes/class.cooked-admin-enqueues.php:163 +#, fuzzy +msgid "hrs" +msgstr "%d h" -#: includes/class.cooked-settings.php:297 -msgid "recipe-category-name" -msgstr "nom-categorie-recette" +#: includes/class.cooked-admin-enqueues.php:164 +#, fuzzy +msgid "mins" +msgstr "%d mins" -#: includes/class.cooked-settings.php:310 +#: includes/class.cooked-recipes.php:209 #, php-format -msgid "WordPress Default %s" -msgstr "WordPress par défaut %s" - -#: includes/class.cooked-settings.php:315 -msgid "Show All (no pagination)" -msgstr "Afficher tout (sans pagination)" - -#: includes/class.cooked-settings.php:448 -msgid "Begin Migration" -msgstr "Commencez la migration" +msgid " AND ( %s OR %s ) " +msgstr "" -#: includes/class.cooked-settings.php:453 -msgid "reload" -msgstr "recharger" +#: includes/class.cooked-recipes.php:268 includes/class.cooked-recipes.php:322 +#, php-format +msgid "By %s" +msgstr "Par %s" -#: includes/class.cooked-shortcodes.php:109 +#: includes/class.cooked-recipes.php:384 #, php-format -msgid "" -"Public recipes are currently disabled. You can change this at the bottom of " -"the %s page." +msgid "All %s" msgstr "" -"Les recettes publiques sont actuellement désactivées. Vous pouvez le " -"modifier en bas de la page %s." -#: includes/class.cooked-shortcodes.php:276 -msgid "(recipe not found or in draft status)" -msgstr "(recette introuvable ou en statut brouillon)" +#: includes/class.cooked-recipes.php:651 +msgid "Beginner" +msgstr "Facile" -#: includes/class.cooked-taxonomies.php:46 -msgid "Search Categories" -msgstr "Rechercher des catégories" +#: includes/class.cooked-recipes.php:652 +msgid "Intermediate" +msgstr "Moyen" -#: includes/class.cooked-taxonomies.php:48 -#: includes/widgets/recipe-categories.php:45 -msgid "Parent Category" -msgstr "Catégorie parente" +#: includes/class.cooked-recipes.php:653 +msgid "Advanced" +msgstr "Avancé" -#: includes/class.cooked-taxonomies.php:49 -msgid "Parent Category:" -msgstr "Catégorie parente :" +#: includes/class.cooked-recipes.php:679 +msgid "Cooked Gallery" +msgstr "Galerie de recette" -#: includes/class.cooked-taxonomies.php:50 -msgid "Edit Category" -msgstr "Modifier la catégorie" +#: includes/class.cooked-recipes.php:683 +msgid "Envira Gallery" +msgstr "Galerie Envira" -#: includes/class.cooked-taxonomies.php:51 -msgid "Update Category" -msgstr "Mise à jour de la catégorie" +#: includes/class.cooked-recipes.php:687 +msgid "Soliloquy Slider" +msgstr "Diaporama Soliloquy" -#: includes/class.cooked-taxonomies.php:52 -msgid "Add New Category" -msgstr "Ajouter une nouvelle catégorie" +#: includes/class.cooked-recipes.php:691 +msgid "Slider Revolution" +msgstr "Slider Revolution" -#: includes/class.cooked-taxonomies.php:53 -msgid "New Category Name" -msgstr "Nom de la nouvelle catégorie" +#: includes/class.cooked-recipes.php:766 +#, fuzzy, php-format +msgid "Quarter (%s Serving)" +msgstr "Quart (%s portion)" -#: includes/class.cooked-taxonomies.php:55 -msgid "No Categories" -msgstr "Aucune catégorie" +#: includes/class.cooked-recipes.php:769 +#, fuzzy, php-format +msgid "Half (%s Serving)" +msgstr "Demi (%s portion)" + +#: includes/class.cooked-recipes.php:772 +#, fuzzy, php-format +msgid "Default (%s Serving)" +msgstr "Par défaut (%s portion)" -#: includes/class.cooked-taxonomies.php:144 +#: includes/class.cooked-recipes.php:775 #, php-format -msgid "%s Recipe" -msgid_plural "%s Recipes" -msgstr[0] "%s recette" -msgstr[1] "%s recettes" +msgid "Double (%s Servings)" +msgstr "Double (%s portions)" -#: includes/class.cooked-widgets.php:37 -msgid "Edit Recipe(s)..." -msgstr "Éditer recette(s)..." +#: includes/class.cooked-recipes.php:778 +#, php-format +msgid "Triple (%s Servings)" +msgstr "Triple (%s portions)" -#: includes/class.cooked-widgets.php:37 includes/class.cooked-widgets.php:39 -msgid "Choose recipe(s)..." -msgstr "Choisir recette(s)..." +#: includes/class.cooked-recipes.php:796 includes/class.cooked-recipes.php:807 +#, fuzzy, php-format +msgid "%s Serving" +msgstr "%s portion" -#: includes/widgets/nutrition.php:31 includes/widgets/search.php:37 -msgid "Title (optional):" -msgstr "Titre (facultatif) :" +#: includes/class.cooked-recipes.php:904 includes/class.cooked-recipes.php:918 +msgid "or" +msgstr "" -#: includes/widgets/recipe-card.php:83 -#: includes/widgets/recipe-categories.php:40 -#: includes/widgets/recipe-list.php:47 -msgid "Widget Title (optional):" -msgstr "Nom du Widget (facultatif) :" +#: includes/class.cooked-recipes.php:1022 +msgid "Browse" +msgstr "Parcourir" -#: includes/widgets/recipe-card.php:88 -msgid "Recipe:" -msgstr "Recette :" +#: includes/class.cooked-recipes.php:1114 +msgid "Find a recipe..." +msgstr "Trouvez une recette..." -#: includes/widgets/recipe-card.php:97 -msgid "Style:" -msgstr "Style :" +#: includes/class.cooked-recipes.php:1116 +#, fuzzy +msgid "Search" +msgstr "Rechercher des recettes" -#: includes/widgets/recipe-card.php:99 -msgid "Simple" -msgstr "Simple" +#: includes/class.cooked-recipes.php:1129 +msgid "Newest first" +msgstr "Plus récentes en premier" -#: includes/widgets/recipe-card.php:100 -msgid "Simple Centered" -msgstr "Simple centré" +#: includes/class.cooked-recipes.php:1133 +msgid "Oldest first" +msgstr "Les plus anciennes en premier" -#: includes/widgets/recipe-card.php:101 -msgid "Modern" -msgstr "Moderne" +#: includes/class.cooked-recipes.php:1137 +msgid "Alphabetical (A-Z)" +msgstr "Ordre Alphabétique (A-Z)" -#: includes/widgets/recipe-card.php:102 -msgid "Modern Centered" -msgstr "Moderne centré" +#: includes/class.cooked-recipes.php:1141 +msgid "Alphabetical (Z-A)" +msgstr "Ordre Alphabétique (Z-A)" -#: includes/widgets/recipe-card.php:107 includes/widgets/recipe-list.php:82 -msgid "Width:" -msgstr "Largeur :" +#: includes/class.cooked-updates.php:118 +#, php-format +msgid "Cooked: Updated from version %s to %s" +msgstr "" -#: includes/widgets/recipe-card.php:113 includes/widgets/recipe-list.php:88 -msgid "Hide Image" -msgstr "Masquer l'image" +#: includes/class.cooked-updates.php:134 +#, php-format +msgid "Cooked: Error running update method %s: %s" +msgstr "" -#: includes/widgets/recipe-card.php:118 -msgid "Hide Title" -msgstr "Masquer le titre" +#: includes/class.cooked-updates.php:248 +#, php-format +msgid "" +"Cooked: Fixed line endings in %d recipes for WordPress exporter/importer " +"compatibility." +msgstr "" -#: includes/widgets/recipe-card.php:123 includes/widgets/recipe-list.php:93 -msgid "Hide Author" -msgstr "Masquer l'auteur" +#: includes/class.cooked-migration.php:47 +#, fuzzy, php-format +msgid "" +"There is %1$s recipe that should be migrated from %2$s to take advantage of " +"new features and reliability." +msgstr "" +"Il y a %s recette qui devrait être migrée depuis %s pour tirer parti des " +"nouvelles fonctionnalités et de la fiabilité." -#: includes/widgets/recipe-card.php:128 -msgid "Hide Excerpt" -msgstr "Masquer l'extrait" +#: includes/class.cooked-migration.php:49 +msgid "" +"Please click the button below to migrate these recipes. Here is what will " +"happen to your recipes:" +msgstr "" +"Veuillez cliquer sur le bouton ci-dessous pour migrer ces recettes. Voici ce " +"qui va arriver à vos recettes :" -#: includes/widgets/recipe-categories.php:58 -msgid "Hide Empty Categories" -msgstr "Masquer les catégories vides" +#: includes/class.cooked-migration.php:51 +msgid "NO DATA LOSS, all fields will be remapped." +msgstr "AUCUNE PERTE DE DONNÉES, tous les champs seront réaffectés." -#: includes/widgets/recipe-list.php:52 -msgid "Sorted by:" -msgstr "Trier par :" +#: includes/class.cooked-migration.php:52 +msgid "Remapped fields will greatly speed up recipe loading times." +msgstr "" +"Les champs réaffectés vont grandement accélérer les temps de chargement des " +"recettes." -#: includes/widgets/recipe-list.php:54 -msgid "Most Recent" -msgstr "Plus récents" +#: includes/class.cooked-migration.php:53 +msgid "" +"If recipe excerpt exists, the short description will be moved to the top of " +"the recipe template." +msgstr "" +"Si l'extrait de recette existe, la description courte sera déplacée vers le " +"haut du modèle de recette." -#: includes/widgets/recipe-list.php:55 -msgid "Choose Recipes" -msgstr "Choisir une recette(s)" +#: includes/class.cooked-migration.php:54 +msgid "" +"If no recipe excerpt exists, the short description will be used instead." +msgstr "" +"Si aucun extrait de recette n'existe, la description courte sera utilisée à " +"la place." -#: includes/widgets/recipe-list.php:61 -msgid "Show:" -msgstr "Afficher :" +#: includes/class.cooked-migration.php:55 +msgid "Version number will be applied to each recipe." +msgstr "Le numéro de version sera appliqué à chaque recette." -#: includes/widgets/recipe-list.php:72 -msgid "Recipes:" -msgstr "Recettes :" +#: includes/class.cooked-migration.php:65 +msgid "Migration" +msgstr "Migration" -#: includes/widgets/search.php:42 -msgid "Size:" -msgstr "Taille :" +#: includes/class.cooked-migration.php:90 +#, fuzzy, php-format +msgid "" +"There is %1$s recipe that is from an older version of Cooked. Please %2$s to " +"migrate this recipe." +msgstr "" +"Il y a %s recette qui provient d'une ancienne version de Cooked. S'il vous " +"plaît %s pour migrer cette recette." -#: includes/widgets/search.php:44 -msgid "Compact" -msgstr "Compact" +#: includes/class.cooked-migration.php:90 +msgid "click here" +msgstr "cliquez ici" -#: includes/widgets/search.php:45 -msgid "Wide" -msgstr "Large" +#~ msgid "New" +#~ msgstr "Nouveau" -#: includes/widgets/search.php:51 -msgid "Hide \"Browse\" dropdown" -msgstr "Masquer \"Parcourir\" la liste déroulante" +#~ msgid "Tweak" +#~ msgstr "Finaliser" -#: includes/widgets/search.php:56 -msgid "Hide \"Sorting\" dropdown" -msgstr "Masquer \"Tri\" du menu déroulant" +#~ msgid "Fixed" +#~ msgstr "Fixer" + +#~ msgctxt "Grams Abbreviation (Plural)" +#~ msgid "g" +#~ msgstr "g" + +#~ msgctxt "Kilograms Abbreviation (Plural)" +#~ msgid "kg" +#~ msgstr "kg" + +#~ msgid "Calories from Fat" +#~ msgstr "Calories provenant des lipides" + +#~ msgid "" +#~ "Percent Daily Values are based on a 2,000 calorie diet. Your daily value " +#~ "may be higher or lower depending on your calorie needs." +#~ msgstr "" +#~ "* Le pourcentage de la valeur quotidienne est basée sur un régime de 2000 " +#~ "calories. Vos valeurs quotidiennes peuvent être supérieures ou " +#~ "inférieures selon vos besoins caloriques." -#: templates/admin/pro.php:8 #, php-format -msgid "Ready for %s?" -msgstr "Prêt pour %s ?" +#~ msgid "Ready for %s?" +#~ msgstr "Prêt pour %s ?" -#: templates/admin/pro.php:9 #, php-format -msgid "" -"The %s upgrade adds loads of new features like ratings, favorites, user " -"profiles and more. Check out the list below for all of the details." -msgstr "" -"La mise à niveau de %s ajoute de nombreuses nouvelles fonctionnalités telles " -"que les classements, les favoris, les profils utilisateur et plus encore. " -"Consultez la liste ci-dessous pour tous les détails." +#~ msgid "" +#~ "The %s upgrade adds loads of new features like ratings, favorites, user " +#~ "profiles and more. Check out the list below for all of the details." +#~ msgstr "" +#~ "La mise à niveau de %s ajoute de nombreuses nouvelles fonctionnalités " +#~ "telles que les classements, les favoris, les profils utilisateur et plus " +#~ "encore. Consultez la liste ci-dessous pour tous les détails." -#: templates/admin/pro.php:17 -msgid "Premium Support" -msgstr "Assistance Premium" +#~ msgid "Premium Support" +#~ msgstr "Assistance Premium" -#: templates/admin/pro.php:18 -msgid "User Profiles" -msgstr "Profils utilisateurs" +#~ msgid "User Profiles" +#~ msgstr "Profils utilisateurs" -#: templates/admin/pro.php:19 -msgid "User Ratings" -msgstr "Évaluations du visiteur" +#~ msgid "User Ratings" +#~ msgstr "Évaluations du visiteur" -#: templates/admin/pro.php:20 -msgid "User Favorites" -msgstr "Recettes favorites" +#~ msgid "User Favorites" +#~ msgstr "Recettes favorites" -#: templates/admin/pro.php:21 -msgid "Ingredient Links" -msgstr "Liens vers un ingrédient" +#~ msgid "Ingredient Links" +#~ msgstr "Liens vers un ingrédient" -#: templates/admin/pro.php:24 -msgid "Social Sharing" -msgstr "Réseaux sociaux" +#~ msgid "Social Sharing" +#~ msgstr "Réseaux sociaux" -#: templates/admin/pro.php:25 -msgid "Recipe Submissions" -msgstr "Proposition de recettes" +#~ msgid "Recipe Submissions" +#~ msgstr "Proposition de recettes" -#: templates/admin/pro.php:26 -msgid "Modern Grid Layout" -msgstr "Disposition en grille moderne" +#~ msgid "Modern Grid Layout" +#~ msgstr "Disposition en grille moderne" -#: templates/admin/pro.php:27 -msgid "Full-Width Layout" -msgstr "Affichage pleine largeur" +#~ msgid "Full-Width Layout" +#~ msgstr "Affichage pleine largeur" -#: templates/admin/pro.php:28 -msgid "Pagination Options" -msgstr "Pagination numérotée" +#~ msgid "Pagination Options" +#~ msgstr "Pagination numérotée" -#: templates/admin/pro.php:31 -msgid "Compact List Layout" -msgstr "Affichage en liste compacte" +#~ msgid "Compact List Layout" +#~ msgstr "Affichage en liste compacte" -#: templates/admin/pro.php:32 -msgid "Fitness Layout" -msgstr "Mise en forme style Fitness" +#~ msgid "Fitness Layout" +#~ msgstr "Mise en forme style Fitness" -#: templates/admin/pro.php:33 -msgid "Cuisines" -msgstr "Styles de cuisine" +#~ msgid "Cuisines" +#~ msgstr "Styles de cuisine" -#: templates/admin/pro.php:34 -msgid "Cooking Methods" -msgstr "Modes de cuisson" +#~ msgid "Cooking Methods" +#~ msgstr "Modes de cuisson" -#: templates/admin/pro.php:35 -msgid "Tags" -msgstr "Mots-clés" +#~ msgid "Tags" +#~ msgstr "Mots-clés" -#: templates/admin/pro.php:39 #, php-format -msgid "Get %s" -msgstr "Obtenir %s" +#~ msgid "Get %s" +#~ msgstr "Obtenir %s" -#: templates/admin/pro.php:40 #, php-format -msgid "Use coupon code %s for %s off!" -msgstr "Utilisez le code promo %s pour %s de réduction !" +#~ msgid "Use coupon code %s for %s off!" +#~ msgstr "Utilisez le code promo %s pour %s de réduction !" -#: templates/admin/settings.php:16 -msgid "Update Settings" -msgstr "Mettre à jour les paramètres" +#~ msgid "Update Settings" +#~ msgstr "Mettre à jour les paramètres" -#: templates/admin/settings.php:20 templates/admin/welcome.php:18 -msgid "Cooked Settings" -msgstr "Configuration de Cooked" +#~ msgid "Cooked Settings" +#~ msgstr "Configuration de Cooked" -#: templates/admin/welcome.php:8 #, php-format -msgid "Thanks for using %s!" -msgstr "Merci d'utiliser %s !" +#~ msgid "Thanks for using %s!" +#~ msgstr "Merci d'utiliser %s !" -#: templates/admin/welcome.php:9 #, php-format -msgid "" -"If this is your first time using %s, head over to the %s page for some " -"initial configuration. You can also check out the %s if you get stuck. If " -"you just recently updated, you can find out what's new below." -msgstr "" -"Si c’est la première fois que vous utilisez %s, rendez-vous sur la page %s " -"pour une configuration initiale. Vous pouvez également consulter les %s si " -"vous êtes bloqué. Si vous venez de mettre à jour récemment, vous pouvez " -"découvrir les nouveautés ci-dessous." +#~ msgid "" +#~ "If this is your first time using %s, head over to the %s page for some " +#~ "initial configuration. You can also check out the %s if you get stuck. If " +#~ "you just recently updated, you can find out what's new below." +#~ msgstr "" +#~ "Si c’est la première fois que vous utilisez %s, rendez-vous sur la page " +#~ "%s pour une configuration initiale. Vous pouvez également consulter les " +#~ "%s si vous êtes bloqué. Si vous venez de mettre à jour récemment, vous " +#~ "pouvez découvrir les nouveautés ci-dessous." -#: templates/admin/welcome.php:9 -msgid "documentation" -msgstr "documentation" +#~ msgid "documentation" +#~ msgstr "documentation" -#: templates/admin/welcome.php:15 -msgid "Quick Links" -msgstr "Liens rapides" +#~ msgid "Quick Links" +#~ msgstr "Liens rapides" -#: templates/admin/welcome.php:17 -msgid "Documentation" -msgstr "Documentation" +#~ msgid "Documentation" +#~ msgstr "Documentation" -#: templates/admin/welcome.php:19 -msgid "Create a Recipe" -msgstr "Créer une recette" +#~ msgid "Create a Recipe" +#~ msgstr "Créer une recette" -#: templates/front/recipe-list.php:36 #, php-format -msgid "Recipes by %s" -msgstr "Recettes de %s" - -#: templates/front/recipe-list.php:37 -msgid "View all recipes" -msgstr "Voir toutes les recettes" +#~ msgid "Recipes by %s" +#~ msgstr "Recettes de %s" -#. Plugin Name of the plugin/theme -msgid "Cooked" -msgstr "Cooked" +#~ msgid "Cooked" +#~ msgstr "Cooked" -#. Plugin URI of the plugin/theme -msgid "https://cooked.pro" -msgstr "https://cooked.pro" +#~ msgid "https://cooked.pro" +#~ msgstr "https://cooked.pro" -#. Description of the plugin/theme -msgid "A recipe plugin for WordPress." -msgstr "Un plugin de recette pour WordPress." +#~ msgid "A recipe plugin for WordPress." +#~ msgstr "Un plugin de recette pour WordPress." -#. Author of the plugin/theme -msgid "Gora Tech" -msgstr "Gora Tech" +#~ msgid "Gora Tech" +#~ msgstr "Gora Tech" -#. Author URI of the plugin/theme -msgid "https://goratech.dev" -msgstr "https://goratech.dev" +#~ msgid "https://goratech.dev" +#~ msgstr "https://goratech.dev" #~ msgid "Restricted Diets" #~ msgstr "Régimes restreints" diff --git a/languages/cooked.po b/languages/cooked.po index 364774f..2f423ee 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:758 -#: includes/class.cooked-recipe-meta.php:813 -#: includes/class.cooked-recipe-meta.php:853 +#: includes/class.cooked-recipe-meta.php:759 +#: includes/class.cooked-recipe-meta.php:815 +#: includes/class.cooked-recipe-meta.php:856 msgid "Add Image" msgstr "" #: includes/class.cooked-admin-enqueues.php:139 -#: includes/class.cooked-recipe-meta.php:758 +#: includes/class.cooked-recipe-meta.php:759 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:1085 +#: includes/class.cooked-recipe-meta.php:1088 msgid "Add to Gallery" msgstr "" @@ -143,28 +143,30 @@ msgstr "" msgid "You do not have sufficient permissions to access this page." msgstr "" -#: includes/class.cooked-ajax.php:179 +#: includes/class.cooked-ajax.php:180 +#: includes/class.cooked-csv-import.php:307 #: includes/class.cooked-functions.php:134 #: includes/class.cooked-recipe-meta.php:176 #: includes/class.cooked-recipe-meta.php:263 -#: includes/class.cooked-recipe-meta.php:1163 -#: includes/class.cooked-recipes.php:636 -#: templates/front/recipe.php:34 +#: includes/class.cooked-recipe-meta.php:1166 +#: includes/class.cooked-recipes.php:635 +#: includes/class.cooked-recipes.php:667 msgid "Ingredients" msgstr "" -#: includes/class.cooked-ajax.php:179 +#: includes/class.cooked-ajax.php:180 +#: includes/class.cooked-csv-import.php:307 #: includes/class.cooked-functions.php:135 #: includes/class.cooked-recipe-meta.php:176 #: includes/class.cooked-recipe-meta.php:269 -#: includes/class.cooked-recipe-meta.php:1194 -#: includes/class.cooked-recipes.php:640 -#: templates/front/recipe.php:35 +#: includes/class.cooked-recipe-meta.php:1197 +#: includes/class.cooked-recipes.php:639 +#: includes/class.cooked-recipes.php:668 msgid "Directions" msgstr "" #: includes/class.cooked-enqueues.php:56 -#: includes/class.cooked-recipe-meta.php:1409 +#: includes/class.cooked-recipe-meta.php:1412 msgid "Timer" msgstr "" @@ -192,7 +194,7 @@ msgid "Information" msgstr "" #: includes/class.cooked-functions.php:132 -#: includes/class.cooked-recipe-meta.php:1354 +#: includes/class.cooked-recipe-meta.php:1357 #: includes/class.cooked-settings.php:231 msgid "Excerpt" msgstr "" @@ -202,8 +204,9 @@ msgid "Images" msgstr "" #: includes/class.cooked-functions.php:136 -#: includes/class.cooked-recipe-meta.php:1378 -#: includes/class.cooked-recipes.php:643 +#: includes/class.cooked-import.php:161 +#: includes/class.cooked-recipe-meta.php:1381 +#: includes/class.cooked-recipes.php:642 #: includes/class.cooked-settings.php:232 #: includes/class.cooked-shortcodes.php:775 msgid "Notes" @@ -276,6 +279,7 @@ msgstr "" #: includes/class.cooked-import.php:63 #: includes/class.cooked-import.php:118 +#: includes/class.cooked-import.php:170 #: includes/class.cooked-migration.php:60 msgid "Note:" msgstr "" @@ -291,15 +295,16 @@ msgstr "" msgid "WP Delicious - Import" msgstr "" -#: includes/class.cooked-import.php:152 +#: includes/class.cooked-import.php:185 msgid "More Imports are Coming Soon..." msgstr "" -#: includes/class.cooked-import.php:173 +#: includes/class.cooked-import.php:206 msgid "Begin Import" msgstr "" -#: includes/class.cooked-import.php:178 +#: includes/class.cooked-import.php:211 +#: includes/class.cooked-import.php:230 #: includes/class.cooked-settings.php:605 msgid "reload" msgstr "" @@ -583,7 +588,7 @@ msgid "cans" msgstr "" #: includes/class.cooked-measurements.php:202 -#: includes/class.cooked-recipes.php:799 +#: includes/class.cooked-recipes.php:872 #: includes/class.cooked-settings.php:236 msgid "Servings" msgstr "" @@ -921,7 +926,7 @@ msgid "Layout" msgstr "" #: includes/class.cooked-recipe-meta.php:281 -#: includes/class.cooked-recipe-meta.php:1275 +#: includes/class.cooked-recipe-meta.php:1278 msgid "Gallery" msgstr "" @@ -997,7 +1002,7 @@ msgid "Difficulty Level" msgstr "" #: includes/class.cooked-recipe-meta.php:431 -#: includes/class.cooked-recipe-meta.php:1137 +#: includes/class.cooked-recipe-meta.php:1140 #: includes/class.cooked-settings.php:233 #: includes/class.cooked-shortcodes.php:449 #: includes/class.cooked-shortcodes.php:671 @@ -1011,7 +1016,7 @@ msgid "minutes" msgstr "" #: includes/class.cooked-recipe-meta.php:436 -#: includes/class.cooked-recipe-meta.php:1138 +#: includes/class.cooked-recipe-meta.php:1141 #: includes/class.cooked-settings.php:234 #: includes/class.cooked-shortcodes.php:450 #: includes/class.cooked-shortcodes.php:680 @@ -1019,7 +1024,7 @@ msgid "Cook Time" msgstr "" #: includes/class.cooked-recipe-meta.php:441 -#: includes/class.cooked-recipe-meta.php:1139 +#: includes/class.cooked-recipe-meta.php:1142 #: includes/class.cooked-settings.php:235 #: includes/class.cooked-shortcodes.php:451 #: includes/class.cooked-shortcodes.php:691 @@ -1055,8 +1060,8 @@ 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 +#: includes/class.cooked-recipe-meta.php:775 +#: includes/class.cooked-recipe-meta.php:869 msgid "Section Heading" msgstr "" @@ -1065,122 +1070,122 @@ msgid "Add Ingredient" msgstr "" #: includes/class.cooked-recipe-meta.php:643 -#: includes/class.cooked-recipe-meta.php:845 +#: includes/class.cooked-recipe-meta.php:847 msgid "Add Section Heading" msgstr "" -#: includes/class.cooked-recipe-meta.php:844 +#: includes/class.cooked-recipe-meta.php:846 msgid "Add Direction" msgstr "" -#: includes/class.cooked-recipe-meta.php:901 +#: includes/class.cooked-recipe-meta.php:904 msgid "Nutrition Information" msgstr "" -#: includes/class.cooked-recipe-meta.php:939 +#: includes/class.cooked-recipe-meta.php:942 #: includes/class.cooked-shortcodes.php:1062 msgid "Nutrition Facts" msgstr "" -#: includes/class.cooked-recipe-meta.php:957 +#: includes/class.cooked-recipe-meta.php:960 #: includes/class.cooked-shortcodes.php:1030 msgid "Amount per serving" msgstr "" -#: includes/class.cooked-recipe-meta.php:967 +#: includes/class.cooked-recipe-meta.php:970 #: includes/class.cooked-shortcodes.php:1040 msgid "% Daily Value *" msgstr "" -#: includes/class.cooked-recipe-meta.php:986 +#: includes/class.cooked-recipe-meta.php:989 #: includes/class.cooked-shortcodes.php:972 msgid "Includes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1018 +#: includes/class.cooked-recipe-meta.php:1021 #: 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:1034 +#: includes/class.cooked-recipe-meta.php:1037 msgid "Recipe Gallery Type" msgstr "" -#: includes/class.cooked-recipe-meta.php:1047 +#: includes/class.cooked-recipe-meta.php:1050 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:1061 +#: includes/class.cooked-recipe-meta.php:1064 #, 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:1065 +#: includes/class.cooked-recipe-meta.php:1068 #, 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:1070 +#: includes/class.cooked-recipe-meta.php:1073 msgid "Gallery Items" msgstr "" -#: includes/class.cooked-recipe-meta.php:1101 +#: includes/class.cooked-recipe-meta.php:1104 msgid "Recipe Information" msgstr "" -#: includes/class.cooked-recipe-meta.php:1102 +#: includes/class.cooked-recipe-meta.php:1105 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:1111 -#: includes/class.cooked-recipe-meta.php:1121 +#: includes/class.cooked-recipe-meta.php:1114 +#: includes/class.cooked-recipe-meta.php:1124 #, php-format msgid "\"%1$s\" and \"%2$s\"" msgstr "" -#: includes/class.cooked-recipe-meta.php:1113 +#: includes/class.cooked-recipe-meta.php:1116 msgid "This will allow you to include or exclude content from the shortcode output." msgstr "" -#: includes/class.cooked-recipe-meta.php:1122 +#: includes/class.cooked-recipe-meta.php:1125 msgid "Used like \"include\", but will position the content to the left or right." msgstr "" -#: includes/class.cooked-recipe-meta.php:1132 -#: 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:1135 +#: includes/class.cooked-recipe-meta.php:1181 +#: includes/class.cooked-recipe-meta.php:1212 +#: includes/class.cooked-recipe-meta.php:1237 +#: includes/class.cooked-recipe-meta.php:1261 +#: includes/class.cooked-recipe-meta.php:1321 +#: includes/class.cooked-recipe-meta.php:1366 +#: includes/class.cooked-recipe-meta.php:1396 +#: includes/class.cooked-recipe-meta.php:1441 #: includes/class.cooked-recipe-meta.php:1564 msgid "Available Variables" msgstr "" -#: includes/class.cooked-recipe-meta.php:1136 +#: includes/class.cooked-recipe-meta.php:1139 #: 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:1140 +#: includes/class.cooked-recipe-meta.php:1143 #: includes/class.cooked-shortcodes.php:447 #: includes/class.cooked-shortcodes.php:635 msgid "Difficulty" msgstr "" -#: includes/class.cooked-recipe-meta.php:1141 +#: includes/class.cooked-recipe-meta.php:1144 msgid "Servings Switcher" msgstr "" -#: includes/class.cooked-recipe-meta.php:1142 +#: includes/class.cooked-recipe-meta.php:1145 #: includes/class.cooked-settings.php:229 #: includes/class.cooked-shortcodes.php:718 #: includes/class.cooked-shortcodes.php:721 @@ -1188,211 +1193,211 @@ msgstr "" msgid "Category" msgstr "" -#: includes/class.cooked-recipe-meta.php:1143 +#: includes/class.cooked-recipe-meta.php:1146 msgid "Print Mode" msgstr "" -#: includes/class.cooked-recipe-meta.php:1144 +#: includes/class.cooked-recipe-meta.php:1147 msgid "Full-Screen Mode" msgstr "" -#: includes/class.cooked-recipe-meta.php:1164 +#: includes/class.cooked-recipe-meta.php:1167 msgid "This will display the list of ingredients, added via the \"Ingredients\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1170 +#: includes/class.cooked-recipe-meta.php:1173 msgid "This will allow you to hide or show the checkboxes:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1180 +#: includes/class.cooked-recipe-meta.php:1183 msgid "Show checkboxes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1181 +#: includes/class.cooked-recipe-meta.php:1184 msgid "Hide checkboxes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1195 +#: includes/class.cooked-recipe-meta.php:1198 msgid "This will display the list of directions, added via the \"Directions\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1201 +#: includes/class.cooked-recipe-meta.php:1204 msgid "This will allow you to hide or show the numbers:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1211 +#: includes/class.cooked-recipe-meta.php:1214 msgid "Show numbers" msgstr "" -#: includes/class.cooked-recipe-meta.php:1212 +#: includes/class.cooked-recipe-meta.php:1215 msgid "Hide numbers" msgstr "" -#: includes/class.cooked-recipe-meta.php:1225 +#: includes/class.cooked-recipe-meta.php:1228 msgid "Featured Image" msgstr "" -#: includes/class.cooked-recipe-meta.php:1226 +#: includes/class.cooked-recipe-meta.php:1229 msgid "This will display the featured image, if one is set." msgstr "" -#: includes/class.cooked-recipe-meta.php:1236 -#: includes/class.cooked-recipe-meta.php:1260 -#: includes/class.cooked-recipe-meta.php:1365 +#: includes/class.cooked-recipe-meta.php:1239 +#: includes/class.cooked-recipe-meta.php:1263 +#: includes/class.cooked-recipe-meta.php:1368 msgid "None" msgstr "" -#: includes/class.cooked-recipe-meta.php:1249 +#: includes/class.cooked-recipe-meta.php:1252 msgid "Nutrition Label" msgstr "" -#: includes/class.cooked-recipe-meta.php:1250 +#: includes/class.cooked-recipe-meta.php:1253 msgid "This will display the Nutrition Facts label, if data is present." msgstr "" -#: includes/class.cooked-recipe-meta.php:1276 +#: includes/class.cooked-recipe-meta.php:1279 msgid "This will display the gallery, if one is set or created from the \"Gallery\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1284 +#: includes/class.cooked-recipe-meta.php:1287 msgid "Set the width of the gallery." msgstr "" -#: includes/class.cooked-recipe-meta.php:1291 +#: includes/class.cooked-recipe-meta.php:1294 msgid "Set the image size ratio." msgstr "" -#: includes/class.cooked-recipe-meta.php:1301 +#: includes/class.cooked-recipe-meta.php:1304 msgid "Set the navigation style." msgstr "" -#: includes/class.cooked-recipe-meta.php:1308 +#: includes/class.cooked-recipe-meta.php:1311 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:1323 +#: includes/class.cooked-recipe-meta.php:1326 #, 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:1328 +#: includes/class.cooked-recipe-meta.php:1331 #, 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:1333 +#: includes/class.cooked-recipe-meta.php:1336 #, 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:1338 +#: includes/class.cooked-recipe-meta.php:1341 #, php-format msgid "\"%1$s\" or \"%2$s\"" msgstr "" -#: includes/class.cooked-recipe-meta.php:1355 +#: includes/class.cooked-recipe-meta.php:1358 msgid "This will display the excerpt, if one is available from the \"Layout & Content\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1379 +#: includes/class.cooked-recipe-meta.php:1382 msgid "This will display the notes, if one is available from the \"Layout & Content\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1385 +#: includes/class.cooked-recipe-meta.php:1388 msgid "This will allow you to hide or show the header for the notes section:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1395 +#: includes/class.cooked-recipe-meta.php:1398 msgid "Show header" msgstr "" -#: includes/class.cooked-recipe-meta.php:1396 +#: includes/class.cooked-recipe-meta.php:1399 msgid "Hide header" msgstr "" -#: includes/class.cooked-recipe-meta.php:1410 +#: includes/class.cooked-recipe-meta.php:1413 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:1419 +#: includes/class.cooked-recipe-meta.php:1422 #, php-format msgid "\"%1$s\", \"%2$s\" and \"%3$s\"" msgstr "" -#: includes/class.cooked-recipe-meta.php:1421 +#: includes/class.cooked-recipe-meta.php:1424 msgid "Use just one or a combination of all three to set the timer length" msgstr "" -#: includes/class.cooked-recipe-meta.php:1428 +#: includes/class.cooked-recipe-meta.php:1431 msgid "Add a short description for this timer, if applicable." msgstr "" -#: includes/class.cooked-recipe-meta.php:1440 +#: includes/class.cooked-recipe-meta.php:1443 msgid "Time in seconds" msgstr "" -#: includes/class.cooked-recipe-meta.php:1441 +#: includes/class.cooked-recipe-meta.php:1444 msgid "Time in minutes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1442 +#: includes/class.cooked-recipe-meta.php:1445 msgid "Time in hours" msgstr "" -#: includes/class.cooked-recipe-meta.php:1443 +#: includes/class.cooked-recipe-meta.php:1446 msgid "Timer Description" 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 -#: includes/class.cooked-recipes.php:322 +#: includes/class.cooked-recipes.php:267 +#: includes/class.cooked-recipes.php:321 #: templates/front/recipe-single.php:47 #, php-format msgid "By %s" msgstr "" #. translators: For showing "All" of a taxonomy (ex: "All Burgers") -#: includes/class.cooked-recipes.php:384 +#: includes/class.cooked-recipes.php:383 #, php-format msgid "All %s" msgstr "" -#: includes/class.cooked-recipes.php:651 +#: includes/class.cooked-recipes.php:724 msgid "Beginner" msgstr "" -#: includes/class.cooked-recipes.php:652 +#: includes/class.cooked-recipes.php:725 msgid "Intermediate" msgstr "" -#: includes/class.cooked-recipes.php:653 +#: includes/class.cooked-recipes.php:726 msgid "Advanced" msgstr "" -#: includes/class.cooked-recipes.php:679 +#: includes/class.cooked-recipes.php:752 msgid "Cooked Gallery" msgstr "" -#: includes/class.cooked-recipes.php:683 +#: includes/class.cooked-recipes.php:756 msgid "Envira Gallery" msgstr "" -#: includes/class.cooked-recipes.php:687 +#: includes/class.cooked-recipes.php:760 msgid "Soliloquy Slider" msgstr "" -#: includes/class.cooked-recipes.php:691 +#: includes/class.cooked-recipes.php:764 msgid "Slider Revolution" msgstr "" #. translators: singular and plural quarter "serving" size -#: includes/class.cooked-recipes.php:766 +#: includes/class.cooked-recipes.php:839 #, php-format msgid "Quarter (%s Serving)" msgid_plural "Quarter (%s Servings)" @@ -1400,7 +1405,7 @@ msgstr[0] "" msgstr[1] "" #. translators: singular and plural quarter "serving" size -#: includes/class.cooked-recipes.php:769 +#: includes/class.cooked-recipes.php:842 #, php-format msgid "Half (%s Serving)" msgid_plural "Half (%s Servings)" @@ -1408,7 +1413,7 @@ msgstr[0] "" msgstr[1] "" #. translators: singular and plural quarter "serving" size -#: includes/class.cooked-recipes.php:772 +#: includes/class.cooked-recipes.php:845 #, php-format msgid "Default (%s Serving)" msgid_plural "Default (%s Servings)" @@ -1416,25 +1421,25 @@ msgstr[0] "" msgstr[1] "" #. translators: singular and plural quarter "serving" size -#: includes/class.cooked-recipes.php:775 +#: includes/class.cooked-recipes.php:848 #, php-format msgid "Double (%s Servings)" msgstr "" #. translators: singular and plural quarter "serving" size -#: includes/class.cooked-recipes.php:778 +#: includes/class.cooked-recipes.php:851 #, php-format msgid "Triple (%s Servings)" msgstr "" -#: includes/class.cooked-recipes.php:792 +#: includes/class.cooked-recipes.php:865 #: includes/class.cooked-shortcodes.php:448 msgid "Yields" msgstr "" #. translators: singular and plural "serving" sizes -#: includes/class.cooked-recipes.php:796 -#: includes/class.cooked-recipes.php:807 +#: includes/class.cooked-recipes.php:869 +#: includes/class.cooked-recipes.php:880 #, php-format msgid "%s Serving" msgid_plural "%s Servings" @@ -1442,51 +1447,51 @@ msgstr[0] "" msgstr[1] "" #. translators: singular and plural "steps" -#: includes/class.cooked-recipes.php:962 +#: includes/class.cooked-recipes.php:1035 #: includes/class.cooked-seo.php:83 #, php-format msgid "Step %d" msgstr "" -#: includes/class.cooked-recipes.php:1022 +#: includes/class.cooked-recipes.php:1095 msgid "Browse" msgstr "" -#: includes/class.cooked-recipes.php:1040 +#: includes/class.cooked-recipes.php:1113 #: includes/class.cooked-settings.php:157 msgid "No categories" msgstr "" -#: includes/class.cooked-recipes.php:1043 +#: includes/class.cooked-recipes.php:1116 #: 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:1045 +#: includes/class.cooked-recipes.php:1118 #: includes/class.cooked-taxonomies.php:41 #: includes/widgets/recipe-categories.php:48 msgid "All Categories" msgstr "" -#: includes/class.cooked-recipes.php:1116 +#: includes/class.cooked-recipes.php:1189 msgid "Find a recipe..." msgstr "" -#: includes/class.cooked-recipes.php:1131 +#: includes/class.cooked-recipes.php:1204 msgid "Newest first" msgstr "" -#: includes/class.cooked-recipes.php:1135 +#: includes/class.cooked-recipes.php:1208 msgid "Oldest first" msgstr "" -#: includes/class.cooked-recipes.php:1139 +#: includes/class.cooked-recipes.php:1212 msgid "Alphabetical (A-Z)" msgstr "" -#: includes/class.cooked-recipes.php:1143 +#: includes/class.cooked-recipes.php:1216 msgid "Alphabetical (Z-A)" msgstr "" @@ -2111,8 +2116,8 @@ msgstr "" #: 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 +#: includes/class.cooked-recipe-meta.php:779 +#: includes/class.cooked-recipe-meta.php:873 msgid "Heading Element:" msgstr "" @@ -2162,7 +2167,7 @@ msgstr "" msgid "h6" msgstr "" -#: includes/class.cooked-recipes.php:1118 +#: includes/class.cooked-recipes.php:1191 msgid "Search" msgstr "" @@ -2229,37 +2234,37 @@ msgstr "" msgid "ex. Apple Sauce, Tofu, etc." msgstr "" -#: includes/class.cooked-recipes.php:904 -#: includes/class.cooked-recipes.php:918 +#: includes/class.cooked-recipes.php:977 +#: includes/class.cooked-recipes.php:991 msgid "or" msgstr "" -#: includes/class.cooked-recipe-meta.php:1456 +#: includes/class.cooked-recipe-meta.php:1459 msgid "Next & Previous Recipe Navigation" msgstr "" -#: includes/class.cooked-recipe-meta.php:1457 +#: includes/class.cooked-recipe-meta.php:1460 msgid "This will display navigation links to the next and previous recipes." msgstr "" -#: includes/class.cooked-recipe-meta.php:1461 +#: includes/class.cooked-recipe-meta.php:1464 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 +#: includes/class.cooked-recipe-meta.php:1469 msgid "Usage" msgstr "" -#: includes/class.cooked-recipe-meta.php:1468 +#: includes/class.cooked-recipe-meta.php:1471 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 +#: includes/class.cooked-recipe-meta.php:1484 +#: includes/class.cooked-related-recipes.php:34 msgid "Related Recipes" msgstr "" -#: includes/class.cooked-shortcodes.php:1130 +#: includes/class.cooked-shortcodes.php:1131 msgid "Recipe not found." msgstr "" @@ -2281,58 +2286,26 @@ msgstr "" 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 +#: includes/class.cooked-recipe-meta.php:1493 msgid "Specify a recipe ID. If not provided, uses the current recipe." msgstr "" -#: includes/class.cooked-recipe-meta.php:1497 +#: includes/class.cooked-recipe-meta.php:1500 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 +#: includes/class.cooked-recipe-meta.php:1527 msgid "Hide recipe card images." msgstr "" -#: includes/class.cooked-recipe-meta.php:1531 +#: includes/class.cooked-recipe-meta.php:1534 msgid "Hide recipe card excerpts." msgstr "" -#: includes/class.cooked-recipe-meta.php:1541 +#: includes/class.cooked-recipe-meta.php:1544 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 "" @@ -2356,68 +2329,321 @@ msgstr "" msgid "true/false" msgstr "" -#: includes/class.cooked-recipe-meta.php:1574 -msgid "Numeric value" +#: includes/class.cooked-recipe-meta.php:1575 +msgid "Example" msgstr "" -#: includes/class.cooked-recipe-meta.php:1576 -msgid "Example" +#: includes/class.cooked-shortcodes.php:1114 +msgid "Invalid recipe ID specified. Please provide a valid numeric recipe ID." +msgstr "" + +#: includes/class.cooked-shortcodes.php:1124 +msgid "No recipe found. Please specify a recipe ID using the id attribute, or use this shortcode on a recipe page." +msgstr "" + +#: includes/class.cooked-shortcodes.php:1135 +#, php-format +msgid "The specified ID (%d) is not a recipe." +msgstr "" + +#: includes/class.cooked-shortcodes.php:1137 +#, 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 "" + +#: includes/class.cooked-recipe-meta.php:1485 +msgid "Displays a grid of related recipes based on shared terms in any of the recipe taxonomies (categories, cuisines, cooking methods, tags, diets), shown in random order. No cache or pre-calculation." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1510 +msgid "Number of recipes to display (default: 4)." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1517 +msgid "Number of columns in the grid (default: 2)." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1551 +msgid "Toggle which taxonomies are used: match_categories, match_cuisines, match_cooking_methods, match_tags, match_diets (default: true)." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1558 +msgid "Matching options:" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:1559 +msgid "Set to false to exclude a taxonomy from related recipes, e.g. match_cuisines=\"false\" to ignore cuisines." +msgstr "" + +#: includes/class.cooked-cli.php:41 +msgid "Please provide a tool name. Use `wp cooked tools list` to see available tools." +msgstr "" + +#: includes/class.cooked-cli.php:51 +msgid "Tool completed successfully." +msgstr "" + +#: includes/class.cooked-cli.php:68 +msgid "No tools available." +msgstr "" + +#: includes/class.cooked-updates.php:150 +msgid "Flush rewrite rules" +msgstr "" + +#: includes/class.cooked-updates.php:151 +msgid "Refreshes permalink rules for recipe and profile URLs." +msgstr "" + +#: includes/class.cooked-updates.php:154 +msgid "Fix recipe line endings" +msgstr "" + +#: includes/class.cooked-updates.php:155 +msgid "Normalizes line endings in recipe content for exporter/importer compatibility." +msgstr "" + +#: includes/class.cooked-updates.php:158 +msgid "Purge legacy related recipes cache" +msgstr "" + +#: includes/class.cooked-updates.php:159 +msgid "Removes old transients and options from the previous related-recipes cache." +msgstr "" + +#: includes/class.cooked-updates.php:162 +msgid "Remove recipes from user meta" +msgstr "" + +#: includes/class.cooked-updates.php:163 +msgid "Removes the legacy \"recipes\" key from all users' cooked_user_meta." +msgstr "" + +#: includes/class.cooked-updates.php:196 +msgid "Tool name is required." +msgstr "" + +#: includes/class.cooked-updates.php:207 +#, php-format +msgid "Unknown tool: %s." +msgstr "" + +#: includes/class.cooked-updates.php:210 +#, php-format +msgid "Tool method %s does not exist." msgstr "" #: includes/class.cooked-admin-enqueues.php:151 +msgid "Are you sure you want to import recipes from this CSV file?" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:152 +msgid "Please select a CSV file." +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:153 +msgid "Please select a valid CSV file." +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:154 +msgid "Uploading..." +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:155 +msgid "Processing..." +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:156 +msgid "recipes imported" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:157 +msgid "Errors:" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:158 +msgid "Import failed." +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:159 +msgid "Failed to process CSV file." +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:160 +msgid "Failed to upload CSV file." +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:161 +#: includes/class.cooked-ajax.php:379 +msgid "File upload failed." +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:162 +msgid "Something went wrong" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:163 +msgid "hrs" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:164 +msgid "mins" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:165 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 +#: includes/class.cooked-admin-enqueues.php:167 #, php-format msgid "Last: %1$s · %2$s recipes" msgstr "" -#: includes/class.cooked-related-recipes.php:41 -msgid "Tools" +#: includes/class.cooked-ajax.php:346 +msgid "No default content provided." msgstr "" -#: includes/class.cooked-related-recipes.php:45 -#: includes/class.cooked-settings.php:621 -msgid "Calculate Related Recipes" +#: includes/class.cooked-ajax.php:375 +#: includes/class.cooked-ajax.php:411 +msgid "You do not have permission to import 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." +#: includes/class.cooked-ajax.php:385 +msgid "Invalid file type. Please upload a CSV file." msgstr "" -#: includes/class.cooked-settings.php:626 -msgid "Done." +#: includes/class.cooked-ajax.php:418 +msgid "CSV file not found. Please upload again." msgstr "" -#: includes/class.cooked-settings.php:626 -msgid "Related recipes cached." +#: includes/class.cooked-ajax.php:434 +#, php-format +msgid "Successfully imported %d recipe(s)." msgstr "" -#: includes/class.cooked-shortcodes.php:1113 -msgid "Invalid recipe ID specified. Please provide a valid numeric recipe ID." +#: includes/class.cooked-ajax.php:443 +msgid "No recipes were imported." 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." +#: includes/class.cooked-csv-import.php:38 +msgid "CSV file not found." msgstr "" -#: includes/class.cooked-shortcodes.php:1134 -#, php-format -msgid "The specified ID (%d) is not a recipe." +#: includes/class.cooked-csv-import.php:45 +msgid "Could not open CSV file." +msgstr "" + +#: includes/class.cooked-csv-import.php:52 +msgid "CSV file is empty or invalid." +msgstr "" + +#: includes/class.cooked-csv-import.php:63 +msgid "CSV file must contain a \"title\" column." +msgstr "" + +#: includes/class.cooked-csv-import.php:90 +msgid "Unknown error" msgstr "" -#: includes/class.cooked-shortcodes.php:1136 +#: includes/class.cooked-csv-import.php:91 +#: includes/class.cooked-csv-import.php:98 #, php-format -msgid "No post found with ID %d." +msgid "Row %d: %s" msgstr "" -#: includes/class.cooked-shortcodes.php:1149 -msgid "This may be because there are no other recipes in the current language with matching attributes." +#: includes/class.cooked-csv-import.php:124 +msgid "Title is required" 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." +#: includes/class.cooked-import.php:152 +msgid "Import recipes from a CSV file. Your CSV file should include the following columns:" +msgstr "" + +#: includes/class.cooked-import.php:154 +msgid "Recipe title (required)" +msgstr "" + +#: includes/class.cooked-import.php:156 +msgid "Prep time in minutes" +msgstr "" + +#: includes/class.cooked-import.php:157 +msgid "Cook time in minutes" +msgstr "" + +#: includes/class.cooked-import.php:158 +msgid "Difficulty level (1=Beginner, 2=Intermediate, 3=Advanced)" +msgstr "" + +#: includes/class.cooked-import.php:165 +msgid "Cooking method, separated by comma" +msgstr "" + +#: includes/class.cooked-import.php:170 +msgid "Recipes will be imported with the 'Draft' status. After the import is complete, you can bulk edit the recipes and change their status to 'Published'." +msgstr "" + +#: includes/class.cooked-import.php:173 +msgid "CSV Import" +msgstr "" + +#: includes/class.cooked-import.php:177 +msgid "Import Recipes via CSV" +msgstr "" + +#: includes/class.cooked-import.php:225 +msgid "Upload and Import CSV" +msgstr "" + +#: includes/class.cooked-import.php:230 +msgid "Import Complete!" +msgstr "" + +#: includes/class.cooked-import.php:230 +msgid "You can now" +msgstr "" + +#: includes/class.cooked-import.php:230 +msgid "the import screen or" +msgstr "" + +#: includes/class.cooked-import.php:230 +msgid "view your recipes" +msgstr "" + +#: includes/class.cooked-import.php:155 +msgid "Excerpt/description" +msgstr "" + +#: includes/class.cooked-import.php:159 +msgid "Ingredients, separated by pipe (|). Format: \"amount|measurement|name\" or \"name\" for simple ingredients. Add substitutions with double pipe (||): \"amount|measurement|name||sub_amount|sub_measurement|sub_name\"" +msgstr "" + +#: includes/class.cooked-import.php:160 +msgid "Directions/instructions, separated by pipe (|)" +msgstr "" + +#: includes/class.cooked-import.php:162 +msgid "Category, separated by comma" +msgstr "" + +#: includes/class.cooked-import.php:164 +msgid "Cuisine, separated by comma" +msgstr "" + +#: includes/class.cooked-import.php:166 +msgid "Tags, separated by comma" +msgstr "" + +#: includes/class.cooked-import.php:167 +msgid "Restricted diet type (Schema.org RestrictedDiet), separated by comma" msgstr "" diff --git a/languages/cooked.pot b/languages/cooked.pot index 79380de..4459be8 100644 --- a/languages/cooked.pot +++ b/languages/cooked.pot @@ -2,14 +2,14 @@ # This file is distributed under the GPL2. msgid "" msgstr "" -"Project-Id-Version: Cooked - Recipe Management 1.12.0\n" +"Project-Id-Version: Cooked - Recipe Management 1.13.0\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/cooked\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2026-01-28T10:29:58-05:00\n" +"POT-Creation-Date: 2026-02-24T19:15:02-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:758 -#: includes/class.cooked-recipe-meta.php:813 -#: includes/class.cooked-recipe-meta.php:853 +#: includes/class.cooked-recipe-meta.php:759 +#: includes/class.cooked-recipe-meta.php:815 +#: includes/class.cooked-recipe-meta.php:856 msgid "Add Image" msgstr "" #: includes/class.cooked-admin-enqueues.php:139 -#: includes/class.cooked-recipe-meta.php:758 +#: includes/class.cooked-recipe-meta.php:759 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:1085 +#: includes/class.cooked-recipe-meta.php:1088 msgid "Add to Gallery" msgstr "" @@ -99,12 +99,68 @@ msgid "Please confirm that you are ready to import all recipes." msgstr "" #: includes/class.cooked-admin-enqueues.php:151 +msgid "Are you sure you want to import recipes from this CSV file?" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:152 +msgid "Please select a CSV file." +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:153 +msgid "Please select a valid CSV file." +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:154 +msgid "Uploading..." +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:155 +msgid "Processing..." +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:156 +msgid "recipes imported" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:157 +msgid "Errors:" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:158 +msgid "Import failed." +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:159 +msgid "Failed to process CSV file." +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:160 +msgid "Failed to upload CSV file." +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:161 +#: includes/class.cooked-ajax.php:379 +msgid "File upload failed." +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:162 +msgid "Something went wrong" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:163 +msgid "hrs" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:164 +msgid "mins" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:165 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 +#: includes/class.cooked-admin-enqueues.php:167 #, php-format msgid "Last: %1$s · %2$s recipes" msgstr "" @@ -157,32 +213,102 @@ msgstr "" msgid "You do not have sufficient permissions to access this page." msgstr "" -#: includes/class.cooked-ajax.php:179 +#: includes/class.cooked-ajax.php:180 +#: includes/class.cooked-csv-import.php:307 #: includes/class.cooked-functions.php:134 #: includes/class.cooked-recipe-meta.php:176 #: includes/class.cooked-recipe-meta.php:263 -#: includes/class.cooked-recipe-meta.php:1163 -#: includes/class.cooked-recipes.php:636 -#: templates/front/recipe.php:34 +#: includes/class.cooked-recipe-meta.php:1166 +#: includes/class.cooked-recipes.php:635 +#: includes/class.cooked-recipes.php:667 msgid "Ingredients" msgstr "" -#: includes/class.cooked-ajax.php:179 +#: includes/class.cooked-ajax.php:180 +#: includes/class.cooked-csv-import.php:307 #: includes/class.cooked-functions.php:135 #: includes/class.cooked-recipe-meta.php:176 #: includes/class.cooked-recipe-meta.php:269 -#: includes/class.cooked-recipe-meta.php:1194 -#: includes/class.cooked-recipes.php:640 -#: templates/front/recipe.php:35 +#: includes/class.cooked-recipe-meta.php:1197 +#: includes/class.cooked-recipes.php:639 +#: includes/class.cooked-recipes.php:668 msgid "Directions" msgstr "" +#: includes/class.cooked-ajax.php:346 +msgid "No default content provided." +msgstr "" + +#: includes/class.cooked-ajax.php:375 +#: includes/class.cooked-ajax.php:411 +msgid "You do not have permission to import recipes." +msgstr "" + +#: includes/class.cooked-ajax.php:385 +msgid "Invalid file type. Please upload a CSV file." +msgstr "" + +#: includes/class.cooked-ajax.php:418 +msgid "CSV file not found. Please upload again." +msgstr "" + +#: includes/class.cooked-ajax.php:434 +#, php-format +msgid "Successfully imported %d recipe(s)." +msgstr "" + +#: includes/class.cooked-ajax.php:443 +msgid "No recipes were imported." +msgstr "" + +#: includes/class.cooked-cli.php:41 +msgid "Please provide a tool name. Use `wp cooked tools list` to see available tools." +msgstr "" + +#: includes/class.cooked-cli.php:51 +msgid "Tool completed successfully." +msgstr "" + +#: includes/class.cooked-cli.php:68 +msgid "No tools available." +msgstr "" + +#: includes/class.cooked-csv-import.php:38 +msgid "CSV file not found." +msgstr "" + +#: includes/class.cooked-csv-import.php:45 +msgid "Could not open CSV file." +msgstr "" + +#: includes/class.cooked-csv-import.php:52 +msgid "CSV file is empty or invalid." +msgstr "" + +#: includes/class.cooked-csv-import.php:63 +msgid "CSV file must contain a \"title\" column." +msgstr "" + +#: includes/class.cooked-csv-import.php:90 +msgid "Unknown error" +msgstr "" + +#: includes/class.cooked-csv-import.php:91 +#: includes/class.cooked-csv-import.php:98 +#, php-format +msgid "Row %d: %s" +msgstr "" + +#: includes/class.cooked-csv-import.php:124 +msgid "Title is required" +msgstr "" + #: includes/class.cooked-delicious-recipes.php:102 msgid "Error importing WP Delicious recipe." msgstr "" #: includes/class.cooked-enqueues.php:56 -#: includes/class.cooked-recipe-meta.php:1409 +#: includes/class.cooked-recipe-meta.php:1412 msgid "Timer" msgstr "" @@ -210,7 +336,7 @@ msgid "Information" msgstr "" #: includes/class.cooked-functions.php:132 -#: includes/class.cooked-recipe-meta.php:1354 +#: includes/class.cooked-recipe-meta.php:1357 #: includes/class.cooked-settings.php:231 msgid "Excerpt" msgstr "" @@ -220,8 +346,9 @@ msgid "Images" msgstr "" #: includes/class.cooked-functions.php:136 -#: includes/class.cooked-recipe-meta.php:1378 -#: includes/class.cooked-recipes.php:643 +#: includes/class.cooked-import.php:161 +#: includes/class.cooked-recipe-meta.php:1381 +#: includes/class.cooked-recipes.php:642 #: includes/class.cooked-settings.php:232 #: includes/class.cooked-shortcodes.php:775 msgid "Notes" @@ -294,6 +421,7 @@ msgstr "" #: includes/class.cooked-import.php:63 #: includes/class.cooked-import.php:118 +#: includes/class.cooked-import.php:170 #: includes/class.cooked-migration.php:60 msgid "Note:" msgstr "" @@ -323,18 +451,103 @@ msgid "WP Recipe Maker - Import" msgstr "" #: includes/class.cooked-import.php:152 -msgid "More Imports are Coming Soon..." +msgid "Import recipes from a CSV file. Your CSV file should include the following columns:" +msgstr "" + +#: includes/class.cooked-import.php:154 +msgid "Recipe title (required)" +msgstr "" + +#: includes/class.cooked-import.php:155 +msgid "Excerpt/description" +msgstr "" + +#: includes/class.cooked-import.php:156 +msgid "Prep time in minutes" +msgstr "" + +#: includes/class.cooked-import.php:157 +msgid "Cook time in minutes" +msgstr "" + +#: includes/class.cooked-import.php:158 +msgid "Difficulty level (1=Beginner, 2=Intermediate, 3=Advanced)" +msgstr "" + +#: includes/class.cooked-import.php:159 +msgid "Ingredients, separated by pipe (|). Format: \"amount|measurement|name\" or \"name\" for simple ingredients. Add substitutions with double pipe (||): \"amount|measurement|name||sub_amount|sub_measurement|sub_name\"" +msgstr "" + +#: includes/class.cooked-import.php:160 +msgid "Directions/instructions, separated by pipe (|)" +msgstr "" + +#: includes/class.cooked-import.php:162 +msgid "Category, separated by comma" +msgstr "" + +#: includes/class.cooked-import.php:164 +msgid "Cuisine, separated by comma" +msgstr "" + +#: includes/class.cooked-import.php:165 +msgid "Cooking method, separated by comma" +msgstr "" + +#: includes/class.cooked-import.php:166 +msgid "Tags, separated by comma" +msgstr "" + +#: includes/class.cooked-import.php:167 +msgid "Restricted diet type (Schema.org RestrictedDiet), separated by comma" +msgstr "" + +#: includes/class.cooked-import.php:170 +msgid "Recipes will be imported with the 'Draft' status. After the import is complete, you can bulk edit the recipes and change their status to 'Published'." msgstr "" #: includes/class.cooked-import.php:173 +msgid "CSV Import" +msgstr "" + +#: includes/class.cooked-import.php:177 +msgid "Import Recipes via CSV" +msgstr "" + +#: includes/class.cooked-import.php:185 +msgid "More Imports are Coming Soon..." +msgstr "" + +#: includes/class.cooked-import.php:206 msgid "Begin Import" msgstr "" -#: includes/class.cooked-import.php:178 +#: includes/class.cooked-import.php:211 +#: includes/class.cooked-import.php:230 #: includes/class.cooked-settings.php:605 msgid "reload" msgstr "" +#: includes/class.cooked-import.php:225 +msgid "Upload and Import CSV" +msgstr "" + +#: includes/class.cooked-import.php:230 +msgid "Import Complete!" +msgstr "" + +#: includes/class.cooked-import.php:230 +msgid "You can now" +msgstr "" + +#: includes/class.cooked-import.php:230 +msgid "the import screen or" +msgstr "" + +#: includes/class.cooked-import.php:230 +msgid "view your recipes" +msgstr "" + #: includes/class.cooked-measurements.php:29 msgctxt "Grams Abbreviation (Singular)" msgid "g" @@ -627,7 +840,7 @@ msgid "cans" msgstr "" #: includes/class.cooked-measurements.php:202 -#: includes/class.cooked-recipes.php:799 +#: includes/class.cooked-recipes.php:872 #: includes/class.cooked-settings.php:236 msgid "Servings" msgstr "" @@ -983,7 +1196,7 @@ msgid "Layout" msgstr "" #: includes/class.cooked-recipe-meta.php:281 -#: includes/class.cooked-recipe-meta.php:1275 +#: includes/class.cooked-recipe-meta.php:1278 msgid "Gallery" msgstr "" @@ -1059,7 +1272,7 @@ msgid "Difficulty Level" msgstr "" #: includes/class.cooked-recipe-meta.php:431 -#: includes/class.cooked-recipe-meta.php:1137 +#: includes/class.cooked-recipe-meta.php:1140 #: includes/class.cooked-settings.php:233 #: includes/class.cooked-shortcodes.php:449 #: includes/class.cooked-shortcodes.php:671 @@ -1073,7 +1286,7 @@ msgid "minutes" msgstr "" #: includes/class.cooked-recipe-meta.php:436 -#: includes/class.cooked-recipe-meta.php:1138 +#: includes/class.cooked-recipe-meta.php:1141 #: includes/class.cooked-settings.php:234 #: includes/class.cooked-shortcodes.php:450 #: includes/class.cooked-shortcodes.php:680 @@ -1081,7 +1294,7 @@ msgid "Cook Time" msgstr "" #: includes/class.cooked-recipe-meta.php:441 -#: includes/class.cooked-recipe-meta.php:1139 +#: includes/class.cooked-recipe-meta.php:1142 #: includes/class.cooked-settings.php:235 #: includes/class.cooked-shortcodes.php:451 #: includes/class.cooked-shortcodes.php:691 @@ -1129,15 +1342,15 @@ 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 +#: includes/class.cooked-recipe-meta.php:775 +#: includes/class.cooked-recipe-meta.php:869 msgid "Section Heading" msgstr "" #: 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 +#: includes/class.cooked-recipe-meta.php:779 +#: includes/class.cooked-recipe-meta.php:873 msgid "Heading Element:" msgstr "" @@ -1146,122 +1359,122 @@ msgid "Add Ingredient" msgstr "" #: includes/class.cooked-recipe-meta.php:643 -#: includes/class.cooked-recipe-meta.php:845 +#: includes/class.cooked-recipe-meta.php:847 msgid "Add Section Heading" msgstr "" -#: includes/class.cooked-recipe-meta.php:844 +#: includes/class.cooked-recipe-meta.php:846 msgid "Add Direction" msgstr "" -#: includes/class.cooked-recipe-meta.php:901 +#: includes/class.cooked-recipe-meta.php:904 msgid "Nutrition Information" msgstr "" -#: includes/class.cooked-recipe-meta.php:939 +#: includes/class.cooked-recipe-meta.php:942 #: includes/class.cooked-shortcodes.php:1062 msgid "Nutrition Facts" msgstr "" -#: includes/class.cooked-recipe-meta.php:957 +#: includes/class.cooked-recipe-meta.php:960 #: includes/class.cooked-shortcodes.php:1030 msgid "Amount per serving" msgstr "" -#: includes/class.cooked-recipe-meta.php:967 +#: includes/class.cooked-recipe-meta.php:970 #: includes/class.cooked-shortcodes.php:1040 msgid "% Daily Value *" msgstr "" -#: includes/class.cooked-recipe-meta.php:986 +#: includes/class.cooked-recipe-meta.php:989 #: includes/class.cooked-shortcodes.php:972 msgid "Includes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1018 +#: includes/class.cooked-recipe-meta.php:1021 #: 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:1034 +#: includes/class.cooked-recipe-meta.php:1037 msgid "Recipe Gallery Type" msgstr "" -#: includes/class.cooked-recipe-meta.php:1047 +#: includes/class.cooked-recipe-meta.php:1050 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:1061 +#: includes/class.cooked-recipe-meta.php:1064 #, 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:1065 +#: includes/class.cooked-recipe-meta.php:1068 #, 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:1070 +#: includes/class.cooked-recipe-meta.php:1073 msgid "Gallery Items" msgstr "" -#: includes/class.cooked-recipe-meta.php:1101 +#: includes/class.cooked-recipe-meta.php:1104 msgid "Recipe Information" msgstr "" -#: includes/class.cooked-recipe-meta.php:1102 +#: includes/class.cooked-recipe-meta.php:1105 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:1111 -#: includes/class.cooked-recipe-meta.php:1121 +#: includes/class.cooked-recipe-meta.php:1114 +#: includes/class.cooked-recipe-meta.php:1124 #, php-format msgid "\"%1$s\" and \"%2$s\"" msgstr "" -#: includes/class.cooked-recipe-meta.php:1113 +#: includes/class.cooked-recipe-meta.php:1116 msgid "This will allow you to include or exclude content from the shortcode output." msgstr "" -#: includes/class.cooked-recipe-meta.php:1122 +#: includes/class.cooked-recipe-meta.php:1125 msgid "Used like \"include\", but will position the content to the left or right." msgstr "" -#: includes/class.cooked-recipe-meta.php:1132 -#: 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:1135 +#: includes/class.cooked-recipe-meta.php:1181 +#: includes/class.cooked-recipe-meta.php:1212 +#: includes/class.cooked-recipe-meta.php:1237 +#: includes/class.cooked-recipe-meta.php:1261 +#: includes/class.cooked-recipe-meta.php:1321 +#: includes/class.cooked-recipe-meta.php:1366 +#: includes/class.cooked-recipe-meta.php:1396 +#: includes/class.cooked-recipe-meta.php:1441 #: includes/class.cooked-recipe-meta.php:1564 msgid "Available Variables" msgstr "" -#: includes/class.cooked-recipe-meta.php:1136 +#: includes/class.cooked-recipe-meta.php:1139 #: 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:1140 +#: includes/class.cooked-recipe-meta.php:1143 #: includes/class.cooked-shortcodes.php:447 #: includes/class.cooked-shortcodes.php:635 msgid "Difficulty" msgstr "" -#: includes/class.cooked-recipe-meta.php:1141 +#: includes/class.cooked-recipe-meta.php:1144 msgid "Servings Switcher" msgstr "" -#: includes/class.cooked-recipe-meta.php:1142 +#: includes/class.cooked-recipe-meta.php:1145 #: includes/class.cooked-settings.php:229 #: includes/class.cooked-shortcodes.php:718 #: includes/class.cooked-shortcodes.php:721 @@ -1269,241 +1482,233 @@ msgstr "" msgid "Category" msgstr "" -#: includes/class.cooked-recipe-meta.php:1143 +#: includes/class.cooked-recipe-meta.php:1146 msgid "Print Mode" msgstr "" -#: includes/class.cooked-recipe-meta.php:1144 +#: includes/class.cooked-recipe-meta.php:1147 msgid "Full-Screen Mode" msgstr "" -#: includes/class.cooked-recipe-meta.php:1164 +#: includes/class.cooked-recipe-meta.php:1167 msgid "This will display the list of ingredients, added via the \"Ingredients\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1170 +#: includes/class.cooked-recipe-meta.php:1173 msgid "This will allow you to hide or show the checkboxes:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1180 +#: includes/class.cooked-recipe-meta.php:1183 msgid "Show checkboxes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1181 +#: includes/class.cooked-recipe-meta.php:1184 msgid "Hide checkboxes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1195 +#: includes/class.cooked-recipe-meta.php:1198 msgid "This will display the list of directions, added via the \"Directions\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1201 +#: includes/class.cooked-recipe-meta.php:1204 msgid "This will allow you to hide or show the numbers:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1211 +#: includes/class.cooked-recipe-meta.php:1214 msgid "Show numbers" msgstr "" -#: includes/class.cooked-recipe-meta.php:1212 +#: includes/class.cooked-recipe-meta.php:1215 msgid "Hide numbers" msgstr "" -#: includes/class.cooked-recipe-meta.php:1225 +#: includes/class.cooked-recipe-meta.php:1228 msgid "Featured Image" msgstr "" -#: includes/class.cooked-recipe-meta.php:1226 +#: includes/class.cooked-recipe-meta.php:1229 msgid "This will display the featured image, if one is set." msgstr "" -#: includes/class.cooked-recipe-meta.php:1236 -#: includes/class.cooked-recipe-meta.php:1260 -#: includes/class.cooked-recipe-meta.php:1365 +#: includes/class.cooked-recipe-meta.php:1239 +#: includes/class.cooked-recipe-meta.php:1263 +#: includes/class.cooked-recipe-meta.php:1368 msgid "None" msgstr "" -#: includes/class.cooked-recipe-meta.php:1249 +#: includes/class.cooked-recipe-meta.php:1252 msgid "Nutrition Label" msgstr "" -#: includes/class.cooked-recipe-meta.php:1250 +#: includes/class.cooked-recipe-meta.php:1253 msgid "This will display the Nutrition Facts label, if data is present." msgstr "" -#: includes/class.cooked-recipe-meta.php:1276 +#: includes/class.cooked-recipe-meta.php:1279 msgid "This will display the gallery, if one is set or created from the \"Gallery\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1284 +#: includes/class.cooked-recipe-meta.php:1287 msgid "Set the width of the gallery." msgstr "" -#: includes/class.cooked-recipe-meta.php:1291 +#: includes/class.cooked-recipe-meta.php:1294 msgid "Set the image size ratio." msgstr "" -#: includes/class.cooked-recipe-meta.php:1301 +#: includes/class.cooked-recipe-meta.php:1304 msgid "Set the navigation style." msgstr "" -#: includes/class.cooked-recipe-meta.php:1308 +#: includes/class.cooked-recipe-meta.php:1311 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:1323 +#: includes/class.cooked-recipe-meta.php:1326 #, 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:1328 +#: includes/class.cooked-recipe-meta.php:1331 #, 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:1333 +#: includes/class.cooked-recipe-meta.php:1336 #, 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:1338 +#: includes/class.cooked-recipe-meta.php:1341 #, php-format msgid "\"%1$s\" or \"%2$s\"" msgstr "" -#: includes/class.cooked-recipe-meta.php:1355 +#: includes/class.cooked-recipe-meta.php:1358 msgid "This will display the excerpt, if one is available from the \"Layout & Content\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1379 +#: includes/class.cooked-recipe-meta.php:1382 msgid "This will display the notes, if one is available from the \"Layout & Content\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1385 +#: includes/class.cooked-recipe-meta.php:1388 msgid "This will allow you to hide or show the header for the notes section:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1395 +#: includes/class.cooked-recipe-meta.php:1398 msgid "Show header" msgstr "" -#: includes/class.cooked-recipe-meta.php:1396 +#: includes/class.cooked-recipe-meta.php:1399 msgid "Hide header" msgstr "" -#: includes/class.cooked-recipe-meta.php:1410 +#: includes/class.cooked-recipe-meta.php:1413 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:1419 +#: includes/class.cooked-recipe-meta.php:1422 #, php-format msgid "\"%1$s\", \"%2$s\" and \"%3$s\"" msgstr "" -#: includes/class.cooked-recipe-meta.php:1421 +#: includes/class.cooked-recipe-meta.php:1424 msgid "Use just one or a combination of all three to set the timer length" msgstr "" -#: includes/class.cooked-recipe-meta.php:1428 +#: includes/class.cooked-recipe-meta.php:1431 msgid "Add a short description for this timer, if applicable." msgstr "" -#: includes/class.cooked-recipe-meta.php:1440 +#: includes/class.cooked-recipe-meta.php:1443 msgid "Time in seconds" msgstr "" -#: includes/class.cooked-recipe-meta.php:1441 +#: includes/class.cooked-recipe-meta.php:1444 msgid "Time in minutes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1442 +#: includes/class.cooked-recipe-meta.php:1445 msgid "Time in hours" msgstr "" -#: includes/class.cooked-recipe-meta.php:1443 +#: includes/class.cooked-recipe-meta.php:1446 msgid "Timer Description" msgstr "" -#: includes/class.cooked-recipe-meta.php:1456 +#: includes/class.cooked-recipe-meta.php:1459 msgid "Next & Previous Recipe Navigation" msgstr "" -#: includes/class.cooked-recipe-meta.php:1457 +#: includes/class.cooked-recipe-meta.php:1460 msgid "This will display navigation links to the next and previous recipes." msgstr "" -#: includes/class.cooked-recipe-meta.php:1461 +#: includes/class.cooked-recipe-meta.php:1464 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 +#: includes/class.cooked-recipe-meta.php:1469 msgid "Usage" msgstr "" -#: includes/class.cooked-recipe-meta.php:1468 +#: includes/class.cooked-recipe-meta.php:1471 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 +#: includes/class.cooked-recipe-meta.php:1484 +#: includes/class.cooked-related-recipes.php:34 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." +#: includes/class.cooked-recipe-meta.php:1485 +msgid "Displays a grid of related recipes based on shared terms in any of the recipe taxonomies (categories, cuisines, cooking methods, tags, diets), shown in random order. No cache or pre-calculation." msgstr "" -#: includes/class.cooked-recipe-meta.php:1490 +#: includes/class.cooked-recipe-meta.php:1493 msgid "Specify a recipe ID. If not provided, uses the current recipe." msgstr "" -#: includes/class.cooked-recipe-meta.php:1497 +#: includes/class.cooked-recipe-meta.php:1500 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)." +#: includes/class.cooked-recipe-meta.php:1510 +msgid "Number of recipes to display (default: 4)." msgstr "" -#: includes/class.cooked-recipe-meta.php:1514 -msgid "Number of columns in the grid (default: 3)." +#: includes/class.cooked-recipe-meta.php:1517 +msgid "Number of columns in the grid (default: 2)." msgstr "" -#: includes/class.cooked-recipe-meta.php:1524 +#: includes/class.cooked-recipe-meta.php:1527 msgid "Hide recipe card images." msgstr "" -#: includes/class.cooked-recipe-meta.php:1531 +#: includes/class.cooked-recipe-meta.php:1534 msgid "Hide recipe card excerpts." msgstr "" -#: includes/class.cooked-recipe-meta.php:1541 +#: includes/class.cooked-recipe-meta.php:1544 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." +#: includes/class.cooked-recipe-meta.php:1551 +msgid "Toggle which taxonomies are used: match_categories, match_cuisines, match_cooking_methods, match_tags, match_diets (default: true)." msgstr "" #: includes/class.cooked-recipe-meta.php:1558 -msgid "Weight Options:" +msgid "Matching 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." +msgid "Set to false to exclude a taxonomy from related recipes, e.g. match_cuisines=\"false\" to ignore cuisines." msgstr "" #: includes/class.cooked-recipe-meta.php:1566 @@ -1529,59 +1734,55 @@ msgstr "" msgid "true/false" msgstr "" -#: includes/class.cooked-recipe-meta.php:1574 -msgid "Numeric value" -msgstr "" - -#: includes/class.cooked-recipe-meta.php:1576 +#: includes/class.cooked-recipe-meta.php:1575 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 -#: includes/class.cooked-recipes.php:322 +#: includes/class.cooked-recipes.php:267 +#: includes/class.cooked-recipes.php:321 #: templates/front/recipe-single.php:47 #, php-format msgid "By %s" msgstr "" #. translators: For showing "All" of a taxonomy (ex: "All Burgers") -#: includes/class.cooked-recipes.php:384 +#: includes/class.cooked-recipes.php:383 #, php-format msgid "All %s" msgstr "" -#: includes/class.cooked-recipes.php:651 +#: includes/class.cooked-recipes.php:724 msgid "Beginner" msgstr "" -#: includes/class.cooked-recipes.php:652 +#: includes/class.cooked-recipes.php:725 msgid "Intermediate" msgstr "" -#: includes/class.cooked-recipes.php:653 +#: includes/class.cooked-recipes.php:726 msgid "Advanced" msgstr "" -#: includes/class.cooked-recipes.php:679 +#: includes/class.cooked-recipes.php:752 msgid "Cooked Gallery" msgstr "" -#: includes/class.cooked-recipes.php:683 +#: includes/class.cooked-recipes.php:756 msgid "Envira Gallery" msgstr "" -#: includes/class.cooked-recipes.php:687 +#: includes/class.cooked-recipes.php:760 msgid "Soliloquy Slider" msgstr "" -#: includes/class.cooked-recipes.php:691 +#: includes/class.cooked-recipes.php:764 msgid "Slider Revolution" msgstr "" #. translators: singular and plural quarter "serving" size -#: includes/class.cooked-recipes.php:766 +#: includes/class.cooked-recipes.php:839 #, php-format msgid "Quarter (%s Serving)" msgid_plural "Quarter (%s Servings)" @@ -1589,7 +1790,7 @@ msgstr[0] "" msgstr[1] "" #. translators: singular and plural quarter "serving" size -#: includes/class.cooked-recipes.php:769 +#: includes/class.cooked-recipes.php:842 #, php-format msgid "Half (%s Serving)" msgid_plural "Half (%s Servings)" @@ -1597,7 +1798,7 @@ msgstr[0] "" msgstr[1] "" #. translators: singular and plural quarter "serving" size -#: includes/class.cooked-recipes.php:772 +#: includes/class.cooked-recipes.php:845 #, php-format msgid "Default (%s Serving)" msgid_plural "Default (%s Servings)" @@ -1605,102 +1806,89 @@ msgstr[0] "" msgstr[1] "" #. translators: singular and plural quarter "serving" size -#: includes/class.cooked-recipes.php:775 +#: includes/class.cooked-recipes.php:848 #, php-format msgid "Double (%s Servings)" msgstr "" #. translators: singular and plural quarter "serving" size -#: includes/class.cooked-recipes.php:778 +#: includes/class.cooked-recipes.php:851 #, php-format msgid "Triple (%s Servings)" msgstr "" -#: includes/class.cooked-recipes.php:792 +#: includes/class.cooked-recipes.php:865 #: includes/class.cooked-shortcodes.php:448 msgid "Yields" msgstr "" #. translators: singular and plural "serving" sizes -#: includes/class.cooked-recipes.php:796 -#: includes/class.cooked-recipes.php:807 +#: includes/class.cooked-recipes.php:869 +#: includes/class.cooked-recipes.php:880 #, php-format msgid "%s Serving" msgid_plural "%s Servings" msgstr[0] "" msgstr[1] "" -#: includes/class.cooked-recipes.php:904 -#: includes/class.cooked-recipes.php:918 +#: includes/class.cooked-recipes.php:977 +#: includes/class.cooked-recipes.php:991 msgid "or" msgstr "" #. translators: singular and plural "steps" -#: includes/class.cooked-recipes.php:962 +#: includes/class.cooked-recipes.php:1035 #: includes/class.cooked-seo.php:83 #, php-format msgid "Step %d" msgstr "" -#: includes/class.cooked-recipes.php:1022 +#: includes/class.cooked-recipes.php:1095 msgid "Browse" msgstr "" -#: includes/class.cooked-recipes.php:1040 +#: includes/class.cooked-recipes.php:1113 #: includes/class.cooked-settings.php:157 msgid "No categories" msgstr "" -#: includes/class.cooked-recipes.php:1043 +#: includes/class.cooked-recipes.php:1116 #: 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:1045 +#: includes/class.cooked-recipes.php:1118 #: includes/class.cooked-taxonomies.php:41 #: includes/widgets/recipe-categories.php:48 msgid "All Categories" msgstr "" -#: includes/class.cooked-recipes.php:1116 +#: includes/class.cooked-recipes.php:1189 msgid "Find a recipe..." msgstr "" -#: includes/class.cooked-recipes.php:1118 +#: includes/class.cooked-recipes.php:1191 msgid "Search" msgstr "" -#: includes/class.cooked-recipes.php:1131 +#: includes/class.cooked-recipes.php:1204 msgid "Newest first" msgstr "" -#: includes/class.cooked-recipes.php:1135 +#: includes/class.cooked-recipes.php:1208 msgid "Oldest first" msgstr "" -#: includes/class.cooked-recipes.php:1139 +#: includes/class.cooked-recipes.php:1212 msgid "Alphabetical (A-Z)" msgstr "" -#: includes/class.cooked-recipes.php:1143 +#: includes/class.cooked-recipes.php:1216 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 "" @@ -2074,14 +2262,6 @@ msgstr "" 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:150 #, php-format @@ -2096,24 +2276,24 @@ msgstr "" msgid "Fullscreen" msgstr "" -#: includes/class.cooked-shortcodes.php:1113 +#: includes/class.cooked-shortcodes.php:1114 msgid "Invalid recipe ID specified. Please provide a valid numeric recipe ID." msgstr "" -#: includes/class.cooked-shortcodes.php:1123 +#: includes/class.cooked-shortcodes.php:1124 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 +#: includes/class.cooked-shortcodes.php:1131 msgid "Recipe not found." msgstr "" -#: includes/class.cooked-shortcodes.php:1134 +#: includes/class.cooked-shortcodes.php:1135 #, php-format msgid "The specified ID (%d) is not a recipe." msgstr "" -#: includes/class.cooked-shortcodes.php:1136 +#: includes/class.cooked-shortcodes.php:1137 #, php-format msgid "No post found with ID %d." msgstr "" @@ -2171,6 +2351,52 @@ msgid_plural "%s Recipes" msgstr[0] "" msgstr[1] "" +#: includes/class.cooked-updates.php:150 +msgid "Flush rewrite rules" +msgstr "" + +#: includes/class.cooked-updates.php:151 +msgid "Refreshes permalink rules for recipe and profile URLs." +msgstr "" + +#: includes/class.cooked-updates.php:154 +msgid "Fix recipe line endings" +msgstr "" + +#: includes/class.cooked-updates.php:155 +msgid "Normalizes line endings in recipe content for exporter/importer compatibility." +msgstr "" + +#: includes/class.cooked-updates.php:158 +msgid "Purge legacy related recipes cache" +msgstr "" + +#: includes/class.cooked-updates.php:159 +msgid "Removes old transients and options from the previous related-recipes cache." +msgstr "" + +#: includes/class.cooked-updates.php:162 +msgid "Remove recipes from user meta" +msgstr "" + +#: includes/class.cooked-updates.php:163 +msgid "Removes the legacy \"recipes\" key from all users' cooked_user_meta." +msgstr "" + +#: includes/class.cooked-updates.php:196 +msgid "Tool name is required." +msgstr "" + +#: includes/class.cooked-updates.php:207 +#, php-format +msgid "Unknown tool: %s." +msgstr "" + +#: includes/class.cooked-updates.php:210 +#, php-format +msgid "Tool method %s does not exist." +msgstr "" + #: includes/class.cooked-widgets.php:38 msgid "Edit Recipe(s)..." msgstr "" diff --git a/package-lock.json b/package-lock.json index 525134c..f3e3eda 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "cooked", - "version": "1.12.0", + "version": "1.13.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cooked", - "version": "1.12.0", + "version": "1.13.0", "license": "ISC", "devDependencies": { "@playwright/test": "^1.48.2", @@ -106,6 +106,7 @@ "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=8.0.0" } @@ -129,6 +130,7 @@ "integrity": "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=14" }, @@ -142,6 +144,7 @@ "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, @@ -168,6 +171,7 @@ "integrity": "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", @@ -598,6 +602,7 @@ "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" @@ -625,6 +630,7 @@ "integrity": "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1", @@ -653,6 +659,7 @@ "integrity": "sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=14" } @@ -1009,13 +1016,14 @@ } }, "node_modules/@playwright/test": { - "version": "1.58.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.0.tgz", - "integrity": "sha512-fWza+Lpbj6SkQKCrU6si4iu+fD2dD3gxNHFhUPxsfXBPhnv3rRSQVd0NtBUT9Z/RhF/boCBcuUaMUSTRTopjZg==", + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.2.tgz", + "integrity": "sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { - "playwright": "1.58.0" + "playwright": "1.58.2" }, "bin": { "playwright": "cli.js" @@ -1038,9 +1046,9 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.11.2.tgz", - "integrity": "sha512-GBY0+2lI9fDrjgb5dFL9+enKXqyOPok9PXg/69NVkjW3bikbK9RQrNrI3qccQXmDNN7ln4j/yL89Qgvj/tfqrw==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.13.0.tgz", + "integrity": "sha512-46BZJYJjc/WwmKjsvDFykHtXrtomsCIrwYQPOP7VfMJoZY2bsDF9oROBABR3paDjDcmkUye1Pb1BqdcdiipaWA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1048,7 +1056,7 @@ "extract-zip": "^2.0.1", "progress": "^2.0.3", "proxy-agent": "^6.5.0", - "semver": "^7.7.3", + "semver": "^7.7.4", "tar-fs": "^3.1.1", "yargs": "^17.7.2" }, @@ -1222,11 +1230,12 @@ } }, "node_modules/@types/node": { - "version": "20.19.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.30.tgz", - "integrity": "sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==", + "version": "20.19.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.33.tgz", + "integrity": "sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~6.21.0" } @@ -1282,9 +1291,9 @@ } }, "node_modules/@wordpress/e2e-test-utils-playwright": { - "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==", + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.40.0.tgz", + "integrity": "sha512-7EMx/5R0l9mlR4s01I06x8bw7qq30VlU98T/tvYJa+ycFQK3oetkoPyiNfki2Y2SILQGjI3Mu4MSV1NPCa/mEw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -1304,11 +1313,12 @@ } }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1488,9 +1498,9 @@ } }, "node_modules/atomically": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.0.tgz", - "integrity": "sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.1.tgz", + "integrity": "sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1509,9 +1519,9 @@ } }, "node_modules/b4a": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", - "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.0.tgz", + "integrity": "sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -1539,11 +1549,14 @@ } }, "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } }, "node_modules/bare-events": { "version": "2.8.2", @@ -1551,6 +1564,7 @@ "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "peerDependencies": { "bare-abort-controller": "*" }, @@ -1561,9 +1575,9 @@ } }, "node_modules/bare-fs": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.3.tgz", - "integrity": "sha512-9+kwVx8QYvt3hPWnmb19tPnh38c6Nihz8Lx3t0g9+4GoIf3/fTgYwM4Z6NxgI+B9elLQA7mLE9PpqcWtOMRDiQ==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.4.tgz", + "integrity": "sha512-POK4oplfA7P7gqvetNmCs4CNtm9fNsx+IAh7jH7GgU0OJdge2rso0R20TNWVq6VoWcCvsTdlNDaleLHGaKx8CA==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -1609,14 +1623,15 @@ } }, "node_modules/bare-stream": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz", - "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.8.0.tgz", + "integrity": "sha512-reUN0M2sHRqCdG4lUK3Fw8w98eeUIZHL5c3H7Mbhk2yVBL+oofgaIp0ieLfD5QXwPCypBpmEEKU2WZKzbAk8GA==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "streamx": "^2.21.0" + "streamx": "^2.21.0", + "teex": "^1.0.1" }, "peerDependencies": { "bare-buffer": "*", @@ -1664,9 +1679,9 @@ "license": "MIT" }, "node_modules/basic-ftp": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.1.0.tgz", - "integrity": "sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.2.0.tgz", + "integrity": "sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw==", "dev": true, "license": "MIT", "engines": { @@ -1699,13 +1714,16 @@ } }, "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", + "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/braces": { @@ -1862,9 +1880,9 @@ } }, "node_modules/chromium-bidi": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-13.0.1.tgz", - "integrity": "sha512-c+RLxH0Vg2x2syS9wPw378oJgiJNXtYXUvnVAldUlt5uaHekn0CCU7gPksNgHjrH1qFhmjVXQj4esvuthuC7OQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-14.0.0.tgz", + "integrity": "sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2089,7 +2107,8 @@ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1507524.tgz", "integrity": "sha512-OjaNE7qpk6GRTXtqQjAE5bGx6+c4F1zZH0YXtpZQLM92HNXx4zMAaqlKhP4T52DosG6hDW8gPMNhGOF8xbwk/w==", "dev": true, - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "peer": true }, "node_modules/dot-case": { "version": "3.0.4", @@ -3560,13 +3579,13 @@ } }, "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.6.tgz", + "integrity": "sha512-kQAVowdR33euIqeA0+VZTDqU+qo1IeVY+hrKYtZMio3Pg0P0vuh/kwRylLUddJhB6pf3q/botcOvRtx4IN1wqQ==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^5.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -3905,13 +3924,13 @@ } }, "node_modules/playwright": { - "version": "1.58.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.0.tgz", - "integrity": "sha512-2SVA0sbPktiIY/MCOPX8e86ehA/e+tDNq+e5Y8qjKYti2Z/JG7xnronT/TXTIkKbYGWlCbuucZ6dziEgkoEjQQ==", + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz", + "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.58.0" + "playwright-core": "1.58.2" }, "bin": { "playwright": "cli.js" @@ -3924,9 +3943,9 @@ } }, "node_modules/playwright-core": { - "version": "1.58.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.0.tgz", - "integrity": "sha512-aaoB1RWrdNi3//rOeKuMiS65UCcgOVljU46At6eFcOFPFHWtd2weHRRow6z/n+Lec0Lvu0k9ZPKJSjPugikirw==", + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", + "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -4079,18 +4098,18 @@ } }, "node_modules/puppeteer-core": { - "version": "24.36.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.36.1.tgz", - "integrity": "sha512-L7ykMWc3lQf3HS7ME3PSjp7wMIjJeW6+bKfH/RSTz5l6VUDGubnrC2BKj3UvM28Y5PMDFW0xniJOZHBZPpW1dQ==", + "version": "24.37.5", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.37.5.tgz", + "integrity": "sha512-ybL7iE78YPN4T6J+sPLO7r0lSByp/0NN6PvfBEql219cOnttoTFzCWKiBOjstXSqi/OKpwae623DWAsL7cn2MQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.11.2", - "chromium-bidi": "13.0.1", + "@puppeteer/browsers": "2.13.0", + "chromium-bidi": "14.0.0", "debug": "^4.4.3", - "devtools-protocol": "0.0.1551306", + "devtools-protocol": "0.0.1566079", "typed-query-selector": "^2.12.0", - "webdriver-bidi-protocol": "0.4.0", + "webdriver-bidi-protocol": "0.4.1", "ws": "^8.19.0" }, "engines": { @@ -4098,9 +4117,9 @@ } }, "node_modules/puppeteer-core/node_modules/devtools-protocol": { - "version": "0.0.1551306", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1551306.tgz", - "integrity": "sha512-CFx8QdSim8iIv+2ZcEOclBKTQY6BI1IEDa7Tm9YkwAXzEWFndTEzpTo5jAUhSnq24IC7xaDw0wvGcm96+Y3PEg==", + "version": "0.0.1566079", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1566079.tgz", + "integrity": "sha512-MJfAEA1UfVhSs7fbSQOG4czavUp1ajfg6prlAN0+cmfa2zNjaIbvq8VneP7do1WAQQIvgNJWSMeP6UyI90gIlQ==", "dev": true, "license": "BSD-3-Clause" }, @@ -4368,9 +4387,9 @@ } }, "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -4678,9 +4697,9 @@ } }, "node_modules/text-decoder": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", - "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", + "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -4705,20 +4724,20 @@ } }, "node_modules/tldts-core": { - "version": "7.0.19", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.19.tgz", - "integrity": "sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==", + "version": "7.0.23", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.23.tgz", + "integrity": "sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==", "dev": true, "license": "MIT" }, "node_modules/tldts-icann": { - "version": "7.0.19", - "resolved": "https://registry.npmjs.org/tldts-icann/-/tldts-icann-7.0.19.tgz", - "integrity": "sha512-PZgda8E2cXMNa7QlBbiZh3vcS8UaPTDRIBmcGPDlujSMtQLrzjvikeJxzQSqWxn3muaMJ7BsC+aL464Yl2I6cA==", + "version": "7.0.23", + "resolved": "https://registry.npmjs.org/tldts-icann/-/tldts-icann-7.0.23.tgz", + "integrity": "sha512-LMc6V1KOHFjKDU8wyDsIEJdV8o2bpc2OaYw2NxncJB2oZxJMPpiNVAbiu1HnqsUy81fkK1QWwFztVqY81hUFEg==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^7.0.19" + "tldts-core": "^7.0.23" } }, "node_modules/to-regex-range": { @@ -4979,9 +4998,9 @@ "license": "Apache-2.0" }, "node_modules/webdriver-bidi-protocol": { - "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==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.1.tgz", + "integrity": "sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==", "dev": true, "license": "Apache-2.0" }, diff --git a/package.json b/package.json index 99d191b..c8bd75c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cooked", - "version": "1.12.0", + "version": "1.13.0", "description": "Cooked is the absolute best way to create & display recipes with WordPress. SEO optimized (rich snippets), galleries, cooking timers, printable recipes and much more.", "main": "index.js", "scripts": { diff --git a/readme.md b/readme.md index 56736c7..7034583 100644 --- a/readme.md +++ b/readme.md @@ -33,6 +33,8 @@ Most recipe plugins require that you purchase a PRO version for features like nu * Cooking times with clickable, interactive timers. * Very developer-friendly with loads of hooks & filters. * Servings switcher to adjust ingredient amounts. +* Ingredient Substitutions - Add alternative ingredients for dietary restrictions or preferences. +* CSV Import - Bulk import recipes from CSV files with support for ingredients, directions, substitutions, and more. * And more to come... Of course, if you want even more, you can always check out the [PRO](https://cooked.pro) version of Cooked. It adds features like ratings & favorites, recipe submissions, and so much more. @@ -69,6 +71,11 @@ wp i18n make-pot /wp-content/themes/cooked/ /wp-content/themes/cooked/languages/ ``` bash gulp build ``` +#### Creating distribution bundle +``` bash +npm run bundle +``` +Creates a `cooked.zip` file ready for distribution, excluding development files. ## Documentation diff --git a/readme.txt b/readme.txt index cbc37a0..8ddc143 100644 --- a/readme.txt +++ b/readme.txt @@ -2,8 +2,8 @@ Contributors: xjsv, boxystudio Tags: recipe, recipes, food, cooking, nutrition Requires at least: 4.7 -Tested up to: 6.9 -Stable tag: 1.12.0 +Tested up to: 6.9.1 +Stable tag: 1.13.0 Requires PHP: 7.4 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -41,6 +41,8 @@ Most recipe plugins require that you purchase a PRO version for features like nu * Cooking times with clickable, interactive timers. * Very developer-friendly with loads of hooks & filters. * Servings switcher to adjust ingredient amounts. +* Ingredient Substitutions - Add alternative ingredients for dietary restrictions or preferences. +* CSV Import - Bulk import recipes from CSV files with support for ingredients, directions, substitutions, and more. * And more to come... Of course, if you want even more, you can always check out the [PRO](https://cooked.pro) version of Cooked. It adds features like ratings & favorites, recipe submissions, and so much more. @@ -78,10 +80,21 @@ Please report security bugs found in the source code of the Cooked plugin throug == Upgrade Notice == -Version 1.12.0 includes the ability to add ingredients substitutions. +Version 1.13.0 includes CSV import functionality, changes to the [cooked-related-recipes] shortcode, and other minor improvements and bug fixes. == Changelog == += 1.13.0 = +* **NEW:** Added CSV import functionality for bulk importing recipes from CSV files. Supports all recipe fields including ingredients with substitutions, directions, nutrition data, categories, and tags. +* **TWEAK:** Simplified the way the [cooked-related-recipes] shortcode works. +* **FIX:** Fixed a bug with the recipe directions and ingredients not being sortable in mobile devices. +* **FIX:** Fixed a bug when toggling full screen view in recipe fields that use the WP Editor. +* **FIX:** Fixed bug when changing image under recipe instructions steps where the image thumbnail was not updated with the replaced photo after clicking "Use this image". +* **FIX:** Fixed styling issue in numbering with recipes with 10+ instructions steps. +* **NEW:** Added recipe instruction steps counter in the editing view. +* **FIX:** Fixed a bug with full screen mode not working inside Elementor. +* **TWEAK:** Other minor improvements and bug fixes. + = 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. diff --git a/templates/admin/import.php b/templates/admin/import.php index 44585fe..acf87a2 100644 --- a/templates/admin/import.php +++ b/templates/admin/import.php @@ -9,6 +9,7 @@ require_once COOKED_DIR . 'includes/class.cooked-import.php'; require_once COOKED_DIR . 'includes/class.cooked-delicious-recipes.php'; require_once COOKED_DIR . 'includes/class.cooked-recipe-maker.php'; + require_once COOKED_DIR . 'includes/class.cooked-csv-import.php'; global $_cooked_settings; diff --git a/templates/front/recipe.php b/templates/front/recipe.php index 0c42156..8f0bb1d 100644 --- a/templates/front/recipe.php +++ b/templates/front/recipe.php @@ -15,8 +15,10 @@ $recipe_content = ( isset($recipe_settings['content']) ? $recipe_settings['content'] : Cooked_Recipes::default_content() ); $recipe_content = apply_filters( 'cooked_pre_recipe_content', $recipe_content, $recipe_id ); -if ( is_feed() && !is_admin() || is_singular() && !is_admin() ): +global $cooked_recipe_layout_content; +$cooked_recipe_layout_content = $recipe_content; +if ( is_feed() && !is_admin() || is_singular() && !is_admin() ): $schema_array = Cooked_SEO::schema_values( $recipe_settings ); if ( !empty($schema_array) && is_array($schema_array) ): @@ -27,21 +29,11 @@ global $wp_embed; $recipe_content = $wp_embed->autoembed( $recipe_content ); - $recipe_content .= '
'; - $recipe_content .= do_shortcode( Cooked_Recipes::fsm_content() ); - $recipe_content .= '
' . esc_html( $recipe_settings['title'] ) . '
'; - $recipe_content .= '
'; - $recipe_content .= '' . __( 'Ingredients', 'cooked' ) . ''; - $recipe_content .= '' . __( 'Directions', 'cooked' ) . ''; - $recipe_content .= '
'; - $recipe_content .= '
'; + $recipe_content .= Cooked_Recipes::get_fsm_markup( $recipe_id, $recipe_settings ); $recipe_content .= isset($recipe_seo_content) ? $recipe_seo_content : ''; - else: - $recipe_content = strip_shortcodes( $recipe_content ); - endif; echo apply_filters( 'cooked_recipe_content', $recipe_content, $recipe_id ); \ No newline at end of file diff --git a/tests/test_data/recipes-large.csv b/tests/test_data/recipes-large.csv new file mode 100644 index 0000000..218322d --- /dev/null +++ b/tests/test_data/recipes-large.csv @@ -0,0 +1,11 @@ +title,excerpt,prep_time,cook_time,difficulty_level,ingredients,directions,notes,categories,cuisine,cooking_method,tags,diet +"Simple Scrambled Eggs","Perfect fluffy scrambled eggs for breakfast",5,5,1,"4|large|Eggs||4|large|Egg Replacer|2|tbsp|Milk||2|tbsp|Almond Milk|1|tbsp|Butter|Salt and Pepper|Fresh Chives","Crack eggs into a bowl|Add milk and whisk until combined|Heat butter in a non-stick pan over medium-low heat|Pour in egg mixture|Gently stir with a spatula until cooked|Season with salt and pepper|Garnish with fresh chives","Cook low and slow for best results","Breakfast","","stovetop","eggs,breakfast,simple","halal" +"Classic Caesar Salad","Crisp romaine lettuce with homemade Caesar dressing",15,0,1,"#Salad|1|head|Romaine Lettuce|1/2|cup|Parmesan Cheese|1/4|cup|Croutons|#Dressing|2|anchovy|Anchovy Fillets||2|tbsp|Miso Paste|2|cloves|Garlic|1|tbsp|Dijon Mustard|2|tbsp|Lemon Juice|1/4|cup|Olive Oil|1/4|cup|Parmesan Cheese|Black Pepper","Wash and chop romaine lettuce|In a bowl, mash anchovies with garlic|Whisk in mustard, lemon juice, and olive oil|Stir in parmesan cheese|Toss lettuce with dressing|Top with croutons and additional parmesan|Season with black pepper","Anchovies can be omitted for a vegetarian version","Salads","Italian","no-cook","caesar,salad,romaine","" +"Beef Stroganoff","Tender beef in a creamy mushroom sauce served over egg noodles",20,45,2,"1|lb|Beef Sirloin||1|lb|Mushrooms (for vegetarian)|2|tbsp|Butter|1|medium|Onion|8|oz|Mushrooms|2|tbsp|All-Purpose Flour|1|cup|Beef Broth||1|cup|Vegetable Broth|1|tbsp|Worcestershire Sauce|1/2|cup|Sour Cream||1/2|cup|Coconut Cream|Salt and Pepper|Egg Noodles|Fresh Parsley","Cut beef into thin strips|Season with salt and pepper|Heat butter in a large skillet|Brown beef on all sides, remove and set aside|Add onion and mushrooms, cook until softened|Sprinkle with flour and stir|Add broth and Worcestershire sauce|Return beef to pan, simmer 15 minutes|Stir in sour cream|Serve over egg noodles|Garnish with fresh parsley","Don't boil after adding sour cream or it will curdle","Main Dishes","Russian","stovetop","beef,stroganoff,comfort food","" +"Banana Bread","Moist and flavorful banana bread perfect for breakfast or snack",15,60,1,"3|ripe|Bananas|1/3|cup|Butter||1/3|cup|Coconut Oil|3/4|cup|Granulated Sugar|1|large|Egg||1|tbsp|Flaxseed Meal + 3 tbsp Water|1|tsp|Vanilla Extract|1|tsp|Baking Soda|Pinch of Salt|1 1/2|cups|All-Purpose Flour","Preheat oven to 350°F (175°C)|Grease a 9x5 inch loaf pan|Mash bananas in a large bowl|Mix in melted butter and sugar|Beat in egg and vanilla|Stir in baking soda and salt|Fold in flour until just combined|Pour into prepared pan|Bake for 60 minutes until toothpick comes out clean|Cool in pan 10 minutes, then transfer to wire rack","Best with very ripe bananas","Breakfast,Desserts","","baking","banana,bread,baking","" +"Chicken Tikka Masala","Creamy Indian curry with tender chicken in a spiced tomato sauce",30,40,2,"#Marinade|1|lb|Chicken Breast||1|lb|Tofu|1|cup|Plain Yogurt||1|cup|Coconut Yogurt|2|tbsp|Lemon Juice|2|tsp|Garam Masala|1|tsp|Turmeric|1|tsp|Cumin|#Sauce|1|tbsp|Butter||1|tbsp|Coconut Oil|1|medium|Onion|3|cloves|Garlic|1|tbsp|Ginger|1|tbsp|Garam Masala|1|tsp|Paprika|1|can|Tomato Sauce|1|cup|Heavy Cream||1|cup|Coconut Cream|Fresh Cilantro|Basmati Rice","Cut chicken into bite-sized pieces|Mix yogurt, lemon juice, and spices for marinade|Marinate chicken for at least 30 minutes|Heat butter in a large pan|Cook chicken until browned, remove|Add onion, garlic, and ginger, cook until soft|Stir in spices and cook 1 minute|Add tomato sauce and simmer|Return chicken to pan|Stir in cream and simmer 10 minutes|Garnish with cilantro|Serve over basmati rice","Marinating overnight yields best results","Main Dishes","Indian","stovetop","chicken,curry,indian,spicy","" +"Caprese Salad","Fresh Italian salad with tomatoes, mozzarella, and basil",10,0,1,"4|large|Tomatoes|8|oz|Fresh Mozzarella|1/4|cup|Fresh Basil|2|tbsp|Olive Oil|1|tbsp|Balsamic Vinegar|Salt and Pepper","Slice tomatoes and mozzarella|Arrange on a platter alternating tomato and mozzarella|Tear basil leaves and scatter over top|Drizzle with olive oil and balsamic|Season with salt and pepper|Serve immediately","Use the best quality ingredients you can find","Salads","Italian","no-cook","caprese,tomato,mozzarella,fresh","" +"Beef and Broccoli Stir Fry","Quick and easy Chinese-inspired stir fry",15,15,1,"1|lb|Beef Sirloin||1|lb|Tempeh|1|head|Broccoli|2|cloves|Garlic|1|tbsp|Ginger|1/4|cup|Soy Sauce||1/4|cup|Tamari|2|tbsp|Honey||2|tbsp|Maple Syrup|1|tbsp|Cornstarch|2|tbsp|Vegetable Oil|Sesame Seeds|White Rice","Cut beef into thin strips|Cut broccoli into florets|Mix soy sauce, honey, and cornstarch|Heat oil in a wok or large pan|Stir-fry beef until browned, remove|Add broccoli, garlic, and ginger|Cook until broccoli is tender-crisp|Return beef to pan|Pour in sauce and stir until thickened|Garnish with sesame seeds|Serve over white rice","Cook over high heat for best results","Main Dishes","Asian","stir-frying","beef,broccoli,stir fry,quick","" +"Apple Pie","Classic American apple pie with flaky crust",45,60,2,"#Crust|2|cups|All-Purpose Flour|1|tsp|Salt|2/3|cup|Butter||2/3|cup|Shortening|4-6|tbsp|Ice Water|#Filling|6|cups|Apples|3/4|cup|Granulated Sugar|2|tbsp|All-Purpose Flour|1|tsp|Cinnamon|1/4|tsp|Nutmeg|1|tbsp|Lemon Juice|2|tbsp|Butter","Make pie crust: mix flour and salt|Cut in butter until crumbly|Add water gradually until dough forms|Divide in half, wrap and chill 30 minutes|Peel and slice apples|Mix apples with sugar, flour, and spices|Add lemon juice|Roll out bottom crust, place in pie pan|Fill with apple mixture|Dot with butter|Cover with top crust, seal edges|Cut vents in top|Bake at 425°F for 45-50 minutes until golden","Serve warm with vanilla ice cream","Desserts","American","baking","apple,pie,classic,baking","" +"Greek Salad","Fresh Mediterranean salad with feta and olives",15,0,1,"2|large|Tomatoes|1|cucumber|Cucumber|1|red|Onion|1|green|Bell Pepper|4|oz|Feta Cheese|1/2|cup|Kalamata Olives|2|tbsp|Olive Oil|1|tbsp|Red Wine Vinegar|1|tsp|Dried Oregano|Salt and Pepper","Cut tomatoes into wedges|Slice cucumber|Thinly slice onion and bell pepper|Cut feta into cubes|Mix all vegetables in a bowl|Add olives and feta|Whisk together olive oil, vinegar, and oregano|Drizzle over salad|Season with salt and pepper|Toss gently and serve","Best served immediately","Salads","Mediterranean","no-cook","greek,salad,feta,olives","diabetic" +"Chicken Noodle Soup","Comforting homemade chicken soup with vegetables and noodles",20,30,1,"1|lb|Chicken Breast||1|lb|Chickpeas|8|cups|Chicken Broth||8|cups|Vegetable Broth|2|cups|Egg Noodles|2|carrots|Carrots|2|stalks|Celery|1|medium|Onion|2|cloves|Garlic|1|tsp|Dried Thyme|Salt and Pepper|Fresh Parsley","Cut chicken into bite-sized pieces|Dice carrots, celery, and onion|Heat broth in a large pot|Add vegetables and cook until tender|Add chicken and cook until done|Stir in noodles and cook until al dente|Season with thyme, salt, and pepper|Garnish with fresh parsley|Serve hot","Perfect for cold weather","Soups","","stovetop","chicken,soup,noodles,comfort","" diff --git a/tests/test_data/recipes-medium.csv b/tests/test_data/recipes-medium.csv new file mode 100644 index 0000000..9ec6f8a --- /dev/null +++ b/tests/test_data/recipes-medium.csv @@ -0,0 +1,4 @@ +title,excerpt,prep_time,cook_time,difficulty_level,ingredients,directions,notes,categories,cuisine,cooking_method,tags,diet +"Classic Beef Lasagna","A hearty Italian lasagna with layers of pasta, meat sauce, and cheese",30,60,2,"#Meat Sauce|1|lb|Ground Beef||1|lb|Ground Turkey|1|medium|Onion|3|cloves|Garlic|1|can|Crushed Tomatoes|2|tbsp|Tomato Paste|1|tsp|Dried Oregano|1|tsp|Dried Basil|Salt and Pepper to taste|#Cheese Mixture|2|cups|Ricotta Cheese|1|cup|Mozzarella Cheese|1/2|cup|Parmesan Cheese|2|large|Eggs|1/4|cup|Fresh Parsley|#Other|12|sheets|Lasagna Noodles|2|cups|Mozzarella Cheese (for topping)","Preheat oven to 375°F (190°C)|Cook lasagna noodles according to package directions|In a large skillet, brown ground beef over medium heat|Add onion and garlic, cook until softened|Stir in crushed tomatoes, tomato paste, and seasonings|Simmer for 20 minutes|In a bowl, mix ricotta, mozzarella, parmesan, eggs, and parsley|Layer: sauce, noodles, cheese mixture, repeat|Top with remaining mozzarella|Cover with foil and bake for 45 minutes|Remove foil and bake 15 more minutes until bubbly|Let stand 10 minutes before serving","Can be frozen for up to 3 months","Main Dishes","Italian","baking","lasagna,pasta,beef,cheese","" +"Vegetarian Buddha Bowl","A colorful and nutritious bowl with quinoa, roasted vegetables, and tahini dressing",20,30,1,"#Base|1|cup|Quinoa|2|cups|Vegetable Broth|#Vegetables|1|medium|Sweet Potato|1|head|Broccoli|1|red|Bell Pepper|1|cup|Chickpeas|2|tbsp|Olive Oil|Salt and Pepper|#Dressing|1/4|cup|Tahini|2|tbsp|Lemon Juice|2|tbsp|Water|1|clove|Garlic|1|tsp|Maple Syrup||1|tsp|Honey|#Toppings|1|avocado|Avocado|2|tbsp|Pumpkin Seeds|Fresh Cilantro","Preheat oven to 400°F (200°C)|Cook quinoa in vegetable broth according to package directions|Cut sweet potato into cubes, toss with olive oil|Roast sweet potato for 20 minutes|Add broccoli and bell pepper, roast 10 more minutes|Drain and rinse chickpeas, season with salt|Whisk together tahini, lemon juice, water, garlic, and sweetener|Divide quinoa among bowls|Top with roasted vegetables and chickpeas|Drizzle with tahini dressing|Garnish with avocado, pumpkin seeds, and cilantro","Great for meal prep - keeps well for 3-4 days","Main Dishes","","roasting","buddha bowl,vegetarian,healthy,quinoa","vegetarian" +"Chocolate Lava Cake","Decadent individual chocolate cakes with a molten center",15,12,2,"4|oz|Dark Chocolate|4|tbsp|Butter||4|tbsp|Coconut Oil|2|large|Eggs|2|tbsp|Granulated Sugar|2|tbsp|All-Purpose Flour|1|tsp|Vanilla Extract|Pinch of Salt|Powdered Sugar for dusting","Preheat oven to 425°F (220°C)|Butter 4 ramekins and dust with cocoa powder|Melt chocolate and butter in a double boiler|In a separate bowl, beat eggs and sugar until pale|Fold in flour, vanilla, and salt|Stir in melted chocolate mixture|Divide batter among ramekins|Bake for 12-14 minutes until edges are set but center is soft|Let cool 1 minute, then invert onto plates|Dust with powdered sugar and serve immediately","Must be served immediately while still warm","Desserts","French","baking","chocolate,cake,decadent","" diff --git a/tests/test_data/recipes-small.csv b/tests/test_data/recipes-small.csv new file mode 100644 index 0000000..bf26429 --- /dev/null +++ b/tests/test_data/recipes-small.csv @@ -0,0 +1,2 @@ +title,excerpt,prep_time,cook_time,difficulty_level,ingredients,directions,notes,categories,cuisine,cooking_method,tags,diet +"Chocolate Chip Cookies","Classic homemade chocolate chip cookies that are soft and chewy",15,12,1,"2|cups|All-Purpose Flour|1|cup|Butter||1|cup|Margarine|1|tsp|Baking Soda|1|tsp|Salt|3/4|cup|Granulated Sugar|3/4|cup|Brown Sugar|2|large|Eggs|2|tsp|Vanilla Extract|2|cups|Chocolate Chips","Preheat oven to 375°F (190°C)|In a large bowl, cream together the butter and sugars until smooth|Beat in eggs and vanilla|In a separate bowl, combine flour, baking soda, and salt|Gradually blend into the creamed mixture|Stir in chocolate chips|Drop rounded tablespoons of dough onto ungreased cookie sheets|Bake for 9 to 11 minutes or until golden brown|Cool on baking sheet for 2 minutes before removing to wire rack","Store in an airtight container for up to 1 week","Desserts","Italian,American","baking","cookies,chocolate","low-calorie" diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 1c93e2b..eabea43 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -7,14 +7,14 @@ class ComposerStaticInit67a35766b07094746ef209d583ffb1f5 { public static $prefixLengthsPsr4 = array ( - 'N' => + 'N' => array ( 'NXP\\' => 4, ), ); public static $prefixDirsPsr4 = array ( - 'NXP\\' => + 'NXP\\' => array ( 0 => __DIR__ . '/..' . '/nxp/math-executor/src/NXP', ), diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 06f5a91..90e264a 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -1,8 +1,8 @@ array( 'name' => 'xjsv/cooked', - 'pretty_version' => '1.12.0', - 'version' => '1.12.0.0', + 'pretty_version' => '1.13.0', + 'version' => '1.13.0.0', 'reference' => null, 'type' => 'wordpress-plugin', 'install_path' => __DIR__ . '/../../', @@ -20,8 +20,8 @@ 'dev_requirement' => false, ), 'xjsv/cooked' => array( - 'pretty_version' => '1.12.0', - 'version' => '1.12.0.0', + 'pretty_version' => '1.13.0', + 'version' => '1.13.0.0', 'reference' => null, 'type' => 'wordpress-plugin', 'install_path' => __DIR__ . '/../../',