hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

cocopyでAsanaのタスクのリンクをコピーするときにフルスクリーン版のURLをコピーする

Slackなどに貼られたAsanaのタスクのURLを開くと、タイムラインやリストなどの画面の上のモーダル画面に本文が出て、描画はあんまり速くなく、本文は画面の右端にしか出てないので、見づらいなと思っていた。
誕生日会プロジェクトにおける、ろうそくを買うタスク、とか、タスクの説明が数行くらいならいいけど、ソフトウェアを作っていたりとか込み入ったことをしていると、どうしても長文を読み書きしたくなることもある。

外部にリンクを貼るときくらいはフルスクリーン版にしておこう、と思って、cocopyでコピーするときに、URLの末尾に/fをつけるようにした。

(page) => {
  if (page.url.match(/\d$/)) {
    page.url = page.url + '/f';
  }

  return {
    html: render('<a href="{{&url}}">{{title}}</a>', page),
    text: `[${page.title.replace(/\s*[\[\]]\s*/g, ' ')} ${page.url}]`,
  };
}

AsanaのURL Patternを指定していて、Asanaのタスクをコピーするときにだけ、1, 2がAsana用の変換機能がついたfunctionが出るようにしている。1がHTMLがコピーされるリッチなやつ、2がMarkdown。

URL Pattern付きのfunctionは手前に設定しておくと便利


Asanaが用意してくれている「タスクのリンクをコピー」ボタンを押したら/fがついてたので、あっこれはcocopyからできるようにすると便利そうだ、と思ったので、やってみた形。

タスクのリンクをコピーボタン


ところで、functionをサイトごとにわけなくても、function内でURLをみて処理をどんどん足していけば、functionをサイトごとに用意する必要ないわけだけど、どうなんでしょうね。
でも、いろんなサイト用の設定を1関数に詰め込んでしまったら、いまのギャラリーみたいに他人に配れないだろうし、やっぱりfunctionは小分けになってるほうがいいのだろうと思う。
だけど、どのサイトのときには、どんなふうに加工する?という関心事と、どんなフォーマットでコピーする?の2つの関心事があるので、リッチなやつ、Markdownがコピーされるやつ、リッチなやつ(Asana用)、Markdownがコピーされるやつ(Asana用)、みたいに、functionがどんどん増えてしまって冗長なようにも感じる。

(page) => {
  if (page.url.match(/https:\/\/app\.asana\.com\//) && page.url.match(/\d$/)) {
    page.url = page.url + '/f';
  }

  return {
    html: render('<a href="{{&url}}">{{title}}</a>', page),
    text: `[${page.title.replace(/\s*[\[\]]\s*/g, ' ')} ${page.url}]`,
  };
}