diff --git a/app/client.imba b/app/client.imba index 6b62d34..386971d 100644 --- a/app/client.imba +++ b/app/client.imba @@ -15,8 +15,8 @@ let state = { scored_links: [] } -global._fuzzyhome_delete_everything = do - return unless window.confirm "This will delete everything. Are you sure?" +global._fuzzyhome_delete_everything = do |prompt=yes| + return if prompt and window.confirm "This will delete everything. Are you sure?" indexedDB.deleteDatabase("fuzzyhome") delete localStorage.fuzzyhome_config delete localStorage.fuzzyhome_visited @@ -69,16 +69,17 @@ tag app config = JSON.parse(global.localStorage.fuzzyhome_config) validate_config! catch + p "resetting config" reset_config! def validate_config p config - throw _ if config.default_bang.id is null - throw _ if config.default_bang.url is null - throw _ if config.default_bang.icon is null - throw _ if config.default_bang.name is null - throw _ if config.default_bang.frequency is null - throw _ if config.default_bang.display_name is null + throw _ if config.default_bang.id == null + throw _ if config.default_bang.url == null + throw _ if config.default_bang.icon == null + throw _ if config.default_bang.name == null + throw _ if config.default_bang.frequency == null + throw _ if config.default_bang.display_name == null def reset_config p "resetting config" @@ -96,6 +97,25 @@ tag app state.links = await db.links.toArray() sort_links! + get tip_url + let split_query = state.query.trim!.split /\s+/ + if split_query.length >= 2 + return ' https://' + split_query.pop! + else + return '' + + get tip_name + let split_query = state.query.trim!.split /\s+/ + let name = split_query.join ' ' + if split_query.length >= 2 + split_query.pop! + if split_query[-1].startsWith '~' + split_query.pop! + name = split_query.join ' ' + if name.startsWith '!' + name = name.slice(1) + name + def sort_links if state.query.trim!.length > 0 state.scored_links = fzi state.links, state.query @@ -281,7 +301,7 @@ tag app def handle_shift_backspace return unless state.scored_links.length > 0 - handle_delete state.scored_links[selection_index] + handle_edit state.scored_links[selection_index] def handle_shift_return handle_add! @@ -365,23 +385,36 @@ tag app css .settings-container d:flex fld:row jc:space-around ai:center w:100% h:50px - bg:purple4/10 rd:5px + mt:10px + gap:10px - css .settings-button + css .settings-button, .settings-container button d:flex fld:column jc:center ai:center fl:1 bg:none c:purple4 bd:none cursor:pointer fs:14px + bg:purple4/10 rd:5px + h:100% css .middle-button - d:flex fld:column jc:center ai:center - h:35px c:purple4 fs:20px cursor:pointer - fs:20px + d:flex fld:row w:100% + c:purple4 fs:20px cursor:pointer + fs:14px pt:15px + + css .tip + d:flex fld:column bdr:1px solid blue3/10 min-width:0 fl:1 p:5px + @last bd:none + + css .tip-hotkey + fs:12px c:purple3/50 + + css .tip-content + pt:2px fs:14px c:purple3 white-space:nowrap css .disabled c:gray4 cursor:default user-select:none css .links d:flex fld:column jc:flex-start fl:1 - w:100% ofy:auto + w:100% ofy:auto pt:15px css .link d:flex fld:row jc:space-between ai:center @@ -439,52 +472,77 @@ tag app Consider refreshing. Check developer console for more information. """ - else - if settings_active - <.settings-container> - - "IMPORT" - - <.settings-button - .disabled=loading - @click.if(!loading)=handle_click_export - > "EXPORT" - <.settings-button - .disabled=loading - @click.if(!loading)=handle_click_github - > "GITHUB" - else - - if state.query.trim!.split(/\s+/).length < 2 - <.middle-button - [mt:-10px py:5px fs:25px] + ### + <[c:purple3/90 cursor:pointer fs:14px pb:20px] + @click.if(!loading)=toggle_settings + > "SETTINGS" + ### + + if settings_active + <.settings-container> + + "IMPORT" + + <.settings-button + .disabled=loading + @click.if(!loading)=handle_click_export + > "EXPORT" + <.settings-container> + <.settings-button + .disabled=loading + @click.if(!loading)=handle_click_github + > "TUTORIAL" + <.settings-button + .disabled=loading + @click.if(!loading)=handle_click_github + > "GITHUB" + <.settings-container> + <.settings-button> + config.enable_tips ? "DISABLE TIPS" : "ENABLE TIPS" + <.settings-button .disabled=loading - @click.if(!loading)=toggle_settings - > "..." - elif can_add - <.middle-button@click=handle_click_add> "+" - else - <.middle-button.disabled> "+" + @click.if(!loading)=handle_click_github + > "LIGHT THEME" + + else + + + if config.enable_tips + <.middle-button> + <.tip[jc:start ta:left fl:1] @click=handle_return> + <.tip-hotkey> "Return" + <.tip-content> "Navigate To Link" + <.tip[jc:center ta:center fl:2 px:15px] + @click=handle_shift_return + > + <.tip-hotkey> "Shift + Return" + <.tip-content[of:hidden text-overflow:ellipsis]> + "Add New Link \"{state.query.trim!}\"" + <.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 @@ -520,6 +578,7 @@ tag app <.link-button[fs:12px]@click.prevent.stop=handle_click_edit(link)> "✎" <.link-button@click.prevent.stop=handle_click_delete(link)> "x" <.frequency> link.frequency + # <[c:purple3 pt:10px fs:10px]> state.scored_links.length $main-input.focus! imba.mount diff --git a/app/config.imba b/app/config.imba index b0a0a50..1587de6 100644 --- a/app/config.imba +++ b/app/config.imba @@ -1,9 +1,11 @@ let config = {} config.default_bang = { "name": "!google", + "display_name": "google" "url": "https://www.google.com/search?q=", "frequency": 0, "icon": "data:image/x-icon;base64,AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///zD9/f2W/f392P39/fn9/f35/f391/39/ZT+/v4uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+Cf39/Zn///////////////////////////////////////////39/ZX///8IAAAAAAAAAAAAAAAA/v7+Cf39/cH/////+v35/7TZp/92ul3/WKs6/1iqOv9yuFn/rNWd//j79v///////f39v////wgAAAAAAAAAAP39/Zn/////7PXp/3G3WP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP+Or1j//vDo///////9/f2VAAAAAP///zD/////+vz5/3G3V/9TqDT/WKo6/6LQkf/U6cz/1urO/6rUm/+Zo0r/8IZB//adZ////v7///////7+/i79/f2Y/////4nWzf9Lqkj/Vqo4/9Xqzv///////////////////////ebY//SHRv/0hUL//NjD///////9/f2U/f392v////8sxPH/Ebzt/43RsP/////////////////////////////////4roL/9IVC//i1jf///////f391/39/fr/////Cr37/wW8+/+16/7/////////////////9IVC//SFQv/0hUL/9IVC//SFQv/3pnX///////39/fn9/f36/////wu++/8FvPv/tuz+//////////////////SFQv/0hUL/9IVC//SFQv/0hUL/96p7///////9/f35/f392/////81yfz/CrL5/2uk9v///////////////////////////////////////////////////////f392P39/Zn/////ks/7/zdS7P84Rur/0NT6///////////////////////9/f////////////////////////39/Zb+/v4y//////n5/v9WYu3/NUPq/ztJ6/+VnPT/z9L6/9HU+v+WnfT/Ul7t/+Hj/P////////////////////8wAAAAAP39/Z3/////6Or9/1hj7v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v9sdvD////////////9/f2YAAAAAAAAAAD///8K/f39w//////5+f7/paz2/11p7v88Suv/Okfq/1pm7v+iqfX/+fn+///////9/f3B/v7+CQAAAAAAAAAAAAAAAP///wr9/f2d///////////////////////////////////////////9/f2Z/v7+CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/jL9/f2Z/f392/39/fr9/f36/f392v39/Zj///8wAAAAAAAAAAAAAAAAAAAAAPAPAADAAwAAgAEAAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABAACAAQAAwAMAAPAPAAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/g3+/v5X/f39mf39/cj9/f3q/f39+f39/fn9/f3q/f39yP39/Zn+/v5W////DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/iT9/f2c/f399f/////////////////////////////////////////////////////9/f31/f39mv7+/iMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/gn9/f2K/f39+////////////////////////////////////////////////////////////////////////////f39+v39/Yf///8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4k/f390v////////////////////////////////////////////////////////////////////////////////////////////////39/dD///8iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////MP39/er//////////////////////////+r05v+v16H/gsBs/2WxSf9Wqjj/Vqk3/2OwRv99vWX/pdKV/97u2P////////////////////////////39/ej+/v4vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/iT9/f3q/////////////////////+v15/+Pxnv/VKk2/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/36+Z//d7tf///////////////////////39/ej///8iAAAAAAAAAAAAAAAAAAAAAAAAAAD///8K/f390//////////////////////E4bn/XKw+/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1apN/+x0pv///////////////////////39/dD///8IAAAAAAAAAAAAAAAAAAAAAP39/Yv/////////////////////sdij/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/YKU1/8qOPv/5wZ////////////////////////39/YcAAAAAAAAAAAAAAAD+/v4l/f39+////////////////8Lgt/9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9utlT/n86N/7faqv+426v/pdKV/3u8ZP9UqDX/U6g0/3egN//jiUH/9IVC//SFQv/82MP//////////////////f39+v7+/iMAAAAAAAAAAP39/Z3////////////////q9Ob/W6w+/1OoNP9TqDT/U6g0/1OoNP9nskz/zOXC/////////////////////////////////+Dv2v+osWP/8YVC//SFQv/0hUL/9IVC//WQVP/++fb//////////////////f39mgAAAAD+/v4O/f399v///////////////4LHj/9TqDT/U6g0/1OoNP9TqDT/dblc//L58P/////////////////////////////////////////////8+v/3p3f/9IVC//SFQv/0hUL/9IVC//rIqf/////////////////9/f31////DP7+/ln////////////////f9v7/Cbz2/zOwhv9TqDT/U6g0/2KwRv/v9+z///////////////////////////////////////////////////////738//1kFT/9IVC//SFQv/0hUL/9plg///////////////////////+/v5W/f39nP///////////////4jf/f8FvPv/Bbz7/yG1s/9QqDz/vN2w//////////////////////////////////////////////////////////////////rHqP/0hUL/9IVC//SFQv/0hUL//vDn//////////////////39/Zn9/f3L////////////////R878/wW8+/8FvPv/Bbz7/y7C5P/7/fr//////////////////////////////////////////////////////////////////ere//SFQv/0hUL/9IVC//SFQv/718H//////////////////f39yP39/ez///////////////8cwvv/Bbz7/wW8+/8FvPv/WNL8///////////////////////////////////////0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//rIqv/////////////////9/f3q/f39+v///////////////we9+/8FvPv/Bbz7/wW8+/993P3///////////////////////////////////////SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/+cGf//////////////////39/fn9/f36////////////////B737/wW8+/8FvPv/Bbz7/33c/f//////////////////////////////////////9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/6xaX//////////////////f39+f39/e3///////////////8cwvv/Bbz7/wW8+/8FvPv/WdP8///////////////////////////////////////0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//vVv//////////////////9/f3q/f39y////////////////0bN/P8FvPv/Bbz7/wW8+/8hrvn/+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////39/cj9/f2c////////////////ht/9/wW8+/8FvPv/FZP1/zRJ6/+zuPf//////////////////////////////////////////////////////////////////////////////////////////////////////////////////f39mf7+/lr////////////////d9v7/B7n7/yB38f81Q+r/NUPq/0hV7P/u8P3////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v5X////D/39/ff///////////////9tkPT/NUPq/zVD6v81Q+r/NUPq/2Fs7//y8v7////////////////////////////////////////////09f7//////////////////////////////////////////////////f399f7+/g0AAAAA/f39n////////////////+Tm/P89Suv/NUPq/zVD6v81Q+r/NUPq/1Bc7f/IzPn/////////////////////////////////x8v5/0xY7P+MlPP////////////////////////////////////////////9/f2cAAAAAAAAAAD+/v4n/f39/P///////////////7W69/81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v9ZZe7/k5v0/6609/+vtff/lJv0/1pm7v81Q+r/NUPq/zVD6v+GjvL//v7//////////////////////////////f39+/7+/iQAAAAAAAAAAAAAAAD9/f2N/////////////////////6Cn9f81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v+BivL////////////////////////////9/f2KAAAAAAAAAAAAAAAAAAAAAP7+/gv9/f3V/////////////////////7W69/8+S+v/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/P0zr/7q/+P///////////////////////f390v7+/gkAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/ib9/f3r/////////////////////+Xn/P94gfH/NkTq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NkTq/3Z/8f/l5/z///////////////////////39/er+/v4kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/jL9/f3r///////////////////////////k5vz/nqX1/2p08P9IVez/OEbq/zdF6v9GU+z/aHLv/5qh9f/i5Pz////////////////////////////9/f3q////MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/ib9/f3V/////////////////////////////////////////////////////////////////////////////////////////////////f390v7+/iQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wr9/f2N/f39/P///////////////////////////////////////////////////////////////////////////f39+/39/Yv+/v4JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4n/f39n/39/ff//////////////////////////////////////////////////////f399v39/Z3+/v4lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+Dv7+/lr9/f2c/f39y/39/e39/f36/f39+v39/ez9/f3L/f39nP7+/ln+/v4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AA///AAD//AAAP/gAAB/wAAAP4AAAB8AAAAPAAAADgAAAAYAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAcAAAAPAAAAD4AAAB/AAAA/4AAAf/AAAP/8AAP//wAP/", "id": "FEJbsKLUMwHbazbqW3c4i" } +config.enable_tips = yes export default config