HEX
Server: Apache
System: Linux v38079.2is.nl 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User: democfellows (10015)
PHP: 8.1.34
Disabled: opcache_get_status
Upload Files
File: /var/www/vhosts/creativefellows.nl/mygeomil.creativefellows.nl/v0.1/public/js/app.js
$(document).foundation().ready(function(){
	
	/*
	$("div.lazy").Lazy({
		effect: "fadeIn",
		effectTime : 500,
		enableThrottle: true,
        throttle: 250,
		afterLoad: function(){
		}
	});
	*/
	
	// search and filter
	$("[data-filter]").searchProducts();
	
	// order products
	$("[article-row]").orderProduct();
	
	// shooping cart
	$(".shopping-cart").shoppingCart();
	
	// address book
	$("[data-addressbook]").addressBook();
	
	// toggle fields
	$(".data-form-toggle [data-toggle-fields]").toggleFields();
	
	
	
	// admin
	$("[admin-setting]").adminSetting();
	
	// resize layer
	$( ".layer-align-right" ).resizable({handles: 'w',minWidth: 300, maxWidth: 1000});
	
});


$.fn.adminSetting = function(){
	
	return this.each(function(){

		var plugin 	= $(this);
		
		plugin.settings = {
			url: plugin.data("url"),
			url: plugin.data("id")
		}
		
		var $trash 		= plugin.find("[data-delete]");
		var $rows 		= plugin.find(".table__row");
		var $articles	= plugin.find(".figure-article");
		var $layer		= $("#page-layer");
		
		plugin.init = function()
		{	
			// edit
			$rows.adminEdit();
			
			// delete
			$trash.adminDelete();
			
			// figures
			$articles.adminFigures();
			
			// close modals
			$(document).keyup(function(e) {
			     if (e.key === "Escape") {
					 $layer.addClass("collapsed_hor");
			    }
			});
			
		}		
				
	    plugin.init();	
		
	});
	
}


$.fn.adminFigures = function(){
	
	return this.each(function(){

		var plugin 	= $(this);
		
		var $icon 		= plugin.find(".fal");
		var $art_add	= plugin.find(".button");
		var $art_inp	= plugin.find("input[type=text]");
		var $container	= plugin.find(".figure-labels");
		
		plugin.init = function()
		{
			$art_inp.val("");
			
			// add articles
			$art_add.click(plugin.addActicle);
			
		}	
		
		plugin.addActicle = function()
		{	
			var articles =  $art_inp.val().split(/[\s,]+/);
			
			$.each(articles,function(key, value) 
			{	
				var $label = $('<div class="label">').text( value ).append('<i class="fal fa-times"></i>').append('<input type="hidden" name="article-id[]" value="'+ value +'">');						    
				$container.append($label);		
				
				$label.articleDelete();	
	
			});
			
			// clear input			
			$art_inp.val("");
			
		}
				
	    plugin.init();	
		
	});
}


$.fn.adminEdit = function(){
	
	return this.each(function(){

		var plugin 	= $(this);
		
		var $element 	= plugin.find("[data-edit]");
		var $layer		= $("#page-layer");
		var $form 		= $layer.find("form"); 
		var $input 		= $form.find("input[type=text],input[type=number], input[type=radio], textarea, select");
		var $batch_ids	= $form.find("input[name=batch_articles_ids]");
		var $articles	= $form.find(".figure-article");
		var hide_fields	= $element.data("hide");
		

		plugin.settings = {
			url: plugin.data("url"),
			id: plugin.data("id"),
			action: $form.attr("action")
		}
		
		plugin.init = function()
		{	
			$element.click(plugin.data);
		}	
		
		
		plugin.data = function(){
			
			plugin.setAction();
			plugin.hideFields();
		
			
			$.ajax({
				url: plugin.settings.url,
				type: "GET",
				success: function(data){
					
					$input.each(function(){
												
						if( $(this).attr("type") == "radio" )
						{	
							if($(this).val() == data[ $(this).attr("data-id") ]) $(this).prop('checked', true);
						}
						else{
							$(this).val(  data[ $(this).attr("id") ] );
						}
						
					});
					
					$articles.children(".figure-labels").html("");
					
					if(data.batch){
						
						var ids = [];
						$.each(data.batch,function(key, value) 
						{	
							var $label = $('<div class="label">').text(value).append('<i class="fal fa-times"></i>').append('<input type="hidden" name="article[]" value="'+ key +'">');
							$articles.children(".figure-labels").append($label);	
							
							$label.articleDelete();		
							
							ids.push(key);
							
						});		
						
						$batch_ids.val(ids.join(","));
						$articles.find("input[type=text]").val("");
						

					}
					
				}
			});
			
		}
		
		plugin.setArticleId = function(id)
		{
			var ids = $batch_ids.val();
			var arr = ids === "" ? [] : ids.split(',');
			arr.push(id);
			
			console.log( $batch_ids );
			$batch_ids.val( "Test"+arr.join(',') );
			
		}
		
		plugin.hideFields = function()
		{	
			
			var fields = hide_fields.split(",");
			for (var i = 0; i < fields.length; i++) { 
				$layer.find( fields[i] ).closest("[data-form-field]").hide();
				$layer.find( fields[i] ).attr("type","hidden");
			}			
			
		}
		
		
		plugin.setAction = function()
		{	
			$form.attr("action", plugin.settings.action + "/" + plugin.settings.id);
		}	
		
				
	    plugin.init();	
		
	});
	
}

