Skip to content

Instantly share code, notes, and snippets.

View john-doherty's full-sized avatar
🎯
Focusing

John Doherty john-doherty

🎯
Focusing
View GitHub Profile
@john-doherty
john-doherty / cordova-file-storage.js
Last active August 2, 2023 10:32
An easy way to read/write files in Cordova
var fileStorage = {
/**
* Saves a file on the device
* @param {string} name - filename (can include sub folders)
* @param {string} data - file contents
* @param {boolean} useSandbox - uses protected sandbox if true, otherwise external (default false)
* @returns {Promise} executes .then with saved file path as first param
*/
write: function (name, data, useSandbox) {
@john-doherty
john-doherty / javascript-string-to-json-safe-key.js
Created June 16, 2019 18:12
Converts a string to JSON safe key (property name) by removing unsafe characters and converting to camel case
/**
* Converts a string to JSON safe key (property name) by removing unsafe
* characters and converting to camel case
* @param {string} src - string to convert
* @Example
* stringToJsonSafeKey('r@ndAm wo5d') // rndamWo5d
* @returns {string} id/key safe string
*/
function stringToJsonSafeKey(src) {
@john-doherty
john-doherty / remove-invalid-xml-characters.js
Last active March 30, 2024 10:19
JavaScript function that removes invalid XML characters from a string according to the spec
/**
* Removes invalid XML characters from a string
* @param {string} str - a string containing potentially invalid XML characters (non-UTF8 characters, STX, EOX etc)
* @param {boolean} removeDiscouragedChars - should it remove discouraged but valid XML characters
* @return {string} a sanitized string stripped of invalid XML characters
*/
function removeXMLInvalidChars(str, removeDiscouragedChars) {
// remove everything forbidden by XML 1.0 specifications, plus the unicode replacement character U+FFFD
var regex = /((?:[\0-\x08\x0B\f\x0E-\x1F\uFFFD\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]))/g;
@john-doherty
john-doherty / yc-startup-descriptions.js
Last active March 17, 2021 11:24
Calculate the average number of words used to describe Y Combinator startup
// 1) visit yclist.com
// 2) open the browser console
// 3) run the following
// get all table rows
var rows = Array.prototype.slice.call(document.querySelectorAll('#companies tbody tr'));
// extract descriptions (use lastChild to skip aquired etc)
var descriptions = rows.map(function (row) { return row.cells[5].lastChild.textContent.trim(); });
@john-doherty
john-doherty / settimeout-using-requestanimationframe.js
Created April 24, 2018 17:54
JavaScript window.setTimeout replacement using requestAnimationFrame for better performance
(function (window) {
'use strict';
var oldSetTimeout = window.setTimeout;
/**
* Behaves the same as setTimeout but uses requestAnimationFrame() for better performance
* @param {function} fn The callback function
* @param {int} delay The delay in milliseconds
@john-doherty
john-doherty / disable-mac-swipe-navigation.js
Created February 12, 2018 11:42
Disable Mac swipe navigation in pure JavaScript
(function (window) {
if ((/Macintosh/gi).test(navigator.userAgent) && (/Chrome|Safari|Firefox/gi).test(navigator.userAgent)) {
history.pushState(null, null, location.href);
window.onpopstate = function(event) {
history.go(1);
};
}
@john-doherty
john-doherty / javascript-clean-csv-string.js
Last active March 28, 2024 01:31
Remove empty values, trim whitespace and removes duplicate from a comma separated string in JavaScript
/**
* Removes empty values, trims whitespace and removes duplicate from a comma separated string in JavaScript
* @example
* cleanCsvString('one, ,, , two,two,two, three'); // returns 'one,two,three'
* cleanCsvString('one, ,, , two,two,two, three', false); // returns 'one,two,two,two,three'
* @param {string} str - string to modify
* @param {boolean} removeDuplicates - should remove duplicate items? (default = true)
* @returns {string} cleaned CSV string
*/
function cleanCsvString(str, removeDuplicates) {
@john-doherty
john-doherty / javascript-get-styles-by-selector.js
Last active August 17, 2017 11:26
Get all css style blocks matching a css selector from stylesheets
/**
* Get all CSS style blocks matching a CSS selector from stylesheets
* @param {string} className - class name to match
* @param {boolean} startingWith - if true matches all items starting with selector, default = false (exact match only)
* @example getStylesBySelector('pure-form .pure-form-html ')
* @returns {object} key/value object containing matching styles otherwise null
*/
function getStylesBySelector(className, startingWith) {
@john-doherty
john-doherty / javascript-http-get.js
Last active September 28, 2018 18:30
Simple, pure JavaScript HTTP Get function (IE8+, Chrome, Safari, Firefox, PhoneGap/Cordova)
/**
* GET contents of a URL
* @access private
* @param {string} url - url to get
* @param {function} error - function to call if there is an error
* @param {function} callback - function to call if success
* @returns {void}
*/
function httpGet(url, error, callback) {
# Disable DPMS.
xset s off # don't activate screensaver
xset -dpms # disable DPMS (Energy Star) features.
xset s noblank # don't blank the video device
# Create a RAM disk to use as a FIFO for streaming.
if [ ! -d /iwk ]; then
mkdir /tmp/rdisk
fi
mount -t tmpfs -o size=25M tmsfs /tmp/rdisk