Monthly Archive for January, 2010

WP-Slimbox2 v1.0.2 Released!

I’m a bit late writing this post, but it seems like every time I make major changes to my plugin, I get hammered with a bunch of little glitches that effect a bunch of people other than me. I suppose that’s the downside of not having a group of people to do beta testing for you. On the plus side, I’ve been doing my best to stay apprised of problems as they arise in the support forums (and even those from people who….irritatingly…fail to read about posting problems in the support forums and post them in comments or on the WP site).

I think, and hope, that I’ve finally ironed out all the little glitches. The only problem I’m still aware of is actually not a problem with the plugin so much as it is a problem with other plugins and themes that fail to properly load jQuery by using wp_enqueue_script(). It always bugs me when people have problems with my plugin because of someone else’s poor coding practice. It bugs me when people have problems with my own poor coding, but at least I have only myself to blame for that!

For those of you curious as to what was done in the 1.0.2 release, I patched a rather glaring error related to Internet Explorer, a potential XSS vulnerability, and an obscure updating issue. I also added a Turkish/Türkçe Translation, graciously provided by Serhat Yolaçan and an updated French/Français Translation again provided by Jandry.

For those of you who are curious, the XSS vulnerability was due to an issue discussed here, by Mark Jaquith. While I understand how one could trigger the exploits, I don’t fully understand how those exploits do any damage, but whatever the case, it’s been resolved. I don’t actually think this was a real security issue for most people, since you have to be logged into the admin options to access it, but in WordPress MU installs it could have been an issue. Either way, upgrade! Fixing this issue also had the added bonus of fixing an issue where one user was unable to update their Slimbox settings because somehow the form was submitting the server directory path, and not the url path. I don’t really know what caused that in the first place, nor do I know why it wasn’t a problem in previous versions of the plugin, but it’s fixed, so I won’t complain.

The issue with Internet Explorer likely effected more people, given the prevalence of IE users out there, and unfortunately was tied into my transition from dynamic JS files to static JS files. Essentially I was trying to convert a string array of numbers into an integer array of numbers, so I used a function I’d found, .map(Number). Unfortunately, I failed to then test the script in IE, since I would have discovered that apparently that function isn’t supported by IE. There’s likely a much better way to do it, but ultimately I wound up manually writing a loop to create the integer array and allow the script to work correctly in IE.

I’m hoping to have version 1.0.3 out later this week, but this update should only interest people who use the Spanish/Español, Dutch/Nederlandse, and German/Deutsch translations, or would like to use the plugin in Simplified Chinese! That’s right, the next release will include Simplified Chinese thanks to easespot.

Hopefully I’m done with major updates to the plugin, and future releases will be limited to simply adding translations, but if you have good ideas feel free to post them to our support forums and I’ll see what I can do.

WP-Slimbox2 v1.0.1 Released!

That’s right, another update already! Unfortunately, this one was to fix an issue some users were reporting regarding an error after installing the plugin that sadly made their sites unusable. I hope everyone who was experiencing that issue has since upgraded and can get back to enjoying the benefits of the plugin.

Several users reported errors similar to the following:

Fatal error: Call to a member function get_option() on a non-object in /var/wordpress/wp-content/plugins/wp-slimbox2

In each case, it appeared that for some reason the $options variable, which was declared as a global variable, was not being properly recognized as an object. I don’t know why this is, though I suspect it’s tied into either the version or the settings of PHP being used on the host. This would explain why several users had no problems, and several others did. In one case someone had no problems on one site, but on another site they did.

If anybody can explain to me why this is, I’d appreciate it. Either way, I was able to resolve the issue by just recreating the variable in each function. This seems to me like it would be less than ideal, but someone else informed me that WP already caches options after fetching them, to minimize calls to the database, and so by recreating the object, I’m just pulling from the cache, or something like that. It works, that’s the important thing!

While attempting to diagnose the problem I also discovered a tiny glitch resulting from one of the new features I’d added. The grouping of autoloaded images wasn’t correctly grouping my images by post anymore. The original code was written as follows:

slimbox2_options.selector = "div.entry-content, div.gallery, div.entry, div.post, div#page, body";
return (this==el) || ($(this).parents(slimbox2_options.selector)[0] && ($(this).parents(slimbox2_options.selector)[0]==$(el).parents(slimbox2_options.selector)[0]))

I misunderstood this to mean that it would search through the parent elements for each image, and progressively search for an element that matched the selector. In this case it would look for a div of class entry-content, gallery, entry, or post, as well as a div with an id of “page” and if that all failed the body element. In actuality, while this would do that, it would also sort the results, which screwed them up. I revised the code as follows:

slimbox2_options.selector = "div.entry-content, div.gallery, div.entry, div.post, div#page, body";
return (this==el) || ($(this).closest(slimbox2_options.selector)[0] && ($(this).closest(slimbox2_options.selector)[0]==$(el).closest(slimbox2_options.selector)[0]))

I could even drop the [0] as closest only returns a single element anyway. This function actually searches for the first parent element that matches the selector, not all of them. If it finds a gallery first, that’s what it returns, if it finds entry-content, that’s what it returns, etc. This would allow a bit more granularity in the selection, and also better enable out-of-the-box support for more users and themes.

The downside to this change is that closest was introduced in version 1.3 of jQuery, which WordPress didn’t include until version 2.8. I’d hope most people aren’t hanging around updating their plugins and not their WordPress install, but you never know. If someone actually did want to do that, they could change closest back to parents, and just be more specific with the selector.

As translations are updated, or added I plan to make a few more minor releases, but hopefully I’ve got all the main things in now.

WP-Slimbox2 v1.0 Released!

It’s been practically a year since the last release, but I finally got up the motivation to mess with the code some more and add even more features to the already numerous possibilities within the plugin.

Release 1.0 includes several new options such as:

The ability to enable the effect on mobile phones (originally there was no option, but now it’s disabled by default).
The ability to control where the caption text comes from.
The ability to control what parent element to group images by.
The ability to render the caption as a URL to the original image.

Large portions of the backend of been rewritten as well and now the JavaScript files are entirely static, no more dynamic generation from php. This was accomplished by utilizing the wp_localize_script function of WordPress that let’s the options be loaded up in the main page, which is dynamic anyway.

If you localized the plugin in the past (or would like to now), please help bring your translations up to date!




Bear