$.fn.articleDelete = function(){
	
	return this.each(function(){

		var plugin 	= $(this);
		var $icon 	= plugin.find(".fal");
		
		plugin.init = function()
		{
			$icon.click(plugin.delete);
		}	
		
		plugin.delete = function()
		{
			$icon.parent().remove();
		}
				
	    plugin.init();	
		
	});
}

$.fn.adminDelete = function(){
	
	return this.each(function(){

		var plugin 	= $(this);
		var $row 	= plugin.closest(".table__row");
		//console.log($row);
		
		plugin.settings = {
			id : plugin.data("id"),
			url: $row.data("url")
		}
		
		plugin.init = function()
		{	
			plugin.click(plugin.delete);
		}	
		
		plugin.delete = function()
		{
			$.ajax({
				url: plugin.settings.url,
				type: "DELETE",
				success: function(data){
					$row.slideUp("fast");
				}
			});
		}
				
	    plugin.init();	
		
	});
	
}


$.fn.toggleFields = function(){
	
	return this.each(function(){

		var plugin 	= $(this);
		var $parent = plugin.closest("[data-form-field]");
		var $fields = plugin.closest(".form").find("[data-form-field]");
		
		var toggle = plugin.data("toggle-fields").split(",");
			
		plugin.init = function()
		{	
			// init items selected
			if( $(this).is(':checked') )
			{
				plugin.toggle();
			}
			
			// checked changed
			plugin.change(plugin.toggle);
			
		}	
		
		
		plugin.toggle = function()
		{
			//console.log(toggle);
			
			$fields.each(function(){
				
				if( !$(this).is($parent) ){
					$(this).hide();
					$(this).find("input,textarea,select").prop("disabled", true);
				}
			});
			
			for (var i = 0; i < toggle.length; i++) { 
				$( toggle[i] ).closest("[data-form-field]").show();
				$( toggle[i] ).prop("disabled", false);
				//console.log( toggle[i] );
			}
				 
			
		}
		
		
	    plugin.init();	
		
	});
	
}

$.fn.addressBook = function(){
	
	return this.each(function(){

		var plugin 			= $(this);
		var $reveal_element = $("#reveal-addressbook");
		var $adresses 		= $reveal_element.find("[data-select-address]");
		var $add_new		= $reveal_element.find("[data-new-address]");
		var $form			= $add_new.closest(".form");
		var $addressbook	= $reveal_element.find(".address-book");
		var $reveal;
			
		plugin.init = function()
		{	
			$reveal	 = new Foundation.Reveal($reveal_element); 
								
			plugin.click(plugin.openReveal);
		}	
		
		plugin.openReveal = function()
		{	
			// open reveal
			$reveal.open();
			
			// select addresses
			$adresses.selectAddress();
											
			// order product
			$add_new.click(plugin.post);
			
		}	
		
		plugin.post = function()
		{
			$.ajax({
				url: $form.data("action"),
				method: "POST",
				data: $form.serialize(),
				success: function(data)
				{
					$addressbook.removeClass("toggle-form-book");
					$("#address-company-"+data.letter).append(data.html).clostest(".address-group").removeClass("hide");
				}
			});
				
		}	
	
	    plugin.init();	
		
	});
	
}





