Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Add codeblock title #15

Merged
merged 3 commits into from
Sep 26, 2024
Merged

Add codeblock title #15

merged 3 commits into from
Sep 26, 2024

Conversation

lambdalisue
Copy link
Member

@lambdalisue lambdalisue commented Sep 26, 2024

Summary by CodeRabbit

  • New Features

    • Introduced a new CSS class .codeblock-title for enhanced styling of code block titles.
    • Added JavaScript functionality to prepend titles to code blocks in rendered HTML documents.
  • Documentation

    • Updated documentation to include titles for code blocks, improving clarity and organization.
    • Revised import statements in various documentation files to allow for flexible versioning of dependencies.
  • Chores

    • Added configuration options in book.toml to include new JavaScript and CSS files in the HTML output.

Copy link

coderabbitai bot commented Sep 26, 2024

Warning

Rate limit exceeded

@lambdalisue has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 21 minutes and 18 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Files that changed from the base of the PR and between 8ac976c and 726772c.

Walkthrough

The changes involve the introduction of a new CSS file and a JavaScript file to enhance the rendering of code blocks in HTML documents. The CSS file defines a class for styling code block titles, while the JavaScript file dynamically adds titles to code blocks based on specified classes. Additionally, the book.toml configuration file has been updated to include these new assets. Several TypeScript files across different tutorials have also been modified to use flexible versioning for dependencies, improving compatibility and documentation clarity.

Changes

