Skip to content

Instantly share code, notes, and snippets.

(function () {
var start;
var isRunning = false;
var frames = 0;
var intervalId;
var entries = [];
function onFrame () {
if (isRunning) {
window.requestAnimationFrame(onFrame);
function getAverage (arr) {
return arr.reduce(function (prev, cur) {
return prev + cur;
}) / arr.length;
}
function getNestedLevel (el) {
var level = 0;
while (el = el.parentNode) {
level++;
(function () {
'use strict';
var origLog = window.console.log.bind(window.console);
var stash = [];
window.console.log = function () {
stash.push([].slice.apply(arguments));
origLog.apply(this, arguments);
};
var gotData = function (request) {
if (request.params.query === someField.value) {
resultList.innerHTML = request.data.map(function (item) {
return '<li>' + item.text + '</li>';
});
}
}
someField.onkeyup = function () {
var query = someField.value;
var race = new PromiseRace();
var gotData = function (data) {
resultList.innerHTML = data.map(function(item){
return '<li>' + item.text + '</li>';
});
}
someField.onkeyup = function() {
var promise = race.add($.get('/some/url?query=' + someField.value));
this.addMatchers({
toBeAbout: function (expected, precision) {
if (typeof this.actual !== 'number' || typeof expected !== 'number') {
return false;
}
var delta = Math.abs(expected - this.actual);
precision = precision || 20;
return delta <= precision;
},
@dmitryshimkin
dmitryshimkin / jquery-resize-start-end.js
Last active January 19, 2023 00:40
resizeStart and resizeEnd events for $(window)
(function () {
var THRESHOLD = 750;
var timeoutId;
var resizing = false;
var win = $(window);
win.on('resize', function () {
var timeout = function () {
clearTimeout(timeoutId);
@dmitryshimkin
dmitryshimkin / get-transform-prefix.js
Last active December 16, 2015 22:39
Cross-browser element position
/**
* Returns transform preperty for this browser
*/
var getTransformPrefix = function () {
if (getTransformPrefix.prefix === undefined) {
var prefixes = ['transform', 'WebkitTransform', 'MozTransform', 'OTransform', 'msTransform'];
var testNode = document.createElement('div');
for (var i = 0; i < prefixes.length; i++) {
if (testNode.style[prefixes[i]] !== undefined) {
@dmitryshimkin
dmitryshimkin / focus-mixin.less
Last active December 15, 2015 18:19
Less mixin to emulate :focus pseudo-class for IE7. Probably works under IE 5-6 (not tested). Based on one-time expression (executed only once, doesn't affect performance)
/* mixin */
.focus(@className: "focused") {
behavior: ~"expression(function focus(el) { el.runtimeStyle.behavior = 'none'; var focusClass = ' @{className}'; el.onfocus = function() { el.className += (focusClass); }; el.onblur = function() { el.className = el.className.replace(new RegExp(focusClass, 'g'), ''); }; }(this))";
}
/* usage */
.input {
.focus("input_focused");
.input:focus,
@dmitryshimkin
dmitryshimkin / insert-html-mixin.less
Last active December 15, 2015 18:19
Less mixin for inserting html via css under IE 5-7. Based on one-time css expression (executed only once, doesn't affect performance). Useful to emulate pseudo-elements, add extra-markup for old browsers or emulate css3 with images.
/* mixin */
.insert-html(@html: "") {
behavior: ~"expression(function html (el) { el.runtimeStyle.behavior = 'none'; if (!el.updated) { el.updated = true; el.insertAdjacentHTML('afterBegin', '@{html}'); } }(this))";
}
/* usage */
.some-class {
.insert-html('<span class="shadow"></span>');
}