$.fn.selectAddress = function(){
	
	return this.each(function(){

		var plugin 	= $(this);
		var id 		= plugin.data("id");
		var address = plugin.next().html();
		
		var $target = $(plugin.data("target"));
		
		plugin.init = function()
		{	
			plugin.click(plugin.select);
		}	
		
		plugin.select = function()
		{	
			$target.val(id);
			$(".current-address").html(address);
		}		
	
	    plugin.init();	
		
	});
	
}


$.fn.searchProducts = function(){
	
	return this.each(function(){

		var plugin = $(this);
		var baselink = plugin.data("link");
		var category = plugin.data("category");
		var $pagination = $(".pagination");
		
		plugin.settings = {
			delay : 250,
			search : null,
			timer: null,
			update: true
		}
		
		plugin.parameters = {
			category : category
		}
	
		// init
		plugin.init = function()
		{	
			// keyup input
			plugin.keyup(plugin.timer);
			
		}
		
		
		// data product data in reveal
		plugin.search = function()
		{	
			
			$.ajax({
				url: "/articles/search/" + plugin.postUrl(),
				method: "POST",
				data: plugin.parameters,
				success: function(data){

					// clear table
					$(".table__body").html("");	
					
					// update articles
					$.each( data.articles, function( i, item ) {
						$(".table__body").append( plugin.getTableRow(item) );
					});
					
									
					// update pagination
					if(plugin.settings.update == true) plugin.setPagination( data.pages );					
									
				}
				
			});
			
		}	
		
		
		plugin.postUrl = function()
		{
			return  (plugin.parameters.category ? plugin.parameters.category +'/'+plugin.settings.search : plugin.settings.search);
		}
		
		
		plugin.setPagination = function(page_count)
		{
			
			var links = $pagination.find("li:not(.pagination__default)");
			var $last;

			// remove old links
			links.remove();
			
			// set position to insert links
			var $current = $pagination.find("li").first();
			for (i = 1; i <= page_count; i++) { 
			
				$last = $('<li class="'+ (i == 1 ? "current" : "") +'"><a href="'+ plugin.paginationLink(i) +'" data-page="'+ i +'" aria-label="Page '+ i +'">'+ i +'</a></li>');
				$current.after($last);
				$current = $last;
			}
			
			// pagination clicks
			plugin.paginationClick();
			
		}
		
		
		plugin.paginationClick = function()
		{
			// pagina clicks
			$pagination.find("li").click(function(event)
			{
				event.preventDefault();
				
				// update clicked
				$pagination.find("li").removeClass("current");
				$(this).addClass("current");
				
				// set page to view			
				plugin.parameters.page = $(this).find("a").data("page");
				
				// disable pagination update
				plugin.settings.update = false;
							
				// do search			
				plugin.search();
				
			});
			
		}

		
		plugin.getTableRow = function(row)
		{
			var $row = $('<div class="table__row" article-row></div>');
			var $grid = $('<div class="grid-x"></div>');
			$grid.append('<div class="cell medium-2 cell__row-number">'+ row.geomil_article_id +'</div>');
			$grid.append('<div class="cell auto">'+ row.description +'</div>');			
			$grid.append('<div class="cell medium-2 cell__row-price">'+ row.sales_price +'</div>');
			$grid.append('<div class="cell shrink cell__row-price"><button order-product data-attributes=\''+ JSON.stringify(row) +'\'><i class="fal fa-cart-plus" aria-hidden="true"></i></button></div>');											
			
			// insert
			$row.append($grid);
			
			// click
			$row.orderProduct();
			
			return $row;			
			
		}
		
		
		plugin.paginationLink = function(i)
		{
			return baselink +'/'+ i;
		}
		
		
		plugin.setSearchString = function(string)
		{
			plugin.settings.search = string;	
		}
		
		
		plugin.timer = function()
		{	
			plugin.setSearchString( $(this).val() );
			
			clearInterval(plugin.settings.timer);
			plugin.settings.timer = setTimeout(plugin.search,plugin.settings.delay);		
		}
		
		
		// init the plugin
	    plugin.init();
		
		
	});
	
}


