[development] websiteoptimization.com css size

Larry Garfield larry at garfieldtech.com
Sat Jan 7 01:00:17 UTC 2006


On Friday 06 January 2006 06:19 pm, Larry Garfield wrote:

> OK, I think I started thinking aloud there. :-)  To recap, I'm suggesting
> every module be required to be a directory in /modules (or wherever), and
> have magic-name files for resources as well as code.  So any module
> consists of:
>
> /mymodule
>   /mymodule.module (required)
>   /mymodule.css (optional)
>   /mymodule.js (optional)
>
> Then the admin/modules page gets 2 extra columns of checkboxes: Use Module
> CSS and Use Module JS, both of which default to on.  The system then, based
> on those checkboxes, adds the appropriate <script> and <style> tags. 
> Overall less code to send to the browser, more flexibility for themers, and
> more logical grouping of resources.
>
> I now await someone telling me why the above is dumb. :-)

It occurred to me after I sent this that it's dumb because whether or not to 
use a given module's CSS or JS file is not something that should be user 
configurable.  It should be theme-configurable only, otherwise the behavior 
could be unpredictable.  (MyTheme expects YourModule.css to not be active but 
it is, or expects it to be active but it isn't.)

So forget admin/modules.  Instead, a given theme can itself override a 
module's CSS/JS file by simply providing one of its own with the same name.  
So if mytheme wants to override yourmodule's default-provided CSS, it can do 
so by simply providing its own yourmodule.css file.  If it wants to just 
remove that styling completely and not provide its own version, just include 
an empty yourmodule.css file.  That could happen auto-magically or via a 
required callback function or declaration a la the way theme_* files are 
overridden.  

Alternatively, if people don't like magic names, modules could declare their 
css files via a very simple hook_styles() and JS via a simple hook_scripts(), 
both of which return a linear array of paths to the files they provide.  That 
would allow multiple files per module to allow a breakup into 
mymodule-structure.css and mymodule-appearance.css, for instance.  The theme 
override would be done the same way.  

In either case, the information would be cached per-theme and only rebuild 
when the module list or theme list changed.  We could probably cache the 
entire <style> and <script> strings pre-rendered and be done with it.

Thoughts?  Ber, would that take care of the "I don't want JS" issue you bring 
up?

-- 
Larry Garfield			AIM: LOLG42
larry at garfieldtech.com		ICQ: 6817012

"If nature has made any one thing less susceptible than all others of 
exclusive property, it is the action of the thinking power called an idea, 
which an individual may exclusively possess as long as he keeps it to 
himself; but the moment it is divulged, it forces itself into the possession 
of every one, and the receiver cannot dispossess himself of it."  -- Thomas 
Jefferson


More information about the development mailing list