Skip to content

Commit 63840e1

Browse files
Merge pull request #41 from ekonstantinidis/boolean-fields
2 parents 410cf68 + ca1f7c0 commit 63840e1

File tree

16 files changed

+219
-114
lines changed

16 files changed

+219
-114
lines changed

rest_framework_docs/static/rest_framework_docs/css/style.css

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
var React = require('react');
2+
3+
var FieldBoolean = React.createClass({
4+
getInitialState: function() {
5+
return {
6+
checked: null
7+
};
8+
},
9+
10+
removeField: function (fieldName, event) {
11+
event.preventDefault();
12+
this.props.removeField(fieldName);
13+
},
14+
15+
handleChange: function (value) {
16+
this.props.onChange(value);
17+
},
18+
19+
isChecked: function (value) {
20+
if (this.props.value === undefined) return;
21+
return this.props.value === value;
22+
},
23+
24+
render: function () {
25+
var labelName = this.props.name.replace('_', ' ');
26+
27+
return (
28+
<div className='form-group'>
29+
<label
30+
htmlFor={this.props.name}
31+
className='col-sm-4 control-label'>
32+
{this.props.isCustom ? (
33+
<i
34+
className='fa fa-minus-circle'
35+
title='Remove Field'
36+
onClick={this.removeField.bind(this, this.props.name)} />
37+
) : null}
38+
{labelName}
39+
</label>
40+
<div className='col-sm-8'>
41+
<label className='radio-inline'>
42+
<input
43+
type='radio'
44+
name={this.props.name}
45+
checked={this.isChecked(true)}
46+
onChange={this.handleChange.bind(this, true)} /> True
47+
</label>
48+
<label className='radio-inline'>
49+
<input
50+
type='radio'
51+
name={this.props.name}
52+
checked={this.isChecked(false)}
53+
onChange={this.handleChange.bind(this, false)} /> False
54+
</label>
55+
</div>
56+
</div>
57+
);
58+
}
59+
});
60+
61+
module.exports = FieldBoolean;

rest_framework_docs/static/rest_framework_docs/js/components/helpers/input.js renamed to rest_framework_docs/static/rest_framework_docs/js/components/fields/text.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
var React = require('react');
22

