Updated Currency Conversion Feature
This commit is contained in:
parent
e06ff85579
commit
d9b6b7c7b8
|
@ -15,7 +15,8 @@ from app.models.endpoint import Endpoint
|
||||||
from app.request import Request, TorError
|
from app.request import Request, TorError
|
||||||
from app.utils.bangs import resolve_bang
|
from app.utils.bangs import resolve_bang
|
||||||
from app.utils.misc import read_config_bool, get_client_ip
|
from app.utils.misc import read_config_bool, get_client_ip
|
||||||
from app.utils.results import add_ip_card
|
from app.utils.results import add_ip_card, check_currency
|
||||||
|
from app.utils.results import add_currency_b
|
||||||
from app.utils.results import bold_search_terms
|
from app.utils.results import bold_search_terms
|
||||||
from app.utils.search import *
|
from app.utils.search import *
|
||||||
from app.utils.session import generate_user_key, valid_user_session
|
from app.utils.session import generate_user_key, valid_user_session
|
||||||
|
@ -322,6 +323,12 @@ def search():
|
||||||
html_soup = bsoup(str(response), 'html.parser')
|
html_soup = bsoup(str(response), 'html.parser')
|
||||||
response = add_ip_card(html_soup, get_client_ip(request))
|
response = add_ip_card(html_soup, get_client_ip(request))
|
||||||
|
|
||||||
|
# Feature to display currency_card
|
||||||
|
conversion = check_currency(str(response))
|
||||||
|
if conversion:
|
||||||
|
html_soup = bsoup(str(response), 'html.parser')
|
||||||
|
response = add_currency_b(html_soup, conversion)
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'display.html',
|
'display.html',
|
||||||
newest_version=newest_version,
|
newest_version=newest_version,
|
||||||
|
|
|
@ -187,6 +187,10 @@ path {
|
||||||
color: var(--whoogle-dark-text) !important;
|
color: var(--whoogle-dark-text) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ip-text-div, .update_available {
|
.ip-text-div, .update_available, .cb_label, .cb {
|
||||||
color: var(--whoogle-dark-secondary-text) !important;
|
color: var(--whoogle-dark-secondary-text) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.cb:focus {
|
||||||
|
color: var(--whoogle-dark-contrast-text) !important;
|
||||||
|
}
|
||||||
|
|
|
@ -12,3 +12,30 @@
|
||||||
height: 40px;
|
height: 40px;
|
||||||
width: 50px;
|
width: 50px;
|
||||||
}
|
}
|
||||||
|
.ZINbbc.xpd.O9g5cc.uUPGi input::-webkit-outer-spin-button,
|
||||||
|
input::-webkit-inner-spin-button {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cb {
|
||||||
|
width: 40%;
|
||||||
|
overflow: hidden;
|
||||||
|
text-align: left;
|
||||||
|
line-height: 28px;
|
||||||
|
background: transparent;
|
||||||
|
border-radius: 6px;
|
||||||
|
border: 1px solid #5f6368;
|
||||||
|
font-size: 14px !important;
|
||||||
|
height: 36px;
|
||||||
|
padding: 0 0 0 12px;
|
||||||
|
margin: 10px 10px 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.conversion_box {
|
||||||
|
margin-top: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ZINbbc.xpd.O9g5cc.uUPGi input:focus-visible {
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
|
@ -175,6 +175,10 @@ path {
|
||||||
border-bottom: 0px;
|
border-bottom: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ip-text-div, .update_available {
|
.ip-text-div, .update_available, .cb_label, .cb {
|
||||||
color: var(--whoogle-secondary-text) !important;
|
color: var(--whoogle-secondary-text) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.cb:focus {
|
||||||
|
color: var(--whoogle-text) !important;
|
||||||
|
}
|
||||||
|
|
11
app/static/js/currency.js
Normal file
11
app/static/js/currency.js
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
function Convert(n1, n2, conversion_factor) {
|
||||||
|
// id's for currency input boxes
|
||||||
|
id1 = "cb" + n1;
|
||||||
|
id2 = "cb" + n2;
|
||||||
|
|
||||||
|
// getting the value of the input box that just got filled
|
||||||
|
var input_box = document.getElementById(id1).value
|
||||||
|
|
||||||
|
// updating the other input box after conversion
|
||||||
|
document.getElementById(id2).value = ((input_box * conversion_factor).toFixed(2));
|
||||||
|
}
|
|
@ -37,4 +37,5 @@
|
||||||
<script src="{{ cb_url('autocomplete.js') }}"></script>
|
<script src="{{ cb_url('autocomplete.js') }}"></script>
|
||||||
<script src="{{ cb_url('utils.js') }}"></script>
|
<script src="{{ cb_url('utils.js') }}"></script>
|
||||||
<script src="{{ cb_url('keyboard.js') }}"></script>
|
<script src="{{ cb_url('keyboard.js') }}"></script>
|
||||||
|
<script src="{{ cb_url('currency.js') }}"></script>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -223,3 +223,86 @@ def add_ip_card(html_soup: BeautifulSoup, ip: str) -> BeautifulSoup:
|
||||||
# Inserting the element
|
# Inserting the element
|
||||||
ref_element.insert_before(ip_tag)
|
ref_element.insert_before(ip_tag)
|
||||||
return html_soup
|
return html_soup
|
||||||
|
|
||||||
|
|
||||||
|
def check_currency(response: str):
|
||||||
|
"""Check whether the results have currency conversion
|
||||||
|
|
||||||
|
Args:
|
||||||
|
response: Search query Result
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
list
|
||||||
|
|
||||||
|
"""
|
||||||
|
soup = BeautifulSoup(response, 'html.parser')
|
||||||
|
a = soup.find(class_='ZINbbc xpd O9g5cc uUPGi')
|
||||||
|
tag = a.find('a')
|
||||||
|
if tag and tag['href'] == 'https://g.co/gfd':
|
||||||
|
currency1 = soup.find(class_="xUrNXd UMOHqf")
|
||||||
|
currency2 = soup.select_one('.kCrYT'
|
||||||
|
' .BNeawe.iBp4i.AP7Wnd .BNeawe.iBp4i.AP7Wnd')
|
||||||
|
currency1 = currency1.text.rstrip('=').split(' ', 1)
|
||||||
|
currency2 = currency2.text.split(' ', 1)
|
||||||
|
return [float(currency1[0]), currency1[1], float(currency2[0]), currency2[1]]
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def add_currency_b(soup: BeautifulSoup, conversion_details: list) -> BeautifulSoup:
|
||||||
|
"""Adds the conversion input boxes to the search result
|
||||||
|
|
||||||
|
Args:
|
||||||
|
soup: The parsed search result containing currency conversion
|
||||||
|
conversion_details: floating point number to be used for conversion
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
BeautifulSoup
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Element before which the code will be changed(This is the 'disclaimer' link)
|
||||||
|
element1 = soup.select_one('[class="nXE3Ob"]')
|
||||||
|
|
||||||
|
# Creating the conversion factor
|
||||||
|
conversion_factor = conversion_details[0]/conversion_details[2]
|
||||||
|
|
||||||
|
# Creating a new div for the input boxes
|
||||||
|
conversion_box = soup.new_tag('div')
|
||||||
|
conversion_box['class'] = 'conversion_box'
|
||||||
|
|
||||||
|
# Currency to be converted from
|
||||||
|
input_box1 = soup.new_tag('input')
|
||||||
|
input_box1['id'] = 'cb1'
|
||||||
|
input_box1['type'] = 'number'
|
||||||
|
input_box1['class'] = 'cb Hg3mWc'
|
||||||
|
input_box1['value'] = conversion_details[0]
|
||||||
|
input_box1['oninput'] = f'Convert(1, 2, {1/conversion_factor})'
|
||||||
|
|
||||||
|
label_box1 = soup.new_tag('label')
|
||||||
|
label_box1['for'] = 'cb1'
|
||||||
|
label_box1['class'] = 'cb_label'
|
||||||
|
label_box1.append(conversion_details[1])
|
||||||
|
|
||||||
|
br = soup.new_tag('br')
|
||||||
|
|
||||||
|
# Currency to be converted to
|
||||||
|
input_box2 = soup.new_tag('input')
|
||||||
|
input_box2['id'] = 'cb2'
|
||||||
|
input_box2['type'] = 'number'
|
||||||
|
input_box2['class'] = 'cb Hg3mWc'
|
||||||
|
input_box2['value'] = conversion_details[2]
|
||||||
|
input_box2['oninput'] = f'Convert(2, 1, {conversion_factor})'
|
||||||
|
|
||||||
|
label_box2 = soup.new_tag('label')
|
||||||
|
label_box2['for'] = 'cb2'
|
||||||
|
label_box2['class'] = 'cb_label'
|
||||||
|
label_box2.append(conversion_details[3])
|
||||||
|
|
||||||
|
conversion_box.append(input_box1)
|
||||||
|
conversion_box.append(label_box1)
|
||||||
|
conversion_box.append(br)
|
||||||
|
conversion_box.append(input_box2)
|
||||||
|
conversion_box.append(label_box2)
|
||||||
|
|
||||||
|
element1.insert_before(conversion_box)
|
||||||
|
return soup
|
||||||
|
|
Loading…
Reference in New Issue
Block a user