GithubHelp home page GithubHelp logo

themes-lib-core's Introduction

BC-Core

A collection of shared templates, styles, and javascript that can be used in themes to save time.

These templates are a work-in-progress, so please feel free to jump in on the fun !

Installation

Add or update your theme using the install.sh script. It's a good idea to do this on a clean brach so you can easily see the changes.

/path/to/bc-core/install.sh /path/to/my-theme

This adds the following directories to your theme:

  • templates/core/
  • assets/js/core/
  • assets/scss/core/

These should be added to git, but remember that they do not belong to your theme—if you want to make a change either copy the file, or submit a PR to the bc-core repo.

In addition, it also adds a core object to your lang/en.json file.

Templates

All core templates are installed into your theme at templates/core. These have no effect on your theme, unless you explicitly include them.

Account Pages

The core account pages are designed so that you can import them from your account page templates in your theme and get a fully-functioning account section for free.

For example:

<!-- templates/pages/account/edit.html -->
{{#partial "page"}}
  {{> core/account/edit}}
{{/partial}}
{{> layout/base}}

Giftcard Pages

The three giftcard pages work in the same way except each of your templates need to include two partials, one for the page content and one for the navigation.

By default the navigation will be styled as three inline-block links in a horizontal row. To drop this styling and use your own, set $giftcard-nav-use-default-styles to false in your scss.

<!-- templates/pages/gift-certificate/purchase.html -->
{{#partial "page"}}
  <article class="page-container">
    {{> core/gift-certificate/navigation page='purchase'}}
    <div class="page-content">
      {{> core/gift-certificate/purchase}}
    </div>
  </article>
{{/partial}}
{{> layout/base}}

The giftcard class should be all you need for the giftcard functionality to work in your theme:

// assets/js/theme/GiftCertificate.js

import GiftCertificate from './core/GiftCertificate';

export default GiftCertificate;

Unavailable pages

Partials for maintenance/hibernation pages come with their own stripped-down layout file and therefore should be included standalone without any reference to the base.html layout:

<!-- templates/pages/unavailable/maintenance.html -->
{{> core/unavailable/maintenance}}

Invoices

The printable invoice template (/templates/core/account/orders/invoice.html) is a standalone template with its own layout that does not rely on theme.scss at all. It uses invoice.css, which you'll need to include as a separate file under /assets/scss:

// assets/scss/invoice.scss
@import "core/invoice";

// this template doesn't really merit any overrides,
// but you could do this if you really wanted to:
body {
  font-family: $primary-font;
}

Images

The core templates rely on a few image size strings to be defined in your settings._images object:

core-swatch: For swatch (product option) patterns. The maximum size is 150x150.

account-product-thumbnail: All product images: product grids, orders/returns lists, and downloadable products.

account-logo: The version of your theme's logo used both on the maintenance/hibernation pages as well is in the header of the printable invoice.

core-product-picklist: The product thumbnail pulled in by the Picklist product option type.

Default image

You also must have a settings.default_image defined, which is a path to your theme's fallback image, i.e. "/assets/img/no-image.svg".

TODO

default_image should be kebab-case, as we seem to moving in the direction of that being the convention.

Styles

Import the core styles into your theme with @import "core/account";. Have a look at the root core/_account.scss for a reference of what variables are at your disposal.

Below is an example of how you could include core styles into your theme. This example is overriding some core variables and styles.

// Variable Overrides
$account-light-color: $input-background-color;
$account-accent-color: $accent-color;
$account-border-color: $border-color;
$account-gutter: $gutter;
$account-font-size: $font-size;

// Import
@import "core/account";

// Style Overrides
.account-wrapper {
  @extend %wrapper;
  margin-top: $gutter * 2;
}

Javascript

Core includes all javascript needed for the account pages to work -- just import and them immediately export the Account.js, Auth.js and GiftCertificate.js classes into your own theme:

// assets/js/theme/Account.js
import Account from './core/Account';

export default Account;

###Additional <select> JS But! If you're require additional javascript for your select inputs, extend Auth and Account instead of exporting them and enjoy to the selectWrapCallback() method which is called every time a new <select> element is appended to the DOM (on any auth or account pages). Important when swapping between a select and text input in account address fields.

// assets/js/theme/Auth.js
import CoreAuth from './core/Auth';

export default class Auth extends CoreAuth {
  selectWrapCallback($selectEl) {
    console.log('there is a new select element on the page', $selectEl);
  }
};

Caveats

  • As of February 24, 2015, please style your own product grids. Product grid templates can be passed a custom products_per_row_class to assist in grid styling.

themes-lib-core's People

Contributors

pixelmargaret avatar cburnsmunro avatar essmahr avatar jnorth avatar maenda avatar maxariss avatar adamk-pxu avatar ericbdev avatar graeme-scott avatar bc-alexsaiannyi avatar nboliver avatar bhardy avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.