Skip to content

fix(ui): change copy to clipboard button location #9111

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Merged
merged 3 commits into from
Aug 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 9 additions & 8 deletions src/core/components/operation-summary.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -83,11 +83,8 @@ export default class OperationSummary extends PureComponent {
}

{displayOperationId && (originalOperationId || operationId) ? <span className="opblock-summary-operation-id">{originalOperationId || operationId}</span> : null}

{isShown ? <ArrowUpIcon className="arrow" /> : <ArrowDownIcon className="arrow" />}

</button>

<CopyToClipboardBtn textToCopy={`${specPath.get(1)}`} />
{
allowAnonymous ? null :
<AuthorizeOperationBtn
Expand All @@ -98,12 +95,16 @@ export default class OperationSummary extends PureComponent {
}}
/>
}
<CopyToClipboardBtn
textToCopy={`${specPath.get(1)}`}
/>
<button
aria-label={`${method} ${path.replace(/\//g, "\u200b/")}`}
className="opblock-control-arrow"
aria-expanded={isShown}
tabIndex="-1"
onClick={toggleShown}>
{isShown ? <ArrowUpIcon className="arrow" /> : <ArrowDownIcon className="arrow" />}
</button>
<JumpToPath path={specPath} />{/* TODO: use wrapComponents here, swagger-ui doesn't care about jumpToPath */}
</div>
)

}
}
212 changes: 112 additions & 100 deletions src/style/_buttons.scss
Original file line number Diff line number Diff line change
@@ -1,113 +1,113 @@
.btn
{
font-size: 14px;
font-weight: bold;
font-size: 14px;
font-weight: bold;

padding: 5px 23px;
padding: 5px 23px;

transition: all .3s;

border: 2px solid $btn-border-color;
border-radius: 4px;
background: transparent;
box-shadow: 0 1px 2px rgba($btn-box-shadow-color,.1);
transition: all .3s;

@include text_headline();
border: 2px solid $btn-border-color;
border-radius: 4px;
background: transparent;
box-shadow: 0 1px 2px rgba($btn-box-shadow-color,.1);

&.btn-sm
{
font-size: 12px;
padding: 4px 23px;
}
@include text_headline();

&[disabled]
{
cursor: not-allowed;
&.btn-sm
{
font-size: 12px;
padding: 4px 23px;
}

opacity: .3;
}
&[disabled]
{
cursor: not-allowed;

&:hover
{
box-shadow: 0 0 5px rgba($btn-box-shadow-color,.3);
}
opacity: .3;
}

&.cancel
{
border-color: $btn-cancel-border-color;
background-color: $btn-cancel-background-color;
@include text_headline($btn-cancel-font-color);
}
&:hover
{
box-shadow: 0 0 5px rgba($btn-box-shadow-color,.3);
}

&.authorize
{
line-height: 1;
&.cancel
{
border-color: $btn-cancel-border-color;
background-color: $btn-cancel-background-color;
@include text_headline($btn-cancel-font-color);
}

display: inline;
&.authorize
{
line-height: 1;

color: $btn-authorize-font-color;
border-color: $btn-authorize-border-color;
background-color: $btn-authorize-background-color;
display: inline;

span
{
float: left;
color: $btn-authorize-font-color;
border-color: $btn-authorize-border-color;
background-color: $btn-authorize-background-color;

padding: 4px 20px 0 0;
}
span
{
float: left;

svg
{
fill: $btn-authorize-svg-fill-color;
}
padding: 4px 20px 0 0;
}

&.execute
svg
{
background-color: $btn-execute-background-color-alt;
color: $btn-execute-font-color;
border-color: $btn-execute-border-color;
fill: $btn-authorize-svg-fill-color;
}
}

&.execute
{
background-color: $btn-execute-background-color-alt;
color: $btn-execute-font-color;
border-color: $btn-execute-border-color;
}
}

.btn-group
{
display: flex;
display: flex;

padding: 30px;
padding: 30px;

.btn
{
flex: 1;
.btn
{
flex: 1;

&:first-child
{
border-radius: 4px 0 0 4px;
}
&:first-child
{
border-radius: 4px 0 0 4px;
}

&:last-child
{
border-radius: 0 4px 4px 0;
}
&:last-child
{
border-radius: 0 4px 4px 0;
}
}
}

.authorization__btn
{
padding: 0 0 0 10px;
padding: 0 0 0 10px;

border: none;
background: none;
border: none;
background: none;

.locked
{
opacity: 1;
}
.locked
{
opacity: 1;
}

.unlocked
{
opacity: .4;
}
.unlocked
{
opacity: .4;
}
}

.opblock-summary-control,
Expand All @@ -128,44 +128,44 @@
.expand-methods,
.expand-operation
{
border: none;
background: none;
border: none;
background: none;

svg
{
width: 20px;
height: 20px;
}
svg
{
width: 20px;
height: 20px;
}
}

.expand-methods
{
padding: 0 10px;
padding: 0 10px;

&:hover
&:hover
{
svg
{
svg
{
fill: $expand-methods-svg-fill-color-hover;
}
fill: $expand-methods-svg-fill-color-hover;
}
}

svg
{
transition: all .3s;
svg
{
transition: all .3s;

fill: $expand-methods-svg-fill-color;
}
fill: $expand-methods-svg-fill-color;
}
}

button
{
cursor: pointer;
cursor: pointer;

&.invalid
{
@include invalidFormElement();
}
&.invalid
{
@include invalidFormElement();
}
}

.copy-to-clipboard
Expand All @@ -192,6 +192,18 @@ button
}
}

.copy-to-clipboard:active
{
background: #5e626f;
}

.opblock-control-arrow
{
border: none;
text-align: center;
background: none;
}

// overrides for smaller copy button for curl command
.curl-command .copy-to-clipboard
{
Expand All @@ -209,6 +221,6 @@ button
// overrides for copy to clipboard button
.opblock .opblock-summary .view-line-link.copy-to-clipboard
{
height: 26px;
position: unset;
}
height: 26px;
position: unset;
}
6 changes: 3 additions & 3 deletions test/e2e-cypress/e2e/features/external-docs.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ function ExternalDocsTest(baseUrl) {
.and("have.attr", "href", "http://swagger.io")
})
})

describe("for Tags", () => {
it("should display link to external docs with description", () => {
cy.visit(baseUrl)
Expand Down Expand Up @@ -87,7 +87,7 @@ function ExternalDocsTest(baseUrl) {
describe("for Operation", () => {
it("should display link to external docs with description", () => {
cy.visit(baseUrl)
.get("#operations-pet-updatePet button")
.get("#operations-pet-updatePet button.opblock-summary-control")
.click()
.get("#operations-pet-updatePet .opblock-external-docs-wrapper .opblock-external-docs__description")
.should("contain.text", "More details about putting a pet")
Expand All @@ -97,7 +97,7 @@ function ExternalDocsTest(baseUrl) {

it("should display link to external docs without description", () => {
cy.visit(baseUrl)
.get("#operations-pet-addPet button")
.get("#operations-pet-addPet button.opblock-summary-control")
.click()
.get("#operations-pet-addPet .opblock-external-docs-wrapper .opblock-external-docs__description")
.should("not.exist")
Expand Down