namespaceContentModels = $namespaceContentModels; } public function supportsArticleCount() { return true; } /** * @param string $model * @param LinkTarget $page * * @return bool */ public function isAllowedModel( $model, LinkTarget $page ) { $title = Title::newFromLinkTarget( $page ); $handler = ContentHandler::getForModelID( $model ); return $handler->canBeUsedOn( $title ); } /** * @param LinkTarget $page * * @return string */ public function getDefaultModel( LinkTarget $page ) { // NOTE: this method must not rely on $title->getContentModel() directly or indirectly, // because it is used to initialize the mContentModel member. $ext = ''; $ns = $page->getNamespace(); $model = $this->namespaceContentModels[$ns] ?? null; // Hook can determine default model $title = Title::newFromLinkTarget( $page ); if ( !Hooks::run( 'ContentHandlerDefaultModelFor', [ $title, &$model ] ) && !is_null( $model ) ) { return $model; } // Could this page contain code based on the title? $isCodePage = $ns === NS_MEDIAWIKI && preg_match( '!\.(css|js|json)$!u', $title->getText(), $m ); if ( $isCodePage ) { $ext = $m[1]; } // Is this a user subpage containing code? $isCodeSubpage = $ns === NS_USER && !$isCodePage && preg_match( "/\\/.*\\.(js|css|json)$/", $title->getText(), $m ); if ( $isCodeSubpage ) { $ext = $m[1]; } // Is this wikitext, according to $wgNamespaceContentModels or the DefaultModelFor hook? $isWikitext = is_null( $model ) || $model == CONTENT_MODEL_WIKITEXT; $isWikitext = $isWikitext && !$isCodePage && !$isCodeSubpage; if ( !$isWikitext ) { switch ( $ext ) { case 'js': return CONTENT_MODEL_JAVASCRIPT; case 'css': return CONTENT_MODEL_CSS; case 'json': return CONTENT_MODEL_JSON; default: return $model ?? CONTENT_MODEL_TEXT; } } // We established that it must be wikitext return CONTENT_MODEL_WIKITEXT; } }