diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 9b6de3f..b5670f1 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -6,10 +6,15 @@ version: 2 updates: - - package-ecosystem: composer + - package-ecosystem: "composer" target-branch: develop - directory: / + directory: "/" schedule: - interval: weekly + interval: "weekly" allow: - dependency-type: production + - package-ecosystem: "npm" + target-branch: develop + directory: "/" + schedule: + interval: "weekly" diff --git a/assets/admin/css/style.css b/assets/admin/css/style.css index fdb546e..e8b0938 100644 --- a/assets/admin/css/style.css +++ b/assets/admin/css/style.css @@ -711,3 +711,215 @@ body .button.button-cooked-reset:hover { color:#555; } box-sizing: border-box; padding-right: 10px; } + +/* Bulk Add Modal */ +.cooked-bulk-add-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.6); + z-index: 100100; + display: flex; + align-items: center; + justify-content: center; +} +.cooked-bulk-add-modal { + background: #fff; + border-radius: 6px; + width: 600px; + max-width: 90vw; + max-height: 80vh; + display: flex; + flex-direction: column; + box-shadow: 0 5px 30px rgba(0, 0, 0, 0.3); +} +.cooked-bulk-add-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 16px 20px; + border-bottom: 1px solid #ddd; +} +.cooked-bulk-add-header h2 { + margin: 0; + font-size: 18px; + line-height: 1.3; +} +.cooked-bulk-add-close { + font-size: 24px; + text-decoration: none; + color: #666; + line-height: 1; + padding: 0 4px; +} +.cooked-bulk-add-close:hover { color: #d63638; } +.cooked-bulk-add-body { + padding: 20px; + overflow-y: auto; + flex: 1; +} +.cooked-bulk-add-help { + margin-top: 0; + color: #666; + font-size: 13px; +} +#cooked-bulk-add-textarea { + width: 100%; + min-height: 160px; + font-size: 14px; + padding: 10px; + box-sizing: border-box; + resize: vertical; +} +.cooked-bulk-add-preview { + margin-top: 16px; +} +.cooked-bulk-add-preview-label { + margin: 0 0 8px; + font-size: 13px; +} +.cooked-bulk-add-preview-notice-ingredients { + display: none; + margin: 10px 0 0; + font-size: 12px; + line-height: 1.45; + color: #b45309; + font-weight: 700; + gap: 6px; + align-items: flex-start; +} +#cooked-bulk-add-preview[data-bulk-type="ingredients"] .cooked-bulk-add-preview-notice-ingredients { + display: flex; +} +.cooked-bulk-add-preview-notice-mark { + flex-shrink: 0; + font-weight: 700; + line-height: 1.45; + color: #b45309; +} +.cooked-bulk-add-preview-notice-text { + flex: 1; + min-width: 0; + font-weight: 700; + color: #b45309; +} +.cooked-bulk-add-preview-list { + max-height: 200px; + overflow-y: auto; + border: 1px solid #ddd; + border-radius: 4px; + padding: 4px; +} +.cooked-bulk-add-preview-row { + display: flex; + align-items: center; + gap: 8px; + padding: 4px 6px; + border-bottom: 1px solid #f0f0f0; +} +.cooked-bulk-add-preview-row:last-child { border-bottom: 0; } +.cooked-bulk-add-heading-toggle { + display: flex; + align-items: center; + gap: 4px; + white-space: nowrap; + font-size: 12px; + color: #666; + cursor: pointer; + flex-shrink: 0; +} +.cooked-bulk-add-heading-toggle input[type="checkbox"] { margin: 0; } +.cooked-bulk-add-preview-text { + flex: 1; + border: 1px solid #ddd; + border-radius: 3px; + padding: 4px 8px; + font-size: 13px; +} +.cooked-bulk-add-preview-row:not(.cooked-bulk-add-preview-row-ingredient).cooked-bulk-add-is-heading .cooked-bulk-add-preview-text { font-weight: 700; } +.cooked-bulk-add-preview-row-ingredient .cooked-bulk-add-heading-line-wrap { + display: none; + flex: 1; + align-items: center; + gap: 8px; + min-width: 0; +} +.cooked-bulk-add-preview-row-ingredient.cooked-bulk-add-is-heading .cooked-bulk-add-heading-line-wrap { display: flex; } +.cooked-bulk-add-preview-row-ingredient.cooked-bulk-add-is-heading .cooked-bulk-add-parsed-amount, +.cooked-bulk-add-preview-row-ingredient.cooked-bulk-add-is-heading .cooked-bulk-add-parsed-unit, +.cooked-bulk-add-preview-row-ingredient.cooked-bulk-add-is-heading .cooked-bulk-add-parsed-name { display: none; } +.cooked-bulk-add-heading-line-label { + flex-shrink: 0; + font-size: 12px; + font-weight: 600; + color: #666; +} +.cooked-bulk-add-preview-row-ingredient .cooked-bulk-add-heading-line-wrap .cooked-bulk-add-preview-text { + flex: 1; + min-width: 0; + border: 1px solid #ddd; + border-radius: 3px; + padding: 4px 8px; + font-size: 13px; + font-weight: 600; +} +.cooked-bulk-add-preview-header { + display: flex; + align-items: center; + gap: 8px; + padding: 4px 6px 6px; + border-bottom: 1px solid #ddd; + font-size: 11px; + font-weight: 600; + color: #999; + text-transform: uppercase; + letter-spacing: 0.5px; +} +.cooked-bulk-add-col-heading { flex-shrink: 0; width: 108px; } +.cooked-bulk-add-col-amount { width: 72px; flex-shrink: 0; } +.cooked-bulk-add-col-unit { width: 108px; flex-shrink: 0; } +.cooked-bulk-add-col-name { flex: 1; } +.cooked-bulk-add-parsed-amount { + width: 72px; + flex-shrink: 0; + border: 1px solid #ddd; + border-radius: 3px; + padding: 4px 6px; + font-size: 13px; + text-align: center; +} +.cooked-bulk-add-parsed-unit { + width: 108px; + flex-shrink: 0; + border: 1px solid #ddd; + border-radius: 3px; + padding: 4px 6px; + font-size: 13px; +} +.cooked-bulk-add-parsed-name { + flex: 1; + border: 1px solid #ddd; + border-radius: 3px; + padding: 4px 6px; + font-size: 13px; +} +.cooked-bulk-add-footer { + display: flex; + align-items: center; + justify-content: flex-end; + gap: 8px; + padding: 14px 20px; + border-top: 1px solid #ddd; +} +.cooked-bulk-add-footer .button, +.cooked-bulk-add-footer .button.button-primary { + float: none; + margin: 0; + vertical-align: middle; +} +.cooked-bulk-add-spinner { + float: none !important; + margin: 0 !important; +} diff --git a/assets/admin/css/style.min.css b/assets/admin/css/style.min.css index 55b25f5..39da16c 100644 --- a/assets/admin/css/style.min.css +++ b/assets/admin/css/style.min.css @@ -1 +1 @@ -.cooked-clearfix:after{content:"";display:table;clear:both}#post-body-content #postdivrich{display:none}body.post-type-cp_recipe .wp-list-table tfoot th.check-column,body.post-type-cp_recipe .wp-list-table thead th.check-column{padding:15px 0 0 7px}body.post-type-cp_recipe .wp-list-table tfoot td,body.post-type-cp_recipe .wp-list-table tfoot th,body.post-type-cp_recipe .wp-list-table thead td,body.post-type-cp_recipe .wp-list-table thead th{padding:10px 10px}body.post-type-cp_recipe .wp-list-table tfoot th.sortable a,body.post-type-cp_recipe .wp-list-table tfoot th.sorted a,body.post-type-cp_recipe .wp-list-table thead th.sortable a,body.post-type-cp_recipe .wp-list-table thead th.sorted a{padding-left:0;padding-right:0}body.post-type-cp_recipe .wp-list-table tbody th.check-column{padding:15px 0 0 10px}body.post-type-cp_recipe .wp-list-table tbody td,body.post-type-cp_recipe .wp-list-table tbody th{padding:12px 10px}body.post-type-cp_recipe .wp-list-table tbody td.column-title strong{margin-top:6px}body.post-type-cp_recipe .wp-list-table tbody td.column-title strong .row-title{padding-top:10px;font-size:1rem!important}th.column-featured_image{width:50px;text-align:center}td.column-featured_image{width:50px;text-align:center}.cooked-admin-recipes-list-image img{width:49px;height:auto;border-radius:3px;position:relative;top:3px}body.post-type-cp_recipe #titlediv #title{box-shadow:none;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:0 12px;font-weight:400;font-size:19px;letter-spacing:0;height:44px}body.post-type-cp_recipe #titlediv #title-prompt-text{font-size:15px;color:#888;font-weight:400;letter-spacing:0;padding:12px 15px}body.post-type-cp_recipe .mce-fullscreen{z-index:100100!important}#cooked-settings-prewrap{display:flex;justify-content:center}#cooked-settings-wrap{position:relative;border-radius:10px;margin:40px 40px 40px 20px;max-width:1200px;min-width:1000px;background:#fff;box-shadow:0 4px 4px rgba(0,0,0,.05),0 8px 8px rgba(0,0,0,.05),0 32px 32px rgba(0,0,0,.05),0 64px 64px rgba(0,0,0,.05)}#cooked-settings-wrap.is-stuck{position:static!important}#cooked-settings-wrap .cooked-settings-update-button{position:absolute;top:30px;right:30px}#cooked-settings-wrap .cooked-settings-update-button>.button-primary{box-shadow:none;border:none}#cooked-settings-wrap.is-stuck .cooked-settings-update-button{position:fixed;top:40px;right:11px;z-index:100001}#cooked_recipe_settings .hndle,#cooked_recipe_settings button.handlediv{display:none}#cooked_recipe_settings .inside{padding:0;margin:0}#cooked-recipe-tabs{list-style:none;padding:0;margin:0;position:absolute;top:0;left:0;width:100%}#cooked-recipe-tabs li{font-size:.9rem;line-height:3rem;height:3rem;font-weight:500;display:inline-block;padding:0 1.25rem;margin:0;color:#fff}#cooked-recipe-tabs li:hover{cursor:pointer}#cooked-recipe-tabs li.active,#cooked-recipe-tabs li.active:hover{cursor:default}#cooked-recipe-tabs li:last-child{border-right:none!important}#cooked-recipe-tabs li.cooked-loading{opacity:0;background:0 0;color:#fff;position:absolute;top:0;right:0;cursor:default;font-size:14px;width:40px;height:40px;text-align:center;display:block;line-height:40px;padding:0}#cooked-recipe-tabs li.cooked-loading:hover{background:0 0;color:#fff}#cooked_recipe_settings.cooked-loading #cooked-recipe-tabs li.cooked-loading{opacity:1}#cooked_recipe_settings .inside{padding-top:41px}#cooked_recipe_settings.stuck #cooked-recipe-tabs{position:fixed;width:auto;top:32px;left:23px;z-index:100000;margin-left:160px;box-shadow:0 3px 50px rgba(0,0,0,.25)}#cooked_recipe_settings.stuck #cooked-recipe-tabs li.cooked-loading{right:160px}.cooked-recipe-tab-content-wrapper .cooked-recipe-tab-content{display:none}.cooked-recipe-tab-content-wrapper .cooked-recipe-tab-content:first-child{display:block}.cooked-left{float:left;display:inline-block;width:auto}.cooked-right{float:right;display:inline-block;width:auto}#cooked_field--cooked_pro_license_key{font-family:monospace}#cooked_recipe_settings .cooked-bm-5{margin-bottom:5px!important}#cooked_recipe_settings .cooked-bm-10{margin-bottom:10px!important}#cooked_recipe_settings .cooked-tm-10{margin-top:10px!important}#cooked_recipe_settings .cooked-bm-15{margin-bottom:15px!important}#cooked_recipe_settings .cooked-bm-20{margin-bottom:20px!important}#cooked_recipe_settings .cooked-bm-30{margin-bottom:30px!important}#cooked_recipe_settings .cooked-bm-5-up{margin-bottom:-5px!important}#cooked_recipe_settings .cooked-bm-10-up{margin-bottom:-10px!important}#cooked_recipe_settings .cooked-bm-15-up{margin-bottom:-15px!important}#cooked_recipe_settings .cooked-bm-20-up{margin-bottom:-20px!important}#cooked_recipe_settings .cooked-bm-30-up{margin-bottom:-30px!important}#cooked_recipe_settings .cooked-hr{border:none;border-top:2px solid #ddd;margin:10px 0 0 0;padding:15px 0 0 0}#cooked_recipe_settings .cooked-conditional-hidden{display:none}#cooked_recipe_settings .cooked-recipe-tab-content{padding:23px 30px 15px 30px}#cooked_recipe_settings .recipe-setting-block{margin:0 0 20px;width:100%}#cooked_recipe_settings .recipe-setting-block p{font-size:.9rem;line-height:1.5rem;margin:0 0 1rem;padding:0}#cooked_recipe_settings .recipe-setting-block p.cooked-padded{line-height:1.75rem;font-size:.85rem}#cooked_recipe_settings .recipe-setting-block .cooked-conditional-hidden{padding:0}#cooked_recipe_settings textarea{width:100%;height:75px;padding:15px;box-sizing:border-box;position:relative;top:5px}#cooked_recipe_settings .recipe-setting-block>label.cooked-select-label{top:5px}#cooked_recipe_settings select{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-shadow:none;border-radius:3px;padding:0 45px 0 9px;line-height:31px;height:33px;box-sizing:border-box;background:#fff}#cooked_recipe_settings .cooked-select-wrapper{background:#fff;position:relative;width:auto;display:inline-block;border-radius:3px;margin:0 5px 0 0}#cooked_recipe_settings .cooked-select-wrapper select{margin:0;background:0 0;position:relative}#cooked_recipe_settings .cooked-select-wrapper:before{font-family:CookedIcons;display:block;width:15px;height:15px;line-height:14px;color:#000;font-size:14px;content:"\f00b";position:absolute;right:12px;top:11px;color:rgba(0,0,0,.3)}#cooked_recipe_settings .cooked-select-wrapper:hover:before{color:#000}#cooked_recipe_settings .cooked-select-wrapper:hover select{border-color:#ccc}#cooked_recipe_settings .cooked-checkbox-radio-label{position:relative;left:1px}#cooked_recipe_settings .recipe-setting-block input[type=checkbox],#cooked_recipe_settings .recipe-setting-block input[type=radio]{margin-top:0}#cooked_recipe_settings .recipe-setting-block input[type=number]{width:65px}#cooked_recipe_settings .recipe-setting-block input[type=password],#cooked_recipe_settings .recipe-setting-block input[type=text]{width:75%}#cooked_recipe_settings .recipe-setting-block input[type=number],#cooked_recipe_settings .recipe-setting-block input[type=password],#cooked_recipe_settings .recipe-setting-block input[type=text]{margin:0 6px 5px 0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;height:33px;box-shadow:none;position:relative;top:2px;padding:0 10px}#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs .cooked-measurement-column{width:43%;margin-right:3%;display:inline-block}#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs .cooked-select-wrapper,#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs input,#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs label{width:100%;display:block}#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs .cooked-select-wrapper select{width:100%}#cooked_recipe_settings .recipe-setting-block input[type=number],#cooked_recipe_settings .recipe-setting-block input[type=password].cooked-small-textfield,#cooked_recipe_settings .recipe-setting-block input[type=text].cooked-small-textfield{width:150px}#cooked_recipe_settings small{display:block;line-height:1.5;font-size:12px;color:#888;padding:10px 0 0}#cooked_recipe_settings .recipe-setting-block em{color:#aaa}#cooked_recipe_settings .recipe-setting-block,#cooked_recipe_settings .recipe-setting-block .cooked-repositioned{display:block;position:relative;box-sizing:border-box;line-height:1}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned{padding-left:157px}#cooked_recipe_settings .recipe-setting-block h3.cooked-settings-title{width:70%;position:relative;z-index:2;padding:.5rem 0 .5rem;margin:0;font-size:1rem;line-height:1.5rem;font-weight:600}#cooked_recipe_settings .recipe-setting-block strong.cooked-heading{font-size:14px}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned>label{position:absolute;top:1px;left:0;width:147px;cursor:default;font-weight:600}#cooked_recipe_settings .recipe-setting-block .cooked-tooltip-icon{color:#aaa;cursor:help;display:inline-block;margin-left:10px}#cooked_recipe_settings .recipe-setting-block .cooked-tooltip-icon:hover{color:#eee}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned>.cooked-checkbox-radio-label{top:7px}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned>label{top:auto;height:33px;line-height:30px;padding:0;width:130px}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned:first-child label:first-child{padding-top:12px;margin-top:-12px}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned span.cooked-padded{padding:0 0 15px;display:block;line-height:1.9}#cooked_recipe_settings .recipe-setting-block .wp-picker-container .cooked-color-field.wp-color-picker{padding:5px;height:25px;top:0;margin:0;width:74px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #ccc}#cooked_recipe_settings .recipe-setting-block input[type=text].cooked-shortcode-field{font-family:monospace;background:#f5f5f5;font-size:12px}#cooked_recipe_settings .cooked-banner-block{margin:30px -30px -17px;display:block;box-sizing:content-box;padding:10px 30px 15px;background:#f9f9f9;width:100%;border-top:1px solid #e5e5e5}#cooked_recipe_settings .cooked-advanced-options-hr{border:none;border-bottom:1px solid #ddd;height:1px;padding:10px 0 0 0;margin:0 0 20px}#cooked_recipe_settings .recipe-setting-block input.cooked-time-picker{top:0;width:100%;padding-right:70%;margin:0 0 3px}#cooked_recipe_settings .recipe-setting-block .cooked-time-picker-text{position:absolute;bottom:13px;right:40px;color:#888}#cooked_recipe_settings .cooked-alert-block{background:#fffbdc;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;margin:10px 0 15px;padding:10px 22px 2px;border:2px solid #ece8c4}#cooked_recipe_settings .recipe-setting-block.cooked-template{display:none}#cooked_recipe_settings ul.cooked-admin-ul{font-size:.9rem;margin:0 0 1rem 2rem;list-style:disc}#cooked_recipe_settings ul.cooked-admin-ul li{font-size:.9rem;padding:0;margin:0 0 .5rem}#cooked_recipe_settings .cooked-html-block{background:#fff;width:auto;min-width:300px;display:inline-block;padding:.5rem 1.3rem .25rem;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15)}#cooked_recipe_settings .recipe-setting-block .cooked-html-block h3.cooked-settings-title{width:100%;color:#333}#cooked_recipe_settings .recipe-setting-block .cooked-html-block.valid{background:#fff;border:2px solid #0aa780;box-shadow:none;border-radius:5px}#cooked_recipe_settings .recipe-setting-block .cooked-html-block.valid>.cooked-settings-title{color:#0aa780}#cooked_recipe_settings .recipe-setting-block .cooked-html-block.expired{border:2px solid #ca4a20}#cooked-directions-builder .cooked-direction-block.cooked-expanded>.cooked-heading-name,#cooked-directions-builder .cooked-direction-block.cooked-has-heading-element>.cooked-heading-name,#cooked-directions-builder .cooked-direction-block:hover>.cooked-heading-name,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded>.cooked-heading-name,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-heading-element>.cooked-heading-name,#cooked-ingredients-builder .cooked-ingredient-block:hover>.cooked-heading-name{padding-right:32px}#cooked-directions-builder .cooked-direction-block .cooked-show-heading-element,#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-heading-element{opacity:0;cursor:pointer;font-size:14px;position:absolute;top:14px;right:35px}#cooked-directions-builder .cooked-direction-block .cooked-show-heading-element .cooked-icon,#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-heading-element .cooked-icon{color:#888}#cooked-directions-builder .cooked-direction-block.cooked-expanded .cooked-show-heading-element,#cooked-directions-builder .cooked-direction-block.cooked-has-heading-element .cooked-show-heading-element,#cooked-directions-builder .cooked-direction-block:hover .cooked-show-heading-element,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded .cooked-show-heading-element,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-heading-element .cooked-show-heading-element,#cooked-ingredients-builder .cooked-ingredient-block:hover .cooked-show-heading-element{opacity:1}#cooked-directions-builder .cooked-direction-block .cooked-show-heading-element .cooked-icon:hover,#cooked-directions-builder .cooked-direction-block.cooked-expanded .cooked-show-heading-element .cooked-icon,#cooked-directions-builder .cooked-direction-block.cooked-has-heading-element .cooked-show-heading-element .cooked-icon,#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-heading-element .cooked-icon:hover,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded .cooked-show-heading-element .cooked-icon,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-heading-element .cooked-show-heading-element .cooked-icon{color:#0685ba}#cooked-directions-builder .cooked-direction-block>.cooked-heading-element,#cooked-ingredients-builder .cooked-ingredient-block>.cooked-heading-element{display:none;width:65%;float:right;margin-top:4px;padding-right:32px}#cooked-directions-builder .cooked-direction-block>.cooked-heading-element select,#cooked-ingredients-builder .cooked-ingredient-block>.cooked-heading-element select{color:#0685ba;width:100%}#cooked-directions-builder .cooked-direction-block>.cooked-heading-element label,#cooked-ingredients-builder .cooked-ingredient-block>.cooked-heading-element label{font-weight:600}#cooked-directions-builder .cooked-direction-block.cooked-expanded>.cooked-heading-element,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded>.cooked-heading-element{display:block}#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-substitution{opacity:0;cursor:pointer;font-size:14px;position:absolute;top:15px;right:58px}#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-substitution .cooked-icon{color:#888}#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded .cooked-show-substitution,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-substitution .cooked-show-substitution,#cooked-ingredients-builder .cooked-ingredient-block:hover .cooked-show-substitution{opacity:1;right:50px}#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-substitution .cooked-icon:hover,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded .cooked-show-substitution .cooked-icon,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-substitution .cooked-show-substitution .cooked-icon{color:#0685ba}#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded>.cooked-ingredient-name,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-substitution>.cooked-ingredient-name,#cooked-ingredients-builder .cooked-ingredient-block:hover>.cooked-ingredient-name{padding-right:32px}#cooked_recipe_settings .switchery-small,body.post-type-cp_recipe .switchery-small{height:1rem;width:1.75rem;border-radius:1rem;margin-right:.4rem}#cooked_recipe_settings .switchery-small>small,body.post-type-cp_recipe .switchery-small>small{width:1rem;height:1rem;padding:0}.cooked-tooltip-buttons .cooked-icon-spin{margin-top:10px;font-size:15px}.cooked-tooltip-buttons .cooked-saved-default{height:28px;line-height:28px;font-weight:700;font-size:15px;color:#888}.cooked-progress{display:none;position:relative;background:#eee;width:100%;height:6px;padding:0;border-radius:3px;margin:10px 0 0 0}.cooked-progress-text{display:none;font-size:10px;color:#aaa;padding:2px 0 5px}.cooked-progress-text.cooked-active,.cooked-progress.cooked-active{display:block}.cooked-progress .cooked-progress-bar{display:block;position:absolute;background:#0085ba;width:0%;height:6px;top:0;left:0;border-radius:3px}#cooked-import-progress.cooked-progress,#cooked-migration-progress.cooked-progress{background:#ccc;margin:25px 0 0 0;border-radius:6px;height:12px;max-width:600px}#cooked-import-progress.cooked-progress .cooked-progress-bar,#cooked-migration-progress.cooked-progress .cooked-progress-bar{border-radius:6px;height:12px}#cooked-import-progress-text.cooked-progress-text,#cooked-migration-progress-text.cooked-progress-text{font-size:11px;color:#888;max-width:600px}#cooked-import-completed,#cooked-migration-completed{display:none}#cooked-import-completed.cooked-active,#cooked-migration-completed.cooked-active{display:block}#cooked-csv-import-progress.cooked-progress{background:#ccc;margin:25px 0 0 0;border-radius:6px;height:12px;max-width:600px}#cooked-csv-import-progress.cooked-progress .cooked-progress-bar{border-radius:6px;height:12px}#cooked-csv-import-progress-text.cooked-progress-text{font-size:11px;color:#888;max-width:600px}#cooked-csv-import-completed{display:none}#cooked-csv-import-completed.cooked-active{display:block}#cooked-csv-import-form{max-width:100%;box-sizing:border-box}#cooked-csv-import-form input[type=file]{max-width:100%;box-sizing:border-box;width:100%}#cooked-csv-import-errors{max-width:100%;box-sizing:border-box;word-wrap:break-word}#cooked-import-progress.cooked-progress,#cooked-migration-progress.cooked-progress,#cooked-related-progress.cooked-progress{background:#ccc;margin:25px 0 0 0;border-radius:6px;height:12px;max-width:600px}#cooked-import-progress.cooked-progress .cooked-progress-bar,#cooked-migration-progress.cooked-progress .cooked-progress-bar,#cooked-related-progress.cooked-progress .cooked-progress-bar{border-radius:6px;height:12px}#cooked-import-progress-text.cooked-progress-text,#cooked-migration-progress-text.cooked-progress-text,#cooked-related-progress-text.cooked-progress-text{font-size:11px;color:#888;max-width:600px}#cooked-import-completed,#cooked-migration-completed,#cooked-related-completed{display:none}#cooked-import-completed.cooked-active,#cooked-migration-completed.cooked-active,#cooked-related-completed.cooked-active{display:block}.cooked-related-status{margin:0 0 12px 0;padding:8px 12px;font-size:13px;line-height:1.4;border-radius:4px;border-left:3px solid #00a878;background:#f0f9f6;color:#2d4a42;max-width:480px}#cooked-related-last-done.cooked-related-status{border-left-color:#8c9b99;background:#f6f8f7;color:#5c6b69}#cooked_recipe_settings .cooked-layout-save-default{position:relative;top:-2px;z-index:10;margin:0 0 0 15px;padding:0 8px 1px}#cooked_recipe_settings .cooked-layout-load-default{position:relative;top:-2px;z-index:10;margin:0 0 0 10px;padding:0 8px 1px}body .button.button-cooked-reset{color:#999}body .button.button-cooked-reset:hover{color:#555}#cooked_recipe_settings .cooked-ingredient-headers{display:block;padding:5px 25px 0 35px}#cooked_recipe_settings .cooked-ingredient-headers span{font-size:.7rem;font-weight:700;letter-spacing:.03rem;text-transform:uppercase;color:#0085ba;box-sizing:border-box;display:inline-block;float:left}#cooked_recipe_settings .cooked-ingredient-headers span.cooked-ingredient-header-amount{width:15%}#cooked_recipe_settings .cooked-ingredient-headers span.cooked-ingredient-header-measurement{width:20%}#cooked_recipe_settings .cooked-ingredient-headers span.cooked-ingredient-header-item{width:65%}#cooked-ingredients-builder{margin:0 0 20px}#cooked-ingredients-builder .cooked-ingredient-block{display:block;padding:5px 45px 5px 35px}#cooked-ingredients-builder .cooked-ingredient-block:hover{background:#eee}#cooked-ingredients-builder .cooked-ingredient-block input[type=number],#cooked-ingredients-builder .cooked-ingredient-block input[type=text],#cooked-ingredients-builder .cooked-ingredient-block select{margin:0;display:block;top:0}#cooked-ingredients-builder .cooked-ingredient-block>div{display:inline-block;float:left;box-sizing:border-box;padding-right:10px}#cooked-ingredients-builder .cooked-ingredient-block>div input[type=text]{width:100%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-amount{width:15%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-measurement{width:20%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-measurement .cooked-select-wrapper{width:100%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-measurement .cooked-select-wrapper select{width:100%}#cooked-ingredients-builder .cooked-ingredient-block .cooked-substitution-fields>.cooked-ingredient-measurement .cooked-select-wrapper{width:100%}#cooked-ingredients-builder .cooked-ingredient-block .cooked-substitution-fields>.cooked-ingredient-measurement .cooked-select-wrapper select{width:100%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-name{width:65%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-heading-name{width:100%}#cooked-ingredients-builder .cooked-ingredient-block>div small.cooked-input-ex{display:block;padding:5px 0 0 2px}#cooked-ingredients-builder .cooked-ingredient-block{margin:0}#cooked-ingredients-builder .cooked-ingredient-block i.cooked-icon-drag{cursor:move;color:#ccc;font-size:32px;position:absolute;top:5px;left:1px;touch-action:none}#cooked-ingredients-builder .cooked-ingredient-block:hover i.cooked-icon-drag{color:#888}#cooked-ingredients-builder .cooked-ingredient-block.ui-sortable-helper{background:#f5f5f5;box-shadow:0 10px 20px rgba(0,0,0,.15);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}#cooked-ingredients-builder .cooked-ingredient-block.ui-sortable-placeholder{visibility:visible!important;background:#eee;display:block;width:100%;height:43px;border-top:6px solid #fff;border-bottom:6px solid #fff}#cooked-ingredients-builder .cooked-ingredient-block .cooked-delete-ingredient{cursor:pointer;font-size:14px;position:absolute;top:14px;right:11px}#cooked-ingredients-builder .cooked-ingredient-block .cooked-delete-ingredient .cooked-icon{color:#fff}#cooked-ingredients-builder .cooked-ingredient-block:hover .cooked-delete-ingredient .cooked-icon{color:#888}#cooked-ingredients-builder .cooked-ingredient-block .cooked-delete-ingredient .cooked-icon:hover{color:#de2020}#cooked-ingredients-builder .cooked-ingredient-block.cooked-ingredient-heading{margin:10px 0}#cooked-ingredients-builder .cooked-ingredient-block.cooked-ingredient-heading>div input[type=text]{padding:0 7px;font-size:16px;background:#f9f9f9;font-weight:600}#cooked-directions-builder{margin:0 0 20px}#cooked-directions-builder .cooked-direction-block{display:block;padding:15px 25px 15px 35px}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading{padding:5px 25px 5px 35px}#cooked-directions-builder .cooked-direction-block:hover{background:#f5f5f5}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading:hover{background:#eee}#cooked-directions-builder .cooked-direction-block textarea{margin:0;display:block;height:191px;top:0}#cooked-directions-builder .cooked-direction-block>div{display:inline-block;float:left;box-sizing:border-box;padding-right:15px}#cooked-directions-builder .cooked-direction-block>div:last-child{padding:0}#cooked-directions-builder .cooked-direction-block>div input[type=text]{width:100%}#cooked-directions-builder .cooked-direction-block .mce-statusbar{display:none}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image{width:120px;position:absolute;top:15px;left:35px}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image img{cursor:pointer;display:none;border-radius:3px}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .cooked-direction-img-placeholder{box-sizing:border-box;cursor:pointer;border-radius:3px;width:100%;padding-bottom:100%;background:0 0;border:2px dashed #ddd;border-radius:3px;margin-top:15px}#cooked-directions-builder .cooked-direction-block:hover>.cooked-direction-image .cooked-direction-img-placeholder{background:0 0}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .cooked-direction-img-placeholder:hover{background:#ddd;border:2px solid #ddd}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .direction-image-button{width:100%;text-align:center}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .remove-image-button{display:none;position:absolute;top:43px;right:15px}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image.cooked-has-image .remove-image-button{display:inline-block;padding:10px;background:rgba(0,0,0,.25);color:#fff}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image.cooked-has-image .remove-image-button:hover{background:#ff0100}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image.cooked-has-image img{width:100%;height:auto;display:block;margin:15px 0 0}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image.cooked-has-image .cooked-direction-img-placeholder{display:none}#cooked-directions-builder .cooked-direction-block>.cooked-direction-content{width:100%;padding-left:120px}#cooked-directions-builder .cooked-direction-block .cooked-direction-number{opacity:.4;position:absolute;display:inline-block;font-weight:800;top:17px;left:35px;font-size:1.25rem;line-height:1}#cooked-directions-builder .cooked-direction-block.cooked-direction-has-number>.cooked-direction-image{left:65px}#cooked-directions-builder .cooked-direction-block.cooked-direction-has-number>.cooked-direction-content{padding-left:175px}#cooked-directions-builder .cooked-direction-block.cooked-direction-has-number-wide>.cooked-direction-content{padding-left:185px}#cooked-directions-builder .cooked-direction-block>.cooked-heading-name{width:100%}#cooked-directions-builder .cooked-direction-block{margin:0}#cooked-directions-builder .cooked-direction-block i.cooked-icon-drag{cursor:move;color:#ccc;font-size:32px;position:absolute;top:13px;left:1px;touch-action:none}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading i.cooked-icon-drag{top:5px}#cooked-directions-builder .cooked-direction-block:hover i.cooked-icon-drag{color:#888}#cooked-directions-builder .cooked-direction-block.ui-sortable-helper{background:#f5f5f5;box-shadow:0 10px 20px rgba(0,0,0,.15);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}#cooked-directions-builder .cooked-direction-block.ui-sortable-placeholder{visibility:visible!important;background:#eee;display:block;width:100%;height:221px;border-top:6px solid #fff;border-bottom:6px solid #fff}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading.ui-sortable-placeholder{height:43px}#cooked-directions-builder .cooked-direction-block .cooked-delete-direction{cursor:pointer;font-size:14px;position:absolute;right:14px}#cooked-directions-builder .cooked-direction-block .cooked-delete-direction .cooked-icon{color:#fff}#cooked-directions-builder .cooked-direction-block:hover .cooked-delete-direction .cooked-icon{color:#888}#cooked-directions-builder .cooked-direction-block .cooked-delete-direction .cooked-icon:hover{color:#de2020}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading{margin:10px 0}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading>div input[type=text]{padding:0 7px;font-size:16px;background:#f9f9f9;font-weight:600;top:0;margin:0}#cooked-directions-builder .cooked-direction-block .cooked-delete-direction{top:16px}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading .cooked-delete-direction{top:14px}#cooked-recipe-image-gallery{margin:0 -1% 0}#cooked-recipe-image-gallery .cooked-recipe-gallery-item{position:relative;overflow:hidden;cursor:move;box-sizing:border-box;display:inline-block;width:18%;height:auto;padding:0;margin:0 1% 2% 1%}#cooked-recipe-image-gallery .cooked-recipe-gallery-item:hover{opacity:.9}#cooked-recipe-image-gallery .cooked-recipe-gallery-item img{width:100%;height:auto;border-radius:3px;display:block;margin:0;padding:0;border:none}#cooked-recipe-image-gallery .cooked-recipe-gallery-item.ui-sortable-helper,#cooked-recipe-image-gallery .cooked-recipe-gallery-item.ui-sortable-helper:hover{opacity:.75;box-shadow:0 10px 20px rgba(0,0,0,.15)}#cooked-recipe-image-gallery .cooked-recipe-gallery-item.ui-sortable-placeholder{width:18%;height:auto;visibility:visible!important;border-radius:3px;background:#ddd;display:inline-block}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .remove-image-button{border-radius:0 3px 0 0;display:inline-block;position:absolute;top:0;right:0;padding:10px;background:rgba(0,0,0,.25);color:#fff}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .remove-image-button:hover{background:#ff0100}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .cooked-gallery-edit-button{border-radius:3px 0 0 0;display:inline-block;position:absolute;top:0;left:0;padding:10px;background:rgba(0,0,0,.25);color:#fff}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .cooked-gallery-edit-button:hover{background:#0084bc}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .cooked-gallery-item-title{position:absolute;left:0;bottom:0;box-sizing:border-box;width:100%;border-radius:0 0 3px 3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;padding:10px 10px 11px;text-align:center;background:#000;background:rgba(0,0,0,.3);color:#fff;font-size:12px}#cooked-recipe-image-gallery .cooked-recipe-gallery-item:hover .cooked-gallery-item-title{background:#000;background:rgba(0,0,0,.75)}#cooked-recipe-image-gallery .cooked-recipe-gallery-item.ui-sortable-helper{-webkit-animation:cooked-wiggle .4s infinite;-moz-animation:cooked-wiggle .4s infinite;-o-animation:cooked-wiggle .4s infinite;animation:cooked-wiggle .4s infinite}#cooked_recipe_settings label.cooked-nutrition-label{display:block;font-size:.7rem;letter-spacing:.03rem;font-weight:700;text-transform:uppercase;line-height:1;margin:0 0 7px}#cooked_recipe_settings #cooked-nutrition-label{line-height:1.6;font-size:1.1rem;border:1px solid #aaa;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:5%;margin:0 0 2rem;font-family:Helvetica,Arial,sans-serif;container-name:nutrition-label;container-type:inline-size}#cooked_recipe_settings #cooked-nutrition-label h2{font-size:2.5rem;line-height:1;letter-spacing:0;font-weight:800;padding:0 0 .5rem 0;margin:0 0 .4rem;color:#333;border-bottom:1px solid #aaa}#cooked_recipe_settings #cooked-nutrition-label p.cooked-daily-value-text{padding:.5rem 0 0 0;margin:0;font-size:.9rem}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-servings p{font-size:1.5rem}#cooked_recipe_settings #cooked-nutrition-label ul{list-style:none;margin:0;padding:0}#cooked_recipe_settings #cooked-nutrition-label li{position:relative;margin:0;padding:0 0 3px 0;border-top:1px solid #aaa}#cooked_recipe_settings #cooked-nutrition-label li li{padding:3px 0 0;margin:3px 0 0}#cooked_recipe_settings #cooked-nutrition-label li:after{content:"";display:table;clear:both}#cooked_recipe_settings #cooked-nutrition-label li.no-after:after{content:none}#cooked_recipe_settings #cooked-nutrition-label li.cooked-nut-spacer{border:none;height:.6rem;padding:0;background:#333}#cooked_recipe_settings #cooked-nutrition-label ul li.cooked-nut-no-border,#cooked_recipe_settings #cooked-nutrition-label>ul>li:first-child{border:none}#cooked_recipe_settings #cooked-nutrition-label li ul{padding:0;margin:0 0 0 20px}#cooked_recipe_settings #cooked-nutrition-label li ul.cooked-right{margin:0}#cooked_recipe_settings #cooked-nutrition-label li ul.cooked-right li{border:none;padding:0;margin:0}#cooked_recipe_settings #cooked-nutrition-label li.cooked-calories ul.cooked-right li strong.cooked-nut-label{font-size:2.5rem;line-height:1}#cooked_recipe_settings #cooked-nutrition-label .cooked-calories{border-top:none;display:flex;justify-content:space-between;align-items:baseline;padding:0}#cooked_recipe_settings #cooked-nutrition-label .cooked-calories strong,#cooked_recipe_settings #cooked-nutrition-label .cooked-calories strong.cooked-nut-label{font-size:2rem;font-weight:800}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-servings li{border:none}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-servings{margin:0}#cooked_recipe_settings #cooked-nutrition-label .cooked-nut-hr{border:none;border-top:1.3rem solid #333;margin:.1rem 0 0;padding:0}#cooked_recipe_settings #cooked-nutrition-label strong{font-weight:800}#cooked_recipe_settings #cooked-nutrition-label .cooked-serving-size strong,#cooked_recipe_settings #cooked-nutrition-label .cooked-serving-size strong.cooked-nut-label{font-size:1.5rem;font-weight:800}#cooked_recipe_settings #cooked-nutrition-label strong.cooked-nut-heading{font-size:1rem}#cooked_recipe_settings #cooked-nutrition-label strong.cooked-nut-label{font-weight:400}#cooked_recipe_settings #cooked-nutrition-label .cooked-nut-right{float:right}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-bottom{margin:0 0 .75rem}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-bottom li{border-top:none;border-bottom:1px solid #aaa;float:left;width:100%;box-sizing:border-box}#cooked_recipe_settings .cooked-measurement-inputs .cooked-select-wrapper:before{top:8px}.cooked-auto-nutrition{display:flex;justify-content:end;margin:0 0 1rem}#cooked-tooltip-auto-nutrition-notice{margin:0}.cooked-settings-header{border-radius:10px 10px 0 0;width:auto;height:90px;line-height:85px;padding:0 30px;font-weight:600;box-sizing:border-box;background:#33373c;color:#fff;font-size:29px;letter-spacing:-.03rem}.cooked-settings-header .cooked-icon{color:#00e0a9}.cooked-settings-submit-wrap{padding:0 0 35px 35px;margin:-20px 0 0}#cooked_recipe_settings .recipe-setting-block .cooked-permalink-field-wrapper span{font-size:14px;display:inline-block;line-height:32px;padding:5px 0 0 0}#cooked_recipe_settings .recipe-setting-block input[type=text].cooked-permalink-field{position:relative;top:0;display:inline-block;width:150px;margin:0 10px}#cooked-settings-panel{position:relative;margin:0;padding:0}#cooked-settings-tabs{display:flex;width:auto;padding:0 20px 0 0;margin:0;list-style:none}#cooked-settings-tabs li{font-size:13px;line-height:1;font-weight:400;display:block;padding:0;margin:0;color:#fff}#cooked-settings-tabs li .cooked-icon{font-size:14px}#cooked-settings-tabs li .cooked-icon.cooked-icon-recipe-icon{font-size:20px;top:2px;position:relative}#cooked-settings-tabs li:hover{cursor:pointer}#cooked-settings-tabs li.active,#cooked-settings-tabs li.active:hover{cursor:default}#cooked-settings-tabs a{line-height:41px;font-size:.9rem;letter-spacing:.03rem;padding:2px 15px 4px;display:block;outline:0;box-shadow:none;border:none;white-space:nowrap}#cooked-settings-panel.stuck{padding-top:41px}#cooked-settings-panel.stuck #cooked-settings-tabs{position:fixed;width:calc(100% - 180px);top:32px;left:0;z-index:100000;margin-left:160px}#cooked-settings-panel .cooked-settings-tab-content-wrapper .cooked-settings-tab-content{display:none}#cooked-settings-panel .cooked-settings-tab-content-wrapper .cooked-settings-tab-content:first-child{display:block}#cooked-settings-panel .cooked-settings-tab-content{padding:25px 35px;margin-right:0}#cooked-settings-panel #cooked_recipe_settings .recipe-setting-block h3.cooked-settings-title{padding-bottom:.2rem}#cooked_recipe_settings .cooked-setting-column-14{position:relative;width:25%;float:left;padding-right:20px;box-sizing:border-box}#cooked_recipe_settings .cooked-setting-column-13{position:relative;width:33%;float:left;padding-right:20px;box-sizing:border-box}#cooked_recipe_settings .cooked-setting-column-23{position:relative;width:66%;float:left;padding-right:20px;box-sizing:border-box}#cooked_recipe_settings .cooked-setting-column-12{position:relative;width:50%;float:left;padding-right:20px;box-sizing:border-box}#cooked_recipe_settings .cooked-setting-column-12 input[type=text],#cooked_recipe_settings .cooked-setting-column-13 input[type=text],#cooked_recipe_settings .cooked-setting-column-14 input[type=text],#cooked_recipe_settings .cooked-setting-column-23 input[type=text],#cooked_recipe_settings .recipe-setting-block input[type=text].cooked-shortcode-field{width:95%}#cooked_recipe_settings .cooked-setting-column-12 .cooked-select-wrapper,#cooked_recipe_settings .cooked-setting-column-12 select,#cooked_recipe_settings .cooked-setting-column-13 .cooked-select-wrapper,#cooked_recipe_settings .cooked-setting-column-13 select,#cooked_recipe_settings .cooked-setting-column-14 .cooked-select-wrapper,#cooked_recipe_settings .cooked-setting-column-14 select,#cooked_recipe_settings .cooked-setting-column-23 select{width:100%}#cooked_recipe_settings .cooked-setting-column-14.cooked-tb-col{padding:0}#cooked-welcome-screen{padding:15px 50px 0 30px;position:relative}#cooked-welcome-screen .cooked-badge{position:absolute;top:0;right:0}#cooked-welcome-screen .cooked-badge img{border:none;width:150px;height:150px;display:block;margin:0}#cooked-welcome-screen .about-text{margin-bottom:40px;line-height:1.8;font-size:17px;margin-right:260px}#cooked-welcome-screen .about-wrap{margin:25px auto 0;max-width:1000px}#cooked-welcome-screen .about-wrap h1{font-size:2.25rem}#cooked-welcome-screen .about-wrap p{font-size:1rem;margin:0 0 2rem;line-height:1.7rem}#cooked-welcome-screen #cooked-welcome-panel{background:#fff;padding:30px 30px 15px 30px;-moz-border-radius:15px;-webkit-border-radius:15px;border-radius:15px;border:none;box-shadow:0 4px 4px rgba(0,0,0,.05),0 8px 8px rgba(0,0,0,.05),0 32px 32px rgba(0,0,0,.05),0 64px 64px rgba(0,0,0,.05)}#cooked-welcome-screen #cooked-welcome-panel img.cooked-welcome-banner{border:none;display:block;padding:0;margin:0 0 30px;box-sizing:border-box;border-radius:5px 5px 0 0}#cooked-welcome-screen #cooked-welcome-panel .cooked-welcome-panel-intro{text-align:center;margin:0 50px 2rem;padding:15px 0;border-bottom:1px solid #e5e5e5}#cooked-welcome-screen #cooked-welcome-panel .cooked-welcome-panel-intro h1{font-size:1.75rem;margin:0 0 1rem;padding:0}#cooked-welcome-screen #cooked-welcome-panel .cooked-welcome-panel-intro p{max-width:600px;font-size:1.1rem;line-height:1.8rem;margin:0 auto 2rem;padding:0}#cooked-welcome-screen .cooked-welcome-panel a{text-decoration:none}#cooked-welcome-screen .cooked-welcome-panel-column{display:block!important}#cooked-welcome-screen .cooked-welcome-panel-column>strong{font-size:1rem}#cooked-welcome-screen .cooked-welcome-panel-column h3{font-size:1.75rem;margin:0 0 1rem;position:relative}#cooked-welcome-screen .cooked-welcome-panel-column h3 a{position:absolute;top:0;right:0;font-size:12px;font-weight:400}#cooked-welcome-screen .cooked-welcome-panel-column h3 a i.fa{position:relative;top:1px}#cooked-welcome-screen .cooked-welcome-panel-column h4{font-size:1.25rem;margin:0 0 1rem;position:relative}#cooked-welcome-screen .cooked-welcome-panel-column h4 a{position:absolute;top:0;right:0;font-size:12px;font-weight:400}#cooked-welcome-screen .cooked-welcome-panel-column h4 a i.fa{position:relative;top:1px}#cooked-welcome-screen .cooked-welcome-panel-column.cooked-welcome-panel-full{width:100%;padding-right:0;float:none}#cooked-welcome-screen .cooked-welcome-panel-column.cooked-welcome-panel-last{width:70%;padding-right:0;float:right}#cooked-welcome-screen .cooked-welcome-panel-column .fa-external-link{color:#888}#cooked-welcome-screen .cooked-welcome-panel-content{min-height:1px;padding:10px 50px 20px;margin:0}#cooked-welcome-screen .cooked-welcome-panel .cooked-welcome-panel-column-container{display:flex;justify-content:between!important;padding:0!important;flex-wrap:wrap}#cooked-welcome-screen .cooked-welcome-panel-column{box-sizing:border-box;padding-right:2rem;width:30%}#cooked-welcome-screen .cooked-pro-features{width:85%;margin:0 auto;padding:0 0 10px;display:flex;flex-wrap:wrap}#cooked-welcome-screen ul.cooked-whatsnew-list{margin-right:0}#cooked-welcome-screen ul.cooked-whatsnew-list li{line-height:1.7;position:relative;margin-right:0;border-top:1px solid #e5e5e5;padding:8px 0 4px 0}#cooked-welcome-screen ul.cooked-whatsnew-list li:first-child{border:none;padding-top:0}#cooked-welcome-screen ul.cooked-whatsnew-list em.fix,#cooked-welcome-screen ul.cooked-whatsnew-list strong.new,#cooked-welcome-screen ul.cooked-whatsnew-list strong.tweak{position:absolute;font-style:normal;display:inline-block;background:#aaa;text-transform:uppercase;top:11px;left:0;color:#fff;font-weight:600;-moz-border-radius:3px;-webkit-border-radius:3px;text-align:center;width:38px;border-radius:3px;font-size:10px;line-height:19px;height:19px;padding:0 6px;margin:0 6px 0 0}#cooked-welcome-screen ul.cooked-whatsnew-list li:first-child em.fix,#cooked-welcome-screen ul.cooked-whatsnew-list li:first-child strong.new,#cooked-welcome-screen ul.cooked-whatsnew-list li:first-child strong.tweak{top:3px}#cooked-welcome-screen ul.cooked-whatsnew-list strong.new{background:#56c477}#cooked-welcome-screen ul.cooked-whatsnew-list strong.tweak{background:#0073aa}#cooked-welcome-screen ul.cooked-whatsnew-list em.fix{background:#ffad10}#cooked-welcome-screen ul li.cooked-pro i.cooked-icon{color:#ffad10}#cooked-welcome-screen ul li.cooked-pro a{font-weight:600;color:#ffad10}#cooked-welcome-screen ul li.cooked-pro a:hover{color:#d3910f}#cooked-welcome-screen ul.cooked-whatsnew-pro{margin-bottom:0;flex:1 0 auto;width:33.333%}#cooked-welcome-screen ul.cooked-whatsnew-pro li{padding-left:0;font-size:1.15rem;font-weight:400}#cooked-welcome-screen ul.cooked-whatsnew-pro li i.cooked-icon-star{color:#ffad10;margin:0 7px 0 0;font-size:19px;position:relative;top:1px}#cooked-welcome-screen .cooked-welcome-bottom{text-align:center;background:#f9f9f9;margin:30px -80px -15px;border-top:1px solid #f1f1f1}#cooked-welcome-screen .cooked-pro-button{display:inline-block;clear:both;text-align:center;width:auto;margin:30px auto;padding:20px 25px 21px;font-size:1.25rem;line-height:1rem;font-weight:600;color:#fff;background:#ffad10;border-radius:50px}#cooked-welcome-screen .cooked-pro-button:hover{background:#e08704}#cooked-welcome-screen .cooked-coupon-code{color:#4c5e65;display:inline-block;font-size:17px;padding:0 0 0 1.5rem}@media screen and (max-width:1050px){#cooked-welcome-screen ul.cooked-whatsnew-pro{width:100%;margin-top:0}#cooked-welcome-screen ul.cooked-whatsnew-pro:first-child{margin-top:10px}#cooked-welcome-screen ul.cooked-whatsnew-pro li:first-child{border-top:1px solid #e5e5e5;padding-top:8px}#cooked-welcome-screen ul.cooked-whatsnew-pro:first-child li:first-child{border:none;padding-top:0}}@media screen and (max-width:870px){#cooked-welcome-screen .cooked-pro-features{width:90%}#cooked-welcome-screen .cooked-welcome-panel-column{padding-right:0}#cooked-welcome-screen .cooked-welcome-panel-column.cooked-welcome-panel-last{width:100%;padding-top:20px}#cooked-welcome-screen .about-wrap{margin-top:0}#cooked-welcome-screen .cooked-welcome-panel .cooked-welcome-panel-column li{display:block}}@media screen and (max-width:782px){#cooked-welcome-screen .cooked-pro-features{width:100%}#cooked-welcome-screen{padding:15px 40px 0 30px}#cooked-welcome-screen .cooked-badge{display:none}#cooked-welcome-screen .about-text,#cooked-welcome-screen .about-wrap h1{margin-right:0}#cooked-welcome-screen .cooked-welcome-panel-column h3 a{display:block;position:relative}}@media screen and (max-width:500px){#cooked-welcome-screen #cooked-welcome-panel img.cooked-welcome-banner{display:none}#cooked-welcome-screen .about-wrap h1{font-size:1.8rem}#cooked-welcome-screen .about-text{font-size:15px}}#cooked_recipe_settings #cooked-nutrition-label .cooked-nut-label,#cooked_recipe_settings .recipe-setting-block h3.cooked-settings-title{color:#0173aa}#cooked_recipe_settings .recipe-setting-block.cooked-danger h3.cooked-settings-title{color:#d44d1f}#cooked_recipe_settings .cooked-alert-block h3.cooked-settings-title{color:#c02a2a}#cooked-recipe-tabs{background:#fff}#cooked-recipe-tabs li{background:#454b52;color:#fff;color:rgba(255,255,255,.75);border-right:1px solid rgba(0,0,0,.15)}#cooked-recipe-tabs li:hover{background:#535a62;color:#fff;border-right:1px solid rgba(0,0,0,.15)}#cooked-recipe-tabs li.active{background:#fff;color:#333;border-right:1px solid #fff}#cooked-settings-tabs{background:#454b52}#cooked-settings-tabs a{color:#fff;text-decoration:none}#cooked-settings-tabs li{background:#454b52;color:#fff;color:rgba(255,255,255,.75)}#cooked-settings-tabs li:hover{background:#535a62;color:#fff}#cooked-settings-tabs li.active{background:#fff}#cooked-settings-tabs li.active a{color:#000}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .cooked-direction-img-placeholder,#cooked-migration-progress.cooked-progress .cooked-progress-bar,#cooked-related-progress.cooked-progress .cooked-progress-bar,#cooked_recipe_settings .cooked-select-wrapper:before,#cooked_recipe_settings .cooked-tooltip-icon,#cooked_recipe_settings select{-webkit-transition:all .15s ease-out;-moz-transition:all .15s ease-out;transition:all .15s ease-out}#cooked-recipe-image-gallery .cooked-recipe-gallery-item{-webkit-transition:transform .15s ease-out;-moz-transition:all .15s ease-out;transition:transform .15s ease-out}#cooked-recipe-tabs li.cooked-loading{-webkit-transition:opacity .15s ease-out;-moz-transition:all .15s ease-out;transition:opacity .15s ease-out}@-webkit-keyframes cooked-wiggle{0%{-webkit-transform:scale(1)}50%{-webkit-transform:scale(1.03)}100%{-webkit-transform:scale(1)}}@-moz-keyframes cooked-wiggle{0%{-moz-transform:scale(1)}50%{-moz-transform:scale(1.03)}100%{-moz-transform:scale(1)}}@-o-keyframes cooked-wiggle{0%{-o-transform:scale(1)}50%{-o-transform:scale(1.03)}100%{-o-transform:scale(1)}}@keyframes cooked-wiggle{0%{transform:scale(1)}50%{transform:scale(1.03)}100%{transform:scale(1)}}@media screen and (max-width:1150px){#cooked-recipe-tabs li{font-size:.8rem;padding:0 1.2rem 0 .7rem}#cooked-recipe-tabs li .cooked-icon{display:none}}@media screen and (max-width:960px){#cooked_recipe_settings.stuck #cooked-recipe-tabs{margin-left:36px}}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields{width:100%;float:left;clear:both;margin-top:10px;padding-top:10px;padding-right:0;padding-left:0;margin-left:0;box-sizing:border-box;padding-bottom:5px;position:relative}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields .cooked-ingredient-amount{width:15%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields .cooked-ingredient-measurement{width:20%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields .cooked-ingredient-name{width:65%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields .cooked-sub-label{color:#7c7c7c;font-size:14px;font-weight:300}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields>div{display:inline-block;float:left;box-sizing:border-box;padding-right:10px} \ No newline at end of file +.cooked-clearfix:after{content:"";display:table;clear:both}#post-body-content #postdivrich{display:none}body.post-type-cp_recipe .wp-list-table tfoot th.check-column,body.post-type-cp_recipe .wp-list-table thead th.check-column{padding:15px 0 0 7px}body.post-type-cp_recipe .wp-list-table tfoot td,body.post-type-cp_recipe .wp-list-table tfoot th,body.post-type-cp_recipe .wp-list-table thead td,body.post-type-cp_recipe .wp-list-table thead th{padding:10px 10px}body.post-type-cp_recipe .wp-list-table tfoot th.sortable a,body.post-type-cp_recipe .wp-list-table tfoot th.sorted a,body.post-type-cp_recipe .wp-list-table thead th.sortable a,body.post-type-cp_recipe .wp-list-table thead th.sorted a{padding-left:0;padding-right:0}body.post-type-cp_recipe .wp-list-table tbody th.check-column{padding:15px 0 0 10px}body.post-type-cp_recipe .wp-list-table tbody td,body.post-type-cp_recipe .wp-list-table tbody th{padding:12px 10px}body.post-type-cp_recipe .wp-list-table tbody td.column-title strong{margin-top:6px}body.post-type-cp_recipe .wp-list-table tbody td.column-title strong .row-title{padding-top:10px;font-size:1rem!important}th.column-featured_image{width:50px;text-align:center}td.column-featured_image{width:50px;text-align:center}.cooked-admin-recipes-list-image img{width:49px;height:auto;border-radius:3px;position:relative;top:3px}body.post-type-cp_recipe #titlediv #title{box-shadow:none;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:0 12px;font-weight:400;font-size:19px;letter-spacing:0;height:44px}body.post-type-cp_recipe #titlediv #title-prompt-text{font-size:15px;color:#888;font-weight:400;letter-spacing:0;padding:12px 15px}body.post-type-cp_recipe .mce-fullscreen{z-index:100100!important}#cooked-settings-prewrap{display:flex;justify-content:center}#cooked-settings-wrap{position:relative;border-radius:10px;margin:40px 40px 40px 20px;max-width:1200px;min-width:1000px;background:#fff;box-shadow:0 4px 4px rgba(0,0,0,.05),0 8px 8px rgba(0,0,0,.05),0 32px 32px rgba(0,0,0,.05),0 64px 64px rgba(0,0,0,.05)}#cooked-settings-wrap.is-stuck{position:static!important}#cooked-settings-wrap .cooked-settings-update-button{position:absolute;top:30px;right:30px}#cooked-settings-wrap .cooked-settings-update-button>.button-primary{box-shadow:none;border:none}#cooked-settings-wrap.is-stuck .cooked-settings-update-button{position:fixed;top:40px;right:11px;z-index:100001}#cooked_recipe_settings .hndle,#cooked_recipe_settings button.handlediv{display:none}#cooked_recipe_settings .inside{padding:0;margin:0}#cooked-recipe-tabs{list-style:none;padding:0;margin:0;position:absolute;top:0;left:0;width:100%}#cooked-recipe-tabs li{font-size:.9rem;line-height:3rem;height:3rem;font-weight:500;display:inline-block;padding:0 1.25rem;margin:0;color:#fff}#cooked-recipe-tabs li:hover{cursor:pointer}#cooked-recipe-tabs li.active,#cooked-recipe-tabs li.active:hover{cursor:default}#cooked-recipe-tabs li:last-child{border-right:none!important}#cooked-recipe-tabs li.cooked-loading{opacity:0;background:0 0;color:#fff;position:absolute;top:0;right:0;cursor:default;font-size:14px;width:40px;height:40px;text-align:center;display:block;line-height:40px;padding:0}#cooked-recipe-tabs li.cooked-loading:hover{background:0 0;color:#fff}#cooked_recipe_settings.cooked-loading #cooked-recipe-tabs li.cooked-loading{opacity:1}#cooked_recipe_settings .inside{padding-top:41px}#cooked_recipe_settings.stuck #cooked-recipe-tabs{position:fixed;width:auto;top:32px;left:23px;z-index:100000;margin-left:160px;box-shadow:0 3px 50px rgba(0,0,0,.25)}#cooked_recipe_settings.stuck #cooked-recipe-tabs li.cooked-loading{right:160px}.cooked-recipe-tab-content-wrapper .cooked-recipe-tab-content{display:none}.cooked-recipe-tab-content-wrapper .cooked-recipe-tab-content:first-child{display:block}.cooked-left{float:left;display:inline-block;width:auto}.cooked-right{float:right;display:inline-block;width:auto}#cooked_field--cooked_pro_license_key{font-family:monospace}#cooked_recipe_settings .cooked-bm-5{margin-bottom:5px!important}#cooked_recipe_settings .cooked-bm-10{margin-bottom:10px!important}#cooked_recipe_settings .cooked-tm-10{margin-top:10px!important}#cooked_recipe_settings .cooked-bm-15{margin-bottom:15px!important}#cooked_recipe_settings .cooked-bm-20{margin-bottom:20px!important}#cooked_recipe_settings .cooked-bm-30{margin-bottom:30px!important}#cooked_recipe_settings .cooked-bm-5-up{margin-bottom:-5px!important}#cooked_recipe_settings .cooked-bm-10-up{margin-bottom:-10px!important}#cooked_recipe_settings .cooked-bm-15-up{margin-bottom:-15px!important}#cooked_recipe_settings .cooked-bm-20-up{margin-bottom:-20px!important}#cooked_recipe_settings .cooked-bm-30-up{margin-bottom:-30px!important}#cooked_recipe_settings .cooked-hr{border:none;border-top:2px solid #ddd;margin:10px 0 0 0;padding:15px 0 0 0}#cooked_recipe_settings .cooked-conditional-hidden{display:none}#cooked_recipe_settings .cooked-recipe-tab-content{padding:23px 30px 15px 30px}#cooked_recipe_settings .recipe-setting-block{margin:0 0 20px;width:100%}#cooked_recipe_settings .recipe-setting-block p{font-size:.9rem;line-height:1.5rem;margin:0 0 1rem;padding:0}#cooked_recipe_settings .recipe-setting-block p.cooked-padded{line-height:1.75rem;font-size:.85rem}#cooked_recipe_settings .recipe-setting-block .cooked-conditional-hidden{padding:0}#cooked_recipe_settings textarea{width:100%;height:75px;padding:15px;box-sizing:border-box;position:relative;top:5px}#cooked_recipe_settings .recipe-setting-block>label.cooked-select-label{top:5px}#cooked_recipe_settings select{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-shadow:none;border-radius:3px;padding:0 45px 0 9px;line-height:31px;height:33px;box-sizing:border-box;background:#fff}#cooked_recipe_settings .cooked-select-wrapper{background:#fff;position:relative;width:auto;display:inline-block;border-radius:3px;margin:0 5px 0 0}#cooked_recipe_settings .cooked-select-wrapper select{margin:0;background:0 0;position:relative}#cooked_recipe_settings .cooked-select-wrapper:before{font-family:CookedIcons;display:block;width:15px;height:15px;line-height:14px;color:#000;font-size:14px;content:"\f00b";position:absolute;right:12px;top:11px;color:rgba(0,0,0,.3)}#cooked_recipe_settings .cooked-select-wrapper:hover:before{color:#000}#cooked_recipe_settings .cooked-select-wrapper:hover select{border-color:#ccc}#cooked_recipe_settings .cooked-checkbox-radio-label{position:relative;left:1px}#cooked_recipe_settings .recipe-setting-block input[type=checkbox],#cooked_recipe_settings .recipe-setting-block input[type=radio]{margin-top:0}#cooked_recipe_settings .recipe-setting-block input[type=number]{width:65px}#cooked_recipe_settings .recipe-setting-block input[type=password],#cooked_recipe_settings .recipe-setting-block input[type=text]{width:75%}#cooked_recipe_settings .recipe-setting-block input[type=number],#cooked_recipe_settings .recipe-setting-block input[type=password],#cooked_recipe_settings .recipe-setting-block input[type=text]{margin:0 6px 5px 0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;height:33px;box-shadow:none;position:relative;top:2px;padding:0 10px}#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs .cooked-measurement-column{width:43%;margin-right:3%;display:inline-block}#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs .cooked-select-wrapper,#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs input,#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs label{width:100%;display:block}#cooked_recipe_settings .recipe-setting-block p.cooked-measurement-inputs .cooked-select-wrapper select{width:100%}#cooked_recipe_settings .recipe-setting-block input[type=number],#cooked_recipe_settings .recipe-setting-block input[type=password].cooked-small-textfield,#cooked_recipe_settings .recipe-setting-block input[type=text].cooked-small-textfield{width:150px}#cooked_recipe_settings small{display:block;line-height:1.5;font-size:12px;color:#888;padding:10px 0 0}#cooked_recipe_settings .recipe-setting-block em{color:#aaa}#cooked_recipe_settings .recipe-setting-block,#cooked_recipe_settings .recipe-setting-block .cooked-repositioned{display:block;position:relative;box-sizing:border-box;line-height:1}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned{padding-left:157px}#cooked_recipe_settings .recipe-setting-block h3.cooked-settings-title{width:70%;position:relative;z-index:2;padding:.5rem 0 .5rem;margin:0;font-size:1rem;line-height:1.5rem;font-weight:600}#cooked_recipe_settings .recipe-setting-block strong.cooked-heading{font-size:14px}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned>label{position:absolute;top:1px;left:0;width:147px;cursor:default;font-weight:600}#cooked_recipe_settings .recipe-setting-block .cooked-tooltip-icon{color:#aaa;cursor:help;display:inline-block;margin-left:10px}#cooked_recipe_settings .recipe-setting-block .cooked-tooltip-icon:hover{color:#eee}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned>.cooked-checkbox-radio-label{top:7px}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned>label{top:auto;height:33px;line-height:30px;padding:0;width:130px}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned:first-child label:first-child{padding-top:12px;margin-top:-12px}#cooked_recipe_settings .recipe-setting-block .cooked-repositioned span.cooked-padded{padding:0 0 15px;display:block;line-height:1.9}#cooked_recipe_settings .recipe-setting-block .wp-picker-container .cooked-color-field.wp-color-picker{padding:5px;height:25px;top:0;margin:0;width:74px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #ccc}#cooked_recipe_settings .recipe-setting-block input[type=text].cooked-shortcode-field{font-family:monospace;background:#f5f5f5;font-size:12px}#cooked_recipe_settings .cooked-banner-block{margin:30px -30px -17px;display:block;box-sizing:content-box;padding:10px 30px 15px;background:#f9f9f9;width:100%;border-top:1px solid #e5e5e5}#cooked_recipe_settings .cooked-advanced-options-hr{border:none;border-bottom:1px solid #ddd;height:1px;padding:10px 0 0 0;margin:0 0 20px}#cooked_recipe_settings .recipe-setting-block input.cooked-time-picker{top:0;width:100%;padding-right:70%;margin:0 0 3px}#cooked_recipe_settings .recipe-setting-block .cooked-time-picker-text{position:absolute;bottom:13px;right:40px;color:#888}#cooked_recipe_settings .cooked-alert-block{background:#fffbdc;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;margin:10px 0 15px;padding:10px 22px 2px;border:2px solid #ece8c4}#cooked_recipe_settings .recipe-setting-block.cooked-template{display:none}#cooked_recipe_settings ul.cooked-admin-ul{font-size:.9rem;margin:0 0 1rem 2rem;list-style:disc}#cooked_recipe_settings ul.cooked-admin-ul li{font-size:.9rem;padding:0;margin:0 0 .5rem}#cooked_recipe_settings .cooked-html-block{background:#fff;width:auto;min-width:300px;display:inline-block;padding:.5rem 1.3rem .25rem;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15)}#cooked_recipe_settings .recipe-setting-block .cooked-html-block h3.cooked-settings-title{width:100%;color:#333}#cooked_recipe_settings .recipe-setting-block .cooked-html-block.valid{background:#fff;border:2px solid #0aa780;box-shadow:none;border-radius:5px}#cooked_recipe_settings .recipe-setting-block .cooked-html-block.valid>.cooked-settings-title{color:#0aa780}#cooked_recipe_settings .recipe-setting-block .cooked-html-block.expired{border:2px solid #ca4a20}#cooked-directions-builder .cooked-direction-block.cooked-expanded>.cooked-heading-name,#cooked-directions-builder .cooked-direction-block.cooked-has-heading-element>.cooked-heading-name,#cooked-directions-builder .cooked-direction-block:hover>.cooked-heading-name,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded>.cooked-heading-name,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-heading-element>.cooked-heading-name,#cooked-ingredients-builder .cooked-ingredient-block:hover>.cooked-heading-name{padding-right:32px}#cooked-directions-builder .cooked-direction-block .cooked-show-heading-element,#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-heading-element{opacity:0;cursor:pointer;font-size:14px;position:absolute;top:14px;right:35px}#cooked-directions-builder .cooked-direction-block .cooked-show-heading-element .cooked-icon,#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-heading-element .cooked-icon{color:#888}#cooked-directions-builder .cooked-direction-block.cooked-expanded .cooked-show-heading-element,#cooked-directions-builder .cooked-direction-block.cooked-has-heading-element .cooked-show-heading-element,#cooked-directions-builder .cooked-direction-block:hover .cooked-show-heading-element,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded .cooked-show-heading-element,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-heading-element .cooked-show-heading-element,#cooked-ingredients-builder .cooked-ingredient-block:hover .cooked-show-heading-element{opacity:1}#cooked-directions-builder .cooked-direction-block .cooked-show-heading-element .cooked-icon:hover,#cooked-directions-builder .cooked-direction-block.cooked-expanded .cooked-show-heading-element .cooked-icon,#cooked-directions-builder .cooked-direction-block.cooked-has-heading-element .cooked-show-heading-element .cooked-icon,#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-heading-element .cooked-icon:hover,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded .cooked-show-heading-element .cooked-icon,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-heading-element .cooked-show-heading-element .cooked-icon{color:#0685ba}#cooked-directions-builder .cooked-direction-block>.cooked-heading-element,#cooked-ingredients-builder .cooked-ingredient-block>.cooked-heading-element{display:none;width:65%;float:right;margin-top:4px;padding-right:32px}#cooked-directions-builder .cooked-direction-block>.cooked-heading-element select,#cooked-ingredients-builder .cooked-ingredient-block>.cooked-heading-element select{color:#0685ba;width:100%}#cooked-directions-builder .cooked-direction-block>.cooked-heading-element label,#cooked-ingredients-builder .cooked-ingredient-block>.cooked-heading-element label{font-weight:600}#cooked-directions-builder .cooked-direction-block.cooked-expanded>.cooked-heading-element,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded>.cooked-heading-element{display:block}#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-substitution{opacity:0;cursor:pointer;font-size:14px;position:absolute;top:15px;right:58px}#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-substitution .cooked-icon{color:#888}#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded .cooked-show-substitution,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-substitution .cooked-show-substitution,#cooked-ingredients-builder .cooked-ingredient-block:hover .cooked-show-substitution{opacity:1;right:50px}#cooked-ingredients-builder .cooked-ingredient-block .cooked-show-substitution .cooked-icon:hover,#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded .cooked-show-substitution .cooked-icon,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-substitution .cooked-show-substitution .cooked-icon{color:#0685ba}#cooked-ingredients-builder .cooked-ingredient-block.cooked-expanded>.cooked-ingredient-name,#cooked-ingredients-builder .cooked-ingredient-block.cooked-has-substitution>.cooked-ingredient-name,#cooked-ingredients-builder .cooked-ingredient-block:hover>.cooked-ingredient-name{padding-right:32px}#cooked_recipe_settings .switchery-small,body.post-type-cp_recipe .switchery-small{height:1rem;width:1.75rem;border-radius:1rem;margin-right:.4rem}#cooked_recipe_settings .switchery-small>small,body.post-type-cp_recipe .switchery-small>small{width:1rem;height:1rem;padding:0}.cooked-tooltip-buttons .cooked-icon-spin{margin-top:10px;font-size:15px}.cooked-tooltip-buttons .cooked-saved-default{height:28px;line-height:28px;font-weight:700;font-size:15px;color:#888}.cooked-progress{display:none;position:relative;background:#eee;width:100%;height:6px;padding:0;border-radius:3px;margin:10px 0 0 0}.cooked-progress-text{display:none;font-size:10px;color:#aaa;padding:2px 0 5px}.cooked-progress-text.cooked-active,.cooked-progress.cooked-active{display:block}.cooked-progress .cooked-progress-bar{display:block;position:absolute;background:#0085ba;width:0%;height:6px;top:0;left:0;border-radius:3px}#cooked-import-progress.cooked-progress,#cooked-migration-progress.cooked-progress{background:#ccc;margin:25px 0 0 0;border-radius:6px;height:12px;max-width:600px}#cooked-import-progress.cooked-progress .cooked-progress-bar,#cooked-migration-progress.cooked-progress .cooked-progress-bar{border-radius:6px;height:12px}#cooked-import-progress-text.cooked-progress-text,#cooked-migration-progress-text.cooked-progress-text{font-size:11px;color:#888;max-width:600px}#cooked-import-completed,#cooked-migration-completed{display:none}#cooked-import-completed.cooked-active,#cooked-migration-completed.cooked-active{display:block}#cooked-csv-import-progress.cooked-progress{background:#ccc;margin:25px 0 0 0;border-radius:6px;height:12px;max-width:600px}#cooked-csv-import-progress.cooked-progress .cooked-progress-bar{border-radius:6px;height:12px}#cooked-csv-import-progress-text.cooked-progress-text{font-size:11px;color:#888;max-width:600px}#cooked-csv-import-completed{display:none}#cooked-csv-import-completed.cooked-active{display:block}#cooked-csv-import-form{max-width:100%;box-sizing:border-box}#cooked-csv-import-form input[type=file]{max-width:100%;box-sizing:border-box;width:100%}#cooked-csv-import-errors{max-width:100%;box-sizing:border-box;word-wrap:break-word}#cooked-import-progress.cooked-progress,#cooked-migration-progress.cooked-progress,#cooked-related-progress.cooked-progress{background:#ccc;margin:25px 0 0 0;border-radius:6px;height:12px;max-width:600px}#cooked-import-progress.cooked-progress .cooked-progress-bar,#cooked-migration-progress.cooked-progress .cooked-progress-bar,#cooked-related-progress.cooked-progress .cooked-progress-bar{border-radius:6px;height:12px}#cooked-import-progress-text.cooked-progress-text,#cooked-migration-progress-text.cooked-progress-text,#cooked-related-progress-text.cooked-progress-text{font-size:11px;color:#888;max-width:600px}#cooked-import-completed,#cooked-migration-completed,#cooked-related-completed{display:none}#cooked-import-completed.cooked-active,#cooked-migration-completed.cooked-active,#cooked-related-completed.cooked-active{display:block}.cooked-related-status{margin:0 0 12px 0;padding:8px 12px;font-size:13px;line-height:1.4;border-radius:4px;border-left:3px solid #00a878;background:#f0f9f6;color:#2d4a42;max-width:480px}#cooked-related-last-done.cooked-related-status{border-left-color:#8c9b99;background:#f6f8f7;color:#5c6b69}#cooked_recipe_settings .cooked-layout-save-default{position:relative;top:-2px;z-index:10;margin:0 0 0 15px;padding:0 8px 1px}#cooked_recipe_settings .cooked-layout-load-default{position:relative;top:-2px;z-index:10;margin:0 0 0 10px;padding:0 8px 1px}body .button.button-cooked-reset{color:#999}body .button.button-cooked-reset:hover{color:#555}#cooked_recipe_settings .cooked-ingredient-headers{display:block;padding:5px 25px 0 35px}#cooked_recipe_settings .cooked-ingredient-headers span{font-size:.7rem;font-weight:700;letter-spacing:.03rem;text-transform:uppercase;color:#0085ba;box-sizing:border-box;display:inline-block;float:left}#cooked_recipe_settings .cooked-ingredient-headers span.cooked-ingredient-header-amount{width:15%}#cooked_recipe_settings .cooked-ingredient-headers span.cooked-ingredient-header-measurement{width:20%}#cooked_recipe_settings .cooked-ingredient-headers span.cooked-ingredient-header-item{width:65%}#cooked-ingredients-builder{margin:0 0 20px}#cooked-ingredients-builder .cooked-ingredient-block{display:block;padding:5px 45px 5px 35px}#cooked-ingredients-builder .cooked-ingredient-block:hover{background:#eee}#cooked-ingredients-builder .cooked-ingredient-block input[type=number],#cooked-ingredients-builder .cooked-ingredient-block input[type=text],#cooked-ingredients-builder .cooked-ingredient-block select{margin:0;display:block;top:0}#cooked-ingredients-builder .cooked-ingredient-block>div{display:inline-block;float:left;box-sizing:border-box;padding-right:10px}#cooked-ingredients-builder .cooked-ingredient-block>div input[type=text]{width:100%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-amount{width:15%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-measurement{width:20%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-measurement .cooked-select-wrapper{width:100%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-measurement .cooked-select-wrapper select{width:100%}#cooked-ingredients-builder .cooked-ingredient-block .cooked-substitution-fields>.cooked-ingredient-measurement .cooked-select-wrapper{width:100%}#cooked-ingredients-builder .cooked-ingredient-block .cooked-substitution-fields>.cooked-ingredient-measurement .cooked-select-wrapper select{width:100%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-ingredient-name{width:65%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-heading-name{width:100%}#cooked-ingredients-builder .cooked-ingredient-block>div small.cooked-input-ex{display:block;padding:5px 0 0 2px}#cooked-ingredients-builder .cooked-ingredient-block{margin:0}#cooked-ingredients-builder .cooked-ingredient-block i.cooked-icon-drag{cursor:move;color:#ccc;font-size:32px;position:absolute;top:5px;left:1px;touch-action:none}#cooked-ingredients-builder .cooked-ingredient-block:hover i.cooked-icon-drag{color:#888}#cooked-ingredients-builder .cooked-ingredient-block.ui-sortable-helper{background:#f5f5f5;box-shadow:0 10px 20px rgba(0,0,0,.15);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}#cooked-ingredients-builder .cooked-ingredient-block.ui-sortable-placeholder{visibility:visible!important;background:#eee;display:block;width:100%;height:43px;border-top:6px solid #fff;border-bottom:6px solid #fff}#cooked-ingredients-builder .cooked-ingredient-block .cooked-delete-ingredient{cursor:pointer;font-size:14px;position:absolute;top:14px;right:11px}#cooked-ingredients-builder .cooked-ingredient-block .cooked-delete-ingredient .cooked-icon{color:#fff}#cooked-ingredients-builder .cooked-ingredient-block:hover .cooked-delete-ingredient .cooked-icon{color:#888}#cooked-ingredients-builder .cooked-ingredient-block .cooked-delete-ingredient .cooked-icon:hover{color:#de2020}#cooked-ingredients-builder .cooked-ingredient-block.cooked-ingredient-heading{margin:10px 0}#cooked-ingredients-builder .cooked-ingredient-block.cooked-ingredient-heading>div input[type=text]{padding:0 7px;font-size:16px;background:#f9f9f9;font-weight:600}#cooked-directions-builder{margin:0 0 20px}#cooked-directions-builder .cooked-direction-block{display:block;padding:15px 25px 15px 35px}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading{padding:5px 25px 5px 35px}#cooked-directions-builder .cooked-direction-block:hover{background:#f5f5f5}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading:hover{background:#eee}#cooked-directions-builder .cooked-direction-block textarea{margin:0;display:block;height:191px;top:0}#cooked-directions-builder .cooked-direction-block>div{display:inline-block;float:left;box-sizing:border-box;padding-right:15px}#cooked-directions-builder .cooked-direction-block>div:last-child{padding:0}#cooked-directions-builder .cooked-direction-block>div input[type=text]{width:100%}#cooked-directions-builder .cooked-direction-block .mce-statusbar{display:none}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image{width:120px;position:absolute;top:15px;left:35px}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image img{cursor:pointer;display:none;border-radius:3px}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .cooked-direction-img-placeholder{box-sizing:border-box;cursor:pointer;border-radius:3px;width:100%;padding-bottom:100%;background:0 0;border:2px dashed #ddd;border-radius:3px;margin-top:15px}#cooked-directions-builder .cooked-direction-block:hover>.cooked-direction-image .cooked-direction-img-placeholder{background:0 0}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .cooked-direction-img-placeholder:hover{background:#ddd;border:2px solid #ddd}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .direction-image-button{width:100%;text-align:center}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .remove-image-button{display:none;position:absolute;top:43px;right:15px}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image.cooked-has-image .remove-image-button{display:inline-block;padding:10px;background:rgba(0,0,0,.25);color:#fff}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image.cooked-has-image .remove-image-button:hover{background:#ff0100}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image.cooked-has-image img{width:100%;height:auto;display:block;margin:15px 0 0}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image.cooked-has-image .cooked-direction-img-placeholder{display:none}#cooked-directions-builder .cooked-direction-block>.cooked-direction-content{width:100%;padding-left:120px}#cooked-directions-builder .cooked-direction-block .cooked-direction-number{opacity:.4;position:absolute;display:inline-block;font-weight:800;top:17px;left:35px;font-size:1.25rem;line-height:1}#cooked-directions-builder .cooked-direction-block.cooked-direction-has-number>.cooked-direction-image{left:65px}#cooked-directions-builder .cooked-direction-block.cooked-direction-has-number>.cooked-direction-content{padding-left:175px}#cooked-directions-builder .cooked-direction-block.cooked-direction-has-number-wide>.cooked-direction-content{padding-left:185px}#cooked-directions-builder .cooked-direction-block>.cooked-heading-name{width:100%}#cooked-directions-builder .cooked-direction-block{margin:0}#cooked-directions-builder .cooked-direction-block i.cooked-icon-drag{cursor:move;color:#ccc;font-size:32px;position:absolute;top:13px;left:1px;touch-action:none}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading i.cooked-icon-drag{top:5px}#cooked-directions-builder .cooked-direction-block:hover i.cooked-icon-drag{color:#888}#cooked-directions-builder .cooked-direction-block.ui-sortable-helper{background:#f5f5f5;box-shadow:0 10px 20px rgba(0,0,0,.15);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}#cooked-directions-builder .cooked-direction-block.ui-sortable-placeholder{visibility:visible!important;background:#eee;display:block;width:100%;height:221px;border-top:6px solid #fff;border-bottom:6px solid #fff}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading.ui-sortable-placeholder{height:43px}#cooked-directions-builder .cooked-direction-block .cooked-delete-direction{cursor:pointer;font-size:14px;position:absolute;right:14px}#cooked-directions-builder .cooked-direction-block .cooked-delete-direction .cooked-icon{color:#fff}#cooked-directions-builder .cooked-direction-block:hover .cooked-delete-direction .cooked-icon{color:#888}#cooked-directions-builder .cooked-direction-block .cooked-delete-direction .cooked-icon:hover{color:#de2020}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading{margin:10px 0}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading>div input[type=text]{padding:0 7px;font-size:16px;background:#f9f9f9;font-weight:600;top:0;margin:0}#cooked-directions-builder .cooked-direction-block .cooked-delete-direction{top:16px}#cooked-directions-builder .cooked-direction-block.cooked-direction-heading .cooked-delete-direction{top:14px}#cooked-recipe-image-gallery{margin:0 -1% 0}#cooked-recipe-image-gallery .cooked-recipe-gallery-item{position:relative;overflow:hidden;cursor:move;box-sizing:border-box;display:inline-block;width:18%;height:auto;padding:0;margin:0 1% 2% 1%}#cooked-recipe-image-gallery .cooked-recipe-gallery-item:hover{opacity:.9}#cooked-recipe-image-gallery .cooked-recipe-gallery-item img{width:100%;height:auto;border-radius:3px;display:block;margin:0;padding:0;border:none}#cooked-recipe-image-gallery .cooked-recipe-gallery-item.ui-sortable-helper,#cooked-recipe-image-gallery .cooked-recipe-gallery-item.ui-sortable-helper:hover{opacity:.75;box-shadow:0 10px 20px rgba(0,0,0,.15)}#cooked-recipe-image-gallery .cooked-recipe-gallery-item.ui-sortable-placeholder{width:18%;height:auto;visibility:visible!important;border-radius:3px;background:#ddd;display:inline-block}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .remove-image-button{border-radius:0 3px 0 0;display:inline-block;position:absolute;top:0;right:0;padding:10px;background:rgba(0,0,0,.25);color:#fff}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .remove-image-button:hover{background:#ff0100}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .cooked-gallery-edit-button{border-radius:3px 0 0 0;display:inline-block;position:absolute;top:0;left:0;padding:10px;background:rgba(0,0,0,.25);color:#fff}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .cooked-gallery-edit-button:hover{background:#0084bc}#cooked-recipe-image-gallery .cooked-recipe-gallery-item .cooked-gallery-item-title{position:absolute;left:0;bottom:0;box-sizing:border-box;width:100%;border-radius:0 0 3px 3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;padding:10px 10px 11px;text-align:center;background:#000;background:rgba(0,0,0,.3);color:#fff;font-size:12px}#cooked-recipe-image-gallery .cooked-recipe-gallery-item:hover .cooked-gallery-item-title{background:#000;background:rgba(0,0,0,.75)}#cooked-recipe-image-gallery .cooked-recipe-gallery-item.ui-sortable-helper{-webkit-animation:cooked-wiggle .4s infinite;-moz-animation:cooked-wiggle .4s infinite;-o-animation:cooked-wiggle .4s infinite;animation:cooked-wiggle .4s infinite}#cooked_recipe_settings label.cooked-nutrition-label{display:block;font-size:.7rem;letter-spacing:.03rem;font-weight:700;text-transform:uppercase;line-height:1;margin:0 0 7px}#cooked_recipe_settings #cooked-nutrition-label{line-height:1.6;font-size:1.1rem;border:1px solid #aaa;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:5%;margin:0 0 2rem;font-family:Helvetica,Arial,sans-serif;container-name:nutrition-label;container-type:inline-size}#cooked_recipe_settings #cooked-nutrition-label h2{font-size:2.5rem;line-height:1;letter-spacing:0;font-weight:800;padding:0 0 .5rem 0;margin:0 0 .4rem;color:#333;border-bottom:1px solid #aaa}#cooked_recipe_settings #cooked-nutrition-label p.cooked-daily-value-text{padding:.5rem 0 0 0;margin:0;font-size:.9rem}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-servings p{font-size:1.5rem}#cooked_recipe_settings #cooked-nutrition-label ul{list-style:none;margin:0;padding:0}#cooked_recipe_settings #cooked-nutrition-label li{position:relative;margin:0;padding:0 0 3px 0;border-top:1px solid #aaa}#cooked_recipe_settings #cooked-nutrition-label li li{padding:3px 0 0;margin:3px 0 0}#cooked_recipe_settings #cooked-nutrition-label li:after{content:"";display:table;clear:both}#cooked_recipe_settings #cooked-nutrition-label li.no-after:after{content:none}#cooked_recipe_settings #cooked-nutrition-label li.cooked-nut-spacer{border:none;height:.6rem;padding:0;background:#333}#cooked_recipe_settings #cooked-nutrition-label ul li.cooked-nut-no-border,#cooked_recipe_settings #cooked-nutrition-label>ul>li:first-child{border:none}#cooked_recipe_settings #cooked-nutrition-label li ul{padding:0;margin:0 0 0 20px}#cooked_recipe_settings #cooked-nutrition-label li ul.cooked-right{margin:0}#cooked_recipe_settings #cooked-nutrition-label li ul.cooked-right li{border:none;padding:0;margin:0}#cooked_recipe_settings #cooked-nutrition-label li.cooked-calories ul.cooked-right li strong.cooked-nut-label{font-size:2.5rem;line-height:1}#cooked_recipe_settings #cooked-nutrition-label .cooked-calories{border-top:none;display:flex;justify-content:space-between;align-items:baseline;padding:0}#cooked_recipe_settings #cooked-nutrition-label .cooked-calories strong,#cooked_recipe_settings #cooked-nutrition-label .cooked-calories strong.cooked-nut-label{font-size:2rem;font-weight:800}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-servings li{border:none}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-servings{margin:0}#cooked_recipe_settings #cooked-nutrition-label .cooked-nut-hr{border:none;border-top:1.3rem solid #333;margin:.1rem 0 0;padding:0}#cooked_recipe_settings #cooked-nutrition-label strong{font-weight:800}#cooked_recipe_settings #cooked-nutrition-label .cooked-serving-size strong,#cooked_recipe_settings #cooked-nutrition-label .cooked-serving-size strong.cooked-nut-label{font-size:1.5rem;font-weight:800}#cooked_recipe_settings #cooked-nutrition-label strong.cooked-nut-heading{font-size:1rem}#cooked_recipe_settings #cooked-nutrition-label strong.cooked-nut-label{font-weight:400}#cooked_recipe_settings #cooked-nutrition-label .cooked-nut-right{float:right}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-bottom{margin:0 0 .75rem}#cooked_recipe_settings #cooked-nutrition-label ul.cooked-nut-bottom li{border-top:none;border-bottom:1px solid #aaa;float:left;width:100%;box-sizing:border-box}#cooked_recipe_settings .cooked-measurement-inputs .cooked-select-wrapper:before{top:8px}.cooked-auto-nutrition{display:flex;justify-content:end;margin:0 0 1rem}#cooked-tooltip-auto-nutrition-notice{margin:0}.cooked-settings-header{border-radius:10px 10px 0 0;width:auto;height:90px;line-height:85px;padding:0 30px;font-weight:600;box-sizing:border-box;background:#33373c;color:#fff;font-size:29px;letter-spacing:-.03rem}.cooked-settings-header .cooked-icon{color:#00e0a9}.cooked-settings-submit-wrap{padding:0 0 35px 35px;margin:-20px 0 0}#cooked_recipe_settings .recipe-setting-block .cooked-permalink-field-wrapper span{font-size:14px;display:inline-block;line-height:32px;padding:5px 0 0 0}#cooked_recipe_settings .recipe-setting-block input[type=text].cooked-permalink-field{position:relative;top:0;display:inline-block;width:150px;margin:0 10px}#cooked-settings-panel{position:relative;margin:0;padding:0}#cooked-settings-tabs{display:flex;width:auto;padding:0 20px 0 0;margin:0;list-style:none}#cooked-settings-tabs li{font-size:13px;line-height:1;font-weight:400;display:block;padding:0;margin:0;color:#fff}#cooked-settings-tabs li .cooked-icon{font-size:14px}#cooked-settings-tabs li .cooked-icon.cooked-icon-recipe-icon{font-size:20px;top:2px;position:relative}#cooked-settings-tabs li:hover{cursor:pointer}#cooked-settings-tabs li.active,#cooked-settings-tabs li.active:hover{cursor:default}#cooked-settings-tabs a{line-height:41px;font-size:.9rem;letter-spacing:.03rem;padding:2px 15px 4px;display:block;outline:0;box-shadow:none;border:none;white-space:nowrap}#cooked-settings-panel.stuck{padding-top:41px}#cooked-settings-panel.stuck #cooked-settings-tabs{position:fixed;width:calc(100% - 180px);top:32px;left:0;z-index:100000;margin-left:160px}#cooked-settings-panel .cooked-settings-tab-content-wrapper .cooked-settings-tab-content{display:none}#cooked-settings-panel .cooked-settings-tab-content-wrapper .cooked-settings-tab-content:first-child{display:block}#cooked-settings-panel .cooked-settings-tab-content{padding:25px 35px;margin-right:0}#cooked-settings-panel #cooked_recipe_settings .recipe-setting-block h3.cooked-settings-title{padding-bottom:.2rem}#cooked_recipe_settings .cooked-setting-column-14{position:relative;width:25%;float:left;padding-right:20px;box-sizing:border-box}#cooked_recipe_settings .cooked-setting-column-13{position:relative;width:33%;float:left;padding-right:20px;box-sizing:border-box}#cooked_recipe_settings .cooked-setting-column-23{position:relative;width:66%;float:left;padding-right:20px;box-sizing:border-box}#cooked_recipe_settings .cooked-setting-column-12{position:relative;width:50%;float:left;padding-right:20px;box-sizing:border-box}#cooked_recipe_settings .cooked-setting-column-12 input[type=text],#cooked_recipe_settings .cooked-setting-column-13 input[type=text],#cooked_recipe_settings .cooked-setting-column-14 input[type=text],#cooked_recipe_settings .cooked-setting-column-23 input[type=text],#cooked_recipe_settings .recipe-setting-block input[type=text].cooked-shortcode-field{width:95%}#cooked_recipe_settings .cooked-setting-column-12 .cooked-select-wrapper,#cooked_recipe_settings .cooked-setting-column-12 select,#cooked_recipe_settings .cooked-setting-column-13 .cooked-select-wrapper,#cooked_recipe_settings .cooked-setting-column-13 select,#cooked_recipe_settings .cooked-setting-column-14 .cooked-select-wrapper,#cooked_recipe_settings .cooked-setting-column-14 select,#cooked_recipe_settings .cooked-setting-column-23 select{width:100%}#cooked_recipe_settings .cooked-setting-column-14.cooked-tb-col{padding:0}#cooked-welcome-screen{padding:15px 50px 0 30px;position:relative}#cooked-welcome-screen .cooked-badge{position:absolute;top:0;right:0}#cooked-welcome-screen .cooked-badge img{border:none;width:150px;height:150px;display:block;margin:0}#cooked-welcome-screen .about-text{margin-bottom:40px;line-height:1.8;font-size:17px;margin-right:260px}#cooked-welcome-screen .about-wrap{margin:25px auto 0;max-width:1000px}#cooked-welcome-screen .about-wrap h1{font-size:2.25rem}#cooked-welcome-screen .about-wrap p{font-size:1rem;margin:0 0 2rem;line-height:1.7rem}#cooked-welcome-screen #cooked-welcome-panel{background:#fff;padding:30px 30px 15px 30px;-moz-border-radius:15px;-webkit-border-radius:15px;border-radius:15px;border:none;box-shadow:0 4px 4px rgba(0,0,0,.05),0 8px 8px rgba(0,0,0,.05),0 32px 32px rgba(0,0,0,.05),0 64px 64px rgba(0,0,0,.05)}#cooked-welcome-screen #cooked-welcome-panel img.cooked-welcome-banner{border:none;display:block;padding:0;margin:0 0 30px;box-sizing:border-box;border-radius:5px 5px 0 0}#cooked-welcome-screen #cooked-welcome-panel .cooked-welcome-panel-intro{text-align:center;margin:0 50px 2rem;padding:15px 0;border-bottom:1px solid #e5e5e5}#cooked-welcome-screen #cooked-welcome-panel .cooked-welcome-panel-intro h1{font-size:1.75rem;margin:0 0 1rem;padding:0}#cooked-welcome-screen #cooked-welcome-panel .cooked-welcome-panel-intro p{max-width:600px;font-size:1.1rem;line-height:1.8rem;margin:0 auto 2rem;padding:0}#cooked-welcome-screen .cooked-welcome-panel a{text-decoration:none}#cooked-welcome-screen .cooked-welcome-panel-column{display:block!important}#cooked-welcome-screen .cooked-welcome-panel-column>strong{font-size:1rem}#cooked-welcome-screen .cooked-welcome-panel-column h3{font-size:1.75rem;margin:0 0 1rem;position:relative}#cooked-welcome-screen .cooked-welcome-panel-column h3 a{position:absolute;top:0;right:0;font-size:12px;font-weight:400}#cooked-welcome-screen .cooked-welcome-panel-column h3 a i.fa{position:relative;top:1px}#cooked-welcome-screen .cooked-welcome-panel-column h4{font-size:1.25rem;margin:0 0 1rem;position:relative}#cooked-welcome-screen .cooked-welcome-panel-column h4 a{position:absolute;top:0;right:0;font-size:12px;font-weight:400}#cooked-welcome-screen .cooked-welcome-panel-column h4 a i.fa{position:relative;top:1px}#cooked-welcome-screen .cooked-welcome-panel-column.cooked-welcome-panel-full{width:100%;padding-right:0;float:none}#cooked-welcome-screen .cooked-welcome-panel-column.cooked-welcome-panel-last{width:70%;padding-right:0;float:right}#cooked-welcome-screen .cooked-welcome-panel-column .fa-external-link{color:#888}#cooked-welcome-screen .cooked-welcome-panel-content{min-height:1px;padding:10px 50px 20px;margin:0}#cooked-welcome-screen .cooked-welcome-panel .cooked-welcome-panel-column-container{display:flex;justify-content:between!important;padding:0!important;flex-wrap:wrap}#cooked-welcome-screen .cooked-welcome-panel-column{box-sizing:border-box;padding-right:2rem;width:30%}#cooked-welcome-screen .cooked-pro-features{width:85%;margin:0 auto;padding:0 0 10px;display:flex;flex-wrap:wrap}#cooked-welcome-screen ul.cooked-whatsnew-list{margin-right:0}#cooked-welcome-screen ul.cooked-whatsnew-list li{line-height:1.7;position:relative;margin-right:0;border-top:1px solid #e5e5e5;padding:8px 0 4px 0}#cooked-welcome-screen ul.cooked-whatsnew-list li:first-child{border:none;padding-top:0}#cooked-welcome-screen ul.cooked-whatsnew-list em.fix,#cooked-welcome-screen ul.cooked-whatsnew-list strong.new,#cooked-welcome-screen ul.cooked-whatsnew-list strong.tweak{position:absolute;font-style:normal;display:inline-block;background:#aaa;text-transform:uppercase;top:11px;left:0;color:#fff;font-weight:600;-moz-border-radius:3px;-webkit-border-radius:3px;text-align:center;width:38px;border-radius:3px;font-size:10px;line-height:19px;height:19px;padding:0 6px;margin:0 6px 0 0}#cooked-welcome-screen ul.cooked-whatsnew-list li:first-child em.fix,#cooked-welcome-screen ul.cooked-whatsnew-list li:first-child strong.new,#cooked-welcome-screen ul.cooked-whatsnew-list li:first-child strong.tweak{top:3px}#cooked-welcome-screen ul.cooked-whatsnew-list strong.new{background:#56c477}#cooked-welcome-screen ul.cooked-whatsnew-list strong.tweak{background:#0073aa}#cooked-welcome-screen ul.cooked-whatsnew-list em.fix{background:#ffad10}#cooked-welcome-screen ul li.cooked-pro i.cooked-icon{color:#ffad10}#cooked-welcome-screen ul li.cooked-pro a{font-weight:600;color:#ffad10}#cooked-welcome-screen ul li.cooked-pro a:hover{color:#d3910f}#cooked-welcome-screen ul.cooked-whatsnew-pro{margin-bottom:0;flex:1 0 auto;width:33.333%}#cooked-welcome-screen ul.cooked-whatsnew-pro li{padding-left:0;font-size:1.15rem;font-weight:400}#cooked-welcome-screen ul.cooked-whatsnew-pro li i.cooked-icon-star{color:#ffad10;margin:0 7px 0 0;font-size:19px;position:relative;top:1px}#cooked-welcome-screen .cooked-welcome-bottom{text-align:center;background:#f9f9f9;margin:30px -80px -15px;border-top:1px solid #f1f1f1}#cooked-welcome-screen .cooked-pro-button{display:inline-block;clear:both;text-align:center;width:auto;margin:30px auto;padding:20px 25px 21px;font-size:1.25rem;line-height:1rem;font-weight:600;color:#fff;background:#ffad10;border-radius:50px}#cooked-welcome-screen .cooked-pro-button:hover{background:#e08704}#cooked-welcome-screen .cooked-coupon-code{color:#4c5e65;display:inline-block;font-size:17px;padding:0 0 0 1.5rem}@media screen and (max-width:1050px){#cooked-welcome-screen ul.cooked-whatsnew-pro{width:100%;margin-top:0}#cooked-welcome-screen ul.cooked-whatsnew-pro:first-child{margin-top:10px}#cooked-welcome-screen ul.cooked-whatsnew-pro li:first-child{border-top:1px solid #e5e5e5;padding-top:8px}#cooked-welcome-screen ul.cooked-whatsnew-pro:first-child li:first-child{border:none;padding-top:0}}@media screen and (max-width:870px){#cooked-welcome-screen .cooked-pro-features{width:90%}#cooked-welcome-screen .cooked-welcome-panel-column{padding-right:0}#cooked-welcome-screen .cooked-welcome-panel-column.cooked-welcome-panel-last{width:100%;padding-top:20px}#cooked-welcome-screen .about-wrap{margin-top:0}#cooked-welcome-screen .cooked-welcome-panel .cooked-welcome-panel-column li{display:block}}@media screen and (max-width:782px){#cooked-welcome-screen .cooked-pro-features{width:100%}#cooked-welcome-screen{padding:15px 40px 0 30px}#cooked-welcome-screen .cooked-badge{display:none}#cooked-welcome-screen .about-text,#cooked-welcome-screen .about-wrap h1{margin-right:0}#cooked-welcome-screen .cooked-welcome-panel-column h3 a{display:block;position:relative}}@media screen and (max-width:500px){#cooked-welcome-screen #cooked-welcome-panel img.cooked-welcome-banner{display:none}#cooked-welcome-screen .about-wrap h1{font-size:1.8rem}#cooked-welcome-screen .about-text{font-size:15px}}#cooked_recipe_settings #cooked-nutrition-label .cooked-nut-label,#cooked_recipe_settings .recipe-setting-block h3.cooked-settings-title{color:#0173aa}#cooked_recipe_settings .recipe-setting-block.cooked-danger h3.cooked-settings-title{color:#d44d1f}#cooked_recipe_settings .cooked-alert-block h3.cooked-settings-title{color:#c02a2a}#cooked-recipe-tabs{background:#fff}#cooked-recipe-tabs li{background:#454b52;color:#fff;color:rgba(255,255,255,.75);border-right:1px solid rgba(0,0,0,.15)}#cooked-recipe-tabs li:hover{background:#535a62;color:#fff;border-right:1px solid rgba(0,0,0,.15)}#cooked-recipe-tabs li.active{background:#fff;color:#333;border-right:1px solid #fff}#cooked-settings-tabs{background:#454b52}#cooked-settings-tabs a{color:#fff;text-decoration:none}#cooked-settings-tabs li{background:#454b52;color:#fff;color:rgba(255,255,255,.75)}#cooked-settings-tabs li:hover{background:#535a62;color:#fff}#cooked-settings-tabs li.active{background:#fff}#cooked-settings-tabs li.active a{color:#000}#cooked-directions-builder .cooked-direction-block>.cooked-direction-image .cooked-direction-img-placeholder,#cooked-migration-progress.cooked-progress .cooked-progress-bar,#cooked-related-progress.cooked-progress .cooked-progress-bar,#cooked_recipe_settings .cooked-select-wrapper:before,#cooked_recipe_settings .cooked-tooltip-icon,#cooked_recipe_settings select{-webkit-transition:all .15s ease-out;-moz-transition:all .15s ease-out;transition:all .15s ease-out}#cooked-recipe-image-gallery .cooked-recipe-gallery-item{-webkit-transition:transform .15s ease-out;-moz-transition:all .15s ease-out;transition:transform .15s ease-out}#cooked-recipe-tabs li.cooked-loading{-webkit-transition:opacity .15s ease-out;-moz-transition:all .15s ease-out;transition:opacity .15s ease-out}@-webkit-keyframes cooked-wiggle{0%{-webkit-transform:scale(1)}50%{-webkit-transform:scale(1.03)}100%{-webkit-transform:scale(1)}}@-moz-keyframes cooked-wiggle{0%{-moz-transform:scale(1)}50%{-moz-transform:scale(1.03)}100%{-moz-transform:scale(1)}}@-o-keyframes cooked-wiggle{0%{-o-transform:scale(1)}50%{-o-transform:scale(1.03)}100%{-o-transform:scale(1)}}@keyframes cooked-wiggle{0%{transform:scale(1)}50%{transform:scale(1.03)}100%{transform:scale(1)}}@media screen and (max-width:1150px){#cooked-recipe-tabs li{font-size:.8rem;padding:0 1.2rem 0 .7rem}#cooked-recipe-tabs li .cooked-icon{display:none}}@media screen and (max-width:960px){#cooked_recipe_settings.stuck #cooked-recipe-tabs{margin-left:36px}}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields{width:100%;float:left;clear:both;margin-top:10px;padding-top:10px;padding-right:0;padding-left:0;margin-left:0;box-sizing:border-box;padding-bottom:5px;position:relative}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields .cooked-ingredient-amount{width:15%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields .cooked-ingredient-measurement{width:20%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields .cooked-ingredient-name{width:65%}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields .cooked-sub-label{color:#7c7c7c;font-size:14px;font-weight:300}#cooked-ingredients-builder .cooked-ingredient-block>.cooked-substitution-fields>div{display:inline-block;float:left;box-sizing:border-box;padding-right:10px}.cooked-bulk-add-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.6);z-index:100100;display:flex;align-items:center;justify-content:center}.cooked-bulk-add-modal{background:#fff;border-radius:6px;width:600px;max-width:90vw;max-height:80vh;display:flex;flex-direction:column;box-shadow:0 5px 30px rgba(0,0,0,.3)}.cooked-bulk-add-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #ddd}.cooked-bulk-add-header h2{margin:0;font-size:18px;line-height:1.3}.cooked-bulk-add-close{font-size:24px;text-decoration:none;color:#666;line-height:1;padding:0 4px}.cooked-bulk-add-close:hover{color:#d63638}.cooked-bulk-add-body{padding:20px;overflow-y:auto;flex:1}.cooked-bulk-add-help{margin-top:0;color:#666;font-size:13px}#cooked-bulk-add-textarea{width:100%;min-height:160px;font-size:14px;padding:10px;box-sizing:border-box;resize:vertical}.cooked-bulk-add-preview{margin-top:16px}.cooked-bulk-add-preview-label{margin:0 0 8px;font-size:13px}.cooked-bulk-add-preview-notice-ingredients{display:none;margin:10px 0 0;font-size:12px;line-height:1.45;color:#b45309;font-weight:700;gap:6px;align-items:flex-start}#cooked-bulk-add-preview[data-bulk-type=ingredients] .cooked-bulk-add-preview-notice-ingredients{display:flex}.cooked-bulk-add-preview-notice-mark{flex-shrink:0;font-weight:700;line-height:1.45;color:#b45309}.cooked-bulk-add-preview-notice-text{flex:1;min-width:0;font-weight:700;color:#b45309}.cooked-bulk-add-preview-list{max-height:200px;overflow-y:auto;border:1px solid #ddd;border-radius:4px;padding:4px}.cooked-bulk-add-preview-row{display:flex;align-items:center;gap:8px;padding:4px 6px;border-bottom:1px solid #f0f0f0}.cooked-bulk-add-preview-row:last-child{border-bottom:0}.cooked-bulk-add-heading-toggle{display:flex;align-items:center;gap:4px;white-space:nowrap;font-size:12px;color:#666;cursor:pointer;flex-shrink:0}.cooked-bulk-add-heading-toggle input[type=checkbox]{margin:0}.cooked-bulk-add-preview-text{flex:1;border:1px solid #ddd;border-radius:3px;padding:4px 8px;font-size:13px}.cooked-bulk-add-preview-row:not(.cooked-bulk-add-preview-row-ingredient).cooked-bulk-add-is-heading .cooked-bulk-add-preview-text{font-weight:700}.cooked-bulk-add-preview-row-ingredient .cooked-bulk-add-heading-line-wrap{display:none;flex:1;align-items:center;gap:8px;min-width:0}.cooked-bulk-add-preview-row-ingredient.cooked-bulk-add-is-heading .cooked-bulk-add-heading-line-wrap{display:flex}.cooked-bulk-add-preview-row-ingredient.cooked-bulk-add-is-heading .cooked-bulk-add-parsed-amount,.cooked-bulk-add-preview-row-ingredient.cooked-bulk-add-is-heading .cooked-bulk-add-parsed-name,.cooked-bulk-add-preview-row-ingredient.cooked-bulk-add-is-heading .cooked-bulk-add-parsed-unit{display:none}.cooked-bulk-add-heading-line-label{flex-shrink:0;font-size:12px;font-weight:600;color:#666}.cooked-bulk-add-preview-row-ingredient .cooked-bulk-add-heading-line-wrap .cooked-bulk-add-preview-text{flex:1;min-width:0;border:1px solid #ddd;border-radius:3px;padding:4px 8px;font-size:13px;font-weight:600}.cooked-bulk-add-preview-header{display:flex;align-items:center;gap:8px;padding:4px 6px 6px;border-bottom:1px solid #ddd;font-size:11px;font-weight:600;color:#999;text-transform:uppercase;letter-spacing:.5px}.cooked-bulk-add-col-heading{flex-shrink:0;width:108px}.cooked-bulk-add-col-amount{width:72px;flex-shrink:0}.cooked-bulk-add-col-unit{width:108px;flex-shrink:0}.cooked-bulk-add-col-name{flex:1}.cooked-bulk-add-parsed-amount{width:72px;flex-shrink:0;border:1px solid #ddd;border-radius:3px;padding:4px 6px;font-size:13px;text-align:center}.cooked-bulk-add-parsed-unit{width:108px;flex-shrink:0;border:1px solid #ddd;border-radius:3px;padding:4px 6px;font-size:13px}.cooked-bulk-add-parsed-name{flex:1;border:1px solid #ddd;border-radius:3px;padding:4px 6px;font-size:13px}.cooked-bulk-add-footer{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:14px 20px;border-top:1px solid #ddd}.cooked-bulk-add-footer .button,.cooked-bulk-add-footer .button.button-primary{float:none;margin:0;vertical-align:middle}.cooked-bulk-add-spinner{float:none!important;margin:0!important} \ No newline at end of file diff --git a/assets/admin/js/cooked-functions.js b/assets/admin/js/cooked-functions.js index 638fbe1..021d0a5 100644 --- a/assets/admin/js/cooked-functions.js +++ b/assets/admin/js/cooked-functions.js @@ -1,6 +1,6 @@ var $_CookedConditionalTimeout = false; -// Touch event support for sortable drag handles on mobile devices +/** Maps touch events on sortable drag handles to mouse events so sortable works on touch devices. */ var cookedSortableTouchHandler = function(event) { var target = event.target; var types = { @@ -178,32 +178,29 @@ var cookedSortableTouchHandler = function(event) { if (confirm_save && !thisButton.hasClass('disabled')) { thisContainer.find('.button, .button-primary').addClass('disabled'); - var ajax__save_default_new = $.post( + $.post( cooked_admin_functions_js_vars.ajax_url, { action: 'cooked_save_default', 'default_content': recipe_editor_content, nonce: cooked_save_default_nonce }, - function(result) { - var ajax__save_default_all = $.post( + function() { + $.post( cooked_admin_functions_js_vars.ajax_url, { - action: 'cooked_get_recipe_ids', + action: 'cooked_get_recipe_count', nonce: cooked_save_default_bulk_nonce }, - function(json_recipe_ids) { + function(response) { thisButton.removeClass("button-primary").addClass("button"); - if (json_recipe_ids) { - var recipe_ids = JSON.parse(json_recipe_ids), - total_recipes = Object.keys(recipe_ids).length; - - if (total_recipes > 0) { - cooked_set_default_template(json_recipe_ids, total_recipes, recipe_editor_content, cooked_save_default_bulk_nonce, instance); - } + if (response && response.success && response.data.total > 0) { + cooked_recipe_update_counter = 0; + cooked_set_default_template(0, response.data.total, recipe_editor_content, cooked_save_default_bulk_nonce, instance); } - } + }, + 'json' ); } ); @@ -666,6 +663,9 @@ var cookedSortableTouchHandler = function(event) { }); } + // Bulk Add Modal + cooked_init_bulk_add($); + if ( $_CookedRecipeGallery.length ) { var gallery_images_frame; @@ -794,56 +794,59 @@ var cookedSortableTouchHandler = function(event) { })( jQuery ); var cooked_recipe_update_counter = 0; +var cooked_bulk_per_page = 20; -function cooked_set_default_template(recipe_ids, total_recipes, content, nonce, instance) { - var temp_counter = 0, - total_counter = 0, - progress_percent = 0; - - if (total_recipes > 0) { - var progress = jQuery('#cooked-template-progress'); - var progress_bar = progress.find('.cooked-progress-bar'); - var progress_text = jQuery('#cooked-template-progress-text'); - - if (!progress.hasClass('cooked-active')) { - progress.addClass('cooked-active'); - progress_text.addClass('cooked-active'); - progress_bar.css({ "width" : "0%" }); - instance.reposition(); - } +/** Applies default recipe content in paginated AJAX batches and updates the progress UI. */ +function cooked_set_default_template(page, total_recipes, content, nonce, instance) { + if (total_recipes <= 0) { + return; + } + + var progress = jQuery('#cooked-template-progress'); + var progress_bar = progress.find('.cooked-progress-bar'); + var progress_text = jQuery('#cooked-template-progress-text'); + + if (!progress.hasClass('cooked-active')) { + progress.addClass('cooked-active'); + progress_text.addClass('cooked-active'); + progress_bar.css({ "width" : "0%" }); + instance.reposition(); + } - var ajax__bulk_save_default_template = jQuery.post( - cooked_admin_functions_js_vars.ajax_url, - { - action: 'cooked_save_default_bulk', - recipe_ids: recipe_ids, - default_content: content, - nonce: nonce - }, - function(new_recipe_ids) { - if (new_recipe_ids && new_recipe_ids != 'false' && new_recipe_ids != false) { - var leftover_recipe_ids = JSON.parse(new_recipe_ids), - leftover_recipes = Object.keys(leftover_recipe_ids).length; - - cooked_recipe_update_counter = total_recipes - leftover_recipes; - - progress_percent = Math.round((cooked_recipe_update_counter / total_recipes ) * 100); - progress_bar.css({ "width" : progress_percent + "%" }); - progress_text.text(cooked_recipe_update_counter + " / " + total_recipes); - cooked_set_default_template(new_recipe_ids, total_recipes, content, nonce, instance); + jQuery.post( + cooked_admin_functions_js_vars.ajax_url, + { + action: 'cooked_save_default_bulk', + page: page, + default_content: content, + nonce: nonce + }, + function(response) { + if (response && response.success) { + cooked_recipe_update_counter = Math.min((page + 1) * cooked_bulk_per_page, total_recipes); + + var progress_percent = Math.round((cooked_recipe_update_counter / total_recipes) * 100); + progress_bar.css({ "width" : progress_percent + "%" }); + progress_text.text(cooked_recipe_update_counter + " / " + total_recipes); + + if (response.data.has_more) { + cooked_set_default_template(page + 1, total_recipes, content, nonce, instance); } else { jQuery('.cooked-save-default-all').text(cooked_admin_functions_js_vars.i18n_applied); progress_bar.css({ "width" : "100%" }); + progress_text.text(total_recipes + " / " + total_recipes); progress.removeClass('cooked-active'); progress_text.removeClass('cooked-active').text(""); instance.reposition(); } } - ); - }; + }, + 'json' + ); } +/** Sets the total time field to prep time plus cook time. */ function cooked_updateTotalTimeValue( prepTime, cookTime ) { var totalTimeInput = jQuery( '#cooked-total-time' ), totalTime = prepTime + cookTime; @@ -858,6 +861,7 @@ function cooked_init_gallery_sorting() { jQuery('#cooked-recipe-image-gallery').sortable(); } +/** Syncs nutrition tab inputs with the live nutrition label preview (values and daily-value percents). */ function init_nutrition_facts( nutritionTab ) { nutritionTab.find('input').each(function() { var thisInput = jQuery(this), @@ -1108,3 +1112,320 @@ function cooked_init_conditional_field(thisID) { }, 25); }); } + +/** Wires the bulk-add modal (preview, parse, submit) for ingredients and directions. */ +function cooked_init_bulk_add($) { + var $overlay = $('#cooked-bulk-add-overlay'); + if (!$overlay.length) return; + + var $textarea = $('#cooked-bulk-add-textarea'), + $preview = $('#cooked-bulk-add-preview'), + $previewList = $('#cooked-bulk-add-preview-list'), + $title = $('#cooked-bulk-add-title'), + $typeField = $('#cooked-bulk-add-type'), + $submitBtn = $overlay.find('.cooked-bulk-add-submit'), + $spinner = $overlay.find('.cooked-bulk-add-spinner'), + jsVars = cooked_admin_functions_js_vars, + parseTimer = null, + lastParsedText = ''; + + /** Opens the bulk-add overlay for the given type and sets copy/placeholders. */ + function openModal(type) { + $typeField.val(type); + $textarea.val(''); + $previewList.empty(); + $preview.attr('data-bulk-type', ''); + $preview.hide(); + $submitBtn.attr('disabled', 'disabled'); + $spinner.hide(); + lastParsedText = ''; + + if (type === 'ingredients') { + $title.text(jsVars.i18n_bulk_add_ingredients); + $textarea.attr('placeholder', jsVars.i18n_bulk_add_placeholder_ingredients); + $submitBtn.text(jsVars.i18n_bulk_add_submit_ingredients); + } else { + $title.text(jsVars.i18n_bulk_add_directions); + $textarea.attr('placeholder', jsVars.i18n_bulk_add_placeholder_directions); + $submitBtn.text(jsVars.i18n_bulk_add_submit_directions); + } + + $overlay.show(); + $textarea.focus(); + } + + /** Hides the bulk-add overlay and clears its state. */ + function closeModal() { + $overlay.hide(); + $textarea.val(''); + $previewList.empty(); + $preview.attr('data-bulk-type', ''); + $preview.hide(); + lastParsedText = ''; + if (parseTimer) clearTimeout(parseTimer); + } + + /** Strips leading list markers from a single line of bulk text. */ + function cleanLine(line) { + line = line.trim(); + line = line.replace(/^(\d+\)\s+|\d+\.\s+|[a-z]+\)\s+|[•·\-\*]\s+|[A-Z]+\.\s+|[IVX]+\.\s+)/, ''); + return line.trim(); + } + + /** Splits bulk textarea content into non-empty cleaned lines. */ + function parseTextToLines(text) { + var lines = text.split(/[\r\n]+/); + var result = []; + for (var i = 0; i < lines.length; i++) { + var cleaned = cleanLine(lines[i]); + if (cleaned) { + result.push(cleaned); + } + } + return result; + } + + /** Escapes a string for safe insertion into HTML attribute strings. */ + function escHtml(str) { + return $('').text(str).html(); + } + + /** Renders bulk directions preview rows from parsed lines. */ + function renderDirectionsPreview(lines) { + $previewList.empty(); + if (!lines.length) { + $preview.attr('data-bulk-type', ''); + $preview.hide(); + $submitBtn.attr('disabled', 'disabled'); + return; + } + $preview.attr('data-bulk-type', 'directions'); + $preview.show(); + $submitBtn.removeAttr('disabled'); + + for (var i = 0; i < lines.length; i++) { + var $row = $('
'); + var $cb = $(''); + var $text = $(''); + $row.append($cb).append($text); + $previewList.append($row); + } + } + + /** Renders bulk ingredients preview rows (optionally with server-parsed amount/unit/name). */ + function renderIngredientsPreview(lines, parsed) { + $previewList.empty(); + if (!lines.length) { + $preview.attr('data-bulk-type', ''); + $preview.hide(); + $submitBtn.attr('disabled', 'disabled'); + return; + } + $preview.attr('data-bulk-type', 'ingredients'); + $preview.show(); + $submitBtn.removeAttr('disabled'); + + if (!$previewList.find('.cooked-bulk-add-preview-header').length) { + $previewList.prepend( + '
' + + '' + + '' + escHtml(jsVars.i18n_bulk_add_amount) + '' + + '' + escHtml(jsVars.i18n_bulk_add_unit) + '' + + '' + escHtml(jsVars.i18n_bulk_add_name) + '' + + '
' + ); + } + + for (var i = 0; i < lines.length; i++) { + var p = parsed && parsed[i] ? parsed[i] : { amount: '', measurement: '', name: lines[i] }; + var $row = $('
'); + var $cb = $(''); + var $headingWrap = $('
'); + var $headingLbl = $('').text(jsVars.i18n_bulk_add_heading_line_label); + var $lineInput = $('').val(lines[i]); + $headingWrap.append($headingLbl).append($lineInput); + var $amt = $(''); + var $unit = $(''); + var $name = $(''); + $row.append($cb).append($headingWrap).append($amt).append($unit).append($name); + $previewList.append($row); + } + } + + /** Fetches AJAX-parsed ingredient lines and refreshes the preview. */ + function fetchIngredientParse(lines) { + if (!lines.length) { + renderIngredientsPreview([], null); + return; + } + + $spinner.show().css('visibility', 'visible'); + + $.post(jsVars.ajax_url, { + action: 'cooked_parse_bulk_ingredients', + nonce: jsVars.cooked_bulk_add_nonce, + lines: lines + }, function(response) { + $spinner.hide(); + var parsed = (response.success && response.data && response.data.parsed) ? response.data.parsed : null; + renderIngredientsPreview(lines, parsed); + }).fail(function() { + $spinner.hide(); + renderIngredientsPreview(lines, null); + }); + } + + $textarea.on('input', function() { + var type = $typeField.val(); + var lines = parseTextToLines($(this).val()); + var textKey = lines.join('\n'); + + if (type === 'directions') { + renderDirectionsPreview(lines); + } else { + if (textKey === lastParsedText) return; + lastParsedText = textKey; + renderIngredientsPreview(lines, null); + if (parseTimer) clearTimeout(parseTimer); + parseTimer = setTimeout(function() { + fetchIngredientParse(lines); + }, 400); + } + }); + + $(document).on('click', '.cooked-bulk-add-button', function(e) { + e.preventDefault(); + var type = $(this).data('type'); + openModal(type); + }); + + $overlay.on('click', '.cooked-bulk-add-close, .cooked-bulk-add-cancel', function(e) { + e.preventDefault(); + closeModal(); + }); + + $overlay.on('click', function(e) { + if ($(e.target).is($overlay)) { + closeModal(); + } + }); + + $(document).on('keydown', function(e) { + if (e.key === 'Escape' && $overlay.is(':visible')) { + closeModal(); + } + }); + + $previewList.on('change', 'input[type="checkbox"]', function() { + var $row = $(this).closest('.cooked-bulk-add-preview-row'); + var isHeading = $(this).is(':checked'); + $row.toggleClass('cooked-bulk-add-is-heading', isHeading); + }); + + $submitBtn.on('click', function(e) { + e.preventDefault(); + if ($(this).attr('disabled')) return; + + var type = $typeField.val(); + var items = []; + + if (type === 'ingredients') { + $previewList.find('.cooked-bulk-add-preview-row').each(function() { + var $row = $(this); + var isHeading = $row.find('input[type="checkbox"]').is(':checked'); + var text = $row.find('.cooked-bulk-add-preview-text').val().trim(); + if (!text) return; + + if (isHeading) { + items.push({ text: text, heading: true }); + } else { + items.push({ + heading: false, + amount: $row.find('.cooked-bulk-add-parsed-amount').val().trim(), + measurement: $row.find('.cooked-bulk-add-parsed-unit').val().trim(), + name: $row.find('.cooked-bulk-add-parsed-name').val().trim() || text + }); + } + }); + } else { + $previewList.find('.cooked-bulk-add-preview-row').each(function() { + var $row = $(this); + var text = $row.find('.cooked-bulk-add-preview-text').val().trim(); + var isHeading = $row.find('input[type="checkbox"]').is(':checked'); + if (text) { + items.push({ text: text, heading: isHeading }); + } + }); + } + + if (!items.length) return; + + if (type === 'directions') { + cooked_bulk_add_directions(items); + closeModal(); + } else { + cooked_bulk_add_ingredients_parsed(items); + closeModal(); + } + }); +} + +/** Appends direction rows from bulk-add items (headings or plain steps) and resets the builder. */ +function cooked_bulk_add_directions(items) { + var $_builder = jQuery('#cooked-directions-builder'); + var $_parent = $_builder.parent(); + + for (var i = 0; i < items.length; i++) { + var item = items[i]; + + if (item.heading) { + var $heading = $_parent.find('.cooked-heading-template').clone() + .removeClass('cooked-template cooked-heading-template') + .addClass('cooked-direction-block cooked-direction-heading'); + $heading.find('[data-direction-part="section_heading_name"]').val(item.text); + $_builder.append($heading); + } else { + var $direction = $_parent.find('.cooked-direction-template').clone() + .removeClass('cooked-template cooked-direction-template') + .addClass('cooked-direction-block'); + $direction.find('[data-direction-part="content"]').val(item.text); + $_builder.append($direction); + } + } + + cooked_reset_direction_builder(); +} + +/** Appends ingredient rows from bulk-add items (headings or amount/unit/name) and resets the builder. */ +function cooked_bulk_add_ingredients_parsed(items) { + var $_builder = jQuery('#cooked-ingredients-builder'); + var $_parent = $_builder.parent(); + + for (var i = 0; i < items.length; i++) { + var item = items[i]; + + if (item.heading) { + var $heading = $_parent.find('.cooked-heading-template').clone() + .removeClass('cooked-template cooked-heading-template') + .addClass('cooked-ingredient-block cooked-ingredient-heading'); + $heading.find('[data-ingredient-part="section_heading_name"]').val(item.text); + $_builder.append($heading); + } else { + var $ingredient = $_parent.find('.cooked-ingredient-template').clone() + .removeClass('cooked-template cooked-ingredient-template') + .addClass('cooked-ingredient-block'); + + $ingredient.find('[data-ingredient-part="amount"]').val(item.amount || ''); + + if (item.measurement) { + $ingredient.find('[data-ingredient-part="measurement"]').val(item.measurement); + } + + $ingredient.find('[data-ingredient-part="name"]').val(item.name || ''); + + $_builder.append($ingredient); + } + } + + cooked_reset_ingredient_builder(); +} diff --git a/assets/admin/js/cooked-functions.min.js b/assets/admin/js/cooked-functions.min.js index 2d9cc3e..a93de4f 100644 --- a/assets/admin/js/cooked-functions.min.js +++ b/assets/admin/js/cooked-functions.min.js @@ -1 +1 @@ -var $_CookedConditionalTimeout=!1,cookedSortableTouchHandler=function(e){var t={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup"},o=e.target.closest(".cooked-icon-drag");o&&o.closest(".cooked-sortable")&&e.changedTouches&&e.changedTouches.length&&t[e.type]&&(o=e.changedTouches[0],e.preventDefault(),t=new MouseEvent(t[e.type],{bubbles:!0,cancelable:!0,view:window,detail:1,screenX:o.screenX,screenY:o.screenY,clientX:o.clientX,clientY:o.clientY,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null}),o.target.dispatchEvent(t))},cooked_recipe_update_counter=((p=>{p(document).ready(function(){var r,o,t,e,i,n,a,d,c,s=p(".cooked-color-field"),l=p("#cooked_recipe_settings").find("select"),u=p("#cooked-recipe-tabs"),k=(p("#cooked-settings-wrap"),p("#cooked_recipe_settings")),_=k.find("input#submit");$_CookedTooltips=p(".cooked-tooltip"),$_CookedConditionals=p(".cooked-conditional-hidden"),$_CookedSortable=p(".cooked-sortable"),$_CookedRecipeSaveDefault=p(".cooked-layout-save-default"),$_CookedShortcodeField=p(".cooked-shortcode-field"),$_CookedIngredientBuilder=p("#cooked-ingredients-builder"),$_CookedAutoNutritionButton=p(".cooked-auto-nutrition-button"),$_CookedDirectionBuilder=p("#cooked-directions-builder"),$_CookedRecipeGallery=p("#cooked-recipe-image-gallery"),$_CookedNutritionFactsTab=p("#cooked-recipe-tab-content-nutrition"),$_CookedSettingsPanel=p("#cooked-settings-panel"),$_CookedSettingsTabs=p("#cooked-settings-tabs"),s.length&&s.wpColorPicker(),$_CookedSortable.length&&(document.addEventListener("touchstart",cookedSortableTouchHandler,{passive:!1}),document.addEventListener("touchmove",cookedSortableTouchHandler,{passive:!1}),document.addEventListener("touchend",cookedSortableTouchHandler,{passive:!1}),$_CookedSortable.find(".cooked-icon-drag").length?$_CookedSortable.sortable({handle:".cooked-icon-drag",stop:function(e,t){t.item.closest("#cooked-directions-builder").length&&cooked_reset_direction_builder();var t=t.item.find("textarea"),o=!(!cooked_admin_functions_js_vars.wp_editor_roles_allowed||"undefined"==typeof wp||!wp.editor||"function"!=typeof wp.editor.remove||"function"!=typeof wp.editor.initialize);t.length&&o&&(o=t.attr("name"),t=t.attr("id"),wp.editor.remove(t),wp.editor.initialize(t,{tinymce:{wpautop:!1,toolbar1:"bold,italic,underline,blockquote,strikethrough,bullist,numlist,alignleft,aligncenter,alignright,undo,redo,wp_link_advanced,unlink,fullscreen",toolbar2:"",toolbar3:"",toolbar4:"",height:100,textarea_name:o,plugins:"link lists fullscreen wordpress wplink",setup:function(e){}},quicktags:!0,mediaButtons:!1}))}}):$_CookedSortable.sortable({stop:function(e,t){t.item.closest("#cooked-directions-builder").length&&cooked_reset_direction_builder()}})),$_CookedRecipeSaveDefault.length&&($_CookedRecipeSaveDefault.tooltipster({theme:["tooltipster-light","tooltipster-sideTip-cooked"],trigger:"click",animation:"grow",delay:0,speed:200,maxWidth:275,contentAsHTML:!0,interactive:!0,functionReady:function(c,e){p(".cooked-save-default-all").on("click",function(e){e.preventDefault();var o,i=p(this),e=i.data("nonce"),n=i.data("bulk-nonce"),t=i.parent(),a=confirm(cooked_admin_functions_js_vars.i18n_confirm_save_default_all),d=p("#_recipe_settings_content"),r=tinymce.get("_recipe_settings_content");o=null===r?d.val():r.getContent(),a&&!i.hasClass("disabled")&&(t.find(".button, .button-primary").addClass("disabled"),p.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_save_default",default_content:o,nonce:e},function(e){p.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_get_recipe_ids",nonce:n},function(e){var t;i.removeClass("button-primary").addClass("button"),e&&(t=JSON.parse(e),0<(t=Object.keys(t).length))&&cooked_set_default_template(e,t,o,n,c)})}))}),p(".cooked-save-default-new").on("click",function(e){e.preventDefault();var t=p(this),e=t.data("nonce"),o=t.parent(),i=p("#_recipe_settings_content"),n=tinymce.get("_recipe_settings_content");i=null===n?i.val():n.getContent(),t.hasClass("disabled")||(o.find(".button, .button-primary").addClass("disabled"),p.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_save_default",default_content:i,nonce:e},function(e){t.text(cooked_admin_functions_js_vars.i18n_saved),o.find(".button-primary").removeClass("disabled")}).fail(function(e){}))})}}),p(".cooked-layout-load-default").on("click",function(e){e.preventDefault();var e=p(this),t=e.parent(),o=confirm(cooked_admin_functions_js_vars.i18n_confirm_load_default),i=p("#_recipe_settings_content"),n=tinymce.get("_recipe_settings_content");o&&!e.hasClass("disabled")&&(t.find(".button, .button-primary").addClass("disabled"),p.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_load_default"},function(e){null===n?i.val(e):(i.val(e),n.setContent(e)),t.find(".button, .button-primary").removeClass("disabled")}).fail(function(e){t.find(".button, .button-primary").removeClass("disabled")}))})),l.length&&l.each(function(){p(this).wrap('
')}),$_CookedTooltips.length&&$_CookedTooltips.tooltipster({theme:["tooltipster-light","tooltipster-sideTip-cooked"],animation:"grow",delay:100,speed:200,maxWidth:275,contentAsHTML:!0,interactive:!0}),$_CookedShortcodeField.length&&$_CookedShortcodeField.on("click",function(e){p(this).select()}),$_CookedConditionals.length&&(r=[],$_CookedConditionals.each(function(){var e=p(this),t=p(this).data("condition"),o=p(this).data("value"),i=p("#"+t),o=!!o&&o.split(" "),n=e.is("li")||e.is("span")?"inline-block":"block";i.is(":checkbox")&&i.is(":checked")||i.is(":radio")&&i.is(":checked")||!(i.is(":checkbox")&&!i.is(":checked")||i.is(":radio")&&!i.is(":checked"))&&(!i.is(":checkbox")&&!o&&i.val()||!i.is(":checkbox")&&o&&-1 a").attr("href")).split("#"))[1],p(".cooked-settings-tab-content").hide(),p("#cooked-settings-tab-content-"+n).show(),l.on("click",function(e){p(".tab-content").hide();var t=p(this).find("a"),t=($_CookedSettingsTabs.find("li").removeClass("active"),p(this).addClass("active"),t.attr("href"));"migration"==(t=(t=t.split("#"))[1])?_.hide():_.show(),p(".cooked-settings-tab-content").hide(),p("#cooked-settings-tab-content-"+t).show(),p("#cooked-settings-panel").hasClass("stuck")?window.scrollTo(0,130):window.scrollTo(0,0)})),$_CookedIngredientBuilder.length&&(cooked_reset_ingredient_builder(),$_CookedIngredientBuilder.on("keydown",'input[data-ingredient-part="name"]',function(e){9!==e.keyCode&&13!==e.keyCode||p(this).parents(".cooked-ingredient-block").is(":last-child")&&(e.preventDefault(),p("#cooked-recipe-tab-content-ingredients").find(".cooked-add-ingredient-button").trigger("click"),$_CookedIngredientBuilder.find('.cooked-ingredient-block:last-child input[data-ingredient-part="amount"]').focus())}),$_CookedIngredientBuilder.parent().on("click",".cooked-show-substitution",function(e){e.preventDefault();e=p(this).parent();e.hasClass("cooked-expanded")?e.removeClass("cooked-expanded"):(e.addClass("cooked-expanded"),e.find('input[data-ingredient-part="sub_amount"]').focus())}),$_CookedIngredientBuilder.on("keyup change",'input[data-ingredient-part="sub_amount"], input[data-ingredient-part="sub_name"], select[data-ingredient-part="sub_measurement"]',function(e){var t=p(this).parents(".recipe-setting-block"),o=t.find('input[data-ingredient-part="sub_name"]').val();o&&o.trim()?t.addClass("cooked-has-substitution"):t.removeClass("cooked-has-substitution")}),$_CookedAutoNutritionButton.length&&$_CookedIngredientBuilder.on("change",'input[data-ingredient-part="name"]',function(e){var t=!1;$_CookedIngredientBuilder.find('input[data-ingredient-part="name"]').each(function(){if(""!=p(this).val())return!(t=!0)}),t?$_CookedAutoNutritionButton.prop("disabled",!1):$_CookedAutoNutritionButton.prop("disabled",!0)}),$_CookedIngredientBuilder.on("keyup",'input[data-ingredient-part="url"]',function(e){var t=p(this).val(),o=p(this).parents(".recipe-setting-block");t?o.addClass("cooked-has-url"):o.removeClass("cooked-has-url")}),$_CookedIngredientBuilder.parent().on("click",".cooked-add-ingredient-button",function(e){e.preventDefault();e=$_CookedIngredientBuilder.parent().find(".cooked-ingredient-template").clone().removeClass("cooked-template cooked-ingredient-template").addClass("cooked-ingredient-block");$_CookedIngredientBuilder.append(e),cooked_reset_ingredient_builder()}),$_CookedIngredientBuilder.parent().on("click",".cooked-add-heading-button",function(e){e.preventDefault();e=$_CookedIngredientBuilder.parent().find(".cooked-heading-template").clone().removeClass("cooked-template cooked-heading-template").addClass("cooked-ingredient-block cooked-ingredient-heading");$_CookedIngredientBuilder.append(e),cooked_reset_ingredient_builder()}),$_CookedIngredientBuilder.parent().on("click",".cooked-delete-ingredient",function(e){e.preventDefault(),p(this).parent().remove(),cooked_reset_ingredient_builder()})),$_CookedDirectionBuilder.length&&(cooked_reset_direction_builder(),$_CookedDirectionBuilder.parent().on("click",".cooked-show-heading-element",function(e){e.preventDefault();e=p(this).parent();e.hasClass("cooked-expanded")?e.removeClass("cooked-expanded"):(e.addClass("cooked-expanded"),e.find('input[data-direction-part="section_heading_element"]').focus())}),$_CookedDirectionBuilder.parent().on("click",".cooked-add-direction-button",function(e){e.preventDefault();e=$_CookedDirectionBuilder.parent().find(".cooked-direction-template").clone().removeClass("cooked-template cooked-direction-template").addClass("cooked-direction-block");$_CookedDirectionBuilder.append(e),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".cooked-add-heading-button",function(e){e.preventDefault();e=$_CookedDirectionBuilder.parent().find(".cooked-heading-template").clone().removeClass("cooked-template cooked-heading-template").addClass("cooked-direction-block cooked-direction-heading");$_CookedDirectionBuilder.append(e),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".cooked-delete-direction",function(e){e.preventDefault();var t,e=p(this).parent();cooked_admin_functions_js_vars.wp_editor_roles_allowed&&"undefined"!=typeof wp&&wp.editor&&"function"==typeof wp.editor.remove&&(t=e.find('textarea[data-direction-part="content"]').attr("id"))&&wp.editor.remove(t),e.remove(),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".remove-image-button",function(e){e.preventDefault();e=p(this).parent();e.removeClass("cooked-has-image"),e.find("img").attr("src","").removeAttr("srcset").removeAttr("sizes"),e.find('input[data-direction-part="image"]').val(""),cooked_reset_direction_builder()}),p("body").on("click",".cooked-direction-img-placeholder, .cooked-direction-img",function(e){e.preventDefault(),p(this).parent().find(".direction-image-button").trigger("click")}),p("body").on("click",".direction-image-button",function(e){var t=p(this);d=t.data("id"),e.preventDefault(),a||(a=wp.media.frames.direction_image_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_image_title,button:{text:cooked_admin_functions_js_vars.i18n_image_button},library:{type:"image"}})).on("select",function(){var e=a.state().get("selection").first().toJSON();p("#direction-"+d+"-image-src").attr("src",e.sizes.thumbnail.url).removeAttr("srcset").removeAttr("sizes").parent().addClass("cooked-has-image"),p('input[name="_recipe_settings[directions]['+d+'][image]"]').val(e.id),p('.direction-image-button[data-id="'+d+'"]').prop("value",cooked_admin_functions_js_vars.i18n_image_change)}),a.open()})),$_CookedRecipeGallery.length&&(cooked_init_gallery_sorting(),p("body").on("click",".cooked-gallery-add-button",function(e){p(this);e.preventDefault(),c||(c=wp.media.frames.gallery_images_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_gallery_image_title,button:{text:cooked_admin_functions_js_vars.i18n_gallery_image_title},library:{type:"image"},multiple:!0})).on("select",function(){var e,t,o,i=c.state().get("selection").toJSON();for(e in i)i.hasOwnProperty(e)&&(o=(t=i[e]).sizes.thumbnail.url,p("#cooked-recipe-image-gallery").append(''));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{_(document).ready(function(){var c,o,t,e,i,n,d,a,r,l=_(".cooked-color-field"),s=_("#cooked_recipe_settings").find("select"),u=_("#cooked-recipe-tabs"),k=(_("#cooked-settings-wrap"),_("#cooked_recipe_settings")),p=k.find("input#submit");$_CookedTooltips=_(".cooked-tooltip"),$_CookedConditionals=_(".cooked-conditional-hidden"),$_CookedSortable=_(".cooked-sortable"),$_CookedRecipeSaveDefault=_(".cooked-layout-save-default"),$_CookedShortcodeField=_(".cooked-shortcode-field"),$_CookedIngredientBuilder=_("#cooked-ingredients-builder"),$_CookedAutoNutritionButton=_(".cooked-auto-nutrition-button"),$_CookedDirectionBuilder=_("#cooked-directions-builder"),$_CookedRecipeGallery=_("#cooked-recipe-image-gallery"),$_CookedNutritionFactsTab=_("#cooked-recipe-tab-content-nutrition"),$_CookedSettingsPanel=_("#cooked-settings-panel"),$_CookedSettingsTabs=_("#cooked-settings-tabs"),l.length&&l.wpColorPicker(),$_CookedSortable.length&&(document.addEventListener("touchstart",cookedSortableTouchHandler,{passive:!1}),document.addEventListener("touchmove",cookedSortableTouchHandler,{passive:!1}),document.addEventListener("touchend",cookedSortableTouchHandler,{passive:!1}),$_CookedSortable.find(".cooked-icon-drag").length?$_CookedSortable.sortable({handle:".cooked-icon-drag",stop:function(e,t){t.item.closest("#cooked-directions-builder").length&&cooked_reset_direction_builder();var t=t.item.find("textarea"),o=!(!cooked_admin_functions_js_vars.wp_editor_roles_allowed||"undefined"==typeof wp||!wp.editor||"function"!=typeof wp.editor.remove||"function"!=typeof wp.editor.initialize);t.length&&o&&(o=t.attr("name"),t=t.attr("id"),wp.editor.remove(t),wp.editor.initialize(t,{tinymce:{wpautop:!1,toolbar1:"bold,italic,underline,blockquote,strikethrough,bullist,numlist,alignleft,aligncenter,alignright,undo,redo,wp_link_advanced,unlink,fullscreen",toolbar2:"",toolbar3:"",toolbar4:"",height:100,textarea_name:o,plugins:"link lists fullscreen wordpress wplink",setup:function(e){}},quicktags:!0,mediaButtons:!1}))}}):$_CookedSortable.sortable({stop:function(e,t){t.item.closest("#cooked-directions-builder").length&&cooked_reset_direction_builder()}})),$_CookedRecipeSaveDefault.length&&($_CookedRecipeSaveDefault.tooltipster({theme:["tooltipster-light","tooltipster-sideTip-cooked"],trigger:"click",animation:"grow",delay:0,speed:200,maxWidth:275,contentAsHTML:!0,interactive:!0,functionReady:function(r,e){_(".cooked-save-default-all").on("click",function(e){e.preventDefault();var t,o=_(this),e=o.data("nonce"),i=o.data("bulk-nonce"),n=o.parent(),d=confirm(cooked_admin_functions_js_vars.i18n_confirm_save_default_all),a=_("#_recipe_settings_content"),c=tinymce.get("_recipe_settings_content");t=null===c?a.val():c.getContent(),d&&!o.hasClass("disabled")&&(n.find(".button, .button-primary").addClass("disabled"),_.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_save_default",default_content:t,nonce:e},function(){_.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_get_recipe_count",nonce:i},function(e){o.removeClass("button-primary").addClass("button"),e&&e.success&&0')}),$_CookedTooltips.length&&$_CookedTooltips.tooltipster({theme:["tooltipster-light","tooltipster-sideTip-cooked"],animation:"grow",delay:100,speed:200,maxWidth:275,contentAsHTML:!0,interactive:!0}),$_CookedShortcodeField.length&&$_CookedShortcodeField.on("click",function(e){_(this).select()}),$_CookedConditionals.length&&(c=[],$_CookedConditionals.each(function(){var e=_(this),t=_(this).data("condition"),o=_(this).data("value"),i=_("#"+t),o=!!o&&o.split(" "),n=e.is("li")||e.is("span")?"inline-block":"block";i.is(":checkbox")&&i.is(":checked")||i.is(":radio")&&i.is(":checked")||!(i.is(":checkbox")&&!i.is(":checked")||i.is(":radio")&&!i.is(":checked"))&&(!i.is(":checkbox")&&!o&&i.val()||!i.is(":checkbox")&&o&&-1<_.inArray(i.val(),o)||!i.is(":radio")&&!o&&i.val()||!i.is(":radio")&&o&&-1<_.inArray(i.val(),o))?e.css({display:n}):e.hide(),-1==_.inArray(t,c)&&c.push(t);for(var d=c.length,a=0;a a").attr("href")).split("#"))[1],_(".cooked-settings-tab-content").hide(),_("#cooked-settings-tab-content-"+n).show(),s.on("click",function(e){_(".tab-content").hide();var t=_(this).find("a"),t=($_CookedSettingsTabs.find("li").removeClass("active"),_(this).addClass("active"),t.attr("href"));"migration"==(t=(t=t.split("#"))[1])?p.hide():p.show(),_(".cooked-settings-tab-content").hide(),_("#cooked-settings-tab-content-"+t).show(),_("#cooked-settings-panel").hasClass("stuck")?window.scrollTo(0,130):window.scrollTo(0,0)})),$_CookedIngredientBuilder.length&&(cooked_reset_ingredient_builder(),$_CookedIngredientBuilder.on("keydown",'input[data-ingredient-part="name"]',function(e){9!==e.keyCode&&13!==e.keyCode||_(this).parents(".cooked-ingredient-block").is(":last-child")&&(e.preventDefault(),_("#cooked-recipe-tab-content-ingredients").find(".cooked-add-ingredient-button").trigger("click"),$_CookedIngredientBuilder.find('.cooked-ingredient-block:last-child input[data-ingredient-part="amount"]').focus())}),$_CookedIngredientBuilder.parent().on("click",".cooked-show-substitution",function(e){e.preventDefault();e=_(this).parent();e.hasClass("cooked-expanded")?e.removeClass("cooked-expanded"):(e.addClass("cooked-expanded"),e.find('input[data-ingredient-part="sub_amount"]').focus())}),$_CookedIngredientBuilder.on("keyup change",'input[data-ingredient-part="sub_amount"], input[data-ingredient-part="sub_name"], select[data-ingredient-part="sub_measurement"]',function(e){var t=_(this).parents(".recipe-setting-block"),o=t.find('input[data-ingredient-part="sub_name"]').val();o&&o.trim()?t.addClass("cooked-has-substitution"):t.removeClass("cooked-has-substitution")}),$_CookedAutoNutritionButton.length&&$_CookedIngredientBuilder.on("change",'input[data-ingredient-part="name"]',function(e){var t=!1;$_CookedIngredientBuilder.find('input[data-ingredient-part="name"]').each(function(){if(""!=_(this).val())return!(t=!0)}),t?$_CookedAutoNutritionButton.prop("disabled",!1):$_CookedAutoNutritionButton.prop("disabled",!0)}),$_CookedIngredientBuilder.on("keyup",'input[data-ingredient-part="url"]',function(e){var t=_(this).val(),o=_(this).parents(".recipe-setting-block");t?o.addClass("cooked-has-url"):o.removeClass("cooked-has-url")}),$_CookedIngredientBuilder.parent().on("click",".cooked-add-ingredient-button",function(e){e.preventDefault();e=$_CookedIngredientBuilder.parent().find(".cooked-ingredient-template").clone().removeClass("cooked-template cooked-ingredient-template").addClass("cooked-ingredient-block");$_CookedIngredientBuilder.append(e),cooked_reset_ingredient_builder()}),$_CookedIngredientBuilder.parent().on("click",".cooked-add-heading-button",function(e){e.preventDefault();e=$_CookedIngredientBuilder.parent().find(".cooked-heading-template").clone().removeClass("cooked-template cooked-heading-template").addClass("cooked-ingredient-block cooked-ingredient-heading");$_CookedIngredientBuilder.append(e),cooked_reset_ingredient_builder()}),$_CookedIngredientBuilder.parent().on("click",".cooked-delete-ingredient",function(e){e.preventDefault(),_(this).parent().remove(),cooked_reset_ingredient_builder()})),$_CookedDirectionBuilder.length&&(cooked_reset_direction_builder(),$_CookedDirectionBuilder.parent().on("click",".cooked-show-heading-element",function(e){e.preventDefault();e=_(this).parent();e.hasClass("cooked-expanded")?e.removeClass("cooked-expanded"):(e.addClass("cooked-expanded"),e.find('input[data-direction-part="section_heading_element"]').focus())}),$_CookedDirectionBuilder.parent().on("click",".cooked-add-direction-button",function(e){e.preventDefault();e=$_CookedDirectionBuilder.parent().find(".cooked-direction-template").clone().removeClass("cooked-template cooked-direction-template").addClass("cooked-direction-block");$_CookedDirectionBuilder.append(e),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".cooked-add-heading-button",function(e){e.preventDefault();e=$_CookedDirectionBuilder.parent().find(".cooked-heading-template").clone().removeClass("cooked-template cooked-heading-template").addClass("cooked-direction-block cooked-direction-heading");$_CookedDirectionBuilder.append(e),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".cooked-delete-direction",function(e){e.preventDefault();var t,e=_(this).parent();cooked_admin_functions_js_vars.wp_editor_roles_allowed&&"undefined"!=typeof wp&&wp.editor&&"function"==typeof wp.editor.remove&&(t=e.find('textarea[data-direction-part="content"]').attr("id"))&&wp.editor.remove(t),e.remove(),cooked_reset_direction_builder()}),$_CookedDirectionBuilder.parent().on("click",".remove-image-button",function(e){e.preventDefault();e=_(this).parent();e.removeClass("cooked-has-image"),e.find("img").attr("src","").removeAttr("srcset").removeAttr("sizes"),e.find('input[data-direction-part="image"]').val(""),cooked_reset_direction_builder()}),_("body").on("click",".cooked-direction-img-placeholder, .cooked-direction-img",function(e){e.preventDefault(),_(this).parent().find(".direction-image-button").trigger("click")}),_("body").on("click",".direction-image-button",function(e){var t=_(this);a=t.data("id"),e.preventDefault(),d||(d=wp.media.frames.direction_image_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_image_title,button:{text:cooked_admin_functions_js_vars.i18n_image_button},library:{type:"image"}})).on("select",function(){var e=d.state().get("selection").first().toJSON();_("#direction-"+a+"-image-src").attr("src",e.sizes.thumbnail.url).removeAttr("srcset").removeAttr("sizes").parent().addClass("cooked-has-image"),_('input[name="_recipe_settings[directions]['+a+'][image]"]').val(e.id),_('.direction-image-button[data-id="'+a+'"]').prop("value",cooked_admin_functions_js_vars.i18n_image_change)}),d.open()})),cooked_init_bulk_add(_),$_CookedRecipeGallery.length&&(cooked_init_gallery_sorting(),_("body").on("click",".cooked-gallery-add-button",function(e){_(this);e.preventDefault(),r||(r=wp.media.frames.gallery_images_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_gallery_image_title,button:{text:cooked_admin_functions_js_vars.i18n_gallery_image_title},library:{type:"image"},multiple:!0})).on("select",function(){var e,t,o,i=r.state().get("selection").toJSON();for(e in i)i.hasOwnProperty(e)&&(o=(t=i[e]).sizes.thumbnail.url,_("#cooked-recipe-image-gallery").append(''));cooked_init_gallery_sorting()}),r.open()}),_("body").on("click",".cooked-recipe-gallery-item img",function(e){e.preventDefault(),_(this).parent().find(".cooked-gallery-edit-button").trigger("click")}),_("body").on("click",".cooked-gallery-edit-button",function(e){var n=_(this),t=n.data("attachment-id"),d=(e.preventDefault(),wp.media.frames.gallery_images_frame=wp.media({title:cooked_admin_functions_js_vars.i18n_edit_image_title,button:{text:cooked_admin_functions_js_vars.i18n_edit_image_button},library:{type:"image"},multiple:!1}));d.on("open",function(){var e=d.state().get("selection");(attachment=wp.media.attachment(t)).fetch(),e.add(attachment?[attachment]:[])}),d.open(),d.on("select",function(){var e,t,o,i=d.state().get("selection").toJSON();for(e in i)i.hasOwnProperty(e)&&(o=(t=i[e]).sizes.thumbnail.url,n.parent().replaceWith(''));cooked_init_gallery_sorting()})}),$_CookedRecipeGallery.on("click",".remove-image-button",function(e){var t=_(this);a=t.data("id"),e.preventDefault(),a?(_("#direction-"+a+"-image-src").parent().removeClass("cooked-has-image").prop("src",!1),_('input[name="_recipe_settings[directions]['+a+'][image]"]').val(""),_('.direction-image-button[data-id="'+a+'"]').prop("value",cooked_admin_functions_js_vars.i18n_image_title)):t.parent().remove()})),$_CookedNutritionFactsTab.length&&(init_nutrition_facts($_CookedNutritionFactsTab),$_CookedNutritionFactsTab.on("keyup","input",function(e){init_nutrition_facts($_CookedNutritionFactsTab)})),_("#cooked-prep-time").length&&_("#cooked-prep-time,#cooked-cook-time").on("change",function(){cooked_updateTotalTimeValue(parseInt(_("#cooked-prep-time").val()),parseInt(_("#cooked-cook-time").val()))})})})(jQuery),0),cooked_bulk_per_page=20;function cooked_set_default_template(o,i,n,d,a){var c,r,l;i<=0||(c=jQuery("#cooked-template-progress"),r=c.find(".cooked-progress-bar"),l=jQuery("#cooked-template-progress-text"),c.hasClass("cooked-active")||(c.addClass("cooked-active"),l.addClass("cooked-active"),r.css({width:"0%"}),a.reposition()),jQuery.post(cooked_admin_functions_js_vars.ajax_url,{action:"cooked_save_default_bulk",page:o,default_content:n,nonce:d},function(e){var t;e&&e.success&&(cooked_recipe_update_counter=Math.min((o+1)*cooked_bulk_per_page,i),t=Math.round(cooked_recipe_update_counter/i*100),r.css({width:t+"%"}),l.text(cooked_recipe_update_counter+" / "+i),e.data.has_more?cooked_set_default_template(o+1,i,n,d,a):(jQuery(".cooked-save-default-all").text(cooked_admin_functions_js_vars.i18n_applied),r.css({width:"100%"}),l.text(i+" / "+i),c.removeClass("cooked-active"),l.removeClass("cooked-active").text(""),a.reposition()))},"json"))}function cooked_updateTotalTimeValue(e,t){jQuery("#cooked-total-time").val(e+t)}function cooked_init_gallery_sorting(){jQuery("#cooked-recipe-image-gallery").sortable()}function init_nutrition_facts(e){e.find("input").each(function(){var e,t=jQuery(this),o=t.attr("id"),t=t.val(),i=jQuery('.cooked-nut-percent[data-labeltype="'+o+'"]').length;jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').length&&(t?(jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').text(t),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("li").eq(0).show(),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("p").eq(0).show(),i&&(e=(i=jQuery('.cooked-nut-percent[data-labeltype="'+o+'"]')).data("pdv"))&&(thisPercent=Math.ceil(t/e*100),i.text(thisPercent))):(jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').text("___"),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("li").eq(0).hide(),jQuery('.cooked-nut-label[data-labeltype="'+o+'"]').parents("p").eq(0).hide()))})}function cooked_reset_ingredient_builder(){var e=jQuery(".cooked-ingredient-block"),t=0,i=0,o=!1;0").text(e).html()}function b(e,t){if(u.empty(),e.length){s.attr("data-bulk-type","ingredients"),s.show(),k.removeAttr("disabled"),u.find(".cooked-bulk-add-preview-header").length||u.prepend('
'+h(_.i18n_bulk_add_amount)+''+h(_.i18n_bulk_add_unit)+''+h(_.i18n_bulk_add_name)+"
");for(var o=0;o
'),d=l('"),a=l('
'),c=l('').text(_.i18n_bulk_add_heading_line_label),r=l('').val(e[o]),c=(a.append(c).append(r),l('')),r=l(''),i=l('');n.append(d).append(a).append(c).append(r).append(i),u.append(n)}}else s.attr("data-bulk-type",""),s.hide(),k.attr("disabled","disabled")}i.length&&(t=l("#cooked-bulk-add-textarea"),s=l("#cooked-bulk-add-preview"),u=l("#cooked-bulk-add-preview-list"),o=l("#cooked-bulk-add-title"),r=l("#cooked-bulk-add-type"),k=i.find(".cooked-bulk-add-submit"),p=i.find(".cooked-bulk-add-spinner"),_=cooked_admin_functions_js_vars,g=null,m="",t.on("input",function(){var e=r.val(),o=(e=>{for(var t=e.split(/[\r\n]+/),o=[],i=0;i'),a=l('"),c=l('');d.append(a).append(c),u.append(d)}}else s.attr("data-bulk-type",""),s.hide(),k.attr("disabled","disabled")}else t!==m&&(m=t,b(o,null),g&&clearTimeout(g),g=setTimeout(function(){var t;(t=o).length?(p.show().css("visibility","visible"),l.post(_.ajax_url,{action:"cooked_parse_bulk_ingredients",nonce:_.cooked_bulk_add_nonce,lines:t},function(e){p.hide();e=e.success&&e.data&&e.data.parsed?e.data.parsed:null;b(t,e)}).fail(function(){p.hide(),b(t,null)})):b([],null)},400))}),l(document).on("click",".cooked-bulk-add-button",function(e){e.preventDefault();var e=l(this).data("type");e=e,r.val(e),t.val(""),u.empty(),s.attr("data-bulk-type",""),s.hide(),k.attr("disabled","disabled"),p.hide(),m="","ingredients"===e?(o.text(_.i18n_bulk_add_ingredients),t.attr("placeholder",_.i18n_bulk_add_placeholder_ingredients),k.text(_.i18n_bulk_add_submit_ingredients)):(o.text(_.i18n_bulk_add_directions),t.attr("placeholder",_.i18n_bulk_add_placeholder_directions),k.text(_.i18n_bulk_add_submit_directions)),i.show(),t.focus()}),i.on("click",".cooked-bulk-add-close, .cooked-bulk-add-cancel",function(e){e.preventDefault(),n()}),i.on("click",function(e){l(e.target).is(i)&&n()}),l(document).on("keydown",function(e){"Escape"===e.key&&i.is(":visible")&&n()}),u.on("change",'input[type="checkbox"]',function(){var e=l(this).closest(".cooked-bulk-add-preview-row"),t=l(this).is(":checked");e.toggleClass("cooked-bulk-add-is-heading",t)}),k.on("click",function(e){var i;e.preventDefault(),l(this).attr("disabled")||(e=r.val(),i=[],"ingredients"===e?u.find(".cooked-bulk-add-preview-row").each(function(){var e=l(this),t=e.find('input[type="checkbox"]').is(":checked"),o=e.find(".cooked-bulk-add-preview-text").val().trim();o&&i.push(t?{text:o,heading:!0}:{heading:!1,amount:e.find(".cooked-bulk-add-parsed-amount").val().trim(),measurement:e.find(".cooked-bulk-add-parsed-unit").val().trim(),name:e.find(".cooked-bulk-add-parsed-name").val().trim()||o})}):u.find(".cooked-bulk-add-preview-row").each(function(){var e=l(this),t=e.find(".cooked-bulk-add-preview-text").val().trim(),e=e.find('input[type="checkbox"]').is(":checked");t&&i.push({text:t,heading:e})}),i.length&&(("directions"===e?cooked_bulk_add_directions:cooked_bulk_add_ingredients_parsed)(i),n()))}))}function cooked_bulk_add_directions(e){for(var t=jQuery("#cooked-directions-builder"),o=t.parent(),i=0;i 0) { - cooked_migrate_recipes(json_recipe_ids, total_recipe); - } - } - } + function (json_recipe_ids) { + if (json_recipe_ids) { + var recipe_ids = JSON.parse(json_recipe_ids), + total_recipes = Object.keys(recipe_ids).length; + + if (total_recipes > 0) { + cooked_migrate_recipes(json_recipe_ids, total_recipes); + } + } + } ); - } + } }); } // Import Button Exists? - if ($_CookedImportButton.length) { - $_CookedImportButton.on('click', function(e) { - e.preventDefault(); + if ($_CookedImportButton.length) { + $_CookedImportButton.on('click', function(e) { + e.preventDefault(); - var thisButton = $(this), + var thisButton = $(this), import_type = thisButton.data('import-type'), - confirm_import = confirm(cooked_migration_js_vars.i18n_confirm_import_recipes); + confirm_import = confirm(cooked_migration_js_vars.i18n_confirm_import_recipes); - if (confirm_import && !thisButton.hasClass('disabled')) { - thisButton.addClass('disabled').attr('disabled', true); - thisButton.hide(); + if (confirm_import && !thisButton.hasClass('disabled')) { + thisButton.addClass('disabled').attr('disabled', true); + thisButton.hide(); - var ajax__bulk_import_recipes = $.post( - cooked_migration_js_vars.ajax_url, - { + var ajax__bulk_import_recipes = $.post( + cooked_migration_js_vars.ajax_url, + { action: 'cooked_get_import_ids', import_type: import_type }, - function (json_recipe_ids) { - if (json_recipe_ids) { - var recipe_ids = JSON.parse(json_recipe_ids), - total_recipes = Object.keys(recipe_ids).length; - - if (total_recipes > 0) { - cooked_import_recipes(json_recipe_ids, total_recipes, import_type); - } - } else { + function (json_recipe_ids) { + if (json_recipe_ids) { + var recipe_ids = JSON.parse(json_recipe_ids), + total_recipes = Object.keys(recipe_ids).length; + + if (total_recipes > 0) { + cooked_import_recipes(json_recipe_ids, total_recipes, import_type); + } + } else { console.log(cooked_migration_js_vars.i18n_something_wrong); thisButton.addClass('disabled').attr('disabled', false); - thisButton.show(); + thisButton.show(); } - }, + }, ); - } + } }); } @@ -242,20 +242,20 @@ var cooked_recipe_migrate_counter = 0; var progressIterations = 0; function cooked_migrate_recipes(recipe_ids, total_recipes ) { - var temp_counter = 0, - total_counter = 0, - progress_percent = 0; - - if (total_recipes > 0) { - var progress = jQuery( '#cooked-migration-progress' ); - var progress_bar = progress.find( '.cooked-progress-bar' ); - var progress_text = jQuery( '#cooked-migration-progress-text' ); - - if ( !progress.hasClass('cooked-active') ) { - progress.addClass('cooked-active'); - progress_text.addClass('cooked-active'); - progress_bar.css( { "width" : "0%" } ); - } + var temp_counter = 0, + total_counter = 0, + progress_percent = 0; + + if (total_recipes > 0) { + var progress = jQuery( '#cooked-migration-progress' ); + var progress_bar = progress.find( '.cooked-progress-bar' ); + var progress_text = jQuery( '#cooked-migration-progress-text' ); + + if ( !progress.hasClass('cooked-active') ) { + progress.addClass('cooked-active'); + progress_text.addClass('cooked-active'); + progress_bar.css( { "width" : "0%" } ); + } var this_recipe_ids = JSON.parse( recipe_ids ), this_total_recipe_ids = Object.keys(this_recipe_ids).length; @@ -263,18 +263,18 @@ function cooked_migrate_recipes(recipe_ids, total_recipes ) { var formattedTotal = total_recipes; formattedTotal.toLocaleString(); - var ajax__bulk_migrate_recipes = jQuery.post( + var ajax__bulk_migrate_recipes = jQuery.post( cooked_migration_js_vars.ajax_url, { action: 'cooked_migrate_recipes', recipe_ids: recipe_ids }, function( new_recipe_ids ) { - if ( new_recipe_ids && new_recipe_ids != 'false' && new_recipe_ids != false ){ - var leftover_recipe_ids = JSON.parse( new_recipe_ids ), - leftover_recipes = Object.keys(leftover_recipe_ids).length; + if ( new_recipe_ids && new_recipe_ids != 'false' && new_recipe_ids != false ){ + var leftover_recipe_ids = JSON.parse( new_recipe_ids ), + leftover_recipes = Object.keys(leftover_recipe_ids).length; - cooked_recipe_migrate_counter = total_recipes - leftover_recipes; + cooked_recipe_migrate_counter = total_recipes - leftover_recipes; var formattedTotal = total_recipes; formattedTotal.toLocaleString(); @@ -282,9 +282,9 @@ function cooked_migrate_recipes(recipe_ids, total_recipes ) { var formattedComplete = cooked_recipe_migrate_counter; formattedComplete.toLocaleString(); - progress_percent = Math.round10( ( cooked_recipe_migrate_counter / total_recipes ) * 100, -1 ); + progress_percent = Math.round10( ( cooked_recipe_migrate_counter / total_recipes ) * 100, -1 ); if ( progress_percent < 2 ) { progress_percent = 2; } - progress_bar.css( { "width" : progress_percent + "%" } ); + progress_bar.css( { "width" : progress_percent + "%" } ); var remainingProgress = 100 - progress_percent; var estimatedCompletionTime = Math.round( ( remainingProgress / progress_percent ) * progressIterations ); @@ -306,36 +306,36 @@ function cooked_migrate_recipes(recipe_ids, total_recipes ) { progress_text.text( formattedComplete + " / " + formattedTotal ); } - cooked_migrate_recipes( new_recipe_ids, total_recipes ); - } else { - progress.hide(); - progress_text.hide(); + cooked_migrate_recipes( new_recipe_ids, total_recipes ); + } else { + progress.hide(); + progress_text.hide(); - jQuery('.recipe-setting-block.migrate_button').find('h3').hide(); - jQuery('.recipe-setting-block.migrate_button').find('p:nth-child(2)').hide(); + jQuery('.recipe-setting-block.migrate_button').find('h3').hide(); + jQuery('.recipe-setting-block.migrate_button').find('p:nth-child(2)').hide(); jQuery('.recipe-setting-block.migrate_button').find('ul.cooked-admin-ul').hide(); - jQuery('#cooked-migration-button').hide(); - jQuery('#cooked-migration-completed').addClass('cooked-active'); - } - } + jQuery('#cooked-migration-button').hide(); + jQuery('#cooked-migration-completed').addClass('cooked-active'); + } + } ) - } + } } function cooked_import_recipes(recipe_ids, total_recipes, import_type) { - var progress_percent = 0; + var progress_percent = 0; - if (total_recipes > 0) { - var progress = jQuery( '#cooked-import-progress' ); - var progress_bar = progress.find( '.cooked-progress-bar' ); - var progress_text = jQuery( '#cooked-import-progress-text' ); + if (total_recipes > 0) { + var progress = jQuery( '#cooked-import-progress' ); + var progress_bar = progress.find( '.cooked-progress-bar' ); + var progress_text = jQuery( '#cooked-import-progress-text' ); - if (!progress.hasClass('cooked-active')) { - progress.addClass('cooked-active'); - progress_text.addClass('cooked-active'); - progress_bar.css( { "width" : "0%" } ); - } + if (!progress.hasClass('cooked-active')) { + progress.addClass('cooked-active'); + progress_text.addClass('cooked-active'); + progress_bar.css( { "width" : "0%" } ); + } var this_recipe_ids = JSON.parse(recipe_ids), this_total_recipe_ids = Object.keys(this_recipe_ids).length; @@ -343,7 +343,7 @@ function cooked_import_recipes(recipe_ids, total_recipes, import_type) { var formattedTotal = total_recipes; formattedTotal.toLocaleString(); - var ajax__bulk_migrate_recipes = jQuery.post( + var ajax__bulk_migrate_recipes = jQuery.post( cooked_migration_js_vars.ajax_url, { action: 'cooked_import_recipes', @@ -351,11 +351,11 @@ function cooked_import_recipes(recipe_ids, total_recipes, import_type) { import_type: import_type }, function (new_recipe_ids) { - if (new_recipe_ids && new_recipe_ids != 'false' && new_recipe_ids != false) { - var leftover_recipe_ids = JSON.parse( new_recipe_ids ), - leftover_recipes = Object.keys(leftover_recipe_ids).length; + if (new_recipe_ids && new_recipe_ids != 'false' && new_recipe_ids != false) { + var leftover_recipe_ids = JSON.parse( new_recipe_ids ), + leftover_recipes = Object.keys(leftover_recipe_ids).length; - cooked_recipe_migrate_counter = total_recipes - leftover_recipes; + cooked_recipe_migrate_counter = total_recipes - leftover_recipes; var formattedTotal = total_recipes; formattedTotal.toLocaleString(); @@ -363,9 +363,9 @@ function cooked_import_recipes(recipe_ids, total_recipes, import_type) { var formattedComplete = cooked_recipe_migrate_counter; formattedComplete.toLocaleString(); - progress_percent = Math.round10( ( cooked_recipe_migrate_counter / total_recipes ) * 100, -1 ); + progress_percent = Math.round10( ( cooked_recipe_migrate_counter / total_recipes ) * 100, -1 ); if ( progress_percent < 2 ) { progress_percent = 2; } - progress_bar.css({ "width" : progress_percent + "%" }); + progress_bar.css({ "width" : progress_percent + "%" }); var remainingProgress = 100 - progress_percent; var estimatedCompletionTime = Math.round( ( remainingProgress / progress_percent ) * progressIterations ); @@ -387,18 +387,18 @@ function cooked_import_recipes(recipe_ids, total_recipes, import_type) { progress_text.text( formattedComplete + " / " + formattedTotal ); } - cooked_import_recipes( new_recipe_ids, total_recipes, import_type ); - } else { - progress.hide(); - progress_text.hide(); + cooked_import_recipes( new_recipe_ids, total_recipes, import_type ); + } else { + progress.hide(); + progress_text.hide(); - jQuery('.recipe-setting-block.import_button').find('h3').hide(); - jQuery('.recipe-setting-block.import_button').find('p:nth-child(2)').hide(); + jQuery('.recipe-setting-block.import_button').find('h3').hide(); + jQuery('.recipe-setting-block.import_button').find('p:nth-child(2)').hide(); jQuery('.recipe-setting-block.import_button').find('.cooked-import-note').hide(); jQuery('.recipe-setting-block.import_button').find('ul.cooked-admin-ul').hide(); - jQuery('#cooked-import-button').hide(); - jQuery('#cooked-import-completed').addClass('cooked-active'); - } - }) - } -} \ No newline at end of file + jQuery('#cooked-import-button').hide(); + jQuery('#cooked-import-completed').addClass('cooked-active'); + } + }) + } +} diff --git a/assets/admin/js/cooked-migration.min.js b/assets/admin/js/cooked-migration.min.js index 26c3f10..24373ef 100644 --- a/assets/admin/js/cooked-migration.min.js +++ b/assets/admin/js/cooked-migration.min.js @@ -1 +1 @@ -(d=>{d(document).ready(function(){var e=d("#cooked-migration-button"),o=d("#cooked-import-button"),i=d("#cooked-csv-import-button"),r=(d("#cooked-csv-import-form"),d("#cooked-migration-progress"),d("#cooked-migration-progress-text"),d("#cooked-csv-import-progress")),a=d("#cooked-csv-import-progress-text");e.length&&e.on("click",function(e){e.preventDefault();e=d(this);confirm(cooked_migration_js_vars.i18n_confirm_migrate_recipe)&&!e.hasClass("disabled")&&(e.addClass("disabled").attr("disabled",!0),e.hide(),d.post(cooked_migration_js_vars.ajax_url,{action:"cooked_get_migrate_ids"},function(e){var o;e&&(o=JSON.parse(e),0

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

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

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

"+cooked_migration_js_vars.i18n_failed_process_csv+"

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

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

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

"+cooked_migration_js_vars.i18n_failed_upload_csv+"

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

"+cooked_migration_js_vars.i18n_csv_invalid_file+"

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

"+cooked_migration_js_vars.i18n_csv_no_file+"

").show()})})})(jQuery);{function cookedDecimalAdjust(e,o,i){return void 0===i||0==+i?Math[e](o):(i=+i,null===(o=+o)||isNaN(o)||"number"!=typeof i||i%1!=0?NaN:o<0?-cookedDecimalAdjust(e,-o,i):(o=o.toString().split("e"),+((o=(o=Math[e](+(o[0]+"e"+(o[1]?+o[1]-i:-i)))).toString().split("e"))[0]+"e"+(o[1]?+o[1]+i:i))))}}Math.round10||(Math.round10=function(e,o){return cookedDecimalAdjust("round",e,o)});var cooked_recipe_migrate_counter=0,progressIterations=0;function cooked_migrate_recipes(e,r){var a,d,c,o,n=0;0"+t+" "+cooked_migration_js_vars.i18n_hrs+", "+s+" "+cooked_migration_js_vars.i18n_mins+" "+cooked_migration_js_vars.i18n_remaining+""):1<=s?c.html(i+" / "+o+""+s+" "+cooked_migration_js_vars.i18n_mins+" "+cooked_migration_js_vars.i18n_remaining+""):c.text(i+" / "+o)):c.text(i+" / "+o),cooked_migrate_recipes(e,r)):(a.hide(),c.hide(),jQuery(".recipe-setting-block.migrate_button").find("h3").hide(),jQuery(".recipe-setting-block.migrate_button").find("p:nth-child(2)").hide(),jQuery(".recipe-setting-block.migrate_button").find("ul.cooked-admin-ul").hide(),jQuery("#cooked-migration-button").hide(),jQuery("#cooked-migration-completed").addClass("cooked-active"))}))}function cooked_import_recipes(e,r,a){var d,c,n,o,_=0;0"+t+" "+cooked_migration_js_vars.i18n_hrs+", "+s+" "+cooked_migration_js_vars.i18n_mins+" "+cooked_migration_js_vars.i18n_remaining+""):1<=s?n.html(i+" / "+o+""+s+" "+cooked_migration_js_vars.i18n_mins+" "+cooked_migration_js_vars.i18n_remaining+""):n.text(i+" / "+o)):n.text(i+" / "+o),cooked_import_recipes(e,r,a)):(d.hide(),n.hide(),jQuery(".recipe-setting-block.import_button").find("h3").hide(),jQuery(".recipe-setting-block.import_button").find("p:nth-child(2)").hide(),jQuery(".recipe-setting-block.import_button").find(".cooked-import-note").hide(),jQuery(".recipe-setting-block.import_button").find("ul.cooked-admin-ul").hide(),jQuery("#cooked-import-button").hide(),jQuery("#cooked-import-completed").addClass("cooked-active"))}))} \ No newline at end of file +(d=>{d(document).ready(function(){var e=d("#cooked-migration-button"),o=d("#cooked-import-button"),i=d("#cooked-csv-import-button"),r=(d("#cooked-csv-import-form"),d("#cooked-migration-progress"),d("#cooked-migration-progress-text"),d("#cooked-csv-import-progress")),a=d("#cooked-csv-import-progress-text");e.length&&e.on("click",function(e){e.preventDefault();e=d(this);confirm(cooked_migration_js_vars.i18n_confirm_migrate_recipes)&&!e.hasClass("disabled")&&(e.addClass("disabled").attr("disabled",!0),e.hide(),d.post(cooked_migration_js_vars.ajax_url,{action:"cooked_get_migrate_ids"},function(e){var o;e&&(o=JSON.parse(e),0<(o=Object.keys(o).length))&&cooked_migrate_recipes(e,o)}))}),o.length&&o.on("click",function(e){e.preventDefault();var i=d(this),t=i.data("import-type");confirm(cooked_migration_js_vars.i18n_confirm_import_recipes)&&!i.hasClass("disabled")&&(i.addClass("disabled").attr("disabled",!0),i.hide(),d.post(cooked_migration_js_vars.ajax_url,{action:"cooked_get_import_ids",import_type:t},function(e){var o;e?(o=JSON.parse(e),0<(o=Object.keys(o).length)&&cooked_import_recipes(e,o,t)):(console.log(cooked_migration_js_vars.i18n_something_wrong),i.addClass("disabled").attr("disabled",!1),i.show())}))}),i.length&&i.on("click",function(e){e.preventDefault();var o,i=d(this),t=d("#cooked-csv-file"),e=t[0].files[0],s=d("#cooked-csv-import-errors");s.hide().empty(),e?"text/csv"===e.type||e.name.endsWith(".csv")?i.hasClass("disabled")||confirm(cooked_migration_js_vars.i18n_confirm_csv_import)&&(i.addClass("disabled").attr("disabled",!0),t.attr("disabled",!0),(o=new FormData).append("action","cooked_upload_csv"),o.append("csv_file",e),r.hasClass("cooked-active")||(r.addClass("cooked-active"),a.addClass("cooked-active"),r.find(".cooked-progress-bar").css({width:"0%"}),a.text(cooked_migration_js_vars.i18n_uploading)),d.ajax({url:cooked_migration_js_vars.ajax_url,type:"POST",data:o,processData:!1,contentType:!1,success:function(e){e.success?(a.text(cooked_migration_js_vars.i18n_processing),r.find(".cooked-progress-bar").css({width:"50%"}),d.post(cooked_migration_js_vars.ajax_url,{action:"cooked_process_csv",transient_key:e.data.transient_key},function(e){var o;e.success?(r.find(".cooked-progress-bar").css({width:"100%"}),a.text(e.data.success+" / "+e.data.total+" "+cooked_migration_js_vars.i18n_recipes_imported),e.data.errors&&0"+cooked_migration_js_vars.i18n_errors+"

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

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

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

"+cooked_migration_js_vars.i18n_failed_process_csv+"

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

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

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

"+cooked_migration_js_vars.i18n_failed_upload_csv+"

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

"+cooked_migration_js_vars.i18n_csv_invalid_file+"

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

"+cooked_migration_js_vars.i18n_csv_no_file+"

").show()})})})(jQuery);{function cookedDecimalAdjust(e,o,i){return void 0===i||0==+i?Math[e](o):(i=+i,null===(o=+o)||isNaN(o)||"number"!=typeof i||i%1!=0?NaN:o<0?-cookedDecimalAdjust(e,-o,i):(o=o.toString().split("e"),+((o=(o=Math[e](+(o[0]+"e"+(o[1]?+o[1]-i:-i)))).toString().split("e"))[0]+"e"+(o[1]?+o[1]+i:i))))}}Math.round10||(Math.round10=function(e,o){return cookedDecimalAdjust("round",e,o)});var cooked_recipe_migrate_counter=0,progressIterations=0;function cooked_migrate_recipes(e,r){var a,d,c,o,n=0;0"+t+" "+cooked_migration_js_vars.i18n_hrs+", "+s+" "+cooked_migration_js_vars.i18n_mins+" "+cooked_migration_js_vars.i18n_remaining+""):1<=s?c.html(i+" / "+o+""+s+" "+cooked_migration_js_vars.i18n_mins+" "+cooked_migration_js_vars.i18n_remaining+""):c.text(i+" / "+o)):c.text(i+" / "+o),cooked_migrate_recipes(e,r)):(a.hide(),c.hide(),jQuery(".recipe-setting-block.migrate_button").find("h3").hide(),jQuery(".recipe-setting-block.migrate_button").find("p:nth-child(2)").hide(),jQuery(".recipe-setting-block.migrate_button").find("ul.cooked-admin-ul").hide(),jQuery("#cooked-migration-button").hide(),jQuery("#cooked-migration-completed").addClass("cooked-active"))}))}function cooked_import_recipes(e,r,a){var d,c,n,o,_=0;0"+t+" "+cooked_migration_js_vars.i18n_hrs+", "+s+" "+cooked_migration_js_vars.i18n_mins+" "+cooked_migration_js_vars.i18n_remaining+""):1<=s?n.html(i+" / "+o+""+s+" "+cooked_migration_js_vars.i18n_mins+" "+cooked_migration_js_vars.i18n_remaining+""):n.text(i+" / "+o)):n.text(i+" / "+o),cooked_import_recipes(e,r,a)):(d.hide(),n.hide(),jQuery(".recipe-setting-block.import_button").find("h3").hide(),jQuery(".recipe-setting-block.import_button").find("p:nth-child(2)").hide(),jQuery(".recipe-setting-block.import_button").find(".cooked-import-note").hide(),jQuery(".recipe-setting-block.import_button").find("ul.cooked-admin-ul").hide(),jQuery("#cooked-import-button").hide(),jQuery("#cooked-import-completed").addClass("cooked-active"))}))} \ No newline at end of file diff --git a/composer.json b/composer.json index 2cdad74..51b6d80 100644 --- a/composer.json +++ b/composer.json @@ -6,7 +6,7 @@ "recipe" ], "homepage": "https://wordpress.org/plugins/cooked/", - "version": "1.13.0", + "version": "1.14.0", "type": "wordpress-plugin", "license": "GPL-3.0-or-later", "prefer-stable": true, diff --git a/composer.lock b/composer.lock index 734c712..dd13b69 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "a4203b5d737ffaa046a8695c4a300dc7", + "content-hash": "93dff3879d013694a97a2b65c557b9d8", "packages": [ { "name": "nxp/math-executor", diff --git a/cooked.php b/cooked.php index 125f27a..230b73b 100644 --- a/cooked.php +++ b/cooked.php @@ -6,7 +6,7 @@ Description: A recipe plugin for WordPress. Author: Gora Tech Author URI: https://goratech.dev -Version: 1.13.0 +Version: 1.14.0 Text Domain: cooked Domain Path: languages License: GPL2 @@ -31,7 +31,7 @@ require_once __DIR__ . '/vendor/autoload.php'; define( 'COOKED_DEV', false ); -define( 'COOKED_VERSION', '1.13.0' ); +define( 'COOKED_VERSION', '1.14.0' ); if ( ! class_exists( 'Cooked_Plugin' ) ) : diff --git a/includes/class.cooked-admin-enqueues.php b/includes/class.cooked-admin-enqueues.php index 1a752cd..9580d5f 100644 --- a/includes/class.cooked-admin-enqueues.php +++ b/includes/class.cooked-admin-enqueues.php @@ -166,6 +166,19 @@ public function admin_enqueues( $hook ) { /* translators: 1: date and time, 2: number of recipes */ 'i18n_last_calculated' => __( 'Last: %1$s · %2$s recipes', 'cooked' ), 'wp_editor_roles_allowed' => esc_attr($wp_editor_roles_allowed), + 'cooked_bulk_add_nonce' => wp_create_nonce( 'cooked_bulk_add' ), + 'i18n_bulk_add_ingredients' => __( 'Bulk Add Ingredients', 'cooked' ), + 'i18n_bulk_add_directions' => __( 'Bulk Add Directions', 'cooked' ), + 'i18n_bulk_add_placeholder_ingredients' => __( "2 cups flour\n1 tsp salt\n1/2 cup sugar\n3 large eggs", 'cooked' ), + 'i18n_bulk_add_placeholder_directions' => __( "Preheat oven to 350°F.\nMix dry ingredients together.\nAdd wet ingredients and stir.", 'cooked' ), + 'i18n_bulk_add_section_heading' => __( 'Section heading', 'cooked' ), + 'i18n_bulk_add_parsing' => __( 'Parsing...', 'cooked' ), + 'i18n_bulk_add_submit_ingredients' => __( 'Add Ingredients', 'cooked' ), + 'i18n_bulk_add_submit_directions' => __( 'Add Directions', 'cooked' ), + 'i18n_bulk_add_amount' => __( 'Amount', 'cooked' ), + 'i18n_bulk_add_unit' => __( 'Measurement', 'cooked' ), + 'i18n_bulk_add_name' => __( 'Item', 'cooked' ), + 'i18n_bulk_add_heading_line_label' => __( 'Heading text', 'cooked' ), ]; // Cooked Admin Style Assets diff --git a/includes/class.cooked-ajax.php b/includes/class.cooked-ajax.php index 115d540..2f01fe9 100644 --- a/includes/class.cooked-ajax.php +++ b/includes/class.cooked-ajax.php @@ -36,6 +36,9 @@ function __construct() { // Get JSON list of Recipe IDs add_action( 'wp_ajax_cooked_get_recipe_ids', [&$this, 'get_recipe_ids'] ); + // Get Recipe Count + add_action( 'wp_ajax_cooked_get_recipe_count', [&$this, 'get_recipe_count'] ); + // Get JSON list of Recipe IDs, ready for Migration add_action( 'wp_ajax_cooked_get_migrate_ids', [&$this, 'get_migrate_ids'] ); @@ -53,6 +56,10 @@ function __construct() { // CSV Import - Process file add_action( 'wp_ajax_cooked_process_csv', [&$this, 'process_csv']); + + // Bulk Add - Parse Ingredients + add_action( 'wp_ajax_cooked_parse_bulk_ingredients', [&$this, 'parse_bulk_ingredients'] ); + add_action( 'wp_ajax_nopriv_cooked_parse_bulk_ingredients', [&$this, 'parse_bulk_ingredients'] ); } public function get_migrate_ids() { @@ -282,54 +289,66 @@ public function get_recipe_ids() { wp_die(); } + public function get_recipe_count() { + if (!wp_verify_nonce($_POST['nonce'], 'cooked_save_default_bulk') || !current_user_can('edit_cooked_default_template')) { + wp_die(); + } + + $args = [ + 'post_type' => 'cp_recipe', + 'posts_per_page' => 1, + 'post_status' => 'any', + 'fields' => 'ids', + ]; + + $query = new WP_Query( $args ); + wp_send_json_success( [ 'total' => $query->found_posts ] ); + } + public function save_default_bulk() { - $bulk_amount = 5; + $per_page = 20; if (!wp_verify_nonce($_POST['nonce'], 'cooked_save_default_bulk') || !current_user_can('edit_cooked_default_template')) { wp_die(); } - if (isset($_POST['recipe_ids'])) { - $recipe_ids = json_decode($_POST['recipe_ids'], true); - if (is_array($recipe_ids) && !empty($recipe_ids)) { - $_recipe_ids = []; - foreach ($recipe_ids as $_rid) { - $safe_id = intval($_rid); - if ($safe_id) { - $_recipe_ids[] = $_rid; - } - } - $recipe_ids = $_recipe_ids; - } else { - return false; - } + if (!isset($_POST['default_content'])) { + wp_send_json_error( [ 'message' => __( 'No default content provided.', 'cooked' ) ] ); + } - $leftover_recipe_ids = array_slice($recipe_ids, $bulk_amount); - $recipe_ids = array_slice($recipe_ids, 0, $bulk_amount); + $page = isset($_POST['page']) ? absint($_POST['page']) : 0; + $content = wp_kses_post($_POST['default_content']); - if (empty($recipe_ids)) { - echo 'false'; - wp_die(); - } else { - foreach ($recipe_ids as $rid) { - $recipe_settings = get_post_meta($rid, '_recipe_settings', true); - if (!empty($recipe_settings)) { - $recipe_settings['content'] = wp_kses_post($_POST['default_content']); - update_post_meta($rid, '_recipe_settings', $recipe_settings); - } - } + $args = [ + 'post_type' => 'cp_recipe', + 'posts_per_page' => $per_page, + 'offset' => $page * $per_page, + 'post_status' => 'any', + 'fields' => 'ids', + 'orderby' => 'ID', + 'order' => 'ASC', + ]; - if (!empty($leftover_recipe_ids)) { - echo wp_json_encode($leftover_recipe_ids); - wp_die(); - } else { - echo 'false'; - wp_die(); - } + $query = new WP_Query( $args ); + $recipe_ids = $query->posts; + $updated = 0; + + foreach ($recipe_ids as $rid) { + $recipe_settings = get_post_meta($rid, '_recipe_settings', true); + if (!empty($recipe_settings)) { + $recipe_settings['content'] = $content; + update_post_meta($rid, '_recipe_settings', $recipe_settings); + $updated++; } } - wp_die(); + $processed = ( $page * $per_page ) + count( $recipe_ids ); + $has_more = $processed < $query->found_posts; + + wp_send_json_success( [ + 'updated' => $updated, + 'has_more' => $has_more, + ] ); } public function save_default() { @@ -445,4 +464,115 @@ public function process_csv() { ]); } } + + public function parse_bulk_ingredients() { + if ( ! check_ajax_referer( 'cooked_bulk_add', 'nonce', false ) ) { + wp_send_json_error( [ 'message' => __( 'Security check failed.', 'cooked' ) ] ); + } + + $lines = isset( $_POST['lines'] ) ? (array) $_POST['lines'] : []; + + if ( empty( $lines ) ) { + wp_send_json_error( [ 'message' => __( 'No ingredients provided.', 'cooked' ) ] ); + } + + $measurements = Cooked_Measurements::get(); + + $variations_map = []; + foreach ( $measurements as $key => $m ) { + if ( ! empty( $m['variations'] ) ) { + foreach ( $m['variations'] as $variation ) { + $variations_map[ $variation ] = $key; + } + } + } + + // Sort variations longest-first to avoid partial matches. + $variation_strings = array_keys( $variations_map ); + usort( $variation_strings, function( $a, $b ) { + return strlen( $b ) - strlen( $a ); + }); + + $escaped = array_map( function( $v ) { + return preg_quote( $v, '/' ); + }, $variation_strings ); + + $units_pattern = '/^(' . implode( '|', $escaped ) . ')\.?\s+/iu'; + + $parsed = []; + + foreach ( $lines as $index => $line ) { + // Do not use Cooked_Functions::sanitize_text_field() here — it runs htmlentities() and turns + // Unicode like en dash or ½ into – / ½, which breaks parsing and leaks into output. + $line = is_string( $line ) ? $line : ''; + $line = wp_unslash( $line ); + $line = html_entity_decode( $line, ENT_QUOTES | ENT_HTML5, 'UTF-8' ); + $line = trim( sanitize_text_field( $line ) ); + + if ( '' === $line ) { + $parsed[ $index ] = [ 'amount' => '', 'measurement' => '', 'name' => '' ]; + continue; + } + + $raw = $line; + $amount = ''; + $measurement = ''; + + $raw = str_replace( "\xE2\x81\x84", '/', $raw ); + + $fraction_map = [ + "\xC2\xBC" => '1/4', "\xC2\xBD" => '1/2', "\xC2\xBE" => '3/4', + "\xE2\x85\x93" => '1/3', "\xE2\x85\x94" => '2/3', + "\xE2\x85\x95" => '1/5', "\xE2\x85\x96" => '2/5', + "\xE2\x85\x97" => '3/5', "\xE2\x85\x98" => '4/5', + "\xE2\x85\x99" => '1/6', "\xE2\x85\x9A" => '5/6', + "\xE2\x85\x9B" => '1/8', "\xE2\x85\x9C" => '3/8', + "\xE2\x85\x9D" => '5/8', "\xE2\x85\x9E" => '7/8', + ]; + // "1½" must become "1 1/2", not "11/2". + foreach ( $fraction_map as $symbol => $replacement ) { + $raw = preg_replace( '/(\d)' . preg_quote( $symbol, '/' ) . '/u', '$1 ' . $replacement, $raw ); + } + foreach ( $fraction_map as $symbol => $replacement ) { + $raw = str_replace( $symbol, $replacement, $raw ); + } + + // Allow en dash (U+2013) and em dash (U+2014) in amounts like "2–3". + $amount_regex = '/^\s*([\d][\s\/\-\d.,\x{2013}\x{2014}]*)\s*/u'; + if ( preg_match( $amount_regex, $raw, $match ) ) { + $amount = trim( $match[1] ); + $raw = trim( substr( $raw, strlen( $match[0] ) ) ); + } + + if ( preg_match( $units_pattern, $raw, $match ) ) { + $matched_variation = trim( rtrim( $match[1], '.' ) ); + $matched_lower = strtolower( $matched_variation ); + + foreach ( $variations_map as $variation => $key ) { + if ( strtolower( $variation ) === $matched_lower ) { + $measurement = $key; + break; + } + } + + $raw = trim( substr( $raw, strlen( $match[0] ) ) ); + } + + $name = trim( $raw ); + + if ( ! $name ) { + $amount = ''; + $measurement = ''; + $name = trim( $line ); + } + + $parsed[ $index ] = [ + 'amount' => $amount, + 'measurement' => $measurement, + 'name' => $name, + ]; + } + + wp_send_json_success( [ 'parsed' => $parsed ] ); + } } diff --git a/includes/class.cooked-delicious-recipes.php b/includes/class.cooked-delicious-recipes.php index d6abd51..f18711d 100644 --- a/includes/class.cooked-delicious-recipes.php +++ b/includes/class.cooked-delicious-recipes.php @@ -147,6 +147,9 @@ public static function import_recipe($id) { 'name' => (!empty($ingredient['ingredient']) ? $ingredient['ingredient'] : ''), 'url' => '', 'description' => (!empty($ingredient['notes']) ? $ingredient['notes'] : ''), + 'sub_amount' => '', + 'sub_measurement' => '', + 'sub_name' => '', ]; } } diff --git a/includes/class.cooked-recipe-maker.php b/includes/class.cooked-recipe-maker.php index aeca158..d5202dc 100644 --- a/includes/class.cooked-recipe-maker.php +++ b/includes/class.cooked-recipe-maker.php @@ -148,6 +148,9 @@ public static function import_recipe($id) { 'name' => (!empty($ingredient['name']) ? $ingredient['name'] : ''), 'url' => '', 'description' => (!empty($ingredient['notes']) ? $ingredient['notes'] : ''), + 'sub_amount' => '', + 'sub_measurement' => '', + 'sub_name' => '', ]; } } diff --git a/includes/class.cooked-recipe-meta.php b/includes/class.cooked-recipe-meta.php index 93257be..7ce06e9 100644 --- a/includes/class.cooked-recipe-meta.php +++ b/includes/class.cooked-recipe-meta.php @@ -209,6 +209,45 @@ public function render_recipe_meta_box() { // Add an nonce field so we can check for it later. wp_nonce_field( 'cooked_recipe_custom_box', 'cooked_recipe_custom_box_nonce' ); } + + public static function bulk_add_modal() { + // Frontend submit form uses cooked-button + colors.php; wp-admin uses core .button styles. + if ( is_admin() ) { + $bulk_cancel_class = 'button cooked-bulk-add-cancel'; + $bulk_submit_class = 'button button-primary cooked-bulk-add-submit'; + } else { + $bulk_cancel_class = 'cooked-button cooked-secondary-button cooked-bulk-add-cancel'; + $bulk_submit_class = 'cooked-button cooked-bulk-add-submit'; + } + ?> + +   +  

@@ -843,8 +883,11 @@ function cooked_render_recipe_fields( $post_id ) {

+   + +  

@@ -1590,6 +1633,8 @@ function cooked_render_recipe_fields( $post_id ) {
+ + Note: Author links require the Browse/Search Recipes Page to be set up correctly to function properly." msgstr "" -#: includes/class.cooked-recipe-meta.php:523 -#: includes/class.cooked-recipe-meta.php:615 -#: includes/class.cooked-recipe-meta.php:681 +#: includes/class.cooked-recipe-meta.php:562 +#: includes/class.cooked-recipe-meta.php:654 +#: includes/class.cooked-recipe-meta.php:721 msgid "Substitution:" msgstr "" -#: includes/class.cooked-recipe-meta.php:536 -#: includes/class.cooked-recipe-meta.php:628 -#: includes/class.cooked-recipe-meta.php:694 +#: includes/class.cooked-recipe-meta.php:575 +#: includes/class.cooked-recipe-meta.php:667 +#: includes/class.cooked-recipe-meta.php:734 msgid "ex. Apple Sauce, Tofu, etc." msgstr "" @@ -2239,36 +2242,36 @@ msgstr "" msgid "or" msgstr "" -#: includes/class.cooked-recipe-meta.php:1459 +#: includes/class.cooked-recipe-meta.php:1502 msgid "Next & Previous Recipe Navigation" msgstr "" -#: includes/class.cooked-recipe-meta.php:1460 +#: includes/class.cooked-recipe-meta.php:1503 msgid "This will display navigation links to the next and previous recipes." msgstr "" -#: includes/class.cooked-recipe-meta.php:1464 +#: includes/class.cooked-recipe-meta.php:1507 msgid "This shortcode automatically displays the previous and next recipe links based on the current recipe page. No parameters are required." msgstr "" -#: includes/class.cooked-recipe-meta.php:1469 +#: includes/class.cooked-recipe-meta.php:1512 msgid "Usage" msgstr "" -#: includes/class.cooked-recipe-meta.php:1471 +#: includes/class.cooked-recipe-meta.php:1514 msgid "Simply add the shortcode to your recipe template or content area. The navigation will automatically show the previous and next recipes based on recipe ID order." msgstr "" -#: includes/class.cooked-recipe-meta.php:1484 +#: includes/class.cooked-recipe-meta.php:1527 #: includes/class.cooked-related-recipes.php:34 msgid "Related Recipes" msgstr "" -#: includes/class.cooked-shortcodes.php:1131 +#: includes/class.cooked-shortcodes.php:1133 msgid "Recipe not found." msgstr "" -#: includes/class.cooked-shortcodes.php:1146 +#: includes/class.cooked-shortcodes.php:1148 msgid "No related recipes found." msgstr "" @@ -2286,100 +2289,101 @@ msgstr "" msgid "Create translations of your browse page in %s for full multilingual support." msgstr "" -#: includes/class.cooked-recipe-meta.php:1493 +#: includes/class.cooked-recipe-meta.php:1536 msgid "Specify a recipe ID. If not provided, uses the current recipe." msgstr "" -#: includes/class.cooked-recipe-meta.php:1500 +#: includes/class.cooked-recipe-meta.php:1543 msgid "Set the heading text for the related recipes section." msgstr "" -#: includes/class.cooked-recipe-meta.php:1527 +#: includes/class.cooked-recipe-meta.php:1570 msgid "Hide recipe card images." msgstr "" -#: includes/class.cooked-recipe-meta.php:1534 +#: includes/class.cooked-recipe-meta.php:1577 msgid "Hide recipe card excerpts." msgstr "" -#: includes/class.cooked-recipe-meta.php:1544 +#: includes/class.cooked-recipe-meta.php:1587 msgid "Hide recipe card authors." msgstr "" -#: includes/class.cooked-recipe-meta.php:1566 +#: includes/class.cooked-recipe-meta.php:1609 msgid "Recipe ID" msgstr "" -#: includes/class.cooked-recipe-meta.php:1567 +#: includes/class.cooked-admin-enqueues.php:174 +#: includes/class.cooked-recipe-meta.php:1610 msgid "Section heading" msgstr "" -#: includes/class.cooked-recipe-meta.php:1568 +#: includes/class.cooked-recipe-meta.php:1611 msgid "Number of recipes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1569 +#: includes/class.cooked-recipe-meta.php:1612 msgid "Grid columns" msgstr "" -#: includes/class.cooked-recipe-meta.php:1570 -#: includes/class.cooked-recipe-meta.php:1571 -#: includes/class.cooked-recipe-meta.php:1572 -#: includes/class.cooked-recipe-meta.php:1573 +#: includes/class.cooked-recipe-meta.php:1613 +#: includes/class.cooked-recipe-meta.php:1614 +#: includes/class.cooked-recipe-meta.php:1615 +#: includes/class.cooked-recipe-meta.php:1616 msgid "true/false" msgstr "" -#: includes/class.cooked-recipe-meta.php:1575 +#: includes/class.cooked-recipe-meta.php:1618 msgid "Example" msgstr "" -#: includes/class.cooked-shortcodes.php:1114 +#: includes/class.cooked-shortcodes.php:1116 msgid "Invalid recipe ID specified. Please provide a valid numeric recipe ID." msgstr "" -#: includes/class.cooked-shortcodes.php:1124 +#: includes/class.cooked-shortcodes.php:1126 msgid "No recipe found. Please specify a recipe ID using the id attribute, or use this shortcode on a recipe page." msgstr "" -#: includes/class.cooked-shortcodes.php:1135 +#: includes/class.cooked-shortcodes.php:1137 #, php-format msgid "The specified ID (%d) is not a recipe." msgstr "" -#: includes/class.cooked-shortcodes.php:1137 +#: includes/class.cooked-shortcodes.php:1139 #, php-format msgid "No post found with ID %d." msgstr "" -#: includes/class.cooked-shortcodes.php:1149 +#: includes/class.cooked-shortcodes.php:1151 msgid "This may be because there are no other recipes in the current language with matching attributes." msgstr "" -#: includes/class.cooked-shortcodes.php:1151 +#: includes/class.cooked-shortcodes.php:1153 msgid "Try adjusting the matching criteria or ensure you have other published recipes with shared categories, tags, or ingredients." msgstr "" -#: includes/class.cooked-recipe-meta.php:1485 +#: includes/class.cooked-recipe-meta.php:1528 msgid "Displays a grid of related recipes based on shared terms in any of the recipe taxonomies (categories, cuisines, cooking methods, tags, diets), shown in random order. No cache or pre-calculation." msgstr "" -#: includes/class.cooked-recipe-meta.php:1510 +#: includes/class.cooked-recipe-meta.php:1553 msgid "Number of recipes to display (default: 4)." msgstr "" -#: includes/class.cooked-recipe-meta.php:1517 +#: includes/class.cooked-recipe-meta.php:1560 msgid "Number of columns in the grid (default: 2)." msgstr "" -#: includes/class.cooked-recipe-meta.php:1551 +#: includes/class.cooked-recipe-meta.php:1594 msgid "Toggle which taxonomies are used: match_categories, match_cuisines, match_cooking_methods, match_tags, match_diets (default: true)." msgstr "" -#: includes/class.cooked-recipe-meta.php:1558 +#: includes/class.cooked-recipe-meta.php:1601 msgid "Matching options:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1559 +#: includes/class.cooked-recipe-meta.php:1602 msgid "Set to false to exclude a taxonomy from related recipes, e.g. match_cuisines=\"false\" to ignore cuisines." msgstr "" @@ -2482,7 +2486,7 @@ msgid "Failed to upload CSV file." msgstr "" #: includes/class.cooked-admin-enqueues.php:161 -#: includes/class.cooked-ajax.php:379 +#: includes/class.cooked-ajax.php:398 msgid "File upload failed." msgstr "" @@ -2508,29 +2512,30 @@ msgstr "" msgid "Last: %1$s · %2$s recipes" msgstr "" -#: includes/class.cooked-ajax.php:346 +#: includes/class.cooked-ajax.php:316 +#: includes/class.cooked-ajax.php:365 msgid "No default content provided." msgstr "" -#: includes/class.cooked-ajax.php:375 -#: includes/class.cooked-ajax.php:411 +#: includes/class.cooked-ajax.php:394 +#: includes/class.cooked-ajax.php:430 msgid "You do not have permission to import recipes." msgstr "" -#: includes/class.cooked-ajax.php:385 +#: includes/class.cooked-ajax.php:404 msgid "Invalid file type. Please upload a CSV file." msgstr "" -#: includes/class.cooked-ajax.php:418 +#: includes/class.cooked-ajax.php:437 msgid "CSV file not found. Please upload again." msgstr "" -#: includes/class.cooked-ajax.php:434 +#: includes/class.cooked-ajax.php:453 #, php-format msgid "Successfully imported %d recipe(s)." msgstr "" -#: includes/class.cooked-ajax.php:443 +#: includes/class.cooked-ajax.php:462 msgid "No recipes were imported." msgstr "" @@ -2647,3 +2652,71 @@ msgstr "" #: includes/class.cooked-import.php:167 msgid "Restricted diet type (Schema.org RestrictedDiet), separated by comma" msgstr "" + +#: includes/class.cooked-admin-enqueues.php:170 +msgid "Bulk Add Ingredients" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:171 +msgid "Bulk Add Directions" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:172 +msgid "" +"2 cups flour\n" +"1 tsp salt\n" +"1/2 cup sugar\n" +"3 large eggs" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:173 +msgid "" +"Preheat oven to 350°F.\n" +"Mix dry ingredients together.\n" +"Add wet ingredients and stir." +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:175 +msgid "Parsing..." +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:176 +msgid "Add Ingredients" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:177 +msgid "Add Directions" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:181 +msgid "Heading text" +msgstr "" + +#: includes/class.cooked-ajax.php:470 +msgid "Security check failed." +msgstr "" + +#: includes/class.cooked-ajax.php:476 +msgid "No ingredients provided." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:230 +msgid "Enter one item per line. Use the checkboxes below to mark section headings." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:233 +msgid "Preview" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:237 +msgid "Please review the parsed fields before adding. Automatic parsing may misread amounts—for example, a range written as 2-3 could appear as 23 unless you correct it." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:242 +msgid "Cancel" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:684 +#: includes/class.cooked-recipe-meta.php:890 +msgid "Bulk Add" +msgstr "" diff --git a/languages/cooked.pot b/languages/cooked.pot index 4459be8..30b6284 100644 --- a/languages/cooked.pot +++ b/languages/cooked.pot @@ -2,14 +2,14 @@ # This file is distributed under the GPL2. msgid "" msgstr "" -"Project-Id-Version: Cooked - Recipe Management 1.13.0\n" +"Project-Id-Version: Cooked - Recipe Management 1.14.0\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/cooked\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2026-02-24T19:15:02-05:00\n" +"POT-Creation-Date: 2026-04-18T23:32:28-04:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "X-Generator: WP-CLI 2.12.0\n" "X-Domain: cooked\n" @@ -44,14 +44,14 @@ msgid "remaining" msgstr "" #: includes/class.cooked-admin-enqueues.php:138 -#: includes/class.cooked-recipe-meta.php:759 -#: includes/class.cooked-recipe-meta.php:815 -#: includes/class.cooked-recipe-meta.php:856 +#: includes/class.cooked-recipe-meta.php:799 +#: includes/class.cooked-recipe-meta.php:855 +#: includes/class.cooked-recipe-meta.php:899 msgid "Add Image" msgstr "" #: includes/class.cooked-admin-enqueues.php:139 -#: includes/class.cooked-recipe-meta.php:759 +#: includes/class.cooked-recipe-meta.php:799 msgid "Change Image" msgstr "" @@ -60,7 +60,7 @@ msgid "Use this Image" msgstr "" #: includes/class.cooked-admin-enqueues.php:141 -#: includes/class.cooked-recipe-meta.php:1088 +#: includes/class.cooked-recipe-meta.php:1131 msgid "Add to Gallery" msgstr "" @@ -139,7 +139,7 @@ msgid "Failed to upload CSV file." msgstr "" #: includes/class.cooked-admin-enqueues.php:161 -#: includes/class.cooked-ajax.php:379 +#: includes/class.cooked-ajax.php:398 msgid "File upload failed." msgstr "" @@ -165,6 +165,65 @@ msgstr "" msgid "Last: %1$s · %2$s recipes" msgstr "" +#: includes/class.cooked-admin-enqueues.php:170 +msgid "Bulk Add Ingredients" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:171 +msgid "Bulk Add Directions" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:172 +msgid "" +"2 cups flour\n" +"1 tsp salt\n" +"1/2 cup sugar\n" +"3 large eggs" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:173 +msgid "" +"Preheat oven to 350°F.\n" +"Mix dry ingredients together.\n" +"Add wet ingredients and stir." +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:174 +#: includes/class.cooked-recipe-meta.php:1610 +msgid "Section heading" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:175 +msgid "Parsing..." +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:176 +msgid "Add Ingredients" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:177 +msgid "Add Directions" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:178 +#: includes/class.cooked-recipe-meta.php:513 +msgid "Amount" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:179 +#: includes/class.cooked-recipe-meta.php:514 +msgid "Measurement" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:180 +#: includes/class.cooked-recipe-meta.php:515 +msgid "Item" +msgstr "" + +#: includes/class.cooked-admin-enqueues.php:181 +msgid "Heading text" +msgstr "" + #: includes/class.cooked-admin-menus.php:36 #: includes/class.cooked-admin-menus.php:59 #: includes/class.cooked-post-types.php:450 @@ -213,54 +272,63 @@ msgstr "" msgid "You do not have sufficient permissions to access this page." msgstr "" -#: includes/class.cooked-ajax.php:180 +#: includes/class.cooked-ajax.php:187 #: includes/class.cooked-csv-import.php:307 #: includes/class.cooked-functions.php:134 #: includes/class.cooked-recipe-meta.php:176 -#: includes/class.cooked-recipe-meta.php:263 -#: includes/class.cooked-recipe-meta.php:1166 +#: includes/class.cooked-recipe-meta.php:302 +#: includes/class.cooked-recipe-meta.php:1209 #: includes/class.cooked-recipes.php:635 #: includes/class.cooked-recipes.php:667 msgid "Ingredients" msgstr "" -#: includes/class.cooked-ajax.php:180 +#: includes/class.cooked-ajax.php:187 #: includes/class.cooked-csv-import.php:307 #: includes/class.cooked-functions.php:135 #: includes/class.cooked-recipe-meta.php:176 -#: includes/class.cooked-recipe-meta.php:269 -#: includes/class.cooked-recipe-meta.php:1197 +#: includes/class.cooked-recipe-meta.php:308 +#: includes/class.cooked-recipe-meta.php:1240 #: includes/class.cooked-recipes.php:639 #: includes/class.cooked-recipes.php:668 msgid "Directions" msgstr "" -#: includes/class.cooked-ajax.php:346 +#: includes/class.cooked-ajax.php:316 +#: includes/class.cooked-ajax.php:365 msgid "No default content provided." msgstr "" -#: includes/class.cooked-ajax.php:375 -#: includes/class.cooked-ajax.php:411 +#: includes/class.cooked-ajax.php:394 +#: includes/class.cooked-ajax.php:430 msgid "You do not have permission to import recipes." msgstr "" -#: includes/class.cooked-ajax.php:385 +#: includes/class.cooked-ajax.php:404 msgid "Invalid file type. Please upload a CSV file." msgstr "" -#: includes/class.cooked-ajax.php:418 +#: includes/class.cooked-ajax.php:437 msgid "CSV file not found. Please upload again." msgstr "" -#: includes/class.cooked-ajax.php:434 +#: includes/class.cooked-ajax.php:453 #, php-format msgid "Successfully imported %d recipe(s)." msgstr "" -#: includes/class.cooked-ajax.php:443 +#: includes/class.cooked-ajax.php:462 msgid "No recipes were imported." msgstr "" +#: includes/class.cooked-ajax.php:470 +msgid "Security check failed." +msgstr "" + +#: includes/class.cooked-ajax.php:476 +msgid "No ingredients provided." +msgstr "" + #: includes/class.cooked-cli.php:41 msgid "Please provide a tool name. Use `wp cooked tools list` to see available tools." msgstr "" @@ -308,7 +376,7 @@ msgid "Error importing WP Delicious recipe." msgstr "" #: includes/class.cooked-enqueues.php:56 -#: includes/class.cooked-recipe-meta.php:1412 +#: includes/class.cooked-recipe-meta.php:1455 msgid "Timer" msgstr "" @@ -319,7 +387,7 @@ msgid "What's new in %s?" msgstr "" #: includes/class.cooked-functions.php:127 -#: includes/class.cooked-shortcodes.php:656 +#: includes/class.cooked-shortcodes.php:658 msgid "Print" msgstr "" @@ -336,7 +404,7 @@ msgid "Information" msgstr "" #: includes/class.cooked-functions.php:132 -#: includes/class.cooked-recipe-meta.php:1357 +#: includes/class.cooked-recipe-meta.php:1400 #: includes/class.cooked-settings.php:231 msgid "Excerpt" msgstr "" @@ -347,15 +415,15 @@ msgstr "" #: includes/class.cooked-functions.php:136 #: includes/class.cooked-import.php:161 -#: includes/class.cooked-recipe-meta.php:1381 +#: includes/class.cooked-recipe-meta.php:1424 #: includes/class.cooked-recipes.php:642 #: includes/class.cooked-settings.php:232 -#: includes/class.cooked-shortcodes.php:775 +#: includes/class.cooked-shortcodes.php:777 msgid "Notes" msgstr "" #: includes/class.cooked-functions.php:137 -#: includes/class.cooked-recipe-meta.php:275 +#: includes/class.cooked-recipe-meta.php:314 msgid "Nutrition" msgstr "" @@ -1183,558 +1251,563 @@ msgstr "" msgid "Error importing WP Recipe Maker recipe." msgstr "" -#: includes/class.cooked-recipe-meta.php:221 +#: includes/class.cooked-recipe-meta.php:230 +msgid "Enter one item per line. Use the checkboxes below to mark section headings." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:233 +msgid "Preview" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:237 +msgid "Please review the parsed fields before adding. Automatic parsing may misread amounts—for example, a range written as 2-3 could appear as 23 unless you correct it." +msgstr "" + +#: includes/class.cooked-recipe-meta.php:242 +msgid "Cancel" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:260 msgid "Display Recipe" msgstr "" -#: includes/class.cooked-recipe-meta.php:222 +#: includes/class.cooked-recipe-meta.php:261 msgid "This shortcode displays the recipe in its entirety, using the \"Recipe Template\" field in the first tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:257 +#: includes/class.cooked-recipe-meta.php:296 msgid "Layout" msgstr "" -#: includes/class.cooked-recipe-meta.php:281 -#: includes/class.cooked-recipe-meta.php:1278 +#: includes/class.cooked-recipe-meta.php:320 +#: includes/class.cooked-recipe-meta.php:1321 msgid "Gallery" msgstr "" -#: includes/class.cooked-recipe-meta.php:287 +#: includes/class.cooked-recipe-meta.php:326 msgid "Shortcodes" msgstr "" -#: includes/class.cooked-recipe-meta.php:344 +#: includes/class.cooked-recipe-meta.php:383 msgid "Recipe Review Required" msgstr "" #. translators: for displaying singular or plural versions depending on the number of recipes. -#: includes/class.cooked-recipe-meta.php:347 +#: includes/class.cooked-recipe-meta.php:386 #, php-format msgid "It looks like this recipe is from a different version of %s. Please review and click \"Update\" to save it." msgstr "" -#: includes/class.cooked-recipe-meta.php:355 +#: includes/class.cooked-recipe-meta.php:394 msgid "Recipe Shortcode" msgstr "" -#: includes/class.cooked-recipe-meta.php:356 +#: includes/class.cooked-recipe-meta.php:395 msgid "You can use the following shortcode to display your recipe anywhere:" msgstr "" -#: includes/class.cooked-recipe-meta.php:370 +#: includes/class.cooked-recipe-meta.php:409 msgid "Recipe Template" msgstr "" -#: includes/class.cooked-recipe-meta.php:370 +#: includes/class.cooked-recipe-meta.php:409 msgid "Default Recipe Template" msgstr "" -#: includes/class.cooked-recipe-meta.php:370 +#: includes/class.cooked-recipe-meta.php:409 msgid "Choose from the options below to use this layout as the default for new recipes or for all recipes." msgstr "" -#: includes/class.cooked-recipe-meta.php:370 +#: includes/class.cooked-recipe-meta.php:409 msgid "Save as Default" msgstr "" -#: includes/class.cooked-recipe-meta.php:370 +#: includes/class.cooked-recipe-meta.php:409 msgid "Apply to All" msgstr "" -#: includes/class.cooked-recipe-meta.php:370 +#: includes/class.cooked-recipe-meta.php:409 msgid "Reset" msgstr "" -#: includes/class.cooked-recipe-meta.php:370 +#: includes/class.cooked-recipe-meta.php:409 msgid "Using the built-in recipe shortcodes found on the \"Shortcodes\" tab, you can create the layout of your recipe below. Use the \"Save as Default\" button to save your template." msgstr "" -#: includes/class.cooked-recipe-meta.php:388 +#: includes/class.cooked-recipe-meta.php:427 msgid "Recipe Excerpt" msgstr "" -#: includes/class.cooked-recipe-meta.php:388 +#: includes/class.cooked-recipe-meta.php:427 msgid "The excerpt is used on recipe listing templates, where the full recipe should not be displayed." msgstr "" -#: includes/class.cooked-recipe-meta.php:411 +#: includes/class.cooked-recipe-meta.php:450 msgid "SEO Description" msgstr "" -#: includes/class.cooked-recipe-meta.php:411 +#: includes/class.cooked-recipe-meta.php:450 msgid "This description is used for SEO purposes and is optional. By default, Cooked will use the Recipe Excerpt above if available or the Recipe Title if not." msgstr "" -#: includes/class.cooked-recipe-meta.php:422 +#: includes/class.cooked-recipe-meta.php:461 #: includes/class.cooked-settings.php:230 msgid "Difficulty Level" msgstr "" -#: includes/class.cooked-recipe-meta.php:431 -#: includes/class.cooked-recipe-meta.php:1140 +#: includes/class.cooked-recipe-meta.php:470 +#: includes/class.cooked-recipe-meta.php:1183 #: includes/class.cooked-settings.php:233 -#: includes/class.cooked-shortcodes.php:449 -#: includes/class.cooked-shortcodes.php:671 +#: includes/class.cooked-shortcodes.php:451 +#: includes/class.cooked-shortcodes.php:673 msgid "Prep Time" msgstr "" -#: includes/class.cooked-recipe-meta.php:433 -#: includes/class.cooked-recipe-meta.php:438 -#: includes/class.cooked-recipe-meta.php:443 +#: includes/class.cooked-recipe-meta.php:472 +#: includes/class.cooked-recipe-meta.php:477 +#: includes/class.cooked-recipe-meta.php:482 msgid "minutes" msgstr "" -#: includes/class.cooked-recipe-meta.php:436 -#: includes/class.cooked-recipe-meta.php:1141 +#: includes/class.cooked-recipe-meta.php:475 +#: includes/class.cooked-recipe-meta.php:1184 #: includes/class.cooked-settings.php:234 -#: includes/class.cooked-shortcodes.php:450 -#: includes/class.cooked-shortcodes.php:680 +#: includes/class.cooked-shortcodes.php:452 +#: includes/class.cooked-shortcodes.php:682 msgid "Cook Time" msgstr "" -#: includes/class.cooked-recipe-meta.php:441 -#: includes/class.cooked-recipe-meta.php:1142 +#: includes/class.cooked-recipe-meta.php:480 +#: includes/class.cooked-recipe-meta.php:1185 #: includes/class.cooked-settings.php:235 -#: includes/class.cooked-shortcodes.php:451 -#: includes/class.cooked-shortcodes.php:691 -#: includes/class.cooked-shortcodes.php:698 +#: includes/class.cooked-shortcodes.php:453 +#: includes/class.cooked-shortcodes.php:693 +#: includes/class.cooked-shortcodes.php:700 msgid "Total Time" msgstr "" -#: includes/class.cooked-recipe-meta.php:449 +#: includes/class.cooked-recipe-meta.php:488 msgid "Recipe Notes" msgstr "" -#: includes/class.cooked-recipe-meta.php:449 +#: includes/class.cooked-recipe-meta.php:488 msgid "The notes are displayed in the recipe." msgstr "" -#: includes/class.cooked-recipe-meta.php:474 -msgid "Amount" -msgstr "" - -#: includes/class.cooked-recipe-meta.php:475 -msgid "Measurement" -msgstr "" - -#: includes/class.cooked-recipe-meta.php:476 -msgid "Item" -msgstr "" - -#: includes/class.cooked-recipe-meta.php:514 -#: includes/class.cooked-recipe-meta.php:606 -#: includes/class.cooked-recipe-meta.php:672 +#: includes/class.cooked-recipe-meta.php:553 +#: includes/class.cooked-recipe-meta.php:645 +#: includes/class.cooked-recipe-meta.php:712 msgid "ex. Eggs, Milk, etc." msgstr "" -#: includes/class.cooked-recipe-meta.php:523 -#: includes/class.cooked-recipe-meta.php:615 -#: includes/class.cooked-recipe-meta.php:681 +#: includes/class.cooked-recipe-meta.php:562 +#: includes/class.cooked-recipe-meta.php:654 +#: includes/class.cooked-recipe-meta.php:721 msgid "Substitution:" msgstr "" -#: includes/class.cooked-recipe-meta.php:536 -#: includes/class.cooked-recipe-meta.php:628 -#: includes/class.cooked-recipe-meta.php:694 +#: includes/class.cooked-recipe-meta.php:575 +#: includes/class.cooked-recipe-meta.php:667 +#: includes/class.cooked-recipe-meta.php:734 msgid "ex. Apple Sauce, Tofu, etc." msgstr "" -#: includes/class.cooked-recipe-meta.php:547 -#: includes/class.cooked-recipe-meta.php:702 -#: includes/class.cooked-recipe-meta.php:775 -#: includes/class.cooked-recipe-meta.php:869 +#: includes/class.cooked-recipe-meta.php:586 +#: includes/class.cooked-recipe-meta.php:742 +#: includes/class.cooked-recipe-meta.php:815 +#: includes/class.cooked-recipe-meta.php:912 msgid "Section Heading" msgstr "" -#: includes/class.cooked-recipe-meta.php:551 -#: includes/class.cooked-recipe-meta.php:706 -#: includes/class.cooked-recipe-meta.php:779 -#: includes/class.cooked-recipe-meta.php:873 +#: includes/class.cooked-recipe-meta.php:590 +#: includes/class.cooked-recipe-meta.php:746 +#: includes/class.cooked-recipe-meta.php:819 +#: includes/class.cooked-recipe-meta.php:916 msgid "Heading Element:" msgstr "" -#: includes/class.cooked-recipe-meta.php:642 +#: includes/class.cooked-recipe-meta.php:681 msgid "Add Ingredient" msgstr "" -#: includes/class.cooked-recipe-meta.php:643 -#: includes/class.cooked-recipe-meta.php:847 +#: includes/class.cooked-recipe-meta.php:682 +#: includes/class.cooked-recipe-meta.php:888 msgid "Add Section Heading" msgstr "" -#: includes/class.cooked-recipe-meta.php:846 +#: includes/class.cooked-recipe-meta.php:684 +#: includes/class.cooked-recipe-meta.php:890 +msgid "Bulk Add" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:887 msgid "Add Direction" msgstr "" -#: includes/class.cooked-recipe-meta.php:904 +#: includes/class.cooked-recipe-meta.php:947 msgid "Nutrition Information" msgstr "" -#: includes/class.cooked-recipe-meta.php:942 -#: includes/class.cooked-shortcodes.php:1062 +#: includes/class.cooked-recipe-meta.php:985 +#: includes/class.cooked-shortcodes.php:1064 msgid "Nutrition Facts" msgstr "" -#: includes/class.cooked-recipe-meta.php:960 -#: includes/class.cooked-shortcodes.php:1030 +#: includes/class.cooked-recipe-meta.php:1003 +#: includes/class.cooked-shortcodes.php:1032 msgid "Amount per serving" msgstr "" -#: includes/class.cooked-recipe-meta.php:970 -#: includes/class.cooked-shortcodes.php:1040 +#: includes/class.cooked-recipe-meta.php:1013 +#: includes/class.cooked-shortcodes.php:1042 msgid "% Daily Value *" msgstr "" -#: includes/class.cooked-recipe-meta.php:989 -#: includes/class.cooked-shortcodes.php:972 +#: includes/class.cooked-recipe-meta.php:1032 +#: includes/class.cooked-shortcodes.php:974 msgid "Includes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1021 -#: includes/class.cooked-shortcodes.php:1066 +#: includes/class.cooked-recipe-meta.php:1064 +#: includes/class.cooked-shortcodes.php:1068 msgid "The % Daily Value (DV) tells you how much a nutrient in a serving of food contributes to a daily diet. 2,000 calories a day is used for general nutrition advice." msgstr "" -#: includes/class.cooked-recipe-meta.php:1037 +#: includes/class.cooked-recipe-meta.php:1080 msgid "Recipe Gallery Type" msgstr "" -#: includes/class.cooked-recipe-meta.php:1050 +#: includes/class.cooked-recipe-meta.php:1093 msgid "Choose one..." msgstr "" #. translators: a title for the video section of the recipe editor, where users can paste a YouToub or Vimeo URL into the field below. -#: includes/class.cooked-recipe-meta.php:1064 +#: includes/class.cooked-recipe-meta.php:1107 #, php-format msgid "%1$s or %2$s Video" msgstr "" #. translators: a message describing how to display a video from YouTube or Vimeo. -#: includes/class.cooked-recipe-meta.php:1068 +#: includes/class.cooked-recipe-meta.php:1111 #, php-format msgid "If you would like to display a video as the first item in your gallery, you can paste a valid %1$s or %2$s URL below." msgstr "" -#: includes/class.cooked-recipe-meta.php:1073 +#: includes/class.cooked-recipe-meta.php:1116 msgid "Gallery Items" msgstr "" -#: includes/class.cooked-recipe-meta.php:1104 +#: includes/class.cooked-recipe-meta.php:1147 msgid "Recipe Information" msgstr "" -#: includes/class.cooked-recipe-meta.php:1105 +#: includes/class.cooked-recipe-meta.php:1148 msgid "This will display the recipe author, cooking times, etc." msgstr "" #. translators: "include and exclude" section title #. translators: "left and right" section title -#: includes/class.cooked-recipe-meta.php:1114 -#: includes/class.cooked-recipe-meta.php:1124 +#: includes/class.cooked-recipe-meta.php:1157 +#: includes/class.cooked-recipe-meta.php:1167 #, php-format msgid "\"%1$s\" and \"%2$s\"" msgstr "" -#: includes/class.cooked-recipe-meta.php:1116 +#: includes/class.cooked-recipe-meta.php:1159 msgid "This will allow you to include or exclude content from the shortcode output." msgstr "" -#: includes/class.cooked-recipe-meta.php:1125 +#: includes/class.cooked-recipe-meta.php:1168 msgid "Used like \"include\", but will position the content to the left or right." msgstr "" -#: includes/class.cooked-recipe-meta.php:1135 -#: includes/class.cooked-recipe-meta.php:1181 -#: includes/class.cooked-recipe-meta.php:1212 -#: includes/class.cooked-recipe-meta.php:1237 -#: includes/class.cooked-recipe-meta.php:1261 -#: includes/class.cooked-recipe-meta.php:1321 -#: includes/class.cooked-recipe-meta.php:1366 -#: includes/class.cooked-recipe-meta.php:1396 -#: includes/class.cooked-recipe-meta.php:1441 -#: includes/class.cooked-recipe-meta.php:1564 +#: includes/class.cooked-recipe-meta.php:1178 +#: includes/class.cooked-recipe-meta.php:1224 +#: includes/class.cooked-recipe-meta.php:1255 +#: includes/class.cooked-recipe-meta.php:1280 +#: includes/class.cooked-recipe-meta.php:1304 +#: includes/class.cooked-recipe-meta.php:1364 +#: includes/class.cooked-recipe-meta.php:1409 +#: includes/class.cooked-recipe-meta.php:1439 +#: includes/class.cooked-recipe-meta.php:1484 +#: includes/class.cooked-recipe-meta.php:1607 msgid "Available Variables" msgstr "" -#: includes/class.cooked-recipe-meta.php:1139 +#: includes/class.cooked-recipe-meta.php:1182 #: includes/class.cooked-settings.php:228 -#: includes/class.cooked-shortcodes.php:446 -#: includes/class.cooked-shortcodes.php:624 +#: includes/class.cooked-shortcodes.php:448 +#: includes/class.cooked-shortcodes.php:626 msgid "Author" msgstr "" -#: includes/class.cooked-recipe-meta.php:1143 -#: includes/class.cooked-shortcodes.php:447 -#: includes/class.cooked-shortcodes.php:635 +#: includes/class.cooked-recipe-meta.php:1186 +#: includes/class.cooked-shortcodes.php:449 +#: includes/class.cooked-shortcodes.php:637 msgid "Difficulty" msgstr "" -#: includes/class.cooked-recipe-meta.php:1144 +#: includes/class.cooked-recipe-meta.php:1187 msgid "Servings Switcher" msgstr "" -#: includes/class.cooked-recipe-meta.php:1145 +#: includes/class.cooked-recipe-meta.php:1188 #: includes/class.cooked-settings.php:229 -#: includes/class.cooked-shortcodes.php:718 -#: includes/class.cooked-shortcodes.php:721 +#: includes/class.cooked-shortcodes.php:720 +#: includes/class.cooked-shortcodes.php:723 #: includes/class.cooked-taxonomies.php:39 msgid "Category" msgstr "" -#: includes/class.cooked-recipe-meta.php:1146 +#: includes/class.cooked-recipe-meta.php:1189 msgid "Print Mode" msgstr "" -#: includes/class.cooked-recipe-meta.php:1147 +#: includes/class.cooked-recipe-meta.php:1190 msgid "Full-Screen Mode" msgstr "" -#: includes/class.cooked-recipe-meta.php:1167 +#: includes/class.cooked-recipe-meta.php:1210 msgid "This will display the list of ingredients, added via the \"Ingredients\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1173 +#: includes/class.cooked-recipe-meta.php:1216 msgid "This will allow you to hide or show the checkboxes:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1183 +#: includes/class.cooked-recipe-meta.php:1226 msgid "Show checkboxes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1184 +#: includes/class.cooked-recipe-meta.php:1227 msgid "Hide checkboxes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1198 +#: includes/class.cooked-recipe-meta.php:1241 msgid "This will display the list of directions, added via the \"Directions\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1204 +#: includes/class.cooked-recipe-meta.php:1247 msgid "This will allow you to hide or show the numbers:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1214 +#: includes/class.cooked-recipe-meta.php:1257 msgid "Show numbers" msgstr "" -#: includes/class.cooked-recipe-meta.php:1215 +#: includes/class.cooked-recipe-meta.php:1258 msgid "Hide numbers" msgstr "" -#: includes/class.cooked-recipe-meta.php:1228 +#: includes/class.cooked-recipe-meta.php:1271 msgid "Featured Image" msgstr "" -#: includes/class.cooked-recipe-meta.php:1229 +#: includes/class.cooked-recipe-meta.php:1272 msgid "This will display the featured image, if one is set." msgstr "" -#: includes/class.cooked-recipe-meta.php:1239 -#: includes/class.cooked-recipe-meta.php:1263 -#: includes/class.cooked-recipe-meta.php:1368 +#: includes/class.cooked-recipe-meta.php:1282 +#: includes/class.cooked-recipe-meta.php:1306 +#: includes/class.cooked-recipe-meta.php:1411 msgid "None" msgstr "" -#: includes/class.cooked-recipe-meta.php:1252 +#: includes/class.cooked-recipe-meta.php:1295 msgid "Nutrition Label" msgstr "" -#: includes/class.cooked-recipe-meta.php:1253 +#: includes/class.cooked-recipe-meta.php:1296 msgid "This will display the Nutrition Facts label, if data is present." msgstr "" -#: includes/class.cooked-recipe-meta.php:1279 +#: includes/class.cooked-recipe-meta.php:1322 msgid "This will display the gallery, if one is set or created from the \"Gallery\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1287 +#: includes/class.cooked-recipe-meta.php:1330 msgid "Set the width of the gallery." msgstr "" -#: includes/class.cooked-recipe-meta.php:1294 +#: includes/class.cooked-recipe-meta.php:1337 msgid "Set the image size ratio." msgstr "" -#: includes/class.cooked-recipe-meta.php:1304 +#: includes/class.cooked-recipe-meta.php:1347 msgid "Set the navigation style." msgstr "" -#: includes/class.cooked-recipe-meta.php:1311 +#: includes/class.cooked-recipe-meta.php:1354 msgid "Enable or disable \"Full-Screen\" mode." msgstr "" #. translators: related to the width of slideshows: "80% or 300px" section title -#: includes/class.cooked-recipe-meta.php:1326 +#: includes/class.cooked-recipe-meta.php:1369 #, php-format msgid "ex: \"%1$s\" or \"%2$s\"" msgstr "" #. translators: related to the image ratio for slideshows: "ex: 800/600" section title -#: includes/class.cooked-recipe-meta.php:1331 +#: includes/class.cooked-recipe-meta.php:1374 #, php-format msgid "ex: \"%s\"" msgstr "" #. translators: related to the navigation style for slideshows: "dots, thumbs or false" section title -#: includes/class.cooked-recipe-meta.php:1336 +#: includes/class.cooked-recipe-meta.php:1379 #, php-format msgid "\"%1$s\", \"%2$s\", or \"%3$s\"" msgstr "" #. translators: related to allowing full screen for slideshows: "true or false" section title -#: includes/class.cooked-recipe-meta.php:1341 +#: includes/class.cooked-recipe-meta.php:1384 #, php-format msgid "\"%1$s\" or \"%2$s\"" msgstr "" -#: includes/class.cooked-recipe-meta.php:1358 +#: includes/class.cooked-recipe-meta.php:1401 msgid "This will display the excerpt, if one is available from the \"Layout & Content\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1382 +#: includes/class.cooked-recipe-meta.php:1425 msgid "This will display the notes, if one is available from the \"Layout & Content\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1388 +#: includes/class.cooked-recipe-meta.php:1431 msgid "This will allow you to hide or show the header for the notes section:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1398 +#: includes/class.cooked-recipe-meta.php:1441 msgid "Show header" msgstr "" -#: includes/class.cooked-recipe-meta.php:1399 +#: includes/class.cooked-recipe-meta.php:1442 msgid "Hide header" msgstr "" -#: includes/class.cooked-recipe-meta.php:1413 +#: includes/class.cooked-recipe-meta.php:1456 msgid "This will display a special link to start a cooking timer." msgstr "" #. translators: "seconds, minutes and hours" section title -#: includes/class.cooked-recipe-meta.php:1422 +#: includes/class.cooked-recipe-meta.php:1465 #, php-format msgid "\"%1$s\", \"%2$s\" and \"%3$s\"" msgstr "" -#: includes/class.cooked-recipe-meta.php:1424 +#: includes/class.cooked-recipe-meta.php:1467 msgid "Use just one or a combination of all three to set the timer length" msgstr "" -#: includes/class.cooked-recipe-meta.php:1431 +#: includes/class.cooked-recipe-meta.php:1474 msgid "Add a short description for this timer, if applicable." msgstr "" -#: includes/class.cooked-recipe-meta.php:1443 +#: includes/class.cooked-recipe-meta.php:1486 msgid "Time in seconds" msgstr "" -#: includes/class.cooked-recipe-meta.php:1444 +#: includes/class.cooked-recipe-meta.php:1487 msgid "Time in minutes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1445 +#: includes/class.cooked-recipe-meta.php:1488 msgid "Time in hours" msgstr "" -#: includes/class.cooked-recipe-meta.php:1446 +#: includes/class.cooked-recipe-meta.php:1489 msgid "Timer Description" msgstr "" -#: includes/class.cooked-recipe-meta.php:1459 +#: includes/class.cooked-recipe-meta.php:1502 msgid "Next & Previous Recipe Navigation" msgstr "" -#: includes/class.cooked-recipe-meta.php:1460 +#: includes/class.cooked-recipe-meta.php:1503 msgid "This will display navigation links to the next and previous recipes." msgstr "" -#: includes/class.cooked-recipe-meta.php:1464 +#: includes/class.cooked-recipe-meta.php:1507 msgid "This shortcode automatically displays the previous and next recipe links based on the current recipe page. No parameters are required." msgstr "" -#: includes/class.cooked-recipe-meta.php:1469 +#: includes/class.cooked-recipe-meta.php:1512 msgid "Usage" msgstr "" -#: includes/class.cooked-recipe-meta.php:1471 +#: includes/class.cooked-recipe-meta.php:1514 msgid "Simply add the shortcode to your recipe template or content area. The navigation will automatically show the previous and next recipes based on recipe ID order." msgstr "" -#: includes/class.cooked-recipe-meta.php:1484 +#: includes/class.cooked-recipe-meta.php:1527 #: includes/class.cooked-related-recipes.php:34 msgid "Related Recipes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1485 +#: includes/class.cooked-recipe-meta.php:1528 msgid "Displays a grid of related recipes based on shared terms in any of the recipe taxonomies (categories, cuisines, cooking methods, tags, diets), shown in random order. No cache or pre-calculation." msgstr "" -#: includes/class.cooked-recipe-meta.php:1493 +#: includes/class.cooked-recipe-meta.php:1536 msgid "Specify a recipe ID. If not provided, uses the current recipe." msgstr "" -#: includes/class.cooked-recipe-meta.php:1500 +#: includes/class.cooked-recipe-meta.php:1543 msgid "Set the heading text for the related recipes section." msgstr "" -#: includes/class.cooked-recipe-meta.php:1510 +#: includes/class.cooked-recipe-meta.php:1553 msgid "Number of recipes to display (default: 4)." msgstr "" -#: includes/class.cooked-recipe-meta.php:1517 +#: includes/class.cooked-recipe-meta.php:1560 msgid "Number of columns in the grid (default: 2)." msgstr "" -#: includes/class.cooked-recipe-meta.php:1527 +#: includes/class.cooked-recipe-meta.php:1570 msgid "Hide recipe card images." msgstr "" -#: includes/class.cooked-recipe-meta.php:1534 +#: includes/class.cooked-recipe-meta.php:1577 msgid "Hide recipe card excerpts." msgstr "" -#: includes/class.cooked-recipe-meta.php:1544 +#: includes/class.cooked-recipe-meta.php:1587 msgid "Hide recipe card authors." msgstr "" -#: includes/class.cooked-recipe-meta.php:1551 +#: includes/class.cooked-recipe-meta.php:1594 msgid "Toggle which taxonomies are used: match_categories, match_cuisines, match_cooking_methods, match_tags, match_diets (default: true)." msgstr "" -#: includes/class.cooked-recipe-meta.php:1558 +#: includes/class.cooked-recipe-meta.php:1601 msgid "Matching options:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1559 +#: includes/class.cooked-recipe-meta.php:1602 msgid "Set to false to exclude a taxonomy from related recipes, e.g. match_cuisines=\"false\" to ignore cuisines." msgstr "" -#: includes/class.cooked-recipe-meta.php:1566 +#: includes/class.cooked-recipe-meta.php:1609 msgid "Recipe ID" msgstr "" -#: includes/class.cooked-recipe-meta.php:1567 -msgid "Section heading" -msgstr "" - -#: includes/class.cooked-recipe-meta.php:1568 +#: includes/class.cooked-recipe-meta.php:1611 msgid "Number of recipes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1569 +#: includes/class.cooked-recipe-meta.php:1612 msgid "Grid columns" msgstr "" -#: includes/class.cooked-recipe-meta.php:1570 -#: includes/class.cooked-recipe-meta.php:1571 -#: includes/class.cooked-recipe-meta.php:1572 -#: includes/class.cooked-recipe-meta.php:1573 +#: includes/class.cooked-recipe-meta.php:1613 +#: includes/class.cooked-recipe-meta.php:1614 +#: includes/class.cooked-recipe-meta.php:1615 +#: includes/class.cooked-recipe-meta.php:1616 msgid "true/false" msgstr "" -#: includes/class.cooked-recipe-meta.php:1575 +#: includes/class.cooked-recipe-meta.php:1618 msgid "Example" msgstr "" @@ -1818,7 +1891,7 @@ msgid "Triple (%s Servings)" msgstr "" #: includes/class.cooked-recipes.php:865 -#: includes/class.cooked-shortcodes.php:448 +#: includes/class.cooked-shortcodes.php:450 msgid "Yields" msgstr "" @@ -2268,45 +2341,45 @@ msgstr "" msgid "Public recipes are currently disabled. You can change this at the bottom of the %s page." msgstr "" -#: includes/class.cooked-shortcodes.php:298 +#: includes/class.cooked-shortcodes.php:300 msgid "(recipe not found or in draft status)" msgstr "" -#: includes/class.cooked-shortcodes.php:662 +#: includes/class.cooked-shortcodes.php:664 msgid "Fullscreen" msgstr "" -#: includes/class.cooked-shortcodes.php:1114 +#: includes/class.cooked-shortcodes.php:1116 msgid "Invalid recipe ID specified. Please provide a valid numeric recipe ID." msgstr "" -#: includes/class.cooked-shortcodes.php:1124 +#: includes/class.cooked-shortcodes.php:1126 msgid "No recipe found. Please specify a recipe ID using the id attribute, or use this shortcode on a recipe page." msgstr "" -#: includes/class.cooked-shortcodes.php:1131 +#: includes/class.cooked-shortcodes.php:1133 msgid "Recipe not found." msgstr "" -#: includes/class.cooked-shortcodes.php:1135 +#: includes/class.cooked-shortcodes.php:1137 #, php-format msgid "The specified ID (%d) is not a recipe." msgstr "" -#: includes/class.cooked-shortcodes.php:1137 +#: includes/class.cooked-shortcodes.php:1139 #, php-format msgid "No post found with ID %d." msgstr "" -#: includes/class.cooked-shortcodes.php:1146 +#: includes/class.cooked-shortcodes.php:1148 msgid "No related recipes found." msgstr "" -#: includes/class.cooked-shortcodes.php:1149 +#: includes/class.cooked-shortcodes.php:1151 msgid "This may be because there are no other recipes in the current language with matching attributes." msgstr "" -#: includes/class.cooked-shortcodes.php:1151 +#: includes/class.cooked-shortcodes.php:1153 msgid "Try adjusting the matching criteria or ensure you have other published recipes with shared categories, tags, or ingredients." msgstr "" diff --git a/package-lock.json b/package-lock.json index f3e3eda..07f1a42 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "cooked", - "version": "1.13.0", + "version": "1.14.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cooked", - "version": "1.13.0", + "version": "1.14.0", "license": "ISC", "devDependencies": { "@playwright/test": "^1.48.2", @@ -101,12 +101,11 @@ } }, "node_modules/@opentelemetry/api": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", - "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.1.tgz", + "integrity": "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==", "dev": true, "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=8.0.0" } @@ -130,7 +129,6 @@ "integrity": "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==", "dev": true, "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=14" }, @@ -144,7 +142,6 @@ "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, @@ -171,7 +168,6 @@ "integrity": "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", @@ -602,7 +598,6 @@ "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" @@ -630,7 +625,6 @@ "integrity": "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1", @@ -654,12 +648,11 @@ } }, "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.39.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.39.0.tgz", - "integrity": "sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==", + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.40.0.tgz", + "integrity": "sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==", "dev": true, "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=14" } @@ -991,9 +984,9 @@ } }, "node_modules/@parcel/watcher/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", "optional": true, @@ -1016,14 +1009,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.2.tgz", - "integrity": "sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==", + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", + "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { - "playwright": "1.58.2" + "playwright": "1.59.1" }, "bin": { "playwright": "cli.js" @@ -1230,12 +1222,11 @@ } }, "node_modules/@types/node": { - "version": "20.19.33", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.33.tgz", - "integrity": "sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==", + "version": "20.19.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.39.tgz", + "integrity": "sha512-orrrD74MBUyK8jOAD/r0+lfa1I2MO6I+vAkmAWzMYbCcgrN4lCrmK52gRFQq/JRxfYPfonkr4b0jcY7Olqdqbw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~6.21.0" } @@ -1291,9 +1282,9 @@ } }, "node_modules/@wordpress/e2e-test-utils-playwright": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.40.0.tgz", - "integrity": "sha512-7EMx/5R0l9mlR4s01I06x8bw7qq30VlU98T/tvYJa+ycFQK3oetkoPyiNfki2Y2SILQGjI3Mu4MSV1NPCa/mEw==", + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.44.0.tgz", + "integrity": "sha512-iUKHGH8TjW1s0cpkcHF6y/APOmy4YnwBfzdBNCITK4+4fuSZnTV7vZyzBU3adthGcBSMGQ9w8MTE2AzGLtlG3w==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -1318,7 +1309,6 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1509,9 +1499,9 @@ } }, "node_modules/axe-core": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.1.tgz", - "integrity": "sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==", + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.3.tgz", + "integrity": "sha512-zBQouZixDTbo3jMGqHKyePxYxr1e5W8UdTmBQ7sNtaA9M2bE32daxxPLS/jojhKOHxQ7LWwPjfiwf/fhaJWzlg==", "dev": true, "license": "MPL-2.0", "engines": { @@ -1549,14 +1539,11 @@ } }, "node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } + "license": "MIT" }, "node_modules/bare-events": { "version": "2.8.2", @@ -1564,7 +1551,6 @@ "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", "dev": true, "license": "Apache-2.0", - "peer": true, "peerDependencies": { "bare-abort-controller": "*" }, @@ -1575,12 +1561,11 @@ } }, "node_modules/bare-fs": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.4.tgz", - "integrity": "sha512-POK4oplfA7P7gqvetNmCs4CNtm9fNsx+IAh7jH7GgU0OJdge2rso0R20TNWVq6VoWcCvsTdlNDaleLHGaKx8CA==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.1.tgz", + "integrity": "sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw==", "dev": true, "license": "Apache-2.0", - "optional": true, "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", @@ -1601,12 +1586,11 @@ } }, "node_modules/bare-os": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz", - "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", + "version": "3.8.7", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.8.7.tgz", + "integrity": "sha512-G4Gr1UsGeEy2qtDTZwL7JFLo2wapUarz7iTMcYcMFdS89AIQuBoyjgXZz0Utv7uHs3xA9LckhVbeBi8lEQrC+w==", "dev": true, "license": "Apache-2.0", - "optional": true, "engines": { "bare": ">=1.14.0" } @@ -1617,27 +1601,29 @@ "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", "dev": true, "license": "Apache-2.0", - "optional": true, "dependencies": { "bare-os": "^3.0.1" } }, "node_modules/bare-stream": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.8.0.tgz", - "integrity": "sha512-reUN0M2sHRqCdG4lUK3Fw8w98eeUIZHL5c3H7Mbhk2yVBL+oofgaIp0ieLfD5QXwPCypBpmEEKU2WZKzbAk8GA==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.0.tgz", + "integrity": "sha512-3zAJRZMDFGjdn+RVnNpF9kuELw+0Fl3lpndM4NcEOhb9zwtSo/deETfuIwMSE5BXanA0FrN1qVjffGwAg2Y7EA==", "dev": true, "license": "Apache-2.0", - "optional": true, "dependencies": { - "streamx": "^2.21.0", + "streamx": "^2.25.0", "teex": "^1.0.1" }, "peerDependencies": { + "bare-abort-controller": "*", "bare-buffer": "*", "bare-events": "*" }, "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + }, "bare-buffer": { "optional": true }, @@ -1647,12 +1633,11 @@ } }, "node_modules/bare-url": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz", - "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.1.tgz", + "integrity": "sha512-fZapLWNB25gS+etK27NV9KgBNXgo2yeYHuj+OyPblQd6GYAE3JVy6aKxszMV5jhGGFwraXQKA5fldvf3lMyEqw==", "dev": true, "license": "Apache-2.0", - "optional": true, "dependencies": { "bare-path": "^3.0.0" } @@ -1679,9 +1664,9 @@ "license": "MIT" }, "node_modules/basic-ftp": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.2.0.tgz", - "integrity": "sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.0.tgz", + "integrity": "sha512-5K9eNNn7ywHPsYnFwjKgYH8Hf8B5emh7JKcPaVjjrMJFQQwGpwowEnZNEtHs7DfR7hCZsmaK3VA4HUK0YarT+w==", "dev": true, "license": "MIT", "engines": { @@ -1714,16 +1699,13 @@ } }, "node_modules/brace-expansion": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", - "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { @@ -2107,8 +2089,7 @@ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1507524.tgz", "integrity": "sha512-OjaNE7qpk6GRTXtqQjAE5bGx6+c4F1zZH0YXtpZQLM92HNXx4zMAaqlKhP4T52DosG6hDW8gPMNhGOF8xbwk/w==", "dev": true, - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/dot-case": { "version": "3.0.4", @@ -2182,6 +2163,16 @@ "node": ">=8.6" } }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -2897,9 +2888,9 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", "dev": true, "license": "MIT", "dependencies": { @@ -3013,9 +3004,9 @@ "license": "MIT" }, "node_modules/immutable": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", - "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", + "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", "dev": true, "license": "MIT" }, @@ -3470,9 +3461,9 @@ } }, "node_modules/lodash-es": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz", - "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", "dev": true, "license": "MIT" }, @@ -3579,13 +3570,13 @@ } }, "node_modules/minimatch": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.6.tgz", - "integrity": "sha512-kQAVowdR33euIqeA0+VZTDqU+qo1IeVY+hrKYtZMio3Pg0P0vuh/kwRylLUddJhB6pf3q/botcOvRtx4IN1wqQ==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^5.0.2" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -3626,9 +3617,9 @@ } }, "node_modules/netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.1.1.tgz", + "integrity": "sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==", "dev": true, "license": "MIT", "engines": { @@ -3880,9 +3871,9 @@ } }, "node_modules/pg-protocol": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.11.0.tgz", - "integrity": "sha512-pfsxk2M9M3BuGgDOfuy37VNRRX3jmKgMjcvAcWqNDpZSf4cUmv8HSOl5ViRQFsfARFn0KuUQTgLxVMbNq5NW3g==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.13.0.tgz", + "integrity": "sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==", "dev": true, "license": "MIT" }, @@ -3911,9 +3902,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -3924,13 +3915,13 @@ } }, "node_modules/playwright": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz", - "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==", + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", + "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.58.2" + "playwright-core": "1.59.1" }, "bin": { "playwright": "cli.js" @@ -3943,9 +3934,9 @@ } }, "node_modules/playwright-core": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", - "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", + "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -4087,9 +4078,9 @@ "license": "MIT" }, "node_modules/pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", "dev": true, "license": "MIT", "dependencies": { @@ -4098,17 +4089,17 @@ } }, "node_modules/puppeteer-core": { - "version": "24.37.5", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.37.5.tgz", - "integrity": "sha512-ybL7iE78YPN4T6J+sPLO7r0lSByp/0NN6PvfBEql219cOnttoTFzCWKiBOjstXSqi/OKpwae623DWAsL7cn2MQ==", + "version": "24.41.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.41.0.tgz", + "integrity": "sha512-rLIUri7E/NQ3APSEYCCozaSJx0u8Tu9wxO6BJwnvXmIgILSK3L0TombaVh3izp1njAGrO6H2ru0hcIrLF+gWLw==", "dev": true, "license": "Apache-2.0", "dependencies": { "@puppeteer/browsers": "2.13.0", "chromium-bidi": "14.0.0", "debug": "^4.4.3", - "devtools-protocol": "0.0.1566079", - "typed-query-selector": "^2.12.0", + "devtools-protocol": "0.0.1595872", + "typed-query-selector": "^2.12.1", "webdriver-bidi-protocol": "0.4.1", "ws": "^8.19.0" }, @@ -4117,16 +4108,16 @@ } }, "node_modules/puppeteer-core/node_modules/devtools-protocol": { - "version": "0.0.1566079", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1566079.tgz", - "integrity": "sha512-MJfAEA1UfVhSs7fbSQOG4czavUp1ajfg6prlAN0+cmfa2zNjaIbvq8VneP7do1WAQQIvgNJWSMeP6UyI90gIlQ==", + "version": "0.0.1595872", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1595872.tgz", + "integrity": "sha512-kRfgp8vWVjBu/fbYCiVFiOqsCk3CrMKEo3WbgGT2NXK2dG7vawWPBljixajVgGK9II8rDO9G0oD0zLt3I1daRg==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/puppeteer-core/node_modules/ws": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", - "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", "dev": true, "license": "MIT", "engines": { @@ -4239,12 +4230,13 @@ } }, "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "dev": true, "license": "MIT", "dependencies": { + "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" @@ -4336,14 +4328,14 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.97.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.3.tgz", - "integrity": "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==", + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.99.0.tgz", + "integrity": "sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q==", "dev": true, "license": "MIT", "dependencies": { "chokidar": "^4.0.0", - "immutable": "^5.0.2", + "immutable": "^5.1.5", "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { @@ -4546,9 +4538,9 @@ "license": "MIT" }, "node_modules/streamx": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", - "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.25.0.tgz", + "integrity": "sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==", "dev": true, "license": "MIT", "dependencies": { @@ -4660,9 +4652,9 @@ } }, "node_modules/tar-fs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz", - "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.2.tgz", + "integrity": "sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==", "dev": true, "license": "MIT", "dependencies": { @@ -4675,13 +4667,14 @@ } }, "node_modules/tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.8.tgz", + "integrity": "sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==", "dev": true, "license": "MIT", "dependencies": { "b4a": "^1.6.4", + "bare-fs": "^4.5.5", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } @@ -4724,20 +4717,20 @@ } }, "node_modules/tldts-core": { - "version": "7.0.23", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.23.tgz", - "integrity": "sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==", + "version": "7.0.28", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.28.tgz", + "integrity": "sha512-7W5Efjhsc3chVdFhqtaU0KtK32J37Zcr9RKtID54nG+tIpcY79CQK/veYPODxtD/LJ4Lue66jvrQzIX2Z2/pUQ==", "dev": true, "license": "MIT" }, "node_modules/tldts-icann": { - "version": "7.0.23", - "resolved": "https://registry.npmjs.org/tldts-icann/-/tldts-icann-7.0.23.tgz", - "integrity": "sha512-LMc6V1KOHFjKDU8wyDsIEJdV8o2bpc2OaYw2NxncJB2oZxJMPpiNVAbiu1HnqsUy81fkK1QWwFztVqY81hUFEg==", + "version": "7.0.28", + "resolved": "https://registry.npmjs.org/tldts-icann/-/tldts-icann-7.0.28.tgz", + "integrity": "sha512-brkN3yIgYTzBpSxB71XYBwUMDgutmKmA+6TWzgGD/EPcvCc6LHMTRaYj9ik1u3BxhSW53qIK/7cgjA2rF7BgbA==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^7.0.23" + "tldts-core": "^7.0.28" } }, "node_modules/to-regex-range": { @@ -4787,9 +4780,9 @@ } }, "node_modules/typed-query-selector": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", - "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.1.tgz", + "integrity": "sha512-uzR+FzI8qrUEIu96oaeBJmd9E7CFEiQ3goA5qCVgc4s5llSubcfGHq9yUstZx/k4s9dXHVKsE35YWoFyvEqEHA==", "dev": true, "license": "MIT" }, diff --git a/package.json b/package.json index c8bd75c..589fe64 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cooked", - "version": "1.13.0", + "version": "1.14.0", "description": "Cooked is the absolute best way to create & display recipes with WordPress. SEO optimized (rich snippets), galleries, cooking timers, printable recipes and much more.", "main": "index.js", "scripts": { diff --git a/readme.txt b/readme.txt index 8ddc143..4f35878 100644 --- a/readme.txt +++ b/readme.txt @@ -1,9 +1,9 @@ === Cooked - Recipe Management === Contributors: xjsv, boxystudio Tags: recipe, recipes, food, cooking, nutrition -Requires at least: 4.7 -Tested up to: 6.9.1 -Stable tag: 1.13.0 +Requires at least: 5.0.0 +Tested up to: 7.0 +Stable tag: 1.14.0 Requires PHP: 7.4 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -80,12 +80,18 @@ Please report security bugs found in the source code of the Cooked plugin throug == Upgrade Notice == -Version 1.13.0 includes CSV import functionality, changes to the [cooked-related-recipes] shortcode, and other minor improvements and bug fixes. +Version 1.14.0 adds bulk ingredient and direction entry, validates shortcode style attributes, extends migration and imports with ingredient substitution fields, and speeds up “Apply to All” template updates on large sites. == Changelog == += 1.14.0 = +* **NEW:** Added a new "Add Bulk Ingredients" and "Add Bulk Directions" buttons to the recipe builder. +* **FIX:** Validated style attribute for the [cooked-recipe-card] and [cooked-categories] shortcodes. +* **TWEAK:** Added Ingredient Substitution fields to the migration and imports features. +* **TWEAK:** Updated the "Apply to All" template update feature to fix potential performance issues with large recipe collections. + = 1.13.0 = -* **NEW:** Added CSV import functionality for bulk importing recipes from CSV files. Supports all recipe fields including ingredients with substitutions, directions, nutrition data, categories, and tags. +* **NEW:** Added CSV import functionality for bulk importing recipes from CSV files. Supports all recipe fields including ingredients with substitutions, directions, nutrition data, categories, and tags (thanks to @mgiannopoulos24). * **TWEAK:** Simplified the way the [cooked-related-recipes] shortcode works. * **FIX:** Fixed a bug with the recipe directions and ingredients not being sortable in mobile devices. * **FIX:** Fixed a bug when toggling full screen view in recipe fields that use the WP Editor. diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 90e264a..98ed554 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -1,8 +1,8 @@ array( 'name' => 'xjsv/cooked', - 'pretty_version' => '1.13.0', - 'version' => '1.13.0.0', + 'pretty_version' => '1.14.0', + 'version' => '1.14.0.0', 'reference' => null, 'type' => 'wordpress-plugin', 'install_path' => __DIR__ . '/../../', @@ -20,8 +20,8 @@ 'dev_requirement' => false, ), 'xjsv/cooked' => array( - 'pretty_version' => '1.13.0', - 'version' => '1.13.0.0', + 'pretty_version' => '1.14.0', + 'version' => '1.14.0.0', 'reference' => null, 'type' => 'wordpress-plugin', 'install_path' => __DIR__ . '/../../',