Fixed some missing dynload attributes and also support fragments.

This commit is contained in:
flash 2020-10-30 20:13:07 +00:00
parent 493ad2cb9b
commit f2871aeffb
2 changed files with 18 additions and 4 deletions

View file

@ -211,7 +211,7 @@ if($reqPath === '/') {
</div>
<div class="index-feature">
<div class="index-feature-header">
<a href="/projects" class="index-feature-header-link"></a>
<a href="/projects" class="index-feature-header-link" data-fm-dynload=""></a>
<div class="index-feature-header-title">Projects</div>
<div class="index-feature-header-more">More</div>
</div>
@ -230,7 +230,7 @@ foreach($projInfo as $proj):
$links[] = ['class' => 'forum', 'text' => 'Discussion', 'url' => $proj->forum];
?>
<div class="index-project" style="background-color: #<?=str_pad(dechex($proj->colour), 6, '0', STR_PAD_LEFT);?>;">
<a href="/projects#<?=$proj->name_clean;?>" class="index-project-anchor"></a>
<a href="/projects#<?=$proj->name_clean;?>" class="index-project-anchor" data-fm-dynload=""></a>
<div class="index-project-content">
<div class="index-project-name"><?=$proj->name;?></div>
<div class="index-project-summary"><?=$proj->summary;?></div>
@ -249,7 +249,7 @@ foreach($projInfo as $proj):
</div>
<div class="index-feature">
<div class="index-feature-header">
<a href="/contact" class="index-feature-header-link"></a>
<a href="/contact" class="index-feature-header-link" data-fm-dynload=""></a>
<div class="index-feature-header-title">Contact</div>
<div class="index-feature-header-more">More</div>
</div>

View file

@ -108,6 +108,9 @@ window.fm = (function() {
var dynload = document.querySelectorAll('[data-fm-dynload]');
for(var i = 0; i < dynload.length; ++i)
(function(dc){
var url = new URL(dc.href),
hash = url.hash.substring(1);
url.hash = '';
dc.removeAttribute('data-fm-dynload');
dc.addEventListener('click', function(ev) {
ev.stopPropagation();
@ -125,11 +128,22 @@ window.fm = (function() {
var title = ((obj.components || {}).header || {}).title || '';
history.pushState(obj, title, dc.href);
fm.dynloadApply(obj);
if(hash) {
var targetEl = document.getElementById(hash);
if(targetEl) {
setTimeout(function() {
window.scrollTo({
top: targetEl.getBoundingClientRect().top,
behavior: 'smooth'
});
}, 500);
}
}
};
xhr.onerror = function(ev) {
location.assign(dc.href);
};
xhr.open('GET', dc.href);
xhr.open('GET', url);
xhr.setRequestHeader('Accept', 'application/x-fdynload+json');
xhr.send();
}, true);