Skip to content

Instantly share code, notes, and snippets.

View Alexzanderk's full-sized avatar
:octocat:

Alexander Kotsarev Alexzanderk

:octocat:
View GitHub Profile
@Alexzanderk
Alexzanderk / 0_reuse_code.js
Created April 1, 2017 08:40
Here are some things you can do with Gists in GistBox.
// Use Gists to store code you would like to remember later on
console.log(window); // log the "window" object to the console
@Alexzanderk
Alexzanderk / send file
Last active March 25, 2018 07:56
send file
var formData = new FormData();
var fileField = document.querySelector("input[type='file']");
formData.append('username', 'abc123');
formData.append('avatar', fileField.files[0]);
fetch('https://example.com/profile/avatar', {
method: 'PUT',
body: formData
})
@Alexzanderk
Alexzanderk / pagination.pug
Last active July 26, 2018 21:24
Pagination pug
mixin pagination(totalNewsCount, limit, currentPage, num)
- let index = 0;
- let pageRange = num || 2;
- let totalPages = totalNewsCount / limit;
- let rangeStart = () => (currentPage - pageRange > 1) ? currentPage - pageRange : 1;
- let rangeEnd = () => (currentPage + pageRange < totalPages) ? currentPage + pageRange : totalPages;
- let hasFirst = rangeStart !== 1;
- let hasLast = rangeEnd() < totalPages;
-console.log(!hasFirst)
@Alexzanderk
Alexzanderk / class_scrollTop.js
Last active August 11, 2018 14:42
JS scroll top class
export default class OnTop {
constructor(element, {speed = 10} = {}) {
this.marginY = 0;
this.speed = speed;
this.scroller = null;
this.button = document.querySelector(element);
this.button.addEventListener('click', this.toTop.bind(this));
window.onscroll = () => this.marginY = window.pageYOffset;
export default class NavTabs {
constructor(element) {
this.tab = document.querySelector(element);
this.buttons = this.tab.querySelectorAll('.nav-tabs__link');
this.buttons.forEach(btn => btn.addEventListener('click', this.toggleTab));
}
toggleTab(event) {
event.preventDefault();
export default class Slider {
constructor({ container, touch = true, autoplay = false, autoplayDelay = 3000}) {
this.slider = document.querySelector(container);
this.slidesContainer = this.slider.querySelector('.js-carousel__wrap');
this.prevButton = this.slider.querySelector('.js-carousel__prev');
this.nextButton = this.slider.querySelector('.js-carousel__next');
this.currentSlide = 0;
this.lastSlide = this.slider.querySelector('.js-carousel__wrap').children.length;
this.isAnimationEnd = true;
@Alexzanderk
Alexzanderk / eslint.json
Last active August 19, 2018 12:25 — forked from BilalBudhani/eslint.json
Wesbos' eslint + prettier config
{
"extends": [
"airbnb",
"prettier",
"prettier/react"
],
"parser": "babel-eslint",
"parserOptions": {
"ecmaVersion": 8,
"ecmaFeatures": {
@Alexzanderk
Alexzanderk / array.js
Last active September 14, 2018 17:53
одномерный массив в двухмерный и более
function toMatrix(arr, rowSize) {
var store = [];
for (var i = 0; i < arr.length; i += rowSize) {
store.push(data.slice(i, i + rowSize)); /*?*/
}
return store;
}
toMatrix([1, 2, 3, 4, 5, 6, 7, 8, 9], 2);
function requestAllWithDelay (urls, delay) {
return urls.reduce((promise, url) => {
return promise
.then((responses) => {
return fetch(url) // Or whatever request library you're using. If it doesn't support promises, you can wrap it in `new Promise((resolve, reject) => someLib(url, { onSuccess: resolve, onError: reject }));` or something similar.
.then(response => {
return new Promise(resolve => {
setTimeout(resolve, delay, responses.concat(response)); // replies.concat might not work, depending on how you want to accumulate all the data. Maybe you don't even care about the responses?
})
})
const providerContent = await content.reduce((promises, item) => {
const { html, type, url } = item;
return promises.then(responses => {
if (type === 'inlineText') {
return new Promise(resolve => resolve(responses.concat([item])));
}
return providerService.getProviderResponse({ url, provider: type })
.then(response => {
return new Promise(resolve => {
console.log({url})