diff --git a/mo/jobs/protocols.py b/mo/jobs/protocols.py index ae9e8a7360e2275cf968ee6fbb519a7e3e53bb5c..1a3e17282c31223198dbffab9d9fc229720dec4a 100644 --- a/mo/jobs/protocols.py +++ b/mo/jobs/protocols.py @@ -415,6 +415,7 @@ def schedule_sort_scans(job_id: int, for_user: db.User) -> int: scans_desc = "oprav" if 'type' in job.in_json and job.in_json['type'] == "feedback" else "odevzdaných řešení" job.type = db.JobType.sort_scans job.created_at = mo.now + job.finished_at = None job.expires_at = None job.user = for_user job.description = f'Rozdělení již roztříděných skenů {scans_desc} {contest.round.round_code_short()}' @@ -554,4 +555,3 @@ def handle_sort_scans(the_job: TheJob): job.result = 'Celkem ' + mo.util_format.inflect_number(len(papers), 'roztříděné řešení', 'roztříděná řešení', 'roztříděných řešení') else: job.result = 'Celkem ' + mo.util_format.inflect_number(len(papers), 'roztříděná oprava', 'roztříděné opravy', 'roztříděných oprav') - the_job.expires_in_minutes = config.JOB_EXPIRATION_LONG diff --git a/static/js/autocomplete.js b/static/js/autocomplete.js index 7148dc8813b6e08b97796eb5f3cbcac3c5e7e664..f935654331ddc906ef4af99bda2591647212503a 100644 --- a/static/js/autocomplete.js +++ b/static/js/autocomplete.js @@ -28,6 +28,9 @@ function autocomplete(inp, arr, callback=null, max=10) { if (index != -1) { listCount++; b = document.createElement("DIV"); + if (text.toUpperCase() == val.toUpperCase()) { + b.classList.add("exact"); + } b.innerHTML = text.substr(0, index) + "<strong>" + text.substr(index, val.length) + "</strong>" + text.substr(index + val.length) b.innerHTML += "<input type='hidden' value='" + key + "'>"; b.innerHTML += "<input type='hidden' value='" + text + "'>"; @@ -75,6 +78,32 @@ function autocomplete(inp, arr, callback=null, max=10) { e.stopPropagation(); }); + inp.addEventListener("blur", function(e) { + var found = false; + for (i = 0; i < arr.length; i++) { + var key, text; + if (Array.isArray(arr[i])) { + key = arr[i][0]; text = arr[i][1]; + } else { + key = arr[i]; text = arr[i]; + } + + if (inp.value.toUpperCase() == text.toUpperCase()) { + found = true; + if (callback) { + callback(key); + } + break; + } + } + if (!found) { + inp.value = ""; + if (callback) { + callback(null); + } + } + }); + function addActive(x) { if (!x) return false; removeActive(x); diff --git a/static/mo.css b/static/mo.css index 13b0d8d3f5766592c10b17b9c0ca018e209a94e0..d8a48412428acd705fbda3f7c1995669bd7881f5 100644 --- a/static/mo.css +++ b/static/mo.css @@ -454,6 +454,9 @@ div.message .msg-date { background-color: #fff; border-bottom: 1px solid #d4d4d4; } +.autocomplete-items div.exact { + background-color: rgb(255, 255, 145); +} .autocomplete-items div:hover { background-color: #e9e9e9; }