var touchTimer;
var touchFlag = 0;
$(document).on('touchstart', function (e) {
touchTimer = setTimeout(function () { touchFlag = 1; }, 3000);
});
$(document).on('touchend', function (e) {
touchFlag = 0;
clearTimeout(touchTimer);
});
$(document).on('touchmove', function (e) {
if (touchFlag)
return false; // touch события игнорируют preventDefault
});
var count = 0;
var app = express();
http.createServer(app).listen(8080)
.on('connection', function(socket) {
count++;
socket.on('close', function () {
count--;
})
});
function getConnectionsCount () {
return count;
}
var app = express();
var server = http.createServer(app).listen(8080);
server.getConnections(function (err, count) {
});
function inIframe () {
try {
return window.self !== window.top;
} catch (e) {
return true;
}
}
product.find(function(err, products) {
async.each(products, function (product, cb) {
productInfo.find({product_id: product._id}, function(err, info) {
product.info = info;
cb(err);
});
}, function (err) {
def.resolve(products);
});
});
product.find(function(err, products) {
var p_ids = products.map(function (product) { // создаем массив id продуктов
return product._id;
});
productInfo.find({product_id : {$in: p_ids}}, function(err, infos) { // запрашиваем info для всех совпадающих id продуктов в массиве
var obj = infos.reduce(function(a, b) { // создаем коллекцию для быстрого поиска, где ключ - id продукта
return a[b.product_id ] = b;
}, {});
products.forEach(function (product) {
product.info = obj[product._id];
});
def.resolve(products);
}));
});
$('#signin-ua, #signin-ru').click(function() {
$('.body-recruitment.body-index .wrapper').removeClass('hidden');
$('.body-recruitment.body-index .layer').removeClass('display');
$('.ads').removeClass('hidden');
});
$("#myCanvas").on("click", function(event){
var pt = [event.pageX, event.pageY];
var elem = findP(pt);
});
function findP (pt) { // polygons это массив элементов (объекты с данными и координатами), в которых хранятся координаты вершин многоугольников (points).
for (var z = 0; z < polygons.length; z++) { var polyz = polygons[z].points;
for(var c = false, i = -1, l = polyz.length, j = l - 1; ++i < l; j = i)
((polyz[i][1] <= pt[1] && pt[1] < polyz[j][1]) || (polyz[j][1] <= pt[1] && pt[1] < polyz[i][1]))
&& (pt[0] < (polyz[j][0] - polyz[i][0]) * (pt[1] - polyz[i][1]) / (polyz[j][1] - polyz[i][1]) + polyz[i][0])
&& (c = !c);
if (c) return polygons[z].properties;
} return null;
}
$('div')[0].appendChild(errorSpan);
document.getElementsByTagName("div")[0].appendChild(errorSpan);
Процесс такой получился: после сохранения в файле (например, header.scss), к нему применяется таска csscomb, файл форматируется и пересохраняется (кмк). После этого нельзя сделать Ctrl+z (undo) ни хоткеем, ни через меню.
form.submit(function (event) {
event.preventDefault();
var valid = !form.find(".LV_invalid_field").length; // сразу проверяем на наличие невалидных полей
if (!valid) {
form.find('.notFill').show();
return;
}
form.find('[type=text]').each(function(i, elem) {
if (!$(elem).val().length || $(elem).hasClass('LV_invalid_field')) {
valid = 0;
form.find('.notFill').show();
return false; // досрочно выходим из цикла
}
});
if (valid) {
setTimeout(function () {
form.submit(); // а вот этот код меня пугает, тут будет рекурсия!
}, 2000); // in milliseconds
confModal.dialog('open');
setTimeout("$('#modal-confirmation').dialog('close')",2000);
}
});