Organization and Chunking!

I have been working on the Theme Builder UI for a while now, and I have come across some typical problems when working with large-scale software: organizing the data into meaningful section, or “chunking” the data.


To overcome these problems, I have broken the toolbar sections into their own HTML pages, and used server side includes to piece them together. This will be replaced in the future with some PHP code. I originally chose SSIs, so anyone can add or remove sections by simply adding the appropriate SSI directive to the page.


Since the toolbar sections are seperate pages, it allows me to test each page separately, and only one page at a time. Each HTML page has two sections: the javascript, and HTML display. This allows me to edit both the HTML and javascript without having to switch between two or more editors or editor tabs.

There is one main page, toolbar.html, which has the code for the main toolbar UI. The main object is called CMSThemeBuilder, which includes a few functions:

  • CMSThemeBuilder.dump([outputDIV]) – this function calls the dump() method in each object., optionally writing the output to the named div tag, outputDIV.
  • [window.]print() – this is a global method which prints to the FireBug console, if installed.
  • CMSThemeBuilder.register(StyleObj) – this function registers the given StyleObj with CMSThemeBuilder.

Summer of Code Proposal for CMS Theme Builder

This is a generic proposal for the Goolge Summer of Code program. Since it can apply to several CMS systems, including blogs, I am using the generic term. If you are affiliated with a specific organization and wouold like to mentor me, please drop me a line. I am applying to both the Drupal and WordPress organizations to increase my chances of being accepted. I have placed generic references in brackets, and will be using the name of the organization in place of that for my proposals.

Personal Details

  • Name: Samuel C. Tyler
  • Email:
  • Skype: skamansam, AIM: skamansam3, GTalk:


Have you ever visited a content-managed site, and found the visual aspects unappealing? Have you wished you could change that appearance graphically on one site, then apply it to all the sites you frequent? Do you use a lot of different computers and can’t apply global styles through every browser? After all, don’t most CMS -based web sites have a lot in common? If you are one of these people, I have a new proposal for you! Since most CMS- based web sites have many visual element in common – like a header, content area, sidebars, and footer – I propose to create a theme and module for integration into these sites which use Web-2.0 technologies to make all this possible! If you have a blog or web site, you can store your theme data there, then use OpenID (or other mechanism) to apply that style to any CMS that has that that module installed.

Project Proposal

A Theme Builder that can be used by a [CMS] theme for users to design their own themes. This Theme Builder is similar to the idea proposed by ipwa. The basic idea I have is a theme that would include a link to enable user themes, and upon clicking, would open up a simple entry field for entering the URI of a custom theme file or creating a new one. After entering the URI, allowing the a cookie could be stored on the user’s browser (possibly using Google Gears instead), which would allow the user an easy method for creating a theme on one site and using it on many. If the user wants to create a new theme, a “designer” widget would pop up to allow users to edit the page’s style as they see fit. If, while browsing the site, they find a certain element that is not styled to their liking, they can activate the designer again and perform the operations (styling) there.
It will include two parts:

  1. An HTML widget, similar to the jQueryUI ThemeRoller, for creating the styles, which will edit styles interactively. This will include editing fonts, backgrounds, etc, and possibly slight image editing support. This would be powered by jQuery.
  2. The Theme Builder theme, including several methods for storing and retrieving theme data. Storage methods include using site data storage, cookies, Google Gears, etc. This could be configured to use several formats, including CSS and a “faster” custom format. This would also include a method for import/export by the theme engine for easy migration to and from other installations.

Schedule of Deliverables

Each of the following milestones will be fully documented, as I like to document my code and features as I go along. I will be using a new blog to better document my work and any caveats as I go along.

  • Weeks 1 & 2: Design the html widget frontend, including preferences
  • Weeks 3 & 4: Document the data format, this will include testing existing formats and/or developing a new one
  • Weeks 5 & 6: Create module for theme data I/O using brower cookies
  • Weeks 7 & 8: Create the theme that uses the theme data
  • Weeks 9 & 10: Create storage mechanism for new themes and user data
  • Week 11: Write Documentation
  • Weeks 12: Scrub for Bugs!
  • Continuation: Create ThemeBuilder theme/plugin for other open source software

Open Source Development Experience

I have created a few open source projects so far. Most of my open source experience comes from working with developers over IRC. The most active project is probably wxCPAN. All of the software I write is free to use and redistribute. See my home page for more projects.

Work/Internship Experience

I am currently a student worker, in the capacity of web master, for the largest school (27 departments!) at my university. You can see my page at the university here. Last summer, I participated in the Summer of Code, where I created a GUI for CPANPLUS, a Perl module manager.

Academic Experience

I have been teaching myself various programming languages sine 1995, and have been creating web sites since 1996. I am currently an undergraduate at the University of North Carolina at Greensboro, working on a computer science degree. I have taken classes there that have helped me learn about databases, many diverse and archaic programming languages, computer organization, networking, and many other theories in a field that continues to amaze me.