tres 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. data/.gitignore +3 -0
  2. data/Gemfile +3 -0
  3. data/Gemfile.lock +67 -0
  4. data/README.md +50 -0
  5. data/Rakefile +16 -0
  6. data/VERSION +1 -0
  7. data/bin/tres +103 -0
  8. data/examples/anagen/anagen.coffee +61 -0
  9. data/examples/anagen/anagen.css +1413 -0
  10. data/examples/anagen/anagen.js +182 -0
  11. data/examples/anagen/anagen.scss +20 -0
  12. data/examples/anagen/backbone-min.js +38 -0
  13. data/examples/anagen/index.html +50 -0
  14. data/examples/anagen/jquery-1.8.0.min.js +2 -0
  15. data/examples/anagen/templates.coffee +6 -0
  16. data/examples/anagen/templates.js +13 -0
  17. data/examples/anagen/tres.js +375 -0
  18. data/examples/anagen/underscore-min.js +32 -0
  19. data/font/fontawesome-webfont.eot +0 -0
  20. data/font/fontawesome-webfont.svg +255 -0
  21. data/font/fontawesome-webfont.ttf +0 -0
  22. data/font/fontawesome-webfont.woff +0 -0
  23. data/javascripts/backbone-min.js +38 -0
  24. data/javascripts/jquery-1.8.0.min.js +2 -0
  25. data/javascripts/tres.coffee +210 -0
  26. data/javascripts/underscore-min.js +32 -0
  27. data/lib/ext/.filemethods.rb.swp +0 -0
  28. data/lib/ext/filemethods.rb +109 -0
  29. data/lib/ext/string.rb +33 -0
  30. data/lib/tres/app.rb +92 -0
  31. data/lib/tres/asset_packager.rb +45 -0
  32. data/lib/tres/errors.rb +6 -0
  33. data/lib/tres/logger.rb +9 -0
  34. data/lib/tres/rack_logger.rb +37 -0
  35. data/lib/tres/server.rb +50 -0
  36. data/lib/tres/template_compiler.rb +113 -0
  37. data/lib/tres.rb +64 -0
  38. data/sass/font-awesome.scss +329 -0
  39. data/sass/tres/base.scss +131 -0
  40. data/sass/tres/themes/default.scss +71 -0
  41. data/spec/app_spec.rb +44 -0
  42. data/spec/asset_packager_spec.rb +74 -0
  43. data/spec/filemethods_spec.rb +84 -0
  44. data/spec/fixtures/index.haml +41 -0
  45. data/spec/fixtures/index.html +50 -0
  46. data/spec/sample/assets/javascripts/all.coffee +12 -0
  47. data/spec/sample/assets/javascripts/anagen.coffee +7 -0
  48. data/spec/sample/assets/javascripts/backbone-min.js +38 -0
  49. data/spec/sample/assets/javascripts/jquery-1.8.0.min.js +2 -0
  50. data/spec/sample/assets/javascripts/underscore-min.js +32 -0
  51. data/spec/sample/assets/stylesheets/app.scss +7 -0
  52. data/spec/sample/assets/stylesheets/with_imports.scss +10 -0
  53. data/spec/sample/templates/article.html +0 -0
  54. data/spec/sample/templates/book.haml +4 -0
  55. data/spec/sample/templates/books/li.haml +2 -0
  56. data/spec/sample/templates/index.html +50 -0
  57. data/spec/server_spec.rb +35 -0
  58. data/spec/spec_helper.rb +69 -0
  59. data/spec/template_compiler_spec.rb +96 -0
  60. data/templates/all.coffee +21 -0
  61. data/templates/all.scss +11 -0
  62. data/templates/app.coffee +10 -0
  63. data/templates/collection_script.coffee.erb +6 -0
  64. data/templates/config.ru +3 -0
  65. data/templates/home.coffee +7 -0
  66. data/templates/home.haml +17 -0
  67. data/templates/index.html +15 -0
  68. data/templates/model_script.coffee.erb +3 -0
  69. data/templates/screen_script.coffee.erb +5 -0
  70. data/templates/templates.js +2 -0
  71. data/tres.gemspec +29 -0
  72. metadata +257 -0
