hullapp 0.0.1

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 (102) hide show
  1. data/.DS_Store +0 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +66 -0
  6. data/Rakefile +1 -0
  7. data/bin/hull +15 -0
  8. data/hullapp.gemspec +27 -0
  9. data/lib/hull.rb +6 -0
  10. data/lib/hull/cli.rb +124 -0
  11. data/lib/hull/version.rb +3 -0
  12. data/templates/.DS_Store +0 -0
  13. data/templates/hullenv.tt +4 -0
  14. data/templates/ruby/.gitignore +7 -0
  15. data/templates/ruby/.powenv +8 -0
  16. data/templates/ruby/.powrc +5 -0
  17. data/templates/ruby/.rvmrc.tt +1 -0
  18. data/templates/ruby/Gemfile +50 -0
  19. data/templates/ruby/Guardfile +8 -0
  20. data/templates/ruby/Procfile +4 -0
  21. data/templates/ruby/README.md +198 -0
  22. data/templates/ruby/Rakefile +40 -0
  23. data/templates/ruby/application/assets.rb +7 -0
  24. data/templates/ruby/application/assets/images/icons/facebook.png +0 -0
  25. data/templates/ruby/application/assets/images/icons/twitter.png +0 -0
  26. data/templates/ruby/application/assets/images/socialmedia/app-store.png +0 -0
  27. data/templates/ruby/application/assets/images/socialmedia/dribbble.png +0 -0
  28. data/templates/ruby/application/assets/images/socialmedia/facebook.png +0 -0
  29. data/templates/ruby/application/assets/images/socialmedia/flickr.png +0 -0
  30. data/templates/ruby/application/assets/images/socialmedia/forrst.png +0 -0
  31. data/templates/ruby/application/assets/images/socialmedia/foursquare.png +0 -0
  32. data/templates/ruby/application/assets/images/socialmedia/github.png +0 -0
  33. data/templates/ruby/application/assets/images/socialmedia/google-plus.png +0 -0
  34. data/templates/ruby/application/assets/images/socialmedia/google.png +0 -0
  35. data/templates/ruby/application/assets/images/socialmedia/instagram.png +0 -0
  36. data/templates/ruby/application/assets/images/socialmedia/linkedin.png +0 -0
  37. data/templates/ruby/application/assets/images/socialmedia/skype.png +0 -0
  38. data/templates/ruby/application/assets/images/socialmedia/social-email.png +0 -0
  39. data/templates/ruby/application/assets/images/socialmedia/social-rss.png +0 -0
  40. data/templates/ruby/application/assets/images/socialmedia/spotify.png +0 -0
  41. data/templates/ruby/application/assets/images/socialmedia/tumblr.png +0 -0
  42. data/templates/ruby/application/assets/images/socialmedia/twitter-2.png +0 -0
  43. data/templates/ruby/application/assets/images/socialmedia/twitter.png +0 -0
  44. data/templates/ruby/application/assets/images/socialmedia/vimeo.png +0 -0
  45. data/templates/ruby/application/assets/images/socialmedia/youtube.png +0 -0
  46. data/templates/ruby/application/assets/javascripts/app.js +11 -0
  47. data/templates/ruby/application/assets/javascripts/main.coffee +17 -0
  48. data/templates/ruby/application/assets/javascripts/template.js.erb +1 -0
  49. data/templates/ruby/application/assets/stylesheets/partials/_base.scss +17 -0
  50. data/templates/ruby/application/assets/stylesheets/partials/_boilerplate.scss +291 -0
  51. data/templates/ruby/application/assets/stylesheets/partials/_colors.scss +0 -0
  52. data/templates/ruby/application/assets/stylesheets/partials/_fonts.scss +1 -0
  53. data/templates/ruby/application/assets/stylesheets/partials/_h5bp.scss +298 -0
  54. data/templates/ruby/application/assets/stylesheets/partials/_layout.scss +12 -0
  55. data/templates/ruby/application/assets/stylesheets/partials/_normalize.scss +504 -0
  56. data/templates/ruby/application/assets/stylesheets/partials/_variables.scss +28 -0
  57. data/templates/ruby/application/assets/stylesheets/style.scss +16 -0
  58. data/templates/ruby/application/assets/templates/hello.hbs +1 -0
  59. data/templates/ruby/application/compass.rb +27 -0
  60. data/templates/ruby/application/core.rb +15 -0
  61. data/templates/ruby/application/core_extensions/blank.rb +111 -0
  62. data/templates/ruby/application/core_extensions/hash.rb +34 -0
  63. data/templates/ruby/application/core_extensions/sprockets.rb +74 -0
  64. data/templates/ruby/application/core_extensions/try.rb +57 -0
  65. data/templates/ruby/application/helpers.rb +121 -0
  66. data/templates/ruby/application/helpers/form_tag_helpers.rb +127 -0
  67. data/templates/ruby/application/helpers/notification_helpers.rb +20 -0
  68. data/templates/ruby/application/helpers/run_later.rb +111 -0
  69. data/templates/ruby/application/settings.rb +8 -0
  70. data/templates/ruby/application/views/demo.erb +27 -0
  71. data/templates/ruby/application/views/index.erb +9 -0
  72. data/templates/ruby/application/views/layout.erb +45 -0
  73. data/templates/ruby/application/workers.rb +0 -0
  74. data/templates/ruby/config.ru +84 -0
  75. data/templates/ruby/config/settings.yml +53 -0
  76. data/templates/ruby/config/sidekiq.yml +11 -0
  77. data/templates/ruby/config/unicorn.rb +91 -0
  78. data/templates/ruby/public/.htaccess +538 -0
  79. data/templates/ruby/public/404.html +157 -0
  80. data/templates/ruby/public/apple-touch-icon-114x114-precomposed.png +0 -0
  81. data/templates/ruby/public/apple-touch-icon-144x144-precomposed.png +0 -0
  82. data/templates/ruby/public/apple-touch-icon-57x57-precomposed.png +0 -0
  83. data/templates/ruby/public/apple-touch-icon-72x72-precomposed.png +0 -0
  84. data/templates/ruby/public/apple-touch-icon-precomposed.png +0 -0
  85. data/templates/ruby/public/apple-touch-icon.png +0 -0
  86. data/templates/ruby/public/crossdomain.xml +15 -0
  87. data/templates/ruby/public/favicon.ico +0 -0
  88. data/templates/ruby/public/humans.txt +15 -0
  89. data/templates/ruby/public/robots.txt +5 -0
  90. data/templates/ruby/vendor/assets/images/glyphicons-halflings-white.png +0 -0
  91. data/templates/ruby/vendor/assets/images/glyphicons-halflings.png +0 -0
  92. data/templates/ruby/vendor/assets/javascripts/backbone.js +1431 -0
  93. data/templates/ruby/vendor/assets/javascripts/bootstrap.js +2027 -0
  94. data/templates/ruby/vendor/assets/javascripts/index.js +0 -0
  95. data/templates/ruby/vendor/assets/javascripts/jquery.js +9227 -0
  96. data/templates/ruby/vendor/assets/javascripts/modernizr.js +11 -0
  97. data/templates/ruby/vendor/assets/javascripts/underscore.js +1059 -0
  98. data/templates/ruby/vendor/assets/javascripts/vendor.js +2 -0
  99. data/templates/ruby/vendor/assets/stylesheets/bootstrap-responsive.css +1040 -0
  100. data/templates/ruby/vendor/assets/stylesheets/bootstrap.css +5624 -0
  101. data/templates/ruby/vendor/assets/stylesheets/vendor.scss +2 -0
  102. metadata +243 -0
