Pesquisas recentes
Sem pesquisas recentes

Nicholas Smolney
Entrou em 15 de abr. de 2021
·
Última atividade em 27 de out. de 2021
Seguindo
0
Seguidores
0
Atividade total
5
Votos
0
Assinaturas
3
VISÃO GERAL DA ATIVIDADE
MEDALHAS
ARTIGOS
PUBLICAÇÕES
COMENTÁRIOS NA COMUNIDADE
COMENTÁRIOS EM ARTIGOS
VISÃO GERAL DA ATIVIDADE
Atividade mais recente por Nicholas Smolney
Nicholas Smolney comentou,
and if anyone else is interested, I made a small addition to my css file to indent for subsequent levels
.toc ul{
padding-left: 20px;
}
Exibir comentário · Publicado 25 de mai. de 2018 · Nicholas Smolney
0
Seguidores
0
Votos
0
Comentários
Nicholas Smolney comentou,
Hey Dave, see below for how I addressed this:
Basically the code didn't account for the case when your next heading is going back a level (current_level < previous_level), so I added that case and added an array to keep track of the previous levels.
/*** Table of contents code ***/
var $headers = $('.article-body h1');
if ($headers.length > 0) {
var $toc = $('
var $firstUl = $('
- ');
var $currentUl = $firstUl;
var previous_level = 1;
var $arrayUl = [];
$firstUl.appendTo($toc);
$toc.prependTo('section.article-info');
// start with first H1
insertHeading($headers[0]);
}
function insertHeading(heading) {
var $heading = $(heading);
// what level heading are we on?
var current_level = headingLevel(heading);
// if it's an H1, add it to the original list
if (current_level === 1) {
newLi($heading, $firstUl);
$currentUl = $firstUl;
$arrayUl = [];
$arrayUl.push($firstUl);
}
// if it's the same as the one before it, add it to the current list
else if (current_level === previous_level) {
newLi($heading, $currentUl);
}
// if it's one level higher than the one before it... time to make a new nested list
else if (current_level > previous_level) {
nestUl();
$arrayUl.push($currentUl);
newLi($heading, $currentUl);
}
else if (current_level for (i = 0; i < (previous_level-current_level); i++) {
$arrayUl.pop();
}
$currentUl = $arrayUl[$arrayUl.length-1];
newLi($heading, $currentUl);
}
previous_level = current_level;
var $nextHeading = $heading.nextAll("h1, h2, h3, h4, h5, h6").first()[0];
// if there's any headings left... run this again
if ($nextHeading) insertHeading($nextHeading);
}
// adds a new UL to the current UL
function nestUl() {
var $newUl = $('
- ');
$newUl.appendTo($currentUl);
$currentUl = $newUl;
}
// returns a numerical value for each heading
function headingLevel(heading) {
switch (heading.nodeName) {
case 'H1':
return 1;
break;
case 'H2':
return 2;
break;
case 'H3':
return 3;
break;
case 'H4':
return 4;
break;
case 'H5':
return 5;
break;
case 'H6':
return 6;
break;
default:
return 0;
}
}
// inserts a new line to the current list
function newLi(heading, $list) {
var $heading = $(heading);
var $wrapper = $('
//var $link = $('').prop('href', '#' + $heading.prop('id'));
var $anchorname = $heading[0].outerText.replace (/\s/g,'');
var $link = $('').prop('href', '#' + $anchorname);
$link.html(' ' + $heading.text());
$link.appendTo($wrapper);
$wrapper.appendTo($list);
var place_in_parent = $list.children('li').length;
if ($list.parent()[0].nodeName === 'DIV') {
$link.find('.index').text(place_in_parent)
} else {
$link.find('.index').text($wrapper.parent().prev('li').find('.index').text() + '.' + place_in_parent)
}
$heading.html("" + $link.find('.index').text() + ' ' + $heading.text());
}
});
Exibir comentário · Publicado 25 de mai. de 2018 · Nicholas Smolney
0
Seguidores
0
Votos
0
Comentários