2013-07-19 00:04:08 +02:00
|
|
|
/**
|
|
|
|
* @provides javelin-behavior-pholio-mock-edit
|
|
|
|
* @requires javelin-behavior
|
|
|
|
* javelin-stratcom
|
|
|
|
* javelin-dom
|
|
|
|
* javelin-workflow
|
|
|
|
* phabricator-phtize
|
|
|
|
* phabricator-drag-and-drop-file-upload
|
|
|
|
*/
|
|
|
|
JX.behavior('pholio-mock-edit', function(config) {
|
|
|
|
var pht = JX.phtize(config.pht);
|
|
|
|
|
|
|
|
var nodes = {
|
|
|
|
list: JX.$(config.listID),
|
|
|
|
drop: JX.$(config.dropID)
|
|
|
|
};
|
|
|
|
|
|
|
|
var uploading = [];
|
|
|
|
|
|
|
|
var drop = new JX.PhabricatorDragAndDropFileUpload(nodes.drop)
|
|
|
|
.setURI(config.uploadURI);
|
|
|
|
|
|
|
|
drop.listen('didBeginDrag', function(e) {
|
|
|
|
JX.DOM.alterClass(nodes.drop, 'pholio-drop-active', true);
|
|
|
|
});
|
|
|
|
|
|
|
|
drop.listen('didEndDrag', function(e) {
|
|
|
|
JX.DOM.alterClass(nodes.drop, 'pholio-drop-active', false);
|
|
|
|
});
|
|
|
|
|
|
|
|
drop.listen('willUpload', function(file) {
|
2013-07-19 17:50:49 +02:00
|
|
|
var node = render_uploading();
|
2013-07-19 00:04:08 +02:00
|
|
|
uploading.push({node: node, file: file});
|
|
|
|
nodes.list.appendChild(node);
|
|
|
|
});
|
|
|
|
|
|
|
|
drop.listen('didUpload', function(file) {
|
|
|
|
var node;
|
|
|
|
for (var ii = 0; ii < uploading.length; ii++) {
|
|
|
|
if (uploading[ii].file === file) {
|
|
|
|
node = uploading[ii].node;
|
|
|
|
uploading.splice(ii, 1);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
JX.DOM.setContent(node, pht('uploaded'));
|
|
|
|
|
|
|
|
new JX.Workflow(config.renderURI, {filePHID: file.getPHID()})
|
|
|
|
.setHandler(function(response) {
|
|
|
|
JX.DOM.replace(node, JX.$H(response.markup));
|
|
|
|
})
|
|
|
|
.start();
|
|
|
|
});
|
|
|
|
|
|
|
|
drop.start();
|
|
|
|
|
|
|
|
|
|
|
|
/* -( Deleting Images )---------------------------------------------------- */
|
|
|
|
|
2013-07-19 17:50:49 +02:00
|
|
|
|
|
|
|
// When the user clicks the "X" on an image, we replace it with a "click to
|
|
|
|
// undo" element. If they click to undo, we put the original node back in the
|
|
|
|
// DOM.
|
2013-07-19 00:04:08 +02:00
|
|
|
JX.Stratcom.listen('click', 'pholio-drop-remove', function(e) {
|
|
|
|
e.kill();
|
2013-07-19 17:50:49 +02:00
|
|
|
|
|
|
|
var node = e.getNode('pholio-drop-image');
|
|
|
|
var undo = render_undo();
|
|
|
|
|
|
|
|
JX.DOM.listen(undo, 'click', 'pholio-drop-undo', function(e) {
|
|
|
|
e.kill();
|
|
|
|
JX.DOM.replace(undo, node);
|
|
|
|
});
|
|
|
|
|
|
|
|
JX.DOM.replace(node, undo);
|
2013-07-19 00:04:08 +02:00
|
|
|
});
|
|
|
|
|
2013-07-19 17:50:49 +02:00
|
|
|
|
|
|
|
/* -( Rendering )---------------------------------------------------------- */
|
|
|
|
|
|
|
|
|
|
|
|
var render_uploading = function() {
|
|
|
|
return JX.$N(
|
|
|
|
'div',
|
|
|
|
{className: 'pholio-drop-uploading'},
|
|
|
|
pht('uploading'));
|
|
|
|
};
|
|
|
|
|
|
|
|
var render_undo = function() {
|
|
|
|
var link = JX.$N(
|
|
|
|
'a',
|
|
|
|
{href: '#', sigil: 'pholio-drop-undo'},
|
|
|
|
pht('undo'));
|
|
|
|
|
|
|
|
return JX.$N(
|
|
|
|
'div',
|
|
|
|
{className: 'pholio-drop-undo'},
|
|
|
|
[pht('removed'), ' ', link]);
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2013-07-19 00:04:08 +02:00
|
|
|
});
|