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

docs: add image-upload-to-server demo #52

Merged
merged 1 commit into from
Sep 9, 2024

Conversation

kagol
Copy link
Member

@kagol kagol commented Sep 9, 2024

PR

PR Checklist

Please check if your PR fulfills the following requirements:

  • The commit message follows our Commit Message Guidelines
  • Tests for the changes have been added (for bug fixes / features)
  • Docs have been added / updated (for bug fixes / features)

PR Type

What kind of change does this PR introduce?

  • Bugfix
  • Feature
  • Code style update (formatting, local variables)
  • Refactoring (no functional changes, no api changes)
  • Build related changes
  • CI related changes
  • Documentation content changes
  • Other... Please describe:

What is the current behavior?

Issue Number: N/A

What is the new behavior?

Does this PR introduce a breaking change?

  • Yes
  • No

Other information

Summary by CodeRabbit

  • New Features

    • Introduced an image upload feature in the Fluent Editor, allowing users to upload images directly to a server.
    • Added a demo component showcasing the image upload functionality.
    • Enhanced documentation with a new section on uploading images to a server.
  • Bug Fixes

    • Simplified clipboard upload logic to allow image uploads without checking for specific conditions.
  • Refactor

    • Improved image insertion method in the editor for better configurability and error handling.

@kagol kagol added the documentation Improvements or additions to documentation label Sep 9, 2024
Copy link

coderabbitai bot commented Sep 9, 2024

Walkthrough

This pull request introduces a new Vue component for image uploading within the Fluent Editor, enhancing the editor's functionality. It includes a demo for this feature in the documentation and modifies existing classes to support image insertion and clipboard handling. The changes streamline the upload process and improve configurability, addressing user needs for clearer documentation on image upload capabilities.

Changes

Files Change Summary
packages/docs/fluent-editor/demos/image-upload-to-server.vue Added a new Vue component for image upload with TypeScript and Composition API, including image handling logic.
packages/docs/fluent-editor/docs/image-upload.md Added a new documentation section for uploading images to a server, referencing the new demo component.
packages/fluent-editor/src/custom-clipboard.ts Modified logic in CustomClipboard to simplify file upload conditions from clipboard.
packages/fluent-editor/src/custom-uploader.ts Introduced insertImageToEditor method for image insertion and modified handleUploadImage for better configurability.

Possibly related issues

Possibly related PRs

  • test: add image-upload e2e-test #50: This PR introduces automated testing for the image upload functionality, which is relevant to the new image upload feature implemented in this PR.

🐰 In a meadow where the editors play,
New features bloom, brightening the day.
With images uploaded, so easy and neat,
A hop and a skip, oh, what a treat!
Documentation shines, guiding the way,
Thanks to the changes, let’s frolic and sway! 🌼📸

Tip

New features

Walkthrough comment now includes:

  • Possibly related PRs: A list of potentially related PRs to help you recall past context.
  • Suggested labels: CodeRabbit can now suggest labels by learning from your past PRs. You can also provide custom labeling instructions in the UI or configuration file.

Notes:

  • Please share any feedback in the discussion post on our Discord.
  • Possibly related PRs, automatic label suggestions based on past PRs, learnings, and possibly related issues require data opt-in (enabled by default).

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>.
    • 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 generate interesting stats about this repository and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @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.

@kagol kagol merged commit f5fc05e into main Sep 9, 2024
4 of 5 checks passed
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: 2

Outside diff range, codebase verification and nitpick comments (1)
packages/docs/fluent-editor/docs/image-upload.md (1)

8-11: Approve the new section and suggest a language correction.

The new section "上传到服务器" and its demo reference are correctly added and enhance the documentation. However, consider replacing "server" with "servidor" to align with language best practices.

Tools
LanguageTool

[locale-violation] ~10-~10: 'server' é un xenismo. É preferíbel dicir "servidor"
Context: ...到服务器 :::demo src=demos/image-upload-to-server.vue :::

(GL_BARBARISM_REPLACE)

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between d583675 and c15310c.

Files selected for processing (4)
  • packages/docs/fluent-editor/demos/image-upload-to-server.vue (1 hunks)
  • packages/docs/fluent-editor/docs/image-upload.md (1 hunks)
  • packages/fluent-editor/src/custom-clipboard.ts (1 hunks)
  • packages/fluent-editor/src/custom-uploader.ts (2 hunks)
