Responsive design is forcing us to reevaluate our design and development practices. It's also forcing us to rethink how we communicate with our clients and what a project's deliverables might be. Pattern Lab helps bridge the gap by providing one tool that allows for the creation of modular systems as well as gives clients the tool review the work in the place it's going to be used: the browser.
This talk is a deep dive into how Pattern Lab is organized and how to take advantage of it.
3. a roadmap for our talk:
‣ rethinking the web design process
- process: linear vs. collaborative
- communication: clients and RWD
- modular systems: systems vs. pages
‣ deep dive into pattern lab
- quick tour of the front-end
- installation
- working with patterns
- customizing data
- advanced features
9. rethinking the web design process: collaborate
Kick-off Design &
Develop Test Client
Review Production
10. rethinking how we communicate: deliverables
‣ mood boards
‣ style tiles
‣ wireframes
‣ low-fidelity HTML mock-ups
‣ high-fidelity HTML mock-ups
‣ “cut up” mark-up, CSS, & JS
‣ pattern libraries & style guides
11. Our hand-offs to clients should allow them
to re-mix common elements that we’ve
developed to build new things.
Our deliverables should
be systems, not pages.
12. Build, test, and review deliverables in the
place where a project is going to be used.
Get to the browser.
13. ...communicate better with one another?
...build robust systems and not pages?
...review everything in the browser?
So how do we...
15. Pattern Lab is a collection of
tools for creating modular
systems that involves your
entire team & your client every
step of the way and lets everyone
review in the browser.
21. the requirements:
PHP 5.3+
no web server required*
* - only required for page follow
Mustache is used for patterns.
JSON is used for dynamic data storage.
26. installation: generate for the first time
php
core/builder.php
-‐g
just in case you’re a fan of the command line, on linux or on windows.
php
core/builder.php
-‐-‐help will show you all of your options.
28. installation: review source/
the only required directories are _data/ & _patterns/. otherwise,
you can change source/ as much as you want. this is what we mean
about making your own Bootstrap. you can even use Bootstrap.
29. installation: open pattern lab’s index.html
don’t edit public/. always make changes in source/. public/ is for
your own and your client review purposes.
30. installation: done!
Pattern Lab doesn’t require Apache so no extra set-up. You can drop
Pattern Lab into a Dropbox folder for clients.
43. working with patterns: intro
Each pattern describes a problem that occurs
over and over again in our environment, and
then describes the core of the solution to
that problem, in such a way that you can use
this solution a million times over, without
ever doing it the same way twice.
— Christopher Alexander
44. working with patterns: intro
Pattern Lab provides a way to
help you develop, describe, &
stitch together mark-up and
style patterns.
45. Pattern Lab uses conventions
so that the filesystem acts as
its database.
working with patterns: intro
46. working with patterns: organization
all file paths in this presentation are located under source/.
00-‐organisms/01-‐global/00-‐header.mustache
50. _00-‐header.mustache
working with patterns: hiding patterns
the underscore hides a pattern in the navigation but the
pattern is still available for inclusion in other patterns.
51. 00-‐header@inreview.mustache
working with patterns: pattern states
anything after the “@” gets added as a class to the
pattern’s navigation element. “inprogress,” “inreview,” and
“complete” propagate to downstream patterns.
53. working with patterns: systems, not pages
Atomic Design as the basis for Pattern Lab’s pattern types.
54. working with patterns: systems, not pages
molecules-search
organisms-header
templates-homepage
55. Important: You don’t have to use the
Atomic Design metaphor to use Pattern
Lab. Change it to whatever you want.
working with patterns: systems, not pages
57. working with patterns: using atoms
Use atoms to help define
general styles. Good first step
for style tiles, mood boards, or
testing style changes. They
most likely won’t be used in
other patterns.
61. working with patterns: using molecules
Use molecules as your base
for common patterns that
will be included further up.
In general, they shouldn’t
have partial dependencies.
Will use variables.
64. working with patterns: molecule example
<li
class="comment-‐container">
<div
class="comment-‐meta">
<img
src=”{{
img.avatar
}}”
class=”avatar”>
<h4
class="comment-‐name">
<a
href="#">{{
name.first
}}
{{
name.last
}}</a>
</h4>
</div>
<div
class="comment-‐text">
<p>{{
description
}}</p>
</div>
</li>
these are variables and are defined in various JSON files.
molecules-single-comment:
66. customizing data: where to define it
Global data:
_data/_data.js
00-‐pages/00-‐homepage.json
Pattern-specific data:
00-‐pages/00-‐homepage~emergency.json
Pseudo-pattern:
specificity
67. customizing data: system/default data
<ul>
{{#
listItems.four
}}
<li>{{
name.first
}}
{{
name.last
}}</li>
{{/
listItems.four
}}
</ul>
the “listItems” variable:
the “link” variable:
<a
href=”{{
link.pages-‐blog
}}”>
provides the real path to a pattern
provides an easy-to-use set of data to iterate over for your mock-
ups. supports up to twelve iterations. randomized every time the
site is generated. more info: http://bit.ly/1jojXKR
69. working with patterns: using organisms
Use organisms when you
need combinations of
molecules. Also good when
defining patterns that may
match partials in a CMS.
72. working with patterns: organism example
<section
class="comments
section">
<div
class="comments-‐container"
id="comments-‐container">
<h2
class="section-‐title">59
Comments</h2>
{{>
molecules-‐comment-‐form
}}
<ul
class="comment-‐list">
{{#
listItems.five
}}
{{>
molecules-‐single-‐comment
}}
{{/
listItems.five
}}
</ul>
</div>
{{>
molecules-‐pagination
}}
</section>
these are mustache partials and are how we include one
pattern within another.
organisms-comment-thread:
73. 00-‐organisms/01-‐global/00-‐header.mustache
working with patterns: partial syntax
if we want to include this pattern in another pattern...
default partial syntax uses only the pattern type and pattern name...
{{>
organisms-‐header
}}
fuzzy matching of the pattern name...
{{>
organisms-‐head
}}
{{>
00-‐organisms/01-‐global/00-‐header
}}
traditional mustache partial...
74. customizing data: pattern parameters
{{>
molecule-‐alert(message:
“hello”)
}}
<div
class=”alert”>
{{
message
}}
</div>
<div
class=”alert”>
hello
</div>
Mustache:
Partial:
Rendered:
pattern parameters allow for defining of variable replacement right in the partial.
77. working with patterns: using templates
Use templates to wireframe
and provide a low-fidelity
version of final pages. They’re
all about layout. Template
mark-up can and should
include sections that might not
show by default. After atoms,
templates will be the other
thing you show clients.
80. working with patterns: common header & footer
00-‐atoms/00-‐meta/_00-‐header.mustache
00-‐atoms/00-‐meta/_01-‐footer.mustache
if these patterns exist Pattern Lab automatically includes them as
your header and footer.
81. working with patterns: template example
<div
class="page"
id="page">
{{>
organisms-‐header
}}
<div
role="main">
{{#
emergency
}}
{{>
molecules-‐alert:error
}}
{{/
emergency
}}
{{#
hero
}}
{{>
molecules-‐block-‐hero
}}
{{/
hero}}
...
these are quasi-“if statements” and allow for the inclusion of multiple
layout possibilities for a template. turned on via JSON variables.
templates-homepage:
83. working with patterns: using pages
Use pages to provide high-
fidelity versions of a template.
They should include very
specific data.They’re all about
showing “real” content in the
wireframe.
85. working with patterns: page example
{{>
templates-‐homepage
}}
pages should simply include/reference templates. the majority of the power
of a page is in its associated JSON file and by using pseudo-patterns.
89. common workflow with advanced tools:
1. start watcher & auto-reload server at
the same time
2. edit & save files in source/
3. watch things change in your browser
90. integrating with grunt:
npm
install
-‐-‐save-‐dev
grunt-‐shell
shell:
{
patternlab:
{
command:
"php
core/builder.php
-‐gp"
}
},
shell:patternlab
install grunt-shell:
add to initConfig:
add to registerTask:
92. summing up:
‣ Our workflows are going to change.
‣ Involve entire team in the process.
‣ Create modular systems of mark-
up.
‣ Pattern Lab can be a central tool in
helping that happen.