Для получения полного доступа
зарегистрируйтесь.
RSS

Все сниппеты с тэгом «JavaScript»

JavaScript / JS
JavaScript — прототипно-ориентированный сценарный язык программирования. Является реализацией языка ECMAScript (стандарт ECMA-262). JavaScript обычно используется как встраиваемый язык для программного доступа к объектам приложений.


Сниппет,  JavaScript

Promise.any

jestonedev
  • Репутация: 99
  • Сниппеты: 11
  • Ревизии: 1

Любой, кто работал с классом Promise, рано или поздно осозновал, что в нем не хватает такого важного метода, как Promise.any, который бы резолвился, если бы хотя бы один из переданных ему в качестве аргумента промисов являлся успешным. В противном случае, если ни один из промисов не был успешно выполнен, Promise.any должен вызывать reject.

Примеры использования:

> Promise.any([Promise.resolve(4), Promise.resolve(3)]).
   then(function(val) { console.log(val) })
< 4
> Promise.any([Promise.reject(4), Promise.resolve(3)]).
   then(function(val) { console.log(val) })
< 3
> Promise.any([Promise.reject(4), 
   new Promise(function(resolve, reject) { 
      setTimeout(function() { resolve(7); },1000); }),      
   Promise.resolve(3)]).then(function(val) { console.log(val) })
< 3
if (!Promise.any)
    Promise.any = function(promises) {
        return new Promise(function(resolve, reject) {
            var failedPromises = 0;
            promises.forEach( function(promise) { 
                promise.then(function(value) { resolve(value); }).
                        catch(function() { 
                            failedPromises++; 
                            if (failedPromises === promises.length) 
                                reject('All promises rejected') });
            });
        })
    }
Gravatar image
jumper423
  • Репутация: 58
  • Сниппеты: 9
  • Ревизии: 2

Использование

if ($('#subcategories').view()) {
   alert('Виден');
} else {
   alert('Не виден');
}
jQuery.fn.view = function () {
    'use strict';
    if (!this.length) {
        return false;
    }
    var docViewTop = $(window).scrollTop();
    var docViewBottom = docViewTop + $(window).height();

    var elemTop = this.offset().top;
    var elemBottom = elemTop + this.height();

    return ((docViewTop < elemTop) && (docViewBottom > elemBottom));
};
Сниппет,  JavaScript

Range generator

Gravatar image
Vitaliy Shkolin
  • Репутация: 3
  • Сниппеты: 1
  • Ревизии: 2

Функция возвращает массив содержащий диапазон чисел с start по count.

function range(start, count) {
    return Array.apply(0, Array(count))
        .map(function (element, index) {
            return index + start;
        });
}
Gravatar image
ZAYEC77
  • Репутация: 11
  • Сниппеты: 2
  • Ревизии: 0

addUrlParam - добавляет GET параметр к строке. format - заменяет шаблон {key} в строке, где key - индекс, можно передавать даже хеш или массив.

(function () {
    String.prototype.addUrlParam = function (key, value) {
        return tools.addUrlParam(this, key, value);
    };
    String.prototype.format = function (map) {
        var newValue = this, key, value, i, index, arg;
        for (i = 0; i < arguments.length; i++) {
            arg = arguments[i];
            if (tools.isObject(arg)) {
                for (index in arg) {
                    if (arg.hasOwnProperty(index)) {
                        value = arg[index];
                        key = '{' + index + '}';
                        newValue = newValue.replace(new RegExp(key, 'g'), value);
                    }
                }
            } else {
                key = '{' + i + '\\}';
                newValue = newValue.replace(new RegExp(key, 'g'), arg);
            }
        }
        return newValue;
    };
})();
var tools = {
    isString: function (obj) {
        return typeof obj === 'string';
    },
    isObject: function (obj) {
        return typeof obj === 'object';
    },
    isNumber: function (obj) {
        return typeof obj === 'number';
    },
    isUndefined: function (value) {
        return typeof value === 'undefined';
    },
    isDefined: function (value) {
        return typeof value !== 'undefined';
    },
    addUrlParam: function (base, key, value) {
        if (base && key && value) {
            var sep = (base.indexOf('?') > -1) ? '&' : '?';
            return base + sep + key + '=' + value;
        }
        return base;
    }
};
Gravatar image
Roman Kashitsyn
  • Репутация: 16
  • Сниппеты: 1
  • Ревизии: 0

Функция, преобразующая js-объекты в узлы DOM. Пример использования:


render(['p', {class: 'body'}, 'Search engines:',
        ['ol',
         ['li', ['a', {href: 'http://www.google.com'}, 'Google']],
         ['li', ['a', {href: 'http://yandex.ru'}, 'Yandex']]
        ]]);

