Browse Source

Shop basket progress

Vova Tkach 5 years ago
parent
commit
8df2a7c329
3 changed files with 130 additions and 34 deletions
  1. 63 17
      assets/template/scripts_js_file.go
  2. 63 17
      hosts/localhost/template/scripts.js
  3. 4 0
      modules/module_shop.go

+ 63 - 17
assets/template/scripts_js_file.go

@@ -31,10 +31,45 @@ var VarScriptsJsFile = []byte(`(function(window, $) {
 			$('#basket-nav-btn .badge').html(value);
 		};
 
+		function ShopBasketAjaxCommand(cmd, product_id, success, fail, always) {
+			$.ajax({
+				type: "GET",
+				dataType: 'json',
+				url: '/shop/basket/' + cmd + '/' + product_id + '/'
+			}).done(function(data) {
+				if(success) { success(data); }
+			}).fail(function(xhr, status, error) {
+				if(fail) { fail(xhr, status, error); }
+			}).always(function() {
+				if(always) { always(); }
+			});
+		};
+
+		function ShopBasketAjaxGetCount(success, fail, always) {
+			$.ajax({
+				type: "GET",
+				dataType: 'json',
+				url: '/shop/basket/info/'
+			}).done(function(data) {
+				if(success && data && data.total_count) { success(data.total_count); }
+			}).fail(function(xhr, status, error) {
+				if(fail) { fail(xhr, status, error); }
+			}).always(function() {
+				if(always) { always(); }
+			});
+		};
+
+		function ShopBasketAjaxUpdateCount() {
+			ShopBasketAjaxGetCount(function(count) {
+				ShopSetBasketNavBtnProductsCount(count);
+			});
+		};
+
 		function Initialize() {
 			// Check if jQuery was loaded
 			if(typeof $ == 'function') {
 				ShopProductsInitLightGallery();
+				ShopBasketAjaxUpdateCount();
 			} else {
 				console.log('Error: jQuery is not loaded!');
 			}
@@ -56,7 +91,7 @@ var VarScriptsJsFile = []byte(`(function(window, $) {
 					$(object).addClass('click-blocked');
 
 					// ShopSetBasketNavBtnProductsCount(0);
-					console.log('ShopOpenBasket', object);
+					// console.log('ShopOpenBasket', object);
 
 					$(object).removeClass('click-blocked');
 				}
@@ -66,14 +101,12 @@ var VarScriptsJsFile = []byte(`(function(window, $) {
 			ShopBasketProductPlus: function(object, product_id) {
 				if(!$(object).hasClass('click-blocked')) {
 					$(object).addClass('click-blocked');
-					$.ajax({
-						type: "GET",
-						url: '/shop/basket/plus/' + product_id + '/'
-					}).done(function(data) {
-						console.log('AJAX', data, product_id);
-					}).fail(function(xhr, status, error) {
-						console.log('AJAX', xhr.responseText, product_id);
-					}).always(function() {
+					ShopBasketAjaxCommand('plus', product_id, function(data) {
+						// console.log('success', data, product_id);
+					}, function(xhr, status, error) {
+						// console.log('fail', xhr, status, error, product_id);
+					}, function() {
+						ShopBasketAjaxUpdateCount();
 						$(object).removeClass('click-blocked');
 					});
 				}
@@ -83,14 +116,27 @@ var VarScriptsJsFile = []byte(`(function(window, $) {
 			ShopBasketProductMinus: function(object, product_id) {
 				if(!$(object).hasClass('click-blocked')) {
 					$(object).addClass('click-blocked');
-					$.ajax({
-						type: "GET",
-						url: '/shop/basket/minus/' + product_id + '/'
-					}).done(function(data) {
-						console.log('AJAX', data, product_id);
-					}).fail(function(xhr, status, error) {
-						console.log('AJAX', xhr.responseText, product_id);
-					}).always(function() {
+					ShopBasketAjaxCommand('minus', product_id, function(data) {
+						// console.log('success', data, product_id);
+					}, function(xhr, status, error) {
+						// console.log('fail', xhr, status, error, product_id);
+					}, function() {
+						ShopBasketAjaxUpdateCount();
+						$(object).removeClass('click-blocked');
+					});
+				}
+				return false;
+			},
+
+			ShopBasketProductRemove: function(object, product_id) {
+				if(!$(object).hasClass('click-blocked')) {
+					$(object).addClass('click-blocked');
+					ShopBasketAjaxCommand('remove', product_id, function(data) {
+						// console.log('success', data, product_id);
+					}, function(xhr, status, error) {
+						// console.log('fail', xhr, status, error, product_id);
+					}, function() {
+						ShopBasketAjaxUpdateCount();
 						$(object).removeClass('click-blocked');
 					});
 				}

+ 63 - 17
hosts/localhost/template/scripts.js

@@ -29,10 +29,45 @@
 			$('#basket-nav-btn .badge').html(value);
 		};
 
+		function ShopBasketAjaxCommand(cmd, product_id, success, fail, always) {
+			$.ajax({
+				type: "GET",
+				dataType: 'json',
+				url: '/shop/basket/' + cmd + '/' + product_id + '/'
+			}).done(function(data) {
+				if(success) { success(data); }
+			}).fail(function(xhr, status, error) {
+				if(fail) { fail(xhr, status, error); }
+			}).always(function() {
+				if(always) { always(); }
+			});
+		};
+
+		function ShopBasketAjaxGetCount(success, fail, always) {
+			$.ajax({
+				type: "GET",
+				dataType: 'json',
+				url: '/shop/basket/info/'
+			}).done(function(data) {
+				if(success && data && data.total_count) { success(data.total_count); }
+			}).fail(function(xhr, status, error) {
+				if(fail) { fail(xhr, status, error); }
+			}).always(function() {
+				if(always) { always(); }
+			});
+		};
+
+		function ShopBasketAjaxUpdateCount() {
+			ShopBasketAjaxGetCount(function(count) {
+				ShopSetBasketNavBtnProductsCount(count);
+			});
+		};
+
 		function Initialize() {
 			// Check if jQuery was loaded
 			if(typeof $ == 'function') {
 				ShopProductsInitLightGallery();
+				ShopBasketAjaxUpdateCount();
 			} else {
 				console.log('Error: jQuery is not loaded!');
 			}
@@ -54,7 +89,7 @@
 					$(object).addClass('click-blocked');
 
 					// ShopSetBasketNavBtnProductsCount(0);
-					console.log('ShopOpenBasket', object);
+					// console.log('ShopOpenBasket', object);
 
 					$(object).removeClass('click-blocked');
 				}
@@ -64,14 +99,12 @@
 			ShopBasketProductPlus: function(object, product_id) {
 				if(!$(object).hasClass('click-blocked')) {
 					$(object).addClass('click-blocked');
-					$.ajax({
-						type: "GET",
-						url: '/shop/basket/plus/' + product_id + '/'
-					}).done(function(data) {
-						console.log('AJAX', data, product_id);
-					}).fail(function(xhr, status, error) {
-						console.log('AJAX', xhr.responseText, product_id);
-					}).always(function() {
+					ShopBasketAjaxCommand('plus', product_id, function(data) {
+						// console.log('success', data, product_id);
+					}, function(xhr, status, error) {
+						// console.log('fail', xhr, status, error, product_id);
+					}, function() {
+						ShopBasketAjaxUpdateCount();
 						$(object).removeClass('click-blocked');
 					});
 				}
@@ -81,14 +114,27 @@
 			ShopBasketProductMinus: function(object, product_id) {
 				if(!$(object).hasClass('click-blocked')) {
 					$(object).addClass('click-blocked');
-					$.ajax({
-						type: "GET",
-						url: '/shop/basket/minus/' + product_id + '/'
-					}).done(function(data) {
-						console.log('AJAX', data, product_id);
-					}).fail(function(xhr, status, error) {
-						console.log('AJAX', xhr.responseText, product_id);
-					}).always(function() {
+					ShopBasketAjaxCommand('minus', product_id, function(data) {
+						// console.log('success', data, product_id);
+					}, function(xhr, status, error) {
+						// console.log('fail', xhr, status, error, product_id);
+					}, function() {
+						ShopBasketAjaxUpdateCount();
+						$(object).removeClass('click-blocked');
+					});
+				}
+				return false;
+			},
+
+			ShopBasketProductRemove: function(object, product_id) {
+				if(!$(object).hasClass('click-blocked')) {
+					$(object).addClass('click-blocked');
+					ShopBasketAjaxCommand('remove', product_id, function(data) {
+						// console.log('success', data, product_id);
+					}, function(xhr, status, error) {
+						// console.log('fail', xhr, status, error, product_id);
+					}, function() {
+						ShopBasketAjaxUpdateCount();
 						$(object).removeClass('click-blocked');
 					});
 				}

+ 4 - 0
modules/module_shop.go

@@ -448,21 +448,25 @@ func (this *Modules) RegisterModule_Shop() *Module {
 			if wrap.UrlArgs[2] == "info" {
 				wrap.W.WriteHeader(http.StatusOK)
 				wrap.W.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
+				wrap.W.Header().Set("Content-Type", "application/json; charset=utf-8")
 				wrap.W.Write([]byte(wrap.ShopBasket.Info(wrap.CurrHost, wrap.GetSessionId(), wrap.DB, 1)))
 				return
 			} else if wrap.UrlArgs[2] == "plus" && len(wrap.UrlArgs) == 4 && utils.IsNumeric(wrap.UrlArgs[3]) {
 				wrap.W.WriteHeader(http.StatusOK)
 				wrap.W.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
+				wrap.W.Header().Set("Content-Type", "application/json; charset=utf-8")
 				wrap.W.Write([]byte(wrap.ShopBasket.Plus(wrap.CurrHost, wrap.GetSessionId(), wrap.DB, utils.StrToInt(wrap.UrlArgs[3]))))
 				return
 			} else if wrap.UrlArgs[2] == "minus" && len(wrap.UrlArgs) == 4 && utils.IsNumeric(wrap.UrlArgs[3]) {
 				wrap.W.WriteHeader(http.StatusOK)
 				wrap.W.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
+				wrap.W.Header().Set("Content-Type", "application/json; charset=utf-8")
 				wrap.W.Write([]byte(wrap.ShopBasket.Minus(wrap.CurrHost, wrap.GetSessionId(), wrap.DB, utils.StrToInt(wrap.UrlArgs[3]))))
 				return
 			} else if wrap.UrlArgs[2] == "remove" && len(wrap.UrlArgs) == 4 && utils.IsNumeric(wrap.UrlArgs[3]) {
 				wrap.W.WriteHeader(http.StatusOK)
 				wrap.W.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
+				wrap.W.Header().Set("Content-Type", "application/json; charset=utf-8")
 				wrap.W.Write([]byte(wrap.ShopBasket.Remove(wrap.CurrHost, wrap.GetSessionId(), wrap.DB, utils.StrToInt(wrap.UrlArgs[3]))))
 				return
 			}