5 changed files with 194 additions and 209 deletions
			
			
		| @ -1,108 +1,95 @@ | |||
| tag app-bang | |||
| 
 | |||
| 	def unset_active_bang | |||
| 		state.active_bang = no | |||
| 		api.sort_links! | |||
| 
 | |||
| 	get bang | |||
| 		state.active_bang or config.data.default_bang | |||
| 
 | |||
| 	get encoded_bang_query | |||
| 		"{bang.url}{window.encodeURIComponent(state.query)}" | |||
| 
 | |||
| 	def handle_bang | |||
| 		await api.increment_link_frequency bang | |||
| 		window.location.href = encoded_bang_query | |||
| 	get tips | |||
| 		let tips = [] | |||
| 
 | |||
| 		tips.push <> | |||
| 			<.tip | |||
| 				@click=api.handle_bang | |||
| 				@hotkey('return').capture.if(!state.loading)=api.handle_bang | |||
| 			> | |||
| 				<.tip-hotkey> "Return" | |||
| 				<.tip-content> "Search" | |||
| 
 | |||
| 		tips.push <> | |||
| 			<.tip | |||
| 				@click=api.handle_add_link | |||
| 				@hotkey('shift+return').capture.if(!state.loading)=api.handle_add_link | |||
| 			> | |||
| 				<.tip-hotkey> "Shift + Return" | |||
| 				<.tip-content.ellipsis> | |||
| 					<span[ws:pre]> "Create Link " | |||
| 					let sq = state.query.trim!.split /\s+/ | |||
| 					if sq.length >= 2 | |||
| 						let url = sq.pop! | |||
| 						<span> '"' | |||
| 						<span> sq.join " " | |||
| 						<span[c:blue3 ws:pre]> " {url}" | |||
| 						<span> '"' | |||
| 					else | |||
| 						<span> "\"{sq.join " "}\"" | |||
| 
 | |||
| 		tips.push <> | |||
| 			if state.active_bang | |||
| 				<.tip | |||
| 					@click=api.unset_active_bang | |||
| 					@hotkey('esc').capture.if(!state.loading)=unset_active_bang | |||
| 				> | |||
| 					<.tip-hotkey> "Esc" | |||
| 					<.tip-content> "Back" | |||
| 			else | |||
| 				<.tip.noclick> | |||
| 					<.tip-hotkey> "Paste (If Input Empty)" | |||
| 					<.tip-content> "Instant Search" | |||
| 
 | |||
| 		tips.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" | |||
| 
 | |||
| 		tips.push <> | |||
| 			<.tip @click.if(!loading)=api.handle_cut> | |||
| 				if api.math_result | |||
| 					<.tip-hotkey> "Cut (Math, If No Selection)" | |||
| 					<.tip-content> "Cut Math Result" | |||
| 				else | |||
| 					<.tip-hotkey> "Cut (If No Selection)" | |||
| 					<.tip-content> "Cut All Text" | |||
| 
 | |||
| 		if state.active_bang | |||
| 			tips.push <> | |||
| 				<.tip.noclick> | |||
| 					<.tip-hotkey> "Paste (If Input Empty)" | |||
| 					<.tip-content> "Instant Search" | |||
| 
 | |||
| 		tips | |||
| 
 | |||
| 	def render | |||
| 
 | |||
| 		<self> | |||
| 			css w:100% d:flex fld:column gap:15px | |||
| 
 | |||
| 			<app-tips> | |||
| 
 | |||
| 				<.tip-row> | |||
| 
 | |||
| 					<.tip | |||
| 						@click=handle_bang | |||
| 						@hotkey('return').capture.if(!state.loading)=handle_bang | |||
| 					> | |||
| 						<.tip-hotkey> "Return" | |||
| 						<.tip-content> "Search" | |||
| 
 | |||
| 					<.tip | |||
| 						@click=api.handle_add_link | |||
| 						@hotkey('shift+return').capture.if(!state.loading)=api.handle_add_link | |||
| 					> | |||
| 						<.tip-hotkey> "Shift + Return" | |||
| 						<.tip-content.ellipsis> | |||
| 							<span[ws:pre]> "Create Link " | |||
| 							let sq = state.query.trim!.split /\s+/ | |||
| 							if sq.length >= 2 | |||
| 								let url = sq.pop! | |||
| 								<span> '"' | |||
| 								<span> sq.join " " | |||
| 								<span[c:blue3 ws:pre]> " {url}" | |||
| 								<span> '"' | |||
| 							else | |||
| 								<span> "\"{sq.join " "}\"" | |||
| 
 | |||
| 					if state.active_bang | |||
| 						<.tip | |||
| 							@click=unset_active_bang | |||
| 							@hotkey('esc').capture.if(!state.loading)=unset_active_bang | |||
| 						> | |||
| 							<.tip-hotkey> "Esc" | |||
| 							<.tip-content> "Back" | |||
| 					else | |||
| 						<.tip.noclick> | |||
| 							<.tip-hotkey> "Paste (If Input Empty)" | |||
| 							<.tip-content> "Instant Search" | |||
| 
 | |||
| 			<app-tips-more$tips-more> | |||
| 
 | |||
| 				<.tip-row> | |||
| 
 | |||
| 					<.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" | |||
| 
 | |||
| 					<.tip | |||
| 						@click.if(!loading)=api.handle_cut | |||
| 					> | |||
| 						if math_result | |||
| 							<.tip-hotkey> "Cut (Math, If No Selection)" | |||
| 							<.tip-content> "Cut Math Result" | |||
| 						else | |||
| 							<.tip-hotkey> "Cut (If No Selection)" | |||
| 							<.tip-content> "Cut All Text" | |||
| 
 | |||
| 					if state.active_bang | |||
| 						<.tip.noclick> | |||
| 							<.tip-hotkey> "Paste (If Input Empty)" | |||
| 							<.tip-content> "Instant Search" | |||
| 					else | |||
| 						<.tip.placeholder> | |||
| 			<app-tips$tips tips=tips> | |||
| 
 | |||
| 			unless $tips-more.active | |||
| 				<.bang.selected@click=handle_bang> | |||
| 			unless $tips.show_more | |||
| 				<.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 | |||
| 
 | |||
| 						<img.link-icon src=bang.icon> | |||
| 						<img.link-icon src=api.bang.icon> | |||
| 							css w:20px h:20px mr:10px rd:3px | |||
| 
 | |||
| 						<.display-name> encoded_bang_query | |||
| 						<.display-name> api.encoded_bang_query | |||
| 							css fs:20px word-break:break-all | |||
| 
 | |||
| 					<.link-right> | |||
| 						css d:flex fld:row jc:space-between ai:center | |||
| 
 | |||
| 						<.frequency> bang.frequency | |||
| 						<.frequency> api.bang.frequency | |||
| 							css fs:15px ml:7px | |||
|  | |||
					Loading…
					
					
				
		Reference in new issue
	
	