Архив

Архив раздела ‘Javascript’
16 февраля 2024 Нет комментариев

Также в случае отсутствия gclid и utm определять источник по document.referrer учитывая домены поисковых систем.

document.addEventListener("DOMContentLoaded",function(event){
	var seo_params=new Array('ga_cid','gclid','utm_source','utm_medium','utm_campaign','utm_content','utm_term');
	var seo_cookies=new Array();
	var seo_cookies_default=new Array();
	var params=new URLSearchParams(location.search);
	seo_params.forEach((sp)=>{
		switch(sp){
			case 'gclid':
				seo_cookies_default[sp]='NULL';
			break;
			case 'utm_source':
				seo_cookies_default[sp]='direct';
			break;
			default:
				seo_cookies_default[sp]='none';
			break;
		}
	});
	var update_cookies=false;
	if(params.has('gclid')&&params.get('gclid')!=''&&params.get('gclid')!='none'){
		update_cookies=true;
		seo_params.forEach((sp)=>{
			switch(sp){
				case 'gclid':
					seo_cookies[sp]=params.get(sp);
				break;
				case 'utm_source':
					seo_cookies[sp]='google';
				break;
				case 'utm_medium':
					seo_cookies[sp]='cpc';
				break;
				default:
					if(sp.indexOf('utm_')!=-1&&params.has(sp)&&params.get(sp)!=''){
						seo_cookies[sp]=params.get(sp);
					}
					else{
						seo_cookies[sp]='none';
					}
				break;
			}
		});
	}
	else{
		var is_utm=false;
		seo_params.forEach((sp)=>{
			if(sp.indexOf('utm_')&&params.has(sp)&&params.get(sp)!=''){
				seo_cookies[sp]=params.get(sp);
				is_utm=true;
				update_cookies=true;
			}
			else{
				seo_cookies[sp]='none';
			}
		});
		if(!is_utm){
			var referer=document.referrer;
			if(referer!=''){
				var referer_domain=referer.split('/')[2];
				if(referer_domain!=''&&referer_domain!=location.hostname){
					update_cookies=true;
					var organics=new Array('google','yandex','ya.','bing');
					var is_organic=false;
					organics.forEach((organic)=>{
						if(referer_domain.indexOf(organic)!=-1){
							if(organic=='ya.'){
								organic='yandex'
							}
							is_organic=true;
							seo_params.forEach((sp)=>{
								switch(sp){
									case 'utm_source':
										seo_cookies[sp]=organic;
									break;
									case 'utm_medium':
										seo_cookies[sp]='organic';
									break;
									default:
										if(sp.indexOf('utm_')){
											seo_cookies[sp]='none';
										}
									break;
								}
							});
						}
					});
					if(!is_organic){
						seo_params.forEach((sp)=>{
							switch(sp){
								case 'utm_source':
									seo_cookies[sp]=referer_domain;
								break;
								case 'utm_medium':
									seo_cookies[sp]='referral';
								break;
								default:
									if(sp.indexOf('utm_')!=-1){
										seo_cookies[sp]='none';
									}
								break;
							}
						});
					}
				}
			}
		}
	}
	var ga_cookie=document.cookie.match(new RegExp('(^| )_ga=([^;]+)'));
	if(ga_cookie[2]){
		var ga_cookie_split=ga_cookie[2].split(".");
		var ga_cid=ga_cookie_split[2]+'.'+ga_cookie_split[3];
		seo_cookies['ga_cid']=ga_cid;
	}
	seo_params.forEach((sp)=>{
		var sp_cookie=document.cookie.match(new RegExp('(^| )local_'+sp+'=([^;]+)'));
		if(update_cookies||!sp_cookie||sp=='ga_cid'){
			var cv=(seo_cookies[sp]!='')?seo_cookies[sp]:seo_cookies_default[sp];
			document.cookie=encodeURIComponent('local_'+sp)+'='+encodeURIComponent(cv);
		}
	});
	var links=document.getElementsByTagName("a");
	for(i=0;i<links.length;i++){
		var href=links[i].href;
		if(href.includes(document.domain)&&!(href.includes('#'))){
			seo_params.forEach((sp)=>{
				var sp_cookie=document.cookie.match(new RegExp('(^| )local_'+sp+'=([^;]+)'));
				if(sp_cookie[2]){
					href+=(href.includes('?'))?"&":"?";
					href+=sp+"="+sp_cookie[2];
				}
			})
			links[i].href=href;
		}
	}
	const url=new URL(window.location.href);
	seo_params.forEach((sp)=>{
		var sp_cookie=document.cookie.match(new RegExp('(^| )local_'+sp+'=([^;]+)'));
		if(sp_cookie[2]&&!params.has(sp)){
			url.searchParams.append(sp,sp_cookie[2]);
		}
	});
	window.history.pushState(null,null,url);
});
Categories: Javascript Tags:
29 января 2024 Нет комментариев
document.addEventListener("DOMContentLoaded",function(event){
	var ga_cookie=document.cookie.match(new RegExp('(^| )_ga=([^;]+)'));
	if(ga_cookie[2]){
		var ga_cookie_split=ga_cookie[2].split(".");
		var ga_cid=ga_cookie_split[2]+'.'+ga_cookie_split[3];
		var get_params=new Array('utm_source','utm_medium','utm_campaign','utm_content','utm_term');
		var params=new URLSearchParams(location.search);
		var links=document.getElementsByTagName("a");
		for(i=0;i<links.length;i++){
			var href=links[i].href;
			if(href.includes(document.domain)&&!(href.includes('#'))){
				get_params.forEach((get_param)=>{
					if(params.has(get_param)){
						href+=(href.includes('?'))?"&":"?";
						href+=get_param+"="+params.get(get_param);
					}
				})
				href+=(href.includes('?'))?"&":"?";
				href+="ga_cid="+ga_cid;
				links[i].href=href;
			}
		}
		var regex=new RegExp("([?;&])ga_cid[^&;]*[;&]?");
		var query=location.search.replace(regex,"$1").replace(/&$/,'');
		var search_param=(query.length>2?query+"&":"?")+(ga_cid?'ga_cid'+"="+ga_cid:'');
		var newurl=window.location.pathname+search_param;
		window.history.pushState({path:newurl},'',newurl);
	}
});
Categories: Javascript Tags:
22 ноября 2023 Нет комментариев
document.addEventListener('wpcf7mailsent',function(event){
window.dataLayer.push({
	"event":"form_sent",
	"formId":event.detail.contactFormId,
	"response":event.detail.inputs
});
console.log("form_sent");
});
Categories: Javascript Tags:
9 ноября 2023 Нет комментариев
function gen_string(length){
	let result='';
	const characters='ABCDEFGHJKMNPQRSTUVWXYZ23456789';
	const charactersLength=characters.length;
	let counter=0;
	while(counter<length){
		result+=characters.charAt(Math.floor(Math.random()*charactersLength));
		counter+=1;
	}
	return result;
}

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

