Skip to content

[629] Use Client Name as anchor text for targeted link#128

Merged
yuramax merged 2 commits into
mainfrom
629-use-client-name-as-anchor-text-for-targeted-link
May 28, 2025
Merged

[629] Use Client Name as anchor text for targeted link#128
yuramax merged 2 commits into
mainfrom
629-use-client-name-as-anchor-text-for-targeted-link

Conversation

@yuramax

@yuramax yuramax commented May 28, 2025

Copy link
Copy Markdown
Contributor

This PR implements the use of client names as anchor text for targeted links.

@yuramax yuramax requested a review from killev as a code owner May 28, 2025 07:36
@coderabbitai

coderabbitai Bot commented May 28, 2025

Copy link
Copy Markdown
Contributor
📝 Walkthrough
## Walkthrough

The changes update the styling of case study components and modify the template to conditionally render the case study title as a link to the client website if available. Link styles are consolidated, and external link security attributes are improved.

## Changes

| File(s)                                                               | Change Summary                                                                                       |
|-----------------------------------------------------------------------|----------------------------------------------------------------------------------------------------|
| website/modules/asset/ui/src/scss/_cases.scss                         | Adjusted placeholder image sizing, updated `.cs_details-page` and `.cs_full-details-card` `.cname a` link styles, removed `.client-website-link` class, consolidated link styles under `.prod-link`. |
| website/modules/case-studies-page/views/show.html                     | Case study title is now conditionally a link to the client website; added security attributes (`target="_blank"`, `rel="noopener noreferrer"`) to external links. |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
    participant User
    participant CaseStudyPage

    User->>CaseStudyPage: Visit case study page
    CaseStudyPage->>CaseStudyPage: Check if clientWebsite exists
    alt clientWebsite exists
        CaseStudyPage->>User: Render title as link to client website
    else clientWebsite missing
        CaseStudyPage->>User: Render title as plain text
    end

Possibly related PRs

Suggested reviewers

  • Anton-88
  • IhorMasechko

</details>

<!-- walkthrough_end -->


---

<details>
<summary>📜 Recent review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**


<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 3eab7ae64787685299cd038fd10b1adee0bda50c and ce1b1537814177ff8dec31b6cbfcd75bdf769d17.

</details>

<details>
<summary>📒 Files selected for processing (2)</summary>

* `website/modules/asset/ui/src/scss/_cases.scss` (3 hunks)
* `website/modules/case-studies-page/views/show.html` (1 hunks)

</details>

<details>
<summary>🚧 Files skipped from review as they are similar to previous changes (2)</summary>

* website/modules/case-studies-page/views/show.html
* website/modules/asset/ui/src/scss/_cases.scss

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (4)</summary>

* GitHub Check: lint
* GitHub Check: e2e-tests
* GitHub Check: unit-tests
* GitHub Check: security-scan

</details>

</details>
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- tips_start -->

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=speedandfunction/website&utm_content=128):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Explain this complex logic.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai explain this code block.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and explain its main purpose.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

### Support

