middlemac-extras 1.0.6 → 1.0.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +5 -5
  2. data/.gitattributes +4 -0
  3. data/.gitignore +8 -1
  4. data/.yardopts +7 -0
  5. data/CHANGELOG.md +55 -9
  6. data/Rakefile +206 -7
  7. data/documentation_project/Gemfile +3 -3
  8. data/documentation_project/config.rb +2 -6
  9. data/documentation_project/source/api_reference.html.md.erb +38 -0
  10. data/documentation_project/source/cli.html.md.erb +4 -3
  11. data/documentation_project/source/config_rb.html.md.erb +1 -2
  12. data/documentation_project/source/css_image_sizes.html.md.erb +2 -3
  13. data/documentation_project/source/image_tag.html.md.erb +1 -2
  14. data/documentation_project/source/index.html.md.erb +8 -7
  15. data/documentation_project/source/license.html.md.erb +1 -2
  16. data/documentation_project/source/md_images.html.md.erb +1 -2
  17. data/documentation_project/source/md_links.html.md.erb +1 -2
  18. data/documentation_project/source/partials/_yard_config.erb +200 -0
  19. data/documentation_project/source/partials/_yard_helpers.erb +192 -0
  20. data/documentation_project/source/partials/_yard_helpers_extended.erb +135 -0
  21. data/documentation_project/source/stylesheets/_middlemac_minimal.scss +281 -0
  22. data/features/helpers.feature +39 -0
  23. data/features/support/env.rb +20 -0
  24. data/fixtures/middlemac_extras_app/config.rb +7 -0
  25. data/fixtures/middlemac_extras_app/source/images/middlemac-extras-small.png +0 -0
  26. data/fixtures/middlemac_extras_app/source/images/middlemac-extras-small@2x.png +0 -0
  27. data/fixtures/middlemac_extras_app/source/images/middlemac-extras-smaller.png +0 -0
  28. data/fixtures/middlemac_extras_app/source/index.html.md.erb +31 -0
  29. data/lib/middlemac-extras/extension.rb +187 -61
  30. data/lib/middlemac-extras/version.rb +1 -1
  31. data/middlemac-extras.gemspec +44 -17
  32. data/yard/readme.md +6 -0
  33. data/yard/template-grouped/default/module/html/method_details_list.erb +11 -0
  34. data/yard/template-partials/default/method_details/setup.rb +4 -0
  35. data/yard/template-partials/default/module/html/attribute_details.erb +9 -0
  36. data/yard/template-partials/default/module/html/method_details_list.erb +10 -0
  37. data/yard/template-partials/default/module/setup.rb +6 -0
  38. data/yard/template-partials/default/onefile/html/layout.erb +1 -0
  39. data/yard/template-partials/default/onefile/html/setup.rb +4 -0
  40. data/yard/yard_extensions.rb +109 -0
  41. metadata +118 -23
@@ -0,0 +1,20 @@
1
+ PROJECT_ROOT_PATH = File.dirname(File.dirname(File.dirname(__FILE__)))
2
+ ENV['TEST'] = 'true'
3
+
4
+ require 'middleman'
5
+ require 'middleman-core/step_definitions'
6
+ require File.join(PROJECT_ROOT_PATH, 'lib', 'middlemac-extras')
7
+
8
+
9
+ require 'cucumber/formatter/pretty'
10
+ class QuietFormatter < Cucumber::Formatter::Pretty
11
+ def initialize(runtime, io, options)
12
+ $stderr = File.new( '/dev/null', 'w' )
13
+ super(runtime, io, options)
14
+ end
15
+
16
+ def after_features(features)
17
+ $stderr = STDOUT
18
+ super(features)
19
+ end
20
+ end
@@ -0,0 +1,7 @@
1
+ activate :MiddlemacExtras do |config|
2
+ config.retina_srcset = true
3
+ config.img_auto_extensions = true
4
+ config.img_auto_extensions_order = %w(.svg .png .jpg .jpeg .gif .tiff .tif)
5
+ end
6
+
7
+ set :relative_links, true
@@ -0,0 +1,31 @@
1
+ ---
2
+ title: Fixture for middlemac-extras
3
+ ---
4
+ # css_image_sizes
5
+
6
+ ~~~
7
+ <%= css_image_sizes %>
8
+ ~~~
9
+
10
+ # md_images
11
+
12
+ ~~~
13
+ <%= md_images %>
14
+ ~~~
15
+
16
+ # md_links
17
+
18
+ ~~~
19
+ <%= md_links %>
20
+ ~~~
21
+
22
+ # extended image_tag
23
+
24
+ ~~~
25
+ <%= image_tag 'middlemac-extras-small' %>
26
+ ~~~
27
+
28
+ ~~~
29
+ <%= image_tag 'middlemac-extras-smaller' %>
30
+ ~~~
31
+
@@ -1,11 +1,12 @@
1
- ################################################################################
2
- # extension.rb
3
- # This file constitutes the framework for the bulk of this extension.
4
- ################################################################################
5
1
  require 'middleman-core'