$(document).ready(function(){
	$('.gen i').on('click',function(){
		var str=gen_string(5);
		$(this).closest('.gen').find('input').val(str);
	});
});
Categories: Javascript Tags:
7 ноября 2023 Нет комментариев
$(window).scroll(function(){
	if($(window).scrollTop()+$(window).height()==$(document).height()){
		console.log("bottom");
	}
});
$(window).scroll(function(){
	if($(window).scrollTop()+$(window).height()>$(document).height()-100){
		console.log("near bottom");
	}
});
Categories: Javascript Tags:
25 октября 2023 Нет комментариев
$(document).ready(function(){
	$('.nav .dd ul li').hover(function(){
		var mh=0;
		$('.nav .dd ul').each(function(){mh=Math.max(mh,$(this).outerHeight());});
		$('.dd').css('min-height',mh+'px');
	});
});
Categories: Javascript Tags:
$(document).ready(function(){
	setTimeout(function(){
		$.cookie('nf_timeout',true,{
			expires:1,
			path:'/'
		});
	},30000);
	if($.cookie('nf_timeout')&&!$.cookie('nf_popup')){
		$(document).mouseleave(function(e){
			if((e.clientY<10)&&!($("#nf_link").hasClass("clicked"))){
				setTimeout(function(){
					$("#nf_link").addClass('clicked').click();
				},1);
				$.cookie('nf_popup',true,{
					expires:7,
					path:'/'
				});
			}
		});
	};
});
<a href="<?=$r_nf['popup_link']?>" class="popup fancybox.ajax" id="nf_link"><?=$r_nf['name']?></a>

Необходима библиотека https://yandex.st/jquery/cookie/1.0/jquery.cookie.min.js

Categories: Javascript Tags: