Browse Source

implement link editing

main
familyfriendlymikey 2 years ago
parent
commit
2ec24983f2
  1. 206
      app/client.imba

206
app/client.imba

@ -32,6 +32,7 @@ tag app
fatal_error = no fatal_error = no
bang = no bang = no
holding_shift = no holding_shift = no
editing_link = no
get render? do mounted? get render? do mounted?
@ -225,11 +226,13 @@ tag app
link_text link_text
def handle_edit link def handle_edit link
editing_link = link
state.query = construct_link_text(link)
def make_edit link, new_link_text
def edit_link def edit_link
let input = window.prompt "Enter the new link name and url:", construct_link_text(link)
return if input is null
try try
await update_link link, input await update_link link, new_link_text
catch e catch e
return err "editing link", e return err "editing link", e
loading = yes loading = yes
@ -281,12 +284,12 @@ tag app
sort_links! sort_links!
def handle_click_delete link def handle_click_delete link
return unless window.confirm "Do you really want to delete {link..display_name}?"
handle_delete link handle_delete link
def handle_delete link def handle_delete link
def delete_link def delete_link
return unless window.confirm "Do you really want to delete {link..display_name}?"
try try
await db.links.delete(link.id) await db.links.delete(link.id)
catch e catch e
@ -322,11 +325,31 @@ tag app
window.alert "{link.display_name} is now the default bang" window.alert "{link.display_name} is now the default bang"
def handle_shift_backspace def handle_shift_backspace
return unless state.scored_links.length > 0 if editing_link
handle_edit state.scored_links[selection_index] await handle_delete editing_link
editing_link = no
state.query = ''
sort_links!
else
return unless state.scored_links.length > 0
handle_edit state.scored_links[selection_index]
def handle_shift_return def handle_shift_return
handle_add! if editing_link
try
await update_link editing_link, state.query
editing_link = no
state.query = ''
sort_links!
catch e
err "updating link", e
else
handle_add!
def handle_esc
editing_link = no
state.query = ''
sort_links!
def handle_click_add def handle_click_add
handle_add! handle_add!
@ -617,6 +640,7 @@ tag app
# placeholder=pretty_date # placeholder=pretty_date
@hotkey('return').capture=handle_return @hotkey('return').capture=handle_return
@hotkey('shift+return').capture.if(can_add)=handle_shift_return @hotkey('shift+return').capture.if(can_add)=handle_shift_return
@hotkey('esc').capture=handle_esc
@hotkey('shift+backspace').capture=handle_shift_backspace @hotkey('shift+backspace').capture=handle_shift_backspace
@hotkey('down').capture=increment_selection_index @hotkey('down').capture=increment_selection_index
@hotkey('up').capture=decrement_selection_index @hotkey('up').capture=decrement_selection_index
@ -632,81 +656,105 @@ tag app
<svg src="./assets/settings.svg"> <svg src="./assets/settings.svg">
if config.enable_tips and not config.enable_simplify_ui if config.enable_tips and not config.enable_simplify_ui
<.middle-button> if editing_link
<.tip[jc:start ta:left fl:1] @click=handle_return> <.middle-button>
<.tip-hotkey> "Return"
<.tip-content> "Navigate To Link" <.tip[jc:start ta:left fl:1]
<.tip[jc:center ta:center fl:2 px:15px] @click=handle_esc
@click=handle_shift_return >
> <.tip-hotkey> "Esc"
<.tip-hotkey> "Shift + Return" <.tip-content> "Cancel Edits"
<.tip-content[of:hidden text-overflow:ellipsis white-space:nowrap]>
<span> "Add New Link" <.tip[jc:center ta:center fl:1 px:15px]
<span[ws:pre]> " " @click=handle_shift_return
let sq = state.query.trim!.split /\s+/ >
if sq.length >= 2 <.tip-hotkey> "Shift + Return"
let url = sq.pop! <.tip-content[of:hidden text-overflow:ellipsis white-space:nowrap]>
<span> '"' "Update Link"
<span> sq.join ' '
<span[ws:pre]> ' ' <.tip[jc:end ta:right fl:1]
<span[c:blue3]> url @click=handle_shift_backspace
<span> '"' >
else <.tip-hotkey> "Shift + Backspace"
<span> '"' <.tip-content> "Delete Link"
<span> sq.join ' '
<span> '"'
<.tip[jc:end ta:right fl:1]
@click=handle_shift_backspace
>
<.tip-hotkey> "Shift + Backspace"
<.tip-content> "Edit Link"
<.links>
if bang or state.scored_links.length < 1
<a.link.selected
href=encoded_bang_query
@click=handle_click_bang
>
<.link-left>
<img.link-icon src=active_bang.icon>
<.display-name.bang-text> encoded_bang_query
<.link-right[jc:flex-end]>
<.frequency> active_bang.frequency
else else
for link, index in state.scored_links <.middle-button>
<a.link <.tip[jc:start ta:left fl:1] @click=handle_return>
href=link.url <.tip-hotkey> "Return"
@pointerover=(selection_index = index) <.tip-content> "Navigate To Link"
@click.prevent=handle_click_link(link) <.tip[jc:center ta:center fl:2 px:15px]
.selected=(index is selection_index) @click=handle_shift_return
>
<.tip-hotkey> "Shift + Return"
<.tip-content[of:hidden text-overflow:ellipsis white-space:nowrap]>
<span> "Add New Link"
<span[ws:pre]> " "
let sq = state.query.trim!.split /\s+/
if sq.length >= 2
let url = sq.pop!
<span> '"'
<span> sq.join ' '
<span[ws:pre]> ' '
<span[c:blue3]> url
<span> '"'
else
<span> '"'
<span> sq.join ' '
<span> '"'
<.tip[jc:end ta:right fl:1]
@click=handle_shift_backspace
>
<.tip-hotkey> "Shift + Backspace"
<.tip-content> "Edit Link"
unless editing_link
<.links>
if bang or state.scored_links.length < 1
<a.link.selected
href=encoded_bang_query
@click=handle_click_bang
> >
<.link-left> <.link-left>
<img.link-icon src=link.icon> <img.link-icon src=active_bang.icon>
<.display-name <.display-name.bang-text> encoded_bang_query
[c:#FAD4AB]=link.is_bang <.link-right[jc:flex-end]>
> link.display_name <.frequency> active_bang.frequency
if link.display_name isnt link.name and config.enable_effective_names else
<.name> for link, index in state.scored_links
<span.parens> "(" <a.link
<span> link.name href=link.url
<span.parens> ")" @pointerover=(selection_index = index)
<.link-right> @click.prevent=handle_click_link(link)
<.link-buttons .buttons-disabled=(not config.enable_buttons or config.enable_simplify_ui)> .selected=(index is selection_index)
<.link-button >
@click.if(link.is_bang).prevent.stop=handle_click_make_default_bang(link) <.link-left>
[visibility:hidden]=!link.is_bang <img.link-icon src=link.icon>
> <.display-name
<svg src='./assets/search.svg'> [c:#FAD4AB]=link.is_bang
<.link-button@click.prevent.stop=handle_click_edit(link)> > link.display_name
<svg src='./assets/edit-2.svg'> if link.display_name isnt link.name and config.enable_effective_names
<.link-button@click.prevent.stop=handle_click_delete(link)> <.name>
<svg src='./assets/trash.svg'> <span.parens> "("
<.link-button <span> link.name
@click.prevent.stop=handle_click_pin(link) <span.parens> ")"
[visibility:visible c:purple3/50]=(link.is_pinned and (index isnt selection_index or not config.enable_buttons or config.enable_simplify_ui)) <.link-right>
> <.link-buttons .buttons-disabled=(not config.enable_buttons or config.enable_simplify_ui)>
<svg src='./assets/star.svg'> <.link-button
<.frequency> link.frequency @click.if(link.is_bang).prevent.stop=handle_click_make_default_bang(link)
[visibility:hidden]=!link.is_bang
>
<svg src='./assets/search.svg'>
<.link-button@click.prevent.stop=handle_click_edit(link)>
<svg src='./assets/edit-2.svg'>
<.link-button@click.prevent.stop=handle_click_delete(link)>
<svg src='./assets/trash.svg'>
<.link-button
@click.prevent.stop=handle_click_pin(link)
[visibility:visible c:purple3/50]=(link.is_pinned and (index isnt selection_index or not config.enable_buttons or config.enable_simplify_ui))
>
<svg src='./assets/star.svg'>
<.frequency> link.frequency
$main-input.focus! $main-input.focus!
imba.mount <app> imba.mount <app>

Loading…
Cancel
Save