Evo jedne temice za ljubitelje frontenda i javascripta. Također i za hejtere, koji će i ovdje sigurno pronaći svoju poslasticu…
Trebalo mi je barem jedno 5 godina da mi se iskristalizira jedno rješenje u glavi i baš me razveselilo kada me maloprije opalila ideja iz “vedra neba” :D. Nije baš iz vedra neba, jer sam se svih proteklih godina mic po mic približavao rješenju…ali sada je sve sjelo fino na mjesto.
Znači još davno sam htio napraviti opciju da mogu korisnika priuptati dialogom, na način:
“Jeste li sigurni da želite nastaviti?”
…i onda o njegovoj odluci nastaviti izvršavati code od linije gdje sam ga to pitao.
Naravno, sirovi stari-prastari JS nam to omogućava na način:
function submit(someData){
if(!confirm("Jeste li sigurni da želite nastaviti ? ") return;
console.log("Korisnik je nastavio...")
}
Znači, jedna linija koda, koristeći naredbu confirm, nam omogućava tu opciju.
Jedino je mali problemčić što nemamo nikakvu mogućnost utjecaja na izgled tog confirmation dialoga.
I sada sam ja htio napraviti isto to, ali sa svojim custom dialogom. Ali isto da bude jedna linija koda.
Naravno, sve može biti jedna linija koda, ako code nakucamo u jednoj linji…zato kada kažem jedna linija coda, onda mislim na liniju ekvivalent ovoj
if(!confirm("Jeste li sigurni da želite nastaviti ? ") return;
…za koju u potpunosti nema smisla da se razbija na više linija.
Uglavnom, nisam imao blage ideje da je moguće tako nešto izvesti sa custom codom i custom dialogom…pa sam pitao po forumu. Tamo su me također savjetovali da se to ne može izvesti…i preporučavali mi da na dialog zakačim callback koji će korisnika preusmjeriti na željenu daljnju akciju ako klikne potvrdni button.
E sad, tako sa callbackom sam radio davno prije nego sam tražio elegantnije rješenje…i tad sam baš htio da stvar radi po principu metode confirm. Da ne moramo ama baš ništa drugo petljati sa code-om, osim da zakačimo custom komadić codea na liniju gdje radimo konfirmaciju. Činilo se i meni to poprilično nemogućim, ali sam trazio neko rješenje…i izbasao sam na neko poluelegantno rješenje koje je bilo skoro one-line…
…s vremenom sam to uspio još malo uljepšati…i danas sam dobio perfect varijantu. Znači doslovice mogu napisati jednako “mesa”, kao u varijanti sa native confirm metodom, znači code mi izgleda ovako:
function submit(someData){
if(!custom_confirm("Jeste li sigurni da želite nastaviti ?") return;
console.log("Korisnik je nastavio...")
}
custom_confirm mogu nazvati kako želim, ta funkcija očito postoji negdje u pozadini i pravo pitanje je što se krije unutra, hehe
Oke, u mojoj varijanti ipak ima malo više mesa, što namjerno ovdje nisam prikazao. Ali ne puno, sakrio sam ni manje ni više nego ravno 9 karaktera koji upadaju u istu liniju sa konfirmacijom …koji će također ostati tajna… čisto da vam zadatak izgleda jednako težak koliko je meni izgledao prije 5 godina…kad sam mislio da je to nemoguće izvesti
P.S. Nema nikakvih JS kompajlera koji od tog codea stvaraju nekakav prošireni code
E sad, ako ovdje ima ljubitelja i znalaca JS-a, mislim da imamo dobru temu. Zanima me jel može netko skužiti, ili barem naslutiti kako sam ovo izveo?