@@ -0,0 +1,329 @@
1
+ /* Font Awesome
2
+ the iconic font designed for use with Twitter Bootstrap
3
+ -------------------------------------------------------
4
+ The full suite of pictographic icons, examples, and documentation
5
+ can be found at: http://fortawesome.github.com/Font-Awesome/
6
+
7
+ License
8
+ -------------------------------------------------------
9
+ The Font Awesome webfont, CSS, and LESS files are licensed under CC BY 3.0:
10
+ http://creativecommons.org/licenses/by/3.0/ A mention of
11
+ 'Font Awesome - http://fortawesome.github.com/Font-Awesome' in human-readable
12
+ source code is considered acceptable attribution (most common on the web).
13
+ If human readable source code is not available to the end user, a mention in
14
+ an 'About' or 'Credits' screen is considered acceptable (most common in desktop
15
+ or mobile software).
16
+
17
+ Contact
18
+ -------------------------------------------------------
19
+ Email: dave@davegandy.com
20
+ Twitter: http://twitter.com/fortaweso_me
21
+ Work: Lead Product Designer @ http://kyruus.com
22
+
23
+ */
24
+
25
+ @import "compass/css3/font-face";
26
+ $fontAwesomePath: "/font/fontawesome-webfont" !default;
27
+
28
+ @include font-face(
29
+ 'FontAwesome',
30
+ font-files(
31
+ "#{$fontAwesomePath}.woff", woff,
32
+ "#{$fontAwesomePath}.ttf", truetype,
33
+ "#{$fontAwesomePath}.svg#FontAwesomeRegular", svg),
34
+ '#{$fontAwesomePath}.eot',
35
+ normal,
36
+ normal);
37
+
38
+ /* Font Awesome styles
39
+ ------------------------------------------------------- */
40
+ [class^="icon-"]:before,
41
+ [class*=" icon-"]:before {
42
+ font-family: FontAwesome;
43
+ font-weight: normal;
44
+ font-style: normal;
45
+ display: inline-block;
46
+ text-decoration: inherit;
47
+ }
48
+
49
+ a [class^="icon-"],
50
+ a [class*=" icon-"] {
51
+ display: inline-block;
52
+ text-decoration: inherit;
53
+ }
54
+
55
+ /* makes the font 33% larger relative to the icon container */
56
+ .icon-large:before {
57
+ vertical-align: middle;
58
+ font-size: 4/3em;
59
+ }
60
+
61
+ .btn, .nav-tabs {
62
+ [class^="icon-"],
63
+ [class*=" icon-"] {
64
+ /* keeps button heights with and without icons the same */
65
+ line-height: .9em;
66
+ }
67
+ }
68
+
69
+ li {
70
+ [class^="icon-"],
71
+ [class*=" icon-"] {
72
+ display: inline-block;
73
+ width: 1.25em;
74
+ text-align: center;
75
+ }
76
+ .icon-large:before,
77
+ .icon-large:before {
78
+ /* 1.5 increased font size for icon-large * 1.25 width */
79
+ width: 1.5*1.25em;
80
+ }
81
+ }
82
+
83
+ ul.icons {
84
+ list-style-type: none;
85
+ margin-left: 2em;
86
+ text-indent: -.8em;
87
+
88
+ li {
89
+ [class^="icon-"],
90
+ [class*=" icon-"] {
91
+ width: .8em;
92
+ }
93
+ .icon-large:before,
94
+ .icon-large:before {
95
+ /* 1.5 increased font size for icon-large * 1.25 width */
96
+ vertical-align: initial;
97
+ // width: 1.5*1.25em;
98
+ }
99
+ }
100
+ }
101
+
102
+ /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
103
+ readers do not read off random characters that represent icons */
104
+ .icon-glass:before { content: "\f000"; }
105
+ .icon-music:before { content: "\f001"; }
106
+ .icon-search:before { content: "\f002"; }
107
+ .icon-envelope:before { content: "\f003"; }
108
+ .icon-heart:before { content: "\f004"; }
109
+ .icon-star:before { content: "\f005"; }
110
+ .icon-star-empty:before { content: "\f006"; }
111
+ .icon-user:before { content: "\f007"; }
112
+ .icon-film:before { content: "\f008"; }
113
+ .icon-th-large:before { content: "\f009"; }
114
+ .icon-th:before { content: "\f00a"; }
115
+ .icon-th-list:before { content: "\f00b"; }
116
+ .icon-ok:before { content: "\f00c"; }
117
+ .icon-remove:before { content: "\f00d"; }
118
+ .icon-zoom-in:before { content: "\f00e"; }
119
+
120
+ .icon-zoom-out:before { content: "\f010"; }
121
+ .icon-off:before { content: "\f011"; }
122
+ .icon-signal:before { content: "\f012"; }
123
+ .icon-cog:before { content: "\f013"; }
124
+ .icon-trash:before { content: "\f014"; }
125
+ .icon-home:before { content: "\f015"; }
126
+ .icon-file:before { content: "\f016"; }
127
+ .icon-time:before { content: "\f017"; }
128
+ .icon-road:before { content: "\f018"; }
129
+ .icon-download-alt:before { content: "\f019"; }
130
+ .icon-download:before { content: "\f01a"; }
131
+ .icon-upload:before { content: "\f01b"; }
132
+ .icon-inbox:before { content: "\f01c"; }
133
+ .icon-play-circle:before { content: "\f01d"; }
134
+ .icon-repeat:before { content: "\f01e"; }
135
+
136
+ /* \f020 doesn't work in Safari. all shifted one down */
137
+ .icon-refresh:before { content: "\f021"; }
138
+ .icon-list-alt:before { content: "\f022"; }
139
+ .icon-lock:before { content: "\f023"; }
140
+ .icon-flag:before { content: "\f024"; }
141
+ .icon-headphones:before { content: "\f025"; }
142
+ .icon-volume-off:before { content: "\f026"; }
143
+ .icon-volume-down:before { content: "\f027"; }
144
+ .icon-volume-up:before { content: "\f028"; }
145
+ .icon-qrcode:before { content: "\f029"; }
146
+ .icon-barcode:before { content: "\f02a"; }
147
+ .icon-tag:before { content: "\f02b"; }
148
+ .icon-tags:before { content: "\f02c"; }
149
+ .icon-book:before { content: "\f02d"; }
150
+ .icon-bookmark:before { content: "\f02e"; }
151
+ .icon-print:before { content: "\f02f"; }
152
+
153
+ .icon-camera:before { content: "\f030"; }
154
+ .icon-font:before { content: "\f031"; }
155
+ .icon-bold:before { content: "\f032"; }
156
+ .icon-italic:before { content: "\f033"; }
157
+ .icon-text-height:before { content: "\f034"; }
158
+ .icon-text-width:before { content: "\f035"; }
159
+ .icon-align-left:before { content: "\f036"; }
160
+ .icon-align-center:before { content: "\f037"; }
161
+ .icon-align-right:before { content: "\f038"; }
162
+ .icon-align-justify:before { content: "\f039"; }
163
+ .icon-list:before { content: "\f03a"; }
164
+ .icon-indent-left:before { content: "\f03b"; }
165
+ .icon-indent-right:before { content: "\f03c"; }
166
+ .icon-facetime-video:before { content: "\f03d"; }
167
+ .icon-picture:before { content: "\f03e"; }
168
+
169
+ .icon-pencil:before { content: "\f040"; }
170
+ .icon-map-marker:before { content: "\f041"; }
171
+ .icon-adjust:before { content: "\f042"; }
172
+ .icon-tint:before { content: "\f043"; }
173
+ .icon-edit:before { content: "\f044"; }
174
+ .icon-share:before { content: "\f045"; }
175
+ .icon-check:before { content: "\f046"; }
176
+ .icon-move:before { content: "\f047"; }
177
+ .icon-step-backward:before { content: "\f048"; }
178
+ .icon-fast-backward:before { content: "\f049"; }
179
+ .icon-backward:before { content: "\f04a"; }
180
+ .icon-play:before { content: "\f04b"; }
181
+ .icon-pause:before { content: "\f04c"; }
182
+ .icon-stop:before { content: "\f04d"; }
183
+ .icon-forward:before { content: "\f04e"; }
184
+
185
+ .icon-fast-forward:before { content: "\f050"; }
186
+ .icon-step-forward:before { content: "\f051"; }
187
+ .icon-eject:before { content: "\f052"; }
188
+ .icon-chevron-left:before { content: "\f053"; }
189
+ .icon-chevron-right:before { content: "\f054"; }
190
+ .icon-plus-sign:before { content: "\f055"; }
191
+ .icon-minus-sign:before { content: "\f056"; }
192
+ .icon-remove-sign:before { content: "\f057"; }
193
+ .icon-ok-sign:before { content: "\f058"; }
194
+ .icon-question-sign:before { content: "\f059"; }
195
+ .icon-info-sign:before { content: "\f05a"; }
196
+ .icon-screenshot:before { content: "\f05b"; }
197
+ .icon-remove-circle:before { content: "\f05c"; }
198
+ .icon-ok-circle:before { content: "\f05d"; }
199
+ .icon-ban-circle:before { content: "\f05e"; }
200
+
201
+ .icon-arrow-left:before { content: "\f060"; }
202
+ .icon-arrow-right:before { content: "\f061"; }
203
+ .icon-arrow-up:before { content: "\f062"; }
204
+ .icon-arrow-down:before { content: "\f063"; }
205
+ .icon-share-alt:before { content: "\f064"; }
206
+ .icon-resize-full:before { content: "\f065"; }
207
+ .icon-resize-small:before { content: "\f066"; }
208
+ .icon-plus:before { content: "\f067"; }
209
+ .icon-minus:before { content: "\f068"; }
210
+ .icon-asterisk:before { content: "\f069"; }
211
+ .icon-exclamation-sign:before { content: "\f06a"; }
212
+ .icon-gift:before { content: "\f06b"; }
213
+ .icon-leaf:before { content: "\f06c"; }
214
+ .icon-fire:before { content: "\f06d"; }
215
+ .icon-eye-open:before { content: "\f06e"; }
216
+
217
+ .icon-eye-close:before { content: "\f070"; }
218
+ .icon-warning-sign:before { content: "\f071"; }
219
+ .icon-plane:before { content: "\f072"; }
220
+ .icon-calendar:before { content: "\f073"; }
221
+ .icon-random:before { content: "\f074"; }
222
+ .icon-comment:before { content: "\f075"; }
223
+ .icon-magnet:before { content: "\f076"; }
224
+ .icon-chevron-up:before { content: "\f077"; }
225
+ .icon-chevron-down:before { content: "\f078"; }
226
+ .icon-retweet:before { content: "\f079"; }
227
+ .icon-shopping-cart:before { content: "\f07a"; }
228
+ .icon-folder-close:before { content: "\f07b"; }
229
+ .icon-folder-open:before { content: "\f07c"; }
230
+ .icon-resize-vertical:before { content: "\f07d"; }
231
+ .icon-resize-horizontal:before { content: "\f07e"; }
232
+
233
+ .icon-bar-chart:before { content: "\f080"; }
234
+ .icon-twitter-sign:before { content: "\f081"; }
235
+ .icon-facebook-sign:before { content: "\f082"; }
236
+ .icon-camera-retro:before { content: "\f083"; }
237
+ .icon-key:before { content: "\f084"; }
238
+ .icon-cogs:before { content: "\f085"; }
239
+ .icon-comments:before { content: "\f086"; }
240
+ .icon-thumbs-up:before { content: "\f087"; }
241
+ .icon-thumbs-down:before { content: "\f088"; }
242
+ .icon-star-half:before { content: "\f089"; }
243
+ .icon-heart-empty:before { content: "\f08a"; }
244
+ .icon-signout:before { content: "\f08b"; }
245
+ .icon-linkedin-sign:before { content: "\f08c"; }
246
+ .icon-pushpin:before { content: "\f08d"; }
247
+ .icon-external-link:before { content: "\f08e"; }
248
+
249
+ .icon-signin:before { content: "\f090"; }
250
+ .icon-trophy:before { content: "\f091"; }
251
+ .icon-github-sign:before { content: "\f092"; }
252
+ .icon-upload-alt:before { content: "\f093"; }
253
+ .icon-lemon:before { content: "\f094"; }
254
+ .icon-phone:before { content: "\f095"; }
255
+ .icon-check-empty:before { content: "\f096"; }
256
+ .icon-bookmark-empty:before { content: "\f097"; }
257
+ .icon-phone-sign:before { content: "\f098"; }
258
+ .icon-twitter:before { content: "\f099"; }
259
+ .icon-facebook:before { content: "\f09a"; }
260
+ .icon-github:before { content: "\f09b"; }
261
+ .icon-unlock:before { content: "\f09c"; }
262
+ .icon-credit-card:before { content: "\f09d"; }
263
+ .icon-rss:before { content: "\f09e"; }
264
+
265
+ .icon-hdd:before { content: "\f0a0"; }
266
+ .icon-bullhorn:before { content: "\f0a1"; }
267
+ .icon-bell:before { content: "\f0a2"; }
268
+ .icon-certificate:before { content: "\f0a3"; }
269
+ .icon-hand-right:before { content: "\f0a4"; }
270
+ .icon-hand-left:before { content: "\f0a5"; }
271
+ .icon-hand-up:before { content: "\f0a6"; }
272
+ .icon-hand-down:before { content: "\f0a7"; }
273
+ .icon-circle-arrow-left:before { content: "\f0a8"; }
274
+ .icon-circle-arrow-right:before { content: "\f0a9"; }
275
+ .icon-circle-arrow-up:before { content: "\f0aa"; }
276
+ .icon-circle-arrow-down:before { content: "\f0ab"; }
277
+ .icon-globe:before { content: "\f0ac"; }
278
+ .icon-wrench:before { content: "\f0ad"; }
279
+ .icon-tasks:before { content: "\f0ae"; }
280
+
281
+ .icon-filter:before { content: "\f0b0"; }
282
+ .icon-briefcase:before { content: "\f0b1"; }
283
+ .icon-fullscreen:before { content: "\f0b2"; }
284
+
285
+ .icon-group:before { content: "\f0c0"; }
286
+ .icon-link:before { content: "\f0c1"; }
287
+ .icon-cloud:before { content: "\f0c2"; }
288
+ .icon-beaker:before { content: "\f0c3"; }
289
+ .icon-cut:before { content: "\f0c4"; }
290
+ .icon-copy:before { content: "\f0c5"; }
291
+ .icon-paper-clip:before { content: "\f0c6"; }
292
+ .icon-save:before { content: "\f0c7"; }
293
+ .icon-sign-blank:before { content: "\f0c8"; }
294
+ .icon-reorder:before { content: "\f0c9"; }
295
+ .icon-list-ul:before { content: "\f0ca"; }
296
+ .icon-list-ol:before { content: "\f0cb"; }
297
+ .icon-strikethrough:before { content: "\f0cc"; }
298
+ .icon-underline:before { content: "\f0cd"; }
299
+ .icon-table:before { content: "\f0ce"; }
300
+
301
+ .icon-magic:before { content: "\f0d0"; }
302
+ .icon-truck:before { content: "\f0d1"; }
303
+ .icon-pinterest:before { content: "\f0d2"; }
304
+ .icon-pinterest-sign:before { content: "\f0d3"; }
305
+ .icon-google-plus-sign:before { content: "\f0d4"; }
306
+ .icon-google-plus:before { content: "\f0d5"; }
307
+ .icon-money:before { content: "\f0d6"; }
308
+ .icon-caret-down:before { content: "\f0d7"; }
309
+ .icon-caret-up:before { content: "\f0d8"; }
310
+ .icon-caret-left:before { content: "\f0d9"; }
311
+ .icon-caret-right:before { content: "\f0da"; }
312
+ .icon-columns:before { content: "\f0db"; }
313
+ .icon-sort:before { content: "\f0dc"; }
314
+ .icon-sort-down:before { content: "\f0dd"; }
315
+ .icon-sort-up:before { content: "\f0de"; }
316
+
317
+ .icon-envelope-alt:before { content: "\f0e0"; }
318
+ .icon-linkedin:before { content: "\f0e1"; }
319
+ .icon-undo:before { content: "\f0e2"; }
320
+ .icon-legal:before { content: "\f0e3"; }
321
+ .icon-dashboard:before { content: "\f0e4"; }
322
+ .icon-comment-alt:before { content: "\f0e5"; }
323
+ .icon-comments-alt:before { content: "\f0e6"; }
324
+ .icon-bolt:before { content: "\f0e7"; }
325
+ .icon-sitemap:before { content: "\f0e8"; }
326
+ .icon-umbrella:before { content: "\f0e9"; }
327
+ .icon-paste:before { content: "\f0ea"; }
328
+
329
+ .icon-user-md:before { content: "\f200"; }
@@ -0,0 +1,131 @@
1
+ @import 'font-awesome';
2
+
3
+ // Quick FontAwesome fix so icons push the sentence
4
+ // a bit to the right
5
+ [class^="icon-"]:before { margin-right : .5rem }
6
+
7
+ * {
8
+ margin : 0;
9
+ padding : 0;
10
+ outline : 0;
11
+ border : 0;
12
+ -webkit-box-sizing : border-box
13
+ }
14
+
15
+ ul { list-style : none }
16
+ input, button, textarea { font-size : 100% }
17
+
18
+ html { height : 100%; min-height : 420px; font-size : 62.5%; overflow-x : hidden }
19
+ html, body { height : 99.9% }
20
+ body {
21
+ font-size : 1.5rem;
22
+ line-height : 2.3rem;
23
+ width : 100%;
24
+ -webkit-perspective : 800;
25
+ -webkit-text-size-adjust : none;
26
+ -webkit-transform-style : preserve-3d;
27
+ -webkit-user-select : none;
28
+ }
29
+
30
+ // A base section unit. Think of this as a "screen".
31
+ body > section {
32
+ display : block;
33
+ position : absolute;
34
+ padding : 1.6rem 0;
35
+ top : 0;
36
+ left : 0;
37
+ width : 100%;
38
+ opacity : 0;
39
+ overflow : auto;
40
+ overflow-x : hidden;
41
+ pointer-events : none;
42
+ -webkit-transition : all 0.25s ease-in-out;
43
+ -webkit-transform-style : preserve-3d;
44
+ -webkit-transform : translate3d(100%,0%,0);
45
+ &>*:not(header) {
46
+ margin-left : 1rem !important;
47
+ margin-right : 1rem !important;
48
+ }
49
+ &.current {
50
+ opacity : 1;
51
+ pointer-events : auto;
52
+ -webkit-transform : translate3d(0%,0%, 0)
53
+ }
54
+ }
55
+
56
+ // Floating header, header stuffs
57
+ body > section > header {
58
+ margin : 0;
59
+ text-align : center;
60
+ &.fixed {
61
+ position : fixed;
62
+ top : 0;
63
+ left : 0;
64
+ width : 100%;
65
+ z-index : 10000
66
+ }
67
+ & + * { margin-top : 4.6rem !important }
68
+ h1 {
69
+ font-size : 1.9rem;
70
+ margin : 0.9rem 0;
71
+ white-space : nowrap
72
+ }
73
+ a {
74
+ position : absolute;
75
+ font-size : 1.9rem;
76
+ margin-top : 0.9rem;
77
+ text-decoration : none;
78
+ &.left { left : 1.6rem }
79
+ &.right { right : 1.6rem }
80
+ }
81
+ }
82
+
83
+ // Type margins and sizes
84
+ body > section {
85
+ h1 { font-size: 2.9rem; margin-bottom : 1.6rem }
86
+ h2 { font-size: 2.6rem; margin: 1.3rem 0 }
87
+ p, input, textarea, button, li { font-size : 1.8rem }
88
+ p { margin : 0.9rem 0 }
89
+ }
90
+
91
+ form {
92
+ margin : 1.3rem 0;
93
+ label {
94
+ display : block;
95
+ margin : 0.25em 0;
96
+ font-weight : bold;
97
+ }
98
+ input, textarea {
99
+ display : block;
100
+ padding : 0.9rem;
101
+ width : 100%;
102
+ font-family : inherit;
103
+ }
104
+ }
105
+
106
+ ul.common {
107
+ li {
108
+ padding : 0.9rem;
109
+ }
110
+ }
111
+
112
+ // Rules for opting-in
113
+ .t-centered { text-align : center }
114
+ .t-padded-top { padding-top : 5rem }
115
+ .t-left-align { text-align : left }
116
+ h1.t-bigger { font-size : 3.9rem }
117
+
118
+
119
+ #notifications {
120
+ position : fixed;
121
+ right : 0;
122
+ bottom : 0;
123
+ left : 0;
124
+ li {
125
+ display : none;
126
+ padding : 0.6rem 1rem;
127
+ font-weight : bold;
128
+ font-size : 1.6rem;
129
+ &:before { margin-right : 1rem }
130
+ }
131
+ }
@@ -0,0 +1,71 @@
1
+ @import 'compass/css3/border-radius';
2
+ @import 'compass/css3/images';
3
+ @import 'compass/css3/box-shadow';
4
+
5
+ $hot : #d5253e;
6
+ $body-background : #f8f8f8;
7
+ $default-text-color : black;
8
+ $header-background : $hot;
9
+ $header-text : white;
10
+ $list-border : rgba(black,.75);
11
+ $list-text : black;
12
+ $list-background : white;
13
+ $link-color : $hot;
14
+ $textfield-background : -webkit-gradient(linear, 0% 0%, 0% 18%, from(#efefef), to(#FFFFFF));
15
+ $button-background : -webkit-gradient(linear, 0% 0%, 0% 100%, from(#F5D201), to(#f5a101));
16
+ $notifications-background : rgba(0,0,0,.9);
17
+ $notifications-color : white;
18
+ $headings-color : $hot;
19
+
20
+ body {
21
+ background : $body-background;
22
+ color : $default-text-color;
23
+ font-family : 'PT Sans Narrow', 'Helvetica Neue';
24
+ }
25
+
26
+ body > section > header {
27
+ @include box-shadow(0 0 0.25rem rgba(black,.75));
28
+ background : $header-background;
29
+ h1 {
30
+ color : $header-text;
31
+ text-transform : uppercase;
32
+ text-align : center;
33
+ }
34
+ }
35
+
36
+ // General text colours
37
+ a { color : $link-color }
38
+ h1, h2 { color : $headings-color }
39
+
40
+ // Constructs
41
+ ul.common {
42
+ @include border-radius(0.6rem);
43
+ @include box-shadow(0 0 0.25rem rgba(black,.75));
44
+ color : $list-text;
45
+ background : transparent;
46
+ li {
47
+ border-top : 1px solid lighten($list-border, 75%);
48
+ font-weight : bold;
49
+ background : $list-background;
50
+ &:first-child {
51
+ @include border-top-right-radius(0.6rem);
52
+ @include border-top-left-radius(0.6rem);
53
+ border-top: 0
54
+ }
55
+ &:last-child {
56
+ @include border-bottom-right-radius(0.6rem);
57
+ @include border-bottom-left-radius(0.6rem);
58
+ }
59
+ }
60
+ }
61
+
62
+ input {
63
+ @include box-shadow(0 0 0.25rem rgba(black,.75));
64
+ @include border-radius(0.3rem);
65
+ background : $textfield-background;
66
+ }
67
+
68
+ #notifications {
69
+ background : $notifications-background;
70
+ color : $notifications-color
71
+ }
data/spec/app_spec.rb ADDED
@@ -0,0 +1,44 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Tres::App do
4
+ before do
5
+ FileUtils.rm_rf TMP/'temp'
6
+ @app = Tres::App.new TMP/'temp'
7
+ end
8
+
9
+ it 'opens an existing app with Tres::All.open' do
10
+ stub_listener!
11
+ an_app = Tres::App.open TMP/'temp'
12
+ an_app.should be_a Tres::App
13
+ end
14
+
15
+ context 'creating a new app' do
16
+ before { stub_listener! }
17
+
18
+ it "creates a folder for the app on" do
19
+ File.directory?(TMP/'temp').should be_true
20
+ end
21
+
22
+ it "creates a assets folder with scripts and styles in it" do
23
+ File.directory?(TMP/'temp'/'assets').should be_true
24
+ File.directory?(TMP/'temp'/'assets'/'stylesheets').should be_true
25
+ File.directory?(TMP/'temp'/'assets'/'javascripts').should be_true
26
+ end
27
+
28
+ it "creates a build folder in the app's folder" do
29
+ File.directory?(TMP/'temp'/'build').should be_true
30
+ end
31
+
32
+ it "creates an asset packager" do
33
+ @app.asset_packager.should be_a Tres::AssetPackager
34
+ end
35
+
36
+ it "creates a template compiler" do
37
+ @app.template_compiler.should be_a Tres::TemplateCompiler
38
+ end
39
+
40
+ it "creates a listener for templates" do
41
+ @app.listeners.templates.should_not be_nil # yeah, sorta
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,74 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Tres::AssetPackager do
4
+ before do
5
+ stub_listener!
6
+ @packager = Tres::AssetPackager.new :root => Anagen.root, :logger => MEMLOGGER
7
+ end
8
+
9
+ let(:sprockets) { @packager.sprockets }
10
+
11
+ it "keeps a sprockets environment in .sprockets" do
12
+ sprockets.should be_a Sprockets::Environment
13
+ end
14
+
15
+ context "opening Anagen" do
16
+ it "has `anagen.js` in js/anagen.js" do
17
+ sprockets['javascripts/anagen.js'].should be_a Sprockets::BundledAsset
18
+ end
19
+
20
+ it "has `app.css` in css/app.css" do
21
+ sprockets['stylesheets/app.css'].should be_a Sprockets::BundledAsset
22
+ end
23
+ end
24
+
25
+ context "JavaScripts require paths" do
26
+ it "should find anything under <APP ROOT>/assets/javascripts" do
27
+ sprockets['javascripts/all.js'].should be_a Sprockets::BundledAsset
28
+ end
29
+ end
30
+
31
+ context "SASS require paths" do
32
+ it "adds Tres' own styles to the path" do
33
+ sprockets['stylesheets/with_imports.scss'].should be_a Sprockets::BundledAsset
34
+ end
35
+ end
36
+
37
+ context 'compiling assets to static format' do
38
+ after { clean_build! }
39
+
40
+ it 'compiles stylesheets do the same path found in sprockets' do
41
+ @packager.compile_to_build 'stylesheets/app.css'
42
+ (Anagen.build/'stylesheets'/'app.css').contents.should == sprockets['stylesheets/app.css'].to_s
43
+ end
44
+ end
45
+
46
+ context 'creating scripts' do
47
+ after { restore_anagen! }
48
+
49
+ it 'creates a new coffeescript if the extension is .coffee' do
50
+ @packager.new_script 'about.coffee'
51
+ File.exists?(Anagen.assets/'javascripts'/'about.coffee').should be_true
52
+ end
53
+
54
+ it 'creates a new javascript if the extension is .js' do
55
+ @packager.new_script 'about.js'
56
+ File.exists?(Anagen.assets/'javascripts'/'about.js').should be_true
57
+ end
58
+
59
+ it 'defaults to .coffee if no extension is provided' do
60
+ @packager.new_script 'about'
61
+ File.exists?(Anagen.assets/'javascripts'/'about.coffee').should be_true
62
+ end
63
+
64
+ it 'creates the directories to a path if necessary' do
65
+ @packager.new_script 'about/index.js'
66
+ File.directory?(Anagen.assets/'javascripts'/'about').should be_true
67
+ end
68
+
69
+ it 'raises ScriptExistsError if a script with the same path exists' do
70
+ @packager.new_script 'about/index.js'
71
+ lambda { @packager.new_script 'about/index.js' }.should raise_error(Tres::ScriptExistsError)
72
+ end
73
+ end
74
+ end