middleman-pagegroups 1.0.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 (56) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/CHANGELOG.md +6 -0
  4. data/Gemfile +18 -0
  5. data/LICENSE.md +22 -0
  6. data/README.md +87 -0
  7. data/Rakefile +10 -0
  8. data/bin/middleman-pagegroups +108 -0
  9. data/documentation_project/.gitignore +25 -0
  10. data/documentation_project/Gemfile +18 -0
  11. data/documentation_project/README.md +13 -0
  12. data/documentation_project/config.rb +109 -0
  13. data/documentation_project/source/documentation/10_concepts.html.md.erb +111 -0
  14. data/documentation_project/source/documentation/20_directory_organization.html.md.erb +85 -0
  15. data/documentation_project/source/documentation/30_frontmatter.html.md.erb +70 -0
  16. data/documentation_project/source/documentation/40_resources.html.md.erb +79 -0
  17. data/documentation_project/source/documentation/50_helpers.html.md.erb +252 -0
  18. data/documentation_project/source/documentation/60_sample_partials.html.md.erb +55 -0
  19. data/documentation_project/source/documentation/70_sample_layouts.html.md.erb +92 -0
  20. data/documentation_project/source/documentation/80_config.html.md.erb +98 -0
  21. data/documentation_project/source/documentation/index.html.md.erb +32 -0
  22. data/documentation_project/source/documentation/ovum.html.md.erb +27 -0
  23. data/documentation_project/source/fonts/font-awesome/FontAwesome.otf +0 -0
  24. data/documentation_project/source/fonts/font-awesome/fontawesome-webfont.eot +0 -0
  25. data/documentation_project/source/fonts/font-awesome/fontawesome-webfont.svg +655 -0
  26. data/documentation_project/source/fonts/font-awesome/fontawesome-webfont.ttf +0 -0
  27. data/documentation_project/source/fonts/font-awesome/fontawesome-webfont.woff +0 -0
  28. data/documentation_project/source/fonts/font-awesome/fontawesome-webfont.woff2 +0 -0
  29. data/documentation_project/source/images/middleman-pagegroups-small.png +0 -0
  30. data/documentation_project/source/images/middleman-pagegroups.png +0 -0
  31. data/documentation_project/source/index.html.md.erb +39 -0
  32. data/documentation_project/source/javascripts/all.js +1 -0
  33. data/documentation_project/source/layouts/layout.haml +11 -0
  34. data/documentation_project/source/layouts/template-logo-large.haml +25 -0
  35. data/documentation_project/source/layouts/template-logo-medium.haml +26 -0
  36. data/documentation_project/source/layouts/template-logo-small.haml +26 -0
  37. data/documentation_project/source/license.html.md.erb +29 -0
  38. data/documentation_project/source/partials/_nav_breadcrumbs.haml +11 -0
  39. data/documentation_project/source/partials/_nav_breadcrumbs_alt.haml +15 -0
  40. data/documentation_project/source/partials/_nav_brethren.haml +18 -0
  41. data/documentation_project/source/partials/_nav_brethren_index.haml +14 -0
  42. data/documentation_project/source/partials/_nav_legitimate_children.haml +16 -0
  43. data/documentation_project/source/partials/_nav_prev_next.haml +21 -0
  44. data/documentation_project/source/partials/_nav_toc_index.haml +21 -0
  45. data/documentation_project/source/stylesheets/_github.scss +61 -0
  46. data/documentation_project/source/stylesheets/_middlemac_minimal.scss +668 -0
  47. data/documentation_project/source/stylesheets/_normalize.scss +374 -0
  48. data/documentation_project/source/stylesheets/breadcrumb-separator-light.png +0 -0
  49. data/documentation_project/source/stylesheets/style.css.scss +3 -0
  50. data/documentation_project/source/toc.html.md.erb +26 -0
  51. data/lib/middleman-pagegroups/extension.rb +431 -0
  52. data/lib/middleman-pagegroups/partials.rb +173 -0
  53. data/lib/middleman-pagegroups/version.rb +5 -0
  54. data/lib/middleman-pagegroups.rb +6 -0
  55. data/middleman-pagegroups.gemspec +26 -0
  56. metadata +140 -0