6
2
  require 'pathname'
7
3
  require 'fastimage'
8
4
 
5
+ ################################################################################
6
+ # This extension provides Middleman several useful helpers and extends some of
7
+ # its built-in helpers to offer more features.
8
+ # @author Jim Derry <balthisar@gmail.com>
9
+ ################################################################################
9
10
  class MiddlemacExtras < ::Middleman::Extension
10
11
 
11
12
  ############################################################
@@ -17,14 +18,46 @@ class MiddlemacExtras < ::Middleman::Extension
17
18
  option :img_auto_extensions_order, %w(.svg .png .jpg .jpeg .gif .tiff .tif), 'Specifies the order to support automatic image extensions.'
18
19
 
19
20
 
21
+ # @!group Extension Configuration
22
+
23
+ # @!attribute [rw] options[:retina_srcset]=
24
+ # This option determines whether or not the enhanced `image_tag` helper will
25
+ # be used to include an @2x `srcset` attribute automatically. This automatic
26
+ # behavior will only be applied if the image asset exists on disk and this
27
+ # option is set to `true`.
28
+ # @param [Boolean] value `true` or `false` to enable or disable this feature.
29
+ # @return [Boolean] Returns the current value of this option.
30
+
31
+ # @!attribute [rw] options[:img_auto_extensions]=
32
+ # This option determines whether or not to support specifying images without
33
+ # using a file name extension. If set to `true` then the `image_tag` helper
34
+ # will work for images even if you don’t specify an extension, but only if a
35
+ # file exists on disk that has one of the extensions in
36
+ # `:img_auto_extensions_order`.
37
+ # @param [Boolean] value `true` or `false` to enable or disable this feature.
38
+ # @return [Boolean] Returns the current value of this option.
39
+
40
+ # @!attribute [rw] options[:img_auto_extensions_order]=
41
+ # This option defines the eligible file name extensions and their precedence
42
+ # when you specify an image without an extension using the `image_tag` helper.
43
+ # Set this to an array of image file extensions in your desired order of
44
+ # of precedence.
45
+ # @param [Array<String>] value Set to an array of image extensions.
46
+ # @return [Array<String>] Returns the current value of this option.
47
+
48
+ # @!endgroup
49
+
50
+
20
51
  ############################################################
21
52
  # initialize
53
+ # @visibility private
22
54
  ############################################################
23
55
  def initialize(app, options_hash={}, &block)
24
56
 
25
57
  super
26
58
 
27
59
  @md_links_b = nil
60
+ @md_links_modern_b = nil
28
61
  @md_images_b = nil
29
62
  @md_sizes_b = nil
30
63
 
@@ -33,7 +66,8 @@ class MiddlemacExtras < ::Middleman::Extension
33
66
 
34
67
  ############################################################
35
68
  # after_configuration
36
- # Callback occurs before `before_build`.
69
+ # Callback occurs before `before_build`.
70
+ # @visibility private
37
71
  #############################################################
38
72
  def after_configuration
39
73
 
@@ -41,6 +75,7 @@ class MiddlemacExtras < ::Middleman::Extension
41
75
  # changes. For speed we don't want to recalculate everything
42
76
  # every time a helper is used, but only the first time.
43
77
  @md_links_b = nil
78
+ @md_links_modern_b = nil
44
79
  @md_images_b = nil
45
80
  @md_sizes_b = nil
46
81
 
@@ -56,8 +91,13 @@ class MiddlemacExtras < ::Middleman::Extension
56
91
  helpers do
57
92
 
