From e1ceb050e19c7574bca146a8da7047ee4ff456b5 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Sun, 10 Jul 2016 05:02:35 -0400
Subject: [PATCH] Merge branch 'stable-3.1'

---
 interface/web/themes/default/assets/javascripts/ispconfig.js |  217 +++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 141 insertions(+), 76 deletions(-)

diff --git a/interface/web/themes/default/assets/javascripts/ispconfig.js b/interface/web/themes/default/assets/javascripts/ispconfig.js
index bc5c988..d791b19 100644
--- a/interface/web/themes/default/assets/javascripts/ispconfig.js
+++ b/interface/web/themes/default/assets/javascripts/ispconfig.js
@@ -11,7 +11,7 @@
 	
 	options: {
 		useLoadIndicator: false,
-		useComboBox: false,
+		useComboBox: false
 	},
 	
 	setOption: function(key, value) {
@@ -23,11 +23,7 @@
 	},
 	
 	reportError: function(request) {
-		/* Error reporting is disabled by default as some browsers like safari
-		   sometimes throw errors when a ajax request is delayed even if the
-		   ajax request worked. */
-
-		/*alert(request);*/
+		
 	},
 	
 	registerHook: function(name, callback) {
@@ -91,7 +87,7 @@
 				placeholder: '',
 				width: 'element',
 				selectOnBlur: true,
-				allowClear: true,
+				allowClear: true
 			});
 		}
 	},
@@ -121,56 +117,27 @@
 			});
 		}
 		
-		ISPConfig.callHook('onAfterContentLoad', {'url': url, 'data': data });
-	},
-
-	/* THIS ONE SHOULD BE REMOVED AFTER CREATING THE STATIC LOGIN PAGE!!! */
-	submitLoginForm: function(formname) {
-		//* Validate form. TODO: username and password with strip();
-		var frm = document.getElementById(formname);
-		var userNameObj = frm.username;
-		if(userNameObj.value == ''){
-			userNameObj.focus();
-			return;
-		}
-		var passwordObj = frm.passwort;
-		if(passwordObj.value == ''){
-			passwordObj.focus();
-			return;
-		}
-
-		$('#dummy_username').val(userNameObj.value);
-		$('#dummy_passwort').val(passwordObj.value);
-		$('#dummy_login_form').submit();
-
-		var submitFormObj = $.ajax({
-			type: "POST",
-			url: "content.php",
-			data: $('#'+formname).serialize(),
-			dataType: "html",
-			beforeSend: function() {
-				ISPConfig.showLoadIndicator();
-			},
-			success: function(data, textStatus, jqXHR) {
-				if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
-					var parts = jqXHR.responseText.split(':');
-					ISPConfig.loadContent(parts[1]);
-				} else if (jqXHR.responseText.indexOf('LOGIN_REDIRECT:') > -1) {
-					// Go to the login page
-					document.location.href = 'index.php';
-				} else {
-					$('#pageContent').html(jqXHR.responseText);
-					ISPConfig.onAfterContentLoad('content.php', $('#'+formname).serialize());
-					ISPConfig.pageFormChanged = false;
-				}
-				ISPConfig.loadMenus();
-				ISPConfig.hideLoadIndicator();
-			},
-			error: function() {
-				ISPConfig.hideLoadIndicator();
-				ISPConfig.reportError('Ajax Request was not successful.110');
-			}
+		$('input[data-input-element="date"]').datetimepicker({
+			'language': 'en', // TODO
+			'todayHighlight': true,
+			'todayBtn': 'linked',
+			'bootcssVer': 3,
+			'fontAwesome': true,
+			'autoclose': true,
+			'minView': 'month'
 		});
+		$('input[data-input-element="datetime"]').datetimepicker({
+			'language': 'en', // TODO
+			'todayHighlight': true,
+			'todayBtn': 'linked',
+			'bootcssVer': 3,
+			'fontAwesome': true,
+			'autoclose': true
+		});
+		$('[data-toggle="tooltip"]').tooltip({
+		});
+		
+		ISPConfig.callHook('onAfterContentLoad', {'url': url, 'data': data });
 	},
 
 	submitForm: function(formname, target, confirmation) {
@@ -191,6 +158,9 @@
 					if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
 						var parts = jqXHR.responseText.split(':');
 						ISPConfig.loadContent(parts[1]);
+					} else if (jqXHR.responseText.indexOf('LOGIN_REDIRECT:') > -1) {
+						// Go to the login page
+						document.location.href = '/index.php';
 					} else {
 						$('#pageContent').html(jqXHR.responseText);
 						ISPConfig.onAfterContentLoad(target, $('#'+formname).serialize());
@@ -216,29 +186,38 @@
 			} catch(e) {
 				response = responseStr;
 			}
+			var $response = $('<div></div>').html(response);
 			var msg = '';
-			var okmsg = $('#OKMsg',response).html();
+			var okmsg = $response.find('#OKMsg').html();
 			if(okmsg){
 				msg = '<div id="OKMsg">'+okmsg+'</div>';
 			}
-			var errormsg = $('#errorMsg',response).html();
+			var errormsg = $response.find('#errorMsg').html();
 			if(errormsg){
 				msg = msg+'<div id="errorMsg">'+errormsg+'</div>';
 			}
+			
+			var csrf_key = $response.find('input[name="_csrf_key"]').val();
+			var csrf_id = $response.find('input[name="_csrf_id"]').val();
+			
+			msg = msg + '<input type="hidden" name="_csrf_id" value="' + csrf_id + '" /><input type="hidden" name="_csrf_key" value="' + csrf_key + '" />';
+			
 			return msg;
 
 		};
 
 		var frame_id = 'ajaxUploader-iframe-' + Math.round(new Date().getTime() / 1000);
