Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 14 |
CRAP | |
0.00% |
0 / 84 |
| DiffFormatter | |
0.00% |
0 / 1 |
|
0.00% |
0 / 14 |
462 | |
0.00% |
0 / 84 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| _start_diff | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| _end_diff | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| _block_header | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 11 |
|||
| _start_block | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 4 |
|||
| _lines | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| addedLine | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 11 |
|||
| deletedLine | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 11 |
|||
| contextLine | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 8 |
|||
| emptyLine | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 5 |
|||
| _added | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 4 |
|||
| _deleted | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 4 |
|||
| _context | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 4 |
|||
| _changed | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 13 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\Core\Diff\DiffFormatter. | |
| */ | |
| namespace Drupal\Core\Diff; | |
| use Drupal\Component\Diff\DiffFormatter as DiffFormatterBase; | |
| use Drupal\Component\Diff\WordLevelDiff; | |
| use Drupal\Component\Utility\Html; | |
| use Drupal\Core\Config\ConfigFactoryInterface; | |
| /** | |
| * Diff formatter which uses returns output that can be rendered to a table. | |
| */ | |
| class DiffFormatter extends DiffFormatterBase { | |
| /** | |
| * The diff represented as an array of rows. | |
| * | |
| * @var array | |
| */ | |
| protected $rows = array(); | |
| /** | |
| * The line stats. | |
| * | |
| * @var array | |
| */ | |
| protected $line_stats = array( | |
| 'counter' => array('x' => 0, 'y' => 0), | |
| 'offset' => array('x' => 0, 'y' => 0), | |
| ); | |
| /** | |
| * Creates a DiffFormatter to render diffs in a table. | |
| * | |
| * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory | |
| * The config factory. | |
| */ | |
| public function __construct(ConfigFactoryInterface $config_factory) { | |
| $config = $config_factory->get('system.diff'); | |
| $this->leading_context_lines = $config->get('context.lines_leading'); | |
| $this->trailing_context_lines = $config->get('context.lines_trailing'); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function _start_diff() { | |
| $this->rows = array(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function _end_diff() { | |
| return $this->rows; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function _block_header($xbeg, $xlen, $ybeg, $ylen) { | |
| return array( | |
| array( | |
| 'data' => $xbeg + $this->line_stats['offset']['x'], | |
| 'colspan' => 2, | |
| ), | |
| array( | |
| 'data' => $ybeg + $this->line_stats['offset']['y'], | |
| 'colspan' => 2, | |
| ) | |
| ); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function _start_block($header) { | |
| if ($this->show_header) { | |
| $this->rows[] = $header; | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function _lines($lines, $prefix=' ', $color='white') { | |
| } | |
| /** | |
| * Creates an added line. | |
| * | |
| * @param string $line | |
| * An HTML-escaped line. | |
| * | |
| * @return array | |
| * An array representing a table row. | |
| */ | |
| protected function addedLine($line) { | |
| return array( | |
| array( | |
| 'data' => '+', | |
| 'class' => 'diff-marker', | |
| ), | |
| array( | |
| 'data' => ['#markup' => $line], | |
| 'class' => 'diff-context diff-addedline', | |
| ) | |
| ); | |
| } | |
| /** | |
| * Creates a deleted line. | |
| * | |
| * @param string $line | |
| * An HTML-escaped line. | |
| * | |
| * @return array | |
| * An array representing a table row. | |
| */ | |
| protected function deletedLine($line) { | |
| return array( | |
| array( | |
| 'data' => '-', | |
| 'class' => 'diff-marker', | |
| ), | |
| array( | |
| 'data' => ['#markup' => $line], | |
| 'class' => 'diff-context diff-deletedline', | |
| ) | |
| ); | |
| } | |
| /** | |
| * Creates a context line. | |
| * | |
| * @param string $line | |
| * An HTML-escaped line. | |
| * | |
| * @return array | |
| * An array representing a table row. | |
| */ | |
| protected function contextLine($line) { | |
| return array( | |
| ' ', | |
| array( | |
| 'data' => ['#markup' => $line], | |
| 'class' => 'diff-context', | |
| ) | |
| ); | |
| } | |
| /** | |
| * Creates an empty line. | |
| * | |
| * @return array | |
| * An array representing a table row. | |
| */ | |
| protected function emptyLine() { | |
| return array( | |
| ' ', | |
| ' ', | |
| ); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function _added($lines) { | |
| foreach ($lines as $line) { | |
| $this->rows[] = array_merge($this->emptyLine(), $this->addedLine(Html::escape($line))); | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function _deleted($lines) { | |
| foreach ($lines as $line) { | |
| $this->rows[] = array_merge($this->deletedLine(Html::escape($line)), $this->emptyLine()); | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function _context($lines) { | |
| foreach ($lines as $line) { | |
| $this->rows[] = array_merge($this->contextLine(Html::escape($line)), $this->contextLine(Html::escape($line))); | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function _changed($orig, $closing) { | |
| $orig = array_map('\Drupal\Component\Utility\Html::escape', $orig); | |
| $closing = array_map('\Drupal\Component\Utility\Html::escape', $closing); | |
| $diff = new WordLevelDiff($orig, $closing); | |
| $del = $diff->orig(); | |
| $add = $diff->closing(); | |
| // Notice that WordLevelDiff returns HTML-escaped output. Hence, we will be | |
| // calling addedLine/deletedLine without HTML-escaping. | |
| while ($line = array_shift($del)) { | |
| $aline = array_shift( $add ); | |
| $this->rows[] = array_merge($this->deletedLine($line), isset($aline) ? $this->addedLine($aline) : $this->emptyLine()); | |
| } | |
| // If any leftovers. | |
| foreach ($add as $line) { | |
| $this->rows[] = array_merge($this->emptyLine(), $this->addedLine($line)); | |
| } | |
| } | |
| } |