WorkFlowyで選択項目をトップに移動するブックマークレット
まず、移動の操作を確認してみる。
code:testscript.js
var s = WF.getSelection();
"" == s && s.push(WF.focusedItem());
WF.moveItems(s, t, 0);
moveItemsの適切な引き数がわからず時間がかかったけども、とりあえず上で大丈夫。
あとは、ショートカットキー。option + command + u がよかったがブラウザに使われているので代わりにpにする。
code:script.js
javascript:(function(){document.body.addEventListener('keydown',event => {if (event.altKey && event.metaKey){if(event.keyCode===80){var s = WF.getSelection(); "" == s && s.push(WF.focusedItem());var t = s0.getParent();WF.moveItems(s, t, 0);}}});})(); さて。
https://gyazo.com/2c892db7dc72d1ff3199a8dca2b71259
ブックマークには以下を書いて、このページを参照できるように。
参照:
2024/8/24
拡張機能を使い、自動的に読み込まれるようにする。
code:ex_scrip.js
console.log("スクリプトが読み込まれました")
const scriptText = `
(function(){document.body.addEventListener('keydown',event => {
if (event.metaKey && event.key==='ArrowRight'){
event.preventDefault();
var s = WF.focusedItem();
if (s.isExpanded()){
WF.collapseItem(s);
}else{
var t = s.getParent();
WF.editItemName(t);
WF.collapseItem(t);
if(t.getParent().getParent()==null){
WF.zoomOut();
}
}
}
if(event.key==='ArrowUp' && event.altKey && event.metaKey){
event.preventDefault();
const currentItem = WF.focusedItem()
const NextItem = currentItem.getNextVisibleSibling()
var s = WF.getSelection();
"" == s && s.push(WF.focusedItem());
WF.moveItems(s, t, 0);
WF.editItemName(NextItem);
}
});})();
`
const scriptbody = document.createElement("script")
scriptbody.innerHTML = scriptText
document.body.appendChild(scriptbody);
console.log("ショートカットキーを追加しました")
移動後に、カーソルを下の項目(ないし上の項目)の先頭におきたいが、末尾になってしまう。
対処方法はちょっと思いつかない。
選択範囲を生成するのはたぶんうまくいかない気がする。
以下を呼んでやり方を見出せた。
code:ex_01.scirpt
console.log("スクリプトが読み込まれました")
const scriptText = `
(function(){document.body.addEventListener('keydown',event => {
if (event.metaKey && event.key==='ArrowRight'){
event.preventDefault();
var s = WF.focusedItem();
if (s.isExpanded()){
WF.collapseItem(s);
}else{
var t = s.getParent();
WF.editItemName(t);
WF.collapseItem(t);
if(t.getParent().getParent()==null){
WF.zoomOut();
}
}
}
if(event.key==='ArrowUp' && event.altKey && event.metaKey){
event.preventDefault();
console.log("pとoptionキーが押されました")
const currentItem = WF.focusedItem()
NextItem = currentItem.getPreviousVisibleSibling()
var s = WF.getSelection();
"" == s && s.push(WF.focusedItem());
WF.moveItems(s, t, 0);
WF.editItemName(NextItem);
const target = NextItem.getElement()
console.log(target)
const node = target.children0.children2.children0.childNodes0 console.log(node)
const editorRange = document.createRange()
const editorSel = window.getSelection()
editorRange.setStart(node, 0)
editorRange.collapse(true)
editorSel.removeAllRanges()
editorSel.addRange(editorRange)
}
});})();
`
const scriptbody = document.createElement("script")
scriptbody.innerHTML = scriptText
document.body.appendChild(scriptbody);
console.log("ショートカットキーを追加しました")
本当は子要素の連鎖ではなく、要素のクラスで絞り込んだ方がいいと思うが当面はこうする。