src/pyams_skin/resources/js/myams-notify.js
changeset 557 bca7a7e058a3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_skin/resources/js/myams-notify.js	Thu Feb 13 11:43:31 2020 +0100
@@ -0,0 +1,527 @@
+/*
+ * MyAMS extensions for notification messages
+ * Version 0.1.2
+ * ©2014 Thierry Florac <tflorac@ulthar.net>
+ */
+
+
+(function ($, globals) {
+
+	'use strict';
+
+	$(document).ready(function () {
+		$("body").append("<div id='divSmallBoxes'></div>")
+				 .append("<div id='divMiniIcons'></div>")
+				 .append("<div id='divBigBoxes'></div>");
+	});
+
+
+	function SmartUnLoading() {
+		$(".divMessageBox").fadeOut(300, function () {
+			$(this).remove();
+		});
+		$(".LoadingBoxContainer").fadeOut(300, function () {
+			$(this).remove();
+		});
+	}
+
+	var ExistMsg = 0,
+		SmartMSGboxCount = 0,
+		heightPrev,
+		BigBoxes = 0,
+		SmallBoxes = 0,
+		SmallBoxesAnchos = 0;
+
+
+	var ams = globals.MyAMS;
+
+	ams.notify = {
+
+		messageBox: function (options, callback) {
+
+			var SmartMSG,
+				Content,
+				isIE8 = ams.browser && ams.browser.isIE8orlower();
+			var defaults = {
+				title: "",
+				content: "",
+				status: "",
+				NormalButton: undefined,
+				ActiveButton: undefined,
+				buttons: undefined,
+				input: undefined,
+				placeholder: "",
+				options: undefined,
+				sound: undefined
+			};
+			var settings = $.extend({}, defaults, options);
+
+			if (settings.sound && (isIE8 === 0)) {
+				var audioElement = document.createElement("audio");
+				if (navigator.userAgent.match("Firefox/")) {
+					audioElement.setAttribute("src", ams.baseURL + '../sound/message.ogg');
+				} else {
+					audioElement.setAttribute("src", ams.baseURL + '../sound/message.mp3');
+				}
+				$.get();
+				audioElement.addEventListener("load", function () {
+					audioElement.play();
+				}, true);
+				audioElement.pause();
+				audioElement.play();
+			}
+			SmartMSGboxCount = SmartMSGboxCount + 1;
+			if (ExistMsg === 0) {
+				ExistMsg = 1;
+				SmartMSG = "<div class='MessageBox animated fadeIn fast' id='MsgBoxBack'></div>";
+				$("body").append(SmartMSG);
+				if (isIE8) {
+					$("#MsgBoxBack").addClass("MessageIE");
+				}
+			}
+			var i;
+			var InputType = "";
+			var HasInput = 0;
+			var Name = "";
+			var NumButtons = 0;
+			var btnClass;
+			if (settings.input !== undefined) {
+				HasInput = 1;
+				settings.input = settings.input.toLowerCase();
+				switch (settings.input) {
+					case "text":
+						InputType = "<input class='form-control' type='" + settings.input + "' id='txt" + SmartMSGboxCount + "' placeholder='" + settings.placeholder + "'/><br/><br/>";
+						break;
+					case "password":
+						InputType = "<input class='form-control' type='" + settings.input + "' id='txt" + SmartMSGboxCount + "' placeholder='" + settings.placeholder + "'/><br/><br/>";
+						break;
+					case "select":
+						if (settings.options === undefined) {
+							if (globals.alert) {
+								globals.alert("For this type of input, the options parameter is required.");
+							}
+						} else {
+							InputType = "<select class='form-control' id='txt" + SmartMSGboxCount + "'>";
+							for (i=0; i <= settings.options.length - 1; i++) {
+								if (settings.options[i] === "[") {
+									Name = "";
+								} else {
+									if (settings.options[i] === "]") {
+										NumButtons = NumButtons + 1;
+										Name = "<option>" + Name + "</option>";
+										InputType += Name;
+									} else {
+										Name += settings.options[i];
+									}
+								}
+							}
+							InputType += "</select>";
+						}
+						break;
+					default:
+						if (globals.alert) {
+							globals.alert("That type of input is not handled yet");
+						}
+				}
+			}
+			Content = "<div class='MessageBoxContainer " + settings.status + " animated fadeIn fast' id='Msg" + SmartMSGboxCount + "'>";
+			Content += "<div class='MessageBoxMiddle'>";
+			Content += "<span class='MsgTitle'>" + settings.title + "</span class='MsgTitle'>";
+			Content += "<p class='pText'>" + settings.content + "</p>";
+			Content += InputType;
+			Content += "<div class='MessageBoxButtonSection'>";
+			if (settings.buttons === undefined) {
+				settings.buttons = "[Accept]";
+			}
+			settings.buttons = $.trim(settings.buttons);
+			settings.buttons = settings.buttons.split("");
+			if (settings.NormalButton === undefined) {
+				settings.NormalButton = "#232323";
+			}
+			if (settings.ActiveButton === undefined) {
+				settings.ActiveButton = "#ed145b";
+			}
+			for (i=0; i <= settings.buttons.length - 1; i++) {
+				if (settings.buttons[i] === "[") {
+					Name = "";
+				} else {
+					if (settings.buttons[i] === "]") {
+						NumButtons = NumButtons + 1;
+						if (NumButtons === 1) {
+							btnClass = 'btn-primary';
+						} else {
+							btnClass = 'btn-default';
+						}
+						Name = "<button id='bot" + NumButtons + "-Msg" + SmartMSGboxCount + "' class='btn " + btnClass + " btn-sm botTempo'> " + Name + "</button>";
+						Content += Name;
+					} else {
+						Name += settings.buttons[i];
+					}
+				}
+			}
+			Content += "</div>";
+			Content += "</div>";
+			Content += "</div>";
+			if (SmartMSGboxCount > 1) {
+				$(".MessageBoxContainer").hide();
+				$(".MessageBoxContainer").css("z-index", 99999);
+			}
+			$(".MessageBox").append(Content);
+			if (HasInput === 1) {
+				$("#txt" + SmartMSGboxCount).focus();
+			}
+			$(".botTempo").hover(function () {
+				var ThisID = $(this).attr("id");
+			}, function () {
+				var ThisID = $(this).attr("id");
+			});
+			$(".botTempo").click(function () {
+				var ThisID = $(this).attr("id");
+				var MsgBoxID = ThisID.substr(ThisID.indexOf("-") + 1);
+				var Press = $.trim($(this).text());
+				if (HasInput === 1) {
+					if (typeof callback === "function") {
+						var IDNumber = MsgBoxID.replace("Msg", "");
+						var Value = $("#txt" + IDNumber).val();
+						if (callback) {
+							callback(Press, Value);
+						}
+					}
+				} else {
+					if (typeof callback === "function") {
+						if (callback) {
+							callback(Press);
+						}
+					}
+				}
+				$("#" + MsgBoxID).addClass("animated fadeOut fast");
+				SmartMSGboxCount = SmartMSGboxCount - 1;
+				if (SmartMSGboxCount === 0) {
+					$("#MsgBoxBack").removeClass("fadeIn").addClass("fadeOut").delay(300).queue(function () {
+						ExistMsg = 0;
+						$(this).remove();
+					});
+				}
+			});
+		},
+
+		bigBox: function (settings, callback) {
+			var boxBig, content;
+			settings = $.extend({
+				title: "",
+				content: "",
+				icon: undefined,
+				number: undefined,
+				color: undefined,
+				sound: true,
+				timeout: undefined,
+				colortime: 1500,
+				colors: undefined
+			}, settings);
+			if (settings.sound === true) {
+				if (ams.browser && (ams.browser.isIE8orlower() === 0)) {
+					var audioElement = document.createElement("audio");
+					if (navigator.userAgent.match("Firefox/")) {
+						audioElement.setAttribute("src", ams.baseURL + '../snd/bigbox.ogg');
+					} else {
+						audioElement.setAttribute("src", ams.baseURL + '../snd/bigbox.mp3');
+					}
+					$.get();
+					audioElement.addEventListener("load", function () {
+						audioElement.play();
+					}, true);
+					audioElement.pause();
+					audioElement.play();
+				}
+			}
+			BigBoxes = BigBoxes + 1;
+			boxBig = "<div id='bigBox" + BigBoxes + "' class='BigBox animated fadeIn fast'><div id='bigBoxColor" + BigBoxes + "'><i class='btnClose fa fa-times' id='btnClose" + BigBoxes + "'></i>";
+			if (settings.icon === undefined) {
+				settings.icon = "fa fa-cloud";
+			}
+			boxBig += "<span><i class='" + settings.icon + "'></i>&nbsp; " + settings.title + "</span>";
+			boxBig += "<p>" + settings.content + "</p>";
+			boxBig += "<div class='bigboxnumber'>";
+			if (settings.number !== undefined) {
+				boxBig += settings.number;
+			}
+			boxBig += "</div></div>";
+			boxBig += "</div>";
+			$("#divBigBoxes").append(boxBig);
+			if (settings.color === undefined) {
+				settings.color = "#004d60";
+			}
+			$("#bigBox" + BigBoxes).css("background-color", settings.color);
+			$("#divMiniIcons").append("<div id='miniIcon" + BigBoxes + "' class='cajita animated fadeIn' style='background-color: " + settings.color + ";'><i class='" + settings.icon + "'/></i></div>");
+			$("#miniIcon" + BigBoxes).bind("click", function () {
+				var FrontBox = $(this).attr("id");
+				var FrontBigBox = FrontBox.replace("miniIcon", "bigBox");
+				var FronBigBoxColor = FrontBox.replace("miniIcon", "bigBoxColor");
+				$(".cajita").each(function (index) {
+					var BackBox = $(this).attr("id");
+					var BigBoxID = BackBox.replace("miniIcon", "bigBox");
+					$("#" + BigBoxID).css("z-index", 9998);
+				});
+				$("#" + FrontBigBox).css("z-index", 9999);
+				$("#" + FronBigBoxColor).removeClass("animated fadeIn").delay(1).queue(function () {
+					$(this).show();
+					$(this).addClass("animated fadeIn");
+					$(this).clearQueue();
+				});
+			});
+			var ThisBigBoxCloseCross = $("#btnClose" + BigBoxes);
+			var ThisBigBox = $("#bigBox" + BigBoxes);
+			var ThisMiniIcon = $("#miniIcon" + BigBoxes);
+			var ColorTimeInterval;
+			if (settings.colors !== undefined && settings.colors.length > 0) {
+				ThisBigBoxCloseCross.attr("colorcount", "0");
+				ColorTimeInterval = setInterval(function () {
+					var ColorIndex = ThisBigBoxCloseCross.attr("colorcount");
+					ThisBigBoxCloseCross.animate({
+						backgroundColor: settings.colors[ColorIndex].color
+					});
+					ThisBigBox.animate({
+						backgroundColor: settings.colors[ColorIndex].color
+					});
+					ThisMiniIcon.animate({
+						backgroundColor: settings.colors[ColorIndex].color
+					});
+					if (ColorIndex < settings.colors.length - 1) {
+						ThisBigBoxCloseCross.attr("colorcount", ((ColorIndex * 1) + 1));
+					} else {
+						ThisBigBoxCloseCross.attr("colorcount", 0);
+					}
+				}, settings.colortime);
+			}
+			ThisBigBoxCloseCross.bind("click", function () {
+				clearInterval(ColorTimeInterval);
+				if (typeof callback === "function") {
+					if (callback) {
+						callback();
+					}
+				}
+				var FrontBox = $(this).attr("id");
+				var FrontBigBox = FrontBox.replace("btnClose", "bigBox");
+				var miniIcon = FrontBox.replace("btnClose", "miniIcon");
+				$("#" + FrontBigBox).removeClass("fadeIn fast");
+				$("#" + FrontBigBox).addClass("fadeOut fast").delay(300).queue(function () {
+					$(this).clearQueue();
+					$(this).remove();
+				});
+				$("#" + miniIcon).removeClass("fadeIn fast");
+				$("#" + miniIcon).addClass("fadeOut fast").delay(300).queue(function () {
+					$(this).clearQueue();
+					$(this).remove();
+				});
+			});
+			if (settings.timeout !== undefined) {
+				var TimedID = BigBoxes;
+				setTimeout(function () {
+					clearInterval(ColorTimeInterval);
+					var box = $("#bigBox" + TimedID);
+					box.removeClass("fadeIn fast");
+					box.addClass("fadeOut fast").delay(300).queue(function () {
+						$(this).clearQueue();
+						$(this).remove();
+					});
+					var icon = $("#miniIcon" + TimedID);
+					icon.removeClass("fadeIn fast");
+					icon.addClass("fadeOut fast").delay(300).queue(function () {
+						$(this).clearQueue();
+						$(this).remove();
+					});
+				}, settings.timeout);
+			}
+		},
+
+		smallBox: function (settings, callback) {
+			var BoxSmall, content;
+			settings = $.extend({
+				title: "",
+				content: "",
+				icon: undefined,
+				iconSmall: undefined,
+				sound: true,
+				color: undefined,
+				timeout: undefined,
+				colortime: 1500,
+				colors: undefined
+			}, settings);
+			if (settings.sound === true) {
+				if (ams.browser && (ams.browser.isIE8orlower() === 0)) {
+					var audioElement = document.createElement("audio");
+					if (navigator.userAgent.match("Firefox/")) {
+						audioElement.setAttribute("src", ams.baseURL + '../snd/smallbox.ogg');
+					} else {
+						audioElement.setAttribute("src", ams.baseURL + '../snd/smallbox.mp3');
+					}
+					$.get();
+					audioElement.addEventListener("load", function () {
+						audioElement.play();
+					}, true);
+					audioElement.pause();
+					audioElement.play();
+				}
+			}
+			SmallBoxes = SmallBoxes + 1;
+			BoxSmall = "";
+			var IconSection = "",
+				CurrentIDSmallbox = "smallbox" + SmallBoxes;
+			if (settings.iconSmall === undefined) {
+				IconSection = "<div class='miniIcon'></div>";
+			} else {
+				IconSection = "<div class='miniIcon'><i class='miniPic " + settings.iconSmall + "'></i></div>";
+			} if (settings.icon === undefined) {
+				BoxSmall = "<div id='smallbox" + SmallBoxes + "' class='SmallBox animated fadeInRight fast'><div class='textoFull'><span>" + settings.title + "</span><p>" + settings.content + "</p></div>" + IconSection + "</div>";
+			} else {
+				BoxSmall = "<div id='smallbox" + SmallBoxes + "' class='SmallBox animated fadeInRight fast'><div class='foto'><i class='" + settings.icon + "'></i></div><div class='textoFoto'><span>" + settings.title + "</span><p>" + settings.content + "</p></div>" + IconSection + "</div>";
+			} if (SmallBoxes === 1) {
+				$("#divSmallBoxes").append(BoxSmall);
+				SmallBoxesAnchos = $("#smallbox" + SmallBoxes).height() + 40;
+			} else {
+				var SmartExist = $(".SmallBox").size();
+				if (SmartExist === 0) {
+					$("#divSmallBoxes").append(BoxSmall);
+					SmallBoxesAnchos = $("#smallbox" + SmallBoxes).height() + 40;
+				} else {
+					$("#divSmallBoxes").append(BoxSmall);
+					$("#smallbox" + SmallBoxes).css("top", SmallBoxesAnchos);
+					SmallBoxesAnchos = SmallBoxesAnchos + $("#smallbox" + SmallBoxes).height() + 20;
+					$(".SmallBox").each(function (index) {
+						if (index === 0) {
+							$(this).css("top", 20);
+							heightPrev = $(this).height() + 40;
+							SmallBoxesAnchos = $(this).height() + 40;
+						} else {
+							$(this).css("top", heightPrev);
+							heightPrev = heightPrev + $(this).height() + 20;
+							SmallBoxesAnchos = SmallBoxesAnchos + $(this).height() + 20;
+						}
+					});
+				}
+			}
+			var ThisSmallBox = $("#smallbox" + SmallBoxes);
+			if (settings.color === undefined) {
+				ThisSmallBox.css("background-color", "#004d60");
+			} else {
+				ThisSmallBox.css("background-color", settings.color);
+			}
+			var ColorTimeInterval;
+			if (settings.colors !== undefined && settings.colors.length > 0) {
+				ThisSmallBox.attr("colorcount", "0");
+				ColorTimeInterval = setInterval(function () {
+					var ColorIndex = ThisSmallBox.attr("colorcount");
+					ThisSmallBox.animate({
+						backgroundColor: settings.colors[ColorIndex].color
+					});
+					if (ColorIndex < settings.colors.length - 1) {
+						ThisSmallBox.attr("colorcount", ((ColorIndex * 1) + 1));
+					} else {
+						ThisSmallBox.attr("colorcount", 0);
+					}
+				}, settings.colortime);
+			}
+			if (settings.timeout !== undefined) {
+				setTimeout(function () {
+					clearInterval(ColorTimeInterval);
+					var ThisHeight = $(this).height() + 20;
+					var ID = CurrentIDSmallbox;
+					var ThisTop = $("#" + CurrentIDSmallbox).css("top");
+					if ($("#" + CurrentIDSmallbox + ":hover").length !== 0) {
+						$("#" + CurrentIDSmallbox).on("mouseleave", function () {
+							SmallBoxesAnchos = SmallBoxesAnchos - ThisHeight;
+							$("#" + CurrentIDSmallbox).remove();
+							if (typeof callback === "function") {
+								if (callback) {
+									callback();
+								}
+							}
+							var Primero = 1;
+							var heightPrev = 0;
+							$(".SmallBox").each(function (index) {
+								if (index === 0) {
+									$(this).animate({
+										top: 20
+									}, 300);
+									heightPrev = $(this).height() + 40;
+									SmallBoxesAnchos = $(this).height() + 40;
+								} else {
+									$(this).animate({
+										top: heightPrev
+									}, 350);
+									heightPrev = heightPrev + $(this).height() + 20;
+									SmallBoxesAnchos = SmallBoxesAnchos + $(this).height() + 20;
+								}
+							});
+						});
+					} else {
+						clearInterval(ColorTimeInterval);
+						SmallBoxesAnchos = SmallBoxesAnchos - ThisHeight;
+						if (typeof callback === "function") {
+							if (callback) {
+								callback();
+							}
+						}
+						$("#" + CurrentIDSmallbox).removeClass().addClass("SmallBox").animate({
+							opacity: 0
+						}, 300, function () {
+							$(this).remove();
+							var Primero = 1;
+							var heightPrev = 0;
+							$(".SmallBox").each(function (index) {
+								if (index === 0) {
+									$(this).animate({
+										top: 20
+									}, 300);
+									heightPrev = $(this).height() + 40;
+									SmallBoxesAnchos = $(this).height() + 40;
+								} else {
+									$(this).animate({
+										top: heightPrev
+									});
+									heightPrev = heightPrev + $(this).height() + 20;
+									SmallBoxesAnchos = SmallBoxesAnchos + $(this).height() + 20;
+								}
+							});
+						});
+					}
+				}, settings.timeout);
+			}
+			$("#smallbox" + SmallBoxes).bind("click", function () {
+				clearInterval(ColorTimeInterval);
+				if (typeof callback === "function") {
+					if (callback) {
+						callback();
+					}
+				}
+				var ThisHeight = $(this).height() + 20;
+				var ID = $(this).attr("id");
+				var ThisTop = $(this).css("top");
+				SmallBoxesAnchos = SmallBoxesAnchos - ThisHeight;
+				$(this).removeClass().addClass("SmallBox").animate({
+					opacity: 0
+				}, 300, function () {
+					$(this).remove();
+					var Primero = 1;
+					var heightPrev = 0;
+					$(".SmallBox").each(function (index) {
+						if (index === 0) {
+							$(this).animate({
+								top: 20
+							}, 300);
+							heightPrev = $(this).height() + 40;
+							SmallBoxesAnchos = $(this).height() + 40;
+						} else {
+							$(this).animate({
+								top: heightPrev
+							}, 350);
+							heightPrev = heightPrev + $(this).height() + 20;
+							SmallBoxesAnchos = SmallBoxesAnchos + $(this).height() + 20;
+						}
+					});
+				});
+			});
+		}
+	};
+
+})(jQuery, this);