Posts from Friday, July 29th, 2005

Opera and S5 1.1

Published 13 years, 2 months ago

Oh, sure, I build a slide show system specifically because of a bug in Opera 7.5, and despite that I go fairly far out of my way to make sure that Opera will still be able to display the slide show using its unique and groundbreaking feature, OperaShow, and now I’m the bad guy.

A little history: the first version of S5 was meant to recreate what OperaShow did, except do it in other browsers.  That was pretty much it—but as I was fiddling with the JavaScript to make that work, I realized I could build my own navigation menu in the JavaScript.  So I did.  Then, when I tested to see if it worked in Opera, it didn’t.  I tried for a while, but couldn’t make it work.  So I decided to hide the menu from Opera.  Better no feature than a broken feature, and besides, it was the only one so hidden.

When I tossed S5 out to the public, I figured maybe twelve other people in the world would be interested.  It was one of those, “Hey, this is something I hacked together, look how geeky I am!”

And the crowd, against all expectations, went wild.

So the list of things I thought would be interesting to add some day suddenly took on extra weight.  There were people out there who actually wanted to use S5, and wanted things like font scaling and incremental display of slide content.  Furthermore, there were people contributing code to improve the system.  Out of nowhere, a little open source project erupted in the comments of my posts.

In order to keep things from bogging down, I defined a feature list for S5 1.0 and shipped it out.  All along, I made sure that the slide show would fall back to OperaShow in Opera.  To do so, I had to write a routine (called notOperaFix() because it had to fix things for browsers that aren’t Opera) that swapped around the media values for various linked style sheets, among other things.  I also had to define the S5 format so it was compatible with the OperaShow Format specification.  That meant changing some things from my original file format, and in my opinion not always for the better.

Despite a few people telling me to just drop OperaShow and OSF support because it wasn’t worth the effort, I kept those mechanisms in place as we moved to version 1.1.  I figured that since Opera had a slide show system, I’d let people use it.  Besides, any time I created a test copy of S5 that didn’t let Opera drop back to OperaShow, it completely failed to display the slide show.

Now S5 1.1 is out, and it has more features that people asked for—font scaling based on window size changes, incremental display, more keyboard commands, and so on.  Throughout it all, I made sure OperaShow would still work.  And it does.  It doesn’t get the keyboard commands, or the font scaling, or the incremental display.  I did try.  I couldn’t figure it out.

Now, there are those who apparently think that this means I’m a liar when I say S5 is cross-browser.  I admit it—S5 doesn’t work in Mosaic 1.0.  It also quite likely fails in IE5.0/Win.  Actually, I think it fails in IE5/Mac, which is ironic since my starting point for S5 was a rudimentary slide show system written by Tantek Çelik.  But it does not fail in Opera, because it’s quite intentionally designed to be OperaShow compatible.  It isn’t feature-identical, but then, the features in (and version number of) Opera for the Mac usually lag behind Opera for Windows.

Lying about S5’s cross-browser nature?  Giving Opera the cold shoulder?  Utterly wrong on both counts.  I’ve done everything I can to make sure Opera is still at this particular table.  Giving Opera the cold shoulder would have been me saying, “Screw it, I’m not providing a fallback to OperaShow and if Opera users don’t like it, they can install Firefox”.  And I’ll be totally honest: I’m sort of tempted.  I could clean up the markup; cut out some JavaScript gymnastics, including a backflip over a Gecko bug when dynamically changing media types, which I wouldn’t have to do if I weren’t still supporting OperaShow compatibility; and simplify my life.

After all, it’s not like I sprang this on the world.  The last eight beta and release candidate versions of S5 were published here.  Comments and contributions were solicited and welcomed, and many were received.  The state of Opera support has not changed one iota in all that time.  There were several months in which anyone could have stepped up to the plate and contributed fixes for Opera.  Did anyone?  No.

I’d do it myself, except I’m not sure I can.  For example, I just a few hours ago made a copy of the S5 package, unpacked it, and edited the JS file so it did no Opera detection: the scripts all ran on Opera the same as they do for any other browser.  I loaded it into both Opera 7.5 and 8.02 for OS X, which is what I have right now.  You know what happened?  Nothing.  The slide show didn’t happen.  The outline view came up, changed slightly, and then sat there.  And do you know why?  Because Opera defaults to identifying itself as Internet Explorer.

So I fixed that in the preferences, and tried again.  Everything worked just fine except for two things.  One, the browser window had a vertical scroll bar for no apparent reason.  Two, the controls were nowhere to be found, either by hovering over where they’re supposed to be or using the “C” key to toggle them.  I’m not sure why these two things are happening, because the JavaScript console reports nothing amiss.  That has me kind of stuck.

So here’s the deal.  Want S5 to be feature-equivalent in Opera?  Fine.  Take the S5 1.1 package and fix it for Opera—preferably version 6 or later, but I’ll take what I can get.  Liberally comment your code so I know what you did, and why, or else post fixes here.  I promise that, if this is done in such a way as to not degrade behavior in any other browser—because, remember, they don’t have anything like OperaShow on which they can fall back—and so that the code is maintainable, I’ll roll the changes into my version of S5, and release it as 1.1.1 or 1.1o or something.  (The same is true for any other browser, in fact.)

I’ll help out where I can, if anyone has questions about this bit of JS or that bit of CSS in the S5 directory.  Post them here and I’ll do my best to answer.  If I get hit with a bolt of genius and can suddenly fix the problems myself, I’ll do so, but odds are that won’t happen.  It will therefore be up to the community to help out.  This isn’t just me, as the credits page makes clear; S5 has long been a community effort.

Put another, more succinct way: don’t complain, contribute.  It’s more satisfying in the long run, and it’s more constructive.