Skip to content

Instantly share code, notes, and snippets.

View ilya-korotya's full-sized avatar

Ilya ilya-korotya

View GitHub Profile
$breakpoints: (
'medium': (min-width: 200px),
'large': (min-width: 400px),
'huge': (min-width: 600px),
);
@mixin respond-to($breakpoint) {
@if map-has-key($breakpoints, $breakpoint) {
@media #{inspect(map-get($breakpoints, $breakpoint))} {
@content;
@ilya-korotya
ilya-korotya / ApiCheck.js
Last active May 31, 2018 06:53
Check property in object
function proxyOptional(obj, evalFunc, def) {
const handler = {
get: function(target, prop, receiver) {
const res = Reflect.get(...arguments);
return typeof res === "object" ? proxify(res) : res != null ? res : def;
}
};
const proxify = target => {
return new Proxy(target, handler);
@ilya-korotya
ilya-korotya / gulpfile.js
Created May 31, 2018 07:03
Basic gulp config
var gulp = require('gulp'),
sass = require('gulp-sass'),
autoprefixer = require('gulp-autoprefixer'),
csso = require('gulp-csso'),
rename = require("gulp-rename"),
plumber = require('gulp-plumber'),
notify = require("gulp-notify"),
watch = require('gulp-watch'),
browserSync = require('browser-sync').create(),
imagemin = require('gulp-imagemin'),
@ilya-korotya
ilya-korotya / gulpfile.js
Created May 31, 2018 07:05
Advanced gulp config
const gulp = require('gulp'),
sass = require('gulp-sass'),
postcss = require('gulp-postcss'),
autoprefixer = require('autoprefixer'),
mqpacker = require('css-mqpacker'),
sourcemaps = require('gulp-sourcemaps'),
debug = require('gulp-debug'),
gulpIf = require('gulp-if'),
del = require('del'),
newer = require('gulp-newer'),
@ilya-korotya
ilya-korotya / package.json
Last active May 31, 2018 07:09
Basic webpack config
{
"name": "webpack-starter",
"version": "1.0.0",
"description": "simple webpack config",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"prebuild": "npm install",
"build": "cross-env production=true webpack --config webpack.config.js --progress --colors",
"prestart": "npm install",
@ilya-korotya
ilya-korotya / simple_func.js
Last active June 27, 2018 09:07
Functional programming in JS
const isEven = x => x%2 === 0
const isBigThan = size => int => int > size
const pluceValue = value => int => value + int
const isInInterval = (start, end) => int => start < int && end > int
let res = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
.filter(isEven)
.filter(isBigThan(5))
.map(pluceValue(2))
.filter(isInInterval(7, 10))
@ilya-korotya
ilya-korotya / component.js
Last active July 3, 2018 21:08
Vue + xstate
new Vue({
el: "#app",
mounted() {
this.state = this.lightMachine.initial;
setInterval(() => {
this.state = this.lightMachine.transition(this.state, "TIMER").value;
}, 3000);
},
@ilya-korotya
ilya-korotya / index.js
Created July 3, 2018 21:08
Vanilla JS machine state
const result = document.querySelector('#result');
const render = line => result.innerHTML = `${ result.innerHTML }<br />${ line }`
const service = {
getData() {
return Promise.resolve('{"answer":42}');
}
}
const machine = {
dispatch(actionName, ...payload) {
@ilya-korotya
ilya-korotya / reactive.js
Created August 1, 2018 07:18
Reactive with vanilla JS
let data = { price: 5, quantity: 2 }
let target = null
class Dep {
constructor () {
this.subscribers = []
}
depend () {
if (target && !this.subscribers.includes(target)){
this.subscribers.push(target)
@ilya-korotya
ilya-korotya / verifier.js
Created October 25, 2018 06:56
JS type verifier
function getTag(any) {
if (typeof any === 'object' && any !== null) {
if (typeof any[Symbol.toStringTag] === 'string') {
return any[Symbol.toStringTag];
}
if (typeof any.constructor === 'function'
&& typeof any.constructor.name === 'string') {
return any.constructor.name;
}
}