Skip to content

Commit

Permalink
feat(docsify+exts): ability to add docs for extensions
Browse files Browse the repository at this point in the history
  • Loading branch information
seballot committed Sep 26, 2022
1 parent 0747d97 commit e04ba59
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 44 deletions.
1 change: 1 addition & 0 deletions docs/users/fr/_navbar.md
Expand Up @@ -8,6 +8,7 @@
* [Administration](/docs/users/fr/admin.md)
* [Installation](/docs/users/fr/webmaster.md)
* [Développement](/docs/users/fr/dev.md)
* [Extensions](/ ':id=extensions-links')
* 🔧
* [Comment contribuer à cette doc](/docs/users/README.md)
* [Liste des choses à faire sur la doc](/docs/users/TODO.md)
Expand Down
25 changes: 19 additions & 6 deletions includes/controllers/DocumentationController.php
Expand Up @@ -13,10 +13,23 @@ class DocumentationController extends YesWikiController
*/
public function show()
{
return new Response($this->render('@core/documentation.twig', [
'config' => $this->wiki->config,
'i18n' => json_encode($GLOBALS['translations_js']),
'locale' => $GLOBALS['prefered_language']
]));
return new Response($this->render('@core/documentation.twig', [
'config' => $this->wiki->config,
'i18n' => $GLOBALS['translations_js'],
'locale' => $GLOBALS['prefered_language'],
'extensions' => $this->getExtensionsWithDocs()
]));
}
}

private function getExtensionsWithDocs(): array
{
$extensions = [];
foreach ($this->wiki->extensions as $extName => $extPath) {
$localizedPath = "{$extPath}docs/{$GLOBALS['prefered_language']}/README.md";
$path = "{$extPath}docs/README.md";
$docPath = glob($localizedPath)[0] ?? glob($path)[0] ?? null;
if ($docPath) $extensions[] = ["name" => $extName, "docPath" => $docPath];
}
return $extensions;
}
}
88 changes: 53 additions & 35 deletions javascripts/documentation.js
Expand Up @@ -41,14 +41,17 @@ window.$docsify = {
html = html.replace(/<iframe(.*) src=([^\s]*)/g, '<iframe$1 class="lazyload" data-src=$2')

// Adds footer
const url = `https://github.com/YesWiki/yeswiki/edit/doryphore-dev/${vm.route.file}`
const footer = `
<hr/>
<footer>
<a href="${url}" target="_blank">${i18n.DOC_EDIT_THIS_PAGE_ON_GITHUB}</a>
</footer>`
if (vm.route.file.match(/^docs\/.*$/)){
const url = `https://github.com/YesWiki/yeswiki/edit/doryphore-dev/${vm.route.file}`
const footer = `
<hr/>
<footer>
<a href="${url}" target="_blank">${i18n.DOC_EDIT_THIS_PAGE_ON_GITHUB}</a>
</footer>`
html = html + footer;
}

return html + footer;
return html;
});

hook.doneEach(function() {
Expand Down Expand Up @@ -112,34 +115,49 @@ function initCustomNavMenu() {
if (document.querySelector("nav .search-icon")) return

// search icon
let searchIcon = document.createElement('div')
searchIcon.innerHTML = "<i class='gg-search'></i>"
searchIcon.classList = "search-icon"
searchIcon.addEventListener('click', function() {
document.querySelector('aside').classList.toggle('open')
document.querySelector('nav > ul').classList.remove('open')
document.querySelector('.menu-icon').classList.remove("open")
})
document.querySelector('nav').appendChild(searchIcon)
let searchIcon = document.createElement('div')
searchIcon.innerHTML = "<i class='gg-search'></i>"
searchIcon.classList = "search-icon"
searchIcon.addEventListener('click', function() {
document.querySelector('aside').classList.toggle('open')
document.querySelector('nav > ul').classList.remove('open')
document.querySelector('.menu-icon').classList.remove("open")
})
document.querySelector('nav').appendChild(searchIcon)

// menu icon
let menuIcon = document.createElement('div')
menuIcon.innerHTML = "<i class='gg-menu'></i><i class='gg-close'></i>"
menuIcon.classList = "menu-icon"
menuIcon.addEventListener('click', function() {
document.querySelector('nav > ul').classList.toggle('open')
this.classList.toggle("open")
})
document.querySelector('nav').appendChild(menuIcon)
// menu icon
let menuIcon = document.createElement('div')
menuIcon.innerHTML = "<i class='gg-menu'></i><i class='gg-close'></i>"
menuIcon.classList = "menu-icon"
menuIcon.addEventListener('click', function() {
document.querySelector('nav > ul').classList.toggle('open')
this.classList.toggle("open")
})
document.querySelector('nav').appendChild(menuIcon)

// Back button url correct
let backBtn = document.querySelector("#back")
if (backBtn) {
backBtn.href = baseUrl
const backBtnClone = backBtn.cloneNode(true)
const li = document.createElement('li')
li.appendChild(backBtnClone)
const nav = document.querySelector('nav > ul')
nav.insertBefore(li, nav.children[0])
}
// Back button url correct
let backBtn = document.querySelector("#back")
if (backBtn) {
backBtn.href = baseUrl
const backBtnClone = backBtn.cloneNode(true)
const li = document.createElement('li')
li.appendChild(backBtnClone)
const nav = document.querySelector('nav > ul')
nav.insertBefore(li, nav.children[0])
}

// extensions menu
const element = document.getElementById("extensions-links")
if (extensions.length > 0) {
element.removeAttribute("href")
let list = document.createElement('ul');
let html = ''
extensions.forEach((ext) => {
html += `<li><a href="#/${ext.docPath}">${ext.name}</a></li>`
});
list.innerHTML = html
element.parentNode.appendChild(list)
} else {
element.parentNode.parentNode.removeChild(element.parentNode)
}
}
3 changes: 3 additions & 0 deletions styles/documentation.css
Expand Up @@ -112,6 +112,9 @@ nav.app-nav {
align-items: center;
padding: 0;
}
.app-nav #extensions-links + ul a {
text-transform: capitalize;
}
.app-nav li {
height: var(--nav-height);
align-items: center;
Expand Down
7 changes: 4 additions & 3 deletions templates/documentation.twig
Expand Up @@ -12,9 +12,10 @@
<div id="app"></div>

<script>
var locale = "{{ locale }}";
var baseUrl = "{{ config.base_url }}";
var i18n = {{ i18n|raw }};
var locale = {{ locale|json_encode|raw }};
var baseUrl = {{ config.base_url|json_encode|raw }};
var i18n = {{ i18n|json_encode|raw }};
var extensions = {{ extensions|json_encode|raw }};
</script>

<script src="javascripts/vendor/docsify/docsify.min.js"></script>
Expand Down

0 comments on commit e04ba59

Please sign in to comment.