CINXE.COM
OOjs - MediaWiki
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-disabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-sticky-header-enabled vector-toc-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>OOjs - MediaWiki</title> <script>(function(){var className="client-js vector-feature-language-in-header-disabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-sticky-header-enabled vector-toc-available";var cookie=document.cookie.match(/(?:^|; )mediawikiwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"e9ac573c-d4bd-44ea-b282-5a3105fc2632","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"OOjs","wgTitle":"OOjs","wgCurRevisionId":6947125,"wgRevisionId":6947125,"wgArticleId":163662,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["WMF Projects 2013q4","WMF Projects 2014q1","WMF Projects 2014q2","WMF Projects 2014q3","WMF Projects 2014q4","WMF Projects 2015q1","WMF Projects 2015q2","WMF Projects 2015q3","WMF Projects 2015q4","WMF Projects 2016q1","WMF Projects 2016q2","WMF Projects 2016q3","WMF Projects 2016q4","WMF Projects 2017q1","WMF Projects 2017q2","WMF Projects 2017q3","WMF Projects 2017q4","WMF Projects 2018q1","WMF Projects 2018q2","WMF Projects 2018q3","WMF Projects 2018q4","WMF Projects 2019q1","WMF Projects 2019q2","WMF Projects 2019q3","WMF Projects 2019q4","WMF Projects 2020q1","WMF Projects 2020q2","WMF Projects 2020q3","WMF Projects 2020q4","WMF Projects 2021q1","WMF Projects 2021q2","WMF Projects 2021q3","WMF Projects 2021q4","WMF Projects 2022q1","WMF Projects 2022q2","WMF Projects 2022q3","WMF Projects 2022q4","WMF Projects 2023q1","WMF Projects 2023q2","WMF Projects 2023q3","WMF Projects 2023q4","WMF Projects 2024q1","WMF Projects 2024q2","WMF Projects 2024q3","WMF Projects 2024q4","WMF Projects 2025q1","OOjs","WMF Projects","Libraries","JavaScript"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"OOjs","wgRelevantArticleId":163662,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"mediawiki","wgCiteReferencePreviewsActive":true,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":7000,"wgTranslatePageTranslation":"source","wgEditSubmitButtonLabelPublish":true,"wgDiscussionToolsFeaturesEnabled":{"replytool":true,"newtopictool":true,"sourcemodetoolbar":true,"topicsubscription":false,"autotopicsub":false,"visualenhancements":false,"visualenhancements_reply":false,"visualenhancements_pageframe":false},"wgDiscussionToolsFallbackEditMode":"visual","wgULSPosition":"personal","wgULSisCompactLinksEnabled":true,"wgVector2022LanguageInHeader":false,"wgULSisLanguageSelectorEmpty":false,"wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"wgSiteNoticeId":"2.8"}; RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.translate.tag.languages":"ready","ext.pygments":"ready","ext.discussionTools.init.styles":"ready","oojs-ui-core.styles":"ready","oojs-ui.styles.indicators":"ready","mediawiki.widgets.styles":"ready","oojs-ui-core.icons":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","ext.translate.edit.documentation.styles":"ready","ext.translate":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.pt":"ready","wikibase.client.init":"ready","ext.dismissableSiteNotice.styles":"ready"};RLPAGEMODULES=["ext.pygments.view","site","mediawiki.page.ready","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.translate.pagetranslation.uls","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.discussionTools.init","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.compactlinks","ext.uls.interface","ext.checkUser.clientHints","ext.dismissableSiteNotice"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=en&modules=ext.discussionTools.init.styles%7Cext.dismissableSiteNotice.styles%7Cext.pygments%2Ctranslate%7Cext.translate.edit.documentation.styles%7Cext.translate.tag.languages%7Cext.uls.pt%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.23"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:site_name" content="MediaWiki"> <meta property="og:title" content="OOjs - MediaWiki"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//m.mediawiki.org/wiki/OOjs"> <link rel="alternate" type="application/x-wiki" title="Edit" href="/w/index.php?title=OOjs&action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/mediawiki.png"> <link rel="icon" href="/static/favicon/mediawiki.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="MediaWiki (en)"> <link rel="EditURI" type="application/rsd+xml" href="//www.mediawiki.org/w/api.php?action=rsd"> <link rel="canonical" href="https://www.mediawiki.org/wiki/OOjs"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/"> <link rel="alternate" type="application/atom+xml" title="MediaWiki Atom feed" href="/w/index.php?title=Special:RecentChanges&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="auth.wikimedia.org"> </head> <body class="ext-discussiontools-replytool-enabled ext-discussiontools-newtopictool-enabled ext-discussiontools-sourcemodetoolbar-enabled skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-OOjs rootpage-OOjs skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" title="Main menu" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/MediaWiki" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-mw-download" class="mw-list-item"><a href="/wiki/Download"><span>Get MediaWiki</span></a></li><li id="n-mw-extensions" class="mw-list-item"><a href="/wiki/Special:MyLanguage/Category:Extensions"><span>Get extensions</span></a></li><li id="n-blog-text" class="mw-list-item"><a href="https://techblog.wikimedia.org/"><span>Tech blog</span></a></li><li id="n-mw-contribute" class="mw-list-item"><a href="/wiki/Special:MyLanguage/How_to_contribute"><span>Contribute</span></a></li> </ul> </div> </div> <div id="p-support" class="vector-menu mw-portlet mw-portlet-support" > <div class="vector-menu-heading"> Support </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Special:MyLanguage/Help:Contents" title="The place to find out"><span>User help</span></a></li><li id="n-mw-faq" class="mw-list-item"><a href="/wiki/Special:MyLanguage/Manual:FAQ"><span>FAQ</span></a></li><li id="n-mw-manual" class="mw-list-item"><a href="/wiki/Special:MyLanguage/Manual:Contents"><span>Technical manual</span></a></li><li id="n-mw-supportdesk" class="mw-list-item"><a href="/wiki/Project:Support_desk"><span>Support desk</span></a></li><li id="n-mw-communication" class="mw-list-item"><a href="/wiki/Special:MyLanguage/Communication"><span>Communication</span></a></li> </ul> </div> </div> <div id="p-development" class="vector-menu mw-portlet mw-portlet-development" > <div class="vector-menu-heading"> Development </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mw-developerportal" class="mw-list-item"><a href="https://developer.wikimedia.org/"><span>Developer portal</span></a></li><li id="n-svn_statistics" class="mw-list-item"><a href="/wiki/Development_statistics"><span>Code statistics</span></a></li> </ul> </div> </div> <div id="p-mediawiki.org" class="vector-menu mw-portlet mw-portlet-mediawiki_org" > <div class="vector-menu-heading"> mediawiki.org </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-portal" class="mw-list-item"><a href="/wiki/Project:Help" title="About the project, what you can do, where to find things"><span>Community portal</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes in the wiki [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-mw-translate" class="mw-list-item"><a href="/wiki/Special:LanguageStats"><span>Translate content</span></a></li><li id="n-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages"><span>Special pages</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:Random" title="Load a random page [x]" accesskey="x"><span>Random page</span></a></li><li id="n-mw-discussion" class="mw-list-item"><a href="/wiki/Project:Village_Pump"><span>Village pump</span></a></li><li id="n-sandboxlink-portlet-label" class="mw-list-item"><a href="/wiki/Project:Sandbox"><span>Sandbox</span></a></li> </ul> </div> </div> <div id="p-lang" class="vector-menu mw-portlet mw-portlet-lang" > <div class="vector-menu-heading"> In other languages </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-add wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:NewItem?site=mediawikiwiki&page=OOjs" title="Add interlanguage links" class="wbc-editpage">Add links</a></span></div> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/MediaWiki" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/mediawikiwiki.svg" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="MediaWiki" src="/static/images/mobile/copyright/mediawikiwiki-wordmark.svg" style="width: 7.5em; height: 1.125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search MediaWiki [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search mediawiki.org" aria-label="Search mediawiki.org" autocapitalize="sentences" title="Search MediaWiki [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-uls" class="mw-list-item active user-links-collapsible-item"><a data-mw="interface" href="#" class="uls-trigger cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet"><span class="vector-icon mw-ui-icon-wikimedia-language mw-ui-icon-wikimedia-wikimedia-language"></span> <span>English</span></a> </li> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/?wmf_source=donate&wmf_medium=sidebar&wmf_campaign=www.mediawiki.org&uselang=en" class=""><span>Donate</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:CreateAccount&returnto=OOjs" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&returnto=OOjs" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o" class=""><span>Log in</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="More options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/?wmf_source=donate&wmf_medium=sidebar&wmf_campaign=www.mediawiki.org&uselang=en"><span>Donate</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&returnto=OOjs" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&returnto=OOjs" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pages for logged out editors <a href="/wiki/Help:Contents" aria-label="Learn more about editing"><span>learn more</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Talk</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><div id="mw-dismissablenotice-anonplace"></div><script>(function(){var node=document.getElementById("mw-dismissablenotice-anonplace");if(node){node.outerHTML="\u003Cdiv class=\"mw-dismissable-notice\"\u003E\u003Cdiv class=\"mw-dismissable-notice-close\"\u003E[\u003Ca tabindex=\"0\" role=\"button\"\u003Edismiss\u003C/a\u003E]\u003C/div\u003E\u003Cdiv class=\"mw-dismissable-notice-body\"\u003E\u003C!-- CentralNotice --\u003E\u003Cdiv id=\"localNotice\" data-nosnippet=\"\"\u003E\u003Cdiv class=\"sitenotice\" lang=\"en\" dir=\"ltr\"\u003E\u003Ccenter\u003E\n\u003Cdiv style=\"width:100%; padding:15px; border-style:solid; border-width:2px; border-color:var(--color-placeholder, black); font-size:14px; text-align:center;\" class=\"plainlinks\"\u003E\u003Cdiv style=\"vertical-align:middle;margin-top:0.5em\"\u003E\u003Cfigure class=\"mw-halign-left skin-invert\" typeof=\"mw:File\"\u003E\u003Ca href=\"/wiki/MediaWiki_Users_and_Developers_Conference\" title=\"MediaWiki Users and Developers Conference\"\u003E\u003Cimg src=\"//upload.wikimedia.org/wikipedia/commons/thumb/7/71/MediaWikiUsersDevelopersConferenceWordmark.png/120px-MediaWikiUsersDevelopersConferenceWordmark.png\" decoding=\"async\" width=\"100\" height=\"44\" class=\"mw-file-element\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/7/71/MediaWikiUsersDevelopersConferenceWordmark.png/250px-MediaWikiUsersDevelopersConferenceWordmark.png 1.5x\" data-file-width=\"1080\" data-file-height=\"480\" /\u003E\u003C/a\u003E\u003Cfigcaption\u003E\u003C/figcaption\u003E\u003C/figure\u003E\u003C/div\u003E\n\u003Cp\u003EEarly bird tickets for the \u003Ca href=\"/wiki/MediaWiki_Users_and_Developers_Workshop_Spring_2025\" title=\"MediaWiki Users and Developers Workshop Spring 2025\"\u003EMediaWiki Users and Developers Workshop Spring 2025\u003C/a\u003E in \u003Ca href=\"https://en.wikipedia.org/wiki/Sandusky,_Ohio\" class=\"extiw\" title=\"w:Sandusky, Ohio\"\u003ESandusky\u003C/a\u003E, Ohio, USA are now \u003Ca rel=\"nofollow\" class=\"external text\" href=\"https://www.eventbrite.com/e/mediawiki-users-and-developers-conference-spring-2025-tickets-1254864847539\"\u003E\u003Cb\u003Eon sale on Eventbrite\u003C/b\u003E\u003C/a\u003E until April 13! In addition, the \u003Ca href=\"/wiki/MediaWiki_Users_and_Developers_Conference/Scholarships\" title=\"MediaWiki Users and Developers Conference/Scholarships\"\u003Escholarship application\u003C/a\u003E is open now until April 15.\n\u003C/p\u003E\n\u003C/div\u003E\n\u003C/center\u003E\u003C/div\u003E\u003C/div\u003E\u003C/div\u003E\u003C/div\u003E";}}());</script></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contents</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">Beginning</div> </a> </li> <li id="toc-Features" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Features"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Features</span> </div> </a> <button aria-controls="toc-Features-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Features subsection</span> </button> <ul id="toc-Features-sublist" class="vector-toc-list"> <li id="toc-Inheritance" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Inheritance"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.1</span> <span>Inheritance<span> </span></span> </div> </a> <ul id="toc-Inheritance-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Events" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Events"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.2</span> <span>Events<span> </span></span> </div> </a> <ul id="toc-Events-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Registries_and_Factories" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Registries_and_Factories"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.3</span> <span>Registries and Factories<span> </span></span> </div> </a> <ul id="toc-Registries_and_Factories-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Utilities" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Utilities"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.4</span> <span>Utilities</span> </div> </a> <ul id="toc-Utilities-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Compatibility" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Compatibility"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Compatibility</span> </div> </a> <button aria-controls="toc-Compatibility-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Compatibility subsection</span> </button> <ul id="toc-Compatibility-sublist" class="vector-toc-list"> <li id="toc-Extending_OOjs_classes_in_newer_versions_of_ECMAScript" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Extending_OOjs_classes_in_newer_versions_of_ECMAScript"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.1</span> <span>Extending OOjs classes in newer versions of ECMAScript</span> </div> </a> <ul id="toc-Extending_OOjs_classes_in_newer_versions_of_ECMAScript-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Namespace" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Namespace"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Namespace</span> </div> </a> <ul id="toc-Namespace-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-See_also" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#See_also"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>See also</span> </div> </a> <ul id="toc-See_also-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-External_links" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#External_links"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>External links</span> </div> </a> <ul id="toc-External_links-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" title="Table of Contents" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">OOjs</span></h1> <div class="mw-indicators"> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespaces"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/OOjs" title="View the content page [c]" accesskey="c"><span>Page</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Talk:OOjs" rel="discussion" title="Discussion about the content page [t]" accesskey="t"><span>Discussion</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Change language variant" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Views"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/OOjs"><span>Read</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=OOjs&action=edit" title="Edit the source code of this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=OOjs&action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Tools</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/OOjs"><span>Read</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=OOjs&action=edit" title="Edit the source code of this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=OOjs&action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/OOjs" title="A list of all wiki pages that link here [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/OOjs" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-upload" class="mw-list-item"><a href="//commons.wikimedia.org/wiki/Special:UploadWizard" title="Upload files [u]" accesskey="u"><span>Upload file</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=OOjs&oldid=6947125" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=OOjs&action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Special:CiteThisPage&page=OOjs&id=6947125&wpFormIdentifier=titleform" title="Information on how to cite this page"><span>Cite this page</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&url=https%3A%2F%2Fwww.mediawiki.org%2Fwiki%2FOOjs"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&url=https%3A%2F%2Fwww.mediawiki.org%2Fwiki%2FOOjs"><span>Download QR code</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-create_a_book" class="mw-list-item"><a href="/w/index.php?title=Special:Book&bookcmd=book_creator&referer=OOjs"><span>Create a book</span></a></li><li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&page=OOjs&action=show-download-screen"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=OOjs&printable=yes" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects emptyPortlet" > <div class="vector-menu-heading"> In other projects </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div id="siteSub" class="noprint">From mediawiki.org</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-pt-translate-header noprint nomobile" dir="ltr" lang="en"><a href="/w/index.php?title=Special:Translate&group=page-OOjs&action=page&filter=&action_source=translate_page" title="Special:Translate">Translate this page</a></div><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><div class="mw-pt-languages noprint navigation-not-searchable" lang="en" dir="ltr"><div class="mw-pt-languages-label">Languages:</div><ul class="mw-pt-languages-list"><li><a href="/w/index.php?title=Special:Translate&group=page-OOjs&language=&task=view" class="new" title="Start translation for this language" lang="" dir="ltr"></a></li> <li><a href="/wiki/OOjs/de" class="mw-pt-progress mw-pt-progress--med" title="OOjs (19% translated)" lang="de" dir="ltr">Deutsch</a></li> <li><span class="mw-pt-languages-ui mw-pt-languages-selected mw-pt-progress mw-pt-progress--complete" lang="en" dir="ltr">English</span></li> <li><a href="/wiki/OOjs/dag" class="mw-pt-progress mw-pt-progress--low" title="OOjs/dag (3% translated)" lang="dag" dir="ltr">dagbanli</a></li> <li><a href="/wiki/OOjs/fr" class="mw-pt-progress mw-pt-progress--high" title="OOjs (78% translated)" lang="fr" dir="ltr">français</a></li> <li><a href="/wiki/OOjs/hu" class="mw-pt-progress mw-pt-progress--med" title="OOjs (33% translated)" lang="hu" dir="ltr">magyar</a></li> <li><a href="/wiki/OOjs/pl" class="mw-pt-progress mw-pt-progress--med" title="OOjs (17% translated)" lang="pl" dir="ltr">polski</a></li> <li><a href="/wiki/OOjs/ru" class="mw-pt-progress mw-pt-progress--low" title="OOjs (8% translated)" lang="ru" dir="ltr">русский</a></li> <li><a href="/wiki/OOjs/gu" class="mw-pt-progress mw-pt-progress--low" title="OOjs/gu (3% translated)" lang="gu" dir="ltr">ગુજરાતી</a></li> <li><a href="/wiki/OOjs/ja" class="mw-pt-progress mw-pt-progress--med" title="OOjs (31% translated)" lang="ja" dir="ltr">日本語</a></li> <li><a href="/wiki/OOjs/nan" class="mw-pt-progress mw-pt-progress--med" title="OOjs (28% translated)" lang="nan" dir="ltr">閩南語 / Bân-lâm-gú</a></li></ul></div> <style data-mw-deduplicate="TemplateStyles:r6605224">.mw-parser-output .tpl-sidebar{background-color:var(--background-color-interactive-subtle,#f8f9fa);border:1px solid var(--border-color-divider,#a2a9b1);color:var(--color-base,#202122);width:22em;padding:.2em;text-align:center;line-height:1.4em;font-size:88%}.mw-parser-output .tpl-sidebar-pagedir-ltr,.mw-parser-output .tpl-sidebar.tpl-sidebar-floatright{float:right;clear:right;margin:.5em 0 1em 1em}.mw-parser-output .tpl-sidebar-pagedir-rtl,.mw-parser-output .tpl-sidebar.tpl-sidebar-floatleft{float:left;clear:left;margin:.5em 1em 1em 0}.mw-parser-output .tpl-sidebar.tpl-sidebar-floatnone{float:none;clear:both;margin:.5em 0 1em 1em}.mw-parser-output .tpl-sidebar>caption{padding-bottom:.2em;font-size:125%;line-height:1.2em;font-weight:bold}.mw-parser-output .tpl-sidebar>tbody>tr>th,.mw-parser-output .tpl-sidebar>tbody>tr>td{padding:0}.mw-parser-output .tpl-sidebar .tpl-sidebar-topimage>td{padding:.4em 0}.mw-parser-output .tpl-sidebar-imagecaption{padding-top:.2em;line-height:1.2em}.mw-parser-output .tpl-sidebar .tpl-sidebar-pretitle>td{padding-top:.4em;line-height:1.2em}.mw-parser-output .tpl-sidebar .tpl-sidebar-topimage+.tpl-sidebar-pretitle>td{padding-top:.2em}.mw-parser-output .tpl-sidebar .tpl-sidebar-title>th{padding:.2em .4em .2em;font-size:145%;line-height:1.2em}.mw-parser-output .tpl-sidebar .tpl-sidebar-pretitle+.tpl-sidebar-title>th{padding-top:0}.mw-parser-output .tpl-sidebar .tpl-sidebar-image>td{padding:.2em 0 .4em}.mw-parser-output .tpl-sidebar .tpl-sidebar-abovebelow>td{padding:.3em .4em;font-weight:bold}.mw-parser-output .tpl-sidebar .tpl-sidebar-heading>th{padding-top:.2em}.mw-parser-output .tpl-sidebar .tpl-sidebar-image~.tpl-sidebar-heading-first>th{padding-top:.4em}.mw-parser-output .tpl-sidebar .tpl-sidebar-content>td{padding-bottom:.2em}.mw-parser-output .tpl-sidebar :not(.tpl-sidebar-heading)+.tpl-sidebar-content-first>td{padding-top:.2em}.mw-parser-output .tpl-sidebar-navbar>td{font-size:115%}.mw-parser-output .tpl-sidebar-pagedir-ltr .tpl-sidebar-navbar>td{text-align:right}.mw-parser-output .tpl-sidebar-pagedir-rtl .tpl-sidebar-navbar>td{text-align:left}</style><table class="vertical-navbox tpl-sidebar tpl-sidebar-pagedir-ltr nowraplinks" role="navigation" style="width:22em; border-spacing: 0.4em 0;"><tbody><tr class="tpl-sidebar-title"> <th class="" style=""><b><a href="/wiki/Special:MyLanguage/OOjs" title="Special:MyLanguage/OOjs">OOjs</a></b><span style="display:none"><a class="mw-selflink selflink"> </a></span></th> </tr><tr class="tpl-sidebar-heading tpl-sidebar-heading-first"> <th class="" style="font-size:130%;">Features</th> </tr><tr class="tpl-sidebar-content tpl-sidebar-content-first"> <td class="" style="text-align:left;"> <ul><li><a href="/wiki/Special:MyLanguage/OOjs/Inheritance" title="Special:MyLanguage/OOjs/Inheritance">Inheritance</a><span style="display:none"><a href="/wiki/OOjs/Inheritance" title="OOjs/Inheritance"> </a></span></li> <li><a href="/wiki/Special:MyLanguage/OOjs/Events" title="Special:MyLanguage/OOjs/Events">Events</a><span style="display:none"><a href="/wiki/OOjs/Events" title="OOjs/Events"> </a></span></li> <li><a href="/wiki/Special:MyLanguage/OOjs/Registries_and_factories" title="Special:MyLanguage/OOjs/Registries and factories">Registries and factories</a><span style="display:none"><a href="/wiki/OOjs/Registries_and_factories" title="OOjs/Registries and factories"> </a></span></li></ul></td> </tr><tr class="tpl-sidebar-heading"> <th class="" style="font-size:130%;">See also</th> </tr><tr class="tpl-sidebar-content"> <td class="" style="text-align:left;"> <ul><li><a href="/wiki/Special:MyLanguage/OOUI" title="Special:MyLanguage/OOUI">OOUI</a><span style="display:none"><a href="/wiki/OOUI" title="OOUI"> </a></span></li></ul></td> </tr><tr class="tpl-sidebar-navbar"> <td style=""><style data-mw-deduplicate="TemplateStyles:r4692751">.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar ul{display:inline;white-space:nowrap}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em;width:6em}</style><span class="noprint plainlinks navbar" style=""><small><span style="white-space:nowrap;word-spacing:-.12em;"><a href="/wiki/Template:OOjs_sidebar" title="Template:OOjs sidebar"><span style="" title="View this template">v</span></a><span style=""> <b>·</b> </span><a class="external text" href="https://www.mediawiki.org/wiki/Template_talk:OOjs_sidebar"><span style="" title="Discuss this template">d</span></a><span style=""> <b>·</b> </span><a class="external text" href="https://www.mediawiki.org/w/index.php?title=Template:OOjs_sidebar&action=edit"><span style="" title="Edit this template">e</span></a></span></small></span></td> </tr> </tbody></table> <p><b>OOjs</b> (short for "Object-oriented JavaScript") is a JavaScript library for working with objects. Features include <a href="/wiki/Special:MyLanguage/OOjs/Inheritance#Classes" title="Special:MyLanguage/OOjs/Inheritance">inheritance</a><span style="display:none"><a href="/wiki/OOjs/Inheritance#Classes" title="OOjs/Inheritance"> </a></span>, <a href="/wiki/Special:MyLanguage/OOjs/Inheritance#Mixins" title="Special:MyLanguage/OOjs/Inheritance">mixins</a><span style="display:none"><a href="/wiki/OOjs/Inheritance#Mixins" title="OOjs/Inheritance"> </a></span>, <a href="/wiki/Special:MyLanguage/OOjs/Inheritance#Static_methods_and_properties" title="Special:MyLanguage/OOjs/Inheritance">static inheritance</a><span style="display:none"><a href="/wiki/OOjs/Inheritance#Static_methods_and_properties" title="OOjs/Inheritance"> </a></span> and additional utilities for working with objects and arrays. It also provides an <a href="/wiki/Special:MyLanguage/OOjs/Events" title="Special:MyLanguage/OOjs/Events">EventEmitter</a> mixin for event-driven programming, and a <a href="/wiki/Special:MyLanguage/OOjs/Registries_and_factories" title="Special:MyLanguage/OOjs/Registries and factories">factory</a> pattern for decoupling consumers of functionality from any particular class's implementation. </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2 ext-discussiontools-init-section"><h2 id="Features" data-mw-thread-id="h-Features"><span data-mw-comment-start="" id="h-Features"></span>Features<span data-mw-comment-end="h-Features"></span></h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OOjs&action=edit&section=1" title="Edit section: Features"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span><!--__DTELLIPSISBUTTON__{"threadItem":{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Features","replies":["h-Inheritance-Features","h-Events-Features","h-Registries_and_Factories-Features","h-Utilities-Features"]}}--></div> <div class="mw-heading mw-heading3"><h3 id="Inheritance" data-mw-thread-id="h-Inheritance-Features"><span data-mw-comment-start="" id="h-Inheritance-Features"></span><a href="/wiki/Special:MyLanguage/OOjs/Inheritance" title="Special:MyLanguage/OOjs/Inheritance">Inheritance</a><span style="display:none"><a href="/wiki/OOjs/Inheritance" title="OOjs/Inheritance"> </a></span><span data-mw-comment-end="h-Inheritance-Features"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OOjs&action=edit&section=2" title="Edit section: Inheritance"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><code><a href="https://doc.wikimedia.org/oojs/master/OO.html#.inheritClass" class="extiw" title="wmdoc:oojs/master/OO.html">OO.inheritClass( childClass, parentClass )</a></code> </p><p>Extend prototype and static methods and properties of child constructor from a parent constructor. </p><p><code><a href="https://doc.wikimedia.org/oojs/master/OO.html#.mixinClass" class="extiw" title="wmdoc:oojs/master/OO.html">OO.mixinClass( childClass, parentClass )</a></code> </p><p>Copy prototype and static methods and properties to a child constructor from a parent constructor. </p><p><code><a href="https://doc.wikimedia.org/oojs/master/OO.html#.initClass" class="extiw" title="wmdoc:oojs/master/OO.html">OO.initClass( baseClass )</a></code> </p><p>Initialise a base class to be inherited by, or mixed into, a child class. Only required for classes that do not inherit or mixin other classes. </p> <div class="mw-heading mw-heading3"><h3 id="Events" data-mw-thread-id="h-Events-Features"><span data-mw-comment-start="" id="h-Events-Features"></span><a href="/wiki/Special:MyLanguage/OOjs/Events" title="Special:MyLanguage/OOjs/Events">Events</a><span style="display:none"><a href="/wiki/OOjs/Events" title="OOjs/Events"> </a></span><span data-mw-comment-end="h-Events-Features"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OOjs&action=edit&section=3" title="Edit section: Events"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><code><a href="https://doc.wikimedia.org/oojs/master/#!/api/OO.EventEmitter" class="extiw" title="wmdoc:oojs/master/">OO.EventEmitter</a></code> </p><p>Allow event handlers to be attached, called when events occur, and detached. </p> <div class="mw-heading mw-heading3"><h3 id="Registries_and_Factories" data-mw-thread-id="h-Registries_and_Factories-Features"><span data-mw-comment-start="" id="h-Registries_and_Factories-Features"></span><a href="/wiki/Special:MyLanguage/OOjs/Registries_and_factories" title="Special:MyLanguage/OOjs/Registries and factories">Registries and Factories</a><span style="display:none"><a href="/wiki/OOjs/Registries_and_factories" title="OOjs/Registries and factories"> </a></span><span data-mw-comment-end="h-Registries_and_Factories-Features"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OOjs&action=edit&section=4" title="Edit section: Registries and Factories"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><code><a href="https://doc.wikimedia.org/oojs/master/#!/api/OO.Registry" class="extiw" title="wmdoc:oojs/master/">OO.Registry</a></code> </p><p>Provide a simple map interface for associating arbitrary data with a symbolic name. </p><p><code><a href="https://doc.wikimedia.org/oojs/master/#!/api/OO.Factory" class="extiw" title="wmdoc:oojs/master/">OO.Factory</a></code> </p><p>Registry of classes with instantiation abstraction. </p> <div class="mw-heading mw-heading3"><h3 id="Utilities" data-mw-thread-id="h-Utilities-Features"><span data-mw-comment-start="" id="h-Utilities-Features"></span>Utilities<span data-mw-comment-end="h-Utilities-Features"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OOjs&action=edit&section=5" title="Edit section: Utilities"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>See the <a href="https://doc.wikimedia.org/oojs/master/#!/api/OO" class="extiw" title="wmdoc:oojs/master/">API documentation</a> for a complete reference of available utilities. </p> <div class="mw-heading mw-heading2 ext-discussiontools-init-section"><h2 id="Compatibility" data-mw-thread-id="h-Compatibility"><span data-mw-comment-start="" id="h-Compatibility"></span>Compatibility<span data-mw-comment-end="h-Compatibility"></span></h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OOjs&action=edit&section=6" title="Edit section: Compatibility"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span><!--__DTELLIPSISBUTTON__{"threadItem":{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Compatibility","replies":["h-Extending_OOjs_classes_in_newer_versions_of_ECMAScript-Compatibility"]}}--></div> <p>OOjs is optimised for modern <b>ECMAScript 5</b> environments. The source code is compatible with the older ECMAScript 3 engine (such as in older versions of Internet Explorer, broadly speaking IE8 and before), but users need a polyfill to provide required ECMAScript 5 methods. </p><p>It is packaged to be run in either Web browsers or Node.js. </p> <div class="mw-heading mw-heading3"><h3 id="Extending_OOjs_classes_in_newer_versions_of_ECMAScript" data-mw-thread-id="h-Extending_OOjs_classes_in_newer_versions_of_ECMAScript-Compatibility"><span data-mw-comment-start="" id="h-Extending_OOjs_classes_in_newer_versions_of_ECMAScript-Compatibility"></span>Extending OOjs classes in newer versions of ECMAScript<span data-mw-comment-end="h-Extending_OOjs_classes_in_newer_versions_of_ECMAScript-Compatibility"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OOjs&action=edit&section=7" title="Edit section: Extending OOjs classes in newer versions of ECMAScript"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>MediaWiki's ResourceLoader <a href="/wiki/Special:MyLanguage/ResourceLoader/ES6" title="Special:MyLanguage/ResourceLoader/ES6">treats</a><span style="display:none"><a href="/wiki/ResourceLoader/ES6" title="ResourceLoader/ES6"> </a></span> JavaScript code as ES6 by default since MediaWiki 1.41. ES6 supports the <a rel="nofollow" class="external text" href="https://developer.mozilla.org/docs/Web/JavaScript/Reference/Classes"><code>class</code> syntax</a>, so you may declare your extensions of OOjs (and <a href="/wiki/Special:MyLanguage/OOUI" title="Special:MyLanguage/OOUI">OOUI</a><span style="display:none"><a href="/wiki/OOUI" title="OOUI"> </a></span>) classes using the new syntax. For example: </p> <div class="mw-highlight mw-highlight-lang-js mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">class</span><span class="w"> </span><span class="nx">MyDialog</span><span class="w"> </span><span class="k">extends</span><span class="w"> </span><span class="nx">OO</span><span class="p">.</span><span class="nx">ui</span><span class="p">.</span><span class="nx">MessageDialog</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="nx">get</span><span class="w"> </span><span class="nx">name</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="s1">'myDialog'</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="kr">constructor</span><span class="p">(</span><span class="nx">config</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">super</span><span class="p">(</span><span class="nx">config</span><span class="p">);</span> <span class="w"> </span><span class="c1">// ...</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="nx">initialize</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">super</span><span class="p">.</span><span class="nx">initialize</span><span class="p">();</span> <span class="w"> </span><span class="c1">// ...</span> <span class="w"> </span><span class="p">}</span> <span class="p">}</span> </pre></div> <p>However, you will then need to pass such a class through a helper function like this one: </p> <div class="mw-highlight mw-highlight-lang-js mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">function</span><span class="w"> </span><span class="nx">es6ClassToOoJsClass</span><span class="p">(</span><span class="nx">targetClass</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">originClass</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Object</span><span class="p">.</span><span class="nx">getPrototypeOf</span><span class="p">(</span><span class="nx">targetClass</span><span class="p">);</span> <span class="w"> </span><span class="nx">OO</span><span class="p">.</span><span class="nx">initClass</span><span class="p">(</span><span class="nx">originClass</span><span class="p">);</span> <span class="w"> </span><span class="nx">targetClass</span><span class="p">.</span><span class="k">static</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Object</span><span class="p">.</span><span class="nx">create</span><span class="p">(</span><span class="nx">originClass</span><span class="p">.</span><span class="k">static</span><span class="p">);</span> <span class="w"> </span><span class="nb">Object</span><span class="p">.</span><span class="nx">getOwnPropertyNames</span><span class="p">(</span><span class="nx">targetClass</span><span class="p">)</span> <span class="w"> </span><span class="p">.</span><span class="nx">filter</span><span class="p">((</span><span class="nx">key</span><span class="p">)</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="nx">key</span><span class="w"> </span><span class="o">!==</span><span class="w"> </span><span class="s1">'static'</span><span class="p">)</span> <span class="w"> </span><span class="p">.</span><span class="nx">forEach</span><span class="p">((</span><span class="nx">key</span><span class="p">)</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">descriptor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Object</span><span class="p">.</span><span class="nx">getOwnPropertyDescriptor</span><span class="p">(</span><span class="nx">targetClass</span><span class="p">,</span><span class="w"> </span><span class="nx">key</span><span class="p">);</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">descriptor</span><span class="p">.</span><span class="nx">enumerable</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="nx">descriptor</span><span class="p">.</span><span class="nx">get</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nx">targetClass</span><span class="p">.</span><span class="k">static</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">targetClass</span><span class="p">[</span><span class="nx">key</span><span class="p">];</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="p">});</span> <span class="w"> </span><span class="nx">targetClass</span><span class="p">.</span><span class="nx">parent</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">targetClass</span><span class="p">.</span><span class="k">super</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">originClass</span><span class="p">;</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">targetClass</span><span class="p">;</span> <span class="p">}</span> </pre></div> <p>It assumes that the class has no static properties with a getter whose output is not fixed (which is unlikely). </p><p>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: </p> <div class="mw-highlight mw-highlight-lang-js mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="nx">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'myDialog'</span><span class="p">;</span> </pre></div> <p><br /> </p> <div class="mw-heading mw-heading2 ext-discussiontools-init-section"><h2 id="Namespace" data-mw-thread-id="h-Namespace"><span data-mw-comment-start="" id="h-Namespace"></span>Namespace<span data-mw-comment-end="h-Namespace"></span></h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OOjs&action=edit&section=8" title="Edit section: Namespace"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span><!--__DTELLIPSISBUTTON__{"threadItem":{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Namespace","replies":[]}}--></div> <p>In the presence of a module system, such as in Node.js, OOjs exports all of its classes and methods. In other environments, such as Web browsers, a global variable is created named <code>OO</code>. You may access <code>OO</code> the same way you would access <code>jQuery</code> or <code>mediaWiki</code>. </p><p>If you are using eslint, you should add the following to your <code>.eslintrc.json</code> file. </p> <div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="s2">"globals"</span><span class="o">:</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="s2">"OO"</span><span class="o">:</span><span class="w"> </span><span class="s2">"readonly"</span> <span class="p">}</span> </pre></div> <div class="mw-heading mw-heading2 ext-discussiontools-init-section"><h2 id="See_also" data-mw-thread-id="h-See_also"><span data-mw-comment-start="" id="h-See_also"></span>See also<span data-mw-comment-end="h-See_also"></span></h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OOjs&action=edit&section=9" title="Edit section: See also"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span><!--__DTELLIPSISBUTTON__{"threadItem":{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-See_also","replies":[]}}--></div> <style data-mw-deduplicate="TemplateStyles:r6651102">.mw-parser-output .infobox{box-sizing:border-box;border:2px solid var(--border-color-base,#a2a9b1);width:280px;border-collapse:collapse;border-spacing:0;background-color:white;color:#333;clear:right;float:right;margin:0 0 0.5em 0.5em}.mw-parser-output .infobox-rtl{clear:left;float:left;margin:0 0.5em 0.5em 0}.mw-parser-output .infobox th{text-align:left;padding:0.2em 0.5em;vertical-align:top}.mw-parser-output .infobox-rtl th{text-align:right}@media(max-width:719px){body.mediawiki .mw-parser-output .infobox{float:none;clear:both;width:100%;margin:0 0 .5em 0}}.mw-parser-output .infobox td{border:none;padding:0.2em 0.5em;vertical-align:top}.mw-parser-output .infobox-header{background-color:#a2a9b1;color:#FFF;text-align:left}.mw-parser-output .infobox-header a{color:#FFF}.mw-parser-output .infobox-header td,.mw-parser-output .infobox-header th{padding:0.5em 0.5em}.mw-parser-output .infobox-header img{padding:0 0.2em 0 0.5em}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox{background-color:inherit;color:inherit}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox{background-color:inherit;color:inherit}}</style><style data-mw-deduplicate="TemplateStyles:r7037963">.mw-parser-output .wmf-engineering-project-box{border:1px solid var(--border-color-subtle,#c8ccd1);padding:.2em;width:300px;background:var(--background-color-neutral-subtle,#f8f9fa);color:var(--color-base,#202122)}.mw-parser-output .wmf-engineering-project-box-catlink{font-size:smaller;margin:.2em;text-align:center}.mw-parser-output .wmf-engineering-project-box-title{font-size:1.2em;margin:.2em;background:#14866d;color:#fff;padding:.5em;text-align:center;font-weight:bold}.mw-parser-output .wmf-engineering-project-box-description{margin:.2em;padding:.2em;font-style:italic}.mw-parser-output .wmf-engineering-project-box-data{font-size:.9em;margin:.2em 0;width:100%}.mw-parser-output .wmf-engineering-project-box-data th{width:25%;font-weight:normal}.mw-parser-output .wmf-engineering-project-box-previous,.mw-parser-output .wmf-engineering-project-box-next{font-size:smaller;margin:.2em}.mw-parser-output .infobox-ltr .wmf-engineering-project-box-previous,.mw-parser-output .infobox-rtl .wmf-engineering-project-box-next{float:left}.mw-parser-output .infobox-ltr .wmf-engineering-project-box-next,.mw-parser-output .infobox-rtl .wmf-engineering-project-box-previous{float:right}</style> <table class="infobox infobox-ltr wmf-engineering-project-box plainlinks"><tbody><tr><td> <div class="nomobile wmf-engineering-project-box-catlink"><a href="/wiki/Special:MyLanguage/Category:WMF_Projects" title="Special:MyLanguage/Category:WMF Projects">Wikimedia Foundation projects</a><span style="display:none"><a href="/wiki/Category:WMF_Projects" title="Category:WMF Projects"> </a></span></div> <div class="wmf-engineering-project-box-title">OOjs</div> <div class="wmf-engineering-project-box-description"></div> <table class="wmf-engineering-project-box-data"> <tbody><tr> <th scope="row">Group:</th> <td><a href="/wiki/Editing_team" title="Editing team">Editing team</a></td> </tr> <tr> <th scope="row">Start:</th> <td>2013-10</td> </tr> <tr> <th scope="row">Lead:</th> <td><a href="/wiki/User:Krinkle" title="User:Krinkle">Timo Tijhof</a></td> </tr> <tr class="mw-empty-elt"> </tr></tbody></table></td></tr></tbody></table> <ul><li><a href="/wiki/Special:MyLanguage/OOUI" title="Special:MyLanguage/OOUI">OOUI</a><span style="display:none"><a href="/wiki/OOUI" title="OOUI"> </a></span></li></ul> <div class="mw-heading mw-heading2 ext-discussiontools-init-section"><h2 id="External_links" data-mw-thread-id="h-External_links"><span data-mw-comment-start="" id="h-External_links"></span>External links<span data-mw-comment-end="h-External_links"></span></h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OOjs&action=edit&section=10" title="Edit section: External links"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span><!--__DTELLIPSISBUTTON__{"threadItem":{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-External_links","replies":[]}}--></div> <ul><li><a class="external text" href="https://phabricator.wikimedia.org/diffusion/GOJS/browse/">Source code on phabricator.wikimedia.org/diffusion/</a> (<a rel="nofollow" class="external text" href="https://github.com/wikimedia/oojs">GitHub mirror</a>)</li> <li><a rel="nofollow" class="external text" href="https://npmjs.org/package/oojs">Package on npmjs.org</a></li> <li><a href="https://phabricator.wikimedia.org/tag/oojs" class="extiw" title="phab:tag/oojs">Phabricator project (issue tracker)</a></li> <li><a href="https://doc.wikimedia.org/VisualEditor/master/#!/api/OO" class="extiw" title="wmdoc:VisualEditor/master/">API Documentation</a></li> <li><a rel="nofollow" class="external text" href="https://www.npmjs.com/package/@types/oojs">Community-created TypeScript definitions</a> for OOjs (work in JavaScript projects as well in popular IDEs).</li></ul> <style data-mw-deduplicate="TemplateStyles:r7217283">.mw-parser-output table.ambox{margin:0 10%;width:unset;border:1px solid var(--border-color-base,#a2a9b1);border-left:10px solid var(--border-color-progressive,#36c);background-color:var(--background-color-neutral-subtle,#f8f9fa);box-sizing:border-box}.mw-parser-output table.ambox+table.ambox,.mw-parser-output table.ambox+link+table.ambox,.mw-parser-output table.ambox+style+table.ambox{margin-top:-1px}.mw-parser-output .ambox td.mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox th.mbox-text,.mw-parser-output .ambox td.mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox td.mbox-image{padding:2px 0 2px 0.5em}.mw-parser-output .ambox td.mbox-imageright{padding:2px 0.5em 2px 0}.mw-parser-output table.ambox-notice{border-left-color:var(--border-color-progressive,#36c)}.mw-parser-output table.ambox-speedy{background-color:var(--background-color-error-subtle,#fee7e6)}.mw-parser-output table.ambox-delete,.mw-parser-output table.ambox-speedy{border-left-color:var(--background-color-error--active,#b32424)}.mw-parser-output table.ambox-content{border-left-color:#f28500}.mw-parser-output table.ambox-style{border-left-color:#fc3}.mw-parser-output table.ambox-move{border-left-color:#9932cc}.mw-parser-output table.ambox-protection{border-left-color:var(--border-color-base,#a2a9b1)}html body.mediawiki .mw-parser-output .ambox.mbox-small{clear:right;float:right;margin:4px 0 4px 1em;box-sizing:border-box;width:238px;font-size:88%;line-height:1.25em}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;box-sizing:border-box;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}</style><table class="ambox ambox-notice plainlinks metadata" role="presentation"><tbody><tr><td class="mbox-image"><div style="width:52px"><span typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/e/ec/OOjs_UI_icon_information-progressive.svg/40px-OOjs_UI_icon_information-progressive.svg.png" decoding="async" width="40" height="40" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/e/ec/OOjs_UI_icon_information-progressive.svg/60px-OOjs_UI_icon_information-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/e/ec/OOjs_UI_icon_information-progressive.svg/80px-OOjs_UI_icon_information-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></span></span></div></td><td class="mbox-text"><div class="mbox-text-span"><a class="mw-selflink selflink">OOjs</a> is maintained by <b>the <a href="/wiki/Editing" class="mw-redirect" title="Editing">Editing</a> department</b>. <p>Get help: </p> <ul><li><span typeof="mw:File"><a href="/wiki/File:OOjs_UI_icon_speechBubbles-ltr-progressive.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/9/99/OOjs_UI_icon_speechBubbles-ltr-progressive.svg/20px-OOjs_UI_icon_speechBubbles-ltr-progressive.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/9/99/OOjs_UI_icon_speechBubbles-ltr-progressive.svg/24px-OOjs_UI_icon_speechBubbles-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/99/OOjs_UI_icon_speechBubbles-ltr-progressive.svg/32px-OOjs_UI_icon_speechBubbles-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span> <style data-mw-deduplicate="TemplateStyles:r7217526">.mw-parser-output .irc-connect>a{color:green}@media screen{html.skin-theme-clientpref-night .mw-parser-output .irc-connect>a{color:#12c812}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .irc-connect>a{color:#12c812}}</style><span class="plainlinks" style="font-family: monospace,Courier; white-space: pre-wrap !important; word-wrap: break-word; max-width: 1200px; overflow: auto;" title="#wikimedia-editing on Libera.Chat IRC"><a rel="nofollow" class="external text" href="ircs://irc.libera.chat:6697/wikimedia-editing">#wikimedia-editing</a></span> <sup class="plainlinks irc-connect"><a rel="nofollow" class="external text" href="https://web.libera.chat/?channel=#wikimedia-editing">connect</a></sup> ← Live chat (<a href="/wiki/Special:MyLanguage/MediaWiki_on_IRC" title="Special:MyLanguage/MediaWiki on IRC">IRC</a>)</li> <li><span typeof="mw:File"><a href="/wiki/File:OOjs_UI_icon_message-progressive.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/7/7e/OOjs_UI_icon_message-progressive.svg/20px-OOjs_UI_icon_message-progressive.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/7/7e/OOjs_UI_icon_message-progressive.svg/24px-OOjs_UI_icon_message-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/7/7e/OOjs_UI_icon_message-progressive.svg/32px-OOjs_UI_icon_message-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span> <a class="external text" href="https://lists.wikimedia.org/mailman/listinfo/mediawiki-l">mediawiki-l</a>, <a class="external text" href="https://lists.wikimedia.org/mailman/listinfo/wikitech-l">wikitech-l</a> ← <a href="/wiki/Special:MyLanguage/Mailing_lists" title="Special:MyLanguage/Mailing lists">Mailing lists</a><span style="display:none"><a href="/wiki/Mailing_lists" title="Mailing lists"> </a></span></li> <li><a href="/wiki/Talk:OOjs" title="Talk:OOjs">Talk:OOjs</a> ← <a href="/wiki/Special:MyLanguage/Help:Talk_pages" title="Special:MyLanguage/Help:Talk pages">Talk page</a><span style="display:none"><a href="/wiki/Help:Talk_pages" title="Help:Talk pages"> </a></span></li> <li><span typeof="mw:File"><a href="/wiki/File:Favicon-Phabricator-WM.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Favicon-Phabricator-WM.svg/20px-Favicon-Phabricator-WM.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Favicon-Phabricator-WM.svg/40px-Favicon-Phabricator-WM.svg.png 1.5x" data-file-width="592" data-file-height="592" /></a></span> <a href="https://phabricator.wikimedia.org/tag/oojs" class="extiw" title="phab:tag/oojs">oojs</a> (<span class="plainlinks"><a class="external text" href="https://phabricator.wikimedia.org/maniphest/task/edit/form/1/?tags=oojs">add task</a></span>) ← <a href="/wiki/Special:MyLanguage/Phabricator" title="Special:MyLanguage/Phabricator">Phabricator</a><span style="display:none"><a href="/wiki/Phabricator" title="Phabricator"> </a></span> project page</li></ul></div></td></tr></tbody></table> <!-- NewPP limit report Parsed by mw‐web.eqiad.main‐75687f9f4b‐9zcnw Cached time: 20250323022338 Cache expiry: 2592000 Reduced expiry: false Complications: [show‐toc] DiscussionTools time usage: 0.019 seconds CPU time usage: 0.312 seconds Real time usage: 0.411 seconds Preprocessor visited node count: 1794/1000000 Post‐expand include size: 28872/2097152 bytes Template argument size: 3718/2097152 bytes Highest expansion depth: 18/100 Expensive parser function count: 13/500 Unstrip recursion depth: 0/20 Unstrip post‐expand size: 15916/5000000 bytes Lua time usage: 0.050/10.000 seconds Lua memory usage: 1276645/52428800 bytes Number of Wikibase entities loaded: 0/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 214.029 1 -total 47.61% 101.909 1 Template:OOjs_sidebar 45.85% 98.131 1 Template:Sidebar 36.41% 77.920 18 Template:Ll 26.14% 55.946 1 Template:Feedback/oojs 25.08% 53.684 1 Template:Feedback 23.31% 49.892 1 Template:Mbox 19.66% 42.087 22 Template:Pagelang 15.78% 33.766 37 Template:Translatable 15.62% 33.428 1 Template:Wikimedia_engineering_project_information --> <!-- Saved in parser cache with key mediawikiwiki:pcache:163662:|#|:idhash:canonical and timestamp 20250323022338 and revision id 6947125. Rendering was triggered because: page-view --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://auth.wikimedia.org/loginwiki/wiki/Special:CentralAutoLogin/start?useformat=desktop&type=1x1&usesul3=1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://www.mediawiki.org/w/index.php?title=OOjs&oldid=6947125">https://www.mediawiki.org/w/index.php?title=OOjs&oldid=6947125</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Special:Categories" title="Special:Categories">Categories</a>: <ul><li><a href="/wiki/Category:OOjs" title="Category:OOjs">OOjs</a></li><li><a href="/wiki/Category:WMF_Projects" title="Category:WMF Projects">WMF Projects</a></li><li><a href="/wiki/Category:Libraries" title="Category:Libraries">Libraries</a></li><li><a href="/wiki/Category:JavaScript" title="Category:JavaScript">JavaScript</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Hidden categories: <ul><li><a href="/wiki/Category:WMF_Projects_2013q4" title="Category:WMF Projects 2013q4">WMF Projects 2013q4</a></li><li><a href="/wiki/Category:WMF_Projects_2014q1" title="Category:WMF Projects 2014q1">WMF Projects 2014q1</a></li><li><a href="/wiki/Category:WMF_Projects_2014q2" title="Category:WMF Projects 2014q2">WMF Projects 2014q2</a></li><li><a href="/wiki/Category:WMF_Projects_2014q3" title="Category:WMF Projects 2014q3">WMF Projects 2014q3</a></li><li><a href="/wiki/Category:WMF_Projects_2014q4" title="Category:WMF Projects 2014q4">WMF Projects 2014q4</a></li><li><a href="/wiki/Category:WMF_Projects_2015q1" title="Category:WMF Projects 2015q1">WMF Projects 2015q1</a></li><li><a href="/wiki/Category:WMF_Projects_2015q2" title="Category:WMF Projects 2015q2">WMF Projects 2015q2</a></li><li><a href="/wiki/Category:WMF_Projects_2015q3" title="Category:WMF Projects 2015q3">WMF Projects 2015q3</a></li><li><a href="/wiki/Category:WMF_Projects_2015q4" title="Category:WMF Projects 2015q4">WMF Projects 2015q4</a></li><li><a href="/wiki/Category:WMF_Projects_2016q1" title="Category:WMF Projects 2016q1">WMF Projects 2016q1</a></li><li><a href="/wiki/Category:WMF_Projects_2016q2" title="Category:WMF Projects 2016q2">WMF Projects 2016q2</a></li><li><a href="/wiki/Category:WMF_Projects_2016q3" title="Category:WMF Projects 2016q3">WMF Projects 2016q3</a></li><li><a href="/wiki/Category:WMF_Projects_2016q4" title="Category:WMF Projects 2016q4">WMF Projects 2016q4</a></li><li><a href="/wiki/Category:WMF_Projects_2017q1" title="Category:WMF Projects 2017q1">WMF Projects 2017q1</a></li><li><a href="/wiki/Category:WMF_Projects_2017q2" title="Category:WMF Projects 2017q2">WMF Projects 2017q2</a></li><li><a href="/wiki/Category:WMF_Projects_2017q3" title="Category:WMF Projects 2017q3">WMF Projects 2017q3</a></li><li><a href="/wiki/Category:WMF_Projects_2017q4" title="Category:WMF Projects 2017q4">WMF Projects 2017q4</a></li><li><a href="/wiki/Category:WMF_Projects_2018q1" title="Category:WMF Projects 2018q1">WMF Projects 2018q1</a></li><li><a href="/wiki/Category:WMF_Projects_2018q2" title="Category:WMF Projects 2018q2">WMF Projects 2018q2</a></li><li><a href="/wiki/Category:WMF_Projects_2018q3" title="Category:WMF Projects 2018q3">WMF Projects 2018q3</a></li><li><a href="/wiki/Category:WMF_Projects_2018q4" title="Category:WMF Projects 2018q4">WMF Projects 2018q4</a></li><li><a href="/wiki/Category:WMF_Projects_2019q1" title="Category:WMF Projects 2019q1">WMF Projects 2019q1</a></li><li><a href="/wiki/Category:WMF_Projects_2019q2" title="Category:WMF Projects 2019q2">WMF Projects 2019q2</a></li><li><a href="/wiki/Category:WMF_Projects_2019q3" title="Category:WMF Projects 2019q3">WMF Projects 2019q3</a></li><li><a href="/wiki/Category:WMF_Projects_2019q4" title="Category:WMF Projects 2019q4">WMF Projects 2019q4</a></li><li><a href="/wiki/Category:WMF_Projects_2020q1" title="Category:WMF Projects 2020q1">WMF Projects 2020q1</a></li><li><a href="/wiki/Category:WMF_Projects_2020q2" title="Category:WMF Projects 2020q2">WMF Projects 2020q2</a></li><li><a href="/wiki/Category:WMF_Projects_2020q3" title="Category:WMF Projects 2020q3">WMF Projects 2020q3</a></li><li><a href="/wiki/Category:WMF_Projects_2020q4" title="Category:WMF Projects 2020q4">WMF Projects 2020q4</a></li><li><a href="/wiki/Category:WMF_Projects_2021q1" title="Category:WMF Projects 2021q1">WMF Projects 2021q1</a></li><li><a href="/wiki/Category:WMF_Projects_2021q2" title="Category:WMF Projects 2021q2">WMF Projects 2021q2</a></li><li><a href="/wiki/Category:WMF_Projects_2021q3" title="Category:WMF Projects 2021q3">WMF Projects 2021q3</a></li><li><a href="/wiki/Category:WMF_Projects_2021q4" title="Category:WMF Projects 2021q4">WMF Projects 2021q4</a></li><li><a href="/wiki/Category:WMF_Projects_2022q1" title="Category:WMF Projects 2022q1">WMF Projects 2022q1</a></li><li><a href="/wiki/Category:WMF_Projects_2022q2" title="Category:WMF Projects 2022q2">WMF Projects 2022q2</a></li><li><a href="/wiki/Category:WMF_Projects_2022q3" title="Category:WMF Projects 2022q3">WMF Projects 2022q3</a></li><li><a href="/wiki/Category:WMF_Projects_2022q4" title="Category:WMF Projects 2022q4">WMF Projects 2022q4</a></li><li><a href="/wiki/Category:WMF_Projects_2023q1" title="Category:WMF Projects 2023q1">WMF Projects 2023q1</a></li><li><a href="/wiki/Category:WMF_Projects_2023q2" title="Category:WMF Projects 2023q2">WMF Projects 2023q2</a></li><li><a href="/wiki/Category:WMF_Projects_2023q3" title="Category:WMF Projects 2023q3">WMF Projects 2023q3</a></li><li><a href="/wiki/Category:WMF_Projects_2023q4" title="Category:WMF Projects 2023q4">WMF Projects 2023q4</a></li><li><a href="/wiki/Category:WMF_Projects_2024q1" title="Category:WMF Projects 2024q1">WMF Projects 2024q1</a></li><li><a href="/wiki/Category:WMF_Projects_2024q2" title="Category:WMF Projects 2024q2">WMF Projects 2024q2</a></li><li><a href="/wiki/Category:WMF_Projects_2024q3" title="Category:WMF Projects 2024q3">WMF Projects 2024q3</a></li><li><a href="/wiki/Category:WMF_Projects_2024q4" title="Category:WMF Projects 2024q4">WMF Projects 2024q4</a></li><li><a href="/wiki/Category:WMF_Projects_2025q1" title="Category:WMF Projects 2025q1">WMF Projects 2025q1</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 30 December 2024, at 08:21.</li> <li id="footer-info-copyright">Text is available under the <a rel="nofollow" class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike License</a>; additional terms may apply. Text in <a class="external text" href="https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents">the Help: namespace</a> is available under the <a rel="nofollow" class="external text" href="https://creativecommons.org/publicdomain/zero/1.0/">Creative Commons CC0 License</a>. By using this site, you agree to the <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use">Terms of Use</a> and <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy Policy</a>.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Project:About">About mediawiki.org</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Project:General_disclaimer">Disclaimers</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://www.mediawiki.org/wiki/Special:MyLanguage/Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/www.mediawiki.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//m.mediawiki.org/w/index.php?title=OOjs&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://www.wikimedia.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><picture><source media="(min-width: 500px)" srcset="/static/images/footer/wikimedia-button.svg" width="84" height="29"><img src="/static/images/footer/wikimedia.svg" width="25" height="25" alt="Wikimedia Foundation" lang="en" loading="lazy"></picture></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><picture><source media="(min-width: 500px)" srcset="/w/resources/assets/poweredby_mediawiki.svg" width="88" height="31"><img src="/w/resources/assets/mediawiki_compact.svg" alt="Powered by MediaWiki" lang="en" width="25" height="25" loading="lazy"></picture></a></li> </ul> </footer> </div> </div> </div> <div class="vector-header-container vector-sticky-header-container"> <div id="vector-sticky-header" class="vector-sticky-header"> <div class="vector-sticky-header-start"> <div class="vector-sticky-header-icon-start vector-button-flush-left vector-button-flush-right" aria-hidden="true"> <button class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-sticky-header-search-toggle" tabindex="-1" data-event-name="ui.vector-sticky-search-form.icon"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </button> </div> <div role="search" class="vector-search-box-vue vector-search-box-show-thumbnail vector-search-box"> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail"> <form action="/w/index.php" id="vector-sticky-search-form" class="cdx-search-input cdx-search-input--has-end-button"> <div class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search mediawiki.org"> <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <div class="vector-sticky-header-context-bar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-sticky-header-toc" class="vector-dropdown mw-portlet mw-portlet-sticky-header-toc vector-sticky-header-toc vector-button-flush-left" > <input type="checkbox" id="vector-sticky-header-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-sticky-header-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-sticky-header-toc-label" for="vector-sticky-header-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-sticky-header-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div class="vector-sticky-header-context-bar-primary" aria-hidden="true" ><span class="mw-page-title-main">OOjs</span></div> </div> </div> <div class="vector-sticky-header-end" aria-hidden="true"> <div class="vector-sticky-header-icons"> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-talk-sticky-header" tabindex="-1" data-event-name="talk-sticky-header"><span class="vector-icon mw-ui-icon-speechBubbles mw-ui-icon-wikimedia-speechBubbles"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-subject-sticky-header" tabindex="-1" data-event-name="subject-sticky-header"><span class="vector-icon mw-ui-icon-article mw-ui-icon-wikimedia-article"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-history-sticky-header" tabindex="-1" data-event-name="history-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-history mw-ui-icon-wikimedia-wikimedia-history"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only mw-watchlink" id="ca-watchstar-sticky-header" tabindex="-1" data-event-name="watch-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-star mw-ui-icon-wikimedia-wikimedia-star"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-edit-sticky-header" tabindex="-1" data-event-name="wikitext-edit-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-wikiText mw-ui-icon-wikimedia-wikimedia-wikiText"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-ve-edit-sticky-header" tabindex="-1" data-event-name="ve-edit-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-edit mw-ui-icon-wikimedia-wikimedia-edit"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-viewsource-sticky-header" tabindex="-1" data-event-name="ve-edit-protected-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-editLock mw-ui-icon-wikimedia-wikimedia-editLock"></span> <span></span> </a> </div> <div class="vector-sticky-header-buttons"> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive" id="ca-addsection-sticky-header" tabindex="-1" data-event-name="addsection-sticky-header"><span class="vector-icon mw-ui-icon-speechBubbleAdd-progressive mw-ui-icon-wikimedia-speechBubbleAdd-progressive"></span> <span>Add topic</span> </a> </div> <div class="vector-sticky-header-icon-end"> <div class="vector-user-links"> </div> </div> </div> </div> </div> <div class="mw-portlet mw-portlet-dock-bottom emptyPortlet" id="p-dock-bottom"> <ul> </ul> </div> <script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-84559f4bd5-cbsbl","wgBackendResponseTime":132,"wgDiscussionToolsPageThreads":[{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Features","replies":[{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Inheritance-Features","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Events-Features","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Registries_and_Factories-Features","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Utilities-Features","replies":[]}]},{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Compatibility","replies":[{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Extending_OOjs_classes_in_newer_versions_of_ECMAScript-Compatibility","replies":[]}]},{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Namespace","replies":[]},{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-See_also","replies":[]},{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-External_links","replies":[]}],"wgPageParseReport":{"discussiontools":{"limitreport-timeusage":"0.019"},"limitreport":{"cputime":"0.312","walltime":"0.411","ppvisitednodes":{"value":1794,"limit":1000000},"postexpandincludesize":{"value":28872,"limit":2097152},"templateargumentsize":{"value":3718,"limit":2097152},"expansiondepth":{"value":18,"limit":100},"expensivefunctioncount":{"value":13,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":15916,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 214.029 1 -total"," 47.61% 101.909 1 Template:OOjs_sidebar"," 45.85% 98.131 1 Template:Sidebar"," 36.41% 77.920 18 Template:Ll"," 26.14% 55.946 1 Template:Feedback/oojs"," 25.08% 53.684 1 Template:Feedback"," 23.31% 49.892 1 Template:Mbox"," 19.66% 42.087 22 Template:Pagelang"," 15.78% 33.766 37 Template:Translatable"," 15.62% 33.428 1 Template:Wikimedia_engineering_project_information"]},"scribunto":{"limitreport-timeusage":{"value":"0.050","limit":"10.000"},"limitreport-memusage":{"value":1276645,"limit":52428800}},"cachereport":{"origin":"mw-web.eqiad.main-75687f9f4b-9zcnw","timestamp":"20250323022338","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>