diff --git a/packages/netlify-cms-backend-bitbucket/src/implementation.js b/packages/netlify-cms-backend-bitbucket/src/implementation.js index f864cf72..57d84266 100644 --- a/packages/netlify-cms-backend-bitbucket/src/implementation.js +++ b/packages/netlify-cms-backend-bitbucket/src/implementation.js @@ -160,7 +160,7 @@ export default class Bitbucket { const sem = semaphore(MAX_CONCURRENT_DOWNLOADS); const promises = []; files.forEach((file) => { - promises.push(new Promise((resolve, reject) => ( + promises.push(new Promise(resolve => ( sem.take(() => this.api.readFile(file.path, file.id).then((data) => { resolve({ file, data }); sem.leave(); diff --git a/packages/netlify-cms-backend-github/src/API.js b/packages/netlify-cms-backend-github/src/API.js index dd95bcdd..e4d88c4c 100644 --- a/packages/netlify-cms-backend-github/src/API.js +++ b/packages/netlify-cms-backend-github/src/API.js @@ -98,7 +98,7 @@ export default class API { cache: "no-store", }) .then(response => response.object) - .catch((error) => { + .catch(() => { // Meta ref doesn't exist const readme = { raw: "# Netlify CMS\n\nThis tree is used by the Netlify CMS to store metadata information for specific files and branches.", @@ -127,7 +127,7 @@ export default class API { }; return this.uploadBlob(fileTree[`${ key }.json`]) - .then(item => this.updateTree(branchData.sha, "/", fileTree)) + .then(() => this.updateTree(branchData.sha, "/", fileTree)) .then(changeTree => this.commit(`Updating “${ key }” metadata`, changeTree)) .then(response => this.patchRef("meta", "_netlify_cms", response.sha)) .then(() => { @@ -150,7 +150,7 @@ export default class API { cache: "no-store", }) .then(response => JSON.parse(response)) - .catch(error => console.log("%c %s does not have metadata", "line-height: 30px;text-align: center;font-weight: bold", key)); + .catch(() => console.log("%c %s does not have metadata", "line-height: 30px;text-align: center;font-weight: bold", key)); }); } @@ -217,7 +217,7 @@ export default class API { isUnpublishedEntryModification(path, branch) { return this.readFile(path, null, branch) - .then(data => true) + .then(() => true) .catch((err) => { if (err.message && err.message === "Not Found") { return false; @@ -338,7 +338,7 @@ export default class API { .then(branchData => this.updateTree(branchData.commit.sha, "/", fileTree)) .then(changeTree => this.commit(options.commitMessage, changeTree)) .then(commitResponse => this.createBranch(branchName, commitResponse.sha)) - .then(branchResponse => this.createPR(options.commitMessage, branchName)) + .then(() => this.createPR(options.commitMessage, branchName)) .then(pr => { prResponse = pr; return this.user(); @@ -466,7 +466,7 @@ export default class API { * changing only the parent SHA and tree for each, but retaining all other * info, such as the author/committer data. */ - const newHeadPromise = commits.reduce((lastCommitPromise, commit, idx) => { + const newHeadPromise = commits.reduce((lastCommitPromise, commit) => { return lastCommitPromise.then(newParent => { /** * Normalize commit data to ensure it's not nested in `commit.commit`. @@ -563,7 +563,7 @@ export default class API { const contentKey = slug; const branchName = this.generateBranchName(contentKey); return this.retrieveMetadata(contentKey) - .then(metadata => this.closePR(metadata.pr, metadata.objects)) + .then(metadata => this.closePR(metadata.pr)) .then(() => this.deleteBranch(branchName)) // If the PR doesn't exist, then this has already been deleted - // deletion should be idempotent, so we can consider this a @@ -579,7 +579,6 @@ export default class API { publishUnpublishedEntry(collection, slug) { const contentKey = slug; const branchName = this.generateBranchName(contentKey); - let prNumber; return this.retrieveMetadata(contentKey) .then(metadata => this.mergePR(metadata.pr, metadata.objects)) .then(() => this.deleteBranch(branchName)); @@ -601,7 +600,7 @@ export default class API { }); } - deleteRef(type, name, sha) { + deleteRef(type, name) { return this.request(`${ this.repoURL }/git/refs/${ type }/${ encodeURIComponent(name) }`, { method: 'DELETE', }); @@ -639,8 +638,7 @@ export default class API { }); } - closePR(pullrequest, objects) { - const headSha = pullrequest.head; + closePR(pullrequest) { const prNumber = pullrequest.number; console.log("%c Deleting PR", "line-height: 30px;text-align: center;font-weight: bold"); return this.request(`${ this.repoURL }/pulls/${ prNumber }`, { diff --git a/packages/netlify-cms-backend-github/src/implementation.js b/packages/netlify-cms-backend-github/src/implementation.js index 86ca791b..bf61214a 100644 --- a/packages/netlify-cms-backend-github/src/implementation.js +++ b/packages/netlify-cms-backend-github/src/implementation.js @@ -83,7 +83,7 @@ export default class GitHub { const sem = semaphore(MAX_CONCURRENT_DOWNLOADS); const promises = []; files.forEach((file) => { - promises.push(new Promise((resolve, reject) => ( + promises.push(new Promise(resolve => ( sem.take(() => this.api.readFile(file.path, file.sha).then((data) => { resolve({ file, data }); sem.leave(); @@ -123,9 +123,9 @@ export default class GitHub { async persistMedia(mediaFile, options = {}) { try { - const response = await this.api.persistFiles(null, [mediaFile], options); + await this.api.persistFiles(null, [mediaFile], options); - const { sha, value, size, path, fileObj } = mediaFile; + const { sha, value, path, fileObj } = mediaFile; const url = URL.createObjectURL(fileObj); return { id: sha, name: value, size: fileObj.size, url, path: trimStart(path, '/') }; } @@ -144,7 +144,7 @@ export default class GitHub { const sem = semaphore(MAX_CONCURRENT_DOWNLOADS); const promises = []; branches.map((branch) => { - promises.push(new Promise((resolve, reject) => { + promises.push(new Promise(resolve => { const slug = branch.ref.split("refs/heads/cms/").pop(); return sem.take(() => this.api.readUnpublishedBranchFile(slug).then((data) => { if (data === null || data === undefined) { @@ -161,7 +161,7 @@ export default class GitHub { }); sem.leave(); } - }).catch((err) => { + }).catch(() => { sem.leave(); resolve(null); })); diff --git a/packages/netlify-cms-backend-gitlab/src/API.js b/packages/netlify-cms-backend-gitlab/src/API.js index 1f7bb231..0ccf901e 100644 --- a/packages/netlify-cms-backend-gitlab/src/API.js +++ b/packages/netlify-cms-backend-gitlab/src/API.js @@ -51,7 +51,7 @@ export default class API { user = () => this.requestJSON("/user"); WRITE_ACCESS = 30; - hasWriteAccess = user => this.requestJSON(this.repoURL).then(({ permissions }) => { + hasWriteAccess = () => this.requestJSON(this.repoURL).then(({ permissions }) => { const { project_access, group_access } = permissions; if (project_access && (project_access.access_level >= this.WRITE_ACCESS)) { return true; diff --git a/packages/netlify-cms-backend-gitlab/src/implementation.js b/packages/netlify-cms-backend-gitlab/src/implementation.js index 6d8482bf..63de76eb 100644 --- a/packages/netlify-cms-backend-gitlab/src/implementation.js +++ b/packages/netlify-cms-backend-gitlab/src/implementation.js @@ -99,7 +99,7 @@ export default class GitLab { const sem = semaphore(MAX_CONCURRENT_DOWNLOADS); const promises = []; files.forEach((file) => { - promises.push(new Promise((resolve, reject) => ( + promises.push(new Promise(resolve => ( sem.take(() => this.api.readFile(file.path, file.id).then((data) => { resolve({ file, data }); sem.leave(); diff --git a/packages/netlify-cms-backend-test/src/implementation.js b/packages/netlify-cms-backend-test/src/implementation.js index 543ce837..1651802f 100644 --- a/packages/netlify-cms-backend-test/src/implementation.js +++ b/packages/netlify-cms-backend-test/src/implementation.js @@ -207,7 +207,7 @@ export default class TestRepo { return Promise.resolve(normalizedAsset); } - deleteFile(path, commitMessage) { + deleteFile(path) { const assetIndex = this.assets.findIndex(asset => asset.path === path); if (assetIndex > -1) { this.assets.splice(assetIndex, 1); diff --git a/packages/netlify-cms-core/src/actions/config.js b/packages/netlify-cms-core/src/actions/config.js index 7a553807..279965fd 100644 --- a/packages/netlify-cms-core/src/actions/config.js +++ b/packages/netlify-cms-core/src/actions/config.js @@ -51,7 +51,6 @@ function validateCollection(collection) { format, extension, frontmatter_delimiter: delimiter, - fields, } = collection.toJS(); if (!folder && !files) { diff --git a/packages/netlify-cms-core/src/actions/editorialWorkflow.js b/packages/netlify-cms-core/src/actions/editorialWorkflow.js index 21325a44..ab256116 100644 --- a/packages/netlify-cms-core/src/actions/editorialWorkflow.js +++ b/packages/netlify-cms-core/src/actions/editorialWorkflow.js @@ -189,6 +189,7 @@ function unpublishedEntryPublishError(collection, slug, transactionID) { } function unpublishedEntryDeleteRequest(collection, slug, transactionID) { + // The reducer doesn't handle this action -- it is for `optimist`. return { type: UNPUBLISHED_ENTRY_DELETE_REQUEST, payload: { collection, slug }, @@ -205,6 +206,7 @@ function unpublishedEntryDeleted(collection, slug, transactionID) { } function unpublishedEntryDeleteError(collection, slug, transactionID) { + // The reducer doesn't handle this action -- it is for `optimist`. return { type: UNPUBLISHED_ENTRY_DELETE_FAILURE, payload: { collection, slug }, diff --git a/packages/netlify-cms-core/src/backend.js b/packages/netlify-cms-core/src/backend.js index d2242bee..1b7a3d49 100644 --- a/packages/netlify-cms-core/src/backend.js +++ b/packages/netlify-cms-core/src/backend.js @@ -360,7 +360,6 @@ class Backend { description: entryDraft.getIn(["entry", "data", "description"], "No Description!"), }; - const entryData = entryDraft.getIn(["entry", "data"]).toJS(); let entryObj; if (newEntry) { if (!selectAllowNewEntries(collection)) { diff --git a/packages/netlify-cms-core/src/components/App/App.js b/packages/netlify-cms-core/src/components/App/App.js index 78dee720..a11c3e2b 100644 --- a/packages/netlify-cms-core/src/components/App/App.js +++ b/packages/netlify-cms-core/src/components/App/App.js @@ -167,7 +167,7 @@ class App extends React.Component { } } -function mapStateToProps(state, ownProps) { +function mapStateToProps(state) { const { auth, config, collections, globalUI } = state; const user = auth && auth.get('user'); const isFetching = globalUI.get('isFetching'); diff --git a/packages/netlify-cms-core/src/components/App/Header.js b/packages/netlify-cms-core/src/components/App/Header.js index 9232f68d..39664634 100644 --- a/packages/netlify-cms-core/src/components/App/Header.js +++ b/packages/netlify-cms-core/src/components/App/Header.js @@ -110,15 +110,12 @@ export default class Header extends React.Component { const { user, collections, - toggleDrawer, onLogoutClick, openMediaLibrary, hasWorkflow, displayUrl, } = this.props; - const avatarUrl = user.get('avatar_url'); - return ( diff --git a/packages/netlify-cms-core/src/components/Collection/Entries/Entries.js b/packages/netlify-cms-core/src/components/Collection/Entries/Entries.js index 31a95bd0..cf0e7daf 100644 --- a/packages/netlify-cms-core/src/components/Collection/Entries/Entries.js +++ b/packages/netlify-cms-core/src/components/Collection/Entries/Entries.js @@ -8,8 +8,6 @@ const Entries = ({ collections, entries, publicFolder, - page, - onPaginate, isFetching, viewStyle, cursor, diff --git a/packages/netlify-cms-core/src/components/Collection/Entries/EntriesSearch.js b/packages/netlify-cms-core/src/components/Collection/Entries/EntriesSearch.js index d3cb5d81..924e7f65 100644 --- a/packages/netlify-cms-core/src/components/Collection/Entries/EntriesSearch.js +++ b/packages/netlify-cms-core/src/components/Collection/Entries/EntriesSearch.js @@ -53,7 +53,7 @@ class EntriesSearch extends React.Component { }; render () { - const { collections, entries, publicFolder, page, isFetching } = this.props; + const { collections, entries, publicFolder, isFetching } = this.props; return ( ); diff --git a/packages/netlify-cms-core/src/components/Editor/Editor.js b/packages/netlify-cms-core/src/components/Editor/Editor.js index 2c7cd7b4..fbfaea88 100644 --- a/packages/netlify-cms-core/src/components/Editor/Editor.js +++ b/packages/netlify-cms-core/src/components/Editor/Editor.js @@ -66,9 +66,7 @@ class Editor extends React.Component { componentDidMount() { const { - entry, newEntry, - entryDraft, collection, slug, loadEntry, @@ -179,12 +177,12 @@ class Editor extends React.Component { return; } const newStatus = status.get(newStatusName); - this.props.updateUnpublishedEntryStatus(collection.get('name'), slug, currentStatus, newStatus); + updateUnpublishedEntryStatus(collection.get('name'), slug, currentStatus, newStatus); } handlePersistEntry = async (opts = {}) => { const { createNew = false } = opts; - const { persistEntry, collection, entryDraft, newEntry, currentStatus, hasWorkflow, loadEntry, slug, createEmptyDraft } = this.props; + const { persistEntry, collection, currentStatus, hasWorkflow, loadEntry, slug, createEmptyDraft } = this.props; await persistEntry(collection) @@ -299,7 +297,6 @@ class Editor extends React.Component { onChangeStatus={this.handleChangeStatus} onPublish={this.handlePublishEntry} showDelete={this.props.showDelete} - enableSave={entryDraft.get('hasChanged')} user={user} hasChanged={hasChanged} displayUrl={displayUrl} @@ -315,7 +312,7 @@ class Editor extends React.Component { } function mapStateToProps(state, ownProps) { - const { collections, entryDraft, mediaLibrary, auth, config, entries } = state; + const { collections, entryDraft, auth, config, entries } = state; const slug = ownProps.match.params.slug; const collection = collections.get(ownProps.match.params.name); const collectionName = collection.get('name'); diff --git a/packages/netlify-cms-core/src/components/Editor/EditorControlPane/EditorControl.js b/packages/netlify-cms-core/src/components/Editor/EditorControlPane/EditorControl.js index af14bd64..800f5d50 100644 --- a/packages/netlify-cms-core/src/components/Editor/EditorControlPane/EditorControl.js +++ b/packages/netlify-cms-core/src/components/Editor/EditorControlPane/EditorControl.js @@ -195,7 +195,7 @@ class EditorControl extends React.Component { } } -const mapStateToProps = (state, ownProps) => ({ +const mapStateToProps = state => ({ mediaPaths: state.mediaLibrary.get('controlMedia'), boundGetAsset: getAsset.bind(null, state), isFetching: state.search.get('isFetching'), diff --git a/packages/netlify-cms-core/src/components/Editor/EditorInterface.js b/packages/netlify-cms-core/src/components/Editor/EditorInterface.js index e24e2c66..43b40e08 100644 --- a/packages/netlify-cms-core/src/components/Editor/EditorInterface.js +++ b/packages/netlify-cms-core/src/components/Editor/EditorInterface.js @@ -154,7 +154,6 @@ class EditorInterface extends Component { fieldsErrors, getAsset, onChange, - enableSave, showDelete, onDelete, onDeleteUnpublishedChanges, @@ -230,7 +229,6 @@ class EditorInterface extends Component { showDelete={showDelete} onPublish={onPublish} onPublishAndNew={() => this.handleOnPublish({ createNew: true })} - enableSave={enableSave} user={user} hasChanged={hasChanged} displayUrl={displayUrl} @@ -278,7 +276,6 @@ EditorInterface.propTypes = { onChange: PropTypes.func.isRequired, onValidate: PropTypes.func.isRequired, onPersist: PropTypes.func.isRequired, - enableSave: PropTypes.bool.isRequired, showDelete: PropTypes.bool.isRequired, onDelete: PropTypes.func.isRequired, onDeleteUnpublishedChanges: PropTypes.func.isRequired, diff --git a/packages/netlify-cms-core/src/components/Editor/EditorPreviewPane/EditorPreviewPane.js b/packages/netlify-cms-core/src/components/Editor/EditorPreviewPane/EditorPreviewPane.js index 83935e5e..07ce5df9 100644 --- a/packages/netlify-cms-core/src/components/Editor/EditorPreviewPane/EditorPreviewPane.js +++ b/packages/netlify-cms-core/src/components/Editor/EditorPreviewPane/EditorPreviewPane.js @@ -116,7 +116,7 @@ export default class PreviewPane extends React.Component { const value = entry.getIn(['data', field.get('name')]); if (List.isList(value)) { - return value.map((val, index) => { + return value.map(val => { const widgets = nestedFields && Map(nestedFields.map((f, i) => [f.get('name'),
{this.getWidget(f, val, this.props)}
])); return Map({ data: val, widgets }); }); diff --git a/packages/netlify-cms-core/src/components/Editor/EditorToolbar.js b/packages/netlify-cms-core/src/components/Editor/EditorToolbar.js index d2e15cea..2f1866b2 100644 --- a/packages/netlify-cms-core/src/components/Editor/EditorToolbar.js +++ b/packages/netlify-cms-core/src/components/Editor/EditorToolbar.js @@ -16,7 +16,6 @@ import { } from 'netlify-cms-ui-default'; import { status } from 'Constants/publishModes'; import SettingsDropdown from 'UI/SettingsDropdown'; -import { stripProtocol } from 'Lib/urlHelper'; const styles = { buttonMargin: css` @@ -262,8 +261,6 @@ export default class EditorToolbar extends React.Component { renderWorkflowPublishControls = () => { const { collection, - onPersist, - onPersistAndNew, isUpdatingStatus, isPublishing, onChangeStatus, @@ -323,22 +320,13 @@ export default class EditorToolbar extends React.Component { render() { const { - isPersisting, - onPersist, - onPersistAndNew, - enableSave, - showDelete, - onDelete, user, hasChanged, displayUrl, collection, hasWorkflow, - hasUnpublishedChanges, onLogoutClick, } = this.props; - const disabled = !enableSave || isPersisting; - const avatarUrl = user.get('avatar_url'); return ( diff --git a/packages/netlify-cms-core/src/components/MediaLibrary/MediaLibrary.js b/packages/netlify-cms-core/src/components/MediaLibrary/MediaLibrary.js index 266d31cf..8b5d9670 100644 --- a/packages/netlify-cms-core/src/components/MediaLibrary/MediaLibrary.js +++ b/packages/netlify-cms-core/src/components/MediaLibrary/MediaLibrary.js @@ -219,7 +219,6 @@ class MediaLibrary extends React.Component { isPersisting, isDeleting, hasNextPage, - page, isPaginating, privateUpload, } = this.props; @@ -236,7 +235,6 @@ class MediaLibrary extends React.Component { isPersisting={isPersisting} isDeleting={isDeleting} hasNextPage={hasNextPage} - page={page} isPaginating={isPaginating} privateUpload={privateUpload} query={this.state.query} diff --git a/packages/netlify-cms-core/src/components/MediaLibrary/MediaLibraryCardGrid.js b/packages/netlify-cms-core/src/components/MediaLibrary/MediaLibraryCardGrid.js index 490325ae..4f01a18f 100644 --- a/packages/netlify-cms-core/src/components/MediaLibrary/MediaLibraryCardGrid.js +++ b/packages/netlify-cms-core/src/components/MediaLibrary/MediaLibraryCardGrid.js @@ -37,7 +37,7 @@ const MediaLibraryCardGrid = ({ { - mediaItems.map((file, idx) => + mediaItems.map(file => { const DragComponent = ReactDNDDragSource( namespace, { - beginDrag({ children, isDragging, connectDragComponent, ...ownProps }) { + beginDrag({ children, isDragging, connectDragComponent, ...ownProps }) { // eslint-disable-line no-unused-vars // We return the rest of the props as the ID of the element being dragged. return ownProps; }, }, - (connect, monitor) => ({ + connect => ({ connectDragComponent: connect.dragSource(), }), )( diff --git a/packages/netlify-cms-core/src/components/Workflow/WorkflowCard.js b/packages/netlify-cms-core/src/components/Workflow/WorkflowCard.js index 3034ddb0..ad7fc760 100644 --- a/packages/netlify-cms-core/src/components/Workflow/WorkflowCard.js +++ b/packages/netlify-cms-core/src/components/Workflow/WorkflowCard.js @@ -98,7 +98,6 @@ const WorkflowCardContainer = styled.div` const WorkflowCard = ({ collectionName, title, - author, authorLastChange, body, isModification, diff --git a/packages/netlify-cms-core/src/components/Workflow/WorkflowList.js b/packages/netlify-cms-core/src/components/Workflow/WorkflowList.js index 1664c3ab..a6543926 100644 --- a/packages/netlify-cms-core/src/components/Workflow/WorkflowList.js +++ b/packages/netlify-cms-core/src/components/Workflow/WorkflowList.js @@ -159,8 +159,6 @@ Please drag the card to the "Ready" column to enable publishing.`
{ entries.map((entry) => { - // Look for an "author" field. Fallback to username on backend implementation; - const author = entry.getIn(['data', 'author'], entry.getIn(['metaData', 'user'])); const timestamp = moment(entry.getIn(['metaData', 'timeStamp'])).format('MMMM D'); const editLink = `collections/${ entry.getIn(['metaData', 'collection']) }/entries/${ entry.get('slug') }`; const slug = entry.get('slug'); @@ -181,7 +179,6 @@ Please drag the card to the "Ready" column to enable publishing.` 1); }); case MEDIA_LOAD_SUCCESS: { - const { files = [], page, canPaginate, dynamicSearch, dynamicSearchQuery, privateUpload } = action.payload; + const { files = [], page, canPaginate, dynamicSearch, dynamicSearchQuery } = action.payload; if (privateUploadChanged) { return state; diff --git a/packages/netlify-cms-core/src/valueObjects/AssetProxy.js b/packages/netlify-cms-core/src/valueObjects/AssetProxy.js index 487e6624..40a8aa37 100644 --- a/packages/netlify-cms-core/src/valueObjects/AssetProxy.js +++ b/packages/netlify-cms-core/src/valueObjects/AssetProxy.js @@ -30,7 +30,7 @@ AssetProxy.prototype.toString = function () { }; AssetProxy.prototype.toBase64 = function () { - return new Promise((resolve, reject) => { + return new Promise(resolve => { const fr = new FileReader(); fr.onload = (readerEvt) => { const binaryString = readerEvt.target.result; @@ -50,7 +50,7 @@ export function createAssetProxy(value, fileObj, uploaded = false, privateUpload response => ( new AssetProxy(response.asset.url.replace(/^(https?):/, ''), null, true, response.asset) ), - error => new AssetProxy(value, fileObj, false) + () => new AssetProxy(value, fileObj, false) ); } else if (privateUpload) { throw new Error('The Private Upload option is only avaible for Asset Store Integration'); diff --git a/packages/netlify-cms-core/src/valueObjects/EditorComponent.js b/packages/netlify-cms-core/src/valueObjects/EditorComponent.js index 15231fcf..8d26fc99 100644 --- a/packages/netlify-cms-core/src/valueObjects/EditorComponent.js +++ b/packages/netlify-cms-core/src/valueObjects/EditorComponent.js @@ -1,40 +1,19 @@ -import PropTypes from 'prop-types'; -import { Component, Children } from 'react'; -import { List, Record, fromJS } from 'immutable'; +import { Record, fromJS } from 'immutable'; import { isFunction } from 'lodash'; -const plugins = { editor: List() }; - const catchesNothing = /.^/; +/* eslint-disable no-unused-vars */ const EditorComponent = Record({ id: null, label: 'unnamed component', icon: 'exclamation-triangle', fields: [], pattern: catchesNothing, - fromBlock(match) { return {}; }, + fromBlock(match) { return {}; }, toBlock(attributes) { return 'Plugin'; }, toPreview(attributes) { return 'Plugin'; }, }); - - -class Plugin extends Component { - static propTypes = { - children: PropTypes.element.isRequired, - }; - - static childContextTypes = { - plugins: PropTypes.object, - }; - - getChildContext() { - return { plugins }; - } - - render() { - return Children.only(this.props.children); - } -} +/* eslint-enable */ export default function createEditorComponent(config) { const configObj = new EditorComponent({ diff --git a/packages/netlify-cms-core/webpack.config.js b/packages/netlify-cms-core/webpack.config.js index 975e0e2b..73e96e31 100644 --- a/packages/netlify-cms-core/webpack.config.js +++ b/packages/netlify-cms-core/webpack.config.js @@ -1,8 +1,7 @@ const path = require('path'); const webpack = require('webpack'); const pkg = require('./package.json'); -const FriendlyErrorsWebpackPlugin = require('friendly-errors-webpack-plugin'); -const { getConfig, rules, plugins } = require('../../scripts/webpack.js'); +const { getConfig, rules } = require('../../scripts/webpack.js'); const isProduction = process.env.NODE_ENV === 'production'; @@ -16,7 +15,7 @@ module.exports = { rules: [ ...Object.entries(rules) .filter(([ key ]) => key !== 'js') - .map(([ _, rule ]) => rule()), + .map(([ , rule ]) => rule()), { test: /\.js$/, exclude: /node_modules/, diff --git a/packages/netlify-cms-lib-util/src/Cursor.js b/packages/netlify-cms-lib-util/src/Cursor.js index 3b9f926a..8ff9c374 100644 --- a/packages/netlify-cms-lib-util/src/Cursor.js +++ b/packages/netlify-cms-lib-util/src/Cursor.js @@ -96,7 +96,7 @@ export default class Cursor { return [this.store.get("data").delete("wrapped_cursor_data"), this.updateStore("data", data => data.get("wrapped_cursor_data"))]; } clearData() { - return this.updateStore("data", data => Map()); + return this.updateStore("data", () => Map()); } setMeta(meta) { diff --git a/packages/netlify-cms-lib-util/src/promise.js b/packages/netlify-cms-lib-util/src/promise.js index 0b0fc16a..e3f86bf8 100644 --- a/packages/netlify-cms-lib-util/src/promise.js +++ b/packages/netlify-cms-lib-util/src/promise.js @@ -2,7 +2,7 @@ import zipObject from 'lodash/zipObject'; export const filterPromises = (arr, filter) => Promise.all(arr.map(entry => filter(entry))) - .then(bits => arr.filter(entry => bits.shift())); + .then(bits => arr.filter(() => bits.shift())); export const resolvePromiseProperties = (obj) => { // Get the keys which represent promises diff --git a/packages/netlify-cms-ui-default/src/Icon.js b/packages/netlify-cms-ui-default/src/Icon.js index 8467b1ff..c69d621a 100644 --- a/packages/netlify-cms-ui-default/src/Icon.js +++ b/packages/netlify-cms-ui-default/src/Icon.js @@ -50,7 +50,7 @@ const sizes = { large: '32px', }; -const Icon = ({ type, direction, size = 'medium', width, height, className }) => ( +const Icon = ({ type, direction, size = 'medium', className }) => ( {this.renderChild()}
; } } diff --git a/packages/netlify-cms-ui-default/src/Toggle.js b/packages/netlify-cms-ui-default/src/Toggle.js index e607d0de..1147ee23 100644 --- a/packages/netlify-cms-ui-default/src/Toggle.js +++ b/packages/netlify-cms-ui-default/src/Toggle.js @@ -39,7 +39,6 @@ const ToggleBackground = styled.span` const Toggle = ({ active, onChange, - renderBackground, onFocus, onBlur, className, diff --git a/packages/netlify-cms-widget-date/src/DateControl.js b/packages/netlify-cms-widget-date/src/DateControl.js index 26e73930..afd10d69 100644 --- a/packages/netlify-cms-widget-date/src/DateControl.js +++ b/packages/netlify-cms-widget-date/src/DateControl.js @@ -81,7 +81,7 @@ export default class DateControl extends React.Component { }; render() { - const { includeTime, value, classNameWrapper, setActiveStyle, setInactiveStyle } = this.props; + const { includeTime, value, classNameWrapper, setActiveStyle } = this.props; return ( { - const { value, classNameWrapper } = this.props; + const { value } = this.props; const size = MAX_DISPLAY_LENGTH; if (!value || value.length <= size) { return value; diff --git a/packages/netlify-cms-widget-list/src/ListControl.js b/packages/netlify-cms-widget-list/src/ListControl.js index 64ac2f1c..6d117fef 100644 --- a/packages/netlify-cms-widget-list/src/ListControl.js +++ b/packages/netlify-cms-widget-list/src/ListControl.js @@ -202,7 +202,7 @@ export default class ListControl extends React.Component { } onSortEnd = ({ oldIndex, newIndex }) => { - const { value, onChange } = this.props; + const { value } = this.props; const { itemsCollapsed } = this.state; // Update value @@ -219,11 +219,6 @@ export default class ListControl extends React.Component { renderItem = (item, index) => { const { field, - getAsset, - mediaPaths, - onOpenMediaLibrary, - onAddAsset, - onRemoveInsertedMedia, classNameWrapper, editorControl, resolveWidget, diff --git a/packages/netlify-cms-widget-markdown/src/MarkdownControl/Shortcode.js b/packages/netlify-cms-widget-markdown/src/MarkdownControl/Shortcode.js index ca4f04d6..52b0d081 100644 --- a/packages/netlify-cms-widget-markdown/src/MarkdownControl/Shortcode.js +++ b/packages/netlify-cms-widget-markdown/src/MarkdownControl/Shortcode.js @@ -77,7 +77,7 @@ export default class Shortcode extends React.Component { } } - renderControl = (shortcodeData, field, index) => { + renderControl = (shortcodeData, field) => { if (field.get('widget') === 'hidden') return null; const value = shortcodeData.get(field.get('name')); const key = `field-${ field.get('name') }`; @@ -92,7 +92,7 @@ export default class Shortcode extends React.Component { }; render() { - const { attributes, node, editor } = this.props; + const { attributes, node } = this.props; const { collapsed } = this.state; const pluginId = node.data.get('shortcode'); const shortcodeData = Map(this.props.node.data.get('shortcodeData')); diff --git a/packages/netlify-cms-widget-markdown/src/MarkdownControl/Toolbar.js b/packages/netlify-cms-widget-markdown/src/MarkdownControl/Toolbar.js index fbc6aebc..dc72913a 100644 --- a/packages/netlify-cms-widget-markdown/src/MarkdownControl/Toolbar.js +++ b/packages/netlify-cms-widget-markdown/src/MarkdownControl/Toolbar.js @@ -64,13 +64,6 @@ export default class Toolbar extends React.Component { disabled: PropTypes.bool, }; - constructor(props) { - super(props); - this.state = { - activePlugin: null, - }; - } - isHidden = button => { const { buttons } = this.props; return List.isList(buttons) ? !buttons.includes(button) : false; @@ -87,14 +80,10 @@ export default class Toolbar extends React.Component { onToggleMode, rawMode, plugins, - onAddAsset, - getAsset, disabled, onSubmit, } = this.props; - const { activePlugin } = this.state; - return (
diff --git a/packages/netlify-cms-widget-markdown/src/MarkdownControl/VisualEditor.js b/packages/netlify-cms-widget-markdown/src/MarkdownControl/VisualEditor.js index 19587a44..5f2737fa 100644 --- a/packages/netlify-cms-widget-markdown/src/MarkdownControl/VisualEditor.js +++ b/packages/netlify-cms-widget-markdown/src/MarkdownControl/VisualEditor.js @@ -76,7 +76,7 @@ export default class Editor extends React.Component { handleBlockClick = (event, type) => { event.preventDefault(); let { value } = this.state; - const { document: doc, selection } = value; + const { document: doc } = value; const { unwrapList, wrapInList } = EditListConfigured.changes; let change = value.change(); @@ -178,9 +178,8 @@ export default class Editor extends React.Component { handleDocumentChange = debounce(change => { - const { onChange, getEditorComponents } = this.props; + const { onChange } = this.props; const raw = change.value.document.toJSON(); - const plugins = getEditorComponents(); const markdown = slateToMarkdown(raw); onChange(markdown); }, 150); diff --git a/packages/netlify-cms-widget-markdown/src/MarkdownControl/__tests__/parser.spec.js b/packages/netlify-cms-widget-markdown/src/MarkdownControl/__tests__/parser.spec.js index b207de6c..097afb46 100644 --- a/packages/netlify-cms-widget-markdown/src/MarkdownControl/__tests__/parser.spec.js +++ b/packages/netlify-cms-widget-markdown/src/MarkdownControl/__tests__/parser.spec.js @@ -1,51 +1,7 @@ -import React from 'react'; -import { fromJS } from 'immutable'; import { markdownToSlate } from '../../serializers'; const parser = markdownToSlate; -// Temporary plugins test -const testPlugins = fromJS([ - { - label: 'Image', - id: 'image', - fromBlock: match => match && { - image: match[2], - alt: match[1], - }, - toBlock: data => `![${ data.alt }](${ data.image })`, - toPreview: data => {data.alt}, // eslint-disable-line react/display-name - pattern: /^!\[([^\]]+)]\(([^)]+)\)$/, - fields: [{ - label: 'Image', - name: 'image', - widget: 'image', - }, { - label: 'Alt Text', - name: 'alt', - }], - }, - { - id: "youtube", - label: "Youtube", - fields: [{name: 'id', label: 'Youtube Video ID'}], - pattern: /^{{<\s?youtube (\S+)\s?>}}/, - fromBlock: function(match) { - return { - id: match[1] - }; - }, - toBlock: function(obj) { - return '{{< youtube ' + obj.id + ' >}}'; - }, - toPreview: function(obj) { - return ( - 'Youtube Video' - ); - } - }, -]); - describe("Compile markdown to Slate Raw AST", () => { it("should compile simple markdown", () => { const value = ` diff --git a/packages/netlify-cms-widget-markdown/src/MarkdownControl/keys.js b/packages/netlify-cms-widget-markdown/src/MarkdownControl/keys.js index 46eb7228..305f5d3c 100644 --- a/packages/netlify-cms-widget-markdown/src/MarkdownControl/keys.js +++ b/packages/netlify-cms-widget-markdown/src/MarkdownControl/keys.js @@ -20,7 +20,7 @@ function onKeyDown(event, change) { * If the selected block is the first block in the document, create the * new block above it. If not, create the new block below it. */ - const { document: doc, range, anchorBlock, focusBlock } = change.value; + const { document: doc, anchorBlock, focusBlock } = change.value; const singleBlockSelected = anchorBlock === focusBlock; if (!singleBlockSelected || !focusBlock.isVoid) return; @@ -45,7 +45,7 @@ function onKeyDown(event, change) { [ '`', 'code' ], ]; - const [ markKey, markName ] = marks.find(([ key ]) => isHotkey(`mod+${key}`, event)) || []; + const [ , markName ] = marks.find(([ key ]) => isHotkey(`mod+${key}`, event)) || []; if (markName) { event.preventDefault(); diff --git a/packages/netlify-cms-widget-markdown/src/regexHelper.js b/packages/netlify-cms-widget-markdown/src/regexHelper.js index c4b14e41..febded3d 100644 --- a/packages/netlify-cms-widget-markdown/src/regexHelper.js +++ b/packages/netlify-cms-widget-markdown/src/regexHelper.js @@ -14,7 +14,7 @@ export function joinPatternSegments(patterns) { * each in a non-capturing group and interposing alternation characters (|) so * that each expression is executed separately. */ -export function combinePatterns(patterns, flags = '') { +export function combinePatterns(patterns) { return patterns.map(p => `(?:${p.source})`).join('|'); } diff --git a/packages/netlify-cms-widget-markdown/src/serializers/remarkAllowHtmlEntities.js b/packages/netlify-cms-widget-markdown/src/serializers/remarkAllowHtmlEntities.js index 6d8b4790..8e48a0f9 100644 --- a/packages/netlify-cms-widget-markdown/src/serializers/remarkAllowHtmlEntities.js +++ b/packages/netlify-cms-widget-markdown/src/serializers/remarkAllowHtmlEntities.js @@ -16,7 +16,6 @@ export default function remarkAllowHtmlEntities() { var tokenizer; var name; var min; - var now; /* istanbul ignore if - never used (yet) */ if (silent) { diff --git a/packages/netlify-cms-widget-markdown/src/serializers/slateRemark.js b/packages/netlify-cms-widget-markdown/src/serializers/slateRemark.js index d836b7cd..ae3b5fc3 100644 --- a/packages/netlify-cms-widget-markdown/src/serializers/slateRemark.js +++ b/packages/netlify-cms-widget-markdown/src/serializers/slateRemark.js @@ -92,7 +92,7 @@ function transform(node) { * they were text is a bit of a necessary hack. */ function combineTextAndInline(nodes) { - return nodes.reduce((acc, node, idx, nodes) => { + return nodes.reduce((acc, node) => { const prevNode = last(acc); const prevNodeLeaves = get(prevNode, 'leaves'); const data = node.data || {}; @@ -158,19 +158,6 @@ function processCodeMark(markTypes) { return { filteredMarkTypes, textNodeType }; } - -/** - * Wraps a text node in one or more mark nodes by placing the text node in an - * array and using that as the `children` value of a mark node. The resulting - * mark node is then placed in an array and used as the child of a mark node for - * the next mark type in `markTypes`. This continues for each member of - * `markTypes`. If `markTypes` is empty, the original text node is returned. - */ -function wrapTextWithMarks(textNode, markTypes) { - const wrapTextWithMark = (childNode, markType) => u(markType, [childNode]); - return markTypes.reduce(wrapTextWithMark, textNode); -} - /** * Converts a Slate Raw text node to an MDAST text node. * diff --git a/packages/netlify-cms-widget-object/src/ObjectControl.js b/packages/netlify-cms-widget-object/src/ObjectControl.js index 48197fd6..a8fd925b 100644 --- a/packages/netlify-cms-widget-object/src/ObjectControl.js +++ b/packages/netlify-cms-widget-object/src/ObjectControl.js @@ -51,13 +51,11 @@ export default class ObjectControl extends Component { } controlFor(field, key) { - const { value, onChangeObject, editorControl: EditorControl, resolveWidget } = this.props; + const { value, onChangeObject, editorControl: EditorControl } = this.props; if (field.get('widget') === 'hidden') { return null; } - const widgetName = field.get('widget') || 'string'; - const widget = resolveWidget(widgetName); const fieldName = field.get('name'); const fieldValue = value && Map.isMap(value) ? value.get(fieldName) : value; diff --git a/packages/netlify-cms-widget-text/src/TextControl.js b/packages/netlify-cms-widget-text/src/TextControl.js index 1bfe7d10..f32ccdfc 100644 --- a/packages/netlify-cms-widget-text/src/TextControl.js +++ b/packages/netlify-cms-widget-text/src/TextControl.js @@ -23,7 +23,7 @@ export default class TextControl extends React.Component { * state. Always updating this particular widget should generally be low cost, * but this should be optimized in the future. */ - shouldComponentUpdate(nextProps) { + shouldComponentUpdate() { return true; } diff --git a/packages/netlify-cms/webpack.config.js b/packages/netlify-cms/webpack.config.js index 8a9c5f01..4cb063f0 100644 --- a/packages/netlify-cms/webpack.config.js +++ b/packages/netlify-cms/webpack.config.js @@ -14,7 +14,7 @@ const baseConfig = { plugins: [ ...Object.entries(plugins) .filter(([ key ]) => key !== 'friendlyErrors') - .map(([ _, plugin ]) => plugin()), + .map(([ , plugin ]) => plugin()), new webpack.DefinePlugin({ NETLIFY_CMS_VERSION: JSON.stringify(`${pkg.version}${isProduction ? '' : '-dev'}`), NETLIFY_CMS_CORE_VERSION: null, diff --git a/website/src/components/header.js b/website/src/components/header.js index 8c24387f..be3423a8 100644 --- a/website/src/components/header.js +++ b/website/src/components/header.js @@ -22,7 +22,7 @@ class Header extends Component { window.removeEventListener('scroll', this.handleScroll); } - handleScroll = event => { + handleScroll = () => { const currentWindowPos = document.documentElement.scrollTop || document.body.scrollTop; diff --git a/website/src/components/video-embed.js b/website/src/components/video-embed.js index 9f985537..83f6e319 100644 --- a/website/src/components/video-embed.js +++ b/website/src/components/video-embed.js @@ -6,7 +6,7 @@ class VideoEmbed extends Component { state = { toggled: false }; - toggleVideo = event => { + toggleVideo = () => { this.setState({ toggled: true }); diff --git a/website/src/pages/community.js b/website/src/pages/community.js index e4903871..5d797bec 100644 --- a/website/src/pages/community.js +++ b/website/src/pages/community.js @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import React from 'react'; import Helmet from 'react-helmet'; import Markdown from 'react-markdown'; diff --git a/website/src/pages/index.js b/website/src/pages/index.js index 73c519dc..b051f6cf 100644 --- a/website/src/pages/index.js +++ b/website/src/pages/index.js @@ -1,4 +1,4 @@ -import React, { Component, Fragment } from 'react'; +import React, { Fragment } from 'react'; import moment from 'moment'; import Markdownify from '../components/markdownify';