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

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

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


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
Zibx
  • Репутация: 2
  • Сниппеты: 1
  • Ревизии: 0

Reduce usage example. Редьюс с начальным значением очень часто позволяет сделать требуемую операцию в inline стиле и заметно упростить код.

Пример с getVar позволяет вытащить значение с любого уровня вложенности объекта или вернуть undefined если ключа или какого-либо промежуточного звена нет.

// #1
document.location.search
    .substr(1)
    .split('&')
    .reduce( function( obj, el ){
        var tokens = el.split('='); 
        obj[ decodeURIComponent( tokens[0] ) ] = decodeURIComponent( tokens[1] );
        return obj;
    }, {} );

// #2
var getVar = function( obj, name ){
	return name.split('.').reduce(function(a,b){
		return a && a[b];
	}, obj);
};
Gravatar image
Akurganow
  • Репутация: 1
  • Сниппеты: 1
  • Ревизии: 0

Может проверить строку, массив, объект, число или булевое значение.

Использование 'Some string'.isntEmpty(someFunction); //Выполнит someFunction('Some string')


Тоже самое с остальными типами

Object.prototype.isntEmpty = function(fn){ if(typeof fn === 'function'){

var type = typeof this.valueOf(),val = this.valueOf();
if(type === 'string' && !!val && val.trim() !== ''){ return fn(val); }
else if(type === 'object'){
  var size = 0;
  for(var el in val){ if(typeof val[el] !== 'function' && !!val && val[el] && val[el] !== ''){ size++; } }
  if(size > 0){ return fn(val); }
}
else if(type === 'number' && val.toString() !== 'NaN'){ return fn(val); }
else if(type === 'boolean' && val){ return fn(val); }

} else{ console.error(fn+' is not a function'); }
};


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
gleb.svechnikov
  • Репутация: 1
  • Сниппеты: 1
  • Ревизии: 0

Небольшая программка позволяющая сделать из 3 модулей (DHT11 датчика, LCD дисплея Nokia 5110 и микроконтроллера Espruino Pico) простейший индикатор температуры и влажности который собирает данные и выводит их на экран.

A5.write(0); 
A7.write(1); 
A6.write(1); 
var spi = new SPI();
var g; 
var dht = require("DHT11").connect(B3);
spi.setup({ sck:B1, mosi:B10 });
g = require("PCD8544").connect(spi,B13,B14,B15);
function onInit() {
  dht.read(function (a) {
    g.clear();
    g.setFontVector(g.getHeight()/2.5); 
    g.drawString(a.temp.toString() + " / " + a.rh.toString(),0,0);
    g.flip();
  });
}
setInterval(onInit,10000);
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;
}