Browse Source

add bang history

main
familyfriendlymikey 2 years ago
parent
commit
85a7700815
  1. 46
      app/api.imba
  2. 70
      app/components/app-bang.imba
  3. 1
      app/components/app-home.imba
  4. 1
      app/config.imba
  5. 1
      app/db.imba
  6. 1
      app/state.imba

46
app/api.imba

@ -124,7 +124,7 @@ export default new class api
is_bang = yes
display_name = display_name.slice(1)
name ||= display_name
let link = { name, display_name, is_bang, is_pinned, url, frequency:0 }
let link = { name, display_name, is_bang, is_pinned, url, frequency:0, history:[] }
if get_icon
link.icon = await fetch_image_as_base_64 host
return link
@ -235,12 +235,52 @@ export default new class api
state.active_bang or config.data.default_bang
get encoded_bang_query
"{bang.url}{window.encodeURIComponent(state.query)}"
let history_item = sorted_bang_history[state.bang_selection_index]
"{bang.url}{window.encodeURIComponent(history_item or state.query)}"
get encoded_bang_query_nourl
let history_item = sorted_bang_history[state.bang_selection_index]
"{window.encodeURIComponent(history_item or state.query)}"
def update_history bang
let text
if state.bang_selection_index > -1
text = sorted_bang_history.splice(state.bang_selection_index, 1)[0]
text ||= state.query.trim!
return unless text
let i = bang.history.indexOf(text)
if i > -1
bang.history.splice(i, 1)
bang.history.unshift text
try
await put_link bang
catch e
err "updating bang history", e
def delete_bang_history_item text
let i = bang.history.indexOf(text)
return unless i > -1
bang.history.splice(i, 1)
try
await put_link bang
catch e
err "updating bang history", e
def handle_bang
await increment_link_frequency bang
window.location.href = encoded_bang_query
let to_navigate = encoded_bang_query
await update_history bang
window.location.href = to_navigate
def unset_active_bang
state.active_bang = no
sort_links!
def increment_bang_selection_index
state.bang_selection_index = Math.min(sorted_bang_history.length - 1, state.bang_selection_index + 1)
def decrement_bang_selection_index
state.bang_selection_index = Math.max(-1, state.bang_selection_index - 1)
get sorted_bang_history
fzi.sort state.query, bang.history

70
app/components/app-bang.imba

@ -1,18 +1,30 @@
tag app-bang
def unmount
state.bang_selection_index = -1
get tips
let result = []
result.push <>
<.tip
@click=api.handle_bang
@hotkey('return').capture.if(!state.loading)=api.handle_bang
>
<.tip-hotkey> "Return"
<.tip-content> "Search"
if state.bang_selection_index > -1
result.push <>
<.tip
@click=api.handle_bang
@hotkey('return').capture.if(!state.loading)=api.handle_bang
>
<.tip-hotkey> "Return"
<.tip-content> "Search History Item"
else
result.push <>
<.tip
@click=api.handle_bang
@hotkey('return').capture.if(!state.loading)=api.handle_bang
>
<.tip-hotkey> "Return"
<.tip-content> "Search"
result.push <>
<.tip
<.tip.ellipsis
@click=api.handle_add_link
@hotkey('shift+return').capture.if(!state.loading)=api.handle_add_link
>
@ -42,14 +54,6 @@ tag app-bang
<.tip-hotkey> "Paste (If Input Empty)"
<.tip-content> "Instant Search"
result.push <>
<.tip
@click.if(!state.loading)=api.toggle_effective_names
@hotkey('tab').capture.if(!state.loading)=api.toggle_effective_names
>
<.tip-hotkey> "Tab"
<.tip-content> "Toggle Effective Names"
result.push <>
<.tip @click.if(!loading)=api.handle_cut>
if api.math_result
@ -59,14 +63,6 @@ tag app-bang
<.tip-hotkey> "Cut (If No Selection)"
<.tip-content> "Cut All Text"
result.push <>
<.tip
@click.if(!state.loading)=refs.settings.open
@hotkey('shift+tab').capture.if(!state.loading)=refs.settings.open
>
<.tip-hotkey> "Shift + Tab"
<.tip-content> "Toggle Settings"
if state.active_bang
result.push <>
<.tip.noclick>
@ -77,27 +73,43 @@ tag app-bang
def render
<self>
<self
@hotkey("tab").force=api.increment_bang_selection_index
@hotkey("up").force=api.decrement_bang_selection_index
@hotkey("down").force=api.increment_bang_selection_index
@hotkey("shift+tab").force=api.decrement_bang_selection_index
>
css w:100% d:flex fld:column gap:15px
<app-tips$tips tips=tips>
unless $tips.show_more
<.bang.selected@click=api.handle_bang>
<.bang.selected
@click=api.handle_bang
>
css d:flex fld:row jc:space-between ai:center
px:16px py:11px rd:5px cursor:pointer c:#FAD4AB
<.link-left>
css d:flex fl:1
css d:flex fl:1 ofy:hidden
<img.link-icon src=api.bang.icon>
css w:20px h:20px mr:10px rd:3px
<.display-name> api.encoded_bang_query
css fs:20px word-break:break-all
<.display-name> api.encoded_bang_query_nourl
css fs:20px of:hidden text-overflow:ellipsis
<.link-right>
css d:flex fld:row jc:space-between ai:center
<.frequency> api.bang.frequency
css fs:15px ml:7px
<.history>
css d:flex fld:column jc:start ai:center
for item, index in api.sorted_bang_history
<.item [c:#FAD4AB]=(state.bang_selection_index is index)> item
css w:100% fs:17px c:blue3 rd:5px p:10px 10px
box-sizing:border-box

1
app/components/app-home.imba

@ -21,6 +21,7 @@ tag app-home
api.sort_links!
def handle_input
state.bang_selection_index = -1
api.set_link_selection_index 0
api.sort_links!

1
app/config.imba

File diff suppressed because one or more lines are too long

1
app/db.imba

@ -39,6 +39,7 @@ db.version(4).stores({
link.is_bang = no
link.icon = link.img
link.is_pinned = no
link.history = []
delete link.img
export default db

1
app/state.imba

@ -5,4 +5,5 @@ export default {
loading: no
link_selection_index: 0
active_bang: no
bang_selection_index: -1
}

Loading…
Cancel
Save