Skip to content

Instantly share code, notes, and snippets.

View hperrin's full-sized avatar

Hunter Perrin hperrin

View GitHub Profile
@hperrin
hperrin / bootstrap-spotter.css
Last active May 11, 2017 00:09
Spot Bootstrap with ease.
/*!
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
html {
font-family: sans-serif;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
@hperrin
hperrin / README.md
Last active June 8, 2017 01:30
Radical Mode
@hperrin
hperrin / index.html
Last active January 1, 2018 17:52 — forked from anonymous/index.html
<html>
<body style="font-size: 16pt;">
<p style="text-align: center;">Email: <a href="mailto:chark1212@gmail.com">chark1212@gmail.com</a></p>
<p style="text-align: center;">Cell: <a href="tel:+18582292679">858-229-2679</a></p>
</body>
</html>
@hperrin
hperrin / index.js
Created March 14, 2018 01:26
insertInOrder JavaScript Array method. (Insert item into a sorted array.)
Array.prototype.insertInOrder = function(item) {
for (var i = 0; this[i] < item && i < this.length; i++);
this.splice(i, 0, item);
};
@hperrin
hperrin / index.js
Last active May 9, 2018 00:01
JavaScript strRepeat. (Ridiculously efficient.)
export default function strRepeat (str, repeat) {
let curStr = str, i = 1, result = '';
while (true) {
if (i & repeat) result += curStr;
i *= 2;
if (i >= repeat) break;
curStr += curStr;
}
return result;
}
@hperrin
hperrin / Slim.php
Last active May 9, 2018 01:05
PHP Slim archiving class. Slim is a portable file archive format based on JSON. It can be self extracting in multiple languages.
<?php
/**
* Slim archiving class.
*
* Slim is a portable file archive format based on JSON. It can be self
* extracting in multiple languages.
*
* @license https://www.apache.org/licenses/LICENSE-2.0
* @author Hunter Perrin <hperrin@gmail.com>
@hperrin
hperrin / nymphquery.js
Last active May 10, 2018 00:42
Example Nymph Query from Frontend
try {
const entities = await Nymph.getEntities(
{'class': BlogPost.class},
{'type': '&',
'like': ['title', '%easy%'],
'equal': ['archived', false]
}
);
console.log(entities);
} catch (e) {
@hperrin
hperrin / frontend.js
Last active May 10, 2018 19:56
Equivalent SQL Query from Frontend
function titleSeach (title, archived) {
return fetch(
'/api/titlesearch.php?title=' +
encodeURIComponent(title) +
'&archived=' +
encodeURIComponent(JSON.stringify(archived))
).then(res => {
if (!res.ok) return Promise.reject(res);
return res.json()
});
// Returns true about 50% of the time, false about 50% of the time.
export default const maybe = () => Math.random() < .5;
// This should be closer to .5 the more iterations you run.
export const tester = iterations => {
let yes = 0;
for (let i = 0; i < iterations; i++) maybe() && yes++;
return yes/iterations;
}
@hperrin
hperrin / Get caret Y position in HTML (WYSIWYG) editor from document origin.
Created February 5, 2014 18:54
This function will give the Y position of the text cursor (caret) when it is in a contenteditable element. This particular one only works on CKEDITOR.
var getCaretYPosition = function(){
var editor = CKEDITOR.instances.editor1, //get your CKEDITOR instance here
sel = editor.getSelection(), // text selection
obj = sel.getStartElement().$, // the element the selected text resides in
range = editor.getSelection().getRanges(), // range of selection
container = range[0].startContainer.$, // get the DOM node of the selected text, probably a textnode
textlen = typeof obj.textContent === "undefined" ? obj.innerText.length : obj.textContent.length, // get the length of the text in the container
offset = range[0].startOffset; // get the offset from the beginning of the text in the container to the caret
if (container.nodeType === 3) { // if the container is a text node
while (container.previousSibling) { // add the length of all the preceding text nodes and elements in the same parent element