mod_invites_page/static/invite.js
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Thu, 16 Nov 2023 19:18:22 +0100
changeset 5729 ef3aa6901a93
parent 5727 5f7f6ee32a11
permissions -rw-r--r--
mod_invites_page: Add support for Haiku and mobile Linux
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5723
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
     1
(function () {
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
     2
	// If QR lib loaded ok, show QR button on desktop devices
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
     3
	if(window.QRCode) {
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
     4
		new QRCode(document.getElementById("qr-invite-page"), document.location.href);
5727
5f7f6ee32a11 mod_invites_page: Stop displaying the QRCode to mobile devices
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 5725
diff changeset
     5
		document.getElementById('qr-button-container').classList.add("d-md-block");
5723
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
     6
	}
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
     7
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
     8
	// Detect current platform and show/hide appropriate clients
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
     9
	if(window.platform) {
5729
ef3aa6901a93 mod_invites_page: Add support for Haiku and mobile Linux
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 5727
diff changeset
    10
		let platform_friendly = null;
ef3aa6901a93 mod_invites_page: Add support for Haiku and mobile Linux
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 5727
diff changeset
    11
		let platform_classname = null;
5723
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    12
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    13
		switch(platform.os.family) {
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    14
		case "Ubuntu":
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    15
		case "Linux":
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    16
		case "Fedora":
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    17
		case "Red Hat":
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    18
		case "SuSE":
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    19
			platform_friendly = platform.os.family + " (Linux)";
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    20
			platform_classname = "linux";
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    21
			break;
5729
ef3aa6901a93 mod_invites_page: Add support for Haiku and mobile Linux
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 5727
diff changeset
    22
		case "Linux aarch64":
ef3aa6901a93 mod_invites_page: Add support for Haiku and mobile Linux
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 5727
diff changeset
    23
			platform_friendly = "Linux mobile";
ef3aa6901a93 mod_invites_page: Add support for Haiku and mobile Linux
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 5727
diff changeset
    24
			platform_classname = "linux";
ef3aa6901a93 mod_invites_page: Add support for Haiku and mobile Linux
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 5727
diff changeset
    25
			break;
ef3aa6901a93 mod_invites_page: Add support for Haiku and mobile Linux
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 5727
diff changeset
    26
		case "Haiku R1":
ef3aa6901a93 mod_invites_page: Add support for Haiku and mobile Linux
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 5727
diff changeset
    27
			platform_friendly = "Haiku";
ef3aa6901a93 mod_invites_page: Add support for Haiku and mobile Linux
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 5727
diff changeset
    28
			platform_classname = "haiku";
ef3aa6901a93 mod_invites_page: Add support for Haiku and mobile Linux
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 5727
diff changeset
    29
			break;
5723
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    30
		case "Windows Phone":
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    31
			platform_friendly = "Windows Phone";
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    32
			platform_classname = "windows-phone";
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    33
			break;
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    34
		default:
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    35
			if(platform.os.family.startsWith("Windows")) {
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    36
				platform_friendly = "Windows";
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    37
				platform_classname = "windows";
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    38
			} else {
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    39
				platform_friendly = platform.os.family;
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    40
				platform_classname = platform_friendly.toLowerCase();
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    41
			}
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    42
		}
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    43
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    44
		if(platform_friendly && platform_classname) {
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    45
			if(document.querySelectorAll('.client-card .client-platform-badge-'+platform_classname).length == 0) {
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    46
				// No clients recognised for this platform, do nothing
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    47
				return;
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    48
			}
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    49
			// Hide clients not for this platform
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    50
			const client_cards = document.getElementsByClassName('client-card');
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    51
			for (let card of client_cards) {
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    52
				if (card.classList.contains('app-platform-'+platform_classname))
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    53
					card.classList.add('supported-platform');
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    54
				else if (!card.classList.contains('app-platform-web'))
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    55
					card.hidden = true;
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    56
				const badges = card.querySelectorAll('.client-platform-badge');
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    57
				for (let badge of badges) {
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    58
					if (badge.classList.contains('client-platform-badge-'+platform_classname)) {
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    59
						badge.classList.add("badge-success");
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    60
						badge.classList.remove("badge-info");
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    61
					} else {
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    62
						badge.classList.add("badge-secondary");
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    63
						badge.classList.remove("badge-info");
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    64
					}
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    65
				}
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    66
			}
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    67
			const show_all_clients_button_container = document.getElementById('show-all-clients-button-container');
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    68
			show_all_clients_button_container.querySelector('.platform-name').innerHTML = platform_friendly;
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    69
			show_all_clients_button_container.classList.remove("d-none");
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    70
			document.getElementById('show-all-clients-button').addEventListener('click', function (e) {
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    71
				for (let card of client_cards)
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    72
					card.hidden = false;
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    73
				show_all_clients_button_container.hidden = true;
5725
40558231ab7d mod_invites_page: Typo in preventing the default event when clicking on show all
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 5723
diff changeset
    74
				e.preventDefault();
5723
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    75
			});
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    76
		}
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    77
	}
18bae78282a6 mod_invites_page: Move the JS script to its own file
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    78
})();