- 加入非預設的語言
- 使用 querySelectorAll() 簡化 codeblock 的 class name
加入非預設的語言
首先在 (一) 中我們用的是 google 提供的程式高亮 google/code-prettify裡面有提到部分語言是預設,有些非預設的就需要安裝外掛
以下以 rust 為例
不使用外掛時某些部分會填色錯誤,例如 lifetime 會被認為是字串(單引號間為綠色)
但實際上單引號是一個為一單位
解決
打開"版面配置",點擊上次使用的 HTML/JavaScript 小工具的"編輯"加入下面程式後儲存
因為是以 rust 為例,所以裝 lang-rust.js,其他語言支援可以去 code-prettify/loader 查找
<script src="https://cdn.rawgit.com/google/code-prettify/master/loader/lang-rust.js"></script>
這樣就大致完成了
使用時可以使用
<pre class="codeblock prettyprint language-rust"> /* rust code */ </pre>剛剛單引號問題解決後如下
使用 querySelectorAll() 簡化 codeblock 的 class name
不過不覺得 "codeblock prettyprint language-rust" 超長嗎? 每個區塊都要打我去找了 HTML(CSS) 有沒有 class 的繼承 (被揍),結果沒有 QuQ
class 裡面呼叫其他 class 也不行
有發現 Selector 這東東,不過還是繼續找有沒有可以只用 class 就解決
還想過 class=變數,然後變數再從其他地方給全域字串變數,都不行 OAO
解決
就只好去找 Selector 怎麼用了一樣打開"版面配置",新增小工具,選擇"HTML/JavaScript 小工具"
在文字塊輸入下方程式並儲存
<style> .post .cr {}; </style> <script> var codes = document.querySelectorAll('.cr'); [].forEach.call(codes, function(code) { code.className = 'codeblock prettyprint lang-rust'; }); </script>
這樣原本要打 class="codeblock prettyprint language-rust",之後只要打 class="cr"
它就會自動幫你轉 class 的名字
乾脆每個都來改,我是大懶人 OuO
完整版:
<style> .post .cr { /* rust code */ }; .post .cb { /* common code*/ }; .post .ct { /*text block*/ }; </style> <script> var codes = document.querySelectorAll('.cr'); [].forEach.call(codes, function(code) { code.className = 'codeblock prettyprint lang-rust'; }); var codes = document.querySelectorAll('.cb'); [].forEach.call(codes, function(code) { code.className = 'codeblock prettyprint'; }); var codes = document.querySelectorAll('.ct'); [].forEach.call(codes, function(code) { code.className = 'codeblock'; }); </script>
手機版若顯示不出來請參考 106.04.05 Blogger 手機版程式碼區塊
參考資料:
Dynamically change class names in JavaScript
Using innerHTML with querySelectorAll
沒有留言:
張貼留言