diff --git a/packages/netlify-cms-backend-bitbucket/package.json b/packages/netlify-cms-backend-bitbucket/package.json index 09c8a088..41c9a286 100644 --- a/packages/netlify-cms-backend-bitbucket/package.json +++ b/packages/netlify-cms-backend-bitbucket/package.json @@ -29,6 +29,7 @@ "webpack-cli": "^3.1.0" }, "peerDependencies": { + "emotion": "^9.2.6", "immutable": "^3.7.6", "lodash": "^4.17.10", "netlify-cms-lib-auth": "2.0.0-alpha.0", diff --git a/packages/netlify-cms-backend-git-gateway/package.json b/packages/netlify-cms-backend-git-gateway/package.json index 1628cd3a..9ba4170d 100644 --- a/packages/netlify-cms-backend-git-gateway/package.json +++ b/packages/netlify-cms-backend-git-gateway/package.json @@ -25,8 +25,10 @@ "webpack-cli": "^3.1.0" }, "peerDependencies": { + "emotion": "^9.2.6", "immutable": "^3.7.6", "lodash": "^4.17.10", + "netlify-cms-backend-bitbucket": "2.0.0-alpha.0", "netlify-cms-backend-github": "2.0.0-alpha.0", "netlify-cms-backend-gitlab": "2.0.0-alpha.0", "netlify-cms-lib-auth": "2.0.0-alpha.0", diff --git a/packages/netlify-cms-backend-git-gateway/src/implementation.js b/packages/netlify-cms-backend-git-gateway/src/implementation.js index d759fdc6..be493379 100644 --- a/packages/netlify-cms-backend-git-gateway/src/implementation.js +++ b/packages/netlify-cms-backend-git-gateway/src/implementation.js @@ -5,10 +5,9 @@ import { get, pick, intersection } from "lodash"; import { unsentRequest } from "netlify-cms-lib-util"; import { GitHubBackend } from "netlify-cms-backend-github"; import { GitLabBackend } from "netlify-cms-backend-gitlab"; -import BitBucketBackend from "Backends/bitbucket/implementation"; +import { BitBucketBackend, API as BitBucketAPI } from "netlify-cms-backend-bitbucket"; import GitHubAPI from "./GitHubAPI"; import GitLabAPI from "./GitLabAPI"; -import BitBucketAPI from "Backends/bitbucket/API"; import AuthenticationPage from "./AuthenticationPage"; const localHosts = { diff --git a/packages/netlify-cms-backend-github/package.json b/packages/netlify-cms-backend-github/package.json index 5b96f762..b5a3f8ae 100644 --- a/packages/netlify-cms-backend-github/package.json +++ b/packages/netlify-cms-backend-github/package.json @@ -24,10 +24,11 @@ "webpack-cli": "^3.1.0" }, "peerDependencies": { + "emotion": "^9.2.6", + "lodash": "^4.17.10", "netlify-cms-lib-auth": "2.0.0-alpha.0", "netlify-cms-lib-util": "2.0.0-alpha.0", "netlify-cms-ui-default": "2.0.0-alpha.0", - "lodash": "^4.17.10", "prop-types": "^15.6.2", "react": "^16.4.1", "react-emotion": "^9.2.6" diff --git a/packages/netlify-cms-backend-gitlab/package.json b/packages/netlify-cms-backend-gitlab/package.json index 58d96a26..98fef69d 100644 --- a/packages/netlify-cms-backend-gitlab/package.json +++ b/packages/netlify-cms-backend-gitlab/package.json @@ -24,6 +24,7 @@ "webpack-cli": "^3.1.0" }, "peerDependencies": { + "emotion": "^9.2.6", "immutable": "^3.7.6", "lodash": "^4.17.10", "netlify-cms-lib-auth": "2.0.0-alpha.0", diff --git a/packages/netlify-cms-backend-test/package.json b/packages/netlify-cms-backend-test/package.json index ce57ca10..b29eca86 100644 --- a/packages/netlify-cms-backend-test/package.json +++ b/packages/netlify-cms-backend-test/package.json @@ -22,6 +22,7 @@ "webpack-cli": "^3.1.0" }, "peerDependencies": { + "emotion": "^9.2.6", "immutable": "^3.8.2", "lodash": "^4.17.10", "netlify-cms-lib-util": "2.0.0-alpha.0", diff --git a/packages/netlify-cms-core/package.json b/packages/netlify-cms-core/package.json index 06099cef..85ef2910 100644 --- a/packages/netlify-cms-core/package.json +++ b/packages/netlify-cms-core/package.json @@ -20,6 +20,7 @@ "dependencies": { "create-react-class": "^15.6.0", "diacritics": "^1.3.0", + "emotion": "^9.2.6", "fuzzy": "^0.1.1", "gotrue-js": "^0.9.15", "gray-matter": "^3.0.6", @@ -71,5 +72,6 @@ "webpack": "^4.16.1", "webpack-cli": "^3.1.0", "webpack-dev-server": "^3.1.5" - } + }, + "peerDependencies": {} } diff --git a/packages/netlify-cms-core/scripts/load-extensions.js b/packages/netlify-cms-core/scripts/load-extensions.js index 8a759dd8..769fedb5 100644 --- a/packages/netlify-cms-core/scripts/load-extensions.js +++ b/packages/netlify-cms-core/scripts/load-extensions.js @@ -2,6 +2,7 @@ import { registerBackend, registerWidget, registerEditorComponent } from 'Lib/re import { GitHubBackend } from 'netlify-cms-backend-github'; import { GitLabBackend } from 'netlify-cms-backend-gitlab'; import { GitGatewayBackend } from 'netlify-cms-backend-git-gateway'; +import { BitbucketBackend } from 'netlify-cms-backend-bitbucket'; import { TestBackend } from 'netlify-cms-backend-test'; import { BooleanControl } from 'netlify-cms-widget-boolean'; import { DateControl, DatePreview } from 'netlify-cms-widget-date'; @@ -22,6 +23,7 @@ registerBackend('git-gateway', GitGatewayBackend); registerBackend('github', GitHubBackend); registerBackend('gitlab', GitLabBackend); registerBackend('test-repo', TestBackend); +registerBackend('bitbucket', BitbucketBackend); registerWidget('boolean', BooleanControl); registerWidget('date', DateControl, DatePreview); registerWidget('datetime', DateTimeControl, DateTimePreview); diff --git a/packages/netlify-cms-core/src/backend.js b/packages/netlify-cms-core/src/backend.js index b670573f..85a6f67f 100644 --- a/packages/netlify-cms-core/src/backend.js +++ b/packages/netlify-cms-core/src/backend.js @@ -15,7 +15,6 @@ import { } from "Reducers/collections"; import { createEntry } from "ValueObjects/Entry"; import { sanitizeSlug } from "Lib/urlHelper"; -import BitBucketBackend from "./bitbucket/implementation"; import { registerBackend, getBackend } from 'Lib/registry'; import { Cursor, CURSOR_COMPATIBILITY_SYMBOL } from 'netlify-cms-lib-util'; import { EDITORIAL_WORKFLOW, status } from 'Constants/publishModes'; diff --git a/packages/netlify-cms-ui-default/package.json b/packages/netlify-cms-ui-default/package.json index 732261ff..a56c4e8c 100644 --- a/packages/netlify-cms-ui-default/package.json +++ b/packages/netlify-cms-ui-default/package.json @@ -22,6 +22,7 @@ "webpack-cli": "^3.1.0" }, "peerDependencies": { + "emotion": "^9.2.6", "lodash": "^4.13.1", "prop-types": "^15.5.10", "react": "^16.4.1", diff --git a/packages/netlify-cms-widget-boolean/package.json b/packages/netlify-cms-widget-boolean/package.json index 2d2428d1..a88bbcbd 100644 --- a/packages/netlify-cms-widget-boolean/package.json +++ b/packages/netlify-cms-widget-boolean/package.json @@ -20,6 +20,7 @@ "webpack-cli": "^3.1.0" }, "peerDependencies": { + "emotion": "^9.2.6", "lodash": "^4.17.10", "netlify-cms-ui-default": "^2.0.0-alpha.0", "prop-types": "^15.5.10", diff --git a/packages/netlify-cms-widget-date/package.json b/packages/netlify-cms-widget-date/package.json index d78498eb..adb1a09d 100644 --- a/packages/netlify-cms-widget-date/package.json +++ b/packages/netlify-cms-widget-date/package.json @@ -26,6 +26,7 @@ "webpack-cli": "^3.1.0" }, "peerDependencies": { + "emotion": "^9.2.6", "moment": "^2.11.2", "netlify-cms-ui-default": "^2.0.0-alpha.0", "prop-types": "^15.5.10", diff --git a/packages/netlify-cms-widget-datetime/package.json b/packages/netlify-cms-widget-datetime/package.json index 6ffc0e1d..e603653f 100644 --- a/packages/netlify-cms-widget-datetime/package.json +++ b/packages/netlify-cms-widget-datetime/package.json @@ -25,6 +25,7 @@ "webpack-cli": "^3.1.0" }, "peerDependencies": { + "emotion": "^9.2.6", "react": "^16.4.1" }, "localExternals": [ diff --git a/packages/netlify-cms-widget-file/package.json b/packages/netlify-cms-widget-file/package.json index 01160d75..e3bdd466 100644 --- a/packages/netlify-cms-widget-file/package.json +++ b/packages/netlify-cms-widget-file/package.json @@ -25,6 +25,7 @@ "webpack-cli": "^3.1.0" }, "peerDependencies": { + "emotion": "^9.2.6", "netlify-cms-ui-default": "^2.0.0-alpha.0", "prop-types": "^15.5.10", "react": "^16.4.1", diff --git a/packages/netlify-cms-widget-list/package.json b/packages/netlify-cms-widget-list/package.json index fdfe3e99..39fe7574 100644 --- a/packages/netlify-cms-widget-list/package.json +++ b/packages/netlify-cms-widget-list/package.json @@ -25,6 +25,7 @@ "webpack-cli": "^3.1.0" }, "peerDependencies": { + "emotion": "^9.2.6", "immutable": "^3.7.6", "lodash": "^4.17.10", "netlify-cms-ui-default": "^2.0.0-alpha.0", diff --git a/packages/netlify-cms-widget-markdown/package.json b/packages/netlify-cms-widget-markdown/package.json index c3ad7787..0d9b3f75 100644 --- a/packages/netlify-cms-widget-markdown/package.json +++ b/packages/netlify-cms-widget-markdown/package.json @@ -41,6 +41,7 @@ "webpack-cli": "^3.1.0" }, "peerDependencies": { + "emotion": "^9.2.6", "immutable": "^3.7.6", "lodash": "^4.17.10", "netlify-cms-ui-default": "^2.0.0-alpha.0", diff --git a/packages/netlify-cms-widget-number/package.json b/packages/netlify-cms-widget-number/package.json index c40f74c0..a1e075bd 100644 --- a/packages/netlify-cms-widget-number/package.json +++ b/packages/netlify-cms-widget-number/package.json @@ -20,6 +20,7 @@ "webpack-cli": "^3.1.0" }, "peerDependencies": { + "emotion": "^9.2.6", "netlify-cms-ui-default": "^2.0.0-alpha.0", "prop-types": "^15.5.10", "react": "^16.4.1" diff --git a/packages/netlify-cms-widget-object/package.json b/packages/netlify-cms-widget-object/package.json index 890b593f..50b5b203 100644 --- a/packages/netlify-cms-widget-object/package.json +++ b/packages/netlify-cms-widget-object/package.json @@ -22,6 +22,7 @@ "webpack-cli": "^3.1.0" }, "peerDependencies": { + "emotion": "^9.2.6", "immutable": "^3.7.6", "lodash": "^4.17.10", "netlify-cms-ui-default": "^2.0.0-alpha.0", diff --git a/packages/netlify-cms-widget-relation/package.json b/packages/netlify-cms-widget-relation/package.json index ce6cf262..4ca9813d 100644 --- a/packages/netlify-cms-widget-relation/package.json +++ b/packages/netlify-cms-widget-relation/package.json @@ -24,6 +24,7 @@ "webpack-cli": "^3.1.0" }, "peerDependencies": { + "emotion": "^9.2.6", "immutable": "^3.7.6", "lodash": "^4.17.10", "netlify-cms-ui-default": "^2.0.0-alpha.0", diff --git a/packages/netlify-cms/example/Photo 1-lobby_FS.jpg b/packages/netlify-cms/example/Photo 1-lobby_FS.jpg new file mode 100644 index 00000000..5bbb29fd Binary files /dev/null and b/packages/netlify-cms/example/Photo 1-lobby_FS.jpg differ diff --git a/packages/netlify-cms/example/config.yml b/packages/netlify-cms/example/config.yml new file mode 100644 index 00000000..28b01853 --- /dev/null +++ b/packages/netlify-cms/example/config.yml @@ -0,0 +1,171 @@ +backend: + name: test-repo + +display_url: https://example.com +media_folder: "assets/uploads" + +collections: # A list of collections the CMS should be able to edit + - name: "posts" # Used in routes, ie.: /admin/collections/:slug/edit + label: "Posts" # Used in the UI + label_singular: "Post" # Used in the UI, ie: "New Post" + description: > + The description is a great place for tone setting, high level information, and editing + guidelines that are specific to a collection. + folder: "_posts" + slug: "{{year}}-{{month}}-{{day}}-{{slug}}" + create: true # Allow users to create new documents in this collection + fields: # The fields each document in this collection have + - {label: "Title", name: "title", widget: "string", tagname: "h1"} + - {label: "Publish Date", name: "date", widget: "datetime", format: "YYYY-MM-DD hh:mma"} + - {label: "Cover Image", name: "image", widget: "image", required: false, tagname: ""} + - {label: "Body", name: "body", widget: "markdown"} + meta: + - {label: "SEO Description", name: "description", widget: "text"} + + - name: "faq" # Used in routes, ie.: /admin/collections/:slug/edit + label: "FAQ" # Used in the UI + folder: "_faqs" + create: true # Allow users to create new documents in this collection + fields: # The fields each document in this collection have + - {label: "Question", name: "title", widget: "string", tagname: "h1"} + - {label: "Answer", name: "body", widget: "markdown"} + + - name: "settings" + label: "Settings" + delete: false # Prevent users from deleting documents in this collection + editor: + preview: false + files: + - name: "general" + label: "Site Settings" + file: "_data/settings.json" + description: "General Site Settings" + fields: + - {label: "Global title", name: "site_title", widget: "string"} + - label: "Post Settings" + name: posts + widget: "object" + fields: + - {label: "Number of posts on frontpage", name: front_limit, widget: number} + - {label: "Default Author", name: author, widget: string} + - {label: "Default Thumbnail", name: thumb, widget: image, class: "thumb"} + + - name: "authors" + label: "Authors" + file: "_data/authors.yml" + description: "Author descriptions" + fields: + - name: authors + label: Authors + label_singular: "Author" + widget: list + fields: + - {label: "Name", name: "name", widget: "string"} + - {label: "Description", name: "description", widget: "markdown"} + + - name: "kitchenSink" # all the things in one entry, for documentation and quick testing + label: "Kitchen Sink" + folder: "_sink" + create: true + fields: + - label: "Related Post" + name: "post" + widget: "relationKitchenSinkPost" + collection: "posts" + displayFields: ["title", "date"] + searchFields: ["title", "body"] + valueField: "title" + - {label: "Title", name: "title", widget: "string"} + - {label: "Boolean", name: "boolean", widget: "boolean", default: true} + - {label: "Text", name: "text", widget: "text"} + - {label: "Number", name: "number", widget: "number"} + - {label: "Markdown", name: "markdown", widget: "markdown"} + - {label: "Datetime", name: "datetime", widget: "datetime"} + - {label: "Date", name: "date", widget: "date"} + - {label: "Image", name: "image", widget: "image"} + - {label: "File", name: "file", widget: "file"} + - {label: "Select", name: "select", widget: "select", options: ["a", "b", "c"]} + - {label: "Hidden", name: "hidden", widget: "hidden", default: "hidden"} + - label: "Object" + name: "object" + widget: "object" + fields: + - label: "Related Post" + name: "post" + widget: "relationKitchenSinkPost" + collection: "posts" + searchFields: ["title", "body"] + valueField: "title" + - {label: "String", name: "string", widget: "string"} + - {label: "Boolean", name: "boolean", widget: "boolean", default: false} + - {label: "Text", name: "text", widget: "text"} + - {label: "Number", name: "number", widget: "number"} + - {label: "Markdown", name: "markdown", widget: "markdown"} + - {label: "Datetime", name: "datetime", widget: "datetime"} + - {label: "Date", name: "date", widget: "date"} + - {label: "Image", name: "image", widget: "image"} + - {label: "File", name: "file", widget: "file"} + - {label: "Select", name: "select", widget: "select", options: ["a", "b", "c"]} + - label: "List" + name: "list" + widget: "list" + fields: + - {label: "String", name: "string", widget: "string"} + - {label: "Boolean", name: "boolean", widget: "boolean"} + - {label: "Text", name: "text", widget: "text"} + - {label: "Number", name: "number", widget: "number"} + - {label: "Markdown", name: "markdown", widget: "markdown"} + - {label: "Datetime", name: "datetime", widget: "datetime"} + - {label: "Date", name: "date", widget: "date"} + - {label: "Image", name: "image", widget: "image"} + - {label: "File", name: "file", widget: "file"} + - {label: "Select", name: "select", widget: "select", options: ["a", "b", "c"]} + - label: "Object" + name: "object" + widget: "object" + fields: + - {label: "String", name: "string", widget: "string"} + - {label: "Boolean", name: "boolean", widget: "boolean"} + - {label: "Text", name: "text", widget: "text"} + - {label: "Number", name: "number", widget: "number"} + - {label: "Markdown", name: "markdown", widget: "markdown"} + - {label: "Datetime", name: "datetime", widget: "datetime"} + - {label: "Date", name: "date", widget: "date"} + - {label: "Image", name: "image", widget: "image"} + - {label: "File", name: "file", widget: "file"} + - {label: "Select", name: "select", widget: "select", options: ["a", "b", "c"]} + - label: "List" + name: "list" + widget: "list" + fields: + - label: "Related Post" + name: "post" + widget: "relationKitchenSinkPost" + collection: "posts" + searchFields: ["title", "body"] + valueField: "title" + - {label: "String", name: "string", widget: "string"} + - {label: "Boolean", name: "boolean", widget: "boolean"} + - {label: "Text", name: "text", widget: "text"} + - {label: "Number", name: "number", widget: "number"} + - {label: "Markdown", name: "markdown", widget: "markdown"} + - {label: "Datetime", name: "datetime", widget: "datetime"} + - {label: "Date", name: "date", widget: "date"} + - {label: "Image", name: "image", widget: "image"} + - {label: "File", name: "file", widget: "file"} + - {label: "Select", name: "select", widget: "select", options: ["a", "b", "c"]} + - {label: "Hidden", name: "hidden", widget: "hidden", default: "hidden"} + - label: "Object" + name: "object" + widget: "object" + fields: + - {label: "String", name: "string", widget: "string"} + - {label: "Boolean", name: "boolean", widget: "boolean"} + - {label: "Text", name: "text", widget: "text"} + - {label: "Number", name: "number", widget: "number"} + - {label: "Markdown", name: "markdown", widget: "markdown"} + - {label: "Datetime", name: "datetime", widget: "datetime"} + - {label: "Date", name: "date", widget: "date"} + - {label: "Image", name: "image", widget: "image"} + - {label: "File", name: "file", widget: "file"} + - {label: "Select", name: "select", widget: "select", options: ["a", "b", "c"]} diff --git a/packages/netlify-cms/example/example.css b/packages/netlify-cms/example/example.css new file mode 100644 index 00000000..7b683ec3 --- /dev/null +++ b/packages/netlify-cms/example/example.css @@ -0,0 +1,21 @@ +html, +body { + color: #444; + font-size: 14px; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; +} + +body { + padding: 20px; +} + +h1 { + margin-top: 20px; + color: #666; + font-weight: bold; + font-size: 32px; +} + +img { + max-width: 100%; +} diff --git a/packages/netlify-cms/example/index.html b/packages/netlify-cms/example/index.html new file mode 100644 index 00000000..127061bf --- /dev/null +++ b/packages/netlify-cms/example/index.html @@ -0,0 +1,211 @@ + + +
+ + +