Decide on the new UI for the following issue
#2914759: Proposal to use Lit / web components for building Drupal’s administrative UIs
#2913628: Proposal to use Vue.js for building Drupal’s administrative UIs
#2913321: Proposal to experiment with React for building Drupal’s administrative UIs
Link to Balsamiq doc https://drive.google.com/open?id=0B795pTGHJsoxbmh4Zno3Szhkb28
Proposal
Stage 1
1. Create a version of Drupal's /admin/reports/dblog in the framework / solution of choice.
2. Demonstrate how it is possible to override the themeable output.
3. Report on important issues of flexibility, performance and extensibility
Stage 2
1. Demonstrate options for enhancement from the ecosystem that the framework / solution of choice can tap into.
2. Demonstrate alterations to the original design to include elements of:
a) content expansion, "expand-in-place"
b) Search box / filtering
c) active updates for log messages, "polling", Twitter-style "X new log messages" user interactions.
It was recommended that the page could be converted to be read only by remove form API actions that would allow you to select and delete log entries.
## Initial page load
- Show 50 logs lines
- Sorted by date DESC
- Not filtered by type
- Not filtered by severity
## Features
- Filtering is using the Facet approach, so you can combine multiple types and/or severities
- Filters has a "Show all" button when needed (reset filter)
- There's a reset button to clears the complete log
- Individual log lines can be removed
- All visible lines can easily be selected
- Add a search to search inside the message
## State
If the user returns to the page it's filtered like it was when the user left the page
Copied from #2913321-75: Proposal to experiment with React for building Drupal’s administrative UIs
Comment | File | Size | Author |
---|---|---|---|
#21 | dblog3.png | 62.97 KB | attiks |
#19 | bdlog_ui_v2.png | 65.59 KB | attiks |
#2 | DB Log UI.bmpr_.txt | 64 KB | attiks |
Comments
Comment #2
attiks CreditAttribution: attiks at Attiks commentedAttaching Balsamiq file
Comment #3
Chi CreditAttribution: Chi commentedWhat is the use case for removing individual log entries?
Comment #4
droplet CreditAttribution: droplet commentedOne of the most important parts is to demonstrate "UI overriding/extending" (the Drupal Core way, don't kill a kitten. and no NODEJS on server side). It demonstrated how to avoid overhead (on the resources loading).
Other parts, we can checkout TodoMVC & HackerNewsClones to do a comparison.
my list
- demonstrate Theme part
- demonstrate Routing
- demonstrate overriding/extending
Not in my list:
- (CRUD really not a must IMO, checkout TodoMVC)
1 demo for normal module UI
1 demo for overriding/extending the UI above
Comment #5
attiks CreditAttribution: attiks at Attiks commented#3 Good question, was just as an example, but might come in handy for people to removed one/sone logs without the need to clear the whole log. I'll remove it when I have the time to update.
#3 Very good points, thanks
Comment #6
kevinquillen CreditAttribution: kevinquillen at Velir commentedHow about an enhancement that lets you select 1 log item, and add a 'solution' to it (be it an admin note + link to d.o or StackExchange), permanently store that log item and in the future, flag matching error messages in the UI as having a potential previous fix. This would add some interactivity beyond the basic filters we already know, add a useful feature, and per Chi's comment - store a log item for reference as an action.
Comment #7
neclimdulAwesome. Very exciting.
The cooler side of my brain is reminding me that the React issue is allowing comments till the 23rd and we should be mindful of that and the process the core team set forward before rushing too far though.
Comment #8
webchickDiscussed this issue on today's UX meeting. Recommendations were:
Also, from our understanding, the Form API parts are a whole rats' nest, which is why this screen was chosen vs. something like admin/content. So would recommend descoping the bulk select + delete items from the prototype.
Comment #11
webchickAdding @yoroy and @benjy to the credit list for this issue, since they were part of the above discussion.
Comment #12
cosmicdreams CreditAttribution: cosmicdreams commentedComment #13
cosmicdreams CreditAttribution: cosmicdreams commentedComment #14
droplet CreditAttribution: droplet commentedAlso,
A fair comparison should use SAME THEME MARKUP as the current DBlog without Views classes. Or the same markup structure. For example, web components may use
CUSTOM-TR
representstr
tag is acceptable. (But try to avoid it IMO)Less or More markups, we should count that as framework limitations. (e.g. what @effulgentsia cares #2909481: JavaScript VDOM library evaluation: components returning multiple root nodes.)
Seems like we have to close this first, haha: #2915314: No spaces on icons' classes
Comment #15
benjy CreditAttribution: benjy at Unearthed commentedI wasn't part of that discussion :) - maybe you confused me with someone else?
Comment #16
dawehnerAs part of playing around with my solution in elm I realized the following bits:
This has an issue to be actually practically useful. You want to filter quickly the entries you currently see, but then have also an HTTP request running in the background fetching additional entries which are valid for your current filter criterias.
I think its really nice to provide something like acquia's hosting interface, aka. new messages are streamed in, so you can see them directly,
especially helpful if you filter by severity. This is totally possible, but it requires work on the server side though.
At least for me I have no doubt that any framework/approach can filter/sort nice, can apply things in real time and what not, but I think the actual problems are:
Comment #18
webchickOops, my bad. :D Sorry, @benjy!
Comment #19
attiks CreditAttribution: attiks at Attiks commentedLink to Balsamiq doc https://drive.google.com/open?id=0B795pTGHJsoxbmh4Zno3Szhkb28
Updated based on #8
Comment #20
attiks CreditAttribution: attiks at Attiks commented#8 Link to the UX meeting video: https://www.youtube.com/watch?v=KJ9QMjX2PWI around 16 minutes
Comment #21
attiks CreditAttribution: attiks at Attiks commentedAdded real values for filters, keep in mind that type might be a real long list
Comment #22
cosmicdreams CreditAttribution: cosmicdreams commented@Attiks I think we want to exclude the "Clear all logs" button from the design you posted.
Comment #23
dawehnerThe show all logs button seems also quite, well let's say, not really working in reality :)
Comment #24
fgmSomething I did not seem mentioned is the fact that this UI should both /also/ work with JS disabled and remain accessible, should it not ? Not sure whether this goes on this issue or on the respective React/Vue/WC issues.
Comment #25
dawehnerAt least for me the approach to do that would be to have a frontend router taking over the page completely, so the backend doesn't have to worry about that.
Comment #26
attiks CreditAttribution: attiks at Attiks commented#24 I think none of the solutions work without javascript, also no idea what the consequences are for screenreaders.
Comment #27
fgm#26 that's what I think too, and it means we do need to add a noscript behavior, which may impact what we put in the server-side markup, to enable these reactive behaviors as a progressive enhancement.
Comment #28
tacituseu CreditAttribution: tacituseu commentedMake them use
Views
on server side for filtering and getting results (REST export
)./ducks ;)
Comment #29
marcvangendre #24 - #27: We had a blind person in our office recently, demoing his screen reader. We didn't get into much detail on the topic of JS, but the takeaway was that screen readers do support JS (http://a11yproject.com/posts/myth-screen-readers-dont-use-javascript/). You do have to take care of accessibility when building your application though; here's a good article on client-rendered accessibility.
I'm not sure if the choice for a JS framework (React, Vue, whatever) makes much difference when it comes to accessibility. It's mainly a matter of generating semantic, accessible HTML, placing ARIA attributes where needed, and JS for managing focus and notifying the user when content is dynamically updated. Every framework should be able to do that, I suppose... But I might be wrong.
Comment #30
andrewmacpherson CreditAttribution: andrewmacpherson as a volunteer and at Annertech commentedRe: #29 - thanks @marcvangend, that's pretty much correct.
Tagging this for review later on, but I think much of the accessibility review will be done as part of an implementation issue. So far, I haven't seen anything in this design that we can't convey in an accessible way. The exact approach can wait until we have a working code prototype.
For example, we'll need to convey something like "Now showing 8 results for type: PHP severity:warning", but whether to use
Drupal.announce()
or a dedicated ARIA live region is something we can decide later. A visible now-showing summary message might be useful too.Similarly, we'll want to convey whether a particular filter is active while a user is focused on a button. Matching the visual style with
aria-pressed
is the typical way to achieve this. The newrole="switch"
from ARIA 1.1 may be appropriate too.The designs don't show a waiting/thobber widget yet. Depending how that looks visually, we could:
aria-busy
, oraria-live
region which announces "fetching.... done" messages, orWAI-ARIA 1.1 introduces an
aria-current
property, which can make the pagination links more robust. In fact, we could use that on pagers everywhere - see #2893640: Modernize ARIA usage, in line with ARIA 1.1 and the ARIA Authoring Practices guide..It's more accurate to say that web browsers support JS, and communicate changes in the DOM to screen readers. The screen reader isn't handling JS itself, just reporting what it gleans from the browser. There's a good overview of how screen readers work in Accessibility APIs: A Key To Web Accessibility from Smashing Magazine. In the modern way of doing things, the browser and assistive technology communicate with each other via an accessibility API provided by the OS. Some screen readers (e.g. JAWS) also still employ a historical approach to access the browser DOM directly, but modern browsers' security/sandboxing are moving to prevent this.
Comment #38
nod_