Dropzone: kijk mee naar hoe een Drupal-feature wordt gemaakt

Leuk dat ik link naar mijn Drupal.org-profiel, maar dat staat inmiddels zo vol met bugs en features waar ik de afgelopen jaren aan heb gewerkt, dat wie daar belandt er niet meer makkelijk de weg kan vinden.

Daarom licht ik in dit en een volgend blog twee issues uit waar ik niet al te lang geleden aan heb gewerkt en waarvan ik denk dat die iets zeggen over hoe ik te werk ga en wat ik kan. In het eerste geval moest er een bestandsuploadwidget voor Drupal komen dat met drag & drop werkt, in het tweede geval moest de haperende mailfunctie van de backupmodule weer aan de praat worden gekregen.

Een dropzone voor Drupal

File Field design update: upload field was een feature request tegen de core van Drupal 8 waarin werd gevraagd om het standaard Seven-theme uit te breiden met drag 'n' drop voor een of meer bestanden. Met andere woorden, als je ergens in Drupal meerdere bestanden tegelijkertijd wou uploaden door ze naar een dropzone te slepen, zou dit feature ervoor zorgen dat dat binnen Seven kon.

De indieners waren zelf reguliere Drupal core-developers en dit feature was een onderdeel van de implementatie van een herdesign van Seven.

Ergens rond comment 80 werd dit issue toegevoegd aan de lijst met issues voor het Media Initiative, wat een Drupal-wijd initiatief is om mediasupport te moderniseren. Dit trok het issue ook de invloedssfeer van de Media Initiative-codesprints in en dat was hoe ik bij de ontwikkeling van dit feature betrokken raakte.

[design van een deel van de nieuwe dropzone]
Illustratie: van droom ...

Op een grijze maandagochtend in het voorjaar van 2018 trok ik met mijn laptopje naar het kantoor van Drupalbureau Synetic in Haarlem om daar aan mijn eerste codesprint ooit mee te doen. Dat viel nogal tegen. Om te beginnen had ik problemen met het installeren van Docker. Na een halve dag heb ik dat maar laten zitten en besloten om verder te werken binnen de XAMPP op mijn laptop.

[implementatie van een deel van de nieuwe dropzone]
Illustratie: naar werkelijkheid ...

Het issue dat me was toegewezen door Sean Blommaert, een van de leiders van de mediapoot van Drupal, bleek behoorlijk taai. Het (begrijpend) lezen van de comments alleen al nam een flink deel van de middag in beslag en daarnaast bleek er op het kantoor een clown te verduren. (Was er een clown? Ik herinner me een clown! Waarom herinner ik me een clown?)

Zonder ook maar een byte te hebben geprogrammeerd ging ik weer naar huis. In de maand daarop testte ik vervolgens de meest recente patch van de dropzone. Daarnaast pakte ik de deelissues op die ik kon oppakken, en verwerkte ze in een eigen patch (comments 147 en 148).

Een aantal van de problemen die ik tegenkwam, was dat de HTML in de Twig-templates van de dropzone er expliciet van uitging dat de gebruiker Javascript had aanstaan. Dat is onder meer een toegankelijkheidsprobleem – had Javascript uitgestaan, dan zou de gebruiker helemaal geen bestanden meer kunnen uploaden. Wat je wil in zo'n geval is dat de toegevoegde functionaliteit van een dropzone de al bestaande functionaliteit uitbreidt, maar niet stukmaakt (progressive enhancement).

In de maanden daarop bleef dit issue vrijwel onaangeraakt. Tijdens de kerst van 2018 pakte ik het feature opnieuw op en keek ik of het me nu wel zou lukken de problemen op te lossen die ik al eerder had vastgesteld.

Sean Blommaert had blijkbaar hetzelfde idee, want hij kwam vlak voordat ik het kon doen met een patch uit die dezelfde problemen oploste. Dat maakte het mij mogelijk om een uitgebreide en geïnformeerde kritiek van die patch op tafel te leggen en in een korte tijd wisten we door wederzijdse patches en reviews het feature op het punt te krijgen dat we het aan de 'poortwachters' van Drupal konden voorleggen.

