From cb7e56fb29f5a0c531367da16b3485ecd550f03a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 18 Jul 2022 09:26:57 +0800 Subject: [PATCH 1/9] fix(deps): update dependency moment to v2.29.4 (#204) --- api-go/tools/puppeteer/package.json | 2 +- package.json | 2 +- yarn.lock | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/api-go/tools/puppeteer/package.json b/api-go/tools/puppeteer/package.json index e95f60f..8e0e927 100644 --- a/api-go/tools/puppeteer/package.json +++ b/api-go/tools/puppeteer/package.json @@ -6,7 +6,7 @@ "canvas": "2.9.1", "echarts": "5.3.3", "lodash.clonedeep": "4.5.0", - "moment": "2.29.3", + "moment": "2.29.4", "jsdom": "19.0.0" } } diff --git a/package.json b/package.json index 5c46554..5395699 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "lodash.clonedeep": "4.5.0", "lodash.omit": "4.5.0", "lodash.throttle": "4.1.1", - "moment": "2.29.3", + "moment": "2.29.4", "react": "18.0.0", "react-bootstrap": "2.2.2", "react-dom": "18.0.0", diff --git a/yarn.lock b/yarn.lock index 66dd810..445d754 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6424,10 +6424,10 @@ mkdirp@^0.5.5, mkdirp@~0.5.1: dependencies: minimist "^1.2.5" -moment@2.29.3: - version "2.29.3" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.3.tgz#edd47411c322413999f7a5940d526de183c031f3" - integrity sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw== +moment@2.29.4: + version "2.29.4" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== ms@2.0.0: version "2.0.0" From ffdf1ddc94e547d660e8fa761e1d33a64765d23a Mon Sep 17 00:00:00 2001 From: Young Date: Tue, 2 Aug 2022 16:48:54 +0800 Subject: [PATCH 2/9] feat: save image as png (#208) --- package.json | 3 +- src/components/DialogBox/index.jsx | 46 +++++++++--- src/components/Footer/index.jsx | 4 +- src/components/Navbar/index.jsx | 4 +- src/components/activity/index.js | 7 +- src/components/contributor/index.js | 105 +++++++++++++++++----------- src/components/shareDialog/index.js | 76 +++++++++++++++----- yarn.lock | 23 +++--- 8 files changed, 181 insertions(+), 87 deletions(-) diff --git a/package.json b/package.json index 5395699..74bad0a 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,8 @@ "react-scripts": "5.0.0", "react-syntax-highlighter": "15.5.0", "react-toastify": "8.2.0", - "react-use-clipboard": "1.0.8" + "react-use-clipboard": "1.0.8", + "save-svg-png-ext": "^2.0.3" }, "scripts": { "dev": "BROWSER=none react-scripts start", diff --git a/src/components/DialogBox/index.jsx b/src/components/DialogBox/index.jsx index e765dd3..de62036 100644 --- a/src/components/DialogBox/index.jsx +++ b/src/components/DialogBox/index.jsx @@ -8,12 +8,16 @@ import CloseIcon from '@material-ui/icons/Close'; import TextField from '@material-ui/core/TextField'; import GetAppIcon from '@material-ui/icons/GetApp'; import FilterNoneOutlinedIcon from '@material-ui/icons/FilterNoneOutlined'; +import Menu from '@material-ui/core/Menu'; +import MenuItem from '@material-ui/core/MenuItem'; import useClipboard from "react-use-clipboard"; import { handleShareToTwitterClick } from "../../utils"; -import { Snackbar, makeStyles } from "@material-ui/core"; +import Snackbar from '@material-ui/core/Snackbar'; +import { makeStyles } from "@material-ui/core/styles"; import Alert from "@material-ui/lab/Alert"; import DialogContentText from '@material-ui/core/DialogContentText'; import moment from "moment"; +import { saveSvgAsPng } from "save-svg-png-ext"; export const DialogBox = ({ params = "" }) => { const [showNotice, setShowNotice] = React.useState(false); @@ -48,6 +52,15 @@ export const DialogBox = ({ params = "" }) => { const [, setCopy] = useClipboard(`${SHARE_BASE_URL}${params}`, { successDuration: 3000 }); const embedCode = `` const [, setEmbedcopy] = useClipboard(embedCode, { successDuration: 3000 }) + const [anchorEl, setAnchorEl] = React.useState(null); + + const handleClick = (event) => { + setAnchorEl(event.currentTarget); + }; + + const handleClose = () => { + setAnchorEl(null); + }; const SearchButton = () => ( + + { + const date = moment(new Date()).format('YYYYMMDD'); + saveAs(`https://contributor-overtime-api.apiseven.com/contributors-svg${params}`, `github-contributor-over-time-${date}.svg`) + }}> + Save as SVG + + { + const date = moment(new Date()).format('YYYYMMDD'); + saveSvgAsPng(document.querySelector("div.echarts-for-react svg"), `github-contributor-over-time-${date}.png`); + }}> + Save as PNG + +