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
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8d0f5bd96df68bc910b528cbaae3a2d6ee49f769
4
+ data.tar.gz: 3458d3fbb6bd11fc50b6901c1233e7e8c13bf3d9
5
+ SHA512:
6
+ metadata.gz: 1ee3edf96541e2d7b09464b23bcdd493e82033fe75fe9cc6a6baa73c165fe9f246704e1974058c01c5e1c7f6aa62e44cc022a4700f9b0857b3baecdf09fd2330
7
+ data.tar.gz: 62448847f7f368f721f56db215c98c80c45f17ad93f96a861f5d653edf442b637603534682e56205d3f8c50044abb92f81050e84c849e1ab92e9dd6a27acfb19
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ # Rubymine noise
2
+ .idea/
3
+
4
+ # BBedit noise
5
+ *.bbprojectd
6
+
7
+ # Mac OS X noise
8
+ .DS_Store
9
+
10
+ # Ignore bundler lock files
11
+ Gemfile.lock
12
+
13
+ # Ignore pkg folder
14
+ /pkg
15
+
16
+ # Ignore build folders
17
+ build*
data/CHANGELOG.md ADDED
@@ -0,0 +1,6 @@
1
+ middleman-pagegroups change log
2
+ ===============================
3
+
4
+ - Version 1.0 / 2016-March
5
+
6
+ - Initial Release
data/Gemfile ADDED
@@ -0,0 +1,18 @@
1
+ # If you do not have OpenSSL installed, update
2
+ # the following line to use "http://" instead
3
+ source 'https://rubygems.org'
4
+
5
+ # Specify your gem's dependencies in middleman-pagegroups.gemspec
6
+ gemspec
7
+
8
+ group :development do
9
+ gem 'rake'
10
+ gem 'rdoc'
11
+ gem 'yard'
12
+ end
13
+
14
+ group :test do
15
+ gem 'cucumber'
16
+ gem 'aruba'
17
+ gem 'rspec'
18
+ end
data/LICENSE.md ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License
2
+ ===============
3
+
4
+ Copyright (c) 2016 Jim Derry
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in
14
+ all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,87 @@
1
+ middleman-pagegroups readme
2
+ ---------------------------
3
+ [![Gem Version](https://badge.fury.io/rb/middleman-targets.svg)](https://badge.fury.io/rb/middleman-targets)
4
+
5
+
6
+ `middleman-pagegroups`
7
+
8
+ : This gem provides advanced navigation tools and helpers for grouping pages
9
+ by topic and navigating between them. It includes support for tables of
10
+ content, related pages, breadcrumbs, and more.
11
+
12
+ It is standalone and can be used in any Middleman project.
13
+
14
+
15
+ Install the Gem
16
+ ---------------
17
+
18
+ Install the gem in your preferred way, typically:
19
+
20
+ ~~~ bash
21
+ gem install middleman-pagegroups
22
+ ~~~
23
+
24
+ From git source:
25
+
26
+ ~~~ bash
27
+ rake install
28
+ ~~~
29
+
30
+
31
+ Documentation
32
+ -------------
33
+
34
+ The complete documentation leverages the features of this gem in order to better
35
+ document them. Having installed the gem, read the full documentation in your
36
+ web browser:
37
+
38
+ ~~~ bash
39
+ middleman-pagegroups documentation
40
+ cd middleman-pagegroups-docs/
41
+ bundle install
42
+ bundle exec middleman server
43
+ ~~~
44
+
45
+ And then open your web browser to the address specified (typically
46
+ `localhost:4567`).
47
+
48
+
49
+ Quick Documentation
50
+ -------------------
51
+
52
+ [Middleman](https://middlemanapp.com/) 4.1.6 or newer is required. Earlier
53
+ point versions of Middleman do not have the necessary support for this
54
+ extension.
55
+
56
+ Once setup and configured, you can build multiple targets like so:
57
+
58
+ TO-DO
59
+
60
+
61
+ Added Features
62
+ --------------
63
+
64
+ TO-DO
65
+
66
+
67
+ Middlemac
68
+ ---------
69
+
70
+ This Middleman extension is a critical part of
71
+ [Middlemac](https://github.com/middlemac), the Mac OS X help building system
72
+ for Mac OS X applications. However this gem is not Mac OS X specific and can be
73
+ useful in any application for which you want to provide structure and
74
+ navigation.
75
+
76
+
77
+ License
78
+ -------
79
+
80
+ MIT. See `LICENSE.md`.
81
+
82
+
83
+ Changelog
84
+ ---------
85
+
86
+ See `CHANGELOG.md` for point changes, or simply have a look at the commit
87
+ history for non-version changes (such as readme updates).
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList['test/**/*_test.rb']
8
+ end
9
+
10
+ task :default => :spec
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ ################################################################################
4
+ # middleman-pagegroups
5
+ # This file constitutes the command line interface for middleman-pagegroups
6
+ ################################################################################
7
+
8
+ require 'thor'
9
+ require 'fileutils'
10
+ require_relative '../lib/middleman-pagegroups/version'
11
+ require_relative '../lib/middleman-pagegroups/partials'
12
+
13
+
14
+ module MiddlemanPageGroupsCli
15
+
16
+ class Cli < Thor
17
+
18
+ map %w[--version -v] => :__print_version
19
+
20
+ ############################################################
21
+ # help
22
+ # Override to add additional description.
23
+ ############################################################
24
+ def help(*args)
25
+ if args.count == 0
26
+ puts <<-HEREDOC
27
+
28
+ middleman-pagegroups version #{Middleman::MiddlemanPageGroups::VERSION}
29
+
30
+ This gem adds functionality to Middleman and is not executable on its own,
31
+ other than for generating the documentation sample project and sample partial
32
+ files. Instead, you must add this gem to your Middleman project's `Gemfile`
33
+ and then activate it in your `config.rb` file.
34
+
35
+ HEREDOC
36
+ end
37
+ super
38
+ end
39
+
40
+
41
+ ############################################################
42
+ # documentation
43
+ ############################################################
44
+ desc 'documentation', 'Install the sample project into your current working directory.'
45
+ long_desc <<-HEREDOC
46
+ `documentation` will produce a sample project named `middleman-pagegroups-docs/`
47
+ in your current working directory. This sample uses the features of this gem.
48
+ You can then serve this new project to read the documentation by:
49
+
50
+ cd middleman-pagegroups-docs
51
+ bundle install
52
+ bundle exec middleman server
53
+
54
+ HEREDOC
55
+ def documentation
56
+ source = File.join('..', '..', 'documentation_project', '.')
57
+ source = File.expand_path(source, __FILE__)
58
+ dest = File.expand_path(File.join('.', 'middleman-pagegroups-docs', '.'))
59
+ FileUtils.cp_r(source, dest)
60
+ puts "middleman-pagegroups installed the project in\n#{dest}"
61
+ end
62
+
63
+
64
+ ############################################################
65
+ # partials
66
+ ############################################################
67
+ desc 'partials [<directory>]', 'Install the sample partials.'
68
+ long_desc <<-HEREDOC
69
+ `partials` will produce sample partial files into your current working
70
+ directory, or into <directory> if you specify one. These partials can
71
+ then be used using Middleman's `partials` helper in your own projects.
72
+
73
+ HEREDOC
74
+ def partials(*args)
75
+ dest = File.expand_path( args.empty? ? File.join('.') : args[0] )
76
+ unless File.writable?( dest )
77
+ puts "middleman-pagegroups can't seem to write to #{dest}."
78
+ exit 1
79
+ end
80
+
81
+ MMPartials::MM_PARTIALS.each do |p|
82
+ filename = File.join( dest, p[:filename] )
83
+ puts "writing #{filename}"
84
+ File.open( filename, 'w' ) { |f| f.write( p[:content]) }
85
+ end
86
+
87
+ puts "middleman-pagegroups installed #{MMPartials::MM_PARTIALS.count} partials in\n#{dest}"
88
+ end
89
+
90
+
91
+ ############################################################
92
+ # __print_version
93
+ ############################################################
94
+ desc '--version, -v', 'print the version'
95
+ def __print_version
96
+ puts "middleman-pagegroups version #{Middleman::MiddlemanPageGroups::VERSION}"
97
+ end
98
+
99
+ end # class Cli
100
+
101
+ end # module MiddlemanPagegroupsCli
102
+
103
+
104
+ ###########################################################
105
+ # Main
106
+ ###########################################################
107
+
108
+ MiddlemanPageGroupsCli::Cli.start(ARGV)
@@ -0,0 +1,25 @@
1
+ # Rubymine noise
2
+ .idea/
3
+
4
+ # BBedit noise
5
+ *.bbprojectd
6
+
7
+ # Mac OS X noise
8
+ .DS_Store
9
+
10
+ # Ignore bundler lock files
11
+ Gemfile.lock
12
+
13
+ # Ignore pkg folder
14
+ /pkg
15
+
16
+ # Ignore build folders
17
+ .rbenv-*
18
+ .ruby-gemset
19
+ .ruby-version
20
+ .sass-cache
21
+ .sassc
22
+ .tmp
23
+ build*
24
+ Makefile
25
+ tmp
@@ -0,0 +1,18 @@
1
+ # If you do not have OpenSSL installed, change
2
+ # the following line to use 'http://'
3
+ source 'https://rubygems.org'
4
+
5
+ # For faster file watcher updates on Windows:
6
+ gem 'wdm', '~> 0.1.0', platforms: [:mswin, :mingw]
7
+
8
+ # Windows does not come with time zone data
9
+ gem 'tzinfo-data', platforms: [:mswin, :mingw, :jruby]
10
+
11
+ # Middleman Gems
12
+ gem 'middleman-pagegroups', :path => '../'
13
+ gem 'middleman', '~> 4.1.6'
14
+ gem 'middleman-syntax'
15
+
16
+
17
+ #gem 'middleman-compass'
18
+ gem 'font-awesome-sass'
@@ -0,0 +1,13 @@
1
+ documentation-project readme
2
+ ----------------------------
3
+
4
+ This gem's documentation is a Middleman project using the features of this gem.
5
+ To view the documentation project, `cd` into this directory and
6
+
7
+ ~~~ bash
8
+ gem install
9
+ bundle exec middleman serve
10
+ ~~~
11
+
12
+ When the server starts, it will provide instructions on how to view the project
13
+ in your web browser.
@@ -0,0 +1,109 @@
1
+ ################################################################################
2
+ # Sample Project for middleman-pagegroups
3
+ ################################################################################
4
+
5
+ #==========================================================================
6
+ # Conflicting resources
7
+ # middleman-pagegroups uses Middleman's resource map to determine
8
+ # relationships between pages in groups. Be sure to activate other
9
+ # extensions that might manipulate the resource map before activating
10
+ # middleman-pagegroups, such as MiddlemanTargets.
11
+ #==========================================================================
12
+ # activate :MiddlemanTargets
13
+
14
+
15
+ #==========================================================================
16
+ # Extension Setup
17
+ # Note that middleman-targets adds configuration parameters to the base
18
+ # Middleman application (supported feature in 4.0+); there are *not*
19
+ # extension options. Additionally if middleman-targets is in your Gemfile
20
+ # then it is also activated automatically.
21
+ #==========================================================================
22
+ activate :MiddlemanPageGroups do |config|
23
+
24
+ # Indicate whether or not numeric file name prefixes used for sorting
25
+ # pages should be eliminated during output. This results in cleaner
26
+ # URI's. Helpers such as `page_name` and Middleman helpers such as
27
+ # `page_class` will reflect the pretty name.
28
+ config.strip_file_prefixes = true
29
+
30
+ # Indicates whether or not Middleman's built-in `page_class` helper is
31
+ # extended to include the page_group and page_name.
32
+ config.extend_page_class = true
33
+
34
+ # the following options provide defaults for the built-in helpers, and
35
+ # also work with the sample partials if you choose to install them.
36
+ # They'll also work in your own partials and helpers, of course.
37
+
38
+ # Default css class for the nav_breadcrumbs helper/partial.
39
+ config.nav_breadcrumbs_class = 'breadcrumbs'
40
+
41
+ # Default css class for the nav_breadcrumbs_alt helper/partial.
42
+ config.nav_breadcrumbs_alt_class = 'breadcrumbs'
43
+
44
+ # Default "current page" label for the nav_breadcrumbs_alt helper/partial.
45
+ config.nav_breadcrumbs_alt_label = 'Current page'
46
+
47
+ # Default css class for the nav_brethren helper/partial.
48
+ config.nav_brethren_class = 'table_contents'
49
+
50
+ # Default css class for the nav_brethren_index helper/partial.
51
+ config.nav_brethren_index_class = 'related-topics'
52
+
53
+ # Default css class for the nav_legitimate_children helper/partial.
54
+ config.nav_legitimate_children_class = 'table_contents'
55
+
56
+ # Default css class for the nav_prev_next helper/partial.
57
+ config.nav_prev_next_class = 'navigate_prev_next'
58
+
59
+ # Default "previous" label text for the nav_prev_next helper/partial.
60
+ config.nav_prev_next_label_prev = 'Previous'
61
+
62
+ # Default "next" label text for the nav_prev_next helper/partial.
63
+ config.nav_prev_next_label_next = 'Next'
64
+
65
+ # Default css class for the nav_toc_index helper/partial.
66
+ config.nav_toc_index_class = 'help_map'
67
+
68
+ end
69
+
70
+
71
+ #==========================================================================
72
+ # Regular Middleman Setup
73
+ #==========================================================================
74
+
75
+ set :relative_links, true
76
+ activate :syntax
77
+
78
+
79
+ #==========================================================================
80
+ # Helpers
81
+ # These helpers are used by the sample project only; there's no need
82
+ # to keep them around in your own projects.
83
+ #==========================================================================
84
+
85
+ # Methods defined in the helpers block are available in templates
86
+ helpers do
87
+
88
+ def product_name
89
+ 'middleman-pagegroups'
90
+ end
91
+
92
+ def product_version
93
+ '1.0.0'
94
+ end
95
+
96
+ def product_uri
97
+ 'https://github.com/middlemac'
98
+ end
99
+
100
+ end
101
+
102
+ # Build-specific configuration
103
+ configure :build do
104
+ # Minify CSS on build
105
+ # activate :minify_css
106
+
107
+ # Minify Javascript on build
108
+ # activate :minify_javascript
109
+ end
@@ -0,0 +1,111 @@
1
+ ---
2
+ title: Concepts
3
+ id: concepts
4
+ blurb: Understand the design and philosophy of <code>middleman-pagegroups</code>.
5
+ layout: template-logo-medium
6
+ navigator: true
7
+ ---
8
+
9
+ # <%= current_page.data.title %>
10
+
11
+ This section describes some of `middleman-pagegroups`’ design and
12
+ philosophy, and this is the right section to begin in if you’re still wondering
13
+ what this extension actually provides to you.
14
+
15
+ ## Intended Uses
16
+
17
+ `middleman-pagegroups` is chiefly designed to support hierarchical, structured,
18
+ multi-page documents that have organizational relationships between them, such
19
+ as product manuals, help files, and Middleman extension gem documentation.
20
+
21
+ Using its model for groups, pages, legitimate children, and brethren simplifies
22
+ the implementation of tables of contents, previous and next buttons, breadcrumb
23
+ indicators, see-also tables, and more. This frees you from having to manually
24
+ update and validate scores of links and hand-coding on a page-by-page basis.
25
+
26
+ Books with sections, chapters, and pages are an obvious sample use case.
27
+ Software manuals, tutorials, training courses, and more are all suitable
28
+ candidates for the flexible and nearly-automatic organization provided by
29
+ `middleman-pagegroups`.
30
+
31
+
32
+ ## What `middleman-pagegroups` does
33
+
34
+ `middleman-pagegroups` principally enables **automatic navigation** via the
35
+ management of **sort order**, **groups** (including nested groups), and making
36
+ a determination about the **legitimacy** of these relationships.
37
+
38
+ It provides helpers and sample partials to enable **breadcrumbs**, **previous**
39
+ and *next** buttons, **tables of contents**, and **related pages**, all using
40
+ the concepts that enable automatic navigation.
41
+
42
+
43
+ ## Convention over Configuration
44
+
45
+ All of the features making `middleman-pagegroups` useful hinge on being able to
46
+ enable automatic navigation, and this is accomplished by following logical,
47
+ simple conventions that avoid having to micromanage many series of configuration
48
+ files.
49
+
50
+ For example you will define a **group** as a directory in your file system and
51
+ include an `index.html` file to serve as the parent of that group.
52
+
53
+ You will establish **sort orders** to define the **legitimacy** of certain
54
+ pages for inclusion or exclusion in the automatic navigation system.
55
+
56
+
57
+ ## Hierarchical Design
58
+
59
+ `middleman-pagegroups` inherently uses the concept of “groups,” each of which
60
+ has pages and/or groups that belong to the group as its children.
61
+
62
+ Every project has a single, top-level (root) group, and because groups are named
63
+ for the directory that contain them, the top level group is usually named
64
+ `source` (because Middleman’s default source folder is so-named).
65
+
66
+ A detailed look at the hierarchical design and requirements can be found in the
67
+ [Directory Organization](directory_organization) section.
68
+
69
+
70
+ ## Sort Order
71
+
72
+ Every page intended for automatic navigation must include a sort order, which
73
+ can be specified with a [Front Matter](frontmatter) key or as part of the file
74
+ name.
75
+
76
+ Don’t confuse sort order with page number. Sort order is simply an integer value
77
+ that does not have to be consecutive. It may be convenient to specify these in
78
+ steps of 10, for example, to make later insertions easier.
79
+
80
+ To include pages in your project (such as [this one](ovum)) that don’t
81
+ participate in the automatic navigation scheme, simply do not provide a sort
82
+ order.
83
+
84
+
85
+ ## Legitimacy
86
+
87
+ In the context of `middleman-pagegroups` “legitimacy” refers to eligibility for
88
+ inclusion in the automatic navigation system. The criteria for legitimacy
89
+ include:
90
+
91
+ - The file must be an HTML or XHTML file.
92
+ - The file must not be `ignored?`, which is a resource attribute built into
93
+ Middleman. Other extensions (such as `middleman-targets`) may modify this
94
+ attribute.
95
+ - The file must have an assigned sort order.
96
+
97
+ You can still include accessible pages within the group but exclude them from
98
+ the automatic navigation features, i.e., render them “illegitimate.” Simply do
99
+ not provide a sort order for these pages.
100
+
101
+
102
+ ## Brethren
103
+
104
+ `middleman-pagegroups` uses the word _brethren_ to refer to _legitimate
105
+ siblings_, i.e., “legitimate” as described above, not including itself. This
106
+ serves as a good basis for related-pages types of links.
107
+
108
+ ## Legitimate Children
109
+
110
+ `middleman-pagegroups` similarly refines Middleman’s built-in children to
111
+ ensure that _only_ “legitimate” documents are included in automatic navigation.
@@ -0,0 +1,85 @@
1
+ ---
2
+ title: Directory and File Organization
3
+ id: directory_organization
4
+ blurb: Organized directory structures enable most of the automatic features
5
+ of <code>middleman-pagegroups</code>.
6
+ layout: template-logo-medium
7
+ navigator: true
8
+ ---
9
+
10
+ # <%= current_page.data.title %>
11
+
12
+ Directory organization is one of key parts of letting `middleman-pagegroups`
13
+ take the hassle out of managing content for you.
14
+
15
+ Briefly the role of the directory layout convention is this:
16
+
17
+ - Directories equate to groups.
18
+ - Directory names equate to the group names.
19
+ - Each file in a directory, except for `index.html`, constitutes a member of
20
+ the group.
21
+ - The `index.html` file in a directory serves as the placeholder for the
22
+ `parent` of the group.
23
+
24
+
25
+ Each group must include at least one file that will render into `index.html`.
26
+ This file serves as the parent to the group. As such, the top-level document
27
+ of any project is `source/html.index` which is a familiar expectation in any
28
+ HTML project, and the default, top-level document for any nested directory is
29
+ also `index.html`, which is consistent with practices to which you are no doubt
30
+ already accustomed.
31
+
32
+ One important novelty of `middleman-pagegroups` is that a group’s `index.html`
33
+ file is considered a child of parent group. For example in this documentation
34
+ project’s hierarchy…
35
+
36
+ ~~~
37
+ source/
38
+ index.html <- root object, parent to license, toc, and documentation/index.html
39
+ license.html <- Sort order is 20. Member of the `source` group.
40
+ toc.html <- Sort order is 30. Member of the `source` group.
41
+ documentation/
42
+ index.html <- Sort order is 10, and is a member of the `source` group!
43
+ concepts.html
44
+ directory_organization.html
45
+
46
+ ~~~
47
+
48
+ …the files `license.html`, `toc.html`, and `documentation/index.html` are _all_
49
+ children of the `source` group. The file `source/index.html` is the child of
50
+ no one; it is the root document.
51
+
52
+ Another way to look at this is like this: the directory `documentation/`, i.e.,
53
+ the group `documentation`, is a member of the `source` group. It’s represented
54
+ by its `index.html` file.
55
+ {:.note}
56
+
57
+
58
+ ## Nesting
59
+
60
+ Groups can be arbitrarily nested as deep as you wish. There’s probably a limit
61
+ that would cause a stack overflow and crash, but you’re not likely to reach it
62
+ unless you try deliberately.
63
+
64
+
65
+ ## Sort Order
66
+
67
+ Although [Front Matter](frontmatter) is an appropriate place to specify a
68
+ page’s `:order`, it’s sometimes convenient for developers to arrange files in
69
+ order in their filesystem, too. This is supported by `middleman-pagegroups`,
70
+ too.
71
+
72
+ Simply prefix your filename with any integer followed by an underscore, e.g.,
73
+ the source file for this page is `20_directory_organization.html.md.erb`.
74
+
75
+ In order to avoid ugly URIs (e.g., `20_directory_organization.html`) make sure
76
+ that your [`config.rb`](config) file sets `strip_file_prefixes` to `true`, which
77
+ will rewrite page names without the order specifiers (e.g.,
78
+ `directory_organization.html`).
79
+
80
+ Filename sort order prefixes only work for non-group files, however. Groups and
81
+ their `index.html` files cannot be magically numbered in this way. You _must_
82
+ use the front matter `:order` key in `index.html` files, instead.
83
+ {:.note}
84
+
85
+ Front matter `:order` will override any order specified by file names.