예제 #1
0
    /**
     * 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;
    }
예제 #2
0
    /**
     * 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;
    }