Woods Coffee | Roastery & Bakery
Posted by:
Category:
Comments:
Post Date:
Woods Coffee | Roastery & Bakery
[]
Woods Coffee | Roastery & Bakery [*] `form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(',');function s(t,e,n=!1){try{const o=window.sessionStorage;for(const[n,c]of Object.entries(JSON.parse(o.getItem(e))))t.elements[n]&&(t.elements[n].value=c);n&&o.removeItem(e)}catch{}}const a='form_key',i=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response','password'],u=()=>{try{return window.sessionStorage}catch{return}},m=t=>t.elements[a],f='form_type',d='cptcha';function p(t){t.dataset[d]=!0}const l=window,h=l.document,_='Shopify',y='ce_forms',E='captcha';let v=!1;((t,e)=>{const n=(g='f06e6c50-85a8-45c8-87d0-21a2b65856fe','https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.4.0.iife.js',T={infoText:'Protected by hCaptcha',privacyText:'Privacy',termsText:'Terms'},(t,e,n)=>{const o=l[_][y],c=o.bindForm;if(c)return c(t,g,e,T).then(n);o.q.push([[t,g,e,T],n]),v||(h.body.append(Object.assign(h.createElement('script'),{id:'captcha-provider',async:!0,src:'https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.4.0.iife.js'})),v=!0)});var g,T;l[_]=l[_]||{},l[_][y]=l[_][y]||{},l[_][y].q=[],l[_][E]=l[_][E]||{},l[_][E].protect=function(t,e){n(t,void 0,e),p(t)},Object.freeze(l[_][E]),function(t,e,n,l,h,_){const[y,E,v,g]=function(t,e,n){const s=e?o:[],a=t?c:[],i=[...s,...a],u=[...o],m=r(i),f=r(s),d=n&&r(i.filter((([t,e])=>n.includes(e)))),p=r(u),l=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];return[l(m),l(f),l(d),l(p)]}(l,h,_),T=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},S=t=>y().includes(t);t.addEventListener('submit',(t=>{const e=T(t);if(!e)return;const n=S(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=m(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!u())return;!function(t){const e=u();if(!e)return;const n=m(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){m(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:a})),t.elements[a].value=e}(t,e),function(t,e){const n=u();if(!n)return;const o=[...t.querySelectorAll('input[type="password"]')].map((({name:t})=>t)),c=[...i,...o],r={};for(const[s,a]of new FormData(t).entries())c.includes(s)||(r[s]=a);n.setItem(e,JSON.stringify(r))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const w=(t,e)=>{t&&!t.dataset[d]&&(n(t,e.some((e=>e===t))),p(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=T(t);S(e)&&w(e,E())}));const A=e.get('form_key'),b=e.get(f),I=A&&b;t.addEventListener('DOMContentLoaded',(()=>{const t=E();if(I)for(const e of t)e.elements[f].value===b&&s(e,A);[...new Set([...v(),...y().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>w(e,t)))}))}(h,new URLSearchParams(l.location.search),n,!0,!0,['guest_login'])})()}();]]> {let c=o.firstChild;for(;c;)c.nodeType===Node.TEXT_NODE?c.textContent=c.textContent.replace(e,'hCaptcha'):c.nodeType===Node.ELEMENT_NODE&&t(c),c=c.nextSibling};document.addEventListener('DOMContentLoaded',(()=>{(e=>{const o=document.querySelector('p[data-spam-detection-disclaimer]');if(o){for(const e of['terms','privacy']){const t=o.querySelector(`a[href*='https://policies.google.com/${e}']`);t&&(t.href=`https://hcaptcha.com/${e}`)}t(o)}})()}))}();]]> { const accountPath = '/account' if (showSubscriptionsLink && location.pathname === accountPath) { addSubscriptionsUrl() } const addressesPath = '/account/addresses' if (showAddressChangeNote && location.pathname === addressesPath) { addAddressChangeNote() } const accountLoginPath = '/account/login' if (showCustomerLoginNote && location.pathname === accountLoginPath) { addCustomerLoginNote() } }, { once: true }); const portalPage = (() => { const match = location.search.match(/[?&]pw-page=([^&]+)/); return match ? decodeURIComponent(match[1]) : null; })() if (!portalPage) { return; } document.querySelector('html').classList.add('paywhirl-customer-portal'); function addSubscriptionsUrl() { const addressesLinkElements = document.querySelectorAll('[href="/account/addresses"]'); Array.from(addressesLinkElements).forEach((addressesLinkElement) => { let targetElement = addressesLinkElement; let snippet = new DocumentFragment(); const subscriptionLinkElement = document.createElement('A'); const linkClasses = addressesLinkElement.getAttribute('class'); subscriptionLinkElement.innerHTML = t('general:account-subscriptions-link', 'My Subscriptions'); subscriptionLinkElement.setAttribute('href', '/account?pw-page=%2F'); linkClasses && subscriptionLinkElement.setAttribute('class', linkClasses); if (!targetElement.nextElementSibling && !targetElement.previousElementSibling) { targetElement = addressesLinkElement.parentElement; const container = document.createElement(targetElement.tagName); const containerClasses = targetElement.getAttribute('class'); containerClasses && container.setAttribute('class', containerClasses); snippet = container; } snippet.appendChild(subscriptionLinkElement); targetElement.after(snippet) const targetDisplayStyle = window.getComputedStyle(targetElement).display; if (['inline', 'inline-block'].includes(targetDisplayStyle)) { targetElement.after(document.createElement('BR')) } }); } function addAddressChangeNote() { const addressesPath = '/account/addresses' const forms = document.querySelectorAll('form[action^="' + addressesPath + '"]') Array.from(forms).forEach((form) => { const submitButton = form.querySelector('[type="submit"]') const infoText = document.createElement('P') const subscriptionsLink = t('general:account-subscriptions-link', 'my subscriptions').toLowerCase() const text = t('general:default-address-change-note', "Changing your default address does not affect existing subscriptions. If you'd like to change your delivery address for recurring orders, please visit the _SUBSCRIPTIONS_LINK_ page") infoText.innerHTML = text.replace('_SUBSCRIPTIONS_LINK_', '' + subscriptionsLink + '') if (submitButton) { submitButton.parentElement.insertBefore(infoText, submitButton) return } const defaultAddressInput = form.querySelector('input[name="address[default]"]') if (defaultAddressInput) { defaultAddressInput.parentElement.insertBefore(infoText, defaultAddressInput) } }) } function addCustomerLoginNote() { const accountLoginPath = '/account/login' const forms = document.querySelectorAll('form[action^="' + accountLoginPath + '"]') Array.from(forms).forEach((form) => { const textNote = document.createElement('P') textNote.innerHTML = t('general:customer-login-page-note', 'In order to access your subscriptions, create an account with the same email address') form.append(textNote) }) } function t(key, defaultValue) { const settings = null; const defaultKey = `default:${key}`; const localeKey = `${locale}:${key}`; const translations = settings && settings.translations ? settings.translations : {}; const defaultTranslation = translations[defaultKey] ? translations[defaultKey] : defaultValue; return translations[localeKey] ? translations[localeKey] : defaultTranslation; } const template = ` Skip to content(?:|)$/i;function D(e,n,r){return b(n)?E.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?E.grep(e,function(e){return e===n!==r}):"string"!=typeof n?E.grep(e,function(e){return-1]*|#([w-]+))$/;(E.fn.init=function(e,t,n)).prototype=E.fn,L=E(w);var q=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e",""],col:[2,"",""],tr:[2,"
",""],td:[3,"
.visually-hidden', '.price .price-item--regular', '.product__price .price-item--regular', '.product__price .product__price--reg', '.product__price .product__current-price', '.product-single__price', '[data-pf-type="ProductPrice"]', '[id^=productPrice-]' ].join(','); var $container = $wrapper.find(containerSel); if ($container.length === 0) { console.log('PayWhirl: Price container element could not be found. Contact our support for assistance.'); return; } // Update content of the price node if (this.theme === 'supply') { price = prices.price_formatted.split('.'); $container.html(price[0] + '' + price[1] + ''); } else { $container.html(prices.price_formatted); } }, /* * Translations */ translations: { en: { 'plan-selector-title': 'Purchase options', 'one-time-purchase-label': 'One-time purchase', }, pl: { 'plan-selector-title': 'Opcje zakupu', 'one-time-purchase-label': 'Jednorazowy zakup', } } }; ]]>
Source
About Woods Coffee
For over 20 years, we’ve been (just a little) obsessed with roasting delicious coffee, hand-crafting dreamy baked goods—made fresh in our scratch bakery, and, of course, creating spaces where friends can enjoy conversations in front of our cozy fireplaces.
Visit any of our Pacific Northwest-inspired coffee shops throughout Western Washington, and you'll find a welcoming space that feels like a cabin in the woods. So bring your adventurous spirit, and head over to a Woods Coffee location near you.
In a rush? Many of our locations also feature a drive-thru to get you back on the road faster. For even quicker service, Order Ahead, and we’ll have your order ready for you when you get here. We’ll see you soon!
Start a coffee subscription today!
Give the gift of a coffee subscription, or make sure you never run out of coffee at home.
SUBSCRIBE NOWROASTED FRESH DAILY
Enjoy the freshest coffee shipped directly to your door.
ORDER NOWLoyalty, Gift Cards, & Mobile Pay!
We are in the process of switching to “Square” as our new point of sale provider.
This change comes with many exciting features that will make your experience quick and easy. Learn More
Transfer your existing points ⟶
More than Just Coffee: Woods Coffee Story
Woods Cards
Woods Cards are the perfect gift for friends and family.
ViewGrind for: Whole Bean (None) Cold Brew Cone Filter Drip Flat Bottom Filter Drip Turkish Espresso French Press
Whole Bean (None) - $17.99 USD Cold Brew - $17.99 USD Cone Filter Drip - $17.99 USD Flat Bottom Filter Drip - $17.99 USD Turkish - $17.99 USD Espresso - $17.99 USD French Press - $17.99 USD Purchase optionsQuantity
Your cart is currently empty.
Enable cookies to use the shopping cart
Special instructions for seller
- Choosing a selection results in a full page refresh.
- Press the space key then arrow keys to make a selection.
Source
Share this post
Related
Posts
Coffee
Cadence Clubhouse | Café & Taproom by Andora Restaurant Group
Where Community, Food, and Sport Meet Ever since Cadence Clubhouse was launched late November 2020, it has encouraged the gathering...
Coffee
Home – Craft & Common
We're more than just a coffee shop Top-notch hospitality and a fun atmosphere go together like espresso and 90's hip-hop....
Coffee
Palm Coast Coffee – Beach Brew at Hammock Beach
Your morning - elevated. A contemporary coffee outlet where craft coffee is the star of the show. Beach Brew will feature artisan...
Coffee
5 Great Places to Grab Coffee in Flagler Beach
Whether you require a bold cup to start your day or an icy afternoon refresher, Flagler Beach’s independent coffee shops...