My New Approach for Sharing XPages Controls and Extensions

Over the past few years I have shared a handful of controls and techniques on my blog, and most of these I have made available on github in one way or another. Originally I was creating a separate github project for each one such as EmailValidator, PhoneNumberControl and the Messages Controls. After these few I decided it would be more efficient to create a single project that I could put them all into, so I then began to contribute them via my GregorbyteXspLibrary.

From time to time I had a few comments like “This would be a nice addition to the Extension Library”. However whenever I found time to work on open source projects, it always seemed to be a higher priority to work on sharing something new instead of doing more work on something I had already shared.

It would mean the extra step of moving the work from GregorbyteXspLibrary into the ExtensionLibrary, refactoring package names, testing it all again, updating copyright licensing, and then creating a pull request to have it merged into the Extension Library.

Even after that there would be no guarantee of pull requests being accepted into the OpenNTF repository. So the work maybe would just sit there and seem like a wasted effort. I thought “well maybe people would be still be able to install my ‘fork’ of the Extension Library?”, but then I could see how this get messy when future IBM releases come out with newer Extension Library versions.

The short story: I just wasn’t feeling that clear on how I should approach it so I just left it as it was.

What about ExtLibX?

I had totally forgotten about ExtLibX.

ExtLib is the main Extension Library that we all know and love, but there is also the ExtLibX which is the ‘eXperimental’ Extension Library.

The ExtLibX project was created exactly for the purpose of submitting experimental controls. It is a bonus extension library that people have the option of installing alongside the main Extension Library.

The idea is that after the experimental controls have gained acceptance as a “good idea” they could be migrated into the main Extension Library.

The ExtLibX originally contained things like the Relational controls (which are now part of the core ExtLib), and currently has some work sitting in it for Bootstrap4.

So now that I remember about ExtLibX, I have finally come up with a strategy for sharing controls that I am confident in.

My New Strategy for Sharing Reusable Controls and Techniques!

  • My existing camac/GregorbyteXspLibrary will remain as it stands now, with no further development
  • I’ve created my own fork of the experimental extension library: camac/XPagesExtLibX
  • I’ll share all my new controls and techniques through camac/XPagesExtLibX
  • I’ll prepare install-able releases so that people can use the controls straight away if they want to.  This will hopefully help me get some feedback / bug reports / suggested improvements.
  • If I get feedback that a control or technique is useful and is working without problems, I will prepare a pull request for that control so that it can be reviewed for acceptance into the main OpenNTF/XPagesExtLibX project.
  • If IBM decide that control is useful to everyone, they are then able to migrate it from ExtLibX to ExtLib  at there own desire as they have access to both ExtLibX and ExtLib
  • When I get time I will move the controls from GregorbyteXspLibrary over to ExtLibX

Overall I am pretty happy with this new strategy as enables me to share controls so that they are immediately usable, but also still have a pathway to possibly be included in the ExtensionLibrary.

I am hoping to share a few controls and techniques in the next few months that will be a bit more useful for day-to-day XPages work, and also a few extended versions of some standard controls that make them a little bit more developer friendly.

I’m hoping to release the first version in the next week which should contain

  • Some modified Table Controls
    • Modified table renderer to have proper <thead> <tfoot> <tbody> structure.
    • <th> control
  • Master / Slave checkbox controls
    • easy bulk record selection within repeat controls
    • select all / deselect all functionality
    • automatic row-styling based on selected checkbox
    • ability to use the whole row as a click target for that row’s checkbox
  • A JDBC Connection provider that loads configuration information from Notes Documents in a config database (either current database or centralised database)

If your interested in any of these above please let me know in the comments below!
Do you have any other ideas for other Controls? I have a few more in the pipeline. Let’s see if we can breathe a bit of life into the Extension Library!

You may also like...

2 Responses

  1. I would skip the extlibx approach. We have our update sites in place and extlibx got items that are half baked (e.g. bootstrap 4 support) so in a complete evaluation we would probably never place in in a Production environment.

    Small plugins that we can review are the way to go I would say.

    • camerongregor says:

      Thanks for the feedback Patrick, I am very keen to find out what people will actually be able to utilise. If anyone else has a similar feedback please jump in with a comment!

      My gut feeling would have been that companies would more likely to trust an ‘OpenNTF’ project than one of my own personal ones. But from what you say it might not be the case.

      So for example do you think your company would have utilised my previous project ‘GregorbyteXspLibrary’ that is only supplied via Github?

      What about if I could create an installable ExtLibX feature that excluded the bootstrap4 plugin? as it currently stands, the bootstrap4 work is in a separate plugin so it could be totally optional.
      The other plugins in the ExtLibX library are completely blank, so effectively I am adding to a blank canvas if you exclude bootstrap4.

      My end goal is to reduce my workload in being able to share controls as well as provide a easy road for them to make there way eventually into the Core Extension Library.

Leave a Reply

Your email address will not be published. Required fields are marked *