58
93
  #--------------------------------------------------------
59
- # md_links
60
- # Adds simple markdown links where needed.
94
+ # This helper provides access to `middlemac-extras`’
95
+ # index of links in Markdown reference format, enabling
96
+ # you to use reference-style links in documents. Because
97
+ # this helper includes literal Markdown, it’s only useful
98
+ # in Markdown documents.
99
+ # @return [String] Returns a string with the Markdown
100
+ # index of every page in your project.
61
101
  #--------------------------------------------------------
62
102
  def md_links
63
103
  extensions[:MiddlemacExtras].md_links_b
@@ -65,8 +105,29 @@ class MiddlemacExtras < ::Middleman::Extension
65
105
 
66
106
 
67
107
  #--------------------------------------------------------
68
- # md_images
69
- # Adds simple markdown image links where needed.
108
+ # This helper provides access to `middlemac-extras`’
109
+ # index of links in Markdown reference format, enabling
110
+ # you to use reference-style links in documents. Because
111
+ # this helper includes literal Markdown, it’s only useful
112
+ # in Markdown documents. This is only useful when using
113
+ # Middlemac 3.0.0 or newer, which includes support for
114
+ # helpbook style links.
115
+ # @return [String] Returns a string with the Markdown
116
+ # index of every page in your project.
117
+ #--------------------------------------------------------
118
+ def md_hblinks
119
+ extensions[:MiddlemacExtras].md_links_modern_b
120
+ end
121
+
122
+
123
+ #--------------------------------------------------------
124
+ # This helper provides access to `middlemac-extras`’
125
+ # index of images in Markdown reference format, enabling
126
+ # you to use reference-style images in documents. Because
127
+ # this helper includes literal Markdown, it’s only useful
128
+ # in Markdown documents.
129
+ # @return [String] Returns a string with the Markdown
130
+ # index of every image in your project.
70
131
  #--------------------------------------------------------
71
132
  def md_images
72
133
  extensions[:MiddlemacExtras].md_images_b
@@ -74,8 +135,14 @@ class MiddlemacExtras < ::Middleman::Extension
74
135
 
75
136
 
76
137
  #--------------------------------------------------------
77
- # css_image_sizes
78
- # Generates image size CSS information for all images.
138
+ # This helper provides CSS for every image in your
139
+ # project. Each image will have a declaration that sets
140
+ # `max-width` and `max-height` to the actual size of the
141
+ # image. Proper @2x image support is included. It’s most
142
+ # useful to use this helper in a `some_file.css.erb`
143
+ # file.
144
+ # @return [String] Returns a string with the CSS markup
145
+ # for every image found in your project.
79
146
  #--------------------------------------------------------
80
147
  def css_image_sizes
81
148
  extensions[:MiddlemacExtras].md_sizes_b
@@ -83,10 +150,25 @@ class MiddlemacExtras < ::Middleman::Extension
83
150
 
84
151
 
85
152
  #--------------------------------------------------------
86
- # image_tag(path, params={})
87
- # Add automatic srcset if an @2x image is present and
88
- # no srcset is already specified. Also support the
89
- # use of extension-less images.
153
+ # With the proper options enabled this helper extends
154
+ # the built-in functionality of **Middleman**’s helpers
155
+ # in a couple of ways. With `:retina_srcset` enabled,
156
+ # automatic `srcset` attributes will be applied to
157
+ # `<img>` tags if an @2x version of the specified image
158
+ # is found. With `:img_auto_extensions` it’s possible to
159
+ # specify image names without the file name extension.
160
+ # @param [String] path Specify path to the image file.
161
+ # @param [Hash] params Optional parameters to pass to
162
+ # the helper. **Middleman** (and other extensions)
163
+ # provide other parameters in addition to these.
164
+ # @option params [Boolean] :img_auto_extensions Allows
165
+ # control of the automatic image extensions option
166
+ # on a per-use basis.
167
+ # @option params [Boolean] :retina_srcset Allows control
168
+ # of the automatic @2x images feature on a per-use
169
+ # basis.
170
+ # @return [String] Returns an HTML `<img>` tag.
171
+ # @group Extended Helpers
90
172
  #--------------------------------------------------------
91
173
  def image_tag(path, params={})
92
174
  params.symbolize_keys!
