Changeset View
Changeset View
Standalone View
Standalone View
webroot/rsrc/js/application/files/behavior-document-engine.js
Show First 20 Lines • Show All 145 Lines • ▼ Show 20 Lines | if (!spec) { | ||||
if (data.views[ii].viewKey == data.viewKey) { | if (data.views[ii].viewKey == data.viewKey) { | ||||
spec = data.views[ii]; | spec = data.views[ii]; | ||||
break; | break; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
data.sequence = (data.sequence || 0) + 1; | 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; | data.viewKey = spec.viewKey; | ||||
var uri = add_params(spec.engineURI, data); | var uri = add_params(spec.engineURI, data); | ||||
new JX.Request(uri, handler) | new JX.Request(uri, handler) | ||||
.send(); | .send(); | ||||
Show All 22 Lines | JX.behavior('document-engine', function(config, statics) { | ||||
function onloading(data, spec) { | function onloading(data, spec) { | ||||
data.loadingView = true; | data.loadingView = true; | ||||
var viewport = JX.$(data.viewportID); | var viewport = JX.$(data.viewportID); | ||||
JX.DOM.alterClass(viewport, 'document-engine-in-flight', false); | JX.DOM.alterClass(viewport, 'document-engine-in-flight', false); | ||||
JX.DOM.setContent(viewport, JX.$H(spec.loadingMarkup)); | 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 | // 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 | // happen if the user makes multiple selections from the menu while we are | ||||
// still rendering the first view. | // still rendering the first view. | ||||
if (sequence != data.sequence) { | if (sequence != data.sequence) { | ||||
return; | return; | ||||
} | } | ||||
if (data.loadTimer) { | if (data.loadTimer) { | ||||
clearTimeout(data.loadTimer); | clearTimeout(data.loadTimer); | ||||
data.loadTimer = null; | data.loadTimer = null; | ||||
} | } | ||||
var viewport = JX.$(data.viewportID); | var viewport = JX.$(data.viewportID); | ||||
JX.DOM.alterClass(viewport, 'document-engine-in-flight', false); | JX.DOM.alterClass(viewport, 'document-engine-in-flight', false); | ||||
data.loadingView = false; | data.loadingView = false; | ||||
JX.DOM.setContent(viewport, JX.$H(r.markup)); | 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) { | function blame(data) { | ||||
// If the rendering engine can't handle blame, bail. | |||||
if (!data.blame.uri) { | if (!data.blame.uri) { | ||||
return; | 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) { | if (!data.blame.value) { | ||||
new JX.Request(data.blame.uri, JX.bind(null, onblame, data)) | var req = new JX.Request(data.blame.uri, JX.bind(null, onblame, data)); | ||||
.send(); | data.blame.request = req; | ||||
req.send(); | |||||
return; | return; | ||||
} | } | ||||
// We're ready to render. | |||||
var viewport = JX.$(data.viewportID); | var viewport = JX.$(data.viewportID); | ||||
var cells = JX.DOM.scry(viewport, 'th'); | var cells = JX.DOM.scry(viewport, 'th'); | ||||
for (var ii = 0; ii < cells.length; ii++) { | for (var ii = 0; ii < cells.length; ii++) { | ||||
var cell = cells[ii]; | var cell = cells[ii]; | ||||
var spec = cell.getAttribute('data-blame'); | var spec = cell.getAttribute('data-blame'); | ||||
Show All 15 Lines | for (var ii = 0; ii < cells.length; ii++) { | ||||
break; | break; | ||||
} | } | ||||
JX.DOM.setContent(cell, content); | JX.DOM.setContent(cell, content); | ||||
} | } | ||||
} | } | ||||
function onblame(data, r) { | function onblame(data, r) { | ||||
data.blame.request = null; | |||||
data.blame.value = r; | data.blame.value = r; | ||||
blame(data); | blame(data); | ||||
} | } | ||||
function renderSkip(blame, lines) { | function renderSkip(blame, lines) { | ||||
var commit = blame.blame[lines - 1]; | var commit = blame.blame[lines - 1]; | ||||
if (!commit) { | if (!commit) { | ||||
return null; | return null; | ||||
Show All 38 Lines |