Jump to content

OOjs

From mediawiki.org
This page is a translated version of the page OOjs and the translation is 78% complete.

OOjs (abréviation de "Object-oriented JavaScript" pour "JavaScript Orienté Objet") est une librairie JavaScript destinée à manipuler des objets. Les fonctionnalités comprennent l'héritage , les mixins , l'héritage statique , et d'autres utilités pour travailler sur les objets et les tableaux. Elle fournit aussi un mixin EventEmitteur pour la programmation orientée événement, et un pattern d'usine pour découpler les consommateurs de fonctionnalités de l'implémentation d'une classe spécifique.

Fonctionnalités

OO.inheritClass( childClass, parentClass )

Etend le prototype et les méthodes statiques ainsi que les propriétés du constructeur fils à partir d'un constructeur parent.

OO.mixinClass( childClass, parentClass )

Copie dans un constructeur fils, le prototype et les méthodes statiques avec les propriétés, à partir d'un constructeur parent.

OO.initClass( baseClass )

Initialise une classe de base par laquelle se fait l'héritage, ou qui sera mixée dans une classe fils. N'est nécessaire que pour les classes qui n'héritent pas ou qui ne sont pas mixées à d'autres classes.

OO.EventEmitter

Permet d'attacher les gestionnaires d'événements, de les appeler quand les événements se produisent et de les détacher.

OO.Registry

Fournit une interface simple de correspondance permettant d'associer des données arbitraires à un nom symbolique.

OO.Factory

Enregistrement des classes avec abstraction de l'instanciation.

Outils

Voir la documentation de l'API pour une référence complète sur les utilitaires disponibles.

Compatibilité

OOjs est optimisé pour les environnements modernes ECMAScript 5. Le code source est compatible avec l'ancien moteur ECMAScript 3 (comme dans les anciennes versions de Internet Explorer, d'une manière générale l'IE8 et les précédents), mais les utilisateurs ont besoin d'un polyfill afin de disposer des méthodes ECMAScript 5 nécessaires.

Il est livré pour être exécuté soit dans les navigateurs web ou dans Node.js.

Extending OOjs classes in newer versions of ECMAScript

MediaWiki's ResourceLoader treats JavaScript code as ES6 by default since MediaWiki 1.41. ES6 supports the class syntax, so you may declare your extensions of OOjs (and OOUI ) classes using the new syntax. For example:

class MyDialog extends OO.ui.MessageDialog {
	static get name() {
		return 'myDialog';
	}

	constructor(config) {
		super(config);
		// ...
	}

	initialize() {
		super.initialize();
		// ...
	}
}

However, you will then need to pass such a class through a helper function like this:

function es6ClassToOoJsClass(targetClass) {
	const originClass = Object.getPrototypeOf(targetClass);
	OO.initClass(originClass);
	targetClass.static = Object.create(originClass.static);
	Object.getOwnPropertyNames(targetClass)
		.filter((key) => key !== 'static')
		.forEach((key) => {
			const descriptor = Object.getOwnPropertyDescriptor(targetClass, key);
			if (descriptor.enumerable || descriptor.get) {
				targetClass.static[key] = targetClass[key];
			}
		});
	targetClass.parent = targetClass.super = originClass;
	return targetClass;
}

It assumes that the class has no static properties with a getter whose output is not fixed (which is unlikely).

If you're building your JavaScript project with a transpiler like Babel, you can also use the most modern syntax, with static properties declared as such:

	static name = 'myDialog';

Espace de noms

En présence d'un système de modules tel que dans Node.js, OOjs exporte toutes ses classes et ses méthodes. Dans les autres environnements, tels que les navigateurs web, la variable globale OO est créée. Vous pouvez accéder à OO de la même manière que vous accédez à jQuery ou mediaWiki.

Si vous utilisez eslint, vous devez ajouter ceci dans votre fichier .eslintrc.json :

"globals": {
    "OO": "readonly"
}

Voir aussi

Liens externes