mirror of
https://github.com/zedeus/nitter.git
synced 2025-12-06 03:55:36 -05:00
Style number input field
This commit is contained in:
@@ -17,6 +17,11 @@ template `@`(param: string): untyped =
|
|||||||
if param in pms: pms[param]
|
if param in pms: pms[param]
|
||||||
else: ""
|
else: ""
|
||||||
|
|
||||||
|
proc validateNumber(value: string): string =
|
||||||
|
if value.anyIt(not it.isDigit):
|
||||||
|
return ""
|
||||||
|
return value
|
||||||
|
|
||||||
proc initQuery*(pms: Table[string, string]; name=""): Query =
|
proc initQuery*(pms: Table[string, string]; name=""): Query =
|
||||||
result = Query(
|
result = Query(
|
||||||
kind: parseEnum[QueryKind](@"f", tweets),
|
kind: parseEnum[QueryKind](@"f", tweets),
|
||||||
@@ -25,7 +30,7 @@ proc initQuery*(pms: Table[string, string]; name=""): Query =
|
|||||||
excludes: validFilters.filterIt("e-" & it in pms),
|
excludes: validFilters.filterIt("e-" & it in pms),
|
||||||
since: @"since",
|
since: @"since",
|
||||||
until: @"until",
|
until: @"until",
|
||||||
near: @"near"
|
minLikes: validateNumber(@"min_faves")
|
||||||
)
|
)
|
||||||
|
|
||||||
if name.len > 0:
|
if name.len > 0:
|
||||||
@@ -77,8 +82,8 @@ proc genQueryParam*(query: Query): string =
|
|||||||
result &= " since:" & query.since
|
result &= " since:" & query.since
|
||||||
if query.until.len > 0:
|
if query.until.len > 0:
|
||||||
result &= " until:" & query.until
|
result &= " until:" & query.until
|
||||||
if query.near.len > 0:
|
if query.minLikes.len > 0:
|
||||||
result &= &" near:\"{query.near}\" within:15mi"
|
result &= " min_faves:" & query.minLikes
|
||||||
if query.text.len > 0:
|
if query.text.len > 0:
|
||||||
if result.len > 0:
|
if result.len > 0:
|
||||||
result &= " " & query.text
|
result &= " " & query.text
|
||||||
@@ -102,8 +107,8 @@ proc genQueryUrl*(query: Query): string =
|
|||||||
params.add "since=" & query.since
|
params.add "since=" & query.since
|
||||||
if query.until.len > 0:
|
if query.until.len > 0:
|
||||||
params.add "until=" & query.until
|
params.add "until=" & query.until
|
||||||
if query.near.len > 0:
|
if query.minLikes.len > 0:
|
||||||
params.add "near=" & query.near
|
params.add "min_faves=" & query.minLikes
|
||||||
|
|
||||||
if params.len > 0:
|
if params.len > 0:
|
||||||
result &= params.join("&")
|
result &= params.join("&")
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ button {
|
|||||||
|
|
||||||
input[type="text"],
|
input[type="text"],
|
||||||
input[type="date"],
|
input[type="date"],
|
||||||
|
input[type="number"],
|
||||||
select {
|
select {
|
||||||
@include input-colors;
|
@include input-colors;
|
||||||
background-color: var(--bg_elements);
|
background-color: var(--bg_elements);
|
||||||
@@ -24,7 +25,12 @@ select {
|
|||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type="text"] {
|
input[type="number"] {
|
||||||
|
-moz-appearance: textfield;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="text"],
|
||||||
|
input[type="number"] {
|
||||||
height: 16px;
|
height: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,6 +44,17 @@ input[type="date"]::-webkit-inner-spin-button {
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
input[type="number"] {
|
||||||
|
-moz-appearance: textfield;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="number"]::-webkit-inner-spin-button,
|
||||||
|
input[type="number"]::-webkit-outer-spin-button {
|
||||||
|
display: none;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
input[type="date"]::-webkit-clear-button {
|
input[type="date"]::-webkit-clear-button {
|
||||||
margin-left: 17px;
|
margin-left: 17px;
|
||||||
filter: grayscale(100%);
|
filter: grayscale(100%);
|
||||||
@@ -164,7 +181,8 @@ input::-webkit-datetime-edit-year-field:focus {
|
|||||||
appearance: none;
|
appearance: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type="text"] {
|
input[type="text"],
|
||||||
|
input[type="number"] {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 0;
|
right: 0;
|
||||||
max-width: 140px;
|
max-width: 140px;
|
||||||
|
|||||||
@@ -24,7 +24,8 @@
|
|||||||
height: 23px;
|
height: 23px;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type="text"] {
|
input[type="text"],
|
||||||
|
input[type="number"] {
|
||||||
height: calc(100% - 4px);
|
height: calc(100% - 4px);
|
||||||
width: calc(100% - 8px);
|
width: calc(100% - 8px);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ type
|
|||||||
fromUser*: seq[string]
|
fromUser*: seq[string]
|
||||||
since*: string
|
since*: string
|
||||||
until*: string
|
until*: string
|
||||||
near*: string
|
minLikes*: string
|
||||||
sep*: string
|
sep*: string
|
||||||
|
|
||||||
Gif* = object
|
Gif* = object
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ proc renderHead*(prefs: Prefs; cfg: Config; req: Request; titleText=""; desc="";
|
|||||||
let opensearchUrl = getUrlPrefix(cfg) & "/opensearch"
|
let opensearchUrl = getUrlPrefix(cfg) & "/opensearch"
|
||||||
|
|
||||||
buildHtml(head):
|
buildHtml(head):
|
||||||
link(rel="stylesheet", type="text/css", href="/css/style.css?v=20")
|
link(rel="stylesheet", type="text/css", href="/css/style.css?v=21")
|
||||||
link(rel="stylesheet", type="text/css", href="/css/fontello.css?v=3")
|
link(rel="stylesheet", type="text/css", href="/css/fontello.css?v=3")
|
||||||
|
|
||||||
if theme.len > 0:
|
if theme.len > 0:
|
||||||
|
|||||||
@@ -89,6 +89,13 @@ proc genDate*(pref, state: string): VNode =
|
|||||||
input(name=pref, `type`="date", value=state)
|
input(name=pref, `type`="date", value=state)
|
||||||
icon "calendar"
|
icon "calendar"
|
||||||
|
|
||||||
|
proc genNumberInput*(pref, label, state, placeholder: string; class=""; autofocus=true; min="0"): VNode =
|
||||||
|
let p = placeholder
|
||||||
|
buildHtml(tdiv(class=("pref-group pref-input " & class))):
|
||||||
|
if label.len > 0:
|
||||||
|
label(`for`=pref): text label
|
||||||
|
input(name=pref, `type`="number", placeholder=p, value=state, autofocus=(autofocus and state.len == 0), min=min, step="1")
|
||||||
|
|
||||||
proc genImg*(url: string; class=""): VNode =
|
proc genImg*(url: string; class=""): VNode =
|
||||||
buildHtml():
|
buildHtml():
|
||||||
img(src=getPicUrl(url), class=class, alt="", loading="lazy")
|
img(src=getPicUrl(url), class=class, alt="", loading="lazy")
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ proc renderSearchTabs*(query: Query): VNode =
|
|||||||
|
|
||||||
proc isPanelOpen(q: Query): bool =
|
proc isPanelOpen(q: Query): bool =
|
||||||
q.fromUser.len == 0 and (q.filters.len > 0 or q.excludes.len > 0 or
|
q.fromUser.len == 0 and (q.filters.len > 0 or q.excludes.len > 0 or
|
||||||
@[q.near, q.until, q.since].anyIt(it.len > 0))
|
@[q.minLikes, q.until, q.since].anyIt(it.len > 0))
|
||||||
|
|
||||||
proc renderSearchPanel*(query: Query): VNode =
|
proc renderSearchPanel*(query: Query): VNode =
|
||||||
let user = query.fromUser.join(",")
|
let user = query.fromUser.join(",")
|
||||||
@@ -83,8 +83,8 @@ proc renderSearchPanel*(query: Query): VNode =
|
|||||||
span(class="search-title"): text "-"
|
span(class="search-title"): text "-"
|
||||||
genDate("until", query.until)
|
genDate("until", query.until)
|
||||||
tdiv:
|
tdiv:
|
||||||
span(class="search-title"): text "Near"
|
span(class="search-title"): text "Minimum likes"
|
||||||
genInput("near", "", query.near, "Location...", autofocus=false)
|
genNumberInput("min_faves", "", query.minLikes, "Number...", autofocus=false)
|
||||||
|
|
||||||
proc renderTweetSearch*(results: Timeline; prefs: Prefs; path: string;
|
proc renderTweetSearch*(results: Timeline; prefs: Prefs; path: string;
|
||||||
pinned=none(Tweet)): VNode =
|
pinned=none(Tweet)): VNode =
|
||||||
|
|||||||
Reference in New Issue
Block a user