/** * Render the Babel tower. * * @param $parser Parser. * @return string: Babel tower. */ public static function Render($parser) { wfProfileIn(__METHOD__); global $wgBabelUseUserLanguage; $parameters = func_get_args(); array_shift($parameters); self::$title = $parser->getTitle(); self::mTemplateLinkBatch($parameters); $parser->getOutput()->addModuleStyles('ext.babel'); $content = ''; $templateParameters = array(); // collects name=value parameters to be passed to wiki templates. $createCategories = !$parser->mOptions->mIsPreview; foreach ($parameters as $name) { if (strpos($name, '=') !== false) { $templateParameters[] = $name; continue; } $components = self::mParseParameter($name); $template = wfMessage('babel-template', $name)->inContentLanguage()->text(); if ($name === '') { continue; } elseif ($components !== false) { // Valid parameter syntax (with lowercase language code), babel box $content .= self::mGenerateBox($components['code'], $components['level']); $content .= self::mGenerateCategories($components['code'], $components['level'], $createCategories); } elseif (self::mPageExists($template)) { // Check for an existing template $templateParameters[0] = $template; $template = implode('|', $templateParameters); $content .= self::mGenerateNotaBox($parser->replaceVariables("{{{$template}}}")); } elseif (self::mValidTitle($template)) { // Non-existing page, so try again as a babel box, with converting the code to lowercase $components2 = self::mParseParameter($name, true); if ($components2 !== false) { $content .= self::mGenerateBox($components2['code'], $components2['level']); $content .= self::mGenerateCategories($components2['code'], $components2['level'], $createCategories); } else { // Non-existent page and invalid parameter syntax, red link. $content .= self::mGenerateNotaBox('[[' . $template . ']]'); } } else { // Invalid title, output raw. $content .= self::mGenerateNotaBox($template); } } if ($wgBabelUseUserLanguage) { $uiLang = $parser->getOptions()->getUserLangObj(); } else { $uiLang = self::$title->getPageLanguage(); } $top = wfMessage('babel', self::$title->getDBkey())->inLanguage($uiLang); if ($top->isDisabled()) { $top = ''; } else { $top = $top->text(); $url = wfMessage('babel-url')->inContentLanguage(); if (!$url->isDisabled()) { $top = '[[' . $url->text() . '|' . $top . ']]'; } $top = '! class="mw-babel-header" | ' . $top; } $footer = wfMessage('babel-footer', self::$title->getDBkey())->inLanguage($uiLang); $url = wfMessage('babel-footer-url')->inContentLanguage(); $showfooter = ''; if (!$footer->isDisabled() && !$url->isDisabled()) { $showfooter = '! class="mw-babel-footer" | [[' . $url->text() . '|' . $footer->text() . ']]'; } $spacing = Babel::mCssAttrib('border-spacing', 'babel-box-cellspacing', true); $padding = Babel::mCssAttrib('padding', 'babel-box-cellpadding', true); $style = ''; if ($spacing === '') { $style = $padding === '' ? '' : 'style="' . $padding . '"'; } else { $style = $padding === '' ? 'style="' . $spacing . '"' : 'style="' . $padding . ' ' . $spacing . '"'; } $tower = <<<EOT {|{$style} class="mw-babel-wrapper" {$top} |- | {$content} |- {$showfooter} |} EOT; wfProfileOut(__METHOD__); return $tower; }
/** * Render the Babel tower. * * @param $parser Parser. * @return string: Babel tower. */ public static function Render($parser) { global $wgBabelUseUserLanguage; $parameters = func_get_args(); array_shift($parameters); self::$title = $parser->getTitle(); self::mTemplateLinkBatch($parameters); $parser->getOutput()->addModuleStyles('ext.babel'); $content = ''; $templateParameters = array(); // collects name=value parameters to be passed to wiki templates. foreach ($parameters as $name) { if (strpos($name, '=') !== false) { $templateParameters[] = $name; continue; } $components = self::mParseParameter($name); $template = wfMessage('babel-template', $name)->inContentLanguage()->text(); if ($name === '') { continue; } elseif ($components !== false) { // Non-existent page and valid parameter syntax, babel box $content .= self::mGenerateBox($components['code'], $components['level']); $content .= self::mGenerateCategories($components['code'], $components['level']); } elseif (self::mPageExists($template)) { // Check for a template $templateParameters[0] = $template; $template = implode('|', $templateParameters); $content .= self::mGenerateNotaBox($parser->replaceVariables("{{{$template}}}")); } elseif (self::mValidTitle($template)) { // Non-existent page and invalid parameter syntax, red link. $content .= self::mGenerateNotaBox('[[' . $template . ']]'); } else { // Invalid title, output raw. $content .= self::mGenerateNotaBox($template); } } $top = wfMessage('babel', self::$title->getDBkey())->inContentLanguage(); if ($wgBabelUseUserLanguage) { $top = $top->inLanguage($parser->getOptions()->getUserLangObj()); } else { $top = $top->inContentLanguage(); } if ($top->isDisabled()) { $top = ''; } else { $top = $top->text(); $url = wfMessage('babel-url')->inContentLanguage(); if (!$url->isDisabled()) { $top = '[[' . $url->text() . '|' . $top . ']]'; } $top = '! class="mw-babel-header" | ' . $top; } $footer = wfMessage('babel-footer', self::$title->getDBkey()); if ($wgBabelUseUserLanguage) { $footer = $footer->inLanguage($parser->getOptions()->getUserLangObj()); } else { $footer = $footer->inContentLanguage(); } $url = wfMessage('babel-footer-url')->inContentLanguage(); $showfooter = ''; if (!$footer->isDisabled() && !$url->isDisabled()) { $showfooter = '! class="mw-babel-footer" | [[' . $url->text() . '|' . $footer->text() . ']]'; } $cellspacing = Babel::mHtmlAttrib('cellspacing', 'babel-box-cellspacing'); $cellpadding = Babel::mHtmlAttrib('cellpadding', 'babel-box-cellpadding'); $tower = <<<EOT {|{$cellspacing}{$cellpadding} class="mw-babel-wrapper" {$top} |- | {$content} |- {$showfooter} |} EOT; return $tower; }