You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
2.6 KiB
131 lines
2.6 KiB
let p = console.log
|
|
import all_links from '../assets/community_links'
|
|
import fzi from 'fzi'
|
|
import api from '../api'
|
|
|
|
tag app-community-links
|
|
|
|
active = no
|
|
selection_index = 0
|
|
query = ""
|
|
|
|
get render? do mounted?
|
|
|
|
def mount
|
|
$cli.focus!
|
|
links = await get_links!
|
|
render!
|
|
|
|
def get_links
|
|
let result = []
|
|
for link_text in all_links
|
|
let link = await api.create_link_from_text(link_text, no)
|
|
link.link_text = link_text
|
|
result.push link
|
|
result
|
|
|
|
get filtered_links
|
|
links.filter! do |link| !api.name_exists(link.name)
|
|
|
|
get sorted_links
|
|
fzi.sort query, filtered_links, do |x| x.name
|
|
|
|
get selected_link
|
|
sorted_links[selection_index]
|
|
|
|
def open
|
|
active = yes
|
|
|
|
def close
|
|
active = no
|
|
|
|
def increment_selection_index
|
|
selection_index = Math.min(links.length - 1, selection_index + 1)
|
|
|
|
def decrement_selection_index
|
|
selection_index = Math.max(0, selection_index - 1)
|
|
|
|
def add_community_link
|
|
return if state.loading
|
|
state.loading = yes
|
|
try
|
|
await api.add_link selected_link.link_text
|
|
catch e
|
|
err "adding link", e
|
|
state.loading = no
|
|
|
|
get tips
|
|
let result = []
|
|
let temp
|
|
|
|
temp = {
|
|
click_handler: close.bind(this)
|
|
hotkey_handler: close.bind(this)
|
|
hotkey: "esc"
|
|
hotkey_display_name: "Esc"
|
|
content: "Exit Community Links"
|
|
}
|
|
result.push temp
|
|
|
|
temp = {
|
|
click_handler: add_community_link.bind(this)
|
|
hotkey_handler: add_community_link.bind(this)
|
|
hotkey: "shift+return"
|
|
hotkey_display_name: "Shift + Return Or Click"
|
|
content: "Add To Your Links"
|
|
}
|
|
result.push temp
|
|
|
|
temp = {
|
|
click_handler: increment_selection_index.bind(this)
|
|
hotkey_handler: increment_selection_index.bind(this)
|
|
hotkey: 'down'
|
|
hotkey_display_name: "Down Arrow"
|
|
content: "Move Selection Down"
|
|
}
|
|
result.push temp
|
|
|
|
temp = {
|
|
click_handler: decrement_selection_index.bind(this)
|
|
hotkey_handler: decrement_selection_index.bind(this)
|
|
hotkey: 'up'
|
|
hotkey_display_name: "Up Arrow"
|
|
content: "Move Selection Up"
|
|
}
|
|
result.push temp
|
|
|
|
result
|
|
|
|
def render
|
|
|
|
<self>
|
|
css d:flex fld:column jc:start gap:15px fl:1 w:100% ofy:hidden
|
|
|
|
<div>
|
|
<input$cli
|
|
autofocus
|
|
bind=query
|
|
>
|
|
|
|
<app-tips tips=tips>
|
|
|
|
<.links>
|
|
css ofy:auto
|
|
|
|
for link, index in sorted_links
|
|
<.link
|
|
.selected=(selection_index == index)
|
|
@pointerover=(selection_index = index)
|
|
@click=add_community_link
|
|
>
|
|
css d:flex fld:row jc:space-between ai:center px:16px
|
|
py:2px rd:5px cursor:pointer c:$text-c min-height:35px
|
|
|
|
if link.is_bang
|
|
css c:$bang-c
|
|
|
|
<.link-left> link.name
|
|
css fl:1
|
|
|
|
<link-right.ellipsis> link.url
|
|
css fl:1 c:inherit
|
|
|