diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py index 5e61ae3d55704dff4d448dbbd2cfede5462701e6..ed35ab6c0bc80fd7fcb0220f6d890e5446c43cac 100644 --- a/mo/web/org_contest.py +++ b/mo/web/org_contest.py @@ -1964,7 +1964,7 @@ def org_contest_scans_process(ct_id: int, job_id: int, site_id: Optional[int] = @app.route('/org/contest/c/<int:ct_id>/scans/<int:job_id>/file/<file>') @app.route('/org/contest/c/<int:ct_id>/site/<int:site_id>/scans/<int:job_id>/file/<file>') def org_contest_scans_file(ct_id: int, job_id: int, file: str, site_id: Optional[int] = None): - get_context(ct_id=ct_id, site_id=site_id, right_needed=Right.upload_solutions) + get_context(ct_id=ct_id, site_id=site_id) sess = db.get_session() diff --git a/mo/web/templates/org_contest_scans_process.html b/mo/web/templates/org_contest_scans_process.html index c6f3842599f1e44cd9634c5b62f5954685dd97e9..db0504c009dd1baa8445e764173a89c7cb14cca8 100644 --- a/mo/web/templates/org_contest_scans_process.html +++ b/mo/web/templates/org_contest_scans_process.html @@ -153,7 +153,7 @@ tlačítkem <b>[Uložit]</b>. Poté můžete celou dávku odeslat ke zpracován </div> <span tabindex=5 onfocus="document.getElementById('user_input').focus();"></span> </div> - <div class="pages"> + <div class="pages" id="rows_scroller"> <table class="data"> <thead> <th title="Číslo skenu"># @@ -217,6 +217,7 @@ var task_input = document.getElementById('task_input'); var seq_input = document.getElementById('seq_input'); var process_all_button = document.getElementById('process-all-button'); var save_data_field = document.getElementById('save-data'); +var rows_scroller = document.getElementById('rows_scroller'); PAGE_FIX = -1; PAGE_EMPTY = -2; @@ -372,17 +373,28 @@ seq_input.addEventListener("blur", function(e) { refreshActiveRow(); }); +function scrollToRow(i) { + var top = rows[i].offsetTop; + var bottom = top + rows[i].offsetHeight; + + if (rows_scroller.scrollTop > top - 45) { + rows_scroller.scrollTo({ top: top - 45, behavior: 'smooth'}); + } else if (rows_scroller.scrollTop + rows_scroller.offsetHeight < bottom + 30) { + rows_scroller.scrollTo({ top: bottom - rows_scroller.offsetHeight + 30, behavior: 'smooth' }); + } +} + function prevPage() { if (activeRow > 0) { selectRow(activeRow - 1); - rows[activeRow].scrollIntoView({ behavior: 'smooth', block: 'center' }); + scrollToRow(activeRow); } } function nextPage() { if (activeRow < pages.length - 1) { selectRow(activeRow + 1); - rows[activeRow].scrollIntoView({ behavior: 'smooth', block: 'center' }); + scrollToRow(activeRow); } } @@ -446,6 +458,7 @@ for (let i = 0; i < pages.length; i++) { } selectRow(0); +scrollToRow(0); </script> {% endif %}