5 changed files with 194 additions and 209 deletions
			
			
		@ -1,108 +1,95 @@ | 
				
			|||||
tag app-bang | 
					tag app-bang | 
				
			||||
 | 
					
 | 
				
			||||
	def unset_active_bang | 
						get tips | 
				
			||||
		state.active_bang = no | 
							let tips = [] | 
				
			||||
		api.sort_links! | 
					
 | 
				
			||||
 | 
							tips.push <> | 
				
			||||
	get bang | 
								<.tip | 
				
			||||
		state.active_bang or config.data.default_bang | 
									@click=api.handle_bang | 
				
			||||
 | 
									@hotkey('return').capture.if(!state.loading)=api.handle_bang | 
				
			||||
	get encoded_bang_query | 
								> | 
				
			||||
		"{bang.url}{window.encodeURIComponent(state.query)}" | 
									<.tip-hotkey> "Return" | 
				
			||||
 | 
									<.tip-content> "Search" | 
				
			||||
	def handle_bang | 
					
 | 
				
			||||
		await api.increment_link_frequency bang | 
							tips.push <> | 
				
			||||
		window.location.href = encoded_bang_query | 
								<.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 | 
						def render | 
				
			||||
 | 
					
 | 
				
			||||
		<self> | 
							<self> | 
				
			||||
			css w:100% d:flex fld:column gap:15px | 
								css w:100% d:flex fld:column gap:15px | 
				
			||||
 | 
					
 | 
				
			||||
			<app-tips> | 
								<app-tips$tips tips=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> | 
					 | 
				
			||||
 | 
					
 | 
				
			||||
			unless $tips-more.active | 
								unless $tips.show_more | 
				
			||||
				<.bang.selected@click=handle_bang> | 
									<.bang.selected@click=api.handle_bang> | 
				
			||||
					css d:flex fld:row jc:space-between ai:center | 
										css d:flex fld:row jc:space-between ai:center | 
				
			||||
						px:16px py:11px rd:5px cursor:pointer c:#FAD4AB | 
											px:16px py:11px rd:5px cursor:pointer c:#FAD4AB | 
				
			||||
 | 
					
 | 
				
			||||
					<.link-left> | 
										<.link-left> | 
				
			||||
						css d:flex fl:1 | 
											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 | 
												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 | 
												css fs:20px word-break:break-all | 
				
			||||
 | 
					
 | 
				
			||||
					<.link-right> | 
										<.link-right> | 
				
			||||
						css d:flex fld:row jc:space-between ai:center | 
											css d:flex fld:row jc:space-between ai:center | 
				
			||||
 | 
					
 | 
				
			||||
						<.frequency> bang.frequency | 
											<.frequency> api.bang.frequency | 
				
			||||
							css fs:15px ml:7px | 
												css fs:15px ml:7px | 
				
			||||
 | 
				
			|||||
					Loading…
					
					
				
		Reference in new issue