Dat was helaas ook het punt waarop het feature strandde. De toegankelijkheidsmensen zagen geen mogelijkheid om van de huidige implementatie naar een implementatie te gaan die slechts van één knop gebruik maakte (waarom dit überhaupt een issue was, is me nooit helemaal duidelijk geworden). Daarnaast was dit een Seven-feature, maar was binnen de Drupal-gemeenschap inmiddels het Claro-theme de nieuwe held.

Destijds had ik het gevoel dat het feature teveel tegelijk moest oplossen. Naast de introductie van een frontendcomponent 'dropzone', werkte het feature namelijk ook het begrip 'managed files' verder uit – de Drupal-ondersteuning voor een voorgeborchte voor uploads was op dat moment nog niet helemaal geschikt voor meerdere AJAX-uploads, als ik het me goed herinner. Voor mijn gevoel maakte dat het feature complexer, waardoor de kans op een succesvolle implementatie afnam.

Voor mij was dit het punt om van deze specifieke trein te stappen. Of Drupal ooit zijn dropzone heeft gekregen, weet ik niet.

Uiteindelijk hebben 16 mensen code voor dit feature geschreven en nog eens 40 mensen op andere manieren meegewerkt.

Mijn comments en patches in dit issue:

147: testverslag dat 5 openstaande issues oplevert.

148: een patch die oudere issues en een issue uit mijn eigen verslag oplost (CSS, YAML, Twig).

164: een reactie op een comment.

165: een testverslag over een recente patch dat 4 issues oplevert en een eigen patch die een daarvan oplost (PHP).

167 + 168: een testverslag over een recente patch dat 8 issues oplevert en een eigen patch die vier daarvan oplost (CSS).

173: een testverslag dat 2 issues oplevert.

175: een testmatrix (op verzoek).

177 + 178: een testverslag dat geen issues oplevert (hoera!). Mijn eerste RTBC: ik veranderde de status van het issue naar "reviewed and tested by the community", wat zoveel betekent als: "volgens mij en anderen is de recentste patch klaar voor productie". Hiermee nodig je degenen die daarover gaan uit eens naar het resultaat te kijken. Wat ook prompt gebeurde: het eerstvolgende comment was van het Drupal-hoofd Frontend.

184 + 185: uitleg over de issue.

Comment 191 is niet van mij, maar geeft mooi aan dat niet alle discussie via de issuewachtrij gaat. In dit geval had ik via een persoonlijk bericht op Slack iets aangegeven.

196: een testverslag dat 3 nieuwe issues en 1 oud, teruggekeerd issue oplevert.

200, 202 en 203: een wat rare discussie ontstond toen iemand met het probleem op de proppen kwam dat je niet van dropzone naar dropzone en niet van het browsercanvas naar de dropzone kon slepen. Op verzoek heb ik uitgezocht hoe andere dropzoneimplementaties dat deden (vaak: niet) en hoe dit in verschillende browsers uitpakte.

208: een testverslag dat 3 issues oplevert en een patch die 2 ervan oplost (CSS).

211: een antwoord op een vraag.

220: een antwoord op een vraag. In het antwoord laat ik middels tekstbeschrijvingen zien hoe de verschillende staten van de widget er na een drag & drop-actie uitzien.

221: een testverslag dat 1 issue oplevert.

222: dit is een aanvulling op 220, waarbij ik wat schermafdrukken ter illustratie post, en tevens mijn laatste bijdrage aan dit issue, dat in comment 253 (met als reden "outdated") werd gesloten.

Volgende keer: tijdens het updaten van een Drupal 7-site, hield de Backup and Migrate-module er mee up. De patch die iemand hiervoor had geschreven, leek het goed te doen, dus dat zei ik in de issuewachtrij, ervan uitgaande dat er wel snel een update van de module zou komen. Maar de maintainer vond dat er nog wat kleinigheidjes gefixt moesten worden. Twee jaar later...

Ik ben een sitebouwer, frontender en themer die onder andere veel met Drupal heeft gewerkt. Zoek je een Drupal-themer die onder andere graag in projectteams werkt en niet bang is zelf in de PHP te duiken, geef me een belletje!

Delen: