Jump to content
Toggle menu
  • 6 articles
  • 6 users
  • 196 edits
Adventure Builder 2 Wiki
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

MediaWiki:Common.js

MediaWiki interface page
Revision as of 21:15, 27 August 2026 by Maintenance script (talk | contribs) (Level infobox)

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
function abCompactCount(n) {
	var num = Number(n) || 0;
	if (num >= 1e9) {
		return (num / 1e9).toFixed(1).replace(/\.0$/, '') + 'B';
	}
	if (num >= 1e6) {
		return (num / 1e6).toFixed(1).replace(/\.0$/, '') + 'M';
	}
	if (num >= 1e3) {
		return (num / 1e3).toFixed(1).replace(/\.0$/, '') + 'K';
	}
	return String(Math.floor(num));
}

$(function () {
	var levelId = mw.config.get('abLevelId');
	var $box = $('.ab-level-infobox');
	if (!levelId || !$box.length) {
		return;
	}

	var defaultThumbs = ['82374078680299', '105249369413891', '104825146904235'];

	function thumbAssetId(level) {
		if (!level || level.locked) {
			return defaultThumbs[0];
		}
		var raw = String(level.thumbnail || '').replace(/^rbxassetid:\/\//i, '').replace(/[^0-9]/g, '');
		if (raw && raw !== '0') {
			return raw;
		}
		return defaultThumbs[Math.abs(Number(level.id) || Number(levelId) || 0) % defaultThumbs.length];
	}

	function setThumb(assetId) {
		var $thumb = $box.find('.ab-level-thumb');
		if (!$thumb.length || !assetId) {
			return;
		}
		fetch(
			'https://adventure-builder.net/api/roblox-proxy?service=thumbnails&assetIds=' +
				encodeURIComponent(assetId) +
				'&size=' +
				encodeURIComponent('420x420')
		)
			.then(function (res) {
				return res.ok ? res.json() : null;
			})
			.then(function (data) {
				var item = data && data.data && data.data[0];
				if (!item || item.state !== 'Completed' || !item.imageUrl) {
					return;
				}
				$thumb.attr('src', item.imageUrl).removeClass('ab-level-thumb--placeholder');
			})
			.catch(function () {});
	}

	fetch('https://adventure-builder.net/api/v1/levels/' + encodeURIComponent(levelId))
		.then(function (res) {
			return res.ok ? res.json() : null;
		})
		.then(function (data) {
			var level = data && (data.level || data);
			if (!level || level.locked || !level.id) {
				setThumb(defaultThumbs[0]);
				return;
			}
			if (level.title) {
				$box.find('.pi-title').text(level.title);
			}
			[
				['plays', level.plays],
				['clears', level.clears],
				['favorites', level.favorites]
			].forEach(function (pair) {
				$box.find('.ab-level-stat[data-stat="' + pair[0] + '"]').text(
					abCompactCount(pair[1])
				);
			});
			setThumb(thumbAssetId(level));
		})
		.catch(function () {
			if ($box.find('.ab-level-thumb--placeholder').length) {
				setThumb(defaultThumbs[Math.abs(Number(levelId) || 0) % defaultThumbs.length]);
			}
		});
});

$(function () {
	var userId = mw.config.get('abRobloxUserId');
	if (!userId) {
		return;
	}

	var $img = $('.profile-avatar-image');
	if ($img.length) {
		var fallback = $img.attr('src');
		$img.on('error', function () {
			$img.attr('src', fallback);
		});
		$img.attr(
			'src',
			'https://adventure-builder.net/api/roblox-proxy?service=profile-picture&userId=' +
				encodeURIComponent(userId)
		);
	}

	var $stats = $('.profile-header-statistics');
	if (!$stats.length) {
		return;
	}

	fetch(
		'https://adventure-builder.net/api/v1/profiles/' + encodeURIComponent(userId)
	)
		.then(function (res) {
			return res.ok ? res.json() : null;
		})
		.then(function (profile) {
			if (!profile) {
				return;
			}
			[
				[profile.levels_count, 'Levels'],
				[profile.clears, 'Clears'],
				[profile.followers, 'Followers']
			].forEach(function (pair) {
				$('<li>')
					.addClass('ab-central-stat')
					.text(abCompactCount(pair[0]) + ' ' + pair[1])
					.appendTo($stats);
			});
		})
		.catch(function () {});
});