Ernesto Reinaldo Barreiro <[email protected]>
7:35 AM (1 hour ago)
to dev
Hi all,

  I have been working on a set of additions to wicket-extensions, in the
pull request https://github.com/apache/wicket/pull/1637. The pull request
is a work in progress (still a draft), and many more changes will follow.
Still, I would like early feedback on both the components themselves and
whether they belong in wicket-extensions in their current form.

  Everything is new API for 11.0.0 (@since 11.0.0), works under a strict
Content Security Policy (no inline script or style anywhere), and comes
with WicketTester tests, QUnit tests and examples. mvn clean verify
-Pjs-test is green. The branch has ten commits, each one usable and
reviewable on its own:

  1. DynamicDataTable, with ProgressBar and ResizableColumnsBehavior (
https://github.com/apache/wicket/issues/1635)
     A table that renders only the <table> and its header on the server.
The rows come as JSON from the table's own endpoint, or are pushed over a
web socket, and every cell is a column template evaluated in the browser (a
small built-in {{path}} engine, or Handlebars). Actions in the cells are
plain markup
     dispatched by the table, which looks the row up by its key, so a click
on a row that changed or went away since it was rendered no longer targets
a component that does not exist. Features:
     - paging, sorting, typed row keys and a selection kept on the server
(including "select all rows of the provider")
     - toolbars like DataTable's, a slot for a filter, CSV export
     - an overlay for edit forms and confirmations, and a veil while the
table's requests run
     - icon row actions and toolbar actions (any IIcon, see 6.)
     - resizable, movable (mouse, pen and touch) and hideable columns. The
layout can be kept through a pluggable IColumnStateStore (session,
database, ...), with columns identified by unique ids.
     - pushing single rows, pages or refreshes from background threads
     - ProgressBar: a native <progress> with a label, striped,
indeterminate when the value is null; also usable as a column
     - ResizableColumnsBehavior also works for a plain DataTable.

     The column templates are trusted markup authored by the developer; the
Javadoc says so where it matters.
  2. Two fixes found on the way
     - The veil script could not be compiled by a second build without
clean (https://github.com/apache/wicket/issues/1631).
     - The web socket setup script still called jQuery.extend, so a
WebSocketBehavior failed on a page without jQuery (
https://github.com/apache/wicket/issues/1640).
  3. CollapsiblePanel (https://github.com/apache/wicket/issues/1636)
     A title and a body the user can expand and collapse, rendered as
native <details>/<summary>: works without JavaScript and is keyboard
accessible. It can report every toggle via Ajax, so the panel keeps the
user's choice when it is rendered again.
  4. FloatingPanel
     A window with a title bar, a close button and any body, for content
shown on top of a page or a component, such as an edit form.
  5. ClipboardCopyBehavior
     Copies a text to the clipboard on a click or double click and shows a
check mark. It also works for markup rendered in the browser
(data-wicket-copy attributes).
  6. Icons: IIcon, SvgIcon and FontAwesomeIcon
     IIcon is an icon that renders its own markup, so components can take
any icon. FontAwesomeIcon has the 2001 solid icons of Font Awesome Free as
CSS class names, and SvgIcon has the same icons as inline SVG, needing no
font or style sheet.

     Licensing: the icons are CC BY 4.0, which is Category B. Wicket ships
no Font Awesome content: SvgIcon reads the SVGs at runtime from the Font
Awesome web jar the application puts on its class path. Only the examples
bundle the web jar, and they name it in their NOTICE and, through
appended-resources, in
     their LICENSE. I would appreciate a second pair of eyes on this part.
  7. Shared color themes (https://github.com/apache/wicket/issues/1638)
     The colors are CSS custom properties (--wicket-theme-*), defined once
by a theme class. Eight themes ship (including a dark one), and
ThemeBehavior puts a theme on a page or a single component. An application
defines its own theme as a CSS class setting the same properties.
Components read the properties
     only inside a theme, so an application that does not use themes sees
no change.
  8. The themes in more components (
https://github.com/apache/wicket/issues/1645, part of
https://github.com/apache/wicket/issues/1639)
     ModalDialog's DefaultTheme, AutoCompleteTextField, TabbedPanel (with a
new opt-in TabsStyleBehavior: tabs, pills or underline) and
UploadProgressBar follow the themes. The only visible change for existing
applications is that UploadProgressBar now renders the ProgressBar's bar,
so CSS written for its old
     .wupb-* elements no longer applies. The commit message describes how
to keep the old look. DataTable, Palette, the trees and a few others remain
open in https://github.com/apache/wicket/issues/1639.
  9. Examples
     An "Extensions" index on the home page gathers the examples built on
wicket-extensions. The DynamicDataTable example runs over a thousand
contacts with live progress bars, editing, deleting, a jCard download,
column chooser, movable columns and a persisted layout. There is an Icons
page, and a theme editor
     that edits a theme's colors with a live preview and gives the CSS
class to copy. The ajax examples of the themed components have a theme
drop-down.

  Questions for the list:
  - Is this the right home for these components, and is one pull request
fine, or would you rather review them as separate pull requests (one per
commit, more or less)?
  - Is the Font Awesome / CC BY 4.0 handling acceptable under the ASF
third-party policy, and should the examples' LICENSE list their other
bundled libraries (jQuery, ...) as well?
  - Any concerns about the names and packages
(org.apache.wicket.extensions.theme, ...markup.html.icon,
...repeater.data.table.dynamic, ...), or about defaults such as the table
keeping no column layout unless a store is set?

  Thanks in advance for any feedback.

-- 
Regards -
Ernesto Reinaldo Barreiro
Apache Wicket Committer
Emerging artist
https://www.instagram.com/reinaldo.barreiro.art/

Reply via email to