I don’t normally do book reviews, but Jon Duckett’s HTML & CSS book was brought to my attention via twitter and it looked interesting, so I thought I’d give it a read.
If you’re the type that was discouraged from learning basic web programming because of the manual-like books, then I would definitely recommend this book. The information is presented in very visual ways and while there are a few pages here and there that have nothing but code on them (for full examples), almost every page has an image of some sort, whether as explanation or for decorative purposes.
While there are a couple of concepts I wish were explained in a little more detail with visuals (such as CSS selectors), I appreciate that Duckett will discuss deprecated tags and elements, which are still commonly seen, and point out which browsers do not support certain properties.
He also provides lists of practical websites or tools to use including commercial and open source alternatives. Code and extras can be found on the website, which can be useful even for those who never crack open the physical book.
The Conclusion
It’s what it purports to be. So, I highly recommend it for beginners and maybe even those that want an easy to digest review (it’s very easy to skip sections you feel you already know).
I ended up playing around with the CSS some more too to make the form even smaller, but I was also asked to change the form fields and decided to put in some placeholders. While the WordPress documentation for comment_form is pretty good, the example doesn’t clearly tell you how to change form fields. It’s possible I find it less than intuitive because I’m not a programmer.
In my case, I wanted to change the title from “Leave a Reply” to “Leave a Comment”. I also wanted to change the form fields to have placeholder text and make the comments box smaller.
Changing it Once
If you only want to change it in the one file, you can specify the new values just above where you call comment_form().
Let’s start with changing the easy stuff. Much like the WordPress example, just make an array with whichever values you would like to change from the default, and call the comment_form function with your array, which in this example, the form header and comment field are changed.
//for long defaults, such as the comment_field, I suggest copy/pasting the default and then modifying it
$comments_args = array(
‘title_reply’ => ‘Leave a Comment’,
‘comment_field’ => ‘<p><label for=”comment”>’ . _x( ‘Comment’, ‘noun’ ) . ‘</label><textarea id=”comment” name=”comment” placeholder=”Eggy approves!”cols=”45″ rows=”4″ aria-required=”true”></textarea></p>’
);
comment_form($comments_args);
Changing the other fields makes things a tad more complicated. For other fields, you need to specify another array, then apply your new values in the comments array.
//required variables for changing the fields value
$commenter = wp_get_current_commenter();
$req = get_option( ‘require_name_email’ );
$aria_req = ( $req ? ” aria-required=’true'” : ” );
//name the array whatever you want; I strongly suggest copy/pasting the default then modifying it $new_fields = array(
‘author’ => ‘<p>’ . ‘<label for=”author”>’ . __( ‘Name’ ) . ‘</label> ‘ . ( $req ? ‘<span>*</span>’ : ” ) .
‘<input id=”author” name=”author” type=”text” placeholder=”Eggy the Ram” value=”‘ . esc_attr( $commenter[‘comment_author’] ) . ‘” size=”30″‘ . $aria_req . ‘ /></p>’,
’email’ => ‘<p><label for=”email”>’ . __( ‘Email’ ) . ‘</label> ‘ . ( $req ? ‘<span>*</span>’ : ” ) .
‘<input id=”email” name=”email” type=”text” placeholder=”eggytheram@ryerson.ca” value=”‘ . esc_attr( $commenter[‘comment_author_email’] ) . ‘” size=”30″‘ . $aria_req . ‘ /></p>’,
//in this case, we’re applying filters, so it changes all the values. If ‘url’ is not specified, then it gets removed.
);
For a full list of default values in comment_form(), take a look at the Codex Function Reference.
Changing the Defaults
To change the fields for all comment forms, meaning it will change the default values and will be applied whenever you call comment_form(), you can change the defaults using a filter in the functions.php file.
//name it whatever you want
function alter_comment_form($new_defaults) {
//required variables for changing the fields value
$commenter = wp_get_current_commenter();
$req = get_option( ‘require_name_email’ );
$aria_req = ( $req ? ” aria-required=’true'” : ” );
//name the array whatever you want $new_fields = array(
‘author’ => ‘<p>’ . ‘<label for=”author”>’ . __( ‘Name’ ) . ‘</label> ‘ . ( $req ? ‘<span>*</span>’ : ” ) .
‘<input id=”author” name=”author” type=”text” placeholder=”Eggy the Ram” value=”‘ . esc_attr( $commenter[‘comment_author’] ) . ‘” size=”30″‘ . $aria_req . ‘ /></p>’,
’email’ => ‘<p><label for=”email”>’ . __( ‘Email’ ) . ‘</label> ‘ . ( $req ? ‘<span>*</span>’ : ” ) .
‘<input id=”email” name=”email” type=”text” placeholder=”eggytheram@ryerson.ca” value=”‘ . esc_attr( $commenter[‘comment_author_email’] ) . ‘” size=”30″‘ . $aria_req . ‘ /></p>’,
//in this case, we’re applying filters, so it changes all the values. If ‘url’ is not specified, then it gets removed.
);
$new_defaults[‘fields’] = apply_filters(‘comment_form_default_fields’, $new_fields); //changing default fields to the new values in your array
$new_defaults[‘comment_field’] = ‘<p><label for=”comment”>’ . _x( ‘Comment’, ‘noun’ ) . ‘</label><textarea id=”comment” name=”comment” placeholder=”Eggy approves!” cols=”45″ rows=”4″ aria-required=”true”></textarea></p>’;
$new_defaults[‘title_reply’] = ‘Leave a Comment‘; //changes the form header text
return $new_defaults;
}
add_filter(‘comment_form_defaults’, ‘alter_comment_form‘); //basically tells it to replace the existing defaults with your new defaults value (where applicable)
If you only want to change the fields or if you want to do it separately from the comments_form_defaults (especially if only changing one field), then you can set new values in a similar way to the new defaults, say:
function alter_comment_form_fields($new_fields) { if(isset($fields[‘url’]))
unset($fields[‘url’]);
return $fields;
} add_filter(‘comment_form_default_fields’, ‘alter_comment_form_fields‘); //make sure to use comment_form_default_fields
Note: In this case, since we’re using the add_filter for the fields (instead of apply), it will only change the values specified.
Since this example only changes the url field, I could’ve actually used the specific field filter (i.e. comment_form_field_url) instead. Near the bottom of the Codex Function Reference page is a list of filter hooks related to comment_form.
The Result
As I mentioned, I edited the CSS further since my last post on editing the TwentyEleven comment form, so now it’s even smaller. It’s now 124px shorter and 84px less wide than my last version for a total of 367px shorter (and 84px less wide).
I was also recently reading about adding ‘character’ or ‘personality’ to a website and thought having fun placeholder text would be one small way to do that. (Eggy the Ram is the university’s mascot.)
Sadly, this was also harder than I expected. Honestly, in this case, the only requirement I had was that it worked.
Custom CSS Plugin
I tested a lot of plugins (pretty much every one I could find), many of which didn’t work and were simply incompatible with the newest version of WordPress. Here are some that worked:
My Custom CSS – I liked that it colour codes and has line numbers, but it broke when I got over 700? lines. New classes that I added would be empty. I’m also not a fan of the fact that it just adds it at the top of the page instead of as an external file.
Custom CSS Manager – Pretty much exactly like My Custom CSS, but I haven’t broken it. Still unhappy that it doesn’t load an external file instead though.
Your Custom CSS – Simple, but seems to work just fine, even puts your code into an external file, which I like. Didn’t test it to 500+ lines though like I did with the previous ones.
Best Custom CSS – Works fine, can edit CSS files through built-in WP editor, only doing it that way isn’t very intuitive. It also presets CSS files instead of allowing you to set your own unfortunately.
Site Specific CSS – Turns out, most CSS plugins only work in a single site since they write to an external file and the plugin always calls the same external file. Since we’re running a Multi-Site install, I ended up with the site specific CSS plugin. It’s simple (all it does is load a CSS file you link to), but it works! Since it’s just a link, you have to edit the files externally or put it into your theme root folder (or plugin folder) to edit it in the built-in editor.
I rejected a couple of CSS plugins that seem to be no longer in development (such as WordPress.com Custom CSS) even if they (mostly) work and I used a combination of how recent there has been an update and whether developers responded to forums posts as a criteria.
Social Media (Twitter, Facebook) Sharing Plugins
On the upside, it was quite easy to find a social media sharing plugin that worked. I did have a couple of requirements for this:
Facebook and Twitter required
Share buttons (not sidebar widgets) at the bottom of each post (but not pages)
Have to be able to turn off the display of shares counters
I didn’t test a lot of them since I found a couple that work, and I was happy with one in particular. Here are the results:
Facebook, Twitter, Google Plus One Share Buttons – Works, but does not have as many options the other plugins. I also didn’t like the counters showing above instead of next to the buttons, which would be more compact.
Twitter, Facebook, Google Plus One Social Share – This one works great and has a lot of options including a floating box of the share buttons. The problem I had with this one is that you have more than one row of buttons, it goes beyond the div because of the display setting. I reported it, but didn’t feel like hacking it, so I went with the last one.
Really Simple Facebook Twitter Share Buttons – This one works great, plus it lets you reorder buttons, and set the width spacing. While the more-than-one-row behaviour isn’t ideal, it works. It also has a via username for twitter. It even comes with a shortcode and selective exclude method.
I’m open to suggestions on better plugins of either, especially CSS ones (for single and multi-site). Next might be form management, but if I can’t find a good free one, I might simply suggest paying for GravityForms (since it’s a one time payment).
UPDATE: Of course, then I finally find out about Jetpack almost all of which is free, including Custom CSS and Sharing. The only downside is that you need a wordpress.com account, and I am not connecting my personal account to work sites.
When editing our theme, I had an interesting time editing the styling of the comments respond/reply form.
I was essentially modifying the WordPress TwentyEleven comments form, which looks like this:
The form is huge though, especially since the blog posts we typically have are fairly short, I was afraid the comments form might end up bigger than the blog posts!
I figured the “quick” fix would be to simply lessen the amount of space between form fields. I did it the quick and dirty way, using:
#respond comment-form-field { margin-top: -30px }
Unfortunately, that broke the form fields. You could only activate the form field by clicking on particular areas of the field, which ended up being less than half of a field’s box.
It took me a while to figure out that the labels on each field would normally show above a field, but were repositioned on top of a form field. While this looks pretty, each label was taking up the equivalent space above a field; so if the whole field was repositioned to be closer to the above element, the space where the label would be overlaps the form field and thus block mouse behaviour. When a user tries to select the field, they’re actually selecting the paragraph element of the label:
In particular, this behaviour will happen any time an element overlaps another and its z-index is higher, literally positioned on top of the visible element below.
In the end, I restyled it with the labels above the fields so the gaps don’t look so big in between the fields. I also scaled it down somewhat, so that the end result is 243px shorter (in height) than the original and 123px shorter than even the ‘quick fix’ version. The end result:
It still seems too large in comparison to a short post, so it will probably be restyled again later to be less wide as well and possibly scaled down even more. UPDATE: I wrote another blog post on further modifying the comments form, mostly using PHP.
This morning, I attended the ARLIS/NA 2012 Conferenceworkshop on designing for diversity presented/facilitated by the OCAD Inclusive Design Research Centre. There was a lot of discussion on barriers and challenges with some discussions on solutions. Honestly, I’m not sure I learnt anything new, but there were some interesting discussions that happened.
IDRC
Goal: digital inclusion
All their projects are open source, and include:
Engage: museum vistor experiences
CollectionSpace: collections management system, primarily by museum
Decapod: document digitization
Floe: inclusion in open education resources
Fluid: inclusive user experiences, umbrella project
Tecla via Komodo
User Experience Examples
We started with a discussion of general examples of good and bad user experience elements in our own personal experiences.
Bad
cord tangle
lack of browser interoperability
inconvenient touch keyboard layout
lack of flexibility in filling out forms e.g. 2 last names, accents
downtime
having to relearn interface of new version
can’t link direct to article
lack of search features
locked font sizes on email
meaningless error messages
Good
responsive design
transparency
alternative interactions i.e. touch
augmented reality layer
switch languages
filter searching
free wifi
autologin
RSS
cloud sync e.g. dropbox
social bookmarking
bibliographic managers
citation linking
security
consistency
Barriers
With respect to inclusion, what are some of the challenges or barriers at visual-based libraries/collections, image management, or other related products, services, organizations?
facilities concerns (i.e. older buildings)
alternative formats e.g. descriptions for image collections
cost/resources
expertise
attitude/awareness
vocabulary, translation
non-standardized vocabulary, but standardized doesn’t work as one size fits all
arranging physical collections to make sense
equipment/software inflexible
User Focus
Think about the user’s
goals
abilities and needs
expectations
pain points/frustrations
physical/environmental context
workflow context
current solution (if it exists)
User Modelling
While no linear or checklist, there are some important steps including working out scope (hunting and gathering of what are the possible problems), and behaviours (what happens when you interact, what want to achieve). Always a constant iterative work.
Personas
fictional, archetypal profiling of groups of users
humanizes abstract users
User states & contexts
enumeration of the various states and contexts users might be in
much more granular understanding of users
e.g. sensory, dexterity, cognitive, communication
One Solution Fits All
No one solution fits all, but if you’re restricted to one solution, then the key is to make a:
flexible, configurable environment.
Case Example
One of the situations we discussed is the physical reference desk. While the goal is for the desk to be a welcoming place where people know that’s where they can get help, the desk is frequently a place where there is a big standing only desk, which can be uncomfortable, tiring, and inaccessible.
Solution? Possibly, separate desks for different types of questions, with double monitors and possibly double keyboards for more in-depth or look up questions.
Do we need the desk? Particularly for directional questions, perhaps a desk isn’t even needed. For in-depth reference, the suggestion is to have two chairs on the same side of a table.
Media Access & Media Accessibility
Captioning is important to compensate to audio (poor, noisy background, not allowed), to quickly browse a video, catch details, show correct spelling, support for ESL, accessible, and it’s compliant. Description is important for similar reasons.
Captions and transcripts could greatly help with searching of media as well.
Few Media Players & Internet Plug-ins
Flash (DFXP, QTText)
Quicktime (QTText, SMIL, tx3g subtitles, CC tracks/Line 21 braodcast captions)
Windows Media Player
Silverlight
VLC
Flow Player – fallback to non-flash video
NCAM Player – find feature
JW Player – fallback to non-flash video
Magpie – Windows Captioning
Capcat (s?) -MAC Captioning
Information & Resources: Inclusivemedia.ca
Future Tools
HTML5 video with track tag once built into browsers