Time marches on and with that time we seek to improve upon what we have created. So has been true of the Bootstrap framework (getbootstrap.com), first finding its way to Moodle in version 2 via a contributed plugin (moodle.org/plugins/theme_bootstrap) by Bas Brands, David Scotson with contributions by others. Then it became a core base theme, ‘Bootstrapbase’ alongside the existing ‘Base’ theme with a child theme of ‘Clean’ in Moodle 2.5. In Moodle 3.2 the Boost theme arrived encapsulating an alpha version of Bootstrap V4. Between this time the contributed ‘Bootstrap’ theme was updated to Bootstrap V3 and a few themes like my Shoehorn theme (moodle.org/plugins/theme_shoehorn) depended upon it either directly or indirectly. Finally in Moodle 3.5 Bootstrap V4.0.0 stable was applied (the current stable version of the framework is 4.1.3).
This passing of time and the maintenance cost of maintaining two themes sharing the same framework at different versions has given rise to a new core plan for themes. There are Moodle trackers for this but the principle read and discussion can be found on the ‘Themes’ forum: moodle.org/mod/forum/discuss.php?d=373899 – and this is what this post is really about.
Moodle™ is a registered trademark of ‘Martin Dougiamas’ – moodle.com/trademarks.
Other names / logos can be trademarks of their respective owners. Please review their website for details.
I am independent from the organisations listed above and am in no way writing for or endorsed by them.
All drawings and images are my own.
Everyone on this planet (or who started here and is now working in space), has a view of things. That view is based upon experience which is based upon the things we do over time. Each view is slightly different because of the singular given perspective of an individual at any one moment in time. In any given specialism an individual can have more experience contributing to their view of that specialism than another individual. That view can be based upon both good and bad experiences. For any given problem in a specialism certain experiences assist in the solving of that problem. An individual may or may not have all the experiences required to form a complete view in solving that problem. It can be the case that no one individual has all the experiences required but a collective group does.
What is proposed and what there could be
Making the Bootstrap version 4 framework work as a basis for themes in Moodle is one such problem. One of my specialisms is ‘Software engineering’ which is applicable to this problem and I have a ‘view’ on its solution. This is my view underneath my interpretation of Moodle HQ’s (‘core’) view:
The current ‘core’ view is that the Bootstrap frame work should be encapsulated in a complete theme for which other themes can be child themes of it. This feels to me like the Henry Ford paraphrased statement of “You can have any color as long as it’s black.” (please see ‘Any customer can have a car painted any color that he wants so long as it is black.’ under ‘My Life and Work (1922)’ on en.wikiquote.org/wiki/Henry_Ford). That this dual encapsulation of two different entities will be restrictive because other theme developers will have to first unpick the Boost features that they do not want before adding their own. It feels like a hybrid that should not exist, like an ‘Atomic genetically modified Swan’:
but it does, just sitting there oblivious to its surroundings. Maybe we need such a creature to gather up and filter the plastic from our seas. Then such an entity would be complete and fulfil its purpose as a single object.
On the flip side I can understand for maintenance that incorporating Bootstrap V4 within Boost will be less work for core to maintain the theme, but that should not be a reason to get the architecture wrong. What about Bootstrap updates? What happens when version 5 is released? What happens if another framework is wanted? Yes, Bootstrap v4 can be kept fairly pure of Moodle changes in Boost, but that is not human nature, over time little oddities will creep in and glue the two together.
Humans perceive the world as an entity that needs to be broken down into smaller manageable encapsulated objects that have a given defined purpose and attributes. You employ your senses to analyse the world around you and process the information they provide to form understanding of the objects you perceive. All objects have a defined purpose with specified attributes that allows us to identify them and know how to interact with them if needed. Therefore Boost is two objects combined into one, which feels wrong.
With my proposed architecture you separate the distinctive elements to gain the ability to cope with external change and only incorporate in a theme what you need. It also has the same ‘design pattern’ as was previously employed with ‘Bootstrapbase’ and ‘Clean’, so I don’t understand why this is a bad thing and should not be repeated.
So, where am I going with this? It is one of those things that is screaming away in my head that the existing core proposed architecture is the wrong solution. I cannot fully justify why. It is one of those ‘gut’ reactions that you know is correct for the future but you know only time will prove you right.
By keeping the framework and core theme elements apart but loosely coupled then you will get flexibility and therefore facilitate both creativity and the ability to cope with change.
I hope, just hope that this post is read by someone who has influence, can see my point of view and make a change for the better. Moodle not only needs to function well but be marketable with a user interface that is modern and meets the high expectations of an ever demanding learner exposed to the world of apps and mobile devices.
What do you think? Is there something I have got wrong or missed? Or do you agree with what I have written? Please do comment.