@@ -100,9 +182,6 @@ class MiddlemacExtras < ::Middleman::Extension
100
182
  retina_srcset = ext_options[:retina_srcset]
101
183
  retina_srcset = params.delete(:retina_srcset) if params[:retina_srcset]
102
184
 
103
- automatic_alt_tags = @app.extensions[:automatic_alt_tags]
104
- automatic_alt_tags = params.delete(:automatic_alt_tags) if params[:automatic_alt_tags]
105
-
106
185
 
107
186
  #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
108
187
  # Support images without extensions. If an image with the
@@ -154,19 +233,6 @@ class MiddlemacExtras < ::Middleman::Extension
154
233
  end
155
234
  end
156
235
 
157
-
158
- #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
159
- # Support automatic alt tags for absolute locations, too.
160
- # Only do this for absolute paths; let the extension do its
161
- # own thing otherwise.
162
- #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
163
- if automatic_alt_tags && path.start_with?('/')
164
- alt_text = File.basename(path, '.*')
165
- alt_text.capitalize!
166
- params[:alt] ||= alt_text
167
- end
168
-
169
-
170
236
  super(path, params)
171
237
  end
172
238
 
@@ -176,17 +242,28 @@ class MiddlemacExtras < ::Middleman::Extension
176
242
 
177
243
 
178
244
  ############################################################
179
- # Instance Methods
245
+ # Instance Methods
246
+ # @!group Instance Methods
180
247
  ############################################################
181
248
 
182
- #--------------------------------------------------------
183
- # md_links_b
184
- # Adds simple markdown links where needed.
185
- #--------------------------------------------------------
249
+
250
+ #########################################################
251
+ # This accessor for @md_links_b lazily populates the
252
+ # backing variable and buffers it for repeated use. In
253
+ # the event of file changes, a server restart is needed.
254
+ # @returns [String] Returns the Markdown reference list.
255
+ # @!visibility private
256
+ #########################################################
186
257
  def md_links_b
187
258
  unless @md_links_b
188
259
  @md_links_b = get_link_data('text/html', 'application/xhtml')
189
- .collect { |l| "[#{l[:reference]}]: #{l[:link]} \"#{l[:title]}\"" }
260
+ .collect { |l|
261
+ if l[:title]
262
+ "[#{l[:reference]}]: #{l[:link]} \"#{l[:title]}\""
263
+ else
264
+ "[#{l[:reference]}]: #{l[:link]}"
265
+ end
266
+ }
190
267
  .join("\n")
191
268
  end
192
269
 
@@ -194,9 +271,38 @@ class MiddlemacExtras < ::Middleman::Extension
194
271
  end
195
272
 
196
273
 
197
- #--------------------------------------------------------
198
- # md_images_b
199
- #--------------------------------------------------------
274
+ #########################################################
275
+ # This accessor for @md_links_modern_b lazily populates
276
+ # the backing variable and buffers it for repeated use.
277
+ # In the event of file changes, a server restart is
278
+ # needed.
279
+ # @returns [String] Returns the Markdown reference list.
280
+ # @!visibility private
281
+ #########################################################
282
+ def md_links_modern_b
283
+ unless @md_links_modern_b
284
+ @md_links_modern_b = get_link_data('text/html', 'application/xhtml')
285
+ .collect { |l|
286
+ if l[:title]
287
+ "[#{l[:reference]}]: #{l[:hb_link]} \"#{l[:title]}\""
288
+ else
289
+ "[#{l[:reference]}]: #{l[:hb_link]}"
290
+ end
291
+ }
292
+ .join("\n")
293
+ end
294
+
295
+ @md_links_modern_b
296
+ end
297
+
298
+
299
+ #########################################################
300
+ # This accessor for @md_images_b lazily populates the
301
+ # backing variable and buffers it for repeated use. In
302
+ # the event of file changes, a server restart is needed.
303
+ # @returns [String] Returns the Markdown reference list.
304
+ # @!visibility private
305
+ #########################################################
200
306
  def md_images_b
201
307
  unless @md_images_b
202
308
  @md_images_b = get_link_data('image/')
@@ -207,13 +313,15 @@ class MiddlemacExtras < ::Middleman::Extension
207
313
  end
208
314
 
209
315
 
