scrapbox-editor-insert-prev-line
動機
理由を書いている最中にすでに脳内に結論がある時、さっと
結論を先に書きたい。
機能
編集中に shift+enter を押すと、上に空行を追加する。
設定方法
自分のページに下記を貼り付ける。
自分のページ(js)code:script.js
import '/api/code/foldrr/scrapbox-shortcut/script.js'
上記よりも後の部分で下記を貼り付ける。
自分のページ(js)code:script.js
import '/api/code/foldrr/scrapbox-editor-insert-prev-line/script.js'
scrapboxShortcut.onEdit('shift+enter', scrapboxEditorInsertPrevLine);
コード
script.jswindow.scrapboxEditorInsertPrevLineRunning = false;
window.scrapboxEditorInsertPrevLine = e => {
let keydown = (keyCode, modifiers) => {
modifiers = modifiers || {};
let ev = document.createEvent('Events');
ev.initEvent('keydown', true, true);
ev.keyCode = keyCode;
ev.shiftKey = !!(modifiers.shift);
ev.ctrlKey = !!(modifiers.ctrl);
ev.metaKey = !!(modifiers.meta);
$('#text-input')[0].dispatchEvent(ev);
}
if (scrapboxEditorInsertPrevLineRunning) return;
scrapboxEditorInsertPrevLineRunning = true;
let indentText = $('.cursor-line .indent-mark .pad').text();
let lineText = $('.cursor-line .indent').text();
e.preventDefault();
(() => {
let defer = new $.Deferred;
keydown(35); // end
keydown(36); // home
keydown(13); // enter
defer.resolve();
return defer.promise();
})()
.then(() => {
let defer = new $.Deferred;
setTimeout(() => {
keydown(38); // arrow-up
defer.resolve();
}, 20);
return defer.promise();
})
.then(() => {
if (lineText == '') {
let textInput = document.getElementById('text-input');
textInput.value = textInput.value + indentText;
let ev = document.createEvent('Event');
ev.initEvent('input', true, true);
textInput.dispatchEvent(ev);
}
scrapboxEditorInsertPrevLineRunning = false;
});
return false;
};