diff --git a/app/components/CurlExportModal.js b/app/components/CurlExportModal.js
index 061a7a5290..0466df2498 100644
--- a/app/components/CurlExportModal.js
+++ b/app/components/CurlExportModal.js
@@ -6,7 +6,6 @@ import Modal from './base/Modal';
import ModalBody from './base/ModalBody';
import ModalHeader from './base/ModalHeader';
import ModalFooter from './base/ModalFooter';
-import {MODAL_CURL_EXPORT} from '../lib/constants';
import {exportCurl} from '../lib/export/curl';
class CurlExportModal extends ModalComponent {
diff --git a/app/components/base/DropdownHint.js b/app/components/base/DropdownHint.js
new file mode 100644
index 0000000000..9635de8155
--- /dev/null
+++ b/app/components/base/DropdownHint.js
@@ -0,0 +1,14 @@
+import React, {PropTypes} from 'react';
+import {MOD_SYM} from '../../lib/constants';
+
+const DropdownHint = ({char}) => (
+
+ {MOD_SYM}{char}
+
+);
+
+DropdownHint.propTypes = {
+ char: PropTypes.string.isRequired
+};
+
+export default DropdownHint;
diff --git a/app/containers/RequestActionsDropdown.js b/app/containers/RequestActionsDropdown.js
index d4aabf6f25..778e6decfb 100644
--- a/app/containers/RequestActionsDropdown.js
+++ b/app/containers/RequestActionsDropdown.js
@@ -1,6 +1,7 @@
import React, {Component, PropTypes} from 'react';
import {connect} from 'react-redux'
import Dropdown from '../components/base/Dropdown';
+import DropdownHint from '../components/base/DropdownHint';
import CurlExportModal from '../components/CurlExportModal';
import PromptModal from '../components/PromptModal';
import * as db from '../database';
@@ -31,6 +32,7 @@ class RequestActionsDropdown extends Component {
diff --git a/app/containers/RequestGroupActionsDropdown.js b/app/containers/RequestGroupActionsDropdown.js
index 9ca60894b9..2ed2ba20f8 100644
--- a/app/containers/RequestGroupActionsDropdown.js
+++ b/app/containers/RequestGroupActionsDropdown.js
@@ -1,6 +1,7 @@
import React, {Component, PropTypes} from 'react';
import {connect} from 'react-redux'
import Dropdown from '../components/base/Dropdown';
+import DropdownHint from '../components/base/DropdownHint';
import EnvironmentEditModal from '../components/EnvironmentEditModal';
import PromptModal from '../components/PromptModal';
import * as db from '../database';
@@ -44,9 +45,16 @@ class RequestGroupActionsDropdown extends Component {
+ -
+
+
-
-
@@ -54,11 +62,6 @@ class RequestGroupActionsDropdown extends Component {
Rename
- -
-
-
{/*- */}
{/*
*/}
-
diff --git a/app/containers/WorkspaceDropdown.js b/app/containers/WorkspaceDropdown.js
index 41f3d99960..62d8280d6e 100644
--- a/app/containers/WorkspaceDropdown.js
+++ b/app/containers/WorkspaceDropdown.js
@@ -5,6 +5,7 @@ import {connect} from 'react-redux'
import Dropdown from '../components/base/Dropdown';
import DropdownDivider from '../components/base/DropdownDivider';
+import DropdownHint from '../components/base/DropdownHint';
import PromptModal from '../components/PromptModal';
import AlertModal from '../components/AlertModal';
import SettingsModal from '../components/SettingsModal';
@@ -112,6 +113,7 @@ class WorkspaceDropdown extends Component {
@@ -158,6 +160,7 @@ class WorkspaceDropdown extends Component {
diff --git a/app/css/components/dropdown.scss b/app/css/components/dropdown.scss
index fdef5f95c9..0312edc97d 100644
--- a/app/css/components/dropdown.scss
+++ b/app/css/components/dropdown.scss
@@ -1,5 +1,6 @@
@import '../constants/colors';
@import '../constants/dimensions';
+@import '../constants/fonts';
.dropdown {
position: relative;
@@ -58,6 +59,12 @@
width: 2em;
text-align: center;
}
+
+ .dropdown__hint {
+ font-family: $font-monospace;
+ color: $hl;
+ float: right;
+ }
}
}
}
diff --git a/app/lib/appInfo.js b/app/lib/appInfo.js
index d9e32884e7..8e0b28c06d 100644
--- a/app/lib/appInfo.js
+++ b/app/lib/appInfo.js
@@ -4,6 +4,10 @@ export function getVersion () {
return appJson.version;
}
+export function isMac () {
+ return process.platform === 'darwin';
+}
+
export function isDevelopment () {
return process.env.NODE_ENV === 'development';
}
diff --git a/app/lib/constants.js b/app/lib/constants.js
index b7eb2e35e8..a0ba1726b2 100644
--- a/app/lib/constants.js
+++ b/app/lib/constants.js
@@ -1,4 +1,5 @@
import {isDevelopment} from './appInfo';
+import {isMac} from './appInfo';
// Global Stuff
export const LOCALSTORAGE_KEY = 'insomnia.state';
@@ -10,6 +11,7 @@ export const CHANGELOG_URL = isDevelopment() ?
'http://localhost:5000/changelog.json' :
'http://changelog.insomnia.rest/changelog.json';
export const STATUS_CODE_PEBKAC = -333;
+export const MOD_SYM = isMac() ? '⌘' : 'ctrl+';
// UI Stuff
export const MAX_SIDEBAR_REMS = 35;
diff --git a/app/lib/export/curl.js b/app/lib/export/curl.js
index feeeb06e11..498e2a385b 100644
--- a/app/lib/export/curl.js
+++ b/app/lib/export/curl.js
@@ -4,6 +4,7 @@ import render from '../render';
import * as querystring from '../querystring';
import * as db from '../../database';
import {DEBOUNCE_MILLIS, METHOD_GET} from '../constants';
+import {getRenderedRequest} from '../render';
const FLAGS = [
'cacert', 'capath', 'E', 'cert', 'cert-type', 'ciphers', 'K', 'config',
@@ -150,52 +151,50 @@ export function exportCurl (requestId) {
// First, lets wait for all debounces to finish
setTimeout(() => {
- db.requestGetById(requestId).then(request => {
- db.requestGroupGetById(request.parentId).then(requestGroup => {
- const renderCtx = requestGroup ? requestGroup.environment : {};
+ db.requestGetById(requestId).then(r => {
+ getRenderedRequest(r).then(renderedRequest => {
// Build the querystring
- const paramsString = JSON.stringify(request.parameters);
- const parameters = JSON.parse(render(paramsString, renderCtx));
+ const {parameters} = renderedRequest;
const qs = querystring.buildFromParams(parameters);
// Build the Url
- const url = querystring.joinURL(request.url, qs);
- const IS_GET_REQUEST = request.method.toUpperCase() === METHOD_GET.toUpperCase();
+ const url = querystring.joinURL(renderedRequest.url, qs);
+ const IS_GET_REQUEST = renderedRequest.method.toUpperCase() === METHOD_GET.toUpperCase();
let cmd = 'curl';
// HTTP method
if (!IS_GET_REQUEST) {
- cmd += ` -X ${request.method.toUpperCase()}`;
+ cmd += ` -X ${renderedRequest.method.toUpperCase()}`;
}
// Url
cmd += ` '${url.replace(`'`, `'"'"'`)}'`;
// Payload
- if (request.body) {
- cmd += ` \\\n -d '${request.body.replace(`'`, `'"'"'`)}'`;
+ if (renderedRequest.body) {
+ cmd += ` \\\n -d '${renderedRequest.body.replace(`'`, `'"'"'`)}'`;
}
// Basic auth
- const {username, password} = request.authentication;
+ const {username, password} = renderedRequest.authentication;
if (username || password) {
cmd += ` \\\n -u ${username}:${password}`;
}
// Headers
- const hasContentTypeHeader = !!request.headers.find(h => h.name.toUpperCase() === 'CONTENT-TYPE');
+ const hasContentTypeHeader = !!renderedRequest.headers.find(h => h.name.toUpperCase() === 'CONTENT-TYPE');
if (!hasContentTypeHeader && !IS_GET_REQUEST) {
- const value = request.contentType;
+ const value = renderedRequest.contentType;
const name = 'Content-Type';
- request.headers.push({name, value})
+ renderedRequest.headers.push({name, value})
}
- for (let i = 0; i < request.headers.length; i++) {
- const {name, value} = request.headers[i];
+ for (let i = 0; i < renderedRequest.headers.length; i++) {
+ const {name, value} = renderedRequest.headers[i];
if (!name) {
// Don't add headers with no name
@@ -205,7 +204,7 @@ export function exportCurl (requestId) {
cmd += ` \\\n -H '${name}: ${value}'`;
}
- resolve(render(cmd, renderCtx));
+ resolve(cmd);
});
});
}, DEBOUNCE_MILLIS);