Skip to content

Instantly share code, notes, and snippets.

View BorisChumichev's full-sized avatar
🍕
🍕

Boris Chumichev BorisChumichev

🍕
🍕
View GitHub Profile
@BorisChumichev
BorisChumichev / snitch-mini-apps.js
Created January 16, 2023 14:08
snitch-mini-apps-0.0.16-with-scroll-plugin
var createSnitch=function(){"use strict";var e=[],n=[];window.addEventListener("scroll",(function(){var t=window.scrollY/(Math.max(document.body.scrollHeight,document.body.offsetHeight,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight),r=10*Math.round(100*t/10);~e.indexOf(r)||(e.push(r),n.forEach((function(e){return e(r)})))}));function t(){var t;return{setEventHandler:function(e){t=e},onInit:function(){var e;e=function(e){return t("scroll",{depthPercent:e})},~n.indexOf(e)||n.push(e)},beforeCaptureEvent:function(n){"locationChange"!==n&&"screenChange"!==n||(e=[])}}}function r(){for(var e="",n="useandom26T198340PX75pxJACKVERYMINDBUSHWOLFGQZbfghjklqvwyzrict",t=n.length,r=0;r<32;r++)e+=n.charAt(Math.floor(Math.random()*t));return e}var a="isdp:sid",o="isdp:scnt",i="isdp:sutm",c="isdp:livts",l="isdp:ssts";function s(){return localStorage.getItem(a)}function u(e){localStorage.setItem(c,e.toString())}var d=/,+$/;function v(e){var n=
@BorisChumichev
BorisChumichev / isSafaiApp.js
Last active September 10, 2023 04:47
iOS Webview detection with Javascript
const hasValidDocumentElementRatio =
[ 320 / 454 // 5, SE
, 375 / 553 // 6, 7, 8
, 414 / 622 // 6, 7, 8 Plus
, 375 / 812 // X
, 414 / 896 // Xs, Xr
].some(ratio =>
ratio === document.documentElement.clientWidth /
document.documentElement.clientHeight
)
@BorisChumichev
BorisChumichev / C@S.md
Last active January 20, 2017 12:07 — forked from Gegam/C@S.md

Общие требования для всех категорий баннеров:

Динамический баннер является частным случаем HTML5-баннера и наследует его технические требования. Кроме требований для HTML5-баннеров необходимо соблюсти следующие условия:

  1. Все кликабельные ссылки должны вставляться только в виде html-тега <a>. Эмуляция кликабельной области с помощью JavaScript запрещается
  2. Элементы баннера, которые предполагают пользовательское взаимодействие (формы, кнопки и пр. интерактивные компоненты), не должны перекрываться кликабельной ссылкой.
  3. В случае возникновения ошибок в баннере необходимо обеспечить показ его упрощенной версии или gif-заглушки.
  4. Из баннера необходимо убрать теги html, head (со всем содержимым, в т.ч. meta), и body. Стили и скрипты, подключаемые в теге head должны быть вынесены за него.
  5. Все стили и скрипты, которые имеют обращение к статическим ресурсам баннера (картинки, шрифты и т.д.), должны быть раз
@BorisChumichev
BorisChumichev / genderize.js
Created December 14, 2016 15:33
Gender resolver (RU)
'use strict';
const MALE = 'абрам-аваз-аввакум-андрэ-август-августин-авдей-авраам-автандил-агап-агафон-аггей-адам-адис-адольф-адриан-азамат-айдар-айрат-аким-алан-александр-алексей-али-альберт-альфред-амадей-амадеус-амаяк-амвросий-ананий-анастасий-анатолий-анвар-ангел-андоим-андрей-аникита-антон-арам-арий-аристарх-аркадий-арно-арнольд-арон-арсен-арсений-арслан-артем-артемий-артур-архип-аскольд-аслан-афанасий-ахмет-ашот-бальтазар-бежен-бенедикт-берек-бернард-бертран-богдан-болеслав-борис-бронислав-булат-вадим-валентин-валерий-вальтер-варфоломей-василий-вацлав-велизар-венедикт-вениамин-викентий-виктор-вилли-вильгельм-виссарион-виталий-витольд-владимир-владислав-владлен-володар-вольдемар-всеволод-вячеслав-гавриил-галактион-гарри-гастон-гаяс-гевор-геннадий-генрих-георгий-геракл-геральд-герасим-герман-глеб-гордей-гордон-горислав-градимир-григорий-гурий-густав-давид-дамир-даниил-даниэль-данияр-дарий-дементий-демид-демосфен-демьян-денис-джамал-джордан-дмитрий-добрыня-дональд-донат-дорофей-евгений-евграф-евдоким-евсе
@BorisChumichev
BorisChumichev / scrolldepth.js
Last active June 29, 2017 09:24 — forked from Gegam/scrolldepth.js
Google analytics scroll depth tracking
;(function() {
var passedMilestones = []
, nonInteractiveThreshold = 20
window.addEventListener('scroll', function(e) {
var scrollTop = window.scrollY
, body = document.body
, html = document.documentElement
, docHeight = Math.max(
@BorisChumichev
BorisChumichev / deviceorientationDeepCheck.js
Last active June 29, 2016 15:47
`deviceorientation` deep check
(function () {
var URL_SUCCESS = ''
, URL_FAILURE = ''
function checkSupport(supported, notSupported) {
var failureTimeout = null
function attachEvent() {
if (window.addEventListener)
window.addEventListener('deviceorientation', checkEventData, true)
@BorisChumichev
BorisChumichev / insert-colons-to-my-styl-please.js
Last active March 17, 2016 15:04
Inserts colons to stylus code
var fs = require('fs')
, filesToCorrect = process.argv.length - 2
, addColonsToFile = function (pathToFile) {
try {
var code = fs.readFileSync(pathToFile).toString()
, stringsToReplace = code.match(/^\s*(?!for)([a-z-]*)\b\s+[^:=]/gm)
} catch(e) {
console.log('error while reading: ' + pathToFile)
}
if (stringsToReplace === null) return
@BorisChumichev
BorisChumichev / util.js
Last active August 29, 2015 14:11 — forked from derekr/util.js
/**
* DIY browser shim for node's `util`
*
* @package www
* @author Derek Reynolds <drk@diy.org>
*/
// NOTE: These type checking functions intentionally don't use `instanceof`
// because it is fragile and can be easily faked with `Object.create()`.
function isArray (ar) {
@BorisChumichev
BorisChumichev / bash-profile-terminal
Last active August 29, 2015 14:09
.bash_profile – some terminal enhancements
if [[ $COLORTERM = gnome-* && $TERM = xterm ]] && infocmp gnome-256color >/dev/null 2>&1; then export TERM=gnome-256color
elif infocmp xterm-256color >/dev/null 2>&1; then export TERM=xterm-256color
fi
if tput setaf 1 &> /dev/null; then
tput sgr0
if [[ $(tput colors) -ge 256 ]] 2>/dev/null; then
MAGENTA=$(tput setaf 9)
ORANGE=$(tput setaf 172)
GREEN=$(tput setaf 190)