From 7554deaad4c1db7a8531c99ae562882cc20c901a Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Thu, 19 Mar 2020 13:12:03 +0100 Subject: [PATCH 01/14] prepare first extensionpoint for favourite repository icon --- scm-ui/ui-components/src/CardColumn.tsx | 4 ++-- .../src/admin/plugins/components/PluginEntry.tsx | 2 +- .../src/repos/components/list/RepositoryEntry.tsx | 12 +++++++++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/scm-ui/ui-components/src/CardColumn.tsx b/scm-ui/ui-components/src/CardColumn.tsx index f7e7570d1d..0f28c3f3dc 100644 --- a/scm-ui/ui-components/src/CardColumn.tsx +++ b/scm-ui/ui-components/src/CardColumn.tsx @@ -4,7 +4,7 @@ import styled from "styled-components"; import { Link } from "react-router-dom"; type Props = { - title: string; + title: ReactNode; description?: string; avatar: ReactNode; contentRight?: ReactNode; @@ -77,7 +77,7 @@ export default class CardColumn extends React.Component {

- {title} + {title}

{description}

diff --git a/scm-ui/ui-webapp/src/admin/plugins/components/PluginEntry.tsx b/scm-ui/ui-webapp/src/admin/plugins/components/PluginEntry.tsx index c5afeae3e7..e4e3413863 100644 --- a/scm-ui/ui-webapp/src/admin/plugins/components/PluginEntry.tsx +++ b/scm-ui/ui-webapp/src/admin/plugins/components/PluginEntry.tsx @@ -158,7 +158,7 @@ class PluginEntry extends React.Component { this.toggleModal("showInstallModal") : null} avatar={avatar} - title={plugin.displayName ? plugin.displayName : plugin.name} + title={plugin.displayName ? {plugin.displayName} : {plugin.name}} description={plugin.description} contentRight={plugin.pending || plugin.markedForUninstall ? this.createPendingSpinner() : actionbar} footerRight={footerRight} diff --git a/scm-ui/ui-webapp/src/repos/components/list/RepositoryEntry.tsx b/scm-ui/ui-webapp/src/repos/components/list/RepositoryEntry.tsx index 8f4f0c295a..0f73065303 100644 --- a/scm-ui/ui-webapp/src/repos/components/list/RepositoryEntry.tsx +++ b/scm-ui/ui-webapp/src/repos/components/list/RepositoryEntry.tsx @@ -62,15 +62,25 @@ class RepositoryEntry extends React.Component { ); }; + createTitle = () => { + const { repository } = this.props; + return ( + <> + {repository.name} + + ); + }; + render() { const { repository } = this.props; const repositoryLink = this.createLink(repository); const footerLeft = this.createFooterLeft(repository, repositoryLink); const footerRight = this.createFooterRight(repository); + const title = this.createTitle(); return ( } - title={repository.name} + title={title} description={repository.description} link={repositoryLink} footerLeft={footerLeft} From e2d4ebe70661be686da3c593157e2e2c922fbaa5 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Tue, 24 Mar 2020 08:46:58 +0100 Subject: [PATCH 02/14] add second extension point for repository favorite --- .../src/repos/components/RepositoryDetailTable.tsx | 5 ++++- .../src/repos/components/list/RepositoryEntry.tsx | 2 +- yarn.lock | 8 ++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/scm-ui/ui-webapp/src/repos/components/RepositoryDetailTable.tsx b/scm-ui/ui-webapp/src/repos/components/RepositoryDetailTable.tsx index bf5ce5eaff..422d9baaab 100644 --- a/scm-ui/ui-webapp/src/repos/components/RepositoryDetailTable.tsx +++ b/scm-ui/ui-webapp/src/repos/components/RepositoryDetailTable.tsx @@ -2,6 +2,7 @@ import React from "react"; import { WithTranslation, withTranslation } from "react-i18next"; import { Repository } from "@scm-manager/ui-types"; import { DateFromNow, MailLink } from "@scm-manager/ui-components"; +import { ExtensionPoint } from "@scm-manager/ui-extensions"; type Props = WithTranslation & { repository: Repository; @@ -15,7 +16,9 @@ class RepositoryDetailTable extends React.Component { {t("repository.name")} - {repository.name} + + {repository.name} + {t("repository.type")} diff --git a/scm-ui/ui-webapp/src/repos/components/list/RepositoryEntry.tsx b/scm-ui/ui-webapp/src/repos/components/list/RepositoryEntry.tsx index 0f73065303..58ce2ee0d9 100644 --- a/scm-ui/ui-webapp/src/repos/components/list/RepositoryEntry.tsx +++ b/scm-ui/ui-webapp/src/repos/components/list/RepositoryEntry.tsx @@ -66,7 +66,7 @@ class RepositoryEntry extends React.Component { const { repository } = this.props; return ( <> - {repository.name} + {repository.name} ); }; diff --git a/yarn.lock b/yarn.lock index 42d56ee047..80a0146d61 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4370,10 +4370,10 @@ bulma-tooltip@^3.0.0: resolved "https://registry.yarnpkg.com/bulma-tooltip/-/bulma-tooltip-3.0.2.tgz#2cf0abab1de2eba07f9d84eb7f07a8a88819ea92" integrity sha512-CsT3APjhlZScskFg38n8HYL8oYNUHQtcu4sz6ERarxkUpBRbk9v0h/5KAvXeKapVSn2dp9l7bOGit5SECP8EWQ== -bulma@^0.7.5: - version "0.7.5" - resolved "https://registry.yarnpkg.com/bulma/-/bulma-0.7.5.tgz#35066c37f82c088b68f94450be758fc00a967208" - integrity sha512-cX98TIn0I6sKba/DhW0FBjtaDpxTelU166pf7ICXpCCuplHWyu6C9LYZmL5PEsnePIeJaiorsTEzzNk3Tsm1hw== +bulma@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/bulma/-/bulma-0.8.0.tgz#ac1606431703a4761b18a4a2d5cc1fa864a2aece" + integrity sha512-nhf3rGyiZh/VM7FrSJ/5KeLlfaFkXz0nYcXriynfPH4vVpnxnqyEwaNGdNCVzHyyCA3cHgkQAMpdF/SFbFGZfA== byline@^5.0.0: version "5.0.0" From df285182a8a85e81b1d9192de0e892c8db2141ec Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Wed, 25 Mar 2020 08:08:40 +0100 Subject: [PATCH 03/14] move favorite icon from details table to page title --- scm-ui/ui-components/src/layout/Page.tsx | 11 +++++++++-- .../src/repos/components/RepositoryDetailTable.tsx | 4 +--- .../ui-webapp/src/repos/containers/RepositoryRoot.tsx | 5 ++++- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/scm-ui/ui-components/src/layout/Page.tsx b/scm-ui/ui-components/src/layout/Page.tsx index 128337fd73..3746ee7fbc 100644 --- a/scm-ui/ui-components/src/layout/Page.tsx +++ b/scm-ui/ui-components/src/layout/Page.tsx @@ -10,6 +10,7 @@ import ErrorBoundary from "../ErrorBoundary"; type Props = { title?: string; + afterTitle?: ReactNode; subtitle?: string; loading?: boolean; error?: Error; @@ -27,6 +28,10 @@ const PageActionContainer = styled.div` } `; +const MarginLeft = styled.div` +margin-left: 0.5rem; +`; + export default class Page extends React.Component { componentDidUpdate() { const { title } = this.props; @@ -57,7 +62,7 @@ export default class Page extends React.Component { } renderPageHeader() { - const { error, title, subtitle, children } = this.props; + const { error, title, afterTitle, subtitle, children } = this.props; let pageActions = null; let pageActionsExists = false; @@ -81,7 +86,9 @@ export default class Page extends React.Component { <>
- + <div className="is-flex"> + <Title title={title} /> <MarginLeft>{afterTitle}</MarginLeft> + </div> <Subtitle subtitle={subtitle} /> </div> {pageActions} diff --git a/scm-ui/ui-webapp/src/repos/components/RepositoryDetailTable.tsx b/scm-ui/ui-webapp/src/repos/components/RepositoryDetailTable.tsx index 422d9baaab..3d9a9ea5aa 100644 --- a/scm-ui/ui-webapp/src/repos/components/RepositoryDetailTable.tsx +++ b/scm-ui/ui-webapp/src/repos/components/RepositoryDetailTable.tsx @@ -16,9 +16,7 @@ class RepositoryDetailTable extends React.Component<Props> { <tbody> <tr> <th>{t("repository.name")}</th> - <td> - <ExtensionPoint name={"repository.details.beforeName"} props={{ repository }} /> {repository.name} - </td> + <td>{repository.name}</td> </tr> <tr> <th>{t("repository.type")}</th> diff --git a/scm-ui/ui-webapp/src/repos/containers/RepositoryRoot.tsx b/scm-ui/ui-webapp/src/repos/containers/RepositoryRoot.tsx index c22a4f583e..80b0d19349 100644 --- a/scm-ui/ui-webapp/src/repos/containers/RepositoryRoot.tsx +++ b/scm-ui/ui-webapp/src/repos/containers/RepositoryRoot.tsx @@ -146,7 +146,10 @@ class RepositoryRoot extends React.Component<Props, State> { setMenuCollapsed: (collapsed: boolean) => this.setState({ menuCollapsed: collapsed }) }} > - <Page title={repository.namespace + "/" + repository.name}> + <Page + title={repository.namespace + "/" + repository.name} + afterTitle={<ExtensionPoint name={"repository.afterTitle"} props={{ repository }} />} + > <div className="columns"> <div className="column"> <Switch> From fd12464af4336fd670f4b275a2d6d4300c1be8e5 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch <eduard.heimbuch@cloudogu.com> Date: Wed, 25 Mar 2020 09:54:12 +0100 Subject: [PATCH 04/14] add RepositoryToHalMapper as interface to map a repositoryDto outside of webapp --- .../java/sonia/scm/web/api/RepositoryToHalMapper.java | 8 ++++++++ scm-ui/ui-components/src/layout/Page.tsx | 11 ++++++++--- .../java/sonia/scm/api/v2/resources/MapperModule.java | 3 +++ .../v2/resources/RepositoryToRepositoryDtoMapper.java | 6 +++++- 4 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 scm-core/src/main/java/sonia/scm/web/api/RepositoryToHalMapper.java diff --git a/scm-core/src/main/java/sonia/scm/web/api/RepositoryToHalMapper.java b/scm-core/src/main/java/sonia/scm/web/api/RepositoryToHalMapper.java new file mode 100644 index 0000000000..a5ca7339d8 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/web/api/RepositoryToHalMapper.java @@ -0,0 +1,8 @@ +package sonia.scm.web.api; + +import de.otto.edison.hal.HalRepresentation; +import sonia.scm.repository.Repository; + +public interface RepositoryToHalMapper { + HalRepresentation map(Repository repository); +} diff --git a/scm-ui/ui-components/src/layout/Page.tsx b/scm-ui/ui-components/src/layout/Page.tsx index 3746ee7fbc..44880b1c50 100644 --- a/scm-ui/ui-components/src/layout/Page.tsx +++ b/scm-ui/ui-components/src/layout/Page.tsx @@ -32,6 +32,11 @@ const MarginLeft = styled.div` margin-left: 0.5rem; `; +const FlexContainer = styled.div` + display: flex; + flex-direction: row; +`; + export default class Page extends React.Component<Props> { componentDidUpdate() { const { title } = this.props; @@ -86,9 +91,9 @@ export default class Page extends React.Component<Props> { <> <div className="columns"> <div className="column"> - <div className="is-flex"> - <Title title={title} /> <MarginLeft>{afterTitle}</MarginLeft> - </div> + <FlexContainer> + <Title title={title} /> {afterTitle && <MarginLeft>{afterTitle}</MarginLeft>} + </FlexContainer> <Subtitle subtitle={subtitle} /> </div> {pageActions} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MapperModule.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MapperModule.java index c7d88e7c0a..ab45d8ce28 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MapperModule.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MapperModule.java @@ -3,6 +3,7 @@ package sonia.scm.api.v2.resources; import com.google.inject.AbstractModule; import com.google.inject.servlet.ServletScopes; import org.mapstruct.factory.Mappers; +import sonia.scm.web.api.RepositoryToHalMapper; public class MapperModule extends AbstractModule { @Override @@ -46,6 +47,8 @@ public class MapperModule extends AbstractModule { bind(ScmViolationExceptionToErrorDtoMapper.class).to(Mappers.getMapper(ScmViolationExceptionToErrorDtoMapper.class).getClass()); bind(ExceptionWithContextToErrorDtoMapper.class).to(Mappers.getMapper(ExceptionWithContextToErrorDtoMapper.class).getClass()); + bind(RepositoryToHalMapper.class).to(Mappers.getMapper(RepositoryToRepositoryDtoMapper.class).getClass()); + // no mapstruct required bind(MeDtoFactory.class); bind(UIPluginDtoMapper.class); diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java index 9e91269b15..c650102969 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java @@ -14,6 +14,7 @@ import sonia.scm.repository.api.Command; import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.repository.api.ScmProtocol; +import sonia.scm.web.api.RepositoryToHalMapper; import java.util.List; @@ -25,7 +26,7 @@ import static java.util.stream.Collectors.toList; // Mapstruct does not support parameterized (i.e. non-default) constructors. Thus, we need to use field injection. @SuppressWarnings("squid:S3306") @Mapper -public abstract class RepositoryToRepositoryDtoMapper extends BaseMapper<Repository, RepositoryDto> { +public abstract class RepositoryToRepositoryDtoMapper extends BaseMapper<Repository, RepositoryDto> implements RepositoryToHalMapper { @Inject private ResourceLinks resourceLinks; @@ -34,6 +35,9 @@ public abstract class RepositoryToRepositoryDtoMapper extends BaseMapper<Reposit abstract HealthCheckFailureDto toDto(HealthCheckFailure failure); + @Override + public abstract RepositoryDto map(Repository modelObject); + @ObjectFactory RepositoryDto createDto(Repository repository) { Links.Builder linksBuilder = linkingTo().self(resourceLinks.repository().self(repository.getNamespace(), repository.getName())); From 6fb762b52f3ce532868c419062bf5f4e5263d1e0 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch <eduard.heimbuch@cloudogu.com> Date: Wed, 25 Mar 2020 10:27:38 +0100 Subject: [PATCH 05/14] move repository components from ui-webapp to ui-components // add font-awesome regular icons --- .../list => ui-components/src/repos}/RepositoryAvatar.tsx | 0 .../list => ui-components/src/repos}/RepositoryEntry.tsx | 0 .../list => ui-components/src/repos}/RepositoryEntryLink.tsx | 0 scm-ui/ui-components/src/repos/index.ts | 3 +++ scm-ui/ui-styles/src/scm.scss | 1 + .../src/repos/components/list/RepositoryGroupEntry.tsx | 3 +-- 6 files changed, 5 insertions(+), 2 deletions(-) rename scm-ui/{ui-webapp/src/repos/components/list => ui-components/src/repos}/RepositoryAvatar.tsx (100%) rename scm-ui/{ui-webapp/src/repos/components/list => ui-components/src/repos}/RepositoryEntry.tsx (100%) rename scm-ui/{ui-webapp/src/repos/components/list => ui-components/src/repos}/RepositoryEntryLink.tsx (100%) diff --git a/scm-ui/ui-webapp/src/repos/components/list/RepositoryAvatar.tsx b/scm-ui/ui-components/src/repos/RepositoryAvatar.tsx similarity index 100% rename from scm-ui/ui-webapp/src/repos/components/list/RepositoryAvatar.tsx rename to scm-ui/ui-components/src/repos/RepositoryAvatar.tsx diff --git a/scm-ui/ui-webapp/src/repos/components/list/RepositoryEntry.tsx b/scm-ui/ui-components/src/repos/RepositoryEntry.tsx similarity index 100% rename from scm-ui/ui-webapp/src/repos/components/list/RepositoryEntry.tsx rename to scm-ui/ui-components/src/repos/RepositoryEntry.tsx diff --git a/scm-ui/ui-webapp/src/repos/components/list/RepositoryEntryLink.tsx b/scm-ui/ui-components/src/repos/RepositoryEntryLink.tsx similarity index 100% rename from scm-ui/ui-webapp/src/repos/components/list/RepositoryEntryLink.tsx rename to scm-ui/ui-components/src/repos/RepositoryEntryLink.tsx diff --git a/scm-ui/ui-components/src/repos/index.ts b/scm-ui/ui-components/src/repos/index.ts index 07e270b156..d8197d4698 100644 --- a/scm-ui/ui-components/src/repos/index.ts +++ b/scm-ui/ui-components/src/repos/index.ts @@ -22,6 +22,9 @@ export { default as DiffFile } from "./DiffFile"; export { default as DiffButton } from "./DiffButton"; export { default as LoadingDiff } from "./LoadingDiff"; export { DefaultCollapsed, DefaultCollapsedFunction } from "./defaultCollapsed"; +export { default as RepositoryAvatar } from "./RepositoryAvatar"; +export { default as RepositoryEntry } from "./RepositoryEntry"; +export { default as RepositoryEntryLink } from "./RepositoryEntryLink"; export { File, diff --git a/scm-ui/ui-styles/src/scm.scss b/scm-ui/ui-styles/src/scm.scss index 3adb51da90..e799fe38e2 100644 --- a/scm-ui/ui-styles/src/scm.scss +++ b/scm-ui/ui-styles/src/scm.scss @@ -433,6 +433,7 @@ $danger-25: scale-color($danger, $lightness: 75%); @import "~@fortawesome/fontawesome-free/scss/fontawesome"; $fa-font-path: "~@fortawesome/fontawesome-free/webfonts"; @import "~@fortawesome/fontawesome-free/scss/solid"; +@import "~@fortawesome/fontawesome-free/scss/regular"; @import "~@fortawesome/fontawesome-free/scss/brands"; @import "~react-diff-view/style/index"; diff --git a/scm-ui/ui-webapp/src/repos/components/list/RepositoryGroupEntry.tsx b/scm-ui/ui-webapp/src/repos/components/list/RepositoryGroupEntry.tsx index 49de1c6645..e31580889d 100644 --- a/scm-ui/ui-webapp/src/repos/components/list/RepositoryGroupEntry.tsx +++ b/scm-ui/ui-webapp/src/repos/components/list/RepositoryGroupEntry.tsx @@ -1,7 +1,6 @@ import React from "react"; -import { CardColumnGroup } from "@scm-manager/ui-components"; +import { CardColumnGroup, RepositoryEntry } from "@scm-manager/ui-components"; import { RepositoryGroup } from "@scm-manager/ui-types"; -import RepositoryEntry from "./RepositoryEntry"; type Props = { group: RepositoryGroup; From 3a2aa7a55ca8240f18c0ac23c4e9353c698786b2 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch <eduard.heimbuch@cloudogu.com> Date: Wed, 25 Mar 2020 14:10:22 +0100 Subject: [PATCH 06/14] add stories for RepositoryEntry --- .../scm/web/api/RepositoryToHalMapper.java | 24 ++++++ .../src/__resources__/Git-Repository.ts | 67 ++++++++++++++++ .../src/__resources__/Hg-Repository.ts | 67 ++++++++++++++++ .../src/__resources__/git-logo.png | Bin 0 -> 13898 bytes .../src/__resources__/hg-logo.png | Bin 0 -> 5658 bytes .../src/repos/RepositoryEntry.stories.tsx | 72 ++++++++++++++++++ yarn.lock | 19 ++--- 7 files changed, 238 insertions(+), 11 deletions(-) create mode 100644 scm-ui/ui-components/src/__resources__/Git-Repository.ts create mode 100644 scm-ui/ui-components/src/__resources__/Hg-Repository.ts create mode 100644 scm-ui/ui-components/src/__resources__/git-logo.png create mode 100644 scm-ui/ui-components/src/__resources__/hg-logo.png create mode 100644 scm-ui/ui-components/src/repos/RepositoryEntry.stories.tsx diff --git a/scm-core/src/main/java/sonia/scm/web/api/RepositoryToHalMapper.java b/scm-core/src/main/java/sonia/scm/web/api/RepositoryToHalMapper.java index a5ca7339d8..90ca664cee 100644 --- a/scm-core/src/main/java/sonia/scm/web/api/RepositoryToHalMapper.java +++ b/scm-core/src/main/java/sonia/scm/web/api/RepositoryToHalMapper.java @@ -1,3 +1,27 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package sonia.scm.web.api; import de.otto.edison.hal.HalRepresentation; diff --git a/scm-ui/ui-components/src/__resources__/Git-Repository.ts b/scm-ui/ui-components/src/__resources__/Git-Repository.ts new file mode 100644 index 0000000000..b5267282f8 --- /dev/null +++ b/scm-ui/ui-components/src/__resources__/Git-Repository.ts @@ -0,0 +1,67 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +export default { + contact: "", + creationDate: "2020-03-23T08:26:01.164Z", + description: "", + healthCheckFailures: [], + lastModified: "2020-03-23T08:26:01.876Z", + namespace: "scmadmin", + name: "Git", + type: "git", + _links: { + self: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/Git" }, + delete: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/Git" }, + update: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/Git" }, + permissions: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/Git/permissions/" }, + protocol: [ + { href: "ssh://scmadmin@localhost:4567/repo/scmadmin/Git", name: "ssh" }, + { href: "http://localhost:8081/scm/repo/scmadmin/Git", name: "http" } + ], + tags: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/Git/tags/" }, + branches: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/Git/branches/" }, + incomingChangesets: { + href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/Git/incoming/{source}/{target}/changesets", + templated: true + }, + incomingDiff: { + href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/Git/incoming/{source}/{target}/diff", + templated: true + }, + incomingDiffParsed: { + href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/Git/incoming/{source}/{target}/diff/parsed", + templated: true + }, + changesets: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/Git/changesets/" }, + sources: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/Git/sources/" }, + authorMappingConfig: { + href: "http://localhost:8081/scm/api/v2/authormapping/configuration/scmadmin/Git" + }, + unfavorize: { href: "http://localhost:8081/scm/api/v2/unfavorize/scmadmin/Git" }, + favorites: [ + { href: "http://localhost:8081/scm/api/v2/unfavorize/scmadmin/Git", name: "unfavorize" }, + { href: "http://localhost:8081/scm/api/v2/favorize/scmadmin/Git", name: "favorize" } + ] + } +}; diff --git a/scm-ui/ui-components/src/__resources__/Hg-Repository.ts b/scm-ui/ui-components/src/__resources__/Hg-Repository.ts new file mode 100644 index 0000000000..10ef653e51 --- /dev/null +++ b/scm-ui/ui-components/src/__resources__/Hg-Repository.ts @@ -0,0 +1,67 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +export default { + contact: "", + creationDate: "2020-03-23T08:26:01.164Z", + description: "", + healthCheckFailures: [], + lastModified: "2020-03-23T08:26:01.876Z", + namespace: "scmadmin", + name: "Mercurial", + type: "hg", + _links: { + self: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial" }, + delete: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial" }, + update: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial" }, + permissions: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial/permissions/" }, + protocol: [ + { href: "ssh://scmadmin@localhost:4567/repo/scmadmin/mercurial", name: "ssh" }, + { href: "http://localhost:8081/scm/repo/scmadmin/mercurial", name: "http" } + ], + tags: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial/tags/" }, + branches: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial/branches/" }, + incomingChangesets: { + href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial/incoming/{source}/{target}/changesets", + templated: true + }, + incomingDiff: { + href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial/incoming/{source}/{target}/diff", + templated: true + }, + incomingDiffParsed: { + href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial/incoming/{source}/{target}/diff/parsed", + templated: true + }, + changesets: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial/changesets/" }, + sources: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial/sources/" }, + authorMappingConfig: { + href: "http://localhost:8081/scm/api/v2/authormapping/configuration/scmadmin/mercurial" + }, + unfavorize: { href: "http://localhost:8081/scm/api/v2/unfavorize/scmadmin/mercurial" }, + favorites: [ + { href: "http://localhost:8081/scm/api/v2/unfavorize/scmadmin/mercurial", name: "unfavorize" }, + { href: "http://localhost:8081/scm/api/v2/favorize/scmadmin/mercurial", name: "favorize" } + ] + } +}; diff --git a/scm-ui/ui-components/src/__resources__/git-logo.png b/scm-ui/ui-components/src/__resources__/git-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ed9393dc368a51d27f5f4a86b89aa47afe7bc9b7 GIT binary patch literal 13898 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 PISd9Qtt?e5@g?|w^zEk* literal 0 HcmV?d00001 diff --git a/scm-ui/ui-components/src/__resources__/hg-logo.png b/scm-ui/ui-components/src/__resources__/hg-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0f72285da6b55e48021c9068c692fc13638d529d GIT binary patch literal 5658 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 A>Hq)$ literal 0 HcmV?d00001 diff --git a/scm-ui/ui-components/src/repos/RepositoryEntry.stories.tsx b/scm-ui/ui-components/src/repos/RepositoryEntry.stories.tsx new file mode 100644 index 0000000000..1a2862a44f --- /dev/null +++ b/scm-ui/ui-components/src/repos/RepositoryEntry.stories.tsx @@ -0,0 +1,72 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +import { storiesOf } from "@storybook/react"; +import React from "react"; +import styled from "styled-components"; +import GitRepository from "../__resources__/Git-Repository"; +import HgRepository from "../__resources__/Hg-Repository"; +// @ts-ignore ignore unknown png +import Git from "../__resources__/git-logo.png"; +// @ts-ignore ignore unknown png +import Hg from "../__resources__/hg-logo.png"; +import RepositoryEntry from "./RepositoryEntry"; +import { Binder, BinderContext } from "@scm-manager/ui-extensions"; +import { Repository } from "@scm-manager/ui-types"; + +const Container = styled.div` + padding: 2rem 6rem; +`; + +const bindAvatar = (binder: Binder, avatar: string) => { + binder.bind("repos.repository-avatar", () => { + return avatar; + }); +}; + +const bindBeforeTitle = (binder: Binder, beforeTitle: string) => { + binder.bind("repository.card.beforeTitle", () => { + return beforeTitle; + }); +}; + +const withBinder = (binder: Binder, repository: Repository) => { + return ( + <BinderContext.Provider value={binder}> + <RepositoryEntry repository={repository} /> + </BinderContext.Provider> + ); +}; + +storiesOf("RepositoryEntry", module) + .addDecorator(storyFn => <Container>{storyFn()}</Container>) + .add("Git-Repo", () => { + const binder = new Binder("git-story"); + bindAvatar(binder, "Git"); + return withBinder(binder, GitRepository); + }) + .add("Hg-Repo", () => { + const binder = new Binder("hg-story"); + bindBeforeTitle(binder, "Hg"); + return withBinder(binder, HgRepository); + }); diff --git a/yarn.lock b/yarn.lock index c81b892b90..7ebd28adce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3656,6 +3656,11 @@ babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.2" +babel-core@7.0.0-bridge.0: + version "7.0.0-bridge.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" + integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== + babel-eslint@^10.0.3: version "10.0.3" resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.3.tgz#81a2c669be0f205e19462fed2482d33e4687a88a" @@ -6801,7 +6806,7 @@ fast-safe-stringify@^1.0.8, fast-safe-stringify@^1.2.1: resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-1.2.3.tgz#9fe22c37fb2f7f86f06b8f004377dbf8f1ee7bc1" integrity sha512-QJYT/i0QYoiZBQ71ivxdyTqkwKkQ0oxACXHYxH2zYHJEgzi2LsbjgvtzTbLi1SZcF190Db2YP7I7eTsU2egOlw== -fault@^1.0.0, fault@^1.0.2: +fault@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.4.tgz#eafcfc0a6d214fc94601e170df29954a4f842f13" integrity sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA== @@ -7340,7 +7345,7 @@ gitconfiglocal@^1.0.0: dependencies: ini "^1.3.2" -gitdiff-parser@^0.1.2: +gitdiff-parser@^0.1.2, "gitdiff-parser@https://github.com/scm-manager/gitdiff-parser#ed3fe7de73dbb0a06c3e6adbbdf22dbae6e66351": version "0.1.2" resolved "https://github.com/scm-manager/gitdiff-parser#ed3fe7de73dbb0a06c3e6adbbdf22dbae6e66351" @@ -9649,7 +9654,7 @@ lower-case@^1.1.1: resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= -lowlight@^1.13.0: +lowlight@1.13.1, lowlight@^1.13.0, lowlight@~1.11.0: version "1.13.1" resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.13.1.tgz#c4f0e03906ebd23fedf2d258f6ab2f6324cf90eb" integrity sha512-kQ71/T6RksEVz9AlPq07/2m+SU/1kGvt9k39UtvHX760u4SaWakaYH7hYgH5n6sTsCWk4MVYzUzLU59aN5CSmQ== @@ -9657,14 +9662,6 @@ lowlight@^1.13.0: fault "^1.0.0" highlight.js "~9.16.0" -lowlight@~1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.11.0.tgz#1304d83005126d4e8b1dc0f07981e9b689ec2efc" - integrity sha512-xrGGN6XLL7MbTMdPD6NfWPwY43SNkjf/d0mecSx/CW36fUZTjRHEq0/Cdug3TWKtRXLWi7iMl1eP0olYxj/a4A== - dependencies: - fault "^1.0.2" - highlight.js "~9.13.0" - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" From 098142c815b6c6785e58229faad2b3d694f733b4 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch <eduard.heimbuch@cloudogu.com> Date: Wed, 25 Mar 2020 14:12:08 +0100 Subject: [PATCH 07/14] update storyshots --- .../src/__snapshots__/storyshots.test.ts.snap | 226 ++++++++++++++++++ 1 file changed, 226 insertions(+) diff --git a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap index b900c277d9..abff8b5109 100644 --- a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap +++ b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap @@ -34188,6 +34188,232 @@ exports[`Storyshots MarkdownView Xml Code Block 1`] = ` </div> `; +exports[`Storyshots RepositoryEntry Git-Repo 1`] = ` +<div + className="RepositoryEntrystories__Container-toppdg-0 bQveHd" +> + <a + className="overlay-column" + href="/repo/scmadmin/Git" + onClick={[Function]} + /> + <article + className="CardColumn__NoEventWrapper-sc-1w6lsih-0 kZKqpc media" + > + <figure + className="CardColumn__AvatarWrapper-sc-1w6lsih-1 bZyfne media-left" + > + <p + className="image is-64x64" + > + Git + </p> + </figure> + <div + className="CardColumn__FlexFullHeight-sc-1w6lsih-2 cAdfGj media-content text-box is-flex" + > + <div + className="is-flex" + > + <div + className="CardColumn__ContentLeft-sc-1w6lsih-4 dumWkw content" + > + <p + className="shorten-text is-marginless" + > + + <strong> + Git + </strong> + </p> + <p + className="shorten-text" + > + + </p> + </div> + <div + className="CardColumn__ContentRight-sc-1w6lsih-5 kyEPRa" + /> + </div> + <div + className="CardColumn__FooterWrapper-sc-1w6lsih-3 jlTqlS level is-flex" + > + <div + className="level-left is-hidden-mobile" + > + <a + className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" + href="/repo/scmadmin/Git/branches" + onClick={[Function]} + > + <i + className="fas fa-code-branch has-text-inherit fa-lg" + /> + </a> + <a + className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" + href="/repo/scmadmin/Git/code/changesets/" + onClick={[Function]} + > + <i + className="fas fa-exchange-alt has-text-inherit fa-lg" + /> + </a> + <a + className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" + href="/repo/scmadmin/Git/code/sources/" + onClick={[Function]} + > + <i + className="fas fa-code has-text-inherit fa-lg" + /> + </a> + <a + className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" + href="/repo/scmadmin/Git/settings/general" + onClick={[Function]} + > + <i + className="fas fa-cog has-text-inherit fa-lg" + /> + </a> + </div> + <div + className="level-right is-mobile is-marginless" + > + <small + className="level-item" + > + <time + className="DateFromNow__DateElement-sc-16hnz72-0 ehlCzi" + title="2020-03-23 09:26:01" + > + 2 days ago + </time> + </small> + </div> + </div> + </div> + </article> +</div> +`; + +exports[`Storyshots RepositoryEntry Hg-Repo 1`] = ` +<div + className="RepositoryEntrystories__Container-toppdg-0 bQveHd" +> + <a + className="overlay-column" + href="/repo/scmadmin/Mercurial" + onClick={[Function]} + /> + <article + className="CardColumn__NoEventWrapper-sc-1w6lsih-0 kZKqpc media" + > + <figure + className="CardColumn__AvatarWrapper-sc-1w6lsih-1 bZyfne media-left" + > + <p + className="image is-64x64" + > + <img + alt="Logo" + src="/images/blib.jpg" + /> + </p> + </figure> + <div + className="CardColumn__FlexFullHeight-sc-1w6lsih-2 cAdfGj media-content text-box is-flex" + > + <div + className="is-flex" + > + <div + className="CardColumn__ContentLeft-sc-1w6lsih-4 dumWkw content" + > + <p + className="shorten-text is-marginless" + > + Hg + + <strong> + Mercurial + </strong> + </p> + <p + className="shorten-text" + > + + </p> + </div> + <div + className="CardColumn__ContentRight-sc-1w6lsih-5 kyEPRa" + /> + </div> + <div + className="CardColumn__FooterWrapper-sc-1w6lsih-3 jlTqlS level is-flex" + > + <div + className="level-left is-hidden-mobile" + > + <a + className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" + href="/repo/scmadmin/Mercurial/branches" + onClick={[Function]} + > + <i + className="fas fa-code-branch has-text-inherit fa-lg" + /> + </a> + <a + className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" + href="/repo/scmadmin/Mercurial/code/changesets/" + onClick={[Function]} + > + <i + className="fas fa-exchange-alt has-text-inherit fa-lg" + /> + </a> + <a + className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" + href="/repo/scmadmin/Mercurial/code/sources/" + onClick={[Function]} + > + <i + className="fas fa-code has-text-inherit fa-lg" + /> + </a> + <a + className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" + href="/repo/scmadmin/Mercurial/settings/general" + onClick={[Function]} + > + <i + className="fas fa-cog has-text-inherit fa-lg" + /> + </a> + </div> + <div + className="level-right is-mobile is-marginless" + > + <small + className="level-item" + > + <time + className="DateFromNow__DateElement-sc-16hnz72-0 ehlCzi" + title="2020-03-23 09:26:01" + > + 2 days ago + </time> + </small> + </div> + </div> + </div> + </article> +</div> +`; + exports[`Storyshots SyntaxHighlighter Go 1`] = ` <div className="SyntaxHighlighterstories__Spacing-sc-1dcldp5-0 eofOgh" From c29cbfed84f8c03ef18ccba4d843d45a6956c825 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch <eduard.heimbuch@cloudogu.com> Date: Wed, 25 Mar 2020 16:58:14 +0100 Subject: [PATCH 08/14] fix overlay column size --- scm-ui/ui-styles/src/scm.scss | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/scm-ui/ui-styles/src/scm.scss b/scm-ui/ui-styles/src/scm.scss index e799fe38e2..f828c7819a 100644 --- a/scm-ui/ui-styles/src/scm.scss +++ b/scm-ui/ui-styles/src/scm.scss @@ -491,6 +491,16 @@ ul.is-separated { } } + .column.is-half-overlay { + .overlay-column { + width: calc(50% - 3rem); + + @media screen and (max-width: 768px) { + width: calc(100% - 1.5rem); + } + } + } + .column.is-full .overlay-column { width: calc(100% - 1.5rem); } From 2438e980a71f6afd7030fcd01e2720f54e0c67ed Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra <sebastian.sdorra@cloudogu.com> Date: Thu, 26 Mar 2020 10:16:26 +0100 Subject: [PATCH 09/14] improve RepositoryEntry story --- .../src/__resources__/Hg-Repository.ts | 67 ------------------ .../src/__resources__/hg-logo.png | Bin 5658 -> 0 bytes .../{Git-Repository.ts => repository.ts} | 8 +-- .../src/repos/RepositoryEntry.stories.tsx | 65 +++++++++++------ 4 files changed, 47 insertions(+), 93 deletions(-) delete mode 100644 scm-ui/ui-components/src/__resources__/Hg-Repository.ts delete mode 100644 scm-ui/ui-components/src/__resources__/hg-logo.png rename scm-ui/ui-components/src/__resources__/{Git-Repository.ts => repository.ts} (93%) diff --git a/scm-ui/ui-components/src/__resources__/Hg-Repository.ts b/scm-ui/ui-components/src/__resources__/Hg-Repository.ts deleted file mode 100644 index 10ef653e51..0000000000 --- a/scm-ui/ui-components/src/__resources__/Hg-Repository.ts +++ /dev/null @@ -1,67 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -export default { - contact: "", - creationDate: "2020-03-23T08:26:01.164Z", - description: "", - healthCheckFailures: [], - lastModified: "2020-03-23T08:26:01.876Z", - namespace: "scmadmin", - name: "Mercurial", - type: "hg", - _links: { - self: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial" }, - delete: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial" }, - update: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial" }, - permissions: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial/permissions/" }, - protocol: [ - { href: "ssh://scmadmin@localhost:4567/repo/scmadmin/mercurial", name: "ssh" }, - { href: "http://localhost:8081/scm/repo/scmadmin/mercurial", name: "http" } - ], - tags: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial/tags/" }, - branches: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial/branches/" }, - incomingChangesets: { - href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial/incoming/{source}/{target}/changesets", - templated: true - }, - incomingDiff: { - href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial/incoming/{source}/{target}/diff", - templated: true - }, - incomingDiffParsed: { - href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial/incoming/{source}/{target}/diff/parsed", - templated: true - }, - changesets: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial/changesets/" }, - sources: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/mercurial/sources/" }, - authorMappingConfig: { - href: "http://localhost:8081/scm/api/v2/authormapping/configuration/scmadmin/mercurial" - }, - unfavorize: { href: "http://localhost:8081/scm/api/v2/unfavorize/scmadmin/mercurial" }, - favorites: [ - { href: "http://localhost:8081/scm/api/v2/unfavorize/scmadmin/mercurial", name: "unfavorize" }, - { href: "http://localhost:8081/scm/api/v2/favorize/scmadmin/mercurial", name: "favorize" } - ] - } -}; diff --git a/scm-ui/ui-components/src/__resources__/hg-logo.png b/scm-ui/ui-components/src/__resources__/hg-logo.png deleted file mode 100644 index 0f72285da6b55e48021c9068c692fc13638d529d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5658 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 A>Hq)$ diff --git a/scm-ui/ui-components/src/__resources__/Git-Repository.ts b/scm-ui/ui-components/src/__resources__/repository.ts similarity index 93% rename from scm-ui/ui-components/src/__resources__/Git-Repository.ts rename to scm-ui/ui-components/src/__resources__/repository.ts index b5267282f8..8facf86e57 100644 --- a/scm-ui/ui-components/src/__resources__/Git-Repository.ts +++ b/scm-ui/ui-components/src/__resources__/repository.ts @@ -22,13 +22,13 @@ * SOFTWARE. */ export default { - contact: "", + contact: "heart-of-gold@hitchhiher.com", creationDate: "2020-03-23T08:26:01.164Z", - description: "", + description: "The starship Heart of Gold was the first spacecraft to make use of the Infinite Improbability Drive", healthCheckFailures: [], lastModified: "2020-03-23T08:26:01.876Z", - namespace: "scmadmin", - name: "Git", + namespace: "hitchhiher", + name: "heartOfGold", type: "git", _links: { self: { href: "http://localhost:8081/scm/api/v2/repositories/scmadmin/Git" }, diff --git a/scm-ui/ui-components/src/repos/RepositoryEntry.stories.tsx b/scm-ui/ui-components/src/repos/RepositoryEntry.stories.tsx index 1a2862a44f..f8b9994fd0 100644 --- a/scm-ui/ui-components/src/repos/RepositoryEntry.stories.tsx +++ b/scm-ui/ui-components/src/repos/RepositoryEntry.stories.tsx @@ -21,52 +21,73 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -import { storiesOf } from "@storybook/react"; -import React from "react"; +import {storiesOf} from "@storybook/react"; +import React, {FC, ReactNode} from "react"; import styled from "styled-components"; -import GitRepository from "../__resources__/Git-Repository"; -import HgRepository from "../__resources__/Hg-Repository"; +import repository from "../__resources__/repository"; // @ts-ignore ignore unknown png import Git from "../__resources__/git-logo.png"; -// @ts-ignore ignore unknown png -import Hg from "../__resources__/hg-logo.png"; import RepositoryEntry from "./RepositoryEntry"; -import { Binder, BinderContext } from "@scm-manager/ui-extensions"; -import { Repository } from "@scm-manager/ui-types"; +import {Binder, BinderContext} from "@scm-manager/ui-extensions"; +import {Repository} from "@scm-manager/ui-types"; +import Image from "../Image"; +import classNames from "classnames"; +import Icon from "../Icon"; -const Container = styled.div` - padding: 2rem 6rem; +const Spacing = styled.div` + margin: 2rem; `; +const Container: FC = ({children}) => ( + <Spacing className="box box-link-shadow">{children}</Spacing> +); + const bindAvatar = (binder: Binder, avatar: string) => { binder.bind("repos.repository-avatar", () => { - return avatar; + return <Image src={avatar} alt="Logo"/>; }); }; -const bindBeforeTitle = (binder: Binder, beforeTitle: string) => { +const bindBeforeTitle = (binder: Binder, extension: ReactNode) => { binder.bind("repository.card.beforeTitle", () => { - return beforeTitle; + return extension; + }); +}; + +const bindQuickLink = (binder: Binder, extension: ReactNode) => { + binder.bind("repository.card.quickLink", () => { + return extension; }); }; const withBinder = (binder: Binder, repository: Repository) => { return ( <BinderContext.Provider value={binder}> - <RepositoryEntry repository={repository} /> + <RepositoryEntry repository={repository}/> </BinderContext.Provider> ); }; +const QuickLink = <a className="level-item"><Icon className="fa-lg" name="fas fa-code-branch fa-rotate-180 fa-fw" + color="inherit"/></a>; + storiesOf("RepositoryEntry", module) .addDecorator(storyFn => <Container>{storyFn()}</Container>) - .add("Git-Repo", () => { - const binder = new Binder("git-story"); - bindAvatar(binder, "Git"); - return withBinder(binder, GitRepository); + .add("Default", () => { + return <RepositoryEntry repository={repository}/>; }) - .add("Hg-Repo", () => { - const binder = new Binder("hg-story"); - bindBeforeTitle(binder, "Hg"); - return withBinder(binder, HgRepository); + .add("Avatar EP", () => { + const binder = new Binder("avatar"); + bindAvatar(binder, Git); + return withBinder(binder, repository); + }) + .add("Before Title EP", () => { + const binder = new Binder("title"); + bindBeforeTitle(binder, <i className="fas fa-star"/>); + return withBinder(binder, repository); + }) + .add("Quick Link EP", () => { + const binder = new Binder("title"); + bindQuickLink(binder, QuickLink); + return withBinder(binder, repository); }); From 3ffece1547ee467c0b8279b3ef6679dbcb0ad9a0 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra <sebastian.sdorra@cloudogu.com> Date: Thu, 26 Mar 2020 11:34:28 +0100 Subject: [PATCH 10/14] added missing javadoc --- .../sonia/scm/web/api/RepositoryToHalMapper.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/scm-core/src/main/java/sonia/scm/web/api/RepositoryToHalMapper.java b/scm-core/src/main/java/sonia/scm/web/api/RepositoryToHalMapper.java index 90ca664cee..b5184fb202 100644 --- a/scm-core/src/main/java/sonia/scm/web/api/RepositoryToHalMapper.java +++ b/scm-core/src/main/java/sonia/scm/web/api/RepositoryToHalMapper.java @@ -27,6 +27,19 @@ package sonia.scm.web.api; import de.otto.edison.hal.HalRepresentation; import sonia.scm.repository.Repository; +/** + * Maps a repository to a hal representation. + * This is especially useful if a plugin would deliver a repository to the frontend. + * + * @since 2.0.0 + */ public interface RepositoryToHalMapper { + + /** + * Returns the hal representation of the repository. + * + * @param repository repository to map + * @return hal representation + */ HalRepresentation map(Repository repository); } From 1b437a4cea2b355d6dcb04020d21ccdc244863cd Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra <sebastian.sdorra@cloudogu.com> Date: Thu, 26 Mar 2020 11:35:36 +0100 Subject: [PATCH 11/14] remove class which only belongs to a plugin The class gets re implemented in the landingpage plugin --- scm-ui/ui-styles/src/scm.scss | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/scm-ui/ui-styles/src/scm.scss b/scm-ui/ui-styles/src/scm.scss index f828c7819a..e799fe38e2 100644 --- a/scm-ui/ui-styles/src/scm.scss +++ b/scm-ui/ui-styles/src/scm.scss @@ -491,16 +491,6 @@ ul.is-separated { } } - .column.is-half-overlay { - .overlay-column { - width: calc(50% - 3rem); - - @media screen and (max-width: 768px) { - width: calc(100% - 1.5rem); - } - } - } - .column.is-full .overlay-column { width: calc(100% - 1.5rem); } From 38627b0574acbacc456221692cc06eea73969d68 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra <sebastian.sdorra@cloudogu.com> Date: Thu, 26 Mar 2020 11:37:42 +0100 Subject: [PATCH 12/14] update storyshots --- .../src/__snapshots__/storyshots.test.ts.snap | 284 ++++++++++++++++-- 1 file changed, 262 insertions(+), 22 deletions(-) diff --git a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap index abff8b5109..b1bebd39c8 100644 --- a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap +++ b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap @@ -34188,13 +34188,13 @@ exports[`Storyshots MarkdownView Xml Code Block 1`] = ` </div> `; -exports[`Storyshots RepositoryEntry Git-Repo 1`] = ` +exports[`Storyshots RepositoryEntry Avatar EP 1`] = ` <div - className="RepositoryEntrystories__Container-toppdg-0 bQveHd" + className="RepositoryEntrystories__Spacing-toppdg-0 khfzcK box box-link-shadow" > <a className="overlay-column" - href="/repo/scmadmin/Git" + href="/repo/hitchhiher/heartOfGold" onClick={[Function]} /> <article @@ -34206,7 +34206,10 @@ exports[`Storyshots RepositoryEntry Git-Repo 1`] = ` <p className="image is-64x64" > - Git + <img + alt="Logo" + src="test-file-stub" + /> </p> </figure> <div @@ -34223,13 +34226,13 @@ exports[`Storyshots RepositoryEntry Git-Repo 1`] = ` > <strong> - Git + heartOfGold </strong> </p> <p className="shorten-text" > - + The starship Heart of Gold was the first spacecraft to make use of the Infinite Improbability Drive </p> </div> <div @@ -34244,7 +34247,7 @@ exports[`Storyshots RepositoryEntry Git-Repo 1`] = ` > <a className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" - href="/repo/scmadmin/Git/branches" + href="/repo/hitchhiher/heartOfGold/branches" onClick={[Function]} > <i @@ -34253,7 +34256,7 @@ exports[`Storyshots RepositoryEntry Git-Repo 1`] = ` </a> <a className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" - href="/repo/scmadmin/Git/code/changesets/" + href="/repo/hitchhiher/heartOfGold/code/changesets/" onClick={[Function]} > <i @@ -34262,7 +34265,7 @@ exports[`Storyshots RepositoryEntry Git-Repo 1`] = ` </a> <a className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" - href="/repo/scmadmin/Git/code/sources/" + href="/repo/hitchhiher/heartOfGold/code/sources/" onClick={[Function]} > <i @@ -34271,7 +34274,7 @@ exports[`Storyshots RepositoryEntry Git-Repo 1`] = ` </a> <a className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" - href="/repo/scmadmin/Git/settings/general" + href="/repo/hitchhiher/heartOfGold/settings/general" onClick={[Function]} > <i @@ -34289,7 +34292,7 @@ exports[`Storyshots RepositoryEntry Git-Repo 1`] = ` className="DateFromNow__DateElement-sc-16hnz72-0 ehlCzi" title="2020-03-23 09:26:01" > - 2 days ago + 3 days ago </time> </small> </div> @@ -34299,13 +34302,13 @@ exports[`Storyshots RepositoryEntry Git-Repo 1`] = ` </div> `; -exports[`Storyshots RepositoryEntry Hg-Repo 1`] = ` +exports[`Storyshots RepositoryEntry Before Title EP 1`] = ` <div - className="RepositoryEntrystories__Container-toppdg-0 bQveHd" + className="RepositoryEntrystories__Spacing-toppdg-0 khfzcK box box-link-shadow" > <a className="overlay-column" - href="/repo/scmadmin/Mercurial" + href="/repo/hitchhiher/heartOfGold" onClick={[Function]} /> <article @@ -34335,16 +34338,18 @@ exports[`Storyshots RepositoryEntry Hg-Repo 1`] = ` <p className="shorten-text is-marginless" > - Hg + <i + className="fas fa-star" + /> <strong> - Mercurial + heartOfGold </strong> </p> <p className="shorten-text" > - + The starship Heart of Gold was the first spacecraft to make use of the Infinite Improbability Drive </p> </div> <div @@ -34359,7 +34364,7 @@ exports[`Storyshots RepositoryEntry Hg-Repo 1`] = ` > <a className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" - href="/repo/scmadmin/Mercurial/branches" + href="/repo/hitchhiher/heartOfGold/branches" onClick={[Function]} > <i @@ -34368,7 +34373,7 @@ exports[`Storyshots RepositoryEntry Hg-Repo 1`] = ` </a> <a className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" - href="/repo/scmadmin/Mercurial/code/changesets/" + href="/repo/hitchhiher/heartOfGold/code/changesets/" onClick={[Function]} > <i @@ -34377,7 +34382,7 @@ exports[`Storyshots RepositoryEntry Hg-Repo 1`] = ` </a> <a className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" - href="/repo/scmadmin/Mercurial/code/sources/" + href="/repo/hitchhiher/heartOfGold/code/sources/" onClick={[Function]} > <i @@ -34386,7 +34391,7 @@ exports[`Storyshots RepositoryEntry Hg-Repo 1`] = ` </a> <a className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" - href="/repo/scmadmin/Mercurial/settings/general" + href="/repo/hitchhiher/heartOfGold/settings/general" onClick={[Function]} > <i @@ -34404,7 +34409,242 @@ exports[`Storyshots RepositoryEntry Hg-Repo 1`] = ` className="DateFromNow__DateElement-sc-16hnz72-0 ehlCzi" title="2020-03-23 09:26:01" > - 2 days ago + 3 days ago + </time> + </small> + </div> + </div> + </div> + </article> +</div> +`; + +exports[`Storyshots RepositoryEntry Default 1`] = ` +<div + className="RepositoryEntrystories__Spacing-toppdg-0 khfzcK box box-link-shadow" +> + <a + className="overlay-column" + href="/repo/hitchhiher/heartOfGold" + onClick={[Function]} + /> + <article + className="CardColumn__NoEventWrapper-sc-1w6lsih-0 kZKqpc media" + > + <figure + className="CardColumn__AvatarWrapper-sc-1w6lsih-1 bZyfne media-left" + > + <p + className="image is-64x64" + > + <img + alt="Logo" + src="/images/blib.jpg" + /> + </p> + </figure> + <div + className="CardColumn__FlexFullHeight-sc-1w6lsih-2 cAdfGj media-content text-box is-flex" + > + <div + className="is-flex" + > + <div + className="CardColumn__ContentLeft-sc-1w6lsih-4 dumWkw content" + > + <p + className="shorten-text is-marginless" + > + + <strong> + heartOfGold + </strong> + </p> + <p + className="shorten-text" + > + The starship Heart of Gold was the first spacecraft to make use of the Infinite Improbability Drive + </p> + </div> + <div + className="CardColumn__ContentRight-sc-1w6lsih-5 kyEPRa" + /> + </div> + <div + className="CardColumn__FooterWrapper-sc-1w6lsih-3 jlTqlS level is-flex" + > + <div + className="level-left is-hidden-mobile" + > + <a + className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" + href="/repo/hitchhiher/heartOfGold/branches" + onClick={[Function]} + > + <i + className="fas fa-code-branch has-text-inherit fa-lg" + /> + </a> + <a + className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" + href="/repo/hitchhiher/heartOfGold/code/changesets/" + onClick={[Function]} + > + <i + className="fas fa-exchange-alt has-text-inherit fa-lg" + /> + </a> + <a + className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" + href="/repo/hitchhiher/heartOfGold/code/sources/" + onClick={[Function]} + > + <i + className="fas fa-code has-text-inherit fa-lg" + /> + </a> + <a + className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" + href="/repo/hitchhiher/heartOfGold/settings/general" + onClick={[Function]} + > + <i + className="fas fa-cog has-text-inherit fa-lg" + /> + </a> + </div> + <div + className="level-right is-mobile is-marginless" + > + <small + className="level-item" + > + <time + className="DateFromNow__DateElement-sc-16hnz72-0 ehlCzi" + title="2020-03-23 09:26:01" + > + 3 days ago + </time> + </small> + </div> + </div> + </div> + </article> +</div> +`; + +exports[`Storyshots RepositoryEntry Quick Link EP 1`] = ` +<div + className="RepositoryEntrystories__Spacing-toppdg-0 khfzcK box box-link-shadow" +> + <a + className="overlay-column" + href="/repo/hitchhiher/heartOfGold" + onClick={[Function]} + /> + <article + className="CardColumn__NoEventWrapper-sc-1w6lsih-0 kZKqpc media" + > + <figure + className="CardColumn__AvatarWrapper-sc-1w6lsih-1 bZyfne media-left" + > + <p + className="image is-64x64" + > + <img + alt="Logo" + src="/images/blib.jpg" + /> + </p> + </figure> + <div + className="CardColumn__FlexFullHeight-sc-1w6lsih-2 cAdfGj media-content text-box is-flex" + > + <div + className="is-flex" + > + <div + className="CardColumn__ContentLeft-sc-1w6lsih-4 dumWkw content" + > + <p + className="shorten-text is-marginless" + > + + <strong> + heartOfGold + </strong> + </p> + <p + className="shorten-text" + > + The starship Heart of Gold was the first spacecraft to make use of the Infinite Improbability Drive + </p> + </div> + <div + className="CardColumn__ContentRight-sc-1w6lsih-5 kyEPRa" + /> + </div> + <div + className="CardColumn__FooterWrapper-sc-1w6lsih-3 jlTqlS level is-flex" + > + <div + className="level-left is-hidden-mobile" + > + <a + className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" + href="/repo/hitchhiher/heartOfGold/branches" + onClick={[Function]} + > + <i + className="fas fa-code-branch has-text-inherit fa-lg" + /> + </a> + <a + className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" + href="/repo/hitchhiher/heartOfGold/code/changesets/" + onClick={[Function]} + > + <i + className="fas fa-exchange-alt has-text-inherit fa-lg" + /> + </a> + <a + className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" + href="/repo/hitchhiher/heartOfGold/code/sources/" + onClick={[Function]} + > + <i + className="fas fa-code has-text-inherit fa-lg" + /> + </a> + <a + className="level-item" + > + <i + className="fas fa-fas fa-code-branch fa-rotate-180 fa-fw has-text-inherit fa-lg" + /> + </a> + <a + className="RepositoryEntryLink__PointerEventsLink-sc-1hpqj0w-0 gtboNN level-item" + href="/repo/hitchhiher/heartOfGold/settings/general" + onClick={[Function]} + > + <i + className="fas fa-cog has-text-inherit fa-lg" + /> + </a> + </div> + <div + className="level-right is-mobile is-marginless" + > + <small + className="level-item" + > + <time + className="DateFromNow__DateElement-sc-16hnz72-0 ehlCzi" + title="2020-03-23 09:26:01" + > + 3 days ago </time> </small> </div> From 47723c476c908f16f6979fc095a77e4615771d1f Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra <sebastian.sdorra@cloudogu.com> Date: Thu, 26 Mar 2020 11:44:57 +0100 Subject: [PATCH 13/14] added new extension points to changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index daee9aa86b..ef7a64521b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Libc based restart strategy for posix operating systems ([#1079](https://github.com/scm-manager/scm-manager/pull/1079)) - Simple restart strategy with System.exit ([#1079](https://github.com/scm-manager/scm-manager/pull/1079)) - Notification if restart is not supported on the underlying platform ([#1079](https://github.com/scm-manager/scm-manager/pull/1079)) +- Extension point before title in repository cards (`repository.card.beforeTitle`) +- Extension point after title on repository detail page (`repository.afterTitle`) ### Changed - Update resteasy to version 4.5.2.Final From 3ad6f2867e905cd730dd2d86379d8576a6a1798c Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra <sebastian.sdorra@cloudogu.com> Date: Thu, 26 Mar 2020 11:48:34 +0100 Subject: [PATCH 14/14] added pr link to changelog --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef7a64521b..e767c09a5f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,8 +10,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Libc based restart strategy for posix operating systems ([#1079](https://github.com/scm-manager/scm-manager/pull/1079)) - Simple restart strategy with System.exit ([#1079](https://github.com/scm-manager/scm-manager/pull/1079)) - Notification if restart is not supported on the underlying platform ([#1079](https://github.com/scm-manager/scm-manager/pull/1079)) -- Extension point before title in repository cards (`repository.card.beforeTitle`) -- Extension point after title on repository detail page (`repository.afterTitle`) +- Extension point before title in repository cards ([#1080](https://github.com/scm-manager/scm-manager/pull/1080)) +- Extension point after title on repository detail page ([#1080](https://github.com/scm-manager/scm-manager/pull/1080)) ### Changed - Update resteasy to version 4.5.2.Final