Page MenuHomePhabricator

D7943.id.diff
No OneTemporary

D7943.id.diff

Index: resources/celerity/map.php
===================================================================
--- resources/celerity/map.php
+++ resources/celerity/map.php
@@ -392,7 +392,7 @@
'rsrc/js/application/policy/behavior-policy-control.js' => 'c01153ea',
'rsrc/js/application/policy/behavior-policy-rule-editor.js' => '263aeb8c',
'rsrc/js/application/ponder/behavior-votebox.js' => '327dbe61',
- 'rsrc/js/application/projects/behavior-project-boards.js' => '9c9f91ec',
+ 'rsrc/js/application/projects/behavior-project-boards.js' => '1b9facd8',
'rsrc/js/application/projects/behavior-project-create.js' => '065227cc',
'rsrc/js/application/releeph/releeph-preview-branch.js' => '9eb2cedb',
'rsrc/js/application/releeph/releeph-request-state-change.js' => 'fe7fc914',
@@ -417,7 +417,7 @@
'rsrc/js/application/uiexample/notification-example.js' => 'c51a6616',
'rsrc/js/core/Busy.js' => '6453c869',
'rsrc/js/core/DragAndDropFileUpload.js' => 'ae6abfba',
- 'rsrc/js/core/DraggableList.js' => '14824eb5',
+ 'rsrc/js/core/DraggableList.js' => '1681c4d4',
'rsrc/js/core/DropdownMenu.js' => '2f6f80f4',
'rsrc/js/core/DropdownMenuItem.js' => '0f386ef4',
'rsrc/js/core/FileUpload.js' => '96713558',
@@ -603,7 +603,7 @@
'javelin-behavior-policy-control' => 'c01153ea',
'javelin-behavior-policy-rule-editor' => '263aeb8c',
'javelin-behavior-ponder-votebox' => '327dbe61',
- 'javelin-behavior-project-boards' => '9c9f91ec',
+ 'javelin-behavior-project-boards' => '1b9facd8',
'javelin-behavior-project-create' => '065227cc',
'javelin-behavior-refresh-csrf' => 'c4b31646',
'javelin-behavior-releeph-preview-branch' => '9eb2cedb',
@@ -675,7 +675,7 @@
'phabricator-countdown-css' => '86b7b0a0',
'phabricator-crumbs-view-css' => '2d9db584',
'phabricator-drag-and-drop-file-upload' => 'ae6abfba',
- 'phabricator-draggable-list' => '14824eb5',
+ 'phabricator-draggable-list' => '1681c4d4',
'phabricator-dropdown-menu' => '2f6f80f4',
'phabricator-fatal-config-template-css' => '25d446d6',
'phabricator-feed-css' => '4716c86f',
@@ -871,7 +871,7 @@
4 => 'javelin-util',
5 => 'phabricator-shaped-request',
),
- '14824eb5' =>
+ '1681c4d4' =>
array(
0 => 'javelin-install',
1 => 'javelin-dom',
@@ -898,6 +898,15 @@
1 => 'javelin-util',
2 => 'phabricator-keyboard-shortcut-manager',
),
+ '1b9facd8' =>
+ array(
+ 0 => 'javelin-behavior',
+ 1 => 'javelin-dom',
+ 2 => 'javelin-util',
+ 3 => 'javelin-stratcom',
+ 4 => 'javelin-workflow',
+ 5 => 'phabricator-draggable-list',
+ ),
'1e1c8a59' =>
array(
0 => 'javelin-behavior',
@@ -1400,13 +1409,6 @@
3 => 'javelin-vector',
4 => 'phabricator-hovercard',
),
- '9c9f91ec' =>
- array(
- 0 => 'javelin-behavior',
- 1 => 'javelin-dom',
- 2 => 'javelin-util',
- 3 => 'phabricator-draggable-list',
- ),
'9db3d160' =>
array(
0 => 'javelin-behavior',
Index: src/__phutil_library_map__.php
===================================================================
--- src/__phutil_library_map__.php
+++ src/__phutil_library_map__.php
@@ -1769,6 +1769,7 @@
'PhabricatorProjectHistoryController' => 'applications/project/controller/PhabricatorProjectHistoryController.php',
'PhabricatorProjectListController' => 'applications/project/controller/PhabricatorProjectListController.php',
'PhabricatorProjectMembersEditController' => 'applications/project/controller/PhabricatorProjectMembersEditController.php',
+ 'PhabricatorProjectMoveController' => 'applications/project/controller/PhabricatorProjectMoveController.php',
'PhabricatorProjectNameCollisionException' => 'applications/project/exception/PhabricatorProjectNameCollisionException.php',
'PhabricatorProjectPHIDTypeColumn' => 'applications/project/phid/PhabricatorProjectPHIDTypeColumn.php',
'PhabricatorProjectPHIDTypeProject' => 'applications/project/phid/PhabricatorProjectPHIDTypeProject.php',
@@ -3537,8 +3538,8 @@
'PHUITextExample' => 'PhabricatorUIExample',
'PHUITextView' => 'AphrontTagView',
'PHUIWorkboardExample' => 'PhabricatorUIExample',
- 'PHUIWorkboardView' => 'AphrontView',
- 'PHUIWorkpanelView' => 'AphrontView',
+ 'PHUIWorkboardView' => 'AphrontTagView',
+ 'PHUIWorkpanelView' => 'AphrontTagView',
'PackageCreateMail' => 'PackageMail',
'PackageDeleteMail' => 'PackageMail',
'PackageMail' => 'PhabricatorMail',
@@ -4387,6 +4388,7 @@
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
),
'PhabricatorProjectMembersEditController' => 'PhabricatorProjectController',
+ 'PhabricatorProjectMoveController' => 'PhabricatorProjectController',
'PhabricatorProjectNameCollisionException' => 'Exception',
'PhabricatorProjectPHIDTypeColumn' => 'PhabricatorPHIDType',
'PhabricatorProjectPHIDTypeProject' => 'PhabricatorPHIDType',
Index: src/applications/project/application/PhabricatorApplicationProject.php
===================================================================
--- src/applications/project/application/PhabricatorApplicationProject.php
+++ src/applications/project/application/PhabricatorApplicationProject.php
@@ -46,6 +46,7 @@
'PhabricatorProjectProfilePictureController',
'create/' => 'PhabricatorProjectCreateController',
'board/(?P<id>[1-9]\d*)/' => 'PhabricatorProjectBoardController',
+ 'move/(?P<id>[1-9]\d*)/' => 'PhabricatorProjectMoveController',
'board/(?P<projectID>[1-9]\d*)/edit/(?:(?P<id>\d+)/)?'
=> 'PhabricatorProjectBoardEditController',
'update/(?P<id>[1-9]\d*)/(?P<action>[^/]+)/'
Index: src/applications/project/controller/PhabricatorProjectBoardController.php
===================================================================
--- src/applications/project/controller/PhabricatorProjectBoardController.php
+++ src/applications/project/controller/PhabricatorProjectBoardController.php
@@ -72,6 +72,7 @@
'project-boards',
array(
'boardID' => $board_id,
+ 'moveURI' => $this->getApplicationURI('move/'.$project->getID().'/'),
));
foreach ($columns as $column) {
@@ -85,7 +86,11 @@
->setCards(true)
->setFlush(true)
->setAllowEmptyList(true)
- ->addSigil('project-column');
+ ->addSigil('project-column')
+ ->setMetadata(
+ array(
+ 'columnPHID' => $column->getPHID(),
+ ));
$task_phids = idx($task_map, $column->getPHID(), array());
foreach (array_select_keys($tasks, $task_phids) as $task) {
$cards->addItem($this->renderTaskCard($task));
@@ -164,6 +169,10 @@
->setGrippable($can_edit)
->setHref('/T'.$task->getID())
->addSigil('project-card')
+ ->setMetadata(
+ array(
+ 'objectPHID' => $task->getPHID(),
+ ))
->addAction(
id(new PHUIListItemView())
->setName(pht('Edit'))
Index: src/applications/project/controller/PhabricatorProjectMoveController.php
===================================================================
--- /dev/null
+++ src/applications/project/controller/PhabricatorProjectMoveController.php
@@ -0,0 +1,31 @@
+<?php
+
+final class PhabricatorProjectMoveController
+ extends PhabricatorProjectController {
+
+ private $id;
+
+ public function willProcessRequest(array $data) {
+ $this->id = $data['id'];
+ }
+
+ public function processRequest() {
+ $request = $this->getRequest();
+ $viewer = $request->getUser();
+
+ $project = id(new PhabricatorProjectQuery())
+ ->setViewer($viewer)
+ ->requireCapabilities(
+ array(
+ PhabricatorPolicyCapability::CAN_VIEW,
+ PhabricatorPolicyCapability::CAN_EDIT,
+ ))
+ ->withIDs(array($this->id))
+ ->executeOne();
+ if (!$project) {
+ return new Aphront404Response();
+ }
+
+ return id(new AphrontAjaxResponse())->setContent(array());
+ }
+}
Index: webroot/rsrc/js/application/projects/behavior-project-boards.js
===================================================================
--- webroot/rsrc/js/application/projects/behavior-project-boards.js
+++ webroot/rsrc/js/application/projects/behavior-project-boards.js
@@ -3,6 +3,8 @@
* @requires javelin-behavior
* javelin-dom
* javelin-util
+ * javelin-stratcom
+ * javelin-workflow
* phabricator-draggable-list
*/
@@ -16,6 +18,31 @@
JX.DOM.alterClass(node, 'project-column-empty', !this.findItems().length);
}
+ function onresponse(response) {
+
+ }
+
+ function ondrop(list, item, after, from) {
+ list.lock();
+ JX.DOM.alterClass(item, 'drag-sending', true);
+
+ var data = {
+ objectPHID: JX.Stratcom.getData(item).objectPHID,
+ columnPHID: JX.Stratcom.getData(list.getRootNode()).columnPHID,
+ afterPHID: after && JX.Stratcom.getData(after).objectPHID
+ };
+
+ var workflow = new JX.Workflow(config.moveURI, data)
+ .setHandler(function(response) {
+ onresponse(response);
+ list.unlock();
+
+ JX.DOM.alterClass(item, 'drag-sending', false);
+ });
+
+ workflow.start();
+ }
+
var lists = [];
var ii;
var cols = JX.DOM.scry(JX.$(config.boardID), 'ul', 'project-column');
@@ -27,6 +54,8 @@
list.listen('didSend', JX.bind(list, onupdate, cols[ii]));
list.listen('didReceive', JX.bind(list, onupdate, cols[ii]));
+ list.listen('didDrop', JX.bind(null, ondrop, list));
+
lists.push(list);
}
Index: webroot/rsrc/js/core/DraggableList.js
===================================================================
--- webroot/rsrc/js/core/DraggableList.js
+++ webroot/rsrc/js/core/DraggableList.js
@@ -420,6 +420,13 @@
},
lock : function() {
+ for (var ii = 0; ii < this._group.length; ii++) {
+ this._group[ii]._lock();
+ }
+ return this;
+ },
+
+ _lock : function() {
this._locked++;
if (this._locked === 1) {
this.invoke('didLock');
@@ -427,7 +434,14 @@
return this;
},
- unlock : function() {
+ unlock: function() {
+ for (var ii = 0; ii < this._group.length; ii++) {
+ this._group[ii]._unlock();
+ }
+ return this;
+ },
+
+ _unlock : function() {
if (__DEV__) {
if (!this._locked) {
JX.$E("JX.Draggable.unlock(): Draggable is not locked!");

File Metadata

Mime Type
text/plain
Expires
Wed, Mar 5, 2:32 PM (16 h, 5 m ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7225784
Default Alt Text
D7943.id.diff (10 KB)

Event Timeline