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/
