Awesome... thank you Daniel.... this is really useful information. I'm
still digesting it though ;) Thanks !!!
On 19/06/2014 11:31, Daniel Beck wrote:
I think your comments were primarily targeted at his experiments with the
navigation, right? Or maybe it was both the navigation and the restyling of
the tables?
Right, my response was only about the "promotion" of some items that are always
shown to the top bar, not about the client-side list view improvements. While we already
have sorting, filtering might be really interesting if it performs well. I really only
responded to the following:
[Gus Reiber:] As a possible remedy to that bit of awkwardness, I am looking at
pulling some of the 'action' link list items out and displaying them in a
global toolbar sort of context. Jenkins Management, in particular seems like it
really should be clearly separated as a global set of actions, and not bound to
any particular build or custom view.
It also seems I misunderstood that part quite badly, I can no longer find where Gus wrote
that the new "prominent items bar" should always contain the same items!
I wonder would it make sense to take a step back and draw a map of the current
navigation and how it changes depending on where you are in Jenkins? Armed
with that, then maybe we can make some proposals?
Navigation is essentially the breadcrumbs bar and the sidepanel. The problem in
understanding them probably results from how complex it is: Jelly allows
including other Jelly fragments, Stapler decides what get loaded at all,
Jenkins behaves as if some items are implied (the default view), and by
overriding a Java class you can also override resources. Some resources:
* http://stapler.kohsuke.org/what-is.html
* http://stapler.kohsuke.org/reference.html
Breadcrumbs are created by iterating over the items shown in the URL. If it's
not in there, it's missing (except if on a config page, that can also show up
there with its sections). Depending on which interfaces the items implement,
you get a context menu (down arrow) and/or a children menu (right arrow).
The sidepanel is entirely provided by the currently active item:
* On the home page, it's the "Jenkins" object.
* In a folder, it's the folder.
* In a view, it's the view.
* In a job, it's the job.
* Other special pages, like plugin manager or security configuration, provide
their own sidepanel.
However, these implementations can reference other objects that may or may not
show up in the URL, have optional items, etc.
As an example, this is how the home page's sidepanel is built (# indicates a
Jelly file being read, - an item created, * another remark) to give you an
introduction in both reading these files, as well as what's involved in
building the sidepanel for the home page:
# core/src/main/resources/jenkins/model/Jenkins/sidepanel.jelly:
* Jenkins just forwards to its primary view in determining the items to be
shown
# core/src/main/resources/jenkins/model/View/sidepanel.jelly:
# Optional: Owner's tasks-top.jelly: If the view's owner/parent has a
fragment for tasks to show at the top, include it. Not in the case of Jenkins.
# Optional: Owner's tasks-new.jelly: Show the fragment of the 'owner' that
shows the 'New Item' link. The included file can also be empty, removing the
link.
- If there's no such fragment provided by the owner, show the default
'New Item' link. Backwards compatibility if I had to guess.
- Create the 'People' link (URL depending on whether it's the 'All' view
or not: If it's not, add the view to the URL, resulting in
.../view/Foo/asynchPeople).
- 'Build History' link.
* If the view is editable (the default 'All' view is not, but another view
can be selected to be default):
- Show 'Edit View'
* Can the view be deleted (the default view cannot, but others usually can
be unless the view's owner has some code that prevents it)?
- If so, show 'Delete View'
* Are there fingerprints recorded by Jenkins? If so:
- Show 'Project Relationship'
- Show 'Check File Fingerprint'
# Optional subtype's sidepanel2.jelly: Subtypes of 'View' can provide
additional items here without having to override this entire sidepanel.jelly
they'd otherwise inherit. This is a bit like the strategy pattern if you know
that from Java.
- If you use Nested Views ("TreeView" in the code), this is where 'New
View' is added.
# core/src/main/resources/lib/hudson/actions.jelly: Display any actions
associated with the current view
* The view gets asked for actions to be displayed, and gathers actions
to be shown in a view from its owner (jenkins.model.Jenkins#getViewActions())
and adds its own (hudson.model.View#getActions()). This is where plugins can
just add arbitrary stuff by e.g. extending TransientViewActionFactory
- If the action defines an icon, icon and display name are shown and
link to the action's URL.
--
You received this message because you are subscribed to the Google Groups "Jenkins
Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.