最近「やっぱCosenseすげえなぁ」という気持ちがふつふつとわいてきた。
まだガッツリは使ってないものの、普段の書き物はWorkflowyから始まるのでとりあえず転記用のBookmarkletを作ってみた。
変換ツールはいくつかあったんだけど、自分好みに階層や装飾をたもったまま1ボタンで転記してくれるのは見つからなかったので。
作成はClaudeに頼んだ。前にDynalist用に作った のでそれを活かしてすぐに作れた。
▼ コード
javascript:(function(){function WF2CS(p){try{if(!location.host.includes('workflowy.com')){alert('Workflowyで実行してください');return;}if(!p){alert('プロジェクト名を設定してください');return;}function hC(h){if(!h)return'';let t=h;t=t.replace(/<a [^>]*href="([^"]*)"[^>]*>([\s\S]*?)<\/a>/gi,function(_,u,i){const ti=i.replace(/<[^>]+>/g,'').replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/ /g,' ').replace(/'/g,"'").replace(/"/g,'"').trim();if(!ti||ti===u)return'['+u+']';return'['+ti+' '+u+']';});t=t.replace(/<code>([\s\S]*?)<\/code>/gi,function(_,i){return'`'+i.replace(/<[^>]+>/g,'').replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/ /g,' ').replace(/'/g,"'").replace(/"/g,'"')+'`';});t=t.replace(/<b>([\s\S]*?)<\/b>/gi,function(_,i){return'[* '+i.replace(/<[^>]+>/g,'')+']';});t=t.replace(/<i>([\s\S]*?)<\/i>/gi,function(_,i){return'[/ '+i.replace(/<[^>]+>/g,'')+']';});t=t.replace(/<s>([\s\S]*?)<\/s>/gi,function(_,i){return'[- '+i.replace(/<[^>]+>/g,'')+']';});t=t.replace(/<[^>]+>/g,'');t=t.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/ /g,' ').replace(/'/g,"'").replace(/"/g,'"');return t;}function fN(n,ind){if(!n)return'';return hC(n).split(/\r\n|\r|\n/).filter(function(l){return l.trim()!=='';}).map(function(l){return ind+'> '+l;}).join('\n')+'\n';}function gC(item,ind){const ch=item.getChildren();if(!ch||ch.length===0)return'';return ch.map(function(c){let nm=hC(c.getName()||'');if(c.data&&c.data.he)nm='[* '+nm+']';return ind+nm+'\n'+fN(c.getNote(),ind)+gC(c,ind+' ');}).join('');}const root=WF.currentItem();if(!root){alert('カレント項目が取得できませんでした');return;}const wfUrl=root.getUrl?'https://workflowy.com'+root.getUrl():location.href;const title=hC(root.getName())||'Untitled';const body=gC(root,' ')+'\nfrom [Workflowy '+wfUrl+']';const url='https://scrapbox.io/'+p+'/'+encodeURIComponent(title)+'?body='+encodeURIComponent(body);const t=window.open(url,'_blank');if(!t){if(confirm('ポップアップがブロックされました。このタブで開きますか?')){location.href=url;}}}catch(e){alert('エラー: '+e.message);}}WF2CS('YOUR-PROJECT');})();*文末のYOUR-PROJECTを変更して使ってください
機能
- Workflowy上でBookmarkletを実行
- Zoomした項目をタイトル、子項目を本文としてCosenseで新規ページ作成
- 階層構造は維持。全て箇条書きで表現
- Workflowy上の装飾(太字・リンク・コードなど)をCosense記法に変換
- 見出しは単なる太字にした
- 最後にWorkflowyへのリンクも追加
Workflowyの表記、このサイトではFを大文字or小文字どっちにするか迷ってる。確か最初はFで、一時期fになったからそれに合わせて変えてたんだけど、いつの間にか戻ってるところもある。でも公式でも記事によって変わってるんだよなぁ。