Git Product home page Git Product logo

accessibleshiny's Introduction

davidruvolo51 profile

Hello ๐Ÿ‘‹

I'm interested in web-based applications that communicate research results using interactive visualizations. I build web apps and tools for use in research and clinical environments. My favorite tools are R, R's Shiny app framework, React, D3, and more.

Current Projects ๐Ÿ˜Ž

Here are some of the things that I am working on. For more information, checkout my R universe page davidruvolo51.r-universe.dev

Latest Posts ๐Ÿ““

I occasionally write about the things that I am working on.

You can find more @ github.com/davidruvolo51/shinyAppTutorials.

accessibleshiny's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

accessibleshiny's Issues

Datatable Checklist

To do list for the datatable function.

  • css: integrate css from other repository. Maybe sass files would be better?
  • css for cell values: using the new helper function cell_attribute, create corresponding css classes and/or evaluate the naming system for classes. This will need further discussion as to if this is appropriate for the scope of this package as conditional formatting is creates more accessibility concerns.
  • fix logic for helper functions: There's likely a better way to handle the evaluating the classes and data types of cell values.
  • integrate module testing: integrate the test script from the other repo
  • Create wiki: create a new wiki for this package and add documentation for this function

Import Listbox component

Issue #20 of the shinyAppTutorials repository, started the development of the listbox component for shiny. This component is an alternative to select input, which is a bit hard to style using CSS. Import this component into this package.

There are few things to improve on.

  • CSS Naming: standardize the classnames and align them with the package-wide system
  • Scroll: when the menu is opened, the scroll state is a bit wonky. The focusing to selected item and of new items can be improved.
  • Adjust height: make sure menu opens to a large enough height to avoid scroll. This would eliminate the need for extra voice commands, navigation, etc. (Consider using relative positioning rather than absolute with overflow)

Further Improvements to `datatable` function

The following improvements to the datatable are needed.

  • Improve the naming convention of helper functions: this is probably a bit far down the list of "needs", but it is probably better to get this done early. The names of helper functions could be improved to make them more memorable. Rethink the names of the functions and come up with a naming system that could be reused in other component.s
  • Add more options to control the styling of the table output: more options to control the rendering of style (i.e., css attributes) is needed for non-shiny usage. For example, disabling the rendering of classes and injecting the html dependencies altogether. This would be useful if a user needs a simple html table generator
  • Improve the handling of component defaults: the current method is not ideal. Instead, the style and options arguments should passed in through .... A new argument validation function will need to be written. Consider moving the css argument into style. Move documentation for these arguments to a new section

Develop Accordion Component

An accordion component is useful for collapsing and expanding content. The following list provides the steps required to develop this component.

  • Create helper functions: like the datatable function, create child elements using secondary functions. Create a function that builds the heading element and the collapsible section, as well as validate props (i.e., optional arguments)
  • Create icons: the accordion's state is updated using a toggle (i.e., open/close button). The button is a plus icon with a filled background. Create a new functional component that will be used to render svg icons in the browser.
  • Define CSS: define the default theme for the accordion. (use the travel app example as the base)
  • Write Unit Tests: In a new file in tests/testthat create a series of tests that evaluate the html markup of the accordion component.
  • Develop JavaScript Functions that open/close the accordion

Improvements to Current Components & New Features

It has been a while since I've worked on this package. Since the last updates, I have rebuilt the browsertools package and have developed the rheroicons library. These packages should be integrated into accessibleshiny in favor of lightweight icons and optimized JS code. In addition, the following changes need to be made.

  • Rename the inst/assets to something more memorable and to prevent conflicts with other packages.
  • Expand use_* function to allow for the following.
    • setting the document language
    • setting the document direction
    • setting the document title
    • setting open graph data Will not implement
  • Update accordion component
    • replace icon with rheroicons
    • Use Shiny input bindings for toggle to handle the opening/closing of the card. The current method does not find elements that are rendered dynamically.
  • Updates/Checks for Progress bar
    • Consider alternative rendering methods for progress bar. There are some instances where page rendering triggers a complete redraw of the progress bar.
    • Consult with docs regarding updating aria props
  • Datatable component
    • Consider options for multiple column headers
  • [ ] Integrate Parcel 2.0. (This will be ongoing as parcel2 is still in beta)
  • [ ] Update dev dependencies

Performance Concerns & Optimizations

Generating the markup does a fairly nice job with smaller datasets. However, there are noticeable performance issues for larger datasets (i.e., > 1000 rows). The ideal use of the datatable function is to prevent production-ready, accessible datatables. It isn't really ideal for larger datasets as data tables in production apps should use smaller datasets. Regardless, the evaluation of cells and corresponding markup should be optimized. Since purrr is already a package dependency, markup generating functions should incorporate map functions.

TODO

  • Reduce the number of evaluations that are performed
  • Integrate better mapping functions for generating cell-level markup

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.