用Markdown檔案寫筆記,用檔案夾做分類,整個筆記檔案專案構成了一個樹形結構,筆記文章之間、文章與分類之間經常有特定的先后順序,于是就在檔案名前面加上數字前綴來控制排序,但是,Windows的檔案系統始終把檔案夾和檔案分開來排序,一般是所有檔案夾排在所有普通檔案之前,Typora也采用了這種策略,這對我的筆記組織造成了一些不便,因此,我嘗試對Typora的程式代碼進行一些修改,以支持檔案夾和檔案混合排序,

Typora是基于Electron的應用程式,編程語言是解釋型的JavaScript,而不是編譯型語言,因此應該可以找到其執行的JS檔案,修改其中的代碼以添加我們自己的邏輯,Typora還允許打開DevTools,這更方便我們除錯,
在Typora中打開DevTools,觀察到其加載了幾個JS檔案,其中一個是C:\Program Files\Typora\resources\appsrc\window\frame.js,猜測是整個應用程式視窗的代碼,在檔案最后添加一個alert(),重啟Typora,看到有彈窗,說明確實可以執行我們自己的代碼,
Typora中的JS檔案都是編譯壓縮后的,修改前要先用VSCode或WebStorm格式化一下,因為經過編譯,所以變數名、程式流程寫法等都不容易閱讀,需要一些耐心去理解,

在DevTools中查看側邊欄檔案樹的DOM結構,發現檔案夾結點下的所有子檔案(檔案夾和普通檔案)都位于.file-node-children元素中,因此,只要修改渲染這個DOM的邏輯,就可以實作自定義排序,

在frame.js中搜索file-node-children,共有3處,查看、除錯分析,發現了渲染檔案串列的核心方法renderNode(),每個檔案結點資料中,子目錄結點放在subdir屬性(陣列)中,子文章結點放在content屬性(陣列)中,它們是分開排序、分開渲染的,那么,只需要合并這兩個陣列,放在一起一次性排序、渲染就可以實作混排了,添加代碼,重啟Typora,發現成功了,



此外,還要繼續分析、修改其他幾處代碼,才能讓檔案串列始終都能正確混合排序,程序類似,就略了,
一番分析、修改、除錯下來,任務就完成了,實作不難,主要是走一遍這種逆向工程,把學到的知識用起來,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/299894.html
標籤:其他
