Page MenuHomePhabricator

D20300.diff
No OneTemporary

D20300.diff

diff --git a/resources/celerity/map.php b/resources/celerity/map.php
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -408,12 +408,12 @@
'rsrc/js/application/phortune/phortune-credit-card-form.js' => 'd12d214f',
'rsrc/js/application/policy/behavior-policy-control.js' => '0eaa33a9',
'rsrc/js/application/policy/behavior-policy-rule-editor.js' => '9347f172',
- 'rsrc/js/application/projects/WorkboardBoard.js' => 'ba6e36b0',
+ 'rsrc/js/application/projects/WorkboardBoard.js' => '2f893acd',
'rsrc/js/application/projects/WorkboardCard.js' => '0392a5d8',
'rsrc/js/application/projects/WorkboardCardTemplate.js' => '2a61f8d4',
'rsrc/js/application/projects/WorkboardColumn.js' => 'c344eb3c',
'rsrc/js/application/projects/WorkboardController.js' => '42c7a5a7',
- 'rsrc/js/application/projects/WorkboardDropEffect.js' => '101121be',
+ 'rsrc/js/application/projects/WorkboardDropEffect.js' => 'c808589e',
'rsrc/js/application/projects/WorkboardHeader.js' => '111bfd2d',
'rsrc/js/application/projects/WorkboardHeaderTemplate.js' => 'ebe83a6b',
'rsrc/js/application/projects/WorkboardOrderTemplate.js' => '03e8891f',
@@ -730,12 +730,12 @@
'javelin-view-renderer' => '9aae2b66',
'javelin-view-visitor' => '308f9fe4',
'javelin-websocket' => 'fdc13e4e',
- 'javelin-workboard-board' => 'ba6e36b0',
+ 'javelin-workboard-board' => '2f893acd',
'javelin-workboard-card' => '0392a5d8',
'javelin-workboard-card-template' => '2a61f8d4',
'javelin-workboard-column' => 'c344eb3c',
'javelin-workboard-controller' => '42c7a5a7',
- 'javelin-workboard-drop-effect' => '101121be',
+ 'javelin-workboard-drop-effect' => 'c808589e',
'javelin-workboard-header' => '111bfd2d',
'javelin-workboard-header-template' => 'ebe83a6b',
'javelin-workboard-order-template' => '03e8891f',
@@ -1003,10 +1003,6 @@
'javelin-workflow',
'phuix-icon-view',
),
- '101121be' => array(
- 'javelin-install',
- 'javelin-dom',
- ),
'111bfd2d' => array(
'javelin-install',
),
@@ -1170,6 +1166,18 @@
'phuix-autocomplete',
'javelin-mask',
),
+ '2f893acd' => array(
+ 'javelin-install',
+ 'javelin-dom',
+ 'javelin-util',
+ 'javelin-stratcom',
+ 'javelin-workflow',
+ 'phabricator-draggable-list',
+ 'javelin-workboard-column',
+ 'javelin-workboard-header-template',
+ 'javelin-workboard-card-template',
+ 'javelin-workboard-order-template',
+ ),
'308f9fe4' => array(
'javelin-install',
'javelin-util',
@@ -1880,18 +1888,6 @@
'javelin-uri',
'phabricator-notification',
),
- 'ba6e36b0' => array(
- 'javelin-install',
- 'javelin-dom',
- 'javelin-util',
- 'javelin-stratcom',
- 'javelin-workflow',
- 'phabricator-draggable-list',
- 'javelin-workboard-column',
- 'javelin-workboard-header-template',
- 'javelin-workboard-card-template',
- 'javelin-workboard-order-template',
- ),
'bdce4d78' => array(
'javelin-install',
'javelin-util',
@@ -1955,6 +1951,10 @@
'phuix-icon-view',
'phabricator-busy',
),
+ 'c808589e' => array(
+ 'javelin-install',
+ 'javelin-dom',
+ ),
'c8147a20' => array(
'javelin-behavior',
'javelin-dom',
diff --git a/src/applications/project/controller/PhabricatorProjectBoardViewController.php b/src/applications/project/controller/PhabricatorProjectBoardViewController.php
--- a/src/applications/project/controller/PhabricatorProjectBoardViewController.php
+++ b/src/applications/project/controller/PhabricatorProjectBoardViewController.php
@@ -655,6 +655,8 @@
$properties[$task->getPHID()] = array(
'points' => (double)$task->getPoints(),
'status' => $task->getStatus(),
+ 'priority' => (int)$task->getPriority(),
+ 'owner' => $task->getOwnerPHID(),
);
}
diff --git a/src/applications/project/icon/PhabricatorProjectDropEffect.php b/src/applications/project/icon/PhabricatorProjectDropEffect.php
--- a/src/applications/project/icon/PhabricatorProjectDropEffect.php
+++ b/src/applications/project/icon/PhabricatorProjectDropEffect.php
@@ -6,6 +6,7 @@
private $icon;
private $color;
private $content;
+ private $conditions = array();
public function setIcon($icon) {
$this->icon = $icon;
@@ -39,7 +40,22 @@
'icon' => $this->getIcon(),
'color' => $this->getColor(),
'content' => hsprintf('%s', $this->getContent()),
+ 'conditions' => $this->getConditions(),
);
}
+ public function addCondition($field, $operator, $value) {
+ $this->conditions[] = array(
+ 'field' => $field,
+ 'operator' => $operator,
+ 'value' => $value,
+ );
+
+ return $this;
+ }
+
+ public function getConditions() {
+ return $this->conditions;
+ }
+
}
diff --git a/src/applications/project/order/PhabricatorProjectColumnOwnerOrder.php b/src/applications/project/order/PhabricatorProjectColumnOwnerOrder.php
--- a/src/applications/project/order/PhabricatorProjectColumnOwnerOrder.php
+++ b/src/applications/project/order/PhabricatorProjectColumnOwnerOrder.php
@@ -171,6 +171,7 @@
$this->newEffect()
->setIcon($owner_icon)
->setColor($owner_color)
+ ->addCondition('owner', '!=', $owner_phid)
->setContent($effect_content));
}
diff --git a/src/applications/project/order/PhabricatorProjectColumnPriorityOrder.php b/src/applications/project/order/PhabricatorProjectColumnPriorityOrder.php
--- a/src/applications/project/order/PhabricatorProjectColumnPriorityOrder.php
+++ b/src/applications/project/order/PhabricatorProjectColumnPriorityOrder.php
@@ -68,6 +68,7 @@
$drop_effect = $this->newEffect()
->setIcon($priority_icon)
->setColor($priority_color)
+ ->addCondition('priority', '!=', $priority)
->setContent(
pht(
'Change priority to %s.',
diff --git a/src/applications/project/order/PhabricatorProjectColumnStatusOrder.php b/src/applications/project/order/PhabricatorProjectColumnStatusOrder.php
--- a/src/applications/project/order/PhabricatorProjectColumnStatusOrder.php
+++ b/src/applications/project/order/PhabricatorProjectColumnStatusOrder.php
@@ -75,6 +75,7 @@
$drop_effect = $this->newEffect()
->setIcon($status_icon)
->setColor($status_color)
+ ->addCondition('status', '!=', $status_key)
->setContent(
pht(
'Change status to %s.',
diff --git a/src/applications/project/trigger/PhabricatorProjectTriggerManiphestStatusRule.php b/src/applications/project/trigger/PhabricatorProjectTriggerManiphestStatusRule.php
--- a/src/applications/project/trigger/PhabricatorProjectTriggerManiphestStatusRule.php
+++ b/src/applications/project/trigger/PhabricatorProjectTriggerManiphestStatusRule.php
@@ -51,6 +51,7 @@
$this->newEffect()
->setIcon($status_icon)
->setColor($status_color)
+ ->addCondition('status', '!=', $value)
->setContent($content),
);
}
diff --git a/webroot/rsrc/js/application/projects/WorkboardBoard.js b/webroot/rsrc/js/application/projects/WorkboardBoard.js
--- a/webroot/rsrc/js/application/projects/WorkboardBoard.js
+++ b/webroot/rsrc/js/application/projects/WorkboardBoard.js
@@ -228,6 +228,17 @@
effects = effects.concat(header.getDropEffects());
}
+ var card_phid = JX.Stratcom.getData(src_node).objectPHID;
+ var card = src_column.getCard(card_phid);
+
+ var visible = [];
+ for (var ii = 0; ii < effects.length; ii++) {
+ if (effects[ii].isEffectVisibleForCard(card)) {
+ visible.push(effects[ii]);
+ }
+ }
+ effects = visible;
+
if (!effects.length) {
JX.DOM.remove(node);
return;
diff --git a/webroot/rsrc/js/application/projects/WorkboardDropEffect.js b/webroot/rsrc/js/application/projects/WorkboardDropEffect.js
--- a/webroot/rsrc/js/application/projects/WorkboardDropEffect.js
+++ b/webroot/rsrc/js/application/projects/WorkboardDropEffect.js
@@ -10,7 +10,8 @@
properties: {
icon: null,
color: null,
- content: null
+ content: null,
+ conditions: []
},
statics: {
@@ -18,7 +19,8 @@
return new JX.WorkboardDropEffect()
.setIcon(map.icon)
.setColor(map.color)
- .setContent(JX.$H(map.content));
+ .setContent(JX.$H(map.content))
+ .setConditions(map.conditions || []);
}
},
@@ -30,6 +32,32 @@
.getNode();
return JX.$N('li', {}, [icon, this.getContent()]);
+ },
+
+ isEffectVisibleForCard: function(card) {
+ var conditions = this.getConditions();
+
+ var properties = card.getProperties();
+ for (var ii = 0; ii < conditions.length; ii++) {
+ var condition = conditions[ii];
+
+ var field = properties[condition.field];
+ var value = condition.value;
+
+ var result = true;
+ switch (condition.operator) {
+ case '!=':
+ result = (field !== value);
+ break;
+ }
+
+ if (!result) {
+ return false;
+ }
+ }
+
+ return true;
}
+
}
});

File Metadata

Mime Type
text/plain
Expires
Tue, May 14, 3:08 AM (2 w, 16 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6287311
Default Alt Text
D20300.diff (9 KB)

Event Timeline