@@ -0,0 +1,431 @@
1
+ ################################################################################
2
+ # extension.rb
3
+ # This file constitutes the framework for the bulk of this extension.
4
+ ################################################################################
5
+ require 'middleman-core'
6
+ require 'middleman-pagegroups/partials'
7
+
8
+ class MiddlemanPageGroups < ::Middleman::Extension
9
+
10
+
11
+ ############################################################
12
+ # Define the options that are to be set within `config.rb`
13
+ # as extension options.
14
+ ############################################################
15
+ option :strip_file_prefixes, true, 'If true leading numbers used for sorting files will be removed for presentation purposes.'
16
+ option :extend_page_class, true, 'If true then the page_class helper will be extended to include simple group and page_names.'
17
+
18
+ option :nav_breadcrumbs_class, nil, 'Default css class for the nav_breadcrumbs helper/partial.'
19
+ option :nav_breadcrumbs_alt_class, nil, 'Default css class for the nav_breadcrumbs_alt helper/partial.'
20
+ option :nav_breadcrumbs_alt_label, 'Current page', 'Default "current page" label for the nav_breadcrumbs_alt helper/partial.'
21
+ option :nav_brethren_class, nil, 'Default css class for the nav_brethren helper/partial.'
22
+ option :nav_brethren_index_class, nil, 'Default css class for the nav_brethren_index helper/partial.'
23
+ option :nav_legitimate_children_class, nil, 'Default css class for the nav_legitimate_children helper/partial.'
24
+ option :nav_prev_next_class, nil, 'Default css class for the nav_prev_next helper/partial.'
25
+ option :nav_prev_next_label_prev, 'Previous', 'Default "previous" label text for the nav_prev_next helper/partial.'
26
+ option :nav_prev_next_label_next, 'Next', 'Default "next" label text for the nav_prev_next helper/partial.'
27
+ option :nav_toc_index_class, nil, 'Default css class for the nav_toc_index helper/partial.'
28
+
29
+
30
+ ############################################################
31
+ # Sitemap manipulators.
32
+ # Add new methods to each resource.
33
+ ############################################################
34
+ def manipulate_resource_list(resources)
35
+
36
+ resources.each do |resource|
37
+
38
+ #--------------------------------------------------------
39
+ # page_name
40
+ # Make page_name available for each page. This is the
41
+ # file base name after any renaming has occurred.
42
+ # Useful for assigning classes, etc.
43
+ #--------------------------------------------------------
44
+ def resource.page_name
45
+ File.basename( self.destination_path, '.*' )
46
+ end
47
+
48
+
49
+ #--------------------------------------------------------
50
+ # page_group
51
+ # Make page_group available for each page. This is
52
+ # the source parent directory (not the request path).
53
+ # Useful for for assigning classes, and/or group
54
+ # conditionals.
55
+ #--------------------------------------------------------
56
+ def resource.page_group
57
+ File.basename( File.split( self.source_file )[0] )
58
+ end
59
+
60
+
61
+ #--------------------------------------------------------
62
+ # group_count
63
+ # Returns the quantity of pages in the current
64
+ # page’s group. This is NOT the count of the number
65
+ # of an index page's legitimate children.
66
+ #--------------------------------------------------------
67
+ def resource.group_count
68
+ self.brethren.count + 1
69
+ end
70
+
71
+
72
+ #--------------------------------------------------------
73
+ # sort_order
74
+ # Returns the page sort order or 0. This is set
75
+ # initial population of the resource map, and made
76
+ # available here.
77
+ #--------------------------------------------------------
78
+ def resource.sort_order
79
+ options[:sort_order]
80
+ end
81
+
82
+
83
+ #--------------------------------------------------------
84
+ # page_sequence
85
+ # Returns the page sequence amongst all of the
86
+ # brethren. Can be uses as a page number surrogate.
87
+ # Base 1.
88
+ #--------------------------------------------------------
89
+ def resource.page_sequence
90
+ if self.sort_order == 0
91
+ return nil
92
+ else
93
+ self.siblings
94
+ .find_all { |p| p.sort_order != 0 && !p.ignored }
95
+ .push(self)
96
+ .sort_by { |p| p.sort_order }
97
+ .find_index(self) + 1
98
+ end
99
+ end
100
+
101
+
102
+ #--------------------------------------------------------
103
+ # brethren
104
+ # Returns an array of all of the siblings of the
105
+ # specified page, taking into account their
106
+ # eligibility for display.
107
+ # - is not already the current page.
108
+ # - has a sort_order.
109
+ # - is not ignored.
110
+ # Returned array will be:
111
+ # - sorted by sort_order.
112
+ #--------------------------------------------------------
113
+ def resource.brethren
114
+ self.siblings
115
+ .find_all { |p| p.sort_order != 0 && !p.ignored && p != self }
116
+ .sort_by { |p| p.sort_order }
117
+ end
118
+
119
+
120
+ #--------------------------------------------------------
121
+ # brethren_next
122
+ # Returns the next sibling based on order or nil.
123
+ #--------------------------------------------------------
124
+ def resource.brethren_next
125
+ if self.sort_order == 0
126
+ return nil
127
+ else
128
+ return self.brethren.find { |p| p.sort_order > self.sort_order }
129
+ end
130
+ end
131
+
132
+
133
+ #--------------------------------------------------------
134
+ # brethren_previous
135
+ # Returns the previous sibling based on order or nil.
136
+ #--------------------------------------------------------
137
+ def resource.brethren_previous
138
+ if self.sort_order == 0
139
+ return nil
140
+ else
141
+ return self.brethren.reverse.find { |p| p.sort_order < self.sort_order }
142
+ end
143
+ end
144
+
145
+
146
+ #--------------------------------------------------------
147
+ # navigator_eligible?
148
+ # Determine whether a page is eligible to include a
149
+ # previous/next page control based on:
150
+ # - the group is set to allow navigation (:navigate)
151
+ # - this page is not excluded from navigation. (:navigator => false)
152
+ # - this page has a sort_order.
153
+ #--------------------------------------------------------
154
+ def resource.navigator_eligible?
155
+ group_navigates = self.parent && self.parent.data['navigate'] == true
156
+ self_navigates = !( self.data.key?('navigator') && self.data['navigator'] == false )
157
+
158
+ group_navigates && self_navigates && self.sort_order != 0
159
+ end
160
+
161
+
162
+ #--------------------------------------------------------
163
+ # legitimate_children
164
+ # Returns an array of all of the children of the
165
+ # specified page, taking into account their
166
+ # eligibility for display.
167
+ # - has a sort_order.
168
+ # - is not ignored.
169
+ # Returned array will be:
170
+ # - sorted by sort_order.
171
+ #--------------------------------------------------------
172
+ def resource.legitimate_children
173
+ self.children
174
+ .find_all { |p| p.sort_order !=0 && !p.ignored }
175
+ .sort_by { |p| p.sort_order }
176
+ end
177
+
178
+
179
+ #--------------------------------------------------------
180
+ # breadcrumbs
181
+ # Returns an array of pages leading to the current
182
+ # page.
183
+ #--------------------------------------------------------
184
+ def resource.breadcrumbs
185
+ hierarchy = [] << self
186
+ hierarchy.unshift hierarchy.first.parent while hierarchy.first.parent
187
+ hierarchy
188
+ end
189
+
190
+
191
+ #========================================================
192
+ # sort_order and destination_path
193
+ # Take this opportunity to gather page sort orders
194
+ # and rename pages so that they don't include sort
195
+ # order as part of their names.
196
+ #
197
+ # Only X/HTML files with an `order` data key, or
198
+ # with an integer prefix + underscore will be
199
+ # considered for sort orders.
200
+ #
201
+ # If :strip_file_prefixes, then additionally we will
202
+ # prettify the output page name.
203
+ #========================================================
204
+ if resource.content_type && resource.content_type.start_with?('text/html', 'application/xhtml')
205
+ page_name = File.basename( resource.path, '.*' )
206
+ if resource.data.key?('order')
207
+ sort_order = resource.data['order']
208
+ elsif ( match = /^(\d*?)_/.match(page_name) )
209
+ sort_order = match[1]
210
+ if @app.extensions[:MiddlemanPageGroups].options[:strip_file_prefixes]
211
+ path_part = File.dirname( resource.destination_path )
212
+ name_part = page_name.sub( "#{sort_order}_", '') + File.extname( resource.path )
213
+ resource.destination_path = File.join( path_part, name_part )
214
+ end
215
+ else
216
+ sort_order = nil
217
+ end
218
+
219
+ resource.options[:sort_order] = sort_order.to_i
220
+ end
221
+
222
+
223
+ end # resources.each
224
+
225
+ resources
226
+
227
+ end # manipulate_resource_list
228
+
229
+
230
+ ############################################################
231
+ # Helpers
232
+ # Methods defined in this helpers block are available in
233
+ # templates.
234
+ ############################################################
235
+
236
+ helpers do
237
+
238
+
239
+ #--------------------------------------------------------
240
+ # page_classes
241
+ # Extend the built-in page_classes to include the
242
+ # naked group and page name.
243
+ #--------------------------------------------------------
244
+ def page_classes
245
+ if extensions[:MiddlemanPageGroups].options[:extend_page_class]
246
+ "#{current_page.page_name} #{current_page.page_group} #{super}"
247
+ else
248
+ super
249
+ end
250
+ end
251
+
252
+
253
+ #########################################################
254
+ # partial-like helpers
255
+ # Let's build these in so the user can choose to use
256
+ # them instead of installing partials.
257
+ #########################################################
258
+
259
+ #--------------------------------------------------------
260
+ # nav_breadcrumbs( locals )
261
+ # Generate the breadcrumbs partial.
262
+ # locals:
263
+ # [:klass] == class name for the list's <div>
264
+ #--------------------------------------------------------
265
+ def nav_breadcrumbs( locals = {} )
266
+ locals[:klass] = locals.delete(:class) if locals.key?(:class)
267
+ Haml::Engine.new(MMPartials::MM_BREADCRUMBS).render(self, locals)
268
+ end
269
+
270
+
271
+ #--------------------------------------------------------
272
+ # nav_breadcrumbs_alt( locals )
273
+ # Generate the breadcrumbs partial, alternate form.
274
+ # locals:
275
+ # [:klass] == class name for the list's <div>
276
+ # [:label] == label for "Current page"
277
+ #--------------------------------------------------------
278
+ def nav_breadcrumbs_alt( locals = {} )
279
+ locals[:klass] = locals.delete(:class) if locals.key?(:class)
280
+ Haml::Engine.new(MMPartials::MM_BREADCRUMBS_ALT).render(self, locals)
281
+ end
282
+
283
+ #--------------------------------------------------------
284
+ # nav_brethren( locals )
285
+ # Generate a fuller list of related topics, including
286
+ # blurbs if present.
287
+ # locals:
288
+ # [:klass] == class name for the list's <div>
289
+ # [:start] == resource from which to start the list.
290
+ #--------------------------------------------------------
291
+ def nav_brethren( locals = {} )
292
+ locals[:klass] = locals.delete(:class) if locals.key?(:class)
293
+ Haml::Engine.new(MMPartials::MM_BRETHREN).render(self, locals)
294
+ end
295
+
296
+
297
+ #--------------------------------------------------------
298
+ # nav_brethren_index( locals )
299
+ # Generates a condensed list of brethren, omitting
300
+ # blurbs.
301
+ # locals:
302
+ # [:klass] == class name for the list's <div>
303
+ # [:start] == resource from which to start the list.
304
+ #--------------------------------------------------------
305
+ def nav_brethren_index(locals = {})
306
+ locals[:klass] = locals.delete(:class) if locals.key?(:class)
307
+ Haml::Engine.new(MMPartials::MM_BRETHREN_INDEX).render(self, locals)
308
+ end
309
+
310
+
311
+ #--------------------------------------------------------
312
+ # nav_legitimate_children( locals )
313
+ # Generate a list of legitimate children.
314
+ # locals:
315
+ # [:klass] == class name for the list's <div>
316
+ # [:start] == resource from which to start the list.
317
+ #--------------------------------------------------------
318
+ def nav_legitimate_children(locals = {})
319
+ locals[:klass] = locals.delete(:class) if locals.key?(:class)
320
+ Haml::Engine.new(MMPartials::MM_LEGITIMATE_CHILDREN).render(self, locals)
321
+ end
322
+
323
+
324
+ #--------------------------------------------------------
325
+ # nav_prev_next( locals )
326
+ # Generate a previous and next button.
327
+ # locals:
328
+ # [:klass] == class name for the list's <div>
329
+ # [:label_previous] == label for previous button
330
+ # [:label_next] == label for next button
331
+ #--------------------------------------------------------
332
+ def nav_prev_next(locals = {})
333
+ locals[:klass] = locals.delete(:class) if locals.key?(:class)
334
+ Haml::Engine.new(MMPartials::MM_PREV_NEXT).render(self, locals)
335
+ end
336
+
337
+
338
+ #--------------------------------------------------------
339
+ # nav_toc_index( locals )
340
+ # Generate a nested table of contents.
341
+ # locals:
342
+ # [:start] == top-level starting resource.
343
+ # [:klass] == class name for the list's <div>
344
+ # Note in this case we're going to not use the haml
345
+ # template because render won't support the recursion
346
+ # we need.
347
+ #--------------------------------------------------------
348
+ def nav_toc_index( locals = {} )
349
+ recurse = locals.key?(:recurse) && locals[:recurse]
350
+ return if recurse && locals[:start].nil?
351
+
352
+ commence = locals[:start] || current_page
353
+ pages = commence.legitimate_children
354
+
355
+ if recurse
356
+ unless pages.to_a.empty?
357
+ haml_tag :ul do
358
+ pages.each do |p|
359
+ haml_tag :li do
360
+ haml_concat link_to p.data.title, p
361
+ nav_toc_index :start => p, :recurse => true
362
+ end
363
+ end
364
+ end
365
+ end
366
+ else
367
+ capture_haml do
368
+ locals[:klass] = locals.delete(:class) if locals.key?(:class)
369
+ haml_tag :ul, :class => (locals.key?(:klass) && locals[:klass]) || nav_toc_index_class do
370
+ haml_tag :li do
371
+ haml_concat link_to commence.data.title, commence
372
+ nav_toc_index :start => commence, :recurse => true
373
+ end
374
+ end
375
+ end # capture_haml
376
+ end
377
+
378
+ end
379
+
380
+
381
+ #########################################################
382
+ # expose selected defaults
383
+ # We want our templates to be able to access the
384
+ # extension options for default settings in partials.
385
+ #########################################################
386
+
387
+ def nav_breadcrumbs_class
388
+ extensions[:MiddlemanPageGroups].options[:nav_breadcrumbs_class]
389
+ end
390
+
391
+ def nav_breadcrumbs_alt_class
392
+ extensions[:MiddlemanPageGroups].options[:nav_breadcrumbs_alt_class]
393
+ end
394
+
395
+ def nav_breadcrumbs_alt_label
396
+ extensions[:MiddlemanPageGroups].options[:nav_breadcrumbs_alt_label]
397
+ end
398
+
399
+ def nav_brethren_class
400
+ extensions[:MiddlemanPageGroups].options[:nav_brethren_class]
401
+ end
402
+
403
+ def nav_brethren_index_class
404
+ extensions[:MiddlemanPageGroups].options[:nav_brethren_index_class]
405
+ end
406
+
407
+ def nav_legitimate_children_class
408
+ extensions[:MiddlemanPageGroups].options[:nav_legitimate_children_class]
409
+ end
410
+
411
+ def nav_prev_next_class
412
+ extensions[:MiddlemanPageGroups].options[:nav_prev_next_class]
413
+ end
414
+
415
+ def nav_prev_next_label_prev
416
+ extensions[:MiddlemanPageGroups].options[:nav_prev_next_label_prev]
417
+ end
418
+
419
+ def nav_prev_next_label_next
420
+ extensions[:MiddlemanPageGroups].options[:nav_prev_next_label_next]
421
+ end
422
+
423
+ def nav_toc_index_class
424
+ extensions[:MiddlemanPageGroups].options[:nav_breadcrumbs_alt_class]
425
+ end
426
+
427
+
428
+ end #helpers
429
+
430
+
431
+ end # class MiddlemanPageGroups
@@ -0,0 +1,173 @@
1
+ ################################################################################
2
+ # partials
3
+ # Here's the deal: this is an extension and not an extension+template, so in
4
+ # order to provide some modicum of usefulness to users, we're providing some
5
+ # template-like helpers in the extension. This file constitutes the source
6
+ # for them, with the added benefit that we can recycle the values in the
7
+ # console application and generate real partial templates for users that
8
+ # prefer pure MVC.
9
+ ################################################################################
10
+
11
+
12
+ module MMPartials
13
+
14
+ MM_BREADCRUMBS = <<HEREDOC
15
+ - pages = current_page.breadcrumbs
16
+ - unless pages.to_a.empty?
17
+ %div{:class => (defined?(klass) && klass) || nav_breadcrumbs_class}
18
+ %ul
19
+ - pages.each do |p|
20
+ %li= link_to p.data.title, p
21
+
22
+ -#
23
+ - This partial renders links into an <ul>.
24
+ - You probably need a class in order to render this properly.
25
+ - :klass - pass in this local to specify a class for the containing div.
26
+ HEREDOC
27
+
28
+
29
+ MM_BREADCRUMBS_ALT = <<HEREDOC
30
+ - pages = current_page.breadcrumbs
31
+ - unless pages.to_a.empty?
32
+ %div{:class => (defined?(klass) && klass) || nav_breadcrumbs_alt_class}
33
+ %ul
34
+ - pages[0...pages.count-1].each do |p|
35
+ %li= link_to p.data.title, p
36
+ %li= (defined?(label) && label) || nav_breadcrumbs_alt_label
37
+
38
+ -#
39
+ - This partial renders links into an <ul>.
40
+ - You probably need a class in order to render this properly.
41
+ - This alternate version replaces the last link with the extension's
42
+ `nav_breadcrumbs_alt_label` value.
43
+ - :label - pass in this local instead of using the default.
44
+ - :klass - pass in this local to specify a class for the containing div.
45
+ HEREDOC
46
+
47
+
48
+ MM_BRETHREN = <<HEREDOC
49
+ - commence = (defined?(start) && start) || current_page
50
+ - pages = commence.brethren
51
+ - unless pages.to_a.empty?
52
+ %div{:class => (defined?(klass) && klass) || nav_brethren_class}
53
+ %dl
54
+ - pages.each do |p|
55
+ %dt<
56
+ = link_to p.data.title, p
57
+ - if p.data.blurb
58
+ %dd= p.data.blurb
59
+
60
+ -#
61
+ - This partial renders links with blurbs into a <dl> to serve as
62
+ a related links table of contents.
63
+ - You probably need a class in order to render this properly.
64
+ - For a compact form without blurbs, see also `_nav_brethren_index.haml.
65
+ - :klass - pass in this local to specify a class for the containing div.
66
+ - :start - pass in this local to specify a different starting point.
67
+ HEREDOC
68
+
69
+
70
+ MM_BRETHREN_INDEX =<<HEREDOC
71
+ - commence = (defined?(start) && start) || current_page
72
+ - pages = commence.brethren
73
+ - unless pages.to_a.empty?
74
+ %div{:class => (defined?(klass) && klass) || nav_brethren_index_class}
75
+ %ul
76
+ - pages.each do |p|
77
+ %li= link_to p.data.title, p
78
+
79
+ -#
80
+ This partial renders brethren into an <ul> to serve as a related-pages type
81
+ of table of contents.
82
+ - You probably need a class in order to render this properly.
83
+ - :klass - pass in this local to specify a class for the containing div.
84
+ - :start - pass in this local to specify a different starting point.
85
+ HEREDOC
86
+
87
+
88
+ MM_LEGITIMATE_CHILDREN =<<HEREDOC
89
+ - commence = (defined?(start) && start) || current_page
90
+ - pages = commence.legitimate_children
91
+ - unless pages.to_a.empty?
92
+ %div{:class => (defined?(klass) && klass) || nav_legitimate_children_class}
93
+ %dl
94
+ - pages.each do |p|
95
+ %dt= link_to p.data.title, p
96
+ - if p.data.blurb
97
+ %dd= p.data.blurb
98
+
99
+ -#
100
+ This partial renders links with blurbs into a <dl> to serve as a high-level
101
+ table of contents.
102
+ - You probably need a class in order to render this properly.
103
+ - :klass - pass in this local to specify a class for the containing div.
104
+ - :start - pass in this local to specify a different starting point.
105
+ HEREDOC
106
+
107
+
108
+ MM_PREV_NEXT =<<HEREDOC
109
+ - p_prev = current_page.brethren_previous
110
+ - p_next = current_page.brethren_next
111
+ - b_prev = (defined?(label_previous) && label_previous) || nav_prev_next_label_prev
112
+ - b_next = (defined?(label_next) && label_next) || nav_prev_next_label_next
113
+ %div{:class => (defined?(klass) && klass) || nav_prev_next_class}
114
+ - if p_prev.nil?
115
+ %span= b_prev
116
+ - else
117
+ = link_to b_prev, p_prev
118
+ - if p_next.nil?
119
+ %span= b_next
120
+ - else
121
+ = link_to b_next, p_next
122
+
123
+ -#
124
+ This partial renders a div with two spans that are suitable for use as
125
+ previous and next buttons when properly styled.
126
+ - You probably need a class in order to render this properly.
127
+ - :klass - pass in this local to specify a class for the containing div.
128
+ - :label_previous - the label for the Previous button. Default is "Previous".
129
+ - :label_next - the label for the Next button. Default is "Next".
130
+ HEREDOC
131
+
132
+
133
+ MM_TOC_INDEX = <<HEREDOC
134
+ - commence = (defined?(start) && start) || current_page
135
+ - pages = commence.legitimate_children
136
+ - if defined?(recurse) && recurse
137
+ - unless pages.to_a.empty?
138
+ %ul
139
+ - pages.each do |p|
140
+ %li<
141
+ = link_to p.data.title, p
142
+ = partial 'partials/toc_index', :locals => { :start => p, :recurse => true }
143
+ - else
144
+ %ul{:class => (defined?(klass) && klass) || nav_toc_index_class}
145
+ %li<
146
+ = link_to commence.data.title, commence
147
+ = partial 'partials/toc_index', :locals => { :start => commence, :recurse => true }
148
+
149
+ -#
150
+ - This partial renders nested links into an <ul>. The top level item is the
151
+ start page followed by the entire directory structure below it.
152
+ - You probably need a class in order to render this properly.
153
+ - :start - pass in this local to specify the starting page.
154
+ - :klass - pass in this local to specify a class for the containing div.
155
+ HEREDOC
156
+
157
+
158
+ #########################################################
159
+ # MM_PARTIALS
160
+ # Used by the CLI application to build partial files.
161
+ #########################################################
162
+ MM_PARTIALS = [
163
+ { :filename => '_nav_breadcrumbs.haml', :content => MM_BREADCRUMBS },
164
+ { :filename => '_nav_breadcrumbs_alt.haml', :content => MM_BREADCRUMBS_ALT },
165
+ { :filename => '_nav_brethren.haml', :content => MM_BRETHREN },
166
+ { :filename => '_nav_brethren_index.haml', :content => MM_BRETHREN_INDEX },
167
+ { :filename => '_nav_legitimate_children.haml', :content => MM_LEGITIMATE_CHILDREN },
168
+ { :filename => '_nav_prev_next.haml', :content => MM_PREV_NEXT },
169
+ { :filename => '_nav_toc_index.haml', :content => MM_TOC_INDEX },
170
+ ]
171
+
172
+
173
+ end # module
@@ -0,0 +1,5 @@
1
+ module Middleman
2
+ module MiddlemanPageGroups
3
+ VERSION = '1.0.0'
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ require 'middleman-core'
2
+
3
+ Middleman::Extensions.register :MiddlemanPageGroups, :before_configuration do
4
+ require_relative 'middleman-pagegroups/extension'
5
+ MiddlemanPageGroups
6
+ end
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'middleman-pagegroups/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'middleman-pagegroups'
7
+ s.version = Middleman::MiddlemanPageGroups::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ['Jim Derry']
10
+ s.email = ['balthisar@gmail.com']
11
+ s.homepage = 'https://github.com/middlemac/middleman-pagegroups'
12
+ s.summary = 'Provides logical page groups and easy navigation for Middleman projects.'
13
+ s.description = 'Provides logical page groups and easy navigation for Middleman projects.'
14
+ s.license = 'MIT'
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ['lib']
20
+
21
+ # The version of middleman-core your extension depends on
22
+ s.add_runtime_dependency('middleman-core', ['~> 4.1', '>= 4.1.6'])
23
+
24
+ # Additional dependencies
25
+ s.add_runtime_dependency('middleman-cli', ['~> 4.1', '>= 4.1.6'])
26
+ end