Additional context used
LanguageTool
packages/docs/fluent-editor/docs/image-upload.md

[locale-violation] ~10-~10: 'server' é un xenismo. É preferíbel dicir "servidor"
Context: ...到服务器 :::demo src=demos/image-upload-to-server.vue :::

(GL_BARBARISM_REPLACE)

Additional comments not posted (1)
packages/fluent-editor/src/custom-uploader.ts (1)

Line range hint 116-161: Approve the new method and suggest verification for backward compatibility.

The new method insertImageToEditor is correctly implemented and enhances the editor's functionality by allowing for dynamic image insertion based on upload results. However, ensure that the modifications to handleUploadImage do not affect existing functionality and that they are backward compatible.

Consider running tests or checking usage in different configurations to ensure compatibility.

Comment on lines +1 to +87
<script setup lang="ts">
import { onMounted } from 'vue'
import FluentEditor from '@opentiny/fluent-editor'

let editor

const TOOLBAR_CONFIG = [
[{ header: [] }],
['bold', 'italic', 'underline', 'link'],
[{ list: 'ordered' }, { list: 'bullet' }],
['clean'],
['image'],
]

// 这里需要换成你自己的图片上传服务地址
const IMG_API_URL = 'https://run.mocky.io/v3/f34365b4-679d-4e8f-8313-ddb11d6750be'

/**
* 上传图片到服务器
* @param image File 格式的图片
* @param callback 回调函数,用来处理服务器返回的图片 URL
* 除了 XMLHttpRequest,也可以使用 fetch / axios 等工具实现图片上传。
*/
function imageHandler(image, callback) {
const data = new FormData()
data.append('image', image)
const xhr = new XMLHttpRequest()
xhr.open('POST', IMG_API_URL, true)
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
// 这里需要换成实际的接口返回值,比如:JSON.parse(xhr.responseText)
const response = {
status: 200,
success: 'Upload success!',
data: {
link: 'https://res.hc-cdn.com/tiny-vue-web-doc/3.18.9.20240902190525/static/images/mountain.png',
},
}
if (response.status === 200 && response.success) {
callback(response.data.link)
}
else {
// 图片上传失败了,就转成 Base64 格式
var reader = new FileReader()
reader.onload = function (e) {
callback(e.target.result)
}
reader.readAsDataURL(image)
}
}
}
xhr.send(data)
}

onMounted(() => {
// ssr compat, reference: https://vitepress.dev/guide/ssr-compat#importing-in-mounted-hook
import('@opentiny/fluent-editor').then((module) => {
const FluentEditor = module.default

editor = new FluentEditor('#editor-image-upload-to-server', {
theme: 'snow',
modules: {
toolbar: TOOLBAR_CONFIG,
},
uploadOption: {
imageUpload: ({ file, callback }) => {
imageHandler(file, (imageUrl) => {
// 调用 callback,传入 imageUrl 即可实现图片渲染
callback({
code: 0,
message: 'Upload success!',
data: {
imageUrl,
},
})
})
},
},
})
})
})

</script>

<template>
<div id="editor-image-upload-to-server" />
</template>
Copy link

Choose a reason for hiding this comment

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

Approve the script setup and suggest improvements for error handling.

The script setup in this Vue component is well-organized and uses modern Vue features effectively. However, consider enhancing the error handling in the imageHandler function to provide more detailed feedback to the user in case of upload failures.

@@ -117,7 +117,7 @@ class CustomClipboard extends Clipboard {
const files = Array.from(e.clipboardData.files || [])
const msExcelCheck = /<meta.*?Microsoft Excel\s[\d].*?>/

if (html.search(msExcelCheck) === -1 && this.quill.options.uploadOption?.imageUploadToServer && files.length > 0) {
if (html.search(msExcelCheck) === -1 && files.length > 0) {
Copy link

Choose a reason for hiding this comment

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

Potential Security Risk: Simplified File Upload Condition

The change in the conditional logic at line 120 removes the check for the image upload option, which simplifies the process but could potentially allow unintended file uploads. This could lead to security risks or functional issues if not handled properly.

Please ensure that this change aligns with the intended use cases and consider adding safeguards or additional checks to prevent unwanted file uploads.

@kagol kagol deleted the kagol/docs-image-upload-to-server branch October 22, 2024 10:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant