middleman-pagegroups 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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