nesta-plugin-subpages 0.5.0 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +23 -4
- data/lib/nesta-plugin-subpages/init.rb +35 -7
- data/lib/nesta-plugin-subpages/version.rb +1 -1
- metadata +2 -2
data/README.md
CHANGED
@@ -17,10 +17,10 @@ subdirectories. For example:
|
|
17
17
|
Page.find_by_path('parent').subpages() => [page-1, page-2, subdir-1]
|
18
18
|
|
19
19
|
The returned array contains the Page instances themselves, not their
|
20
|
-
string paths.
|
20
|
+
string paths, and they will be sorted based on their titles.
|
21
21
|
|
22
|
-
|
23
|
-
|
22
|
+
Next, there is also `#has_subpages?` helper method that returns true or
|
23
|
+
false if the page has any subpages.
|
24
24
|
|
25
25
|
Subpages are cached within an instance variable the first time that
|
26
26
|
`#subpages` is called, but this should not be a problem in most cases.
|
@@ -28,6 +28,20 @@ Subpages are cached within an instance variable the first time that
|
|
28
28
|
Also, there is a helper defined called `subpages_for` that takes either
|
29
29
|
a Page instance or a string path and returns the same array.
|
30
30
|
|
31
|
+
Lastly, if for some reason you do *not* want a subpage listed, merely
|
32
|
+
give it the metadata tag of `skip subpage: true` and it will indeed be
|
33
|
+
skipped in the list.
|
34
|
+
|
35
|
+
There are two options that you can pass to `subpages` in a hash to
|
36
|
+
modify what it does:
|
37
|
+
|
38
|
+
:do_sort - Defaults to true; sorts the pages by title.
|
39
|
+
:include_subdirs - Defaults to true; includes index pages of
|
40
|
+
immediate subdirectories.
|
41
|
+
|
42
|
+
Also, if you give the method a block, each page will be yielded and the
|
43
|
+
method will return nil.
|
44
|
+
|
31
45
|
## Installation
|
32
46
|
|
33
47
|
Add this line to your application's Gemfile:
|
@@ -53,7 +67,12 @@ example, in the sidebar, you might do this:
|
|
53
67
|
%h1 Subpages
|
54
68
|
- display_menu(@page.subpages, :class => "menu")
|
55
69
|
|
56
|
-
|
70
|
+
Or, if you wanna iterate of the pages:
|
71
|
+
|
72
|
+
- @page.subpages do |page|
|
73
|
+
= page.title
|
74
|
+
|
75
|
+
|
57
76
|
# Contributing
|
58
77
|
|
59
78
|
1. Fork it
|
@@ -8,10 +8,10 @@ module Nesta
|
|
8
8
|
# array otherwise.
|
9
9
|
def subpages_for(page_or_path)
|
10
10
|
case page_or_path
|
11
|
-
when Page
|
11
|
+
when Nesta::Page
|
12
12
|
return page_or_path.subpages()
|
13
13
|
when String
|
14
|
-
page = Page.find_by_path(page_or_path)
|
14
|
+
page = Nesta::Page.find_by_path(page_or_path)
|
15
15
|
return page.subpages if page
|
16
16
|
end
|
17
17
|
|
@@ -27,10 +27,23 @@ module Nesta
|
|
27
27
|
# page and any index pages in immediate subdirectories. If
|
28
28
|
# the page is NOT an index page or there are NO subpages, an
|
29
29
|
# empty array is returned.
|
30
|
-
|
30
|
+
#
|
31
|
+
# The argument is a hash that defines two keys:
|
32
|
+
# :do_sort -- sort the results by page title.
|
33
|
+
# :include_subdirs -- include index pages in immediate subdirectories.
|
34
|
+
#
|
35
|
+
# If given a block, the method will yield each page to it and
|
36
|
+
# method will return nil. Pages are still cached in @subpages
|
37
|
+
# however.
|
38
|
+
def subpages(opts={})
|
31
39
|
return [] unless self.index_page?
|
32
40
|
return @subpages if @subpages
|
33
41
|
|
42
|
+
options = {
|
43
|
+
:do_sort => true,
|
44
|
+
:include_subdirs => true
|
45
|
+
}.update(opts)
|
46
|
+
|
34
47
|
pth = File.dirname(self.filename)
|
35
48
|
mpth = Page.model_path # Just cacheing these two for
|
36
49
|
fmts = FORMATS.join('|') # use below.
|
@@ -44,9 +57,15 @@ module Nesta
|
|
44
57
|
entry = File.join(pth, entry)
|
45
58
|
|
46
59
|
if File.directory?(entry)
|
47
|
-
# If
|
48
|
-
|
49
|
-
|
60
|
+
# If we are allowed to include the sub-directory
|
61
|
+
# index pages, do so. If no index page is detected,
|
62
|
+
# move on to the next entry.
|
63
|
+
if options[:include_subdirs]
|
64
|
+
idxpth = File.join(entry, 'index.%s')
|
65
|
+
next unless FORMATS.detect {|fmt| File.exists?(idxpth % fmt)}
|
66
|
+
else
|
67
|
+
next
|
68
|
+
end
|
50
69
|
else
|
51
70
|
# Ignore any file that isn't a page.
|
52
71
|
next unless entry.match(/\.(#{fmts})$/)
|
@@ -62,7 +81,16 @@ module Nesta
|
|
62
81
|
end
|
63
82
|
end
|
64
83
|
|
65
|
-
@subpages = pages
|
84
|
+
@subpages = pages
|
85
|
+
|
86
|
+
if options[:do_sort]
|
87
|
+
@subpages.sort! {|n, m| n.title.downcase <=> m.title.downcase}
|
88
|
+
end
|
89
|
+
|
90
|
+
if block_given?
|
91
|
+
@subpages.each {|page| yield page}
|
92
|
+
return nil
|
93
|
+
end
|
66
94
|
|
67
95
|
return @subpages
|
68
96
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nesta-plugin-subpages
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nesta
|