;
}
});
var ViewAuto = React.createClass({
propTypes: {
message: React.PropTypes.object.isRequired,
flow: React.PropTypes.object.isRequired,
},
statics: {
matches: function () {
return false; // don't match itself
},
findView: function (message) {
for (var i = 0; i < all.length; i++) {
if (all[i].matches(message)) {
return all[i];
}
}
return all[all.length - 1];
}
},
render: function () {
var { message, flow } = this.props
var View = ViewAuto.findView(this.props.message);
if (View.textView) {
return
} else {
return
}
}
});
var all = [ViewAuto, ViewImage, ViewJSON, ViewRaw];
var ContentEmpty = React.createClass({
render: function () {
var message_name = this.props.flow.request === this.props.message ? "request" : "response";
return
No {message_name} content.
;
}
});
var ContentMissing = React.createClass({
render: function () {
var message_name = this.props.flow.request === this.props.message ? "Request" : "Response";
return
{message_name} content missing.
;
}
});
var TooLarge = React.createClass({
statics: {
isTooLarge: function (message) {
var max_mb = ViewImage.matches(message) ? 10 : 0.2;
return message.contentLength > 1024 * 1024 * max_mb;
}
},
render: function () {
var size = formatSize(this.props.message.contentLength);
return
{size} content size.
;
}
});
var ViewSelector = React.createClass({
render: function () {
var views = [];
for (var i = 0; i < all.length; i++) {
var view = all[i];
var className = "btn btn-default";
if (view === this.props.active) {
className += " active";
}
var text;
if (view === ViewAuto) {
text = "auto: " + ViewAuto.findView(this.props.message).displayName.toLowerCase().replace("view", "");
} else {
text = view.displayName.toLowerCase().replace("view", "");
}
views.push(
);
}
return
{views}
;
}
});
var ContentView = React.createClass({
getInitialState: function () {
return {
displayLarge: false,
View: ViewAuto
};
},
propTypes: {
// It may seem a bit weird at the first glance:
// Every view takes the flow and the message as props, e.g.
//
flow: React.PropTypes.object.isRequired,
message: React.PropTypes.object.isRequired,
},
selectView: function (view) {
this.setState({
View: view
});
},
displayLarge: function () {
this.setState({displayLarge: true});
},
componentWillReceiveProps: function (nextProps) {
if (nextProps.message !== this.props.message) {
this.setState(this.getInitialState());
}
},
render: function () {
var { flow, message } = this.props
var message = this.props.message;
if (message.contentLength === 0) {
return ;
} else if (message.contentLength === null) {
return ;
} else if (!this.state.displayLarge && TooLarge.isTooLarge(message)) {
return ;
}
var downloadUrl = MessageUtils.getContentURL(this.props.flow, message);
return