CodeSOD: PRINCESS DEATH CLOWNS


Adam recently tried to claim a rebate for a purchase. Rebate websites, of course, are awful. The vendor doesn’t really want you to claim the rebate, after all, so even if they don’t actively try and make it user hostile, they’re also not going to go out of their way to make the experience pleasant.

In Adam’s case, it just didn’t work. It attempted to use a custom-built auto-complete textbox, which errored out and in some cases popped up an alert which read: [object Object]. Determined to get his $9.99 rebate, Adam did what any of us would do: he started trying to debug the page.

The HTML, of course, was a layout built from nested tables, complete with 1px transparent GIFs for spacing. But there were a few bits of JavaScript code which caught Adam’s eye.

function doTheme(myclass) {
         if ( document.getElementById ) {
                if(document.getElementById("divLog").className=="princess") {
                        document.getElementById("divLog").className="death"
                } else {
                        if(document.getElementById("divLog").className=="death") {
                                document.getElementById("divLog").className="clowns"
                        } else {
                                if(document.getElementById("divLog").className=="clowns") {
                                        document.getElementById("divLog").className="princess"
                                }
                        }
                }
                document.frmLog.myClass.value=document.getElementById("divLog").className;
        } else if ( document.all ) {
                if(document.all["divLog"].className=="princess") {
                        document.all["divLog"].className="death"
                } else {
                        if(document.all["divLog"].className=="death") {
                                document.all["divLog"].className="clowns"
                        } else {
                                if(document.all["divLog"].className=="clowns") {
                                        document.all["divLog"].className="princess"
                                }
                        }
                }
                document.frmLog.myClass.value=document.all["divLog"].className;
        }
}

This implements some sort of state machine. If the state is “princess”, become “death”. If the state is “death”, become “clowns”. If the state is “clowns”, go back to being a “princess”. Death before clowns is a pretty safe rule.

This code also will work gracefully if document.getElementById is unavailable, meaning it works all the way back to IE4. That’s backwards compatibility. Since it doesn’t work in Adam’s browser, it missed out on the forward compatibility, but it’s got backwards compatibility.

To round out the meal, Adam also provides a little bit of dessert for this entry of awful code.

//DEBRA, THIS DOES THE IMAGE MOUSEOVER THING.  
//ALL YOU HAVE TO DO IS TELL IT WHICH OBJECT YOU ARE REFERRING TO, AND WHAT YOU WANT TO  
//CHANGE THE IMAGE SOURCE TO.

function over(myimage,str) {  
        document[myimage].src=eval(str).src  
}

DEBRA I HOPE YOU GOT A JOB WHERE YOU DON’T HAVE TO WORK WITH THIS AWFUL WEBSITE ANYMORE.

Adam used some google-fu and found an alternate site that allowed him to redeem his rebate.


[Advertisement] Manage IT infrastructure as code across all environments with Puppet. Puppet Enterprise now offers more control and insight, with role-based access control, activity logging and all-new Puppet Apps. Start your free trial today!

http://ift.tt/2nDdeoV

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s