Участник:BattlePeasant/cattreetable.js: различия между версиями

Содержимое удалено Содержимое добавлено
м оформление
м оформление
Строка 22:
list.push(str);
}
return list;
}
 
Строка 197:
}
 
function openNextLevel(idx, row){ //автоматически открывает некоторый следующий уровень при первом показе таблицы
function openNextLevel(idx, row){
var i, strpath, strsubcat;
var Table = document.getElementById('cattreeTable' + idx);
if (Table.hasAttribute('data-open')){
strpath = Table.getAttribute('data-open');
if ( ~(i = strpath.indexOf('\\')) != -1){
strsubcat = strpath.substring(0, i);
strpath = strpath.substring(i+1);
Table.setAttribute('data-open',strpath);
}else{
strsubcat = strpath;
Table.removeAttribute('data-open');
}
showSubtree(strsubcat, idx, row);
}
}
 
function clickCat(event){ // нажатие на категорию (открывает подуровень или сворачивает)
function clickCat(event){
event = event || window.event;
var a = event.target || event.srcElement;
var Text = GetText(a);
var Row = a.parentNode.parentNode;
var row = Row.rowIndex;
var Table = Row.parentNode.parentNode;
var idx = Table.id.slice(12);
if (row){
showSubtree(Text.nodeValue, idx, row);
}else{
displayTable(idx, 0);
}
return false;
}
 
function clickMore(event){ //нажатие далее (загружает следующие 200)
event = event || window.event;
var btn = event.target || event.srcElement;
Строка 243:
}
 
function CreateButton(idx, classname, btntext, href, csstext){ //создаёт «кнопку»
var btn = document.createElement('span');
btn.style.cssText = 'font-weight:normal; font-size:smaller; ' + csstext;
Строка 256:
}
 
function CreateHLink(Text, idx){ //создаёт заголовок высшего уровня (впрочем, идентичный подзаголовкам)
function CreateHLink(Text, idx){
var a = document.createElement('a');
a.href = '/wiki/' + encodeURIComponent('Категория:'+Text.nodeValue);
a.onclick = clickCat;
a.title = 'Категория:'+Text.nodeValue;
a.appendChild(Text);
return a;
}
 
Строка 276:
var Cattrees = document.getElementsByClassName('cattree')
var asyncTitlelist = function(idx, list){
var Table = document.getElementById('cattreeTable' + idx)
Table.dataCatlist = list
}
for (var i = 0; Table=Cattrees[i]; i++){
if (Table.tagName!='TABLE') continue;
if (!(HRow = Table.rows[0])) continue;
if (!(HCell = HRow.cells[0])) continue;
if (PrepareFullArticleList(HCell)){
Text = GetText(HCell);
artlist = HCell.dataArtlist;
a = GetArt(artlist, (Text) ? Text.nodeValue : null);
a.onclick = clickCat;
HCell.insertBefore(a,HCell.firstChild);
if (Text)
HCell.removeChild(Text);
}else{
Text = GetText(HCell);
artlist = null;
a = CreateHLink(Text, idx);
HCell.appendChild(a);
}
Table.id = 'cattreeTable' + idx;
if ((parentcat = Table.getAttribute('data-parent')) || (listtext = Table.getAttribute('data-catlist')) || (artlist && (artlist.length > 1))){
if (parentcat){
GetCat(parentcat, idx, -1, true, null, asyncTitlelist);
}else if(listtext){
Table.dataCatlist = listtext.split('\\');
}else{
for (var j = 0; j < artlist.length; j++)
list[j] = GetText(artlist[j].a).nodeValue;
Table.dataCatlist = list;
}
btntext = Table.getAttribute('data-prevtext') || 'пред.';
btn = CreateButton(idx, 'prevcatButton', btntext, 'javascript:nextHeader(' + idx + ', -1)', 'float:left');
HCell.appendChild(btn);
btntext = Table.getAttribute('data-nexttext') || 'след.';
btn = CreateButton(idx, 'nextcatButton', btntext, 'javascript:nextHeader(' + idx + ', 1)', 'float:right');
HCell.appendChild(btn);
}else{
btntext = Table.getAttribute('data-expandtext') || 'показать';
btn = CreateButton(idx, 'hidecatButton', btntext, 'javascript:displayTable(' + idx + ', 1)', 'float:right');
HCell.appendChild(btn);
}
Table.style.display = 'table';
if (!Table.classList.contains('collapsed'))
displayTable(idx, 0);
idx++
}
}
 
function PrepareFullArticleList(HCell){ //если имеется список статей, подготавливаем (используется вместо получения из категорий)
var Span, Child, Tree=[], TreeLevels=[Tree], TreeNode, TreeBranch, str, a;
for (var i = 0; Span = HCell.children[i]; i++){
if (Span.tagName == 'SPAN'){