CSS classes based on page location

When styling SharePoint sites, it can be very useful to add specific styles to specific “pages” or views. Here’s a bit of jQuery/javascript code to make that possible. It works by grabbing the page location turning it into classes that are added to the body tag.


jQuery(document).ready(function($){
//use a javascript variable to hold the results of jQuery's "find the body tag" call
var $body = $('body');
//use a variable to capture and store the page url, also removing the 'http(s)://'
var url = window.location.href.replace(/http[s]?:\/\//, '');
//replace any .html, .asp(x), .php or .jsp file extensions
url = url.replace(/\.(htm[l]?|asp[x]?|php|jsp)$/,'');
//replace any '.' with '_' - ie. 'example.com' will become 'example_com'
url = url.replace(/[.]/g, "_");
//Wherever there is a '/', split url into a segment
var segments = url.split('/');
//Take these segments and add them as classes to the body
for (var i = 0; i < segments.length; i++) { $body.addClass(segments[i]); } });

For servers that prefer case sensitivity but allow either case to work (like SharePoint), and where that may cause unwanted headaches you can replace the line where we first define 'var url' with this:

var url = window.location.href.toLowerCase().replace(/http[s]?:\/\//, '');

Nearly automatic breadcrumbs

Breadcrumbs

var here = location.href.replace(/(\?.*)$/,'').split('/').slice(3);

var parts = [{ "text": 'Home', "link": '/' }];

for( var i = 0; i < here.length; i++ ) {
var part = here[i];
var pageName = part.toLowerCase();
pageName = part.charAt(0).toUpperCase() + part.slice(1);
var link = '/' + here.slice( 0, i + 1 ).join('/');
$('#siteBreadcrumb ol.breadcrumb').append('<li><a href="' + link +'">' + pageName.replace(/\.(htm[l]?|asp[x]?|php|jsp)$/,'') + '</a></li>');
parts.push({ "text": pageName, "link": link });
}

Generates breadcrumb links based on the URL/path of the document.

SVG: Where a good idea runs into the brick wall of browser implementation (or lack thereof)

Let’s say you want to create a nice, user friendly, device-agnostic, lightly interactive map. SVG immediately comes to mind as a good technology to use in such a case. Pretty good browser support now days and it doesn’t require plugins. For those who can’t use SVG, you can always provide fallback support as needed.

Now let’s say that you want to provide captions and a key legend for your map. Great! SVG supports fonts and font embedding!

But what’s this? Firefox does not support SVG fonts? SVG, meet the brick wall of browser implementation or the lack thereof.

So we turn our nice SVG text into shapes and use the “desc” and “title” attributes to at least make our formerly-text content somewhat accessible.

To end on a more hopeful note, it looks like there’s a standard being developed to allow Open Type fonts to carry SVG path data, and the Firefox team may adopt this, thus solving Firefox’s SVG font “problem”.