Modes
Theme Designer supports three modes, Developer Mode, Preview Mode and Presentation Mode.
Demo Mode
Overview: Demo mode is used to present theme options to clients. The demo mode is based off the "Clean" theme which reflects a Peak Resort branded site with minimal configurations preset. In this mode, the theme will implement the various style mixins dynamically by using the design control. It is important to note that when in this mode, there should be no mixins implemented in the clients theme file other than the three defalut mixins (@include theme-vouchers-css(), @include theme-rewards-css(), @include fix-header-for-td()) that are required to provide base styles for presenting various plugins.
Developer Mode
Developer mode is activated by toggling on developer mode. Doing so enables additional developer features including proving access to "Preview Mode", and revealing the mixin export options. This is the standard mode that you should be in while developing a new theme.
Preview Mode
Preview Mode provides a way to preview your theme with the mixins implemented on the client stylesheet. Enabling Preview Mode disables the Theme Designer styling controls as well as the styles being applied via the UI. This allows you to preview how the theme will look when running in Commerce.
IMPORTANT: It is very important to not include style mixins in the client _theme.scss file when not in preview mode as this will cause CSS conflicts in the theme. When viewing a theme in Presentation Mode, you should comment out any mixins you have added to the stylesheet. DO NOT comment out these plugin mixins until the theme is ready to deploy ((@include theme-vouchers-css(), @include theme-rewards-css(), @include fix-header-for-td())
Note: Preview Mode is only available when Demo Mode is enabled.
How to Demo
Demo mode is the default state for Theme Designer. There is no configuration necessary to start using it. The controls on the left panel are used to select between the pages you want to view. The controls in the right panel provide the theme options. There is currently a limitation with the checkout page in demo mode in that it will not retain the settings configured on other pages. This should be resolved in the future.
Theme options
Theme options are broken into different categories. Global options are applied site wide. Page specific options are applied only to the loaded page. Developer options should not be used in Demo mode.
How To Develop Themes
Using Mixins
Theme Designer uses SASS Mixins to implement theme options. The mixins provide all the CSS necessary to implement the chosen option as well as limited arguments to extend the configuration capabilities [when doing advanced theming]. This means you no longer have to manually write or copy various CSS to apply styles. The mixins ensure consistency in how theme elements are styled for all clients.
Using Preview Mode
The Theme Designer UI works by wrapping the various mixins in implementation classes and then toggling those classes on and off in the page root element. When you app ply mixins to the client theme file, those mixins will conflict with the mixins the UI is selecting. To avoid these conflicts, it is important to enable Preview Mode while developing. If you want to return to demo mode, you most comment out the mixins in the client stylesheet and toggle Preview Mode back off.
Step-By-Step Theming Process
Create a duplicate of the Clean Theme directory and rename it to the current client.
Update the _colors.scss file in the client theme directory with all of the client color options.
Update the _variables.scss file in the client theme directory with the paths to the correct image files.
Update the _typography.scss file in the client theme directory with the clients font information.
Pull a copy of the theme designer branch with
git clone git@bitbucket.org:aspenwareunity/commerce-theme-builder.git
Run Theme Designer with the
yarn dev
command in terminalIn the Theme Designer source files, open layouts.vue and checkout.vue. Locate the scss import statement that targets the client theme. Change the path in both files to point at the client theme directory you are working on. This will make Theme Designer load that clients SCSS into the Design window.
Make sure that all but the following 3 mixins are commented out in the clients _theme.scss file : @include theme-vouchers-css(), @include theme-rewards-css(), @include fix-header-for-td(). These 3 mixins need to be available during the design process.
In Theme Designer, in Presentation Mode, set all of the theme option controls to match the client choices.
Enable Developer mode, and click the "Export All Mixins" button.
Copy the mixins from the dialog box and paste them into the clients _theme.scss file. Make sure they are uncommented and save the file.
In Theme Designer, enable Preview Mode. You should now see the mixins from the clients _theme.scss file being applied.
While still in Preview Mode, make any additional configurations necessary to the mixins in the clients _theme.scss file and ensure they appear correct in the Theme Designer preview.
IMPORTANT: Once the theme looks how you want it, remove the following 3 mixins from the clients _theme.scss file. The CSS being provided by these mixins will already be available in Commerce so if you forget to remove them from the _theme.scss file you will have two instances of this same CSS in the live site.
Copy the clients entire theme directory from Theme Designer over to the Theme directory in commerce.
Fire up a local instance of Commerce, set the environment to the client and QA the entire theme.
If it looks good, commit the theme to Commerce source.
Known Limitations
There is a limitation with the checkout page in demo mode in that it will not retain the settings configured on other pages. This should be resolved in the future.
A code change is necessary to display anything other than the “Clean Theme”, so when developing a theme there is no UI method to view other themes.
A code change is necessary when developing themes to remove the CSS that is required to view the plugin based UI elements in order to ensure against duplicate CSS making into production. Forgetting to do this will result in themes having duplicate plugin CSS in production.