-		$('body').after('<iframe width="0" height="0" style="display:none;" name="'+frame_id+'" id="'+frame_id+'"/>');
-		$('input[type="file"]').closest("form").attr({target: frame_id, action: target}).submit();
+		$('body').append('<iframe width="0" height="0" style="display:none;" name="'+frame_id+'" id="'+frame_id+'"/>');
 		$('#'+frame_id).load(function() {
 			var msg = handleResponse(this);
 			$('#errorMsg').remove();
 			$('#OKMsg').remove();
+			$('input[name="_csrf_key"]').remove();
+			$('input[name="_csrf_id"]').remove();
 			$('input[name="id"]').before(msg);
 			$(this).remove();
 		  });
+		$('input[type="file"]').closest("form").attr({target: frame_id, action: target}).submit();
 	},
 
 	capp: function(module, redirect) {
@@ -290,11 +269,6 @@
 					var newUrl= jqXHR.responseText.substr(jqXHR.responseText.indexOf('URL_REDIRECT:') + "URL_REDIRECT:".length);
 					document.location.href = newUrl;
 				} else {
-					//document.getElementById('pageContent').innerHTML = jqXHR.responseText;
-					//var reponse = $(jqXHR.responseText);
-					//var reponseScript = reponse.filter("script");
-					//$.each(reponseScript, function(idx, val) { eval(val.text); } );
-
 					$('#pageContent').html(jqXHR.responseText);
 					ISPConfig.onAfterContentLoad(pagename, (params ? params : null));
 					ISPConfig.pageFormChanged = false;
@@ -334,10 +308,12 @@
 	},
 
 	loadInitContent: function() {
+		var startpage = $('#pageContent').attr('data-startpage');
+		if(!startpage) startpage = 'dashboard/dashboard.php';
 		var pageContentObject = $.ajax({
 			type: "GET",
-			url: "content.php",
-			data: "s_mod=login&s_pg=index",
+			url: startpage,
+			data: "",
 			dataType: "html",
 			beforeSend: function() {
 				ISPConfig.showLoadIndicator();
@@ -348,7 +324,7 @@
 					ISPConfig.loadContent(parts[1]);
 				} else {
 					$('#pageContent').html(jqXHR.responseText);
-					ISPConfig.onAfterContentLoad('content.php', "s_mod=login&s_pg=index");
+					ISPConfig.onAfterContentLoad('dashboard/dashboard.php', "");
 					ISPConfig.pageFormChanged = false;
 				}
 				ISPConfig.hideLoadIndicator();
@@ -412,7 +388,10 @@
 	},
 
 	changeTab: function(tab, target, force) {
-		if(ISPConfig.requestsRunning > 0) return false;
+		if(ISPConfig.requestsRunning > 0) {
+			console.log('tab change interrupted, request still running.');
+			return false;
+		}
 	
 		document.pageForm.next_tab.value = tab;
 
@@ -464,7 +443,7 @@
 		});
 	},
 
-	loadOptionInto: function(elementid,pagename) {
+	loadOptionInto: function(elementid,pagename,callback) {
 		var pageContentObject2 = $.ajax({
 			type: "GET",
 			url: pagename,
@@ -481,6 +460,9 @@
 					foo2.appendChild(document.createTextNode(elemente[i]));
 					foo2.value=elemente[i];
 					el.appendChild(foo2);
+				}
+				if (typeof(callback) != 'undefined') {
+					callback(elementid,pagename);
 				}
 			},
 			error: function() {
@@ -583,8 +565,18 @@
 	}
 });
 
