hack.g0v.tw integration

想法:與「專案列表」頁整合

  1. Issue List + Tag Cloud 放在專案列表右邊當做一個 widget (section),見 https://github.com/g0v/hack.g0v.tw/issues/21
    1. 可以依據 tag 來  filter 要顯示哪些 issues,效果可以跟 hub 右(大半)邊很像。
    2. 專案名稱自動變成可以 toggle 的 tags。
    3. github api 應該可以做到所有事情
      1. 因為都是 public repo,所以無需 authentication 即可用 api 讀取內容
      2. 換言之,可以純靠前端 js 拉資料回來,不過要小心有 rate limit,所以拉資料要記得必須 incremental 慢慢增加
      • 看狀況有可能需要弄個後端當 cache
      • Agreed
      • Cache 可以像其他專案一樣,用 Firebase 來做
      • Firebase 用量不會超過吧?
      • 或是靠 au 的 ethercalc 也行,哈。
      • XD cool
  1. 專案列表裡,每個專案裡也可以放一些屬於該專案的坑讓大家直接跳
    1. 所以要有個 js (jquery) function,註冊要塞 issue 的 dom element (因為需要 incremental)
    2. 可以傳入 tags, number of issues 等參數,選擇哪些 issues 會被拉回來
  2. 整個專案列表這一頁的上方,可以有個 dropdown 之類的東西,讓人們選擇自己本身的(能力)屬性
    1. 這一頁裡許多顯示 issue list 的地方,就可以自動依據 viewer 的屬性,過濾或排序 issues,讓顯示出來的坑更適合跳進去
  3. 可以有個「 I’m feeling lucky 」的按鈕,讓系統隨便幫你挑個坑來跳
  4. Question: 該做成 jQuery Plugin 還是 AngularJS controller 呢?

畫面截圖

已 push 成新的 branch: issues

Widget 的樣子

Filter 按鈕

瀏覽者可依據自身能力屬性,選擇 filter 條件

專案列表按鈕

列出 firebase 裡註冊進 hack.g0v.tw 並且有 github url 的專案。

(不只是 mockup 了,已可與 firebase 連動)

可以列出 issue 列表了

不過目前僅限 hard code 的兩個專案。

Issue 的分頁功能

與 firebase 上的 project list 整合

Filter by Project

Filter by Single Label

Filter by Multiple Labels

Filter by Multiple Labels with Chosen 

Filter by Labels from Configuration/Github

程式結構

Jeff Hung : 底下是關於程式結構與設計的筆記,歡迎加入討論。

希望能做成兩段:一個是 jquery-based class 當作 model,另一個是 angularjs controller 負責把 model 跟畫面串接起來。未來希望 model 的部分可以在其他地方被 mash up。

不全用 angularjs 的原因是,mash up 比較簡單,不會 depend on angularjs,不過 jquery 我就假設到處都有了。但是這樣做會比較難利用到 angularjs 的 promise、$timeout 之類的工具。而且能否利用與否還是其次,畢竟 jquery 也不是沒有類似的工具,但怎樣和 controller 串接會比較好,倒是需要弄清楚。

等到 model 部分比較確定之後,就可以開始來研究怎麼與 eo4 (mockup) 合作了。

目前 paging 是靠 angular-ui bootstrap 的 pagination directive 幫忙。但實際內容的 paging 是在 controller 裡面做,這樣其實不太好,應該做在 model 裡才對。

現在的 model 也沒有處理 multiple repository backends 的能力,而是在 controller 裡面拉。未來也應該改為由 model 負責。不過因為抓 issues 是 async,當抓到內容後,怎樣與 angular controller 串接,是另一個問題:一邊是 callback based,另一邊則可以是 promise-based。

根據在 irc 上面的討論,資料的更新決定為單向,要改變 issue 內容與狀態,請直接連到 github 上進行。另外,目前暫定也不做 live reload 定時抓 issues 新狀態,因為 issue 的變化還沒有那麼多。