Skip to content

Instantly share code, notes, and snippets.

@terrencewood
terrencewood / index.html
Created June 22, 2014 20:14
iOS minimal-ui orientation change fix
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimal-ui">
<title>Title</title>
<style>
body {
-webkit-text-size-adjust: 100%;
position: absolute;
top: 0;
@terrencewood
terrencewood / mediaquerylistcustomevents.js
Last active August 29, 2015 14:00
emit custom events when a named media query becomes active or inactive
(function(){
'use strict';
var breakpoints = {
'(max-width: 30em)' : 's',
'(min-width: 30.1em)' : 'm',
'(min-width: 48em)' : 'l'
};
var events = {};
@terrencewood
terrencewood / mediaquerylisteners.js
Created April 27, 2014 20:48
Parse CSS for and create mediaQueryListeners for found breakpoints
(function() {
var handleMediaQueryMatch = function(mql) {
console.log('%s : %s', mql.media, mql.matches);
};
var mediaQueryListeners = function() {
for(var i = -1, sheets = document.styleSheets, sheet; sheet = sheets[++i];) {
for(var j = -1, rules = sheet.cssRules, rule, mql; rule = rules[++j];) {
@terrencewood
terrencewood / erb2haml
Created February 23, 2014 20:09
erb2haml
find . -name '*erb' | xargs ruby -e 'ARGV.each { |i| puts "html2haml -r #{i} #{i.sub(/erb$/,"haml")}"}' | bash
@terrencewood
terrencewood / Critical CSS bookmarklet
Created February 8, 2014 04:11
Bookmarklet to find critical path CSS - full JS copied from https://gist.github.com/PaulKinlan/6284142
javascript:(function(){var CSSCriticalPath=function(w,d,opts){var opt=opts ||{};var css={};var pushCSS=function(r){if(!!css[r.selectorText]===false)css[r.selectorText]={};var styles=r.style.cssText.split(/;(%3F![A-Za-z0-9])/);for(var i=0;i < styles.length;i++){if(!!styles[i]===false)continue;var pair=styles[i].split(": ");pair[0]=pair[0].trim();pair[1]=pair[1].trim();css[r.selectorText][pair[0]]=pair[1];}};var parseTree=function(){var height=w.innerHeight;var walker=d.createTreeWalker(d,NodeFilter.SHOW_ELEMENT,function(node){return NodeFilter.FILTER_ACCEPT;},true);while(walker.nextNode()){var node=walker.currentNode;var rect=node.getBoundingClientRect();if(rect.top < height || opt.scanFullPage){var rules=w.getMatchedCSSRules(node);if(!!rules){for(var r=0;r < rules.length;r++){pushCSS(rules[r]);}}}}};this.generateCSS=function(){var finalCSS="";for(var k in css){finalCSS+=k+" { ";for(var j in css[k]){finalCSS+=j+": "+css[k][j]+"; ";}finalCSS+="}\n";}return finalCSS;};parseTree();};var cp=new CSSCriticalPath(win
@terrencewood
terrencewood / MySingleClassModelAdmin.php
Last active September 28, 2017 18:45
SilverStripe ModelAdmin a single page type from the SiteTree
<?php
class MySingleClassModelAdmin extends ModelAdmin {
static $managed_models = array('SiteTree');
static $url_segment = 'mysingleclass';
static $menu_title = 'MySingleClass';
public function getList() {
return parent::getList()->filter('MySingleClass');
}
@terrencewood
terrencewood / MyModelAdmin.php
Created June 24, 2013 09:17
Remove the add button from a ModelAdmin screen
<?php
class MyModelAdmin extends ModelAdmin {
static $managed_models = array(
'MyModel',
);
static $url_segment = 'myurlsegment';
static $menu_title = 'My Model Admin';
// Remove the addButton
@mixin image-2x($image, $width, $height) {
@media (min--moz-device-pixel-ratio: 1.3),
(-o-min-device-pixel-ratio: 2.6/2),
(-webkit-min-device-pixel-ratio: 1.3),
(min-device-pixel-ratio: 1.3),
(min-resolution: 1.3dppx) {
/* on retina, use image that's scaled by 2 */
background-image: url($image);
background-size: $width $height;
}
@terrencewood
terrencewood / FOO.event.publisher.TouchGesture
Created November 22, 2012 03:21
Sencha Touch 2 Use native event handling in selected controllers
Ext.define('FOO.event.publisher.TouchGesture', {
override: 'Ext.event.publisher.TouchGesture',
onEvent: function(e) {
if (FOO.useNativeEvents) {
e = e.browserEvent || e;
e.preventDefault = function(){};
@terrencewood
terrencewood / List.js
Created November 16, 2012 00:57
Sencha Touch 2 Dataview/List accept a class config object for emptyText
Ext.define('FOO.dataview.List', {
override: 'Ext.dataview.List',
// @override - allow emptyText to be a config object
updateEmptyText: function(newEmptyText, oldEmptyText) {
var me = this,
store,
defaults = {
xtype: 'component',