+var $page = $('html, body');
+
 $(document).on('click', 'a[data-load-content],button[data-load-content]', function(e) {
-	//e.preventDefault();
+	e.preventDefault();
+	if(ISPConfig.requestsRunning > 0) {
+		console.log('preventing click because there is still a request running.');
+		return;
+	}
+	
+	$page.on('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); });
+	$page.animate({scrollTop: 0}, 1000, function() { $page.off('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); });
+	
 	var content_to_load = $(this).attr('data-load-content');
 	if(!content_to_load) return this;
 	
@@ -592,7 +584,15 @@
 });
 
 $(document).on('click', 'a[data-capp],button[data-capp]', function(e) {
-	//e.preventDefault();
+	e.preventDefault();
+	if(ISPConfig.requestsRunning > 0) {
+		console.log('preventing click because there is still a request running.');
+		return;
+	}
+	
+	$page.on('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); });
+	$page.animate({scrollTop: 0}, 1000, function() { $page.off('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); });
+	
 	var content_to_load = $(this).attr('data-capp');
 	if(!content_to_load) return this;
 	
@@ -600,7 +600,14 @@
 });
 
 $(document).on('click', 'a[data-submit-form],button[data-submit-form]', function(e) {
-	//e.preventDefault();
+	e.preventDefault();
+	if(ISPConfig.requestsRunning > 0) {
+		console.log('preventing click because there is still a request running.');
+		return;
+	}
+	
+	$page.on('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); });
+	$page.animate({scrollTop: 0}, 1000, function() { $page.off('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); });
 	
 	var $el = $(this);
 	var act = $el.attr('data-form-action');
@@ -617,9 +624,9 @@
 		$("#pageForm .table #Filter").trigger('click');
 	}
 	//Use $ submit with keypress Enter in forms
-	if (event.which == '13' && $(".pnl_formsarea button.positive").length > 0 && event.target.localName != 'textarea' && $(event.target).is(':input')) {
+	if (event.which == '13' && $(".tab-content button.formbutton-success").length > 0 && event.target.localName != 'textarea' && $(event.target).is(':input')) {
 		event.preventDefault();
-		$(".pnl_formsarea button.positive:first").not("[disabled='disabled']").trigger('click');
+		$(".tab-content button.formbutton-success").not("[disabled='disabled']").trigger('click');
 	}
 });
 
@@ -635,7 +642,11 @@
 		
 		var dir = $self.attr('data-ordered');
 		
-		act = act + '?orderby=' + column;
+		var separator = '?';
+		if(act.indexOf("?") >= 0){
+			separator = '&';
+		}
+		act = act + separator + 'orderby=' + column;
 		ISPConfig.submitForm(form, act);
 		
 		$(document).ajaxComplete(function() {
@@ -659,6 +670,29 @@
 	var template2 = $(this).siblings(':input');
 	template2.insertAtCaret(placeholderContentText);
 });
+
+$(document).on("click", "[data-check-fields] > input[type='checkbox']", function() {
+	if($(this).is(':checked')) {
+		var flds = $(this).parent().attr('data-check-fields');
+		var tmp = flds.split(/,/);
+		for(var i = 0; i < tmp.length; i++) {
+			var fname = tmp[i];
+			$('input[type="checkbox"][name="' + fname + '"]').prop('checked', true);
+		}
+	}
+});
+
+$(document).on("click", "[data-uncheck-fields] > input[type='checkbox']", function() {
+	if($(this).is(':checked') == false) {
+		var flds = $(this).parent().attr('data-uncheck-fields');
+		var tmp = flds.split(/,/);
+		for(var i = 0; i < tmp.length; i++) {
+			var fname = tmp[i];
+			$('input[type="checkbox"][name="' + fname + '"]').prop('checked', false);
+		}
+	}
+});
+
 
 $(document).on('ready', function () {
 	$.fn.extend({
@@ -705,4 +739,35 @@
 			e.preventDefault();
 		}
 	});
+	
+	$.fn.setCursorPosition = function(pos) {
+		var self = $(this).get(0);
+		if(self.setSelectionRange) {
+			self.setSelectionRange(pos, pos);
+		} else if(self.createTextRange) {
+			var range = self.createTextRange();
+			range.collapse(true);
+			if(pos < 0) {
+				pos = $(this).val().length + pos;
+			}
+			range.moveEnd('character', pos);
+			range.moveStart('character', pos);
+			range.select();
+		}
+	};
+	
+	$.fn.getCursorPosition = function() {
+		var iCaretPos = 0;
+		var self = $(this).get(0);
+		
+		if(typeof self.selectionStart === 'number') {
+			iCaretPos = self.selectionDirection == 'backward' ? self.selectionStart : self.selectionEnd;
+		} else if(document.selection) {
+			this.focus();
+			var oSel = document.selection.createRange();
+			oSel.moveStart('character', -self.value.length);
+			iCaretPos = oSel.text.length;
+		}
+		return iCaretPos;
+	};
 });

--
Gitblit v1.9.1