@@ -0,0 +1,40 @@
1
+ # Inspired from
2
+ # https://gist.github.com/1576435
3
+
4
+ require 'rubygems' if RUBY_VERSION < '1.9'
5
+ require 'bundler' # gem requires
6
+ require 'fileutils'
7
+ require 'rake'
8
+ require 'rake/sprocketstask'
9
+
10
+ PROJECT_ROOT = File.expand_path(File.dirname(__FILE__))
11
+ require './application/settings'
12
+ require './application/core_extensions/sprockets'
13
+
14
+ Bundler.require
15
+
16
+ %w(./application/settings ./application/core ./application/assets).each do |requirement|
17
+ require requirement
18
+ end
19
+
20
+
21
+ # The default, if you just run `rake` in this directory, will list all the available tasks
22
+ task :default do
23
+ puts "All available rake tasks"
24
+ system('rake -T')
25
+ end
26
+
27
+ desc "Start Unicorn in development mode and get memcached running"
28
+ task :s do
29
+ system("bundle exec foreman start")
30
+ end
31
+
32
+ desc "Precompile assets"
33
+ namespace :assets do
34
+
35
+ task :precompile do
36
+ puts "Precompiling assets...\n"
37
+ configure_sprockets :precompile => true
38
+ end
39
+
40
+ end
@@ -0,0 +1,7 @@
1
+ require "./application/core_extensions/sprockets"
2
+
3
+ set :sprockets, SPROCKETS
4
+ configure do
5
+ configure_sprockets
6
+ end
7
+
@@ -0,0 +1,11 @@
1
+ //= require template
2
+ //= require main
3
+
4
+ // Twitter widgets
5
+ !function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src='http://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document,'script','twitter-wjs');
6
+
7
+ // Google Analytics
8
+ var _gaq=[['_setAccount','<?=Settings.google_analytics%>'],['_trackPageview']];
9
+ (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
10
+ g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
11
+ s.parentNode.insertBefore(g,s)}(document,'script'));
@@ -0,0 +1,17 @@
1
+ # Avoid `console` errors in browsers that lack a console.
2
+ unless window.console and console.log
3
+ (->
4
+ noop = ->
5
+
6
+ methods = ["assert", "clear", "count", "debug", "dir", "dirxml", "error", "exception", "group", "groupCollapsed", "groupEnd", "info", "log", "markTimeline", "profile", "profileEnd", "markTimeline", "table", "time", "timeEnd", "timeStamp", "trace", "warn"]
7
+ length = methods.length
8
+ console = window.console = {}
9
+ console[methods[length]] = noop while length--
10
+ )()
11
+
12
+ body = {}
13
+
14
+ # woo jquery
15
+ jQuery ($) ->
16
+ # cache body reference. Faster lookups
17
+ body = $('body')
@@ -0,0 +1 @@
1
+ //=require_tree ../templates
@@ -0,0 +1,17 @@
1
+ /* baseline */
2
+ @include establish-baseline;
3
+
4
+ /* apply a natural box layout model to all elements */
5
+ * { @include box-sizing(border-box); }
6
+
7
+ /* styyyling */
8
+ body {
9
+ background: $bg-color;
10
+ color: $black;
11
+ font: {
12
+ family: "Helvetica Neue", Helvetica, Arial, sans-serif;
13
+ weight: 400;
14
+ }
15
+ padding: 0;
16
+ text-rendering: optimizeLegibility;
17
+ }
@@ -0,0 +1,291 @@
1
+ /*
2
+ * HTML5 Boilerplate
3
+ *
4
+ * What follows is the result of much research on cross-browser styling.
5
+ * Credit left inline and big thanks to Nicolas Gallagher, Jonathan Neal,
6
+ * Kroc Camen, and the H5BP dev community and team.
7
+ */
8
+
9
+ /* ==========================================================================
10
+ Base styles: opinionated defaults
11
+ ========================================================================== */
12
+
13
+ html,
14
+ button,
15
+ input,
16
+ select,
17
+ textarea {
18
+ color: #222;
19
+ }
20
+
21
+ body {
22
+ font-size: 1em;
23
+ line-height: 1.4;
24
+ }
25
+
26
+ a {
27
+ color: #00e;
28
+ }
29
+
30
+ a:visited {
31
+ color: #551a8b;
32
+ }
33
+
34
+ a:hover {
35
+ color: #06e;
36
+ }
37
+
38
+ /*
39
+ * Remove text-shadow in selection highlight: h5bp.com/i
40
+ * These selection declarations have to be separate.
41
+ * Customize the background color to match your design.
42
+ */
43
+
44
+ ::-moz-selection {
45
+ background: #b3d4fc;
46
+ text-shadow: none;
47
+ }
48
+
49
+ ::selection {
50
+ background: #b3d4fc;
51
+ text-shadow: none;
52
+ }
53
+
54
+ /*
55
+ * A better looking default horizontal rule
56
+ */
57
+
58
+ hr {
59
+ display: block;
60
+ height: 1px;
61
+ border: 0;
62
+ border-top: 1px solid #ccc;
63
+ margin: 1em 0;
64
+ padding: 0;
65
+ }
66
+
67
+ /*
68
+ * Remove the gap between images and the bottom of their containers: h5bp.com/i/440
69
+ */
70
+
71
+ img {
72
+ vertical-align: middle;
73
+ }
74
+
75
+ /*
76
+ * Remove default fieldset styles.
77
+ */
78
+
79
+ fieldset {
80
+ border: 0;
81
+ margin: 0;
82
+ padding: 0;
83
+ }
84
+
85
+ /*
86
+ * Allow only vertical resizing of textareas.
87
+ */
88
+
89
+ textarea {
90
+ resize: vertical;
91
+ }
92
+
93
+ /* ==========================================================================
94
+ Chrome Frame prompt
95
+ ========================================================================== */
96
+
97
+ .chromeframe {
98
+ margin: 0.2em 0;
99
+ background: #ccc;
100
+ color: #000;
101
+ padding: 0.2em 0;
102
+ }
103
+
104
+ /* ==========================================================================
105
+ Author's custom styles
106
+ ========================================================================== */
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+ /* ==========================================================================
125
+ Helper classes
126
+ ========================================================================== */
127
+
128
+ /*
129
+ * Image replacement
130
+ */
131
+
132
+ .ir {
133
+ border: 0;
134
+ font: 0/0 a;
135
+ text-shadow: none;
136
+ color: transparent;
137
+ background-color: transparent;
138
+ }
139
+
140
+ /*
141
+ * Hide from both screenreaders and browsers: h5bp.com/u
142
+ */
143
+
144
+ .hidden {
145
+ display: none !important;
146
+ visibility: hidden;
147
+ }
148
+
149
+ /*
150
+ * Hide only visually, but have it available for screenreaders: h5bp.com/v
151
+ */
152
+
153
+ .visuallyhidden {
154
+ border: 0;
155
+ clip: rect(0 0 0 0);
156
+ height: 1px;
157
+ margin: -1px;
158
+ overflow: hidden;
159
+ padding: 0;
160
+ position: absolute;
161
+ width: 1px;
162
+ }
163
+
164
+ /*
165
+ * Extends the .visuallyhidden class to allow the element to be focusable
166
+ * when navigated to via the keyboard: h5bp.com/p
167
+ */
168
+
169
+ .visuallyhidden.focusable:active,
170
+ .visuallyhidden.focusable:focus {
171
+ clip: auto;
172
+ height: auto;
173
+ margin: 0;
174
+ overflow: visible;
175
+ position: static;
176
+ width: auto;
177
+ }
178
+
179
+ /*
180
+ * Hide visually and from screenreaders, but maintain layout
181
+ */
182
+
183
+ .invisible {
184
+ visibility: hidden;
185
+ }
186
+
187
+ /**
188
+ * Clearfix helper
189
+ * Used to contain floats: h5bp.com/q
190
+ */
191
+
192
+ .clearfix:before,
193
+ .clearfix:after {
194
+ content: "";
195
+ display: table;
196
+ }
197
+
198
+ .clearfix:after {
199
+ clear: both;
200
+ }
201
+
202
+ /*
203
+ * For IE 6/7 only
204
+ * Include this rule to trigger hasLayout and contain floats.
205
+ */
206
+
207
+ .clearfix {
208
+ *zoom: 1;
209
+ }
210
+
211
+ /* ==========================================================================
212
+ EXAMPLE Media Queries for Responsive Design.
213
+ Theses examples override the primary ('mobile first') styles.
214
+ Modify as content requires.
215
+ ========================================================================== */
216
+
217
+ @media only screen and (min-width: 35em) {
218
+ /* Style adjustments for viewports that meet the condition */
219
+ }
220
+
221
+ /* ==========================================================================
222
+ Print styles.
223
+ Inlined to avoid required HTTP connection: h5bp.com/r
224
+ ========================================================================== */
225
+
226
+ @media print {
227
+ * {
228
+ background: transparent !important;
229
+ color: #000 !important; /* Black prints faster: h5bp.com/s */
230
+ box-shadow:none !important;
231
+ text-shadow: none !important;
232
+ }
233
+
234
+ a,
235
+ a:visited {
236
+ text-decoration: underline;
237
+ }
238
+
239
+ a[href]:after {
240
+ content: " (" attr(href) ")";
241
+ }
242
+
243
+ abbr[title]:after {
244
+ content: " (" attr(title) ")";
245
+ }
246
+
247
+ /*
248
+ * Don't show links for images, or javascript/internal links
249
+ */
250
+
251
+ .ir a:after,
252
+ a[href^="javascript:"]:after,
253
+ a[href^="#"]:after {
254
+ content: "";
255
+ }
256
+
257
+ pre,
258
+ blockquote {
259
+ border: 1px solid #999;
260
+ page-break-inside: avoid;
261
+ }
262
+
263
+ thead {
264
+ display: table-header-group; /* h5bp.com/t */
265
+ }
266
+
267
+ tr,
268
+ img {
269
+ page-break-inside: avoid;
270
+ }
271
+
272
+ img {
273
+ max-width: 100% !important;
274
+ }
275
+
276
+ @page {
277
+ margin: 0.5cm;
278
+ }
279
+
280
+ p,
281
+ h2,
282
+ h3 {
283
+ orphans: 3;
284
+ widows: 3;
285
+ }
286
+
287
+ h2,
288
+ h3 {
289
+ page-break-after: avoid;
290
+ }
291
+ }
@@ -0,0 +1 @@
1
+ // @import 'fonts/font_name/stylesheet'
@@ -0,0 +1,298 @@
1
+ /*
2
+ * HTML5 Boilerplate
3
+ *
4
+ * What follows is the result of much research on cross-browser styling.
5
+ * Credit left inline and big thanks to Nicolas Gallagher, Jonathan Neal,
6
+ * Kroc Camen, and the H5BP dev community and team.
7
+ */
8
+
9
+ /* ==========================================================================
10
+ Base styles: opinionated defaults
11
+ ========================================================================== */
12
+
13
+ html,
14
+ button,
15
+ input,
16
+ select,
17
+ textarea {
18
+ color: #222;
19
+ }
20
+
21
+ body {
22
+ font-size: 1em;
23
+ line-height: 1.4;
24
+ }
25
+
26
+ /*
27
+ * Remove text-shadow in selection highlight: h5bp.com/i
28
+ * These selection declarations have to be separate.
29
+ * Customize the background color to match your design.
30
+ */
31
+
32
+ ::-moz-selection {
33
+ background: #b3d4fc;
34
+ text-shadow: none;
35
+ }
36
+
37
+ ::selection {
38
+ background: #b3d4fc;
39
+ text-shadow: none;
40
+ }
41
+
42
+ /*
43
+ * A better looking default horizontal rule
44
+ */
45
+
46
+ hr {
47
+ display: block;
48
+ height: 1px;
49
+ border: 0;
50
+ border-top: 1px solid #ccc;
51
+ margin: 1em 0;
52
+ padding: 0;
53
+ }
54
+
55
+ /*
56
+ * Remove the gap between images and the bottom of their containers: h5bp.com/i/440
57
+ */
58
+
59
+ img {
60
+ vertical-align: middle;
61
+ }
62
+
63
+ /*
64
+ * Remove default fieldset styles.
65
+ */
66
+
67
+ fieldset {
68
+ border: 0;
69
+ margin: 0;
70
+ padding: 0;
71
+ }
72
+
73
+ /*
74
+ * Allow only vertical resizing of textareas.
75
+ */
76
+
77
+ textarea {
78
+ resize: vertical;
79
+ }
80
+
81
+ /* ==========================================================================
82
+ Chrome Frame prompt
83
+ ========================================================================== */
84
+
85
+ .chromeframe {
86
+ margin: 0.2em 0;
87
+ background: #ccc;
88
+ color: #000;
89
+ padding: 0.2em 0;
90
+ }
91
+
92
+ /* ==========================================================================
93
+ Author's custom styles
94
+ ========================================================================== */
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+ /* ==========================================================================
113
+ Helper classes
114
+ ========================================================================== */
115
+
116
+ /*
117
+ * Image replacement
118
+ */
119
+
120
+ .ir {
121
+ background-color: transparent;
122
+ border: 0;
123
+ overflow: hidden;
124
+ /* IE 6/7 fallback */
125
+ *text-indent: -9999px;
126
+ }
127
+
128
+ .ir:before {
129
+ content: "";
130
+ display: block;
131
+ width: 0;
132
+ height: 100%;
133
+ }
134
+
135
+ /*
136
+ * Hide from both screenreaders and browsers: h5bp.com/u
137
+ */
138
+
139
+ .hidden {
140
+ display: none !important;
141
+ visibility: hidden;
142
+ }
143
+
144
+ /*
145
+ * Hide only visually, but have it available for screenreaders: h5bp.com/v
146
+ */
147
+
148
+ .visuallyhidden {
149
+ border: 0;
150
+ clip: rect(0 0 0 0);
151
+ height: 1px;
152
+ margin: -1px;
153
+ overflow: hidden;
154
+ padding: 0;
155
+ position: absolute;
156
+ width: 1px;
157
+ }
158
+
159
+ /*
160
+ * Extends the .visuallyhidden class to allow the element to be focusable
161
+ * when navigated to via the keyboard: h5bp.com/p
162
+ */
163
+
164
+ .visuallyhidden.focusable:active,
165
+ .visuallyhidden.focusable:focus {
166
+ clip: auto;
167
+ height: auto;
168
+ margin: 0;
169
+ overflow: visible;
170
+ position: static;
171
+ width: auto;
172
+ }
173
+
174
+ /*
175
+ * Hide visually and from screenreaders, but maintain layout
176
+ */
177
+
178
+ .invisible {
179
+ visibility: hidden;
180
+ }
181
+
182
+ /*
183
+ * Clearfix: contain floats
184
+ *
185
+ * For modern browsers
186
+ * 1. The space content is one way to avoid an Opera bug when the
187
+ * `contenteditable` attribute is included anywhere else in the document.
188
+ * Otherwise it causes space to appear at the top and bottom of elements
189
+ * that receive the `clearfix` class.
190
+ * 2. The use of `table` rather than `block` is only necessary if using
191
+ * `:before` to contain the top-margins of child elements.
192
+ */
193
+
194
+ .clearfix:before,
195
+ .clearfix:after {
196
+ content: " "; /* 1 */
197
+ display: table; /* 2 */
198
+ }
199
+
200
+ .clearfix:after {
201
+ clear: both;
202
+ }
203
+
204
+ /*
205
+ * For IE 6/7 only
206
+ * Include this rule to trigger hasLayout and contain floats.
207
+ */
208
+
209
+ .clearfix {
210
+ *zoom: 1;
211
+ }
212
+
213
+ /* ==========================================================================
214
+ EXAMPLE Media Queries for Responsive Design.
215
+ Theses examples override the primary ('mobile first') styles.
216
+ Modify as content requires.
217
+ ========================================================================== */
218
+
219
+ @media only screen and (min-width: 35em) {
220
+ /* Style adjustments for viewports that meet the condition */
221
+ }
222
+
223
+ @media only screen and (-webkit-min-device-pixel-ratio: 1.5),
224
+ only screen and (min-resolution: 144dpi) {
225
+ /* Style adjustments for high resolution devices */
226
+ }
227
+
228
+ /* ==========================================================================
229
+ Print styles.
230
+ Inlined to avoid required HTTP connection: h5bp.com/r
231
+ ========================================================================== */
232
+
233
+ @media print {
234
+ * {
235
+ background: transparent !important;
236
+ color: #000 !important; /* Black prints faster: h5bp.com/s */
237
+ box-shadow:none !important;
238
+ text-shadow: none !important;
239
+ }
240
+
241
+ a,
242
+ a:visited {
243
+ text-decoration: underline;
244
+ }
245
+
246
+ a[href]:after {
247
+ content: " (" attr(href) ")";
248
+ }
249
+
250
+ abbr[title]:after {
251
+ content: " (" attr(title) ")";
252
+ }
253
+
254
+ /*
255
+ * Don't show links for images, or javascript/internal links
256
+ */
257
+
258
+ .ir a:after,
259
+ a[href^="javascript:"]:after,
260
+ a[href^="#"]:after {
261
+ content: "";
262
+ }
263
+
264
+ pre,
265
+ blockquote {
266
+ border: 1px solid #999;
267
+ page-break-inside: avoid;
268
+ }
269
+
270
+ thead {
271
+ display: table-header-group; /* h5bp.com/t */
272
+ }
273
+
274
+ tr,
275
+ img {
276
+ page-break-inside: avoid;
277
+ }
278
+
279
+ img {
280
+ max-width: 100% !important;
281
+ }
282
+
283
+ @page {
284
+ margin: 0.5cm;
285
+ }
286
+
287
+ p,
288
+ h2,
289
+ h3 {
290
+ orphans: 3;
291
+ widows: 3;
292
+ }
293
+
294
+ h2,
295
+ h3 {
296
+ page-break-after: avoid;
297
+ }
298
+ }