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

Все сниппеты с тэгами «JavaScript, challenge»



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
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();
}
Gravatar image
artstar
  • Репутация: 1
  • Сниппеты: 1
  • Ревизии: 0

Функция watchable позволяет использовать одну и ту же gulp задачу как для единоразовой прогонки таска, так и с помощью вочера, реагирующего на изменения файлов. Имеет смысл использовать для больших тасков, например, компиляция LESS/SASS + SourceMaps + автопрефиксер + минификация + конкатенация в один файл. Приведенный код будет означать то же самое, что и

 
gulp.task('less', function () {
   return gulp.src('less').pipe(less()).pipe(gulp.dest('css'));
});
gulp.task('less-watch', function (callback) {
   gulp.src('less').pipe(watch('less')).pipe(less()).pipe(gulp.dest('css'));
   //watchable таски надо завершать вручную 
   return callback();
});

Таким образом, функция watchable позволяет не дублировать один и тот же код

var gulp = require('gulp'), watch = require('gulp-watch'), less = require('gulp-less');
var watchable = function (watching, task) {
    return function (callback) {
        var called = task.call({src: function (src) {
            var stream = gulp.src(src);
            if (!!watching) {
                stream = stream.pipe(watch(src));
            }
            return stream;
        }}, callback);
        return watching ? callback() : called;
    };
};
var lessTask = function () {
	//Нюанс: здесь вместо gulp.src надо сначала написать this.src. А дальше как обычно.
    return this.src('less').pipe(less()).pipe(gulp.dest('css'));
};
gulp.task('less', watchable(false, lessTask));
gulp.task('less-watch', ['less'], watchable(true, lessTask));
Gravatar image
veloriba
  • Репутация: 2
  • Сниппеты: 1
  • Ревизии: 0

Запрос добавляет поле типа ISODate к уже имеющимуся таймштампу типа интеджер:

{

"_id" : 100500,
"timestamp" : 1418992107,
"timestamp_human" : ISODate("2014-08-12T05:41:39.000Z")

}

db.mycollection.find().forEach(
    function(doc){
        doc.timestamp_human = new Date(parseInt(doc.timestamp + "000"))
        print(doc) 
    }
)
Gravatar image
Vitaly Dyatlov
  • Репутация: 1
  • Сниппеты: 1
  • Ревизии: 0

Often happens that you want to log some events on frontend, but those events happen very often.. What to do if you don't want to kill your server and user's bandwidth? A sample throttling technique for onScroll event. Can be used for example to record current position of user on the page (to record reading progress).

Note, that if event happens very often then it might be that payload wont be executed ever and in this case you can consider to use another solution, based on current time (record current time and if next event happens in less than expected timeout, then skip it).

(function($){
	var payload = function() {
		p = 100 * $(window).scrollTop() / ($(document).height() - $(window).height());
		$.post('/path/to/handler', {"progress": p});
	};
	
	var t;
	$(window).scroll(function(){
		// actual throttling happens here
		if( t ) {
			clearTimeout( t );
		}
		t = setTimeout(payload, 1000 /* 1 second */); // call payload function once per second
	});
})(jQuery);
Gravatar image
shoom3301
  • Репутация: 4
  • Сниппеты: 1
  • Ревизии: 0

В php есть массив $_REQUEST, который хранит в себе параметры запроса в виде ключ-значение, эта функция возвращает аналогичный объект. Функция парсит параметры URL в объект, в качестве аргумента по умолчанию используются параметры URL из адресной строки.

// Парсинг параметров URL в объект
function parseURL(_url){
    var params = decodeURIComponent(
        (_url || window.location.search)
            .replace('?', '')
            .replace(/\+/g, '%20'))
            .split('&');

    var data = {};
    for(var i=0;i<params.length;i++){
        var t = params[i].split('=');
        data[t[0]] = t[1];
    }
    
    return data;
}