/**
* @link https://gist.github.com/zolotykh/3879b7d2354d1de1f57f4b44c4a08821/f30ee1df0be25d619050e312aa2d4ae917330b25
*/
yaTrack(null, 'GOAL_NAME', {key: 'value'}); // во все счетчики
yaTrack(98765431, 'GOAL_NAME'); // в конкретный id счетчика
yaTrack('98\\d65431|87654\\d{3}', 'GOAL_NAME'); // regex
yaTrack(yaCounter987654321, 'GOAL_NAME'); // наиболее безопасен с точки зрения того, что window.Ya._metrika может измениться
// yaTrack возвращает коллбэк для быстрого пуша
// пример получения просто функции для быстрого пуша событий
var quickGoal = yaTrack(yaCounter987654321);
// quickGoal = yaTrack(); // быстрый пуш во все счетчики
quickGoal('GOAL_NAME', {data: 1});
function yaTrack(counterId) {
"use strict";
var counters = window.Ya && window.Ya._metrika && window.Ya._metrika.counters || [];
var args = Array.prototype.slice.call(arguments);
// var returnCounter = counters.length && window.Ya._metrika.counter;
var isFirstArgumentRealCounter = counterId && counterId.reachGoal;
args.shift();
var trackCounter = function (counter) {
var dynamicArgs = Array.prototype.slice.call(arguments);
dynamicArgs.shift();
var _args = dynamicArgs.length && dynamicArgs || args;
if (_args.length) {
counter.reachGoal.apply(counter, _args);
}
};
var trackAllCounters = function () {
$.each(counters, function (_counterId) {
var counter = this;
if (counterId) {
var regex = new RegExp(counterId);
if (regex.test(_counterId)) {
trackCounter(counter);
}
}
else {
trackCounter(counter);
}
});
};
if (isFirstArgumentRealCounter) {
trackCounter(counterId);
}
else {
trackAllCounters();
}
return (function returnCallback() {
var _args = Array.prototype.slice.call(arguments);
if (isFirstArgumentRealCounter) {
_args.unshift(counterId);
trackCounter.apply(this, _args);
}
else {
_args.unshift(null);
trackAllCounters.apply(this, _args);
}
return returnCallback;
})
}