Changeset View
Changeset View
Standalone View
Standalone View
webroot/rsrc/js/application/files/behavior-document-engine.js
Show First 20 Lines • Show All 46 Lines • ▼ Show 20 Lines | for (var ii = 0; ii < data.views.length; ii++) { | ||||
list.addItem(view); | list.addItem(view); | ||||
engines.push({ | engines.push({ | ||||
spec: spec, | spec: spec, | ||||
view: view | view: view | ||||
}); | }); | ||||
} | } | ||||
list.addItem( | |||||
new JX.PHUIXActionView() | |||||
.setDivider(true)); | |||||
var encode_item = new JX.PHUIXActionView() | |||||
.setName(data.encode.name) | |||||
.setIcon(data.encode.icon); | |||||
var onencode = JX.bind(null, function(data, e) { | |||||
e.prevent(); | |||||
if (encode_item.getDisabled()) { | |||||
return; | |||||
} | |||||
new JX.Workflow(data.encode.uri, {encoding: data.encode.value}) | |||||
.setHandler(function(r) { | |||||
data.encode.value = r.encoding; | |||||
onview(data); | |||||
}) | |||||
.start(); | |||||
menu.close(); | |||||
}, data); | |||||
encode_item.setHandler(onencode); | |||||
list.addItem(encode_item); | |||||
var highlight_item = new JX.PHUIXActionView() | |||||
.setName(data.highlight.name) | |||||
.setIcon(data.highlight.icon); | |||||
var onhighlight = JX.bind(null, function(data, e) { | |||||
e.prevent(); | |||||
if (highlight_item.getDisabled()) { | |||||
return; | |||||
} | |||||
new JX.Workflow(data.highlight.uri, {highlight: data.highlight.value}) | |||||
.setHandler(function(r) { | |||||
data.highlight.value = r.highlight; | |||||
onview(data); | |||||
}) | |||||
.start(); | |||||
menu.close(); | |||||
}, data); | |||||
highlight_item.setHandler(onhighlight); | |||||
list.addItem(highlight_item); | |||||
menu.setContent(list.getNode()); | menu.setContent(list.getNode()); | ||||
menu.listen('open', function() { | menu.listen('open', function() { | ||||
for (var ii = 0; ii < engines.length; ii++) { | for (var ii = 0; ii < engines.length; ii++) { | ||||
var engine = engines[ii]; | var engine = engines[ii]; | ||||
// Highlight the current rendering engine. | // Highlight the current rendering engine. | ||||
var is_selected = (engine.spec.viewKey == data.viewKey); | var is_selected = (engine.spec.viewKey == data.viewKey); | ||||
engine.view.setSelected(is_selected); | engine.view.setSelected(is_selected); | ||||
if (is_selected) { | |||||
encode_item.setDisabled(!engine.spec.canEncode); | |||||
highlight_item.setDisabled(!engine.spec.canHighlight); | |||||
} | |||||
} | } | ||||
}); | }); | ||||
data.menu = menu; | data.menu = menu; | ||||
menu.open(); | menu.open(); | ||||
} | } | ||||
function add_params(uri, data) { | |||||
uri = JX.$U(uri); | |||||
if (data.highlight.value) { | |||||
uri.setQueryParam('highlight', data.highlight.value); | |||||
} | |||||
if (data.encode.value) { | |||||
uri.setQueryParam('encode', data.encode.value); | |||||
} | |||||
return uri.toString(); | |||||
} | |||||
function onview(data, spec, immediate) { | function onview(data, spec, immediate) { | ||||
if (!spec) { | |||||
for (var ii = 0; ii < data.views.length; ii++) { | |||||
if (data.views[ii].viewKey == data.viewKey) { | |||||
spec = data.views[ii]; | |||||
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); | ||||
data.viewKey = spec.viewKey; | data.viewKey = spec.viewKey; | ||||
new JX.Request(spec.engineURI, handler) | var uri = add_params(spec.engineURI, data); | ||||
new JX.Request(uri, handler) | |||||
.send(); | .send(); | ||||
if (data.loadingView) { | if (data.loadingView) { | ||||
// If we're already showing "Loading...", immediately change it to | // If we're already showing "Loading...", immediately change it to | ||||
// show the new document type. | // show the new document type. | ||||
onloading(data, spec); | onloading(data, spec); | ||||
} else if (!immediate) { | } else if (!immediate) { | ||||
// Otherwise, grey out the document and show "Loading..." after a | // Otherwise, grey out the document and show "Loading..." after a | ||||
// short delay. This prevents the content from flickering when rendering | // short delay. This prevents the content from flickering when rendering | ||||
// is fast. | // is fast. | ||||
var viewport = JX.$(data.viewportID); | var viewport = JX.$(data.viewportID); | ||||
JX.DOM.alterClass(viewport, 'document-engine-in-flight', true); | JX.DOM.alterClass(viewport, 'document-engine-in-flight', true); | ||||
var load = JX.bind(null, onloading, data, spec); | var load = JX.bind(null, onloading, data, spec); | ||||
data.loadTimer = setTimeout(load, 333); | data.loadTimer = setTimeout(load, 333); | ||||
// Replace the URI with the URI for the specific rendering the user | // Replace the URI with the URI for the specific rendering the user | ||||
// has selected. | // has selected. | ||||
JX.History.replace(spec.viewURI); | |||||
var view_uri = add_params(spec.viewURI, data); | |||||
JX.History.replace(view_uri); | |||||
} | } | ||||
} | } | ||||
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); | ||||
Show All 24 Lines | JX.behavior('document-engine', function(config, statics) { | ||||
if (!statics.initialized) { | if (!statics.initialized) { | ||||
JX.Stratcom.listen('click', 'document-engine-view-dropdown', onmenu); | JX.Stratcom.listen('click', 'document-engine-view-dropdown', onmenu); | ||||
statics.initialized = true; | statics.initialized = true; | ||||
} | } | ||||
if (config && config.renderControlID) { | if (config && config.renderControlID) { | ||||
var control = JX.$(config.renderControlID); | var control = JX.$(config.renderControlID); | ||||
var data = JX.Stratcom.getData(control); | var data = JX.Stratcom.getData(control); | ||||
onview(data, null, true); | |||||
for (var ii = 0; ii < data.views.length; ii++) { | |||||
if (data.views[ii].viewKey == data.viewKey) { | |||||
onview(data, data.views[ii], true); | |||||
break; | |||||
} | |||||
} | |||||
} | } | ||||
}); | }); |