Help! HTML

Noob question. Nu e de HTML, are mai mult legatura cu procesul de afisare si actualizare prin AJAX, dar e pe-aproape.

Am o interfata prin care incarc un ZIP pe un site (REST API, custom made), apoi il dezarhiveaza intr-un folder si porneste executabilul din el care face ceva in CLI, eventual scrie intr-un fisier text un soi de log daca exista probleme, si termina. Nu e mare scofata, dar tot procesul poate sa dureze cateva minute, gen 2-3-5 minute. Asta inseamna ca ori exista un apel AJAX catre acel REST API care sa faca totul dintr-o bucata, cu un timeout urias si fara nici un fel de control intermediar, ori ecranul meu web based face apelurile pe rand, gen dupa ce incepe incarcarea sa faca refresh la fiecare 30 de secunde, la refresh sa citeasca starea curenta a operatiunii (gen: upload terminat cu succes, dezarhivare in curs, dezarhivare terminata, executie in curs, executie terminata) si in functie de asta sa lanseze urmatorul pas.

Prima varianta, cu un singur apel lung, mi se pare riscanta, daca e vreo problema singura varianta e sa o ia de la capat. Varianta a doua pare un pic neprietenoasa pentru ca face o reincarcare completa a paginii la fiecare X (30) secunde si sa lanseze urmatorul pas doar daca a terminat precedentul, dar poate sa iasa lenta: daca fiecare pas dureaza 31 de secunde atunci o sa ruleze la cate 60 de secunde (la primul refresh inca nu a terminat, urmatorul e dupa inca 30). Ma gandeam la o varianta intermediara, gen lansat tot procesul si la fiecare 30 de secunde doar sa afiseze statusul curent, dar incepand cu un file upload care poate fi el lent (1-2 minute) trebuie sa astepte transferul, nu prea exista alte solutii si atunci nu pot sa fac auto-refresh pana nu termina.

Ma intereseaza doar daca ma uit in directia potrivita, nu am mai dat de asa ceva pana acum. Teoretic e pentru serviciu, practic nu sunt platit pentru asa ceva, e o mizerie in genul "ne asteptam sa ne ajuti si cu chestii care nu sunt in fisa postului" si nu imi permit acum sa refuz, ar insemna sa schimb jobul si nu e momentul potrivit.
 
Apelul lung e big no-no; chiar dacă tu ai setat aplicația cu timeout 3 ore, vine pe urmă cineva cu un nginx în față setat cu timeout 30 de secunde și se duce naibii totul. Am văzut de prea multe ori asta în producție.

De ce ai nevoie de o reîncărcare completă a paginii la varianta a doua la fiecare verificare? Asta se făcea acum 15 ani, de-aia s-a inventat AJAX :smile:. Pui un schedule cu un get job status (ajax) din 10 în 10 secunde, care ia un flag de status din backend (rapid, doar îi zice da sau ba) și faci refresh-ul de pagină (dacă e obligatoriu, că la fel ai putea lua și ce trebuie să updatezi în pagină) doar când ai status finalizat. Și poți face și upload de fișiere cu AJAX, și până la urmă iese un SPA :biggrin:.
 
Upload de fisiere oricum fac cu AJAX, abia acum mi-a picat fisa ca am mai facut o chestie din asta cu un refresh la un progress bar pentru o procesare server side care dura cateva ore. Damn, I'm stupid.
 
Iar am dat peste un bug.
Se da html-ul:
Code:
<!DOCTYPE HTML><html><head><title>Test</title><meta http-equiv="content-type" content="text/html; charset=utf-8"><style type="text/css">

body {padding:0px;border:0px;margin:0px; text-align:center; vertical-align:middle; background-color:black;color:gray;}
div {display:inline-block;border:1px solid white;margin:2px;}
.demo0 {border:1px solid lime;position:relative;}
.demo1 {border:1px solid red;position:absolute;}
.demo2 {border:1px solid yellow;position:absolute;left:10px;}

</style></head><body>

<div>Un text mai lung in care gasim <span class='demo0'>un alt text</span> pozitionat normal.</div>
<br>
<div>Un text mai lung in care gasim <span class='demo1'>un alt text</span> pozitionat absolut, dar nedeplasat.</div>
<br>
<div>Un text mai lung in care gasim <span class='demo2'>un alt text</span> pozitionat absolut si deplasat.</div>

</body></html>
1) vertical-align:middle; aplicat la body n-are efect. La mine textul apare sus, nu in mijlocul ferestrei. Tinand cont ca background-color: black; acopera intreaga fereastra, ma astept ca body sa aiba inaltimea cat intreaga fereastra. Atunci de ce nu apare textul in mijlocul ferestrei?
2) Privitor la demo2, caseta galbena iese din chenarul alb si e la 10px de marginea stanga a ferestrei. Dar standardul zice asa:
absolute
The box’s position (and possibly size) is specified with the ’top’, ’right’, ’bottom’, and ’left’ properties. These properties specify offsets with respect to the box’s
containing block
[p. 110] .
In alta parte zice iar:
In the absolute positioning model, a box is explicitly offset with respect to its containing block. It is removed from the normal flow entirely (it has no impact on later siblings). An absolutely positioned box establishes a new containing block for normal flow children and absolutely (but not fixed) positioned descendants. However, the contents of an absolutely positioned element do not flow around any other boxes.
"Containing block" in cazul de fata este div-ul cu chenar alb, care este un inline-block. Cata vreme nu aplic left:10px; totul e ok, ca dovada casuta rosie care sta la locul ei. Se pare ca "left" face ca elementul sa nu mai fie atasat de containing block ci de fereasta, si culmea, doar pe directia aia, nu se muta si in sus.
 
Vertical align la body nu are sens, body e scrollable si atunci nu poti alinia vertical intr-o pagina potential infinita. Exista workarounds daca vrei, gen bagi totul intr-in alt div.

Ref la Demo2: span e element inline, div e box, asa ca pozitia absoluta e "with respect to the box’s containing block " adica body.
 
Back
Top