|
@ -3,6 +3,10 @@ tag app-links |
|
|
selection_index = 0 |
|
|
selection_index = 0 |
|
|
bang = no |
|
|
bang = no |
|
|
|
|
|
|
|
|
|
|
|
def mount |
|
|
|
|
|
p document |
|
|
|
|
|
$links-input.focus! |
|
|
|
|
|
|
|
|
def increment_selection_index |
|
|
def increment_selection_index |
|
|
selection_index = Math.min(state.sorted_links.length - 1, selection_index + 1) |
|
|
selection_index = Math.min(state.sorted_links.length - 1, selection_index + 1) |
|
|
|
|
|
|
|
@ -10,14 +14,11 @@ tag app-links |
|
|
selection_index = Math.max(0, selection_index - 1) |
|
|
selection_index = Math.max(0, selection_index - 1) |
|
|
|
|
|
|
|
|
get active_bang |
|
|
get active_bang |
|
|
return bang or config.default_bang |
|
|
return bang or config.data.default_bang |
|
|
|
|
|
|
|
|
get encoded_bang_query |
|
|
get encoded_bang_query |
|
|
"{active_bang.url}{window.encodeURIComponent(state.query)}" |
|
|
"{active_bang.url}{window.encodeURIComponent(state.query)}" |
|
|
|
|
|
|
|
|
def mount |
|
|
|
|
|
$links-input.focus! |
|
|
|
|
|
|
|
|
|
|
|
get math_result |
|
|
get math_result |
|
|
try |
|
|
try |
|
|
let result = Number(eval_math state.query) |
|
|
let result = Number(eval_math state.query) |
|
@ -29,11 +30,101 @@ tag app-links |
|
|
|
|
|
|
|
|
def handle_input |
|
|
def handle_input |
|
|
selection_index = 0 |
|
|
selection_index = 0 |
|
|
sort_links! |
|
|
api.sort_links! |
|
|
|
|
|
|
|
|
|
|
|
def handle_edit link |
|
|
|
|
|
prior_query = state.query |
|
|
|
|
|
editing_link = link |
|
|
|
|
|
state.query = construct_link_text(link) |
|
|
|
|
|
|
|
|
|
|
|
def make_edit link, new_link_text |
|
|
|
|
|
def edit_link |
|
|
|
|
|
try |
|
|
|
|
|
await update_link link, new_link_text |
|
|
|
|
|
catch e |
|
|
|
|
|
return err "editing link", e |
|
|
|
|
|
state.loading = yes |
|
|
|
|
|
await edit_link! |
|
|
|
|
|
state.loading = no |
|
|
|
|
|
|
|
|
|
|
|
def handle_click_link link |
|
|
|
|
|
if link.is_bang |
|
|
|
|
|
state.query = '' |
|
|
|
|
|
bang = link |
|
|
|
|
|
else |
|
|
|
|
|
navigate link |
|
|
|
|
|
|
|
|
|
|
|
def handle_bang |
|
|
|
|
|
await increment_link_frequency active_bang |
|
|
|
|
|
window.location.href = encoded_bang_query |
|
|
|
|
|
|
|
|
|
|
|
def handle_click_bang |
|
|
|
|
|
handle_bang! |
|
|
|
|
|
|
|
|
|
|
|
def navigate link |
|
|
|
|
|
await increment_link_frequency link |
|
|
|
|
|
window.location.href = link.url |
|
|
|
|
|
|
|
|
|
|
|
def handle_return |
|
|
|
|
|
return if editing_link |
|
|
|
|
|
if bang or state.sorted_links.length < 1 |
|
|
|
|
|
return handle_bang! |
|
|
|
|
|
let link = selected_link |
|
|
|
|
|
if link.is_bang |
|
|
|
|
|
state.query = '' |
|
|
|
|
|
bang = link |
|
|
|
|
|
else |
|
|
|
|
|
navigate link |
|
|
|
|
|
|
|
|
|
|
|
def handle_del |
|
|
|
|
|
if state.query.length < 1 |
|
|
|
|
|
bang = no |
|
|
|
|
|
api.sort_links! |
|
|
|
|
|
|
|
|
|
|
|
def handle_click_delete link |
|
|
|
|
|
return unless window.confirm "Do you really want to delete {link..display_name}?" |
|
|
|
|
|
handle_delete link |
|
|
|
|
|
|
|
|
|
|
|
def handle_click_edit link |
|
|
|
|
|
handle_edit link |
|
|
|
|
|
|
|
|
|
|
|
def handle_click_pin link |
|
|
|
|
|
api.pin_link link |
|
|
|
|
|
|
|
|
|
|
|
def handle_shift_backspace |
|
|
|
|
|
if editing_link |
|
|
|
|
|
await handle_delete editing_link |
|
|
|
|
|
else |
|
|
|
|
|
return unless state.sorted_links.length > 0 |
|
|
|
|
|
handle_edit selected_link |
|
|
|
|
|
|
|
|
|
|
|
def handle_shift_return |
|
|
|
|
|
def go |
|
|
|
|
|
if viewing_community_links |
|
|
|
|
|
try |
|
|
|
|
|
await add_community_link selected_link |
|
|
|
|
|
catch e |
|
|
|
|
|
err "adding community link", e |
|
|
|
|
|
elif editing_link |
|
|
|
|
|
try |
|
|
|
|
|
await update_link editing_link, state.query |
|
|
|
|
|
catch e |
|
|
|
|
|
err "updating link", e |
|
|
|
|
|
else |
|
|
|
|
|
handle_add! |
|
|
|
|
|
state.loading = yes |
|
|
|
|
|
await go! |
|
|
|
|
|
editing_link = no |
|
|
|
|
|
state.query = '' |
|
|
|
|
|
api.sort_links! |
|
|
|
|
|
state.loading = no |
|
|
|
|
|
|
|
|
|
|
|
def toggle_settings |
|
|
|
|
|
refs.settings.open! |
|
|
|
|
|
|
|
|
def render |
|
|
def render |
|
|
|
|
|
|
|
|
<self> |
|
|
<self[w:100%]> |
|
|
|
|
|
|
|
|
css .link |
|
|
css .link |
|
|
d:flex fld:row jc:space-between ai:center |
|
|
d:flex fld:row jc:space-between ai:center |
|
@ -99,10 +190,14 @@ tag app-links |
|
|
css .right |
|
|
css .right |
|
|
d:flex jc:right |
|
|
d:flex jc:right |
|
|
|
|
|
|
|
|
|
|
|
if $as.active |
|
|
|
|
|
<app-settings$as> |
|
|
|
|
|
|
|
|
|
|
|
else |
|
|
<.header> |
|
|
<.header> |
|
|
|
|
|
|
|
|
<.side.left@click=api.toggle_effective_names> |
|
|
<.side.left@click=api.toggle_effective_names> |
|
|
if config.enable_effective_names |
|
|
if config.data.enable_effective_names |
|
|
<svg src="../assets/eye.svg"> |
|
|
<svg src="../assets/eye.svg"> |
|
|
else |
|
|
else |
|
|
<svg src="../assets/eye-off.svg"> |
|
|
<svg src="../assets/eye-off.svg"> |
|
@ -111,6 +206,7 @@ tag app-links |
|
|
bind=state.query |
|
|
bind=state.query |
|
|
@hotkey('return').capture.if(!state.loading)=handle_return |
|
|
@hotkey('return').capture.if(!state.loading)=handle_return |
|
|
@hotkey('tab').capture.if(!state.loading)=api.toggle_effective_names |
|
|
@hotkey('tab').capture.if(!state.loading)=api.toggle_effective_names |
|
|
|
|
|
@hotkey('esc').capture.if(!state.loading)=toggle_settings |
|
|
@hotkey('shift+return').capture.if(!state.loading)=handle_shift_return |
|
|
@hotkey('shift+return').capture.if(!state.loading)=handle_shift_return |
|
|
@hotkey('esc').capture.if(!state.loading)=handle_esc |
|
|
@hotkey('esc').capture.if(!state.loading)=handle_esc |
|
|
@hotkey('shift+backspace').capture.if(!state.loading)=handle_shift_backspace |
|
|
@hotkey('shift+backspace').capture.if(!state.loading)=handle_shift_backspace |
|
@ -132,7 +228,7 @@ tag app-links |
|
|
<.side.right @click.if(!state.loading)=toggle_settings> |
|
|
<.side.right @click.if(!state.loading)=toggle_settings> |
|
|
<svg src="../assets/settings.svg"> |
|
|
<svg src="../assets/settings.svg"> |
|
|
|
|
|
|
|
|
if config.enable_tips and not config.enable_simplify_ui |
|
|
if config.data.enable_tips |
|
|
<.middle-button> |
|
|
<.middle-button> |
|
|
<.tip[jc:start ta:left fl:1] @click=handle_return> |
|
|
<.tip[jc:start ta:left fl:1] @click=handle_return> |
|
|
<.tip-hotkey> "Return" |
|
|
<.tip-hotkey> "Return" |
|
@ -188,20 +284,20 @@ tag app-links |
|
|
<.display-name |
|
|
<.display-name |
|
|
[c:#FAD4AB]=link.is_bang |
|
|
[c:#FAD4AB]=link.is_bang |
|
|
> link.display_name |
|
|
> link.display_name |
|
|
if link.display_name isnt link.name and config.enable_effective_names |
|
|
if link.display_name isnt link.name and config.data.enable_effective_names |
|
|
<.name> |
|
|
<.name> |
|
|
<span.parens> "(" |
|
|
<span.parens> "(" |
|
|
<span> link.name |
|
|
<span> link.name |
|
|
<span.parens> ")" |
|
|
<span.parens> ")" |
|
|
<.link-right> |
|
|
<.link-right> |
|
|
<.link-buttons .buttons-disabled=(not config.enable_buttons or config.enable_simplify_ui)> |
|
|
<.link-buttons .buttons-disabled=!config.data.enable_buttons> |
|
|
<.link-button@click.prevent.stop=handle_click_edit(link)> |
|
|
<.link-button@click.prevent.stop=handle_click_edit(link)> |
|
|
<svg src='../assets/edit-2.svg'> |
|
|
<svg src='../assets/edit-2.svg'> |
|
|
<.link-button@click.prevent.stop=handle_click_delete(link)> |
|
|
<.link-button@click.prevent.stop=handle_click_delete(link)> |
|
|
<svg src='../assets/trash.svg'> |
|
|
<svg src='../assets/trash.svg'> |
|
|
<.link-button |
|
|
<.link-button |
|
|
@click.prevent.stop=handle_click_pin(link) |
|
|
@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)) |
|
|
[visibility:visible c:purple3/50]=(link.is_pinned and (index isnt selection_index or not config.data.enable_buttons)) |
|
|
> |
|
|
> |
|
|
<svg src='../assets/star.svg'> |
|
|
<svg src='../assets/star.svg'> |
|
|
<.frequency> link.frequency |
|
|
<.frequency> link.frequency |
|
|