<%
function layout_wiki_list(partial) {
  var el = ''
  const { shelf, tree } = theme.wiki
  for (let pid of shelf) {
    let proj = tree[pid]
    if (proj == null) {
      continue
    }
    if (proj.pages == undefined || proj.pages.length === 0) {
      continue
    }
    if (page.filter === false) {
      // wikiList
      el += `<div class="post-card-wrap${scrollreveal(' ')}">`
      var coverStyle = ''
      if (proj.cover) {
        coverStyle = ` style="--cover-url:url('${escape_html(proj.cover.replace(/'/g, '%27'))}')"`
      }
      el += `<a class="wiki-card card-hover card-hover--spotlight card-hover--tilt${proj.cover ? '' : ' no-cover'}"${coverStyle} href="${pretty_url(proj.homepage?.path || '/')}">`
      el += partial(proj)
      el += `</a>`
      el += `</div>`
    } else if (proj.tags && proj.tags.includes(page.tagName) === true) {
      // filtered wikiList
      el += `<div class="post-card-wrap${scrollreveal(' ')} filter">`
      var coverStyle = ''
      if (proj.cover) {
        coverStyle = ` style="--cover-url:url('${escape_html(proj.cover.replace(/'/g, '%27'))}')"`
      }
      el += `<a class="wiki-card card-hover card-hover--spotlight card-hover--tilt${proj.cover ? '' : ' no-cover'}"${coverStyle} href="${pretty_url(proj.homepage?.path || '/')}">`
      el += partial(proj)
      el += `</a>`
      el += `</div>`
    }
  }
  return el
}

function layoutDiv() {
  var el = ''
  el += partial('_partial/main/navbar/nav_tabs_wiki')
  el += `<div class="post-list wiki">`;
  el += layout_wiki_list(function(proj) {
    return partial('_partial/main/post_list/wiki_card', {proj: proj})
  })
  el += `</div>`
  return el
}
%>

<%- layoutDiv() %>
<script>
  // Wiki 覆盖层须同时等待封面原图和平均主题色完成，避免默认主题色短暂闪现。
  function revealWikiCover(card) {
    if (card._wikiImageReady && card._wikiOverlayReady && !card.classList.contains('no-cover')) {
      card.classList.add('cover-loaded');
    }
  }
  document.addEventListener('wiki-overlay-ready', function(event) {
    var card = event.target.closest('.wiki-card');
    if (!card) return;
    card._wikiOverlayReady = true;
    revealWikiCover(card);
  });
  document.querySelectorAll('.wiki-card-cover:not(.no-cover) > img').forEach(function(img) {
    var cover = img.parentElement;
    var card = img.closest('.wiki-card');
    if (!cover || !card) return;
    var loaded = function() {
      card._wikiImageReady = true;
      revealWikiCover(card);
    };
    var failed = function() {
      card._wikiImageReady = false;
      card.classList.remove('cover-loaded');
      card.classList.add('no-cover');
      cover.classList.add('no-cover', 'cover-error');
    };
    img.addEventListener('load', loaded, { once: true });
    img.addEventListener('error', failed, { once: true });
    if (img.complete) {
      if (img.naturalWidth > 0) {
        loaded();
      } else {
        failed();
      }
    }
  });
</script>
