Skip to content

Instantly share code, notes, and snippets.

@robozevel
robozevel / generateLink.middleware.js
Created April 2, 2015 09:06
Express middleware method to generate a link
var path = require('path');
var fs = require('fs');
var cheerio = require('cheerio');
var createTemplate = function(id, markup) {
var $ = cheerio.load('<script type="text/ng-template"></script>');
$('script').attr('id', id).html(markup).html();
return $.html();
};
var require = (function() {
var rComments = /((\/\/.*$)|(\/\*[\s\S]*?\*\/)|(\s))/mg;
var rArguments = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
var getArguments = function(fn) {
// https://gist.github.com/thebyrd/6924190
var argNames = fn.toString().replace(rComments,'').match(rArguments)[1];
return argNames ? argNames.split(/,/) : [];
};
return function(dependencies, fn) {
location.search.substr(1).split("&").reduce(function(o, pair) {
pair = pair.split("=");
o[pair[0]] = pair[1] && decodeURIComponent(pair[1]);
return o;
}, {});
var isValidUrl = (function() {
var protocols = ["http", "https", "ftp"];
var requireProtocol = false;
var requireTLD = true;
var pattern = new RegExp('^(?!mailto:)(?:(?:' + protocols.join('|') + ')://)' + (requireProtocol ? '' : '?') + '(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))' + (requireTLD ? '' : '?') + ')|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$', 'i');
return function(str) {
return (typeof str === "string") && str.length < 2083 && pattern.test(str);
}
}());
@robozevel
robozevel / escapeSqlString.js
Created April 2, 2014 13:18
Escape SQL string (extracted from node-mysql)
// https://github.com/felixge/node-mysql/blob/master/lib/protocol/SqlString.js
function escapeSqlString(text) {
return text.replace(/[\0\n\r\b\t\\\'\"\x1a]/g, function(s) {
switch(s) {
case "\0" : return "\\0";
case "\n" : return "\\n";
case "\r" : return "\\r";
case "\b" : return "\\b";
case "\t" : return "\\t";
case "\x1a": return "\\Z";
@robozevel
robozevel / underscore.whenOnline.js
Created March 30, 2014 09:16
Ensure a function is invoked only when online
_.mixin({
whenOnline: function(fn, context) {
return function() {
var args = arguments;
context = context || this;
if (navigator.onLine) {
fn.apply(context, args);
} else {
window.addEventListener('online', function online() {
fn.apply(context, args);
@robozevel
robozevel / geolocate.js
Created March 27, 2014 16:57
Geolocate using Wikimedia's Geo IP Lookup service
var geolocate = function(callback) {
callback = typeof callback === "function" ? callback : function(){};
if ('Geo' in window) {
callback(window.Geo);
} else {
var script = document.createElement('script');
script.src = "https://geoiplookup.wikimedia.org/";
script.onload = function() { callback(window.Geo) };
document.head.appendChild(script);
}
@robozevel
robozevel / esc.html
Created March 23, 2014 08:50
Stop propagation of the ESC key event when closing a file selection dialog
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<label for="uploadFile">UPLOAD</label>
<input type="file" id="uploadFile"/>
<script>
$("input[type='file']").on("keyup", function(e) {
if (e.keyCode === 27) this.blur(), e.stopPropagation();
});
$(document).on("keyup", function(e) {
@robozevel
robozevel / typehead.json
Created March 18, 2014 09:23
FQL Typehead
[
{
"uid": "keywordSELECT",
"subtext": "[FQL keyword]",
"text": "SELECT"
},
{
"uid": "keywordFROM",
"subtext": "[FQL keyword]",
"text": "FROM"