File(s) Change Summary
assets/codeblock-title.css, assets/codeblock-title.js New CSS class .codeblock-title introduced for styling, and a JavaScript file added to prepend titles to code blocks.
book.toml Added additional-js and additional-css keys to include the new JavaScript and CSS files in HTML output.
src/getting-started/README.md, src/getting-started/explanation.md, src/tutorial/helloworld/*.md, src/tutorial/maze/*.md Updated TypeScript import statements to use caret versioning (e.g., ^7.0.0) for better compatibility. Code block titles standardized in documentation.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Browser
    participant JS
    participant CSS

    User->>Browser: Load HTML Document
    Browser->>JS: Execute codeblock-title.js
    JS->>Browser: Select <code> elements
    JS->>Browser: Check for title classes
    JS->>Browser: Create <header> with title
    JS->>Browser: Prepend <header> to <pre>
    Browser->>CSS: Apply styles from codeblock-title.css
Loading

🐰 In the meadow where code does play,
A title hops in, brightening the day.
With styles so neat, and versions so free,
Our code blocks now dance, as happy as can be!
Let's cheer for the changes, both big and small,
For in our coding garden, there's joy for us all! 🌼


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • 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 generate unit testing code for this file.
    • @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 generate unit testing code.
    • @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.

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 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 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 for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Outside diff range and nitpick comments (8)
book.toml (1)

10-11: LGTM! Consider adding a comment for clarity.

The additions of codeblock-title.js and codeblock-title.css align well with the PR objective of adding codeblock titles. The TOML syntax is correct, and the configuration is consistent with mdBook standards.

For improved clarity, consider adding a brief comment above these lines explaining their purpose. For example:

# Add support for code block titles
additional-js = ["assets/codeblock-title.js"]
additional-css = ["assets/codeblock-title.css"]

This will help future maintainers understand the purpose of these additions at a glance.

assets/codeblock-title.js (1)

3-7: LGTM with a suggestion: Consider handling multiple title classes.

The iteration and title extraction logic is well-implemented using modern JavaScript features. The use of forEach, spread operator, and find method is appropriate and clean.

However, consider handling the case where multiple 'title=' classes might exist on a single code block. Currently, only the first matching class would be used.

You could modify the logic to handle multiple title classes, if that's a possibility in your use case. Here's a suggestion:

const titles = [...codeblock.classList.values()].filter((v) => v.startsWith('title='));
if (titles.length > 0) {
  const title = titles.map(t => t.replace(/^title=/, '')).join(', ');
  // ... rest of the code
}

This change would concatenate multiple titles with a comma if they exist.

src/tutorial/maze/outputting-content-to-buffer.md (2)

10-11: Approved: Version flexibility improvement

The changes to use caret version ranges (^7.0.0 and ^0.4.0) in the import statements are good. This allows for compatibility with minor and patch updates of the dependencies, which is a best practice in semantic versioning.

Consider adding a brief explanation about semantic versioning and why using flexible version ranges is beneficial in the tutorial content. This would provide valuable context for learners about dependency management best practices.


Line range hint 1-38: Suggestion: Enhance tutorial content

While the code changes are good, consider enhancing the tutorial content to explain the version changes in the import statements. This could include:

  1. A brief explanation of semantic versioning.
  2. Why using flexible version ranges (e.g., ^7.0.0) is beneficial.
  3. How this impacts dependency management in real-world projects.

Adding this information would provide valuable context for learners about best practices in dependency management, making the tutorial more comprehensive.

src/tutorial/maze/properly-configured-the-buffer.md (1)

10-14: LGTM! Consider adding a note about flexible versioning.

The update to use caret notation (^) for version numbers is a good practice, allowing for more flexible dependency management. This change will help keep the code up-to-date with minor updates and patches.

Consider adding a brief note in the tutorial text explaining the use of caret notation for versioning. This could help readers understand the importance of flexible versioning in real-world projects. For example:

Note: We use caret notation (^) for version numbers in our import statements. This allows for automatic updates to minor and patch versions, helping keep our dependencies up-to-date while avoiding potential breaking changes from major version updates.
src/tutorial/maze/creating-applicative-plugin.md (1)

35-41: LGTM: Improved versioning and documentation

The changes in this code block are beneficial:

  1. The addition of the title typescript,title=denops/denops-maze/main.ts enhances documentation clarity.
  2. Updating to caret (^) versioning for dependencies allows for minor version updates, which is a good practice for maintaining up-to-date dependencies while avoiding breaking changes.
  3. The update of unknownutil to a newer version (^4.3.0) is likely for bug fixes or improvements.

These changes improve the maintainability of the code without altering its core functionality.

Consider adding a comment explaining the purpose of each imported module, especially for newcomers to the Denops ecosystem. This would further enhance the tutorial's educational value.

src/tutorial/maze/properly-create-a-virtual-buffer.md (1)

Line range hint 1-16: Enhance tutorial content to reflect code improvements.

While the code changes are beneficial, the tutorial text hasn't been updated to explain these improvements. Consider enhancing the tutorial by:

  1. Explaining the switch to flexible versioning and its benefits.
  2. Introducing the new code block title feature and its purpose.
  3. Updating any relevant sections that discuss dependency management or code block formatting.

These additions would make the tutorial more comprehensive and up-to-date with the latest best practices demonstrated in the code.

src/tutorial/maze/reduce-the-number-of-rpc-calls.md (1)

8-14: Approve changes with a suggestion for documentation.

The updates to the import statements are good improvements:

  1. The use of caret (^) notation for versioning allows for more flexible dependency management.
  2. The "jsr:" and "npm:" prefixes clarify the source of each module.

These changes align with modern JavaScript/TypeScript practices and should make the codebase more maintainable.

Consider adding a brief comment in the tutorial text explaining the significance of these changes, particularly the use of "jsr:" and "npm:" prefixes. This would be helpful for readers who might not be familiar with these concepts.

For example, you could add:

Note: The "jsr:" prefix indicates modules from the JSR (JavaScript Registry), while "npm:" refers to modules from the npm registry. This explicit notation helps in module resolution and clarifies the source of each dependency.
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 9122f91 and 2361767.

📒 Files selected for processing (16)
  • assets/codeblock-title.css (1 hunks)
  • assets/codeblock-title.js (1 hunks)
  • book.toml (1 hunks)
  • src/getting-started/README.md (2 hunks)
  • src/getting-started/explanation.md (3 hunks)
  • src/tutorial/helloworld/adding-an-api.md (1 hunks)
  • src/tutorial/helloworld/calling-vim-features.md (2 hunks)
  • src/tutorial/helloworld/creating-a-minimal-denops-plugin.md (1 hunks)
  • src/tutorial/helloworld/creating-a-minimal-vim-plugin.md (2 hunks)
  • src/tutorial/maze/adjusting-maze-size-to-fit-the-window.md (1 hunks)
  • src/tutorial/maze/creating-applicative-plugin.md (2 hunks)
  • src/tutorial/maze/outputting-content-to-buffer.md (1 hunks)
  • src/tutorial/maze/properly-configured-the-buffer.md (1 hunks)
  • src/tutorial/maze/properly-create-a-virtual-buffer.md (1 hunks)
  • src/tutorial/maze/reduce-the-number-of-rpc-calls.md (1 hunks)
  • src/tutorial/maze/utilizing-third-party-library.md (3 hunks)
✅ Files skipped from review due to trivial changes (1)
  • src/tutorial/helloworld/creating-a-minimal-vim-plugin.md
🔇 Additional comments not posted (23)
assets/codeblock-title.css (1)

1-8: Well-structured CSS with modern features

The CSS class .codeblock-title is well-defined and uses modern CSS features to create an appealing style for code block titles. Here are some observations:

  1. The use of em units for padding and font-size ensures scalability across different screen sizes and user font preferences.
  2. The color-mix function is used creatively to create semi-transparent effects for both text and background colors.

However, there are a few points to consider:

  1. Browser Compatibility: The color-mix function is a relatively new CSS feature. Please verify its compatibility with your target browsers.

  2. CSS Variables: The --fg and --bg variables are used but not defined in this file. Ensure they are properly defined in your global styles.

  3. Accessibility: Consider adding a comment about the expected contrast ratio between the text and background colors to ensure readability for all users. You might want to use a color contrast checker tool to verify that the contrast meets WCAG standards.

book.toml (1)

10-11: Verify the existence of the added files.

To ensure the configuration is correct and the referenced files exist, please run the following verification script:

This script will confirm that the files referenced in the configuration actually exist in the project structure.

✅ Verification successful

Added JavaScript and CSS files exist.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the existence of the added JavaScript and CSS files

# Test: Check if the JavaScript file exists
if [ -f "assets/codeblock-title.js" ]; then
    echo "assets/codeblock-title.js exists"
else
    echo "Error: assets/codeblock-title.js does not exist"
fi

# Test: Check if the CSS file exists
if [ -f "assets/codeblock-title.css" ]; then
    echo "assets/codeblock-title.css exists"
else
    echo "Error: assets/codeblock-title.css does not exist"
fi

Length of output: 230

assets/codeblock-title.js (4)

1-1: LGTM: Proper event listener setup.

The use of the 'DOMContentLoaded' event ensures that the DOM is fully loaded before the script runs, which is a good practice. The arrow function syntax is modern and concise.


2-2: LGTM: Correct selection of code blocks.

The selector 'pre code' correctly targets all code blocks within pre tags. The use of querySelectorAll is appropriate for selecting multiple elements.


1-14: Overall, well-implemented feature with minor suggestions for improvement.

The script effectively adds titles to code blocks using modern JavaScript practices. It's concise, readable, and achieves its goal. The suggestions provided are for handling edge cases (multiple title classes) and ensuring compatibility with existing code. Consider implementing these suggestions to make the script more robust.

Great job on this new feature!


7-11: LGTM with a caution: Verify impact on existing styles and scripts.

The creation and insertion of the title element is implemented correctly. Creating a new header element, setting its class and content, and prepending it to the parent of the code block ensures the title appears above the code block as intended.

However, be cautious about modifying the DOM structure, as it might affect existing styles or scripts that depend on the original structure.

Please run the following script to check for any existing styles or scripts that might be affected by this DOM modification:

Review the results to ensure that this new structure doesn't conflict with existing code.

✅ Verification successful

Verified: DOM modifications do not affect existing styles or scripts.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for existing styles or scripts that might be affected by the new codeblock-title structure

# Test 1: Check for any CSS selectors targeting pre > code directly
echo "Checking for CSS selectors targeting pre > code:"
rg --type css 'pre\s*>\s*code'

# Test 2: Check for any JavaScript that might be selecting or manipulating pre > code elements
echo "Checking for JavaScript manipulating pre > code elements:"
rg --type js 'querySelector(All)?\([''"]pre\s*>\s*code[''"]'

# Test 3: Check for any existing usage of the codeblock-title class
echo "Checking for existing usage of codeblock-title class:"
rg 'codeblock-title'

Length of output: 700

src/tutorial/maze/outputting-content-to-buffer.md (1)

9-9: Approved: Code block title addition

The addition of the title attribute to the code block (title=denops/denops-maze/main.ts) is excellent. It provides clear context about the file being discussed in the tutorial, enhancing readability and understanding for the learners.

This change aligns well with the PR objective to "Add codeblock title".

src/tutorial/helloworld/adding-an-api.md (1)

10-11: 🛠️ Refactor suggestion

Update dependency versions and consider explaining versioning in the tutorial.

The import statements have been updated to use flexible versioning:

  1. @denops/std now uses ^7.0.0 instead of 7.0.0
  2. @core/unknownutil has been updated from 3.18.1 to ^4.3.0

These changes allow for compatibility with minor and patch updates. However, there are a few points to consider:

  1. The major version update for @core/unknownutil (from 3.x.x to 4.x.x) might introduce breaking changes. Ensure that the new version is compatible with the tutorial code.
  2. The tutorial content doesn't explain these version changes or their implications. Consider adding a brief explanation about semantic versioning and why flexible versions are used in this context.

Consider adding a note in the tutorial explaining the versioning strategy, for example:

> [!NOTE]
> The import statements use flexible versioning (e.g., `^7.0.0`). This allows for compatibility with minor and patch updates while ensuring that major version changes, which might include breaking changes, are not automatically included.

To ensure the tutorial remains up-to-date, let's check for the latest versions of these dependencies:

src/tutorial/helloworld/creating-a-minimal-denops-plugin.md (1)

34-35: Excellent improvements to code block and dependency versioning!

The changes made to this code block are beneficial in two ways:

  1. Adding the title "denops/denops-helloworld/main.ts" to the code block improves readability and provides clear context for the reader. This aligns well with the PR objective of adding codeblock titles.

  2. Updating the import statement from "@denops/[email protected]" to "@denops/std@^7.0.0" introduces flexible versioning. This change allows for compatibility with minor and patch updates while maintaining the major version, which is a good practice for dependency management. It ensures that the code can benefit from bug fixes and non-breaking changes without requiring manual updates for every minor version release.

These changes enhance both the tutorial's clarity and the code's maintainability.

src/tutorial/helloworld/calling-vim-features.md (3)

7-7: LGTM: Code block title addition

The addition of the title denops/denops-helloworld/main.ts to the TypeScript code block enhances readability and provides clear context for the code snippet.


32-32: LGTM: Vim script code block title addition

The addition of the title plugin/denops-helloworld.vim to the Vim script code block enhances readability and provides clear context for the code snippet.


8-9: Approve version updates with a note on major version change

The update to use caret (^) in version specifications is a good practice, allowing for compatible updates. However, please note:

  1. The change for @denops/std from 7.0.0 to ^7.0.0 is straightforward and allows for minor and patch updates.
  2. The change for @core/unknownutil from 3.18.1 to ^4.3.0 involves a major version bump.

Please verify that the new major version (4.x.x) of @core/unknownutil is compatible with the current implementation. Check the changelog or release notes for any breaking changes that might affect this code.

To assist in this verification, you can run the following script to check for any usage of potentially changed APIs:

✅ Verification successful

Version specification updates verified

No usages of assert or is from @core/unknownutil were found in the src/tutorial/helloworld directory, indicating that the major version bump to ^4.3.0 does not affect the current implementation.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for usage of @core/unknownutil APIs that might have changed in v4

# Test: Search for uses of assert and is from @core/unknownutil
rg --type typescript 'assert|is' src/tutorial/helloworld

Length of output: 93


Script:

#!/bin/bash
# Description: Check for usage of @core/unknownutil APIs that might have changed in v4
# Test: Search for uses of assert and is from @core/unknownutil in TypeScript files

rg --glob '*.ts' --glob '*.tsx' 'assert|is' src/tutorial/helloworld

Length of output: 69

src/getting-started/README.md (2)

24-24: Approve addition of code block titles

The addition of titles to the code blocks is a great improvement to the documentation. It enhances readability by providing clear context for each code snippet. The titles accurately reflect the file paths or content of the code blocks, which will help users understand the purpose and location of each snippet.

Also applies to: 41-41, 47-47


24-25: Approve version update with compatibility check

The update to use a flexible version range (^7.0.0) for the @denops/std import is a good practice. It allows for compatibility with minor version updates, which typically include backwards-compatible changes and improvements.

To ensure this change doesn't introduce any breaking changes, please run the following script to check for any compatibility issues or warnings:

src/tutorial/maze/adjusting-maze-size-to-fit-the-window.md (1)

10-13: Approve version flexibility change and suggest tutorial update.

The change to use caret (^) notation for version specifiers in the import statements is a good practice. It allows for compatibility with newer minor and patch versions, which can improve flexibility and ease of maintenance.

However, the tutorial content below the code block hasn't been updated to reflect these changes. Consider updating the explanation to mention the use of flexible versioning and its benefits.

Consider adding a brief explanation about the use of caret (^) notation in version specifiers, such as:

"We use caret (^) notation in our import statements to allow compatibility with newer minor and patch versions of the dependencies. This practice helps in keeping the project up-to-date with bug fixes and non-breaking improvements."

Let's verify if these changes are consistent across the entire project:

src/tutorial/maze/utilizing-third-party-library.md (2)

31-33: Approve: Good use of flexible versioning and improved documentation

The changes to the import statements are beneficial:

  1. Using ^7.0.0 and ^0.4.0 allows for compatible updates, which can include bug fixes and non-breaking changes.
  2. This practice helps keep the dependencies up-to-date without manual intervention for every minor update.

Additionally, the added title attribute to the code block enhances the documentation clarity.


Line range hint 48-73: Approve: Improved documentation clarity

The addition of the title attribute to the Vim code block enhances the documentation by clearly identifying the file to which this code belongs. This change improves readability and helps users understand the context of the code snippet more easily.

src/tutorial/maze/creating-applicative-plugin.md (2)

14-14: LGTM: Improved code block documentation

The addition of the title vim,title=plugin/denops-maze.vim to the code fence enhances the clarity of the documentation by explicitly stating the file path of the Vim script. This change is beneficial for readers following the tutorial.


Line range hint 1-41: Summary: Documentation and dependency improvements

The changes in this file successfully address the PR objective of adding code block titles. Additionally, the updates to dependency versions in the TypeScript file, while not explicitly mentioned in the PR objectives, are a positive improvement for maintainability.

These changes enhance the tutorial's clarity and keep the project up-to-date with its dependencies. The core functionality of the code remains unchanged, making this a low-risk, high-value update.

🧰 Tools
LanguageTool

[uncategorized] ~33-~33: Possible missing article found.
Context: ...configure the buffer options to make it non-file readonly buffer, etc. ```typescri...

(AI_HYDRA_LEO_MISSING_A)

src/getting-started/explanation.md (4)

94-94: Approved: Flexible versioning for better compatibility

The change from a fixed version 7.0.0 to a caret version ^7.0.0 for the @denops/std package is a good practice. This allows for compatibility with minor and patch updates, making it easier to keep the plugin up-to-date with bug fixes and non-breaking improvements.


110-110: Approved: Consistent use of flexible versioning

The change to use caret versioning (^7.0.0) for the @denops/std package is consistent with the previous update. This maintains uniformity throughout the document and reinforces the use of flexible versioning for better package management.


218-218: Approved: Consistent versioning in code examples

The update to use caret versioning (^7.0.0) in the code example is excellent. It ensures that the practical demonstrations align with the recommended practices discussed earlier in the document. This consistency helps reinforce the importance of flexible versioning to readers who may be learning from or copying these examples.


Line range hint 1-224: Summary: Improved versioning practices enhance documentation quality

The changes made to this file consistently update the versioning of the @denops/std package from fixed (7.0.0) to caret (^7.0.0) versioning. These updates:

  1. Improve flexibility for future updates.
  2. Demonstrate best practices in package management.
  3. Maintain consistency throughout the document, including code examples.

The overall content of the file remains highly informative and well-structured, providing valuable insights into Denops, its architecture, and usage. These changes enhance the quality of the documentation without altering its core message.

@lambdalisue lambdalisue merged commit 9e8b6f7 into main Sep 26, 2024
2 checks passed
@lambdalisue lambdalisue deleted the add-codeblock-title branch September 26, 2024 16:32
@coderabbitai coderabbitai bot mentioned this pull request Nov 24, 2024
2 tasks
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.

1 participant