3-
var Input = React.createClass({
3+
var FieldText = React.createClass({
44

55
removeField: function (fieldName, event) {
66
event.preventDefault();
@@ -12,6 +12,8 @@ var Input = React.createClass({
1212
},
1313

1414
render: function () {
15+
var labelName = this.props.name.replace('_', ' ');
16+
1517
return (
1618
<div className="form-group">
1719
<label
@@ -24,7 +26,7 @@ var Input = React.createClass({
2426
onClick={this.removeField.bind(this, this.props.name)}
2527
/>
2628
) : null}
27-
{this.props.name}
29+
{labelName}
2830
</label>
2931
<div className="col-sm-8">
3032
<input
@@ -41,4 +43,4 @@ var Input = React.createClass({
4143
}
4244
});
4345

44-
module.exports = Input;
46+
module.exports = FieldText;

rest_framework_docs/static/rest_framework_docs/js/components/liveapi.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ var LiveAPIEndpoints = React.createClass({
1616

1717
getData: function () {
1818
var method = this.refs.request.state.selectedMethod;
19-
return RequestUtils.shouldAddData(method) ? null : (
19+
return RequestUtils.shouldIncludeData(method) ? (
2020
this.refs.request.state.data
21-
);
21+
) : null;
2222
},
2323

2424
makeRequest: function (event) {

rest_framework_docs/static/rest_framework_docs/js/components/request.js

+14-21
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@ var _ = require('underscore');
22
var React = require('react');
33

44
var AddFieldsForm = require('./request/add-fields');
5-
var Header = require('./helpers/header');
65
var Headers = require('./request/headers');
7-
var FieldsData = require('./request/fields-data');
6+
var Data = require('./request/data');
87
var FieldUrl = require('./request/field-url');
98
var Methods = require('./request/methods');
10-
var RequestUtils = require('../utils/request');
119

1210
var Request = React.createClass({
1311
getInitialState: function () {
@@ -33,20 +31,17 @@ var Request = React.createClass({
3331

3432
addField: function (fieldName) {
3533
var endpoint = this.state.endpoint;
36-
var fields = endpoint.fields;
3734

3835
// Check if field already exists
39-
if (_.findWhere(fields, {'name': fieldName})) return;
36+
if (_.findWhere(endpoint.fields, {'name': fieldName})) return;
4037

41-
fields.push({
38+
endpoint.fields.push({
4239
name: fieldName,
4340
required: false,
44-
type: 'Added Field',
41+
type: 'text',
4542
isCustom: true
4643
});
4744

48-
endpoint.fields = fields;
49-
5045
this.setState({
5146
endpoint: endpoint
5247
});
@@ -100,6 +95,7 @@ var Request = React.createClass({
10095

10196
render: function () {
10297
var endpoint = this.state.endpoint;
98+
10399
return (
104100
<div>
105101
<h3>Request</h3>
@@ -119,18 +115,15 @@ var Request = React.createClass({
119115
permissions={this.state.endpoint.permissions}
120116
handleHeaderChange={this.handleHeaderChange} />
121117

122-
{RequestUtils.shouldAddData(this.state.method) ? null : (
123-
<div>
124-
{this.state.endpoint.fields.length ? <Header title='Data' /> : null}
125-
<FieldsData
126-
fields={endpoint.fields}
127-
data={this.state.data}
128-
removeCustomField={this.removeField}
129-
onChange={this.handleDataFieldChange} />
130-
131-
<AddFieldsForm onAdd={this.addField} />
132-
</div>
133-
)}
118+
<Data
119+
method={this.state.selectedMethod}
120+
fields={endpoint.fields}
121+
data={this.state.data}
122+
removeCustomField={this.removeField}
123+
onChange={this.handleDataFieldChange} />
124+
125+
<AddFieldsForm
126+
onAdd={this.addField} />
134127
</div>
135128
);
136129
}

rest_framework_docs/static/rest_framework_docs/js/components/request/add-fields.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ var AddFieldsForm = React.createClass({
5151
<div className="col-sm-2">
5252
<button
5353
type="button"
54-
className='btn btn-sm btn-block btn-primary'
54+
className='btn btn-sm btn-block btn-info'
5555
onClick={this.addField}>
5656
Add
5757
</button>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
var React = require('react');
2+
3+
var FieldText = require('../fields/text');
4+
var FieldBoolean = require('../fields/boolean');
5+
var Header = require('../helpers/header');
6+
var RequestUtils = require('../../utils/request');
7+
8+
var Data = React.createClass({
9+
removeCustomField: function (fieldName) {
10+
this.props.removeCustomField(fieldName);
11+
},
12+
13+
handleBooleanChange: function (fieldName, value) {
14+
this.props.onChange(value, fieldName);
15+
},
16+
17+
handleTextChange: function (fieldName, event) {
18+
this.props.onChange(event.target.value, fieldName);
19+
},
20+
21+
_renderBooleanField: function (field, key) {
22+
var value = this.props.data[field.name];
23+
24+
return (
25+
<FieldBoolean
26+
key={key}
27+
name={field.name}
28+
value={value}
29+
required={field.required ? 'required' : false}
30+
removeField={this.removeCustomField}
31+
isCustom={field.isCustom ? 'isCustom' : false}
32+
onChange={this.handleBooleanChange.bind(this, field.name)} />
33+
);
34+
},
35+
36+
_renderTextInput: function (field, key) {
37+
var value = this.props.data[field.name];
38+
var type = field.name == 'password' ? 'password' : 'text';
39+
return (
40+
<FieldText
41+
key={key}
42+
type={type}
43+
name={field.name}
44+
value={value}
45+
placeholder={field.type}
46+
required={field.required ? 'required' : false}
47+
removeField={this.removeCustomField}
48+
isCustom={field.isCustom ? 'isCustom' : false}
49+
onChange={this.handleTextChange.bind(this, field.name)} />
50+
);
51+
},
52+
53+
_renderFields: function () {
54+
return this.props.fields.map(function (field, key) {
55+
56+
switch (field.type) {
57+
case ('BooleanField'):
58+
return this._renderBooleanField(field, key);
59+
60+
case ('CharField'):
61+
default:
62+
return this._renderTextInput(field, key);
63+
64+
}
65+
}, this);
66+
},
67+
68+
render: function () {
69+
if (!RequestUtils.shouldIncludeData(this.props.method)) {
70+
return null;
71+
}
72+
73+
return (
74+
<div>
75+
{this.props.fields.length ? <Header title='Data' /> : null}
76+
{this._renderFields()}
77+
</div>
78+
);
79+
}
80+
});
81+
82+
module.exports = Data;

rest_framework_docs/static/rest_framework_docs/js/components/request/field-url.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
var React = require('react');
22

33
var Header = require('../helpers/header');
4-
var Input = require('../helpers/input');
4+
var FieldText = require('../fields/text');
55

66
var FieldUrl = React.createClass({
77

@@ -25,7 +25,7 @@ var FieldUrl = React.createClass({
2525
return (
2626
<div>
2727
<Header title='API Endpoint' />
28-
<Input
28+
<FieldText
2929
type='text'
3030
name='Url Endpoint'
3131
value={this.state.url}

rest_framework_docs/static/rest_framework_docs/js/components/request/fields-data.js

-44
This file was deleted.

rest_framework_docs/static/rest_framework_docs/js/components/request/headers.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
var React = require('react');
22

33
var Header = require('../helpers/header');
4-
var Input = require('../helpers/input');
4+
var FieldText = require('../fields/text');
55
var RequestUtils = require('../../utils/request');
66

77
var Headers = React.createClass({
@@ -30,7 +30,7 @@ var Headers = React.createClass({
3030
return (
3131
<div>
3232
<Header title='Headers' />
33-
<Input
33+
<FieldText
3434
name='authorization'
3535
value={this.state.authorization}
3636
placeholder='Token 1234567890'

rest_framework_docs/static/rest_framework_docs/js/components/request/methods.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ var Methods = React.createClass({
3030

3131
render: function () {
3232
return (
33-
<div>
33+
<div className='text-center'>
3434
<Header title='Method' />
3535
<div className='btn-group methods'>
3636
{this.state.methods.map(function (method, i) {

rest_framework_docs/static/rest_framework_docs/js/components/response.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@ var Response = React.createClass({
4646
{hasToken ? (
4747
<div className='well well-default text-center'>
4848
<button className='btn btn-sm btn-info' onClick={this.saveToken}>
49-
<i className='fa fa-key' />
50-
Save Token
49+
<i className='fa fa-key' /> Save Token
5150
</button>
5251
<h6>Your token will be lost when you refresh the page.</h6>
5352
</div>

rest_framework_docs/static/rest_framework_docs/js/dist.js

+9-9
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rest_framework_docs/static/rest_framework_docs/js/utils/request.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
module.exports = {
22

3-
shouldAddData: function (method) {
3+
shouldIncludeData: function (method) {
44
if (method === 'GET' || method === 'OPTIONS') {
5-
return true;
5+
return false;
66
}
7-
return false;
7+
return true;
88
},
99

1010
shouldAddHeader: function (permissions) {

0 commit comments

Comments
 (0)