001 Try It with JavaScript in Hugo中增加一点JavaScript
我如何开始整JavaScript
最近看了一个很扯的视频,就是说要想高效,就要缩短工作时间。不管你们信不信,反正我是信了。我缩减工作时间干什么呢?当然是摸鱼。 不钓鱼的退休干部就只能搞点人畜无害的东西,比如学一门新的程序设计语言……
前面知乎有个知友给大家安利JavaScript,我很多年前看了会那本
感觉还行,又有点怪怪的感觉,因为对HTML、CSS和Web技术先的不感兴趣,就先放在一边。
后面还是前面不记得,在用Anasys Workbench的时候,被迫编几个DesignModeler的脚本用的JavaScript,感觉很不爽……
这次跟知友论来论去,跑去把Lisp捡起来玩玩才发现,SCIP已经改用JavaScript啦!
大受震撼……
我正好Lisp感觉没啥好整的,太大的现在有2个deadline,太小的整的没劲。那就JavaScript呗……
JavaScript的例子
下面先看一个例子。
上面的“应用”是用JavaScript写的,可以计算阶乘。你可以输入一个数字,然后输入回车计算或者点击输入框的外面,也会触发,就可以看到这个数字的阶乘。
其实,别的不说,就JavaScript这个运行速度,简直是盖了……这还不是尾递归,速度快的一塌糊涂。 好吧,技术总是发展得如此之快,麻瓜们只能瞠目结舌不知所措。
对应的HTML代码为:
1<hr>
2<!-- standalone test: using this
3<link rel="stylesheet" href="./fact-style.css">
4-->
5<link rel="stylesheet" href="/javascript/fact-style.css">
6<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
7<div id="line">
8 <input type="text" id="num" placeholder="Enter a number">!=<div id="fact"></div>
9</div>
10<!-- standalone test: using this
11<script src="./fact.js"></script>
12-->
13<script src="/javascript/fact.js"></script>
14
15<hr>
这里我引用了jQuery,我唯一知道的JavaScript基础设施……不知道是不是有替代的更好的,在我找到之前,就用这个来操纵我的HTML吧。
对应的JavaScript代码放在单独的文件中,下面是JavaScript的代码。
1function factorial(n) {
2 if (n === 0) {
3 return 1;
4 } else {
5 return n * factorial(n - 1);
6 }
7}
8
9function updateFactorialText() {
10 var n = $("#num").val();
11 if (n == "") {
12 return;
13 }
14 try {
15 n = parseInt(n);
16 } catch (e) {
17 return;
18 }
19 var value = factorial(n);
20 $("#fact").text(value);
21
22 if ($("#" + n).length) {
23 return;
24 }
25
26 $("#line").before("<div class='equation' id='" + n + "'>" + n + "!=" + value + "</div>");
27}
28
29// setup enter key response to input element
30$("#num").keypress(function (e) {
31 if (e.which == 13) {
32 updateFactorialText();
33 }
34});
35// setup out of focus response to input element
36$("#num").focusout(function () {
37 updateFactorialText();
38});
首先是定义阶乘函数,最无聊的一种定义方式,递归调用,终止条件0!=1
。然后是更新文字,利用jQuery来操纵,设置文本,并添加历史记录。
通过在历史记录中按照id
设置为对应数字来保持单一性。最后是给输入框的回车和失去焦点添加回调函数。jQuery是那么性感。
不要忘了还有一个CSS文件,内容如下,不要嘲笑领域专家的CSS技能……我们基本上刷成灰的就会说好看,刷成绿的就说难看。
1 input {
2 display: inline-block;
3 background-color: aqua;
4 }
5
6 #fact {
7 display: inline-block;
8 }
9
10 #line {
11 display: inline-block;
12 }
13
14 .equation {
15 background-color: lightgray;
16 width: 400px;
17 }
真看起来真的还行,在Hugo里面也能做一个JavaScript的App……下面再测试一下另外一个东西。
JavaScript中危险的eval
下面我们设置一个对话框,输入JavaScript语句,将运行并将结果显示下面。
对应的代码为:
1<style>
2 #result {
3 color: cyan;
4 background: black;
5 font-size: 24px;
6 }
7
8 .scriptWindow {
9 font-size: 12px;
10 }
11</style>
12
13<textarea rows="10" cols="80" type="scriptWindow" id="javascript_sentence" placeholder="Enter an expression"></textarea>
14
15<textarea id="result" rows="1" cols="47" readonly></textarea>
16
17
18<script>
19 function eval_expression() {
20 // get value from javascript_sentence
21 var expr = $("#javascript_sentence").val();
22 $("#result").text(eval?.(expr));
23
24 }
25 // setup out of focus response to input element
26 $("#javascript_sentence").focusout(function () {
27 eval_expression();
28 });
29 $("#javascript_sentence").keypress(function (e) {
30 if (e.which == 13) {
31 eval_expression();
32 }
33 });
34</script>
看起来这个也没有问题。
Hugo中导入HTML、JS和CSS的美好之处
实际上,这里面最好的就是,所有的代码,可以直接写成HTML文件、JS文件和CSS文件,在这个帖子里中,我可以直接引用文件内容。
如果是插入HTML文件内容本身,我定义了一个Hugo宏,htmlfile.html
,放在/laytouts/shortcodes
目录下,
{{ .Get 0 | readFile | safeHTML }}
只要在Github Repository的hugo.toml
中增加一个选项:
[markup]
[markup.goldmark]
[markup.goldmark.renderer]
unsafe = true
在Markdown文件中增加HTML文件的原始内容,就是记得这里要写文件相对于Hugo站点根目录的全路径:
这个部分就直接成为博客的一部分,这也太完美了吧。
然后,要展示源代码,就只需要:
这两个宏命令,其实都是一样的,我专门做成两个,就是为了区别功能,当然,codesnap
还可以引用别的语言的代码。
还是有点完美的……我简直是个天才。
下一步
这样的话,可以玩的就太多了……
文章标签
|-->javascript |-->html |-->css |-->tutorial |-->hugo |-->include-file
- 本站总访问量:次
- 本站总访客数:人
- 可通过邮件联系作者:Email大福
- 也可以访问技术博客:大福是小强
- 也可以在知乎搞抽象:知乎-大福
- Comments, requests, and/or opinions go to: Github Repository