Exploration

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.

Of course you’re the bad guy! Something you wrote had negative implications for Opera! Obviously, you hate Opera and everything it stands for. I bet you work for Mozilla. And Microsoft. How much are they paying you to make Opera look bad?

Yeah.

Some of the more vocal Opera supporters act as if they had a persecution complex. Anything that even appears to apply negatively to Opera must be deliberate, and must be malicious. It’s not possible for it to be a misunderstanding or a mistake. No matter what you say, they’ll remain convinced you hate Opera.

Perhaps the appropriate response would be to switch to publishing the XOXO version of S5 as the primary version, with the justification that the markup is more semantic, and that the Opera Show Format (OSF) (and support in Opera) needs to be updated to allow for the more semantic ordered list of slide list items, rather than being limited to semantic-free div of divs. After all, what does OSF have against semantic markup? ;)

Folks, I appreciate the words of support, but this really isn’t a “beat up on Opera fans” post. It’s an explanation of history and an invitation to participate. Yes, I admit, I pushed back a bit, but let’s not take it overboard, or else we’ll just end up fighting yet another browser holy war instead of working to enhance S5.

Boris Zbarsky wrote in to say...

Eric, is that Gecko bug with dynamic media type switching filed? If so, could you point me to the right bug number (send me email or cc me on the bug)? If not, would you mind filing it so we can fix it?

Boris: I don’t know, actually. I’ll have to dig around and get back to you.

Lars: I don’t have Konqueror to test, so I don’t know why it fails by default but works if identified as Safari. As with Opera, I’m willing to accept contributions that make S5 work in Konqueror as long as they don’t degrade other browsers and are relatively easy to maintain.

Jeff wrote in to say...

Eric,
I personally think S5 is just a slamming piece of software! I just wish I knew about programming and such so I could possibly someday contribute. I’ve been using it for some of my presentations at work for at least a year I think. I like it. I appreciate all the work, passion, and time that went into it. So at least from my end, for whatever it means toyou, thank you very much for all your hard work.

On Konqueror support: I just found this and tried it (very fortunately, as I was just hunting around for something nice to write up a presentation in). There is something a little weird, but I’m not sure where it’s coming from, and unfortunately I don’t have the time (right now, maybe I will soon) and possibly the expertise to figure it out.

Anyway, when I first opened the demo presentation on Konq, I got mostly unstyled text. I then hit F5 to reload, and lo! style! :) I don’t know why it didn’t work the first time. Maybe konq has something odd about applying styles if they take too long to load (wild speculation). However, when it does display, one thing doesn’t work: you can’t click on the page to make it go to the next. You can press enter, mouse to the bottom-right, whatever. Just not click.

I just played a little more: if I reload, it goes back to the unstyled (printable?) text, with the toggle link at the top-right, however I can’t click it for it disappears as soon as the mouse gets there. If I select the URI in the address bar and press return to force a load from the cache, it comes up in presentation form happily.

The toggle thing doesn’t disappear if I get to the unstyled format by clicking on the link in the slideshow itself, then it toggles just as you would expect.

Firstly, Eric, many congratulations on an excellent piece of work in developing S5.

I am a Civil Servant working on developing Intranet solutions for a Governmental Department in the United Kingdom. Having just sat through a talk on accessibility from one of our Information Architect guys and listened to the usual “MS Power Point is bad, avoid like the plague” mantra it suddenly dawned on me that dropping Power Point (wherever possible) and adopting S5 within the department could be a real winner. Not only is it standards based (see my blog for my continued struggles and frustrations in this area) it is of course fully accessible as well, whereas MS Power Point is dubious (not to mention bloated) to say the least in this respect.

Utilising our Content Management System (Stellent, for anyone who is interested) we would also be able to create CSS that would allow us to control branding applied to S5 presentations, meaning more consistency and in the end, more professional looking and convincing presentations than the garish, gimmicky and bloated presentations currently being created by our diverse bunch of publishers at present, using MS Power Point.

The downside is because all publishing to our Intranet has to go through the Content Management System (which basically means all documents have to be styled up MS Word docs) there will be more work than usual in adopting this system (wrapping the Div tags and appropriate classes around the content), but I’m positive about the eventual outcome.

Just wondered if anyone has any similar experience or advice in adopting S5 in this manner.

Matthias Ebert wrote in to say...

I’ve got two ideas:
1) allow direkt links from outside
and
2) show presentations in a loop.

As an output I post my sourcecode-snippets into your feedback-system. I hope, you dont mind, that I copy it here. They are tested on version S5.1 with Firefox 1.04 under Linux.

1) ALLOW DIRECT LINKS FROM OUTSIDE
———————————-
To allow a direct link from outside to a specific slide,
I recommend to use the usual parameters behind the URL-name,
i.e. s5-demo.html?3
This example presents slide3 in the browser.

This function has to be called in:
– the startup(), to be used by slide0
– the last row of go(), to be used by all other slides
function startup()
{
...
if (loop) setTimeout('nextSlide()', loop_timeout);
goTo(getParameter());
}

Thanks, Matthias. #1 has been in S5 since version 1.0, actually, except it uses fragment identifiers instead of URL parameters. The default behavior used to be #2, but I changed it at some point. Having a toggle to control the behavior is interesting; I’ll have to give it some thought.

I truly appreciate your continued Opera Support. The thing that confused me forever was the need to put the browser into “Slide Show” mode in order for S5 to display correctly in Opera. You might make that point VERY clear on the next release.

Remember to encode character entities if you're posting markup examples! Management reserves the right to edit or remove any comment—especially those that are abusive, irrelevant to the topic at hand, or made by anonymous posters—although honestly, most edits are a matter of fixing mangled markup. Thus the note about encoding your entities. If you're satisfied with what you've written, then go ahead...