深入探索Genomics Daily:改進日期共享及本地化運行
最近在Bluesky上與Moreno Colaiacovo交流後,我開始探索他的Genomics Daily項目。這個基於GitHub Pages的靜態網站,使用Jekyll構建,其存檔功能讓我發現了一個問題:無法直接分享特定新聞的日期。因此,我決定提交一個Pull Request來改進它。
Genomics Daily是一個由GitHub Pages託管的靜態網站,其代碼庫位於emmecola.github.io。作為一個經典的GitHub Pages項目,它使用了Jekyll作為靜態站點生成器(SSG)。
我發現GitHub Pages現在支持通過GitHub Actions部署:
為了方便本地開發和調試,我需要同時運行Genomics Daily和我的博客(Computaria)。 Genomics Daily默認使用4000端口。我通過修改Jekyll的port
配置參數解決了端口衝突問題。這可以通過直接修改Jekyll命令或在Rakefile中修改Rake任務來實現。
我使用了Rake任務來管理Jekyll的運行,並通過正則表達式匹配任務名來提取端口號:
<code class="language-ruby">rule(/^run-[0-9]+$/) do |t| port = t.name["run-".length() ..] run_jekyll port: port end</code>
run_jekyll
函數接收端口號作為參數,並啟動Jekyll:
<code class="language-ruby">def run_jekyll(port: nil) require "jekyll" opts = { 'show_drafts' => true, 'watch' => true, 'serving' => true } opts['port'] = port unless port.nil? conf = Jekyll.configuration(opts) Jekyll::Commands::Build.process conf Jekyll::Commands::Serve.process conf end</code>
這樣,可以使用rake run
(默認端口) 和 rake run-4001
(4001端口) 來運行Jekyll。
雖然可以使用Rake參數來傳遞端口號,但為了更好的兼容性,我最終選擇了使用可選參數的方式。類似地,我也修改了rake browser
任務,使其可以接受端口號參數。
<code class="language-ruby">task :run,[:port] do |t, args| require "jekyll" opts = { ... } opts['port'] = args.port unless args.port.nil? ... end task :browser,[:port] do |t, args| port = args.port || 4000 sh "open ... http://localhost:#{port}/blog/" end</code>
最初嘗試修改location.search
來改變URL參數,但這會影響Genomics Daily的動態加載機制。因此,我改用window.history.pushState
API來更新URL,而無需刷新頁面。
在文章中,我添加了一個按鈕,每次點擊都會增加URL參數marmota
的值。代碼如下:
<code class="language-javascript">function alteraQueryParam() { const url = new URL(window.location.href); if (!window.history) return; const paramName = 'marmota'; let x = url.searchParams.get(paramName) || 0; x++; url.searchParams.set(paramName, x); window.history.pushState(null, '', url.toString()); }</code>
克隆Genomics Daily倉庫後,我複制了Computaria的Rakefile。由於Genomics Daily使用了minima
主題,我需要在Gemfile
中添加相應的gem,並執行bundle update
才能成功運行rake run
。
此外,我還修復了內部鏈接問題,將/genomics-daily/archive/
改為相對路徑。
最後,我完善了日期選擇和頁面加載邏輯,確保在頁面加載時根據URL參數加載相應日期的新聞內容。 這涉及到使用window.onload
事件或document.readyState
來判斷頁面加載完成時機,並根據URL參數date
動態加載內容。
總而言之,通過這些改進,Genomics Daily的日期共享功能得到增強,並且本地開發和調試也更加便捷。
以上是操縱查詢字符串以更好地允許您共享一個動態充電的頁面的詳細內容。更多資訊請關注PHP中文網其他相關文章!