Giter Site home page Giter Site logo

msteudtn / mat-o-wahl Goto Github PK

View Code? Open in Web Editor NEW
34.0 6.0 14.0 5.29 MB

:de: Mat-O-Wahl - Ein einfach zu bedienender, freier Open Source Wahl-O-Mat Klon fuer jedermann ### :gb: :us: A simple to handle, free "Voting Advice Application" / "Electoral Compass" alternative

Home Page: https://mat-o-wahl.de/

License: GNU General Public License v3.0

JavaScript 78.68% HTML 14.13% CSS 1.84% PHP 5.35%
democracy elections gplv3 javascript voting-application voting-app voting alternative open source

mat-o-wahl's People

Contributors

adriman2 avatar fenglisch avatar lrusch avatar msteudtn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

mat-o-wahl's Issues

Kontakt-Addon kommt nicht mit Sonderzeichen (&) zurecht

Ist kein großes Problem, da wir die Zeichen in den Vereinsnamen auch ersetzen könnten, aber wäre schön, wenn es dafür einen Quick Fix geben könnte.

Steps to reproduce:

  1. Öffne einen Mat-O-Wahl, der mind. 1 Partei/Verein mit dem Sonderzeichen & im Titel enthält (möglicherweise sind auch andere Sonderzeichen betroffen, habe ich noch nicht getestet).
  2. Klicke bei irgendeinem Ergebnis auf den Kontakt-Button
    Behaviour: Die Liste der Ergebnisse am Ende der Mail bricht bei dem Verein mit dem Sonderzeichen ab
  3. Klicke bei dem Verein mit dem Sonderzeichen auf den Kontakt-Button
    Behaviour: Die E-Mail ist leer

DB-Tabellenname in db_settings.php definieren

Wenn die Datenbanktabelle anders als Results heißen soll, muss ich diese Änderung an mehreren Stellen eintragen, was fehleranfällig ist:

  • In der results_db.sql dreimal (lässt sich vermutlich nicht ändern, außer ich importiere die Tabelle als Results und benenne sie dann um)
  • In der vote_db.php einmal (relativ versteckt)
  • In der read_db_write_text.php einmal (ebenfalls versteckt)

Wäre es möglich, den Tabellennamen als Variable in der db_settings.php zu definieren, sodass andere Dateien darauf zugreifen?

Akkordeon-Logik in Tabellen

Aktuell können in "resultsByThesisTable" und "resultsByPartyTable" mehrere Felder zugleich ausgeklappt werden. Damit jedoch die Länge nicht ausartet (bei vielen Parteien), sollte immer nur ein Feld zugleich ausgeklappt sein (wenn ein neues Feld ausgeklappt wird, schließt das zuvor geöffnete wieder).

Die Logik könnte ebenfalls auf die "resultsShortPartyDescription" angewendet werden, ist da aber nicht so dringend.

Animationen ändern

  • Beim Beantworten einer These
    • IST: Die These verschwindet ruckartig, neuerdings auch die Antwort-Buttons. Der Footer befindet sich kurzzeitig ganz oben. Dann erscheint der ganze Inhalt wieder
    • SOLL: Ruckartige Bewegungen werden vermieden. Die beantwortete These verblasst, die Neue erscheint. Die Antwort-Buttons bleiben auf dem Screen. Wenn die neue These mehr oder weniger Zeilen hat, passen sich die anderen Elemente geschmeidig an.
  • Beim Ausklappen einer "resultsShortPartyDescription"
    • IST: Es ruckelt, der Anfang der Beschreibung (der immer angezeigt wird) und er untere Tabellenrand bewegen sich auf und ab.
    • SOLL: Die Beschreibung klappt geschmeidig aus.
  • In "resultsByThesisTable" und "resultsByPartyTable" ist alles perfekt

Interessante Mechaniken aus anderem Wahl-O-Mat-Klon

