iT邦幫忙

2025 iThome 鐵人賽

DAY 17
0
佛心分享-SideProject30

從零開始改善工作之 Chrome Extension: MR 通知文字小工具系列 第 17

Day 17:規劃 ─ 支援多專案 Merge Request 的差異格式

  • 分享至 

  • xImage
  •  

昨天我們調整了使用者面板,讓它對出新使用者友善,今天我們繼續來增加一些小巧思吧!

WHY

在不同專案裡面,Merge Request 的通知格式可能會需要不同的內容。例如:

  • 專案 A:通知格式是 Hello {REVIEWER_NAME},這是最新的 {MR_LINK},再麻煩你,謝謝
  • 專案 B:多家開發的人名 Hello 這是最新的 {MR_LINK} by {author}

如果我們只能維持單一模板,就會變成使用者每次複製前都要手動調整,令人非常煩躁。
因此,今天的目標是:
讓 Extension 可以根據「專案 ID 或 GitLab 網域」自動套用不同的模板格式。

HOW

  1. 判斷目前所在專案

    • 可以從 window.location.href 解析 URL。
    • 觀察 GitLab URL 長這樣:
      • 專案 A >>
      https://gitlab.com/gitlab-org/security-products/demos/experiments/clangsa/highway/-/merge_requests/14
      
      • 專案 B >>
      https://gitlab.com/gitlab-org/security-products/demos/experiments/clangsa/cmake/OpenSceneGraph/-/merge_requests/1
      
      那麼 project 就能成為辨識的依據。
    function getProjectKey() {
      const url = window.location.href;
      const beforeDash = url.split('/-/')[0];
      const parts = beforeDash.split('/');
      return parts.pop() || null;
    }
    
  2. 儲存多專案對應模板
    使用 chrome.storage.sync 來存放:

    {
      "reviewTemplates": {
        "projectA": "${title} by ${author}",
        "projectB": "[${jiraId}] ${title}"
      }
    }
    
  3. 讀取對應模板

    chrome.storage.sync.get("reviewTemplates", (data) => {
      const projectKey = getProjectKey();
      const template = data.reviewTemplates?.[projectKey] || data.reviewTemplates?.default;
      console.log("使用模板:", template);
    });
    

注意事項

  • 提供 fallback 模板:避免找不到專案對應時無法正常輸出。
  • UI/UX 提示:在 Popup 介面加上「目前專案 Key」提示,讓使用者知道自己設定的是哪個專案。

以上為大略的解決方向,實作上會遇到一點小問題,明天一起來解決吧!


上一篇
Day 16:最佳化範本輸入介面
下一篇
Day 18:實作 ─ 支援多專案 Merge Request 的差異格式
系列文
從零開始改善工作之 Chrome Extension: MR 通知文字小工具22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言