/**
  * Create and output HTML including the complete factbox, based on the extracted
  * parameters in the execute comment.
  *
  * @return string  A HTML string with the factbox
  */
 private function doGenerateHtml()
 {
     global $wgContLang;
     $html = "\n";
     $leftside = !$wgContLang->isRTL();
     // For right to left languages, all is mirrored
     $modules = array();
     if ($this->subject->isValid()) {
         $semanticData = new SemanticData($this->subject->getDataItem());
         $html .= $this->displayHead();
         if ($this->showoutgoing) {
             $semanticData = $this->store->getSemanticData($this->subject->getDataItem());
             $html .= $this->displayData($semanticData, $leftside);
             $html .= $this->displayCenter();
         }
         if ($this->showincoming) {
             list($indata, $more) = $this->getInData();
             if (!$this->getOption('showInverse')) {
                 $leftside = !$leftside;
             }
             $html .= $this->displayData($indata, $leftside, true);
             $html .= $this->displayBottom($more);
         }
         $this->articletext = $this->subject->getWikiValue();
         \Hooks::run('SMW::Browse::AfterDataLookupComplete', array($this->store, $semanticData, &$html, &$this->extraModules));
     }
     if ($this->getOption('printable') !== 'yes') {
         $html .= $this->queryForm($this->articletext);
     }
     $html .= Html::element('div', array('class' => 'smwb-modules', 'data-modules' => json_encode($this->extraModules)));
     return $html;
 }