Oli kesä 2018 kun L'Math heräsi henkiin: YTL:n kaavaeditori toimi kuin toimikin monista bugeistaan huolimatta hätäisesti kyhätyssä Electron-ikkunassa. Tuosta onkin vierähtänyt tovi, ja purkkavirityksiä on kasaantunut vähän joka nurkkaan – edes käytettyä kaavaeditoria ei ole kokonaisuudessaan päivitetty YTL:n uudempiin versioihin, vaan sitä on paikkailtu ja päivitelty tarpeellisin osin.
Tämän vuoksi käynnissä onkin ollut L'Mathin näkyvän frontend-osan täysi rewrite täydellinen rewrite, tarkoituksenaan päivittää softa käyttämään modernimpaa lähestymistapaa ja harkitumpia teknisiä ratkaisuja.
Ensin alkoi frontendin rewrite (kertomus alempana), minkä jälkeen kävi nopeasti selväksi, että myös backend vaatii uudistamista. Teknistä velkaa ja purkkavirityksiä kertyi vuosien varrella reippaasti – L'Math muun muassa käytti todella vanhaa Electron-versiota vielä hyvin pitkään.
Välilehtiä ja useamman tiedoston avausmahdollisuutta on toivottu ominaisuudeksi pitään. Suoraan sanoen se oli myös ensimmäinen pääsyy backendin uudelleentoteutuksen aloittamiselle: vanha backend kun oli tehty käytännössä yksitiedostoiseksi, yksi-ikkunaiseksi, ja sen arkkitehtuuria olisi ollut erittäin vaikeaa muuttaa – softaa oli kasattu lisää vanhojen viritysten päälle välittämättä ylläpidettävyydestä.
Siispä Typescript käyttöön ja täysin uutta backendia kirjoittamaan. Näin varmistui myös se, että kaikki backendinkin puolella tulee tyypitetyksi (osittain myös yhteisesti frontendin kanssa), backend-frontend-kommunikaatio selkiytyy, ja Electronin sandboxaus tulee viimeinkin käyttöön.
Siis uudessa 1.10-versiossa tulee olemaan välilehtijärjestelmä, jossa nauhassa näkyvät kaikki avoimet tiedostot, asetusvälilehdet, ja niin edelleen. Myös ajatus esimerkiksi nettiselainvälilehden mahdollistamisesta (vaikkapa cheat.abitti.fi -taulukoiden nopeaan käyttöön) on tullut nyt mahdollisemmaksi. Käytännössä tämä on toteutettu Electronin BrowserView
-näkymillä, joita voi piirtää pohjaselaimen päälle.
printToPDF
→ PDF-vienti luultavasti toimii jatkossa paremmin ja nopeammin kaikilla alustoilla (+ asennuskoko hieman pienempi!)
Uuden backendin sisältäviä beta-julkaisuja on tulossa kokeiltavaksi syksyn mittaan. Opintokiireistä johtuen mitään tarkkaa aikataulua ei voida lyödä lukkoon!
Niin siinä sitten kävi, Reactia piti saada. Uutta frontend-moduulia rakennellaan Reactin ja TypeScriptin kanssa, bundlerinaan Parcel, ja mukana tietysti myös YTL:n rich-text-editor (tai oikeastaan sen forkki).
Käytännössä ohjelman UI noudattaa samaa vanhaa mallia: vasemmalla on sivupalkissa sivut, yläpalkissa on YTL:n editorin symbolipalkki ja keskenään vaihtuvat teksti- ja kaavaeditorin työkalut. Taustalla kuitenkin miltei kaikki on muuttunut, sillä vanhoista jQueryllä kuunnelluista taulukon sisäisten taulukkojen taulukoista on siirrytty pitkälti flexboxin ja gridin käyttöön, ja toiminnallisten elementtien tilasta ja kuunteluista vastaa React.
Koska L'Math on ja tulee olemaan Electron-pohjainen selainkikkare, ja jo aiemmalla toteutuksella on esiintynyt performanssivaikeuksia heikkotehoisimpien koneiden kanssa, on editorin parissa tehty jonkin verran kompromisseja. Esimerkiksi vastaus- eli tekstilaatikko on Reactin näkökulmasta kontrolloimaton elementti – annetaan selaimen handlata editoitavan sisällön editointi ilman puolta tuhatta kutsua joka näppäimenpainalluksella. (Toisaalta tämä mahdollistaa myös aika vaivattomasti YTL:n editorin integroimisen softaan ilman sen kummempia muutoksia)
Havaittavissa on (taas kerran) joitain ui-elementtien tyylittelymuutoksia. L'Mathin kotisivuilla tuli koekäyttöön aiemmin tämä ns. laatikkotyyli, jota myös ohjelman itsensä UI hiljalleen patcheissa siirtyi noudattamaan, ja nyt rewriten myötä entistä enemmän.
Varsinainen WYSIWYG-editoriosa on edelleen samankaltainen, joskin fonttikokojen parissa siirryttiin viimein pikselikokojen pariin, joten vanhasta rajallisesta 1-7-välistä päästiin eroon!
Latauspylpyröiden ja jumiutuvan UI:n tilalla onkin placeholdereita, jee. Työtä on tekemättä vielä sen verran, että beta-versiota tästä React-frontendistä ei ole odotettavissa ehkä vielä viikkoon tai pariin.
Tarkkaa arviota ei vielä aikatauluista ole. Beta-versioita lienee tulossa saataville aikaisintaan lähiviikkoina. Ei ole vielä suunnitelmaa siitä, tuleeko React-frontend saataville seuraavassa patchissa vai vasta tulevassa 2.0-versiossa (näin mittavan rewriten jälkeen lienee syytä hypätä numeroinnissa 1.10:n sijaan jo versionumeroon 2.0).
Joka tapauksessa uutta UI:ta varmaankin testautetaan ensin 2.0-version beta-julkaisuilla, ja sitten vasta julkaistaan patchissa myös version 1.9 piiriin.
Alla erinäisiä poimintoja muutoksista ja parannuksista
Kaiken kaikkiaan työn alla on siis melko mittava rewrite, joka varmaankin myöhemmissä vaiheissa ulottuu myös backendin puolelle. Edistystä voi seurata L'Mathin sosiaalisen median kanavissa ja tässä uutisvirrassa!
Facebook: @laudaturmath Instagram: @laudaturinmatikka