-
Notifications
You must be signed in to change notification settings - Fork 26
/
atom.xml
490 lines (310 loc) · 50.9 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom"><title>Topcoat</title><subtitle>CSS for clean and fast web apps.</subtitle><link href="http://topcoat.io/atom.xml" rel="self"></link><link href="http://topcoat.io"></link><updated>2014-11-18T21:31:41.271Z</updated><id>http://topcoat.io/</id><entry><title>Semantic Icon Font using Topcoat Icons</title><link href="http://topcoat.io/posts/semantic-icon-font-using-topcoat-icons/"></link><updated>2013-11-22T05:00:00.000Z</updated><id>http://topcoat.io/posts/semantic-icon-font-using-topcoat-icons/</id><content type="html"><p><br /></p>
<h3 id="where-to-start-">Where to start&hellip;</h3>
<p>When developing mobile applications, one of the main considerations has to be around <strong>performance</strong>. And as you know, one of the largest drains on application performance is the quantity and size of the images used within your app. So&hellip;</p>
<p><em>How do you ensure your application is still aesthetically pleasing without compromising on performance?</em></p>
<h3 id="one-possible-solution">One possible solution</h3>
<p>One way to improve the performance of your application is to use <em>font icons</em> instead of icon images or sprites. Font icons are generally lighter weight than sprite images, plus they are easily updated and require very little CSS updates. In fact, you can update font icons the same way you would update the font using the <em>font-size</em> and <em>color</em> attributes.</p>
<p>Below is some basic steps you can take to get font icons working in your project using the Topcoat icons. So let&#39;s get started.</p>
<h3 id="creating-font-icons">Creating font icons</h3>
<p>Out of the box, the <a href="https://github.com/topcoat/icons">Topcoat Icons GitHub Repository</a> has the necessary files you need to get started with all the available icons as of v0.8.0. See the <em>/font</em> folder.</p>
<p>As we&#39;re also focusing on performance, this post shall detail the steps required to create and use your <em>own</em> custom icon font to achieve the results shown in the images below.</p>
<p>In order to create your own custom icon web font you can use an online application called <a href="http://www.icomatic.io/">Icomatic</a>. There are other tools available for you to experiment with but for now Icomatic is the weapon of choice.</p>
<ul>
<li>If you&#39;ve not done so already, clone / download the <a href="https://github.com/topcoat/icons">Topcoat icons</a> repo from GitHub</li>
<li>Then fire up a browser and go to <a href="http://www.icomatic.io/">Icomatic</a></li>
<li>Select &ldquo;Try the app&rdquo; button on the homepage</li>
<li>Select &ldquo;Upload files&hellip;&rdquo;</li>
<li>Navigate to your local copy of the Topcoat Icons repository and select the icon files you need from the <em>\svg</em> folder</li>
<li>Amend the icon labels as required. This is optional</li>
<li>Finally click on &ldquo;Download Kit&rdquo;</li>
</ul>
<p><a href="http://www.icomatic.io/">Icomatic</a> will generate the font files you need (<em>eot, ttf, woff, and svg</em>). You can include each or all of these at your own discretion.</p>
<p>The benefit of this is that you can include only the icons you need for your project so you can generate bespoke font files on a per project basis.</p>
<h3 id="the-styles">The styles</h3>
<p>Download and Extract these files into the appropriate location for your project.</p>
<p>My <em>icomatic.css</em> file is located in the <em>/css</em> folder of my project along with the font files but you can place them wherever you prefer as long as the paths to the font files are correct otherwise it won&#39;t work correctly and you&#39;ll just see the text equivalent of the icon label that you&#39;re trying to display.</p>
<p>Below is an example of the CSS content from my <em>icomatic.css</em> file:</p>
<script src="https://gist.github.com/nodoherty/7582412.js"></script>
<p>The font family &ldquo;<em>SourceSansPro-Light</em>&rdquo; is just a backup that I&#39;m using that is also supplied with Topcoat. It is the first open source font family contribution from Adobe and is served on <a href="https://edgewebfonts.adobe.com/fonts#/?nameFilter=source&amp;collection=source-sans-pro">Adobe Edge Web Fonts</a> and <a href="https://typekit.com/fonts/source-sans-pro">Adobe Typekit</a>.</p>
<p><strong>Note:</strong> &ldquo;<em>SourceSansPro-Light</em>&rdquo; is a regular text font and does not support icons.</p>
<h3 id="the-mark-up">The mark-up</h3>
<p>Next here comes the sweet part of using an icon font.</p>
<p>I have some mark-up to display a tab-bar that contains five buttons, each with an icon and some text below (see result images below).</p>
<script src="https://gist.github.com/nodoherty/7582987.js"></script>
<p>Any element with the <em>.icomatic</em> class will apply the icomatic font family, as per the previous CSS, which in turn will display your icon (<em>as long as the icon label text you have supplied within the mark-up matches that in the font file</em>).</p>
<p>To change the icon size and color you simply specify the CSS <em>font-size</em> and <em>color</em> attribute.
There is a great <a href="http://icomatic.github.io/sample-set/kit/icomatic.html">example</a> of this on the Icomatic site which allows you to experiment with the icon size and colour using the controls located at the top-right corner.</p>
<h3 id="the-result">The result</h3>
<h5 id="topcoat-tab-bar-with-button-icons">Topcoat Tab Bar with Button Icons</h5>
<p><img src="topcoat-tabbar-with-buttons.png" alt="Topcoat Tab Bar with Button Icons" title="Topcoat Tab Bar with Button Icons"> <br /></p>
<h5 id="topcoat-sidebar-with-icons">Topcoat Sidebar with Icons</h5>
<p><img src="topcoat-sidebar-with-icons.png" alt="Topcoat Sidebar with Icons" title="Topcoat Sidebar with Icons"></p>
<h3 id="one-additional-benefit">One additional benefit</h3>
<p>If that wasn&#39;t good enough, how would you like to add some depth / shadow to your icons&hellip;for free? Well it&#39;s as simple as applying the CSS <em>text-shadow</em> attribute, as you would in&hellip;you guessed it, a font like so:</p>
<pre><code>text-shadow : 0 -1px rgba(0, 0, 0, 0.69);</code></pre>
<p>This effect has also been applied to my icons in the images above. All without the need to update any images / sprites.</p>
<h3 id="what-about-sprite-images-">What about sprite images?</h3>
<p>Sprite images are still an option although I preferred not to have to specify a CSS rule and image position for every icon I wanted to use, even if I was using a sprite creation tool.</p>
<p>I also didn&#39;t want to have to compile a custom sprite image to only include the icons being used in my application. Out of the box, font icons seemed to be the most efficient option.</p>
<h3 id="summary-of-resources">Summary of resources</h3>
<ul>
<li><a href="http://topcoat.io">Topcoat</a></li>
<li><a href="https://github.com/topcoat/icons">Topcoat Icons</a></li>
<li><a href="http://icomatic.io">Icomatic</a></li>
<li><a href="http://icomatic.github.io/sample-set/kit/icomatic.html">Icomatic Demo</a></li>
</ul>
<p>If there is enough interest I am happy to supply a screen-cast of this process, so please mention this in the comments if it&#39;s something you would find helpful.</p>
<blockquote>
<p>Kindly brought to you by <a href="http://www.twitter.com/nodoherty">Niall O&#39;Doherty</a> - <a href="http://www.twitter.com/nodoherty">@nodoherty</a>.
Errors and omissions excepted</p>
</blockquote>
</content><author><name>Niall O'Doherty</name><uri>http://www.niallodoherty.com</uri></author></entry><entry><title>Responsive Design Tool for TopCoat</title><link href="http://topcoat.io/posts/intel-xdk/"></link><updated>2013-10-28T23:30:00.000Z</updated><id>http://topcoat.io/posts/intel-xdk/</id><content type="html"><p>Intel has updated the <a href="http://xdk.intel.com/">Intel XDK</a>, an HTML5 development IDE. This new version has a WYSIWYG UI building tool that supports TopCoat and responsive design. It also uses Brackets for code editing. Take a look and share your thoughts.</p>
<p><a href="app_designer_selecting_topcoat.png"><img src="app_designer_selecting_topcoat.png" alt="electing topcoat"></a></p>
<p><a href="app_designer_using_topcoat_narrow.png"><img src="app_designer_using_topcoat_narrow.png" alt="narrow"></a></p>
<p><a href="app_designer_using_topcoat_wide.png"><img src="app_designer_using_topcoat_wide.png" alt="wide"></a></p>
</content><author><name>Chris Perkins</name><uri>http://xdk.intel.com</uri></author></entry><entry><title>Color Me Topcoat</title><link href="http://topcoat.io/posts/color-me-topcoat/"></link><updated>2013-10-21T00:00:00.000Z</updated><id>http://topcoat.io/posts/color-me-topcoat/</id><content type="html"><p>Deep in the pits of the Topcoat Theme lived way too many colors. It made it tricky to customize a new theme quickly. So we leveraged the color functions from Stylus to wittle the colors down to just a few base colors:</p>
<ul>
<li>Text color</li>
<li>Control base color</li>
<li>Page base color</li>
<li>Notification color</li>
<li>Highlight color</li>
<li>Shadow color</li>
</ul>
<p>This colors then effect the rest of the theme. Each of the previous colors can still be declared manually if you need that control.</p>
<p>Here&#39;s a screencast that steps through the theme and how to tweak it.</p>
<div class="videoWrapper" style="position: relative; padding-bottom: 56.25%; padding-top: 25px; height: 0;"><iframe src="//player.vimeo.com/video/77716726" width="500" height="281" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div>
</content><author><name>Garth Braithwaite</name><uri>http://www.garthdb.com/</uri></author></entry><entry><title>Mini Release 0.7.5</title><link href="http://topcoat.io/posts/mini-release-0.7.5/"></link><updated>2013-09-24T01:00:00.000Z</updated><id>http://topcoat.io/posts/mini-release-0.7.5/</id><content type="html"><p>0.8.0 is not due out for a week or so, but we wanted to get some components out before then.</p>
<p>This is just a half release, but it some much requested components:</p>
<ul>
<li><a href="http://topcoat.io/notification/">notification</a></li>
<li><a href="http://topcoat.io/switch/">switch</a></li>
<li><a href="http://topcoat.io/tab-bar/">tab bar</a></li>
<li><a href="http://topcoat.io/text-input/">text input error state</a></li>
</ul>
<p>Check back in the next little bit for the v0.8.0 release, and if you&#39;re not in Amsterdam right now you&#39;re missing <a href="http://www.twitter.com/dam">Kristofer Joseph&#39;s</a> session at <a href="http://pgday.phonegap.com/eu2013/">Phone Gap EU</a>.</p>
</content><author><name>Garth Braithwaite</name><uri>http://www.garthdb.com/</uri></author></entry><entry><title>Generating Documentation for CSS Components</title><link href="http://topcoat.io/posts/generating-css-component-documentation/"></link><updated>2013-09-19T22:00:00.000Z</updated><id>http://topcoat.io/posts/generating-css-component-documentation/</id><content type="html"><p><br></p>
<h3 id="the-problem">The Problem</h3>
<p>Topcoat&#39;s final product is CSS, which, by itself, is a little tricky to work with and get excited about. CSS is the topcoat of the web, but we need HTML to support it. Topcoat&#39;s components are always getting updated, and the documentation and HTML demos need to be changed easily to match the CSS, so we built Topdoc to automate the process.</p>
<h3 id="enter-topdoc">Enter Topdoc</h3>
<p><a href="https://github.com/topcoat/topdoc">Topdoc</a> is a CSS comment structure and a documentation-generating tool. It can be used in the command line, or with a <a href="https://github.com/topcoat/grunt-topdoc">grunt task</a>, to generate HTML demos from CSS comments.</p>
<p>Originally we hoped we could find an existing tool, but none of them quite fit our needs. We posted a comparison on the <a href="https://github.com/topcoat/topdoc/wiki/Comparisons">wiki</a>.</p>
<h3 id="how-does-it-work-">How Does it Work?</h3>
<p>We use Topdoc block comments to separate our long form CSS file into individual components. The Topdoc comment not only acts as a delimiter, but it also provides metadata for the component. The Topdoc tool parses the stylesheet and passes the individual components and their metadata to a Jade template, which returns HTML.</p>
<h3 id="what-does-the-metadata-look-like-">What Does the Metadata Look Like?</h3>
<script src="https://gist.github.com/GarthDB/6606584.js"></script>
<p>Let&#39;s break this down:</p>
<p><strong>Line 1</strong>: Topdoc comments start with topdoc on the first comment line, it makes it quick and easy to identify from other comments.</p>
<p>The rest of the data uses a <a href="http://www.yaml.org/">YAML</a> friendly syntax.</p>
<p>The fields can be in any order, but this is a good example for consistency&#39;s sake.</p>
<p>The following are recommended and/or required fields:</p>
<ul>
<li><strong>Line 2</strong>: <code>name</code> (required): The full name of the component. Feel free to use spaces, punctuation, etc (name: Sir Button III, esq.)</li>
<li><strong>Line 3</strong>: <code>description</code>: Something more descriptive then the title alone.</li>
<li><strong>Line 4</strong>: <code>modifiers</code>: These can be pseudo classes, or addition rules applied to the component. This should be a <a href="http://yaml4r.sourceforge.net/doc/page/collections_in_yaml.htm">YAML mapping</a> (<code>*modifier*:*description*</code>) which becomes a js hash. Use the colon to separate the pseudo-class modifier from the description.</li>
<li><strong>Line 7</strong>: <code>markup</code> (required): This is the magic; it&#39;s the html that will be used to display the component in the docs. Because YAML and HTML both have odd relationships with whitespace, this property is separated as plain text. Just make sure to indent the code one more time than the other YAML properties.</li>
<li><strong>Line 12</strong>: <code>tags</code>: Just some obligatory metadata. We aren&#39;t currently using them on Topcoat, but we like having the option.</li>
<li><strong>Line 18</strong>: <code>blarg</code>: Since Topdoc uses a flexible YAML syntax, feel free to add any additional custom data you might need for your template.</li>
</ul>
<h3 id="any-other-data-">Any Other Data?</h3>
<p>Topdoc can also pass through some general data about the project to the Jade template. This data can be placed in the <code>package.json</code> file, or just be passed through to the tool as an argument. If data is not passed through, it will check the <code>package.json</code> file. See the README on the Topdoc <a href="https://github.com/topcoat/topdoc">github page</a>.</p>
<h3 id="how-are-we-using-topdoc-">How Are We Using Topdoc?</h3>
<p>The <a href="http://topcoat.io/topcoat">demo page</a> on Topcoat.io is generated using Topdoc, but we also found it really helpful for testing individual components while we are working on them. An added benefit to using it on the individual component level, it generates gh-pages for public testing.</p>
<p>Topdoc is independent of the Topcoat project, and can be used with any modular css documentation. Check out Topdoc&#39;s <a href="https://github.com/topcoat/topdoc">README</a> for details on installation and usage.</p>
<h3 id="what-s-next-">What&#39;s Next?</h3>
<p>Topdoc could really use live reloading integrated, probably using something like Grunt&#39;s <a href="https://github.com/gruntjs/grunt-contrib-watch#optionslivereload">live reload</a>. Also it would be great to have Topdoc write the demo files to the gh-pages branch on release.</p>
<h3 id="one-more-thing">One More Thing</h3>
<p>We have put together a few more components, and don&#39;t want to wait until the end of the cycle to release them with v0.8.0, so we&#39;re releasing them soon as v0.7.5.</p>
<p>The new components include:</p>
<ul>
<li>Tab Bar</li>
<li>Notification</li>
<li>Switch</li>
<li>Range</li>
<li>Error state for text-input</li>
</ul>
</content><author><name>Garth Braithwaite</name><uri>http://www.garthdb.com/</uri></author></entry><entry><title>Desktop Parity Party</title><link href="http://topcoat.io/posts/desktop-parity-party/"></link><updated>2013-08-30T22:00:00.000Z</updated><id>http://topcoat.io/posts/desktop-parity-party/</id><content type="html"><p>Topcoat 0.7.0 is out and it has some features we&#39;ve been looking forward to. The main goal was parity with the <a href="https://github.com/topcoat/design">Topcoat Desktop Kit</a>, but we also slipped in some new components, improved workflows for hacking on Topcoat, and added <a href="https://github.com/ai/autoprefixer">Autoprefixer</a>.</p>
<h2 id="desktop-parity">Desktop Parity</h2>
<p>This release was primarily focused on bringing the desktop stylesheets in parity with <a href="https://github.com/topcoat/design">Topcoat Desktop Kit</a> designed by <a href="https://twitter.com/larz">Larz</a> and <a href="http://www.behance.net/nnnnic">Nic</a> from Adobe XD. This parity means additional states like focus and hover that weren&#39;t previously a priority as we were focused on mobile. It also takes into account appropriate sizing and platform specific components, like <a href="http://topcoat.io/list">List</a> and <a href="http://topcoat.io/navigation-bar">Navigation Bar</a>, which are now only included in the mobile stylesheets.</p>
<h2 id="new-components">New Components</h2>
<p>We have a couple of new components. <a href="http://topcoat.io/topcoat/#icon-button">Icon Button</a> has returned, as well as the addition of <a href="http://topcoat.io/topcoat/#button-bar">Button Bar</a>. Taking a look at our design repo, you&#39;ll notice we still have plenty of components left to build. <a href="http://twitter.com/dam">Kristofer Joseph</a> put together a <a href="http://topcoat.io/posts/topcoat-components-deep-dive/">deep dive</a> on the component architecture to make it easier to get started if you&#39;d like to help contribute.</p>
<h2 id="autoprefixer">Autoprefixer</h2>
<p>The way Topcoat&#39;s build process has been designed; you can grab just what you need for your specific project and targeted platforms. We&#39;ve taken that a step further by adding <a href="https://github.com/ai/autoprefixer">Autoprefixer</a>. It uses the data from <a href="http://caniuse.com/">Can I Use</a> to let you add only the vendor specific prefixes you need. This also frees up the source for the components to be vendor agnostic.</p>
<h2 id="topdoc-0-2-0">Topdoc 0.2.0</h2>
<p>We use <a href="http://github.com/topcoat/topdoc">Topdoc</a> to build the demo files from Topcoat&#39;s css. In this release we&#39;ve updated the Topdoc spec to leverage a <a href="http://nodeca.github.io/js-yaml/">YAML</a> syntax which give us improved flexibility in the component&#39;s metadata. Additionally we are now leveraging Topdoc to generate html demo files for the individual components and are publishing them on <a href="http://pages.github.com/">GitHub Pages</a> at <a href="http://topcoat.io/{">http://topcoat.io/{</a> component name }</p>
<ul>
<li><a href="http://topcoat.io/button-bar">Button Bar</a></li>
<li><a href="http://topcoat.io/button">Button</a></li>
<li><a href="http://topcoat.io/checkbox">Checkbox</a></li>
<li><a href="http://topcoat.io/icon-button">Icon Button</a></li>
<li><a href="http://topcoat.io/list">List</a> *Mobile only</li>
<li><a href="http://topcoat.io/navigation-bar">Navigation Bar</a> *Mobile only</li>
<li><a href="http://topcoat.io/radio-button">Radio Button</a></li>
<li><a href="http://topcoat.io/search-input">Search Input</a></li>
<li><a href="http://topcoat.io/text-input">Text Input</a></li>
<li><a href="http://topcoat.io/textarea">Text Area</a></li>
</ul>
<p>I will be posting a more detailed description of Topdoc soon.</p>
<h2 id="coming-up-in-0-8-0">Coming up in 0.8.0</h2>
<p>With Desktop Parity in place we will be focusing on improving the theming workflow for the next release. Of course we&#39;ll also be adding more components, so watch the <a href="http://codepen.io/Topcoat">Topcoat Codepens</a> to see what&#39;s coming next.</p>
<p>Also, look for <a href="http://twitter.com/dam">Kristofer Joseph</a> at <a href="http://pgday.phonegap.com/eu2013/">PhoneGap Day EU</a> in Amsterdam on Sep 24th.</p>
</content><author><name>Garth Braithwaite</name><uri>http://www.garthdb.com/</uri></author></entry><entry><title>Topcoat components deep dive</title><link href="http://topcoat.io/posts/topcoat-components-deep-dive/"></link><updated>2013-08-22T22:00:00.000Z</updated><id>http://topcoat.io/posts/topcoat-components-deep-dive/</id><content type="html"><p>We have been getting a lot of people asking how they can help add components to Topcoat. What follows is an overview of our workflow as well as some more in depth explanations into some of lesser known parts of the Topcoat architecture.</p>
<p>We will cover:</p>
<h1 id="-a-id-toc-a-"><a id="toc"></a></h1>
<ul>
<li><a href="#design">Designs</a></li>
<li><a href="#codepens">Codepens</a></li>
<li><a href="#base">Base Components</a></li>
<li><a href="#skins">Skin Components</a></li>
<li><a href="#theme">Theme</a></li>
</ul>
<h2 id="-a-href-design-a-designs"><a href="design"></a>Designs</h2>
<p>First and foremost Topcoat is a design language. We feel a design language is more than gradients and drop shadows. It describes intent and enables a system that can be expanded to fit use cases as they come up. The default Topcoat theme is an implementation of a design language that can be modified and augmented to work across platforms without falling into the unhappy valley of copying existing systems. We are currently in the process of implementing the <a href="https://github.com/topcoat/design">designs we have posted</a> for desktop and mobile.</p>
<h2 id="-a-href-codepens-a-codepens"><a href="codepens"></a>Codepens</h2>
<p><a href="http://codepen.io/Topcoat">Topcoat Codepen</a> is the first step in our development process. We add a component as a codepen in order to discuss markup and styles in a public place. This also has the added benefit of becoming a living example that we can link to in our documentation. At this point we divide all of our components into two logical parts— The base styles and the visual styles.</p>
<p><p data-height="600" data-theme-id="0" data-slug-hash="DpKtf" data-user="Topcoat" data-default-tab="result" class='codepen'>See the Pen <a href='http://codepen.io/Topcoat/pen/DpKtf'>Topcoat Mobile Button</a> by Topcoat (<a href='http://codepen.io/Topcoat'>@Topcoat</a>) on <a href='http://codepen.io'>CodePen</a></p></p>
<script async src="http://codepen.io/assets/embed/ei.js"></script>
<p><br></p>
<h3>Base Styles</h3>
<p>Base styles are the reusable classes of a given component. These encompass reset styles as well as set up the cascade. The goal here is to be able to extend the base classes to create any number of differently themed variations.</p>
<script src="https://gist.github.com/kristoferjoseph/6301264.js"></script>
<p>The thinking here is you can apply this class to any element you would sensibly use as a button and have it prepared for visual styling.</p>
<h3 id="skin-styles">Skin Styles</h3>
<p>Skin styles encompass all the visual decoration for a component. Examples of these properties are background, border, box-shadow etc.</p>
<script src="https://gist.github.com/kristoferjoseph/6301268.js"></script>
<p>All of these property values are included in the <a href="https://github.com/topcoat/theme">Topcoat theme</a> and are supplied via variables to allow you to easily create a custom styled variation of our components.</p>
<h5 id="a-note-on-layout">A note on layout</h5>
<p>Notice neither the base or skin styles include positioning or layout. This is to optimize reuse. We figure that allowing users to use any layout classes they are comfortable with will ultimately be more flexible. Meaning use any grid framework or layout you like. Topcoat will work with it. Check out the sizing example at the bottom of our button bar codepen.</p>
<p><p data-height="500" data-theme-id="0" data-slug-hash="kdKyg" data-user="Topcoat" data-default-tab="result" class='codepen'>See the Pen <a href='http://codepen.io/Topcoat/pen/kdKyg'>Topcoat Button Bar</a> by Topcoat (<a href='http://codepen.io/Topcoat'>@Topcoat</a>) on <a href='http://codepen.io'>CodePen</a></p></p>
<p><script async src="http://codepen.io/assets/embed/ei.js"></script>
<br></p>
<h2 id="-a-id-base-a-base-components"><a id="base"></a>Base Components</h2>
<p>Once we have a working codepen with the base and skin styles outlined we can start creating the components for distribution. We distribute the base components separate from the skin components. The thinking behind this is that skins will be specific to a theme and base components can be reused with any skin set and theme you create. <a href="https://github.com/topcoat/button-base/blob/master/src/button.styl">Our button base component</a> is the base class from the codepen with reusable bits extracted out into <a href="https://github.com/topcoat/utils/blob/master/src/mixins/utils.styl">utilities</a> for other base components to leverage. This results in a final <a href="https://github.com/topcoat/button-base/blob/master/css/button.css"><code>.button</code> base class</a> for our skin to extend.
<br></p>
<h2 id="-a-id-skins-a-skin-components"><a id="skins"></a>Skin Components</h2>
<p>Extending our base component allows us to iterate on accesibility, markup, and the cascade completely separate from our specific theme styles. The thinking is that these skin files will allow you to customize a good amount of a specific skin set by changing variables in the theme. There is a distinct coupling between a theme and the skin files that use it. Meaning a skin file only renders variables that are exposed in a specific theme. We think the Topcoat theme is a pretty good starting point and exposes a lot of places for customization, but you could still benefit from the base components if you made your own theme and supporting skin files for it. We move all of the hard coded values from the codepen to variables in the theme.</p>
<h4 id="the-naming-convention-we-follow-for-naming-variables">The naming convention we follow for naming variables</h4>
<pre><code>var-{css property name}--{modifier}
*modifier is optional
Examples:
var-background
var-background--cta</code></pre>
<p>The thinking here is that once <a href="http://dev.w3.org/csswg/css-variables/">CSS Variables</a> land in the browser we will be able to use them with little refactoirng.</p>
<p>Variable count is something we are actively working to reduce. The current thinking is to add as many variables as needed to get all the skins to spec, then refactor to use fewer variables. We reuse variables wherever possible, but we feel it will be easier to see reuse patterns once we can see them all together. Plus we value shipping code over getting something perfect. Working in the open in this way allows the community to share their approaches. You can view the final <a href="https://github.com/topcoat/button/blob/master/css/topcoat-button-mobile-light.css"><code>.topcoat-button</code></a> class on github. Notice how all variations of button extend <code>.button</code> class making use of the base styles. This final file is generated from a <a href="https://github.com/topcoat/button/blob/master/src/topcoat-button.styl">stylus source file</a>. Notice how it uses the variables supplied by the theme.</p>
<h2 id="-a-id-theme-a-theme"><a id="theme"></a>Theme</h2>
<p>The default <a href="https://github.com/topcoat/theme">Topcoat theme</a> is an example of how to target multiple platforms as well as color variations. There is a dark and light variation of both the mobile and desktop components. The differences between the desktop and mobile variations are mainly font and dimension sizing. This has been a source of some confusion to users who are used to other web frameworks that are intended to be used to create websites. Our desktop theme is for creating desktop applications like <a href="http://brackets.io">Brackets</a> and <a href="http://html.adobe.com/edge/reflow/">Reflow</a>. Where as our mobile theme is for creating <a href="http://phonegap.com/app/feature/">PhoneGap Applications</a>. Combining these two variations with a media-query would give you a reponsive theme.</p>
<p>A theme consists of all the items that are related to a distinct application design. This encompasses colors as well as icons, fonts, sizing, and layout. *transitions are not currently included, but will be added soon.</p>
<p>You can see how we&#39;ve broken up the variable files to support these variations to cut down on duplication.</p>
<p><a href="http://topcoat.io/topcoat/">View our demo page to see the theme in action</a></p>
<h2 id="summary">Summary</h2>
<p>We hope sharing the thinking behind Topcoat components will make it easier to contribute. This project is different than most &ldquo;Open Source&rdquo; projects in that we are working in the open, not just releasing final code to the public. We are working this way so that we can involve everyone feeling the same pains we are. We would love to hear your input. Look for a video walkthrough coming soon.</p>
<p>Thanks for reading <a href="http://twitter.com/dam">@dam</a></p>
<h4 id="-back-to-top-toc-"><a href="#toc">Back to top</a></h4>
</content><author><name>Kristofer Joseph</name><uri>http://kristoferjoseph.com/</uri></author></entry><entry><title>npm all the things</title><link href="http://topcoat.io/posts/npm-all-the-things/"></link><updated>2013-08-19T22:00:00.000Z</updated><id>http://topcoat.io/posts/npm-all-the-things/</id><content type="html"><p>Topcoat 0.6.0 is hot off the wire and we are super happy with a few of the new additions. Here is a recap of what went into this release and some of the reasoning behind it.</p>
<h2 id="codepens">Codepens</h2>
<p>One of my favorite additions to this release is a process based on our continuing dedication to transparency and feedback from all of you. We wanted a way to share what we are currently working on as well as have a place to iterate in the open that lowered any hurdles to feedback people might have. <a href="http://codepen.io/Topcoat/">Codepen.io</a> has been the perfect solution. It has already led to invaluable discussions that ultimately ended up as additions to Topcoat.</p>
<h2 id="package-management">Package Management</h2>
<p>Originally we were very reluctant to choose a package management system since there were so many competing in this space which all had their virtues. This led to a lot of work on my part and a lot of tough problems for the build script. We have settled on <a href="http://npmjs.org">NPM</a> since this was already a requirement we inherited from <a href="http://gruntjs.com">grunt</a> and is also the most mature and feature rich of the solutions out there. As of Topcoat 0.6.0 all of our components are published to NPM for easy installation. This isn&#39;t to say we won&#39;t be publishing to other systems in the future, this is just what we will use to manage packages for development.</p>
<h2 id="component-development">Component Development</h2>
<p>We have been getting a lot of requests to explain how to add components to Topcoat and to be honest until this release it was a lot harder than we wanted it to be. As of this release we are really happy with our component development proces. Tutorial being worked on right now!</p>
<h2 id="effeckt-">Effeckt ♥</h2>
<p>Our very own Andrei has been researching using effeckt.css with Topcoat and we are really excited with the initial output. Check it out at <a href="http://topcoat.io/topcoat-effeckt/dist/">Topcoat + Effeckt</a>.</p>
<h2 id="new-components">New components</h2>
<p>Last but not least we added a few new components that we feel are worth talking about. We have been looking for a way to style inputs that is portable, accessible and perform well. Seems simple enough right? After a few iterations we settled on a CSS only solution with inputs nested in labels.Check out our <a href="http://codepen.io/Topcoat/pen/HDcJj">radio button</a>.</p>
<h2 id="coming-up-in-0-7-0">Coming up in 0.7.0</h2>
<p>The focus for the next release is to tidy up our desktop components to have parity with the <a href="http://github.com/topcoat/design">design comps</a>. Previously the focus had been on mobile components since PhoneGap users were experiencing the most need. Keep an eye on <a href="http://codepen.io/Topcoat">the Topcoat Codepen page</a> to get a sneak peek at the components that are coming as well. As always forks are appreciated!</p>
</content><author><name>Kristofer Joseph</name><uri>http://kristoferjoseph.com/</uri></author></entry><entry><title>Benchmarks and Results for Topcoat</title><link href="http://topcoat.io/posts/benchmarks/"></link><updated>2013-07-15T19:49:00.000Z</updated><id>http://topcoat.io/posts/benchmarks/</id><content type="html"><p>Topcoat is built with performance in mind and for that we are striving to benchmark everything. If you visit <a href="http://bench.topcoat.io">bench.topcoat.io</a> you will see the components from our latest release and their benchmark over time.</p>
<p>The goal of the website is to have publicly accessible benchmark results for our users and for us to spot regressions and performance issues.</p>
<h2 id="key-metrics">Key metrics</h2>
<ul>
<li><p>Mean frame time (Frame time) - not frames per second (FPS) this is actually a more accurate rating of performance, a good article with an in depth explanation: <a href="http://www.mvps.org/directx/articles/fps_versus_frame_time.htm">fps versus frame time</a></p>
</li>
<li><p>Load time</p>
</li>
<li><p>Layout time</p>
<p><img src="screenshot.png" alt="plot screenshot" title="Plot screenshot"></p>
</li>
</ul>
<p>The server can also be used offline for components development. You can make changes to a component, say for example swap box-shadow for for a dark border with reduced opacity, the plots can offer you a nicer visualisation of the performance impact.</p>
<p>There is a <a href="http://www.youtube.com/watch?v=Mhw4Sf1WWwQ">screencast</a> where you can see how to get started with using it for your own needs.</p>
<iframe class="video" src="//www.youtube.com/embed/Mhw4Sf1WWwQ" frameborder="0" allowfullscreen></iframe>
<h2 id="how">How</h2>
<p>We are using <a href="http://www.chromium.org/developers/telemetry">Chromium Telemetry</a>. Telemetry is a python powered framework used for cross-(chrome)-platform performance testing. It abstracts launching, connecting, and opening a page and records the metrics mentioned above and many others.</p>
<p>We have a Grunt task that takes results and pushes them to the server.</p>
<p>The server is written in Node and uses <a href="http://www.flotcharts.org/"><a href="http://www.flotcharts.org/">http://www.flotcharts.org/</a></a> to display the results.</p>
<h2 id="usage-guide">Usage guide</h2>
<ol>
<li><a href="http://www.chromium.org/developers/how-tos/get-the-code">chromium.org/developers/how-tos/get-the-code</a> offers step by step instructions on how to download Chromium. You will need it entirely if you want to run Telemetry so be ready for a ~1.6GB download.</li>
<li>In <code>chromium/src/tools/perf/page_sets</code> you will find <strong>*.json</strong> files which are required as input when running the telemetry tests. There is a specific boilerplate json that you will need to write in order to tell Telemetry where the page you want to benchmark is located.</li>
<li>To run Telemetry you will need to be in <code>chromium/src/tools/perf</code>. The command is
<code>./run_multipage_benchmarks --browser=system loading_benchmark page_sets/topcoat_buttons-base.test.json -o /tmp/loading_benchmark_topcoat_buttons-base.txt</code><ul>
<li><strong>loading_benchmark</strong> parameter tells Telemetry to record load time, layout time, the time it took to parse the HTML etc.</li>
<li><strong>smoothness_benchmark</strong> parameter tells Telemetry to scroll the page while recording, this time it captures mean frame time, jank count and many others.</li>
</ul>
</li>
<li>After you have the data you can use the Grunt task in the Topcoat repo to parse the files that have specified as output and submit them to your clone of Topcoat Server running locally.
All of these steps are also shown in the <a href="http://www.youtube.com/watch?v=Mhw4Sf1WWwQ">screencast</a>.</li>
</ol>
<p>If there are any questions you can use the comments below, I&#39;m looking forward to seeing pull requests/issues reporting for the project. You can also hit me up on twitter <a href="http://twitter.com/ndreio">@ndreio</a></p>
<p>Useful links:</p>
<ul>
<li>main home page <a href="http://topcoat.io"><a href="http://topcoat.io">http://topcoat.io</a></a></li>
<li>github repository <a href="https://github.com/topcoat/"><a href="https://github.com/topcoat/">https://github.com/topcoat/</a></a></li>
<li>Topcoat Server <a href="https://github.com/topcoat/topcoat-server"><a href="https://github.com/topcoat/topcoat-server">https://github.com/topcoat/topcoat-server</a></a></li>
<li>more about Chromium Telemetry <a href="http://www.chromium.org/developers/telemetry"><a href="http://www.chromium.org/developers/telemetry">http://www.chromium.org/developers/telemetry</a></a></li>
</ul>
</content><author><name>Andrei Oprea</name><uri>http://github.com/piatra</uri></author></entry><entry><title>Topcoat CI Environment</title><link href="http://topcoat.io/posts/topcoat-ci/"></link><updated>2013-06-27T20:17:00.000Z</updated><id>http://topcoat.io/posts/topcoat-ci/</id><content type="html"><p>Today we are open-sourcing our <a href="https://github.com/topcoat/topcoat-ci-config">Jenkins CI configs</a> on Github. With Jenkins CI environment, every commit that goes into Topcoat components triggers the chain of building, unit testing and performance benchmark testing. So if something goes wrong, we know it right away.</p>
<p>If you are interested in setting up your own Jenkins CI environment for Topcoat, be sure to go check it out. In the topcoat-ci-config Github repo, we have Jenkins job config (xml file) for all released Topcoat components (and we will keep adding more as they are ready). To use them, you can either copy the xml file and put it into your Jenkins job folder; or you can just read the plain xml and grab the part you want.</p>
<p>We hope you will like it.</p>
</content><author><name>Yinan Liu</name><uri>http://www.linkedin.com/in/yinanliu</uri></author></entry><entry><title>Introducing Topcoat</title><link href="http://topcoat.io/posts/introducing-topcoat/"></link><updated>2013-06-05T21:21:00.000Z</updated><id>http://topcoat.io/posts/introducing-topcoat/</id><content type="html"><p>Topcoat is a brand new open source CSS library designed to help developers build web apps with an emphasis on speed. It evolved from the Adobe design language developed for Brackets, Edge Reflow, and feedback from the PhoneGap app developer community. </p>
<p>Topcoat includes: </p>
<ul>
<li>Our design research</li>
<li>The resulting super customizable CSS build</li>
<li>Automatically generated style guides</li>
<li>PSD and other design artifacts</li>
<li>A collection of simple and clean SVG icons</li>
<li>The beautiful Adobe Source Sans Pro font family</li>
<li>Benchmarking tools</li>
</ul>
<p>It is a sweet little package, and we’re actively working on it to make it even more awesome with fresh releases every month. Our biggest goal is to start building a community around Topcoat and we’re structuring the project so contribution is super crazy simple to do. </p>
<p><img src="example.png" alt="image"></p>
<h2 id="performance-first-">Performance first!</h2>
<p>Apps need to be fast and so Topcoat is being built with speed in mind. We’re benchmarking everything we can and plan to do even more as the project evolves. It is an early time but we’re already looking at how each CSS control impacts loading, layout, and frames per second.
It is an awesome system, totally open source, and would be great stand alone tool for teams looking to find ways to measure their own apps performance. </p>
<h2 id="custom-builds-and-theming">Custom builds and theming</h2>
<p>Topcoat contains not only CSS but also all the tools we used to build it. You can easily customize and extend Topcoat to craft it to exactly the experience you need. The controls in Topcoat CSS are authored in Stylus, and we utilize many of its features to allow for a clean separation of reset, from layout, from aesthetic, and between platforms. Each control lives in its own git repo. It is in this way we can construct builds that target specific platforms, with only the controls you need, and only for the devices you are targeting. </p>
<p>Creating a completely optimized builds are crucial feature for building complex applications, and especially so when you want to do everything possible to make your app crazy fast. </p>
<h2 id="using-topcoat">Using Topcoat</h2>
<p>Topcoat can be dropped into a web app and used immediately. Even better you can tune your performance down to each discrete CSS control.</p>
<h3 id="getting-started-quickly">Getting started quickly</h3>
<ol>
<li>Clone from Github or download a specific version (E.g. <code>topcoat-0.3.0</code>) from <a href="http://topcoat.io">http://topcoat.io</a></li>
<li>Reference the /css (Protip: look in /doc for usage guides.)</li>
<li>Holy smokes there is no step three!</li>
</ol>
<h3 id="custom-builds-for-web-hackers">Custom builds for web hackers</h3>
<ol>
<li>Fork <a href="http://github.com/Topcoat/Topcoat">http://github.com/Topcoat/Topcoat</a></li>
<li>Install Node and run <code>npm install -g grunt-cli &amp;&amp; npm install .</code></li>
<li>Modify <code>package.json</code> to point to only the controls you need</li>
<li>Run <code>grunt</code> to generate your custom build</li>
<li>Fork (or write your own) controls and modify <code>package.json</code> point to them</li>
</ol>
<h3 id="theming-for-the-web-craftsman">Theming for the web craftsman</h3>
<ol>
<li>Fork <a href="http://github.com/Topcoat/theme">http://github.com/Topcoat/theme</a></li>
<li>Modify various variables files (We are going to simplify this further!)</li>
<li>Modify <code>./topcoat-X.X.X/package.json</code> to point to your theme and run <code>grunt</code></li>
</ol>
<p>We need your help! Topcoat is totally open source software. There are bugs, and we’re still solidifying our architecture, so there are MANY ways to contribute!</p>
<ul>
<li>Our main home is <a href="http://topcoat.io">http://topcoat.io</a> </li>
<li>Learn everything else about Topcoat on our wiki: <a href="https://github.com/topcoat/topcoat/wiki">https://github.com/topcoat/topcoat/wiki</a></li>
<li>Chat us up on our mailing list: <a href="http://groups.google.com/group/topcoat">http://groups.google.com/group/topcoat</a></li>
<li>Request features, and file bugs, in our issue tracker. Note each control in Topcoat has its own git repo, thus versions, and therefore issue trackers too. <a href="http://github.com/topcoat">http://github.com/topcoat</a></li>
<li>Tweet us up on the Twitters: <a href="http://twitter.com/topcoat">http://twitter.com/topcoat</a></li>
<li>Follow the lead hacker Kristofer Joseph too: <a href="http://twitter.com/dam">http://twitter.com/dam</a></li>
</ul>
<p>Join us in making it easier than ever to craft fast apps using web standards that look as good as they feel.</p>
</content><author><name>Brian LeRoux</name><uri>http://brian.io/</uri></author></entry></feed>