├── LICENSE.md ├── README.md ├── assets ├── shop.js.liquid └── style.css.liquid ├── config └── settings_schema.json ├── layout └── theme.liquid ├── locales └── en.default.json ├── sections ├── contact-form.liquid ├── main-404.liquid ├── main-article.liquid ├── main-blog.liquid ├── main-cart.liquid ├── main-collection.liquid ├── main-list-collections.liquid ├── main-page.liquid ├── main-password.liquid ├── main-product.liquid └── main-search.liquid └── templates ├── 404.json ├── article.json ├── blog.json ├── cart.json ├── collection.json ├── gift_card.liquid ├── index.json ├── list-collections.json ├── page.contact.json ├── page.json ├── password.json ├── product.json └── search.json /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013 - 2016 Keir Whitaker 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Shopify Birthday Suit 2 | 3 | Shopify Birthday Suit is an exceedingly bare bones [Shopify](http://shopify.com/) theme intended for use by theme developers as a basis for their own theme development. It is not intended to be used "as is", rather as a building block. Feel free to modify and use for your own means. 4 | 5 | ## Install 6 | 7 | To install the theme download the ZIP file and upload the same ZIP file to your Shopify store. Full details on uploading a theme can be found in the official [Shopify docs](http://docs.shopify.com/themes/the-basics/build-your-theme/upload-theme). 8 | 9 | ## What's included? 10 | 11 | ### Assets Folder 12 | 13 | The theme layout file references a shop.js and style.css file. Both of these are empty - intentionally. Consequently the theme is rendered with default browser styling and zero JS interactions. 14 | 15 | ### Config Folder 16 | 17 | An empty settings_schema.json file is included. Build on this and add in your own settings. Full info on theme settings can be found in the [Shopify Docs](https://docs.shopify.com/themes/theme-development/storefront-editor/settings-schema). 18 | 19 | ### Layout Folder 20 | 21 | The default layout file theme.layout is included. It includes a reference to the latest release of jQuery and adds some useful classes based on page titles and templates to the body element. 22 | 23 | A basic header element is included that includes Liquid code to output the current cart item count along with a link to the checkout. 24 | 25 | Finally I have included code to output a simple navigation list using the default link-list titled main-menu. 26 | 27 | ### Templates 28 | 29 | The following are included with a reference to a "main" section each, following the Dawn example. For example product.json contains a reference to main-product.liquid section. Each main section contains just some very basic boilerplate code for you to start developing from. 30 | 31 | All of the following templates are intentionally very basic and designed as starting points: 32 | 33 | - 404.json 34 | - article.json 35 | - blog.json 36 | - cart.json 37 | - collection.json 38 | - index.json 39 | - list-collections.json 40 | - page.json 41 | - password.json 42 | - product.json 43 | - search.json 44 | 45 | ### Locales 46 | 47 | There is a basic default English locale included with this theme, but no translation strings. 48 | 49 | ## Acknowledgements 50 | 51 | Shopify Birthday Suit was created by Keir Whitaker with inspiration from the hundreds of talented Shopify theme developers out there sharing their code and ideas. It was updated to Shopify OS2 by Craig Cooper. 52 | 53 | - [keirwhitaker.com](https://keirwhitaker.com) 54 | - [@keirwhitaker](https://keirwhitaker.com/twitter) 55 | - [craigcooper.xyz](https://craigcooper.xyz) 56 | -------------------------------------------------------------------------------- /assets/shop.js.liquid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/keirwhitaker/shopify-birthday-suit/6c668e3cf9384e30dae8eb101f28f214e0f9b582/assets/shop.js.liquid -------------------------------------------------------------------------------- /assets/style.css.liquid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/keirwhitaker/shopify-birthday-suit/6c668e3cf9384e30dae8eb101f28f214e0f9b582/assets/style.css.liquid -------------------------------------------------------------------------------- /config/settings_schema.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "General", 4 | "settings": [ 5 | { 6 | "type": "image_picker", 7 | "id": "favicon", 8 | "label": "Favicon", 9 | "info": "Included because settings can't be empty" 10 | } 11 | ] 12 | } 13 | ] 14 | -------------------------------------------------------------------------------- /layout/theme.liquid: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | {% if template == 'index' %} 11 | {{ shop.name }} | {{ page_title }} 12 | {% elsif template == '404' %} 13 | Page Not Found | {{ shop.name }} 14 | {% else %} 15 | {{ page_title }} | {{ shop.name }} 16 | {% endif %} 17 | {% if page_description %} 18 | 19 | {% endif %} 20 | 21 | 22 | {{ content_for_header }} 23 | {{ 'style.css' | asset_url | stylesheet_tag }} 24 | 25 | 26 |
27 | {{ cart.item_count }} {{ cart.item_count | pluralize: 'item', 'items' }} ({{ cart.total_price | money }}) 28 | Check out 29 |
30 |

{{ shop.name }}

31 | 36 | {{ content_for_layout }} 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /locales/en.default.json: -------------------------------------------------------------------------------- 1 | { 2 | "general": { 3 | 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /sections/contact-form.liquid: -------------------------------------------------------------------------------- 1 | {%- form 'contact' -%} 2 | 3 | {%- endform -%} 4 | -------------------------------------------------------------------------------- /sections/main-404.liquid: -------------------------------------------------------------------------------- 1 |

404 Page Not Found

2 |

The page you requested does not exist

3 | -------------------------------------------------------------------------------- /sections/main-article.liquid: -------------------------------------------------------------------------------- 1 |

{{ article.title }}

2 |

{{ article.published_at | date: '%d %B %Y' }}

3 | {{ article.content }} 4 | -------------------------------------------------------------------------------- /sections/main-blog.liquid: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /sections/main-cart.liquid: -------------------------------------------------------------------------------- 1 | {% if cart.item_count > 0 %} 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | {% for item in cart.items %} 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | {% endfor %} 20 | 21 | 22 | 23 | 24 | 28 | 29 |
PriceQuantityDeleteTotal
{{ item.title }}{{ item.price | money }}Remove{{ item.line_price | money }}
Total: {{ cart.total_price | money }}
25 | 26 | 27 |
30 |
31 | {% else %} 32 |

Your cart is empty!

33 | {% endif %} 34 | -------------------------------------------------------------------------------- /sections/main-collection.liquid: -------------------------------------------------------------------------------- 1 | {% if collection.all_products_count > 0 %} 2 | {% for product in collection.products %} 3 |

{{ product.title }}

4 | {{ product.description }} 5 | {% if product.featured_image %} 6 | {{ product.featured_image | image_url: width: 400 | image_tag }} 7 | {% endif %} 8 | {% endfor %} 9 | {% else %} 10 |

Sorry, there are no products in this collection

11 | {% endif %} 12 | -------------------------------------------------------------------------------- /sections/main-list-collections.liquid: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /sections/main-page.liquid: -------------------------------------------------------------------------------- 1 |

{{ page.title }}

2 | {{ page.content }} 3 | -------------------------------------------------------------------------------- /sections/main-password.liquid: -------------------------------------------------------------------------------- 1 | {% layout none %} 2 | {% if shop.password_message and shop.password_message != '' %} 3 | {{ shop.password_message }} 4 | {% else %} 5 |

Will be opening soon...

6 | {% endif %} 7 | 8 | {% form 'storefront_password' %} 9 | {{ form.errors | default_errors }} 10 | 11 | 12 | 13 | {% endform %} 14 | -------------------------------------------------------------------------------- /sections/main-product.liquid: -------------------------------------------------------------------------------- 1 |

{{ product.title }}

2 | {{ product.description }} 3 |
4 | 13 | 14 |
15 | -------------------------------------------------------------------------------- /sections/main-search.liquid: -------------------------------------------------------------------------------- 1 | 5 | {% if search.performed %} 6 | {% paginate search.results by 10 %} 7 | {% if search.results_count == 0 %} 8 |

Your search for "{{ search.terms }}" did not yield any results

9 | {% else %} 10 |
    11 | {% for item in search.results %} 12 |
  1. {{ item.title | link_to: item.url }}
  2. 13 | {% endfor %} 14 |
15 | {% endif %} 16 | {% if paginate.pages > 1 %} 17 | {{ paginate | default_pagination }} 18 | {% endif %} 19 | {% endpaginate %} 20 | {% endif %} 21 | -------------------------------------------------------------------------------- /templates/404.json: -------------------------------------------------------------------------------- 1 | { 2 | "sections": { 3 | "main": { 4 | "type": "main-404" 5 | } 6 | }, 7 | "order": [ 8 | "main" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /templates/article.json: -------------------------------------------------------------------------------- 1 | { 2 | "sections": { 3 | "main": { 4 | "type": "main-article" 5 | } 6 | }, 7 | "order": [ 8 | "main" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /templates/blog.json: -------------------------------------------------------------------------------- 1 | { 2 | "sections": { 3 | "main": { 4 | "type": "main-blog" 5 | } 6 | }, 7 | "order": [ 8 | "main" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /templates/cart.json: -------------------------------------------------------------------------------- 1 | { 2 | "sections": { 3 | "main": { 4 | "type": "main-cart" 5 | } 6 | }, 7 | "order": [ 8 | "main" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /templates/collection.json: -------------------------------------------------------------------------------- 1 | { 2 | "sections": { 3 | "main": { 4 | "type": "main-collection" 5 | } 6 | }, 7 | "order": [ 8 | "main" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /templates/gift_card.liquid: -------------------------------------------------------------------------------- 1 | {% layout none %} 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | Gift card 14 | 15 | 16 | 17 | {{ content_for_header }} 18 | 19 | 20 | 21 | 22 |
23 |
24 |

25 | {% if settings.currency_code_enabled %} 26 | {{ gift_card.balance | money_with_currency }} 27 | {% else %} 28 | {{ gift_card.balance | money }} 29 | {% endif %} 30 |

31 | {%- if gift_card.enabled == false or gift_card.expired -%} 32 |

Expired

33 | {%- endif -%} 34 |
35 | {% if gift_card.expires_on %} 36 | {%- assign gift_card_expiration_date = gift_card.expires_on | date: '%B %e, %Y' -%} 37 |

38 | Expires on: {{ gift_card_expiration_date }} 39 |

40 | {% endif %} 41 |
42 | 43 |
44 |
45 | 52 |
53 |

Shop name

54 |
55 |

How to use

56 |
57 |

{{ gift_card.code | format_code }}

58 |
59 | 60 | 67 | 68 |
69 | 70 | 71 | -------------------------------------------------------------------------------- /templates/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "sections": { 3 | }, 4 | "order": [ 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /templates/list-collections.json: -------------------------------------------------------------------------------- 1 | { 2 | "sections": { 3 | "main": { 4 | "type": "main-list-collections" 5 | } 6 | }, 7 | "order": [ 8 | "main" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /templates/page.contact.json: -------------------------------------------------------------------------------- 1 | { 2 | "sections": { 3 | "main": { 4 | "type": "main-page" 5 | }, 6 | "form": { 7 | "type": "contact-form" 8 | } 9 | }, 10 | "order": [ 11 | "main", 12 | "form" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /templates/page.json: -------------------------------------------------------------------------------- 1 | { 2 | "sections": { 3 | "main": { 4 | "type": "main-page" 5 | } 6 | }, 7 | "order": [ 8 | "main" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /templates/password.json: -------------------------------------------------------------------------------- 1 | { 2 | "sections": { 3 | "main": { 4 | "type": "main-password" 5 | } 6 | }, 7 | "order": [ 8 | "main" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /templates/product.json: -------------------------------------------------------------------------------- 1 | { 2 | "sections": { 3 | "main": { 4 | "type": "main-product" 5 | } 6 | }, 7 | "order": [ 8 | "main" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /templates/search.json: -------------------------------------------------------------------------------- 1 | { 2 | "sections": { 3 | "main": { 4 | "type": "main-search" 5 | } 6 | }, 7 | "order": [ 8 | "main" 9 | ] 10 | } 11 | --------------------------------------------------------------------------------