Skip to content

Instantly share code, notes, and snippets.

@greypants
greypants / README.markdown
Last active October 17, 2023 05:49 — forked from reagent/nav_link.rb
RAILS 3: nav_link helper for adding 'selected' class to navigation elements
@greypants
greypants / timeBasedAnimationPattern.js
Created September 17, 2012 18:48
JS: Time-based animation pattern
// Full Blog Post: http://viget.com/extend/time-based-animation
// requestAnimationFrame() polyfill: https://gist.github.com/1579671
window.APP = window.APP || {};
APP.pause = function() {
window.cancelAnimationFrame(APP.core.animationFrame);
};
APP.play = function() {
@greypants
greypants / handleScroll.js
Created August 20, 2012 22:58
JS: Scroll Event Handling
/*
Check scroll position on a timer
Instead it's much better to use some form of a timer to check every X milliseconds OR to attach a scroll event and only run your code after a delay (or even after a given number of executions - and then a delay).
http://ejohn.org/blog/learning-from-twitter/
*/
var didScroll = false;
var handleScroll = function() {
if ( didScroll ) {
didScroll = false;
@greypants
greypants / preloadImages.js
Created July 25, 2012 21:01
JS: Preload a set of images and fire a callback when all are loaded.
var preloadImages = function(imageSources, callback) {
var images = [];
var tryCallback = function() {
var allImagesLoaded = (function(){
for (var i = images.length; i--;) {
if(!images[i].isLoaded){
return false;
}
@greypants
greypants / data-track.md
Created December 18, 2012 21:55
GA: data-track attribute pattern

Basic Tracking

data-track

To add basic event tracking to an element on the page, add this attribute with the appropriate values you'd like to send, separated by pipes |.

<button data-track="category|action|opt_label|opt_value|opt_noninteraction">
	Basic Tracking
</button>

Optional attributes

function jsonEqual (a, b) {
return JSON.stringify(a) === JSON.stringify(b)
}
function originalIfUnchanged(state, nextState) {
if(state === nextState) {
return state
}
return jsonEqual(state, nextState) ? state : nextState
@greypants
greypants / gist:3185028
Created July 26, 2012 22:45 — forked from djadriano/gist:2975860
SCSS: keyframe mixins
// ======================================================================
// Animation.scss
// - Contains helpers for keyframes animation in css3
// - Only functionally with Sass 3.2.0 Alpha and Compass 0.13.alpha
// ======================================================================
@mixin animation-name($name) {
-webkit-animation-name: $name;
-moz-animation-name: $name;
-ms-animation-name: $name;
@greypants
greypants / SassMeister-input-HTML.html
Created November 26, 2013 18:49 — forked from tommymarshall/SassMeister-input-HTML.html
Generated by SassMeister.com.
<button class="button -blue -large -rounded overrides -disable -right">I'm a button!</button>
@greypants
greypants / jquery.plugin.js
Created June 19, 2013 17:41 — forked from davist11/gist:2702312
JS: jQuery Plugin Pattern
/*
* 'Highly configurable' mutable plugin boilerplate
* Author: @markdalgleish
* Further changes, comments: @addyosmani
* Licensed under the MIT license
*/
// Note that with this pattern, as per Alex Sexton's, the plugin logic
// hasn't been nested in a jQuery plugin. Instead, we just use
// jQuery for its instantiation.
@greypants
greypants / APP.js
Created May 21, 2013 21:41
JS: Garber-Irish-Tello
APP = {
init: function() {
// Check for controller and action js
var body = document.body;
var controllerJs = this[body.getAttribute("data-controller")];
var actionJs = controllerJs ? controllerJs[body.getAttribute("data-action")] : false;
// Cache global vars
this.$body = $(body);