Browse Source

Isolate all engine JavaScript

Vova Tkach 6 years ago
parent
commit
cd97d3269d

+ 192 - 149
assets/cp.scripts.js

@@ -1,160 +1,203 @@
-function GetModalAlertTmpl(title, message, error) {
-	return '<div class="alert alert-' + (!error?'success':'danger') + ' alert-dismissible fade show" role="alert"><strong>' + title + '</strong> ' + message + '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button></div>';
-}
-
-function ShowSystemMsg(title, message, error) {
-	var modal_alert_place = $('.modal.show .sys-messages');
-	if(!modal_alert_place.length) {
-		modal_alert_place = $('form.alert-here .sys-messages');
-	}
-	if(modal_alert_place.length) {
-		modal_alert_place.html(GetModalAlertTmpl(title, message, error));
-	}
-}
-
-function ShowSystemMsgSuccess(title, message) {
-	ShowSystemMsg(title, message, false);
-}
-
-function ShowSystemMsgError(title, message) {
-	ShowSystemMsg(title, message, true);
-}
-
-function AjaxDone(data) {
-	try {
-		eval(data);
-	} catch(e) {
-		if(e instanceof SyntaxError) {
-			console.log(data);
-			console.log('JavaScript Eval Error', e.message)
-		}
-	}
-}
-
-function AjaxFail() {
-	console.log('Form send fail, page will be reloaded');
-	window.location.reload(false);
-}
-
-function ActionIndexUserLogout(message) {
-	if(confirm(message)) {
-		$.ajax({
-			type: "POST",
-			url: '/cp/',
-			data: {
-				action: 'index-user-logout',
+(function(window, $) {
+	var fave = function(window, $) {
+		// Private
+		var FormDataWasChanged = false;
+
+		function GetModalAlertTmpl(title, message, error) {
+			return '<div class="alert alert-' + (!error?'success':'danger') + ' alert-dismissible fade show" role="alert"><strong>' + title + '</strong> ' + message + '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button></div>';
+		};
+
+		function ShowSystemMsg(title, message, error) {
+			var modal_alert_place = $('.modal.show .sys-messages');
+			if(!modal_alert_place.length) {
+				modal_alert_place = $('form.alert-here .sys-messages');
 			}
-		}).done(function(data) {
-			AjaxDone(data)
-		}).fail(function() {
-			AjaxFail();
-		});
-	}
-}
-
-function ActionDataTableDelete(object, action, id, message) {
-	if(confirm(message)) {
-		$.ajax({
-			type: "POST",
-			url: '/cp/',
-			data: {
-				action: action,
-				id: id,
+			if(modal_alert_place.length) {
+				modal_alert_place.html(GetModalAlertTmpl(title, message, error));
 			}
-		}).done(function(data) {
-			AjaxDone(data)
-		}).fail(function() {
-			AjaxFail();
-		});
-	}
-}
-
-$(document).ready(function() {
-	$('form').each(function() {
-		// Ajax forms
-		$(this).submit(function(e) {
-			var form = $(this);
-			if(form.hasClass('loading')) {
-				e.preventDefault();
-				return;
+		};
+
+		function AjaxDone(data) {
+			try {
+				eval(data);
+			} catch(e) {
+				if(e instanceof SyntaxError) {
+					console.log(data);
+					console.log('Error: JavaScript code eval error', e.message)
+				}
 			}
+		};
+
+		function AjaxFail(data, status, error) {
+			console.log('Error: data sending error, page will be reloaded', data, status, error);
+			setTimeout(function() {
+				window.location.reload(false);
+			}, 1000);
+		};
+
+		function FormToAjax() {
+			$('form').each(function() {
+				$(this).submit(function(e) {
+					var form = $(this);
+					if(form.hasClass('loading')) {
+						e.preventDefault();
+						return;
+					}
 
-			// Block send button
-			form.addClass('loading').addClass('alert-here');
-			var button = $(this).find('button[type=submit]');
-			button.addClass('progress-bar-striped').addClass('progress-bar-animated');
-
-			// Another button
-			if(button.attr('data-target') != '') {
-				$('#' + button.attr('data-target')).addClass('progress-bar-striped').addClass('progress-bar-animated');
-			}
+					// Block send button
+					form.addClass('loading').addClass('alert-here');
+					var button = $(this).find('button[type=submit]');
+					button.addClass('progress-bar-striped')
+						.addClass('progress-bar-animated');
 
-			// Clear form messages
-			form.find('.sys-messages').html('');
-
-			$.ajax({
-				type: "POST",
-				url: form.attr('action'),
-				data: form.serialize()
-			}).done(function(data) {
-				$('body').removeClass('data-changed');
-				AjaxDone(data)
-			}).fail(function() {
-				AjaxFail();
-			}).always(function() {
-				// Add delay for one second
-				setTimeout(function() {
-					form.removeClass('loading').removeClass('alert-here');
-					button.removeClass('progress-bar-striped').removeClass('progress-bar-animated');
 					// Another button
 					if(button.attr('data-target') != '') {
-						$('#' + button.attr('data-target')).removeClass('progress-bar-striped').removeClass('progress-bar-animated');
+						$('#' + button.attr('data-target')).addClass('progress-bar-striped')
+							.addClass('progress-bar-animated');
 					}
-				}, 100);
-			});
 
-			e.preventDefault();
-		});
-
-		// Bind to another button
-		var button = $(this).find('button[type=submit]');
-		if(button.attr('data-target') != '') {
-			$('#' + button.attr('data-target')).click(function() {
-				button.click();
+					// Clear form messages
+					form.find('.sys-messages').html('');
+
+					$.ajax({
+						type: "POST",
+						url: form.attr('action'),
+						data: form.serialize()
+					}).done(function(data) {
+						FormDataWasChanged = false;
+						AjaxDone(data)
+					}).fail(function(xhr, status, error) {
+						AjaxFail(xhr.responseText, status, error);
+					}).always(function() {
+						// Add delay for one second
+						setTimeout(function() {
+							form.removeClass('loading').removeClass('alert-here');
+							button.removeClass('progress-bar-striped').removeClass('progress-bar-animated');
+							// Another button
+							if(button.attr('data-target') != '') {
+								$('#' + button.attr('data-target')).removeClass('progress-bar-striped').removeClass('progress-bar-animated');
+							}
+						}, 100);
+					});
+
+					// Prevent submit action
+					e.preventDefault();
+				});
+
+				// Bind to another button
+				var button = $(this).find('button[type=submit]');
+				if(button.attr('data-target') != '') {
+					$('#' + button.attr('data-target')).click(function() {
+						button.click();
+					});
+				}
+
+				// Mark body if any data in form was changed
+				if($(this).hasClass('prev-data-lost')) {
+					$(this).find('input, textarea, select').on('input', function() {
+						if(!FormDataWasChanged) {
+							FormDataWasChanged = true;
+						}
+					});
+				}
 			});
-		}
-
-		// Mark body if any data in form was changed
-		if($(this).hasClass('prev-data-lost')) {
-			$(this).find('input, textarea, select').on('input', function() {
-				$('body').addClass('data-changed');
+		};
+
+		function FixFormInModal() {
+			// Remove alert from modal on close
+			$('.modal.fade').on('hidden.bs.modal', function() {
+				modal_alert_place = $(this).find('.sys-messages');
+				if(modal_alert_place.length) {
+					modal_alert_place.html('');
+				}
+				// Reset form at modal close
+				form = $(this).find('form');
+				if(form.length) {
+					form[0].reset();
+				}
+			}).on('show.bs.modal', function() {
+				// Reset form at modal open
+				form = $(this).find('form');
+				if(form.length) {
+					form[0].reset();
+				}
 			});
-		}
-	});
-
-	// Remove alert from modal on close
-	$('.modal.fade').on('hidden.bs.modal', function() {
-		modal_alert_place = $(this).find('.sys-messages');
-		if(modal_alert_place.length) {
-			modal_alert_place.html('');
-		}
-		// Reset form at modal close
-		form = $(this).find('form');
-		if(form.length) {
-			form[0].reset();
-		}
-	}).on('show.bs.modal', function() {
-		// Reset form at modal open
-		form = $(this).find('form');
-		if(form.length) {
-			form[0].reset();
-		}
-	});
-
-	// Prevent page reload if data was changed
-	$(window).bind('beforeunload', function(){
-		if($('body').hasClass('data-changed')) {
-			return 'Some data was changed without saving, are you sure want to leave page?';
-		}
-	});
-});
+		};
+
+		function BindWindowBeforeUnload() {
+			// Prevent page reload if data was changed
+			$(window).bind('beforeunload', function(){
+				if(FormDataWasChanged) {
+					return 'Some data was changed and not saved. Are you sure want to leave page?';
+				}
+			});
+		};
+
+		function Initialize() {
+			// Check if jQuery was loaded
+			if(typeof $ == 'function') {
+				FormToAjax();
+				FixFormInModal();
+				BindWindowBeforeUnload();
+			} else {
+				console.log('Error: jQuery is not loaded!');
+			}
+		};
+
+		// Initialize
+		if(window.addEventListener) {
+			// W3C standard
+			window.addEventListener('load', Initialize, false);
+		} else if(window.attachEvent) {
+			// Microsoft
+			window.attachEvent('onload', Initialize);
+		};
+
+		// Public
+		return {
+			ShowMsgSuccess: function(title, message) {
+				ShowSystemMsg(title, message, false);
+			},
+
+			ShowMsgError: function(title, message) {
+				ShowSystemMsg(title, message, true);
+			},
+
+			ActionLogout: function(message) {
+				if(confirm(message)) {
+					$.ajax({
+						type: "POST",
+						url: '/cp/',
+						data: {
+							action: 'index-user-logout',
+						}
+					}).done(function(data) {
+						AjaxDone(data)
+					}).fail(function(xhr, status, error) {
+						AjaxFail(xhr.responseText, status, error);
+					});
+				}
+			},
+
+			ActionDataTableDelete: function(object, action, id, message) {
+				if(confirm(message)) {
+					$.ajax({
+						type: "POST",
+						url: '/cp/',
+						data: {
+							action: action,
+							id: id,
+						}
+					}).done(function(data) {
+						AjaxDone(data)
+					}).fail(function(xhr, status, error) {
+						AjaxFail(xhr.responseText, status, error);
+					});
+				}
+			},
+		};
+	}(window, $);
+
+	// Make it public
+	window.fave = fave;
+}(window, jQuery));

File diff suppressed because it is too large
+ 0 - 0
assets/cp.scripts.js.go


File diff suppressed because it is too large
+ 0 - 0
assets/tmpl.cp.base.go


+ 1 - 1
assets/tmpl.cp.base.html

@@ -82,7 +82,7 @@
 						<div class="dropdown-menu dropdown-menu-right" aria-labelledby="nbAccountDropdown">
 							<a class="dropdown-item" href="javascript:;" data-toggle="modal" data-target="#sys-modal-user-settings" data-backdrop="static" data-keyboard="false">My Profile</a>
 							<div class="dropdown-divider"></div>
-							<a class="dropdown-item" href="javascript:ActionIndexUserLogout('Are you sure want to logout?');">Logout</a>
+							<a class="dropdown-item" href="javascript:fave.ActionLogout('Are you sure want to logout?');">Logout</a>
 						</div>
 					</li>
 				</ul>

+ 1 - 1
consts/consts.go

@@ -6,7 +6,7 @@ import (
 
 const Debug = true
 const ServerVersion = "1.0.0"
-const AssetsVersion = "7"
+const AssetsVersion = "8"
 const AssetsPath = "assets"
 const DirIndexFile = "index.html"
 

+ 2 - 2
engine/wrapper/wrapper.go

@@ -143,13 +143,13 @@ func (this *Wrapper) Write(data string) {
 
 func (this *Wrapper) MsgSuccess(msg string) {
 	this.Write(fmt.Sprintf(
-		`ShowSystemMsgSuccess('Success!', '%s', false);`,
+		`fave.ShowMsgSuccess('Success!', '%s', false);`,
 		strings.Replace(strings.Replace(msg, `'`, `&rsquo;`, -1), `"`, `&rdquo;`, -1)))
 }
 
 func (this *Wrapper) MsgError(msg string) {
 	this.Write(fmt.Sprintf(
-		`ShowSystemMsgError('Error!', '%s', true);`,
+		`fave.ShowMsgError('Error!', '%s', true);`,
 		strings.Replace(strings.Replace(msg, `'`, `&rsquo;`, -1), `"`, `&rdquo;`, -1)))
 }
 

+ 1 - 1
modules/module_index.go

@@ -86,7 +86,7 @@ func (this *Modules) RegisterModule_Index() *Module {
 				return `<a class="ico" title="View" href="` + (*values)[2] + `" target="_blank">` +
 					assets.SysSvgIconView + `</a>` + `<a class="ico" title="Edit" href="/cp/` +
 					wrap.CurrModule + `/modify/` + (*values)[0] + `/">` + assets.SysSvgIconEdit + `</a>` +
-					`<a class="ico" title="Delete" href="javascript:ActionDataTableDelete(this,'index-delete','` +
+					`<a class="ico" title="Delete" href="javascript:fave.ActionDataTableDelete(this,'index-delete','` +
 					(*values)[0] + `','Are you sure want to delete page?');">` + assets.SysSvgIconRemove + `</a>`
 			}, "/cp/"+wrap.CurrModule+"/")
 		} else if wrap.CurrSubModule == "add" || wrap.CurrSubModule == "modify" {

+ 1 - 1
modules/module_users.go

@@ -72,7 +72,7 @@ func (this *Modules) RegisterModule_Users() *Module {
 			}, func(values *[]string) string {
 				return `<a class="ico" title="Edit" href="/cp/` + wrap.CurrModule + `/modify/` +
 					(*values)[0] + `/">` + assets.SysSvgIconEdit + `</a>` +
-					`<a class="ico" title="Delete" href="javascript:ActionDataTableDelete(this,'users-delete','` +
+					`<a class="ico" title="Delete" href="javascript:fave.ActionDataTableDelete(this,'users-delete','` +
 					(*values)[0] + `','Are you sure want to delete user?');">` + assets.SysSvgIconRemove + `</a>`
 			}, "/cp/"+wrap.CurrModule+"/")
 		} else if wrap.CurrSubModule == "add" || wrap.CurrSubModule == "modify" {

Some files were not shown because too many files changed in this diff