Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F14709180
D12739.id30609.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
11 KB
Referenced Files
None
Subscribers
None
D12739.id30609.diff
View Options
diff --git a/resources/celerity/map.php b/resources/celerity/map.php
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -8,7 +8,7 @@
return array(
'names' => array(
'core.pkg.css' => 'ca3f6a60',
- 'core.pkg.js' => 'e9484a4e',
+ 'core.pkg.js' => '96aab909',
'darkconsole.pkg.js' => 'e7393ebb',
'differential.pkg.css' => 'bb338e4b',
'differential.pkg.js' => '3cfa26f9',
@@ -205,7 +205,7 @@
'rsrc/externals/javelin/lib/JSON.js' => '69adf288',
'rsrc/externals/javelin/lib/Leader.js' => '331b1611',
'rsrc/externals/javelin/lib/Mask.js' => '8a41885b',
- 'rsrc/externals/javelin/lib/Quicksand.js' => '977e1f47',
+ 'rsrc/externals/javelin/lib/Quicksand.js' => '4cebc641',
'rsrc/externals/javelin/lib/Request.js' => '94b750d2',
'rsrc/externals/javelin/lib/Resource.js' => '44959b73',
'rsrc/externals/javelin/lib/Routable.js' => 'b3e7d692',
@@ -397,8 +397,8 @@
'rsrc/js/application/owners/owners-path-editor.js' => '7a68dda3',
'rsrc/js/application/passphrase/passphrase-credential-control.js' => '3cb0b2fc',
'rsrc/js/application/phame/phame-post-preview.js' => 'be807912',
- 'rsrc/js/application/pholio/behavior-pholio-mock-edit.js' => '9c2623f4',
- 'rsrc/js/application/pholio/behavior-pholio-mock-view.js' => 'a4fc6fe5',
+ 'rsrc/js/application/pholio/behavior-pholio-mock-edit.js' => '246dc085',
+ 'rsrc/js/application/pholio/behavior-pholio-mock-view.js' => 'fbe497e7',
'rsrc/js/application/phortune/behavior-stripe-payment-form.js' => '3f5d6dbf',
'rsrc/js/application/phortune/behavior-test-payment-form.js' => 'fc91ab6c',
'rsrc/js/application/phortune/phortune-credit-card-form.js' => '2290aeef',
@@ -626,8 +626,8 @@
'javelin-behavior-phabricator-transaction-list' => '13c739ea',
'javelin-behavior-phabricator-watch-anchor' => '9f36c42d',
'javelin-behavior-phame-post-preview' => 'be807912',
- 'javelin-behavior-pholio-mock-edit' => '9c2623f4',
- 'javelin-behavior-pholio-mock-view' => 'a4fc6fe5',
+ 'javelin-behavior-pholio-mock-edit' => '246dc085',
+ 'javelin-behavior-pholio-mock-view' => 'fbe497e7',
'javelin-behavior-phui-object-box-tabs' => '2bfa2836',
'javelin-behavior-phui-timeline-dropdown-menu' => '4d94d9c3',
'javelin-behavior-policy-control' => '9a340b3d',
@@ -668,7 +668,7 @@
'javelin-leader' => '331b1611',
'javelin-magical-init' => '3010e992',
'javelin-mask' => '8a41885b',
- 'javelin-quicksand' => '977e1f47',
+ 'javelin-quicksand' => '4cebc641',
'javelin-reactor' => '2b8de964',
'javelin-reactor-dom' => 'c90a04fc',
'javelin-reactor-node-calmer' => '76f4ebed',
@@ -972,6 +972,16 @@
'javelin-workflow',
'javelin-util',
),
+ '246dc085' => array(
+ 'javelin-behavior',
+ 'javelin-stratcom',
+ 'javelin-dom',
+ 'javelin-workflow',
+ 'javelin-quicksand',
+ 'phabricator-phtize',
+ 'phabricator-drag-and-drop-file-upload',
+ 'phabricator-draggable-list',
+ ),
'2529c82d' => array(
'javelin-dom',
'javelin-util',
@@ -1117,6 +1127,9 @@
'javelin-request',
'javelin-util',
),
+ '4cebc641' => array(
+ 'javelin-install',
+ ),
'4d94d9c3' => array(
'javelin-behavior',
'javelin-stratcom',
@@ -1578,9 +1591,6 @@
'javelin-resource',
'javelin-routable',
),
- '977e1f47' => array(
- 'javelin-install',
- ),
'988040b4' => array(
'javelin-install',
'javelin-dom',
@@ -1595,15 +1605,6 @@
'phuix-action-view',
'javelin-workflow',
),
- '9c2623f4' => array(
- 'javelin-behavior',
- 'javelin-stratcom',
- 'javelin-dom',
- 'javelin-workflow',
- 'phabricator-phtize',
- 'phabricator-drag-and-drop-file-upload',
- 'phabricator-draggable-list',
- ),
'9f36c42d' => array(
'javelin-behavior',
'javelin-stratcom',
@@ -1650,20 +1651,6 @@
'javelin-uri',
'phabricator-notification',
),
- 'a4fc6fe5' => array(
- 'javelin-behavior',
- 'javelin-util',
- 'javelin-stratcom',
- 'javelin-dom',
- 'javelin-vector',
- 'javelin-magical-init',
- 'javelin-request',
- 'javelin-history',
- 'javelin-workflow',
- 'javelin-mask',
- 'javelin-behavior-device',
- 'phabricator-keyboard-shortcut',
- ),
'a80d0378' => array(
'javelin-behavior',
'javelin-stratcom',
@@ -2022,6 +2009,20 @@
'javelin-vector',
'javelin-magical-init',
),
+ 'fbe497e7' => array(
+ 'javelin-behavior',
+ 'javelin-util',
+ 'javelin-stratcom',
+ 'javelin-dom',
+ 'javelin-vector',
+ 'javelin-magical-init',
+ 'javelin-request',
+ 'javelin-history',
+ 'javelin-workflow',
+ 'javelin-mask',
+ 'javelin-behavior-device',
+ 'phabricator-keyboard-shortcut',
+ ),
'fc91ab6c' => array(
'javelin-behavior',
'javelin-dom',
diff --git a/src/applications/pholio/controller/PholioMockEditController.php b/src/applications/pholio/controller/PholioMockEditController.php
--- a/src/applications/pholio/controller/PholioMockEditController.php
+++ b/src/applications/pholio/controller/PholioMockEditController.php
@@ -383,6 +383,8 @@
$form_box,
);
+ $this->addExtraQuicksandConfig(
+ array('mockEditConfig' => true));
return $this->buildApplicationPage(
$content,
array(
diff --git a/webroot/rsrc/externals/javelin/lib/Quicksand.js b/webroot/rsrc/externals/javelin/lib/Quicksand.js
--- a/webroot/rsrc/externals/javelin/lib/Quicksand.js
+++ b/webroot/rsrc/externals/javelin/lib/Quicksand.js
@@ -25,7 +25,7 @@
JX.install('Quicksand', {
statics: {
- _id: 0,
+ _id: null,
_onpage: 0,
_cursor: 0,
_current: 0,
@@ -71,7 +71,11 @@
getCurrentPageID: function() {
- return JX.Quicksand._id;
+ var self = JX.Quicksand;
+ if (self._id === null) {
+ self._id = window.history.state || 0;
+ }
+ return self._id;
},
/**
diff --git a/webroot/rsrc/js/application/pholio/behavior-pholio-mock-edit.js b/webroot/rsrc/js/application/pholio/behavior-pholio-mock-edit.js
--- a/webroot/rsrc/js/application/pholio/behavior-pholio-mock-edit.js
+++ b/webroot/rsrc/js/application/pholio/behavior-pholio-mock-edit.js
@@ -4,19 +4,13 @@
* javelin-stratcom
* javelin-dom
* javelin-workflow
+ * javelin-quicksand
* phabricator-phtize
* phabricator-drag-and-drop-file-upload
* phabricator-draggable-list
*/
-JX.behavior('pholio-mock-edit', function(config) {
+JX.behavior('pholio-mock-edit', function(config, statics) {
var pht = JX.phtize(config.pht);
-
- var nodes = {
- list: JX.$(config.listID),
- drop: JX.$(config.dropID),
- order: JX.$(config.orderID)
- };
-
var uploading = [];
@@ -26,7 +20,7 @@
// 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.
- JX.Stratcom.listen('click', 'pholio-drop-remove', function(e) {
+ var pholio_drop_remove = function(e) {
e.kill();
var node = e.getNode('pholio-drop-image');
@@ -40,37 +34,39 @@
JX.DOM.replace(node, undo);
synchronize_order();
- });
+ };
/* -( Reordering Images )-------------------------------------------------- */
- var draglist = new JX.DraggableList('pholio-drop-image', nodes.list)
- .setGhostNode(JX.$N('div', {className: 'drag-ghost'}))
- .setFindItemsHandler(function() {
- return JX.DOM.scry(nodes.list, 'div', 'pholio-drop-image');
- });
-
- // Only let the user drag images by the handle, not the whole entry.
- draglist.listen('shouldBeginDrag', function(e) {
- if (!e.getNode('pholio-drag-handle')) {
- JX.Stratcom.context().prevent();
- }
- });
-
// Reflect the display order in a hidden input.
var synchronize_order = function() {
- var items = draglist.findItems();
+ var items = statics.draglist.findItems();
var order = [];
for (var ii = 0; ii < items.length; ii++) {
order.push(JX.Stratcom.getData(items[ii]).filePHID);
}
- nodes.order.value = order.join(',');
+ statics.nodes.order.value = order.join(',');
};
- draglist.listen('didDrop', synchronize_order);
- synchronize_order();
+
+ var build_draglist = function(node) {
+ var draglist = new JX.DraggableList('pholio-drop-image', node)
+ .setGhostNode(JX.$N('div', {className: 'drag-ghost'}))
+ .setFindItemsHandler(function() {
+ return JX.DOM.scry(node, 'div', 'pholio-drop-image');
+ });
+
+ // Only let the user drag images by the handle, not the whole entry.
+ draglist.listen('shouldBeginDrag', function(e) {
+ if (!e.getNode('pholio-drag-handle')) {
+ JX.Stratcom.context().prevent();
+ }
+ });
+ draglist.listen('didDrop', synchronize_order);
+ return draglist;
+ };
/* -( Build )-------------------------------------------------------------- */
@@ -97,7 +93,7 @@
drop.listen('willUpload', function(file) {
var node = render_uploading();
uploading.push({node: node, file: file});
- nodes.list.appendChild(node);
+ statics.nodes.list.appendChild(node);
});
drop.listen('didUpload', function(file) {
@@ -191,7 +187,55 @@
/* -( Init )--------------------------------------------------------------- */
- build_add_control(nodes.drop);
- build_list_controls(nodes.list);
+ function update_statics(data, page_id, no_build) {
+ statics.nodes = {
+ list: JX.$(data.listID),
+ drop: JX.$(data.dropID),
+ order: JX.$(data.orderID)
+ };
+
+ if (!statics.mockEditCache[page_id]) {
+ statics.mockEditCache[page_id] = {};
+ }
+ statics.mockEditCache[page_id].config = config;
+ statics.mockEditCache[page_id].nodes = statics.nodes;
+
+ if (no_build !== true) {
+ build_add_control(statics.nodes.drop);
+ build_list_controls(statics.nodes.list);
+ statics.draglist = build_draglist(statics.nodes.list);
+ statics.mockEditCache[page_id].draglist = statics.draglist;
+ } else {
+ statics.draglist = statics.mockEditCache[page_id].draglist;
+ }
+ synchronize_order();
+ }
+
+ function install() {
+ statics.mockEditCache = {};
+ JX.Stratcom.listen('click', 'pholio-drop-remove', pholio_drop_remove);
+ JX.Stratcom.listen(
+ 'quicksand-redraw',
+ null,
+ function (e) {
+ e.kill();
+
+ var data = e.getData();
+ if (!data.newResponse.mockEditConfig) {
+ return;
+ }
+ if (data.fromServer) {
+ // we ran update_statics(config) below already
+ } else {
+ var page_id = data.newResponseID;
+ var new_config = statics.mockEditCache[page_id].config;
+ update_statics(new_config, page_id, true);
+ }
+ });
+ return true;
+ }
+
+ statics.installed = statics.installed || install();
+ update_statics(config, JX.Quicksand.getCurrentPageID(), false);
});
diff --git a/webroot/rsrc/js/application/pholio/behavior-pholio-mock-view.js b/webroot/rsrc/js/application/pholio/behavior-pholio-mock-view.js
--- a/webroot/rsrc/js/application/pholio/behavior-pholio-mock-view.js
+++ b/webroot/rsrc/js/application/pholio/behavior-pholio-mock-view.js
@@ -233,6 +233,10 @@
}
function redraw_inlines(id) {
+ if (!statics.enabled) {
+ return;
+ }
+
if (!active_image) {
return;
}
@@ -306,6 +310,10 @@
}
function redraw_selection() {
+ if (!statics.enabled) {
+ return;
+ }
+
var classes = ['pholio-mock-reticle-selection'];
selection_reticle = selection_reticle || render_reticle(classes, '');
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Jan 18, 12:31 PM (11 h, 56 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7001762
Default Alt Text
D12739.id30609.diff (11 KB)
Attached To
Mode
D12739: Quicksand and Pholio - make mock edit work
Attached
Detach File
Event Timeline
Log In to Comment