cosense-kanban
bsahd.icon
たねハウスのカンバン方式(仮)の入力補助をするUserScript
/tanehouse/Roadmap のような形式です
https://gyazo.com/2287d9fcbaab88a1d25a93878490ad25
機能
一つのPageMenuのボタンとしてインターフェースを作成する
次のメニューが含まれている
mkinbox
chstate inbox
chstate todo
chstate doing
chstate done
chstate close
mkinbox
#inboxとのみ書かれた空のページを作る
chstate
#inbox, #todo, #doing, #done, #close を除去
メニューで設定したのタグををページ先頭に挿入
設計思想
トランスパイル、依存関係なし: UserScriptをオンにして自分のページのscript.jsに貼り付けるだけ
+ 読みやすい短いコード: 安心して使える
ツールボックス
事前準備
inbox, todo, doing, done, closeのページと被リンクがないことを確認する
タグ名のプレフィックスは必要か?
ロードマップページを作る
Roadmapという名前にする
#inbox, #todo, #doing, #done, #close にリンクすること
https://gyazo.com/4ed2632026642b12cb669657b803df5e
https://www.flaticon.com/free-icon/roadmap_2116981
https://github.com/bsahd/cosense-kanban https://img.shields.io/badge/bsahd-cosense--kanban-3d72f5.svg?logo=github
https://img.shields.io/github/stars/bsahd/cosense-kanban.svghttps://img.shields.io/github/forks/bsahd/cosense-kanban.svghttps://img.shields.io/github/contributors-anon/bsahd/cosense-kanban.svghttps://img.shields.io/github/license/bsahd/cosense-kanban.svg
インポートはhttps://cdn.jsdelivr.net/gh/bsahd/cosense-kanban/script.js https://img.shields.io/badge/jsdelivr-bsahd/cosense--kanban/script.js-red.svg?logo=jsdelivrです
CORS/CSPが通らないのでバンドルする場合になります
注意: コードを確認せずにコピペしないでください
code:script.js
scrapbox.PageMenu.addMenu({
title: 'thKanban',
image: 'https://i.gyazo.com/4ed2632026642b12cb669657b803df5e.png'
});
function navigateWithoutReload(navigateTo){
var elem = document.createElement("a");
elem.href = navigateTo;
document.body.appendChild(elem);
elem.click();
elem.remove();
}
scrapbox.PageMenu('thKanban').addItem({
title: 'open Roadmap',
onClick: function () {
navigateWithoutReload("Roadmap");
}
});
scrapbox.PageMenu('thKanban').addItem({
title: 'open Roadmap in new tab/window',
onClick: function () {
window.open("Roadmap");
}
});
scrapbox.PageMenu('thKanban').addItem({
title: 'mkinbox',
onClick: function () {
navigateWithoutReload('newTask?body=%23inbox');
}
});
scrapbox.PageMenu('thKanban').addItem({
title: 'mkinbox in new tab/window',
onClick: function () {
window.open('newTask?body=%23inbox');
}
});
/*
古いタグを除去する
コードブロック内のタグも巻き添えになるので注意
*/
function thKanbanChstateDeleteOldState(){
window.scrapbox.Page.lines.forEach(function(line,i){
var lineText = line.text
var lineTagRemoved = line.text.replace(
new RegExp('#inbox|#todo|#doing|#done|#close', 'g')
, "");
if(lineTagRemoved != lineText){
window.scrapbox.Page.updateLine(lineTagRemoved,i);
console.log("tag removed in line",i);
}
});
}
function thKanbanChstateInsertNewState(state){
window.scrapbox.Page.insertLine("#"+state,1);
console.log("new state:",state)
}
// コードの冗長性を減らすためボタン作成用関数を定義
function thKanbanChstateMakeButton(state){
scrapbox.PageMenu('thKanban').addItem({
title: 'chstate to '+state,
onClick: function () {
thKanbanChstateDeleteOldState();
thKanbanChstateInsertNewState(state);
}
});
}
thKanbanChstateMakeButton("inbox");
thKanbanChstateMakeButton("todo");
thKanbanChstateMakeButton("doing");
thKanbanChstateMakeButton("done");
thKanbanChstateMakeButton("close");
正直これ単体だとそこまで便利にはならないと思っていたが、あると便利な機能に気づいたmtane0412.icon
一つのページに対して#project1-todo, mtane0412-todo #2025-todoみたいな異なるスコープで管理できるのが文芸的タスク管理のメリット
一つだけだと手打ちしたほうが早いと思っていたが、複数のスコープで管理しているものは全部手直しするのが面倒だった
ここをScriptにするとよさそう
(作ってって言ってるわけじゃなく、単なる連想なので気にしないでください)
確かに、CosenseだとNotionや他のタスク管理と違って非階層なのでこういうことしやすそうbsahd.icon