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

De Wikimedica
(Erreur dans le nom du tour)
(Conversion en objet)
Ligne 1 : Ligne 1 :
var tours = {
mw.tours = {
"basic_navigation": {
tours: {
"requires": [], // List of tours that must have been completed for this tour to launch.
basic_navigation: {
"startDelayFromRegistration": 300, // Delay in seconds the tour must wait after registration to lauch.
requires: [], // List of tours that must have been completed for this tour to launch.
"skipDelay": 60 * 24, // Delay in seconds the tour shown again after bein skipped.
startDelayFromRegistration: 300, // Delay in seconds the tour must wait after registration to lauch.
"lauchProbability": 1, // Probability the tour will launch once we are past startDelayFromLogin.
skipDelay: 60 * 24, // Delay in seconds the tour shown again after bein skipped.
"loggedInUsersOnly": true, // If the tour is only for logged in users.
lauchProbability: 1, // Probability the tour will launch once we are past startDelayFromLogin.
"canEditPage": true, // If the tour can only launch on pages a user can edit.
loggedInUsersOnly: true, // If the tour is only for logged in users.
"excludePages": ["^Accueil$", "^Wikimedica."] // Exclude pages (regex).
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-";
/*
* Checks if all conditions for a tour to launch are met.
// ------------------- startDelayfromRegistration -----------------------------
*/
d = new Date(mw.user.getRegistration());
canLaunch: function(name, tour)
// Not past the delay yet.
if(d.getTime() + tour.startDelayFromRegistration < Date.now()) { return false; }
// ------------------- skipDelay -----------------------------
if(tour.skipDelay !== false)
{
{
skipped = $.cookie(cookiePrefix + name + "-skipped");
// 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"); }
}
if(skipped < Date.now() + tour.skipDelay) { return false; } // Tour has been skipped for now.
// ------------------- launchProbability -----------------------------
else if(skipped) { $.removeCookie(cookiePrefix + name + "-skipped"); }
if(tour.launchProbability < Math.random()) { return false; }
}
// ------------------- launchProbability -----------------------------
// ------------------- loggedInUsersOnly -----------------------------
if(tour.launchProbability < Math.random()) { return false; }
// 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
},


// ------------------- loggedInUsersOnly -----------------------------
/*
// The tour required the user to be logged in.
* Iterates over tours to launch them.
if(tour.canEditPage && mw.user.isAnon()) { return false; }
*/
lauchTours: function()
// ------------------- 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.
console.log('Launching tours ... ');
}
if($(".guider").length() > 0)
// ------------------- 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.
console.log('currently taking a tour.');
return;
}
}
}
for(const tour in this.tours)
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');
if(canLauch(this.tours[tour]))  
/* 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]);
console.log(tour + ' available for launching');
});
/* Load the tour launcher asynchronously to prevent it from being loaded if no tour can launch. */
break;; // A tour has launched, stop the loop as we don't want multiple tours to launch.
mw.loader.load("ext.guidedTour.laucher").then(function()
{
mw.guidedTour.launcher.launchTour(tour, this.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('none ready to lauch.');
}


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

Version du 15 juillet 2020 à 10:37

mw.tours = {
	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.
	 */
	canLaunch: function(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.
	 */
	lauchTours: function()
	{
		console.log('Launching tours ... ');
		
		if($(".guider").length() > 0)
		{
			console.log('currently taking a tour.');
			return;
		}
		
		for(const tour in this.tours)
		{
			if(canLauch(this.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, this.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');