Skip to content

Instantly share code, notes, and snippets.

@andfinally
andfinally / font.js
Last active October 20, 2020 20:37
Cache webfont in localStorage
/**
* Adapted from https://gist.github.com/hdragomir/8f00ce2581795fd7b1b7
* This version tries to load the font from localStorage. If it's not there it simply adds a link to the stylesheet
* and ajaxes the contents in on load. This makes an extra request. But adding the stylesheet link renders quicker than
* waiting for a response to the ajax request and then injecting the contents into a style tag, hopefully minimising the
* FOUT you get when you view http://www.theguardian.com/ and http://www.smashingmagazine.com.
*/
(function () {
"use strict";
// Once cached the css file is stored on the client forever. To invalidate the cache change this URL.
@andfinally
andfinally / .htaccess
Last active November 23, 2020 02:01
Barebones Backbone Router example for an Apache site with a local URL like http://local5/backbone-router.
# html5 pushstate (history) support:
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !index
RewriteRule (.*) index.html [L,QSA]
</ifModule>
@andfinally
andfinally / normalise-url.js
Created October 8, 2013 10:49
Turn a URL into just the path + querystring
// normalizeUrl('http://news.bbc.co.uk/sport/?page=1#test');
// returns "/sport/?page=1"
var normalizeUrl = function (url) {
var a = document.createElement('a');
a.href = url;
a = a.pathname + a.search;
a = a.indexOf('/') === 0 ? a : '/' + a; // because IE doesn't return a leading '/'
return a;
};
@andfinally
andfinally / adjust_page_height.js
Created October 2, 2013 11:05
Periodically check the height of the main content container and reset its height to accommodate any increase in the height of its children that might've happened. Content container has overflow hidden. Content like FB comments can increase in height after page load.
// Make the contentArea height equal to the paneVisible height. (We view the latter through the former.)
var updateHeight = function(){
var height = $(paneVisible).children().height();
if (height) {
$(contentArea).height(height + paneVisibleMargin);
}
};
// Set a periodic height adjustment for the content area. Necessary to account for diverse heights of side-panes as they slide in, and dynamic page elements.
setInterval(function(){
@andfinally
andfinally / ping_google_analytics.js
Created October 1, 2013 10:26
Ping Google Analytics "Log" and the time in hh:mm:ss at intervals - Stephan's code. Seems to log custom event with GA every 1 or 1.5 seconds, with seconds elapsed since the analytics JS started running.
// Converts number of seconds to hh:mm:ss
if( typeof Number.prototype.toHHMMSS !== 'function' ) {
Number.prototype.toHHMMSS = function (){
var hours = Math.floor(this / 3600);
var minutes = Math.floor((this - (hours * 3600)) / 60);
var seconds = this - (hours * 3600) - (minutes * 60);
var str;
str = ( hours === 0 ? '' : (hours < 10 ? '0' + hours : hours ) + ':' );
str += ( minutes < 10 ? '0' + minutes : minutes ) + ':';
str += ( seconds < 10 ? '0' + seconds : seconds );