下書きを追加できるプラグイン!
下書きにも使えるし、なにかのテンプレートとして使うこともできるよ!
※ たくさん追加しすぎるとプラグインアクション一覧が汚くなる可能性があります
※ :io:の現バージョン(13.9.1)ではSafariで正常に動作しません(13.10.0で修正されてます)
コード
/// @ 0.12.4
### {
name: "下書きを追加できるプラグイン"
version: "0.0.1"
author: "しせる"
description: "下書きを追加できます。大量に追加するとアクション一覧が見づらくなるので注意!"
permissions: []
config: {
show_len: {
type: "number"
label: "表示文字数"
description: "アクション一覧に表示する時の表示文字数を指定できます。(長くしすぎるとMisskeyが死ぬ可能性があります)"
default: 5
}
}
}
let draft_data_key = "secine/plug/draft-data"
var draft_data = eval {
let v = Mk:load(draft_data_key)
if (Core:type(v) == "null") []
else Json:parse(v)
}
@DraftEntity(text) {
{
id: Util:uuid()
text: text
}
}
@save_data() {
Mk:save(draft_data_key Json:stringify(draft_data))
}
@assert_exists(draft_entity) {
if (draft_data.find(@(v) { v.id == draft_entity.id }) == null) {
Mk:dialog("実行できません" "削除されています" "error")
return true
}
return false
}
@draft_action(note, update, draft_entity) {
if (assert_exists(draft_entity)) return null
if (note.text.len != 0) {
if (!Mk:confirm("警告" "すでに入力されている文章が存在します。置き換えますか?" "warn")) {
return null
}
}
update("text", draft_entity.text)
}
@remove_draft_action(draft_entity) {
if (assert_exists(draft_entity)) return null
if (Mk:confirm("警告" "削除しますか?一度消すともとに戻せません" "warn")) {
draft_data = draft_data.filter(@(v) { v.id != draft_entity.id })
save_data()
Mk:dialog("完了" "削除しました。一覧から消すにはリロードしてください。" "success")
}
}
@add_draft_action(draft_entity) {
let short_text = eval {
if (draft_entity.text.len < (Plugin:config.show_len + 1)) draft_entity.text
else `{draft_entity.text.slice(0, Plugin:config.show_len)}...`
}
Plugin:register_post_form_action(`下書き: {short_text}` @(note, update) {
draft_action(note update draft_entity)
})
Plugin:register_post_form_action(`下書き削除: {short_text}` @() {
remove_draft_action(draft_entity)
})
}
@add_draft(note) {
let entity = DraftEntity(note.text)
draft_data.push(entity)
save_data()
add_draft_action(entity)
Mk:dialog("完了" "追加しました!" "success")
}
Plugin:register_post_form_action("下書きを追加" add_draft)
each (let entity, draft_data) {
add_draft_action(entity)
}