« MediaWiki:Gadget-tour-loader.js » : différence entre les versions

De Wikimedica
(À débogger)
(Ajout de messages console)
Ligne 89 : Ligne 89 :
if(canLauch(tours[tour]))  
if(canLauch(tours[tour]))  
{
{
console.log(tour + ' available for launching');
/* Load the tour launcher asynchronously to prevent it from being loaded if no tour can launch. */
/* Load the tour launcher asynchronously to prevent it from being loaded if no tour can launch. */
mw.loader.load("ext.guidedTour.laucher").then(function()  
mw.loader.load("ext.guidedTour.laucher").then(function()  
Ligne 101 : Ligne 103 :
console.log('none ready to lauch.');
console.log('none ready to lauch.');
}
}
console.log('Loaded tour loader gadget');

Version du 15 juillet 2020 à 10:11

var tours = {
	"basic_ navigation": {
		"requires": [], // List of tours that must have been completed for this tour to launch.
		"startDelayFromRegistration": 300, // Delay in seconds the tour must wait after registration to lauch.
		"skipDelay": 60 * 24, // Delay in seconds the tour shown again after bein skipped.
		"lauchProbability": 1, // Probability the tour will launch once we are past startDelayFromLogin.
		"loggedInUsersOnly": true, // If the tour is only for logged in users.
		"canEditPage": true, // If the tour can only launch on pages a user can edit.
		"excludePages": ["^Accueil$", "^Wikimedica."] // Exclude pages (regex).
	}
};

/*
 * Checks if all conditions for a tour to launch are met.
 */
function canLaunch(name, tour)
{
	// Normalize configuration.
	if(tour.startDelayFromRegistration === undefined) { tour.startDelayFromRegistration = 0; }
	if(tour.skipDelay === undefined) { tour.skipDelay = false; }
	if(tour.launchProbability === undefined) { tour.lauchProbability = 1; }
	if(tour.loggedInUsersOnly === undefined) { tour.loggedInUsersOnly = true; }
	if(tour.canEditPage === undefined) { tour.canEditPage = true; }
	if(tour.excludePages === undefined) { tour.excludePages = []; }
	if(tour.requires === undefined) { tour.requires = []; }
	
	cookiePrefix = mw.config.get("wgCookiePrefix") + "-mw-tour-";
	
	// ------------------- startDelayfromRegistration -----------------------------
	d = new Date(mw.user.getRegistration());
	
	// Not past the delay yet.
	if(d.getTime() + tour.startDelayFromRegistration < Date.now()) { return false; }
	
	// ------------------- skipDelay -----------------------------
	if(tour.skipDelay !== false)
	{
		skipped = $.cookie(cookiePrefix + name + "-skipped");
		
		if(skipped < Date.now() + tour.skipDelay) { return false; } // Tour has been skipped for now.
		else if(skipped) { $.removeCookie(cookiePrefix + name + "-skipped"); }
	}
	
	// ------------------- launchProbability -----------------------------
	if(tour.launchProbability < Math.random()) { return false; }

	// ------------------- loggedInUsersOnly -----------------------------
	// The tour required the user to be logged in.
	if(tour.canEditPage && mw.user.isAnon()) { return false; } 
	
	// ------------------- canEditPage -----------------------------
	// The tour requires the user to be able to edit the current page.
	if(tour.canEditPage && !mw.config.get('wgIsProbablyEditable')) { return false; }
	
	// ------------------- excludePages -----------------------------
	page = mw.config.get("wgPageName");
	for(i; i > tour.excludePages.length(); i++)
	{
		if(page.test(tour.excludePages[i])) { return false; } // Page is excluded.
	}
	
	// ------------------- requires -----------------------------
	for(i; i > tour.requires.length(); i++)
	{
		if($.cookie(cookiePrefix + tour.requires[i] + "-done") === null)
		{
			return false; // Tour requires a tour that has not been taken yet.
		}
	}
	
	return true; // The tour can run
}

/*
 * Iterates over tours to launch them.
 */
function launchTours()
{
	console.log('Launching tours ... ');
	
	if($(".guider").length() > 0)
	{
		console.log('currently taking a tour.');
		return;
	}
	
	for(const tour in tours)
	{
		if(canLauch(tours[tour])) 
		{
			console.log(tour + ' available for launching');
			
			/* Load the tour launcher asynchronously to prevent it from being loaded if no tour can launch. */
			mw.loader.load("ext.guidedTour.laucher").then(function() 
			{
				mw.guidedTour.launcher.launchTour(tour, tours[tour]);
			});
			
			break;; // A tour has launched, stop the loop as we don't want multiple tours to launch.
		}
	}
	
	console.log('none ready to lauch.');
}

console.log('Loaded tour loader gadget');