gpt4 book ai didi

markdown - Reveal 中的多个 Markdown 文件选择

转载 作者:行者123 更新时间:2023-12-01 02:24:25 24 4
gpt4 key购买 nike

我在我的讲座中使用 Reveal.js。在运行时加载外部 Markdown 文件效果很好。有没有办法设置一个主 index.html 文件,允许我选择要加载的外部文件?我想到的就像一个目录,但每个主题都是一个单独的 Markdown 文件。我怀疑 javascript 将是做到这一点的方法,但是虽然我能够(不是专家)使用 HTML 和 CSS,但我无法编写一行 javascript(我可以复制、粘贴和加载)。

谷歌不是我的 friend 。

最佳答案

这也困扰着我,所以我决定看看我是否可以通过谷歌搜索和拼接来解决这个问题。

基本 Reveal.js div看起来像这样:

<body>
<div class="reveal">

<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">

<section data-markdown="somefile" data-separator="^\n\n\n" data-vertical="^\n\n" data-notes="^Note:">
</section>

</div>

</div>

<script src="reveal.js/lib/js/head.min.js"></script>
<script src="reveal.js/js/reveal.min.js"></script>

<script>
// Full list of configuration options available here:
// https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
. . .
});

</script>

</body>

简单方式(手动输入整个文件名)

我们可以动态设置一个属性,例如 data-markdown <section> 中的字段带有 JavaScript 的元素。这里有两个小问题:我们必须在元素创建之后,但在 Reveal.js 完成其整个初始化之前进行,否则 DOM 的状态和 Reveal.js 的内部状态将不对齐。这很容易(仅显示更改的部分):
<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">

<section id="presentation" data-separator="^\n\n\n" data-vertical="^\n\n" data-notes="^Note:">
</section>

<script type="text/javascript">
document.getElementById("presentation").setAttribute("data-markdown",prompt("Filename:","default-filename.md"));
</script>

当您加载页面时,您会在输入 的地方收到一个小的警报/提示。全文件名(相对于 Web 服务器根目录)。如果你像我一样使用 python -m'SimpleHTTPServer直接在包含所有幻灯片的目录中运行本地网络服务器,这还不错。

复杂的方式(文件选择器对话框)

简单的方法是一个不错的开始,但它不如完全图形化的选择器方便。幸运的是,事实证明我们也可以做到这一点。这里困难的部分是我们必须在页面完全加载和呈现后运行文件选择器,这意味着我们必须做一些事情来使 Reveal.js 的状态与 DOM 对齐。有一个 sync() API 中的方法应该对这种情况有用,但由于某种原因它在这里不起作用。相反,我们延迟 Reveal.js 的完全初始化,直到我们设置了外部 Markdown 文件:
<body>

<!-- Choose file button -->
<input type="file" id="external_md" name="markdown" >

<div class="reveal">

<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">

<section id="presentation" data-separator="^\n\n\n" data-vertical="^\n\n" data-notes="^Note:">
</section>

<script type="text/javascript">
function selectFile(evt) {
// the file chooser actually returns a list
// (in case you enabled multiple selection)
file = evt.target.files[0].name;
document.getElementById("presentation").setAttribute("data-markdown",file);
// now it's time to init!
delayed_init();
// remove file selector button
fileSelector = document.getElementById("external_md");
fileSelector.parentNode.removeChild(fileSelector);
}
document.getElementById('external_md').addEventListener('change',selectFile,false);
</script>

</div>

</div>

<script src="reveal.js/lib/js/head.min.js"></script>
<script src="reveal.js/js/reveal.min.js"></script>

<script>
// we have to wrap the init function both to delay it and to make it
// easier to call later, all without moving big blocks of code around
function delayed_init(){
// Full list of configuration options available here:
// https://github.com/hakimel/reveal.js#configuration

Reveal.initialize({
. . .
});
}

</script>

</body>

这是三个变化领域:
1. 添加 <input>元素来驱动文件选择器。
2. 中间额外的 Javascript。
3. 结束对 Reveal.initialize() 的调用用一个虚拟函数来延迟初始化。

在当前版本的 Reveal.js ( 9cf7de54b8f ) 中,所有这些都对我有用。请注意,我将所有 Reveal.js 内容保存在子文件夹 reveal.js 中。 ,因此您可能需要相应地调整上面的路径。

关于markdown - Reveal 中的多个 Markdown 文件选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17774541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com