1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-09 16:32:39 +01:00

Add and use new RemarkupMetadata class

Summary:
Add a new RemarkupMetadata class and use with upload button as well as drag and drop pathways.

With this change, files are now attached automatically to the object. This this could solve
several issues, for example when a person uploads a file but only that author is able to see it.

Ref T15106

Test Plan:
- Drag and drop file, upload file with button. Check that both files are attached with "attachedFilePHIDs" values.
    - drop file in a Task description (now works)
    - drop file in a Task comment (now works)
    - drop file in an edited Task comment (still not supported)
- This was already tested in Wikimedia Foundation: https://phabricator.wikimedia.org/D1203

Reviewers: O1 Blessed Committers, avivey, Matthew

Reviewed By: O1 Blessed Committers, avivey, Matthew

Subscribers: MCPCN, avivey, speck, tobiaswiese, valerio.bozzolan, Matthew, Cigaryno

Tags: #remarkup

Maniphest Tasks: T15106

Differential Revision: https://we.phorge.it/D25052
This commit is contained in:
Dylan F 2023-04-23 23:35:27 +00:00
parent 7ed35123a3
commit 90f9da643d
5 changed files with 95 additions and 48 deletions

View file

@ -10,10 +10,10 @@ return array(
'conpherence.pkg.css' => '0e3cf785', 'conpherence.pkg.css' => '0e3cf785',
'conpherence.pkg.js' => '020aebcf', 'conpherence.pkg.js' => '020aebcf',
'core.pkg.css' => '2ba11212', 'core.pkg.css' => '2ba11212',
'core.pkg.js' => '66c49ca1', 'core.pkg.js' => '2eeda9e0',
'dark-console.pkg.js' => '187792c2', 'dark-console.pkg.js' => '187792c2',
'differential.pkg.css' => '609e63d4', 'differential.pkg.css' => '609e63d4',
'differential.pkg.js' => 'c60bec1b', 'differential.pkg.js' => 'f68ea9d1',
'diffusion.pkg.css' => '42c75c37', 'diffusion.pkg.css' => '42c75c37',
'diffusion.pkg.js' => '78c9885d', 'diffusion.pkg.js' => '78c9885d',
'maniphest.pkg.css' => '35995d6d', 'maniphest.pkg.css' => '35995d6d',
@ -461,6 +461,7 @@ return array(
'rsrc/js/core/MultirowRowManager.js' => '5b54c823', 'rsrc/js/core/MultirowRowManager.js' => '5b54c823',
'rsrc/js/core/Notification.js' => 'a9b91e3f', 'rsrc/js/core/Notification.js' => 'a9b91e3f',
'rsrc/js/core/Prefab.js' => '5793d835', 'rsrc/js/core/Prefab.js' => '5793d835',
'rsrc/js/core/RemarkupMetadata.js' => 'e40c4991',
'rsrc/js/core/ShapedRequest.js' => '995f5102', 'rsrc/js/core/ShapedRequest.js' => '995f5102',
'rsrc/js/core/TextAreaUtils.js' => 'f340a484', 'rsrc/js/core/TextAreaUtils.js' => 'f340a484',
'rsrc/js/core/Title.js' => '43bc9360', 'rsrc/js/core/Title.js' => '43bc9360',
@ -473,7 +474,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' => '3277c62d', 'rsrc/js/core/behavior-drag-and-drop-textarea.js' => '29e221f6',
'rsrc/js/core/behavior-fancy-datepicker.js' => 'b545d0a0', 'rsrc/js/core/behavior-fancy-datepicker.js' => 'b545d0a0',
'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',
@ -489,7 +490,7 @@ return array(
'rsrc/js/core/behavior-more.js' => '506aa3f4', 'rsrc/js/core/behavior-more.js' => '506aa3f4',
'rsrc/js/core/behavior-object-selector.js' => '98ef467f', 'rsrc/js/core/behavior-object-selector.js' => '98ef467f',
'rsrc/js/core/behavior-oncopy.js' => 'da8f5259', 'rsrc/js/core/behavior-oncopy.js' => 'da8f5259',
'rsrc/js/core/behavior-phabricator-remarkup-assist.js' => '54262396', 'rsrc/js/core/behavior-phabricator-remarkup-assist.js' => '6d347847',
'rsrc/js/core/behavior-read-only-warning.js' => 'b9109f8f', 'rsrc/js/core/behavior-read-only-warning.js' => 'b9109f8f',
'rsrc/js/core/behavior-redirect.js' => '407ee861', 'rsrc/js/core/behavior-redirect.js' => '407ee861',
'rsrc/js/core/behavior-refresh-csrf.js' => '46116c01', 'rsrc/js/core/behavior-refresh-csrf.js' => '46116c01',
@ -589,7 +590,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' => '3277c62d', 'javelin-behavior-aphront-drag-and-drop-textarea' => '29e221f6',
'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',
@ -653,7 +654,7 @@ return array(
'javelin-behavior-phabricator-notification-example' => '29819b75', 'javelin-behavior-phabricator-notification-example' => '29819b75',
'javelin-behavior-phabricator-object-selector' => '98ef467f', 'javelin-behavior-phabricator-object-selector' => '98ef467f',
'javelin-behavior-phabricator-oncopy' => 'da8f5259', 'javelin-behavior-phabricator-oncopy' => 'da8f5259',
'javelin-behavior-phabricator-remarkup-assist' => '54262396', 'javelin-behavior-phabricator-remarkup-assist' => '6d347847',
'javelin-behavior-phabricator-reveal-content' => 'b105a3a6', 'javelin-behavior-phabricator-reveal-content' => 'b105a3a6',
'javelin-behavior-phabricator-search-typeahead' => '1cb7d027', 'javelin-behavior-phabricator-search-typeahead' => '1cb7d027',
'javelin-behavior-phabricator-show-older-transactions' => '8b5c7d65', 'javelin-behavior-phabricator-show-older-transactions' => '8b5c7d65',
@ -800,6 +801,7 @@ return array(
'phabricator-phtize' => '2f1db1ed', 'phabricator-phtize' => '2f1db1ed',
'phabricator-prefab' => '5793d835', 'phabricator-prefab' => '5793d835',
'phabricator-remarkup-css' => '5baa3bd9', 'phabricator-remarkup-css' => '5baa3bd9',
'phabricator-remarkup-metadata' => 'e40c4991',
'phabricator-search-results-css' => '9ea70ace', 'phabricator-search-results-css' => '9ea70ace',
'phabricator-shaped-request' => '995f5102', 'phabricator-shaped-request' => '995f5102',
'phabricator-slowvote-css' => '1694baed', 'phabricator-slowvote-css' => '1694baed',
@ -1163,6 +1165,13 @@ return array(
'javelin-stratcom', 'javelin-stratcom',
'javelin-behavior', 'javelin-behavior',
), ),
'29e221f6' => array(
'javelin-behavior',
'javelin-dom',
'phabricator-drag-and-drop-file-upload',
'phabricator-textareautils',
'phabricator-remarkup-metadata',
),
'2a8b62d9' => array( '2a8b62d9' => array(
'multirow-row-manager', 'multirow-row-manager',
'javelin-install', 'javelin-install',
@ -1201,13 +1210,6 @@ 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',
@ -1424,17 +1426,6 @@ return array(
'541f81c3' => array( '541f81c3' => array(
'javelin-install', 'javelin-install',
), ),
54262396 => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'phabricator-phtize',
'phabricator-textareautils',
'javelin-workflow',
'javelin-vector',
'phuix-autocomplete',
'javelin-mask',
),
'548567f6' => array( '548567f6' => array(
'syntax-default-css', 'syntax-default-css',
), ),
@ -1575,6 +1566,18 @@ return array(
'javelin-install', 'javelin-install',
'javelin-util', 'javelin-util',
), ),
'6d347847' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'phabricator-phtize',
'phabricator-textareautils',
'phabricator-remarkup-metadata',
'javelin-workflow',
'javelin-vector',
'phuix-autocomplete',
'javelin-mask',
),
70245195 => array( 70245195 => array(
'javelin-behavior', 'javelin-behavior',
'javelin-stratcom', 'javelin-stratcom',
@ -2126,6 +2129,11 @@ return array(
'javelin-dom', 'javelin-dom',
'phuix-dropdown-menu', 'phuix-dropdown-menu',
), ),
'e40c4991' => array(
'javelin-install',
'javelin-dom',
'javelin-json',
),
'e4c7622a' => array( 'e4c7622a' => array(
'javelin-magical-init', 'javelin-magical-init',
'javelin-install', 'javelin-install',

View file

@ -128,6 +128,8 @@ final class PhabricatorRemarkupControl
'disabled' => $this->getDisabled(), 'disabled' => $this->getDisabled(),
'sendOnEnter' => $this->getSendOnEnter(), 'sendOnEnter' => $this->getSendOnEnter(),
'rootID' => $root_id, 'rootID' => $root_id,
'remarkupMetadataID' => $metadata_id,
'remarkupMetadataValue' => $metadata_value,
'autocompleteMap' => (object)array( 'autocompleteMap' => (object)array(
64 => array( // "@" 64 => array( // "@"
'datasourceURI' => $user_datasource->getDatasourceURI(), 'datasourceURI' => $user_datasource->getDatasourceURI(),

View file

@ -0,0 +1,49 @@
/**
* @requires javelin-install
* javelin-dom
* javelin-json
* @provides phabricator-remarkup-metadata
* @javelin
*/
JX.install('RemarkupMetadata', {
construct: function(metadataValue, metadataID) {
if (JX.RemarkupMetadata._metadataValue == null) {
JX.RemarkupMetadata._metadataValue = {};
}
if (!JX.RemarkupMetadata._metadataValue.hasOwnProperty(metadataID)) {
JX.RemarkupMetadata._metadataValue[metadataID] = metadataValue;
}
this._metadataNode = JX.$(metadataID);
this._metadataID = metadataID;
},
statics: {
_metadataValue: null
},
members: {
_metadataNode: null,
_metadataID: null,
_writeMetadata: function() {
this._metadataNode.value = JX.JSON.stringify(
JX.RemarkupMetadata._metadataValue[this._metadataID]);
},
getMetadata: function(key, default_value) {
if (JX.RemarkupMetadata._metadataValue[this._metadataID]
.hasOwnProperty(key)) {
return JX.RemarkupMetadata._metadataValue[this._metadataID][key];
}
return default_value;
},
setMetadata: function(key, value) {
JX.RemarkupMetadata._metadataValue[this._metadataID][key] = value;
this._writeMetadata();
}
}
});

View file

@ -2,36 +2,15 @@
* @provides javelin-behavior-aphront-drag-and-drop-textarea * @provides javelin-behavior-aphront-drag-and-drop-textarea
* @requires javelin-behavior * @requires javelin-behavior
* javelin-dom * javelin-dom
* javelin-json
* phabricator-drag-and-drop-file-upload * phabricator-drag-and-drop-file-upload
* phabricator-textareautils * phabricator-textareautils
* phabricator-remarkup-metadata
*/ */
JX.behavior('aphront-drag-and-drop-textarea', function(config) { JX.behavior('aphront-drag-and-drop-textarea', function(config) {
var target = JX.$(config.target); var target = JX.$(config.target);
var metadata_node = JX.$(config.remarkupMetadataID);
var metadata_value = config.remarkupMetadataValue;
function set_metadata(key, value) {
metadata_value[key] = value;
write_metadata();
}
function get_metadata(key, default_value) {
if (metadata_value.hasOwnProperty(key)) {
return metadata_value[key];
}
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)
@ -48,9 +27,11 @@ 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', []); var metadata = new JX.RemarkupMetadata(config.remarkupMetadataValue,
config.remarkupMetadataID);
var phids = metadata.getMetadata('attachedFilePHIDs', []);
phids.push(file.getPHID()); phids.push(file.getPHID());
set_metadata('attachedFilePHIDs', phids); metadata.setMetadata('attachedFilePHIDs', phids);
}); });
drop.start(); drop.start();

View file

@ -5,6 +5,7 @@
* javelin-dom * javelin-dom
* phabricator-phtize * phabricator-phtize
* phabricator-textareautils * phabricator-textareautils
* phabricator-remarkup-metadata
* javelin-workflow * javelin-workflow
* javelin-vector * javelin-vector
* phuix-autocomplete * phuix-autocomplete
@ -255,6 +256,12 @@ JX.behavior('phabricator-remarkup-assist', function(config) {
.setURI(file.uri); .setURI(file.uri);
JX.TextAreaUtils.insertFileReference(area, upload); JX.TextAreaUtils.insertFileReference(area, upload);
var metadata = new JX.RemarkupMetadata(
config.remarkupMetadataValue, config.remarkupMetadataID);
var phids = metadata.getMetadata('attachedFilePHIDs', []);
phids.push(file.phid);
metadata.setMetadata('attachedFilePHIDs', phids);
} }
}) })
.start(); .start();