Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15380057
D20844.id49696.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
11 KB
Referenced Files
None
Subscribers
None
D20844.id49696.diff
View Options
diff --git a/resources/celerity/map.php b/resources/celerity/map.php
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -9,7 +9,7 @@
'names' => array(
'conpherence.pkg.css' => '3c8a0668',
'conpherence.pkg.js' => '020aebcf',
- 'core.pkg.css' => '19ec9519',
+ 'core.pkg.css' => '7ce5a944',
'core.pkg.js' => '6e5c894f',
'differential.pkg.css' => '607c84be',
'differential.pkg.js' => 'a0212a0b',
@@ -169,7 +169,7 @@
'rsrc/css/phui/phui-pager.css' => 'd022c7ad',
'rsrc/css/phui/phui-pinboard-view.css' => '1f08f5d8',
'rsrc/css/phui/phui-policy-section-view.css' => '139fdc64',
- 'rsrc/css/phui/phui-property-list-view.css' => 'ad841f1c',
+ 'rsrc/css/phui/phui-property-list-view.css' => '807b1632',
'rsrc/css/phui/phui-remarkup-preview.css' => '91767007',
'rsrc/css/phui/phui-segment-bar-view.css' => '5166b370',
'rsrc/css/phui/phui-spacing.css' => 'b05cadc3',
@@ -865,7 +865,7 @@
'phui-pager-css' => 'd022c7ad',
'phui-pinboard-view-css' => '1f08f5d8',
'phui-policy-section-view-css' => '139fdc64',
- 'phui-property-list-view-css' => 'ad841f1c',
+ 'phui-property-list-view-css' => '807b1632',
'phui-remarkup-preview-css' => '91767007',
'phui-segment-bar-view-css' => '5166b370',
'phui-spacing-css' => 'b05cadc3',
diff --git a/src/applications/differential/parser/DifferentialChangesetParser.php b/src/applications/differential/parser/DifferentialChangesetParser.php
--- a/src/applications/differential/parser/DifferentialChangesetParser.php
+++ b/src/applications/differential/parser/DifferentialChangesetParser.php
@@ -247,7 +247,7 @@
return $this->depthOnlyLines;
}
- public function setVisibileLinesMask(array $mask) {
+ public function setVisibleLinesMask(array $mask) {
$this->visible = $mask;
return $this;
}
@@ -699,13 +699,13 @@
$lines_context = $this->getLinesOfContext();
$hunk_parser->generateIntraLineDiffs();
- $hunk_parser->generateVisibileLinesMask($lines_context);
+ $hunk_parser->generateVisibleLinesMask($lines_context);
$this->setOldLines($hunk_parser->getOldLines());
$this->setNewLines($hunk_parser->getNewLines());
$this->setIntraLineDiffs($hunk_parser->getIntraLineDiffs());
$this->setDepthOnlyLines($hunk_parser->getDepthOnlyLines());
- $this->setVisibileLinesMask($hunk_parser->getVisibleLinesMask());
+ $this->setVisibleLinesMask($hunk_parser->getVisibleLinesMask());
$this->hunkStartLines = $hunk_parser->getHunkStartLines(
$changeset->getHunks());
diff --git a/src/applications/differential/parser/DifferentialHunkParser.php b/src/applications/differential/parser/DifferentialHunkParser.php
--- a/src/applications/differential/parser/DifferentialHunkParser.php
+++ b/src/applications/differential/parser/DifferentialHunkParser.php
@@ -36,7 +36,7 @@
}
public function getVisibleLinesMask() {
if ($this->visibleLinesMask === null) {
- throw new PhutilInvalidStateException('generateVisibileLinesMask');
+ throw new PhutilInvalidStateException('generateVisibleLinesMask');
}
return $this->visibleLinesMask;
}
@@ -354,7 +354,7 @@
return $this;
}
- public function generateVisibileLinesMask($lines_context) {
+ public function generateVisibleLinesMask($lines_context) {
$old = $this->getOldLines();
$new = $this->getNewLines();
$max_length = max(count($old), count($new));
diff --git a/src/applications/differential/render/DifferentialChangesetTwoUpRenderer.php b/src/applications/differential/render/DifferentialChangesetTwoUpRenderer.php
--- a/src/applications/differential/render/DifferentialChangesetTwoUpRenderer.php
+++ b/src/applications/differential/render/DifferentialChangesetTwoUpRenderer.php
@@ -372,12 +372,25 @@
$old_comments = $this->getOldComments();
$new_comments = $this->getNewComments();
+ $gap_view = javelin_tag(
+ 'tr',
+ array(
+ 'sigil' => 'context-target',
+ ),
+ phutil_tag(
+ 'td',
+ array(
+ 'colspan' => 6,
+ 'class' => 'show-more',
+ ),
+ pht("\xE2\x80\xA2 \xE2\x80\xA2 \xE2\x80\xA2")));
+
$rows = array();
+ $in_gap = false;
foreach ($block_list->newTwoUpLayout() as $row) {
list($old, $new) = $row;
if ($old) {
- $old_content = $old->newContentView();
$old_key = $old->getBlockKey();
$old_classes = $old->getClasses();
@@ -390,14 +403,14 @@
$old_classes[] = 'diff-flush';
$old_classes = implode(' ', $old_classes);
+
+ $is_visible = $old->getIsVisible();
} else {
- $old_content = null;
$old_key = null;
$old_classes = null;
}
if ($new) {
- $new_content = $new->newContentView();
$new_key = $new->getBlockKey();
$new_classes = $new->getClasses();
@@ -409,12 +422,56 @@
$new_classes[] = 'diff-flush';
$new_classes = implode(' ', $new_classes);
+
+ $is_visible = $new->getIsVisible();
} else {
- $new_content = null;
$new_key = null;
$new_classes = null;
}
+ if (!$is_visible) {
+ if (!$in_gap) {
+ $in_gap = true;
+ $rows[] = $gap_view;
+ }
+ continue;
+ }
+
+ if ($in_gap) {
+ $in_gap = false;
+ }
+
+ if ($old) {
+ $is_rem = ($old->getDifferenceType() === '-');
+ } else {
+ $is_rem = false;
+ }
+
+ if ($new) {
+ $is_add = ($new->getDifferenceType() === '+');
+ } else {
+ $is_add = false;
+ }
+
+ if ($is_rem && $is_add) {
+ list($old_content, $new_content) = array(
+ $old->newContentView(),
+ $new->newContentView(),
+ );
+ } else {
+ if ($old) {
+ $old_content = $old->newContentView();
+ } else {
+ $old_content = null;
+ }
+
+ if ($new) {
+ $new_content = $new->newContentView();
+ } else {
+ $new_content = null;
+ }
+ }
+
$old_inline_rows = array();
if ($old_key !== null) {
$old_inlines = idx($old_comments, $old_key, array());
diff --git a/src/applications/files/diff/PhabricatorDocumentEngineBlock.php b/src/applications/files/diff/PhabricatorDocumentEngineBlock.php
--- a/src/applications/files/diff/PhabricatorDocumentEngineBlock.php
+++ b/src/applications/files/diff/PhabricatorDocumentEngineBlock.php
@@ -8,6 +8,7 @@
private $classes = array();
private $differenceHash;
private $differenceType;
+ private $isVisible;
public function setContent($content) {
$this->content = $content;
@@ -58,4 +59,13 @@
return $this->differenceType;
}
+ public function setIsVisible($is_visible) {
+ $this->isVisible = $is_visible;
+ return $this;
+ }
+
+ public function getIsVisible() {
+ return $this->isVisible;
+ }
+
}
diff --git a/src/applications/files/diff/PhabricatorDocumentEngineBlocks.php b/src/applications/files/diff/PhabricatorDocumentEngineBlocks.php
--- a/src/applications/files/diff/PhabricatorDocumentEngineBlocks.php
+++ b/src/applications/files/diff/PhabricatorDocumentEngineBlocks.php
@@ -52,6 +52,9 @@
->parseHunksForLineData($changeset->getHunks())
->reparseHunksForSpecialAttributes();
+ $hunk_parser->generateVisibleLinesMask(2);
+ $mask = $hunk_parser->getVisibleLinesMask();
+
$old_lines = $hunk_parser->getOldLines();
$new_lines = $hunk_parser->getNewLines();
@@ -62,6 +65,15 @@
$old_line = idx($old_lines, $ii);
$new_line = idx($new_lines, $ii);
+ $is_visible = !empty($mask[$ii + 1]);
+
+ // TODO: There's currently a bug where one-line files get incorrectly
+ // masked. This causes images to completely fail to render. Just ignore
+ // the mask if it came back empty.
+ if (!$mask) {
+ $is_visible = true;
+ }
+
if ($old_line) {
$old_hash = rtrim($old_line['text'], "\n");
if (!strlen($old_hash)) {
@@ -69,7 +81,9 @@
$old_block = null;
} else {
$old_block = array_shift($old_map[$old_hash]);
- $old_block->setDifferenceType($old_line['type']);
+ $old_block
+ ->setDifferenceType($old_line['type'])
+ ->setIsVisible($is_visible);
}
} else {
$old_block = null;
@@ -81,7 +95,9 @@
$new_block = null;
} else {
$new_block = array_shift($new_map[$new_hash]);
- $new_block->setDifferenceType($new_line['type']);
+ $new_block
+ ->setDifferenceType($new_line['type'])
+ ->setIsVisible($is_visible);
}
} else {
$new_block = null;
diff --git a/src/applications/files/document/PhabricatorJupyterDocumentEngine.php b/src/applications/files/document/PhabricatorJupyterDocumentEngine.php
--- a/src/applications/files/document/PhabricatorJupyterDocumentEngine.php
+++ b/src/applications/files/document/PhabricatorJupyterDocumentEngine.php
@@ -307,7 +307,8 @@
return $this->newCodeOutputCell($cell);
}
- return $this->newRawCell(id(new PhutilJSON())->encodeFormatted($cell));
+ return $this->newRawCell(id(new PhutilJSON())
+ ->encodeFormatted($cell));
}
private function newRawCell($content) {
@@ -328,8 +329,9 @@
$content = array();
}
- $content = implode('', $content);
- $content = phutil_escape_html_newlines($content);
+ // TODO: This should ideally highlight as Markdown, but the "md"
+ // highlighter in Pygments is painfully slow and not terribly useful.
+ $content = $this->highlightLines($content, 'txt');
return array(
null,
@@ -514,15 +516,20 @@
return $label;
}
- private function highlightLines(array $lines) {
- $head = head($lines);
- $matches = null;
- if (preg_match('/^%%(.*)$/', $head, $matches)) {
- $restore = array_shift($lines);
- $lang = $matches[1];
+ private function highlightLines(array $lines, $force_language = null) {
+ if ($force_language === null) {
+ $head = head($lines);
+ $matches = null;
+ if (preg_match('/^%%(.*)$/', $head, $matches)) {
+ $restore = array_shift($lines);
+ $lang = $matches[1];
+ } else {
+ $restore = null;
+ $lang = 'py';
+ }
} else {
$restore = null;
- $lang = 'py';
+ $lang = $force_language;
}
$content = PhabricatorSyntaxHighlighter::highlightWithLanguage(
diff --git a/src/applications/paste/query/PhabricatorPasteQuery.php b/src/applications/paste/query/PhabricatorPasteQuery.php
--- a/src/applications/paste/query/PhabricatorPasteQuery.php
+++ b/src/applications/paste/query/PhabricatorPasteQuery.php
@@ -378,15 +378,15 @@
}
private function highlightSource($source, $title, $language) {
- if (empty($language)) {
- return PhabricatorSyntaxHighlighter::highlightWithFilename(
- $title,
- $source);
- } else {
- return PhabricatorSyntaxHighlighter::highlightWithLanguage(
- $language,
- $source);
- }
+ if (empty($language)) {
+ return PhabricatorSyntaxHighlighter::highlightWithFilename(
+ $title,
+ $source);
+ } else {
+ return PhabricatorSyntaxHighlighter::highlightWithLanguage(
+ $language,
+ $source);
+ }
}
public function getQueryApplicationClass() {
diff --git a/webroot/rsrc/css/phui/phui-property-list-view.css b/webroot/rsrc/css/phui/phui-property-list-view.css
--- a/webroot/rsrc/css/phui/phui-property-list-view.css
+++ b/webroot/rsrc/css/phui/phui-property-list-view.css
@@ -315,6 +315,16 @@
border-width: 0 1px;
}
+td.new .jupyter-cell-code-line {
+ background: {$new-background};
+ border-color: {$new-bright};
+}
+
+td.old .jupyter-cell-code-line {
+ background: {$old-background};
+ border-color: {$old-bright};
+}
+
.jupyter-cell-code-head {
border-top-width: 1px;
margin-top: 4px;
@@ -364,3 +374,7 @@
.jupyter-output-html {
background: {$sh-indigobackground};
}
+
+.jupyter-cell-markdown {
+ white-space: pre-wrap;
+}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Mar 15, 1:12 AM (1 w, 10 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7576670
Default Alt Text
D20844.id49696.diff (11 KB)
Attached To
Mode
D20844: Make basic Juypter notebook rendering improvements and roughly support folding unchanged context
Attached
Detach File
Event Timeline
Log In to Comment