From 50c4eaae70e219c4d3cbcaf5892eced9f97c080d Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Sun, 28 Oct 2018 15:44:22 +0800 Subject: [PATCH] feat(settings): toggle copy buttons --- src/components/SettingsBar.js | 62 ++++++++++++++++++++++++++++++++--- src/components/SideBar.js | 8 +++++ src/driver/core/Gitako.js | 3 -- src/driver/core/SideBar.js | 15 ++++++--- src/utils/DOMHelper.js | 6 ++-- src/utils/configHelper.js | 2 ++ 6 files changed, 82 insertions(+), 14 deletions(-) diff --git a/src/components/SettingsBar.js b/src/components/SettingsBar.js index c36cdb2..0c61084 100644 --- a/src/components/SettingsBar.js +++ b/src/components/SettingsBar.js @@ -8,6 +8,8 @@ import { version } from '../../package' const wikiLinks = { compressSingletonFolder: 'https://github.com/EnixCoda/Gitako/wiki/Compress-Singleton-Folder', changeLog: 'https://github.com/EnixCoda/Gitako/wiki/Change-Log', + copyFileButton: 'https://github.com/EnixCoda/Gitako/wiki/Copy-file-and-snippet', + copySnippet: 'https://github.com/EnixCoda/Gitako/wiki/Copy-file-and-snippet', } const ACCESS_TOKEN_REGEXP = /^[0-9a-f]{40}$/ @@ -65,12 +67,12 @@ export default class SettingsBar extends React.PureComponent { } componentWillMount() { - const { toggleShowSideBarShortcut, compressSingletonFolder } = this.props - this.setState({ toggleShowSideBarShortcut, compressSingletonFolder }) + const { toggleShowSideBarShortcut, compressSingletonFolder, copyFileButton, copySnippetButton } = this.props + this.setState({ toggleShowSideBarShortcut, compressSingletonFolder, copyFileButton, copySnippetButton }) } - componentWillReceiveProps({ toggleShowSideBarShortcut, compressSingletonFolder }) { - this.setState({ toggleShowSideBarShortcut, compressSingletonFolder }) + componentWillReceiveProps({ toggleShowSideBarShortcut, compressSingletonFolder, copyFileButton, copySnippetButton }) { + this.setState({ toggleShowSideBarShortcut, compressSingletonFolder, copyFileButton, copySnippetButton }) } onInputAccessToken = event => { @@ -145,11 +147,27 @@ export default class SettingsBar extends React.PureComponent { }) } + setCopyFile = async e => { + const enabled = e.target.checked + await configHelper.setOne(config.copyFileButton, enabled) + const { setCopyFile } = this.props + setCopyFile(enabled) + } + + setCopySnippet = async e => { + const enabled = e.target.checked + await configHelper.setOne(config.copySnippetButton, enabled) + const { setCopySnippet } = this.props + setCopySnippet(enabled) + } + render() { const { accessTokenHint, toggleShowSideBarShortcut, compressSingletonFolder, + copyFileButton, + copySnippetButton, shortcutHint, accessToken, compressHint, @@ -228,6 +246,42 @@ export default class SettingsBar extends React.PureComponent { {compressHint &&
{compressHint}
} +
+

+ Copy File  + + (?) + +

+ +
+
+

+ Copy Snippet  + + (?) + +

+ +

Issue

diff --git a/src/components/SideBar.js b/src/components/SideBar.js index e1d995c..51a2d82 100644 --- a/src/components/SideBar.js +++ b/src/components/SideBar.js @@ -131,6 +131,8 @@ export default class Gitako extends React.PureComponent { showSettings, accessToken, compressSingletonFolder, + copyFileButton, + copySnippetButton, toggleShowSideBarShortcut, logoContainerElement, toggleShowSideBar, @@ -138,6 +140,8 @@ export default class Gitako extends React.PureComponent { onShortcutChange, onAccessTokenChange, setCompressSingleton, + setCopyFile, + setCopySnippet, } = this.props return (
@@ -158,8 +162,12 @@ export default class Gitako extends React.PureComponent { activated={showSettings} accessToken={accessToken} compressSingletonFolder={compressSingletonFolder} + copyFileButton={copyFileButton} + copySnippetButton={copySnippetButton} toggleShowSideBarShortcut={toggleShowSideBarShortcut} setCompressSingleton={setCompressSingleton} + setCopyFile={setCopyFile} + setCopySnippet={setCopySnippet} />
diff --git a/src/driver/core/Gitako.js b/src/driver/core/Gitako.js index b0512c1..922294c 100644 --- a/src/driver/core/Gitako.js +++ b/src/driver/core/Gitako.js @@ -1,7 +1,4 @@ -import DOMHelper from 'utils/DOMHelper' - const init = dispatch => () => { - DOMHelper.decorateGitHubPageContent() } export default { diff --git a/src/driver/core/SideBar.js b/src/driver/core/SideBar.js index bad4925..f5cbf9d 100644 --- a/src/driver/core/SideBar.js +++ b/src/driver/core/SideBar.js @@ -11,8 +11,9 @@ const init = dispatch => async () => { let nothingWentWrong = true const metaData = URLHelper.parse() dispatch(setMetaData, metaData) - const { access_token: accessToken, shortcut, compressSingletonFolder } = await configHelper.get() - dispatch({ accessToken, toggleShowSideBarShortcut: shortcut, compressSingletonFolder }) + const { access_token: accessToken, shortcut, compressSingletonFolder, copyFileButton, copySnippetButton } = await configHelper.get() + DOMHelper.decorateGitHubPageContent({ copyFileButton, copySnippetButton }) + dispatch({ accessToken, toggleShowSideBarShortcut: shortcut, compressSingletonFolder, copyFileButton, copySnippetButton }) const detectedBranchName = DOMHelper.getCurrentBranch() || 'master' let aggressivelyGotTreeData = GitHubHelper.getTreeData({ ...metaData, @@ -69,9 +70,9 @@ const handleError = dispatch => async (err) => { } const onPJAXEnd = dispatch => () => { - dispatch(({ metaData }) => { + dispatch(({ metaData, copyFileButton, copySnippetButton }) => { DOMHelper.unmountTopProgressBar() - DOMHelper.decorateGitHubPageContent() + DOMHelper.decorateGitHubPageContent({ copyFileButton, copySnippetButton }) DOMHelper.focusSearchInput() const mergedMetaData = { ...metaData, ...URLHelper.parse() } dispatch(setShouldShow, URLHelper.isInCodePage(mergedMetaData)) @@ -113,6 +114,10 @@ const setMetaData = dispatch => metaData => dispatch({ metaData }) const setCompressSingleton = dispatch => compressSingletonFolder => dispatch({ compressSingletonFolder }) +const setCopyFile = dispatch => copyFileButton => dispatch({ copyFileButton }) + +const setCopySnippet = dispatch => copySnippetButton => dispatch({ copySnippetButton }) + export default { init, onPJAXEnd, @@ -125,6 +130,8 @@ export default { onShortcutChange, setMetaData, setCompressSingleton, + setCopyFile, + setCopySnippet, setError, handleError, } diff --git a/src/utils/DOMHelper.js b/src/utils/DOMHelper.js index 85773e2..dddca68 100644 --- a/src/utils/DOMHelper.js +++ b/src/utils/DOMHelper.js @@ -327,9 +327,9 @@ function clickOnNodeElement(index = 0) { /** * a combination of few above functions */ -function decorateGitHubPageContent() { - attachCopyFileBtn() - attachCopySnippet() +function decorateGitHubPageContent({ copyFileButton, copySnippetButton }) { + if (copyFileButton) attachCopyFileBtn() + if (copySnippetButton) attachCopySnippet() } function mountTopProgressBar() { diff --git a/src/utils/configHelper.js b/src/utils/configHelper.js index f892577..160f629 100644 --- a/src/utils/configHelper.js +++ b/src/utils/configHelper.js @@ -5,6 +5,8 @@ export const config = { shortcut: 'shortcut', accessToken: 'access_token', compressSingletonFolder: 'compressSingletonFolder', + copyFileButton: 'copyFileButton', + copySnippetButton: 'copySnippetButton', } const configKeys = Object.values(config)