Article 6F1VR CodeSOD: Roll On Menu

CodeSOD: Roll On Menu

by
Remy Porter
from The Daily WTF on (#6F1VR)

Mike was refactoring an old web application written in Perl. We joke about Perl being a "write only language," but the original developer wanted to take that unreadable attitude to the JavaScript front-end portion of the application.

function setup() { position('m1',46,220); position('m1g',33,200); position('m1c',33,200); position('m2',46,330); position('m2g',33,310); position('m2c',33,310);// ... snip 50 lines}

The strings reference the IDs of various elements on the page. The IDs themselves, however, mean nothing. Why m1g? No idea.

function offall() { hideitem('m2i1'); hideitem('m2i1c');// ... snip 50 lines}

As you can also see, there's no attempt to use CSS classes or other selectors to make it easy to find all of the UI widgets that need to be hidden- one simply needs to access each one by its meaningless ID value.

Which also means when it comes time to show elements, it gets nasty:

function rollonmenu(item) { clearcurrenttimeout(); offall(); overmenu=1; highlight(item); if (item=='m1') { // ... } if (item=='m2') { showitem('m2i1'); showitem('m2i1c'); // ... snip 20 lines } if (item=='m3') { // ... snip 20 lines } if (item=='m4') { // ... } if // ... more}

All this is in the service of hiding or showing sub-options based on which item a user has selected. And it's cryptic, verbose, and ugly. But this isn't the real WTF in this code. TRWTF is how they insert the menu into the web page:

var _targ = document.getElementById('menu');_targ.innerHTML='<div ... 10441 characters all on one line ';

The HTML describing this UI widget is a single JavaScript string, all on one line.

buildmaster-icon.png [Advertisement] Utilize BuildMaster to release your software with confidence, at the pace your business demands. Download today!
External Content
Source RSS or Atom Feed
Feed Location http://syndication.thedailywtf.com/TheDailyWtf
Feed Title The Daily WTF
Feed Link http://thedailywtf.com/
Reply 0 comments