Ich habe gestern den Klimafinder (https://klimafinder.netlify.app/) kennengelernt, ein eigens entwickelter Wahl-O-Mat-Klon, der dem Onboarding in der Klimabewegung dienen soll. Die Grundmechanik ist natürlich gleich, aber laut der Projektleiterin gibt es einige interessante Ergänzungen. Ich will die hier einfach mal notieren, nicht als Feature Request, sondern eher als Inspiration, was theoretisch auch ginge :-)
Kurze Ergänzung: Ich beziehe mich auf die Aussagen der Projektleiterin, habe nichts davon selbst überprüft oder direkt vom Entwickler gehört.

  1. Auch die Angebote (Parteien/Vereine/AG's in der Klimabewegung) können Fragen überspringen. Dann wird die Antwort des Nutzers auf diese Frage bei der Berechnung der Übereinstimmung mit dem Angebot einfach nicht mit einbezogen. Das ist deren Alternative zum "Neutral" beantworten, was im Klimafinder weder die Angebote noch die Nutzer:innen können. Finde ich einen interessanten Ansatz, da die Antwort eines Nutzers auf eine Frage, die für das Angebot gänzlich irrelevant ist, dann nicht die Übereinstimmung mit diesem Angebot verändert, selbst wenn der Nutzer die Frage beantwortet und nicht überspringt. Gleichzeitig weiß ich nicht, ob das besser wäre als der bisherige Mechanismus des Mat-O-Wahl.

  2. Mit welchem Faktor eine Frage in die Berechnung der Übereinstimmung eingeht, kann zentral durch die Admins der App gewichtet werden, zusätzlich zu der Möglichkeit, als Nutzer eine Antwort doppelt zu gewichten. Wenn es Fragen gibt, die das Ergebnis ganz erheblich beeinflussen sollen, und andere eher unwichtige, könnte man das darüber steuern. Schafft aber zusätzliche Komplexität und den Aufwand für die Feinjustierung, für jede Frage einen passenden Faktor einzustellen. Halte ich daher für kein gutes Feature, aber trotzdem interessant.

  3. Anscheinend gibt es die Möglichkeit von Logik-Pfaden, sodass mir eine Frage nur angezeigt wird, wenn ich eine vorherige Frage entsprechend beantwortet habe. Das ermöglicht es, konkretere Fragen zu stellen, ohne dass Nutzer:innen Fragen gestellt werden, die überhaupt nicht auf sie zutreffen. Je nach Use Case (Parteien, Vereine, Klima-AG's oder sonstiges matchen) kann das natürlich mehr oder weniger sinnvoll sein. Für den Mitwirk-O-Mat halte ich es für nicht sehr sinnvoll, weil es eben auch weitere Komplexität schafft.

  4. mailto-Links in der Ergebnis-Anzeige: Das Feature finde ich so cool, dass ich dafür gleich ein eigenes Feature-Request-Ticket erstelle:

So viel dazu, vielleicht findest du die Features ja auch interessant :-)

Erläuterung / weiterführende Information zu Fragen / Thesen definieren

Ist-Stand

  • In manchen Fällen haben die "Kunden" (Vereine, Initiativen, ...) Fachbegriffe in ihre Fragen geschrieben
  • Der Nutzer weiß nicht immer, was sich dahinter verbirgt und beantwortet die Frage dann "falsch" oder bricht ab.

Ziel

  • Es soll eine Möglichkeit geben, Erläuterungen anzuzeigen
  • Als Workaround existiert bisher nur die Möglichkeit, HTML-Quellcode in die Zeile der Frage zu schreiben, z.B.
  • Windkraft; Die 10H-Regel soll abgeschafft werden <span style="font-size:80%">10H bedeutet, dass der Abstand des Windrads die 10-fache Höhe betragen muss.</span>

Lösungsansatz / Diskussionsgrundlage

  • In der DATA/FRAGEN.CSV gibt es aktuell zwei Spalten
  • Kurzbeschreibung (= Titel der Frage); ausführliche Frage
  • Soll eine extra (dritte) Spalte genutzt werden?
  • Falls ja, können wir davon ausgehen, dass die 3-spaltige Struktur in Zukunft so bestehen bleibt oder, dass noch andere Themen hinzukommen könnten? (Dann müsste der Anwender wissen, dass Spalte 3 leer bleiben muss und in Spalte 4 das Thema XY rein kommt. :( )
  • Soll die Erläuterung sofort angezeigt werden (mein Favorit) oder über einen extra Button eingeblendet werden?

Fragen nicht ein/ausblenden (fadeIn/Out), sondern wegschieben (slide)

Ist-Stand

  • Die Fragen werden nach der Antwort (Klick auf den Button) kurz ausgeblendet und dann folgt eine neue Frage / These
  • Der originale Wahl-o-Mat und einige andere Systeme "schieben" die beantwortete Frage zur Seite.

Ziel

  • Die Fragen sollen sich auch wegschieben (Slide-Funktion)

Lösungsansatz

  • Der Mat-o-Wahl nutzt bereits das Bootstrap-Framework für ein anpassbares Design (Smartphone + Desktop)
  • Darin enthalten gibt es die Carousel-Funktion https://getbootstrap.com/docs/4.0/components/carousel/
  • Die Fragen könnten in solch einem "Carousel" angezeigt werden
  • Am Anfang müssten alle Fragen ins HTML-DOM geladen werden, so dass sie weitergeschoben werden können
  • Bei dieser Gelegenheit können auch die Buttons (Zustimmung / Ablehnung) "mitgeschoben" werden.
  • Auch die Buttons müssten am Anfang ins DOM geladen werden

Darstellung

Frage 1 > Frage 2 > Frage 3 > Frage 4
Stimme zu - Lehne ab Stimme zu - Lehne ab Stimme zu - Lehne ab Stimme zu - Lehne ab
Überspringen Überspringen Überspringen Überspringen

Verknüpfungen

  • Wäre ein Bugfix für #23 (Teil 1)

Konflikt zwischen Kontakt-Addon, Filter-Addon und Limit-Results-Addon: Anzeige der Kontakt-Buttons

Übernommen aus #65

Ein Bug ist mir noch aufgefallen, sicherlich ausgelöst durch den Konflikt zwischen Limit-Results- und Filter-Addon. Vermutlich würde er kaum auffallen, weil er nur auftritt, wenn man auf spezielle Weise mit der Ergebnistabelle interagiert. Vielleicht gibt es aber auch eine weniger umständlichere Abfolge als diese:

  1. Öffne https://mitwirk-o-mat.de/issue-65 (die Original-Version mit folgenden Addons aktiviert: "extras/addon_results_textfilter_by_button.js", "extras/addon_check_iframe_resize_client.js", "extras/addon_limit_results.js", "extras/addon_contacts_in_results.js")
  2. Beantworte alle Fragen mit "Ja", um zum Ergebnis zu kommen.
  3. Klicke auf alle Ergebnisse, um die Beschreibung und die Kontakt-Buttons auszuklappen.
  4. Klicke auf "Südfrüchte anzeigen"
  5. Klicke auf "Mehr Ergebnisse anzeigen"

-> Bei der Apfelpartei wird die vollständige Beschreibung angezeigt, aber nicht die Buttons. Wenn ich auf die Beschreibung klicke, wird diese eingeklappt, aber die Buttons erscheinen (bei den Neutralen ist das auch so, aber da fällt es kaum auf). Je nachdem, wie die Fragen beantwortet und welcher Filter gewählt wird, passiert es auch bei den anderen Parteien.

Da das sicherlich nur sehr selten auftritt und auch dann noch zu benutzen ist, hat die Behebung dieses Bugs meiner Meinung nach nicht die höchste Priorität. Ich wollte dich aber informieren

Nur die ersten 20 (?) Parteien in Tabellen anzeigen und darunter ein Button "Weitere anzeigen"

Mit sehr vielen Parteien (Initiativen etc.) kann die Auswertung sehr lang und unübersichtlich werden (beim Mitwirk-O-Mat kann die Tabelle schnell mal aus > 100 Einträgen bestehen, was besonders am Smartphone unangenehm wird).

Mein Vorschlag: In "resultsShortTable" und "resultsByPartyTable" jeweils nur die obersten x Einträge anzeigen (z. B. 20, kann in definition.js angepasst werden). Darunter ein Button "Weitere anzeigen", wodurch weitere x Einträge angezeigt werden können. In "resultsByThesisTable" direkt alle Thesen anzeigen, aber wenn die Antworten zu einer These ausgeklappt werden, erneut nur die Antworten der obersten x Parteien anzeigen und darunter den Button "Weitere anzeigen".

Schnellüberblick der Partei-Position (j/n) in der Fragen/Antworten-Übersicht

Ist-Stand

  • Wenn alle Fragen beantwortet sind, werden drei Übersichten angezeigt
  • Die Tabelle #resultsByThesisTable beinhaltet eine Übersicht aller Fragen und die dazugehörigen Antworten + Positionen (j/n) der Parteien

grafik

  • Bei github.com/HSZemi/mahlowat werden zusätzlich (in einer extra Zeile) die Positionen (j/n) sofort angezeigt.
  • So kann man sich schnell auf bestimmte Fragen oder Parteien konzentrieren

grafik

Ziel

  • Den Schnellüberblick im Mat-o-Wahl ebenfalls zur Verfügung stellen
  • Eventuell die Schnellüberblicks-Zeile ausblenden, wenn alle Antworten eingeblendet werden.
  • Dabei die Erweiterungen beachten, besonders: EXTRAS/addon_limit_results.js

Lösungsansatz

  • Die Daten liegen bereits vor und werden bisher (jeweils in einer eigenen Zeile) angezeigt
  • Sie müssen nun "gesammelt" angezeigt werden.

Fragen in Kategorien sortieren (optional)

im Moment erfolgt die "Navigation" der Fragen über die Nummerierung.

Es wäre wünschenswert, wenn man diese Zahlen in Kategorien sortieren könnte, so wie das z.B. beim Wahl-o-Mat des Bitkom (Bundesverband Informationswirtschaft,Telekommunikation und neue Medien e.V.) Bitkomat erfolgt. https://www.bitkomat.de/

grafik

Ausgeklappte Partei-Antworten werden in der resultsByPartyTable angezeigt, auch wenn Partei durch limit-results versteckt ist

Steps to reproduce:

  1. addon_limit_results muss aktiviert sein
  2. Springe bis zur Auswertung.
  3. Klappe unten die resultsByPartyTable aus.
  4. Klappe die Antworten des zweitplatzierten Ergebnisses an.
  5. Reduziere die Anzahl der Ergebnisse, die angezeigt werden, bis nur noch das oberste Ergebnis zu sehen ist.

Expected behaviour:
Die ausgeklappten Antworten des zweitplatzierten Ergebnisses werden ebenfalls versteckt

Actual behaviour:
Die Antworten bleiben ausgeklappt und lassen sich nicht wieder einklappen, da das div mit der Partei und dem Collapse-Button versteckt ist. Man muss erst wieder mehr Ergebnisse anzeigen lassen, bis die Partei wieder erscheint und man die Antworten einklappen kann.

Statistische Auswertung: Einstellung über Opt-In vs. Opt-Out in definition.js anstatt in output.js

Die definition.js enthält an entsprechender Stelle (ganz unten) einen Hinweis darauf, dass die Änderung von Opt-Out zu Opt-In durch das Auskommentieren der Zeile ~60 in der output.js erfolgen kann. Da man dadurch jedoch eine weitere Datei anpassen muss, wäre es einfacher, wenn diese Einstellung direkt in der definition.js getroffen werden könnte.

Zusätzliche Bemerkung:
Meiner Meinung nach ist in der definition.js und der output.js jeweils in den Kommentaren eine Verwechslung von Opt-Out und Opt-In aufgetreten. Es müsste heißen:

  • Das entspräche dem Opt-In-Verfahren. (definition.js)
  • Zeile auskommentieren/aktivieren und Opt-Out erzwingen (output.js)

Web-Interface zum Bearbeiten der parteien.csv

1. Hintergrund

Mehrere unserer Partner:innen (v. a. Kommunen und Freiwilligenagenturen) äußern den Wunsch, dass sie die Initiativen-Daten im Mitwirk-O-Mat (also die parteien.csv) gerne selbst bearbeiten würden, um mehr Handhabe zu bekommen und weniger von uns abhängig zu sein. Aktuell müssen sie die Änderungswünsche immer uns schicken und wir aktualisieren die Datei dann manuell direkt auf dem Server - wenn unsere Partner:innen das selbst machen könnten, hätten wir also auch weniger Arbeit. Ihnen Zugriff auf den entsprechenden Ordner auf dem Server zu geben, ist keine Option, weil das die technischen Fähigkeiten unserer Partner:innen bei Weitem übersteigt und zu fehleranfällig wäre. Die Idee ist daher, ein Web-Interface zu programmieren.

2. User Story

SZENARIO: Gemeinsam mit der Musterstädter Freiwilligenagentur erstellen wir einen Mitwirk-O-Mat. Dafür haben wir eine Limesurvey-Umfrage erstellt, die von 35 Musterstädter Initiativen ausgefüllt wurden. Ihre Daten haben wir automatisch in den Mitwirk-O-Mat übertragen. In den Wochen nach der Veröffentlichung wird die Online-Umfrage von 13 weiteren Initiativen ausgefüllt, die nun doch im Musterstädter Mitwirk-O-Mat dabei sein möchten. Außerdem schreiben fünf Initiativen der Freiwilligenagentur, dass ihre Daten nicht ganz passen und geändert werden sollen.

IST: Die Freiwilligenagentur leitet die Änderungswünsche an uns, das Team vom Mitwirk-O-Mat, weiter, damit wir sie umsetzen können. Außerdem exportieren wir die Limesurvey-Antworten der neuen Initiativen und tragen sie in den Mitwirk-O-Mat ein.

SOLL:

  1. Die Freiwilligenagentur hat einen passwortgeschützten Zugang zu einem Online-Formular.
  2. Hier sehen sie, dass 13 weitere Initiativen die Online-Umfrage ausgefüllt haben. Sie können sich anschauen, was sie geantwortet haben (z. B. ob alle wichtigen Felder ausgefüllt wurden), und die Initiativen-Daten dann per Klick in den Mitwirk-O-Mat übertragen. 3. Ebenfalls können die Mitarbeiter:innen der Freiwilligenagentur die Daten der bereits eingetragenen Initiativen anpassen und dadurch deren Änderungswünsche selbstständig umsetzen.

3. Anforderungen

  1. Optional: Schnittstelle zu LimeSurvey (um die Daten von dort zu exportieren)
  2. Optional: Eingebautes Skript (z. B. in Python), mit dem die Limesurvey-Daten in das passende Format für den Mitwirk-O-Mat umgewandelt werden
    • Ein Skript zum manuellen Ausführen ist schon vorhanden, kann ggf. weiterentwickelt werden)
  3. Schnittstelle zur parteien.csv, um die neuen LimeSurvey-Daten dort einzutragen und um bereits eingetragene Daten manuell im Browser anpassen zu können.
  4. Schlichtes Web-Interface
  5. Passwortgeschützter Zugang zu verschiedenen Bereichen
    • Ein Mitwirk-O-Mat enspricht einem Bereich; die Musterstädter Freiwilligenagentur kann mit ihrem Zugang also nur auf den Musterstädter Mitwirk-O-Mat zugreifen und nicht auf die Daten des Beispielheimer Mitwirk-O-Maten
    • Wir vom Team des Mitwirk-O-Maten können mit unserem (Super)Admin-Zugang auf alle Bereiche zugreifen.
  6. Das alles in Open Source

Finanzierung

Im Rahmen eines Förderprojektes könnte die Entwicklung dieses Web-Interfaces in 2022 (teil-)finanziert werden - je nach Umfang.

Bugfix: Anzahl der maximal möglichen Punkte erhöhen

In system/output.js gibt es zwei Funktionen zum Berechnen der maximal möglichen Punkte. Dies ist die Basis für die Prozentangabe und anderes. Historisch gewachsen war das auf maximal 99 gesetzt. z.B.

		if (arPersonalPositions[i]<99)
		{
			maxPoints++;
			if(arVotingDouble[i])
				{maxPoints++;}
		}

Bei über 100 Fragen - falls das jemand wirklich tut - kommt es zu falschen Berechnungen.

fnToggleSelfPosition in #resultsByPartyTable zeigt nicht die Änderung der eigenen Position an

Wenn ich in der #resultsByPartyTable über die Buttons meine eigene Position ändere, führt das zu einer Anpassung des Rankings, aber der Button zeigt mir nicht an, dass ich meine Antwort geändert habe.

Außerdem wäre eine ID analog zu #selfPosition0 in der #resultsByThesisTable praktisch, um die Buttons mit CSS zu stylen, aber ist kein Muss (es funktioniert ja auch der Attribut-Selektor [onclick^="fnToggleSelfPosition]" ).

iframe mit variabler Höhe - Gleiche und unterschiedliche Domain

Hintergrund:

  • Im Ticket #13 wurden zwei Skripte erstellt um den Mat-o-Wahl per iframe einzubinden.
  • Eine Erweiterung, funktioniert nur auf der gleichen Domain (und passt die Höhe auch wieder an, wenn das Fenster kleiner wird)
  • Die andere Erweiterung funktioniert auch bei unterschiedlichen Domains (aber lässt das Fenster "lang", wenn es einmal groß war).

Ziel

Beide Skripte in eine einfache Erweiterung zusammen führen

Größe der Beschreibungs-/Willkommensbox definieren

Hintergrund

  • Im Ticket #13 wurde angeregt, den Kasten (am Anfang) mit der Beschreibung von height: 60vh auf padding: 5% 0 (oder ähnliches) zu ändern.
  • betrifft: INDEX.HTML <section id="sectionDescription">

Vorteile

  • Wenn der Mat-o-Wahl per iframe (mit adaptiver Größe) eingebunden wird, springt die Größe des iframe am Anfang noch etwas. Mit padding statt height ist die Höhe gleich "richtig".

Nachteile

  • Der Start-Button unter der Box ("Los geht's") ist bei viel Text in der mobilen Ansicht nicht sofort sichtbar. Stattdessen muss man erst scrollen.

Konflikt zwischen Filter-Addon und Collapse-Answers

Bezogen auf die Instanz https://mitwirk-o-mat.de/demo-v7/

Steps to reproduce:

  • Filter-Addon muss aktiviert sein (Limit-Results-Addon vielleicht auch, habe es nicht ohne getestet)
  • Beantworte oder überspringe die Fragen, um zur Auswertung zu gelangen
  • Aktivere irgendeinen Filter (außer "Alle anzeigen")
  • Öffne die resultsByThesisTable oder die resultsByPartyTable
  • Klicke auf irgendeins der Plus-Icons, um die Antworten der Partei(en) auszuklappen

Exptected behaviour:

  • Die Antworten werden wie gewohnt ausgeklappt

Actual behaviour:

  • Es wird nichts ausgeklappt, sondern nur etwas Bewegung ist zu sehen

Auf diese Weise konnte ich das nur auf https://mitwirk-o-mat.de/demo-v7/ reproduzieren.
Auf https://www.mat-o-wahl.de/download/mat-o-wahl/index_de_addons.html gibt es einen ähnlichen Bug, den ich hier schildere: #69 (comment)

Entfernung eines Eintrags aus der parteien.csv macht Results-Datenbanktabelle unbrauchbar

Wenn die statistische Auswertung aktiviert ist, wird in der Results-DB-Tabelle ja auch die Übereinstimmung des Nutzers mit den Parteien gespeichert. Die Zuordnung des Übereinstimmungswertes mit der Partei findet dabei lediglich über die Reihenfolge statt. Wenn ich nach einem halben Jahr einen Eintrag aus der Mitte der parteien.csv lösche, kann keine richtige Zuordnung von Übereinstimmungswert mit Partei mehr stattfinden, weil sich alles verschiebt (aber der Stelle, wo der Eintrag entfernt wurde).

Ein Lösung wäre, dass man Einträge in der parteien.csv nicht mehr ersatzlos löscht, sondern sie durch einen Dummy-Eintrag ersetzt. Dieser müsste irgendeinen Wert enthalten (z. B. <span data-hide="yes"></span>), damit dieser in der Auswertung nirgendwo angezeigt wird, sondern nur in der parteien.csv den Platz des gelöschten Eintrags einnimmt, damit die Zuordnung weiterhin möglich ist.

Alternativ könnte die Zuordnung vielleicht anders als über die Reihenfolge stattfinden, z. B. indem vor jedem Übereinstimmungswert das Kürzel der Partei steht.

Verschiedene Filter-Kategorien + UND-Verknüpfung

Aktuell gibt es beliebig viele gleichwertige Filter-Buttons. Wenn ich einen wähle, wird der vorher Gewählte wieder entfernt. Für einige Use Cases genügt das, für andere bräuchte es mehrere Filter-Kategorien, aus denen ich jeweils einen (oder mehrere, je nach Kategorie) auswählen kann und diese gewählten Filter dann mit UND verknüpft werden.

Beispiel Use Case: Ein FÖJ-O-Mat (ausgesprochen "Föjomat"!)
Per API oder Web Scraping können die Daten von dieser Website bzw. den jeweiligen Angebotsseiten extrahiert werden: https://www.nna-foej.de/53318115116306.html?view=form
Die Punkte, welche Tätigkeiten man bei einer Einsatzstelle viel/gelegentlich/gar nicht macht, lassen sich perfekt über klassische Fragen im Mat-O-Wahl abbilden. Die anderen drei Filterkategorien, also Region, Themenfeld und Sonstiges (Unterkunft, Mindestalter usw.), bräuchten aber auch im Mat-O-Wahl einen Filter.

Bei "Region" ergibt eine Dropdown-Auswahl mit Single Choice, wie es dort gelöst ist, am meisten Sinn. Bei "Themenfeld" ginge auch Multiple Choice mit ODER verknüpft, aber Single Choice ist auch ok. Bei "Sonstiges" bräuchte es Multiple Choice mit UND verknüpft. Schlussendlich werden dann alle gewählten Filter mit UND verknüpft.

Vielleicht stelle ich mir das zu einfach vor, aber im Grunde bräuchte es ja "nur" die Möglichkeit, verschiedene Filter-Kategorien zu definieren. Dann gibt es zwei Typen, Single oder Multiple Choice (ob als Dropdown oder als Buttons oder wie auch immer dargestellt, ist ja zweitrangig). In meiner Vorstellung wird dann nach jeder Änderung an den Filter-Einstellungen ein Array mit den gewählten Filter-Suchbegriffen/ID's generiert. Dann wird jeder Eintrag im Ranking darauf geprüft, ob alle Suchbegriffe enthalten sind. Wenn nicht, wird die Klasse .filter-hide hinzugefügt (bzw. im umgekehrten Fall entfernt).

Ich hab mir das Filter-Addon noch nicht im Detail angeschaut und kann daher nicht einschätzen, ob das ein großer Mehraufwand im Vergleich zum Status Quo wäre. Was denkst du?

In "resultsShortTable" ein Plus/Minus-Button zum aus-/einklappen der "resultsShortPartyDescription" einfügen (nur Desktop)

In der Desktop-Ansicht könnte ein Plus/Minus-Button (analog zu dem in "resultsByThesisTable" und "resultsByPartyTable") den Nutzer*innen bei helfen zu erkennen, dass sie auf die Zeile klicken können, um die Kurzbeschreibung auszuklappen. Weiterhin sollte die Beschreibung jedoch beim Klick auf die ganze Zeile aus- und zuklappen, nicht nur beim Button.

Da die Zeilen in der mobilen Ansicht schon ziemlich voll sind, eignet sich der Button vermutlich nur in der Desktop-Ansicht.

Social Media-Buttons aktualisieren bzw. ersetzen über c't Shariff

Die letzte Version 0.6.0.10.20230420 beinhaltet immer noch Buttons für Facebook und Twitter.

Die beiden Netzwerke sind heute (2023) bei jungen Menschen nicht mehr so relevant, wie früher. Diese finden sich eher bei TikTok oder Instagram wieder. Daneben gibt es noch eine Vielzahl von Messenger-Diensten.

Eine datenschutzfreundliche Möglichkeit, die Netzwerke einzubinden, bietet der "Shariff" der Zeitschrift c't https://github.com/heiseonline/shariff

Dies soll in einer der nächsten Versionen erfolgen.

Statusänderungen über addEventListener() melden für Erweiterungen

Hintergrund:

  • einige Erweiterungen in /EXTRAS/ prüfen, ob eine bestimmte Überschrift im DOM existiert
  • Falls ja, wird die Erweiterung ausgeführt (z.B. Filter ausführen, Buttons einblenden, ...)
  • Wenn irgendwann mal das DOM (oder die IDs geändert werden, funktioniert es nicht mehr

Ziel:

  • Alle wichtigen Statusänderungen melden
  • z.B. question_loaded, answer_clicked, results_loaded, ...
  • Das könnte über parent.postMessage(); und window.addEventListener('value', function(event) {})erfolgen
  • vergleiche auch /extras/addon_check_iframe_resize_host.js und /extras/addon_check_iframe_resize_client.js

Fehler in statistischer Auswertung beheben

Dies ist ein Sammelticket, das Fehler in der statistischen Auswertung aufzählt und denn Soll-Zustand beschreibt. Die Fehler liegen teilweise in der Darstellung (results.html/js), teilweise in der Erfassung.

IST: "Doppelt gewichtigen" + "Überspringen" -> 198
SOLL: 99

IST: jumpToQuestion erzeugt keinen Wert, wird in "resultsQuestions" (results.html) jedoch als "Neutral" gewertet
SOLL: jumpToQuestion erzeugt 99 und wird als "Übersprungen" gewertet

IST: "Doppelt gewichten" + jumpToQuestion -> NaN
SOLL: 99

Verwandtes Ticket, da es jumpToQuestion betrifft: #16

td#jumpToQuestionNr Hintergrundfarbe beim Zurückspringen nicht zurücksetzen

Wenn ich einige Fragen beantworte und dann zum Anfang zurückspringe, werden die Hintergrundfarben der übersprungenen #jumpToQuestionNr-Tabellenzellen zurückgesetzt. Das vermittelt den Eindruck, dass alle Antworten gelöscht wurden. Wenn ich wieder nach vorne springe, sehe ich zwar, dass die Farben zurückkommen und die Antworten nicht gelöscht wurden, aber das hilft wenig, wenn ich nicht zurück nach vorne gesprungen bin, sondern alle Fragen erneut beantwortet habe.

Ich konnte in der fnJumpToQuestionNumber nicht erkennen, wodurch das Zurücksetzen der Farbe geschieht.

Konflikt zwischen Textfilter-Addon und Limit-Results-Addon

Steps to reproduce:

  • Die beiden genannten Addons müssen aktiviert sein
  • Beantworte oder überspringe die Fragen, um zur Auswertung zu gelangen
  • Zu Filterkategorie A gehören bspw. drei Ergebnisse, die Plätze 1, 4 und 6
  • Da das Limit-Results-Addon auf 5 eingestellt ist, wird das 6. Ergebnisse anfangs nicht angezeigt
  • Filtere die Ergebnisse nach Kategorie A

Expected behaviour:

  • Es werden mir die Top 5 Ergebnisse angezeigt, die zu Filterkategorie A passen (bzw. in diesem Fall alle drei Ergebnisse, die es gibt)
  • Die Limit-Results-Buttons werden weiterhin angezeigt, damit ich auch innerhalb dieser Filterung weiter stöbern kann (wichtig für große Datensätze, wo eine Filterkategorie viele Ergebnisse enthält)

Actual behaviour:

  • Es werden mir weiterhin nur die Plätze 1 und 4 angezeigt, Platz 6 ist versteckt
  • Die Limit-Results-Buttons sind ebenfalls verschwunden, weshalb ich Platz 6 auch nicht anzeigen kann
  • Die Limit-Results-Buttons kommen erst wieder, wenn ich die Filterkategorie "Alle anzeigen" wähle

Nachvollziehen kannst du das an dieser Instanz: https://mitwirk-o-mat.de/demo-v7/

  • Überspringe die ersten vier Fragen und beantworte die letzte Frage zustimmend
  • Plätze 1, 4 & 6 = DiA, KS & FMF
  • Filterkategorie A = PLZ 12345

Bei https://www.mat-o-wahl.de/download/mat-o-wahl/index_de_addons.html ist das aber genauso. Hier werden die Limit-Results-Buttons nicht mal wieder angezeigt, wenn ich "Alle anzeigen" wähle

Credentials zur Datenbank in definition.js eingeben

Mit dem Ziel, die definition.js zur zentralen Config-Datei zu machen, sollten hier auch die Credentials der Datenbank eingegeben werden, in die die Nutzer*innendaten geschrieben werden (aktuell werden diese in die vote_db.php eingegeben):

  • $servername
  • $username
  • $password
  • $dbname

Weitere Angaben, die hier getroffen werden könnten:

  • Name der Tabelle
    • Standard ist "Results", aber falls abweichend, kann das hier geändert werden
    • Für den Fall, dass eine Datenbank mehrere solcher Tabellen aus verschiedenen Mat-O-Wahl-Instanzen enthält)
  • Ob IP-Adresse gespeichert werden soll oder nicht
    • z. B. über eine Zeile, die man einfach auskommentieren muss
    • In vote_db.php muss man das aktuell manuell eingeben (Zeile 41: VALUES ('0.0.0.0', '$timestamp', ... )
    • In vote_txt.php kann das bereits über auskommentieren gemacht werden (Zeile 86)

Abfrage nach statistischer Auswertung als letzter Schritt vor dem Ranking

Hintergrund

Durch die Aus der Opt-Out-Variante stellt sich mir die Frage, wie dennoch Nutzer:innen dazu bewogen werden können, der Datenübertragung aktiv zuzustimmen. Den Schalter halte ich für die Opt-Out-Variante als perfekt geeignet, aber ich würde selbst nicht auf die Idee kommen, hierüber aktiv zuzustimmen. Das zeigen auch unsere Daten, dass wir seit dem Umstieg auf deutlicher weniger Ergebnisse haben.

Vorschlag

Anstelle des Schalters könnte nach der letzten These und vor dem Ranking eine Abfrage erscheinen. Die Website https://www.hownormalami.eu/ hat das meiner Meinung nach gut umgesetzt:
grafik

Auf den Mat-O-Wahl übertragen könnte das so aussehen:
grafik

resultsByPartyAnswersToQuestion in die resultsShortTable migrieren

Ich bekomme oft mit, dass die resultsByPartyTable und die resultsByThesisTable gar nicht wahrgenommen, geschweige denn genutzt werden, obwohl sie ja wichtige Informationen enthalten die vor allem die resultsByPartyTable diese Informationen so darstellt, dass sie für die Nutzer:innen interessant sind. Wie ich es mitbekomme, werden die Buttons fast nie geklickt, da auch nicht ganz klar ist, was sich dahinter verbirgt (ist auch schwierig, das in wenigen Worten zu beschreiben und voneinander abzugrenzen).

Was natürlich viel öfter genutzt wird, ist die ausklappbare Beschreibung zu interessanten Angeboten. Meine Idee ist daher, die Tabelle resultsByPartyAnswersToQuestion hier einzufügen anstatt unter dem Ranking. Also ganz unten im resultsShortPartyClamp-DIV ist dann jeweils ein Button "Antworten anzeigen", der die resultsByPartyAnswersToQuestion dieser Partei ausklappt.

Meine Vermutung ist, dass sich Nutzer:innen dann viel häufiger die Antworten einer Partei anzeigen lassen und mit ihren eigenen vergleichen, als das momentan der Fall ist. Unterhalb des Rankings könnte dann weiterhin resultsByThesisTable stehen - idealerweise direkt ausgeklappt, damit sofort klar ist, was das bringt.

Mit den Änderungen, die du in Form des resultsShortPartyClamp-DIV vorgenommen hast, sollte das auch begünstigt werden, oder?

Schnittstelle zur Freinet-Datenbank für den Mitwirk-O-Mat

Hintergrund

Bisherige Idee

Die Idee ist nicht neu, weil sich die meisten Freiwilligenagenturen (FWA), die Freinet schon nutzen (was auf die meisten FWA zutrifft), eine Schnittstelle zwischen den beiden Systemen wünschen. Unsere bisherigen Ideen gingen in die Richtung, die Erfassung der Initiativen-Daten über das Freinet-Formular durchzuführen und die Daten dann so umzuformatieren, dass sie für den Mitwirk-O-Mat (MOM) lesbar sind. Aus mehreren Gründen haben wir diese Idee wieder verworfen, u. a. weil sie nur Extra-Schritte einbauen und keinen echten Mehrwert bringen würde.

Wie Freinet funktioniert

Relevant für uns ist an dieser Stelle Folgendes (hier am Beispiel von Münster, ist aber fast immer gleich): Ich stelle die Filter entsprechend meiner Interessen ein und führe dann die Suche aus. Mir werden alle Angebote, die auf die Kriterien zutreffen, als ungeordnete Liste angezeigt. Wenn ich auf ein Angebot klicke, werden mir mehr Infos angezeigt. Teilweise werden mir die Einrichtung, die das Angebot eingestellt hat, und die Kontaktdaten angezeigt (wie in Münster). Häufig (wie hier in Lüneburg) werden mir als Nutzer die Einrichtung und die Kontaktdaten nicht angezeigt, damit ich erstmal Kontakt mit der FWA aufnehmen muss, die mich dann berät und ggf. für mich den Kontakt mit der Einrichtung aufnimmt. Egal ob mir die Einrichtung angezeigt wird oder nicht: Ich kann mir als Nutzer keine Liste aller Angebote von einer Einrichtung anzeigen lassen, sondern nur die Liste aller Angebote, die auf ein oder mehrere Kriterien zutreffen (und die Einrichtung ist kein Kriterium). Als FWA kann ich mir im Backend aber solch eine Liste aller Angebote einer Einrichtung anzeigen lassen, die Daten sind also vorhanden.

Einbindung von Freinet: In den meisten Fällen wird Freinet als iframe eingebunden (so auch in Münster und Lüneburg). Die Datenbank bietet aber auch drei API's (https://www.freinet-online.de/api/). Der ASB Hamburg bindet Freinet hierüber ein.

Konkrete anstatt allgemeine Ergebnisse

Jetzt haben wir eine neue Idee: Der Grund, weshalb sich die FWA eine Schnittstelle zwischen Freinet und MOM wünschen, ist der, dass die Ergebnisse, die im MOM angezeigt werden, relativ allgemein und unkonkret sind. Es werden keine konkreten Tätigkeiten oder "Stellen" vorgeschlagen (z. B. Buchhaltung oder Fahrdienst), sondern die Einrichtungen/Organisationen/Vereine darüber. Für kleine Initiativen ist diese Sichtbarkeit wertvoll, aber größere, bereits bekannte Einrichtungen haben wenig davon; wenn ich als Nutzer z. B. die AWO vorgeschlagen bekomme und diese dann kontaktiere, dann muss die AWO selbst rausfinden, in welchen ihrer vielen Bereiche ich passe. Besser für die AWO wäre es, wenn ich als Nutzer direkt in einen konkreten Bereich bzw. für eine konkrete Tätigkeit vermittelt würde. Bisher ließe sich das dadurch umsetzen, dass die AWO unsere Online-Umfrage viele Male für jede Tätigkeit ausfüllt. Das hätte aber mehrere Nachteile:

  1. Die Antworten auf die Fragen würden sich für die verschiedenen Tätigkeiten nicht großartig unterscheiden, wäre also unnötige Arbeit.
  2. Das Ranking wäre überfüllt (um nicht zu sagen vollgemüllt) mit Ergebnissen von der AWO (und anderen großen Einrichtungen)
  3. Der Aufwand zur Aktualisierung ist hoch: Wenn ein Bereich im MOM geführt ist, für den zwei Freiwillige gesucht werden, und die gefunden sind, sollte der Bereich wieder entfernt werden. Gleichzeitig müssten ständig neue Bereiche eingetragen und aktualisiert werden. Das wäre aber aufwendig, da die Einrichtungen ihre Daten nicht selbst aktualisieren und einpflegen können, sondern wir als MOM-Team das machen müssen.

Aus diesen Gründen ergibt es keinen Sinn, die Daten für die konkreten Bereiche und Tätigkeiten direkt in den MOM einzutragen. Die Daten hierfür sind aber in vielen Fällen schon da, und zwar in der Freinet-Datenbank. Die Frage ist also, wie diese Daten auf passende Art und Weise implementiert und angezeigt werden können.

Die Idee

Aus Nutzer:innen-Sicht

Ich fülle den MOM wie gewohnt aus und lasse mir am Ende das Ranking anzeigen. Bei meinem Top-Vorschlag klicke ich auf "Weitere Infos ausklappen". Hier erscheint jetzt wie gewohnt eine kurze Beschreibung und neuerdings darunter eine Liste mit den Bereichen und Tätigkeiten, für die diese Einrichtung Freiwillige sucht.

  • Szenario A: Die Angebote sind durch ihren Namen kurz beschrieben. Es sind Links und wenn ich draufklicke, öffnet sich die ausführliche Info-Seite (von Freinet) in einem neuen Fenster
  • Szenario B: Zu jedem der aufgelisteten Angebote einer Einrichtung habe ich wiederum die Möglichkeit, weitere Infos anzeigen zu lassen. Diese klappen dann innerhalb des MOM (also innerhalb der Ranking-Tabelle) als eine Art Steckbrief aus

Aus technischer Sicht

Wenn es für die Einrichtung, die im MOM angezeigt wird, bereits Daten in Freinet gibt, dann werden diese Datensätze verknüpft. Hierfür muss vermutlich manuell gesagt werden: Dieser Eintrag im MOM gehört zu dieser Einrichtung in Freinet

Szenario 1: Über eine API werden die konkreten Angebote einer Einrichtung innerhalb der Ranking-Tabelle angezeigt.
Szenario 2: Die Liste der Angebote einer Einrichtung wird innerhalb der Ranking-Tabelle als iframe (im iframe) angezeigt.

Fragen

Freinet-seitig: Zwar bietet Freinet bereits API's aber vermutlich erlaubt keine dieser die Abfrage, die wir hier bräuchten. Mangels technischen Verständnisses wissen wir aber noch nicht genau, was die Produkt-API bereits kann und würden das als Nächstes direkt von den Freinet-Devs erfragen.

MOM-seitig: Die Frage ist natürlich auch, wie der Mat-O-Wahl diese Daten abrufen und anzeigen kann und wie viel Aufwand es wäre, ihn hierfür aufzurüsten. Hast du da eine grobe Vorstellung, wie aufwendig das werden könnte?

Finanzierung: Wäre nicht das Problem.

iframe mit variabler Höhe ermöglichen

Hintergrund

Neben der Standalone-Variante eignet es sich in vielen Fällen, den Mat-O-Wahl als iframe in eine andere Website einzubetten. Mit einem ganz normalen iframe-Tag gelingt das optimal. Schwierig ist einzig und allein die Höhe des iframes, da diese sich standardmäßig nicht an die wechselnde Höhe des Inhaltes anpasst. Aktuell möglich ist daher:
A) Sehr große Höhe (6000 px) und no-scroll, um Platz für die lange Auswertung zu machen und trotzdem doppelte Scrollbars zu vermeiden: https://bonn-o-mat.de/start/ (Beim Ausklappen mehrerer Thesen in der Auswertung ist der Inhalt trotzdem zu lang)
B) Höhe gerade so einstellen, dass mobile Ansicht Platz hat (1000 px): https://www.lebendiges-lueneburg.de/mitwirk-o-mat/ (Problem: doppelte Scrollbars in der Auswertung)

Konkretes Anliegen

Es fehlt die Funktion, dass sich die Höhe des iframes automatisch an die Höhe des Inhaltes anpasst. Dafür scheint es auf jQuery basierende Lösungen zu geben: https://stackoverflow.com/questions/9162933/make-iframe-height-dynamic-based-on-content-inside-jquery-javascript
Zur Umsetzung fehlt mir jedoch das Know How.

csv2array mit csv2json ersetzen

Hintergrund

  • Im Moment wird die jQuery-Bibliothek https://github.com/evanplaice/jquery-csv benutzt um CSV-Dateien in Arrays umzuwandeln.
  • Die Version funktioniert aber könnte ein Update brauchen. So wird dort z.B. auf https://github.com/vanillaes/csv als Alternative verwiesen.
  • Zusätzlich arbeite ich immer mit Arrays mit teilweise verschachtelten Index[i][j]
  • JSON-Objekte lassen sich besser lesen und ansprechen, z.B. fragen.wertung[i] und fragen.details[i]

Ziel

  • Die CSV-Arrays in (JSON)-Objekte umwandeln
  • z.B. über eine andere Bibliothek oder über var json_string = JSON.stringify(json_arr);
  • Achtung! Das wird eine Menge Code-Änderungen nach sich ziehen, da bisher auf die Arrays zurück gegriffen wird.

Mailto-Link in der Ergebnisanzeige

Die Idee habe ich aus dem Klimafinder (https://klimafinder.netlify.app/). Wenn du alle Fragen beantwortest (ganz egal wie), kommst du zum Ranking, klickst dann auf irgendein Angebot und siehst den Button "Connect me". Dahinter steckt ein komplexer mailto-Link. Wenn du draufklickst, öffnet sich dein Standard-Mail-Programm mit einer vorformulierten Mail mit folgendem Inhalt:

  • Variable Empfänger:in(nen)
  • Variabler Betreff
  • Standard-Anschreiben mit einzelnen variablen Inhalten
  • Liste, mit welchen Angeboten ich welche Übereinstimmung hatte (also mein Ranking in Textform)

Für einen Wahlhelfer, also den klassischen Wahl-O-Mat Use Case, braucht es so etwas natürlich nicht, aber für den Mitwirk-O-Mat wäre das umso sinnvoller. Die Nutzer:innen sollen ja, nachdem sie das Ranking sehen, nicht direkt abspringen, sondern Kontakt aufnehmen. So eine vorformulierte E-Mail würde die Hürde dafür sicherlich verringern.

Es könnte auch eingestellt werden, an wen die E-Mail gehen soll, und davon abhängig natürlich der Inhalt:

  • Direkt an den Verein, um zu fragen, wie/wo/wann man sich beteiligen kann (dann bräuchte es die Ranking-Liste mit den Übereinstimmungen mit den anderen Vereinen nicht in der Mail)
  • An die Freiwilligenagentur, um Interesse an einem konkreten Angebot mitzuteilen und einen Beratungstermin hierzu zu vereinbaren. Gleichzeitig wird das Ranking (z. B. die Top 10) mitgeschickt, damit die FWA mehr über die Person weiß und gezielter beraten kann, nicht nur zu dem einen konkreten Angebot
    • Hintergrund: Für viele FWA's ist die klassische Beratung trotz digitaler Tools ein zentraler Baustein und einige FWA's müssen auch nachweisen, dass sie jährlich soundsoviel Beratungsgespräche geführt haben, um ihre Förderung zu bekommen. Der Mitwirk-O-Mat sollte diesen FWA also mehr und nicht weniger Termine bescheren.

Ich könnte mir das als weiteres Add-On vorstellen, mit einer Datei, wo ich die ganzen Strings inkl. Variablen eingebe (Betreff und Anschreiben). Hier wähle ich auch aus, ob die Mail an eine (in der parteien.csv zu hinterlegende) E-Mail-Adresse des Vereins oder an die (in der Add-On-Datei zu hinterlegende) E-Mail-Adresse der Freiwilligenagentur gesendet werden soll. Daraus werden dann die mailto-Links für die Buttons generiert, die in der Ergebnistabelle angezeigt werden.

Was ich mir schwer vorstelle, ist die Übertragung des Rankings in den E-Mail-Text. Wenn das nicht gehen sollte, wäre das zwar schade, aber das Feature wäre trotzdem sinnvoll (theoretisch könnte man bitten, dass der Nutzer ein Screenshot vom Ranking macht und in die Mail einfügt).

Ich weiß nicht, ob der Klimafinder Open Source ist, vielleicht würde ein Blick in deren Code auch helfen.

Platz 1 in der Ergebnistabelle standardmäßig aufklappen

Einige wichtige Features werden ja in der Ergebnistabelle erst zu sehen sein, wenn man sie ausklappt. Aktuell ist es nur die Beschreibung, aber es sollen ja die Freinet-Angebotsliste und der E-Mail-Button (und ggf. Telefon-Button) hinzukommen. Umso wichtiger ist es, dass durch das UI direkt erkennbar ist, dass ich da was ausklappen kann und dass da wichtige Dinge stehen.

Meine Idee wäre, dass der 1. Platz in der Liste standardmäßig ausgeklappt ist.

Vorteile:

  • Ich sehe auch als unaufmerksame:r Nutzer:in direkt, dass ich mir mehr Infos anzeigen lassen kann und was sich dahinter verbirgt. Dadurch werde ich angeregt, mit dem 1. Platz zu interagieren und auch bei den späteren Ergebnissen die Beschreibung auszuklappen.

Nachteile:

  • Wenn der Verein nur eine ganz kurze Beschreibung hat, keine Einträge aus Freinet und keine E-Mail oder Telefonnummer hinterlegt hat, dann denke ich, dass es bei allen Vereinen so aussieht, obwohl bei Platz 2 schon viel mehr stehen könnte. Die Gefahr besteht aber auch, wenn ich Platz 1 manuell ausklappe (was wohl die meisten machen werden).
  • Wenn da viel steht (längere Beschreibung, mehrere Einträge aus Freinet), ist auf einem Smartphone bereits der ganze Screen damit bedeckt und ich sehe nicht sofort, dass es unter dem 1. Platz noch weitergeht. Daher wäre es vermutlich schlau, wenn sich differenzieren ließe, ob das Feature auf allen Geräten oder nur bei bestimmter Screen-Weite wirken soll.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.