程式語言 | 宅男阿西 /category/school/program/ 用宅男的角度看日本、學日語 Sat, 04 Jul 2026 16:02:25 +0000 zh-TW hourly 1 https://wordpress.org/?v=7.0.3 https://i0.wp.com/nerdcc.com/wp-content/uploads/2021/03/cropped-%E5%B7%A5%E4%BD%9C%E5%8D%80%E5%9F%9F-1.png?fit=32%2C32&ssl=1 程式語言 | 宅男阿西 /category/school/program/ 32 32 190080241 替留言板或聊天室增加超連結(autolinker) /school/autolinker/ Fri, 03 Feb 2023 06:14:53 +0000 /?p=3296 今天不講日語,來記錄一下程式的東東。在使用留言板或是聊天室時,如果輸出的內容沒有超連結可以直接點會非常不方便,這篇使用 autolinker 這個套件,做一個簡易的範例。下面的範例使用 TypeScr ...

閱讀全文替留言板或聊天室增加超連結(autolinker)

這篇文章 替留言板或聊天室增加超連結(autolinker) 最早出現於 宅男阿西

]]>
今天不講日語,來記錄一下程式的東東。在使用留言板或是聊天室時,如果輸出的內容沒有超連結可以直接點會非常不方便,這篇使用 autolinker 這個套件,做一個簡易的範例。下面的範例使用 TypeScript,主要有 3 個步驟:

  • 抓取 DOM
  • 監聽輸入內容
  • 使用 autolinker 並輸出

建立 HTML 並抓 DOM

HTML 結構非常單純:

<div class="container">
  <h2>輸出結果</h2>
  <p class="result-text"></p>
</div>

<hr>

<textarea placeholder="請輸入聊天內容"></textarea>
替文字增加超連結 HTML
很單純的 HTML 畫面

接著抓輸入及輸入的兩個 DOM:

const resultText = document.querySelector('.result-text') as HTMLParagraphElement
const textarea = document.querySelector('textarea')! as HTMLTextAreaElement

監聽 textarea

我希望在按 enter 後能夠把資料渲染到上方,所以針對 textarea 做監聽,事件是 keypress

因為必須要知道按下去的按鍵是不是 enter,所以判斷 keyCode 是不是等於 13。如果是 13 的話,幫我添加連結。

textarea.addEventListener('keypress', (e: KeyboardEvent) => {
  const { keyCode } = e;

  if (keyCode === 13) {
    // 幫我添加連結
  }
})

使用 autolinker 增加連結

使用 autolinker 之前記得先安裝,我是用 npm,所以打:

npm install autolinker --save

並且引入套件:

import Autolinker from 'autolinker';

再寫一個 function 來處理連結:

function addLink<T extends string>(text: T): T {
  const linkText = Autolinker.link(text, {
    newWindow: true,
    sanitizeHtml: true
  })

  return linkText as T;
}

傳入參數 text,接著透過 Autolinker 轉換後回傳。 如果在 textarea 內輸入「hello!! https://google.com」則會回傳: hello!! <a href="https://google.com" target="_blank" rel="noopener noreferrer">google.com</a>

所以回到 textarea 的事件監聽裡,我們把程式碼補上:

if (keyCode === 13) {
  // 塞到畫面上
  resultText.innerHTML = addLink(textarea.value); 
  // 清空輸入內容
  textarea.value = '';
  // 避免按 enter 後換行
  e.preventDefault();
}

完成結果如下:

替文字增加超連結 輸出結果

XSS 的問題

你可能有注意到如果輸入 HTML 是可以直接被選染的,代表可以打 <script>alert(0)</script> 上去。所以才在轉換的時候加上 Autolinker 提供的 sanitizeHtml: true,避免 XSS 的發生。

const linkText = Autolinker.link(text, {
  newWindow: true,
  sanitizeHtml: true
})

autolinker 還有其他不少功能,在這個範例中並沒有用到,其他功能可以到 Github 看他們的文檔。

這篇文章 替留言板或聊天室增加超連結(autolinker) 最早出現於 宅男阿西

]]>
3296
利用Figma製作UI元件 | Form表單篇 /school/ui_form/ Thu, 04 Nov 2021 14:11:47 +0000 /?p=2593 這篇文章記錄了使用Figma製作UI元件、以及實際將設計稿刻到網頁上所遇到的問題。這次的設計稿其實是某Figma線上課程的作業,當中運用到了變體、Autolayout等功能。 而網頁部分利用偽元素製作 ...

閱讀全文利用Figma製作UI元件 | Form表單篇

這篇文章 利用Figma製作UI元件 | Form表單篇 最早出現於 宅男阿西

]]>
這篇文章記錄了使用Figma製作UI元件、以及實際將設計稿刻到網頁上所遇到的問題。這次的設計稿其實是某Figma線上課程的作業,當中運用到了變體、Autolayout等功能。 而網頁部分利用偽元素製作input、同時利用正規表達式限制輸入內容,配合Javascript的監聽。

講了這麼多,實際的設計稿長成下面這樣子:

這篇簡單紀錄一下學習心得,也把Demo與設計稿放下面:

強大的Auto Layout 與 Variants

初學Figma的我在使用Auto Layout時常感到非常困惑,原因是常搞不懂元件中的 Hug contentsFix widthFill container 該如何使用,特別是當元件的層級複雜化之後,該如何調整才能達到自適應的效果,這方面看來只能多熟悉工具、透過多次練習來加強。

不過如果有學過 CSS 中的flex排版的話,對於Auto Layout的概念應該會更好理解。像是轉換方向就是使用 flex-direction ,元素的對齊則是使用 align-itemsjustify-content

順帶一提,Auto Layout 快捷鍵是 Shift + A

另一個很棒的功能是變體 Variants ,能減少重複造輪子的時間,同時也能更好管理,就像是網頁上常見的 :hover:active:checked 等樣式都能利用變體功能來製作。元件設計好之後就能從Assets中拉出來,選擇自己要的property。

input的樣式修改

實作中遇到了 input 無法修改CSS的問題,選取型的input都只能用預設樣式(radio、checkbox),不好看而且與設計稿不同,非常麻煩。這邊的解決方式使用了偽元素 ::before 以及 ::after 來處理,用 labelinput 包起來的特性,再針對選取後 :checked 的樣式做調整。

有興趣可以參考w3schools所提供的範例

正規表達式過濾其他格式

為了避免使用者輸入非正確的e-mail格式,這邊用了正規表達式(Regular Expression)來過濾不正確的e-mail,在//中定義出表達式即可。

const re = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;

或者是利用 new RegExp 來建立也可以。

let re = new RegExp('^09\d{8}$')

接下來就增加判斷式,不符合格式時border變成紅色。


這次的實作心得非常簡短,因為幾乎所有元件都是看著影片跟老師製作,所以其實沒遇到太大的問題,缺點就是大家的作業都長得一樣。這次也抱持著「啊反正我都做設計稿了、不然把它刻出來吧」「啊反正我都刻出來了,不如來寫心得吧」,所以就有了這篇。後續還有很多作業要提交,也會繼續分享心得!

這篇文章 利用Figma製作UI元件 | Form表單篇 最早出現於 宅男阿西

]]>
2593