210
- #--------------------------------------------------------
211
- # get_link_data( *types )
212
- # Get all of the required link data for generating
213
- # markdown shortcuts.
214
- # @param types should be the content_type to check.
215
- # @return an array of hashes with file data.
216
- #--------------------------------------------------------
316
+ #########################################################
317
+ # Get all of the required link data for generating
318
+ # markdown shortcuts for the two property accessors.
319
+ # @param [va_list<String>] types One or more MIME types
320
+ # specifying the file types for which to build links.
321
+ # @return [Array<Hash>] An array of hashes containing
322
+ # the file data.
323
+ # @!visibility private
324
+ #########################################################
217
325
  def get_link_data( *types )
218
326
  all_links = []
219
327
  # We'll include a sort by number of path components in this chain so
@@ -228,6 +336,7 @@ class MiddlemacExtras < ::Middleman::Extension
228
336
  reference_path.shift
229
337
  reference = File.basename(r.destination_path, '.*').gsub(%r{ }, '_')
230
338
  link = r.url
339
+ hb_link = defined?(r.hb_NavId) ? "#/#{r.hb_NavId}" : nil
231
340
  title = r.data.title ? r.data.title.gsub(%r{</?[^>]+?>}, '') : nil
232
341
 
233
342
  i = 0
@@ -237,17 +346,21 @@ class MiddlemacExtras < ::Middleman::Extension
237
346
  i += 1
238
347
  end
239
348
 
240
- all_links << {:reference => reference, :link => link, :title => title}
349
+ all_links << {:reference => reference, :link => link, :title => title, :hb_link => hb_link}
241
350
  end # .each
242
351
 
243
352
  all_links
244
353
  end
245
354
 
246
355
 
247
- #--------------------------------------------------------
248
- # md_sizes_b
249
- # For every image resource, try to build the size.
250
- #--------------------------------------------------------
356
+ #########################################################
357
+ # For every image resource in the project, attempt to
358
+ # build the CSS rules. Only bitmap images are supported,
359
+ # as vectors (e.g., SVG) don’t have a specific size.
360
+ # @returns [String] Returns the CSS stylesheet with the
361
+ # maximum width and height for each image.
362
+ # @!visibility private
363
+ #########################################################
251
364
  def md_sizes_b
252
365
  unless @md_sizes_b
253
366
  @md_sizes_b = []
@@ -282,11 +395,19 @@ class MiddlemacExtras < ::Middleman::Extension
282
395
  end
283
396
 
284
397
 
285
- #--------------------------------------------------------
286
- # with_extension_proposal( path, ext )
287
- # Returns a file with an extension if found; otherwise
288
- # it returns the original file.
289
- #--------------------------------------------------------
398
+ #########################################################
399
+ # Returns a file with an extension if found; otherwise
400
+ # it returns the original file. This is used to search
401
+ # for images for which no file name extension has been
402
+ # provided.
403
+ # @param [String] path Specifies the image without an
404
+ # extension, which is to be checked.
405
+ # @param [String] ext Specifies the extension to check.
406
+ # @returns [String] Returns the path of the image with
407
+ # an extension (if found), or returns the original
408
+ # `path` parameter.
409
+ # @!visibility private
410
+ #########################################################
290
411
  def with_extension_proposal( path, ext )
291
412
  return path unless File.extname(path) == '' && app.extensions[:MiddlemacExtras].options[:img_auto_extensions]
292
413
 
@@ -311,10 +432,15 @@ class MiddlemacExtras < ::Middleman::Extension
311
432
  end
312
433
 
313
434
 
314
- #--------------------------------------------------------
315
- # say
316
- # Output colored messages using ANSI codes.
317
- #--------------------------------------------------------
435
+ #########################################################
436
+ # Output colored messages using ANSI codes.
437
+ # @param [String] message The message to output to the
438
+ # console.
439
+ # @param [Symbol] color The color in which to display
440
+ # the message.
441
+ # @returns [Void]
442
+ # @!visibility private
443
+ #########################################################
318
444
  def say(message = '', color = :reset)
319
445
  colors = { :blue => "\033[34m",
320
446
  :cyan => "\033[36m",
@@ -1,5 +1,5 @@
1
1
  module Middleman
2
2
  module MiddlemacExtras
3
- VERSION = '1.0.6'
3
+ VERSION = '1.0.11'
4
4
  end
5
5
  end