328 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			328 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | |
|  * This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | |
|  */
 | |
| 
 | |
| // add random() function to arrays that returns a random element
 | |
| // credit: https://stackoverflow.com/a/24137301
 | |
| Array.prototype.random = function () {
 | |
|   return this[Math.floor((Math.random()*this.length))];
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Generate a UUID.
 | |
|  * From https://stackoverflow.com/a/2117523
 | |
|  * @returns {String}
 | |
|  */
 | |
| function uuidv4() {
 | |
|     return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
 | |
|         var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
 | |
|         return v.toString(16);
 | |
|     });
 | |
| }
 | |
| 
 | |
| function apirequest(url, data, success, error, method, username, password) {
 | |
|     if (typeof method != "string") {
 | |
|         method = "POST";
 | |
|     }
 | |
|     return $.ajax({
 | |
|         url: url,
 | |
|         dataType: "json",
 | |
|         method: method,
 | |
|         data: data,
 | |
|         timeout: 10 * 1000,
 | |
|         beforeSend: function (xhr) {
 | |
|             if (typeof username === 'string' && typeof password === 'string') {
 | |
|                 xhr.setRequestHeader("Authorization", "Basic " + btoa(username + ":" + password));
 | |
|             }
 | |
|         },
 | |
|         success: function (val) {
 | |
|             if (typeof success == 'function') {
 | |
|                 console.log(val);
 | |
|                 success(val);
 | |
|             }
 | |
|         },
 | |
|         error: error
 | |
|     });
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Take a UNIX timestamp (seconds since Jan 1 1970) and format it.
 | |
|  * (Mostly) compatible with PHP's date() function.
 | |
|  * @param {String} date format string, see https://www.php.net/manual/en/function.date.php
 | |
|  * @param {Integer} timestamp UNIX timestamp
 | |
|  * @return {String}
 | |
|  */
 | |
| function formatTimestamp(format, timestamp) {
 | |
|     if (typeof timestamp == "undefined") {
 | |
|         timestamp = time();
 | |
|     }
 | |
|     var date = new Date(timestamp * 1000);
 | |
| 
 | |
|     var out = "";
 | |
| 
 | |
|     var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
 | |
|     var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
 | |
|     for (var i = 0; i < format.length; i++) {
 | |
|         var c = format.charAt(i);
 | |
|         // Handle backslash-escaped characters
 | |
|         if (c == "\\" && i < format.length - 1) {
 | |
|             out += format.charAt(i + 1);
 | |
|             i++;
 | |
|             continue;
 | |
|         }
 | |
|         switch (c) {
 | |
|             case "d":
 | |
|                 var d = date.getDate();
 | |
|                 if (d < 10) {
 | |
|                     out += "0";
 | |
|                 }
 | |
|                 out += d;
 | |
|                 break;
 | |
|             case "D":
 | |
|                 out += days[date.getDay()].substring(0, 3);
 | |
|                 break;
 | |
|             case "j":
 | |
|                 out += date.getDate();
 | |
|                 break;
 | |
|             case "l":
 | |
|                 out += days[date.getDay()];
 | |
|                 break;
 | |
|             case "N":
 | |
|                 // TODO
 | |
|                 break;
 | |
|             case "S":
 | |
|                 // TODO
 | |
|                 break;
 | |
|             case "w":
 | |
|                 out += date.getDay();
 | |
|                 break;
 | |
|             case "z":
 | |
|                 // TODO
 | |
|                 break;
 | |
|             case "W":
 | |
|                 // TODO
 | |
|                 break;
 | |
|             case "F":
 | |
|                 out += months[date.getMonth()];
 | |
|                 break;
 | |
|             case "m":
 | |
|                 var m = date.getMonth() + 1;
 | |
|                 if (m < 10) {
 | |
|                     out += "0";
 | |
|                 }
 | |
|                 out += m;
 | |
|                 break;
 | |
|             case "M":
 | |
|                 out += months[date.getMonth()].substring(0, 3);
 | |
|                 break;
 | |
|             case "n":
 | |
|                 out += date.getMonth() + 1;
 | |
|                 break;
 | |
|             case "t":
 | |
|                 // TODO
 | |
|                 break;
 | |
|             case "L":
 | |
|                 // TODO
 | |
|                 break;
 | |
|             case "o":
 | |
|                 // TODO
 | |
|                 break;
 | |
|             case "Y":
 | |
|                 out += date.getFullYear();
 | |
|                 break;
 | |
|             case "y":
 | |
|                 var y = (date.getFullYear() + "");
 | |
|                 out += y.substring(y.length - 2);
 | |
|                 break;
 | |
|             case "a":
 | |
|                 if (date.getHours() < 12) {
 | |
|                     out += "am";
 | |
|                 } else {
 | |
|                     out += "pm";
 | |
|                 }
 | |
|                 break;
 | |
|             case "A":
 | |
|                 if (date.getHours() < 12) {
 | |
|                     out += "AM";
 | |
|                 } else {
 | |
|                     out += "PM";
 | |
|                 }
 | |
|                 break;
 | |
|             case "B":
 | |
|                 // TODO
 | |
|                 break;
 | |
|             case "g":
 | |
|                 var h = date.getHours() % 12;
 | |
|                 if (h == 0) {
 | |
|                     h = 12;
 | |
|                 }
 | |
|                 out += h;
 | |
|                 break;
 | |
|             case "G":
 | |
|                 out += date.getHours();
 | |
|                 break;
 | |
|             case "h":
 | |
|                 var h = date.getHours() % 12;
 | |
|                 if (h == 0) {
 | |
|                     h = 12;
 | |
|                 }
 | |
|                 if (h < 10) {
 | |
|                     out += "0";
 | |
|                 }
 | |
|                 out += h;
 | |
|                 break;
 | |
|             case "H":
 | |
|                 var h = date.getHours();
 | |
|                 if (h < 10) {
 | |
|                     out += "0";
 | |
|                 }
 | |
|                 out += h;
 | |
|                 break;
 | |
|             case "i":
 | |
|                 var ii = date.getMinutes();
 | |
|                 if (ii < 10) {
 | |
|                     out += "0";
 | |
|                 }
 | |
|                 out += ii;
 | |
|                 break;
 | |
|             case "s":
 | |
|                 var s = date.getSeconds();
 | |
|                 if (s < 10) {
 | |
|                     out += "0";
 | |
|                 }
 | |
|                 out += s;
 | |
|                 break;
 | |
|             case "u":
 | |
|                 out += date.getMilliseconds() * 1000;
 | |
|                 break;
 | |
|             case "v":
 | |
|                 out += date.getMilliseconds();
 | |
|                 break;
 | |
|             case "e":
 | |
|                 // TODO
 | |
|                 break;
 | |
|             case "I":
 | |
|                 // TODO
 | |
|                 break;
 | |
|             case "O":
 | |
|                 var off = date.getTimezoneOffset();
 | |
|                 var m = off % 60;
 | |
|                 var h = (off - m) / 60;
 | |
|                 if (off >= 0) {
 | |
|                     out += "+";
 | |
|                 } else {
 | |
|                     out += "-";
 | |
|                 }
 | |
|                 if (h < 10) {
 | |
|                     out += "0";
 | |
|                 }
 | |
|                 out += h;
 | |
|                 if (m < 10) {
 | |
|                     out += "0";
 | |
|                 }
 | |
|                 out += m;
 | |
|                 break;
 | |
|             case "P":
 | |
|                 var off = date.getTimezoneOffset();
 | |
|                 var m = off % 60;
 | |
|                 var h = (off - m) / 60;
 | |
|                 if (off >= 0) {
 | |
|                     out += "+";
 | |
|                 } else {
 | |
|                     out += "-";
 | |
|                 }
 | |
|                 if (h < 10) {
 | |
|                     out += "0";
 | |
|                 }
 | |
|                 out += h;
 | |
|                 out += ":";
 | |
|                 if (m < 10) {
 | |
|                     out += "0";
 | |
|                 }
 | |
|                 out += m;
 | |
|                 break;
 | |
|             case "T":
 | |
|                 // TODO
 | |
|                 break;
 | |
|             case "Z":
 | |
|                 out += date.getTimezoneOffset() * 60;
 | |
|                 break;
 | |
|             case "c":
 | |
|                 out += formatTimestamp(timestamp, "Y-m-d\\TH:i:sP");
 | |
|                 break;
 | |
|             case "r":
 | |
|                 out += formatTimestamp(timestamp, "D, j M Y G:i:s O");
 | |
|                 break;
 | |
|             case "U":
 | |
|                 out += Math.round(timestamp);
 | |
|                 break;
 | |
|             default:
 | |
|                 out += c;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     return out;
 | |
| }
 | |
| 
 | |
| function timestampToDateTimeString(timestamp) {
 | |
|     return timestampToDateString(timestamp) + " " + timestampToTimeString(timestamp);
 | |
| }
 | |
| 
 | |
| function timestampToDateString(timestamp) {
 | |
|     var date = new Date(timestamp * 1000);
 | |
| 
 | |
|     return date.toLocaleDateString();
 | |
| }
 | |
| 
 | |
| function timestampToTimeString(timestamp) {
 | |
|     var date = new Date(timestamp * 1000);
 | |
| 
 | |
|     var pm = date.getHours() >= 12;
 | |
|     var hours = date.getHours() > 12 ? date.getHours() - 12 : date.getHours();
 | |
|     hours = (hours == 0 ? 12 : hours);
 | |
|     var minutes = date.getMinutes();
 | |
|     var time = hours + ":" + (minutes < 10 ? "0" + minutes : minutes) + " " + (pm ? "PM" : "AM");
 | |
| 
 | |
|     return time;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Get the current UNIX timestamp in seconds.
 | |
|  * @returns {Number}
 | |
|  */
 | |
| function time() {
 | |
|     return Date.now() / 1000;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Get the number of seconds between now and the given timestamp.
 | |
|  * @param {Number} compareto
 | |
|  * @returns {Number}
 | |
|  */
 | |
| function timeDiff(compareto) {
 | |
|     return time() - compareto;
 | |
| }
 | |
| 
 | |
| function colorThemeNameToHex(theme) {
 | |
|     var colors = {
 | |
|         red: "#ff3b30",
 | |
|         green: "#4cd964",
 | |
|         blue: "#2196f3",
 | |
|         pink: "#ff2d55",
 | |
|         yellow: "#ffcc00",
 | |
|         orange: "#ff9500",
 | |
|         purple: "#9c27b0",
 | |
|         deeppurple: "#673ab7",
 | |
|         lightblue: "#5ac8fa",
 | |
|         teal: "#009688",
 | |
|         lime: "#cddc39",
 | |
|         deeporange: "#ff6b22",
 | |
|         gray: "#8e8e93",
 | |
|         white: "#ffffff",
 | |
|         black: "#000000"
 | |
|     };
 | |
| 
 | |
|     return colors[theme.toLowerCase()];
 | |
| } |