mirror of
https://github.com/caddyserver/website.git
synced 2025-04-20 20:16:16 -04:00
docs: Better support for module name collisions
In /docs/modules/, show both modules if module IDs are not globally unique. Show both modules' docs on same page in expandable containers. In /docs/json/, both modules appear in lists in the doc, but disambiguating them isn't implemented yet.
This commit is contained in:
parent
5c3a67692e
commit
e132c5c454
13 changed files with 265 additions and 126 deletions
|
@ -2,40 +2,91 @@ const moduleDocsPathPrefix = "/docs/modules/";
|
|||
|
||||
var moduleID = window.location.pathname.substr(moduleDocsPathPrefix.length);
|
||||
if (moduleID) {
|
||||
// update page title and load the docs for this module
|
||||
// update page title and load the docs for these modules (possibly more than 1 with this ID)
|
||||
document.title = "Module " + moduleID + " - Caddy Documentation";
|
||||
$.get("/api/docs/module/"+moduleID, function(json) {
|
||||
var modules = json.result;
|
||||
|
||||
// wait until the DOM has finished loading before rendering the results
|
||||
$(function() {
|
||||
$('#module-docs-container').show();
|
||||
$('h1').text("Module "+moduleID);
|
||||
beginRendering(json.result, moduleID);
|
||||
$('.module-name').text("Module "+moduleID);
|
||||
modules.forEach((module) => {
|
||||
$tpl = $('#module-template').clone().attr('id', stripScheme(module.repo));
|
||||
if (modules.length > 1) {
|
||||
$('article', $tpl).hide();
|
||||
}
|
||||
beginRenderingInto($tpl, moduleID, module);
|
||||
$('#module-docs-container').append($tpl);
|
||||
});
|
||||
if (modules.length > 1) {
|
||||
$('#module-multiple-repos .module-name').text(moduleID);
|
||||
$('#module-multiple-repos').show();
|
||||
} else {
|
||||
$('.module-repo-selector').hide();
|
||||
}
|
||||
|
||||
// if a specific repo's module is wanted, expand and scroll to it
|
||||
if (window.location.hash.length > 1) {
|
||||
// TODO: weird bug in jQuery(??) that it can't select IDs with slashes in them, so we use vanilla JS
|
||||
var container = document.getElementById(window.location.hash.substr(1));
|
||||
$('.module-repo-selector', container).click();
|
||||
container.scrollIntoView();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$(function() {
|
||||
$('body').on('click', '.module-repo-selector', function() {
|
||||
if ($(this).hasClass('expanded')) {
|
||||
// collapse
|
||||
$('.module-repo-selector-arrow', this).html('▸');
|
||||
} else {
|
||||
// expand
|
||||
$('.module-repo-selector-arrow', this).html('▾');
|
||||
}
|
||||
$(this).toggleClass('expanded');
|
||||
$(this).next('article').toggle();
|
||||
});
|
||||
});
|
||||
} else {
|
||||
// populate the module list
|
||||
$.get("/api/modules", function(json) {
|
||||
var moduleList = json.result;
|
||||
|
||||
console.log("MODULE LIST:", moduleList);
|
||||
|
||||
// wait until the DOM has finished loading before rendering the results
|
||||
$(function() {
|
||||
$('#module-list-container').show();
|
||||
$table = $('#module-list');
|
||||
for (modID in moduleList) {
|
||||
var val = moduleList[modID];
|
||||
var infos = moduleList[modID];
|
||||
|
||||
// refine a short preview of the module's docs
|
||||
let shortDoc = truncate(val.doc, 200);
|
||||
if (shortDoc && shortDoc.indexOf(modID) === 0) {
|
||||
shortDoc = shortDoc.substr(modID.length).trim();
|
||||
}
|
||||
|
||||
var standard = isStandard(val.type_name);
|
||||
var $tr = $('<tr/>');
|
||||
$tr.append('<td><a href="./'+modID+'" class="module-link">'+modID+'</a>'+(standard ? '' : ' '+nonStandardFlag)+'</td>');
|
||||
$tr.append($('<td/>').text(shortDoc));
|
||||
$table.append($tr);
|
||||
infos.forEach((info) => {
|
||||
// refine a short preview of the module's docs
|
||||
let shortDoc = truncate(info.docs, 200);
|
||||
if (shortDoc && shortDoc.indexOf(modID) === 0) {
|
||||
shortDoc = shortDoc.substr(modID.length).trim();
|
||||
}
|
||||
|
||||
let modLink = "./"+modID;
|
||||
if (infos.length > 1) {
|
||||
modLink += "#"+stripScheme(info.repo);
|
||||
}
|
||||
|
||||
var standard = isStandard(info.package);
|
||||
var $tr = $('<tr/>');
|
||||
$tr.append('<td>'+(standard ? standardFlag : nonStandardFlag)+'</td>');
|
||||
var $tdLink = $('<td><a href="'+modLink+'" class="module-link">'+modID+'</a></td>');
|
||||
if (infos.length > 1) {
|
||||
$tdLink.append($('<div class="module-repo-differentiator">').text('('+stripScheme(info.repo)+')'));
|
||||
}
|
||||
$tr.append($tdLink);
|
||||
$tr.append($('<td/>').text(shortDoc));
|
||||
$table.append($tr);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue