2019-03-14

程式庫 ✧ 在 Google Blogger 中使用 Markdown

markdown 當初會需要這項功能,主要原因是這個平台最終目的是讓我自己丟一些自學、工作中感悟到的一些東西,並分享給大家。 但問題來了,因為自身的工作是`前端切版`往`前端開發`在走(視覺苦手,不敢自稱設計),因此很多時候會需要貼跟程式碼相關的東西。 如果只是要貼,其實真的不難: 1. 用一般的程式編輯器打完之後截圖。 2. 當一般文章進行撰寫。 3. 用 [GitHubGist](https://gist.github.com/) 提供的 iframe 功能。 但,以上的方法都不盡完美。 1. 以截圖來說,雖然一切都很順手(畢竟是常用的編輯器),但未來要再次使用相關設定或內容的時候,需要逐字重新輸入,其實是很花時間的事情。 2. 當作一般文章進行撰寫的話,雖然只要平台不擋語法(有些平台為了安全性問題,會禁止外部 / 第三方語法輸入)就可以,但是在排版上會讓人想死。更罔論在沒有正常程式提示色的時候,看得有多痛苦。 3. [GitHubGist](https://gist.github.com/) 雖然可以解決以上兩個的問題,但是有些內容是指令碼(CMD / PowerShell)時,其實用編輯器介面會有誤導的嫌疑。當然主要還是相較之下比較麻煩,卻極其適合長段落的程式碼。 也因此,花了些時間從網路上搜尋:是否也曾經有人需要在 Blogger 平台上編寫程式碼 / 指令碼,而感到困擾的。 從那些文章中發現,很多人會直接使用線上的 Markdown & HTML 轉換編輯器進行處理。 但是這樣還是很麻煩,在那個瞬間很想跳槽到 [Medium](https://medium.com/) 去,即使為了把這個平台弄成我想要的樣子花了很多時間。 --- 何其有幸,最後找到了一篇關於[外掛 Markdown 語法](http://etrex.blogspot.com/2017/03/blogger-code-markdown-prettyprint.html)的文章,終於得以把 Markdown 直接應用在部落格編輯器中。 經實測後, table 系列不支援,程式區塊不能採用高亮語言模式、不具有行號,但整體上來說還在可接受範圍內。(其實如果牽涉到響應就不適合使用表格) 後續有發現在轉換上有瑕疵,筆者也針對相關內容[重新修正發文](http://etrex.blogspot.com/2017/08/convertermakehtmlnyum-list-grep-php.html),所以還是可用的。 下方附上最終採用語法作為備份。 ```javascript <script src="https://cdnjs.cloudflare.com/ajax/libs/showdown/1.6.4/showdown.min.js"></script> <script> var converter = new showdown.Converter(); var posts = document.querySelectorAll(".post-body"); //定義要替換的字元 var insteadWords = { "&gt;": ">", "&lt;": "<", "&amp;": "&" }; //loop每一篇文章 Array.prototype.forEach.call(posts, function(el, i){ /*有在開頭找到 markdown 字眼才處理,把整個文章取出來替換成 html * 從文章取出內容時,應該有某些字元早就被轉換過,但因為是寫 markdown,根本不需要轉 * 所以再寫一段程式把某些特定的字轉回來,暫時只定義了 3 組 */ if(el.innerHTML.indexOf("markdown") <= 1){ var origin = el.innerHTML; origin = origin.replace("markdown",""); for (var key in insteadWords){ origin = origin.replace(new RegExp(key,'g'),insteadWords[key]); }; //先把特殊字元轉回來再作 markdown 的轉換 el.innerHTML = converter.makeHtml(origin); } }); var pres = document.querySelectorAll("pre"); Array.prototype.forEach.call(pres, function(el, i){ el.classList.add("prettyprint"); }); </script> <script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js?skin=sunburst"></script> ```