├── .gitignore ├── .idea ├── .name ├── codeStyleSettings.xml ├── dictionaries │ └── vadim.xml ├── inspectionProfiles │ ├── Project_Default.xml │ └── profiles_settings.xml ├── jsLibraryMappings.xml ├── misc.xml ├── modules.xml ├── pivot.iml ├── runConfigurations │ └── Run.xml ├── scopes │ ├── All_Source_Files.xml │ ├── Client_Source_Files.xml │ ├── Server_Source_Files.xml │ └── TypeScript_Files.xml ├── vcs.xml └── watcherTasks.xml ├── .npmignore ├── .sass-lint.yml ├── .travis.yml ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── NOTICE ├── README.md ├── assets ├── data │ ├── wikiticker-2015-09-12-anonymous.json │ ├── wikiticker-2015-09-12-sampled.json │ └── wikiticker-2015-09-12-tiny.json ├── favicon │ ├── android-chrome-144x144.png │ ├── android-chrome-192x192.png │ ├── android-chrome-36x36.png │ ├── android-chrome-48x48.png │ ├── android-chrome-72x72.png │ ├── android-chrome-96x96.png │ ├── apple-touch-icon-114x114.png │ ├── apple-touch-icon-120x120.png │ ├── apple-touch-icon-144x144.png │ ├── apple-touch-icon-152x152.png │ ├── apple-touch-icon-180x180.png │ ├── apple-touch-icon-57x57.png │ ├── apple-touch-icon-60x60.png │ ├── apple-touch-icon-72x72.png │ ├── apple-touch-icon-76x76.png │ ├── apple-touch-icon-precomposed.png │ ├── apple-touch-icon.png │ ├── browserconfig.xml │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-96x96.png │ ├── favicon.ico │ ├── manifest.json │ ├── mstile-144x144.png │ ├── mstile-150x150.png │ ├── mstile-310x150.png │ ├── mstile-310x310.png │ ├── mstile-70x70.png │ └── safari-pinned-tab.svg └── fonts │ ├── Open-Sans-600 │ ├── LICENSE.txt │ ├── Open-Sans-600.eot │ ├── Open-Sans-600.svg │ ├── Open-Sans-600.ttf │ ├── Open-Sans-600.woff │ └── Open-Sans-600.woff2 │ └── Open-Sans-regular │ ├── LICENSE.txt │ ├── Open-Sans-regular.eot │ ├── Open-Sans-regular.svg │ ├── Open-Sans-regular.ttf │ ├── Open-Sans-regular.woff │ └── Open-Sans-regular.woff2 ├── bin └── pivot ├── compile ├── config-examples.yaml ├── docs ├── configuration.md ├── druid-0.9.1-lookup-migration.md ├── example │ └── request-decoration │ │ ├── config.yaml │ │ ├── druid-request-decorator.js │ │ └── result.png ├── generating-links-into-pivot.md ├── images │ ├── compare.gif │ ├── custom-link.png │ ├── drag-and-drop.gif │ └── explore.gif ├── pivot-0.9.x-migration.md └── security.md ├── full-test ├── gulpfile.js ├── lib └── polyfill │ ├── drag-drop-polyfill.css │ └── drag-drop-polyfill.min.js ├── npm-shrinkwrap.json ├── package.json ├── resources ├── data │ ├── process-wikiticker-2015-09-12 │ └── wikiticker-2015-09-12.gz └── logo │ ├── pivot-logo-1024.png │ ├── pivot-logo-128.png │ ├── pivot-logo-32.png │ ├── pivot-logo-512.png │ ├── pivot-logo-64.png │ ├── pivot-logo-800.png │ ├── pivot-logo.svg │ └── pngify ├── run ├── run-coverage ├── script ├── cp ├── cp-plywood ├── mkcomp ├── mkmodel ├── mv ├── prod-build ├── publish ├── update-all └── version-bump ├── src ├── client │ ├── _imports.scss │ ├── applications │ │ └── pivot-application │ │ │ ├── collection-view-delegate │ │ │ └── collection-view-delegate.tsx │ │ │ ├── pivot-application.mocha.tsx │ │ │ ├── pivot-application.scss │ │ │ └── pivot-application.tsx │ ├── components │ │ ├── auto-refresh-menu │ │ │ ├── auto-refresh-menu.mocha.tsx │ │ │ ├── auto-refresh-menu.scss │ │ │ └── auto-refresh-menu.tsx │ │ ├── body-portal │ │ │ ├── body-portal.mocha.tsx │ │ │ ├── body-portal.scss │ │ │ └── body-portal.tsx │ │ ├── bubble-menu │ │ │ ├── bubble-menu.mocha.tsx │ │ │ ├── bubble-menu.scss │ │ │ └── bubble-menu.tsx │ │ ├── bucket-marks │ │ │ ├── bucket-marks.mocha.tsx │ │ │ ├── bucket-marks.scss │ │ │ └── bucket-marks.tsx │ │ ├── button-group │ │ │ ├── button-group.mocha.tsx │ │ │ ├── button-group.scss │ │ │ └── button-group.tsx │ │ ├── button │ │ │ ├── button.mocha.tsx │ │ │ ├── button.scss │ │ │ └── button.tsx │ │ ├── chart-line │ │ │ ├── chart-line.mocha.tsx │ │ │ ├── chart-line.scss │ │ │ └── chart-line.tsx │ │ ├── checkbox │ │ │ ├── checkbox.mocha.tsx │ │ │ ├── checkbox.scss │ │ │ └── checkbox.tsx │ │ ├── clearable-input │ │ │ ├── clearable-input.mocha.tsx │ │ │ ├── clearable-input.scss │ │ │ └── clearable-input.tsx │ │ ├── date-range-input │ │ │ ├── date-range-input.mocha.tsx │ │ │ ├── date-range-input.scss │ │ │ └── date-range-input.tsx │ │ ├── date-range-picker │ │ │ ├── date-range-picker.mocha.tsx │ │ │ ├── date-range-picker.scss │ │ │ └── date-range-picker.tsx │ │ ├── dimension-actions-menu │ │ │ ├── dimension-actions-menu.mocha.tsx │ │ │ ├── dimension-actions-menu.scss │ │ │ └── dimension-actions-menu.tsx │ │ ├── dimension-list-tile │ │ │ ├── dimension-list-tile.mocha.tsx │ │ │ ├── dimension-list-tile.scss │ │ │ └── dimension-list-tile.tsx │ │ ├── dimension-measure-panel │ │ │ ├── dimension-measure-panel.mocha.tsx │ │ │ ├── dimension-measure-panel.scss │ │ │ └── dimension-measure-panel.tsx │ │ ├── dimension-tile │ │ │ ├── dimension-tile.mocha.tsx │ │ │ ├── dimension-tile.scss │ │ │ └── dimension-tile.tsx │ │ ├── drop-indicator │ │ │ ├── drop-indicator.mocha.tsx │ │ │ ├── drop-indicator.scss │ │ │ └── drop-indicator.tsx │ │ ├── dropdown │ │ │ ├── dropdown.mocha.tsx │ │ │ ├── dropdown.scss │ │ │ └── dropdown.tsx │ │ ├── fancy-drag-indicator │ │ │ ├── fancy-drag-indicator.mocha.tsx │ │ │ ├── fancy-drag-indicator.scss │ │ │ └── fancy-drag-indicator.tsx │ │ ├── filter-menu │ │ │ ├── filter-menu.mocha.tsx │ │ │ ├── filter-menu.scss │ │ │ └── filter-menu.tsx │ │ ├── filter-options-dropdown │ │ │ ├── filter-options-dropdown.mocha.tsx │ │ │ ├── filter-options-dropdown.scss │ │ │ └── filter-options-dropdown.tsx │ │ ├── filter-tile │ │ │ ├── filter-tile.mocha.tsx │ │ │ ├── filter-tile.scss │ │ │ └── filter-tile.tsx │ │ ├── form-label │ │ │ ├── form-label.mocha.tsx │ │ │ ├── form-label.scss │ │ │ └── form-label.tsx │ │ ├── global-event-listener │ │ │ ├── global-event-listener.mocha.tsx │ │ │ └── global-event-listener.tsx │ │ ├── golden-center │ │ │ ├── golden-center.mocha.tsx │ │ │ ├── golden-center.scss │ │ │ └── golden-center.tsx │ │ ├── grid-lines │ │ │ ├── grid-lines.mocha.tsx │ │ │ ├── grid-lines.scss │ │ │ └── grid-lines.tsx │ │ ├── highlight-string │ │ │ ├── highlight-string.mocha.tsx │ │ │ ├── highlight-string.scss │ │ │ └── highlight-string.tsx │ │ ├── highlighter │ │ │ ├── highlighter.mocha.tsx │ │ │ ├── highlighter.scss │ │ │ └── highlighter.tsx │ │ ├── hiluk-menu │ │ │ ├── hiluk-menu.mocha.tsx │ │ │ ├── hiluk-menu.scss │ │ │ └── hiluk-menu.tsx │ │ ├── hover-multi-bubble │ │ │ ├── hover-multi-bubble.mocha.tsx │ │ │ ├── hover-multi-bubble.scss │ │ │ └── hover-multi-bubble.tsx │ │ ├── immutable-dropdown │ │ │ ├── immutable-dropdown.mocha.tsx │ │ │ ├── immutable-dropdown.scss │ │ │ └── immutable-dropdown.tsx │ │ ├── immutable-input │ │ │ ├── immutable-input.mocha.tsx │ │ │ ├── immutable-input.scss │ │ │ └── immutable-input.tsx │ │ ├── immutable-list │ │ │ ├── immutable-list.scss │ │ │ └── immutable-list.tsx │ │ ├── index.ts │ │ ├── line-chart-axis │ │ │ ├── line-chart-axis.mocha.tsx │ │ │ ├── line-chart-axis.scss │ │ │ └── line-chart-axis.tsx │ │ ├── loader │ │ │ ├── loader.mocha.tsx │ │ │ ├── loader.scss │ │ │ └── loader.tsx │ │ ├── loading-bar │ │ │ ├── loading-bar.mocha.tsx │ │ │ ├── loading-bar.scss │ │ │ └── loading-bar.tsx │ │ ├── manual-fallback │ │ │ ├── manual-fallback.mocha.tsx │ │ │ ├── manual-fallback.scss │ │ │ └── manual-fallback.tsx │ │ ├── measures-tile │ │ │ ├── measures-tile.mocha.tsx │ │ │ ├── measures-tile.scss │ │ │ └── measures-tile.tsx │ │ ├── modal │ │ │ ├── modal.mocha.tsx │ │ │ ├── modal.scss │ │ │ └── modal.tsx │ │ ├── nav-list │ │ │ ├── nav-list.mocha.tsx │ │ │ ├── nav-list.scss │ │ │ └── nav-list.tsx │ │ ├── nav-logo │ │ │ ├── nav-logo.mocha.tsx │ │ │ ├── nav-logo.scss │ │ │ └── nav-logo.tsx │ │ ├── notifications │ │ │ ├── notification-card.scss │ │ │ ├── notification-card.tsx │ │ │ ├── notifications.mocha.tsx │ │ │ ├── notifications.scss │ │ │ └── notifications.tsx │ │ ├── number-filter-menu │ │ │ ├── number-filter-menu.mocha.tsx │ │ │ ├── number-filter-menu.scss │ │ │ └── number-filter-menu.tsx │ │ ├── number-range-picker │ │ │ ├── number-range-picker.mocha.tsx │ │ │ ├── number-range-picker.scss │ │ │ └── number-range-picker.tsx │ │ ├── pinboard-measure-tile │ │ │ ├── pinboard-measure-tile.mocha.tsx │ │ │ ├── pinboard-measure-tile.scss │ │ │ └── pinboard-measure-tile.tsx │ │ ├── pinboard-panel │ │ │ ├── pinboard-panel.mocha.tsx │ │ │ ├── pinboard-panel.scss │ │ │ └── pinboard-panel.tsx │ │ ├── preview-string-filter-menu │ │ │ ├── preview-string-filter-menu.mocha.tsx │ │ │ ├── preview-string-filter-menu.scss │ │ │ └── preview-string-filter-menu.tsx │ │ ├── query-error │ │ │ ├── query-error.mocha.tsx │ │ │ ├── query-error.scss │ │ │ └── query-error.tsx │ │ ├── range-handle │ │ │ ├── range-handle.mocha.tsx │ │ │ ├── range-handle.scss │ │ │ └── range-handle.tsx │ │ ├── resize-handle │ │ │ ├── resize-handle.mocha.tsx │ │ │ ├── resize-handle.scss │ │ │ └── resize-handle.tsx │ │ ├── router │ │ │ ├── router.mocha.tsx │ │ │ ├── router.scss │ │ │ └── router.tsx │ │ ├── scroller │ │ │ ├── scroller.scss │ │ │ └── scroller.tsx │ │ ├── searchable-tile │ │ │ ├── searchable-tile.mocha.tsx │ │ │ ├── searchable-tile.scss │ │ │ └── searchable-tile.tsx │ │ ├── segment-action-buttons │ │ │ ├── segment-action-buttons.mocha.tsx │ │ │ ├── segment-action-buttons.scss │ │ │ └── segment-action-buttons.tsx │ │ ├── segment-bubble │ │ │ ├── segment-bubble.mocha.tsx │ │ │ ├── segment-bubble.scss │ │ │ └── segment-bubble.tsx │ │ ├── selectable-string-filter-menu │ │ │ ├── selectable-string-filter-menu.mocha.tsx │ │ │ ├── selectable-string-filter-menu.scss │ │ │ └── selectable-string-filter-menu.tsx │ │ ├── settings-menu │ │ │ ├── settings-menu.mocha.tsx │ │ │ ├── settings-menu.scss │ │ │ └── settings-menu.tsx │ │ ├── shpitz │ │ │ ├── shpitz.mocha.tsx │ │ │ ├── shpitz.scss │ │ │ └── shpitz.tsx │ │ ├── side-drawer │ │ │ ├── side-drawer.mocha.tsx │ │ │ ├── side-drawer.scss │ │ │ └── side-drawer.tsx │ │ ├── simple-list │ │ │ ├── simple-list.mocha.tsx │ │ │ ├── simple-list.scss │ │ │ └── simple-list.tsx │ │ ├── simple-table │ │ │ ├── simple-table.mocha.tsx │ │ │ ├── simple-table.scss │ │ │ └── simple-table.tsx │ │ ├── split-menu │ │ │ ├── split-menu.mocha.tsx │ │ │ ├── split-menu.scss │ │ │ └── split-menu.tsx │ │ ├── split-tile │ │ │ ├── split-tile.mocha.tsx │ │ │ ├── split-tile.scss │ │ │ └── split-tile.tsx │ │ ├── string-filter-menu │ │ │ ├── string-filter-menu.mocha.tsx │ │ │ ├── string-filter-menu.scss │ │ │ └── string-filter-menu.tsx │ │ ├── svg-icon │ │ │ ├── svg-icon.mocha.tsx │ │ │ ├── svg-icon.scss │ │ │ └── svg-icon.tsx │ │ ├── tile-header │ │ │ ├── tile-header.mocha.tsx │ │ │ ├── tile-header.scss │ │ │ └── tile-header.tsx │ │ ├── time-filter-menu │ │ │ ├── time-filter-menu.mocha.tsx │ │ │ ├── time-filter-menu.scss │ │ │ └── time-filter-menu.tsx │ │ ├── user-menu │ │ │ ├── user-menu.mocha.tsx │ │ │ ├── user-menu.scss │ │ │ └── user-menu.tsx │ │ ├── vertical-axis │ │ │ ├── vertical-axis.mocha.tsx │ │ │ ├── vertical-axis.scss │ │ │ └── vertical-axis.tsx │ │ ├── vis-measure-label │ │ │ ├── vis-measure-label.mocha.tsx │ │ │ ├── vis-measure-label.scss │ │ │ └── vis-measure-label.tsx │ │ ├── vis-selector-menu │ │ │ ├── vis-selector-menu.mocha.tsx │ │ │ ├── vis-selector-menu.scss │ │ │ └── vis-selector-menu.tsx │ │ └── vis-selector │ │ │ ├── vis-selector.mocha.tsx │ │ │ ├── vis-selector.scss │ │ │ └── vis-selector.tsx │ ├── config │ │ ├── _constants.scss │ │ └── constants.ts │ ├── delegates │ │ ├── immutable-form-delegate │ │ │ └── immutable-form-delegate.tsx │ │ ├── index.ts │ │ └── loading-message-delegate │ │ │ └── loading-message-delegate.tsx │ ├── icons │ │ ├── arrow-logo.svg │ │ ├── caret.svg │ │ ├── check.svg │ │ ├── combo-logo.svg │ │ ├── data-cubes.svg │ │ ├── data.svg │ │ ├── dim-boolean.svg │ │ ├── dim-geo.svg │ │ ├── dim-number.svg │ │ ├── dim-set-string.svg │ │ ├── dim-string-geo.svg │ │ ├── dim-string.svg │ │ ├── dim-time.svg │ │ ├── drag-arrow.svg │ │ ├── drag-handle.svg │ │ ├── dragger.svg │ │ ├── dropdown-caret.svg │ │ ├── filter-contains.svg │ │ ├── filter-exclude.svg │ │ ├── filter-include.svg │ │ ├── filter-intersection.svg │ │ ├── filter-regex.svg │ │ ├── filter-string.svg │ │ ├── full-add-framed.svg │ │ ├── full-add.svg │ │ ├── full-back.svg │ │ ├── full-bookmark.svg │ │ ├── full-caret-bottom.svg │ │ ├── full-caret-left-line.svg │ │ ├── full-caret-left.svg │ │ ├── full-caret-right-line.svg │ │ ├── full-caret-right.svg │ │ ├── full-caret-small-bottom.svg │ │ ├── full-caret-small-left.svg │ │ ├── full-caret-small-right.svg │ │ ├── full-caret-small-top.svg │ │ ├── full-caret-top.svg │ │ ├── full-cluster.svg │ │ ├── full-collection.svg │ │ ├── full-cube.svg │ │ ├── full-delete.svg │ │ ├── full-edit.svg │ │ ├── full-error.svg │ │ ├── full-expand.svg │ │ ├── full-hiluk.svg │ │ ├── full-menu.svg │ │ ├── full-more-compact.svg │ │ ├── full-more-mini.svg │ │ ├── full-more.svg │ │ ├── full-multi.svg │ │ ├── full-profile.svg │ │ ├── full-refresh.svg │ │ ├── full-remove-small.svg │ │ ├── full-remove.svg │ │ ├── full-search.svg │ │ ├── full-settings.svg │ │ ├── full-time.svg │ │ ├── full-user.svg │ │ ├── github.svg │ │ ├── grid-loader.svg │ │ ├── help.svg │ │ ├── home.svg │ │ ├── measures.svg │ │ ├── menu.svg │ │ ├── pinned.svg │ │ ├── pivot-logo.svg │ │ ├── preview-filter.svg │ │ ├── preview-pin.svg │ │ ├── preview-split.svg │ │ ├── preview-subsplit.svg │ │ ├── prout │ │ ├── sort-arrow.svg │ │ ├── split-add.svg │ │ ├── split-replace.svg │ │ ├── star.svg │ │ ├── text-logo.svg │ │ ├── to-arrow.svg │ │ ├── vis-bar-chart.svg │ │ ├── vis-geo.svg │ │ ├── vis-heatmap.svg │ │ ├── vis-line-chart.svg │ │ ├── vis-scatter-plot.svg │ │ ├── vis-stacked-bars.svg │ │ ├── vis-table.svg │ │ ├── vis-totals.svg │ │ ├── vis-treemap.svg │ │ └── x.svg │ ├── modals │ │ ├── about-modal │ │ │ ├── about-modal.mocha.tsx │ │ │ ├── about-modal.scss │ │ │ └── about-modal.tsx │ │ ├── add-collection-tile-modal │ │ │ ├── add-collection-tile-modal.mocha.tsx │ │ │ ├── add-collection-tile-modal.scss │ │ │ └── add-collection-tile-modal.tsx │ │ ├── attribute-modal │ │ │ ├── attribute-modal.scss │ │ │ └── attribute-modal.tsx │ │ ├── cluster-seed-modal │ │ │ ├── cluster-seed-modal.scss │ │ │ └── cluster-seed-modal.tsx │ │ ├── data-cube-filter-modal │ │ │ ├── data-cube-filter-modal.scss │ │ │ └── data-cube-filter-modal.tsx │ │ ├── data-cube-seed-modal │ │ │ ├── data-cube-seed-modal.scss │ │ │ └── data-cube-seed-modal.tsx │ │ ├── dimension-modal │ │ │ ├── dimension-modal.scss │ │ │ └── dimension-modal.tsx │ │ ├── index.ts │ │ ├── measure-modal │ │ │ ├── measure-modal.scss │ │ │ └── measure-modal.tsx │ │ ├── name-description-modal │ │ │ ├── name-description-modal.scss │ │ │ └── name-description-modal.tsx │ │ ├── raw-data-modal │ │ │ ├── raw-data-modal.mocha.tsx │ │ │ ├── raw-data-modal.scss │ │ │ └── raw-data-modal.tsx │ │ └── suggestion-modal │ │ │ ├── suggestion-modal.scss │ │ │ └── suggestion-modal.tsx │ ├── pivot-entry.scss │ ├── pivot-entry.ts │ ├── utils │ │ ├── ajax │ │ │ └── ajax.ts │ │ ├── dom-highlighter │ │ │ └── dom-highlighter.ts │ │ ├── dom │ │ │ └── dom.ts │ │ ├── download │ │ │ ├── download.mocha.ts │ │ │ └── download.ts │ │ ├── drag-manager │ │ │ └── drag-manager.ts │ │ ├── error-monitor │ │ │ └── error-monitor.ts │ │ ├── function-slot │ │ │ └── function-slot.ts │ │ ├── local-storage │ │ │ └── local-storage.ts │ │ ├── pill-tile │ │ │ └── pill-tile.ts │ │ ├── query-runner │ │ │ └── query-runner.ts │ │ ├── sizing │ │ │ ├── sizing.mocha.ts │ │ │ └── sizing.ts │ │ ├── styles │ │ │ ├── _bounce.scss │ │ │ ├── _bubble-cont.scss │ │ │ ├── _button.scss │ │ │ ├── _dimension-item.scss │ │ │ ├── _empty.scss │ │ │ ├── _form.scss │ │ │ ├── _grid.scss │ │ │ ├── _header-bar.scss │ │ │ ├── _index.scss │ │ │ ├── _indicator-field.scss │ │ │ ├── _input.scss │ │ │ ├── _linear-transition.scss │ │ │ ├── _media-queries.scss │ │ │ ├── _menu-cont.scss │ │ │ ├── _modal-cont.scss │ │ │ ├── _module.scss │ │ │ ├── _overflow.scss │ │ │ ├── _side-by-side.scss │ │ │ ├── _variables.scss │ │ │ └── _white-shadow.scss │ │ ├── test-utils │ │ │ ├── find-dom-node.ts │ │ │ ├── get-caller-file.ts │ │ │ ├── index.ts │ │ │ ├── jsdom-setup.ts │ │ │ ├── mock-react-component.mocha.ts │ │ │ ├── mock-react-component.ts │ │ │ ├── mock-require-ensure.ts │ │ │ └── require-extensions.ts │ │ └── url │ │ │ └── url.ts │ ├── views │ │ ├── collection-view │ │ │ ├── collection-header-bar │ │ │ │ ├── collection-header-bar.mocha.tsx │ │ │ │ ├── collection-header-bar.scss │ │ │ │ └── collection-header-bar.tsx │ │ │ ├── collection-overview │ │ │ │ ├── collection-overview.scss │ │ │ │ └── collection-overview.tsx │ │ │ ├── collection-tile-card │ │ │ │ ├── collection-tile-card.scss │ │ │ │ └── collection-tile-card.tsx │ │ │ ├── collection-tile-lightbox │ │ │ │ ├── collection-tile-lightbox.scss │ │ │ │ └── collection-tile-lightbox.tsx │ │ │ ├── collection-view.scss │ │ │ └── collection-view.tsx │ │ ├── cube-view │ │ │ ├── cube-header-bar │ │ │ │ ├── cube-header-bar.mocha.tsx │ │ │ │ ├── cube-header-bar.scss │ │ │ │ └── cube-header-bar.tsx │ │ │ ├── cube-view.mocha.tsx │ │ │ ├── cube-view.scss │ │ │ ├── cube-view.tsx │ │ │ └── supervised-cube-header-bar │ │ │ │ ├── supervised-cube-header-bar.scss │ │ │ │ └── supervised-cube-header-bar.tsx │ │ ├── home-view │ │ │ ├── home-header-bar │ │ │ │ ├── home-header-bar.mocha.tsx │ │ │ │ ├── home-header-bar.scss │ │ │ │ └── home-header-bar.tsx │ │ │ ├── home-view.mocha.tsx │ │ │ ├── home-view.scss │ │ │ ├── home-view.tsx │ │ │ └── item-card │ │ │ │ ├── item-card.scss │ │ │ │ └── item-card.tsx │ │ ├── link-view │ │ │ ├── link-header-bar │ │ │ │ ├── link-header-bar.mocha.tsx │ │ │ │ ├── link-header-bar.scss │ │ │ │ └── link-header-bar.tsx │ │ │ ├── link-view.mocha.tsx │ │ │ ├── link-view.scss │ │ │ └── link-view.tsx │ │ ├── no-data-view │ │ │ ├── no-data-header-bar │ │ │ │ ├── no-data-header-bar.mocha.tsx │ │ │ │ ├── no-data-header-bar.scss │ │ │ │ └── no-data-header-bar.tsx │ │ │ ├── no-data-view.scss │ │ │ └── no-data-view.tsx │ │ └── settings-view │ │ │ ├── _layout.scss │ │ │ ├── cluster-edit │ │ │ ├── cluster-edit.scss │ │ │ └── cluster-edit.tsx │ │ │ ├── clusters │ │ │ ├── clusters.scss │ │ │ └── clusters.tsx │ │ │ ├── data-cube-edit │ │ │ ├── data-cube-edit.scss │ │ │ └── data-cube-edit.tsx │ │ │ ├── data-cubes │ │ │ ├── data-cubes.scss │ │ │ └── data-cubes.tsx │ │ │ ├── data-table │ │ │ ├── data-table.scss │ │ │ └── data-table.tsx │ │ │ ├── other │ │ │ ├── other.scss │ │ │ └── other.tsx │ │ │ ├── settings-header-bar │ │ │ ├── settings-header-bar.mocha.tsx │ │ │ ├── settings-header-bar.scss │ │ │ └── settings-header-bar.tsx │ │ │ ├── settings-view.mocha.tsx │ │ │ ├── settings-view.scss │ │ │ └── settings-view.tsx │ └── visualizations │ │ ├── bar-chart │ │ ├── bar-chart.mocha.tsx │ │ ├── bar-chart.scss │ │ ├── bar-chart.tsx │ │ └── bar-coordinates.ts │ │ ├── base-visualization │ │ ├── base-visualization.scss │ │ └── base-visualization.tsx │ │ ├── geo │ │ ├── geo.mocha.tsx │ │ ├── geo.scss │ │ └── geo.tsx │ │ ├── index.tsx │ │ ├── line-chart │ │ ├── line-chart.mocha.tsx │ │ ├── line-chart.scss │ │ └── line-chart.tsx │ │ ├── table │ │ ├── _body.scss │ │ ├── _header.scss │ │ ├── _highlight-cont.scss │ │ ├── table.mocha.tsx │ │ ├── table.scss │ │ └── table.tsx │ │ └── totals │ │ ├── totals.mocha.tsx │ │ ├── totals.scss │ │ └── totals.tsx ├── common │ ├── manifests │ │ ├── bar-chart │ │ │ └── bar-chart.ts │ │ ├── geo │ │ │ └── geo.ts │ │ ├── index.ts │ │ ├── line-chart │ │ │ └── line-chart.ts │ │ ├── table │ │ │ └── table.ts │ │ └── totals │ │ │ └── totals.ts │ ├── models │ │ ├── app-settings │ │ │ ├── app-settings.mocha.ts │ │ │ ├── app-settings.mock.ts │ │ │ └── app-settings.ts │ │ ├── clicker │ │ │ └── clicker.ts │ │ ├── cluster │ │ │ ├── cluster.mocha.ts │ │ │ └── cluster.ts │ │ ├── collection-tile │ │ │ ├── collection-tile.mocha.ts │ │ │ ├── collection-tile.mock.ts │ │ │ └── collection-tile.ts │ │ ├── collection │ │ │ ├── collection.mocha.ts │ │ │ ├── collection.mock.ts │ │ │ └── collection.ts │ │ ├── colors │ │ │ ├── colors.mocha.ts │ │ │ └── colors.ts │ │ ├── customization │ │ │ ├── customization.mocha.ts │ │ │ └── customization.ts │ │ ├── data-cube │ │ │ ├── data-cube.mocha.ts │ │ │ ├── data-cube.mock.ts │ │ │ └── data-cube.ts │ │ ├── device │ │ │ └── device.ts │ │ ├── dimension │ │ │ ├── dimension.mocha.ts │ │ │ ├── dimension.mock.ts │ │ │ └── dimension.ts │ │ ├── drag-position │ │ │ ├── drag-position.mocha.ts │ │ │ └── drag-position.ts │ │ ├── essence │ │ │ ├── essence.mocha.ts │ │ │ ├── essence.mock.ts │ │ │ └── essence.ts │ │ ├── external-view │ │ │ ├── external-view.mocha.ts │ │ │ └── external-view.ts │ │ ├── filter-clause │ │ │ ├── filter-clause.mocha.ts │ │ │ └── filter-clause.ts │ │ ├── filter │ │ │ ├── filter.mocha.ts │ │ │ └── filter.ts │ │ ├── granularity │ │ │ ├── granularity.mocha.ts │ │ │ └── granularity.ts │ │ ├── highlight │ │ │ ├── highlight.mocha.ts │ │ │ └── highlight.ts │ │ ├── index.ts │ │ ├── labels.ts │ │ ├── list-item │ │ │ └── list-item.ts │ │ ├── manifest │ │ │ └── manifest.ts │ │ ├── measure │ │ │ ├── measure.mocha.ts │ │ │ └── measure.ts │ │ ├── mocks.ts │ │ ├── refresh-rule │ │ │ ├── refresh-rule.mocha.ts │ │ │ └── refresh-rule.ts │ │ ├── sort-on │ │ │ ├── sort-on.mocha.ts │ │ │ ├── sort-on.mock.ts │ │ │ └── sort-on.ts │ │ ├── split-combine │ │ │ ├── split-combine.mocha.ts │ │ │ ├── split-combine.mock.ts │ │ │ └── split-combine.ts │ │ ├── splits │ │ │ ├── splits.mocha.ts │ │ │ └── splits.ts │ │ ├── stage │ │ │ ├── stage.mocha.ts │ │ │ ├── stage.mock.ts │ │ │ └── stage.ts │ │ ├── time-tag │ │ │ ├── time-tag.mocha.ts │ │ │ └── time-tag.ts │ │ ├── timekeeper │ │ │ ├── timekeeper.mocha.ts │ │ │ ├── timekeeper.mock.ts │ │ │ └── timekeeper.ts │ │ ├── user │ │ │ └── user.ts │ │ ├── view-supervisor │ │ │ └── view-supervisor.ts │ │ └── visualization-props │ │ │ └── visualization-props.ts │ └── utils │ │ ├── array │ │ └── array.ts │ │ ├── circumstances-handler │ │ ├── circumstances-handler.mocha.ts │ │ └── circumstances-handler.tsx │ │ ├── formatter │ │ ├── formatter.mocha.ts │ │ └── formatter.ts │ │ ├── general │ │ ├── general.mocha.ts │ │ └── general.ts │ │ ├── immutable-utils │ │ └── immutable-utils.ts │ │ ├── index.ts │ │ ├── object │ │ └── object.ts │ │ ├── parser │ │ └── parser.ts │ │ ├── string │ │ └── string.ts │ │ ├── test-utils │ │ ├── ensure-timezones.ts │ │ └── index.ts │ │ ├── time-monitor │ │ └── time-monitor.ts │ │ ├── time │ │ ├── time.mocha.ts │ │ └── time.ts │ │ └── yaml-helper │ │ └── yaml-helper.ts └── server │ ├── app.ts │ ├── config.ts │ ├── models │ ├── index.ts │ ├── server-settings │ │ ├── server-settings.mocha.ts │ │ └── server-settings.ts │ └── settings-location │ │ ├── settings-location.mocha.ts │ │ └── settings-location.ts │ ├── routes │ ├── client-settings │ │ └── client-settings.ts │ ├── collections │ │ └── collections.ts │ ├── error │ │ ├── error.mocha.ts │ │ └── error.ts │ ├── health │ │ ├── health.mocha.ts │ │ └── health.ts │ ├── mkurl │ │ ├── mkurl.mocha.ts │ │ └── mkurl.ts │ ├── pivot │ │ ├── pivot.mocha.ts │ │ └── pivot.ts │ ├── plyql │ │ ├── plyql.mocha.ts │ │ └── plyql.ts │ ├── plywood │ │ ├── plywood.mocha.ts │ │ └── plywood.ts │ └── settings │ │ └── settings.ts │ ├── utils │ ├── cluster-manager │ │ └── cluster-manager.ts │ ├── file-manager │ │ └── file-manager.ts │ ├── file │ │ └── file.ts │ ├── general │ │ └── general.ts │ ├── index.ts │ ├── requester │ │ └── requester.ts │ ├── settings-manager │ │ └── settings-manager.ts │ ├── settings-store │ │ └── settings-store.ts │ └── updater │ │ ├── updater.mocha.ts │ │ └── updater.ts │ ├── views.ts │ └── www.ts ├── test ├── README.md ├── basic │ └── cli.mocha.js ├── configs │ ├── duplicate-measure-dimension-name.yaml │ ├── inline-vars.yaml │ ├── list-refresh-on-load-datasource.yaml │ ├── one-little-datasource.yaml │ ├── reintrospect-on-load-datasource.yaml │ ├── reintrospect-on-load.yaml │ ├── secure.yaml │ ├── tracking-static.yaml │ └── two-little-datasources.yaml ├── datazoo │ ├── druid-introspection.js │ └── postgres-introsection.js ├── simulate │ ├── config-typo.mocha.js │ ├── examples.mocha.js │ ├── file.mocha.js │ ├── list-refresh-on-load.mocha.js │ ├── many-datasources.mocha.js │ ├── reintrospect-on-load-datasource.mocha.js │ ├── reintrospect-on-load.mocha.js │ ├── secure.mocha.js │ ├── tracking.mocha.js │ └── typo.mocha.js └── utils │ ├── basic-string.js │ ├── event-collector.js │ ├── extend.js │ ├── extract-config.js │ └── mock-druid.js ├── travis-test ├── tsconfig.json ├── tslint.json ├── typings ├── assertion-error │ └── assertion-error.d.ts ├── browser-filesaver │ └── browser-filesaver.d.ts ├── clipboard │ └── clipboard.d.ts ├── compression │ └── compression.d.ts ├── d3 │ └── d3.d.ts ├── debug │ └── debug.d.ts ├── form-data │ └── form-data.d.ts ├── fs-promise │ └── fs-promise.d.ts ├── hsts.d.ts ├── immutable.d.ts ├── jsdom │ └── jsdom.d.ts ├── lz-string │ └── lz-string.d.ts ├── mime │ └── mime.d.ts ├── mocha │ └── mocha.d.ts ├── nopt │ └── nopt.d.ts ├── numeraljs │ └── numeraljs.d.ts ├── react-addons-css-transition-group │ └── react-addons-css-transition-group.d.ts ├── react-addons-test-utils │ └── react-addons-test-utils.d.ts ├── react-dom │ └── react-dom.d.ts ├── react │ └── react.d.ts ├── require.d.ts ├── rewire │ └── index.d.ts └── sinon │ └── sinon.d.ts └── webstorm └── lookfor.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /.idea/workspace.xml 3 | /.idea/tasks.xml 4 | /.idea/encodings.xml 5 | /.sass-cache/ 6 | /imply-pivot-*.tgz 7 | /node_modules/ 8 | /build/ 9 | /public/ 10 | /private/ 11 | /coverage/ 12 | /assets/data/*-large.* 13 | /webstorm/errors 14 | /config.yaml 15 | /config-test.yaml 16 | /*.sublime-* 17 | /dont-commit-* 18 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | pivot -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /.idea/jsLibraryMappings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/pivot.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /.idea/runConfigurations/Run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/scopes/All_Source_Files.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/scopes/Client_Source_Files.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/scopes/Server_Source_Files.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/scopes/TypeScript_Files.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | # === Webstorm === 2 | /.idea/ 3 | /.sass-cache/ 4 | /imply-pivot-*.tgz 5 | /assets/data/*-large.* 6 | /webstorm 7 | /resources/ 8 | /config.yaml 9 | /config-test.yaml 10 | /build/client 11 | *.mocha.js 12 | /private/ 13 | /coverage/ 14 | /script/ 15 | /docs/ 16 | /test/ 17 | /src/ 18 | /typings/ 19 | /.travis.yml 20 | /travis-test 21 | /full-test 22 | /run 23 | /run-coverage 24 | /CONTRIBUTING.md 25 | /gulpfile.js 26 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "4.0" 4 | - "6.1" 5 | 6 | script: "./travis-test" 7 | 8 | notifications: 9 | email: false 10 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # How to Contribute 2 | 3 | - Bug reports, feature requests, and any sort of feedback is very welcome. 4 | - Pull requests fixing bugs are very welcome as well. 5 | - For pull requests involving any changes to the UI, please discuss them first on the [Imply user group](https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!forum/imply-user-group). 6 | -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | Pivot 2 | 3 | ------------------------------------------------------------------------------- 4 | 5 | This software includes the font Open Sans, copyright (c) 2015, Google Inc. 6 | * LICENSE: 7 | * /assets/fonts/Open-Sans-regular/LICENSE.txt (Apache License 2.0) 8 | * HOMEPAGE: 9 | * https://www.google.com/fonts/specimen/Open+Sans 10 | 11 | This software includes the polyfill library ios-html5-drag-drop-shim, copyright (c) 2013 Tim Ruffles 12 | * LICENSE: 13 | * https://github.com/timruffles/ios-html5-drag-drop-shim/blob/rewrite/LICENSE (MIT) 14 | * HOMEPAGE: 15 | * https://github.com/timruffles/ios-html5-drag-drop-shim 16 | -------------------------------------------------------------------------------- /assets/favicon/android-chrome-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/android-chrome-144x144.png -------------------------------------------------------------------------------- /assets/favicon/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/android-chrome-192x192.png -------------------------------------------------------------------------------- /assets/favicon/android-chrome-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/android-chrome-36x36.png -------------------------------------------------------------------------------- /assets/favicon/android-chrome-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/android-chrome-48x48.png -------------------------------------------------------------------------------- /assets/favicon/android-chrome-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/android-chrome-72x72.png -------------------------------------------------------------------------------- /assets/favicon/android-chrome-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/android-chrome-96x96.png -------------------------------------------------------------------------------- /assets/favicon/apple-touch-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/apple-touch-icon-114x114.png -------------------------------------------------------------------------------- /assets/favicon/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /assets/favicon/apple-touch-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/apple-touch-icon-144x144.png -------------------------------------------------------------------------------- /assets/favicon/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /assets/favicon/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /assets/favicon/apple-touch-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/apple-touch-icon-57x57.png -------------------------------------------------------------------------------- /assets/favicon/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /assets/favicon/apple-touch-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/apple-touch-icon-72x72.png -------------------------------------------------------------------------------- /assets/favicon/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /assets/favicon/apple-touch-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/apple-touch-icon-precomposed.png -------------------------------------------------------------------------------- /assets/favicon/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/apple-touch-icon.png -------------------------------------------------------------------------------- /assets/favicon/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | #189ae0 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /assets/favicon/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/favicon-16x16.png -------------------------------------------------------------------------------- /assets/favicon/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/favicon-32x32.png -------------------------------------------------------------------------------- /assets/favicon/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/favicon-96x96.png -------------------------------------------------------------------------------- /assets/favicon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/favicon.ico -------------------------------------------------------------------------------- /assets/favicon/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Pivot", 3 | "icons": [ 4 | { 5 | "src": "\/favicon\/android-chrome-36x36.png?v=3", 6 | "sizes": "36x36", 7 | "type": "image\/png", 8 | "density": 0.75 9 | }, 10 | { 11 | "src": "\/favicon\/android-chrome-48x48.png?v=3", 12 | "sizes": "48x48", 13 | "type": "image\/png", 14 | "density": 1 15 | }, 16 | { 17 | "src": "\/favicon\/android-chrome-72x72.png?v=3", 18 | "sizes": "72x72", 19 | "type": "image\/png", 20 | "density": 1.5 21 | }, 22 | { 23 | "src": "\/favicon\/android-chrome-96x96.png?v=3", 24 | "sizes": "96x96", 25 | "type": "image\/png", 26 | "density": 2 27 | }, 28 | { 29 | "src": "\/favicon\/android-chrome-144x144.png?v=3", 30 | "sizes": "144x144", 31 | "type": "image\/png", 32 | "density": 3 33 | }, 34 | { 35 | "src": "\/favicon\/android-chrome-192x192.png?v=3", 36 | "sizes": "192x192", 37 | "type": "image\/png", 38 | "density": 4 39 | } 40 | ], 41 | "display": "standalone" 42 | } 43 | -------------------------------------------------------------------------------- /assets/favicon/mstile-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/mstile-144x144.png -------------------------------------------------------------------------------- /assets/favicon/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/mstile-150x150.png -------------------------------------------------------------------------------- /assets/favicon/mstile-310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/mstile-310x150.png -------------------------------------------------------------------------------- /assets/favicon/mstile-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/mstile-310x310.png -------------------------------------------------------------------------------- /assets/favicon/mstile-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/favicon/mstile-70x70.png -------------------------------------------------------------------------------- /assets/fonts/Open-Sans-600/Open-Sans-600.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/fonts/Open-Sans-600/Open-Sans-600.eot -------------------------------------------------------------------------------- /assets/fonts/Open-Sans-600/Open-Sans-600.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/fonts/Open-Sans-600/Open-Sans-600.ttf -------------------------------------------------------------------------------- /assets/fonts/Open-Sans-600/Open-Sans-600.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/fonts/Open-Sans-600/Open-Sans-600.woff -------------------------------------------------------------------------------- /assets/fonts/Open-Sans-600/Open-Sans-600.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/fonts/Open-Sans-600/Open-Sans-600.woff2 -------------------------------------------------------------------------------- /assets/fonts/Open-Sans-regular/Open-Sans-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/fonts/Open-Sans-regular/Open-Sans-regular.eot -------------------------------------------------------------------------------- /assets/fonts/Open-Sans-regular/Open-Sans-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/fonts/Open-Sans-regular/Open-Sans-regular.ttf -------------------------------------------------------------------------------- /assets/fonts/Open-Sans-regular/Open-Sans-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/fonts/Open-Sans-regular/Open-Sans-regular.woff -------------------------------------------------------------------------------- /assets/fonts/Open-Sans-regular/Open-Sans-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/assets/fonts/Open-Sans-regular/Open-Sans-regular.woff2 -------------------------------------------------------------------------------- /bin/pivot: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /* 4 | * Copyright 2015-2016 Imply Data, Inc. 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | var path = require('path'); 20 | var fs = require('fs'); 21 | var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../build/server/www.js'); 22 | 23 | require(lib); 24 | -------------------------------------------------------------------------------- /compile: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eu 2 | 3 | #exit 0; 4 | 5 | ./node_modules/.bin/tsc 6 | gulp client:bundle > /dev/null 7 | -------------------------------------------------------------------------------- /docs/example/request-decoration/config.yaml: -------------------------------------------------------------------------------- 1 | # The port on which the Pivot server will listen on 2 | port: 9090 3 | 4 | clusters: 5 | - name: druid 6 | type: druid 7 | host: the.druid.host:8082 # This happens to be my Docker machine 8 | 9 | requestDecorator: './druid-request-decorator.js' 10 | 11 | # The are being read by the druidRequestDecorator 12 | decoratorOptions: 13 | myUsername: Aladdin 14 | myPassword: OpenSesame 15 | 16 | -------------------------------------------------------------------------------- /docs/example/request-decoration/result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/docs/example/request-decoration/result.png -------------------------------------------------------------------------------- /docs/images/compare.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/docs/images/compare.gif -------------------------------------------------------------------------------- /docs/images/custom-link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/docs/images/custom-link.png -------------------------------------------------------------------------------- /docs/images/drag-and-drop.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/docs/images/drag-and-drop.gif -------------------------------------------------------------------------------- /docs/images/explore.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/docs/images/explore.gif -------------------------------------------------------------------------------- /full-test: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eu 2 | 3 | ./travis-test 4 | mocha test/datazoo 5 | -------------------------------------------------------------------------------- /lib/polyfill/drag-drop-polyfill.css: -------------------------------------------------------------------------------- 1 | 2 | .dnd-poly-drag-image { 3 | opacity: .5 !important; 4 | } 5 | 6 | .dnd-poly-drag-image.dnd-poly-snapback { 7 | transition-property: transform, -webkit-transform !important; 8 | transition-duration: 250ms !important; 9 | transition-timing-function: ease-out !important; 10 | } 11 | -------------------------------------------------------------------------------- /resources/data/wikiticker-2015-09-12.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/resources/data/wikiticker-2015-09-12.gz -------------------------------------------------------------------------------- /resources/logo/pivot-logo-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/resources/logo/pivot-logo-1024.png -------------------------------------------------------------------------------- /resources/logo/pivot-logo-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/resources/logo/pivot-logo-128.png -------------------------------------------------------------------------------- /resources/logo/pivot-logo-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/resources/logo/pivot-logo-32.png -------------------------------------------------------------------------------- /resources/logo/pivot-logo-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/resources/logo/pivot-logo-512.png -------------------------------------------------------------------------------- /resources/logo/pivot-logo-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/resources/logo/pivot-logo-64.png -------------------------------------------------------------------------------- /resources/logo/pivot-logo-800.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geo-opensource/pivot/cae3b8ba7b92ea4d236c83700b9444b2dbc29b4f/resources/logo/pivot-logo-800.png -------------------------------------------------------------------------------- /resources/logo/pngify: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eu 2 | 3 | # Force this to the working directory 4 | cd "$(dirname "$0")" 5 | 6 | if which convert > /dev/null; then 7 | echo "Converting..." 8 | else 9 | echo "Please install ImageMagic." 10 | exit 1 11 | fi 12 | 13 | # Note: Look into filters (http://www.imagemagick.org/script/command-line-options.php?#filter) 14 | 15 | rm -f ./*.png 16 | 17 | # Render the SVG into a big PNG 18 | convert -density 1200 -background none pivot-logo.svg -resize 1024x1024 pivot-logo-1024.png 19 | convert -density 1200 -background none pivot-logo.svg -resize 800x800 pivot-logo-800.png 20 | 21 | # Down size the large PNG into other sizes 22 | # Gamma correction from: http://www.4p8.com/eric.brasseur/gamma.html 23 | # Thank you to Xavier Léauté (https://github.com/xvrl) for pointing it out. 24 | convert pivot-logo-1024.png -depth 16 -gamma 0.454545 -resize 512x512 -gamma 2.2 -depth 8 pivot-logo-512.png 25 | convert pivot-logo-1024.png -depth 16 -gamma 0.454545 -resize 128x128 -gamma 2.2 -depth 8 pivot-logo-128.png 26 | convert pivot-logo-1024.png -depth 16 -gamma 0.454545 -resize 64x64 -gamma 2.2 -depth 8 pivot-logo-64.png 27 | convert pivot-logo-1024.png -depth 16 -gamma 0.454545 -resize 32x32 -gamma 2.2 -depth 8 pivot-logo-32.png 28 | 29 | echo "Done" 30 | -------------------------------------------------------------------------------- /run: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eu 2 | 3 | # Force this to the working directory 4 | cd "$(dirname "$0")" 5 | 6 | exec ./bin/pivot --config config.yaml 7 | -------------------------------------------------------------------------------- /run-coverage: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eu 2 | 3 | # Use a reporter that does not take a ton of height 4 | node node_modules/.bin/istanbul cover node_modules/.bin/_mocha -- --reporter progress build/**/*.mocha.js; 5 | -------------------------------------------------------------------------------- /script/cp-plywood: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eu 2 | 3 | # This script is used to quickly 'npm install plywood@super-latest' without having to publish plywood. 4 | # Assumes /pivot and /plywood are next to each other 5 | 6 | (cd ../plywood; ./compile ) 7 | cp ../plywood/package.json ./node_modules/plywood 8 | cp -r ../plywood/package ./node_modules/plywood 9 | cp -r ../plywood/build ./node_modules/plywood 10 | cp -r ../plywood/src ./node_modules/plywood 11 | cp -r ../plywood/test ./node_modules/plywood 12 | -------------------------------------------------------------------------------- /script/prod-build: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eu 2 | 3 | npm install 4 | 5 | gulp 6 | 7 | npm prune --production 8 | -------------------------------------------------------------------------------- /script/publish: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eu 2 | 3 | if [ `git symbolic-ref --short HEAD` != "latest" ] 4 | then 5 | echo "can not publish from a non master branch" >&2 6 | exit 1 7 | fi 8 | 9 | if [ "$(git status --porcelain)" != "" ] 10 | then 11 | echo "git status not clean!" >&2 12 | exit 1 13 | fi 14 | 15 | echo "Trying to publish..." 16 | 17 | gulp all 18 | ./travis-test 19 | script/version-bump 20 | npm publish 21 | -------------------------------------------------------------------------------- /script/update-all: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eu 2 | 3 | brew update 4 | brew upgrade node 5 | rm -rf node_modules 6 | npm install 7 | gulp all 8 | -------------------------------------------------------------------------------- /script/version-bump: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eu 2 | 3 | echo "Updating version..." 4 | npm version patch -m "Upgrade version to %s" 5 | git push 6 | git push --tags; 7 | -------------------------------------------------------------------------------- /src/client/_imports.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import 'config/constants'; 18 | @import 'utils/styles/index'; 19 | -------------------------------------------------------------------------------- /src/client/applications/pivot-application/pivot-application.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .pivot-application { 20 | position: absolute; 21 | top: 0; 22 | left: 0; 23 | width: 100%; 24 | height: 100%; 25 | overflow: hidden; 26 | background: $background-base; 27 | 28 | .not-implemented { display: none; } 29 | 30 | .home-view, 31 | .no-data-view, 32 | .cube-view, 33 | .link-view, 34 | .settings-view { 35 | @include pin-full; 36 | } 37 | 38 | .side-drawer-container { 39 | position: absolute; 40 | left: 0; 41 | top: 0; 42 | bottom: 0; 43 | z-index: 80; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/client/components/auto-refresh-menu/auto-refresh-menu.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .auto-refresh-menu { 20 | .update-now-button { 21 | @extend %button-secondary; 22 | width: 100%; 23 | margin-top: 8px; 24 | 25 | svg { 26 | position: absolute; 27 | top: 5px; 28 | left: 50%; 29 | margin-left: -10px; 30 | width: 19px; 31 | } 32 | } 33 | 34 | .update-info { 35 | @extend %indicator-field; 36 | flex: 1; 37 | margin-top: 8px; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/client/components/body-portal/body-portal.mocha.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import { expect } from 'chai'; 18 | import * as sinon from 'sinon'; 19 | import * as React from 'react'; 20 | import * as ReactDOM from 'react-dom'; 21 | 22 | import * as TestUtils from 'react-addons-test-utils'; 23 | 24 | import '../../utils/test-utils/index'; 25 | 26 | import { $, Expression } from 'plywood'; 27 | import { BodyPortal } from './body-portal'; 28 | 29 | describe('BodyPortal', () => { 30 | 31 | }); 32 | -------------------------------------------------------------------------------- /src/client/components/body-portal/body-portal.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .body-portal { 20 | position: absolute; 21 | 22 | &.full-size { 23 | width: 100%; 24 | height: 100%; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/client/components/bucket-marks/bucket-marks.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .bucket-marks { 20 | pointer-events: none; 21 | 22 | line { 23 | pointer-events: none; 24 | stroke: $gray; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/client/components/chart-line/chart-line.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .chart-line { 20 | pointer-events: none; 21 | 22 | .area { 23 | stroke: none; 24 | fill: $main-time-area; 25 | fill-opacity: .9; 26 | } 27 | 28 | .line { 29 | fill: none; 30 | stroke: $main-time-line; 31 | stroke-width: 1.6px; 32 | } 33 | 34 | .singleton { 35 | fill: $main-time-line; 36 | stroke: none; 37 | } 38 | 39 | .hover { 40 | fill: $white; 41 | stroke: $main-time-line; 42 | stroke-width: 2; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/client/components/date-range-input/date-range-input.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .date-range-input { 20 | .input-field { 21 | @extend %default-input; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/client/components/dimension-measure-panel/dimension-measure-panel.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .dimension-measure-panel { 20 | @include for-small-screens { 21 | padding: 0 1px 0 0; 22 | font-size: 0.9em; 23 | } 24 | 25 | padding: $tile-margin-v $tile-margin-h; 26 | 27 | display: flex; 28 | flex-direction: column; 29 | 30 | .dimension-list-tile { 31 | margin-bottom: 1px; 32 | border-radius: $corner $corner 0 0; 33 | } 34 | 35 | .measures-tile { 36 | border-radius: 0 0 $corner $corner; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/client/components/filter-menu/filter-menu.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .filter-menu { 20 | .button-bar { 21 | margin-top: 12px; 22 | 23 | button { 24 | min-width: 70px; 25 | 26 | &:not(:last-child) { 27 | margin-right: 6px; 28 | } 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/client/components/global-event-listener/global-event-listener.mocha.tsx: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai'; 2 | import * as sinon from 'sinon'; 3 | import * as React from 'react'; 4 | import * as TestUtils from 'react-addons-test-utils'; 5 | import { $, Expression } from 'plywood'; 6 | 7 | import { findDOMNode } from '../../utils/test-utils/index'; 8 | 9 | import { GlobalEventListener } from './global-event-listener'; 10 | 11 | describe('GlobalEventListener', () => { 12 | it('adds the correct class', () => { 13 | var renderedComponent = TestUtils.renderIntoDocument( 14 | 17 | ); 18 | }); 19 | 20 | }); 21 | -------------------------------------------------------------------------------- /src/client/components/golden-center/golden-center.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .golden-center { 20 | & > div { 21 | margin: auto; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/client/components/grid-lines/grid-lines.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .grid-lines { 20 | line { 21 | pointer-events: none; 22 | stroke: $grid-line-color; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/client/components/highlight-string/highlight-string.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .highlight-string { 20 | .bold { 21 | border-bottom: 1px solid $text-standard; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/client/components/hiluk-menu/hiluk-menu.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .hiluk-menu { 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/client/components/immutable-dropdown/immutable-dropdown.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .immutable-dropdown { 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/client/components/immutable-input/immutable-input.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .immutable-input { 20 | @extend %default-input; 21 | } 22 | -------------------------------------------------------------------------------- /src/client/components/line-chart-axis/line-chart-axis.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .line-chart-axis { 20 | @include pin-full; 21 | 22 | line { 23 | pointer-events: none; 24 | } 25 | 26 | line { 27 | stroke: $gray; 28 | } 29 | 30 | text { 31 | text-anchor: middle; 32 | font-size: 12px; 33 | fill: $text-medium; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/client/components/loader/loader.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | require('./loader.css'); 18 | 19 | import * as React from 'react'; 20 | import { SvgIcon } from '../svg-icon/svg-icon'; 21 | 22 | export interface LoaderProps extends React.Props { 23 | } 24 | 25 | export interface LoaderState { 26 | } 27 | 28 | export class Loader extends React.Component { 29 | constructor() { 30 | super(); 31 | 32 | } 33 | 34 | render() { 35 | return
36 | 37 |
; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/client/components/manual-fallback/manual-fallback.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .manual-fallback { 20 | text-align: center; 21 | padding: 100px 30px; 22 | 23 | .message { 24 | font-size: 20px; 25 | color: $text-medium; 26 | } 27 | 28 | ul { 29 | margin-top: 24px; 30 | } 31 | 32 | li { 33 | font-size: 14px; 34 | cursor: pointer; 35 | color: $brand; 36 | margin-bottom: 10px; 37 | 38 | &:hover { 39 | text-decoration: underline; 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/client/components/nav-logo/nav-logo.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .nav-logo { 20 | padding-right: $nav-padding; 21 | height: 60px; 22 | 23 | .logo { 24 | position: absolute; 25 | left: $nav-padding; 26 | top: 50%; 27 | transform: translate(0, -50%); 28 | height: 31px; 29 | 30 | svg { 31 | height: 100%; 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/client/components/notifications/notifications.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .notifications { 20 | } 21 | 22 | .remove-modal { 23 | .message { 24 | p { 25 | margin-bottom: 4px; 26 | } 27 | 28 | .dependency-list { 29 | background-color: $background-medium; 30 | padding: 15px 10px; 31 | 32 | p { 33 | margin-bottom: 4px; 34 | } 35 | } 36 | } 37 | 38 | 39 | } 40 | -------------------------------------------------------------------------------- /src/client/components/number-filter-menu/number-filter-menu.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .number-filter-menu { 20 | 21 | .side-by-side { 22 | @extend %side-by-side; 23 | } 24 | 25 | .group { 26 | flex-direction: column; 27 | } 28 | 29 | .input-top-label { 30 | @extend %input-top-label; 31 | } 32 | 33 | input { 34 | @extend %default-input; 35 | 36 | &.gray { 37 | color: $gray; 38 | } 39 | } 40 | 41 | input, .filter-options-dropdown { 42 | margin-top: 6px; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/client/components/preview-string-filter-menu/preview-string-filter-menu.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .string-filter-menu { 20 | .row { 21 | &.no-select { 22 | pointer-events: none; 23 | user-select: none; 24 | } 25 | } 26 | 27 | .matching-values-message { 28 | padding: 4px 10px; 29 | color: $text-light; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/client/components/query-error/query-error.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | $container-width: 180px; 20 | $container-height: 50px; 21 | 22 | .query-error { 23 | text-align: center; 24 | 25 | .whiteout { 26 | @include pin-full; 27 | background: $white; 28 | opacity: 0.5; 29 | } 30 | 31 | .error-container { 32 | @include center($container-width, $container-height); 33 | color: $red; 34 | text-align: left; 35 | 36 | .error { 37 | font-size: 14px; 38 | } 39 | 40 | .message { 41 | margin-top: 5px; 42 | font-size: 13px; 43 | overflow: hidden; 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/client/components/router/router.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .router { 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/client/components/segment-action-buttons/segment-action-buttons.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .segment-action-buttons { 20 | white-space: nowrap; 21 | 22 | .button { 23 | margin-right: 5px; 24 | } 25 | 26 | .button:last-child { 27 | margin-right: 0; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/client/components/selectable-string-filter-menu/selectable-string-filter-menu.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | $checkbox-width: 20px; 20 | 21 | .string-filter-menu { 22 | .row { 23 | height: 24px; 24 | cursor: pointer; 25 | padding: 0 $padding-compact; 26 | 27 | &:hover { 28 | background: $hover; 29 | } 30 | 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/client/components/settings-menu/settings-menu.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .settings-menu { 20 | padding: $padding-compact 0; 21 | 22 | .simple-item, .dropdown { 23 | padding: 0 $padding-compact; 24 | } 25 | 26 | .simple-item { 27 | cursor: pointer; 28 | line-height: 25px; 29 | 30 | &:hover { 31 | background: rgba($brand, 0.12); 32 | } 33 | 34 | &.selected { 35 | background: $background-light; 36 | } 37 | } 38 | 39 | .separator { 40 | height: 14px; 41 | margin-top: 8px; 42 | border-top: 1px solid $border-extra-light; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/client/components/svg-icon/svg-icon.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .svg-icon { 20 | pointer-events: none; 21 | } 22 | -------------------------------------------------------------------------------- /src/client/components/user-menu/user-menu.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .user-menu { 20 | ul.bubble-list { 21 | li.display-name { 22 | pointer-events: none; 23 | color: $text-lighterish; 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/client/components/vertical-axis/vertical-axis.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .vertical-axis { 20 | pointer-events: none; 21 | 22 | line.border { 23 | stroke: $gray; 24 | } 25 | 26 | line.tick { 27 | stroke: $gray; 28 | } 29 | 30 | text { 31 | font-size: 12px; 32 | fill: $text-medium; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/client/components/vis-measure-label/vis-measure-label.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .vis-measure-label { 20 | pointer-events: none; 21 | white-space: nowrap; 22 | } 23 | -------------------------------------------------------------------------------- /src/client/components/vis-selector-menu/vis-selector-menu.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | $vis-menu-padding: 16px; 20 | $vis-item-margin: 1px; 21 | 22 | .vis-selector-menu { 23 | @extend %menu-cont; 24 | z-index: 8; 25 | font-size: 0; 26 | width: ($vis-item-width + $vis-item-margin * 2) * 3 + $vis-menu-padding * 2; 27 | padding: $vis-menu-padding; 28 | 29 | .vis-item { 30 | margin: 1px; 31 | border-radius: $corner; 32 | 33 | &:hover { 34 | box-shadow: inset 0 0 0 1px $border-extra-light; 35 | } 36 | 37 | &.selected { 38 | box-shadow: inset 0 0 0 1px $border-light; 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/client/delegates/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export * from './immutable-form-delegate/immutable-form-delegate'; 18 | export * from './loading-message-delegate/loading-message-delegate'; 19 | -------------------------------------------------------------------------------- /src/client/icons/caret.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/client/icons/check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/icons/data.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/client/icons/dim-boolean.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | dim-boolean 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/dim-number.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | dim-numerical 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/dim-set-string.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | dim-string 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/dim-string.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | dim-string 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/dim-time.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | dim-time 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/drag-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/client/icons/dragger.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/client/icons/dropdown-caret.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/client/icons/filter-contains.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | filter-range 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/filter-exclude.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | filter-exclude 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/client/icons/filter-include.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | filter-include 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/client/icons/filter-intersection.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | filter-intersection 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/client/icons/filter-regex.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | filter-regex 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-add-framed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-add-framed 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-add 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-back.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-back 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-bookmark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-bookmark 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-caret-bottom.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-caret-bottom 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-caret-left-line.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-caret-left-line 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-caret-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-caret-left 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-caret-right-line.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-caret-right-line 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-caret-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-caret-right 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-caret-small-bottom.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-caret-small-bottom 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-caret-small-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-caret-small-left 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-caret-small-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-caret-small-right 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-caret-small-top.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-caret-small-top 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-caret-top.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-caret-top 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-cluster.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | cluster 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-collection.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-collection 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-cube.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-cube 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-delete.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-delete 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-edit.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-edit 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-error.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-error 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-expand.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-expand 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-menu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-menu 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-more-compact.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | full-more-compact 8 | Created with Sketch. 9 | 10 | 11 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/client/icons/full-more-mini.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-more-mini 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-more.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-more 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-profile.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-profile 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-refresh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-refresh 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-remove-small.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-remove-small 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-remove.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-remove 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-time.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-time 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/full-user.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-user 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/grid-loader.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/help.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/client/icons/home.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | home 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/measures.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/client/icons/menu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | full-menu 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/pinned.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/client/icons/preview-filter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/client/icons/preview-pin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | pin 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/icons/preview-split.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/client/icons/preview-subsplit.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/client/icons/prout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/client/icons/sort-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/client/icons/split-add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/client/icons/split-replace.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/client/icons/star.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/client/icons/to-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/client/icons/x.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/client/modals/about-modal/about-modal.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .about-modal { 20 | p { 21 | margin-bottom: $form-spacing-compact; 22 | line-height: 20px; 23 | 24 | &:last-child { 25 | margin-bottom: 0; 26 | } 27 | } 28 | 29 | a { 30 | color: $brand; 31 | cursor: pointer; 32 | 33 | &:hover { 34 | text-decoration: underline; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/client/modals/add-collection-tile-modal/add-collection-tile-modal.mocha.tsx: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai'; 2 | import * as sinon from 'sinon'; 3 | import * as React from 'react'; 4 | import * as TestUtils from 'react-addons-test-utils'; 5 | import { $, Expression } from 'plywood'; 6 | 7 | import { findDOMNode } from '../../utils/test-utils/index'; 8 | import { TimekeeperMock } from '../../../common/models/mocks'; 9 | 10 | import { AddCollectionTileModal } from './add-collection-tile-modal'; 11 | 12 | describe.skip('AddCollectionTileModal', () => { 13 | it('adds the correct class', () => { 14 | var renderedComponent = TestUtils.renderIntoDocument( 15 | 21 | ); 22 | 23 | expect(TestUtils.isCompositeComponent(renderedComponent), 'should be composite').to.equal(true); 24 | expect((findDOMNode(renderedComponent) as any).className, 'should contain class').to.contain('add-collection-tile-modal'); 25 | }); 26 | 27 | }); 28 | -------------------------------------------------------------------------------- /src/client/modals/add-collection-tile-modal/add-collection-tile-modal.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .add-collection-tile-modal { 20 | form { 21 | @extend %form; 22 | width: 100%; 23 | } 24 | 25 | .new-collection { 26 | margin: 7px 0 23px 1px; 27 | font-size: 11px; 28 | cursor: pointer; 29 | color: $brand; 30 | 31 | &:not(.disabled):hover { 32 | text-decoration: underline; 33 | } 34 | 35 | &.disabled { 36 | color: $text-light; 37 | cursor: initial; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/client/modals/cluster-seed-modal/cluster-seed-modal.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .cluster-seed-modal { 20 | form { 21 | @extend %form; 22 | width: 100%; 23 | } 24 | 25 | .loading-bar { 26 | margin-top: 10px; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/client/modals/data-cube-filter-modal/data-cube-filter-modal.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .data-cube-filter-modal { 20 | form { 21 | @extend %form; 22 | width: 100%; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/client/modals/data-cube-seed-modal/data-cube-seed-modal.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .data-cube-seed-modal { 20 | form { 21 | @extend %form; 22 | width: 100%; 23 | 24 | .checkbox { 25 | margin-top: 25px; 26 | 27 | &.selected { 28 | .checkbox-body { 29 | background: $brand; 30 | } 31 | } 32 | 33 | .label { 34 | top: 4px; 35 | text-transform: initial; 36 | color: $text-medium; 37 | font-size: 13px; 38 | } 39 | } 40 | 41 | } 42 | 43 | .loading-bar { 44 | margin-top: 10px; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/client/modals/dimension-modal/dimension-modal.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .dimension-modal { 20 | form { 21 | @extend %form; 22 | width: 100%; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/client/modals/measure-modal/measure-modal.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .measure-modal { 20 | form { 21 | @extend %form; 22 | width: 100%; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/client/modals/name-description-modal/name-description-modal.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .name-description-modal { 20 | form { 21 | @extend %form; 22 | width: 100%; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/client/utils/function-slot/function-slot.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export interface FunctionSlot { 18 | (...args: any[]): T; 19 | fill?: (fn: (...args: any[]) => T) => void; 20 | clear?: () => void; 21 | } 22 | 23 | export function createFunctionSlot(): FunctionSlot { 24 | var myFn: (...args: any[]) => T; 25 | var slot: FunctionSlot = (...args: any[]) => { 26 | if (myFn) return myFn.apply(this, args); 27 | return undefined; 28 | }; 29 | slot.fill = (fn: (...args: any[]) => T) => { myFn = fn; }; 30 | slot.clear = () => { myFn = null; }; 31 | return slot; 32 | } 33 | -------------------------------------------------------------------------------- /src/client/utils/local-storage/local-storage.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export function get(key: string): any { 18 | try { 19 | return JSON.parse(localStorage[key]); 20 | } catch (e) { 21 | return undefined; 22 | } 23 | } 24 | 25 | export function set(key: string, value: any) { 26 | try { 27 | localStorage[key] = JSON.stringify(value); 28 | } catch (e) {} 29 | } 30 | -------------------------------------------------------------------------------- /src/client/utils/styles/_bounce.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @mixin bounce($properties...) { 18 | $result: (); 19 | @each $property in $properties { 20 | $result: append($result, $property 0.2s cubic-bezier(.87, -.41, .19, 1.44), comma); 21 | } 22 | 23 | transition: $result; 24 | } 25 | -------------------------------------------------------------------------------- /src/client/utils/styles/_form.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | %form { 18 | width: 448px; 19 | 20 | &.vertical { 21 | > * { 22 | display: block; 23 | } 24 | } 25 | 26 | input { 27 | @extend %default-input; 28 | } 29 | 30 | .dropdown .dropdown-label { 31 | margin-bottom: 8px; 32 | } 33 | 34 | input, .input, .checkbox { 35 | &:not(.actionable) { 36 | margin-bottom: 25px; 37 | } 38 | } 39 | 40 | .checkbox { 41 | height: 20px; 42 | width: 100%; 43 | 44 | .label { 45 | @extend %input-top-label; 46 | 47 | position: absolute; 48 | left: 25px; 49 | top: 5px; 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/client/utils/styles/_indicator-field.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | %indicator-field { 18 | @include ellipsis; 19 | height: $input-height; 20 | line-height: $input-height - 2px; 21 | //border: 1px solid #dfdfdf; 22 | background: #f2f2f2; 23 | border-radius: $corner; 24 | color: #909090; 25 | text-align: center; 26 | padding-left: 8px; 27 | padding-right: 8px; 28 | } 29 | -------------------------------------------------------------------------------- /src/client/utils/styles/_linear-transition.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @mixin linear($properties...) { 18 | $result: (); 19 | @each $property in $properties { 20 | $result: append($result, $property 0.2s, comma); 21 | } 22 | 23 | transition: $result; 24 | } 25 | -------------------------------------------------------------------------------- /src/client/utils/styles/_media-queries.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | $small-screen: 1080px; 18 | $medium-screen: 1250px; 19 | 20 | @mixin for-large-screens { 21 | @media only screen and (min-width: $medium-screen) { 22 | @content; 23 | } 24 | } 25 | 26 | @mixin for-medium-screens { 27 | @media only screen and (max-width: $medium-screen) { 28 | @content; 29 | } 30 | } 31 | 32 | @mixin for-small-screens { 33 | @media only screen and (max-width: $small-screen) { 34 | @content; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/client/utils/styles/_menu-cont.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | %menu-cont { 18 | background: $white; 19 | border-radius: $corner; 20 | box-shadow: 0 3px 10px 0 hsla(0, 0, 0, 0.26), 0 0 3px 0 hsla(0, 0, 0, 0.16); 21 | } 22 | -------------------------------------------------------------------------------- /src/client/utils/styles/_modal-cont.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | %modal-cont { 18 | background: #fff; 19 | border-radius: 2px; 20 | box-shadow: 0 5px 9px 0 rgba(0, 0, 0, 0.3), 0 0 5px 0 rgba(0, 0, 0, 0.2); 21 | } 22 | -------------------------------------------------------------------------------- /src/client/utils/styles/_module.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | %module { 18 | background: $white; 19 | box-shadow: 0 1px 1px 0 rgba($black, 0.1); 20 | } 21 | 22 | %module-h-title { 23 | .title { 24 | @include pin-left($bar-title-width); 25 | padding: 12px 0 0 $padding-compact; 26 | font-size: 12px; 27 | text-transform: uppercase; 28 | color: $text-light; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/client/utils/styles/_side-by-side.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | %side-by-side { 18 | display: flex; 19 | 20 | & > * { 21 | margin-right: 5px; 22 | 23 | &:last-child { 24 | margin-right: 0; 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/client/utils/styles/_white-shadow.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | %white-shadow { 18 | &::after { 19 | @include pin-full; 20 | content: ''; 21 | pointer-events: none; 22 | box-shadow: inset 0 -20px 10px -10px $white; 23 | border-radius: $corner; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/client/utils/test-utils/find-dom-node.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import * as ReactDOM from 'react-dom'; 18 | import * as TestUtils from 'react-addons-test-utils'; 19 | import { BodyPortal } from '../../components/body-portal/body-portal'; 20 | 21 | export function findDOMNode(element: __React.Component): Element { 22 | var portal = TestUtils.scryRenderedComponentsWithType(element, BodyPortal)[0]; 23 | return portal ? portal.target.childNodes[0] : ReactDOM.findDOMNode(element); 24 | } 25 | -------------------------------------------------------------------------------- /src/client/utils/test-utils/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // This needs to be required, otherwise React doesn't play nice with jsdom... 18 | var ExecutionEnvironment = require('../../../../node_modules/fbjs/lib/ExecutionEnvironment'); 19 | ExecutionEnvironment.canUseDOM = true; 20 | 21 | import './jsdom-setup'; 22 | import './require-extensions'; 23 | 24 | import '../../../common/utils/test-utils/index'; 25 | 26 | export * from './mock-require-ensure'; 27 | export * from './mock-react-component'; 28 | export * from './find-dom-node'; 29 | -------------------------------------------------------------------------------- /src/client/utils/test-utils/mock-require-ensure.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import { resolve, dirname } from 'path'; 18 | import { getCallerFile } from './get-caller-file'; 19 | import * as rewire from 'rewire'; 20 | 21 | export function mockRequireEnsure(path: string): any { 22 | // Gets the absolute path based on the caller's path 23 | path = resolve(dirname(getCallerFile()), path); 24 | 25 | let mod = rewire(path); 26 | 27 | let mockedRequire = mod.__get__('require'); 28 | mockedRequire.ensure = (path: any, callback: any) => callback(mockedRequire); 29 | 30 | return mod; 31 | } 32 | -------------------------------------------------------------------------------- /src/client/utils/test-utils/require-extensions.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | require.extensions['.css'] = (module: any, filename: string) => {}; 18 | require.extensions['.svg'] = (module: any, filename: string) => { 19 | module.exports = ''; 20 | }; 21 | -------------------------------------------------------------------------------- /src/client/utils/url/url.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export function replaceHash(newHash: string) { 18 | // Acts like window.location.hash = newHash but doesn't clutter the history 19 | // See http://stackoverflow.com/a/23924886/863119 20 | window.history.replaceState(undefined, undefined, newHash); 21 | } 22 | -------------------------------------------------------------------------------- /src/client/views/collection-view/collection-header-bar/collection-header-bar.mocha.tsx: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai'; 2 | import * as sinon from 'sinon'; 3 | import * as React from 'react'; 4 | import * as TestUtils from 'react-addons-test-utils'; 5 | import { $, Expression } from 'plywood'; 6 | 7 | import { DataCubeMock, EssenceMock } from '../../../../common/models/mocks'; 8 | 9 | import { findDOMNode } from '../../../utils/test-utils/index'; 10 | 11 | import { CollectionHeaderBar } from './collection-header-bar'; 12 | 13 | describe('CollectionHeaderBar', () => { 14 | it('adds the correct class', () => { 15 | var renderedComponent = TestUtils.renderIntoDocument( 16 | 22 | ); 23 | 24 | expect(TestUtils.isCompositeComponent(renderedComponent), 'should be composite').to.equal(true); 25 | expect((findDOMNode(renderedComponent) as any).className, 'should contain class').to.contain('collection-header-bar'); 26 | }); 27 | 28 | }); 29 | -------------------------------------------------------------------------------- /src/client/views/collection-view/collection-header-bar/collection-header-bar.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../../imports'; 18 | 19 | .collection-header-bar { 20 | @extend %header-bar; 21 | 22 | height: 41px; 23 | 24 | .title > input { 25 | color: $white; 26 | border: 1px solid rgba($white, 0.5); 27 | background: rgba($white, 0.2); 28 | border-radius: 2px; 29 | margin-top: -8px; 30 | padding: 4px 6px; 31 | cursor: text; 32 | width: 300px; 33 | font-size: 15px; 34 | 35 | &::selection { 36 | background: darken($brand, 10); 37 | } 38 | } 39 | 40 | .icon-button.add { 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/client/views/collection-view/collection-view.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .collection-view { 20 | @include unpin-full(0, 0, 0, 0); 21 | 22 | .main-panel { 23 | @include unpin-full(40px, 0, 0, 0); 24 | overflow: auto; 25 | } 26 | 27 | .collection-items { 28 | display: flex; 29 | width: 80%; 30 | margin: 0 auto; 31 | flex-wrap: wrap; 32 | 33 | .collection-tile-card { 34 | flex: 1 0; 35 | 36 | flex-basis: 50%; 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/client/views/cube-view/cube-header-bar/cube-header-bar.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../../imports'; 18 | 19 | .cube-header-bar { 20 | @extend %header-bar; 21 | 22 | .refreshing svg { 23 | animation-name: rotate; 24 | animation-duration: 1s; 25 | 26 | @keyframes rotate { 27 | from { transform: rotate(0deg); } 28 | to { transform: rotate(360deg); } 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/client/views/cube-view/supervised-cube-header-bar/supervised-cube-header-bar.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../../imports'; 18 | 19 | .supervised-cube-header-bar { 20 | @extend %header-bar; 21 | 22 | .left-bar .title { 23 | cursor: default; 24 | font-size: 14px; 25 | margin-top: 14px; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/client/views/home-view/home-header-bar/home-header-bar.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../../imports'; 18 | 19 | .home-header-bar { 20 | @extend %header-bar; 21 | } 22 | -------------------------------------------------------------------------------- /src/client/views/link-view/link-header-bar/link-header-bar.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../../imports'; 18 | 19 | .link-header-bar { 20 | @extend %header-bar; 21 | background: #208b84; 22 | } 23 | -------------------------------------------------------------------------------- /src/client/views/no-data-view/no-data-header-bar/no-data-header-bar.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../../imports'; 18 | 19 | .no-data-header-bar { 20 | @extend %header-bar; 21 | } 22 | -------------------------------------------------------------------------------- /src/client/views/no-data-view/no-data-view.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .no-data-view { 20 | @extend %empty; 21 | @import '../../utils/styles/grid'; 22 | 23 | .no-data-header-bar { 24 | @include pin-top($header-height); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/client/views/settings-view/cluster-edit/cluster-edit.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../../imports'; 18 | 19 | .cluster-edit { 20 | height: 100%; 21 | } 22 | -------------------------------------------------------------------------------- /src/client/views/settings-view/clusters/clusters.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../../imports'; 18 | 19 | .clusters { 20 | height: 100%; 21 | } 22 | 23 | .empty { 24 | @extend %empty; 25 | height: 100%; 26 | } 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/client/views/settings-view/data-cubes/data-cubes.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../../imports'; 18 | 19 | .data-cubes { 20 | height: 100%; 21 | } 22 | 23 | .empty { 24 | @extend %empty; 25 | height: 100%; 26 | } 27 | -------------------------------------------------------------------------------- /src/client/views/settings-view/other/other.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../../imports'; 18 | 19 | .other { 20 | height: 100%; 21 | } 22 | -------------------------------------------------------------------------------- /src/client/views/settings-view/settings-header-bar/settings-header-bar.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../../imports'; 18 | 19 | .settings-header-bar { 20 | @extend %header-bar; 21 | } 22 | -------------------------------------------------------------------------------- /src/client/views/settings-view/settings-view.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .settings-view { 20 | $left-panel-width: 170px; 21 | $title-bar-height: 56px; 22 | 23 | @import './layout'; 24 | 25 | form { 26 | @extend %form; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/client/visualizations/base-visualization/base-visualization.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .base-visualization { 20 | @include pin-full; 21 | overflow: hidden; 22 | 23 | .internals { 24 | @include pin-full; 25 | overflow: auto; 26 | } 27 | 28 | .loader, 29 | .query-error { 30 | @include pin-full; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/client/visualizations/geo/geo.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @import '../../imports'; 18 | 19 | .geo { 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/client/visualizations/table/_highlight-cont.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | .highlight-cont { 18 | position: absolute; 19 | left: $space-left; 20 | right: 0; 21 | top: $header-height; 22 | bottom: 0; 23 | overflow: hidden; 24 | 25 | .highlighter { 26 | right: 0; 27 | height: $row-height + 1; 28 | margin-top: -1px; 29 | border: 1px solid $hover; 30 | 31 | &::after { 32 | @include unpin-full(-1px); 33 | content: ''; 34 | border: 1px dashed $highlight-border; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/common/manifests/geo/geo.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import { Splits, DataCube, SplitCombine, Colors, Dimension } from '../../models/index'; 18 | import { Manifest, Resolve } from '../../models/manifest/manifest'; 19 | 20 | function handleCircumstance(dataCube: DataCube, splits: Splits, colors: Colors, current: boolean): Resolve { 21 | return Resolve.manual(0, 'The Geo visualization is not ready, please select another visualization.', []); 22 | } 23 | 24 | export const GEO_MANIFEST = new Manifest( 25 | 'geo', 26 | 'Geo', 27 | handleCircumstance 28 | ); 29 | -------------------------------------------------------------------------------- /src/common/manifests/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import { Manifest } from '../models/manifest/manifest'; 18 | 19 | import { TOTALS_MANIFEST } from './totals/totals'; 20 | import { TABLE_MANIFEST } from './table/table'; 21 | import { LINE_CHART_MANIFEST } from './line-chart/line-chart'; 22 | import { BAR_CHART_MANIFEST } from './bar-chart/bar-chart'; 23 | import { GEO_MANIFEST } from './geo/geo'; 24 | 25 | export const MANIFESTS: Manifest[] = [ 26 | TOTALS_MANIFEST, 27 | TABLE_MANIFEST, 28 | LINE_CHART_MANIFEST, 29 | BAR_CHART_MANIFEST, 30 | GEO_MANIFEST 31 | ]; 32 | -------------------------------------------------------------------------------- /src/common/manifests/totals/totals.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import { Splits, DataCube, SplitCombine, Colors, Dimension } from '../../models/index'; 18 | import { Manifest, Resolve } from '../../models/manifest/manifest'; 19 | 20 | function handleCircumstance(dataCube: DataCube, splits: Splits, colors: Colors, current: boolean): Resolve { 21 | if (!splits.length()) return Resolve.ready(10); 22 | return Resolve.automatic(3, { splits: Splits.EMPTY }); 23 | } 24 | 25 | export const TOTALS_MANIFEST = new Manifest( 26 | 'totals', 27 | 'Totals', 28 | handleCircumstance, 29 | 'multi' 30 | ); 31 | -------------------------------------------------------------------------------- /src/common/models/collection/collection.mocha.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import { expect } from 'chai'; 18 | import { testImmutableClass } from 'immutable-class-tester'; 19 | 20 | import { CollectionMock } from './collection.mock'; 21 | import { Collection } from './collection'; 22 | 23 | describe('Collection', () => { 24 | var context = CollectionMock.getContext(); 25 | 26 | it('is an immutable class', () => { 27 | testImmutableClass(Collection, [ 28 | CollectionMock.testOneOnlyJS(), 29 | CollectionMock.testOneTwoJS() 30 | ], { context }); 31 | }); 32 | 33 | }); 34 | -------------------------------------------------------------------------------- /src/common/models/device/device.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export type DeviceSize = 'small' | 'medium' | 'large'; 18 | 19 | export class Device { 20 | static getSize(): DeviceSize { 21 | if (window.innerWidth <= 1080) return 'small'; 22 | if (window.innerWidth <= 1250) return 'medium'; 23 | 24 | return 'large'; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/common/models/drag-position/drag-position.mocha.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import { expect } from 'chai'; 18 | import { testImmutableClass } from 'immutable-class-tester'; 19 | 20 | import { $, Expression } from 'plywood'; 21 | import { DragPosition } from './drag-position'; 22 | 23 | describe('DragPosition', () => { 24 | it('is an immutable class', () => { 25 | testImmutableClass(DragPosition, [ 26 | { 27 | insert: 0 28 | }, 29 | { 30 | insert: 2 31 | }, 32 | { 33 | replace: 0 34 | }, 35 | { 36 | replace: 1 37 | } 38 | ]); 39 | }); 40 | 41 | }); 42 | -------------------------------------------------------------------------------- /src/common/models/list-item/list-item.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export interface ListItem { 18 | label: string; 19 | value: any; 20 | } 21 | -------------------------------------------------------------------------------- /src/common/models/mocks.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export * from './essence/essence.mock'; 18 | export * from './timekeeper/timekeeper.mock'; 19 | export * from './dimension/dimension.mock'; 20 | export * from './data-cube/data-cube.mock'; 21 | export * from './stage/stage.mock'; 22 | export * from './sort-on/sort-on.mock'; 23 | -------------------------------------------------------------------------------- /src/common/models/split-combine/split-combine.mock.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export class SplitCombineMock { 18 | public static get TIME_JS() { 19 | return { 20 | expression: { op: 'ref', name: 'time' }, 21 | sortAction: { 22 | action: 'sort', 23 | direction: 'ascending', 24 | expression: { 25 | op: 'ref', 26 | name: 'time' 27 | } 28 | }, 29 | limitAction: { 30 | action: 'limit', 31 | limit: 2 32 | } 33 | }; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/common/models/stage/stage.mocha.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import { expect } from 'chai'; 18 | import { testImmutableClass } from 'immutable-class-tester'; 19 | 20 | import { $, Expression } from 'plywood'; 21 | import { Stage, StageJS } from './stage'; 22 | import { StageMock } from './stage.mock'; 23 | 24 | describe('Stage', () => { 25 | it('is an immutable class', () => { 26 | testImmutableClass(Stage, [ 27 | StageMock.DEFAULT_A_JS, 28 | StageMock.DEFAULT_B_JS, 29 | StageMock.DEFAULT_C_JS 30 | ]); 31 | }); 32 | 33 | }); 34 | -------------------------------------------------------------------------------- /src/common/models/timekeeper/timekeeper.mocha.ts: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai'; 2 | import { testImmutableClass } from 'immutable-class-tester'; 3 | 4 | import { Timekeeper } from './timekeeper'; 5 | 6 | describe('Timekeeper', () => { 7 | it('is an immutable class', () => { 8 | testImmutableClass(Timekeeper, [ 9 | { 10 | timeTags: [] 11 | }, 12 | { 13 | timeTags: [ 14 | { name: 'lol', time: new Date('2016-01-01T01:02:03Z'), updated: new Date('2016-01-01T01:02:03Z') } 15 | ] 16 | }, 17 | { 18 | timeTags: [ 19 | { name: 'lol', time: new Date('2016-01-01T01:02:03Z'), updated: new Date('2016-01-01T01:02:03Z') } 20 | ], 21 | nowOverride: new Date('2016-01-01T01:02:03Z') 22 | } 23 | ]); 24 | }); 25 | 26 | it('works with now', () => { 27 | var timekeeper = Timekeeper.fromJS({ 28 | timeTags: [], 29 | nowOverride: new Date('2016-01-01T01:02:03Z') 30 | }); 31 | 32 | expect(timekeeper.now()).to.deep.equal(new Date('2016-01-01T01:02:03Z')); 33 | }); 34 | 35 | }); 36 | -------------------------------------------------------------------------------- /src/common/models/timekeeper/timekeeper.mock.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import { Timekeeper, TimekeeperJS } from './timekeeper'; 18 | 19 | export class TimekeeperMock { 20 | static fixedJS(): TimekeeperJS { 21 | return { 22 | timeTags: [], 23 | nowOverride: new Date('2016-08-08T08:08:08Z') 24 | }; 25 | } 26 | 27 | static fixed() { 28 | return Timekeeper.fromJS(TimekeeperMock.fixedJS()); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/common/models/user/user.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export interface User { 18 | id: string; 19 | email: string; 20 | displayName: string; 21 | allow: Lookup; 22 | } 23 | -------------------------------------------------------------------------------- /src/common/models/view-supervisor/view-supervisor.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import { Essence } from '../index'; 18 | 19 | export interface ViewSupervisor { 20 | cancel: () => void; 21 | 22 | getConfirmationModal?: (newEssence: Essence) => JSX.Element; 23 | save?: (newEssence: Essence) => void; 24 | 25 | title?: string; 26 | 27 | saveLabel?: string; 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/common/utils/array/array.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export function move(array: any[], oldIndex: number, newIndex: number) { 18 | array.splice(newIndex, 0, array.splice(oldIndex, 1)[0]); 19 | } 20 | 21 | export function indexByAttribute(array: any[], key: string, value: string): any { 22 | if (!array || !array.length) return -1; 23 | 24 | const n = array.length; 25 | for (let i = 0; i < n; i++) { 26 | if (array[i][key] === value) return i; 27 | } 28 | 29 | return -1; 30 | } 31 | -------------------------------------------------------------------------------- /src/common/utils/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export * from './object/object'; 18 | export * from './formatter/formatter'; 19 | export * from './general/general'; 20 | export * from './parser/parser'; 21 | export * from './time/time'; 22 | export * from './immutable-utils/immutable-utils'; 23 | export * from './yaml-helper/yaml-helper'; 24 | -------------------------------------------------------------------------------- /src/common/utils/object/object.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export function extend(source: any, target: any): any { 18 | for (let key in source) { 19 | target[key] = source[key]; 20 | } 21 | 22 | return target; 23 | } 24 | -------------------------------------------------------------------------------- /src/common/utils/test-utils/ensure-timezones.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | var { WallTime } = require('chronoshift'); 18 | if (!WallTime.rules) { 19 | var tzData = require("chronoshift/lib/walltime/walltime-data.js"); 20 | WallTime.init(tzData.rules, tzData.zones); 21 | } 22 | -------------------------------------------------------------------------------- /src/common/utils/test-utils/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import './ensure-timezones'; 18 | -------------------------------------------------------------------------------- /src/server/models/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export * from './server-settings/server-settings'; 18 | export * from './settings-location/settings-location'; 19 | -------------------------------------------------------------------------------- /src/server/models/settings-location/settings-location.mocha.ts: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai'; 2 | import { testImmutableClass } from 'immutable-class-tester'; 3 | 4 | import { SettingsLocation } from './settings-location'; 5 | 6 | describe('SettingsLocation', () => { 7 | it('is an immutable class', () => { 8 | testImmutableClass(SettingsLocation, [ 9 | { 10 | location: 'file', 11 | uri: '../private/lol.yaml' 12 | }, 13 | { 14 | location: 'mysql', 15 | uri: 'mysql://root:@192.168.99.100:3306/datazoo' 16 | }, 17 | { 18 | location: 'mysql', 19 | uri: 'mysql://root:@192.168.99.100:3306/datazoo', 20 | table: 'pivot_state' 21 | } 22 | ]); 23 | }); 24 | 25 | describe('gets the right format', () => { 26 | it('gets yaml', () => { 27 | var settingsLocation = SettingsLocation.fromJS({ 28 | location: 'file', 29 | uri: '../private/lol.yaml' 30 | }); 31 | 32 | expect(settingsLocation.getFormat()).to.equal('yaml'); 33 | }); 34 | 35 | }); 36 | 37 | }); 38 | -------------------------------------------------------------------------------- /src/server/routes/error/error.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import { Router, Request, Response } from 'express'; 18 | 19 | var router = Router(); 20 | 21 | router.post('/', (req: Request, res: Response) => { 22 | var message = req.body.message; 23 | if (!message || typeof message !== 'string') { 24 | res.status(400).send({ 25 | error: 'Error must have a message' 26 | }); 27 | } else { 28 | console.error(`Client Error: ${JSON.stringify(req.body)}`); 29 | res.send(`Error logged @ ${new Date().toISOString()}`); 30 | } 31 | }); 32 | 33 | export = router; 34 | -------------------------------------------------------------------------------- /src/server/routes/health/health.mocha.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import * as express from 'express'; 18 | import * as supertest from 'supertest'; 19 | 20 | import * as healthRouter from './health'; 21 | 22 | var app = express(); 23 | 24 | app.use('/', healthRouter); 25 | 26 | describe('health router', () => { 27 | it('gets a 200', (testComplete) => { 28 | supertest(app) 29 | .get('/') 30 | .expect(200, testComplete); 31 | }); 32 | 33 | }); 34 | -------------------------------------------------------------------------------- /src/server/routes/health/health.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import { Router, Request, Response } from 'express'; 18 | 19 | var router = Router(); 20 | 21 | router.get('/', (req: Request, res: Response) => { 22 | res.send(`I am healthy @ ${new Date().toISOString()}`); 23 | }); 24 | 25 | export = router; 26 | -------------------------------------------------------------------------------- /src/server/utils/file/file.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import * as fs from 'fs'; 18 | import * as yaml from 'js-yaml'; 19 | 20 | export function loadFileSync(filepath: string, postProcess: string = null): any { 21 | var fileData = fs.readFileSync(filepath, 'utf-8'); 22 | if (postProcess === 'json') { 23 | fileData = JSON.parse(fileData); 24 | } else if (postProcess === 'yaml') { 25 | fileData = yaml.safeLoad(fileData); 26 | } 27 | 28 | return fileData; 29 | } 30 | -------------------------------------------------------------------------------- /src/server/utils/general/general.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import * as Q from 'q'; 18 | import { Request } from 'express'; 19 | import { User } from '../../../common/models/index'; 20 | import { GetSettingsOptions, FullSettings } from '../settings-manager/settings-manager'; 21 | 22 | export interface PivotRequest extends Request { 23 | version: string; 24 | stateful: boolean; 25 | user: User; 26 | getFullSettings(opts?: GetSettingsOptions): Q.Promise; 27 | } 28 | -------------------------------------------------------------------------------- /src/server/utils/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export * from './requester/requester'; 18 | export * from './settings-store/settings-store'; 19 | export * from './file/file'; 20 | export * from './general/general'; 21 | export * from './settings-manager/settings-manager'; 22 | export * from './updater/updater'; 23 | -------------------------------------------------------------------------------- /test/README.md: -------------------------------------------------------------------------------- 1 | # Tests 2 | 3 | These are end to end tests that run Pivot as a total black box. They happen to be written in JS 4 | -------------------------------------------------------------------------------- /test/configs/duplicate-measure-dimension-name.yaml: -------------------------------------------------------------------------------- 1 | clusters: 2 | - name: druid 3 | type: druid 4 | host: dm 5 | timeout: 30000 6 | 7 | dataCubes: 8 | - name: wiki 9 | title: Wikipedia Edits 10 | engine: druid 11 | source: wikipedia 12 | 13 | dimensions: 14 | - name: language 15 | expression: $language 16 | 17 | measures: 18 | - name: language 19 | -------------------------------------------------------------------------------- /test/configs/inline-vars.yaml: -------------------------------------------------------------------------------- 1 | dataCubes: 2 | - name: "%{DS_NAME}%" 3 | title: "%{DS_TITLE}%" 4 | engine: native 5 | source: "%{DS_SOURCE}%" 6 | -------------------------------------------------------------------------------- /test/configs/list-refresh-on-load-datasource.yaml: -------------------------------------------------------------------------------- 1 | clusters: 2 | - name: druid 3 | type: druid 4 | host: "%{DRUID_HOST}%" 5 | version: 0.9.1 6 | sourceListRefreshOnLoad: true 7 | 8 | dataCubes: 9 | - name: wiki 10 | title: Wikipedia Edits 11 | engine: druid 12 | source: wikipedia 13 | 14 | dimensions: 15 | - name: channel 16 | expression: $channel 17 | 18 | measures: 19 | - name: count 20 | -------------------------------------------------------------------------------- /test/configs/one-little-datasource.yaml: -------------------------------------------------------------------------------- 1 | clusters: 2 | - name: druid 3 | type: druid 4 | host: "%{DRUID_HOST}%" 5 | timeout: 30000 6 | 7 | dataCubes: 8 | - name: wiki 9 | title: Wikipedia Edits 10 | engine: druid 11 | source: wikipedia 12 | 13 | dimensions: 14 | - name: language 15 | expression: $language 16 | 17 | measures: 18 | - name: count 19 | -------------------------------------------------------------------------------- /test/configs/reintrospect-on-load-datasource.yaml: -------------------------------------------------------------------------------- 1 | clusters: 2 | - name: druid 3 | type: druid 4 | host: "%{DRUID_HOST}%" 5 | version: 0.9.1 6 | sourceReintrospectOnLoad: true 7 | 8 | dataCubes: 9 | - name: wiki 10 | title: Wikipedia Edits 11 | engine: druid 12 | source: wikipedia 13 | 14 | dimensions: 15 | - name: channel 16 | expression: $channel 17 | 18 | measures: 19 | - name: count 20 | -------------------------------------------------------------------------------- /test/configs/reintrospect-on-load.yaml: -------------------------------------------------------------------------------- 1 | clusters: 2 | - name: druid 3 | type: druid 4 | host: "%{DRUID_HOST}%" 5 | version: 0.9.1 6 | sourceReintrospectOnLoad: true 7 | -------------------------------------------------------------------------------- /test/configs/secure.yaml: -------------------------------------------------------------------------------- 1 | trustProxy: always 2 | strictTransportSecurity: always 3 | 4 | dataCubes: 5 | - name: file 6 | clusterName: native 7 | source: ../../assets/data/wikiticker-2015-09-12-anonymous.json 8 | -------------------------------------------------------------------------------- /test/configs/tracking-static.yaml: -------------------------------------------------------------------------------- 1 | trackingUrl: 'http://localhost:28090' 2 | trackingContext: 3 | service: pivot/test 4 | something: cool 5 | 6 | dataCubes: 7 | - name: wiki 8 | title: Wikipedia Static 9 | clusterName: native 10 | source: ../../assets/data/wikiticker-2015-09-12-sampled.json 11 | timeAttribute: time 12 | defaultDuration: P1D 13 | 14 | introspection: autofill-all 15 | 16 | dimensions: 17 | - name: time 18 | type: TIME 19 | kind: time 20 | formula: $time 21 | 22 | measures: 23 | 24 | - name: count 25 | title: Rows 26 | formula: $main.count() 27 | -------------------------------------------------------------------------------- /test/configs/two-little-datasources.yaml: -------------------------------------------------------------------------------- 1 | clusters: 2 | - name: druid 3 | type: druid 4 | host: "%{DRUID_HOST}%" 5 | timeout: 30000 6 | sourceListRefreshOnLoad: true 7 | sourceReintrospectOnLoad: true 8 | 9 | dataCubes: 10 | - name: wiki 11 | title: Wikipedia Edits 12 | engine: druid 13 | source: wikipedia 14 | 15 | dimensions: 16 | - name: language 17 | expression: $language 18 | 19 | measures: 20 | - name: count 21 | 22 | 23 | - name: twitter 24 | title: Twitter 25 | engine: druid 26 | source: twitter 27 | 28 | dimensions: 29 | - name: tweet 30 | expression: $tweet 31 | 32 | measures: 33 | - name: count 34 | -------------------------------------------------------------------------------- /test/utils/basic-string.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | const Expression = require('plywood').Expression; 18 | 19 | function basicString(thing) { 20 | return thing.name + ' ~ ' + thing.formula; 21 | } 22 | 23 | module.exports = basicString; 24 | -------------------------------------------------------------------------------- /test/utils/extend.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | function extend(obj1, obj2) { 18 | var newObj = {}; 19 | for (var k in obj1) newObj[k] = obj1[k]; 20 | for (var k in obj2) newObj[k] = obj2[k]; 21 | return newObj; 22 | } 23 | 24 | module.exports = extend; 25 | -------------------------------------------------------------------------------- /test/utils/extract-config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 Imply Data, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | function extractConfig(text) { 18 | var a = ''; 20 | var ai = text.indexOf(a); 21 | var bi = text.indexOf(b); 22 | if (ai < 0 || bi < 0) return null; 23 | return JSON.parse(text.substring(ai + a.length - 1, bi + 1)); 24 | } 25 | 26 | module.exports = extractConfig; 27 | -------------------------------------------------------------------------------- /travis-test: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eu 2 | 3 | if grep -rq 'describe\.only' ./src 4 | then 5 | echo "describe.only found. Please update your test" 6 | exit 1 7 | fi 8 | 9 | if grep -rq 'it\.only' ./src 10 | then 11 | echo "it.only found. Please update your test" 12 | exit 1 13 | fi 14 | 15 | if grep -rq '\.\./client/' ./src/common 16 | then 17 | echo "'../client' reference found in common. Please update your code" 18 | exit 1 19 | fi 20 | 21 | if grep -rq '\.\./server/' ./src/common 22 | then 23 | echo "'../server' reference found in common. Please update your code" 24 | exit 1 25 | fi 26 | 27 | if grep -rq 'fsevents' ./npm-shrinkwrap.json 28 | then 29 | echo "'fsevents' reference found in npm-shrinkwrap.json. Please fix" 30 | exit 1 31 | fi 32 | 33 | export DO_LIB_CHECK=1 34 | gulp all 35 | 36 | node_modules/.bin/mocha \ 37 | build/**/*.mocha.js \ 38 | test/basic \ 39 | test/simulate \ 40 | ; 41 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "noImplicitAny": true, 4 | "noEmitOnError": true, 5 | "declaration": true, 6 | "removeComments": true, 7 | "noFallthroughCasesInSwitch": true, 8 | "noImplicitReturns": true, 9 | "strictNullChecks": false, 10 | "skipLibCheck": true, 11 | "target": "es5", 12 | "module": "commonjs", 13 | "rootDir": "src", 14 | "outDir": "build", 15 | "moduleResolution": "node", 16 | "jsx": "react" 17 | }, 18 | "include": [ 19 | "src/**/*.ts", 20 | "src/**/*.tsx", 21 | "typings/**/*.d.ts" 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /typings/assertion-error/assertion-error.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for assertion-error 1.0.0 2 | // Project: https://github.com/chaijs/assertion-error 3 | // Definitions by: Bart van der Schoor 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | declare module 'assertion-error' { 7 | class AssertionError implements Error { 8 | constructor(message: string, props?: any, ssf?: Function); 9 | name: string; 10 | message: string; 11 | showDiff: boolean; 12 | stack: string; 13 | } 14 | export = AssertionError; 15 | } 16 | -------------------------------------------------------------------------------- /typings/browser-filesaver/browser-filesaver.d.ts: -------------------------------------------------------------------------------- 1 | declare module "browser-filesaver" { 2 | var p: any; 3 | export = p; 4 | } 5 | -------------------------------------------------------------------------------- /typings/compression/compression.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for compression 2 | // Project: https://github.com/expressjs/compression 3 | // Definitions by: Santi Albo 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | declare module "compression" { 7 | import express = require('express'); 8 | 9 | module e { 10 | interface CompressionOptions { 11 | threshold?: number; 12 | filter?: Function; 13 | } 14 | } 15 | 16 | function e(options?: e.CompressionOptions): express.RequestHandler; 17 | export = e; 18 | } -------------------------------------------------------------------------------- /typings/debug/debug.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for debug 2 | // Project: https://github.com/visionmedia/debug 3 | // Definitions by: Seon-Wook Park 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | declare module "debug" { 7 | 8 | function d(namespace: string): d.Debugger; 9 | 10 | module d { 11 | export var log: Function; 12 | 13 | function enable(namespaces: string): void; 14 | function disable(): void; 15 | 16 | function enabled(namespace: string): boolean; 17 | 18 | export interface Debugger { 19 | (formatter: any, ...args: any[]): void; 20 | 21 | enabled: boolean; 22 | log: Function; 23 | namespace: string; 24 | } 25 | } 26 | 27 | export = d; 28 | 29 | } 30 | 31 | -------------------------------------------------------------------------------- /typings/form-data/form-data.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for form-data 2 | // Project: https://github.com/felixge/node-form-data 3 | // Definitions by: Carlos Ballesteros Velasco 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | // Imported from: https://github.com/soywiz/typescript-node-definitions/form-data.d.ts 7 | 8 | declare module "form-data" { 9 | export class FormData { 10 | append(key: string, value: any): FormData; 11 | getHeaders(): Object; 12 | // TODO expand pipe 13 | pipe(to: any): any; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /typings/hsts.d.ts: -------------------------------------------------------------------------------- 1 | declare module "hsts" { 2 | var p: any; 3 | export = p; 4 | } 5 | -------------------------------------------------------------------------------- /typings/immutable.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /typings/mime/mime.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for mime 2 | // Project: https://github.com/broofa/node-mime 3 | // Definitions by: Jeff Goddard 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | // Imported from: https://github.com/soywiz/typescript-node-definitions/mime.d.ts 7 | 8 | declare module "mime" { 9 | export function lookup(path: string): string; 10 | export function extension(mime: string): string; 11 | export function load(filepath: string): void; 12 | export function define(mimes: Object): void; 13 | 14 | interface Charsets { 15 | lookup(mime: string): string; 16 | } 17 | 18 | export var charsets: Charsets; 19 | } 20 | -------------------------------------------------------------------------------- /typings/nopt/nopt.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for nopt 3.0.1 2 | // Project: https://github.com/npm/nopt 3 | // Definitions by: jbondc 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | declare module "nopt" { 7 | 8 | interface CommandData { 9 | [key: string]: string 10 | } 11 | 12 | interface TypeDefs { 13 | [key: string]: TypeInfo 14 | } 15 | 16 | interface TypeInfo { 17 | type: Object 18 | validate: (data: CommandData, k: string, val: string) => boolean 19 | } 20 | 21 | module nopt { 22 | export function clean(data: CommandData, types: FlagTypeMap, typeDefs?: TypeDefs): string 23 | export var typeDefs: TypeDefs 24 | } 25 | 26 | interface FlagTypeMap { 27 | [k: string]: Object 28 | } 29 | 30 | interface ShortFlags { 31 | [k: string]: string[]|string 32 | } 33 | 34 | function nopt(types: FlagTypeMap, shorthands?: ShortFlags, args?: string[], slice?: number): OptionsParsed 35 | 36 | interface OptionsParsed { 37 | [k: string]: any 38 | argv: { 39 | remain: string[] 40 | cooked: string[] 41 | original: string[] 42 | } 43 | } 44 | 45 | export = nopt 46 | } -------------------------------------------------------------------------------- /typings/react-addons-css-transition-group/react-addons-css-transition-group.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for React v0.13.3 2 | // Project: http://facebook.github.io/react/ 3 | // Definitions by: Vadim 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | declare module "react-addons-css-transition-group" { 7 | var v: any; 8 | export = v; 9 | } 10 | -------------------------------------------------------------------------------- /typings/react-addons-test-utils/react-addons-test-utils.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for React v0.13.3 2 | // Project: http://facebook.github.io/react/ 3 | // Definitions by: Vadim 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | declare module "react-addons-test-utils" { 7 | var v: any; 8 | export = v; 9 | } 10 | -------------------------------------------------------------------------------- /typings/require.d.ts: -------------------------------------------------------------------------------- 1 | // from: https://github.com/TypeStrong/ts-loader/issues/146 2 | // require in webpack clashes with NodeRequire so extending it here 3 | 4 | interface NodeRequire { 5 | ensure: (paths: string[], callback: (require: (path: string) => any) => void, name?: string) => void; 6 | } --------------------------------------------------------------------------------