added hints from mhils

This commit is contained in:
Clemens 2016-08-09 08:40:24 +02:00
parent ab322f0be4
commit adfdcc9391
10 changed files with 63987 additions and 677 deletions

View File

@ -345,24 +345,6 @@ class FlowContentView(RequestHandler):
def get(self, flow_id, message, content_view):
message = getattr(self.flow, message)
original_cd = message.headers.get("Content-Disposition", None)
filename = None
if original_cd:
filename = re.search("filename=([\w\" \.\-\(\)]+)", original_cd)
if filename:
filename = filename.group(1)
if not filename:
filename = self.flow.request.path.split("?")[0].split("/")[-1]
filename = re.sub(r"[^\w\" \.\-\(\)]", "", filename)
cd = "attachment; filename={}".format(filename)
self.set_header("Content-Disposition", cd)
self.set_header("Content-Type", "application/json")
self.set_header("X-Content-Type-Options", "nosniff")
self.set_header("X-Frame-Options", "DENY")
self.set_header("Content-Encoding", "")
description, lines, error = contentviews.get_message_content_view(
contentviews.get(content_view.replace('_', ' ')), message
)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -14,7 +14,9 @@
}
section {
padding: 5px 12px;
display: flex;
flex-direction: column;
padding: 0 !important;
}
.first-line {
@ -40,25 +42,20 @@
margin: 0 0 5px;
}
article {
overflow: auto;
padding: 5px 12px 0;
}
footer {
box-shadow: 0 0 3px gray;
padding: 2px;
margin: 0;
height:23px;
}
}
.flowview-container{
display: flex;
flex-direction: column;
padding: 0 !important;
}
.flowview-body{
overflow: auto;
padding: 5px 12px 0;
}
.flowview-footer{
box-shadow: 0 0 3px gray;
padding: 2px;
margin: 0;
height:23px;
}
.inline-input {
display: inline;

View File

@ -37,6 +37,7 @@ class ViewServer extends Component {
componentWillMount(){
this.setContentView(this.props)
}
componentWillReceiveProps(nextProps){
this.setContentView(nextProps)
}

View File

@ -14,7 +14,7 @@ ShowFullContentButton.propTypes = {
function ShowFullContentButton ( {setShowFullContent, showFullContent} ){
return (
!showFullContent && <Button className="view-all-content-btn" isXs={true} onClick={() => setShowFullContent(true)} text="Show full content"/>
!showFullContent && <Button className="view-all-content-btn btn-xs" onClick={() => setShowFullContent(true)} text="Show full content"/>
)
}

View File

@ -2,8 +2,7 @@ import React, { PropTypes, Component } from 'react'
import classnames from 'classnames'
import { connect } from 'react-redux'
import * as ContentViews from './ContentViews'
import { setContentView, setContentViewSelectorOpen } from "../../ducks/ui/flow";
import { setContentView } from "../../ducks/ui/flow";
function ViewItem({ name, setContentView, children }) {
return (
@ -29,24 +28,25 @@ class ViewSelector extends Component {
constructor(props, context) {
super(props, context)
this.close = this.close.bind(this)
this.state = {open: false}
}
close() {
this.props.setContentViewSelectorOpen(false)
this.setState({open: false})
document.removeEventListener('click', this.close)
}
onDropdown(e){
e.preventDefault()
this.props.setContentViewSelectorOpen(!this.props.isContentViewSelectorOpen)
this.setState({open: !this.state.open})
document.addEventListener('click', this.close)
}
render() {
const {contentViews, activeView, isEdit, isContentViewSelectorOpen, setContentViewSelectorOpen, setContentView} = this.props
const {contentViews, activeView, isEdit, setContentView} = this.props
let edit = ContentViews.Edit.displayName
return (
<div className={classnames('dropup pull-left', { open: isContentViewSelectorOpen })}>
<div className={classnames('dropup pull-left', { open: this.state.open })}>
<a className="btn btn-default btn-xs"
onClick={ e => this.onDropdown(e) }
href="#">
@ -74,9 +74,7 @@ export default connect (
contentViews: state.settings.contentViews,
activeView: state.ui.flow.contentView,
isEdit: !!state.ui.flow.modifiedFlow,
isContentViewSelectorOpen: state.ui.flow.isContentViewSelectorOpen
}), {
setContentView,
setContentViewSelectorOpen
}
)(ViewSelector)

View File

@ -84,8 +84,8 @@ export class Request extends Component {
const { flow, isEdit, updateFlow, uploadContent } = this.props
let noContent = !isEdit && (flow.request.contentLength == 0 || flow.request.contentLength == null)
return (
<section className="request flowview-container">
<div className="flowview-body">
<section className="request">
<article>
<ToggleEdit/>
<RequestLine
flow={flow}
@ -103,14 +103,16 @@ export class Request extends Component {
flow={flow}
onContentChange={content => updateFlow({ request: {content}})}
message={flow.request}/>
</div>
<div hidden={noContent} className="flowview-footer">
<ContentViewOptions
flow={flow}
readonly={!isEdit}
message={flow.request}
uploadContent={content => uploadContent(flow, content, "request")}/>
</div>
</article>
{!noContent &&
<footer>
<ContentViewOptions
flow={flow}
readonly={!isEdit}
message={flow.request}
uploadContent={content => uploadContent(flow, content, "request")}/>
</footer>
}
</section>
)
}
@ -149,8 +151,8 @@ export class Response extends Component {
let noContent = !isEdit && (flow.response.contentLength == 0 || flow.response.contentLength == null)
return (
<section className="response flowview-container">
<div className="flowview-body">
<section className="response">
<article>
<ToggleEdit/>
<ResponseLine
flow={flow}
@ -168,14 +170,16 @@ export class Response extends Component {
onContentChange={content => updateFlow({ response: {content}})}
message={flow.response}
/>
</div>
<div hidden={noContent} className="flowview-footer">
<ContentViewOptions
flow={flow}
message={flow.response}
uploadContent={content => uploadContent(flow, content, "response")}
readonly={!isEdit}/>
</div>
</article>
{!noContent &&
<footer >
<ContentViewOptions
flow={flow}
message={flow.response}
uploadContent={content => uploadContent(flow, content, "response")}
readonly={!isEdit}/>
</footer>
}
</section>
)
}

View File

@ -7,9 +7,9 @@ Button.propTypes = {
icon: PropTypes.string
}
export default function Button({ onClick, text, icon, disabled, isXs, className }) {
export default function Button({ onClick, text, icon, disabled, className }) {
return (
<div className={classnames(className, 'btn btn-default', { 'btn-xs': isXs})}
<div className={classnames(className, 'btn btn-default')}
onClick={onClick}
disabled={disabled}>
{icon && (<i className={"fa fa-fw " + icon}/> )}

View File

@ -10,15 +10,13 @@ export const SET_CONTENT_VIEW = 'UI_FLOWVIEW_SET_CONTENT_VIEW',
UPDATE_EDIT = 'UI_FLOWVIEW_UPDATE_EDIT',
UPLOAD_CONTENT = 'UI_FLOWVIEW_UPLOAD_CONTENT',
SET_SHOW_FULL_CONTENT = 'UI_SET_SHOW_FULL_CONTENT',
SET_CONTENT_VIEW_DESCRIPTION = "UI_SET_CONTENT_VIEW_DESCRIPTION",
SET_CONTENT_VIEW_SELECTOR = "UI_SET_CONTENT_VIEW_SELECTOR"
SET_CONTENT_VIEW_DESCRIPTION = "UI_SET_CONTENT_VIEW_DESCRIPTION"
const defaultState = {
displayLarge: false,
contentViewDescription: '',
showFullContent: false,
isContentViewSelectorOpen: false,
modifiedFlow: false,
contentView: 'Auto',
tab: 'request',
@ -81,13 +79,6 @@ export default function reducer(state = defaultState, action) {
showFullContent: action.show
}
case SET_CONTENT_VIEW_SELECTOR:
return {
...state,
isContentViewSelectorOpen: action.contentViewSelector
}
case SET_TAB:
return {
...state,
@ -141,10 +132,6 @@ export function setShowFullContent(show) {
return { type: SET_SHOW_FULL_CONTENT, show }
}
export function setContentViewSelectorOpen(open){
return {type: SET_CONTENT_VIEW_SELECTOR, contentViewSelector: open}
}
export function updateEdit(update) {
return { type: UPDATE_EDIT, update }
}