Extension:GuidedTour/API brainstorming

From mediawiki.org

Feel free to brainstorm ideas for improving the API. See bugzilla:43530.

Current[edit]

( function ( window, document, $, mw, guiders ) {

gt.defineTour( {
	name: 'test',
        steps: [ {
		titlemsg: 'guidedtour-tour-test-testing',
		descriptionmsg: 'guidedtour-tour-test-test-description',
		overlay: true,
		buttons: [ {
			action: 'next'
		} ]

	}, {
		titlemsg: 'guidedtour-tour-test-callouts',
		descriptionmsg: 'guidedtour-tour-test-portal-description',
		attachTo: '#n-portal a',
		position: '3',
		buttons: [ {
			action: 'next'
		} ]
	}, {
		titlemsg: 'guidedtour-tour-test-mediawiki-parse',
		// XXX (mattflaschen, 2012-01-02): See GuidedTourHooks.php
		description: mw.config.get('wgGuidedTourTestWikitextDescription'),

		// attachment
		attachTo: '#searchInput',
		position: 'bottomRight', //try descriptive position (5'oclock)

		buttons: [ {
			action: 'next'
		} ],
	}, {
	/*
	 * Test out mediawiki description pages
	 */
		titlemsg: 'guidedtour-tour-test-description-page',
		description: pageName,
		overlay: true,
		onShow: gt.getPageAsDescription,
		buttons: [ {
			namemsg: 'guidedtour-tour-test-go-description-page',
			onclick: function() {
				window.location = mw.util.wikiGetlink(pageName);
				return false;
			}
		}, {
			action: 'end'
		} ]
	},
	// ...
	]
} );

The supported actions (basically a higher-level way of specifying the behavior of the Okay button) are:

  • next - Go to next step
  • end - End tour

Other properties, such as isTooltipOnly, could be added to the main object passed in in the future.

Yes, JSON object[edit]

The code in the above design is just a JSON structure, which is good as it eliminates the risk of executing arbitrary script

It can't be shoe-horned into the Schema namespace on meta-wiki, but a general JSON namespace is possible.

It's not currently JSON. Besides the wrapper call and no double-quoted keys, it is intended to keep allowing inline functions. This doesn't open any new vectors, since anyone who can currently create a tour can inject arbitrary code through Common.js or an extension. I'm not ruling out a JSON version in the future, though. Superm401 - Talk 04:01, 5 February 2013 (UTC)

Previous[edit]

The current version looks like:

( function ( window, document, $, mw, guiders ) {

var gt = mw.guidedTour = mw.guidedTour || {};
gt.currentTour = 'test';

// For each step, the ones ending with msg are message keys
gt.initGuider({
	id: "gt-test-1",
	titlemsg: 'guidedtour-tour-test-testing',
	descriptionmsg: 'guidedtour-tour-test-test-description',

	// attachment
	overlay: true,

	next: "gt-test-2",
	buttons: [ {
		action: 'next'
	} ]
});

// ...
} (window, document, jQuery, mediaWiki, mediaWiki.libs.guiders) );