Changeset View
Changeset View
Standalone View
Standalone View
webroot/rsrc/js/core/behavior-drag-and-drop-textarea.js
/** | /** | ||||
* @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) | ||||
.setChunkThreshold(config.chunkThreshold); | .setChunkThreshold(config.chunkThreshold); | ||||
drop.listen('didBeginDrag', function() { | drop.listen('didBeginDrag', function() { | ||||
JX.DOM.alterClass(target, config.activatedClass, true); | JX.DOM.alterClass(target, config.activatedClass, true); | ||||
}); | }); | ||||
drop.listen('didEndDrag', function() { | drop.listen('didEndDrag', function() { | ||||
JX.DOM.alterClass(target, config.activatedClass, false); | JX.DOM.alterClass(target, config.activatedClass, false); | ||||
}); | }); | ||||
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(); | ||||
} | } | ||||
}); | }); |
Content licensed under Creative Commons Attribution-ShareAlike 4.0 (CC-BY-SA) unless otherwise noted; code licensed under Apache 2.0 or other open source licenses. · CC BY-SA 4.0 · Apache 2.0