{% extends "base.html" %}
{% block title %}Files โ {{ site.title }}{% endblock %}
{% block description %}All files sorted by focus{% endblock %}
{% block content %}
<div class="pages-discovery">
<table class="pages-table">
<thead>
<tr>
<th class="col-rank" data-col="rank">#</th>
<th class="col-title" data-col="title">file</th>
<th class="col-created" data-col="created">created</th>
<th class="col-modified" data-col="modified">modified</th>
<th class="col-size" data-col="size">size</th>
<th class="col-links" data-col="out">out</th>
<th class="col-links" data-col="in">in</th>
<th class="col-pagerank" data-col="focus">ฯ%</th>
<th class="col-density" data-col="density">density</th>
<th class="col-gravity" data-col="gravity">gravity</th>
</tr>
</thead>
<tbody>
{% for f in files %}
<tr id="r{{ f.rank }}" class="page-row">
<td class="col-rank" data-sort="{{ f.rank }}">{{ f.rank }}</td>
<td class="col-title" data-sort="{{ f.title }}">
<a href="{{ f.url }}">{% if f.icon %}<span class="page-icon">{{ f.icon }}</span> {% endif %}{{ f.title }}</a>
{% if f.tags %}<span class="row-tags">{% for t in f.tags %}<a href="/{{ t | slugify }}" class="row-tag">{{ t }}</a>{% endfor %}</span>{% endif %}
</td>
<td class="col-created" data-sort="{{ f.created_sort }}">{{ f.created }}</td>
<td class="col-modified" data-sort="{{ f.modified_sort }}">{{ f.modified }}</td>
<td class="col-size" data-sort="{{ f.size_sort }}" style="color: hsl(50, 60%, {{ f.size_light }}%)">{{ f.size }}</td>
<td class="col-links" data-sort="{{ f.out_sort }}" style="color: hsl(30, 60%, {{ f.out_light }}%)">{{ f.links_out }}</td>
<td class="col-links" data-sort="{{ f.in_sort }}" style="color: hsl(210, 60%, {{ f.in_light }}%)">{{ f.links_in }}</td>
<td class="col-pagerank" data-sort="{{ f.focus_sort }}" style="color: hsl(120, 60%, {{ f.focus_light }}%)">{{ f.pagerank }}</td>
<td class="col-density" data-sort="{{ f.density_sort }}" style="color: hsl(0, 60%, {{ f.den_light }}%)">{{ f.density }}</td>
<td class="col-gravity" data-sort="{{ f.gravity_sort }}" style="color: hsl(270, 60%, {{ f.grav_light }}%)">{{ f.gravity }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<div class="graph-stats">{{ total_files }} files</div>
</div>
<script>
(function() {
if (location.hash) {
var el = document.getElementById(location.hash.slice(1));
if (el) {
requestAnimationFrame(function() {
el.scrollIntoView({ block: 'start' });
});
}
}
var rows = document.querySelectorAll('.page-row');
if (!rows.length) return;
var ticking = false;
function updateHash() {
var best = null;
for (var i = 0; i < rows.length; i++) {
var rect = rows[i].getBoundingClientRect();
if (rect.top >= -10) {
best = rows[i];
break;
}
best = rows[i];
}
if (best && best.id) {
history.replaceState(null, '', '#' + best.id);
}
ticking = false;
}
window.addEventListener('scroll', function() {
if (!ticking) {
ticking = true;
requestAnimationFrame(updateHash);
}
}, { passive: true });
// Column sorting
var thead = document.querySelector('.pages-table thead');
var tbody = document.querySelector('.pages-table tbody');
if (thead && tbody) {
var currentCol = null;
var ascending = false;
thead.querySelectorAll('th[data-col]').forEach(function(th) {
th.addEventListener('click', function() {
var col = th.dataset.col;
if (currentCol === col) {
ascending = !ascending;
} else {
currentCol = col;
ascending = col === 'title';
}
thead.querySelectorAll('th').forEach(function(h) {
h.classList.remove('sort-asc', 'sort-desc');
});
th.classList.add(ascending ? 'sort-asc' : 'sort-desc');
var sortRows = Array.from(tbody.querySelectorAll('tr'));
var colIdx = Array.from(thead.querySelectorAll('th')).indexOf(th);
sortRows.sort(function(a, b) {
var aVal = a.children[colIdx].dataset.sort || a.children[colIdx].textContent.trim();
var bVal = b.children[colIdx].dataset.sort || b.children[colIdx].textContent.trim();
var aNum = parseFloat(aVal);
var bNum = parseFloat(bVal);
var cmp;
if (!isNaN(aNum) && !isNaN(bNum)) {
cmp = aNum - bNum;
} else {
cmp = aVal.localeCompare(bVal);
}
return ascending ? cmp : -cmp;
});
sortRows.forEach(function(row) { tbody.appendChild(row); });
});
});
}
})();
</script>
{% endblock %}
render/templates/files.html
ฯ 0.0%