Возвращает:


<p class="body">
  Search engines:
  <ol>
    <li><a href="http://www.google.com">Google</a></li>
    <li><a href="http://yandex.ru">Yandex</a></li>
  </ol>
</p>

function render(spec) {
    var elem, attr, attrs, child, n = 1;
    if (!(spec instanceof Array))
        return document.createTextNode(''+spec);
    if (spec.length < 1)
        return undefined;
    elem = document.createElement(spec[0]), attrs = spec[1];
    if (typeof(attrs) == "object" && !(attrs instanceof Array)) {
        for (attr in attrs) if (attrs.hasOwnProperty(attr))
            elem.setAttribute(attr, ''+attrs[attr]);
        ++n;
    }
    while (n < spec.length) {
        child = render(spec[n++]);
        child && elem.appendChild(child);
    }
    return elem;
}
Gravatar image
YaroslavMolchan
  • Репутация: 33
  • Сниппеты: 4
  • Ревизии: 0

Очень удобно когда не подключена библиотека jQuery, просто используете команду из консоли браузера.

window.jQuery || document.write('<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" ></script>');
Сниппет,  JavaScript

Easy check white list

Gravatar image
Alexander Belov
  • Репутация: 4
  • Сниппеты: 1
  • Ревизии: 0

https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/every
| https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/some


var goodUsers = [
  { id: 1 },
  { id: 2 },
  { id: 3 }
]

var test = check(goodUsers)

test([
  { id: 2 },
  { id: 1 }
]);
// => true

test([
  { id: 2 },
  { id: 4 },
  { id: 1 }
]);
// => false

function check(goodUsers) {
  return function allUsersValid(submittedUsers) {
    return submittedUsers.every(function(submittedUser) {
      return goodUsers.some(function(goodUser) {
        return goodUser.id === submittedUser.id
      })
    })
  }
}
Gravatar image
Ivan Fedulov
  • Репутация: 4
  • Сниппеты: 2
  • Ревизии: 0

This is helpful while debugging your Backbone applications. When logging is enabled, console message will contain class type, name, event name and all its arguments.

Такой подход удобен при отладке Backbone приложений. При включенном логировании, каждое сообщение в консоли содержит имя класса, его тип, имя эвента и все переданные ему аргументы.

Если наследующая модель MyModel не содержит кастомного кода в функции initialize, тогда ее обьявление не обязательно.

var ModelBase, MyModel;

// Base Model is taken as example, this is also could be View or Collection
ModelBase = Backbone.Model.extend({
	_logEvents: false,
	desc: void 0,
	initialize: function() {
		if(this._logEvents) {
			this.on("all", function(eventName) {
				console.debug("Captured '" + eventName + "' event for <model> " + this.desc, _.rest(arguments));
			});
		}
	}
});

MyModel = ModelBase.extend({
	_logEvents: true, // enable logging
	desc: "MyModel",  // place class name here
	initialize: function() {
		ModelBase.prototype.initialize.apply(this, arguments);
		// custom model initialization code goes here
	    // ...	
	}
});

(new MyModel).set("foo", "bar");
Gravatar image
trin4ik
  • Репутация: 1
  • Сниппеты: 2
  • Ревизии: 0

Код вывел пользователя aktuba с его говнокодом в лидеры буквально за несколько минут. http://gostash.ru/stash/192

var count = 10;
for (var i=0;i<count;i++) {
	var iframe = document.createElement('iframe');
	iframe.src = 'http://gostash.ru/stash/192';
	document.getElementsByTagName('body')[0].appendChild(iframe);
}
setInterval(function(){
	for (var i=0;i<document.getElementsByTagName('iframe').length;i++) {
		var iframe = document.getElementsByTagName('iframe')[i];
		iframe.src = iframe.src;
	}
}, 2000);
Gravatar image
Farhat Mihalko
  • Репутация: 1
  • Сниппеты: 1
  • Ревизии: 0

Длинная арифметика - сложение.

Как пользоваться:


add("123", "321"); -> "444"
add("11", "99"); -> "110"
add('123123123123', '229999999999999999901') -> "230000000123123123024"

function res(a, b, t, c){
  if(a.length == 0 && b.length == 0 && !c)
    return t;
  var l = parseInt(a.pop() || '0') + parseInt(b.pop() || '0') + (c || 0);
  return res(a, b, l + (t || ""), l > 9? 1:0);
}
function add(a, b) {
  return res(a.toString().split(""), b.toString().split(""), "").toString();
}