Skip to content

Instantly share code, notes, and snippets.

@Tachibana446
Created August 21, 2023 12:42
Show Gist options
  • Save Tachibana446/ccaa99958304d2358443d8ef00f062d3 to your computer and use it in GitHub Desktop.
Save Tachibana446/ccaa99958304d2358443d8ef00f062d3 to your computer and use it in GitHub Desktop.
Misskeyのウィジェット部分でクリップに登録したノートを表示するスクリプト
// 一回あたりに取得する件数
let LIMIT = 10
// 現在洗濯中のクリップID
let CLIP_ID = null
// 現在読み込んだ最も古いノートのID
let UNTIL = null
// 現在読み込んでいるノートの表示要素
let NOTE_ELEMENTS = []
// リセット
@clear(){
UNTL = null
NOTE_ELEMENTS = []
}
// クリップを選択するためのコンボボックスを作成する
@show_selector(){
let items = []
each (let c, Mk:api('clips/list', {})) {
items.push({text: c.name, value: c.id})
}
let default = CLIP_ID
if (default == null) {
default = items[0].value
}
Ui:C:select({
items: items,
default: default,
label: 'Clips',
onChange: @(value) {
CLIP_ID = value
clear()
view()
}
})
}
// クリップに登録されたノートを読み込む
@fetch(clipId, untilId){
if (clipId == null) {
return null
}
let schema = {
clipId: clipId,
limit: LIMIT
}
print(schema)
if (untilId != null) {
Obj:set(schema, 'untilId', untilId)
}
print(schema)
let response = Mk:api("clips/notes", schema)
each (let note, response) {
NOTE_ELEMENTS.push(to_element(note))
}
UNTIL = response[(response.len - 1)].id
}
// APIから返却されたノートオブジェクトからUI要素を作成する
@to_element(obj){
let el = Ui:C:container({
bgColor: "#444",
fgColor: "#fff",
padding: 10,
rounded: true,
children: [
Ui:C:mfm({
text: obj.user.name,
bold: true
})
Ui:C:mfm({
text: obj.text,
})
]
})
return el
}
// 表示関数
@view(){
Ui:render([
// トップにクリップを選ぶためのコンボボックスを用意
show_selector(),
// 再表示ボタン
Ui:C:button({
text: 'View',
onClick: @() {view()}
}),
// ノートの表示
Ui:C:container({
children: NOTE_ELEMENTS
}),
// Moreを押すと更に古いノートを読み込み表示する
Ui:C:button({
text: 'More',
onClick: @() {
fetch(CLIP_ID, UNTIL)
view()
}
})
])
}
fetch(CLIP_ID, UNTIL)
view()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment