├── .dockerignore ├── .github ├── ISSUE_TEMPLATE.md └── dash-shot.png ├── .gitignore ├── .npmignore ├── .travis.yml ├── CHANGELOG.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── PIG └── index.html ├── Parse-Dashboard ├── app.js ├── index.js ├── parse-dashboard-config.json ├── parse-dashboard-config.json.example ├── parse-dashboard-config.json.user-example └── public │ └── favicon.ico ├── Procfile ├── README.md ├── app.json ├── bin └── parse-dashboard ├── docker-compose-le.yml ├── docker-compose.yml ├── docker ├── 0.0.1 │ └── Dockerfile ├── 0.0.4 │ └── Dockerfile ├── 1.0.1 │ └── Dockerfile ├── 1.0.10 │ └── Dockerfile ├── 1.0.11 │ └── Dockerfile ├── 1.0.12 │ └── Dockerfile ├── 1.0.13 │ └── Dockerfile ├── 1.0.14 │ └── Dockerfile ├── 1.0.15 │ └── Dockerfile ├── 1.0.16 │ └── Dockerfile ├── 1.0.17 │ └── Dockerfile ├── 1.0.18 │ └── Dockerfile ├── 1.0.19 │ └── Dockerfile ├── 1.0.2 │ └── Dockerfile ├── 1.0.22 │ └── Dockerfile ├── 1.0.23 │ └── Dockerfile ├── 1.0.24 │ └── Dockerfile ├── 1.0.25 │ └── Dockerfile ├── 1.0.26 │ └── Dockerfile ├── 1.0.27 │ └── Dockerfile ├── 1.0.28 │ └── Dockerfile ├── 1.0.3 │ └── Dockerfile ├── 1.0.4 │ └── Dockerfile ├── 1.0.5 │ └── Dockerfile ├── 1.0.6 │ └── Dockerfile ├── 1.0.7 │ └── Dockerfile ├── 1.0.8 │ └── Dockerfile ├── 1.0.9 │ └── Dockerfile ├── dev │ └── Dockerfile └── versions ├── generate-stackbrew-library.sh ├── package.json ├── scripts └── generate.js ├── src ├── components │ ├── ACLEditor │ │ └── ACLEditor.react.js │ ├── AppBadge │ │ ├── AppBadge.react.js │ │ └── AppBadge.scss │ ├── BooleanEditor │ │ ├── BooleanEditor.react.js │ │ └── BooleanEditor.scss │ ├── BrowserCell │ │ ├── BrowserCell.react.js │ │ └── BrowserCell.scss │ ├── BrowserFilter │ │ ├── BrowserFilter.react.js │ │ ├── BrowserFilter.scss │ │ └── FilterRow.react.js │ ├── BrowserMenu │ │ ├── BrowserMenu.react.js │ │ ├── BrowserMenu.scss │ │ ├── MenuItem.react.js │ │ └── Separator.react.js │ ├── Button │ │ ├── Button.example.js │ │ ├── Button.react.js │ │ └── Button.scss │ ├── CSRFInput │ │ └── CSRFInput.react.js │ ├── Calendar │ │ ├── Calendar.example.js │ │ ├── Calendar.react.js │ │ └── Calendar.scss │ ├── CascadingView │ │ ├── CascadingView.example.js │ │ ├── CascadingView.react.js │ │ └── CascadingView.scss │ ├── CategoryList │ │ ├── CategoryList.react.js │ │ └── CategoryList.scss │ ├── Chart │ │ ├── Chart.example.js │ │ ├── Chart.react.js │ │ ├── Chart.scss │ │ └── Shape.react.js │ ├── Checkbox │ │ ├── Checkbox.example.js │ │ ├── Checkbox.react.js │ │ └── Checkbox.scss │ ├── ChromeDatePicker │ │ ├── ChromeDatePicker.example.js │ │ ├── ChromeDatePicker.react.js │ │ └── ChromeDatePicker.scss │ ├── ChromeDropdown │ │ ├── ChromeDropdown.example.js │ │ ├── ChromeDropdown.react.js │ │ └── ChromeDropdown.scss │ ├── CodeSnippet │ │ ├── CodeSnippet.css │ │ ├── CodeSnippet.example.js │ │ └── CodeSnippet.react.js │ ├── CreditCardInput │ │ ├── CreditCardInput.example.js │ │ ├── CreditCardInput.react.js │ │ └── CreditCardInput.scss │ ├── DataBrowserHeader │ │ ├── DataBrowserHeader.example.js │ │ ├── DataBrowserHeader.react.js │ │ └── DataBrowserHeader.scss │ ├── DataBrowserHeaderBar │ │ ├── DataBrowserHeaderBar.react.js │ │ └── DataBrowserHeaderBar.scss │ ├── DatePicker │ │ ├── DatePicker.example.js │ │ ├── DatePicker.react.js │ │ └── DatePicker.scss │ ├── DateRange │ │ ├── DateRange.example.js │ │ ├── DateRange.react.js │ │ └── DateRange.scss │ ├── DateTimeEditor │ │ ├── DateTimeEditor.react.js │ │ └── DateTimeEditor.scss │ ├── DateTimeEntry │ │ └── DateTimeEntry.react.js │ ├── DateTimeInput │ │ ├── DateTimeInput.example.js │ │ ├── DateTimeInput.react.js │ │ └── DateTimeInput.scss │ ├── DateTimePicker │ │ ├── DateTimePicker.react.js │ │ └── DateTimePicker.scss │ ├── DonutChart │ │ ├── DonutChart.example.js │ │ ├── DonutChart.react.js │ │ └── DonutChart.scss │ ├── DragHandle │ │ ├── DragHandle.example.js │ │ └── DragHandle.react.js │ ├── Dropdown │ │ ├── Dropdown.example.js │ │ ├── Dropdown.react.js │ │ ├── Dropdown.scss │ │ └── Option.react.js │ ├── EmptyState │ │ ├── EmptyState.example.js │ │ ├── EmptyState.react.js │ │ └── EmptyState.scss │ ├── ExpirationDateInput │ │ ├── ExpirationDateInput.example.js │ │ └── ExpirationDateInput.react.js │ ├── ExplorerActiveChartButton │ │ ├── ExplorerActiveChartButton.example.js │ │ ├── ExplorerActiveChartButton.react.js │ │ └── ExplorerActiveChartButton.scss │ ├── ExplorerMenuButton │ │ ├── ExplorerMenuButton.example.js │ │ ├── ExplorerMenuButton.react.js │ │ └── ExplorerMenuButton.scss │ ├── ExplorerQueryComposer │ │ ├── ExplorerFilter.js │ │ ├── ExplorerQueryComposer.example.js │ │ ├── ExplorerQueryComposer.react.js │ │ └── ExplorerQueryComposer.scss │ ├── ExplorerQueryPicker │ │ ├── ExplorerQueryPicker.example.js │ │ ├── ExplorerQueryPicker.react.js │ │ └── ExplorerQueryPicker.scss │ ├── Field │ │ ├── Field.example.js │ │ ├── Field.react.js │ │ └── Field.scss │ ├── Fieldset │ │ ├── Fieldset.example.js │ │ ├── Fieldset.react.js │ │ └── Fieldset.scss │ ├── FileEditor │ │ ├── FileEditor.react.js │ │ └── FileEditor.scss │ ├── FileInput │ │ ├── FileInput.example.js │ │ ├── FileInput.react.js │ │ └── FileInput.scss │ ├── FileTree │ │ ├── FileTree.react.js │ │ └── FileTree.scss │ ├── Filter │ │ └── Filter.react.js │ ├── FlowFooter │ │ ├── FlowFooter.react.js │ │ └── FlowFooter.scss │ ├── FlowView │ │ └── FlowView.react.js │ ├── FormButton │ │ ├── FormButton.example.js │ │ ├── FormButton.react.js │ │ └── FormButton.scss │ ├── FormModal │ │ ├── FormModal.example.js │ │ └── FormModal.react.js │ ├── FormNote │ │ ├── FormNote.react.js │ │ └── FormNote.scss │ ├── FormTable │ │ ├── FormTable.example.js │ │ ├── FormTable.react.js │ │ └── FormTable.scss │ ├── FourOhFour │ │ ├── FourOhFour.react.js │ │ ├── FourOhFour.scss │ │ └── sprite.png │ ├── GeoPointEditor │ │ ├── GeoPointEditor.react.js │ │ └── GeoPointEditor.scss │ ├── GeoPointInput │ │ ├── GeoPointInput.react.js │ │ └── GeoPointInput.scss │ ├── Icon │ │ ├── Icon.example.js │ │ └── Icon.react.js │ ├── InlineSubmitInput │ │ ├── InlineSubmitInput.example.js │ │ ├── InlineSubmitInput.react.js │ │ └── InlineSubmitInput.scss │ ├── IntervalInput │ │ ├── IntervalInput.example.js │ │ └── IntervalInput.react.js │ ├── JsonPrinter │ │ ├── JsonPrinter.example.js │ │ └── JsonPrinter.react.js │ ├── KeyField │ │ ├── KeyField.example.js │ │ ├── KeyField.react.js │ │ └── KeyField.scss │ ├── Label │ │ ├── Label.example.js │ │ ├── Label.react.js │ │ └── Label.scss │ ├── LiveReload │ │ ├── LiveReload.example.js │ │ └── LiveReload.react.js │ ├── Loader │ │ ├── Loader.example.js │ │ ├── Loader.react.js │ │ └── Loader.scss │ ├── LoaderContainer │ │ ├── LoaderContainer.example.js │ │ ├── LoaderContainer.react.js │ │ └── LoaderContainer.scss │ ├── LoaderDots │ │ ├── LoaderDots.example.js │ │ ├── LoaderDots.react.js │ │ └── LoaderDots.scss │ ├── LogView │ │ ├── LogView.example.js │ │ ├── LogView.react.js │ │ ├── LogView.scss │ │ ├── LogViewEntry.example.js │ │ ├── LogViewEntry.react.js │ │ └── LogViewEntry.scss │ ├── LoginRow │ │ ├── LoginRow.react.js │ │ └── LoginRow.scss │ ├── Markdown │ │ ├── Markdown.example.js │ │ └── Markdown.react.js │ ├── Modal │ │ ├── Modal.example.js │ │ ├── Modal.react.js │ │ └── Modal.scss │ ├── MoneyInput │ │ ├── MoneyInput.example.js │ │ ├── MoneyInput.react.js │ │ └── MoneyInput.scss │ ├── MultiSelect │ │ ├── MultiSelect.example.js │ │ ├── MultiSelect.react.js │ │ ├── MultiSelect.scss │ │ └── MultiSelectOption.react.js │ ├── NumberEditor │ │ ├── NumberEditor.react.js │ │ └── NumberEditor.scss │ ├── PasswordStrength │ │ ├── PasswordStrength.react.js │ │ └── PasswordStrength.scss │ ├── PermissionsDialog │ │ ├── PermissionsDialog.example.js │ │ ├── PermissionsDialog.react.js │ │ └── PermissionsDialog.scss │ ├── Pill │ │ ├── Pill.example.js │ │ ├── Pill.react.js │ │ └── Pill.scss │ ├── PlatformCard │ │ ├── PlatformCard.example.js │ │ ├── PlatformCard.react.js │ │ └── PlatformCard.scss │ ├── Popover │ │ ├── Popover.react.js │ │ └── Popover.scss │ ├── PushAudienceDialog │ │ ├── InstallationCondition.react.js │ │ ├── InstallationCondition.scss │ │ ├── PushAudienceDialog.example.js │ │ ├── PushAudienceDialog.react.js │ │ └── PushAudienceDialog.scss │ ├── PushAudiencesSelector │ │ ├── PushAudiencesBaseRow.react.js │ │ ├── PushAudiencesOption.example.js │ │ ├── PushAudiencesOption.react.js │ │ ├── PushAudiencesOption.scss │ │ ├── PushAudiencesSelector.example.js │ │ ├── PushAudiencesSelector.react.js │ │ └── PushAudiencesSelector.scss │ ├── PushCerts │ │ ├── CertsTable.react.js │ │ ├── PushCerts.example.js │ │ └── PushCerts.react.js │ ├── PushExperimentDropdown │ │ ├── PushExperimentDropdown.example.js │ │ ├── PushExperimentDropdown.react.js │ │ └── PushExperimentDropdown.scss │ ├── PushOpenRate │ │ ├── PushOpenRate.example.js │ │ ├── PushOpenRate.react.js │ │ └── PushOpenRate.scss │ ├── PushPreview │ │ ├── PushPreview.react.js │ │ ├── PushPreview.scss │ │ ├── VisiblePreview.react.js │ │ ├── android.jpg │ │ ├── iphone.jpg │ │ ├── laptop.jpg │ │ └── windowsphone.jpg │ ├── RadioButton │ │ ├── RadioButton.example.js │ │ ├── RadioButton.react.js │ │ └── RadioButton.scss │ ├── Range │ │ ├── Range.example.js │ │ ├── Range.react.js │ │ └── Range.scss │ ├── ReleaseInfo │ │ └── ReleaseInfo.js │ ├── SaveButton │ │ ├── SaveButton.example.js │ │ ├── SaveButton.react.js │ │ └── SaveButton.scss │ ├── SegmentSelect │ │ ├── SegmentSelect.example.js │ │ ├── SegmentSelect.react.js │ │ └── SegmentSelect.scss │ ├── Sidebar │ │ ├── AppsMenu.react.js │ │ ├── AppsSelector.react.js │ │ ├── FooterMenu.react.js │ │ ├── Sidebar.react.js │ │ ├── Sidebar.scss │ │ ├── SidebarAction.js │ │ ├── SidebarHeader.react.js │ │ ├── SidebarSection.react.js │ │ ├── SidebarSubItem.react.js │ │ └── SidebarToggle.react.js │ ├── SliderWrap │ │ ├── SliderWrap.example.js │ │ ├── SliderWrap.react.js │ │ └── SliderWrap.scss │ ├── SlowQueriesFilter │ │ ├── SlowQueriesFilter.react.js │ │ └── SlowQueriesFilter.scss │ ├── StatusIndicator │ │ ├── StatusIndicator.example.js │ │ ├── StatusIndicator.react.js │ │ └── StatusIndicator.scss │ ├── StringEditor │ │ ├── StringEditor.react.js │ │ └── StringEditor.scss │ ├── Table │ │ ├── Table.scss │ │ └── TableHeader.react.js │ ├── TextInput │ │ ├── TextInput.example.js │ │ ├── TextInput.example.scss │ │ ├── TextInput.react.js │ │ └── TextInput.scss │ ├── TimeInput │ │ └── TimeInput.react.js │ ├── Toggle │ │ ├── Toggle.example.js │ │ ├── Toggle.react.js │ │ └── Toggle.scss │ ├── Toolbar │ │ ├── Toolbar.react.js │ │ └── Toolbar.scss │ └── Tooltip │ │ ├── Tooltip.example.js │ │ ├── Tooltip.react.js │ │ └── Tooltip.scss ├── dashboard │ ├── Account │ │ ├── AccountLinkField.react.js │ │ └── AccountOverview.react.js │ ├── AccountView.react.js │ ├── Analytics │ │ ├── AnalyticsConstants.js │ │ ├── Explorer │ │ │ ├── Explorer.react.js │ │ │ └── Explorer.scss │ │ ├── Overview │ │ │ ├── Overview.react.js │ │ │ └── Overview.scss │ │ ├── Performance │ │ │ ├── Performance.react.js │ │ │ └── Performance.scss │ │ ├── Retention │ │ │ ├── Retention.react.js │ │ │ └── Retention.scss │ │ └── SlowQueries │ │ │ ├── SlowQueries.react.js │ │ │ └── SlowQueries.scss │ ├── AppData.react.js │ ├── AppSelector.react.js │ ├── Apps │ │ ├── AppsIndex.react.js │ │ └── AppsIndex.scss │ ├── Dashboard.js │ ├── Dashboard.scss │ ├── DashboardView.react.js │ ├── Data │ │ ├── ApiConsole │ │ │ ├── ApiConsole.react.js │ │ │ ├── ApiConsole.scss │ │ │ ├── generateCurl.js │ │ │ └── request.js │ │ ├── Browser │ │ │ ├── AddColumnDialog.react.js │ │ │ ├── Browser.react.js │ │ │ ├── Browser.scss │ │ │ ├── BrowserTable.react.js │ │ │ ├── BrowserToolbar.react.js │ │ │ ├── CreateClassDialog.react.js │ │ │ ├── DataBrowser.react.js │ │ │ ├── DeleteRowsDialog.react.js │ │ │ ├── DropClassDialog.react.js │ │ │ ├── Editor.react.js │ │ │ ├── ExportDialog.react.js │ │ │ ├── Notification.react.js │ │ │ ├── RemoveColumnDialog.react.js │ │ │ ├── SchemaOverview.react.js │ │ │ └── SecurityDialog.react.js │ │ ├── CloudCode │ │ │ ├── CloudCode.react.js │ │ │ └── CloudCode.scss │ │ ├── Config │ │ │ ├── Config.react.js │ │ │ └── ConfigDialog.react.js │ │ ├── Jobs │ │ │ ├── JobEdit.react.js │ │ │ ├── Jobs.react.js │ │ │ ├── Jobs.scss │ │ │ ├── JobsData.react.js │ │ │ ├── JobsForm.react.js │ │ │ └── RunNowButton.react.js │ │ ├── Logs │ │ │ ├── Logs.react.js │ │ │ └── Logs.scss │ │ ├── Migration │ │ │ ├── Migration.react.js │ │ │ ├── Migration.scss │ │ │ ├── MigrationStep.react.js │ │ │ └── MigrationStep.scss │ │ └── Webhooks │ │ │ └── Webhooks.react.js │ ├── Push │ │ ├── Push.scss │ │ ├── PushAudiencesData.react.js │ │ ├── PushAudiencesData.scss │ │ ├── PushAudiencesIndex.react.js │ │ ├── PushAudiencesIndexRow.react.js │ │ ├── PushAudiencesIndexRow.scss │ │ ├── PushComposerHelper.react.js │ │ ├── PushConstants.js │ │ ├── PushDetails.react.js │ │ ├── PushDetails.scss │ │ ├── PushIndex.react.js │ │ ├── PushIndex.scss │ │ └── PushNew.react.js │ ├── Settings │ │ ├── AppleCerts.react.js │ │ ├── Collaborators.react.js │ │ ├── GeneralSettings.react.js │ │ ├── GeneralSettings.scss │ │ ├── HostingSettings.react.js │ │ ├── PushSettings.react.js │ │ ├── SecuritySettings.react.js │ │ ├── Settings.scss │ │ ├── SettingsData.react.js │ │ └── UsersSettings.react.js │ ├── SidebarBuilder.js │ ├── TableView.react.js │ ├── TableView.scss │ ├── history.js │ └── index.js ├── icons │ ├── analytics-outline.svg │ ├── analytics-solid.svg │ ├── android.svg │ ├── apple.svg │ ├── arduino.svg │ ├── blank-app-outline.svg │ ├── blank-app-solid.svg │ ├── bug-outline.svg │ ├── bug-solid.svg │ ├── calendar-outline.svg │ ├── calendar-solid.svg │ ├── check-outline.svg │ ├── check-solid.svg │ ├── check.svg │ ├── cloud-cool.svg │ ├── cloud-happy.svg │ ├── cloud-sad.svg │ ├── cloud-surprise.svg │ ├── cloud-unsure.svg │ ├── cloud-wink.svg │ ├── collaborate-outline.svg │ ├── collaborate-solid.svg │ ├── core.svg │ ├── devices-outline.svg │ ├── devices-solid.svg │ ├── dotnet.svg │ ├── down-outline.svg │ ├── down-solid.svg │ ├── download.svg │ ├── edit-outline.svg │ ├── edit-solid.svg │ ├── ellipses.svg │ ├── facebook.svg │ ├── files-outline.svg │ ├── files-solid.svg │ ├── filter-outline.svg │ ├── filter-solid.svg │ ├── folder-outline.svg │ ├── folder-solid.svg │ ├── gear-outline.svg │ ├── gear-solid.svg │ ├── gears.svg │ ├── github.svg │ ├── google.svg │ ├── hamburger.svg │ ├── heroku.svg │ ├── infinity.svg │ ├── info-outline.svg │ ├── info-solid.svg │ ├── javascript.svg │ ├── keys-outline.svg │ ├── keys-solid.svg │ ├── laptop-outline.svg │ ├── laptop-solid.svg │ ├── left-outline.svg │ ├── left-solid.svg │ ├── locked-outline.svg │ ├── locked-solid.svg │ ├── mail-outline.svg │ ├── mail-solid.svg │ ├── minus-outline.svg │ ├── minus-solid.svg │ ├── phone-outline.svg │ ├── phone-solid.svg │ ├── php.svg │ ├── plus-outline.svg │ ├── plus-solid.svg │ ├── plus.svg │ ├── push-outline.svg │ ├── push-solid.svg │ ├── question-solid.svg │ ├── refresh-outline.svg │ ├── refresh-solid.svg │ ├── right-outline.svg │ ├── right-solid.svg │ ├── rpi.svg │ ├── rtos.svg │ ├── search-outline.svg │ ├── search-solid.svg │ ├── send-outline.svg │ ├── send-solid.svg │ ├── share.svg │ ├── trash-outline.svg │ ├── trash-solid.svg │ ├── unity.svg │ ├── unlock-outline.svg │ ├── unlock-solid.svg │ ├── up-outline.svg │ ├── up-solid.svg │ ├── users-outline.svg │ ├── users-solid.svg │ ├── warn-outline.svg │ ├── warn-solid.svg │ ├── windows.svg │ ├── x-outline.svg │ ├── x-solid.svg │ └── xamarin.svg ├── lib │ ├── AJAX.js │ ├── AccountManager.js │ ├── AppsManager.js │ ├── CSRFManager.js │ ├── Charting.js │ ├── ColumnPreferences.js │ ├── Constants.js │ ├── DateUtils.js │ ├── Email.js │ ├── Filters.js │ ├── ParseApp.js │ ├── Position.js │ ├── PropTypes.js │ ├── PushUtils.js │ ├── StringEscaping.js │ ├── browserUtils.js │ ├── encodeFormData.js │ ├── englishOrdinalIndicator.js │ ├── getFileName.js │ ├── getSiteDomain.js │ ├── hasAncestor.js │ ├── howLongAgo.js │ ├── htmlString.js │ ├── joinWithFinal.js │ ├── keyMirror.js │ ├── passwordStrength.js │ ├── pluck.js │ ├── pluralize.js │ ├── prettyNumber.js │ ├── queryFromFilters.js │ ├── renderFlowFooterChanges.js │ ├── setDifference.js │ ├── stores │ │ ├── AnalyticsQueryStore.js │ │ ├── ConfigStore.js │ │ ├── JobsStore.js │ │ ├── PushAudiencesStore.js │ │ ├── SchemaStore.js │ │ ├── StateManager.js │ │ ├── StoreManager.js │ │ └── WebhookStore.js │ ├── stringCompare.js │ ├── stringList.js │ ├── subscribeTo.js │ ├── tests │ │ ├── Button.test.js │ │ ├── Charting.test.js │ │ ├── ColumnPreferences.test.js │ │ ├── DateUtils.test.js │ │ ├── Email.test.js │ │ ├── Markdown.test.js │ │ ├── PlatformCard.test.js │ │ ├── Tooltip.test.js │ │ ├── passwordStrength.test.js │ │ └── prettyNumber.test.js │ ├── unique.js │ ├── validateAndSubmitConnectionString.js │ ├── validateEmailFormat.js │ └── validateNumeric.js ├── parse-interface-guide │ ├── ComponentsMap.js │ ├── PIG.react.js │ ├── PIG.scss │ ├── PropsTable.react.js │ ├── index.html │ ├── index.js │ └── routes.js ├── quickstart │ ├── Quickstart.react.js │ └── index.js └── stylesheets │ ├── base.scss │ ├── fonts.scss │ └── globals.scss ├── testing ├── extractClassnames.js └── preprocessor.js ├── volumes └── proxy │ └── templates │ ├── nginx-compose-v2.tmpl │ └── nginx.tmpl └── webpack ├── PIG.config.js ├── base.config.js ├── build.config.js ├── plugins └── svg-prep.js ├── production.config.js ├── publish.config.js └── webpack.config.js /.dockerignore: -------------------------------------------------------------------------------- 1 | Dockerfile 2 | .git 3 | *.swp 4 | docker/ 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | Make sure these boxes are checked before submitting your issue -- thanks for reporting issues back to Parse Dashboard! 2 | 3 | - [ ] You're running version >=2.1.4 of Parse Server. 4 | 5 | - [ ] You've searched through [existing issues](https://github.com/ParsePlatform/parse-dashboard/issues?utf8=%E2%9C%93&q=). Chances are that your issue has been reported or resolved before. 6 | 7 | #### Environment Setup 8 | 9 | 10 | #### Steps to reproduce 11 | 12 | 13 | #### Logs/Trace 14 | Note: If you get a browser JS error please run `npm run dev`. This will provide source maps and a much more useful stack trace. 15 | -------------------------------------------------------------------------------- /.github/dash-shot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongjhih/docker-parse-dashboard/b9042a14e512dc09f90fff7d5bd3dfda5617e78f/.github/dash-shot.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | bundles/ 4 | PIG/bundles/ 5 | Parse-Dashboard/public/bundles/ 6 | Parse-Dashboard/parse-dashboard-config.json 7 | npm-debug.log 8 | 9 | // vim .swp 10 | *.swp 11 | .env 12 | 13 | *.pem 14 | account_key.json 15 | *.key 16 | *.crt 17 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | Parse Dashboard/parse-dashboard-config.json 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: bash 2 | services: docker 3 | 4 | env: 5 | - VERSION=latest 6 | 7 | install: 8 | - git clone https://github.com/docker-library/official-images.git ~/official-images 9 | 10 | before_script: 11 | - env | sort 12 | - image="yongjhih/parse-dashboard:$VERSION" 13 | 14 | script: 15 | - docker build -t "$image" . 16 | - ~/official-images/test/run.sh "$image" 17 | 18 | after_script: 19 | - docker images 20 | language: node_js 21 | node_js: 22 | - "4.3" 23 | - "4.4" 24 | - "5.7" 25 | - "6.1" 26 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | #ENV PARSE_HOME /parse-dashboard 4 | ENV PARSE_HOME /src 5 | ADD . $PARSE_HOME 6 | WORKDIR $PARSE_HOME 7 | 8 | RUN npm install && \ 9 | npm run build && \ 10 | npm cache clear && \ 11 | rm -rf ~/.npm && \ 12 | rm -rf /var/lib/apt/lists/* 13 | 14 | ENV PORT 4040 15 | EXPOSE $PORT 16 | 17 | #ENV PARSE_DASHBOARD_APP_ID 18 | #ENV PARSE_DASHBOARD_MASTER_KEY 19 | #ENV PARSE_DASHBOARD_SERVER_URL 20 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 21 | #ENV PARSE_DASHBOARD_APP_NAME 22 | #ENV PARSE_DASHBOARD_USER_ID 23 | #ENV PARSE_DASHBOARD_USER_PASSWORD 24 | #ENV PARSE_DASHBOARD_CONFIG 25 | 26 | CMD ["npm", "run", "dashboard"] 27 | -------------------------------------------------------------------------------- /PIG/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | PIG Component Explorer 4 | 5 |
6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Parse-Dashboard/parse-dashboard-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "apps": [{ 3 | "serverURL": "", 4 | "appId": "", 5 | "masterKey": "", 6 | "appName": "", 7 | "iconName": "" 8 | }], 9 | "iconsFolder": "icons" 10 | } 11 | -------------------------------------------------------------------------------- /Parse-Dashboard/parse-dashboard-config.json.example: -------------------------------------------------------------------------------- 1 | { 2 | "apps": [ 3 | { 4 | "serverURL": "$SERVER_URL", 5 | "appId": "$APP_ID", 6 | "masterKey": "$MASTER_KEY", 7 | "appName": "$APP_NAME" 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /Parse-Dashboard/parse-dashboard-config.json.user-example: -------------------------------------------------------------------------------- 1 | { 2 | "apps": [ 3 | { 4 | "serverURL": "$SERVER_URL", 5 | "appId": "$APP_ID", 6 | "masterKey": "$MASTER_KEY", 7 | "appName": "$APP_NAME" 8 | } 9 | ], 10 | "users": [ 11 | { 12 | "user":"$USER1", 13 | "pass":"$USER1_PASSWORD" 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /Parse-Dashboard/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongjhih/docker-parse-dashboard/b9042a14e512dc09f90fff7d5bd3dfda5617e78f/Parse-Dashboard/public/favicon.ico -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: npm start 2 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Parse Dashboard", 3 | "description": "A Parse dashboard", 4 | "repository": "https://github.com/yongjhih/docker-parse-dashboard", 5 | "logo": "https://avatars0.githubusercontent.com/u/1294580?v=3&s=200", 6 | "keywords": ["node", "express", "parse"], 7 | "env": { 8 | "PARSE_DASHBOARD_APP_ID": { 9 | "description": "A unique identifier for your app.", 10 | "value": "myAppId" 11 | }, 12 | "PARSE_DASHBOARD_MASTER_KEY": { 13 | "description": "A key that overrides all permissions. Keep this secret.", 14 | "value": "myMasterKey" 15 | }, 16 | "PARSE_DASHBOARD_USER_ID": { 17 | "description": "A key that overrides all permissions. Keep this secret.", 18 | "value": "myUserId" 19 | }, 20 | "PARSE_DASHBOARD_USER_PASSWORD": { 21 | "description": "A key that overrides all permissions. Keep this secret.", 22 | "value": "myUserPassword" 23 | }, 24 | "PARSE_DASHBOARD_SERVER_URL": { 25 | "description": "URL to connect to your Heroku instance", 26 | "value": "http://your-parse-server.herokuapp.com/parse" 27 | } 28 | }, 29 | "image": "heroku/nodejs" 30 | } 31 | -------------------------------------------------------------------------------- /bin/parse-dashboard: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | require('../Parse-Dashboard'); 3 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | parse-dashboard: 2 | #build: . 3 | image: yongjhih/parse-dashboard 4 | environment: 5 | SERVER_URL: $SERVER_URL 6 | APP_ID: $APP_ID 7 | MASTER_KEY: $MASTER_KEY 8 | APP_NAME: $APP_NAME 9 | ALLOW_INSECURE_HTTP: $PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 10 | USER1: $USER1 11 | USER1_PASSWORD: $USER1_PASSWORD 12 | PARSE_DASHBOARD_ALLOW_INSECURE_HTTP: $PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | PARSE_DASHBOARD_SERVER_URL: $SERVER_URL 14 | PARSE_DASHBOARD_MASTER_KEY: $MASTER_KEY 15 | PARSE_DASHBOARD_APP_ID: $APP_ID 16 | PARSE_DASHBOARD_APP_NAME: $APP_NAME 17 | PARSE_DASHBOARD_USER_ID: $USER1 18 | PARSE_DASHBOARD_USER_PASSWORD: $USER1_PASSWORD 19 | PARSE_DASHBOARD_CONFIG: $PARSE_DASHBOARD_CONFIG 20 | MOUNT_PATH: $PARSE_DASHBOARD_MOUNT_PATH 21 | TRUST_PROXY: $PARSE_DASHBOARD_TRUST_PROXY 22 | 23 | PORT: 4040 24 | ports: 25 | - "4040:4040" 26 | 27 | # vim:set et ts=2 sw=2: 28 | -------------------------------------------------------------------------------- /docker/0.0.1/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 0.0.1 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/0.0.4/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 0.0.4 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.1/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.1 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.10/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.10 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.11/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:6.0.0 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.11 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["bash", "-c", "parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.12/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:6.0.0 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.12 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["bash", "-c", "parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.13/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:6.0.0 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.13 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["bash", "-c", "parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.14/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:6.0.0 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.14 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["bash", "-c", "parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.15/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:6.0.0 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.15 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["bash", "-c", "parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.16/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.16 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.17/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.17 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.18/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.18 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.19/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.19 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.2/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.2 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.22/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.22 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.23/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.23 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.24/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.24 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.25/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.25 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.26/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.26 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.27/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.27 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.28/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.28 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.3/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.3 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.4/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.4 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.5/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.5 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.6/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.6 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.7/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.7 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.8/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.8 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/1.0.9/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_DASHBOARD_VERSION 1.0.9 4 | RUN npm install -g parse-dashboard@${PARSE_DASHBOARD_VERSION} 5 | 6 | ENV PORT 4040 7 | EXPOSE $PORT 8 | 9 | #ENV PARSE_DASHBOARD_APP_ID 10 | #ENV PARSE_DASHBOARD_MASTER_KEY 11 | #ENV PARSE_DASHBOARD_SERVER_URL 12 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 13 | #ENV PARSE_DASHBOARD_APP_NAME 14 | #ENV PARSE_DASHBOARD_USER_ID 15 | #ENV PARSE_DASHBOARD_USER_PASSWORD 16 | #ENV PARSE_DASHBOARD_CONFIG 17 | 18 | CMD ["parse-dashboard"] 19 | -------------------------------------------------------------------------------- /docker/dev/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | 3 | ENV PARSE_HOME /src 4 | 5 | RUN apt-get update && \ 6 | apt-get install -y git && \ 7 | git clone https://github.com/ParsePlatform/parse-dashboard.git $PARSE_HOME 8 | 9 | WORKDIR $PARSE_HOME 10 | 11 | RUN npm install && \ 12 | npm run build && \ 13 | npm cache clear && \ 14 | rm -rf ~/.npm && \ 15 | rm -rf /var/lib/apt/lists/* 16 | 17 | ENV PORT 4040 18 | EXPOSE $PORT 19 | 20 | #ENV PARSE_DASHBOARD_APP_ID 21 | #ENV PARSE_DASHBOARD_MASTER_KEY 22 | #ENV PARSE_DASHBOARD_SERVER_URL 23 | #ENV PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 24 | #ENV PARSE_DASHBOARD_APP_NAME 25 | #ENV PARSE_DASHBOARD_USER_ID 26 | #ENV PARSE_DASHBOARD_USER_PASSWORD 27 | #ENV PARSE_DASHBOARD_CONFIG 28 | #ENV PARSE_DASHBOARD_MOUNT_PATH 29 | 30 | CMD ["parse-dashboard"] 31 | -------------------------------------------------------------------------------- /docker/versions: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | for i in 0.0.1 0.0.2 0.0.4 1.0.{1..19} 1.0.{22..28}; do 4 | if [ ! -d $i ]; then 5 | mkdir $i 6 | 7 | cp 1.0.2/* ${i}/ 8 | sed -i "s/1\\.0\\.2/${i}/" ${i}/Dockerfile 9 | fi 10 | 11 | done 12 | -------------------------------------------------------------------------------- /generate-stackbrew-library.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | cd "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" 6 | 7 | url='git://github.com/yongjhih/docker-parse-dashboard' 8 | 9 | generate-version() { 10 | local version=$1 11 | 12 | commit="$(git log -1 --format='format:%H')" 13 | 14 | versionAliases=() 15 | if [ "$version" == 'master' ]; then 16 | echo "latest: ${url}@${commit} ." 17 | else 18 | echo "${version}: ${url}@${commit} docker/${version}" 19 | fi 20 | } 21 | 22 | echo '# maintainer: Andrew Chen (@yongjhih)' 23 | 24 | versions=( docker/*/Dockerfile ) 25 | versions=( "${versions[@]#docker/}" ) 26 | versions=( "${versions[@]%/*}" master ) 27 | 28 | for version in "${versions[@]}"; do 29 | generate-version "$version" 30 | done 31 | -------------------------------------------------------------------------------- /src/components/AppBadge/AppBadge.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import PropTypes from 'lib/PropTypes'; 9 | import React from 'react'; 10 | import styles from 'components/AppBadge/AppBadge.scss'; 11 | 12 | let AppBadge = ({ production }) => ( 13 | 14 | {production ? 'PROD' : 'DEV'} 15 | 16 | ); 17 | 18 | export default AppBadge; 19 | 20 | AppBadge.propTypes = { 21 | production: PropTypes.bool.describe( 22 | 'Indicates whether the app is in production mode or not.' 23 | ) 24 | }; 25 | -------------------------------------------------------------------------------- /src/components/AppBadge/AppBadge.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .badge { 11 | @include DosisFont; 12 | display: inline-block; 13 | height: 26px; 14 | line-height: 26px; 15 | vertical-align: middle; 16 | text-align: center; 17 | border: 1px solid #768C97; 18 | color: #768C97; 19 | border-radius: 5px; 20 | font-size: 10px; 21 | letter-spacing: 4px; 22 | width: 60px; 23 | padding-left: 3px; 24 | float: right; 25 | } 26 | 27 | .prod { 28 | color: #00dc7c; 29 | border-color: #00dc7c; 30 | } 31 | -------------------------------------------------------------------------------- /src/components/BooleanEditor/BooleanEditor.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | .editor { 9 | background: white; 10 | white-space: nowrap; 11 | box-shadow: 0 1px 4px rgba(0,0,0,0.4); 12 | 13 | > *:first-child { 14 | margin: 6px 0; 15 | } 16 | } -------------------------------------------------------------------------------- /src/components/BrowserCell/BrowserCell.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | .cell { 9 | display: inline-block; 10 | overflow: hidden; 11 | text-overflow: ellipsis; 12 | cursor: default; 13 | color: #0E69A1; 14 | height: 30px; 15 | line-height: 22px; 16 | padding: 5px 4px 0; 17 | border-right: 1px solid #e3e3ea; 18 | } 19 | 20 | .empty { 21 | color: #7D929F; 22 | } 23 | 24 | .current { 25 | position: relative; 26 | 27 | &:after { 28 | position: absolute; 29 | pointer-events: none; 30 | content: ''; 31 | border: 2px solid #555572; 32 | top: 0; 33 | left: 0; 34 | right: 0; 35 | bottom: 0; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/components/BrowserMenu/MenuItem.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import styles from 'components/BrowserMenu/BrowserMenu.scss'; 10 | 11 | let MenuItem = ({ text, disabled, onClick }) => { 12 | let classes = [styles.item]; 13 | if (disabled) { 14 | classes.push(styles.disabled); 15 | } 16 | return
{text}
; 17 | }; 18 | 19 | export default MenuItem; 20 | -------------------------------------------------------------------------------- /src/components/BrowserMenu/Separator.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import styles from 'components/BrowserMenu/BrowserMenu.scss'; 10 | 11 | let Separator = () =>
; 12 | 13 | export default Separator; 14 | -------------------------------------------------------------------------------- /src/components/CSRFInput/CSRFInput.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import { getToken } from 'lib/CSRFManager'; 9 | import React from 'react'; 10 | 11 | // An invisible component that embeds a hidden input 12 | // containing the CSRF token into a form 13 | let CSRFInput = () => ( 14 |
15 | 16 |
17 | ); 18 | 19 | export default CSRFInput; 20 | -------------------------------------------------------------------------------- /src/components/Calendar/Calendar.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import Calendar from 'components/Calendar/Calendar.react'; 9 | import React from 'react'; 10 | 11 | export const component = Calendar; 12 | 13 | export const demos = [ 14 | { 15 | render: () => ( 16 |
17 | 18 |
19 | ) 20 | } 21 | ]; 22 | -------------------------------------------------------------------------------- /src/components/CascadingView/CascadingView.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | $arrowColor: #343445; 11 | 12 | .cascadingView, .contentContainer { 13 | position: relative; 14 | } 15 | 16 | .left { 17 | position: relative; 18 | width: auto; 19 | height: 100%; 20 | } 21 | 22 | .right { 23 | position: absolute; 24 | right: 20px; 25 | width: 15px; 26 | height: 15px; 27 | padding: 0; 28 | } 29 | 30 | .expanded { 31 | @include arrow('down', 12px, 10px, $arrowColor); 32 | content: ''; 33 | } 34 | 35 | .collapsed { 36 | @include arrow('right', 12px, 10px, $arrowColor); 37 | content: ''; 38 | } 39 | 40 | .childrenContainer { 41 | position: relative; 42 | padding: 15px 0px 15px 18px; 43 | background-color: $inputBackgroundColor; 44 | 45 | .children { 46 | border-left: 1px solid rgba(52, 52, 69, 0.2); 47 | padding-left: 14px; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/components/CategoryList/CategoryList.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .class_list { 11 | position: relative; 12 | margin-bottom: 5px; 13 | 14 | a { 15 | display: block; 16 | padding-left: 12px; 17 | height: 20px; 18 | line-height: 20px; 19 | border-left: 1px solid #3e87b2; 20 | color: #8fb9cf; 21 | font-size: 12px; 22 | 23 | &.active { 24 | color: white; 25 | } 26 | 27 | &:hover{ 28 | color: white; 29 | } 30 | 31 | span { 32 | display: block; 33 | 34 | &:first-of-type { 35 | @include DosisFont; 36 | float: right; 37 | width: 50px; 38 | text-align: right; 39 | } 40 | 41 | &:last-of-type { 42 | margin-right: 50px; 43 | overflow: hidden; 44 | text-overflow: ellipsis; 45 | white-space: nowrap; 46 | } 47 | } 48 | } 49 | } 50 | 51 | .highlight { 52 | position: absolute; 53 | width: 1px; 54 | height: 20px; 55 | background: white; 56 | transition: top 0.2s cubic-bezier(1, 0, 0, 1); 57 | } 58 | -------------------------------------------------------------------------------- /src/components/Checkbox/Checkbox.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import Checkbox from 'components/Checkbox/Checkbox.react'; 10 | 11 | export const component = Checkbox; 12 | 13 | export const demos = [ 14 | { 15 | render: () => ( 16 |
17 |
18 | 19 |
20 |
21 | 22 |
23 |
24 | 25 |
26 |
27 | ) 28 | } 29 | ]; 30 | -------------------------------------------------------------------------------- /src/components/Checkbox/Checkbox.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import Icon from 'components/Icon/Icon.react'; 9 | import React from 'react'; 10 | import styles from 'components/Checkbox/Checkbox.scss'; 11 | 12 | let Checkbox = ({ label, checked, indeterminate, onChange }) => { 13 | let classes = [styles.input]; 14 | if (checked) { 15 | classes.push(styles.checked); 16 | } else if (indeterminate) { 17 | classes.push(styles.indeterminate); 18 | } 19 | let inner = null; 20 | if (checked) { 21 | inner = ; 22 | } else if (indeterminate) { 23 | inner = ; 24 | } 25 | return ( 26 | onChange(!checked)}> 27 | {label ? {label} : null} 28 | {inner} 29 | 30 | ); 31 | }; 32 | 33 | export default Checkbox; 34 | -------------------------------------------------------------------------------- /src/components/Checkbox/Checkbox.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .input { 11 | display: inline-block; 12 | cursor: pointer; 13 | height: 20px; 14 | line-height: 20px; 15 | } 16 | 17 | .checkbox { 18 | display: inline-block; 19 | height: 20px; 20 | width: 20px; 21 | padding: 3px; 22 | border-radius: 4px; 23 | background: white; 24 | vertical-align: middle; 25 | border: 1px solid $mainTextColor; 26 | 27 | svg { 28 | vertical-align: top; 29 | } 30 | } 31 | 32 | .minus { 33 | display: block; 34 | width: 12px; 35 | height: 4px; 36 | background: $blue; 37 | margin-top: 4px; 38 | border-radius: 2px; 39 | } 40 | 41 | .label { 42 | @include DosisFont; 43 | color: $mainTextColor; 44 | font-size: 14px; 45 | vertical-align: middle; 46 | margin-right: 6px; 47 | } 48 | 49 | .checked, .indeterminate { 50 | .checkbox { 51 | border-color: $blue; 52 | } 53 | 54 | .label { 55 | color: $blue; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/components/CodeSnippet/CodeSnippet.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import CodeSnippet from 'components/CodeSnippet/CodeSnippet.react'; 10 | 11 | export const component = CodeSnippet; 12 | 13 | export const demos = [ 14 | { 15 | render() { 16 | let source = `// Some comment here 17 | Parse.Cloud.define('hello', function(req, resp) { 18 | let someVariable = "
"; 19 | let otherVariable = "
"; 20 | });` 21 | 22 | return ( 23 | 24 | ) 25 | } 26 | }, 27 | { 28 | name: 'Print JSON', 29 | render() { 30 | let obj = { 31 | this: 'is awesome', 32 | awesome: true 33 | }; 34 | 35 | return ( 36 | 37 | ) 38 | } 39 | } 40 | ]; 41 | -------------------------------------------------------------------------------- /src/components/CreditCardInput/CreditCardInput.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .input { 11 | @include NotoSansFont; 12 | border: 0; 13 | outline: 0; 14 | background: $inputBackgroundColor; 15 | font-size: 16px; 16 | width: 100%; 17 | height: 80px; 18 | padding: 6px; 19 | text-align: center; 20 | vertical-align: top; 21 | resize: none; 22 | 23 | &:focus { 24 | @include placeholder { 25 | opacity: 0; 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/components/DatePicker/DatePicker.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .input { 11 | width: 100%; 12 | height: 80px; 13 | line-height: 80px; 14 | text-align: center; 15 | background: $inputBackgroundColor; 16 | } 17 | 18 | .placeholder { 19 | color: $secondaryTextColor; 20 | } 21 | 22 | .picker { 23 | border: 1px solid $blue; 24 | background: white; 25 | 26 | > * { 27 | margin: 10% auto 4% auto; 28 | } 29 | } 30 | 31 | .value { 32 | color: $blue; 33 | } -------------------------------------------------------------------------------- /src/components/DateTimeEditor/DateTimeEditor.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .editor { 11 | box-shadow: 0 1px 4px rgba(0,0,0,0.4); 12 | 13 | > input { 14 | @include MonospaceFont; 15 | width: 100%; 16 | height: 30px; 17 | border: none; 18 | outline: none; 19 | padding: 0 4px; 20 | font-size: 12px; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/components/DateTimeInput/DateTimeInput.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .input { 11 | width: 100%; 12 | height: 80px; 13 | line-height: 80px; 14 | text-align: center; 15 | background: $inputBackgroundColor; 16 | } 17 | 18 | .placeholder { 19 | color: $secondaryTextColor; 20 | } 21 | -------------------------------------------------------------------------------- /src/components/DateTimePicker/DateTimePicker.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .picker { 11 | border: 1px solid $blue; 12 | background: white; 13 | 14 | > *:first-child { 15 | margin: 10% auto 4% auto; 16 | } 17 | } 18 | 19 | .value { 20 | color: $lightBlue; 21 | 22 | strong { 23 | color: $blue; 24 | } 25 | } 26 | 27 | .time { 28 | margin: 0; 29 | padding: 12px; 30 | color: $blue; 31 | border-top: 1px solid $borderGrey; 32 | text-align: right; 33 | 34 | input { 35 | display: inline-block; 36 | width: 40px; 37 | height: 30px; 38 | border: 1px solid $blue; 39 | color: $blue; 40 | border-radius: 5px; 41 | outline: none; 42 | text-align: center; 43 | font-size: 12px; 44 | padding: 0; 45 | } 46 | } -------------------------------------------------------------------------------- /src/components/DonutChart/DonutChart.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import DonutChart from 'components/DonutChart/DonutChart.react'; 9 | import React from 'react'; 10 | 11 | export const component = DonutChart; 12 | 13 | export const demos = [ 14 | { 15 | name: 'Simple DonutChart', 16 | render: () => ( 17 | 18 | ) 19 | }, { 20 | name: 'DonutChart without Dominant Value', 21 | render: () => ( 22 | 25 | ) 26 | }, { 27 | name: 'Progress Bar with DonutChart', 28 | render: () => ( 29 | 34 | ) 35 | } 36 | ]; 37 | -------------------------------------------------------------------------------- /src/components/Dropdown/Option.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import styles from 'components/Dropdown/Dropdown.scss'; 10 | 11 | let Option = props =>
; 12 | 13 | export default Option; 14 | -------------------------------------------------------------------------------- /src/components/EmptyState/EmptyState.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .title { 11 | font-size: 46px; 12 | font-weight: 100; 13 | line-height: 55px; 14 | white-space: nowrap; 15 | margin-bottom: 45px; 16 | } 17 | 18 | .description { 19 | @include DosisFont; 20 | font-size: 16px; 21 | letter-spacing: 0.72px; 22 | line-height: 17px; 23 | margin-bottom: 12px; 24 | } 25 | 26 | .icon { 27 | width: 170px; 28 | height: 170px; 29 | margin: 0 auto 24px auto; 30 | border-radius: 100%; 31 | background: #f3f0f2; 32 | text-align: center; 33 | padding-top: 45px; 34 | } 35 | -------------------------------------------------------------------------------- /src/components/ExpirationDateInput/ExpirationDateInput.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import Field from 'components/Field/Field.react'; 9 | import Fieldset from 'components/Fieldset/Fieldset.react'; 10 | import ExpirationDateInput from 'components/ExpirationDateInput/ExpirationDateInput.react'; 11 | import Label from 'components/Label/Label.react'; 12 | import React from 'react'; 13 | 14 | export const component = ExpirationDateInput; 15 | 16 | class Demo extends React.Component { 17 | constructor() { 18 | super(); 19 | this.state = { month: 1, year: 2016 }; 20 | } 21 | 22 | render() { 23 | return ( 24 | this.setState(change)} /> 28 | ); 29 | } 30 | } 31 | 32 | export const demos = [ 33 | { 34 | render: () => ( 35 |
36 | } 38 | input={} /> 39 |
40 | ) 41 | } 42 | ]; 43 | -------------------------------------------------------------------------------- /src/components/ExplorerMenuButton/ExplorerMenuButton.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .wrap { 11 | display: inline-block; 12 | vertical-align: top; 13 | height: 30px; 14 | } 15 | 16 | .queryMenuContainer { 17 | width: 700px; 18 | position: relative; 19 | } 20 | 21 | .button { 22 | display: inline-block; 23 | height: 30px; 24 | width: 111px; 25 | border: 1px solid $mainTextColor; 26 | border-radius: 5px; 27 | line-height: 30px; 28 | text-align: center; 29 | padding: 0 16px; 30 | cursor: pointer; 31 | } 32 | 33 | .callout { 34 | @include arrow('up', 20px, 10px, $explorerQueryBackgroundColor); 35 | width: 20px; 36 | height: 10px; 37 | } 38 | 39 | .right { 40 | position: absolute; 41 | right: 0; 42 | 43 | .button { 44 | display: block; 45 | margin-left: auto; 46 | margin-right: 0px; 47 | } 48 | 49 | .callout { 50 | margin-left: auto; 51 | } 52 | } 53 | 54 | -------------------------------------------------------------------------------- /src/components/ExplorerQueryComposer/ExplorerQueryComposer.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import ExplorerQueryComposer from 'components/ExplorerQueryComposer/ExplorerQueryComposer.react'; 9 | import React from 'react'; 10 | 11 | export const component = ExplorerQueryComposer; 12 | 13 | export const demos = [ 14 | { 15 | name: 'New query', 16 | render: () => ( 17 |
18 | 20 |
21 | ) 22 | }, 23 | { 24 | name: 'Old query, but no name', 25 | render: () => ( 26 |
27 | 29 |
30 | ) 31 | }, 32 | { 33 | name: 'Query composer that shows grouping and aggregate', 34 | render: () => ( 35 |
36 | 39 |
40 | ) 41 | } 42 | ] 43 | -------------------------------------------------------------------------------- /src/components/ExplorerQueryPicker/ExplorerQueryPicker.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .queryPicker { 11 | background-color: $explorerQueryBackgroundColor; 12 | border: 1px solid $explorerQueryBackgroundColor; 13 | border-radius: 5px; 14 | 15 | color: white; 16 | 17 | .queryContainer { 18 | background-color: white; 19 | color: black; 20 | 21 | .queryGroup { 22 | padding: 15px 0px 15px 15px; 23 | border: 1px solid #efefef; 24 | } 25 | 26 | .queryItem { 27 | padding-top: 8px; 28 | padding-bottom: 8px; 29 | } 30 | 31 | .queryLabel { 32 | color: $mainTextColor; 33 | } 34 | } 35 | 36 | .del { 37 | position: absolute; 38 | right: 24px; 39 | color: #d8d8d8; 40 | font-size: 18px; 41 | line-height: 18px; 42 | } 43 | 44 | .header { 45 | padding: 15px; 46 | height: 60px; 47 | position: relative; 48 | } 49 | 50 | .footer { 51 | height: 60px; 52 | position: relative; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/components/Field/Field.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .field { 11 | position: relative; 12 | border-style: solid; 13 | border-color: $borderGrey; 14 | border-width: 1px 1px 0 1px; 15 | min-height: 80px; 16 | background: white; 17 | 18 | &:last-of-type { 19 | border-bottom-width: 1px; 20 | } 21 | 22 | > pre[class*="language-"] { 23 | border-radius: 5px; 24 | } 25 | } 26 | 27 | .left { 28 | position: absolute; 29 | left: 0; 30 | height: 100%; 31 | } 32 | 33 | .centered { 34 | @include transform(translateY(-50%)); 35 | position: absolute; 36 | width: 100%; 37 | top: 50%; 38 | } 39 | 40 | .right { 41 | position: relative; 42 | min-height: 80px; 43 | text-align: right; 44 | padding: 0; 45 | } 46 | 47 | .input { 48 | margin: 25px 20px 0 0; 49 | } 50 | 51 | .header { 52 | min-height: 56px; 53 | height: 56px; 54 | 55 | .right { 56 | min-height: 56px; 57 | } 58 | 59 | .input { 60 | margin: 13px 20px 0 0; 61 | } 62 | 63 | & ~ .field { 64 | background: #f5f5f7; 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/components/Fieldset/Fieldset.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import Field from 'components/Field/Field.react'; 10 | import Fieldset from 'components/Fieldset/Fieldset.react'; 11 | import Label from 'components/Label/Label.react'; 12 | import Toggle from 'components/Toggle/Toggle.react'; 13 | 14 | export const component = Fieldset; 15 | 16 | export const demos = [ 17 | { 18 | render: () => ( 19 |
22 | } 24 | input={} /> 25 |
26 | ) 27 | } 28 | ]; 29 | -------------------------------------------------------------------------------- /src/components/Fieldset/Fieldset.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import PropTypes from 'lib/PropTypes'; 9 | import React from 'react'; 10 | import styles from 'components/Fieldset/Fieldset.scss'; 11 | 12 | let Fieldset = ({ legend, description, children }) => ( 13 |
14 |
{legend}
15 |
{description}
16 |
17 | {children} 18 |
19 |
20 | ); 21 | 22 | export default Fieldset; 23 | 24 | Fieldset.propTypes = { 25 | legend: PropTypes.node.describe( 26 | 'The main title of the Fieldset. It can be any renderable content.' 27 | ), 28 | description: PropTypes.node.describe( 29 | 'The secondary header of the Fieldset. It can be any renderable content.' 30 | ) 31 | }; 32 | -------------------------------------------------------------------------------- /src/components/Fieldset/Fieldset.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .fieldset { 11 | margin: 40px 0; 12 | } 13 | 14 | .legend { 15 | text-align: center; 16 | font-size: 22px; 17 | line-height: 26px; 18 | font-weight: 700; 19 | color: $blue; 20 | margin-bottom: 4px; 21 | } 22 | 23 | .description { 24 | @include DosisFont; 25 | text-align: center; 26 | font-size: 14px; 27 | line-height: 16px; 28 | color: $mainTextColor; 29 | width: 500px; 30 | margin: 0 auto 16px auto; 31 | } 32 | 33 | .fields { 34 | width: 650px; 35 | margin: 0 auto; 36 | 37 | & > div:first-of-type { 38 | border-top-left-radius: 5px; 39 | border-top-right-radius: 5px; 40 | } 41 | 42 | & > div:last-of-type { 43 | border-bottom-left-radius: 5px; 44 | border-bottom-right-radius: 5px; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/components/FileEditor/FileEditor.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .editor { 11 | background: white; 12 | white-space: nowrap; 13 | box-shadow: 0 1px 4px rgba(0,0,0,0.4); 14 | padding: 6px; 15 | } 16 | 17 | .delete, .upload { 18 | @include DosisFont; 19 | display: block; 20 | cursor: pointer; 21 | color: white; 22 | height: 20px; 23 | line-height: 20px; 24 | font-size: 14px; 25 | text-align: center; 26 | border-radius: 5px; 27 | } 28 | 29 | .delete { 30 | background: $red; 31 | margin-bottom: 6px; 32 | } 33 | 34 | .upload { 35 | position: relative; 36 | overflow: hidden; 37 | background: $blue; 38 | 39 | input { 40 | position: absolute; 41 | opacity: 0; 42 | top: 0; 43 | right: 0; 44 | left: -100px; 45 | bottom: 0; 46 | cursor: pointer; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/components/FileTree/FileTree.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | .directory, .file { 9 | color: #8fb9cf; 10 | height: 20px; 11 | line-height: 20px; 12 | font-size: 12px; 13 | cursor: pointer; 14 | } 15 | 16 | .directory { 17 | svg { 18 | vertical-align: middle; 19 | fill: #8fb9cf; 20 | margin-right: 6px; 21 | } 22 | 23 | > span { 24 | vertical-align: middle; 25 | } 26 | 27 | &:hover { 28 | color: white; 29 | 30 | svg { 31 | fill: white; 32 | } 33 | } 34 | } 35 | 36 | .contents { 37 | padding-left: 12px; 38 | } 39 | 40 | .file { 41 | display: block; 42 | 43 | &:hover { 44 | color: white; 45 | } 46 | } 47 | 48 | .current { 49 | color: white; 50 | } 51 | -------------------------------------------------------------------------------- /src/components/FormButton/FormButton.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import Field from 'components/Field/Field.react'; 10 | import Fieldset from 'components/Fieldset/Fieldset.react'; 11 | import FormButton from 'components/FormButton/FormButton.react'; 12 | import Label from 'components/Label/Label.react'; 13 | 14 | export const component = FormButton; 15 | 16 | export const demos = [ 17 | { 18 | render: () => ( 19 |
20 | } 22 | input={} /> 23 | } 25 | input={} /> 26 |
27 | ) 28 | } 29 | ]; 30 | -------------------------------------------------------------------------------- /src/components/FormButton/FormButton.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import Button from 'components/Button/Button.react'; 9 | import PropTypes from 'lib/PropTypes'; 10 | import React from 'react'; 11 | import styles from 'components/FormButton/FormButton.scss'; 12 | 13 | let FormButton = (props) => ( 14 |
15 |
17 | ); 18 | 19 | let { primary, width, ...otherPropTypes } = Button.propTypes; 20 | FormButton.propTypes = otherPropTypes; 21 | 22 | export default FormButton; 23 | -------------------------------------------------------------------------------- /src/components/FormButton/FormButton.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .input { 11 | width: 100%; 12 | height: 80px; 13 | text-align: center; 14 | padding-top: 25px; 15 | background: $inputBackgroundColor; 16 | } -------------------------------------------------------------------------------- /src/components/FormModal/FormModal.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import FormModal from 'components/FormModal/FormModal.react'; 9 | 10 | export const component = FormModal; 11 | export const demos = []; 12 | -------------------------------------------------------------------------------- /src/components/FormNote/FormNote.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import { Directions } from 'lib/Constants'; 9 | import PropTypes from 'lib/PropTypes'; 10 | import React from 'react'; 11 | import SliderWrap from 'components/SliderWrap/SliderWrap.react'; 12 | import styles from 'components/FormNote/FormNote.scss'; 13 | 14 | let FormNote = ({ show, children, color, ...other }) => ( 15 | 16 |
{children}
17 |
18 | ); 19 | 20 | FormNote.propTypes = { 21 | show: PropTypes.bool, 22 | color: PropTypes.oneOf(['blue', 'green', 'orange', 'red']) 23 | }; 24 | 25 | export default FormNote; 26 | -------------------------------------------------------------------------------- /src/components/FormNote/FormNote.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .note { 11 | color: white; 12 | font-size: 12px; 13 | text-align: center; 14 | line-height: 30px; 15 | min-height: 30px; 16 | } 17 | 18 | .blue { 19 | background: $blue; 20 | } 21 | .green { 22 | background: $green; 23 | } 24 | .orange { 25 | background: $orange; 26 | } 27 | .red { 28 | background: $red; 29 | } 30 | -------------------------------------------------------------------------------- /src/components/FourOhFour/FourOhFour.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .fourOhFour { 11 | height: 100vh; 12 | background: #06283d; 13 | color: white; 14 | text-align: center; 15 | } 16 | 17 | .wrap { 18 | position: absolute; 19 | width: 100%; 20 | top: 50%; 21 | -webkit-transform: translateY(-50%); 22 | transform: translateY(-50%); 23 | } 24 | 25 | .error { 26 | @include DosisFont; 27 | font-size: 240px; 28 | } 29 | 30 | .emoji { 31 | position: relative; 32 | display: inline-block; 33 | top: 40px; 34 | background-image: url(components/FourOhFour/sprite.png); 35 | width: 200px; 36 | height: 230px; 37 | background-size: 6000px; 38 | background-repeat: no-repeat; 39 | } 40 | 41 | .message { 42 | font-size: 28px; 43 | } 44 | 45 | .back { 46 | margin-top: 40px; 47 | } 48 | -------------------------------------------------------------------------------- /src/components/FourOhFour/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongjhih/docker-parse-dashboard/b9042a14e512dc09f90fff7d5bd3dfda5617e78f/src/components/FourOhFour/sprite.png -------------------------------------------------------------------------------- /src/components/GeoPointEditor/GeoPointEditor.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .editor { 11 | position: absolute; 12 | top: 0; 13 | left: 0; 14 | box-shadow: 0 1px 4px rgba(0,0,0,0.4); 15 | 16 | input { 17 | @include MonospaceFont; 18 | width: 50%; 19 | height: 30px; 20 | border: none; 21 | outline: none; 22 | padding: 0 4px; 23 | font-size: 12px; 24 | 25 | &:first-child { 26 | border-right: 1px solid #e3e3ea; 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /src/components/GeoPointInput/GeoPointInput.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .geopoint { 11 | width: 100%; 12 | background: $inputBackgroundColor; 13 | height: 80px; 14 | } 15 | 16 | .labels { 17 | height: 30px; 18 | 19 | span { 20 | display: inline-block; 21 | width: 50%; 22 | height: 30px; 23 | line-height: 30px; 24 | text-align: center; 25 | color: $secondaryTextColor; 26 | font-size: 14px; 27 | } 28 | } 29 | 30 | .inputs { 31 | height: 50px; 32 | 33 | input { 34 | border: none; 35 | outline: none; 36 | background: none; 37 | height: 50px; 38 | width: 50%; 39 | font-size: 16px; 40 | text-align: center; 41 | } 42 | } -------------------------------------------------------------------------------- /src/components/Icon/Icon.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import Icon from 'components/Icon/Icon.react'; 9 | import React from 'react'; 10 | 11 | export const component = Icon; 12 | 13 | export const demos = [ 14 | { 15 | render: () => ( 16 |
17 | 18 | 19 | 20 | 21 |
22 | ) 23 | } 24 | ]; 25 | -------------------------------------------------------------------------------- /src/components/Icon/Icon.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import PropTypes from 'lib/PropTypes'; 9 | import React from 'react'; 10 | 11 | let Icon = ({ name, fill, width, height }) => { 12 | let props = { 13 | width: width, 14 | height: height 15 | }; 16 | if (fill) { 17 | props.fill = fill; 18 | } 19 | return ( 20 | 21 | 22 | 23 | ); 24 | }; 25 | 26 | export default Icon; 27 | 28 | Icon.propTypes = { 29 | name: PropTypes.string.isRequired.describe( 30 | 'The icon name. This will be the name found in the ' 31 | ), 32 | width: PropTypes.number.isRequired.describe( 33 | 'The icon width, in pixels.' 34 | ), 35 | height: PropTypes.number.isRequired.describe( 36 | 'The icon height, in pixels.' 37 | ), 38 | fill: PropTypes.string.describe( 39 | 'A valid color, used as the fill property for the SVG.' 40 | ) 41 | }; 42 | -------------------------------------------------------------------------------- /src/components/InlineSubmitInput/InlineSubmitInput.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import Field from 'components/Field/Field.react'; 10 | import Fieldset from 'components/Fieldset/Fieldset.react'; 11 | import Label from 'components/Label/Label.react'; 12 | import InlineSubmitInput from 'components/InlineSubmitInput/InlineSubmitInput.react'; 13 | 14 | export const component = InlineSubmitInput; 15 | 16 | export const demos = [ 17 | { 18 | render: () => ( 19 |
20 | } 22 | input={ alert('submitting: ' + v)} 24 | submitButtonText='ADD' />} /> 25 | } 27 | input={ v.length > 5} 29 | placeholder='Must be longer than 5 letters' 30 | onSubmit={(v) => alert('submitting: ' + v)} 31 | submitButtonText='ADD' />} /> 32 |
33 | ) 34 | } 35 | ]; 36 | -------------------------------------------------------------------------------- /src/components/InlineSubmitInput/InlineSubmitInput.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .wrapper { 11 | background: $inputBackgroundColor; 12 | padding: 0px 5px; 13 | } 14 | 15 | .input_padded { 16 | padding-right: 50px; 17 | } 18 | 19 | .button { 20 | @include DosisFont; 21 | position: absolute; 22 | top: 30px; 23 | right: 15px; 24 | height: 20px; 25 | line-height: 20px; 26 | border: 1px solid #159cee; 27 | outline: 0; 28 | text-decoration: none; 29 | text-align: center; 30 | border-radius: 5px; 31 | cursor: pointer; 32 | padding: 0px 7px; 33 | font-size: 10px; 34 | color: #159cee; 35 | } 36 | -------------------------------------------------------------------------------- /src/components/JsonPrinter/JsonPrinter.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import CodeSnippet from 'components/CodeSnippet/CodeSnippet.react'; 9 | import PropTypes from 'lib/PropTypes'; 10 | import React from 'react'; 11 | 12 | let JsonPrinter = ({ object }) => ( 13 | 18 | ) 19 | 20 | export default JsonPrinter; 21 | 22 | JsonPrinter.propTypes = { 23 | object: PropTypes.any.describe( 24 | 'The JavaScript object to stringify and print.' 25 | ) 26 | }; 27 | -------------------------------------------------------------------------------- /src/components/KeyField/KeyField.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import Field from 'components/Field/Field.react'; 10 | import Fieldset from 'components/Fieldset/Fieldset.react'; 11 | import KeyField from 'components/KeyField/KeyField.react'; 12 | import Label from 'components/Label/Label.react'; 13 | 14 | export const component = KeyField; 15 | 16 | export const demos = [ 17 | { 18 | render: () => ( 19 |
20 | } 22 | input={abc123qwerty4567890} /> 23 | } 25 | input={} /> 26 |
27 | ) 28 | } 29 | ]; 30 | -------------------------------------------------------------------------------- /src/components/KeyField/KeyField.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .key { 11 | @include MonospaceFont; 12 | background: $inputBackgroundColor; 13 | width: 100%; 14 | height: 80px; 15 | line-height: 80px; 16 | font-size: 12px; 17 | text-align: center; 18 | } -------------------------------------------------------------------------------- /src/components/Label/Label.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import Field from 'components/Field/Field.react'; 10 | import Label from 'components/Label/Label.react'; 11 | 12 | export const component = Label; 13 | 14 | export const demos = [ 15 | { 16 | render: () => ( 17 | } 19 | input={null} /> 20 | ) 21 | } 22 | ]; 23 | -------------------------------------------------------------------------------- /src/components/Label/Label.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import { centered } from 'components/Field/Field.scss'; 9 | import PropTypes from 'lib/PropTypes'; 10 | import React from 'react'; 11 | import styles from 'components/Label/Label.scss'; 12 | 13 | let Label = (props) => { 14 | let padding = (props.padding || 20) + 'px'; 15 | return ( 16 |
19 |
{props.text}
20 | {props.description ?
{props.description}
: null} 21 |
22 | ); 23 | }; 24 | 25 | export default Label; 26 | 27 | Label.PropTypes = { 28 | text: PropTypes.node.describe( 29 | 'The main text/node of the label.' 30 | ), 31 | description: PropTypes.node.describe( 32 | 'The secondary text/node of the label.' 33 | ), 34 | padding: PropTypes.number.describe( 35 | 'Allows you to override the left-right padding of the label.' 36 | ) 37 | }; 38 | -------------------------------------------------------------------------------- /src/components/Label/Label.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .label { 11 | font-size: 13px; 12 | } 13 | 14 | .text { 15 | font-weight: 700; 16 | } 17 | 18 | .description { 19 | margin-top: 2px; 20 | color: $secondaryTextColor; 21 | line-height: 13px; 22 | } 23 | -------------------------------------------------------------------------------- /src/components/LiveReload/LiveReload.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import LiveReload from 'components/LiveReload/LiveReload.react'; 9 | import Parse from 'parse'; 10 | import React from 'react'; 11 | 12 | export const component = LiveReload; 13 | export const demos = [ 14 | { 15 | render: () => Parse.Promise.as(Math.random())} 17 | render={num => {num}} 18 | refreshIntervalMillis={100} 19 | initialData={0}/>, 20 | }, 21 | ]; 22 | -------------------------------------------------------------------------------- /src/components/Loader/Loader.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import { center } from 'stylesheets/base.scss'; 9 | import Loader from 'components/Loader/Loader.react'; 10 | import React from 'react'; 11 | 12 | export const component = Loader; 13 | 14 | export const demos = [ 15 | { 16 | render() { 17 | return ( 18 |
24 | 25 |
26 | ); 27 | } 28 | } 29 | ]; 30 | -------------------------------------------------------------------------------- /src/components/Loader/Loader.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .loader { 11 | position: relative; 12 | display: block; 13 | width: 140px; 14 | height: 140px; 15 | 16 | div { 17 | position: absolute; 18 | width: 20px; 19 | height: 20px; 20 | border-radius: 100%; 21 | transform: translate(-50%, -50%); 22 | 23 | &:nth-child(3n) { 24 | background: $red; 25 | } 26 | &:nth-child(3n + 1) { 27 | background: $green; 28 | } 29 | &:nth-child(3n + 2) { 30 | background: $blue; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/components/LoaderContainer/LoaderContainer.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | .loaderContainer { 9 | position: relative; 10 | .loaderParent { 11 | visibility: hidden; 12 | background: rgba(255, 255, 255, 0.7); 13 | position: absolute; 14 | width: 100%; 15 | height: 100%; 16 | top: 0; 17 | left: 0; 18 | &.visible { 19 | visibility: visible; 20 | } 21 | &.solid { 22 | background: white; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/components/LoaderDots/LoaderDots.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import LoaderDots from 'components/LoaderDots/LoaderDots.react'; 10 | 11 | export const component = LoaderDots; 12 | 13 | export const demos = [ 14 | { 15 | name: 'Loader Dots', 16 | render: () => ( 17 |
18 | 19 |
20 | ) 21 | } 22 | ]; 23 | -------------------------------------------------------------------------------- /src/components/LoaderDots/LoaderDots.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import styles from 'components/LoaderDots/LoaderDots.scss'; 10 | 11 | export default class LoaderDots extends React.Component { 12 | constructor() { 13 | super(); 14 | } 15 | 16 | render() { 17 | return ( 18 |
19 | 20 | 21 | 22 |
23 | ); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/components/LoaderDots/LoaderDots.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | $dotSize: 8px; 11 | 12 | .loaderDots { 13 | span { 14 | @include animation-name(blink); 15 | @include animation-duration(1.4s); 16 | @include animation-iteration-count(infinite); 17 | @include animation-fill-mode(both); 18 | 19 | display: inline-block; 20 | width: $dotSize; 21 | height: $dotSize; 22 | border-radius: $dotSize; 23 | background-color: black; 24 | margin: 4px; 25 | 26 | &:nth-child(2) { 27 | @include animation-delay(0.2s); 28 | } 29 | 30 | &:nth-child(3) { 31 | @include animation-delay(0.4s); 32 | } 33 | } 34 | } 35 | 36 | @include keyframes(blink) { 37 | 0% { 38 | opacity: 0.2; 39 | } 40 | 20% { 41 | opacity: 1; 42 | } 43 | 100% { 44 | opacity: 0.2; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/components/LogView/LogView.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import PropTypes from 'lib/PropTypes'; 9 | import React from 'react'; 10 | import styles from 'components/LogView/LogView.scss'; 11 | 12 | let LogView = (props) => { 13 | return ( 14 |
    15 | {props.children} 16 |
17 | ); 18 | } 19 | 20 | export default LogView; 21 | -------------------------------------------------------------------------------- /src/components/LogView/LogView.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .view { 11 | background: $logViewBackgroundColor; 12 | } 13 | -------------------------------------------------------------------------------- /src/components/LogView/LogViewEntry.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import LogViewEntry from 'components/LogView/LogViewEntry.react'; 10 | 11 | export const component = LogViewEntry; 12 | 13 | export const demos = [ 14 | { 15 | render: () => ( 16 | 17 | ) 18 | } 19 | ]; 20 | -------------------------------------------------------------------------------- /src/components/LogView/LogViewEntry.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .entry { 11 | @include MonospaceFont; 12 | font-size: 14px; 13 | list-style: none; 14 | margin-bottom: 15px; 15 | 16 | &.error { 17 | color: red; 18 | } 19 | 20 | .content { 21 | white-space: pre-wrap; 22 | } 23 | 24 | .time { 25 | color: green; 26 | } 27 | 28 | //TODO: handle keywords that should be highlighted - use global vars for colors 29 | .highlight { 30 | 31 | &.error { 32 | color: red; 33 | } 34 | 35 | &.info { 36 | color: purple; 37 | } 38 | 39 | &.warning { 40 | color: orange; 41 | } 42 | 43 | &.success { 44 | color: green; 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/components/LoginRow/LoginRow.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import styles from 'components/LoginRow/LoginRow.scss'; 10 | 11 | let LoginRow = ({ label, input, extra }) => ( 12 | 17 | ); 18 | 19 | export default LoginRow; 20 | -------------------------------------------------------------------------------- /src/components/LoginRow/LoginRow.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | .row { 9 | display: block; 10 | position: relative; 11 | height: 50px; 12 | border-bottom: 1px solid #e0e0e1; 13 | } 14 | 15 | .label { 16 | width: 110px; 17 | background: #f9f9fa; 18 | font-size: 13px; 19 | font-weight: 700; 20 | height: 49px; 21 | line-height: 49px; 22 | float: left; 23 | padding: 0 0 0 20px; 24 | text-align: left; 25 | } 26 | 27 | .input { 28 | margin-left: 110px; 29 | height: 49px; 30 | background: #f0f4f6; 31 | 32 | input { 33 | display: block; 34 | border: none; 35 | outline: none; 36 | background: transparent; 37 | height: 49px; 38 | line-height: 49px; 39 | padding: 0 6px; 40 | width: 100%; 41 | font-size: 13px; 42 | 43 | &:focus { 44 | background: rgba(6,40,61,0.1); 45 | } 46 | } 47 | } 48 | 49 | .extra { 50 | position: absolute; 51 | top: 0; 52 | right: 0; 53 | } 54 | -------------------------------------------------------------------------------- /src/components/Markdown/Markdown.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import Markdown from 'components/Markdown/Markdown.react'; 10 | 11 | export const component = Markdown; 12 | 13 | export const demos = [ 14 | { 15 | name: 'Demo name', 16 | render: () => { 17 | let content = ` 18 | **bold** *italic* 19 | 20 | ~~This code is a mistake~~ 21 | 22 | > Some quote 23 | 24 | \`code\` 25 | 26 | # Super heading dude # 27 | 28 | ### These components are built by: ### 29 | 1. Andrew 30 | 2. Drew 31 | 3. Gogo 32 | 4. Peter 33 | 34 | \`\`\` 35 | some code block 36 | \`\`\` 37 | `; 38 | return ( 39 | 41 | ); 42 | } 43 | } 44 | ]; 45 | -------------------------------------------------------------------------------- /src/components/MoneyInput/MoneyInput.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import Field from 'components/Field/Field.react'; 10 | import Fieldset from 'components/Fieldset/Fieldset.react'; 11 | import Label from 'components/Label/Label.react'; 12 | import MoneyInput from 'components/MoneyInput/MoneyInput.react'; 13 | 14 | class Wrapper extends React.Component { 15 | render() { 16 | return
{this.props.children}
; 17 | } 18 | } 19 | 20 | export const component = MoneyInput; 21 | 22 | export const demos = [ 23 | { 24 | render: () => ( 25 | 26 |
27 | } 29 | input={ {}} />} /> 30 | } 32 | input={ {}} />} /> 33 |
34 |
35 | ) 36 | } 37 | ]; 38 | -------------------------------------------------------------------------------- /src/components/MoneyInput/MoneyInput.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import PropTypes from 'lib/PropTypes'; 9 | import React from 'react'; 10 | import styles from 'components/MoneyInput/MoneyInput.scss'; 11 | 12 | let MoneyInput = ({ enabled = true, value, onChange = () => {}}) => { 13 | return { 19 | onChange(e.nativeEvent.target.value); 20 | }} 21 | /> 22 | } 23 | 24 | export default MoneyInput; 25 | 26 | MoneyInput.propTypes = { 27 | enabled: PropTypes.bool.describe( 28 | 'Determines whether the input is enabled.' 29 | ), 30 | onChange: PropTypes.func.describe( 31 | 'A function fired when the input is changed. It receives the new value as its only parameter.' 32 | ), 33 | value: PropTypes.number.isRequired.describe( 34 | 'The current value of the controlled input.' 35 | ), 36 | }; 37 | -------------------------------------------------------------------------------- /src/components/MoneyInput/MoneyInput.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .moneyInput { 11 | @include DosisFont; 12 | border: 0; 13 | outline: 0; 14 | background: $inputBackgroundColor; 15 | font-size: 22px; 16 | width: 100%; 17 | padding: 6px; 18 | vertical-align: top; 19 | resize: none; 20 | height: 80px; 21 | color: $green; 22 | text-align: center; 23 | 24 | &:focus { 25 | @include placeholder { 26 | opacity: 0; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/components/MultiSelect/MultiSelectOption.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import Icon from 'components/Icon/Icon.react'; 9 | import PropTypes from 'lib/PropTypes'; 10 | import React from 'react'; 11 | import styles from 'components/MultiSelect/MultiSelect.scss'; 12 | 13 | let MultiSelectOption = ({ checked, children, ...other }) => ( 14 |
15 | {children} 16 | {checked ? 17 |
18 | 19 |
: 20 |
21 | } 22 |
23 | ); 24 | 25 | export default MultiSelectOption; 26 | -------------------------------------------------------------------------------- /src/components/NumberEditor/NumberEditor.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .editor { 11 | position: absolute; 12 | top: 0; 13 | left: 0; 14 | box-shadow: 0 1px 4px rgba(0,0,0,0.4); 15 | 16 | input { 17 | @include MonospaceFont; 18 | width: 100%; 19 | height: 30px; 20 | border: none; 21 | outline: none; 22 | padding: 0 4px; 23 | font-size: 12px; 24 | } 25 | } -------------------------------------------------------------------------------- /src/components/PasswordStrength/PasswordStrength.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import styles from 'components/PasswordStrength/PasswordStrength.scss'; 10 | 11 | const tips = [ 12 | 'It should be at least 8 characters', 13 | 'Consider making your password stronger', 14 | 'Looks great' 15 | ]; 16 | 17 | let PasswordStrength = ({ strength }) => { 18 | return ( 19 |
20 |
21 |
22 |
23 | {strength > -1 ?
{tips[strength]}
: null} 24 |
25 | ); 26 | }; 27 | 28 | export default PasswordStrength; 29 | -------------------------------------------------------------------------------- /src/components/Pill/Pill.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import Pill from 'components/Pill/Pill.react'; 10 | 11 | export const component = Pill; 12 | 13 | export const demos = [ 14 | { 15 | render: () => ( 16 |
17 | 18 | 19 | 20 |
21 | ) 22 | } 23 | ]; 24 | -------------------------------------------------------------------------------- /src/components/Pill/Pill.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import styles from 'components/Pill/Pill.scss'; 10 | //TODO: refactor, may want to move onClick outside or need to make onClick able to handle link/button a11y 11 | let Pill = ({ value, onClick }) => ( 12 | {value} 13 | ); 14 | 15 | export default Pill; 16 | -------------------------------------------------------------------------------- /src/components/Pill/Pill.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .pill { 11 | @include MonospaceFont; 12 | display: inline-block; 13 | background: #D5E5F2; 14 | color: #0E69A1; 15 | height: 20px; 16 | line-height: 20px; 17 | border-radius: 10px; 18 | font-size: 11px; 19 | padding: 0 8px; 20 | width: 100%; 21 | text-align: center; 22 | overflow: hidden; 23 | text-overflow: ellipsis; 24 | 25 | &:hover { 26 | background: #BFD4E5; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/components/PlatformCard/PlatformCard.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .card { 11 | width: 200px; 12 | height: 80px; 13 | background-color: $lightGrey; 14 | border-radius: 5px; 15 | padding: 10px; 16 | display: table; 17 | table-layout: fixed; 18 | } 19 | 20 | .left { 21 | display: table-cell; 22 | width: 50px; 23 | vertical-align: middle; 24 | } 25 | 26 | .right { 27 | display: table-cell; 28 | padding-left: 20px; 29 | vertical-align: middle; 30 | } 31 | 32 | .name { 33 | color: $platformCardTextColor; 34 | } 35 | 36 | .subtitle { 37 | color: $platformCardSecondaryTextColor; 38 | } 39 | -------------------------------------------------------------------------------- /src/components/Popover/Popover.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | #popover_wrapper, #fixed_wrapper { 11 | position: absolute; 12 | top: 0; 13 | left: 0; 14 | bottom: 0; 15 | right: 0; 16 | pointer-events: none; 17 | 18 | & > div { 19 | position: absolute; 20 | pointer-events: all; 21 | } 22 | } 23 | 24 | .transition{ 25 | @include animation('fade-in .2s linear'); 26 | opacity: 1; 27 | } 28 | 29 | #popover_wrapper { 30 | position: absolute; 31 | } 32 | 33 | #fixed_wrapper { 34 | position: fixed; 35 | } 36 | 37 | @include keyframes(fade-in) { 38 | 0% { 39 | opacity: 0; 40 | } 41 | } -------------------------------------------------------------------------------- /src/components/PushAudienceDialog/InstallationCondition.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .conditionInput { 11 | float: left; 12 | width: 210px; 13 | border-right: 2px solid white; 14 | } 15 | 16 | //custom label 17 | .description { 18 | margin-top: 2px; 19 | color: $pink; 20 | cursor: pointer; 21 | } 22 | 23 | .valueInput { 24 | width: 198px; 25 | border-right: 0; 26 | } 27 | 28 | .date { 29 | input { 30 | position: relative; 31 | background: #f6fafb; 32 | font-size: 16px; 33 | height: 80px; 34 | width: 100%; 35 | overflow: hidden; 36 | border: 0; 37 | padding: 0 5px; 38 | } 39 | } 40 | 41 | .empty { 42 | position: relative; 43 | background: #B0B1B1; 44 | font-size: 30px; 45 | line-height: 80px; 46 | text-align: center; 47 | height: 80px; 48 | width: 100%; 49 | overflow: hidden; 50 | cursor: not-allowed; 51 | } 52 | -------------------------------------------------------------------------------- /src/components/PushAudienceDialog/PushAudienceDialog.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .addConditions { 11 | text-align: center; 12 | padding: 25px 20px; 13 | border-style: solid; 14 | border-color: $borderGrey; 15 | border-width: 1px 1px 0 1px; 16 | 17 | &.nonEmptyConditions { 18 | padding: 4px; 19 | a { 20 | border: none; 21 | } 22 | } 23 | } 24 | 25 | .footer { 26 | padding: 17px 28px; 27 | text-align: right; 28 | 29 | &:nth-child(2) { 30 | text-align: center; 31 | } 32 | 33 | > * { 34 | margin: 0 12px 0 0; 35 | 36 | &:last-child { 37 | margin-right: 0; 38 | } 39 | } 40 | } 41 | 42 | .audienceSize { 43 | float: left; 44 | text-align: left; 45 | 46 | .audienceSizeText { 47 | font-weight: 700; 48 | font-size: 10px; 49 | letter-spacing: 1.6px; 50 | color: $secondaryTextColor; 51 | } 52 | 53 | .audienceSizeDescription { 54 | margin-top: 2px; 55 | color: $blue; 56 | } 57 | } 58 | 59 | .filter { 60 | max-height: 50vh; 61 | overflow-y: scroll; 62 | } 63 | -------------------------------------------------------------------------------- /src/components/PushAudiencesSelector/PushAudiencesOption.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import PushAudiencesOption from 'components/PushAudiencesSelector/PushAudiencesOption.react'; 10 | 11 | export const component = PushAudiencesOption; 12 | 13 | let mockData = { 14 | id: '1', 15 | name: 'Everyone', 16 | createdAt: new Date(1444757195683) 17 | }; 18 | 19 | export const demos = [ 20 | { 21 | render() { 22 | return ( 23 | 30 | ); 31 | } 32 | } 33 | ]; 34 | -------------------------------------------------------------------------------- /src/components/PushAudiencesSelector/PushAudiencesSelector.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | .container { 10 | position: relative; 11 | width: 100%; 12 | overflow: hidden; 13 | min-height: 200px; 14 | .header { 15 | position: absolute; 16 | top: 0; 17 | left: 0; 18 | width: 100%; 19 | color: white; 20 | background: #66637A; 21 | padding: 8px 20px 6px 20px; 22 | font-size: 14px; 23 | } 24 | .body { 25 | padding-top: 31px; 26 | max-height: 400px; 27 | overflow: auto; 28 | } 29 | .cell { 30 | display: inline-block; 31 | } 32 | .col1 { 33 | width: 50%; 34 | } 35 | .col2 { 36 | width: 20%; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/components/PushExperimentDropdown/PushExperimentDropdown.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import PushExperimentDropdown from 'components/PushExperimentDropdown/PushExperimentDropdown.react'; 10 | 11 | export const component = PushExperimentDropdown; 12 | 13 | class PushExperimentDropdownDemo extends React.Component { 14 | constructor() { 15 | super(); 16 | this.state = { color: 'blue' }; 17 | } 18 | 19 | render() { 20 | return ( 21 | this.setState({ color })} 27 | options={[{key: 'Group A (winner)', style: {color: 'green'} }, {key: 'Group B (loser)', style: {color: 'red'}}]} /> 28 | ); 29 | } 30 | } 31 | 32 | export const demos = [ 33 | { 34 | render: () => ( 35 |
36 | 37 |
38 | ) 39 | }, 40 | ]; 41 | -------------------------------------------------------------------------------- /src/components/PushPreview/android.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongjhih/docker-parse-dashboard/b9042a14e512dc09f90fff7d5bd3dfda5617e78f/src/components/PushPreview/android.jpg -------------------------------------------------------------------------------- /src/components/PushPreview/iphone.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongjhih/docker-parse-dashboard/b9042a14e512dc09f90fff7d5bd3dfda5617e78f/src/components/PushPreview/iphone.jpg -------------------------------------------------------------------------------- /src/components/PushPreview/laptop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongjhih/docker-parse-dashboard/b9042a14e512dc09f90fff7d5bd3dfda5617e78f/src/components/PushPreview/laptop.jpg -------------------------------------------------------------------------------- /src/components/PushPreview/windowsphone.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongjhih/docker-parse-dashboard/b9042a14e512dc09f90fff7d5bd3dfda5617e78f/src/components/PushPreview/windowsphone.jpg -------------------------------------------------------------------------------- /src/components/RadioButton/RadioButton.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import RadioButton from 'components/RadioButton/RadioButton.react'; 10 | 11 | export const component = RadioButton; 12 | 13 | export const demos = [ 14 | { 15 | name: 'Unchecked State', 16 | render() { 17 | return ( 18 | 19 | ); 20 | }, 21 | }, 22 | { 23 | name: 'Checked State', 24 | render() { 25 | return ( 26 | 27 | ); 28 | } 29 | }, 30 | { 31 | name: 'Disabled State [styles tbd]', 32 | render() { 33 | return ( 34 | 35 | ); 36 | } 37 | }, 38 | { 39 | name: 'Disabled Checked State [styles tbd]', 40 | render() { 41 | return ( 42 | 43 | ); 44 | } 45 | } 46 | ]; 47 | -------------------------------------------------------------------------------- /src/components/RadioButton/RadioButton.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import PropTypes from 'lib/PropTypes'; 9 | import React from 'react'; 10 | import styles from 'components/RadioButton/RadioButton.scss'; 11 | 12 | let RadioButton = (props) => { 13 | 14 | return ( 15 |
16 | 17 | 18 |
19 | ); 20 | } 21 | 22 | export default RadioButton; 23 | -------------------------------------------------------------------------------- /src/components/RadioButton/RadioButton.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | .radiobutton { 10 | display: inline-block; 11 | margin-right: 12px; 12 | input[type=radio] { 13 | opacity: 0; 14 | width: 0; 15 | height: 0; 16 | padding: 0; 17 | margin: 0; 18 | position: absolute; 19 | } 20 | span { 21 | position: relative; 22 | display: inline-block; 23 | width: 20px; 24 | height: 20px; 25 | background: #d0d0d0; 26 | border-radius: 10px; 27 | cursor: pointer; 28 | top: 4px; 29 | 30 | &:hover { 31 | background: #b0b0b0; 32 | } 33 | 34 | &:after { 35 | position: absolute; 36 | content: ''; 37 | width: 0; 38 | height: 0; 39 | border-radius: 100%; 40 | background: white; 41 | 42 | top: 50%; 43 | left: 50%; 44 | @include transform(translate(-50%, -50%)); 45 | 46 | transition: all 0.2s cubic-bezier(0, 0, 0.74, 2.2); 47 | } 48 | } 49 | 50 | input:checked + span { 51 | background: #5298fc; 52 | 53 | &:after { 54 | width: 8px; 55 | height: 8px; 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/components/ReleaseInfo/ReleaseInfo.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import howLongAgo from 'lib/howLongAgo'; 9 | 10 | let ReleaseInfo = ({ release }) => { 11 | if (!release) { 12 | return ''; 13 | } 14 | 15 | return [ 16 | 'Latest deploy: ', 17 | release.version, 18 | ' \u2022 ', 19 | howLongAgo(release.deployedAt), 20 | ' \u2022 SDK Version: ', 21 | release.parseVersion 22 | ].join(''); 23 | }; 24 | 25 | export default ReleaseInfo; 26 | -------------------------------------------------------------------------------- /src/components/SaveButton/SaveButton.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .shake { 11 | @include transform(translateX(0)); 12 | @include animation('shake 0.6s'); 13 | } 14 | 15 | @include keyframes (shake) { 16 | 0% { 17 | @include transform(translateX(-5px)); 18 | } 19 | 20% { 20 | @include transform(translateX(5px)); 21 | } 22 | 40% { 23 | @include transform(translateX(-5px)); 24 | } 25 | 60% { 26 | @include transform(translateX(5px)); 27 | } 28 | 80% { 29 | @include transform(translateX(-5px)); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/components/SegmentSelect/SegmentSelect.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import SegmentSelect from 'components/SegmentSelect/SegmentSelect.react'; 10 | 11 | export const component = SegmentSelect; 12 | 13 | class Demo extends React.Component { 14 | constructor() { 15 | super(); 16 | this.state = { 17 | current: null 18 | }; 19 | } 20 | 21 | render() { 22 | return ( 23 | this.setState({ current })} /> 27 | ); 28 | } 29 | } 30 | 31 | export const demos = [ 32 | { 33 | render: () => ( 34 | 35 | ) 36 | } 37 | ]; 38 | -------------------------------------------------------------------------------- /src/components/SegmentSelect/SegmentSelect.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import PropTypes from 'lib/PropTypes'; 9 | import React from 'react'; 10 | import styles from 'components/SegmentSelect/SegmentSelect.scss'; 11 | 12 | let SegmentSelect = ({ values, current, onChange }) => ( 13 | 27 | ); 28 | 29 | export default SegmentSelect; 30 | 31 | SegmentSelect.propTypes = { 32 | values: PropTypes.arrayOf(PropTypes.string).isRequired.describe( 33 | 'An array of strings that can be selected' 34 | ), 35 | current: PropTypes.string.describe( 36 | 'The currently selected value.' 37 | ), 38 | onChange: PropTypes.func.isRequired.describe( 39 | 'A function that is called whenever a new segment is selected. The selected value is passed as the only parameter.' 40 | ) 41 | }; 42 | -------------------------------------------------------------------------------- /src/components/SegmentSelect/SegmentSelect.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .row { 11 | display: inline-block; 12 | height: 24px; 13 | 14 | a { 15 | @include DosisFont; 16 | display: inline-block; 17 | height: 24px; 18 | line-height: 24px; 19 | padding: 0 12px; 20 | font-size: 12px; 21 | border-style: solid; 22 | border-color: $blue; 23 | border-width: 1px 0 1px 1px; 24 | color: $blue; 25 | 26 | &:first-child { 27 | border-radius: 5px 0 0 5px; 28 | } 29 | &:last-child { 30 | border-radius: 0 5px 5px 0; 31 | border-right-width: 1px; 32 | } 33 | 34 | &.current { 35 | background: $blue; 36 | color: white; 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/components/Sidebar/SidebarAction.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import styles from 'components/Sidebar/Sidebar.scss'; 10 | 11 | export default class SidebarAction { 12 | constructor(text, fn) { 13 | this.text = text; 14 | this.fn = fn; 15 | } 16 | 17 | renderButton() { 18 | return ( 19 | 22 | {this.text} 23 | 24 | ); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/components/Sidebar/SidebarHeader.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import AccountManager from 'lib/AccountManager'; 9 | import Icon from 'components/Icon/Icon.react'; 10 | import { Link } from 'react-router'; 11 | import React from 'react'; 12 | import styles from 'components/Sidebar/Sidebar.scss'; 13 | // get the package.json environment variable 14 | const version = process.env.version; 15 | 16 | let SidebarHeader = ({}) => 17 |
18 | 19 | 20 | 21 | 22 |
23 |
Parse Dashboard {version}
24 |
25 | 26 |
27 | 28 | export default SidebarHeader 29 | -------------------------------------------------------------------------------- /src/components/Sidebar/SidebarSection.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import Icon from 'components/Icon/Icon.react'; 9 | import { Link } from 'react-router'; 10 | import React from 'react'; 11 | import styles from 'components/Sidebar/Sidebar.scss'; 12 | 13 | let SidebarSection = ({ active, children, name, link, icon, style }) => { 14 | let classes = [styles.section]; 15 | if (active) { 16 | classes.push(styles.active); 17 | } 18 | let iconContent = null; 19 | if (icon) { 20 | iconContent = ; 21 | } 22 | return ( 23 |
24 | {active ? 25 |
{iconContent}{name}
: 26 | {iconContent}{name}} 27 | 28 | {children ?
{children}
: null} 29 |
30 | ); 31 | }; 32 | 33 | export default SidebarSection; 34 | -------------------------------------------------------------------------------- /src/components/Sidebar/SidebarSubItem.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import { Link } from 'react-router'; 9 | import React from 'react'; 10 | import styles from 'components/Sidebar/Sidebar.scss'; 11 | 12 | let SidebarSubItem = ({ active, name, action, link, children }) => { 13 | if (active) { 14 | return ( 15 |
16 |
17 | {name} 18 | {action ? action.renderButton() : null} 19 |
20 |
21 | {children} 22 |
23 |
24 | ); 25 | } 26 | 27 | return ( 28 |
29 | 32 | {name} 33 | 34 |
35 | ); 36 | }; 37 | 38 | export default SidebarSubItem; 39 | -------------------------------------------------------------------------------- /src/components/Sidebar/SidebarToggle.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import styles from 'components/Sidebar/Sidebar.scss'; 10 | import Icon from 'components/Icon/Icon.react'; 11 | 12 | function toggleSidebarExpansion() { 13 | if (document.body.className.indexOf(' expanded') > -1) { 14 | document.body.className = document.body.className.replace(' expanded', ''); 15 | } else { 16 | document.body.className += ' expanded'; 17 | } 18 | } 19 | 20 | let SidebarToggle = () => ; 21 | 22 | export default SidebarToggle; 23 | -------------------------------------------------------------------------------- /src/components/SliderWrap/SliderWrap.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | .slider { 9 | overflow: hidden; 10 | transition: all 0.5s cubic-bezier(1, 0, 0, 1); 11 | } 12 | 13 | .metrics { 14 | width: 100%; 15 | display: inline-block; 16 | } 17 | -------------------------------------------------------------------------------- /src/components/StatusIndicator/StatusIndicator.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import StatusIndicator from 'components/StatusIndicator/StatusIndicator.react'; 10 | 11 | export const component = StatusIndicator; 12 | 13 | export const demos = [ 14 | { 15 | name: 'Positive', 16 | render: () => ( 17 | 20 | ) 21 | }, 22 | { 23 | name: 'Negative', 24 | render: () => ( 25 | 28 | ) 29 | }, 30 | { 31 | name: 'In Progress', 32 | render: () => ( 33 | 36 | ) 37 | } 38 | ]; 39 | -------------------------------------------------------------------------------- /src/components/StatusIndicator/StatusIndicator.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import PropTypes from 'lib/PropTypes'; 9 | import React from 'react'; 10 | import styles from 'components/StatusIndicator/StatusIndicator.scss'; 11 | 12 | let StatusIndicator = ({ text, color }) => { 13 | color = color || 'blue'; 14 | return ( 15 | 16 | {text} 17 | 18 | ); 19 | }; 20 | 21 | StatusIndicator.propTypes = { 22 | text: PropTypes.string.isRequired, 23 | color: PropTypes.oneOf(['blue', 'green', 'red']) 24 | }; 25 | 26 | export default StatusIndicator; 27 | -------------------------------------------------------------------------------- /src/components/StatusIndicator/StatusIndicator.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .status { 11 | @include DosisFont; 12 | display: inline-block; 13 | font-size: 14px; 14 | letter-spacing: 0.1em; 15 | text-transform: uppercase; 16 | 17 | &:before { 18 | content: ''; 19 | display: inline-block; 20 | width: 11px; 21 | height: 11px; 22 | border-radius: 100%; 23 | margin-right: 8px; 24 | } 25 | } 26 | 27 | .blue { 28 | color: $blue; 29 | 30 | &:before { 31 | background: $blue; 32 | } 33 | } 34 | 35 | .red { 36 | color: $red; 37 | 38 | &:before { 39 | background: $red; 40 | } 41 | } 42 | 43 | .green { 44 | color: $green; 45 | 46 | &:before { 47 | background: $green; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/components/StringEditor/StringEditor.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .editor { 11 | position: absolute; 12 | top: 0; 13 | left: 0; 14 | box-shadow: 0 1px 4px rgba(0,0,0,0.4); 15 | 16 | input { 17 | @include MonospaceFont; 18 | width: 100%; 19 | height: 30px; 20 | border: none; 21 | outline: none; 22 | padding: 0 4px; 23 | font-size: 12px; 24 | } 25 | 26 | textarea { 27 | @include MonospaceFont; 28 | width: 200px; 29 | height: 93px; 30 | font-size: 12px; 31 | padding: 4px; 32 | resize: none; 33 | border: none; 34 | outline: none; 35 | } 36 | } -------------------------------------------------------------------------------- /src/components/Table/Table.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .header { 11 | display: inline-block; 12 | color: white; 13 | font-size: 14px; 14 | line-height: 30px; 15 | padding: 0 16px; 16 | background: #66637A; 17 | height: 30px; 18 | } 19 | 20 | 21 | //common table styles that can be imported 22 | 23 | .table { 24 | background: #fdfafb; 25 | width: 100%; 26 | text-align: left; 27 | } 28 | 29 | .head { 30 | color: white; 31 | font-size: 14px; 32 | line-height: 30px; 33 | padding: 0 16px; 34 | background: #66637A; 35 | height: 30px; 36 | } 37 | 38 | .tr { 39 | background: #fdfafb; 40 | border-bottom: 1px solid $borderGrey; 41 | 42 | &:nth-child(2n) { 43 | background: #f4f5f7; 44 | } 45 | } 46 | 47 | .td { 48 | line-height: 30px; 49 | padding: 10px 16px; 50 | max-width: 0; 51 | } 52 | -------------------------------------------------------------------------------- /src/components/Table/TableHeader.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import styles from 'components/Table/Table.scss'; 10 | 11 | let TableHeader = ({ width, ...props }) => { 12 | let style = {}; 13 | if (width !== undefined) { 14 | style.width = width + '%'; 15 | } 16 | return
; 17 | } 18 | 19 | export default TableHeader; 20 | -------------------------------------------------------------------------------- /src/components/TextInput/TextInput.example.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | //example of how to fix height alignment of placeholder text 11 | .textarea_wrap textarea:not(.monospace) { 12 | @include placeholder { 13 | line-height: 200px; 14 | top: 0%; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/components/TextInput/TextInput.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .text_input { 11 | @include NotoSansFont; 12 | border: 0; 13 | outline: 0; 14 | background: $inputBackgroundColor; 15 | font-size: 16px; 16 | width: 100%; 17 | padding: 6px; 18 | vertical-align: top; 19 | resize: vertical; 20 | 21 | &:focus { 22 | @include placeholder { 23 | opacity: 0; 24 | } 25 | } 26 | } 27 | 28 | input.monospace, textarea.monospace { 29 | @include MonospaceFont; 30 | } 31 | 32 | input.text_input { 33 | text-align: center; 34 | } 35 | 36 | textarea.text_input:not(.monospace) { 37 | @include placeholder { 38 | text-align: center; 39 | position: relative; 40 | top: 50%; 41 | line-height: 9px; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/components/Toolbar/Toolbar.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import PropTypes from 'lib/PropTypes'; 9 | import React from 'react'; 10 | import styles from 'components/Toolbar/Toolbar.scss'; 11 | 12 | let Toolbar = (props) => ( 13 |
14 |
15 |
{props.section}
16 |
17 | 18 | {props.subsection} 19 | 20 | 21 | {props.details} 22 | 23 |
24 |
25 |
26 | {props.children} 27 |
28 |
29 | ); 30 | 31 | Toolbar.propTypes = { 32 | section: PropTypes.string, 33 | subsection: PropTypes.string, 34 | details: PropTypes.string 35 | }; 36 | 37 | export default Toolbar; 38 | -------------------------------------------------------------------------------- /src/components/Toolbar/Toolbar.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .toolbar { 11 | position: fixed; 12 | top: 0; 13 | right: 0; 14 | left: 300px; 15 | background: #353446; 16 | height: 96px; 17 | color: white; 18 | transition: left 0.5s ease-in; 19 | } 20 | 21 | @media (max-width: 980px) { 22 | .toolbar { 23 | left: 0; 24 | } 25 | } 26 | 27 | 28 | .title { 29 | position: absolute; 30 | left: 14px; 31 | bottom: 10px; 32 | } 33 | 34 | .section { 35 | @include DosisFont; 36 | color: #757985; 37 | text-transform: uppercase; 38 | font-size: 8px; 39 | letter-spacing: 1.6px; 40 | } 41 | 42 | .subsection { 43 | font-size: 18px; 44 | vertical-align: bottom; 45 | margin-right: 10px; 46 | } 47 | 48 | .details { 49 | color: #80848f; 50 | font-size: 12px; 51 | } 52 | 53 | .actions { 54 | position: absolute; 55 | right: 14px; 56 | bottom: 14px; 57 | } 58 | -------------------------------------------------------------------------------- /src/components/Tooltip/Tooltip.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import PropTypes from 'lib/PropTypes'; 9 | import React from 'react'; 10 | import styles from 'components/Tooltip/Tooltip.scss'; 11 | 12 | let Tooltip = ({ value, children }) => { 13 | return ( 14 |
15 | {children} 16 |
17 |
18 | {value} 19 |
20 |
21 |
22 |
23 |
24 | ); 25 | }; 26 | 27 | export default Tooltip; 28 | 29 | Tooltip.propTypes = { 30 | value: PropTypes.node.isRequired.describe( 31 | 'The tooltip text.' 32 | ), 33 | children: PropTypes.node.describe( 34 | 'The content that should reveal a tooltip when hovered.' 35 | ) 36 | }; 37 | -------------------------------------------------------------------------------- /src/dashboard/AccountView.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import { buildAccountSidebar } from './SidebarBuilder'; 10 | import SidebarToggle from 'components/Sidebar/SidebarToggle.react'; 11 | import styles from 'dashboard/Dashboard.scss'; 12 | 13 | export default class AccountView extends React.Component { 14 | render() { 15 | let sidebar = buildAccountSidebar({ 16 | section: this.props.section, 17 | subsection: this.props.subsection 18 | }); 19 | 20 | return ( 21 |
22 |
23 | {this.props.children} 24 |
25 | {sidebar} 26 | 27 |
28 | ); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/dashboard/Analytics/Performance/Performance.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .content { 11 | padding: 96px 0px 0px 0px; 12 | min-height: 100vh; 13 | position: relative; 14 | } 15 | 16 | .header, .footer { 17 | position: absolute; 18 | left: 0px; 19 | right: 0px; 20 | min-height: 50px; 21 | background-color: $pushDetailsHeaderBackground; 22 | } 23 | 24 | .header { 25 | top: 96px; 26 | border-bottom: 1px solid $translucentGrey; 27 | } 28 | 29 | .activeQueryWrap { 30 | display: inline-block; 31 | border-right: 1px solid $translucentGrey; 32 | padding: 10px 15px; 33 | height: 50px; 34 | } 35 | 36 | .display { 37 | position: absolute; 38 | overflow: auto; 39 | left: 0px; 40 | right: 0px; 41 | top: 146px; 42 | bottom: 50px; 43 | } 44 | 45 | .footer { 46 | padding: 10px; 47 | bottom: 0px; 48 | border-top: 1px solid $translucentGrey; 49 | } 50 | 51 | .right { 52 | position: absolute; 53 | right: 10px; 54 | } 55 | -------------------------------------------------------------------------------- /src/dashboard/Analytics/SlowQueries/SlowQueries.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .toolbarAction { 11 | padding: 0px 20px; 12 | color: white; 13 | 14 | > *:not(svg) { 15 | margin: 5px; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/dashboard/Dashboard.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | .content { 9 | margin-left: 300px; 10 | transition: margin-left 0.5s ease-in; 11 | } 12 | 13 | @media (max-width: 980px) { 14 | .content { 15 | margin-left: 0; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/dashboard/Data/ApiConsole/ApiConsole.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .curl { 11 | @include MonospaceFont; 12 | white-space: pre; 13 | font-size: 12px; 14 | padding: 20px; 15 | line-height: 18px; 16 | } 17 | 18 | .footer { 19 | border-top: 1px solid #e3e3ea; 20 | padding: 10px 0; 21 | text-align: center; 22 | } 23 | -------------------------------------------------------------------------------- /src/dashboard/Data/ApiConsole/request.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import Parse from 'parse'; 9 | 10 | export default function request(app, method, path, body, options) { 11 | let xhr = new XMLHttpRequest(); 12 | let promise = new Parse.Promise(); 13 | if (path.startsWith('/') && app.serverURL.endsWith('/')) { 14 | path = path.substr(1); 15 | } 16 | if (!path.startsWith('/') && !app.serverURL.endsWith('/')) { 17 | path = '/' + path; 18 | } 19 | xhr.open(method, app.serverURL + path, true); 20 | xhr.setRequestHeader('X-Parse-Application-Id', app.applicationId); 21 | if (options.useMasterKey) { 22 | xhr.setRequestHeader('X-Parse-Master-Key', app.masterKey); 23 | } else if (app.restKey) { 24 | xhr.setRequestHeader('X-Parse-REST-API-Key', app.restKey); 25 | } 26 | if (options.sessionToken) { 27 | xhr.setRequestHeader('X-Parse-Session-Token', options.sessionToken); 28 | } 29 | xhr.onload = function(e) { 30 | let response = xhr.responseText; 31 | try { 32 | response = JSON.parse(response); 33 | } catch (e) {} 34 | promise.resolve(response); 35 | } 36 | xhr.send(body); 37 | return promise; 38 | } 39 | -------------------------------------------------------------------------------- /src/dashboard/Data/CloudCode/CloudCode.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .source { 11 | position: relative; 12 | min-height: 100vh; 13 | } 14 | 15 | .content { 16 | padding: 96px 0px 0px 0px; 17 | min-height: 100vh; 18 | } 19 | 20 | .empty { 21 | position: absolute; 22 | top: 96px; 23 | left: 0; 24 | right: 0; 25 | bottom: 0; 26 | } 27 | -------------------------------------------------------------------------------- /src/dashboard/Data/Jobs/Jobs.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | .jobsFlow { 9 | padding: 120px 0 100px 0; 10 | } 11 | 12 | .buttonCell { 13 | > a:not(:last-child) { 14 | margin-right: 10px; 15 | } 16 | } 17 | 18 | .empty { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/dashboard/Data/Logs/Logs.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .logs { 11 | position: relative; 12 | min-height: 100vh; 13 | } 14 | 15 | .content { 16 | padding: 106px 10px 10px 10px; 17 | background: $logViewBackgroundColor; 18 | min-height: 100vh; 19 | } 20 | 21 | .empty { 22 | position: absolute; 23 | top: 96px; 24 | left: 0; 25 | right: 0; 26 | bottom: 0; 27 | } 28 | -------------------------------------------------------------------------------- /src/dashboard/Data/Migration/MigrationStep.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | $migrationStatesWidth: 175px; 11 | 12 | .wrapper { 13 | background-color: $lightGrey; 14 | position: relative; 15 | text-align: left; 16 | width: calc(700px/3); 17 | float: left; 18 | &:not(:last-child) { 19 | border-right: 2px solid $borderGrey; 20 | } 21 | &:last-child { 22 | border-top-right-radius: 5px; 23 | } 24 | &:first-child { 25 | border-top-left-radius: 5px; 26 | } 27 | } 28 | 29 | .progressBackground { 30 | height: 10px; 31 | position: absolute; 32 | bottom: 0; 33 | background-color: $progressGrey; 34 | } 35 | 36 | .status { 37 | height: 10px; 38 | position: absolute; 39 | bottom: 0; 40 | } 41 | 42 | .title { 43 | padding-left: 15px; 44 | padding-top: 15px; 45 | font-size: 14px; 46 | height: 35px; 47 | } 48 | 49 | .description { 50 | padding-left: 15px; 51 | padding-bottom: 25px; //15 from mockup + 10 to account for progress bar 52 | font-size: 12px; 53 | } 54 | 55 | .inactiveText { 56 | color: $inactiveTextGrey; 57 | } 58 | -------------------------------------------------------------------------------- /src/dashboard/Push/PushAudiencesData.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .showMoreWrap { 11 | padding: 10px; 12 | margin-left: 20px; 13 | } 14 | 15 | .pushAudienceData { 16 | border: 1px solid $borderGrey; 17 | } 18 | 19 | .pushAudienceDialog { 20 | text-align: right; 21 | border-top: 1px solid $borderGrey; 22 | padding: 15px 30px 15px 15px; 23 | } 24 | -------------------------------------------------------------------------------- /src/dashboard/Push/PushConstants.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | export const SOURCE_FIELD = 'source'; 9 | 10 | export const TRANSLATION_ID_FIELD = 'translation_id'; 11 | 12 | export const EXPERIMENT_FIELD = 'experiment'; 13 | 14 | export const TITLE_FIELD = 'title'; 15 | 16 | export const PAYLOAD_FIELD = 'payload'; 17 | 18 | export const SHOW_MORE_LIMIT = 1000; 19 | 20 | export const INITIAL_PAGE_SIZE = 5; 21 | 22 | export const QUERY_FIELD = 'query'; 23 | 24 | export const DEVICE_MAP = { 25 | ios: 'iOS', 26 | osx: 'OS X', 27 | android: 'Android', 28 | winrt: 'Win8', 29 | winphone: 'Windows Phone', 30 | embedded: 'Embedded', 31 | }; 32 | 33 | export const DEFAULT_DEVICES = ['ios', 'osx', 'android', 'winrt', 'winphone', 'embedded']; 34 | 35 | export const NEW_SEGMENT_ID = 'new_segment'; 36 | -------------------------------------------------------------------------------- /src/dashboard/Push/PushIndex.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .colType { 11 | width: 10%; 12 | } 13 | 14 | .colTarget { 15 | width: 15%; 16 | } 17 | 18 | .colPushesSent { 19 | width: 15%; 20 | } 21 | 22 | .colName { 23 | width: 30%; 24 | } 25 | 26 | .colTime { 27 | width: 20%; 28 | } 29 | 30 | .colStatus { 31 | width: 10%; 32 | } 33 | 34 | .experimentLabel, .localTimeLabel, .translationLabel { 35 | font-size: 12px; 36 | line-height: 12px; 37 | color: $secondaryTextColor; 38 | } 39 | 40 | .tr { 41 | cursor: pointer; 42 | 43 | //TODO: add focus styles once tab index is added 44 | &:hover { 45 | background-color: $lightBlue; 46 | } 47 | 48 | //NOTE: would like to get rid of alternating styles - hard to see for users 49 | &:nth-child(2n) { 50 | &:hover { 51 | background-color: $lightBlue; 52 | } 53 | } 54 | } 55 | 56 | .showMore { 57 | padding: 20px; 58 | a { 59 | display: block; 60 | height: 100%; 61 | padding: 10px; 62 | font-size: 16px; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/dashboard/Settings/GeneralSettings.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .cost { 11 | font-size: 18px; 12 | color: $blue; 13 | line-height: 18px; 14 | padding-right: 18px; 15 | padding-top: 16px; 16 | @include DosisFont; 17 | text-transform: uppercase; 18 | } 19 | 20 | .features { 21 | @include DosisFont; 22 | padding-right: 18px; 23 | padding-top: 1px; 24 | font-size: 14px; 25 | color: #66637a; 26 | line-height: 14px; 27 | } 28 | -------------------------------------------------------------------------------- /src/dashboard/Settings/Settings.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | .settings_page { 9 | padding: 120px 0 80px 0; 10 | } 11 | -------------------------------------------------------------------------------- /src/dashboard/SidebarBuilder.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | import Sidebar from 'components/Sidebar/Sidebar.react'; 10 | import SidebarSubItem from 'components/Sidebar/SidebarSubItem.react'; 11 | 12 | let accountSidebarSections = [ 13 | { 14 | name: 'Your Apps', 15 | icon: 'blank-app-outline', 16 | link: '/apps' 17 | }, /*{ 18 | name: 'Account Settings', 19 | icon: 'users-solid', 20 | link: '/account', 21 | }*/ 22 | ]; 23 | 24 | export function buildAccountSidebar(options) { 25 | let { 26 | section, 27 | subsection 28 | } = options; 29 | return ( 30 | 35 | ); 36 | } 37 | -------------------------------------------------------------------------------- /src/dashboard/TableView.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import 'stylesheets/globals.scss'; 9 | 10 | .headers { 11 | position: fixed; 12 | top: 96px; 13 | left: 300px; 14 | right: 0; 15 | background: #66637A; 16 | height: 30px; 17 | transition: left 0.5s ease-in; 18 | white-space: nowrap; 19 | } 20 | 21 | @media (max-width: 980px) { 22 | .headers { 23 | left: 0; 24 | } 25 | } 26 | 27 | .content { 28 | position: relative; 29 | padding-top: 126px; 30 | min-height: 100vh; 31 | } 32 | 33 | .empty { 34 | position: absolute; 35 | top: 126px; 36 | left: 0; 37 | right: 0; 38 | bottom: 0; 39 | } 40 | 41 | .rows { 42 | background: #fdfafb; 43 | 44 | table { 45 | width: 100%; 46 | } 47 | 48 | tr { 49 | background: #fdfafb; 50 | border-bottom: 1px solid $borderGrey; 51 | } 52 | 53 | tr:nth-child(2n) { 54 | background: #f4f5f7; 55 | } 56 | 57 | td { 58 | line-height: 30px; 59 | padding: 10px 16px; 60 | overflow: hidden; 61 | text-overflow: ellipsis; 62 | white-space: nowrap; 63 | max-width: 0; 64 | } 65 | 66 | svg { 67 | vertical-align: middle; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/dashboard/history.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | 9 | // Use the singleton history in react-router v2 10 | import { browserHistory } from 'react-router' 11 | 12 | export default browserHistory; 13 | -------------------------------------------------------------------------------- /src/dashboard/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import AppsManager from 'lib/AppsManager'; 9 | import Immutable from 'immutable'; 10 | import installDevTools from 'immutable-devtools'; 11 | import Parse from 'parse'; 12 | import React from 'react'; 13 | import ReactDOM from 'react-dom'; 14 | import Dashboard from './Dashboard'; 15 | import 'babel-polyfill'; 16 | 17 | require('stylesheets/fonts.scss'); 18 | installDevTools(Immutable); 19 | 20 | var path = window.PARSE_DASHBOARD_PATH || '/'; 21 | ReactDOM.render(, document.getElementById('browser_mount')); 22 | -------------------------------------------------------------------------------- /src/icons/analytics-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/analytics-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/blank-app-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/blank-app-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/bug-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/bug-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/calendar-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/calendar-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/check-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/check-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/icons/collaborate-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/devices-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/devices-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/down-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/down-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/download.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/edit-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/edit-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/ellipses.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/icons/facebook.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /src/icons/files-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/files-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/filter-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/filter-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/folder-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/folder-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/gear-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/google.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /src/icons/hamburger.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/icons/heroku.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/icons/infinity.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/info-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/info-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/keys-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/keys-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/laptop-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/laptop-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/left-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/left-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/locked-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/locked-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/mail-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/mail-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/minus-outline.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/icons/minus-solid.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /src/icons/phone-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/phone-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/plus-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/plus-solid.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /src/icons/plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/icons/push-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/push-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/refresh-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/refresh-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/right-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/right-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/search-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/search-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/send-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/send-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/share.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/trash-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/trash-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/unlock-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/unlock-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/up-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/up-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/warn-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/warn-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/windows.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/icons/x-outline.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/icons/x-solid.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/lib/CSRFManager.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import { unescape } from 'lib/StringEscaping'; 9 | 10 | let currentToken = null; 11 | 12 | export function getToken() { 13 | if (!currentToken) { 14 | let tokenScript = document.getElementById('csrf'); 15 | if (tokenScript) { 16 | currentToken = JSON.parse(unescape(tokenScript.innerHTML)); 17 | } 18 | } 19 | return currentToken; 20 | } 21 | -------------------------------------------------------------------------------- /src/lib/Position.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | export default class Position { 9 | constructor(x, y) { 10 | this.x = x || 0; 11 | this.y = y || 0; 12 | } 13 | 14 | transform(x, y) { 15 | return new Position(this.x + x, this.y + y); 16 | } 17 | 18 | static inDocument(node) { 19 | let pos = Position.inWindow(node); 20 | pos.x += window.pageXOffset; 21 | pos.y += window.pageYOffset; 22 | return pos; 23 | } 24 | 25 | static inWindow(node) { 26 | let rect = node.getBoundingClientRect(); 27 | return new Position(rect.left, rect.top); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/lib/StringEscaping.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | const UNESCAPE_MAP = { 9 | '&': '&', 10 | '<': '<', 11 | '>': '>', 12 | '/': '/', 13 | ''': '\'', 14 | '"': '"' 15 | }; 16 | const ESCAPE_MAP = {}; 17 | for (let k in UNESCAPE_MAP) { 18 | ESCAPE_MAP[UNESCAPE_MAP[k]] = k; 19 | } 20 | 21 | let escapeMatcher = RegExp('(?:' + (Object.keys(ESCAPE_MAP).join('|')) + ')', 'g'); 22 | let unescapeMatcher = RegExp('(?:' + (Object.keys(UNESCAPE_MAP).join('|')) + ')', 'g'); 23 | 24 | export function escape(str) { 25 | return str.replace(escapeMatcher, function(ch) { 26 | return ESCAPE_MAP[ch]; 27 | }); 28 | } 29 | 30 | export function unescape(str) { 31 | return str.replace(unescapeMatcher, function(ch) { 32 | return UNESCAPE_MAP[ch]; 33 | }); 34 | } 35 | -------------------------------------------------------------------------------- /src/lib/browserUtils.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | 9 | export function isSafari() { 10 | return /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor); 11 | } 12 | 13 | export function isChrome() { 14 | return /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor); 15 | } 16 | -------------------------------------------------------------------------------- /src/lib/encodeFormData.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | export default function encodeFormData(key, value, prevKey) { 9 | let field = key; 10 | if (prevKey) { 11 | field = prevKey + '[' + key + ']'; 12 | } 13 | if (typeof value === 'string') { 14 | return encodeURI(field) + '=' + encodeURIComponent(value); 15 | } 16 | if (typeof value !== 'object') { 17 | return encodeURI(field) + '=' + String(value); 18 | } 19 | if (value && typeof value.toJSON === 'function') { 20 | return encodeURI(field) + '=' + encodeURI(value.toJSON()); 21 | } 22 | let pieces = []; 23 | if (Array.isArray(value)) { 24 | for (let i = 0; i < value.length; i++) { 25 | pieces.push(encodeFormData('', value[i], field)); 26 | } 27 | return pieces.join('&'); 28 | } 29 | for (let k in value) { 30 | pieces.push(encodeFormData(k, value[k], field)); 31 | } 32 | return pieces.join('&'); 33 | } 34 | -------------------------------------------------------------------------------- /src/lib/englishOrdinalIndicator.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | let numberSuffix = (number) => { 9 | if (number > 3 && number < 21) { 10 | return 'th'; 11 | } 12 | switch (number % 10) { 13 | case 1: 14 | return 'st'; 15 | case 2: 16 | return 'nd'; 17 | case 3: 18 | return 'rd'; 19 | default: 20 | return 'th'; 21 | } 22 | }; 23 | 24 | export default function englishOrdinalIndicator(number) { 25 | return number + numberSuffix(number); 26 | } 27 | -------------------------------------------------------------------------------- /src/lib/getFileName.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import Parse from 'parse'; 9 | 10 | export default function getFileName(name) { 11 | if (name instanceof Parse.File) { 12 | return getFileName(name.name()); 13 | } 14 | let offset = 37; 15 | if (name.indexOf('tfss-') === 0) { 16 | offset += 5; 17 | } 18 | return name.substr(offset); 19 | } 20 | -------------------------------------------------------------------------------- /src/lib/getSiteDomain.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | export default function getSiteDomain() { 9 | let host = location.host.split('.'); 10 | return location.protocol + '//' + host.slice(host.length - 2).join('.'); 11 | } 12 | -------------------------------------------------------------------------------- /src/lib/hasAncestor.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | export default function hasAncestor(node, ancestor) { 9 | let cur = node.parentNode; 10 | while (cur && cur.nodeType === 1) { 11 | if (cur === ancestor) { 12 | return true; 13 | } 14 | cur = cur.parentNode; 15 | } 16 | return false; 17 | } 18 | -------------------------------------------------------------------------------- /src/lib/htmlString.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import { escape } from 'lib/StringEscaping'; 9 | 10 | export default function htmlString(pieces, ...vars) { 11 | let result = pieces[0]; 12 | for (let i = 0; i < vars.length; i++) { 13 | result += escape(vars[i]) + pieces[i + 1]; 14 | } 15 | return result; 16 | } 17 | -------------------------------------------------------------------------------- /src/lib/joinWithFinal.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | 10 | // Combines an array into a human-friendly array: 11 | // joinWithFinal(, [], , ): [] 12 | // joinWithFinal('your items: ', ['item1'], , ): ['your items: ', 'item1'] 13 | // joinWithFinal('your items: ', ['item1', 'item2'], , ' and '): ['your items: ', 'item1', ' and ', 'item2'] 14 | // joinWithFinal('your items: ', ['item1', 'item2', 'item3'], ', ', ', and ').join(''): 'your items: item1, item2, and item3' 15 | export default (prefix, array, joiner, finalJoiner) => { 16 | switch (array.length) { 17 | case 0: return []; 18 | case 1: return [prefix, array[0]]; 19 | default: return [prefix].concat(array.map((node, index) => { 20 | if (index === array.length - 1) { 21 | return [node]; 22 | } else if (index === array.length - 2) { 23 | return [node, finalJoiner]; 24 | } else { 25 | return [node, joiner]; 26 | } 27 | }).reduce((a,b) => a.concat(b), [])); 28 | } 29 | }; 30 | -------------------------------------------------------------------------------- /src/lib/keyMirror.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | /** 9 | * Takes an array of keys, and turns it into an object mapping keys to 10 | * themselves 11 | */ 12 | export default function keyMirror(keys) { 13 | let map = {}; 14 | for (let i = 0; i < keys.length; i++) { 15 | map[keys[i]] = keys[i]; 16 | } 17 | return map; 18 | } 19 | -------------------------------------------------------------------------------- /src/lib/pluck.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | export default function(array, key) { 9 | return array.map(item => item[key]); 10 | } 11 | -------------------------------------------------------------------------------- /src/lib/pluralize.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | export default function pluralize(count, word, plural) { 9 | if (count === 1) { 10 | return String(count) + ' ' + word; 11 | } 12 | return String(count) + ' ' + (plural || word + 's'); 13 | } 14 | -------------------------------------------------------------------------------- /src/lib/prettyNumber.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | const SUFFIXES = ['', 'k', 'm', 'b']; 9 | 10 | export default function prettyNumber(number, places) { 11 | if (number === undefined) { 12 | return undefined; 13 | } 14 | if (!places || places < 3) { 15 | places = 3; 16 | } 17 | if (number.toFixed().length < places) { 18 | let fullLength = number.toString().length; 19 | let truncatedLength = number.toFixed().length; 20 | if (fullLength > truncatedLength) { 21 | // has a decimal piece 22 | return number.toFixed(places - truncatedLength); 23 | } 24 | return number.toFixed(); 25 | } 26 | let shortened = number; 27 | let suffixIndex = 0; 28 | while (shortened.toFixed().length > places) { 29 | shortened /= 1000; 30 | suffixIndex++; 31 | } 32 | let remainder = places - shortened.toFixed().length; 33 | return shortened.toFixed(remainder) + SUFFIXES[suffixIndex]; 34 | } 35 | -------------------------------------------------------------------------------- /src/lib/setDifference.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | export default function(first, second, equalityPredicate) { 9 | return first.filter(itemFromFirst => !second.find(itemFromSecond => equalityPredicate(itemFromFirst, itemFromSecond))); 10 | } 11 | -------------------------------------------------------------------------------- /src/lib/stringCompare.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | export default function stringCompare(a, b) { 9 | return (a < b ? -1 : (a > b ? 1 : 0)); 10 | } 11 | -------------------------------------------------------------------------------- /src/lib/stringList.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | /** 9 | * stringList combines an array of strings into a human-friendly list: 10 | * Input: ['apples'], Output: 'apples' 11 | * Input: ['apples', 'bananas'], Output: 'apples and bananas' 12 | * Input: ['apples', 'bananas', 'coconuts'], Output: 'apples, bananas, and coconuts' 13 | * 14 | * TODO: i18n 15 | * 16 | * @param {Array} strings - List of strings 17 | * @return {String} human - friendly list 18 | */ 19 | export default function stringList(strings, endDelineator = 'and') { 20 | let progress = []; 21 | strings.forEach((s, i) => { 22 | if (i > 0) { 23 | if (i === strings.length - 1) { 24 | if (progress.length > 1) { 25 | progress.push(','); 26 | } 27 | progress.push(` ${endDelineator} `); 28 | } else { 29 | progress.push(', '); 30 | } 31 | } 32 | progress.push(s); 33 | }); 34 | return progress.join(''); 35 | }; 36 | -------------------------------------------------------------------------------- /src/lib/tests/Markdown.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | jest.dontMock('../../components/Markdown/Markdown.react'); 9 | 10 | import React from 'react'; 11 | import ReactDOM from 'react-dom'; 12 | import TestUtils from 'react-addons-test-utils'; 13 | 14 | const Markdown = require('../../components/Markdown/Markdown.react'); 15 | 16 | describe('Markdown', () => { 17 | it('can render examples', () => { 18 | jest.dontMock('../../components/Markdown/Markdown.example'); 19 | const example = require('../../components/Markdown/Markdown.example'); 20 | example.demos.forEach((example, i) => { 21 | example.render(); 22 | }); 23 | }); 24 | // test suite goes here 25 | }); 26 | -------------------------------------------------------------------------------- /src/lib/tests/PlatformCard.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | jest.dontMock('../../components/PlatformCard/PlatformCard.react'); 9 | 10 | import React from 'react'; 11 | import ReactDOM from 'react-dom'; 12 | import TestUtils from 'react-addons-test-utils'; 13 | 14 | const PlatformCard = require('../../components/PlatformCard/PlatformCard.react'); 15 | 16 | describe('PlatformCard', () => { 17 | it('can render examples', () => { 18 | jest.dontMock('../../components/PlatformCard/PlatformCard.example'); 19 | const example = require('../../components/PlatformCard/PlatformCard.example'); 20 | example.demos.forEach((example, i) => { 21 | example.render(); 22 | }); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /src/lib/tests/Tooltip.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | jest.dontMock('../../components/Tooltip/Tooltip.react'); 9 | 10 | import React from 'react'; 11 | import ReactDOM from 'react-dom'; 12 | import TestUtils from 'react-addons-test-utils'; 13 | 14 | const Tooltip = require('../../components/Tooltip/Tooltip.react'); 15 | 16 | describe('Tooltip', () => { 17 | // test suite goes here 18 | }); 19 | -------------------------------------------------------------------------------- /src/lib/tests/passwordStrength.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | jest.dontMock('../passwordStrength'); 9 | const passwordStrength = require('../passwordStrength'); 10 | 11 | describe('passwordStrength', () => { 12 | it('returns 0 for passwords that are too short', () => { 13 | expect(passwordStrength('')).toBe(0); 14 | expect(passwordStrength('asdf')).toBe(0); 15 | expect(passwordStrength('1234567')).toBe(0); 16 | expect(passwordStrength('longenough')).not.toBe(0); 17 | }); 18 | 19 | it('returns 1 for passwords that are too weak', () => { 20 | expect(passwordStrength('notenough')).toBe(1); 21 | expect(passwordStrength('1234567890')).toBe(1); 22 | }); 23 | 24 | it('returns 2 for passwords with enough entropy', () => { 25 | expect(passwordStrength('righthorsebatterystaple')).toBe(2); 26 | expect(passwordStrength('Much3ntr0py!')).toBe(2); 27 | }); 28 | }); 29 | -------------------------------------------------------------------------------- /src/lib/unique.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | export default function(array) { 9 | return Array.from(new Set(array)); 10 | } 11 | -------------------------------------------------------------------------------- /src/lib/validateEmailFormat.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | export default function validateEmailFormat(email) { 9 | // Copied from existing website's newsletter_signup.js 10 | let emailRegex = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 11 | return emailRegex.test(email); 12 | } 13 | -------------------------------------------------------------------------------- /src/lib/validateNumeric.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | let numeric = /^[-+]?\d*\.?\d*$/; 9 | 10 | export default function validateNumeric(str) { 11 | return numeric.test(str); 12 | } 13 | -------------------------------------------------------------------------------- /src/parse-interface-guide/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | PIG Component Explorer 4 | 5 |
6 | 7 | 8 | -------------------------------------------------------------------------------- /src/parse-interface-guide/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import ReactDOM from 'react-dom'; 9 | 10 | import Routes from './routes'; 11 | 12 | // App entry point 13 | 14 | ReactDOM.render(Routes, document.getElementById('browser_mount')); 15 | -------------------------------------------------------------------------------- /src/parse-interface-guide/routes.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import PIG from 'parse-interface-guide/PIG.react'; 9 | import React from 'react'; 10 | import { browserHistory, Router, Route } from 'react-router'; 11 | 12 | module.exports = ( 13 | 14 | 15 | 16 | 17 | ); 18 | -------------------------------------------------------------------------------- /src/quickstart/Quickstart.react.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import React from 'react'; 9 | 10 | export default class Quickstart extends React.Component { 11 | render() { 12 | return ( 13 |
Hello world
14 | ); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/quickstart/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | import Quickstart from 'quickstart/Quickstart.react'; 9 | import React from 'react'; 10 | import ReactDOM from 'react-dom'; 11 | 12 | require('stylesheets/fonts.scss'); 13 | 14 | // App entry point 15 | 16 | ReactDOM.render(, document.getElementById('quickstart_mount')); 17 | -------------------------------------------------------------------------------- /src/stylesheets/fonts.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | @import url(https://fonts.googleapis.com/css?family=Dosis); 9 | @import url(https://fonts.googleapis.com/css?family=Source+Code+Pro); 10 | @import url(https://fonts.googleapis.com/css?family=Noto+Sans:400,700); 11 | -------------------------------------------------------------------------------- /testing/extractClassnames.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | // Hacky way to get classnames out of a SASS/CSS file 9 | // This should work for our testing needs 10 | 11 | module.exports = function(src) { 12 | if (!src) { 13 | return {}; 14 | } 15 | 16 | var classMatch = src.match(/\.([a-zA-Z]\w*)\s*\{/g); 17 | var classMap = {}; 18 | if (classMatch) { 19 | for (var i = 0; i < classMatch.length; i++) { 20 | var c = classMatch[i].replace(/[^a-zA-Z0-9\-_]/g, ''); 21 | classMap[c] = c; 22 | } 23 | } 24 | return classMap; 25 | }; 26 | -------------------------------------------------------------------------------- /webpack/PIG.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | var configuration = require('./base.config.js'); 9 | 10 | configuration.entry = {PIG: './parse-interface-guide/index.js'}; 11 | configuration.output.path = './PIG/bundles'; 12 | 13 | module.exports = configuration; 14 | -------------------------------------------------------------------------------- /webpack/build.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | var configuration = require('./base.config.js'); 9 | 10 | configuration.entry = {dashboard: './dashboard/index.js'}; 11 | configuration.output.path = './Parse-Dashboard/public/bundles'; 12 | 13 | module.exports = configuration; 14 | -------------------------------------------------------------------------------- /webpack/webpack.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-present, Parse, LLC 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the license found in the LICENSE file in 6 | * the root directory of this source tree. 7 | */ 8 | var configuration = require('./base.config.js'); 9 | 10 | configuration.entry = { 11 | dashboard: './dashboard/index.js', 12 | login: './login/index.js', 13 | signup: './signup/index.js', 14 | PIG: './parse-interface-guide/index.js', 15 | quickstart: './quickstart/index.js', 16 | }; 17 | configuration.output.path = './bundles'; 18 | 19 | module.exports = configuration; 20 | --------------------------------------------------------------------------------