├── .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 |
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 |
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 |
16 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
11 |
--------------------------------------------------------------------------------
/src/icons/facebook.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 |
9 |
--------------------------------------------------------------------------------
/src/icons/hamburger.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
--------------------------------------------------------------------------------
/src/icons/heroku.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/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 |
12 |
--------------------------------------------------------------------------------
/src/icons/minus-solid.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 |
8 |
--------------------------------------------------------------------------------
/src/icons/plus.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 |
--------------------------------------------------------------------------------
/src/icons/x-outline.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/src/icons/x-solid.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 |
--------------------------------------------------------------------------------