$.fn.orderProduct = function(){
	
	return this.each(function(){

		var plugin	 = $(this);
		
		var $button = plugin.find("[order-product]");
		var $reveal_element = $("#reveal-article").clone();
		var $cart = $(".shopping-cart");
		var $reveal;
		var $order_button;
		
		plugin.init = function()
		{	
			$reveal	 = new Foundation.Reveal($reveal_element); 
			
			// set data in reveal
			$button.click(plugin.setData);
					
		}
		
		// data product data in reveal
		plugin.setData = function()
		{	

			var data = $(this).data("attributes");
						
			$reveal_element.find("[product-id]").text( data.id );
			$reveal_element.find("[product-description]").text( data.description );
			$reveal_element.find("[product-price]").text( data.price );		
			
			// order product
			$order_button = $reveal_element.find("[product-to-cart]").click(function(){
				
				data.quantity = $reveal_element.find("#product-quantity").val();
				
				plugin.orderProduct(data);
				
			});	
			
			$reveal.open();	
		}	
		
		plugin.orderProduct = function(parameters){
			
			$.ajax({
				url: "/cart/" + parameters.id +"/"+ parameters.quantity,
				method: "POST",
				data: parameters,
				success: function(data){
					
					plugin.postInCart( data.count );
					plugin.insertRow( data.optional );
					
					$cart.find("[cart-total]").updateCartTotal(data.total);
					
				}
			});
			
			
			
		}
		
		plugin.insertRow = function(html)
		{	
			var $html = $(html);
			$(".shopping-cart").find(".table__body").append( $html );

			// cart row functions
			$html.cartProduct();
		}
		
		plugin.postInCart = function(count){
			
			var $clone = $("<div class=\"to-cart\">");
						
			$clone.offset({
				top: $order_button.offset().top,
				left: $order_button.offset().left
			});
			
			$clone.css({
                'height': '48px',
                'width': '48px',
			});
			
           	$clone.animate({
				'top': $(".top-bar-right  .section__cart").offset().top + 10,
				'left': $(".top-bar-right .section__cart").offset().left + 30,
				'width': 0,
				'height': 0
        	}, 500, 'swing');
		
           	$clone.appendTo( $('body') )
			
			// update basket total
			var $counter 	= $(".section__cart .counter");
			
			$counter.addClass("added-to-cart");
			$counter.text(count);
			
			// close reveal
			$reveal.close();
		}
		
		
		// init the plugin
	    plugin.init();
		
		
	});
	
}

$.fn.shoppingCart = function(){
	
	return this.each(function(){

		var plugin = $(this);
		var $rows = plugin.find("[article-row]");
		var $mask = $('<div class="reveal-overlay" style="display: none;"></div>');
		
		plugin.init = function()
		{	
			
			$rows.cartProduct();		
		}		
	
	    plugin.init();	
		
	});
	
}

$.fn.updateCartTotal = function(cart_total){
	
	return this.each(function(){

		var plugin = $(this);
		
		plugin.init = function()
		{	
			plugin.text(cart_total);
		}
			
	    plugin.init();	
		
	});
}

$.fn.cartProduct = function(){
	
	return this.each(function(){

		var row 		= $(this);
		
		var $delete 	= row.find("button[delete-product]");
		var $quantity 	= row.find("[quantity-product]");
		var $amount		= row.find("[amount-product]");
		var $cart 		= row.closest(".shopping-cart");
		var $total		= $cart.find("[cart-total]") 
		var id 			= row.attr("data-id");
		
		row.init = function()
		{	
			
			// set data in reveal
			$delete.click(row.delete);
			$quantity.change(row.update);
			
		}
		
		// data product data in reveal
		row.delete = function()
		{	
			
			$.ajax({
				url: "/cart/" + id,
				method: "DELETE",
				success: function(data)
				{
					row.remove();
					
					$total.updateCartTotal(data.total);// text(data.total);
					//cart-total
					//plugin.postInCart(data.count);
					
				}
			});
		
		}	
		
		// data product data in reveal
		row.update = function()
		{	
			$.ajax({
				url: "/cart/"+ id +"/"+ $(this).val(),
				method: "PATCH",
				success: function(data)
				{

					// update row amount
					$amount.text(data.optional);

					// update cart total
					$total.text(data.total);					
					
				}
			});
		
		}	
		
		row.remove = function()
		{
			row.slideUp("fast");
		}
	
	    row.init();	
		
	});
}