From be8a10ac3b0bb82cfdf6c8a91391baa833669ea2 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Fri, 13 Sep 2019 22:46:25 +0200 Subject: [PATCH 01/74] define always same width for code line indicator in diffview --- .../packages/ui-components/src/repos/DiffFile.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scm-ui-components/packages/ui-components/src/repos/DiffFile.js b/scm-ui-components/packages/ui-components/src/repos/DiffFile.js index ab020f723d..26582ed820 100644 --- a/scm-ui-components/packages/ui-components/src/repos/DiffFile.js +++ b/scm-ui-components/packages/ui-components/src/repos/DiffFile.js @@ -34,6 +34,11 @@ const styles = { }, changeType: { marginLeft: ".75rem" + }, + diff: { + "& > colgroup .diff-gutter-col": { + width: "3.25rem" + } } }; @@ -221,7 +226,7 @@ class DiffFile extends React.Component { body = (
{fileAnnotations} - + {file.hunks.map(this.renderHunk)}
From da6b92fb11f9ee3090b491ea19c63827339e1450 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Fri, 13 Sep 2019 22:48:16 +0200 Subject: [PATCH 02/74] export css var for default white and black tone --- scm-ui/styles/scm.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scm-ui/styles/scm.scss b/scm-ui/styles/scm.scss index 1409e29caf..604ab6cfcf 100644 --- a/scm-ui/styles/scm.scss +++ b/scm-ui/styles/scm.scss @@ -97,6 +97,10 @@ $danger-50: scale-color($danger, $lightness: 50%); $danger-25: scale-color($danger, $lightness: 75%); :root { + // asc sorted initial variables + --black: #{$black}; + --white: #{$white}; + // asc sorted derived-variables --primary: #{$primary}; --primary-75: #{$primary-75}; From 852db578edf2af3ba66db42c79899137bfaba724 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Sat, 14 Sep 2019 00:35:27 +0200 Subject: [PATCH 03/74] implement changes by style guide --- scm-ui/styles/scm.scss | 165 ++++++++++++++++++++++++++++++++--------- 1 file changed, 128 insertions(+), 37 deletions(-) diff --git a/scm-ui/styles/scm.scss b/scm-ui/styles/scm.scss index 604ab6cfcf..ddbab3df3f 100644 --- a/scm-ui/styles/scm.scss +++ b/scm-ui/styles/scm.scss @@ -1,10 +1,10 @@ @import "bulma/sass/utilities/initial-variables"; @import "bulma/sass/utilities/functions"; +$turquoise: #00d1df; $blue: #33b2e8; $cyan: $blue; $green: #00c79b; -$mint: #11dfd0; .is-ellipsis-overflow { overflow: hidden; @@ -96,6 +96,7 @@ $danger-75: scale-color($danger, $lightness: 25%); $danger-50: scale-color($danger, $lightness: 50%); $danger-25: scale-color($danger, $lightness: 75%); +// css vars for external reuse :root { // asc sorted initial variables --black: #{$black}; @@ -136,6 +137,12 @@ $danger-25: scale-color($danger, $lightness: 75%); --link-25: #{$link-25}; } +// readability issues with original color +.has-text-warning { + color: #FFB600; +} + +// border and background colors .has-background-dark-75 { background-color: $dark-75; } @@ -200,7 +207,104 @@ $danger-25: scale-color($danger, $lightness: 75%); background-color: $danger-25; } -// import at the end, because we need a lot of stuff from bulma/bulma +// buttons +.button { + padding-left: 1.5em; + padding-right: 1.5em; + height: 2.5rem; + font-weight: 600; + + &.is-primary:hover, + &.is-primary.is-hovered { + background-color: scale-color($primary, $lightness: -10%); + } + + &.is-primary:active, + &.is-primary.is-active { + background-color: scale-color($primary, $lightness: -20%); + } + + &.is-primary[disabled] { + background-color: scale-color($primary, $lightness: 75%); + opacity: 1; + } + + &.is-info:hover, + &.is-info.is-hovered { + background-color: scale-color($info, $lightness: -10%); + } + + &.is-info:active, + &.is-info.is-active { + background-color: scale-color($info, $lightness: -20%); + } + + &.is-info[disabled] { + background-color: scale-color($info, $lightness: 75%); + opacity: 1; + } + + &.is-link:hover, + &.is-link.is-hovered { + background-color: scale-color($link, $lightness: -10%); + } + + &.is-link:active, + &.is-link.is-active { + background-color: scale-color($link, $lightness: -20%); + } + + &.is-link[disabled] { + background-color: scale-color($link, $lightness: 75%); + opacity: 1; + } + + &.is-success:hover, + &.is-success.is-hovered { + background-color: scale-color($success, $lightness: -10%); + } + + &.is-success:active, + &.is-success.is-active { + background-color: scale-color($success, $lightness: -20%); + } + + &.is-success[disabled] { + background-color: scale-color($success, $lightness: 75%); + opacity: 1; + } + + &.is-warning:hover, + &.is-warning.is-hovered { + background-color: scale-color($warning, $lightness: -10%); + } + + &.is-warning:active, + &.is-warning.is-active { + background-color: scale-color($warning, $lightness: -20%); + } + + &.is-warning[disabled] { + background-color: scale-color($warning, $lightness: 75%); + opacity: 1; + } + + &.is-danger:hover, + &.is-danger.is-hovered { + background-color: scale-color($danger, $lightness: -10%); + } + + &.is-danger:active, + &.is-danger.is-active { + background-color: scale-color($danger, $lightness: -20%); + } + + &.is-danger[disabled] { + background-color: scale-color($danger, $lightness: 75%); + opacity: 1; + } +} + .box-link-shadow { &:hover, &:focus { @@ -240,26 +344,7 @@ ul.is-separated { font-weight: bold; } -// buttons .button { - padding-left: 1.5em; - padding-right: 1.5em; - height: 2.5rem; - - &.is-primary { - background-color: #00d1df; - } - &.is-primary:hover, - &.is-primary.is-hovered { - background-color: #00b9c6; - } - &.is-primary:active, - &.is-primary.is-active { - background-color: #00a1ac; - } - &.is-primary[disabled] { - background-color: #40dde7; - } &.reduced-mobile { @media screen and (max-width: 1087px) { > span:nth-child(2) { @@ -281,7 +366,7 @@ ul.is-separated { } } -// multiline Columns +// columns .columns.is-multiline { .column { height: 120px; @@ -499,14 +584,19 @@ form .field:not(.is-grouped) { .pagination-ellipsis { padding-left: 1.5em; padding-right: 1.5em; - height: 2.5rem; + height: 2.8rem; + min-width: 5rem; } .pagination-previous, .pagination-next { + height: 2.8rem; min-width: 6.75em; } +.pagination-link.is-current { + opacity: 1; +} -// dark hero colors +// hero .hero.is-dark { background-color: #002e4b; background-image: url(../images/scmManagerHero.jpg); @@ -528,7 +618,7 @@ form .field:not(.is-grouped) { background-color: whitesmoke; } -// sidebar menu +// aside .aside-background { bottom: 0; left: 50%; @@ -537,6 +627,8 @@ form .field:not(.is-grouped) { top: 0; background-color: whitesmoke; } + +// menu .menu { div { height: 100%; @@ -544,7 +636,6 @@ form .field:not(.is-grouped) { margin-bottom: 1rem; } } - .menu-label { color: #fff; font-size: 1em; @@ -614,17 +705,6 @@ form .field:not(.is-grouped) { } } -// modal -.modal { - .modal-card-foot { - justify-content: flex-end; // pulled-right - } -} - -.modal-card-body div div:last-child { - border-bottom: none; -} - .sub-menu li { line-height: 1; @@ -650,6 +730,17 @@ form .field:not(.is-grouped) { } } +// modal +.modal { + .modal-card-foot { + justify-content: flex-end; // pulled-right + } +} + +.modal-card-body div div:last-child { + border-bottom: none; +} + // cursor .has-cursor-pointer { cursor: pointer; From 5597998df311a5432309a2074572b9ebd311847e Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Sat, 14 Sep 2019 00:49:21 +0200 Subject: [PATCH 04/74] is-outline option for tags --- scm-ui/styles/scm.scss | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/scm-ui/styles/scm.scss b/scm-ui/styles/scm.scss index ddbab3df3f..ce9e2a3285 100644 --- a/scm-ui/styles/scm.scss +++ b/scm-ui/styles/scm.scss @@ -207,6 +207,48 @@ $danger-25: scale-color($danger, $lightness: 75%); background-color: $danger-25; } +// outline option for tags +.is-outline-black { + color: $black; + border-color: $black; +} +.is-outline-dark { + color: $dark; + border-color: $dark; +} +.is-outline-light { + color: $light; + border-color: $light; +} +.is-outline-white { + color: $white; + border-color: $white; +} +.is-outline-primary { + color: $primary; + border-color: $primary; +} +.is-outline-link { + color: $link; + border-color: $link; +} +.is-outline-info { + color: $info; + border-color: $info; +} +.is-outline-success { + color: $success; + border-color: $success; +} +.is-outline-warning { + color: $warning; + border-color: $warning; +} +.is-outline-danger { + color: $danger; + border-color: $danger; +} + // buttons .button { padding-left: 1.5em; From ff3d99d1f895a3aad71d379959cad1d73afa1e22 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Sat, 14 Sep 2019 22:38:37 +0200 Subject: [PATCH 05/74] simplify opacity setting for disabled buttons --- scm-ui/styles/scm.scss | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/scm-ui/styles/scm.scss b/scm-ui/styles/scm.scss index ce9e2a3285..cd4b41a67b 100644 --- a/scm-ui/styles/scm.scss +++ b/scm-ui/styles/scm.scss @@ -256,6 +256,10 @@ $danger-25: scale-color($danger, $lightness: 75%); height: 2.5rem; font-weight: 600; + &[disabled] { + opacity: 1; + } + &.is-primary:hover, &.is-primary.is-hovered { background-color: scale-color($primary, $lightness: -10%); @@ -268,7 +272,6 @@ $danger-25: scale-color($danger, $lightness: 75%); &.is-primary[disabled] { background-color: scale-color($primary, $lightness: 75%); - opacity: 1; } &.is-info:hover, @@ -283,7 +286,6 @@ $danger-25: scale-color($danger, $lightness: 75%); &.is-info[disabled] { background-color: scale-color($info, $lightness: 75%); - opacity: 1; } &.is-link:hover, @@ -298,7 +300,6 @@ $danger-25: scale-color($danger, $lightness: 75%); &.is-link[disabled] { background-color: scale-color($link, $lightness: 75%); - opacity: 1; } &.is-success:hover, @@ -313,7 +314,6 @@ $danger-25: scale-color($danger, $lightness: 75%); &.is-success[disabled] { background-color: scale-color($success, $lightness: 75%); - opacity: 1; } &.is-warning:hover, @@ -328,7 +328,6 @@ $danger-25: scale-color($danger, $lightness: 75%); &.is-warning[disabled] { background-color: scale-color($warning, $lightness: 75%); - opacity: 1; } &.is-danger:hover, @@ -343,7 +342,6 @@ $danger-25: scale-color($danger, $lightness: 75%); &.is-danger[disabled] { background-color: scale-color($danger, $lightness: 75%); - opacity: 1; } } From fa10ccac9f4b741d5c2e1577b9290ed16ebc89a4 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Sun, 15 Sep 2019 00:26:39 +0200 Subject: [PATCH 06/74] make css color important --- scm-ui/styles/scm.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-ui/styles/scm.scss b/scm-ui/styles/scm.scss index cd4b41a67b..db08cc9867 100644 --- a/scm-ui/styles/scm.scss +++ b/scm-ui/styles/scm.scss @@ -139,7 +139,7 @@ $danger-25: scale-color($danger, $lightness: 75%); // readability issues with original color .has-text-warning { - color: #FFB600; + color: #FFB600 !important; } // border and background colors From c46304506d94e544fb25093ed7d07bb86cad40e4 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Mon, 16 Sep 2019 16:49:25 +0200 Subject: [PATCH 07/74] tag.is-outline classes now applicable without !important for all elements --- scm-ui/styles/scm.scss | 85 ++++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 40 deletions(-) diff --git a/scm-ui/styles/scm.scss b/scm-ui/styles/scm.scss index db08cc9867..df8ad775fa 100644 --- a/scm-ui/styles/scm.scss +++ b/scm-ui/styles/scm.scss @@ -139,7 +139,7 @@ $danger-25: scale-color($danger, $lightness: 75%); // readability issues with original color .has-text-warning { - color: #FFB600 !important; + color: #ffb600 !important; } // border and background colors @@ -208,45 +208,50 @@ $danger-25: scale-color($danger, $lightness: 75%); } // outline option for tags -.is-outline-black { - color: $black; - border-color: $black; -} -.is-outline-dark { - color: $dark; - border-color: $dark; -} -.is-outline-light { - color: $light; - border-color: $light; -} -.is-outline-white { - color: $white; - border-color: $white; -} -.is-outline-primary { - color: $primary; - border-color: $primary; -} -.is-outline-link { - color: $link; - border-color: $link; -} -.is-outline-info { - color: $info; - border-color: $info; -} -.is-outline-success { - color: $success; - border-color: $success; -} -.is-outline-warning { - color: $warning; - border-color: $warning; -} -.is-outline-danger { - color: $danger; - border-color: $danger; +.tag:not(body) { + border: 1px solid transparent; + background-color: red; //TODO: replace with transparent + + &.is-outline-black { + color: $black; + border-color: $black; + } + &.is-outline-dark { + color: $dark; + border-color: $dark; + } + &.is-outline-light { + color: $light; + border-color: $light; + } + &.is-outline-white { + color: $white; + border-color: $white; + } + &.is-outline-primary { + color: $primary; + border-color: $primary; + } + &.is-outline-link { + color: $link; + border-color: $link; + } + &.is-outline-info { + color: $info; + border-color: $info; + } + &.is-outline-success { + color: $success; + border-color: $success; + } + &.is-outline-warning { + color: $warning; + border-color: $warning; + } + &.is-outline-danger { + color: $danger; + border-color: $danger; + } } // buttons From e7d08e456474f08c08a627523e2de9e24e7b4726 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Mon, 16 Sep 2019 16:50:08 +0200 Subject: [PATCH 08/74] add markdown styling --- .../ui-components/src/MarkdownView.js | 53 ++++++++++++++----- 1 file changed, 41 insertions(+), 12 deletions(-) diff --git a/scm-ui-components/packages/ui-components/src/MarkdownView.js b/scm-ui-components/packages/ui-components/src/MarkdownView.js index 4620004f59..6176601d68 100644 --- a/scm-ui-components/packages/ui-components/src/MarkdownView.js +++ b/scm-ui-components/packages/ui-components/src/MarkdownView.js @@ -1,11 +1,11 @@ //@flow import React from "react"; -import SyntaxHighlighter from "./SyntaxHighlighter"; -import Markdown from "react-markdown/with-html"; -import {binder} from "@scm-manager/ui-extensions"; -import MarkdownHeadingRenderer from "./MarkdownHeadingRenderer"; import { withRouter } from "react-router-dom"; - +import injectSheet from "react-jss"; +import Markdown from "react-markdown/with-html"; +import { binder } from "@scm-manager/ui-extensions"; +import SyntaxHighlighter from "./SyntaxHighlighter"; +import MarkdownHeadingRenderer from "./MarkdownHeadingRenderer"; type Props = { content: string, @@ -14,11 +14,34 @@ type Props = { enableAnchorHeadings: boolean, // context props + classes: any, location: any }; -class MarkdownView extends React.Component { +const styles = { + markdown: { + "& > .content": { + "& > h1, h2, h3, h4, h5, h6": { + margin: "0.5rem 0", + fontSize: "0.9rem" + }, + "& > h1": { + fontWeight: "700" + }, + "& > h2": { + fontWeight: "600" + }, + "& > h3, h4, h5, h6": { + fontWeight: "500" + }, + "& strong": { + fontWeight: "500" + } + } + } +}; +class MarkdownView extends React.Component { static defaultProps = { enableAnchorHeadings: false }; @@ -45,16 +68,22 @@ class MarkdownView extends React.Component { } render() { - const {content, renderers, renderContext, enableAnchorHeadings} = this.props; + const { + content, + renderers, + renderContext, + enableAnchorHeadings, + classes + } = this.props; const rendererFactory = binder.getExtension("markdown-renderer-factory"); let rendererList = renderers; - if (rendererFactory){ + if (rendererFactory) { rendererList = rendererFactory(renderContext); } - if (!rendererList){ + if (!rendererList) { rendererList = {}; } @@ -62,12 +91,12 @@ class MarkdownView extends React.Component { rendererList.heading = MarkdownHeadingRenderer; } - if (!rendererList.code){ + if (!rendererList.code) { rendererList.code = SyntaxHighlighter; } return ( -
(this.contentRef = el)}> +
(this.contentRef = el)}> { } } -export default withRouter(MarkdownView); +export default injectSheet(styles)(withRouter(MarkdownView)); From dd6458b1cb7e1499c04db24ec5b5ca0d3b2c2094 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Mon, 16 Sep 2019 17:16:56 +0200 Subject: [PATCH 09/74] add Tag component --- .../packages/ui-components/src/Tag.js | 41 +++++++++++++++++++ .../packages/ui-components/src/index.js | 1 + 2 files changed, 42 insertions(+) create mode 100644 scm-ui-components/packages/ui-components/src/Tag.js diff --git a/scm-ui-components/packages/ui-components/src/Tag.js b/scm-ui-components/packages/ui-components/src/Tag.js new file mode 100644 index 0000000000..9a3810e9ba --- /dev/null +++ b/scm-ui-components/packages/ui-components/src/Tag.js @@ -0,0 +1,41 @@ +//@flow +import * as React from "react"; +import classNames from "classnames"; + +type Props = { + className?: string, + color?: string, + icon?: string, + label: string, + title?: string +}; + +class Tag extends React.Component { + static defaultProps = { + color: "light" + }; + + render() { + const { icon, label, title, color, className } = this.props; + let showIcon = null; + if (icon) { + showIcon = ( + <> +   + + ); + } + + return ( + + {showIcon} + {label} + + ); + } +} + +export default Tag; diff --git a/scm-ui-components/packages/ui-components/src/index.js b/scm-ui-components/packages/ui-components/src/index.js index 35acd26369..1745dd8576 100644 --- a/scm-ui-components/packages/ui-components/src/index.js +++ b/scm-ui-components/packages/ui-components/src/index.js @@ -23,6 +23,7 @@ export { default as FileSize } from "./FileSize.js"; export { default as ProtectedRoute } from "./ProtectedRoute.js"; export { default as Help } from "./Help"; export { default as HelpIcon } from "./HelpIcon"; +export { default as Tag } from "./Tag"; export { default as Tooltip } from "./Tooltip"; // TODO do we need this? getPageFromMatch is already exported by urls export { getPageFromMatch } from "./urls"; From cab4f0fcce37beb8daf57fab595717e64fc1f1c2 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Mon, 16 Sep 2019 17:17:26 +0200 Subject: [PATCH 10/74] use Tag component instead --- scm-ui/src/admin/roles/components/SystemRoleTag.js | 10 ++++++---- .../repos/branches/components/DefaultBranchTag.js | 12 ++++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/scm-ui/src/admin/roles/components/SystemRoleTag.js b/scm-ui/src/admin/roles/components/SystemRoleTag.js index f1e8b0781b..9ee4434822 100644 --- a/scm-ui/src/admin/roles/components/SystemRoleTag.js +++ b/scm-ui/src/admin/roles/components/SystemRoleTag.js @@ -1,8 +1,8 @@ //@flow import React from "react"; import injectSheet from "react-jss"; -import classNames from "classnames"; import { translate } from "react-i18next"; +import { Tag } from "@scm-manager/ui-components"; type Props = { system?: boolean, @@ -25,9 +25,11 @@ class SystemRoleTag extends React.Component { if (system) { return ( - - {t("repositoryRole.system")} - + ); } return null; diff --git a/scm-ui/src/repos/branches/components/DefaultBranchTag.js b/scm-ui/src/repos/branches/components/DefaultBranchTag.js index 18be6d21f8..4a549426cf 100644 --- a/scm-ui/src/repos/branches/components/DefaultBranchTag.js +++ b/scm-ui/src/repos/branches/components/DefaultBranchTag.js @@ -1,11 +1,13 @@ //@flow import React from "react"; import injectSheet from "react-jss"; -import classNames from "classnames"; import { translate } from "react-i18next"; +import { Tag } from "@scm-manager/ui-components"; type Props = { defaultBranch?: boolean, + + // context props classes: any, t: string => string }; @@ -23,9 +25,11 @@ class DefaultBranchTag extends React.Component { if (defaultBranch) { return ( - - {t("branch.defaultTag")} - + ); } return null; From 0c138e46d623ba957cbeba4f5d954379c60153e5 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Mon, 16 Sep 2019 17:39:22 +0200 Subject: [PATCH 11/74] use Tag component instead --- .../ui-components/src/repos/DiffFile.js | 32 ++++++++++--------- .../src/repos/changesets/ChangesetTag.js | 2 +- .../src/repos/changesets/ChangesetTagBase.js | 22 +++---------- .../changesets/ChangesetTagsCollapsed.js | 13 +++++--- 4 files changed, 31 insertions(+), 38 deletions(-) diff --git a/scm-ui-components/packages/ui-components/src/repos/DiffFile.js b/scm-ui-components/packages/ui-components/src/repos/DiffFile.js index 26582ed820..34762794ea 100644 --- a/scm-ui-components/packages/ui-components/src/repos/DiffFile.js +++ b/scm-ui-components/packages/ui-components/src/repos/DiffFile.js @@ -1,10 +1,18 @@ //@flow import React from "react"; -import {Change, Diff as DiffComponent, DiffObjectProps, File, getChangeKey, Hunk} from "react-diff-view"; +import { + Change, + Diff as DiffComponent, + DiffObjectProps, + File, + getChangeKey, + Hunk +} from "react-diff-view"; import injectSheets from "react-jss"; import classNames from "classnames"; -import {translate} from "react-i18next"; -import {Button, ButtonGroup} from "../buttons"; +import { translate } from "react-i18next"; +import { Button, ButtonGroup } from "../buttons"; +import Tag from "../Tag"; const styles = { panel: { @@ -183,24 +191,18 @@ class DiffFile extends React.Component { value = file.type; } const color = - value === "added" - ? "is-success" - : value === "deleted" - ? "is-danger" - : "is-info"; + value === "added" ? "success" : value === "deleted" ? "danger" : "info"; return ( - - {value} - + color={color} + label={value} + /> ); }; @@ -232,7 +234,7 @@ class DiffFile extends React.Component {
); } - const collapseIcon = collapsible? : null; + const collapseIcon = collapsible ? : null; const fileControls = fileControlFactory ? fileControlFactory(file, this.setCollapse) diff --git a/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetTag.js b/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetTag.js index 03c73a8e9f..656839cc8e 100644 --- a/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetTag.js +++ b/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetTag.js @@ -10,7 +10,7 @@ type Props = { class ChangesetTag extends React.Component { render() { const { tag } = this.props; - return ; + return ; } } diff --git a/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetTagBase.js b/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetTagBase.js index a62c6292a3..dd619b0cb6 100644 --- a/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetTagBase.js +++ b/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetTagBase.js @@ -1,31 +1,19 @@ //@flow import React from "react"; -import injectSheet from "react-jss"; -import classNames from "classnames"; - -const styles = { - spacing: { - marginRight: ".25rem" - } -}; +import Tag from "../../Tag"; type Props = { icon: string, - label: string, - - // context props - classes: Object + label: string }; class ChangesetTagBase extends React.Component { render() { - const { icon, label, classes } = this.props; + const { icon, label } = this.props; return ( - - {label} - + ); } } -export default injectSheet(styles)(ChangesetTagBase); +export default ChangesetTagBase; diff --git a/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetTagsCollapsed.js b/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetTagsCollapsed.js index 50b09d4d65..f0baf601af 100644 --- a/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetTagsCollapsed.js +++ b/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetTagsCollapsed.js @@ -1,24 +1,27 @@ //@flow import React from "react"; -import type { Tag } from "@scm-manager/ui-types"; -import ChangesetTagBase from "./ChangesetTagBase"; import { translate } from "react-i18next"; +import type { Tag } from "@scm-manager/ui-types"; import Tooltip from "../../Tooltip"; +import ChangesetTagBase from "./ChangesetTagBase"; type Props = { tags: Tag[], // context props - t: (string) => string + t: string => string }; class ChangesetTagsCollapsed extends React.Component { render() { const { tags, t } = this.props; - const message = tags.map((tag) => tag.name).join(", "); + const message = tags.map(tag => tag.name).join(", "); return ( - + ); } From 7dcc91a6103cacf8200d4eaa22ec4a3d0aade31a Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Mon, 16 Sep 2019 19:17:59 +0200 Subject: [PATCH 12/74] add background color for delete class, remove unuse user class --- scm-ui/styles/scm.scss | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/scm-ui/styles/scm.scss b/scm-ui/styles/scm.scss index df8ad775fa..345488880b 100644 --- a/scm-ui/styles/scm.scss +++ b/scm-ui/styles/scm.scss @@ -212,6 +212,10 @@ $danger-25: scale-color($danger, $lightness: 75%); border: 1px solid transparent; background-color: red; //TODO: replace with transparent + &.is-delete { + background-color: $light; + } + &.is-outline-black { color: $black; border-color: $black; @@ -384,11 +388,6 @@ ul.is-separated { } } -.user { - display: inline-block; - font-weight: bold; -} - .button { &.reduced-mobile { @media screen and (max-width: 1087px) { From fb8f7fefd293e0c0453f9539c54aa3e40e233543 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Mon, 16 Sep 2019 19:18:14 +0200 Subject: [PATCH 13/74] add onClick prop --- scm-ui-components/packages/ui-components/src/Tag.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scm-ui-components/packages/ui-components/src/Tag.js b/scm-ui-components/packages/ui-components/src/Tag.js index 9a3810e9ba..00d11696c8 100644 --- a/scm-ui-components/packages/ui-components/src/Tag.js +++ b/scm-ui-components/packages/ui-components/src/Tag.js @@ -7,7 +7,8 @@ type Props = { color?: string, icon?: string, label: string, - title?: string + title?: string, + onClick?: () => void }; class Tag extends React.Component { @@ -16,7 +17,7 @@ class Tag extends React.Component { }; render() { - const { icon, label, title, color, className } = this.props; + const { className, color, icon, label, title, onClick } = this.props; let showIcon = null; if (icon) { showIcon = ( @@ -30,6 +31,7 @@ class Tag extends React.Component { {showIcon} {label} From adccb58b38c9c519e90b4a2d7fa6438cfebf3a1d Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Tue, 17 Sep 2019 13:08:17 +0200 Subject: [PATCH 14/74] add is-outline classes for buttons --- scm-ui/styles/scm.scss | 222 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 221 insertions(+), 1 deletion(-) diff --git a/scm-ui/styles/scm.scss b/scm-ui/styles/scm.scss index 345488880b..5e66094141 100644 --- a/scm-ui/styles/scm.scss +++ b/scm-ui/styles/scm.scss @@ -207,7 +207,7 @@ $danger-25: scale-color($danger, $lightness: 75%); background-color: $danger-25; } -// outline option for tags +// tags .tag:not(body) { border: 1px solid transparent; background-color: red; //TODO: replace with transparent @@ -352,6 +352,226 @@ $danger-25: scale-color($danger, $lightness: 75%); &.is-danger[disabled] { background-color: scale-color($danger, $lightness: 75%); } + + &.is-outline-black { + color: $black; + border-color: $black; + } + + &.is-outline-black:hover, + &.is-outline-black.is-hovered { + color: scale-color($black, $lightness: -10%); + border-color: scale-color($black, $lightness: -10%); + } + + &.is-outline-black:active, + &.is-outline-black.is-active { + color: scale-color($black, $lightness: -20%); + border-color: scale-color($black, $lightness: -20%); + } + + &.is-outline-black[disabled] { + color: scale-color($black, $lightness: 75%); + border-color: scale-color($black, $lightness: 75%); + } + + &.is-outline-dark { + color: $dark; + border-color: $dark; + } + + &.is-outline-dark:hover, + &.is-outline-dark.is-hovered { + color: scale-color($dark, $lightness: -10%); + border-color: scale-color($dark, $lightness: -10%); + } + + &.is-outline-dark:active, + &.is-outline-dark.is-active { + color: scale-color($dark, $lightness: -20%); + border-color: scale-color($dark, $lightness: -20%); + } + + &.is-outline-dark[disabled] { + color: scale-color($dark, $lightness: 75%); + border-color: scale-color($dark, $lightness: 75%); + } + + &.is-outline-light { + /*color: $light;*/ + border-color: $light; + } + + &.is-outline-light:hover, + &.is-outline-light.is-hovered { + /* color: scale-color($light, $lightness: -10%); */ + border-color: scale-color($light, $lightness: -10%); + } + + &.is-outline-light:active, + &.is-outline-light.is-active { + /* color: scale-color($light, $lightness: -20%); */ + border-color: scale-color($light, $lightness: -20%); + } + + &.is-outline-light[disabled] { + /* color: scale-color($light, $lightness: 75%); */ + border-color: scale-color($light, $lightness: 75%); + } + + &.is-outline-white { + /*color: $white;*/ + border-color: $white; + } + + &.is-outline-white:hover, + &.is-outline-white.is-hovered { + /* color: scale-color($white, $lightness: -10%); */ + border-color: scale-color($white, $lightness: -10%); + } + + &.is-outline-white:active, + &.is-outline-white.is-active { + /* color: scale-color($white, $lightness: -20%); */ + border-color: scale-color($white, $lightness: -20%); + } + + &.is-outline-white[disabled] { + /* color: scale-color($white, $lightness: 75%); */ + border-color: scale-color($white, $lightness: 75%); + } + + &.is-outline-primary { + color: $primary; + border-color: $primary; + } + + &.is-outline-primary:hover, + &.is-outline-primary.is-hovered { + color: scale-color($primary, $lightness: -10%); + border-color: scale-color($primary, $lightness: -10%); + } + + &.is-outline-primary:active, + &.is-outline-primary.is-active { + color: scale-color($primary, $lightness: -20%); + border-color: scale-color($primary, $lightness: -20%); + } + + &.is-outline-primary[disabled] { + color: scale-color($primary, $lightness: 75%); + border-color: scale-color($primary, $lightness: 75%); + } + + &.is-outline-link { + color: $link; + border-color: $link; + } + + &.is-outline-link:hover, + &.is-outline-link.is-hovered { + color: scale-color($link, $lightness: -10%); + border-color: scale-color($link, $lightness: -10%); + } + + &.is-outline-link:active, + &.is-outline-link.is-active { + color: scale-color($link, $lightness: -20%); + border-color: scale-color($link, $lightness: -20%); + } + + &.is-outline-link[disabled] { + color: scale-color($link, $lightness: 75%); + border-color: scale-color($link, $lightness: 75%); + } + + &.is-outline-info { + color: $info; + border-color: $info; + } + + &.is-outline-info:hover, + &.is-outline-info.is-hovered { + color: scale-color($info, $lightness: -10%); + border-color: scale-color($info, $lightness: -10%); + } + + &.is-outline-info:active, + &.is-outline-info.is-active { + color: scale-color($info, $lightness: -20%); + border-color: scale-color($info, $lightness: -20%); + } + + &.is-outline-info[disabled] { + color: scale-color($info, $lightness: 75%); + border-color: scale-color($info, $lightness: 75%); + } + + &.is-outline-success { + color: $success; + border-color: $success; + } + + &.is-outline-success:hover, + &.is-outline-success.is-hovered { + color: scale-color($success, $lightness: -10%); + border-color: scale-color($success, $lightness: -10%); + } + + &.is-outline-success:active, + &.is-outline-success.is-active { + color: scale-color($success, $lightness: -20%); + border-color: scale-color($success, $lightness: -20%); + } + + &.is-outline-success[disabled] { + color: scale-color($success, $lightness: 75%); + border-color: scale-color($success, $lightness: 75%); + } + + /*&.is-outline-warning { + color: $warning; + border-color: $warning; + } + + &.is-outline-warning:hover, + &.is-outline-warning.is-hovered { + color: scale-color($warning, $lightness: -10%); + border-color: scale-color($warning, $lightness: -10%); + } + + &.is-outline-warning:active, + &.is-outline-warning.is-active { + color: scale-color($warning, $lightness: -20%); + border-color: scale-color($warning, $lightness: -20%); + } + + &.is-outline-warning[disabled] { + color: scale-color($warning, $lightness: 75%); + border-color: scale-color($warning, $lightness: 75%); + }*/ + + &.is-outline-danger { + color: $danger; + border-color: $danger; + } + + &.is-outline-danger:hover, + &.is-outline-danger.is-hovered { + color: scale-color($danger, $lightness: -10%); + border-color: scale-color($danger, $lightness: -10%); + } + + &.is-outline-danger:active, + &.is-outline-danger.is-active { + color: scale-color($danger, $lightness: -20%); + border-color: scale-color($danger, $lightness: -20%); + } + + &.is-outline-danger[disabled] { + color: scale-color($danger, $lightness: 75%); + border-color: scale-color($danger, $lightness: 75%); + } } .box-link-shadow { From 669b24033763e88635967b6eb989f88230242ed4 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Tue, 17 Sep 2019 13:33:09 +0200 Subject: [PATCH 15/74] reduce .reduced-mobile font-size --- scm-ui/styles/scm.scss | 46 +++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/scm-ui/styles/scm.scss b/scm-ui/styles/scm.scss index 5e66094141..cd482a171f 100644 --- a/scm-ui/styles/scm.scss +++ b/scm-ui/styles/scm.scss @@ -210,7 +210,7 @@ $danger-25: scale-color($danger, $lightness: 75%); // tags .tag:not(body) { border: 1px solid transparent; - background-color: red; //TODO: replace with transparent + background-color: red; //TODO: replace with $white &.is-delete { background-color: $light; @@ -572,6 +572,28 @@ $danger-25: scale-color($danger, $lightness: 75%); color: scale-color($danger, $lightness: 75%); border-color: scale-color($danger, $lightness: 75%); } + + &.reduced-mobile { + font-size: 0.9rem; + + @media screen and (max-width: 1087px) { + > span:nth-child(2) { + display: none; + } + } + @media screen and (max-width: 1087px) and (min-width: 769px) { + // simultaneously with left margin of Bulma + > .icon:first-child:not(:last-child) { + margin: 0; + } + } + @media screen and (max-width: 768px) { + // simultaneously with left margin of Bulma + .icon:first-child:not(:last-child) { + margin-right: calc(-0.375em - 1px); + } + } + } } .box-link-shadow { @@ -608,28 +630,6 @@ ul.is-separated { } } -.button { - &.reduced-mobile { - @media screen and (max-width: 1087px) { - > span:nth-child(2) { - display: none; - } - } - @media screen and (max-width: 1087px) and (min-width: 769px) { - // simultaneously with left margin of Bulma - > .icon:first-child:not(:last-child) { - margin: 0; - } - } - @media screen and (max-width: 768px) { - // simultaneously with left margin of Bulma - .icon:first-child:not(:last-child) { - margin-right: calc(-0.375em - 1px); - } - } - } -} - // columns .columns.is-multiline { .column { From fd9c85889531be2a54cd387f3ff63840f4d8bd39 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Tue, 17 Sep 2019 13:33:52 +0200 Subject: [PATCH 16/74] change diffFile value color to .outline-* --- scm-ui-components/packages/ui-components/src/repos/DiffFile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-ui-components/packages/ui-components/src/repos/DiffFile.js b/scm-ui-components/packages/ui-components/src/repos/DiffFile.js index 34762794ea..cf25fa9f71 100644 --- a/scm-ui-components/packages/ui-components/src/repos/DiffFile.js +++ b/scm-ui-components/packages/ui-components/src/repos/DiffFile.js @@ -191,7 +191,7 @@ class DiffFile extends React.Component { value = file.type; } const color = - value === "added" ? "success" : value === "deleted" ? "danger" : "info"; + value === "added" ? "outline-success" : value === "deleted" ? "outline-danger" : "outline-info"; return ( Date: Tue, 17 Sep 2019 14:27:45 +0200 Subject: [PATCH 17/74] move avatar to top, add top-margin for author --- .../src/repos/changesets/ChangesetRow.js | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetRow.js b/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetRow.js index 1180bc1c50..311716ba06 100644 --- a/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetRow.js +++ b/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetRow.js @@ -25,7 +25,7 @@ const styles = { } }, avatarFigure: { - marginTop: ".25rem", + marginTop: ".5rem", marginRight: ".5rem" }, avatarImage: { @@ -35,6 +35,9 @@ const styles = { metadata: { marginLeft: 0 }, + authorMargin: { + marginTop: "0.5rem" + }, isVcentered: { alignSelf: "center" }, @@ -70,15 +73,6 @@ class ChangesetRow extends React.Component {
-

- - {description.title} - -

{
+

+ + {description.title} + +

{ time={dateFromNow} />

-

+

From 26f07ba38df19b88cae30a893b3bdb6638f904a0 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Tue, 17 Sep 2019 15:13:05 +0200 Subject: [PATCH 18/74] reduce button size of downloadbutton --- .../packages/ui-components/src/buttons/DownloadButton.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-ui-components/packages/ui-components/src/buttons/DownloadButton.js b/scm-ui-components/packages/ui-components/src/buttons/DownloadButton.js index 382bd500c5..3adc899955 100644 --- a/scm-ui-components/packages/ui-components/src/buttons/DownloadButton.js +++ b/scm-ui-components/packages/ui-components/src/buttons/DownloadButton.js @@ -13,7 +13,7 @@ class DownloadButton extends React.Component { const { displayName, url, disabled, onClick } = this.props; const onClickOrDefault = !!onClick ? onClick : () => {}; return ( - + From 6d923ee45bba6ef7b99baf973860b663c9bbb73e Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Wed, 18 Sep 2019 00:58:19 +0200 Subject: [PATCH 19/74] replace todo check --- scm-ui/styles/scm.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-ui/styles/scm.scss b/scm-ui/styles/scm.scss index cd482a171f..00b0bd11ee 100644 --- a/scm-ui/styles/scm.scss +++ b/scm-ui/styles/scm.scss @@ -210,7 +210,7 @@ $danger-25: scale-color($danger, $lightness: 75%); // tags .tag:not(body) { border: 1px solid transparent; - background-color: red; //TODO: replace with $white + background-color: $white; &.is-delete { background-color: $light; From 28621916d2f0b6efb5575afb230063d9b491ce84 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Thu, 19 Sep 2019 07:23:04 +0200 Subject: [PATCH 20/74] expand Icon component and use it in HelpIcon, .is-icon class is redundant --- .../packages/ui-components/src/HelpIcon.js | 12 ++++++---- .../packages/ui-components/src/Icon.js | 24 +++++++++++-------- .../packages/ui-components/src/Tag.js | 2 +- scm-ui/styles/scm.scss | 4 ---- 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/scm-ui-components/packages/ui-components/src/HelpIcon.js b/scm-ui-components/packages/ui-components/src/HelpIcon.js index 9e095bd8a7..c73417bb27 100644 --- a/scm-ui-components/packages/ui-components/src/HelpIcon.js +++ b/scm-ui-components/packages/ui-components/src/HelpIcon.js @@ -1,22 +1,24 @@ //@flow import React from "react"; import injectSheet from "react-jss"; -import classNames from "classnames"; +import Icon from "./Icon"; type Props = { classes: any }; const styles = { - textinfo: { - color: "#98d8f3 !important" - } + textinfo: { + color: "#98d8f3 !important" + } }; class HelpIcon extends React.Component { render() { const { classes } = this.props; - return ; + return ( + + ); } } diff --git a/scm-ui-components/packages/ui-components/src/Icon.js b/scm-ui-components/packages/ui-components/src/Icon.js index b3b9a9b4c2..16266b6854 100644 --- a/scm-ui-components/packages/ui-components/src/Icon.js +++ b/scm-ui-components/packages/ui-components/src/Icon.js @@ -4,22 +4,26 @@ import classNames from "classnames"; type Props = { title?: string, - name: string -} + name: string, + color: string, + className?: string +}; export default class Icon extends React.Component { + static defaultProps = { + color: "grey-light" + }; render() { - const { title, name } = this.props; - if(title) { + const { title, name, color, className } = this.props; + if (title) { return ( - + ); } - return ( - - ); + return ; } - } - diff --git a/scm-ui-components/packages/ui-components/src/Tag.js b/scm-ui-components/packages/ui-components/src/Tag.js index 00d11696c8..3a377d057b 100644 --- a/scm-ui-components/packages/ui-components/src/Tag.js +++ b/scm-ui-components/packages/ui-components/src/Tag.js @@ -4,7 +4,7 @@ import classNames from "classnames"; type Props = { className?: string, - color?: string, + color: string, icon?: string, label: string, title?: string, diff --git a/scm-ui/styles/scm.scss b/scm-ui/styles/scm.scss index 00b0bd11ee..41c157bd90 100644 --- a/scm-ui/styles/scm.scss +++ b/scm-ui/styles/scm.scss @@ -819,10 +819,6 @@ form .field:not(.is-grouped) { } } -.is-icon { - color: $grey-light; -} - // label with help-icon compensation .label-icon-spacing { margin-top: 30px; From 80b51f96683da89441b22681ebb1e342906be5ce Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Thu, 19 Sep 2019 08:58:49 +0200 Subject: [PATCH 21/74] decrease "set and repeat"-password related input fields to half-paged --- .../src/forms/PasswordConfirmation.js | 48 ++++++++++--------- scm-ui/src/containers/ChangeUserPassword.js | 42 ++++++++++------ .../src/users/components/SetUserPassword.js | 20 +++++--- scm-ui/src/users/components/UserForm.js | 2 +- 4 files changed, 68 insertions(+), 44 deletions(-) diff --git a/scm-ui-components/packages/ui-components/src/forms/PasswordConfirmation.js b/scm-ui-components/packages/ui-components/src/forms/PasswordConfirmation.js index b0f53cddeb..4bb05495af 100644 --- a/scm-ui-components/packages/ui-components/src/forms/PasswordConfirmation.js +++ b/scm-ui-components/packages/ui-components/src/forms/PasswordConfirmation.js @@ -1,7 +1,7 @@ // @flow import React from "react"; -import {translate} from "react-i18next"; +import { translate } from "react-i18next"; import InputField from "./InputField"; type State = { @@ -40,26 +40,30 @@ class PasswordConfirmation extends React.Component { render() { const { t } = this.props; return ( - <> - - - +
+
+ +
+
+ +
+
); } @@ -99,7 +103,7 @@ class PasswordConfirmation extends React.Component { }; isValid = () => { - return this.state.passwordValid && !this.state.passwordConfirmationFailed + return this.state.passwordValid && !this.state.passwordConfirmationFailed; }; propagateChange = () => { diff --git a/scm-ui/src/containers/ChangeUserPassword.js b/scm-ui/src/containers/ChangeUserPassword.js index 28a7af588a..fe687d0e57 100644 --- a/scm-ui/src/containers/ChangeUserPassword.js +++ b/scm-ui/src/containers/ChangeUserPassword.js @@ -110,30 +110,42 @@ class ChangeUserPassword extends React.Component { return (
{message} - - this.setState({ ...this.state, oldPassword }) - } - value={this.state.oldPassword ? this.state.oldPassword : ""} - helpText={t("password.currentPasswordHelpText")} - /> +
+
+ + this.setState({ ...this.state, oldPassword }) + } + value={this.state.oldPassword ? this.state.oldPassword : ""} + helpText={t("password.currentPasswordHelpText")} + /> +
+
- +
+
+ +
+
); } passwordChanged = (password: string, passwordValid: boolean) => { - this.setState({ ...this.state, password, passwordValid: (!!password && passwordValid) }); + this.setState({ + ...this.state, + password, + passwordValid: !!password && passwordValid + }); }; onClose = () => { diff --git a/scm-ui/src/users/components/SetUserPassword.js b/scm-ui/src/users/components/SetUserPassword.js index a0fe844b0c..0409bf5d2b 100644 --- a/scm-ui/src/users/components/SetUserPassword.js +++ b/scm-ui/src/users/components/SetUserPassword.js @@ -105,17 +105,25 @@ class SetUserPassword extends React.Component { passwordChanged={this.passwordChanged} key={this.state.passwordChanged ? "changed" : "unchanged"} /> - +
+
+ +
+
); } passwordChanged = (password: string, passwordValid: boolean) => { - this.setState({ ...this.state, password, passwordValid: (!!password && passwordValid) }); + this.setState({ + ...this.state, + password, + passwordValid: !!password && passwordValid + }); }; onClose = () => { diff --git a/scm-ui/src/users/components/UserForm.js b/scm-ui/src/users/components/UserForm.js index c473e92322..ce1474a920 100644 --- a/scm-ui/src/users/components/UserForm.js +++ b/scm-ui/src/users/components/UserForm.js @@ -162,9 +162,9 @@ class UserForm extends React.Component { />
+ {passwordChangeField}
- {passwordChangeField} Date: Thu, 19 Sep 2019 08:59:03 +0200 Subject: [PATCH 22/74] add missing prop --- scm-ui-components/packages/ui-components/src/Icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-ui-components/packages/ui-components/src/Icon.js b/scm-ui-components/packages/ui-components/src/Icon.js index 16266b6854..255e3ef6cd 100644 --- a/scm-ui-components/packages/ui-components/src/Icon.js +++ b/scm-ui-components/packages/ui-components/src/Icon.js @@ -24,6 +24,6 @@ export default class Icon extends React.Component { /> ); } - return ; + return ; } } From 0a62597a85f5376ead79b85694b74d6ad555857e Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Thu, 19 Sep 2019 10:39:08 +0200 Subject: [PATCH 23/74] doubled-halfpage list on setPermissions page --- .../permissions/components/SetPermissions.js | 65 ++++++++++++++----- 1 file changed, 49 insertions(+), 16 deletions(-) diff --git a/scm-ui/src/permissions/components/SetPermissions.js b/scm-ui/src/permissions/components/SetPermissions.js index d78177a745..69b6f621cc 100644 --- a/scm-ui/src/permissions/components/SetPermissions.js +++ b/scm-ui/src/permissions/components/SetPermissions.js @@ -1,24 +1,29 @@ // @flow import React from "react"; +import { connect } from "react-redux"; +import { translate } from "react-i18next"; +import injectSheet from "react-jss"; +import classNames from "classnames"; import type { Link } from "@scm-manager/ui-types"; import { Notification, ErrorNotification, SubmitButton } from "@scm-manager/ui-components"; -import { translate } from "react-i18next"; +import { getLink } from "../../modules/indexResource"; import { loadPermissionsForEntity, setPermissions } from "./handlePermissions"; import PermissionCheckbox from "./PermissionCheckbox"; -import { connect } from "react-redux"; -import { getLink } from "../../modules/indexResource"; type Props = { - t: string => string, availablePermissionLink: string, - selectedPermissionsLink: Link + selectedPermissionsLink: Link, + + // context props + classes: any, + t: string => string }; type State = { @@ -30,6 +35,17 @@ type State = { overwritePermissionsLink?: Link }; +const styles = { + permissionsWrapper: { + paddingBottom: "0", + + "& .field .control": { + width: "100%", + wordWrap: "break-word" + } + } +}; + class SetPermissions extends React.Component { constructor(props: Props) { super(props); @@ -135,17 +151,35 @@ class SetPermissions extends React.Component { } renderPermissions = () => { + const { classes } = this.props; const { overwritePermissionsLink, permissions } = this.state; - return Object.keys(permissions).map(p => ( -
- + const permissionArray = Object.keys(permissions); + return ( +
+
+ {permissionArray.slice(0, (permissionArray.length/2)+1).map(p => ( + + ))} +
+
+ {permissionArray.slice((permissionArray.length/2)+1, permissionArray.length).map(p => ( + + ))} +
- )); + ); }; valueChanged = (value: boolean, name: string) => { @@ -174,5 +208,4 @@ const mapStateToProps = state => { }; export default connect(mapStateToProps)( - translate("permissions")(SetPermissions) -); + injectSheet(styles)(translate("permissions")(SetPermissions))); From 78feb1e7313767d68887c66b7ff2ec1ca8c4b61c Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Thu, 19 Sep 2019 10:50:29 +0200 Subject: [PATCH 24/74] remove obvious help text on change password dialog --- .../packages/ui-components/src/forms/PasswordConfirmation.js | 2 -- scm-ui/public/locales/de/commons.json | 2 -- scm-ui/public/locales/en/commons.json | 2 -- 3 files changed, 6 deletions(-) diff --git a/scm-ui-components/packages/ui-components/src/forms/PasswordConfirmation.js b/scm-ui-components/packages/ui-components/src/forms/PasswordConfirmation.js index 4bb05495af..99f2e6dd16 100644 --- a/scm-ui-components/packages/ui-components/src/forms/PasswordConfirmation.js +++ b/scm-ui-components/packages/ui-components/src/forms/PasswordConfirmation.js @@ -49,7 +49,6 @@ class PasswordConfirmation extends React.Component { value={this.state.password ? this.state.password : ""} validationError={!this.state.passwordValid} errorMessage={t("password.passwordInvalid")} - helpText={t("password.passwordHelpText")} />
@@ -60,7 +59,6 @@ class PasswordConfirmation extends React.Component { value={this.state ? this.state.confirmedPassword : ""} validationError={this.state.passwordConfirmationFailed} errorMessage={t("password.passwordConfirmFailed")} - helpText={t("password.passwordConfirmHelpText")} />
diff --git a/scm-ui/public/locales/de/commons.json b/scm-ui/public/locales/de/commons.json index cdbedd8b6b..260dac41c6 100644 --- a/scm-ui/public/locales/de/commons.json +++ b/scm-ui/public/locales/de/commons.json @@ -76,8 +76,6 @@ "password": { "label": "Passwort", "newPassword": "Neues Passwort", - "passwordHelpText": "Klartext Passwort des Benutzers.", - "passwordConfirmHelpText": "Passwort zur Bestätigen wiederholen.", "currentPassword": "Aktuelles Passwort", "currentPasswordHelpText": "Dieses Passwort wird momentan bereits verwendet.", "confirmPassword": "Passwort wiederholen", diff --git a/scm-ui/public/locales/en/commons.json b/scm-ui/public/locales/en/commons.json index 181fdc975c..9d3d2d0037 100644 --- a/scm-ui/public/locales/en/commons.json +++ b/scm-ui/public/locales/en/commons.json @@ -77,8 +77,6 @@ "password": { "label": "Password", "newPassword": "New password", - "passwordHelpText": "Plain text password of the user", - "passwordConfirmHelpText": "Repeat the password for confirmation", "currentPassword": "Current password", "currentPasswordHelpText": "The password currently in use", "confirmPassword": "Confirm password", From b0089c212d34f082ec656e002ca92aac63945748 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Thu, 19 Sep 2019 10:50:55 +0200 Subject: [PATCH 25/74] simplify --- .../src/forms/MemberNameTable.js | 40 +++++++++---------- scm-ui/src/groups/components/GroupForm.js | 5 +-- 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/scm-ui-components/packages/ui-components/src/forms/MemberNameTable.js b/scm-ui-components/packages/ui-components/src/forms/MemberNameTable.js index 0db3751239..30dac31093 100644 --- a/scm-ui-components/packages/ui-components/src/forms/MemberNameTable.js +++ b/scm-ui-components/packages/ui-components/src/forms/MemberNameTable.js @@ -15,27 +15,25 @@ class MemberNameTable extends React.Component { render() { const { t } = this.props; return ( -
- - - {this.props.members.map(member => { - return ( - - - - - ); - })} - -
{member} - -
-
+ + + {this.props.members.map(member => { + return ( + + + + + ); + })} + +
{member} + +
); } diff --git a/scm-ui/src/groups/components/GroupForm.js b/scm-ui/src/groups/components/GroupForm.js index 04a5e6f35f..85c922ece7 100644 --- a/scm-ui/src/groups/components/GroupForm.js +++ b/scm-ui/src/groups/components/GroupForm.js @@ -55,10 +55,7 @@ class GroupForm extends React.Component { } isFalsy(value) { - if (!value) { - return true; - } - return false; + return !value; } isValid = () => { From fa872ca20fb43b7c0298a1649aea9f87aedfd777 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Thu, 19 Sep 2019 11:42:18 +0200 Subject: [PATCH 26/74] remove font-weight change for button --- scm-ui/styles/scm.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/scm-ui/styles/scm.scss b/scm-ui/styles/scm.scss index 00b0bd11ee..7ecb178e78 100644 --- a/scm-ui/styles/scm.scss +++ b/scm-ui/styles/scm.scss @@ -263,7 +263,6 @@ $danger-25: scale-color($danger, $lightness: 75%); padding-left: 1.5em; padding-right: 1.5em; height: 2.5rem; - font-weight: 600; &[disabled] { opacity: 1; From 49531b523f701d3666d82046419f448f3b5fc6af Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Thu, 19 Sep 2019 15:07:04 +0200 Subject: [PATCH 27/74] remove redundant .is-outline-* definitions --- .../ui-components/src/repos/DiffFile.js | 2 +- scm-ui/styles/scm.scss | 220 ------------------ 2 files changed, 1 insertion(+), 221 deletions(-) diff --git a/scm-ui-components/packages/ui-components/src/repos/DiffFile.js b/scm-ui-components/packages/ui-components/src/repos/DiffFile.js index cf25fa9f71..4903e9b46f 100644 --- a/scm-ui-components/packages/ui-components/src/repos/DiffFile.js +++ b/scm-ui-components/packages/ui-components/src/repos/DiffFile.js @@ -191,7 +191,7 @@ class DiffFile extends React.Component { value = file.type; } const color = - value === "added" ? "outline-success" : value === "deleted" ? "outline-danger" : "outline-info"; + value === "added" ? "success is-outlined" : value === "deleted" ? "danger is-outlined" : "info is-outlined"; return ( Date: Thu, 19 Sep 2019 15:52:24 +0200 Subject: [PATCH 28/74] adjust .outline class to bulma format --- scm-ui/styles/scm.scss | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/scm-ui/styles/scm.scss b/scm-ui/styles/scm.scss index ee22083102..ceaa14e067 100644 --- a/scm-ui/styles/scm.scss +++ b/scm-ui/styles/scm.scss @@ -207,8 +207,8 @@ $danger-25: scale-color($danger, $lightness: 75%); background-color: $danger-25; } -.has-background-brown { - background-color: #000000b3; +.has-background-warning-invert { + background-color: $warning-invert; } // tags @@ -220,43 +220,46 @@ $danger-25: scale-color($danger, $lightness: 75%); background-color: $light; } - &.is-outline-black { + &.is-outlined { + background-color: $white; + } + &.is-black.is-outlined { color: $black; border-color: $black; } - &.is-outline-dark { + &.is-dark.is-outlined { color: $dark; border-color: $dark; } - &.is-outline-light { + &.is-light.is-outlined { color: $light; border-color: $light; } - &.is-outline-white { + &.is-white.is-outlined { color: $white; border-color: $white; } - &.is-outline-primary { + &.is-primary.is-outlined { color: $primary; border-color: $primary; } - &.is-outline-link { + &.is-link.is-outlined { color: $link; border-color: $link; } - &.is-outline-info { + &.is-info.is-outlined { color: $info; border-color: $info; } - &.is-outline-success { + &.is-success.is-outlined { color: $success; border-color: $success; } - &.is-outline-warning { + &.is-warning.is-outlined { color: $warning; border-color: $warning; } - &.is-outline-danger { + &.is-danger.is-outlined { color: $danger; border-color: $danger; } From aa405a2eb04c479b1b9d7499dba3f42480436a7e Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Thu, 19 Sep 2019 15:52:46 +0200 Subject: [PATCH 29/74] prevent following content from moving down --- .../packages/ui-components/src/repos/DiffFile.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scm-ui-components/packages/ui-components/src/repos/DiffFile.js b/scm-ui-components/packages/ui-components/src/repos/DiffFile.js index 4903e9b46f..1ad11ffef1 100644 --- a/scm-ui-components/packages/ui-components/src/repos/DiffFile.js +++ b/scm-ui-components/packages/ui-components/src/repos/DiffFile.js @@ -46,6 +46,10 @@ const styles = { diff: { "& > colgroup .diff-gutter-col": { width: "3.25rem" + }, + /* prevent following content from moving down */ + "& > .diff-gutter:empty:hover::after": { + fontSize: "0.7rem" } } }; From 169940614bac121ed5489324f74a0efe6d5b5b70 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Mon, 23 Sep 2019 08:50:19 +0200 Subject: [PATCH 30/74] redo font-weight change for button --- scm-ui/styles/scm.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/scm-ui/styles/scm.scss b/scm-ui/styles/scm.scss index ceaa14e067..a67620f5eb 100644 --- a/scm-ui/styles/scm.scss +++ b/scm-ui/styles/scm.scss @@ -270,6 +270,7 @@ $danger-25: scale-color($danger, $lightness: 75%); padding-left: 1.5em; padding-right: 1.5em; height: 2.5rem; + font-weight: 600; &[disabled] { opacity: 1; From 31d62165c5ba0d498ab231bad71db3973e94f855 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Mon, 23 Sep 2019 08:53:22 +0200 Subject: [PATCH 31/74] remove css vars --- scm-ui/styles/scm.scss | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scm-ui/styles/scm.scss b/scm-ui/styles/scm.scss index a67620f5eb..3c5b1d0caf 100644 --- a/scm-ui/styles/scm.scss +++ b/scm-ui/styles/scm.scss @@ -96,6 +96,8 @@ $danger-75: scale-color($danger, $lightness: 25%); $danger-50: scale-color($danger, $lightness: 50%); $danger-25: scale-color($danger, $lightness: 75%); +/* +// not supported by ie // css vars for external reuse :root { // asc sorted initial variables @@ -136,6 +138,7 @@ $danger-25: scale-color($danger, $lightness: 75%); --link-50: #{$link-50}; --link-25: #{$link-25}; } +*/ // readability issues with original color .has-text-warning { From 89d905b48209d0f22ce40133131c1a78c794f7b3 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Mon, 23 Sep 2019 14:12:02 +0200 Subject: [PATCH 32/74] add icon support for button and reduced-mobile option if icon is set --- .../ui-components/src/buttons/Button.js | 42 ++++++++++++++++--- scm-ui/styles/scm.scss | 13 +++--- 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/scm-ui-components/packages/ui-components/src/buttons/Button.js b/scm-ui-components/packages/ui-components/src/buttons/Button.js index 5e80db1e45..d2c782d12d 100644 --- a/scm-ui-components/packages/ui-components/src/buttons/Button.js +++ b/scm-ui-components/packages/ui-components/src/buttons/Button.js @@ -2,6 +2,7 @@ import * as React from "react"; import classNames from "classnames"; import { withRouter } from "react-router-dom"; +import Icon from "../Icon"; export type ButtonProps = { label?: string, @@ -9,10 +10,12 @@ export type ButtonProps = { disabled?: boolean, action?: (event: Event) => void, link?: string, - fullWidth?: boolean, className?: string, + icon?: string, + fullWidth?: boolean, + reducedMobile?: boolean, children?: React.Node, - + // context props classes: any }; @@ -47,12 +50,40 @@ class Button extends React.Component { disabled, type, color, + className, + icon, fullWidth, - children, - className + reducedMobile, + children } = this.props; const loadingClass = loading ? "is-loading" : ""; const fullWidthClass = fullWidth ? "is-fullwidth" : ""; + const reducedMobileClass = reducedMobile ? "is-reduced-mobile" : ""; + if (icon) { + return ( + + ); + } + return ( ); - }; - + } } export default withRouter(Button); diff --git a/scm-ui/styles/scm.scss b/scm-ui/styles/scm.scss index c10649f846..01f9c28454 100644 --- a/scm-ui/styles/scm.scss +++ b/scm-ui/styles/scm.scss @@ -363,6 +363,7 @@ $danger-25: scale-color($danger, $lightness: 75%); background-color: scale-color($danger, $lightness: 75%); } + &.is-reduced-mobile, &.reduced-mobile { font-size: 0.9rem; @@ -555,7 +556,7 @@ ul.is-separated { .panel-heading { border: none; - border-bottom: 1px solid #dbdbdb; + border-bottom: 1px solid $border; border-radius: 0.25rem 0.25rem 0 0; > .field { @@ -567,12 +568,8 @@ ul.is-separated { display: block; border: none; - & .comment-wrapper:first-child div:first-child { - border-top: none; - } - - & .diff-widget-content div { - border-bottom: none; + & .inline-comment + .inline-comment { + border-top: 1px solid $border, } } @@ -584,7 +581,7 @@ ul.is-separated { line-height: 1.25; padding: 0.5em 0.75em; border: none; - border-top: 1px solid #dbdbdb; + border-top: 1px solid $border; border-radius: 0 0 0.25rem 0.25rem; } } From 194b7f50b45ab73bf8a27ce2a5038a919bbdb2c0 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Mon, 23 Sep 2019 14:13:07 +0200 Subject: [PATCH 33/74] add icon to add/delete component as defined in the styleguide --- .../ui-components/src/buttons/AddButton.js | 22 +++++++++---------- .../ui-components/src/buttons/DeleteButton.js | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/scm-ui-components/packages/ui-components/src/buttons/AddButton.js b/scm-ui-components/packages/ui-components/src/buttons/AddButton.js index 8f46fb66a4..b5ad8d23ff 100644 --- a/scm-ui-components/packages/ui-components/src/buttons/AddButton.js +++ b/scm-ui-components/packages/ui-components/src/buttons/AddButton.js @@ -1,11 +1,11 @@ -//@flow -import React from "react"; -import Button, { type ButtonProps } from "./Button"; - -class AddButton extends React.Component { - render() { - return
- + - + + icon={sideBySide ? "align-left" : "columns"} + label={t(sideBySide ? "diff.combined" : "diff.sideBySide")} + reducedMobile={true} + /> {fileControls}
From b96087b0b0895a4ed167194049ad02bab2ac45a1 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Mon, 30 Sep 2019 15:08:14 +0200 Subject: [PATCH 69/74] fix collapsible option --- .../packages/ui-components/src/repos/DiffFile.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scm-ui-components/packages/ui-components/src/repos/DiffFile.js b/scm-ui-components/packages/ui-components/src/repos/DiffFile.js index dd0ce9d84b..f03c804338 100644 --- a/scm-ui-components/packages/ui-components/src/repos/DiffFile.js +++ b/scm-ui-components/packages/ui-components/src/repos/DiffFile.js @@ -69,7 +69,7 @@ const styles = { type Props = DiffObjectProps & { file: File, - collapsible: true, + collapsible: boolean, // context props classes: any, @@ -82,6 +82,10 @@ type State = { }; class DiffFile extends React.Component { + static defaultProps = { + collapsible: true + }; + constructor(props: Props) { super(props); this.state = { @@ -91,7 +95,7 @@ class DiffFile extends React.Component { } toggleCollapse = () => { - if (this.props.collapsable) { + if (this.props.collapsible) { this.setState(state => ({ collapsed: !state.collapsed })); From 765667bf2050edeb514d531fda8d5e443597d4c3 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Mon, 30 Sep 2019 15:11:45 +0200 Subject: [PATCH 70/74] use icon component instead --- .../packages/ui-components/src/repos/DiffFile.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/scm-ui-components/packages/ui-components/src/repos/DiffFile.js b/scm-ui-components/packages/ui-components/src/repos/DiffFile.js index f03c804338..dd48643beb 100644 --- a/scm-ui-components/packages/ui-components/src/repos/DiffFile.js +++ b/scm-ui-components/packages/ui-components/src/repos/DiffFile.js @@ -13,6 +13,7 @@ import classNames from "classnames"; import { translate } from "react-i18next"; import { Button, ButtonGroup } from "../buttons"; import Tag from "../Tag"; +import Icon from "../Icon"; const styles = { panel: { @@ -177,7 +178,7 @@ class DiffFile extends React.Component { ) { return ( <> - {file.oldPath} {file.newPath} + {file.oldPath} {file.newPath} ); } else if (file.type === "delete") { @@ -245,12 +246,12 @@ class DiffFile extends React.Component { const viewType = sideBySide ? "split" : "unified"; let body = null; - let icon = "fa fa-angle-right"; + let icon = "angle-right"; if (!collapsed) { const fileAnnotations = fileAnnotationFactory ? fileAnnotationFactory(file) : null; - icon = "fa fa-angle-down"; + icon = "angle-down"; body = (
{fileAnnotations} @@ -263,7 +264,7 @@ class DiffFile extends React.Component {
); } - const collapseIcon = collapsible ? : null; + const collapseIcon = collapsible ? : null; const fileControls = fileControlFactory ? fileControlFactory(file, this.setCollapse) From bef64e9831c4e3ca321de1e6f89733b963ce8b63 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Mon, 30 Sep 2019 15:29:47 +0200 Subject: [PATCH 71/74] add defaultCollapse option to force toggling all DiffFile components by once, remove toggle option and icon for binary files --- .../ui-components/src/repos/DiffFile.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/scm-ui-components/packages/ui-components/src/repos/DiffFile.js b/scm-ui-components/packages/ui-components/src/repos/DiffFile.js index dd48643beb..8dcdf0a640 100644 --- a/scm-ui-components/packages/ui-components/src/repos/DiffFile.js +++ b/scm-ui-components/packages/ui-components/src/repos/DiffFile.js @@ -70,7 +70,7 @@ const styles = { type Props = DiffObjectProps & { file: File, - collapsible: boolean, + defaultCollapse: boolean, // context props classes: any, @@ -84,19 +84,20 @@ type State = { class DiffFile extends React.Component { static defaultProps = { - collapsible: true + defaultCollapse: false }; constructor(props: Props) { super(props); this.state = { - collapsed: false, + collapsed: this.props.defaultCollapse, sideBySide: false }; } toggleCollapse = () => { - if (this.props.collapsible) { + const { file } = this.props; + if(file && !file.isBinaray) { this.setState(state => ({ collapsed: !state.collapsed })); @@ -178,7 +179,8 @@ class DiffFile extends React.Component { ) { return ( <> - {file.oldPath} {file.newPath} + {file.oldPath} {" "} + {file.newPath} ); } else if (file.type === "delete") { @@ -238,7 +240,6 @@ class DiffFile extends React.Component { file, fileControlFactory, fileAnnotationFactory, - collapsible, classes, t } = this.props; @@ -264,7 +265,9 @@ class DiffFile extends React.Component {
); } - const collapseIcon = collapsible ? : null; + const collapseIcon = !file.isBinary ? ( + + ) : null; const fileControls = fileControlFactory ? fileControlFactory(file, this.setCollapse) From 6605cc2b6b308adce24845fa8fcb17e911eba97a Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 1 Oct 2019 13:58:33 +0200 Subject: [PATCH 72/74] remove unused imports --- .../src/main/java/sonia/scm/repository/spi/GitCatCommand.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitCatCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitCatCommand.java index c9f33d84f4..35ff4d6ac2 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitCatCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitCatCommand.java @@ -32,8 +32,6 @@ package sonia.scm.repository.spi; -import org.eclipse.jgit.attributes.Attribute; -import org.eclipse.jgit.attributes.Attributes; import org.eclipse.jgit.errors.MissingObjectException; import org.eclipse.jgit.lfs.LfsPointer; import org.eclipse.jgit.lib.Constants; @@ -45,7 +43,6 @@ import org.eclipse.jgit.revwalk.RevTree; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.treewalk.TreeWalk; import org.eclipse.jgit.treewalk.filter.PathFilter; -import org.eclipse.jgit.util.LfsFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.repository.GitUtil; From 35b8740e00f436d5547e191abad2c93f0feaba7a Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 1 Oct 2019 12:12:04 +0000 Subject: [PATCH 73/74] Close branch feature/cat_with_lfs From c9966081d49613aa94771facf88ed339023734ee Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 1 Oct 2019 12:52:25 +0000 Subject: [PATCH 74/74] Close branch bugfix/postpone_writing_to_stream