You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@superset.apache.org by GitBox <gi...@apache.org> on 2018/04/18 04:05:03 UTC

[GitHub] mistercrunch closed pull request #4820: Moving some JS folders

mistercrunch closed pull request #4820: Moving some JS folders
URL: https://github.com/apache/incubator-superset/pull/4820
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/superset/assets/package.json b/superset/assets/package.json
index 78545cfa3b..ceb34c74a2 100644
--- a/superset/assets/package.json
+++ b/superset/assets/package.json
@@ -17,7 +17,7 @@
     "build": "NODE_ENV=production webpack --colors --progress",
     "lint": "eslint --ignore-path=.eslintignore --ext .js,.jsx .",
     "lint-fix": "eslint --fix --ignore-path=.eslintignore --ext .js,.jsx .",
-    "sync-backend": "babel-node --presets env javascripts/syncBackend.js"
+    "sync-backend": "babel-node --presets env src/syncBackend.js"
   },
   "repository": {
     "type": "git",
diff --git a/superset/assets/spec/javascripts/addSlice/AddSliceContainer_spec.jsx b/superset/assets/spec/javascripts/addSlice/AddSliceContainer_spec.jsx
index f91b301cdf..96ed089599 100644
--- a/superset/assets/spec/javascripts/addSlice/AddSliceContainer_spec.jsx
+++ b/superset/assets/spec/javascripts/addSlice/AddSliceContainer_spec.jsx
@@ -4,7 +4,7 @@ import { describe, it, beforeEach } from 'mocha';
 import { shallow } from 'enzyme';
 import { Button } from 'react-bootstrap';
 import Select from 'react-virtualized-select';
-import AddSliceContainer from '../../../javascripts/addSlice/AddSliceContainer';
+import AddSliceContainer from '../../../src/addSlice/AddSliceContainer';
 
 const defaultProps = {
   datasources: [
diff --git a/superset/assets/spec/javascripts/chart/Chart_spec.jsx b/superset/assets/spec/javascripts/chart/Chart_spec.jsx
index 9d45e85c90..b766d9f8f4 100644
--- a/superset/assets/spec/javascripts/chart/Chart_spec.jsx
+++ b/superset/assets/spec/javascripts/chart/Chart_spec.jsx
@@ -4,10 +4,10 @@ import { describe, it } from 'mocha';
 import { expect } from 'chai';
 import sinon from 'sinon';
 
-import { chart as initChart } from '../../../javascripts/chart/chartReducer';
-import Chart from '../../../javascripts/chart/Chart';
-import ChartBody from '../../../javascripts/chart/ChartBody';
-import Loading from '../../../javascripts/components/Loading';
+import { chart as initChart } from '../../../src/chart/chartReducer';
+import Chart from '../../../src/chart/Chart';
+import ChartBody from '../../../src/chart/ChartBody';
+import Loading from '../../../src/components/Loading';
 
 describe('Chart', () => {
   const chart = {
diff --git a/superset/assets/spec/javascripts/components/AlteredSliceTag_spec.jsx b/superset/assets/spec/javascripts/components/AlteredSliceTag_spec.jsx
index f3b746bbb3..79947201e6 100644
--- a/superset/assets/spec/javascripts/components/AlteredSliceTag_spec.jsx
+++ b/superset/assets/spec/javascripts/components/AlteredSliceTag_spec.jsx
@@ -5,9 +5,9 @@ import { expect } from 'chai';
 
 import { Table, Thead, Td, Th, Tr } from 'reactable';
 
-import AlteredSliceTag from '../../../javascripts/components/AlteredSliceTag';
-import ModalTrigger from '../../../javascripts/components/ModalTrigger';
-import TooltipWrapper from '../../../javascripts/components/TooltipWrapper';
+import AlteredSliceTag from '../../../src/components/AlteredSliceTag';
+import ModalTrigger from '../../../src/components/ModalTrigger';
+import TooltipWrapper from '../../../src/components/TooltipWrapper';
 
 const defaultProps = {
   origFormData: {
diff --git a/superset/assets/spec/javascripts/components/AsyncSelect_spec.jsx b/superset/assets/spec/javascripts/components/AsyncSelect_spec.jsx
index 35b6f81411..a672716bfe 100644
--- a/superset/assets/spec/javascripts/components/AsyncSelect_spec.jsx
+++ b/superset/assets/spec/javascripts/components/AsyncSelect_spec.jsx
@@ -5,7 +5,7 @@ import { describe, it } from 'mocha';
 import { expect } from 'chai';
 import sinon from 'sinon';
 
-import AsyncSelect from '../../../javascripts/components/AsyncSelect';
+import AsyncSelect from '../../../src/components/AsyncSelect';
 
 describe('AsyncSelect', () => {
   const mockedProps = {
diff --git a/superset/assets/spec/javascripts/components/CachedLabel_spec.jsx b/superset/assets/spec/javascripts/components/CachedLabel_spec.jsx
index a720a8ce57..8a7f74abcd 100644
--- a/superset/assets/spec/javascripts/components/CachedLabel_spec.jsx
+++ b/superset/assets/spec/javascripts/components/CachedLabel_spec.jsx
@@ -4,7 +4,7 @@ import { describe, it } from 'mocha';
 import { shallow } from 'enzyme';
 import { Label } from 'react-bootstrap';
 
-import CachedLabel from '../../../javascripts/components/CachedLabel';
+import CachedLabel from '../../../src/components/CachedLabel';
 
 describe('CachedLabel', () => {
   const defaultProps = {
diff --git a/superset/assets/spec/javascripts/components/Checkbox_spec.jsx b/superset/assets/spec/javascripts/components/Checkbox_spec.jsx
index 72b615c690..b53fbfab53 100644
--- a/superset/assets/spec/javascripts/components/Checkbox_spec.jsx
+++ b/superset/assets/spec/javascripts/components/Checkbox_spec.jsx
@@ -4,7 +4,7 @@ import { describe, it } from 'mocha';
 import sinon from 'sinon';
 import { shallow } from 'enzyme';
 
-import Checkbox from '../../../javascripts/components/Checkbox';
+import Checkbox from '../../../src/components/Checkbox';
 
 describe('Checkbox', () => {
   const defaultProps = {
diff --git a/superset/assets/spec/javascripts/components/ColumnOption_spec.jsx b/superset/assets/spec/javascripts/components/ColumnOption_spec.jsx
index d8f6ada663..1c531a1ff1 100644
--- a/superset/assets/spec/javascripts/components/ColumnOption_spec.jsx
+++ b/superset/assets/spec/javascripts/components/ColumnOption_spec.jsx
@@ -3,9 +3,9 @@ import { expect } from 'chai';
 import { describe, it } from 'mocha';
 import { shallow } from 'enzyme';
 
-import ColumnOption from '../../../javascripts/components/ColumnOption';
-import ColumnTypeLabel from '../../../javascripts/components/ColumnTypeLabel';
-import InfoTooltipWithTrigger from '../../../javascripts/components/InfoTooltipWithTrigger';
+import ColumnOption from '../../../src/components/ColumnOption';
+import ColumnTypeLabel from '../../../src/components/ColumnTypeLabel';
+import InfoTooltipWithTrigger from '../../../src/components/InfoTooltipWithTrigger';
 
 describe('ColumnOption', () => {
   const defaultProps = {
diff --git a/superset/assets/spec/javascripts/components/ColumnTypeLabel_spec.jsx b/superset/assets/spec/javascripts/components/ColumnTypeLabel_spec.jsx
index 7ce058be73..9e3cfe82a3 100644
--- a/superset/assets/spec/javascripts/components/ColumnTypeLabel_spec.jsx
+++ b/superset/assets/spec/javascripts/components/ColumnTypeLabel_spec.jsx
@@ -3,7 +3,7 @@ import { expect } from 'chai';
 import { describe, it } from 'mocha';
 import { shallow } from 'enzyme';
 
-import ColumnTypeLabel from '../../../javascripts/components/ColumnTypeLabel';
+import ColumnTypeLabel from '../../../src/components/ColumnTypeLabel';
 
 describe('ColumnOption', () => {
   const defaultProps = {
diff --git a/superset/assets/spec/javascripts/components/CopyToClipboard_spec.jsx b/superset/assets/spec/javascripts/components/CopyToClipboard_spec.jsx
index e6e7408a4c..84357d799e 100644
--- a/superset/assets/spec/javascripts/components/CopyToClipboard_spec.jsx
+++ b/superset/assets/spec/javascripts/components/CopyToClipboard_spec.jsx
@@ -2,7 +2,7 @@ import React from 'react';
 import { expect } from 'chai';
 import { describe, it } from 'mocha';
 
-import CopyToClipboard from '../../../javascripts/components/CopyToClipboard';
+import CopyToClipboard from '../../../src/components/CopyToClipboard';
 
 describe('CopyToClipboard', () => {
   const defaultProps = {
diff --git a/superset/assets/spec/javascripts/components/FilterableTable/FilterableTable_spec.jsx b/superset/assets/spec/javascripts/components/FilterableTable/FilterableTable_spec.jsx
index a4ca9141cc..81c8f15016 100644
--- a/superset/assets/spec/javascripts/components/FilterableTable/FilterableTable_spec.jsx
+++ b/superset/assets/spec/javascripts/components/FilterableTable/FilterableTable_spec.jsx
@@ -2,7 +2,7 @@ import React from 'react';
 import { describe, it } from 'mocha';
 import { expect } from 'chai';
 import { mount } from 'enzyme';
-import FilterableTable from '../../../../javascripts/components/FilterableTable/FilterableTable';
+import FilterableTable from '../../../../src/components/FilterableTable/FilterableTable';
 
 describe('FilterableTable', () => {
   const mockedProps = {
diff --git a/superset/assets/spec/javascripts/components/MetricOption_spec.jsx b/superset/assets/spec/javascripts/components/MetricOption_spec.jsx
index 0da6c62573..7af2cebd60 100644
--- a/superset/assets/spec/javascripts/components/MetricOption_spec.jsx
+++ b/superset/assets/spec/javascripts/components/MetricOption_spec.jsx
@@ -3,9 +3,9 @@ import { expect } from 'chai';
 import { describe, it } from 'mocha';
 import { shallow } from 'enzyme';
 
-import MetricOption from '../../../javascripts/components/MetricOption';
-import ColumnTypeLabel from '../../../javascripts/components/ColumnTypeLabel';
-import InfoTooltipWithTrigger from '../../../javascripts/components/InfoTooltipWithTrigger';
+import MetricOption from '../../../src/components/MetricOption';
+import ColumnTypeLabel from '../../../src/components/ColumnTypeLabel';
+import InfoTooltipWithTrigger from '../../../src/components/InfoTooltipWithTrigger';
 
 describe('MetricOption', () => {
   const defaultProps = {
diff --git a/superset/assets/spec/javascripts/components/ModalTrigger_spec.jsx b/superset/assets/spec/javascripts/components/ModalTrigger_spec.jsx
index 3fb7d3eb58..6f132a9bcc 100644
--- a/superset/assets/spec/javascripts/components/ModalTrigger_spec.jsx
+++ b/superset/assets/spec/javascripts/components/ModalTrigger_spec.jsx
@@ -2,7 +2,7 @@ import React from 'react';
 import { expect } from 'chai';
 import { describe, it } from 'mocha';
 
-import ModalTrigger from '../../../javascripts/components/ModalTrigger';
+import ModalTrigger from '../../../src/components/ModalTrigger';
 
 describe('ModalTrigger', () => {
   const defaultProps = {
diff --git a/superset/assets/spec/javascripts/components/OnPasteSelect_spec.jsx b/superset/assets/spec/javascripts/components/OnPasteSelect_spec.jsx
index 949ca03f3b..278a1ac24a 100644
--- a/superset/assets/spec/javascripts/components/OnPasteSelect_spec.jsx
+++ b/superset/assets/spec/javascripts/components/OnPasteSelect_spec.jsx
@@ -7,7 +7,7 @@ import { describe, it } from 'mocha';
 import VirtualizedSelect from 'react-virtualized-select';
 import Select, { Creatable } from 'react-select';
 
-import OnPasteSelect from '../../../javascripts/components/OnPasteSelect';
+import OnPasteSelect from '../../../src/components/OnPasteSelect';
 
 const defaultProps = {
   onChange: sinon.spy(),
diff --git a/superset/assets/spec/javascripts/components/OptionDescription_spec.jsx b/superset/assets/spec/javascripts/components/OptionDescription_spec.jsx
index e9a6a9dfab..cf45332ebb 100644
--- a/superset/assets/spec/javascripts/components/OptionDescription_spec.jsx
+++ b/superset/assets/spec/javascripts/components/OptionDescription_spec.jsx
@@ -3,8 +3,8 @@ import { shallow } from 'enzyme';
 import { describe, it } from 'mocha';
 import { expect } from 'chai';
 
-import InfoTooltipWithTrigger from '../../../javascripts/components/InfoTooltipWithTrigger';
-import OptionDescription from '../../../javascripts/components/OptionDescription';
+import InfoTooltipWithTrigger from '../../../src/components/InfoTooltipWithTrigger';
+import OptionDescription from '../../../src/components/OptionDescription';
 
 const defaultProps = {
   option: {
diff --git a/superset/assets/spec/javascripts/components/PopoverSection_spec.jsx b/superset/assets/spec/javascripts/components/PopoverSection_spec.jsx
index b9a638c8cf..e5a17b75c1 100644
--- a/superset/assets/spec/javascripts/components/PopoverSection_spec.jsx
+++ b/superset/assets/spec/javascripts/components/PopoverSection_spec.jsx
@@ -3,7 +3,7 @@ import { expect } from 'chai';
 import { describe, it } from 'mocha';
 import { shallow } from 'enzyme';
 
-import PopoverSection from '../../../javascripts/components/PopoverSection';
+import PopoverSection from '../../../src/components/PopoverSection';
 
 describe('PopoverSection', () => {
   const defaultProps = {
diff --git a/superset/assets/spec/javascripts/components/VirtualizedRendererWrap_spec.jsx b/superset/assets/spec/javascripts/components/VirtualizedRendererWrap_spec.jsx
index 1cd4c4e9c0..e793fef2c4 100644
--- a/superset/assets/spec/javascripts/components/VirtualizedRendererWrap_spec.jsx
+++ b/superset/assets/spec/javascripts/components/VirtualizedRendererWrap_spec.jsx
@@ -6,7 +6,7 @@ import { expect } from 'chai';
 import { describe, it } from 'mocha';
 import { shallow } from 'enzyme';
 
-import VirtualizedRendererWrap from '../../../javascripts/components/VirtualizedRendererWrap';
+import VirtualizedRendererWrap from '../../../src/components/VirtualizedRendererWrap';
 
 const defaultProps = {
   focusedOption: { label: 'focusedOn', value: 'focusedOn' },
diff --git a/superset/assets/spec/javascripts/dashboard/CodeModal_spec.jsx b/superset/assets/spec/javascripts/dashboard/CodeModal_spec.jsx
index b71401ecd6..a93c5573ed 100644
--- a/superset/assets/spec/javascripts/dashboard/CodeModal_spec.jsx
+++ b/superset/assets/spec/javascripts/dashboard/CodeModal_spec.jsx
@@ -3,7 +3,7 @@ import { mount } from 'enzyme';
 import { describe, it } from 'mocha';
 import { expect } from 'chai';
 
-import CodeModal from '../../../javascripts/dashboard/components/CodeModal';
+import CodeModal from '../../../src/dashboard/components/CodeModal';
 
 describe('CodeModal', () => {
   const mockedProps = {
diff --git a/superset/assets/spec/javascripts/dashboard/CssEditor_spec.jsx b/superset/assets/spec/javascripts/dashboard/CssEditor_spec.jsx
index 1da5624cf9..c325dc1b78 100644
--- a/superset/assets/spec/javascripts/dashboard/CssEditor_spec.jsx
+++ b/superset/assets/spec/javascripts/dashboard/CssEditor_spec.jsx
@@ -3,7 +3,7 @@ import { mount } from 'enzyme';
 import { describe, it } from 'mocha';
 import { expect } from 'chai';
 
-import CssEditor from '../../../javascripts/dashboard/components/CssEditor';
+import CssEditor from '../../../src/dashboard/components/CssEditor';
 
 describe('CssEditor', () => {
   const mockedProps = {
diff --git a/superset/assets/spec/javascripts/dashboard/Dashboard_spec.jsx b/superset/assets/spec/javascripts/dashboard/Dashboard_spec.jsx
index 1ac495992a..c6e94d87d9 100644
--- a/superset/assets/spec/javascripts/dashboard/Dashboard_spec.jsx
+++ b/superset/assets/spec/javascripts/dashboard/Dashboard_spec.jsx
@@ -4,9 +4,9 @@ import { describe, it } from 'mocha';
 import { expect } from 'chai';
 import sinon from 'sinon';
 
-import * as dashboardActions from '../../../javascripts/dashboard/actions';
-import * as chartActions from '../../../javascripts/chart/chartAction';
-import Dashboard from '../../../javascripts/dashboard/components/Dashboard';
+import * as dashboardActions from '../../../src/dashboard/actions';
+import * as chartActions from '../../../src/chart/chartAction';
+import Dashboard from '../../../src/dashboard/components/Dashboard';
 import { defaultFilters, dashboard, charts } from './fixtures';
 
 describe('Dashboard', () => {
diff --git a/superset/assets/spec/javascripts/dashboard/RefreshIntervalModal_spec.jsx b/superset/assets/spec/javascripts/dashboard/RefreshIntervalModal_spec.jsx
index 7537074765..3a2f7000df 100644
--- a/superset/assets/spec/javascripts/dashboard/RefreshIntervalModal_spec.jsx
+++ b/superset/assets/spec/javascripts/dashboard/RefreshIntervalModal_spec.jsx
@@ -3,7 +3,7 @@ import { mount } from 'enzyme';
 import { describe, it } from 'mocha';
 import { expect } from 'chai';
 
-import RefreshIntervalModal from '../../../javascripts/dashboard/components/RefreshIntervalModal';
+import RefreshIntervalModal from '../../../src/dashboard/components/RefreshIntervalModal';
 
 describe('RefreshIntervalModal', () => {
   const mockedProps = {
diff --git a/superset/assets/spec/javascripts/dashboard/fixtures.jsx b/superset/assets/spec/javascripts/dashboard/fixtures.jsx
index 1b9cf21b62..371b02c02c 100644
--- a/superset/assets/spec/javascripts/dashboard/fixtures.jsx
+++ b/superset/assets/spec/javascripts/dashboard/fixtures.jsx
@@ -1,4 +1,4 @@
-import { getInitialState } from '../../../javascripts/dashboard/reducers';
+import { getInitialState } from '../../../src/dashboard/reducers';
 
 export const defaultFilters = {
   256: { region: [] },
diff --git a/superset/assets/spec/javascripts/dashboard/reducers_spec.js b/superset/assets/spec/javascripts/dashboard/reducers_spec.js
index 8022928ddf..6421fec83c 100644
--- a/superset/assets/spec/javascripts/dashboard/reducers_spec.js
+++ b/superset/assets/spec/javascripts/dashboard/reducers_spec.js
@@ -1,8 +1,8 @@
 import { describe, it } from 'mocha';
 import { expect } from 'chai';
 
-import { dashboard as reducers } from '../../../javascripts/dashboard/reducers';
-import * as actions from '../../../javascripts/dashboard/actions';
+import { dashboard as reducers } from '../../../src/dashboard/reducers';
+import * as actions from '../../../src/dashboard/actions';
 import { defaultFilters, dashboard as initState } from './fixtures';
 
 describe('Dashboard reducers', () => {
diff --git a/superset/assets/spec/javascripts/explore/AdhocMetric_spec.js b/superset/assets/spec/javascripts/explore/AdhocMetric_spec.js
index 5fa837af0f..432be7620a 100644
--- a/superset/assets/spec/javascripts/explore/AdhocMetric_spec.js
+++ b/superset/assets/spec/javascripts/explore/AdhocMetric_spec.js
@@ -1,8 +1,8 @@
 import { expect } from 'chai';
 import { describe, it } from 'mocha';
 
-import AdhocMetric, { EXPRESSION_TYPES } from '../../../javascripts/explore/AdhocMetric';
-import { AGGREGATES } from '../../../javascripts/explore/constants';
+import AdhocMetric, { EXPRESSION_TYPES } from '../../../src/explore/AdhocMetric';
+import { AGGREGATES } from '../../../src/explore/constants';
 
 const valueColumn = { type: 'DOUBLE', column_name: 'value' };
 
diff --git a/superset/assets/spec/javascripts/explore/chartActions_spec.js b/superset/assets/spec/javascripts/explore/chartActions_spec.js
index d0f6c6b3d4..f1e49efee2 100644
--- a/superset/assets/spec/javascripts/explore/chartActions_spec.js
+++ b/superset/assets/spec/javascripts/explore/chartActions_spec.js
@@ -2,8 +2,8 @@ import { it, describe } from 'mocha';
 import { expect } from 'chai';
 import sinon from 'sinon';
 import $ from 'jquery';
-import * as exploreUtils from '../../../javascripts/explore/exploreUtils';
-import * as actions from '../../../javascripts/chart/chartAction';
+import * as exploreUtils from '../../../src/explore/exploreUtils';
+import * as actions from '../../../src/chart/chartAction';
 
 describe('chart actions', () => {
   let dispatch;
diff --git a/superset/assets/spec/javascripts/explore/components/AdhocMetricEditPopoverTitle_spec.jsx b/superset/assets/spec/javascripts/explore/components/AdhocMetricEditPopoverTitle_spec.jsx
index b732a5a78f..4acb24e279 100644
--- a/superset/assets/spec/javascripts/explore/components/AdhocMetricEditPopoverTitle_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/AdhocMetricEditPopoverTitle_spec.jsx
@@ -6,9 +6,9 @@ import { describe, it } from 'mocha';
 import { shallow } from 'enzyme';
 import { OverlayTrigger } from 'react-bootstrap';
 
-import AdhocMetric from '../../../../javascripts/explore/AdhocMetric';
-import AdhocMetricEditPopoverTitle from '../../../../javascripts/explore/components/AdhocMetricEditPopoverTitle';
-import { AGGREGATES } from '../../../../javascripts/explore/constants';
+import AdhocMetric from '../../../../src/explore/AdhocMetric';
+import AdhocMetricEditPopoverTitle from '../../../../src/explore/components/AdhocMetricEditPopoverTitle';
+import { AGGREGATES } from '../../../../src/explore/constants';
 
 const columns = [
   { type: 'VARCHAR(255)', column_name: 'source' },
diff --git a/superset/assets/spec/javascripts/explore/components/AdhocMetricEditPopover_spec.jsx b/superset/assets/spec/javascripts/explore/components/AdhocMetricEditPopover_spec.jsx
index 8a79e0cd22..eebc703869 100644
--- a/superset/assets/spec/javascripts/explore/components/AdhocMetricEditPopover_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/AdhocMetricEditPopover_spec.jsx
@@ -6,9 +6,9 @@ import { describe, it } from 'mocha';
 import { shallow } from 'enzyme';
 import { Button, FormGroup, Popover } from 'react-bootstrap';
 
-import AdhocMetric, { EXPRESSION_TYPES } from '../../../../javascripts/explore/AdhocMetric';
-import AdhocMetricEditPopover from '../../../../javascripts/explore/components/AdhocMetricEditPopover';
-import { AGGREGATES } from '../../../../javascripts/explore/constants';
+import AdhocMetric, { EXPRESSION_TYPES } from '../../../../src/explore/AdhocMetric';
+import AdhocMetricEditPopover from '../../../../src/explore/components/AdhocMetricEditPopover';
+import { AGGREGATES } from '../../../../src/explore/constants';
 
 const columns = [
   { type: 'VARCHAR(255)', column_name: 'source' },
diff --git a/superset/assets/spec/javascripts/explore/components/AdhocMetricOption_spec.jsx b/superset/assets/spec/javascripts/explore/components/AdhocMetricOption_spec.jsx
index ac36825984..4ed5d68d7d 100644
--- a/superset/assets/spec/javascripts/explore/components/AdhocMetricOption_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/AdhocMetricOption_spec.jsx
@@ -6,9 +6,9 @@ import { describe, it } from 'mocha';
 import { shallow } from 'enzyme';
 import { Label, OverlayTrigger } from 'react-bootstrap';
 
-import AdhocMetric from '../../../../javascripts/explore/AdhocMetric';
-import AdhocMetricOption from '../../../../javascripts/explore/components/AdhocMetricOption';
-import { AGGREGATES } from '../../../../javascripts/explore/constants';
+import AdhocMetric from '../../../../src/explore/AdhocMetric';
+import AdhocMetricOption from '../../../../src/explore/components/AdhocMetricOption';
+import { AGGREGATES } from '../../../../src/explore/constants';
 
 const columns = [
   { type: 'VARCHAR(255)', column_name: 'source' },
diff --git a/superset/assets/spec/javascripts/explore/components/AggregateOption_spec.jsx b/superset/assets/spec/javascripts/explore/components/AggregateOption_spec.jsx
index a1fb317969..233eb8d75f 100644
--- a/superset/assets/spec/javascripts/explore/components/AggregateOption_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/AggregateOption_spec.jsx
@@ -4,7 +4,7 @@ import { expect } from 'chai';
 import { describe, it } from 'mocha';
 import { shallow } from 'enzyme';
 
-import AggregateOption from '../../../../javascripts/explore/components/AggregateOption';
+import AggregateOption from '../../../../src/explore/components/AggregateOption';
 
 describe('AggregateOption', () => {
   it('renders the aggregate', () => {
diff --git a/superset/assets/spec/javascripts/explore/components/BoundsControl_spec.jsx b/superset/assets/spec/javascripts/explore/components/BoundsControl_spec.jsx
index b4318e4be3..522329a512 100644
--- a/superset/assets/spec/javascripts/explore/components/BoundsControl_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/BoundsControl_spec.jsx
@@ -6,7 +6,7 @@ import { expect } from 'chai';
 import { describe, it, beforeEach } from 'mocha';
 import { mount } from 'enzyme';
 
-import BoundsControl from '../../../../javascripts/explore/components/controls/BoundsControl';
+import BoundsControl from '../../../../src/explore/components/controls/BoundsControl';
 
 const defaultProps = {
   name: 'y_axis_bounds',
diff --git a/superset/assets/spec/javascripts/explore/components/CheckboxControl_spec.jsx b/superset/assets/spec/javascripts/explore/components/CheckboxControl_spec.jsx
index 66b11a4198..a3312450b0 100644
--- a/superset/assets/spec/javascripts/explore/components/CheckboxControl_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/CheckboxControl_spec.jsx
@@ -5,9 +5,9 @@ import { expect } from 'chai';
 import { describe, it, beforeEach } from 'mocha';
 import { shallow } from 'enzyme';
 
-import CheckboxControl from '../../../../javascripts/explore/components/controls/CheckboxControl';
-import ControlHeader from '../../../../javascripts/explore/components/ControlHeader';
-import Checkbox from '../../../../javascripts/components/Checkbox';
+import CheckboxControl from '../../../../src/explore/components/controls/CheckboxControl';
+import ControlHeader from '../../../../src/explore/components/ControlHeader';
+import Checkbox from '../../../../src/components/Checkbox';
 
 const defaultProps = {
   name: 'show_legend',
diff --git a/superset/assets/spec/javascripts/explore/components/ColorPickerControl_spec.jsx b/superset/assets/spec/javascripts/explore/components/ColorPickerControl_spec.jsx
index 9ce2f47864..ec58638569 100644
--- a/superset/assets/spec/javascripts/explore/components/ColorPickerControl_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/ColorPickerControl_spec.jsx
@@ -7,8 +7,8 @@ import { OverlayTrigger } from 'react-bootstrap';
 import { SketchPicker } from 'react-color';
 
 import ColorPickerControl from
-  '../../../../javascripts/explore/components/controls/ColorPickerControl';
-import ControlHeader from '../../../../javascripts/explore/components/ControlHeader';
+  '../../../../src/explore/components/controls/ColorPickerControl';
+import ControlHeader from '../../../../src/explore/components/ControlHeader';
 
 const defaultProps = {
   value: { },
diff --git a/superset/assets/spec/javascripts/explore/components/ColorScheme_spec.jsx b/superset/assets/spec/javascripts/explore/components/ColorScheme_spec.jsx
index 1f5ee69f6c..a7d4d66ab6 100644
--- a/superset/assets/spec/javascripts/explore/components/ColorScheme_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/ColorScheme_spec.jsx
@@ -6,8 +6,8 @@ import { mount } from 'enzyme';
 import { Creatable } from 'react-select';
 
 import ColorSchemeControl from
-  '../../../../javascripts/explore/components/controls/ColorSchemeControl';
-import { ALL_COLOR_SCHEMES } from '../../../../javascripts/modules/colors';
+  '../../../../src/explore/components/controls/ColorSchemeControl';
+import { ALL_COLOR_SCHEMES } from '../../../../src/modules/colors';
 
 const defaultProps = {
   options: Object.keys(ALL_COLOR_SCHEMES).map(s => ([s, s])),
diff --git a/superset/assets/spec/javascripts/explore/components/ControlPanelSection_spec.jsx b/superset/assets/spec/javascripts/explore/components/ControlPanelSection_spec.jsx
index 05eac64572..c63392e41e 100644
--- a/superset/assets/spec/javascripts/explore/components/ControlPanelSection_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/ControlPanelSection_spec.jsx
@@ -5,10 +5,10 @@ import { shallow } from 'enzyme';
 import { Panel } from 'react-bootstrap';
 
 import InfoTooltipWithTrigger from
-  '../../../../javascripts/components/InfoTooltipWithTrigger';
+  '../../../../src/components/InfoTooltipWithTrigger';
 
 import ControlPanelSection from
-  '../../../../javascripts/explore/components/ControlPanelSection';
+  '../../../../src/explore/components/ControlPanelSection';
 
 const defaultProps = {
   children: <div>a child element</div>,
diff --git a/superset/assets/spec/javascripts/explore/components/ControlPanelsContainer_spec.jsx b/superset/assets/spec/javascripts/explore/components/ControlPanelsContainer_spec.jsx
index 1f4dd6e2a9..54579906a6 100644
--- a/superset/assets/spec/javascripts/explore/components/ControlPanelsContainer_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/ControlPanelsContainer_spec.jsx
@@ -3,11 +3,11 @@ import { expect } from 'chai';
 import { describe, it, beforeEach } from 'mocha';
 import { shallow } from 'enzyme';
 import { getFormDataFromControls, defaultControls }
-  from '../../../../javascripts/explore/stores/store';
+  from '../../../../src/explore/stores/store';
 import {
   ControlPanelsContainer,
-} from '../../../../javascripts/explore/components/ControlPanelsContainer';
-import ControlPanelSection from '../../../../javascripts/explore/components/ControlPanelSection';
+} from '../../../../src/explore/components/ControlPanelsContainer';
+import ControlPanelSection from '../../../../src/explore/components/ControlPanelSection';
 
 const defaultProps = {
   datasource_type: 'table',
diff --git a/superset/assets/spec/javascripts/explore/components/ControlRow_spec.jsx b/superset/assets/spec/javascripts/explore/components/ControlRow_spec.jsx
index d472583c3e..118799eb8e 100644
--- a/superset/assets/spec/javascripts/explore/components/ControlRow_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/ControlRow_spec.jsx
@@ -2,7 +2,7 @@ import React from 'react';
 import { expect } from 'chai';
 import { describe, it } from 'mocha';
 import { shallow } from 'enzyme';
-import ControlSetRow from '../../../../javascripts/explore/components/ControlRow';
+import ControlSetRow from '../../../../src/explore/components/ControlRow';
 
 describe('ControlSetRow', () => {
   it('renders a single row with one element', () => {
diff --git a/superset/assets/spec/javascripts/explore/components/DatasourceControl_spec.jsx b/superset/assets/spec/javascripts/explore/components/DatasourceControl_spec.jsx
index d206829cd7..c8d1390850 100644
--- a/superset/assets/spec/javascripts/explore/components/DatasourceControl_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/DatasourceControl_spec.jsx
@@ -4,7 +4,7 @@ import { expect } from 'chai';
 import { describe, it, beforeEach } from 'mocha';
 import { shallow } from 'enzyme';
 import { Modal } from 'react-bootstrap';
-import DatasourceControl from '../../../../javascripts/explore/components/controls/DatasourceControl';
+import DatasourceControl from '../../../../src/explore/components/controls/DatasourceControl';
 
 const defaultProps = {
   name: 'datasource',
diff --git a/superset/assets/spec/javascripts/explore/components/DateFilterControl_spec.jsx b/superset/assets/spec/javascripts/explore/components/DateFilterControl_spec.jsx
index 54db5c9cf3..0892d05abb 100644
--- a/superset/assets/spec/javascripts/explore/components/DateFilterControl_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/DateFilterControl_spec.jsx
@@ -6,8 +6,8 @@ import { describe, it, beforeEach } from 'mocha';
 import { shallow } from 'enzyme';
 import { Button } from 'react-bootstrap';
 
-import DateFilterControl from '../../../../javascripts/explore/components/controls/DateFilterControl';
-import ControlHeader from '../../../../javascripts/explore/components/ControlHeader';
+import DateFilterControl from '../../../../src/explore/components/controls/DateFilterControl';
+import ControlHeader from '../../../../src/explore/components/ControlHeader';
 
 const defaultProps = {
   animation: false,
diff --git a/superset/assets/spec/javascripts/explore/components/DisplayQueryButton_spec.jsx b/superset/assets/spec/javascripts/explore/components/DisplayQueryButton_spec.jsx
index 3a30dc6e3b..196e07751c 100644
--- a/superset/assets/spec/javascripts/explore/components/DisplayQueryButton_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/DisplayQueryButton_spec.jsx
@@ -3,9 +3,9 @@ import { expect } from 'chai';
 import { describe, it } from 'mocha';
 import { mount } from 'enzyme';
 import { Modal } from 'react-bootstrap';
-import ModalTrigger from './../../../../javascripts/components/ModalTrigger';
+import ModalTrigger from './../../../../src/components/ModalTrigger';
 
-import DisplayQueryButton from '../../../../javascripts/explore/components/DisplayQueryButton';
+import DisplayQueryButton from '../../../../src/explore/components/DisplayQueryButton';
 
 describe('DisplayQueryButton', () => {
   const defaultProps = {
diff --git a/superset/assets/spec/javascripts/explore/components/EmbedCodeButton_spec.jsx b/superset/assets/spec/javascripts/explore/components/EmbedCodeButton_spec.jsx
index f60b254ee0..3789fcc8af 100644
--- a/superset/assets/spec/javascripts/explore/components/EmbedCodeButton_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/EmbedCodeButton_spec.jsx
@@ -5,8 +5,8 @@ import { shallow, mount } from 'enzyme';
 import { OverlayTrigger } from 'react-bootstrap';
 import sinon from 'sinon';
 
-import EmbedCodeButton from '../../../../javascripts/explore/components/EmbedCodeButton';
-import * as exploreUtils from '../../../../javascripts/explore/exploreUtils';
+import EmbedCodeButton from '../../../../src/explore/components/EmbedCodeButton';
+import * as exploreUtils from '../../../../src/explore/exploreUtils';
 
 describe('EmbedCodeButton', () => {
   const defaultProps = {
diff --git a/superset/assets/spec/javascripts/explore/components/ExploreActionButtons_spec.jsx b/superset/assets/spec/javascripts/explore/components/ExploreActionButtons_spec.jsx
index 545446ecbe..03be96fecf 100644
--- a/superset/assets/spec/javascripts/explore/components/ExploreActionButtons_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/ExploreActionButtons_spec.jsx
@@ -3,7 +3,7 @@ import { expect } from 'chai';
 import { describe, it } from 'mocha';
 import { shallow } from 'enzyme';
 import ExploreActionButtons from
-  '../../../../javascripts/explore/components/ExploreActionButtons';
+  '../../../../src/explore/components/ExploreActionButtons';
 
 describe('ExploreActionButtons', () => {
   const defaultProps = {
diff --git a/superset/assets/spec/javascripts/explore/components/ExploreChartHeader_spec.jsx b/superset/assets/spec/javascripts/explore/components/ExploreChartHeader_spec.jsx
index 2875e8398e..03c6ad17f9 100644
--- a/superset/assets/spec/javascripts/explore/components/ExploreChartHeader_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/ExploreChartHeader_spec.jsx
@@ -3,9 +3,9 @@ import { expect } from 'chai';
 import { describe, it } from 'mocha';
 import { shallow } from 'enzyme';
 
-import ExploreChartHeader from '../../../../javascripts/explore/components/ExploreChartHeader';
-import ExploreActionButtons from '../../../../javascripts/explore/components/ExploreActionButtons';
-import EditableTitle from '../../../../javascripts/components/EditableTitle';
+import ExploreChartHeader from '../../../../src/explore/components/ExploreChartHeader';
+import ExploreActionButtons from '../../../../src/explore/components/ExploreActionButtons';
+import EditableTitle from '../../../../src/components/EditableTitle';
 
 const mockProps = {
   actions: {},
diff --git a/superset/assets/spec/javascripts/explore/components/ExploreChartPanel_spec.js b/superset/assets/spec/javascripts/explore/components/ExploreChartPanel_spec.js
index 1417d5eeea..b159f17cb6 100644
--- a/superset/assets/spec/javascripts/explore/components/ExploreChartPanel_spec.js
+++ b/superset/assets/spec/javascripts/explore/components/ExploreChartPanel_spec.js
@@ -5,7 +5,7 @@
 // import { expect } from 'chai';
 // import { describe, it } from 'mocha';
 
-// import ChartContainer from '../../../../javascripts/explore/components/ChartContainer';
+// import ChartContainer from '../../../../src/explore/components/ChartContainer';
 
 // describe('ChartContainer', () => {
 //   const mockProps = {
diff --git a/superset/assets/spec/javascripts/explore/components/ExploreViewContainer_spec.js b/superset/assets/spec/javascripts/explore/components/ExploreViewContainer_spec.js
index 0db058fcdd..9fe35e8bcb 100644
--- a/superset/assets/spec/javascripts/explore/components/ExploreViewContainer_spec.js
+++ b/superset/assets/spec/javascripts/explore/components/ExploreViewContainer_spec.js
@@ -7,13 +7,13 @@
 // import { shallow } from 'enzyme';
 
 // import ExploreViewContainer
-//   from '../../../../javascripts/explore/components/ExploreViewContainer';
+//   from '../../../../src/explore/components/ExploreViewContainer';
 // import QueryAndSaveBtns
-//   from '../../../../javascripts/explore/components/QueryAndSaveBtns';
+//   from '../../../../src/explore/components/QueryAndSaveBtns';
 // import ControlPanelsContainer
-//   from '../../../../javascripts/explore/components/ControlPanelsContainer';
+//   from '../../../../src/explore/components/ControlPanelsContainer';
 // import ChartContainer
-//   from '../../../../javascripts/explore/components/ChartContainer';
+//   from '../../../../src/explore/components/ChartContainer';
 
 // describe('ExploreViewContainer', () => {
 //   it('renders', () => {
diff --git a/superset/assets/spec/javascripts/explore/components/FilterControl_spec.jsx b/superset/assets/spec/javascripts/explore/components/FilterControl_spec.jsx
index 02beedcc87..69f8b2794f 100644
--- a/superset/assets/spec/javascripts/explore/components/FilterControl_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/FilterControl_spec.jsx
@@ -5,8 +5,8 @@ import sinon from 'sinon';
 import { expect } from 'chai';
 import { describe, it, beforeEach } from 'mocha';
 import { shallow } from 'enzyme';
-import FilterControl from '../../../../javascripts/explore/components/controls/FilterControl';
-import Filter from '../../../../javascripts/explore/components/controls/Filter';
+import FilterControl from '../../../../src/explore/components/controls/FilterControl';
+import Filter from '../../../../src/explore/components/controls/Filter';
 
 const $ = window.$ = require('jquery');
 
diff --git a/superset/assets/spec/javascripts/explore/components/Filter_spec.jsx b/superset/assets/spec/javascripts/explore/components/Filter_spec.jsx
index 854f940a25..1a4c395807 100644
--- a/superset/assets/spec/javascripts/explore/components/Filter_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/Filter_spec.jsx
@@ -6,8 +6,8 @@ import sinon from 'sinon';
 import { expect } from 'chai';
 import { describe, it, beforeEach } from 'mocha';
 import { shallow } from 'enzyme';
-import Filter from '../../../../javascripts/explore/components/controls/Filter';
-import SelectControl from '../../../../javascripts/explore/components/controls/SelectControl';
+import Filter from '../../../../src/explore/components/controls/Filter';
+import SelectControl from '../../../../src/explore/components/controls/SelectControl';
 
 const defaultProps = {
   changeFilter: sinon.spy(),
diff --git a/superset/assets/spec/javascripts/explore/components/FixedOrMetricControl_spec.jsx b/superset/assets/spec/javascripts/explore/components/FixedOrMetricControl_spec.jsx
index 6f5a1aa5b5..97a685822c 100644
--- a/superset/assets/spec/javascripts/explore/components/FixedOrMetricControl_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/FixedOrMetricControl_spec.jsx
@@ -6,12 +6,12 @@ import { shallow } from 'enzyme';
 import { OverlayTrigger } from 'react-bootstrap';
 
 import FixedOrMetricControl from
-  '../../../../javascripts/explore/components/controls/FixedOrMetricControl';
+  '../../../../src/explore/components/controls/FixedOrMetricControl';
 import SelectControl from
-  '../../../../javascripts/explore/components/controls/SelectControl';
+  '../../../../src/explore/components/controls/SelectControl';
 import TextControl from
-  '../../../../javascripts/explore/components/controls/TextControl';
-import ControlHeader from '../../../../javascripts/explore/components/ControlHeader';
+  '../../../../src/explore/components/controls/TextControl';
+import ControlHeader from '../../../../src/explore/components/ControlHeader';
 
 const defaultProps = {
   value: { },
diff --git a/superset/assets/spec/javascripts/explore/components/MetricDefinitionOption_spec.jsx b/superset/assets/spec/javascripts/explore/components/MetricDefinitionOption_spec.jsx
index e39c225b6a..18129666cd 100644
--- a/superset/assets/spec/javascripts/explore/components/MetricDefinitionOption_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/MetricDefinitionOption_spec.jsx
@@ -4,10 +4,10 @@ import { expect } from 'chai';
 import { describe, it } from 'mocha';
 import { shallow } from 'enzyme';
 
-import MetricDefinitionOption from '../../../../javascripts/explore/components/MetricDefinitionOption';
-import MetricOption from '../../../../javascripts/components/MetricOption';
-import ColumnOption from '../../../../javascripts/components/ColumnOption';
-import AggregateOption from '../../../../javascripts/explore/components/AggregateOption';
+import MetricDefinitionOption from '../../../../src/explore/components/MetricDefinitionOption';
+import MetricOption from '../../../../src/components/MetricOption';
+import ColumnOption from '../../../../src/components/ColumnOption';
+import AggregateOption from '../../../../src/explore/components/AggregateOption';
 
 describe('MetricDefinitionOption', () => {
   it('renders a MetricOption given a saved metric', () => {
diff --git a/superset/assets/spec/javascripts/explore/components/MetricDefinitionValue_spec.jsx b/superset/assets/spec/javascripts/explore/components/MetricDefinitionValue_spec.jsx
index 5690c21010..896a5276e2 100644
--- a/superset/assets/spec/javascripts/explore/components/MetricDefinitionValue_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/MetricDefinitionValue_spec.jsx
@@ -4,11 +4,11 @@ import { expect } from 'chai';
 import { describe, it } from 'mocha';
 import { shallow } from 'enzyme';
 
-import MetricDefinitionValue from '../../../../javascripts/explore/components/MetricDefinitionValue';
-import MetricOption from '../../../../javascripts/components/MetricOption';
-import AdhocMetricOption from '../../../../javascripts/explore/components/AdhocMetricOption';
-import AdhocMetric from '../../../../javascripts/explore/AdhocMetric';
-import { AGGREGATES } from '../../../../javascripts/explore/constants';
+import MetricDefinitionValue from '../../../../src/explore/components/MetricDefinitionValue';
+import MetricOption from '../../../../src/components/MetricOption';
+import AdhocMetricOption from '../../../../src/explore/components/AdhocMetricOption';
+import AdhocMetric from '../../../../src/explore/AdhocMetric';
+import { AGGREGATES } from '../../../../src/explore/constants';
 
 const sumValueAdhocMetric = new AdhocMetric({
   column: { type: 'DOUBLE', column_name: 'value' },
diff --git a/superset/assets/spec/javascripts/explore/components/MetricsControl_spec.jsx b/superset/assets/spec/javascripts/explore/components/MetricsControl_spec.jsx
index 285f2b26b0..e52161a89c 100644
--- a/superset/assets/spec/javascripts/explore/components/MetricsControl_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/MetricsControl_spec.jsx
@@ -5,10 +5,10 @@ import { expect } from 'chai';
 import { describe, it } from 'mocha';
 import { shallow } from 'enzyme';
 
-import MetricsControl from '../../../../javascripts/explore/components/controls/MetricsControl';
-import { AGGREGATES } from '../../../../javascripts/explore/constants';
-import OnPasteSelect from '../../../../javascripts/components/OnPasteSelect';
-import AdhocMetric, { EXPRESSION_TYPES } from '../../../../javascripts/explore/AdhocMetric';
+import MetricsControl from '../../../../src/explore/components/controls/MetricsControl';
+import { AGGREGATES } from '../../../../src/explore/constants';
+import OnPasteSelect from '../../../../src/components/OnPasteSelect';
+import AdhocMetric, { EXPRESSION_TYPES } from '../../../../src/explore/AdhocMetric';
 
 const defaultProps = {
   name: 'metrics',
diff --git a/superset/assets/spec/javascripts/explore/components/QueryAndSaveBtns_spec.jsx b/superset/assets/spec/javascripts/explore/components/QueryAndSaveBtns_spec.jsx
index fcb6371896..c22a7bb7ab 100644
--- a/superset/assets/spec/javascripts/explore/components/QueryAndSaveBtns_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/QueryAndSaveBtns_spec.jsx
@@ -4,8 +4,8 @@ import { expect } from 'chai';
 import { shallow } from 'enzyme';
 import sinon from 'sinon';
 
-import QueryAndSaveButtons from '../../../../javascripts/explore/components/QueryAndSaveBtns';
-import Button from '../../../../javascripts/components/Button';
+import QueryAndSaveButtons from '../../../../src/explore/components/QueryAndSaveBtns';
+import Button from '../../../../src/components/Button';
 
 describe('QueryAndSaveButtons', () => {
   const defaultProps = {
diff --git a/superset/assets/spec/javascripts/explore/components/RowCountLabel_spec.jsx b/superset/assets/spec/javascripts/explore/components/RowCountLabel_spec.jsx
index 1642fd7df6..9cdd4851b5 100644
--- a/superset/assets/spec/javascripts/explore/components/RowCountLabel_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/RowCountLabel_spec.jsx
@@ -4,9 +4,9 @@ import { describe, it } from 'mocha';
 import { shallow } from 'enzyme';
 import { Label } from 'react-bootstrap';
 
-import TooltipWrapper from './../../../../javascripts/components/TooltipWrapper';
+import TooltipWrapper from './../../../../src/components/TooltipWrapper';
 
-import RowCountLabel from '../../../../javascripts/explore/components/RowCountLabel';
+import RowCountLabel from '../../../../src/explore/components/RowCountLabel';
 
 describe('RowCountLabel', () => {
   const defaultProps = {
diff --git a/superset/assets/spec/javascripts/explore/components/RunQueryActionButton_spec.jsx b/superset/assets/spec/javascripts/explore/components/RunQueryActionButton_spec.jsx
index 141e471d00..33ab84487a 100644
--- a/superset/assets/spec/javascripts/explore/components/RunQueryActionButton_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/RunQueryActionButton_spec.jsx
@@ -4,8 +4,8 @@ import { describe, it, beforeEach } from 'mocha';
 import { shallow } from 'enzyme';
 
 import RunQueryActionButton
-  from '../../../../javascripts/SqlLab/components/RunQueryActionButton';
-import Button from '../../../../javascripts/components/Button';
+  from '../../../../src/SqlLab/components/RunQueryActionButton';
+import Button from '../../../../src/components/Button';
 
 describe('RunQueryActionButton', () => {
   let wrapper;
diff --git a/superset/assets/spec/javascripts/explore/components/SaveModal_spec.jsx b/superset/assets/spec/javascripts/explore/components/SaveModal_spec.jsx
index 00d040aa1e..6f452b3a22 100644
--- a/superset/assets/spec/javascripts/explore/components/SaveModal_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/SaveModal_spec.jsx
@@ -8,9 +8,9 @@ import { shallow, mount } from 'enzyme';
 import { Modal, Button, Radio } from 'react-bootstrap';
 import sinon from 'sinon';
 
-import * as exploreUtils from '../../../../javascripts/explore/exploreUtils';
-import * as saveModalActions from '../../../../javascripts/explore/actions/saveModalActions';
-import SaveModal from '../../../../javascripts/explore/components/SaveModal';
+import * as exploreUtils from '../../../../src/explore/exploreUtils';
+import * as saveModalActions from '../../../../src/explore/actions/saveModalActions';
+import SaveModal from '../../../../src/explore/components/SaveModal';
 
 const $ = window.$ = require('jquery');
 
diff --git a/superset/assets/spec/javascripts/explore/components/SelectControl_spec.jsx b/superset/assets/spec/javascripts/explore/components/SelectControl_spec.jsx
index d0eea9c801..38194e5cba 100644
--- a/superset/assets/spec/javascripts/explore/components/SelectControl_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/SelectControl_spec.jsx
@@ -6,9 +6,9 @@ import sinon from 'sinon';
 import { expect } from 'chai';
 import { describe, it, beforeEach } from 'mocha';
 import { shallow } from 'enzyme';
-import OnPasteSelect from '../../../../javascripts/components/OnPasteSelect';
-import VirtualizedRendererWrap from '../../../../javascripts/components/VirtualizedRendererWrap';
-import SelectControl from '../../../../javascripts/explore/components/controls/SelectControl';
+import OnPasteSelect from '../../../../src/components/OnPasteSelect';
+import VirtualizedRendererWrap from '../../../../src/components/VirtualizedRendererWrap';
+import SelectControl from '../../../../src/explore/components/controls/SelectControl';
 
 const defaultProps = {
   choices: [['1 year ago', '1 year ago'], ['today', 'today']],
diff --git a/superset/assets/spec/javascripts/explore/components/TextArea_spec.jsx b/superset/assets/spec/javascripts/explore/components/TextArea_spec.jsx
index 701e2d5151..c1253f0933 100644
--- a/superset/assets/spec/javascripts/explore/components/TextArea_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/TextArea_spec.jsx
@@ -7,7 +7,7 @@ import { describe, it, beforeEach } from 'mocha';
 import { shallow } from 'enzyme';
 import AceEditor from 'react-ace';
 
-import TextAreaControl from '../../../../javascripts/explore/components/controls/TextAreaControl';
+import TextAreaControl from '../../../../src/explore/components/controls/TextAreaControl';
 
 const defaultProps = {
   name: 'x_axis_label',
diff --git a/superset/assets/spec/javascripts/explore/components/TimeSeriesColumnControl_spec.jsx b/superset/assets/spec/javascripts/explore/components/TimeSeriesColumnControl_spec.jsx
index 2f8cd6b913..7e28ab0d8a 100644
--- a/superset/assets/spec/javascripts/explore/components/TimeSeriesColumnControl_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/TimeSeriesColumnControl_spec.jsx
@@ -6,7 +6,7 @@ import { expect } from 'chai';
 import { describe, it, beforeEach } from 'mocha';
 import { shallow } from 'enzyme';
 
-import TimeSeriesColumnControl from '../../../../javascripts/explore/components/controls/TimeSeriesColumnControl';
+import TimeSeriesColumnControl from '../../../../src/explore/components/controls/TimeSeriesColumnControl';
 
 const defaultProps = {
   name: 'x_axis_label',
diff --git a/superset/assets/spec/javascripts/explore/components/URLShortLinkButton_spec.jsx b/superset/assets/spec/javascripts/explore/components/URLShortLinkButton_spec.jsx
index 74d0d041a8..986daaa434 100644
--- a/superset/assets/spec/javascripts/explore/components/URLShortLinkButton_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/URLShortLinkButton_spec.jsx
@@ -4,7 +4,7 @@ import { describe, it } from 'mocha';
 import { shallow } from 'enzyme';
 
 import { OverlayTrigger } from 'react-bootstrap';
-import URLShortLinkButton from '../../../../javascripts/explore/components/URLShortLinkButton';
+import URLShortLinkButton from '../../../../src/explore/components/URLShortLinkButton';
 
 describe('URLShortLinkButton', () => {
   const defaultProps = {
diff --git a/superset/assets/spec/javascripts/explore/components/ViewportControl_spec.jsx b/superset/assets/spec/javascripts/explore/components/ViewportControl_spec.jsx
index 9864d83890..a840e7cbb3 100644
--- a/superset/assets/spec/javascripts/explore/components/ViewportControl_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/ViewportControl_spec.jsx
@@ -6,10 +6,10 @@ import { shallow } from 'enzyme';
 import { OverlayTrigger, Label } from 'react-bootstrap';
 
 import ViewportControl from
-  '../../../../javascripts/explore/components/controls/ViewportControl';
+  '../../../../src/explore/components/controls/ViewportControl';
 import TextControl from
-  '../../../../javascripts/explore/components/controls/TextControl';
-import ControlHeader from '../../../../javascripts/explore/components/ControlHeader';
+  '../../../../src/explore/components/controls/TextControl';
+import ControlHeader from '../../../../src/explore/components/ControlHeader';
 
 const defaultProps = {
   value: {
diff --git a/superset/assets/spec/javascripts/explore/components/VizTypeControl_spec.jsx b/superset/assets/spec/javascripts/explore/components/VizTypeControl_spec.jsx
index ba0ba58146..03b73c9eae 100644
--- a/superset/assets/spec/javascripts/explore/components/VizTypeControl_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/VizTypeControl_spec.jsx
@@ -4,7 +4,7 @@ import { expect } from 'chai';
 import { describe, it, beforeEach } from 'mocha';
 import { shallow } from 'enzyme';
 import { Modal } from 'react-bootstrap';
-import VizTypeControl from '../../../../javascripts/explore/components/controls/VizTypeControl';
+import VizTypeControl from '../../../../src/explore/components/controls/VizTypeControl';
 
 const defaultProps = {
   name: 'viz_type',
diff --git a/superset/assets/spec/javascripts/explore/exploreActions_spec.js b/superset/assets/spec/javascripts/explore/exploreActions_spec.js
index d37fc46dcc..31d92510ad 100644
--- a/superset/assets/spec/javascripts/explore/exploreActions_spec.js
+++ b/superset/assets/spec/javascripts/explore/exploreActions_spec.js
@@ -3,10 +3,10 @@ import { it, describe } from 'mocha';
 import { expect } from 'chai';
 import sinon from 'sinon';
 import $ from 'jquery';
-import * as chartActions from '../../../javascripts/chart/chartAction';
-import * as actions from '../../../javascripts/explore/actions/exploreActions';
-import { defaultState } from '../../../javascripts/explore/stores/store';
-import exploreReducer from '../../../javascripts/explore/reducers/exploreReducer';
+import * as chartActions from '../../../src/chart/chartAction';
+import * as actions from '../../../src/explore/actions/exploreActions';
+import { defaultState } from '../../../src/explore/stores/store';
+import exploreReducer from '../../../src/explore/reducers/exploreReducer';
 
 describe('reducers', () => {
   it('sets correct control value given a key and value', () => {
diff --git a/superset/assets/spec/javascripts/explore/utils_spec.jsx b/superset/assets/spec/javascripts/explore/utils_spec.jsx
index 9f855d2f39..8bfea68464 100644
--- a/superset/assets/spec/javascripts/explore/utils_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/utils_spec.jsx
@@ -1,7 +1,7 @@
 import { it, describe } from 'mocha';
 import { expect } from 'chai';
 import URI from 'urijs';
-import { getExploreUrlAndPayload, getExploreLongUrl } from '../../../javascripts/explore/exploreUtils';
+import { getExploreUrlAndPayload, getExploreLongUrl } from '../../../src/explore/exploreUtils';
 
 describe('exploreUtils', () => {
   const location = window.location;
diff --git a/superset/assets/spec/javascripts/modules/colors_spec.jsx b/superset/assets/spec/javascripts/modules/colors_spec.jsx
index 2a24633fe7..e83b4732b1 100644
--- a/superset/assets/spec/javascripts/modules/colors_spec.jsx
+++ b/superset/assets/spec/javascripts/modules/colors_spec.jsx
@@ -1,7 +1,7 @@
 import { it, describe } from 'mocha';
 import { expect } from 'chai';
 
-import { ALL_COLOR_SCHEMES, getColorFromScheme, hexToRGB } from '../../../javascripts/modules/colors';
+import { ALL_COLOR_SCHEMES, getColorFromScheme, hexToRGB } from '../../../src/modules/colors';
 
 describe('colors', () => {
   it('default to bnbColors', () => {
diff --git a/superset/assets/spec/javascripts/modules/dates_spec.js b/superset/assets/spec/javascripts/modules/dates_spec.js
index 9eecaf19c4..94dbfa6b1b 100644
--- a/superset/assets/spec/javascripts/modules/dates_spec.js
+++ b/superset/assets/spec/javascripts/modules/dates_spec.js
@@ -8,7 +8,7 @@ import {
   epochTimeXHoursAgo,
   epochTimeXDaysAgo,
   epochTimeXYearsAgo,
- } from '../../../javascripts/modules/dates';
+ } from '../../../src/modules/dates';
 
 describe('tickMultiFormat', () => {
   it('is a function', () => {
diff --git a/superset/assets/spec/javascripts/modules/geo_spec.jsx b/superset/assets/spec/javascripts/modules/geo_spec.jsx
index 758bf15a13..db51bb4f06 100644
--- a/superset/assets/spec/javascripts/modules/geo_spec.jsx
+++ b/superset/assets/spec/javascripts/modules/geo_spec.jsx
@@ -1,7 +1,7 @@
 import { it, describe } from 'mocha';
 import { expect } from 'chai';
 
-import { unitToRadius } from '../../../javascripts/modules/geo';
+import { unitToRadius } from '../../../src/modules/geo';
 
 const METER_TO_MILE = 1609.34;
 
diff --git a/superset/assets/spec/javascripts/modules/sandbox_spec.jsx b/superset/assets/spec/javascripts/modules/sandbox_spec.jsx
index 85b36472fc..05283b0461 100644
--- a/superset/assets/spec/javascripts/modules/sandbox_spec.jsx
+++ b/superset/assets/spec/javascripts/modules/sandbox_spec.jsx
@@ -1,7 +1,7 @@
 import { it, describe } from 'mocha';
 import { expect } from 'chai';
 
-import sandboxedEval from '../../../javascripts/modules/sandbox';
+import sandboxedEval from '../../../src/modules/sandbox';
 
 describe('sandboxedEval', () => {
   it('works like a basic eval', () => {
diff --git a/superset/assets/spec/javascripts/modules/utils_spec.jsx b/superset/assets/spec/javascripts/modules/utils_spec.jsx
index 309d62f4cf..f219c6e706 100644
--- a/superset/assets/spec/javascripts/modules/utils_spec.jsx
+++ b/superset/assets/spec/javascripts/modules/utils_spec.jsx
@@ -4,7 +4,7 @@ import {
   tryNumify, slugify, formatSelectOptionsForRange, d3format,
   d3FormatPreset, d3TimeFormatPreset, defaultNumberFormatter,
   mainMetric,
-} from '../../../javascripts/modules/utils';
+} from '../../../src/modules/utils';
 
 describe('utils', () => {
   it('tryNumify works as expected', () => {
diff --git a/superset/assets/spec/javascripts/profile/App_spec.jsx b/superset/assets/spec/javascripts/profile/App_spec.jsx
index 6484416cf8..dcef27be7a 100644
--- a/superset/assets/spec/javascripts/profile/App_spec.jsx
+++ b/superset/assets/spec/javascripts/profile/App_spec.jsx
@@ -5,7 +5,7 @@ import { describe, it } from 'mocha';
 import { expect } from 'chai';
 
 import { user } from './fixtures';
-import App from '../../../javascripts/profile/components/App';
+import App from '../../../src/profile/components/App';
 
 describe('App', () => {
   const mockedProps = {
diff --git a/superset/assets/spec/javascripts/profile/CreatedContent_spec.jsx b/superset/assets/spec/javascripts/profile/CreatedContent_spec.jsx
index 64e72fccb4..ac33d99ea5 100644
--- a/superset/assets/spec/javascripts/profile/CreatedContent_spec.jsx
+++ b/superset/assets/spec/javascripts/profile/CreatedContent_spec.jsx
@@ -3,8 +3,8 @@ import { mount } from 'enzyme';
 import { describe, it } from 'mocha';
 import { expect } from 'chai';
 import { user } from './fixtures';
-import CreatedContent from '../../../javascripts/profile/components/CreatedContent';
-import TableLoader from '../../../javascripts/profile/components/TableLoader';
+import CreatedContent from '../../../src/profile/components/CreatedContent';
+import TableLoader from '../../../src/profile/components/TableLoader';
 
 
 describe('CreatedContent', () => {
diff --git a/superset/assets/spec/javascripts/profile/EditableTitle_spec.jsx b/superset/assets/spec/javascripts/profile/EditableTitle_spec.jsx
index 9a9e55148a..de0ca80d53 100644
--- a/superset/assets/spec/javascripts/profile/EditableTitle_spec.jsx
+++ b/superset/assets/spec/javascripts/profile/EditableTitle_spec.jsx
@@ -4,7 +4,7 @@ import { describe, it } from 'mocha';
 import sinon from 'sinon';
 import { expect } from 'chai';
 
-import EditableTable from '../../../javascripts/components/EditableTitle';
+import EditableTable from '../../../src/components/EditableTitle';
 
 describe('EditableTitle', () => {
   const callback = sinon.spy();
diff --git a/superset/assets/spec/javascripts/profile/Favorites_spec.jsx b/superset/assets/spec/javascripts/profile/Favorites_spec.jsx
index 592dc43933..c9315dcd3c 100644
--- a/superset/assets/spec/javascripts/profile/Favorites_spec.jsx
+++ b/superset/assets/spec/javascripts/profile/Favorites_spec.jsx
@@ -4,8 +4,8 @@ import { describe, it } from 'mocha';
 import { expect } from 'chai';
 
 import { user } from './fixtures';
-import Favorites from '../../../javascripts/profile/components/Favorites';
-import TableLoader from '../../../javascripts/profile/components/TableLoader';
+import Favorites from '../../../src/profile/components/Favorites';
+import TableLoader from '../../../src/profile/components/TableLoader';
 
 describe('Favorites', () => {
   const mockedProps = {
diff --git a/superset/assets/spec/javascripts/profile/RecentActivity_spec.jsx b/superset/assets/spec/javascripts/profile/RecentActivity_spec.jsx
index 64a1908e80..f3c200f7a8 100644
--- a/superset/assets/spec/javascripts/profile/RecentActivity_spec.jsx
+++ b/superset/assets/spec/javascripts/profile/RecentActivity_spec.jsx
@@ -4,8 +4,8 @@ import { describe, it } from 'mocha';
 import { expect } from 'chai';
 
 import { user } from './fixtures';
-import RecentActivity from '../../../javascripts/profile/components/RecentActivity';
-import TableLoader from '../../../javascripts/profile/components/TableLoader';
+import RecentActivity from '../../../src/profile/components/RecentActivity';
+import TableLoader from '../../../src/profile/components/TableLoader';
 
 
 describe('RecentActivity', () => {
diff --git a/superset/assets/spec/javascripts/profile/Security_spec.jsx b/superset/assets/spec/javascripts/profile/Security_spec.jsx
index 1ea7387add..20376d2416 100644
--- a/superset/assets/spec/javascripts/profile/Security_spec.jsx
+++ b/superset/assets/spec/javascripts/profile/Security_spec.jsx
@@ -4,7 +4,7 @@ import { describe, it } from 'mocha';
 import { expect } from 'chai';
 
 import { user, userNoPerms } from './fixtures';
-import Security from '../../../javascripts/profile/components/Security';
+import Security from '../../../src/profile/components/Security';
 
 
 describe('Security', () => {
diff --git a/superset/assets/spec/javascripts/profile/UserInfo_spec.jsx b/superset/assets/spec/javascripts/profile/UserInfo_spec.jsx
index 360443635b..315dd6fd1f 100644
--- a/superset/assets/spec/javascripts/profile/UserInfo_spec.jsx
+++ b/superset/assets/spec/javascripts/profile/UserInfo_spec.jsx
@@ -6,7 +6,7 @@ import { describe, it } from 'mocha';
 import { expect } from 'chai';
 
 import { user } from './fixtures';
-import UserInfo from '../../../javascripts/profile/components/UserInfo';
+import UserInfo from '../../../src/profile/components/UserInfo';
 
 
 describe('UserInfo', () => {
diff --git a/superset/assets/spec/javascripts/sqllab/AlertsWrapper_spec.jsx b/superset/assets/spec/javascripts/sqllab/AlertsWrapper_spec.jsx
index 2dc31a3510..9adec4fbbb 100644
--- a/superset/assets/spec/javascripts/sqllab/AlertsWrapper_spec.jsx
+++ b/superset/assets/spec/javascripts/sqllab/AlertsWrapper_spec.jsx
@@ -3,7 +3,7 @@ import { describe, it } from 'mocha';
 import { expect } from 'chai';
 import { shallow } from 'enzyme';
 import AlertContainer from 'react-alert';
-import AlertsWrapper from '../../../javascripts/components/AlertsWrapper';
+import AlertsWrapper from '../../../src/components/AlertsWrapper';
 
 describe('AlertsWrapper', () => {
   let wrapper;
diff --git a/superset/assets/spec/javascripts/sqllab/App_spec.jsx b/superset/assets/spec/javascripts/sqllab/App_spec.jsx
index b52f475f83..8d9facb0c2 100644
--- a/superset/assets/spec/javascripts/sqllab/App_spec.jsx
+++ b/superset/assets/spec/javascripts/sqllab/App_spec.jsx
@@ -7,9 +7,9 @@ import { describe, it } from 'mocha';
 import { expect } from 'chai';
 import sinon from 'sinon';
 
-import App from '../../../javascripts/SqlLab/components/App';
-import TabbedSqlEditors from '../../../javascripts/SqlLab/components/TabbedSqlEditors';
-import { sqlLabReducer } from '../../../javascripts/SqlLab/reducers';
+import App from '../../../src/SqlLab/components/App';
+import TabbedSqlEditors from '../../../src/SqlLab/components/TabbedSqlEditors';
+import { sqlLabReducer } from '../../../src/SqlLab/reducers';
 
 describe('App', () => {
   const middlewares = [thunk];
diff --git a/superset/assets/spec/javascripts/sqllab/ColumnElement_spec.jsx b/superset/assets/spec/javascripts/sqllab/ColumnElement_spec.jsx
index 236576c4cf..fe4e9c413a 100644
--- a/superset/assets/spec/javascripts/sqllab/ColumnElement_spec.jsx
+++ b/superset/assets/spec/javascripts/sqllab/ColumnElement_spec.jsx
@@ -4,7 +4,7 @@ import { describe, it } from 'mocha';
 import { expect } from 'chai';
 
 import { mockedActions, table } from './fixtures';
-import ColumnElement from '../../../javascripts/SqlLab/components/ColumnElement';
+import ColumnElement from '../../../src/SqlLab/components/ColumnElement';
 
 
 describe('ColumnElement', () => {
diff --git a/superset/assets/spec/javascripts/sqllab/CopyQueryTabUrl_spec.jsx b/superset/assets/spec/javascripts/sqllab/CopyQueryTabUrl_spec.jsx
index 895e2c3b60..dcbb64e1a1 100644
--- a/superset/assets/spec/javascripts/sqllab/CopyQueryTabUrl_spec.jsx
+++ b/superset/assets/spec/javascripts/sqllab/CopyQueryTabUrl_spec.jsx
@@ -3,7 +3,7 @@ import { describe, it } from 'mocha';
 import { expect } from 'chai';
 import { initialState } from './fixtures';
 
-import CopyQueryTabUrl from '../../../javascripts/SqlLab/components/CopyQueryTabUrl';
+import CopyQueryTabUrl from '../../../src/SqlLab/components/CopyQueryTabUrl';
 
 describe('CopyQueryTabUrl', () => {
   const mockedProps = {
diff --git a/superset/assets/spec/javascripts/sqllab/HighlightedSql_spec.jsx b/superset/assets/spec/javascripts/sqllab/HighlightedSql_spec.jsx
index 0b9ae88f5f..634e8a9d4f 100644
--- a/superset/assets/spec/javascripts/sqllab/HighlightedSql_spec.jsx
+++ b/superset/assets/spec/javascripts/sqllab/HighlightedSql_spec.jsx
@@ -4,8 +4,8 @@ import { mount, shallow } from 'enzyme';
 import { describe, it } from 'mocha';
 import { expect } from 'chai';
 
-import HighlightedSql from '../../../javascripts/SqlLab/components/HighlightedSql';
-import ModalTrigger from '../../../javascripts/components/ModalTrigger';
+import HighlightedSql from '../../../src/SqlLab/components/HighlightedSql';
+import ModalTrigger from '../../../src/components/ModalTrigger';
 
 
 describe('HighlightedSql', () => {
diff --git a/superset/assets/spec/javascripts/sqllab/Link_spec.jsx b/superset/assets/spec/javascripts/sqllab/Link_spec.jsx
index 083874ad55..e884d23841 100644
--- a/superset/assets/spec/javascripts/sqllab/Link_spec.jsx
+++ b/superset/assets/spec/javascripts/sqllab/Link_spec.jsx
@@ -3,7 +3,7 @@ import { shallow } from 'enzyme';
 import { describe, it } from 'mocha';
 import { expect } from 'chai';
 
-import Link from '../../../javascripts/SqlLab/components/Link';
+import Link from '../../../src/SqlLab/components/Link';
 
 describe('Link', () => {
   const mockedProps = {
diff --git a/superset/assets/spec/javascripts/sqllab/QuerySearch_spec.jsx b/superset/assets/spec/javascripts/sqllab/QuerySearch_spec.jsx
index 3892745966..cff450137d 100644
--- a/superset/assets/spec/javascripts/sqllab/QuerySearch_spec.jsx
+++ b/superset/assets/spec/javascripts/sqllab/QuerySearch_spec.jsx
@@ -6,7 +6,7 @@ import { describe, it } from 'mocha';
 import { expect } from 'chai';
 import sinon from 'sinon';
 
-import QuerySearch from '../../../javascripts/SqlLab/components/QuerySearch';
+import QuerySearch from '../../../src/SqlLab/components/QuerySearch';
 
 describe('QuerySearch', () => {
   const mockedProps = {
diff --git a/superset/assets/spec/javascripts/sqllab/QueryStateLabel_spec.jsx b/superset/assets/spec/javascripts/sqllab/QueryStateLabel_spec.jsx
index 597706587d..b8f6dd5185 100644
--- a/superset/assets/spec/javascripts/sqllab/QueryStateLabel_spec.jsx
+++ b/superset/assets/spec/javascripts/sqllab/QueryStateLabel_spec.jsx
@@ -4,7 +4,7 @@ import { shallow } from 'enzyme';
 import { describe, it } from 'mocha';
 import { expect } from 'chai';
 
-import QueryStateLabel from '../../../javascripts/SqlLab/components/QueryStateLabel';
+import QueryStateLabel from '../../../src/SqlLab/components/QueryStateLabel';
 
 describe('SavedQuery', () => {
   const mockedProps = {
diff --git a/superset/assets/spec/javascripts/sqllab/QueryTable_spec.jsx b/superset/assets/spec/javascripts/sqllab/QueryTable_spec.jsx
index 7c593b76ee..5e2560a15a 100644
--- a/superset/assets/spec/javascripts/sqllab/QueryTable_spec.jsx
+++ b/superset/assets/spec/javascripts/sqllab/QueryTable_spec.jsx
@@ -5,7 +5,7 @@ import { expect } from 'chai';
 import { Table } from 'reactable';
 
 import { queries } from './fixtures';
-import QueryTable from '../../../javascripts/SqlLab/components/QueryTable';
+import QueryTable from '../../../src/SqlLab/components/QueryTable';
 
 describe('QueryTable', () => {
   const mockedProps = {
diff --git a/superset/assets/spec/javascripts/sqllab/ResultSet_spec.jsx b/superset/assets/spec/javascripts/sqllab/ResultSet_spec.jsx
index ab79f2981f..b1f2708a5b 100644
--- a/superset/assets/spec/javascripts/sqllab/ResultSet_spec.jsx
+++ b/superset/assets/spec/javascripts/sqllab/ResultSet_spec.jsx
@@ -5,9 +5,9 @@ import { expect } from 'chai';
 import sinon from 'sinon';
 
 import { Alert, ProgressBar, Button } from 'react-bootstrap';
-import FilterableTable from '../../../javascripts/components/FilterableTable/FilterableTable';
-import VisualizeModal from '../../../javascripts/SqlLab/components/VisualizeModal';
-import ResultSet from '../../../javascripts/SqlLab/components/ResultSet';
+import FilterableTable from '../../../src/components/FilterableTable/FilterableTable';
+import VisualizeModal from '../../../src/SqlLab/components/VisualizeModal';
+import ResultSet from '../../../src/SqlLab/components/ResultSet';
 import { queries, stoppedQuery, runningQuery, cachedQuery } from './fixtures';
 
 describe('ResultSet', () => {
diff --git a/superset/assets/spec/javascripts/sqllab/SaveQuery_spec.jsx b/superset/assets/spec/javascripts/sqllab/SaveQuery_spec.jsx
index 146a0746b8..865b67aa44 100644
--- a/superset/assets/spec/javascripts/sqllab/SaveQuery_spec.jsx
+++ b/superset/assets/spec/javascripts/sqllab/SaveQuery_spec.jsx
@@ -3,8 +3,8 @@ import { FormControl } from 'react-bootstrap';
 import { shallow } from 'enzyme';
 import { describe, it } from 'mocha';
 import { expect } from 'chai';
-import SaveQuery from '../../../javascripts/SqlLab/components/SaveQuery';
-import ModalTrigger from '../../../javascripts/components/ModalTrigger';
+import SaveQuery from '../../../src/SqlLab/components/SaveQuery';
+import ModalTrigger from '../../../src/components/ModalTrigger';
 
 describe('SavedQuery', () => {
   const mockedProps = {
diff --git a/superset/assets/spec/javascripts/sqllab/SqlEditorLeftBar_spec.jsx b/superset/assets/spec/javascripts/sqllab/SqlEditorLeftBar_spec.jsx
index 5755c658d9..df7035a96d 100644
--- a/superset/assets/spec/javascripts/sqllab/SqlEditorLeftBar_spec.jsx
+++ b/superset/assets/spec/javascripts/sqllab/SqlEditorLeftBar_spec.jsx
@@ -6,8 +6,8 @@ import { expect } from 'chai';
 
 import $ from 'jquery';
 import { table, defaultQueryEditor, databases, tables } from './fixtures';
-import SqlEditorLeftBar from '../../../javascripts/SqlLab/components/SqlEditorLeftBar';
-import TableElement from '../../../javascripts/SqlLab/components/TableElement';
+import SqlEditorLeftBar from '../../../src/SqlLab/components/SqlEditorLeftBar';
+import TableElement from '../../../src/SqlLab/components/TableElement';
 
 global.notify = {
   error: () => {},
diff --git a/superset/assets/spec/javascripts/sqllab/SqlEditor_spec.jsx b/superset/assets/spec/javascripts/sqllab/SqlEditor_spec.jsx
index 739120f9be..d1b58d32ed 100644
--- a/superset/assets/spec/javascripts/sqllab/SqlEditor_spec.jsx
+++ b/superset/assets/spec/javascripts/sqllab/SqlEditor_spec.jsx
@@ -4,8 +4,8 @@ import { describe, it } from 'mocha';
 import { expect } from 'chai';
 
 import { initialState, queries, table } from './fixtures';
-import SqlEditor from '../../../javascripts/SqlLab/components/SqlEditor';
-import SqlEditorLeftBar from '../../../javascripts/SqlLab/components/SqlEditorLeftBar';
+import SqlEditor from '../../../src/SqlLab/components/SqlEditor';
+import SqlEditorLeftBar from '../../../src/SqlLab/components/SqlEditorLeftBar';
 
 describe('SqlEditor', () => {
   const mockedProps = {
diff --git a/superset/assets/spec/javascripts/sqllab/TabStatusIcon_spec.jsx b/superset/assets/spec/javascripts/sqllab/TabStatusIcon_spec.jsx
index 1dde254cc3..d200d40379 100644
--- a/superset/assets/spec/javascripts/sqllab/TabStatusIcon_spec.jsx
+++ b/superset/assets/spec/javascripts/sqllab/TabStatusIcon_spec.jsx
@@ -4,7 +4,7 @@ import { expect } from 'chai';
 import { describe, it } from 'mocha';
 import { shallow } from 'enzyme';
 
-import TabStatusIcon from '../../../javascripts/SqlLab/components/TabStatusIcon';
+import TabStatusIcon from '../../../src/SqlLab/components/TabStatusIcon';
 
 function setup() {
   const onClose = sinon.spy();
diff --git a/superset/assets/spec/javascripts/sqllab/TabbedSqlEditors_spec.jsx b/superset/assets/spec/javascripts/sqllab/TabbedSqlEditors_spec.jsx
index 11e889eefb..c898662f57 100644
--- a/superset/assets/spec/javascripts/sqllab/TabbedSqlEditors_spec.jsx
+++ b/superset/assets/spec/javascripts/sqllab/TabbedSqlEditors_spec.jsx
@@ -10,8 +10,8 @@ import { expect } from 'chai';
 import sinon from 'sinon';
 
 import { table, initialState } from './fixtures';
-import TabbedSqlEditors from '../../../javascripts/SqlLab/components/TabbedSqlEditors';
-import SqlEditor from '../../../javascripts/SqlLab/components/SqlEditor';
+import TabbedSqlEditors from '../../../src/SqlLab/components/TabbedSqlEditors';
+import SqlEditor from '../../../src/SqlLab/components/SqlEditor';
 
 describe('TabbedSqlEditors', () => {
   const middlewares = [thunk];
diff --git a/superset/assets/spec/javascripts/sqllab/TableElement_spec.jsx b/superset/assets/spec/javascripts/sqllab/TableElement_spec.jsx
index f28d43d9c3..ff30871585 100644
--- a/superset/assets/spec/javascripts/sqllab/TableElement_spec.jsx
+++ b/superset/assets/spec/javascripts/sqllab/TableElement_spec.jsx
@@ -3,9 +3,9 @@ import { mount, shallow } from 'enzyme';
 import { describe, it } from 'mocha';
 import { expect } from 'chai';
 
-import Link from '../../../javascripts/SqlLab/components/Link';
-import TableElement from '../../../javascripts/SqlLab/components/TableElement';
-import ColumnElement from '../../../javascripts/SqlLab/components/ColumnElement';
+import Link from '../../../src/SqlLab/components/Link';
+import TableElement from '../../../src/SqlLab/components/TableElement';
+import ColumnElement from '../../../src/SqlLab/components/ColumnElement';
 import { mockedActions, table } from './fixtures';
 
 describe('TableElement', () => {
diff --git a/superset/assets/spec/javascripts/sqllab/Timer_spec.jsx b/superset/assets/spec/javascripts/sqllab/Timer_spec.jsx
index e9172a928c..681d731426 100644
--- a/superset/assets/spec/javascripts/sqllab/Timer_spec.jsx
+++ b/superset/assets/spec/javascripts/sqllab/Timer_spec.jsx
@@ -4,8 +4,8 @@ import { describe, it, beforeEach } from 'mocha';
 import { expect } from 'chai';
 import sinon from 'sinon';
 
-import Timer from '../../../javascripts/components/Timer';
-import { now } from '../../../javascripts/modules/dates';
+import Timer from '../../../src/components/Timer';
+import { now } from '../../../src/modules/dates';
 
 
 describe('Timer', () => {
diff --git a/superset/assets/spec/javascripts/sqllab/VisualizeModal_spec.jsx b/superset/assets/spec/javascripts/sqllab/VisualizeModal_spec.jsx
index 7c9907982f..cacebeb336 100644
--- a/superset/assets/spec/javascripts/sqllab/VisualizeModal_spec.jsx
+++ b/superset/assets/spec/javascripts/sqllab/VisualizeModal_spec.jsx
@@ -11,11 +11,11 @@ import sinon from 'sinon';
 import $ from 'jquery';
 import shortid from 'shortid';
 import { queries } from './fixtures';
-import { sqlLabReducer } from '../../../javascripts/SqlLab/reducers';
-import * as actions from '../../../javascripts/SqlLab/actions';
-import { VISUALIZE_VALIDATION_ERRORS } from '../../../javascripts/SqlLab/constants';
-import VisualizeModal from '../../../javascripts/SqlLab/components/VisualizeModal';
-import * as exploreUtils from '../../../javascripts/explore/exploreUtils';
+import { sqlLabReducer } from '../../../src/SqlLab/reducers';
+import * as actions from '../../../src/SqlLab/actions';
+import { VISUALIZE_VALIDATION_ERRORS } from '../../../src/SqlLab/constants';
+import VisualizeModal from '../../../src/SqlLab/components/VisualizeModal';
+import * as exploreUtils from '../../../src/explore/exploreUtils';
 
 global.notify = {
   info: () => {},
diff --git a/superset/assets/spec/javascripts/sqllab/actions_spec.js b/superset/assets/spec/javascripts/sqllab/actions_spec.js
index 3a957b8f28..34c32a23a0 100644
--- a/superset/assets/spec/javascripts/sqllab/actions_spec.js
+++ b/superset/assets/spec/javascripts/sqllab/actions_spec.js
@@ -3,7 +3,7 @@ import { it, describe } from 'mocha';
 import { expect } from 'chai';
 import sinon from 'sinon';
 import $ from 'jquery';
-import * as actions from '../../../javascripts/SqlLab/actions';
+import * as actions from '../../../src/SqlLab/actions';
 import { query } from './fixtures';
 
 describe('async actions', () => {
diff --git a/superset/assets/spec/javascripts/sqllab/fixtures.js b/superset/assets/spec/javascripts/sqllab/fixtures.js
index 2fef334ef7..c05a745884 100644
--- a/superset/assets/spec/javascripts/sqllab/fixtures.js
+++ b/superset/assets/spec/javascripts/sqllab/fixtures.js
@@ -1,5 +1,5 @@
 import sinon from 'sinon';
-import * as actions from '../../../javascripts/SqlLab/actions';
+import * as actions from '../../../src/SqlLab/actions';
 
 export const mockedActions = sinon.stub(Object.assign({}, actions));
 
diff --git a/superset/assets/spec/javascripts/sqllab/reducers_spec.js b/superset/assets/spec/javascripts/sqllab/reducers_spec.js
index a3a5dbf7b5..a23ceb5d57 100644
--- a/superset/assets/spec/javascripts/sqllab/reducers_spec.js
+++ b/superset/assets/spec/javascripts/sqllab/reducers_spec.js
@@ -1,8 +1,8 @@
 import { describe, it } from 'mocha';
 import { expect } from 'chai';
 
-import * as r from '../../../javascripts/SqlLab/reducers';
-import * as actions from '../../../javascripts/SqlLab/actions';
+import * as r from '../../../src/SqlLab/reducers';
+import * as actions from '../../../src/SqlLab/actions';
 import { alert, table, initialState } from './fixtures';
 
 describe('sqlLabReducer', () => {
diff --git a/superset/assets/spec/javascripts/utils/common_spec.jsx b/superset/assets/spec/javascripts/utils/common_spec.jsx
index a3490d476e..5aa4b4334f 100644
--- a/superset/assets/spec/javascripts/utils/common_spec.jsx
+++ b/superset/assets/spec/javascripts/utils/common_spec.jsx
@@ -1,6 +1,6 @@
 import { it, describe } from 'mocha';
 import { expect } from 'chai';
-import { isTruthy } from '../../../javascripts/utils/common';
+import { isTruthy } from '../../../src/utils/common';
 
 describe('utils/common', () => {
   describe('isTruthy', () => {
diff --git a/superset/assets/spec/javascripts/visualizations/nvd3_viz_spec.jsx b/superset/assets/spec/javascripts/visualizations/nvd3_viz_spec.jsx
index c8117234ce..c9ed4d8706 100644
--- a/superset/assets/spec/javascripts/visualizations/nvd3_viz_spec.jsx
+++ b/superset/assets/spec/javascripts/visualizations/nvd3_viz_spec.jsx
@@ -1,7 +1,7 @@
 import { describe, it } from 'mocha';
 import { expect } from 'chai';
 
-import { formatLabel } from '../../../visualizations/nvd3_vis';
+import { formatLabel } from '../../../src/visualizations/nvd3_vis';
 
 describe('nvd3 viz', () => {
   const verboseMap = {
diff --git a/superset/assets/spec/javascripts/welcome/App_spec.jsx b/superset/assets/spec/javascripts/welcome/App_spec.jsx
index 1fc2987a57..46c6fdb906 100644
--- a/superset/assets/spec/javascripts/welcome/App_spec.jsx
+++ b/superset/assets/spec/javascripts/welcome/App_spec.jsx
@@ -4,7 +4,7 @@ import { shallow } from 'enzyme';
 import { describe, it } from 'mocha';
 import { expect } from 'chai';
 
-import App from '../../../javascripts/welcome/App';
+import App from '../../../src/welcome/App';
 
 describe('App', () => {
   const mockedProps = {};
diff --git a/superset/assets/spec/javascripts/welcome/DashboardTable_spec.jsx b/superset/assets/spec/javascripts/welcome/DashboardTable_spec.jsx
index 2a9727942d..113f00cd25 100644
--- a/superset/assets/spec/javascripts/welcome/DashboardTable_spec.jsx
+++ b/superset/assets/spec/javascripts/welcome/DashboardTable_spec.jsx
@@ -3,7 +3,7 @@ import { mount } from 'enzyme';
 import { describe, it } from 'mocha';
 import { expect } from 'chai';
 
-import DashboardTable from '../../../javascripts/welcome/DashboardTable';
+import DashboardTable from '../../../src/welcome/DashboardTable';
 
 const $ = window.$ = require('jquery');
 
diff --git a/superset/assets/javascripts/SqlLab/TODO.md b/superset/assets/src/SqlLab/TODO.md
similarity index 100%
rename from superset/assets/javascripts/SqlLab/TODO.md
rename to superset/assets/src/SqlLab/TODO.md
diff --git a/superset/assets/javascripts/SqlLab/actions.js b/superset/assets/src/SqlLab/actions.js
similarity index 100%
rename from superset/assets/javascripts/SqlLab/actions.js
rename to superset/assets/src/SqlLab/actions.js
diff --git a/superset/assets/javascripts/SqlLab/components/AceEditorWrapper.jsx b/superset/assets/src/SqlLab/components/AceEditorWrapper.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/AceEditorWrapper.jsx
rename to superset/assets/src/SqlLab/components/AceEditorWrapper.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/App.jsx b/superset/assets/src/SqlLab/components/App.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/App.jsx
rename to superset/assets/src/SqlLab/components/App.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/ColumnElement.jsx b/superset/assets/src/SqlLab/components/ColumnElement.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/ColumnElement.jsx
rename to superset/assets/src/SqlLab/components/ColumnElement.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/CopyQueryTabUrl.jsx b/superset/assets/src/SqlLab/components/CopyQueryTabUrl.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/CopyQueryTabUrl.jsx
rename to superset/assets/src/SqlLab/components/CopyQueryTabUrl.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx b/superset/assets/src/SqlLab/components/HighlightedSql.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx
rename to superset/assets/src/SqlLab/components/HighlightedSql.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/Link.jsx b/superset/assets/src/SqlLab/components/Link.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/Link.jsx
rename to superset/assets/src/SqlLab/components/Link.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/QueryAutoRefresh.jsx b/superset/assets/src/SqlLab/components/QueryAutoRefresh.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/QueryAutoRefresh.jsx
rename to superset/assets/src/SqlLab/components/QueryAutoRefresh.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/QueryHistory.jsx b/superset/assets/src/SqlLab/components/QueryHistory.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/QueryHistory.jsx
rename to superset/assets/src/SqlLab/components/QueryHistory.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/QuerySearch.jsx b/superset/assets/src/SqlLab/components/QuerySearch.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/QuerySearch.jsx
rename to superset/assets/src/SqlLab/components/QuerySearch.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/QueryStateLabel.jsx b/superset/assets/src/SqlLab/components/QueryStateLabel.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/QueryStateLabel.jsx
rename to superset/assets/src/SqlLab/components/QueryStateLabel.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/QueryTable.jsx b/superset/assets/src/SqlLab/components/QueryTable.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/QueryTable.jsx
rename to superset/assets/src/SqlLab/components/QueryTable.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/ResultSet.jsx b/superset/assets/src/SqlLab/components/ResultSet.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/ResultSet.jsx
rename to superset/assets/src/SqlLab/components/ResultSet.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx b/superset/assets/src/SqlLab/components/RunQueryActionButton.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx
rename to superset/assets/src/SqlLab/components/RunQueryActionButton.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/SaveQuery.jsx b/superset/assets/src/SqlLab/components/SaveQuery.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/SaveQuery.jsx
rename to superset/assets/src/SqlLab/components/SaveQuery.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/ShareQuery.jsx b/superset/assets/src/SqlLab/components/ShareQuery.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/ShareQuery.jsx
rename to superset/assets/src/SqlLab/components/ShareQuery.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/SouthPane.jsx b/superset/assets/src/SqlLab/components/SouthPane.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/SouthPane.jsx
rename to superset/assets/src/SqlLab/components/SouthPane.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/SqlEditor.jsx b/superset/assets/src/SqlLab/components/SqlEditor.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/SqlEditor.jsx
rename to superset/assets/src/SqlLab/components/SqlEditor.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx b/superset/assets/src/SqlLab/components/SqlEditorLeftBar.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx
rename to superset/assets/src/SqlLab/components/SqlEditorLeftBar.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/TabStatusIcon.jsx b/superset/assets/src/SqlLab/components/TabStatusIcon.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/TabStatusIcon.jsx
rename to superset/assets/src/SqlLab/components/TabStatusIcon.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx b/superset/assets/src/SqlLab/components/TabbedSqlEditors.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx
rename to superset/assets/src/SqlLab/components/TabbedSqlEditors.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/TableElement.jsx b/superset/assets/src/SqlLab/components/TableElement.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/TableElement.jsx
rename to superset/assets/src/SqlLab/components/TableElement.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/TemplateParamsEditor.jsx b/superset/assets/src/SqlLab/components/TemplateParamsEditor.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/TemplateParamsEditor.jsx
rename to superset/assets/src/SqlLab/components/TemplateParamsEditor.jsx
diff --git a/superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx b/superset/assets/src/SqlLab/components/VisualizeModal.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx
rename to superset/assets/src/SqlLab/components/VisualizeModal.jsx
diff --git a/superset/assets/javascripts/SqlLab/constants.js b/superset/assets/src/SqlLab/constants.js
similarity index 100%
rename from superset/assets/javascripts/SqlLab/constants.js
rename to superset/assets/src/SqlLab/constants.js
diff --git a/superset/assets/javascripts/SqlLab/index.jsx b/superset/assets/src/SqlLab/index.jsx
similarity index 100%
rename from superset/assets/javascripts/SqlLab/index.jsx
rename to superset/assets/src/SqlLab/index.jsx
diff --git a/superset/assets/javascripts/SqlLab/main.less b/superset/assets/src/SqlLab/main.less
similarity index 100%
rename from superset/assets/javascripts/SqlLab/main.less
rename to superset/assets/src/SqlLab/main.less
diff --git a/superset/assets/javascripts/SqlLab/reducers.js b/superset/assets/src/SqlLab/reducers.js
similarity index 100%
rename from superset/assets/javascripts/SqlLab/reducers.js
rename to superset/assets/src/SqlLab/reducers.js
diff --git a/superset/assets/javascripts/addSlice/AddSliceContainer.jsx b/superset/assets/src/addSlice/AddSliceContainer.jsx
similarity index 100%
rename from superset/assets/javascripts/addSlice/AddSliceContainer.jsx
rename to superset/assets/src/addSlice/AddSliceContainer.jsx
diff --git a/superset/assets/javascripts/addSlice/index.jsx b/superset/assets/src/addSlice/index.jsx
similarity index 100%
rename from superset/assets/javascripts/addSlice/index.jsx
rename to superset/assets/src/addSlice/index.jsx
diff --git a/superset/assets/javascripts/chart/Chart.jsx b/superset/assets/src/chart/Chart.jsx
similarity index 99%
rename from superset/assets/javascripts/chart/Chart.jsx
rename to superset/assets/src/chart/Chart.jsx
index defe6e4cf3..b69ee3ae3b 100644
--- a/superset/assets/javascripts/chart/Chart.jsx
+++ b/superset/assets/src/chart/Chart.jsx
@@ -10,7 +10,7 @@ import Loading from '../components/Loading';
 import { Logger, LOG_ACTIONS_RENDER_EVENT } from '../logger';
 import StackTraceMessage from '../components/StackTraceMessage';
 import RefreshChartOverlay from '../components/RefreshChartOverlay';
-import visMap from '../../visualizations/main';
+import visMap from '../visualizations/main';
 import sandboxedEval from '../modules/sandbox';
 import './chart.css';
 
diff --git a/superset/assets/javascripts/chart/ChartBody.jsx b/superset/assets/src/chart/ChartBody.jsx
similarity index 100%
rename from superset/assets/javascripts/chart/ChartBody.jsx
rename to superset/assets/src/chart/ChartBody.jsx
diff --git a/superset/assets/javascripts/chart/ChartContainer.jsx b/superset/assets/src/chart/ChartContainer.jsx
similarity index 100%
rename from superset/assets/javascripts/chart/ChartContainer.jsx
rename to superset/assets/src/chart/ChartContainer.jsx
diff --git a/superset/assets/javascripts/chart/chart.css b/superset/assets/src/chart/chart.css
similarity index 100%
rename from superset/assets/javascripts/chart/chart.css
rename to superset/assets/src/chart/chart.css
diff --git a/superset/assets/javascripts/chart/chartAction.js b/superset/assets/src/chart/chartAction.js
similarity index 100%
rename from superset/assets/javascripts/chart/chartAction.js
rename to superset/assets/src/chart/chartAction.js
diff --git a/superset/assets/javascripts/chart/chartReducer.js b/superset/assets/src/chart/chartReducer.js
similarity index 100%
rename from superset/assets/javascripts/chart/chartReducer.js
rename to superset/assets/src/chart/chartReducer.js
diff --git a/superset/assets/javascripts/common.js b/superset/assets/src/common.js
similarity index 100%
rename from superset/assets/javascripts/common.js
rename to superset/assets/src/common.js
diff --git a/superset/assets/javascripts/components/AlertsWrapper.jsx b/superset/assets/src/components/AlertsWrapper.jsx
similarity index 100%
rename from superset/assets/javascripts/components/AlertsWrapper.jsx
rename to superset/assets/src/components/AlertsWrapper.jsx
diff --git a/superset/assets/javascripts/components/AlteredSliceTag.jsx b/superset/assets/src/components/AlteredSliceTag.jsx
similarity index 100%
rename from superset/assets/javascripts/components/AlteredSliceTag.jsx
rename to superset/assets/src/components/AlteredSliceTag.jsx
diff --git a/superset/assets/javascripts/components/AsyncSelect.jsx b/superset/assets/src/components/AsyncSelect.jsx
similarity index 100%
rename from superset/assets/javascripts/components/AsyncSelect.jsx
rename to superset/assets/src/components/AsyncSelect.jsx
diff --git a/superset/assets/javascripts/components/Button.jsx b/superset/assets/src/components/Button.jsx
similarity index 100%
rename from superset/assets/javascripts/components/Button.jsx
rename to superset/assets/src/components/Button.jsx
diff --git a/superset/assets/javascripts/components/CachedLabel.jsx b/superset/assets/src/components/CachedLabel.jsx
similarity index 100%
rename from superset/assets/javascripts/components/CachedLabel.jsx
rename to superset/assets/src/components/CachedLabel.jsx
diff --git a/superset/assets/javascripts/components/Checkbox.jsx b/superset/assets/src/components/Checkbox.jsx
similarity index 100%
rename from superset/assets/javascripts/components/Checkbox.jsx
rename to superset/assets/src/components/Checkbox.jsx
diff --git a/superset/assets/javascripts/components/ColumnOption.jsx b/superset/assets/src/components/ColumnOption.jsx
similarity index 100%
rename from superset/assets/javascripts/components/ColumnOption.jsx
rename to superset/assets/src/components/ColumnOption.jsx
diff --git a/superset/assets/javascripts/components/ColumnTypeLabel.jsx b/superset/assets/src/components/ColumnTypeLabel.jsx
similarity index 100%
rename from superset/assets/javascripts/components/ColumnTypeLabel.jsx
rename to superset/assets/src/components/ColumnTypeLabel.jsx
diff --git a/superset/assets/javascripts/components/CopyToClipboard.jsx b/superset/assets/src/components/CopyToClipboard.jsx
similarity index 100%
rename from superset/assets/javascripts/components/CopyToClipboard.jsx
rename to superset/assets/src/components/CopyToClipboard.jsx
diff --git a/superset/assets/javascripts/components/EditableTitle.jsx b/superset/assets/src/components/EditableTitle.jsx
similarity index 100%
rename from superset/assets/javascripts/components/EditableTitle.jsx
rename to superset/assets/src/components/EditableTitle.jsx
diff --git a/superset/assets/javascripts/components/FaveStar.jsx b/superset/assets/src/components/FaveStar.jsx
similarity index 100%
rename from superset/assets/javascripts/components/FaveStar.jsx
rename to superset/assets/src/components/FaveStar.jsx
diff --git a/superset/assets/javascripts/components/FilterableTable/FilterableTable.jsx b/superset/assets/src/components/FilterableTable/FilterableTable.jsx
similarity index 100%
rename from superset/assets/javascripts/components/FilterableTable/FilterableTable.jsx
rename to superset/assets/src/components/FilterableTable/FilterableTable.jsx
diff --git a/superset/assets/javascripts/components/FilterableTable/FilterableTableStyles.css b/superset/assets/src/components/FilterableTable/FilterableTableStyles.css
similarity index 100%
rename from superset/assets/javascripts/components/FilterableTable/FilterableTableStyles.css
rename to superset/assets/src/components/FilterableTable/FilterableTableStyles.css
diff --git a/superset/assets/javascripts/components/Hotkeys.jsx b/superset/assets/src/components/Hotkeys.jsx
similarity index 100%
rename from superset/assets/javascripts/components/Hotkeys.jsx
rename to superset/assets/src/components/Hotkeys.jsx
diff --git a/superset/assets/javascripts/components/InfoTooltipWithTrigger.jsx b/superset/assets/src/components/InfoTooltipWithTrigger.jsx
similarity index 100%
rename from superset/assets/javascripts/components/InfoTooltipWithTrigger.jsx
rename to superset/assets/src/components/InfoTooltipWithTrigger.jsx
diff --git a/superset/assets/javascripts/components/Loading.jsx b/superset/assets/src/components/Loading.jsx
similarity index 100%
rename from superset/assets/javascripts/components/Loading.jsx
rename to superset/assets/src/components/Loading.jsx
diff --git a/superset/assets/javascripts/components/MetricOption.jsx b/superset/assets/src/components/MetricOption.jsx
similarity index 100%
rename from superset/assets/javascripts/components/MetricOption.jsx
rename to superset/assets/src/components/MetricOption.jsx
diff --git a/superset/assets/javascripts/components/ModalTrigger.jsx b/superset/assets/src/components/ModalTrigger.jsx
similarity index 100%
rename from superset/assets/javascripts/components/ModalTrigger.jsx
rename to superset/assets/src/components/ModalTrigger.jsx
diff --git a/superset/assets/javascripts/components/OnPasteSelect.jsx b/superset/assets/src/components/OnPasteSelect.jsx
similarity index 100%
rename from superset/assets/javascripts/components/OnPasteSelect.jsx
rename to superset/assets/src/components/OnPasteSelect.jsx
diff --git a/superset/assets/javascripts/components/OptionDescription.jsx b/superset/assets/src/components/OptionDescription.jsx
similarity index 100%
rename from superset/assets/javascripts/components/OptionDescription.jsx
rename to superset/assets/src/components/OptionDescription.jsx
diff --git a/superset/assets/javascripts/components/PopoverSection.jsx b/superset/assets/src/components/PopoverSection.jsx
similarity index 100%
rename from superset/assets/javascripts/components/PopoverSection.jsx
rename to superset/assets/src/components/PopoverSection.jsx
diff --git a/superset/assets/javascripts/components/RefreshChartOverlay.jsx b/superset/assets/src/components/RefreshChartOverlay.jsx
similarity index 100%
rename from superset/assets/javascripts/components/RefreshChartOverlay.jsx
rename to superset/assets/src/components/RefreshChartOverlay.jsx
diff --git a/superset/assets/javascripts/components/StackTraceMessage.jsx b/superset/assets/src/components/StackTraceMessage.jsx
similarity index 100%
rename from superset/assets/javascripts/components/StackTraceMessage.jsx
rename to superset/assets/src/components/StackTraceMessage.jsx
diff --git a/superset/assets/javascripts/components/Timer.jsx b/superset/assets/src/components/Timer.jsx
similarity index 100%
rename from superset/assets/javascripts/components/Timer.jsx
rename to superset/assets/src/components/Timer.jsx
diff --git a/superset/assets/javascripts/components/TooltipWrapper.jsx b/superset/assets/src/components/TooltipWrapper.jsx
similarity index 100%
rename from superset/assets/javascripts/components/TooltipWrapper.jsx
rename to superset/assets/src/components/TooltipWrapper.jsx
diff --git a/superset/assets/javascripts/components/VictoryTheme.js b/superset/assets/src/components/VictoryTheme.js
similarity index 100%
rename from superset/assets/javascripts/components/VictoryTheme.js
rename to superset/assets/src/components/VictoryTheme.js
diff --git a/superset/assets/javascripts/components/VirtualizedRendererWrap.jsx b/superset/assets/src/components/VirtualizedRendererWrap.jsx
similarity index 100%
rename from superset/assets/javascripts/components/VirtualizedRendererWrap.jsx
rename to superset/assets/src/components/VirtualizedRendererWrap.jsx
diff --git a/superset/assets/javascripts/dashboard/actions.js b/superset/assets/src/dashboard/actions.js
similarity index 100%
rename from superset/assets/javascripts/dashboard/actions.js
rename to superset/assets/src/dashboard/actions.js
diff --git a/superset/assets/javascripts/dashboard/components/CodeModal.jsx b/superset/assets/src/dashboard/components/CodeModal.jsx
similarity index 100%
rename from superset/assets/javascripts/dashboard/components/CodeModal.jsx
rename to superset/assets/src/dashboard/components/CodeModal.jsx
diff --git a/superset/assets/javascripts/dashboard/components/Controls.jsx b/superset/assets/src/dashboard/components/Controls.jsx
similarity index 100%
rename from superset/assets/javascripts/dashboard/components/Controls.jsx
rename to superset/assets/src/dashboard/components/Controls.jsx
diff --git a/superset/assets/javascripts/dashboard/components/CssEditor.jsx b/superset/assets/src/dashboard/components/CssEditor.jsx
similarity index 100%
rename from superset/assets/javascripts/dashboard/components/CssEditor.jsx
rename to superset/assets/src/dashboard/components/CssEditor.jsx
diff --git a/superset/assets/javascripts/dashboard/components/Dashboard.jsx b/superset/assets/src/dashboard/components/Dashboard.jsx
similarity index 100%
rename from superset/assets/javascripts/dashboard/components/Dashboard.jsx
rename to superset/assets/src/dashboard/components/Dashboard.jsx
diff --git a/superset/assets/javascripts/dashboard/components/DashboardContainer.jsx b/superset/assets/src/dashboard/components/DashboardContainer.jsx
similarity index 100%
rename from superset/assets/javascripts/dashboard/components/DashboardContainer.jsx
rename to superset/assets/src/dashboard/components/DashboardContainer.jsx
diff --git a/superset/assets/javascripts/dashboard/components/GridCell.jsx b/superset/assets/src/dashboard/components/GridCell.jsx
similarity index 100%
rename from superset/assets/javascripts/dashboard/components/GridCell.jsx
rename to superset/assets/src/dashboard/components/GridCell.jsx
diff --git a/superset/assets/javascripts/dashboard/components/GridLayout.jsx b/superset/assets/src/dashboard/components/GridLayout.jsx
similarity index 100%
rename from superset/assets/javascripts/dashboard/components/GridLayout.jsx
rename to superset/assets/src/dashboard/components/GridLayout.jsx
diff --git a/superset/assets/javascripts/dashboard/components/Header.jsx b/superset/assets/src/dashboard/components/Header.jsx
similarity index 100%
rename from superset/assets/javascripts/dashboard/components/Header.jsx
rename to superset/assets/src/dashboard/components/Header.jsx
diff --git a/superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx b/superset/assets/src/dashboard/components/RefreshIntervalModal.jsx
similarity index 100%
rename from superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx
rename to superset/assets/src/dashboard/components/RefreshIntervalModal.jsx
diff --git a/superset/assets/javascripts/dashboard/components/SaveModal.jsx b/superset/assets/src/dashboard/components/SaveModal.jsx
similarity index 100%
rename from superset/assets/javascripts/dashboard/components/SaveModal.jsx
rename to superset/assets/src/dashboard/components/SaveModal.jsx
diff --git a/superset/assets/javascripts/dashboard/components/SliceAdder.jsx b/superset/assets/src/dashboard/components/SliceAdder.jsx
similarity index 100%
rename from superset/assets/javascripts/dashboard/components/SliceAdder.jsx
rename to superset/assets/src/dashboard/components/SliceAdder.jsx
diff --git a/superset/assets/javascripts/dashboard/components/SliceHeader.jsx b/superset/assets/src/dashboard/components/SliceHeader.jsx
similarity index 100%
rename from superset/assets/javascripts/dashboard/components/SliceHeader.jsx
rename to superset/assets/src/dashboard/components/SliceHeader.jsx
diff --git a/superset/assets/javascripts/dashboard/index.jsx b/superset/assets/src/dashboard/index.jsx
similarity index 100%
rename from superset/assets/javascripts/dashboard/index.jsx
rename to superset/assets/src/dashboard/index.jsx
diff --git a/superset/assets/javascripts/dashboard/reducers.js b/superset/assets/src/dashboard/reducers.js
similarity index 100%
rename from superset/assets/javascripts/dashboard/reducers.js
rename to superset/assets/src/dashboard/reducers.js
diff --git a/superset/assets/javascripts/explore/AdhocMetric.js b/superset/assets/src/explore/AdhocMetric.js
similarity index 100%
rename from superset/assets/javascripts/explore/AdhocMetric.js
rename to superset/assets/src/explore/AdhocMetric.js
diff --git a/superset/assets/javascripts/explore/actions/exploreActions.js b/superset/assets/src/explore/actions/exploreActions.js
similarity index 100%
rename from superset/assets/javascripts/explore/actions/exploreActions.js
rename to superset/assets/src/explore/actions/exploreActions.js
diff --git a/superset/assets/javascripts/explore/actions/saveModalActions.js b/superset/assets/src/explore/actions/saveModalActions.js
similarity index 100%
rename from superset/assets/javascripts/explore/actions/saveModalActions.js
rename to superset/assets/src/explore/actions/saveModalActions.js
diff --git a/superset/assets/javascripts/explore/components/AdhocMetricEditPopover.jsx b/superset/assets/src/explore/components/AdhocMetricEditPopover.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/AdhocMetricEditPopover.jsx
rename to superset/assets/src/explore/components/AdhocMetricEditPopover.jsx
diff --git a/superset/assets/javascripts/explore/components/AdhocMetricEditPopoverTitle.jsx b/superset/assets/src/explore/components/AdhocMetricEditPopoverTitle.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/AdhocMetricEditPopoverTitle.jsx
rename to superset/assets/src/explore/components/AdhocMetricEditPopoverTitle.jsx
diff --git a/superset/assets/javascripts/explore/components/AdhocMetricOption.jsx b/superset/assets/src/explore/components/AdhocMetricOption.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/AdhocMetricOption.jsx
rename to superset/assets/src/explore/components/AdhocMetricOption.jsx
diff --git a/superset/assets/javascripts/explore/components/AggregateOption.jsx b/superset/assets/src/explore/components/AggregateOption.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/AggregateOption.jsx
rename to superset/assets/src/explore/components/AggregateOption.jsx
diff --git a/superset/assets/javascripts/explore/components/Control.jsx b/superset/assets/src/explore/components/Control.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/Control.jsx
rename to superset/assets/src/explore/components/Control.jsx
diff --git a/superset/assets/javascripts/explore/components/ControlHeader.jsx b/superset/assets/src/explore/components/ControlHeader.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/ControlHeader.jsx
rename to superset/assets/src/explore/components/ControlHeader.jsx
diff --git a/superset/assets/javascripts/explore/components/ControlPanelSection.jsx b/superset/assets/src/explore/components/ControlPanelSection.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/ControlPanelSection.jsx
rename to superset/assets/src/explore/components/ControlPanelSection.jsx
diff --git a/superset/assets/javascripts/explore/components/ControlPanelsContainer.jsx b/superset/assets/src/explore/components/ControlPanelsContainer.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/ControlPanelsContainer.jsx
rename to superset/assets/src/explore/components/ControlPanelsContainer.jsx
diff --git a/superset/assets/javascripts/explore/components/ControlRow.jsx b/superset/assets/src/explore/components/ControlRow.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/ControlRow.jsx
rename to superset/assets/src/explore/components/ControlRow.jsx
diff --git a/superset/assets/javascripts/explore/components/DisplayQueryButton.jsx b/superset/assets/src/explore/components/DisplayQueryButton.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/DisplayQueryButton.jsx
rename to superset/assets/src/explore/components/DisplayQueryButton.jsx
diff --git a/superset/assets/javascripts/explore/components/EmbedCodeButton.jsx b/superset/assets/src/explore/components/EmbedCodeButton.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/EmbedCodeButton.jsx
rename to superset/assets/src/explore/components/EmbedCodeButton.jsx
diff --git a/superset/assets/javascripts/explore/components/ExploreActionButtons.jsx b/superset/assets/src/explore/components/ExploreActionButtons.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/ExploreActionButtons.jsx
rename to superset/assets/src/explore/components/ExploreActionButtons.jsx
diff --git a/superset/assets/javascripts/explore/components/ExploreChartHeader.jsx b/superset/assets/src/explore/components/ExploreChartHeader.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/ExploreChartHeader.jsx
rename to superset/assets/src/explore/components/ExploreChartHeader.jsx
diff --git a/superset/assets/javascripts/explore/components/ExploreChartPanel.jsx b/superset/assets/src/explore/components/ExploreChartPanel.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/ExploreChartPanel.jsx
rename to superset/assets/src/explore/components/ExploreChartPanel.jsx
diff --git a/superset/assets/javascripts/explore/components/ExploreViewContainer.jsx b/superset/assets/src/explore/components/ExploreViewContainer.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/ExploreViewContainer.jsx
rename to superset/assets/src/explore/components/ExploreViewContainer.jsx
diff --git a/superset/assets/javascripts/explore/components/MetricDefinitionOption.jsx b/superset/assets/src/explore/components/MetricDefinitionOption.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/MetricDefinitionOption.jsx
rename to superset/assets/src/explore/components/MetricDefinitionOption.jsx
diff --git a/superset/assets/javascripts/explore/components/MetricDefinitionValue.jsx b/superset/assets/src/explore/components/MetricDefinitionValue.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/MetricDefinitionValue.jsx
rename to superset/assets/src/explore/components/MetricDefinitionValue.jsx
diff --git a/superset/assets/javascripts/explore/components/QueryAndSaveBtns.jsx b/superset/assets/src/explore/components/QueryAndSaveBtns.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/QueryAndSaveBtns.jsx
rename to superset/assets/src/explore/components/QueryAndSaveBtns.jsx
diff --git a/superset/assets/javascripts/explore/components/RowCountLabel.jsx b/superset/assets/src/explore/components/RowCountLabel.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/RowCountLabel.jsx
rename to superset/assets/src/explore/components/RowCountLabel.jsx
diff --git a/superset/assets/javascripts/explore/components/SaveModal.jsx b/superset/assets/src/explore/components/SaveModal.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/SaveModal.jsx
rename to superset/assets/src/explore/components/SaveModal.jsx
diff --git a/superset/assets/javascripts/explore/components/URLShortLinkButton.jsx b/superset/assets/src/explore/components/URLShortLinkButton.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/URLShortLinkButton.jsx
rename to superset/assets/src/explore/components/URLShortLinkButton.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/AnnotationLayer.jsx b/superset/assets/src/explore/components/controls/AnnotationLayer.jsx
similarity index 99%
rename from superset/assets/javascripts/explore/components/controls/AnnotationLayer.jsx
rename to superset/assets/src/explore/components/controls/AnnotationLayer.jsx
index f6c6103053..fe52905c88 100644
--- a/superset/assets/javascripts/explore/components/controls/AnnotationLayer.jsx
+++ b/superset/assets/src/explore/components/controls/AnnotationLayer.jsx
@@ -462,7 +462,7 @@ export default class AnnotationLayer extends React.PureComponent {
         <SelectControl
           name="annotation-layer-stroke"
           label="Style"
-            // see '../../../../visualizations/nvd3_vis.css'
+            // see '../../../visualizations/nvd3_vis.css'
           options={[
               { value: 'solid', label: 'Solid' },
               { value: 'dashed', label: 'Dashed' },
@@ -475,7 +475,7 @@ export default class AnnotationLayer extends React.PureComponent {
         <SelectControl
           name="annotation-layer-opacity"
           label="Opacity"
-            // see '../../../../visualizations/nvd3_vis.css'
+            // see '../../../visualizations/nvd3_vis.css'
           options={[
               { value: '', label: 'Solid' },
               { value: 'opacityLow', label: '0.2' },
diff --git a/superset/assets/javascripts/explore/components/controls/AnnotationLayerControl.jsx b/superset/assets/src/explore/components/controls/AnnotationLayerControl.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/AnnotationLayerControl.jsx
rename to superset/assets/src/explore/components/controls/AnnotationLayerControl.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/BoundsControl.jsx b/superset/assets/src/explore/components/controls/BoundsControl.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/BoundsControl.jsx
rename to superset/assets/src/explore/components/controls/BoundsControl.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/CheckboxControl.jsx b/superset/assets/src/explore/components/controls/CheckboxControl.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/CheckboxControl.jsx
rename to superset/assets/src/explore/components/controls/CheckboxControl.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/CollectionControl.jsx b/superset/assets/src/explore/components/controls/CollectionControl.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/CollectionControl.jsx
rename to superset/assets/src/explore/components/controls/CollectionControl.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/ColorPickerControl.jsx b/superset/assets/src/explore/components/controls/ColorPickerControl.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/ColorPickerControl.jsx
rename to superset/assets/src/explore/components/controls/ColorPickerControl.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/ColorSchemeControl.jsx b/superset/assets/src/explore/components/controls/ColorSchemeControl.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/ColorSchemeControl.jsx
rename to superset/assets/src/explore/components/controls/ColorSchemeControl.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/DatasourceControl.jsx b/superset/assets/src/explore/components/controls/DatasourceControl.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/DatasourceControl.jsx
rename to superset/assets/src/explore/components/controls/DatasourceControl.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/DateFilterControl.jsx b/superset/assets/src/explore/components/controls/DateFilterControl.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/DateFilterControl.jsx
rename to superset/assets/src/explore/components/controls/DateFilterControl.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/Filter.jsx b/superset/assets/src/explore/components/controls/Filter.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/Filter.jsx
rename to superset/assets/src/explore/components/controls/Filter.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/FilterControl.jsx b/superset/assets/src/explore/components/controls/FilterControl.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/FilterControl.jsx
rename to superset/assets/src/explore/components/controls/FilterControl.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/FixedOrMetricControl.jsx b/superset/assets/src/explore/components/controls/FixedOrMetricControl.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/FixedOrMetricControl.jsx
rename to superset/assets/src/explore/components/controls/FixedOrMetricControl.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/HiddenControl.jsx b/superset/assets/src/explore/components/controls/HiddenControl.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/HiddenControl.jsx
rename to superset/assets/src/explore/components/controls/HiddenControl.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/MetricsControl.jsx b/superset/assets/src/explore/components/controls/MetricsControl.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/MetricsControl.jsx
rename to superset/assets/src/explore/components/controls/MetricsControl.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/SelectAsyncControl.jsx b/superset/assets/src/explore/components/controls/SelectAsyncControl.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/SelectAsyncControl.jsx
rename to superset/assets/src/explore/components/controls/SelectAsyncControl.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/SelectControl.jsx b/superset/assets/src/explore/components/controls/SelectControl.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/SelectControl.jsx
rename to superset/assets/src/explore/components/controls/SelectControl.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/SpatialControl.jsx b/superset/assets/src/explore/components/controls/SpatialControl.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/SpatialControl.jsx
rename to superset/assets/src/explore/components/controls/SpatialControl.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx b/superset/assets/src/explore/components/controls/TextAreaControl.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx
rename to superset/assets/src/explore/components/controls/TextAreaControl.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/TextControl.jsx b/superset/assets/src/explore/components/controls/TextControl.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/TextControl.jsx
rename to superset/assets/src/explore/components/controls/TextControl.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/TimeSeriesColumnControl.jsx b/superset/assets/src/explore/components/controls/TimeSeriesColumnControl.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/TimeSeriesColumnControl.jsx
rename to superset/assets/src/explore/components/controls/TimeSeriesColumnControl.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/ViewportControl.jsx b/superset/assets/src/explore/components/controls/ViewportControl.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/ViewportControl.jsx
rename to superset/assets/src/explore/components/controls/ViewportControl.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx b/superset/assets/src/explore/components/controls/VizTypeControl.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx
rename to superset/assets/src/explore/components/controls/VizTypeControl.jsx
diff --git a/superset/assets/javascripts/explore/components/controls/index.js b/superset/assets/src/explore/components/controls/index.js
similarity index 100%
rename from superset/assets/javascripts/explore/components/controls/index.js
rename to superset/assets/src/explore/components/controls/index.js
diff --git a/superset/assets/javascripts/explore/constants.js b/superset/assets/src/explore/constants.js
similarity index 100%
rename from superset/assets/javascripts/explore/constants.js
rename to superset/assets/src/explore/constants.js
diff --git a/superset/assets/javascripts/explore/exploreUtils.js b/superset/assets/src/explore/exploreUtils.js
similarity index 100%
rename from superset/assets/javascripts/explore/exploreUtils.js
rename to superset/assets/src/explore/exploreUtils.js
diff --git a/superset/assets/javascripts/explore/index.jsx b/superset/assets/src/explore/index.jsx
similarity index 100%
rename from superset/assets/javascripts/explore/index.jsx
rename to superset/assets/src/explore/index.jsx
diff --git a/superset/assets/javascripts/explore/main.css b/superset/assets/src/explore/main.css
similarity index 100%
rename from superset/assets/javascripts/explore/main.css
rename to superset/assets/src/explore/main.css
diff --git a/superset/assets/javascripts/explore/propTypes/adhocMetricType.js b/superset/assets/src/explore/propTypes/adhocMetricType.js
similarity index 100%
rename from superset/assets/javascripts/explore/propTypes/adhocMetricType.js
rename to superset/assets/src/explore/propTypes/adhocMetricType.js
diff --git a/superset/assets/javascripts/explore/propTypes/aggregateOptionType.js b/superset/assets/src/explore/propTypes/aggregateOptionType.js
similarity index 100%
rename from superset/assets/javascripts/explore/propTypes/aggregateOptionType.js
rename to superset/assets/src/explore/propTypes/aggregateOptionType.js
diff --git a/superset/assets/javascripts/explore/propTypes/columnType.js b/superset/assets/src/explore/propTypes/columnType.js
similarity index 100%
rename from superset/assets/javascripts/explore/propTypes/columnType.js
rename to superset/assets/src/explore/propTypes/columnType.js
diff --git a/superset/assets/javascripts/explore/propTypes/savedMetricType.js b/superset/assets/src/explore/propTypes/savedMetricType.js
similarity index 100%
rename from superset/assets/javascripts/explore/propTypes/savedMetricType.js
rename to superset/assets/src/explore/propTypes/savedMetricType.js
diff --git a/superset/assets/javascripts/explore/reducers/exploreReducer.js b/superset/assets/src/explore/reducers/exploreReducer.js
similarity index 100%
rename from superset/assets/javascripts/explore/reducers/exploreReducer.js
rename to superset/assets/src/explore/reducers/exploreReducer.js
diff --git a/superset/assets/javascripts/explore/reducers/index.js b/superset/assets/src/explore/reducers/index.js
similarity index 100%
rename from superset/assets/javascripts/explore/reducers/index.js
rename to superset/assets/src/explore/reducers/index.js
diff --git a/superset/assets/javascripts/explore/reducers/saveModalReducer.js b/superset/assets/src/explore/reducers/saveModalReducer.js
similarity index 100%
rename from superset/assets/javascripts/explore/reducers/saveModalReducer.js
rename to superset/assets/src/explore/reducers/saveModalReducer.js
diff --git a/superset/assets/javascripts/explore/stores/controls.jsx b/superset/assets/src/explore/stores/controls.jsx
similarity index 99%
rename from superset/assets/javascripts/explore/stores/controls.jsx
rename to superset/assets/src/explore/stores/controls.jsx
index 06edf06fb7..0a6443318e 100644
--- a/superset/assets/javascripts/explore/stores/controls.jsx
+++ b/superset/assets/src/explore/stores/controls.jsx
@@ -118,7 +118,7 @@ const groupByControl = {
 
 const sandboxUrl = (
   'https://github.com/apache/incubator-superset/' +
-  'blob/master/superset/assets/javascripts/modules/sandbox.js');
+  'blob/master/superset/assets/src/modules/sandbox.js');
 const jsFunctionInfo = (
   <div>
     {t('For more information about objects are in context in the scope of this function, refer to the')}
diff --git a/superset/assets/javascripts/explore/stores/store.js b/superset/assets/src/explore/stores/store.js
similarity index 100%
rename from superset/assets/javascripts/explore/stores/store.js
rename to superset/assets/src/explore/stores/store.js
diff --git a/superset/assets/javascripts/explore/stores/visTypes.js b/superset/assets/src/explore/stores/visTypes.js
similarity index 100%
rename from superset/assets/javascripts/explore/stores/visTypes.js
rename to superset/assets/src/explore/stores/visTypes.js
diff --git a/superset/assets/javascripts/explore/validators.js b/superset/assets/src/explore/validators.js
similarity index 100%
rename from superset/assets/javascripts/explore/validators.js
rename to superset/assets/src/explore/validators.js
diff --git a/superset/assets/javascripts/i18n.jsx b/superset/assets/src/i18n.jsx
similarity index 100%
rename from superset/assets/javascripts/i18n.jsx
rename to superset/assets/src/i18n.jsx
diff --git a/superset/assets/javascripts/locales.jsx b/superset/assets/src/locales.jsx
similarity index 100%
rename from superset/assets/javascripts/locales.jsx
rename to superset/assets/src/locales.jsx
diff --git a/superset/assets/javascripts/logger.js b/superset/assets/src/logger.js
similarity index 100%
rename from superset/assets/javascripts/logger.js
rename to superset/assets/src/logger.js
diff --git a/superset/assets/javascripts/modules/AnnotationTypes.js b/superset/assets/src/modules/AnnotationTypes.js
similarity index 97%
rename from superset/assets/javascripts/modules/AnnotationTypes.js
rename to superset/assets/src/modules/AnnotationTypes.js
index 28684bbcb6..fc8acb5d3d 100644
--- a/superset/assets/javascripts/modules/AnnotationTypes.js
+++ b/superset/assets/src/modules/AnnotationTypes.js
@@ -1,4 +1,4 @@
-import { VIZ_TYPES } from '../../visualizations/main';
+import { VIZ_TYPES } from '../visualizations/main';
 import vizTypes from '../explore/stores/visTypes';
 
 export const ANNOTATION_TYPES = {
diff --git a/superset/assets/javascripts/modules/colors.js b/superset/assets/src/modules/colors.js
similarity index 100%
rename from superset/assets/javascripts/modules/colors.js
rename to superset/assets/src/modules/colors.js
diff --git a/superset/assets/javascripts/modules/dates.js b/superset/assets/src/modules/dates.js
similarity index 100%
rename from superset/assets/javascripts/modules/dates.js
rename to superset/assets/src/modules/dates.js
diff --git a/superset/assets/javascripts/modules/geo.js b/superset/assets/src/modules/geo.js
similarity index 100%
rename from superset/assets/javascripts/modules/geo.js
rename to superset/assets/src/modules/geo.js
diff --git a/superset/assets/javascripts/modules/sandbox.js b/superset/assets/src/modules/sandbox.js
similarity index 100%
rename from superset/assets/javascripts/modules/sandbox.js
rename to superset/assets/src/modules/sandbox.js
diff --git a/superset/assets/javascripts/modules/time.js b/superset/assets/src/modules/time.js
similarity index 100%
rename from superset/assets/javascripts/modules/time.js
rename to superset/assets/src/modules/time.js
diff --git a/superset/assets/javascripts/modules/utils.js b/superset/assets/src/modules/utils.js
similarity index 100%
rename from superset/assets/javascripts/modules/utils.js
rename to superset/assets/src/modules/utils.js
diff --git a/superset/assets/javascripts/modules/visUtils.js b/superset/assets/src/modules/visUtils.js
similarity index 100%
rename from superset/assets/javascripts/modules/visUtils.js
rename to superset/assets/src/modules/visUtils.js
diff --git a/superset/assets/javascripts/profile/components/App.jsx b/superset/assets/src/profile/components/App.jsx
similarity index 100%
rename from superset/assets/javascripts/profile/components/App.jsx
rename to superset/assets/src/profile/components/App.jsx
diff --git a/superset/assets/javascripts/profile/components/CreatedContent.jsx b/superset/assets/src/profile/components/CreatedContent.jsx
similarity index 100%
rename from superset/assets/javascripts/profile/components/CreatedContent.jsx
rename to superset/assets/src/profile/components/CreatedContent.jsx
diff --git a/superset/assets/javascripts/profile/components/Favorites.jsx b/superset/assets/src/profile/components/Favorites.jsx
similarity index 100%
rename from superset/assets/javascripts/profile/components/Favorites.jsx
rename to superset/assets/src/profile/components/Favorites.jsx
diff --git a/superset/assets/javascripts/profile/components/RecentActivity.jsx b/superset/assets/src/profile/components/RecentActivity.jsx
similarity index 100%
rename from superset/assets/javascripts/profile/components/RecentActivity.jsx
rename to superset/assets/src/profile/components/RecentActivity.jsx
diff --git a/superset/assets/javascripts/profile/components/Security.jsx b/superset/assets/src/profile/components/Security.jsx
similarity index 100%
rename from superset/assets/javascripts/profile/components/Security.jsx
rename to superset/assets/src/profile/components/Security.jsx
diff --git a/superset/assets/javascripts/profile/components/TableLoader.jsx b/superset/assets/src/profile/components/TableLoader.jsx
similarity index 100%
rename from superset/assets/javascripts/profile/components/TableLoader.jsx
rename to superset/assets/src/profile/components/TableLoader.jsx
diff --git a/superset/assets/javascripts/profile/components/UserInfo.jsx b/superset/assets/src/profile/components/UserInfo.jsx
similarity index 100%
rename from superset/assets/javascripts/profile/components/UserInfo.jsx
rename to superset/assets/src/profile/components/UserInfo.jsx
diff --git a/superset/assets/javascripts/profile/index.jsx b/superset/assets/src/profile/index.jsx
similarity index 100%
rename from superset/assets/javascripts/profile/index.jsx
rename to superset/assets/src/profile/index.jsx
diff --git a/superset/assets/javascripts/profile/main.css b/superset/assets/src/profile/main.css
similarity index 100%
rename from superset/assets/javascripts/profile/main.css
rename to superset/assets/src/profile/main.css
diff --git a/superset/assets/javascripts/reduxUtils.js b/superset/assets/src/reduxUtils.js
similarity index 100%
rename from superset/assets/javascripts/reduxUtils.js
rename to superset/assets/src/reduxUtils.js
diff --git a/superset/assets/javascripts/syncBackend.js b/superset/assets/src/syncBackend.js
similarity index 100%
rename from superset/assets/javascripts/syncBackend.js
rename to superset/assets/src/syncBackend.js
diff --git a/superset/assets/javascripts/theme.js b/superset/assets/src/theme.js
similarity index 100%
rename from superset/assets/javascripts/theme.js
rename to superset/assets/src/theme.js
diff --git a/superset/assets/javascripts/utils/common.js b/superset/assets/src/utils/common.js
similarity index 100%
rename from superset/assets/javascripts/utils/common.js
rename to superset/assets/src/utils/common.js
diff --git a/superset/assets/javascripts/utils/reducerUtils.js b/superset/assets/src/utils/reducerUtils.js
similarity index 100%
rename from superset/assets/javascripts/utils/reducerUtils.js
rename to superset/assets/src/utils/reducerUtils.js
diff --git a/superset/assets/visualizations/EventFlow.jsx b/superset/assets/src/visualizations/EventFlow.jsx
similarity index 97%
rename from superset/assets/visualizations/EventFlow.jsx
rename to superset/assets/src/visualizations/EventFlow.jsx
index 83811a5f46..e4b9685c69 100644
--- a/superset/assets/visualizations/EventFlow.jsx
+++ b/superset/assets/src/visualizations/EventFlow.jsx
@@ -9,7 +9,7 @@ import {
   EVENT_NAME,
   ENTITY_ID,
 } from '@data-ui/event-flow';
-import { t } from '../javascripts/locales';
+import { t } from '../locales';
 
 /*
  * This function takes the slice object and json payload as input and renders a
diff --git a/superset/assets/visualizations/Legend.css b/superset/assets/src/visualizations/Legend.css
similarity index 100%
rename from superset/assets/visualizations/Legend.css
rename to superset/assets/src/visualizations/Legend.css
diff --git a/superset/assets/visualizations/Legend.jsx b/superset/assets/src/visualizations/Legend.jsx
similarity index 100%
rename from superset/assets/visualizations/Legend.jsx
rename to superset/assets/src/visualizations/Legend.jsx
diff --git a/superset/assets/visualizations/PlaySlider.css b/superset/assets/src/visualizations/PlaySlider.css
similarity index 100%
rename from superset/assets/visualizations/PlaySlider.css
rename to superset/assets/src/visualizations/PlaySlider.css
diff --git a/superset/assets/visualizations/PlaySlider.jsx b/superset/assets/src/visualizations/PlaySlider.jsx
similarity index 98%
rename from superset/assets/visualizations/PlaySlider.jsx
rename to superset/assets/src/visualizations/PlaySlider.jsx
index d2e0e41303..b72dc635ca 100644
--- a/superset/assets/visualizations/PlaySlider.jsx
+++ b/superset/assets/src/visualizations/PlaySlider.jsx
@@ -8,7 +8,7 @@ import 'bootstrap-slider/dist/css/bootstrap-slider.min.css';
 import ReactBootstrapSlider from 'react-bootstrap-slider';
 import './PlaySlider.css';
 
-import { t } from '../javascripts/locales';
+import { t } from '../locales';
 
 const propTypes = {
   start: PropTypes.number.isRequired,
diff --git a/superset/assets/visualizations/big_number.css b/superset/assets/src/visualizations/big_number.css
similarity index 100%
rename from superset/assets/visualizations/big_number.css
rename to superset/assets/src/visualizations/big_number.css
diff --git a/superset/assets/visualizations/big_number.js b/superset/assets/src/visualizations/big_number.js
similarity index 98%
rename from superset/assets/visualizations/big_number.js
rename to superset/assets/src/visualizations/big_number.js
index f0c3950a25..a45c1aa262 100644
--- a/superset/assets/visualizations/big_number.js
+++ b/superset/assets/src/visualizations/big_number.js
@@ -1,9 +1,9 @@
 import d3 from 'd3';
 import d3tip from 'd3-tip';
-import { d3FormatPreset, d3TimeFormatPreset } from '../javascripts/modules/utils';
+import { d3FormatPreset, d3TimeFormatPreset } from '../modules/utils';
 
 import './big_number.css';
-import '../stylesheets/d3tip.css';
+import '../../stylesheets/d3tip.css';
 
 function bigNumberVis(slice, payload) {
   const div = d3.select(slice.selector);
diff --git a/superset/assets/visualizations/cal_heatmap.css b/superset/assets/src/visualizations/cal_heatmap.css
similarity index 100%
rename from superset/assets/visualizations/cal_heatmap.css
rename to superset/assets/src/visualizations/cal_heatmap.css
diff --git a/superset/assets/visualizations/cal_heatmap.js b/superset/assets/src/visualizations/cal_heatmap.js
similarity index 88%
rename from superset/assets/visualizations/cal_heatmap.js
rename to superset/assets/src/visualizations/cal_heatmap.js
index e7c396cc03..97c6e57132 100644
--- a/superset/assets/visualizations/cal_heatmap.js
+++ b/superset/assets/src/visualizations/cal_heatmap.js
@@ -1,11 +1,11 @@
 import d3 from 'd3';
 
-import { colorScalerFactory } from '../javascripts/modules/colors';
-import CalHeatMap from '../vendor/cal-heatmap/cal-heatmap';
-import '../vendor/cal-heatmap/cal-heatmap.css';
-import { d3TimeFormatPreset, d3FormatPreset } from '../javascripts/modules/utils';
+import { colorScalerFactory } from '../modules/colors';
+import CalHeatMap from '../../vendor/cal-heatmap/cal-heatmap';
+import '../../vendor/cal-heatmap/cal-heatmap.css';
+import { d3TimeFormatPreset, d3FormatPreset } from '../modules/utils';
 import './cal_heatmap.css';
-import { UTC } from '../javascripts/modules/dates';
+import { UTC } from '../modules/dates';
 
 const UTCTS = uts => UTC(new Date(uts)).getTime();
 
diff --git a/superset/assets/visualizations/chord.css b/superset/assets/src/visualizations/chord.css
similarity index 100%
rename from superset/assets/visualizations/chord.css
rename to superset/assets/src/visualizations/chord.css
diff --git a/superset/assets/visualizations/chord.jsx b/superset/assets/src/visualizations/chord.jsx
similarity index 97%
rename from superset/assets/visualizations/chord.jsx
rename to superset/assets/src/visualizations/chord.jsx
index dbb551ca36..54b52617af 100644
--- a/superset/assets/visualizations/chord.jsx
+++ b/superset/assets/src/visualizations/chord.jsx
@@ -1,6 +1,6 @@
 /* eslint-disable no-param-reassign */
 import d3 from 'd3';
-import { getColorFromScheme } from '../javascripts/modules/colors';
+import { getColorFromScheme } from '../modules/colors';
 import './chord.css';
 
 function chordViz(slice, json) {
diff --git a/superset/assets/visualizations/constants.js b/superset/assets/src/visualizations/constants.js
similarity index 100%
rename from superset/assets/visualizations/constants.js
rename to superset/assets/src/visualizations/constants.js
diff --git a/superset/assets/visualizations/countries/belgium.geojson b/superset/assets/src/visualizations/countries/belgium.geojson
similarity index 100%
rename from superset/assets/visualizations/countries/belgium.geojson
rename to superset/assets/src/visualizations/countries/belgium.geojson
diff --git a/superset/assets/visualizations/countries/brazil.geojson b/superset/assets/src/visualizations/countries/brazil.geojson
similarity index 100%
rename from superset/assets/visualizations/countries/brazil.geojson
rename to superset/assets/src/visualizations/countries/brazil.geojson
diff --git a/superset/assets/visualizations/countries/china.geojson b/superset/assets/src/visualizations/countries/china.geojson
similarity index 100%
rename from superset/assets/visualizations/countries/china.geojson
rename to superset/assets/src/visualizations/countries/china.geojson
diff --git a/superset/assets/visualizations/countries/egypt.geojson b/superset/assets/src/visualizations/countries/egypt.geojson
similarity index 100%
rename from superset/assets/visualizations/countries/egypt.geojson
rename to superset/assets/src/visualizations/countries/egypt.geojson
diff --git a/superset/assets/visualizations/countries/france.geojson b/superset/assets/src/visualizations/countries/france.geojson
similarity index 100%
rename from superset/assets/visualizations/countries/france.geojson
rename to superset/assets/src/visualizations/countries/france.geojson
diff --git a/superset/assets/visualizations/countries/germany.geojson b/superset/assets/src/visualizations/countries/germany.geojson
similarity index 100%
rename from superset/assets/visualizations/countries/germany.geojson
rename to superset/assets/src/visualizations/countries/germany.geojson
diff --git a/superset/assets/visualizations/countries/italy.geojson b/superset/assets/src/visualizations/countries/italy.geojson
similarity index 100%
rename from superset/assets/visualizations/countries/italy.geojson
rename to superset/assets/src/visualizations/countries/italy.geojson
diff --git a/superset/assets/visualizations/countries/morocco.geojson b/superset/assets/src/visualizations/countries/morocco.geojson
similarity index 100%
rename from superset/assets/visualizations/countries/morocco.geojson
rename to superset/assets/src/visualizations/countries/morocco.geojson
diff --git a/superset/assets/visualizations/countries/netherlands.geojson b/superset/assets/src/visualizations/countries/netherlands.geojson
similarity index 100%
rename from superset/assets/visualizations/countries/netherlands.geojson
rename to superset/assets/src/visualizations/countries/netherlands.geojson
diff --git a/superset/assets/visualizations/countries/russia.geojson b/superset/assets/src/visualizations/countries/russia.geojson
similarity index 100%
rename from superset/assets/visualizations/countries/russia.geojson
rename to superset/assets/src/visualizations/countries/russia.geojson
diff --git a/superset/assets/visualizations/countries/singapore.geojson b/superset/assets/src/visualizations/countries/singapore.geojson
similarity index 100%
rename from superset/assets/visualizations/countries/singapore.geojson
rename to superset/assets/src/visualizations/countries/singapore.geojson
diff --git a/superset/assets/visualizations/countries/spain.geojson b/superset/assets/src/visualizations/countries/spain.geojson
similarity index 100%
rename from superset/assets/visualizations/countries/spain.geojson
rename to superset/assets/src/visualizations/countries/spain.geojson
diff --git a/superset/assets/visualizations/countries/uk.geojson b/superset/assets/src/visualizations/countries/uk.geojson
similarity index 100%
rename from superset/assets/visualizations/countries/uk.geojson
rename to superset/assets/src/visualizations/countries/uk.geojson
diff --git a/superset/assets/visualizations/countries/ukraine.geojson b/superset/assets/src/visualizations/countries/ukraine.geojson
similarity index 100%
rename from superset/assets/visualizations/countries/ukraine.geojson
rename to superset/assets/src/visualizations/countries/ukraine.geojson
diff --git a/superset/assets/visualizations/countries/usa.geojson b/superset/assets/src/visualizations/countries/usa.geojson
similarity index 100%
rename from superset/assets/visualizations/countries/usa.geojson
rename to superset/assets/src/visualizations/countries/usa.geojson
diff --git a/superset/assets/visualizations/country_map.css b/superset/assets/src/visualizations/country_map.css
similarity index 100%
rename from superset/assets/visualizations/country_map.css
rename to superset/assets/src/visualizations/country_map.css
diff --git a/superset/assets/visualizations/country_map.js b/superset/assets/src/visualizations/country_map.js
similarity index 98%
rename from superset/assets/visualizations/country_map.js
rename to superset/assets/src/visualizations/country_map.js
index b4e84dc61f..a5ab3c431d 100644
--- a/superset/assets/visualizations/country_map.js
+++ b/superset/assets/src/visualizations/country_map.js
@@ -1,6 +1,6 @@
 import d3 from 'd3';
 import './country_map.css';
-import { colorScalerFactory } from '../javascripts/modules/colors';
+import { colorScalerFactory } from '../modules/colors';
 
 
 function countryMapChart(slice, payload) {
diff --git a/superset/assets/visualizations/deckgl/AnimatableDeckGLContainer.jsx b/superset/assets/src/visualizations/deckgl/AnimatableDeckGLContainer.jsx
similarity index 100%
rename from superset/assets/visualizations/deckgl/AnimatableDeckGLContainer.jsx
rename to superset/assets/src/visualizations/deckgl/AnimatableDeckGLContainer.jsx
diff --git a/superset/assets/visualizations/deckgl/DeckGLContainer.jsx b/superset/assets/src/visualizations/deckgl/DeckGLContainer.jsx
similarity index 100%
rename from superset/assets/visualizations/deckgl/DeckGLContainer.jsx
rename to superset/assets/src/visualizations/deckgl/DeckGLContainer.jsx
diff --git a/superset/assets/visualizations/deckgl/layers/arc.jsx b/superset/assets/src/visualizations/deckgl/layers/arc.jsx
similarity index 96%
rename from superset/assets/visualizations/deckgl/layers/arc.jsx
rename to superset/assets/src/visualizations/deckgl/layers/arc.jsx
index 43583e0170..d34e7a13f6 100644
--- a/superset/assets/visualizations/deckgl/layers/arc.jsx
+++ b/superset/assets/src/visualizations/deckgl/layers/arc.jsx
@@ -6,7 +6,7 @@ import { ArcLayer } from 'deck.gl';
 import DeckGLContainer from './../DeckGLContainer';
 
 import * as common from './common';
-import sandboxedEval from '../../../javascripts/modules/sandbox';
+import sandboxedEval from '../../../modules/sandbox';
 
 function getPoints(data) {
   const points = [];
diff --git a/superset/assets/visualizations/deckgl/layers/common.js b/superset/assets/src/visualizations/deckgl/layers/common.js
similarity index 95%
rename from superset/assets/visualizations/deckgl/layers/common.js
rename to superset/assets/src/visualizations/deckgl/layers/common.js
index 7a2cb9785d..6fb15dfd38 100644
--- a/superset/assets/visualizations/deckgl/layers/common.js
+++ b/superset/assets/src/visualizations/deckgl/layers/common.js
@@ -1,7 +1,7 @@
 import dompurify from 'dompurify';
 import { fitBounds } from 'viewport-mercator-project';
 
-import sandboxedEval from '../../../javascripts/modules/sandbox';
+import sandboxedEval from '../../../modules/sandbox';
 
 export function getBounds(points) {
   const latExt = d3.extent(points, d => d[1]);
diff --git a/superset/assets/visualizations/deckgl/layers/geojson.jsx b/superset/assets/src/visualizations/deckgl/layers/geojson.jsx
similarity index 95%
rename from superset/assets/visualizations/deckgl/layers/geojson.jsx
rename to superset/assets/src/visualizations/deckgl/layers/geojson.jsx
index fe7805a279..74a862a2e2 100644
--- a/superset/assets/visualizations/deckgl/layers/geojson.jsx
+++ b/superset/assets/src/visualizations/deckgl/layers/geojson.jsx
@@ -5,8 +5,8 @@ import { GeoJsonLayer } from 'deck.gl';
 
 import DeckGLContainer from './../DeckGLContainer';
 import * as common from './common';
-import { hexToRGB } from '../../../javascripts/modules/colors';
-import sandboxedEval from '../../../javascripts/modules/sandbox';
+import { hexToRGB } from '../../../modules/colors';
+import sandboxedEval from '../../../modules/sandbox';
 
 const propertyMap = {
   fillColor: 'fillColor',
diff --git a/superset/assets/visualizations/deckgl/layers/grid.jsx b/superset/assets/src/visualizations/deckgl/layers/grid.jsx
similarity index 96%
rename from superset/assets/visualizations/deckgl/layers/grid.jsx
rename to superset/assets/src/visualizations/deckgl/layers/grid.jsx
index 6f92f0688c..ca3056e2c1 100644
--- a/superset/assets/visualizations/deckgl/layers/grid.jsx
+++ b/superset/assets/src/visualizations/deckgl/layers/grid.jsx
@@ -6,7 +6,7 @@ import { GridLayer } from 'deck.gl';
 import DeckGLContainer from './../DeckGLContainer';
 
 import * as common from './common';
-import sandboxedEval from '../../../javascripts/modules/sandbox';
+import sandboxedEval from '../../../modules/sandbox';
 
 function getLayer(formData, payload, slice) {
   const fd = formData;
diff --git a/superset/assets/visualizations/deckgl/layers/hex.jsx b/superset/assets/src/visualizations/deckgl/layers/hex.jsx
similarity index 96%
rename from superset/assets/visualizations/deckgl/layers/hex.jsx
rename to superset/assets/src/visualizations/deckgl/layers/hex.jsx
index f0fb925da5..14c9951df4 100644
--- a/superset/assets/visualizations/deckgl/layers/hex.jsx
+++ b/superset/assets/src/visualizations/deckgl/layers/hex.jsx
@@ -6,7 +6,7 @@ import { HexagonLayer } from 'deck.gl';
 import DeckGLContainer from './../DeckGLContainer';
 
 import * as common from './common';
-import sandboxedEval from '../../../javascripts/modules/sandbox';
+import sandboxedEval from '../../../modules/sandbox';
 
 function getLayer(formData, payload, slice) {
   const fd = formData;
diff --git a/superset/assets/visualizations/deckgl/layers/index.js b/superset/assets/src/visualizations/deckgl/layers/index.js
similarity index 100%
rename from superset/assets/visualizations/deckgl/layers/index.js
rename to superset/assets/src/visualizations/deckgl/layers/index.js
diff --git a/superset/assets/visualizations/deckgl/layers/path.jsx b/superset/assets/src/visualizations/deckgl/layers/path.jsx
similarity index 96%
rename from superset/assets/visualizations/deckgl/layers/path.jsx
rename to superset/assets/src/visualizations/deckgl/layers/path.jsx
index 4b45a0ba13..0951edd93c 100644
--- a/superset/assets/visualizations/deckgl/layers/path.jsx
+++ b/superset/assets/src/visualizations/deckgl/layers/path.jsx
@@ -6,7 +6,7 @@ import { PathLayer } from 'deck.gl';
 import DeckGLContainer from './../DeckGLContainer';
 
 import * as common from './common';
-import sandboxedEval from '../../../javascripts/modules/sandbox';
+import sandboxedEval from '../../../modules/sandbox';
 
 function getLayer(formData, payload, slice) {
   const fd = formData;
diff --git a/superset/assets/visualizations/deckgl/layers/polygon.jsx b/superset/assets/src/visualizations/deckgl/layers/polygon.jsx
similarity index 95%
rename from superset/assets/visualizations/deckgl/layers/polygon.jsx
rename to superset/assets/src/visualizations/deckgl/layers/polygon.jsx
index 920fb6a89a..ae8a34c7bc 100644
--- a/superset/assets/visualizations/deckgl/layers/polygon.jsx
+++ b/superset/assets/src/visualizations/deckgl/layers/polygon.jsx
@@ -6,7 +6,7 @@ import { PolygonLayer } from 'deck.gl';
 import DeckGLContainer from './../DeckGLContainer';
 
 import * as common from './common';
-import sandboxedEval from '../../../javascripts/modules/sandbox';
+import sandboxedEval from '../../../modules/sandbox';
 
 function getLayer(formData, payload, slice) {
   const fd = formData;
diff --git a/superset/assets/visualizations/deckgl/layers/scatter.jsx b/superset/assets/src/visualizations/deckgl/layers/scatter.jsx
similarity index 95%
rename from superset/assets/visualizations/deckgl/layers/scatter.jsx
rename to superset/assets/src/visualizations/deckgl/layers/scatter.jsx
index 112f270fb0..a137423bd1 100644
--- a/superset/assets/visualizations/deckgl/layers/scatter.jsx
+++ b/superset/assets/src/visualizations/deckgl/layers/scatter.jsx
@@ -10,10 +10,10 @@ import AnimatableDeckGLContainer from '../AnimatableDeckGLContainer';
 import Legend from '../../Legend';
 
 import * as common from './common';
-import { getColorFromScheme, hexToRGB } from '../../../javascripts/modules/colors';
-import { getPlaySliderParams } from '../../../javascripts/modules/time';
-import { unitToRadius } from '../../../javascripts/modules/geo';
-import sandboxedEval from '../../../javascripts/modules/sandbox';
+import { getColorFromScheme, hexToRGB } from '../../../modules/colors';
+import { getPlaySliderParams } from '../../../modules/time';
+import { unitToRadius } from '../../../modules/geo';
+import sandboxedEval from '../../../modules/sandbox';
 
 
 function getPoints(data) {
diff --git a/superset/assets/visualizations/deckgl/layers/screengrid.jsx b/superset/assets/src/visualizations/deckgl/layers/screengrid.jsx
similarity index 96%
rename from superset/assets/visualizations/deckgl/layers/screengrid.jsx
rename to superset/assets/src/visualizations/deckgl/layers/screengrid.jsx
index df11b5c5ee..974b7c4a7c 100644
--- a/superset/assets/visualizations/deckgl/layers/screengrid.jsx
+++ b/superset/assets/src/visualizations/deckgl/layers/screengrid.jsx
@@ -9,8 +9,8 @@ import { ScreenGridLayer } from 'deck.gl';
 import AnimatableDeckGLContainer from '../AnimatableDeckGLContainer';
 
 import * as common from './common';
-import { getPlaySliderParams } from '../../../javascripts/modules/time';
-import sandboxedEval from '../../../javascripts/modules/sandbox';
+import { getPlaySliderParams } from '../../../modules/time';
+import sandboxedEval from '../../../modules/sandbox';
 
 function getPoints(data) {
   return data.map(d => d.position);
diff --git a/superset/assets/visualizations/deckgl/multi.jsx b/superset/assets/src/visualizations/deckgl/multi.jsx
similarity index 95%
rename from superset/assets/visualizations/deckgl/multi.jsx
rename to superset/assets/src/visualizations/deckgl/multi.jsx
index 4006b474cf..9bd80750a9 100644
--- a/superset/assets/visualizations/deckgl/multi.jsx
+++ b/superset/assets/src/visualizations/deckgl/multi.jsx
@@ -3,7 +3,7 @@ import ReactDOM from 'react-dom';
 import $ from 'jquery';
 
 import DeckGLContainer from './DeckGLContainer';
-import { getExploreLongUrl } from '../../javascripts/explore/exploreUtils';
+import { getExploreLongUrl } from '../../explore/exploreUtils';
 import layerGenerators from './layers';
 
 
diff --git a/superset/assets/visualizations/directed_force.css b/superset/assets/src/visualizations/directed_force.css
similarity index 100%
rename from superset/assets/visualizations/directed_force.css
rename to superset/assets/src/visualizations/directed_force.css
diff --git a/superset/assets/visualizations/directed_force.js b/superset/assets/src/visualizations/directed_force.js
similarity index 100%
rename from superset/assets/visualizations/directed_force.js
rename to superset/assets/src/visualizations/directed_force.js
diff --git a/superset/assets/visualizations/filter_box.css b/superset/assets/src/visualizations/filter_box.css
similarity index 100%
rename from superset/assets/visualizations/filter_box.css
rename to superset/assets/src/visualizations/filter_box.css
diff --git a/superset/assets/visualizations/filter_box.jsx b/superset/assets/src/visualizations/filter_box.jsx
similarity index 94%
rename from superset/assets/visualizations/filter_box.jsx
rename to superset/assets/src/visualizations/filter_box.jsx
index f157f50983..bf376571e5 100644
--- a/superset/assets/visualizations/filter_box.jsx
+++ b/superset/assets/src/visualizations/filter_box.jsx
@@ -7,14 +7,14 @@ import VirtualizedSelect from 'react-virtualized-select';
 import { Creatable } from 'react-select';
 import { Button } from 'react-bootstrap';
 
-import DateFilterControl from '../javascripts/explore/components/controls/DateFilterControl';
-import ControlRow from '../javascripts/explore/components/ControlRow';
-import Control from '../javascripts/explore/components/Control';
-import controls from '../javascripts/explore/stores/controls';
-import OnPasteSelect from '../javascripts/components/OnPasteSelect';
-import VirtualizedRendererWrap from '../javascripts/components/VirtualizedRendererWrap';
+import DateFilterControl from '../explore/components/controls/DateFilterControl';
+import ControlRow from '../explore/components/ControlRow';
+import Control from '../explore/components/Control';
+import controls from '../explore/stores/controls';
+import OnPasteSelect from '../components/OnPasteSelect';
+import VirtualizedRendererWrap from '../components/VirtualizedRendererWrap';
 import './filter_box.css';
-import { t } from '../javascripts/locales';
+import { t } from '../locales';
 
 // maps control names to their key in extra_filters
 const timeFilterMap = {
diff --git a/superset/assets/visualizations/heatmap.css b/superset/assets/src/visualizations/heatmap.css
similarity index 100%
rename from superset/assets/visualizations/heatmap.css
rename to superset/assets/src/visualizations/heatmap.css
diff --git a/superset/assets/visualizations/heatmap.js b/superset/assets/src/visualizations/heatmap.js
similarity index 98%
rename from superset/assets/visualizations/heatmap.js
rename to superset/assets/src/visualizations/heatmap.js
index d86253d63f..a8d3ccf694 100644
--- a/superset/assets/visualizations/heatmap.js
+++ b/superset/assets/src/visualizations/heatmap.js
@@ -3,8 +3,8 @@ import d3 from 'd3';
 import d3legend from 'd3-svg-legend';
 import d3tip from 'd3-tip';
 
-import { colorScalerFactory } from '../javascripts/modules/colors';
-import '../stylesheets/d3tip.css';
+import { colorScalerFactory } from '../modules/colors';
+import '../../stylesheets/d3tip.css';
 import './heatmap.css';
 
 function cmp(a, b) {
diff --git a/superset/assets/visualizations/histogram.css b/superset/assets/src/visualizations/histogram.css
similarity index 100%
rename from superset/assets/visualizations/histogram.css
rename to superset/assets/src/visualizations/histogram.css
diff --git a/superset/assets/visualizations/histogram.js b/superset/assets/src/visualizations/histogram.js
similarity index 98%
rename from superset/assets/visualizations/histogram.js
rename to superset/assets/src/visualizations/histogram.js
index 8ab9c1188f..f510f1c90f 100644
--- a/superset/assets/visualizations/histogram.js
+++ b/superset/assets/src/visualizations/histogram.js
@@ -1,6 +1,6 @@
 import d3 from 'd3';
 import nv from 'nvd3';
-import { getColorFromScheme } from '../javascripts/modules/colors';
+import { getColorFromScheme } from '../modules/colors';
 
 require('./histogram.css');
 
diff --git a/superset/assets/visualizations/horizon.css b/superset/assets/src/visualizations/horizon.css
similarity index 100%
rename from superset/assets/visualizations/horizon.css
rename to superset/assets/src/visualizations/horizon.css
diff --git a/superset/assets/visualizations/horizon.js b/superset/assets/src/visualizations/horizon.js
similarity index 100%
rename from superset/assets/visualizations/horizon.js
rename to superset/assets/src/visualizations/horizon.js
diff --git a/superset/assets/visualizations/iframe.js b/superset/assets/src/visualizations/iframe.js
similarity index 100%
rename from superset/assets/visualizations/iframe.js
rename to superset/assets/src/visualizations/iframe.js
diff --git a/superset/assets/visualizations/main.js b/superset/assets/src/visualizations/main.js
similarity index 100%
rename from superset/assets/visualizations/main.js
rename to superset/assets/src/visualizations/main.js
diff --git a/superset/assets/visualizations/mapbox.css b/superset/assets/src/visualizations/mapbox.css
similarity index 100%
rename from superset/assets/visualizations/mapbox.css
rename to superset/assets/src/visualizations/mapbox.css
diff --git a/superset/assets/visualizations/mapbox.jsx b/superset/assets/src/visualizations/mapbox.jsx
similarity index 99%
rename from superset/assets/visualizations/mapbox.jsx
rename to superset/assets/src/visualizations/mapbox.jsx
index 0c01d6b19e..1a156ae520 100644
--- a/superset/assets/visualizations/mapbox.jsx
+++ b/superset/assets/src/visualizations/mapbox.jsx
@@ -17,7 +17,7 @@ import {
   DEFAULT_LONGITUDE,
   DEFAULT_LATITUDE,
   DEFAULT_ZOOM,
-} from '../javascripts/utils/common';
+} from '../utils/common';
 import './mapbox.css';
 
 const NOOP = () => {};
@@ -58,7 +58,7 @@ class ScatterPlotGlowOverlay extends React.Component {
     ctx.shadowColor = '';
   }
 
-  // Modified: https://github.com/uber/react-map-gl/blob/master/src/overlays/scatterplot.react.js
+  // Modified: https://github.com/uber/react-map-gl/blob/master/overlays/scatterplot.react.js
   redraw() {
     const props = this.props;
     const pixelRatio = window.devicePixelRatio || 1;
diff --git a/superset/assets/visualizations/markup.css b/superset/assets/src/visualizations/markup.css
similarity index 100%
rename from superset/assets/visualizations/markup.css
rename to superset/assets/src/visualizations/markup.css
diff --git a/superset/assets/visualizations/markup.js b/superset/assets/src/visualizations/markup.js
similarity index 100%
rename from superset/assets/visualizations/markup.js
rename to superset/assets/src/visualizations/markup.js
diff --git a/superset/assets/visualizations/nvd3_vis.css b/superset/assets/src/visualizations/nvd3_vis.css
similarity index 100%
rename from superset/assets/visualizations/nvd3_vis.css
rename to superset/assets/src/visualizations/nvd3_vis.css
diff --git a/superset/assets/visualizations/nvd3_vis.js b/superset/assets/src/visualizations/nvd3_vis.js
similarity index 98%
rename from superset/assets/visualizations/nvd3_vis.js
rename to superset/assets/src/visualizations/nvd3_vis.js
index 284c4e0575..bf87287c78 100644
--- a/superset/assets/visualizations/nvd3_vis.js
+++ b/superset/assets/src/visualizations/nvd3_vis.js
@@ -3,20 +3,20 @@ import $ from 'jquery';
 import throttle from 'lodash.throttle';
 import d3 from 'd3';
 import nv from 'nvd3';
+import 'nvd3/build/nv.d3.min.css';
 import mathjs from 'mathjs';
 import moment from 'moment';
 import d3tip from 'd3-tip';
 
-import { getColorFromScheme } from '../javascripts/modules/colors';
+import { getColorFromScheme } from '../modules/colors';
 import AnnotationTypes, {
   applyNativeColumns,
-} from '../javascripts/modules/AnnotationTypes';
-import { customizeToolTip, d3TimeFormatPreset, d3FormatPreset, tryNumify } from '../javascripts/modules/utils';
-import { isTruthy } from '../javascripts/utils/common';
-import { t } from '../javascripts/locales';
+} from '../modules/AnnotationTypes';
+import { customizeToolTip, d3TimeFormatPreset, d3FormatPreset, tryNumify } from '../modules/utils';
+import { isTruthy } from '../utils/common';
+import { t } from '../locales';
 
 // CSS
-import '../node_modules/nvd3/build/nv.d3.min.css';
 import './nvd3_vis.css';
 import { VIZ_TYPES } from './main';
 
diff --git a/superset/assets/visualizations/paired_ttest.css b/superset/assets/src/visualizations/paired_ttest.css
similarity index 100%
rename from superset/assets/visualizations/paired_ttest.css
rename to superset/assets/src/visualizations/paired_ttest.css
diff --git a/superset/assets/visualizations/paired_ttest.jsx b/superset/assets/src/visualizations/paired_ttest.jsx
similarity index 100%
rename from superset/assets/visualizations/paired_ttest.jsx
rename to superset/assets/src/visualizations/paired_ttest.jsx
diff --git a/superset/assets/visualizations/parallel_coordinates.css b/superset/assets/src/visualizations/parallel_coordinates.css
similarity index 100%
rename from superset/assets/visualizations/parallel_coordinates.css
rename to superset/assets/src/visualizations/parallel_coordinates.css
diff --git a/superset/assets/visualizations/parallel_coordinates.js b/superset/assets/src/visualizations/parallel_coordinates.js
similarity index 91%
rename from superset/assets/visualizations/parallel_coordinates.js
rename to superset/assets/src/visualizations/parallel_coordinates.js
index facbe00276..f60904994d 100644
--- a/superset/assets/visualizations/parallel_coordinates.js
+++ b/superset/assets/src/visualizations/parallel_coordinates.js
@@ -1,9 +1,9 @@
 import d3 from 'd3';
-import '../vendor/parallel_coordinates/d3.parcoords.css';
+import '../../vendor/parallel_coordinates/d3.parcoords.css';
 import './parallel_coordinates.css';
 
-d3.parcoords = require('../vendor/parallel_coordinates/d3.parcoords.js');
-d3.divgrid = require('../vendor/parallel_coordinates/divgrid.js');
+d3.parcoords = require('../../vendor/parallel_coordinates/d3.parcoords.js');
+d3.divgrid = require('../../vendor/parallel_coordinates/divgrid.js');
 
 const $ = require('jquery');
 
diff --git a/superset/assets/visualizations/partition.css b/superset/assets/src/visualizations/partition.css
similarity index 100%
rename from superset/assets/visualizations/partition.css
rename to superset/assets/src/visualizations/partition.css
diff --git a/superset/assets/visualizations/partition.js b/superset/assets/src/visualizations/partition.js
similarity index 98%
rename from superset/assets/visualizations/partition.js
rename to superset/assets/src/visualizations/partition.js
index a91611ce00..23e4474e62 100644
--- a/superset/assets/visualizations/partition.js
+++ b/superset/assets/src/visualizations/partition.js
@@ -3,8 +3,8 @@
 import d3 from 'd3';
 import {
   d3TimeFormatPreset,
-} from '../javascripts/modules/utils';
-import { getColorFromScheme } from '../javascripts/modules/colors';
+} from '../modules/utils';
+import { getColorFromScheme } from '../modules/colors';
 
 import './partition.css';
 
diff --git a/superset/assets/visualizations/pivot_table.css b/superset/assets/src/visualizations/pivot_table.css
similarity index 100%
rename from superset/assets/visualizations/pivot_table.css
rename to superset/assets/src/visualizations/pivot_table.css
diff --git a/superset/assets/visualizations/pivot_table.js b/superset/assets/src/visualizations/pivot_table.js
similarity index 96%
rename from superset/assets/visualizations/pivot_table.js
rename to superset/assets/src/visualizations/pivot_table.js
index 7dbfcb15e9..fded4616b3 100644
--- a/superset/assets/visualizations/pivot_table.js
+++ b/superset/assets/src/visualizations/pivot_table.js
@@ -2,7 +2,7 @@ import dt from 'datatables.net-bs';
 import 'datatables.net-bs/css/dataTables.bootstrap.css';
 import $ from 'jquery';
 
-import { d3format, fixDataTableBodyHeight } from '../javascripts/modules/utils';
+import { d3format, fixDataTableBodyHeight } from '../modules/utils';
 import './pivot_table.css';
 
 dt(window, $);
diff --git a/superset/assets/visualizations/rose.css b/superset/assets/src/visualizations/rose.css
similarity index 100%
rename from superset/assets/visualizations/rose.css
rename to superset/assets/src/visualizations/rose.css
diff --git a/superset/assets/visualizations/rose.js b/superset/assets/src/visualizations/rose.js
similarity index 99%
rename from superset/assets/visualizations/rose.js
rename to superset/assets/src/visualizations/rose.js
index e385f1a7eb..a0a545aae0 100644
--- a/superset/assets/visualizations/rose.js
+++ b/superset/assets/src/visualizations/rose.js
@@ -1,8 +1,8 @@
 /* eslint no-use-before-define: ["error", { "functions": false }] */
 import d3 from 'd3';
 import nv from 'nvd3';
-import { d3TimeFormatPreset } from '../javascripts/modules/utils';
-import { getColorFromScheme } from '../javascripts/modules/colors';
+import { d3TimeFormatPreset } from '../modules/utils';
+import { getColorFromScheme } from '../modules/colors';
 
 import './rose.css';
 
diff --git a/superset/assets/visualizations/sankey.css b/superset/assets/src/visualizations/sankey.css
similarity index 100%
rename from superset/assets/visualizations/sankey.css
rename to superset/assets/src/visualizations/sankey.css
diff --git a/superset/assets/visualizations/sankey.js b/superset/assets/src/visualizations/sankey.js
similarity index 98%
rename from superset/assets/visualizations/sankey.js
rename to superset/assets/src/visualizations/sankey.js
index 2dcba6af34..bb08fb3caa 100644
--- a/superset/assets/visualizations/sankey.js
+++ b/superset/assets/src/visualizations/sankey.js
@@ -1,6 +1,6 @@
 /* eslint-disable no-param-reassign */
 import d3 from 'd3';
-import { getColorFromScheme } from '../javascripts/modules/colors';
+import { getColorFromScheme } from '../modules/colors';
 import './sankey.css';
 
 d3.sankey = require('d3-sankey').sankey;
diff --git a/superset/assets/visualizations/sunburst.css b/superset/assets/src/visualizations/sunburst.css
similarity index 100%
rename from superset/assets/visualizations/sunburst.css
rename to superset/assets/src/visualizations/sunburst.css
diff --git a/superset/assets/visualizations/sunburst.js b/superset/assets/src/visualizations/sunburst.js
similarity index 98%
rename from superset/assets/visualizations/sunburst.js
rename to superset/assets/src/visualizations/sunburst.js
index 199d182a33..0c04622c60 100644
--- a/superset/assets/visualizations/sunburst.js
+++ b/superset/assets/src/visualizations/sunburst.js
@@ -1,7 +1,7 @@
 /* eslint-disable no-underscore-dangle, no-param-reassign */
 import d3 from 'd3';
-import { getColorFromScheme } from '../javascripts/modules/colors';
-import { wrapSvgText } from '../javascripts/modules/utils';
+import { getColorFromScheme } from '../modules/colors';
+import { wrapSvgText } from '../modules/utils';
 
 require('./sunburst.css');
 
diff --git a/superset/assets/visualizations/table.css b/superset/assets/src/visualizations/table.css
similarity index 100%
rename from superset/assets/visualizations/table.css
rename to superset/assets/src/visualizations/table.css
diff --git a/superset/assets/visualizations/table.js b/superset/assets/src/visualizations/table.js
similarity index 98%
rename from superset/assets/visualizations/table.js
rename to superset/assets/src/visualizations/table.js
index d00ba2af80..c340f6919a 100644
--- a/superset/assets/visualizations/table.js
+++ b/superset/assets/src/visualizations/table.js
@@ -2,7 +2,7 @@ import d3 from 'd3';
 import dt from 'datatables.net-bs';
 import 'datatables.net-bs/css/dataTables.bootstrap.css';
 
-import { fixDataTableBodyHeight, d3TimeFormatPreset } from '../javascripts/modules/utils';
+import { fixDataTableBodyHeight, d3TimeFormatPreset } from '../modules/utils';
 import './table.css';
 
 const $ = require('jquery');
diff --git a/superset/assets/visualizations/time_table.css b/superset/assets/src/visualizations/time_table.css
similarity index 100%
rename from superset/assets/visualizations/time_table.css
rename to superset/assets/src/visualizations/time_table.css
diff --git a/superset/assets/visualizations/time_table.jsx b/superset/assets/src/visualizations/time_table.jsx
similarity index 96%
rename from superset/assets/visualizations/time_table.jsx
rename to superset/assets/src/visualizations/time_table.jsx
index 8111cbbf4e..bcf2f0dca0 100644
--- a/superset/assets/visualizations/time_table.jsx
+++ b/superset/assets/src/visualizations/time_table.jsx
@@ -6,10 +6,10 @@ import d3 from 'd3';
 import Mustache from 'mustache';
 import { Sparkline, LineSeries, PointSeries, VerticalReferenceLine, WithTooltip } from '@data-ui/sparkline';
 
-import MetricOption from '../javascripts/components/MetricOption';
-import { d3format } from '../javascripts/modules/utils';
-import { formatDateThunk } from '../javascripts/modules/dates';
-import InfoTooltipWithTrigger from '../javascripts/components/InfoTooltipWithTrigger';
+import MetricOption from '../components/MetricOption';
+import { d3format } from '../modules/utils';
+import { formatDateThunk } from '../modules/dates';
+import InfoTooltipWithTrigger from '../components/InfoTooltipWithTrigger';
 import './time_table.css';
 
 const SPARKLINE_MARGIN = {
diff --git a/superset/assets/visualizations/treemap.css b/superset/assets/src/visualizations/treemap.css
similarity index 100%
rename from superset/assets/visualizations/treemap.css
rename to superset/assets/src/visualizations/treemap.css
diff --git a/superset/assets/visualizations/treemap.js b/superset/assets/src/visualizations/treemap.js
similarity index 99%
rename from superset/assets/visualizations/treemap.js
rename to superset/assets/src/visualizations/treemap.js
index 072582a977..b464d05e4c 100644
--- a/superset/assets/visualizations/treemap.js
+++ b/superset/assets/src/visualizations/treemap.js
@@ -1,6 +1,6 @@
 /* eslint-disable no-shadow, no-param-reassign, no-underscore-dangle, no-use-before-define */
 import d3 from 'd3';
-import { getColorFromScheme } from '../javascripts/modules/colors';
+import { getColorFromScheme } from '../modules/colors';
 
 require('./treemap.css');
 
diff --git a/superset/assets/visualizations/word_cloud.js b/superset/assets/src/visualizations/word_cloud.js
similarity index 95%
rename from superset/assets/visualizations/word_cloud.js
rename to superset/assets/src/visualizations/word_cloud.js
index 5ee0e0b395..f09c16ecd3 100644
--- a/superset/assets/visualizations/word_cloud.js
+++ b/superset/assets/src/visualizations/word_cloud.js
@@ -1,7 +1,7 @@
 /* eslint-disable  no-use-before-define */
 import d3 from 'd3';
 import cloudLayout from 'd3-cloud';
-import { getColorFromScheme } from '../javascripts/modules/colors';
+import { getColorFromScheme } from '../modules/colors';
 
 function wordCloudChart(slice, payload) {
   const chart = d3.select(slice.selector);
diff --git a/superset/assets/visualizations/world_map.css b/superset/assets/src/visualizations/world_map.css
similarity index 100%
rename from superset/assets/visualizations/world_map.css
rename to superset/assets/src/visualizations/world_map.css
diff --git a/superset/assets/visualizations/world_map.js b/superset/assets/src/visualizations/world_map.js
similarity index 100%
rename from superset/assets/visualizations/world_map.js
rename to superset/assets/src/visualizations/world_map.js
diff --git a/superset/assets/javascripts/welcome/App.jsx b/superset/assets/src/welcome/App.jsx
similarity index 100%
rename from superset/assets/javascripts/welcome/App.jsx
rename to superset/assets/src/welcome/App.jsx
diff --git a/superset/assets/javascripts/welcome/DashboardTable.jsx b/superset/assets/src/welcome/DashboardTable.jsx
similarity index 100%
rename from superset/assets/javascripts/welcome/DashboardTable.jsx
rename to superset/assets/src/welcome/DashboardTable.jsx
diff --git a/superset/assets/javascripts/welcome/index.jsx b/superset/assets/src/welcome/index.jsx
similarity index 100%
rename from superset/assets/javascripts/welcome/index.jsx
rename to superset/assets/src/welcome/index.jsx
diff --git a/superset/assets/webpack.config.js b/superset/assets/webpack.config.js
index 1dce5245f1..6fd88d7185 100644
--- a/superset/assets/webpack.config.js
+++ b/superset/assets/webpack.config.js
@@ -15,14 +15,14 @@ const config = {
     fs: 'empty',
   },
   entry: {
-    theme: APP_DIR + '/javascripts/theme.js',
-    common: APP_DIR + '/javascripts/common.js',
-    addSlice: ['babel-polyfill', APP_DIR + '/javascripts/addSlice/index.jsx'],
-    explore: ['babel-polyfill', APP_DIR + '/javascripts/explore/index.jsx'],
-    dashboard: ['babel-polyfill', APP_DIR + '/javascripts/dashboard/index.jsx'],
-    sqllab: ['babel-polyfill', APP_DIR + '/javascripts/SqlLab/index.jsx'],
-    welcome: ['babel-polyfill', APP_DIR + '/javascripts/welcome/index.jsx'],
-    profile: ['babel-polyfill', APP_DIR + '/javascripts/profile/index.jsx'],
+    theme: APP_DIR + '/src/theme.js',
+    common: APP_DIR + '/src/common.js',
+    addSlice: ['babel-polyfill', APP_DIR + '/src/addSlice/index.jsx'],
+    explore: ['babel-polyfill', APP_DIR + '/src/explore/index.jsx'],
+    dashboard: ['babel-polyfill', APP_DIR + '/src/dashboard/index.jsx'],
+    sqllab: ['babel-polyfill', APP_DIR + '/src/SqlLab/index.jsx'],
+    welcome: ['babel-polyfill', APP_DIR + '/src/welcome/index.jsx'],
+    profile: ['babel-polyfill', APP_DIR + '/src/profile/index.jsx'],
   },
   output: {
     path: BUILD_DIR,


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services