Need help? Create a ticket on our [support page](https://www.coderabbit.ai/contact-us/support) for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### CodeRabbit Configuration File (`.coderabbit.yaml`)

- You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository.
- Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json`

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->

@yuramax yuramax self-assigned this May 28, 2025

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
website/modules/asset/ui/src/scss/_cases.scss (1)

549-558: Consolidate link styles and add focus state for .cname a

Good addition of default gray color and underline-on-hover for client name links. For maintainability and accessibility, consider:

  • Extracting these common link styles into a shared mixin (similar to .prod-link).
  • Adding a visible focus outline (e.g., outline: 2px solid $focus-color) to support keyboard navigation.
website/modules/case-studies-page/views/show.html (1)

68-72: Improve anchor text for external prodLink

Adding rel="noopener noreferrer" is great for security. However, displaying the raw URL as link text can be verbose. Consider using more descriptive anchor text—like "View Live Site" or the client’s name—to enhance readability, SEO, and overall UX.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7ea09c1 and 3eab7ae.

📒 Files selected for processing (2)
  • website/modules/asset/ui/src/scss/_cases.scss (3 hunks)
  • website/modules/case-studies-page/views/show.html (2 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (4)
  • GitHub Check: e2e-tests
  • GitHub Check: lint
  • GitHub Check: unit-tests
  • GitHub Check: security-scan
🔇 Additional comments (1)
website/modules/asset/ui/src/scss/_cases.scss (1)

362-364: Approve layout adjustments for placeholder container

The switch from a fixed height to max-height: 240px with height: 100%, plus the increased top padding at large breakpoints, aligns the placeholder container size with the updated image dimensions. Ensure you test across breakpoints to confirm there are no overflow or alignment issues.

Also applies to: 372-372

Comment thread website/modules/case-studies-page/views/show.html
@github-actions

github-actions Bot commented May 28, 2025

Copy link
Copy Markdown

🔍 Vulnerabilities of apostrophe-cms:test

📦 Image Reference apostrophe-cms:test
digestsha256:82e6fc952305768b6615227b81f10d43b4b1bba7d6b15e55106e466619536e56
vulnerabilitiescritical: 0 high: 3 medium: 0 low: 0
platformlinux/amd64
size284 MB
packages935
📦 Base Image node:23-alpine
also known as
  • 23-alpine3.21
  • 23.11-alpine
  • 23.11-alpine3.21
  • 23.11.1-alpine
  • 23.11.1-alpine3.21
digestsha256:169ee1b69bd3f5c7c8508a9919e8b367bba9dc7fa9a03097ec9f85d2e8179631
vulnerabilitiescritical: 0 high: 0 medium: 0 low: 0
critical: 0 high: 1 medium: 0 low: 0 connect-multiparty 2.2.0 (npm)

pkg:npm/connect-multiparty@2.2.0

high 7.8: CVE--2022--29623 Unrestricted Upload of File with Dangerous Type

Affected range<=2.2.0
Fixed versionNot Fixed
CVSS Score7.8
CVSS VectorCVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
EPSS Score0.119%
EPSS Percentile32nd percentile
Description

An arbitrary file upload vulnerability in the file upload module of Express Connect-Multiparty 2.2.0 allows attackers to execute arbitrary code via a crafted PDF file. NOTE: the Supplier has not verified this vulnerability report.

critical: 0 high: 1 medium: 0 low: 0 async 1.5.2 (npm)

pkg:npm/async@1.5.2

high 7.8: CVE--2021--43138 OWASP Top Ten 2017 Category A9 - Using Components with Known Vulnerabilities

Affected range<2.6.4
Fixed version2.6.4, 3.2.2
CVSS Score7.8
CVSS VectorCVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
EPSS Score1.061%
EPSS Percentile77th percentile
Description

A vulnerability exists in Async through 3.2.1 (fixed in 3.2.2), which could let a malicious user obtain privileges via the mapValues() method.

critical: 0 high: 1 medium: 0 low: 0 async 0.9.2 (npm)

pkg:npm/async@0.9.2

high 7.8: CVE--2021--43138 OWASP Top Ten 2017 Category A9 - Using Components with Known Vulnerabilities

Affected range<2.6.4
Fixed version2.6.4, 3.2.2
CVSS Score7.8
CVSS VectorCVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
EPSS Score1.061%
EPSS Percentile77th percentile
Description

A vulnerability exists in Async through 3.2.1 (fixed in 3.2.2), which could let a malicious user obtain privileges via the mapValues() method.

coderabbitai[bot]
coderabbitai Bot previously approved these changes May 28, 2025
@sonarqubecloud

Copy link
Copy Markdown

@yuramax yuramax enabled auto-merge (squash) May 28, 2025 17:49

@VitalyyP VitalyyP left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@IhorMasechko IhorMasechko left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work! LGTM.

@Anton-88 Anton-88 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@killev killev left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@yuramax yuramax merged commit 238fe51 into main May 28, 2025
12 checks passed
@yuramax yuramax deleted the 629-use-client-name-as-anchor-text-for-targeted-link branch May 28, 2025 20:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants