Skip to content

Commit f5e17d0

Browse files
authored
Merge pull request #2 from mysiki/feature/sort
Feature/sort
2 parents 59c1bc0 + 15d05dc commit f5e17d0

File tree

57 files changed

+144
-13866
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+144
-13866
lines changed

Diff for: .gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
dist/*
2+
*.egg-info
3+
test/site/*

Diff for: CHANGELOG

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# CHANGELOG #
2+
3+
## 1.1.0 ##
4+
5+
- Add sort options
6+
- Fix potential bug
7+
8+
## 1.0.0 ##
9+
10+
- Init
11+
- Scan navigation for replace folder to all sub file
12+
- Recurcive scan into folder
13+
- Accept all classic mkdocs file type (direct reference, reference with title ...)
14+
- Convert sub folder to section
15+
- Options :
16+
- flat : Disable sub folder as section
17+
- file_name_as_title : Usine file name as title instead of let mkdocs detect H1 balise in file
18+
- recurse : disabled nested search in folder
19+
- file_pattern : Regex for select markdown file (default '.*\.md$')

Diff for: README.md

+71-4
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,14 @@ Features :
1313
- Accept all classic mkdocs file type (direct reference, reference with title ...)
1414
- Convert sub folder to section
1515
- Options :
16-
- `flat` : Disable sub folder as section
17-
- `file_name_as_title` : Usine file name as title instead of let mkdocs detect H1 balise in file
18-
- `recurse` : disabled nested search in folder
16+
- `flat` : Disable sub folder as section (default=True)
17+
- `file_name_as_title` : Usine file name as title instead of let mkdocs detect H1 balise in file (default=False)
18+
- `recurse` : disabled nested search in folder (default=True)
1919
- `file_pattern` : Regex for select markdown file (default `'.*\.md$'`)
20-
20+
- `sort_file` : Sort file (default=True)
21+
- `sort_directory` : Sort directory (default=True)
22+
- `reverse_sort_file` : Sort file in reverse order (default=False)
23+
- `reverse_sort_directory` : Sort file in reverse order (default=False)
2124
If you need more features, look at [mkdocs-awesome-pages-plugin](https://github.com/lukasgeiter/mkdocs-awesome-pages-plugin>) than seem to make many more think.
2225

2326
## Setup ##
@@ -210,6 +213,70 @@ Result :
210213
- dirNamedSub-page02: dirNamed/dirNamedSub/dirNamedSub-page02.md
211214
```
212215

216+
## Sort option ##
217+
218+
> Options :
219+
>
220+
> - `sort_file` : Sort file (default=True)
221+
> - `sort_directory` : Sort directory (default=True)
222+
> - `reverse_sort_file` : Sort file in reverse order (default=False)
223+
> - `reverse_sort_directory` : Sort file in reverse order (default=False)
224+
225+
```yaml
226+
plugins:
227+
- search
228+
- include_dir_to_nav:
229+
sort_file: true
230+
sort_directory: true
231+
```
232+
233+
Result :
234+
235+
```yaml
236+
- aafolder:
237+
- fold_sort/aafolder/0page.md
238+
- fold_sort/aafolder/Cpage.md
239+
- fold_sort/aafolder/apage.md
240+
- fold_sort/aafolder/bpage.md
241+
- fold_sort/aafolder/page-with-header.md
242+
- fold_sort/aafolder/page-with-no-header.md
243+
- fold_sort/aafolder/zpage.md
244+
- ccfolder:
245+
- fold_sort/ccfolder/apage.md
246+
- fold_sort/ccfolder/zpage.md
247+
- zzfolder:
248+
- fold_sort/zzfolder/apage.md
249+
- fold_sort/zzfolder/zpage.md
250+
```
251+
252+
```yaml
253+
plugins:
254+
- search
255+
- include_dir_to_nav:
256+
sort_file: true
257+
sort_directory: true
258+
reverse_sort_directory: true
259+
```
260+
261+
Result :
262+
263+
```yaml
264+
- zzfolder:
265+
- fold_sort/zzfolder/apage.md
266+
- fold_sort/zzfolder/zpage.md
267+
- ccfolder:
268+
- fold_sort/ccfolder/apage.md
269+
- fold_sort/ccfolder/zpage.md
270+
- aafolder:
271+
- fold_sort/aafolder/0page.md
272+
- fold_sort/aafolder/Cpage.md
273+
- fold_sort/aafolder/apage.md
274+
- fold_sort/aafolder/bpage.md
275+
- fold_sort/aafolder/page-with-header.md
276+
- fold_sort/aafolder/page-with-no-header.md
277+
- fold_sort/aafolder/zpage.md
278+
```
279+
213280
More 'complexe' example in test folder.
214281

215282
## Contribution ##

Diff for: mkdocs_include_dir_to_nav/include_dir_to_nav.py

+34-15
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ class IncludeDirToNav(BasePlugin):
1818
("file_pattern", config_options.Type(str, default='.*\.md$')),
1919
("file_name_as_title", config_options.Type(bool, default=True)),
2020
("recurse", config_options.Type(bool, default=True)),
21+
("sort_file", config_options.Type(bool, default=True)),
22+
("sort_directory", config_options.Type(bool, default=True)),
23+
("reverse_sort_file", config_options.Type(bool, default=False)),
24+
("reverse_sort_directory", config_options.Type(bool, default=False)),
2125
)
2226

2327
def on_files(self, files, config):
@@ -30,7 +34,10 @@ def on_files(self, files, config):
3034
pattern=self.config['file_pattern'],
3135
flat=self.config['flat'],
3236
file_name_as_title=self.config['file_name_as_title'],
33-
recurse=self.config['recurse']
37+
reverse_sort_directory=self.config['reverse_sort_directory'],
38+
reverse_sort_file=self.config['reverse_sort_file'],
39+
sort_file=self.config['sort_file'],
40+
sort_directory=self.config['sort_directory']
3441
)
3542
log.debug(f"IncludeDirToNav : ## Final NAV : \n{yaml.dump(config['nav'], indent=2)}##")
3643

@@ -39,7 +46,7 @@ def on_files(self, files, config):
3946
#### If Yes, get direct files and direct directory, and insert it to nav
4047
#### If direct directory was finding, recall parse with current index, in order to subCheck needsted folder
4148
#### Take care of direct notation ( - myFolder ) and page title notation ( - my folder : myFolder)
42-
def parse(ori_nav,config, pattern: str = '.*\.md$', flat: bool = False, previous=None, file_name_as_title: bool=False, recurse: bool=True):
49+
def parse(ori_nav,config, pattern: str = '.*\.md$', flat: bool = False, previous=None, file_name_as_title: bool=False, recurse: bool=True, reverse_sort_file: bool=False, reverse_sort_directory: bool=False, sort_file: bool=True, sort_directory: bool=True):
4350
log.debug("IncludeDirToNav : ##START Parse state###")
4451
log.debug(f"IncludeDirToNav : ori_nav = {ori_nav} | previous = {previous} | type of ori_nav {type(ori_nav)}")
4552

@@ -62,14 +69,18 @@ def parse(ori_nav,config, pattern: str = '.*\.md$', flat: bool = False, previous
6269
flat=flat,
6370
previous=item,
6471
file_name_as_title=file_name_as_title,
65-
recurse=recurse
72+
recurse=recurse,
73+
reverse_sort_directory=reverse_sort_directory,
74+
reverse_sort_file=reverse_sort_file,
75+
sort_file=sort_file,
76+
sort_directory=sort_directory
6677
)
6778

6879
## Else, item is simple dict, aka, value is string
6980
else:
7081
current_item = os.path.join(config["docs_dir"], item[k])
7182
log.debug(f" IncludeDirToNav : check current item : {current_item}")
72-
to_add, directory_was_insered = _generate_nav(current_item, pattern, config, flat, file_name_as_title, recurse)
83+
to_add, directory_was_insered = _generate_nav(current_item, pattern, config, flat, file_name_as_title, recurse, reverse_sort_file, reverse_sort_directory, sort_file, sort_directory)
7384
if to_add:
7485
item.update({k: to_add})
7586
if directory_was_insered:
@@ -80,46 +91,53 @@ def parse(ori_nav,config, pattern: str = '.*\.md$', flat: bool = False, previous
8091
flat=flat,
8192
previous=item,
8293
file_name_as_title=file_name_as_title,
83-
recurse=recurse
94+
recurse=recurse,
95+
reverse_sort_directory=reverse_sort_directory,
96+
reverse_sort_file=reverse_sort_file,
97+
sort_file=sort_file,
98+
sort_directory=sort_directory
8499
)
85100
## Else if item is no named, value like { - 'pagePath' }
86101
elif isinstance(item, str):
87102
log.debug(f" IncludeDirToNav : Item in loop is string. Item = {item}")
88103
current_item = os.path.join(config["docs_dir"], item)
89-
to_add, directory_was_insered = _generate_nav(current_item, pattern, config, flat, file_name_as_title, recurse)
104+
to_add, directory_was_insered = _generate_nav(current_item, pattern, config, flat, file_name_as_title, recurse, reverse_sort_file, reverse_sort_directory, sort_file, sort_directory)
90105
if to_add:
91-
log.debug(f" IncludeDirToNav : Add item to ori_nav[index]. ori_nav = {ori_nav} | index = {index} | item = {to_add}")
92106
# Replace current index by object in order to avoir infinite loop
93107
ori_nav[index] = to_add.pop(-1)
94108
## Now, index position is an object, so insert new value
95109
for insert_index, insert in enumerate(to_add):
96110
ori_nav.insert(index + insert_index, insert)
97-
98111
if directory_was_insered:
99112
parse(
100-
ori_nav=ori_nav[index],
113+
# ori_nav=ori_nav[index],
114+
ori_nav=ori_nav,
101115
config=config,
102116
pattern=pattern,
103117
flat=flat,
104118
previous=ori_nav[index],
105119
file_name_as_title=file_name_as_title,
106-
recurse=recurse
120+
recurse=recurse,
121+
reverse_sort_directory=reverse_sort_directory,
122+
reverse_sort_file=reverse_sort_file,
123+
sort_file=sort_file,
124+
sort_directory=sort_directory
107125
)
108126

109-
def _generate_nav(current_item: str, pattern: str, config, flat, file_name_as_title, recurse):
127+
def _generate_nav(current_item: str, pattern: str, config, flat, file_name_as_title, recurse, reverse_sort_file, reverse_sort_directory, sort_file, sort_directory):
110128
## Init var
111129
directory_was_insered = False
112130
to_add = []
113131

114132
## Check if value is directory
115133
if os.path.isdir(current_item):
116-
log.debug(f"IncludeDirToNav_generate_nav : Current item is dir")
134+
log.debug(f"IncludeDirToNav_generate_nav : Current item is dir ({current_item})")
117135

118136
## Get all direct files and direct folder
119137
## r=root, d=directories, f = files
120138
for r, d, f in os.walk(current_item):
121139
## For each file, check if pattern is respected
122-
for file in f:
140+
for file in (sorted(f, reverse=reverse_sort_file) if sort_file else f):
123141
if re.match(pattern, file):
124142
## Add it to temp var
125143
rpath = os.path.relpath(os.path.os.path.join(r, file), config["docs_dir"] )
@@ -133,11 +151,12 @@ def _generate_nav(current_item: str, pattern: str, config, flat, file_name_as_ti
133151
## Work because first walk loop return all direct file and direct directory
134152
if not flat and d and recurse:
135153
directory_was_insered = True
136-
for sd in d:
154+
for sd in (sorted(d, reverse=reverse_sort_directory) if sort_directory else d):
137155
rpath = os.path.relpath(os.path.os.path.join(r, sd), config["docs_dir"] )
138156
to_add.append({sd : rpath })
157+
log.debug(f"IncludeDirToNav_generate_nav : adding dir (sd : {sd}, rpath: {rpath})")
139158
break
140159
elif not recurse:
141160
break
142161

143-
return to_add, directory_was_insered
162+
return to_add, directory_was_insered

Diff for: test/docs/fold_sort/aafolder/0page.md

Whitespace-only changes.

Diff for: test/docs/fold_sort/aafolder/Cpage.md

Whitespace-only changes.

Diff for: test/docs/fold_sort/aafolder/apage.md

Whitespace-only changes.

Diff for: test/docs/fold_sort/aafolder/bpage.md

Whitespace-only changes.

Diff for: test/docs/fold_sort/aafolder/page-with-header.md

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# This is a header #
2+
3+
bla bla

Diff for: test/docs/fold_sort/aafolder/page-with-no-header.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Nothing to see

Diff for: test/docs/fold_sort/aafolder/zpage.md

Whitespace-only changes.

Diff for: test/docs/fold_sort/ccfolder/apage.md

Whitespace-only changes.

Diff for: test/docs/fold_sort/ccfolder/zpage.md

Whitespace-only changes.

Diff for: test/docs/fold_sort/zzfolder/apage.md

Whitespace-only changes.

Diff for: test/docs/fold_sort/zzfolder/zpage.md

Whitespace-only changes.

Diff for: test/mkdocs.yaml

+13-12
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,24 @@ plugins:
99
- search:
1010
- include_dir_to_nav:
1111
# flat: false
12-
# file_name_as_title: false
12+
file_name_as_title: true
1313
# recurse: true
1414
# file_pattern: '.*\.md$'
15+
sort_file: true
16+
sort_directory: true
17+
reverse_sort_directory: true
1518
docs_dir: './docs'
1619

17-
nav:
18-
- Home: README.md
19-
- dirDirectRef
20-
- SubDirDirectRef/SubDirDirectRefSub
21-
- emptyDir
22-
- dirNamed: dirNamed
23-
- SubDirNamed: SubDirNamed/SubDirNamedSub
24-
- dirDirectRefUnderMenu:
25-
- dirDirectRefUnderMenu
26-
- dirNamedUnderMenu: dirNamedUnderMenu
27-
2820
# nav:
2921
# - Home: README.md
3022
# - dirDirectRef
23+
# - SubDirDirectRef/SubDirDirectRefSub
24+
# - emptyDir
3125
# - dirNamed: dirNamed
26+
# - SubDirNamed: SubDirNamed/SubDirNamedSub
27+
# - dirDirectRefUnderMenu:
28+
# - dirDirectRefUnderMenu
29+
# - dirNamedUnderMenu: dirNamedUnderMenu
30+
31+
nav:
32+
- fold_sort

0 commit comments

Comments
 (0)