mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-25 16:22:43 +01:00
Persist remarkup metadata in "VersionedDrafts" and record explicit file uploads
Summary: Ref T13603. Allow "VersionedDraft" to persist remarkup comment area metadata from stacked actions controls. When files are dragged and dropped, record them as explicit uploads in comment metadata. Test Plan: Dragged and dropped files into Remarkup stacked action text areas (e.g., in Maniphest), reloaded page, saw metadata persist across reloads. Maniphest Tasks: T13603 Differential Revision: https://secure.phabricator.com/D21828
This commit is contained in:
parent
33a0731619
commit
7693a711a7
4 changed files with 54 additions and 27 deletions
|
@ -13,7 +13,7 @@ return array(
|
||||||
'core.pkg.js' => 'd2de90d9',
|
'core.pkg.js' => 'd2de90d9',
|
||||||
'dark-console.pkg.js' => '187792c2',
|
'dark-console.pkg.js' => '187792c2',
|
||||||
'differential.pkg.css' => 'ffb69e3d',
|
'differential.pkg.css' => 'ffb69e3d',
|
||||||
'differential.pkg.js' => 'e31329dc',
|
'differential.pkg.js' => 'c60bec1b',
|
||||||
'diffusion.pkg.css' => '42c75c37',
|
'diffusion.pkg.css' => '42c75c37',
|
||||||
'diffusion.pkg.js' => '78c9885d',
|
'diffusion.pkg.js' => '78c9885d',
|
||||||
'maniphest.pkg.css' => '35995d6d',
|
'maniphest.pkg.css' => '35995d6d',
|
||||||
|
@ -473,7 +473,7 @@ return array(
|
||||||
'rsrc/js/core/behavior-copy.js' => 'cf32921f',
|
'rsrc/js/core/behavior-copy.js' => 'cf32921f',
|
||||||
'rsrc/js/core/behavior-detect-timezone.js' => '78bc5d94',
|
'rsrc/js/core/behavior-detect-timezone.js' => '78bc5d94',
|
||||||
'rsrc/js/core/behavior-device.js' => 'ac2b1e01',
|
'rsrc/js/core/behavior-device.js' => 'ac2b1e01',
|
||||||
'rsrc/js/core/behavior-drag-and-drop-textarea.js' => '7df68a45',
|
'rsrc/js/core/behavior-drag-and-drop-textarea.js' => '3277c62d',
|
||||||
'rsrc/js/core/behavior-fancy-datepicker.js' => '36821f8d',
|
'rsrc/js/core/behavior-fancy-datepicker.js' => '36821f8d',
|
||||||
'rsrc/js/core/behavior-form.js' => '55d7b788',
|
'rsrc/js/core/behavior-form.js' => '55d7b788',
|
||||||
'rsrc/js/core/behavior-gesture.js' => 'b58d1a2a',
|
'rsrc/js/core/behavior-gesture.js' => 'b58d1a2a',
|
||||||
|
@ -589,7 +589,7 @@ return array(
|
||||||
'javelin-behavior-aphlict-listen' => '4e61fa88',
|
'javelin-behavior-aphlict-listen' => '4e61fa88',
|
||||||
'javelin-behavior-aphlict-status' => 'c3703a16',
|
'javelin-behavior-aphlict-status' => 'c3703a16',
|
||||||
'javelin-behavior-aphront-basic-tokenizer' => '3b4899b0',
|
'javelin-behavior-aphront-basic-tokenizer' => '3b4899b0',
|
||||||
'javelin-behavior-aphront-drag-and-drop-textarea' => '7df68a45',
|
'javelin-behavior-aphront-drag-and-drop-textarea' => '3277c62d',
|
||||||
'javelin-behavior-aphront-form-disable-on-submit' => '55d7b788',
|
'javelin-behavior-aphront-form-disable-on-submit' => '55d7b788',
|
||||||
'javelin-behavior-aphront-more' => '506aa3f4',
|
'javelin-behavior-aphront-more' => '506aa3f4',
|
||||||
'javelin-behavior-audio-source' => '3dc5ad43',
|
'javelin-behavior-audio-source' => '3dc5ad43',
|
||||||
|
@ -1195,6 +1195,13 @@ return array(
|
||||||
'javelin-install',
|
'javelin-install',
|
||||||
'javelin-util',
|
'javelin-util',
|
||||||
),
|
),
|
||||||
|
'3277c62d' => array(
|
||||||
|
'javelin-behavior',
|
||||||
|
'javelin-dom',
|
||||||
|
'javelin-json',
|
||||||
|
'phabricator-drag-and-drop-file-upload',
|
||||||
|
'phabricator-textareautils',
|
||||||
|
),
|
||||||
'32db8374' => array(
|
'32db8374' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-stratcom',
|
'javelin-stratcom',
|
||||||
|
@ -1614,13 +1621,6 @@ return array(
|
||||||
'javelin-install',
|
'javelin-install',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
),
|
),
|
||||||
'7df68a45' => array(
|
|
||||||
'javelin-behavior',
|
|
||||||
'javelin-dom',
|
|
||||||
'javelin-json',
|
|
||||||
'phabricator-drag-and-drop-file-upload',
|
|
||||||
'phabricator-textareautils',
|
|
||||||
),
|
|
||||||
'80bff3af' => array(
|
'80bff3af' => array(
|
||||||
'javelin-install',
|
'javelin-install',
|
||||||
'javelin-typeahead-source',
|
'javelin-typeahead-source',
|
||||||
|
|
|
@ -1908,6 +1908,11 @@ abstract class PhabricatorEditEngine
|
||||||
|
|
||||||
$comment_text = $request->getStr('comment');
|
$comment_text = $request->getStr('comment');
|
||||||
|
|
||||||
|
$comment_metadata = $request->getStr('comment_metadata');
|
||||||
|
if (strlen($comment_metadata)) {
|
||||||
|
$comment_metadata = phutil_json_decode($comment_metadata);
|
||||||
|
}
|
||||||
|
|
||||||
$actions = $request->getStr('editengine.actions');
|
$actions = $request->getStr('editengine.actions');
|
||||||
if ($actions) {
|
if ($actions) {
|
||||||
$actions = phutil_json_decode($actions);
|
$actions = phutil_json_decode($actions);
|
||||||
|
@ -1923,10 +1928,9 @@ abstract class PhabricatorEditEngine
|
||||||
$viewer->getPHID(),
|
$viewer->getPHID(),
|
||||||
$current_version);
|
$current_version);
|
||||||
|
|
||||||
$is_empty = (!strlen($comment_text) && !$actions);
|
|
||||||
|
|
||||||
$draft
|
$draft
|
||||||
->setProperty('comment', $comment_text)
|
->setProperty('comment', $comment_text)
|
||||||
|
->setProperty('metadata', $comment_metadata)
|
||||||
->setProperty('actions', $actions)
|
->setProperty('actions', $actions)
|
||||||
->save();
|
->save();
|
||||||
|
|
||||||
|
|
|
@ -294,18 +294,39 @@ final class PhabricatorApplicationTransactionCommentView
|
||||||
}
|
}
|
||||||
|
|
||||||
private function renderCommentPanel() {
|
private function renderCommentPanel() {
|
||||||
|
$viewer = $this->getViewer();
|
||||||
|
|
||||||
|
$remarkup_control = id(new PhabricatorRemarkupControl())
|
||||||
|
->setViewer($viewer)
|
||||||
|
->setID($this->getCommentID())
|
||||||
|
->addClass('phui-comment-fullwidth-control')
|
||||||
|
->addClass('phui-comment-textarea-control')
|
||||||
|
->setCanPin(true)
|
||||||
|
->setName('comment');
|
||||||
|
|
||||||
$draft_comment = '';
|
$draft_comment = '';
|
||||||
|
$draft_metadata = array();
|
||||||
$draft_key = null;
|
$draft_key = null;
|
||||||
if ($this->getDraft()) {
|
|
||||||
$draft_comment = $this->getDraft()->getDraft();
|
$legacy_draft = $this->getDraft();
|
||||||
$draft_key = $this->getDraft()->getDraftKey();
|
if ($legacy_draft) {
|
||||||
|
$draft_comment = $legacy_draft->getDraft();
|
||||||
|
$draft_key = $legacy_draft->getDraftKey();
|
||||||
}
|
}
|
||||||
|
|
||||||
$versioned_draft = $this->getVersionedDraft();
|
$versioned_draft = $this->getVersionedDraft();
|
||||||
if ($versioned_draft) {
|
if ($versioned_draft) {
|
||||||
$draft_comment = $versioned_draft->getProperty('comment', '');
|
$draft_comment = $versioned_draft->getProperty(
|
||||||
|
'comment',
|
||||||
|
$draft_comment);
|
||||||
|
$draft_metadata = $versioned_draft->getProperty(
|
||||||
|
'metadata',
|
||||||
|
$draft_metadata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$remarkup_control->setValue($draft_comment);
|
||||||
|
$remarkup_control->setRemarkupMetadata($draft_metadata);
|
||||||
|
|
||||||
if (!$this->getObjectPHID()) {
|
if (!$this->getObjectPHID()) {
|
||||||
throw new PhutilInvalidStateException('setObjectPHID', 'render');
|
throw new PhutilInvalidStateException('setObjectPHID', 'render');
|
||||||
}
|
}
|
||||||
|
@ -314,7 +335,7 @@ final class PhabricatorApplicationTransactionCommentView
|
||||||
$version_value = $this->getCurrentVersion();
|
$version_value = $this->getCurrentVersion();
|
||||||
|
|
||||||
$form = id(new AphrontFormView())
|
$form = id(new AphrontFormView())
|
||||||
->setUser($this->getUser())
|
->setUser($viewer)
|
||||||
->addSigil('transaction-append')
|
->addSigil('transaction-append')
|
||||||
->setWorkflow(true)
|
->setWorkflow(true)
|
||||||
->setFullWidth($this->fullWidth)
|
->setFullWidth($this->fullWidth)
|
||||||
|
@ -465,15 +486,7 @@ final class PhabricatorApplicationTransactionCommentView
|
||||||
->setValue($this->getSubmitButtonName());
|
->setValue($this->getSubmitButtonName());
|
||||||
|
|
||||||
$form
|
$form
|
||||||
->appendChild(
|
->appendChild($remarkup_control)
|
||||||
id(new PhabricatorRemarkupControl())
|
|
||||||
->setID($this->getCommentID())
|
|
||||||
->addClass('phui-comment-fullwidth-control')
|
|
||||||
->addClass('phui-comment-textarea-control')
|
|
||||||
->setCanPin(true)
|
|
||||||
->setName('comment')
|
|
||||||
->setUser($this->getUser())
|
|
||||||
->setValue($draft_comment))
|
|
||||||
->appendChild(
|
->appendChild(
|
||||||
id(new AphrontFormSubmitControl())
|
id(new AphrontFormSubmitControl())
|
||||||
->addClass('phui-comment-fullwidth-control')
|
->addClass('phui-comment-fullwidth-control')
|
||||||
|
|
|
@ -16,7 +16,7 @@ JX.behavior('aphront-drag-and-drop-textarea', function(config) {
|
||||||
|
|
||||||
function set_metadata(key, value) {
|
function set_metadata(key, value) {
|
||||||
metadata_value[key] = value;
|
metadata_value[key] = value;
|
||||||
metadata_node.value = JX.JSON.stringify(metadata_value);
|
write_metadata();
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_metadata(key, default_value) {
|
function get_metadata(key, default_value) {
|
||||||
|
@ -26,6 +26,12 @@ JX.behavior('aphront-drag-and-drop-textarea', function(config) {
|
||||||
return default_value;
|
return default_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function write_metadata() {
|
||||||
|
metadata_node.value = JX.JSON.stringify(metadata_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
write_metadata();
|
||||||
|
|
||||||
if (JX.PhabricatorDragAndDropFileUpload.isSupported()) {
|
if (JX.PhabricatorDragAndDropFileUpload.isSupported()) {
|
||||||
var drop = new JX.PhabricatorDragAndDropFileUpload(target)
|
var drop = new JX.PhabricatorDragAndDropFileUpload(target)
|
||||||
.setURI(config.uri)
|
.setURI(config.uri)
|
||||||
|
@ -41,6 +47,10 @@ JX.behavior('aphront-drag-and-drop-textarea', function(config) {
|
||||||
|
|
||||||
drop.listen('didUpload', function(file) {
|
drop.listen('didUpload', function(file) {
|
||||||
JX.TextAreaUtils.insertFileReference(target, file);
|
JX.TextAreaUtils.insertFileReference(target, file);
|
||||||
|
|
||||||
|
var phids = get_metadata('attachedFilePHIDs', []);
|
||||||
|
phids.push(file.getPHID());
|
||||||
|
set_metadata('attachedFilePHIDs', phids);
|
||||||
});
|
});
|
||||||
|
|
||||||
drop.start();
|
drop.start();
|
||||||
|
|
Loading…
Reference in a new issue