[web-doc] master: Improve diff viewer. Thank you, Lucas Azevedo. Closes GH-29

From: Date: Tue, 04 Jan 2022 18:07:29 +0000
Subject: [web-doc] master: Improve diff viewer. Thank you, Lucas Azevedo. Closes GH-29
Groups: php.doc.web 
Request: Send a blank email to doc-web+get-2498@lists.php.net to get a copy of this message
Author: Lucas Azevedo (lhsazevedo) Committer: Nilgün Belma Bugüner (nilgun) Date: 2022-01-04T21:07:32+03:00 Commit: https://github.com/php/web-doc/commit/2b5f30b65435ca480ceabcf1e8601a2e595cc8b4 Raw diff: https://github.com/php/web-doc/commit/2b5f30b65435ca480ceabcf1e8601a2e595cc8b4.diff Improve diff viewer. Thank you, Lucas Azevedo. Closes GH-29 Changed paths: M include/lib_revcheck.inc.php Diff: diff --git a/include/lib_revcheck.inc.php b/include/lib_revcheck.inc.php index bd8f36c..e5eb89b 100644 --- a/include/lib_revcheck.inc.php +++ b/include/lib_revcheck.inc.php @@ -253,27 +253,70 @@ function showdiff () $file = git diff {$arg_h} -- {$arg_f}; chdir( $cwd ); $raw = htmlspecialchars( $file, ENT_XML1, 'UTF-8' ); - $trans = [ " " => "&nbsp;" ]; $lines = explode ( "\n" , $raw ); - echo "<div style='font:87% monospace;overflow-wrap:break-word;'>"; - foreach ( $lines as $line ) { - $inline = strtr( $line , $trans ); - $fc = substr( $inline , 0 , 1 ); - if ( $c == 'on' ) { - if ( $fc == "+" ) { - echo "<div style='color:darkgreen;background-color:#e6ffec;'>"; - } elseif ( $fc == "-" ) { - echo "<div style='color:firebrick;background-color:#ffebe9;'>"; - } elseif ( $fc == "@" ) { - echo "<div style='color:darkblue;background-color:#ddf4ff;'>"; - } else - echo "<div style='color:gray;line-height:1.2;'>"; - echo "$inline</div>\n"; - } else - if ( ($fc == "+") || ($fc == "-") || ($fc == "@")) - echo "<div style='background-color:#f0f0f0;'>$inline</div>\n"; - else - echo "<div style='color:gray;line-height:1.2;'>$inline</div>\n"; + echo "<div style='font: .75rem monospace; overflow-wrap:break-word; line-height: 1.8; border: 1px solid #ccc; border-radius: 4px;'>"; + + $codeStyles = 'flex-grow: 1; min-width: 0; white-space: pre-wrap;'; + $lineNumberStyles = 'flex: 0 0 40px; text-align: right; user-select: none; padding: 0 8px;'; + + // Base gray palette + $addBg = 'background-color: #f0f0f0;'; + $addAccentBg = 'background-color: #d8d8d8;'; + $delBg = $addBg; + $delAccentBg = $addAccentBg; + $tagBg = $addBg; + $tagAccentBg = $addAccentBg; + + // Override palette for colored diff + if ($c == 'on') { + $addBg = 'background-color: #e6ffec;'; + $addAccentBg = 'background-color: #ccffd8;'; + $delBg = 'background-color: #ffebe9;'; + $delAccentBg = 'background-color: #ffd7d5;'; + $tagBg = 'background-color: #eff0f6;'; + $tagAccentBg = 'background-color: #d4d8e7;'; + } + + echo "<div style='padding: 12px;'>$gitfile</div>"; + + foreach (array_slice($lines, 4) as $line) { + $fc = substr( $line , 0 , 1 ); + + echo "<div style='display: flex;'>"; + + if ($fc == "+") { + echo "<div style='$lineNumberStyles $addAccentBg'></div>"; + echo "<div style='$lineNumberStyles $addAccentBg'>$newLineNumber</div>"; + echo "<div style='$addBg flex: 0 0 20px; text-align: center; user-select: none;'>$fc</div>"; + echo "<div style='$codeStyles $addBg'>" . substr($line, 1) . "</div>\n"; + + $newLineNumber++; + } else if ($fc == "-") { + echo "<div style='$lineNumberStyles $delAccentBg'>$oldLineNumber</div>"; + echo "<div style='$lineNumberStyles $delAccentBg'></div>"; + echo "<div style='$delBg flex: 0 0 20px; text-align: center; user-select: none;'>$fc</div>"; + echo "<div style='$codeStyles $delBg'>" . substr($line, 1) . "</div>\n"; + + $oldLineNumber++; + } else if ($fc == "@") { + preg_match('/-(\d+),\d+ \+(\d+)/', $line, $matches); + $oldLineNumber = $matches[1]; + $newLineNumber = $matches[2]; + + echo "<div style='$lineNumberStyles $tagAccentBg color: #57606a; padding-top: 8px; padding-bottom: 8px;'>...</div>"; + echo "<div style='$lineNumberStyles $tagAccentBg color: #57606a; padding-top: 8px; padding-bottom: 8px;'>...</div>"; + echo "<div style='$codeStyles $tagBg color: #57606a; padding: 8px;'>$line</div>\n"; + } else { + echo "<div style='$lineNumberStyles color: gray;'>$oldLineNumber</div>"; + echo "<div style='$lineNumberStyles color: gray;'>$newLineNumber</div>"; + echo "<div style='flex: 0 0 20px; text-align: center; user-select: none;'></div>"; + echo "<div style='$codeStyles color: gray;'>" . substr($line, 1) . "</div>\n"; + + $oldLineNumber++; + $newLineNumber++; + } + + echo '</div>'; } echo "</div><p></p>"; }

« previous php.doc.web (#2498) next »