diff --git a/resources/celerity/map.php b/resources/celerity/map.php --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -390,7 +390,7 @@ 'rsrc/js/application/diffusion/behavior-pull-lastmodified.js' => 'f01586dc', 'rsrc/js/application/doorkeeper/behavior-doorkeeper-tag.js' => '1db13e70', 'rsrc/js/application/drydock/drydock-live-operation-status.js' => '901935ef', - 'rsrc/js/application/files/behavior-document-engine.js' => 'ac52a3be', + 'rsrc/js/application/files/behavior-document-engine.js' => 'ed539253', 'rsrc/js/application/files/behavior-icon-composer.js' => '8499b6ab', 'rsrc/js/application/files/behavior-launch-icon-composer.js' => '48086888', 'rsrc/js/application/harbormaster/behavior-harbormaster-log.js' => '191b4909', @@ -604,7 +604,7 @@ 'javelin-behavior-diffusion-jump-to' => '73d09eef', 'javelin-behavior-diffusion-locate-file' => '6d3e1947', 'javelin-behavior-diffusion-pull-lastmodified' => 'f01586dc', - 'javelin-behavior-document-engine' => 'ac52a3be', + 'javelin-behavior-document-engine' => 'ed539253', 'javelin-behavior-doorkeeper-tag' => '1db13e70', 'javelin-behavior-drydock-live-operation-status' => '901935ef', 'javelin-behavior-durable-column' => '2ae077e1', @@ -1764,11 +1764,6 @@ 'javelin-dom', 'javelin-typeahead-normalizer', ), - 'ac52a3be' => array( - 'javelin-behavior', - 'javelin-dom', - 'javelin-stratcom', - ), 'acd29eee' => array( 'javelin-behavior', 'javelin-stratcom', @@ -2121,6 +2116,11 @@ 'javelin-stratcom', 'javelin-vector', ), + 'ed539253' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-stratcom', + ), 'edf8a145' => array( 'javelin-behavior', 'javelin-uri', diff --git a/webroot/rsrc/js/application/files/behavior-document-engine.js b/webroot/rsrc/js/application/files/behavior-document-engine.js --- a/webroot/rsrc/js/application/files/behavior-document-engine.js +++ b/webroot/rsrc/js/application/files/behavior-document-engine.js @@ -151,7 +151,7 @@ } data.sequence = (data.sequence || 0) + 1; - var handler = JX.bind(null, onrender, data, data.sequence); + var handler = JX.bind(null, onrender, data, data.sequence, spec); data.viewKey = spec.viewKey; @@ -190,7 +190,7 @@ JX.DOM.setContent(viewport, JX.$H(spec.loadingMarkup)); } - function onrender(data, sequence, r) { + function onrender(data, sequence, spec, r) { // If this isn't the most recent request we sent, throw it away. This can // happen if the user makes multiple selections from the menu while we are // still rendering the first view. @@ -209,19 +209,34 @@ data.loadingView = false; JX.DOM.setContent(viewport, JX.$H(r.markup)); + + // If this engine supports rendering blame, populate or draw it. + if (spec.canBlame) { + blame(data); + } } function blame(data) { + // If the rendering engine can't handle blame, bail. if (!data.blame.uri) { return; } + // If we already have an outstanding request for blame data, bail. + if (data.blame.request) { + return; + } + + // If we don't have blame data yet, request it and then try rendering + // again later. if (!data.blame.value) { - new JX.Request(data.blame.uri, JX.bind(null, onblame, data)) - .send(); + var req = new JX.Request(data.blame.uri, JX.bind(null, onblame, data)); + data.blame.request = req; + req.send(); return; } + // We're ready to render. var viewport = JX.$(data.viewportID); var cells = JX.DOM.scry(viewport, 'th'); @@ -253,6 +268,7 @@ } function onblame(data, r) { + data.blame.request = null; data.blame.value = r; blame(data); }