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

Support for placeholder text that clears upon editing #101

Closed
mattli opened this issue Apr 4, 2023 · 5 comments · Fixed by #102
Closed

Support for placeholder text that clears upon editing #101

mattli opened this issue Apr 4, 2023 · 5 comments · Fixed by #102

Comments

@mattli
Copy link

mattli commented Apr 4, 2023

Hello. First off thank you for all of your hard work on this project. It has been extremely useful!

Do you have a recommended way of adding placeholder text that gets replaced once a user beings typing? Or is that something that may be added in the future? I have been attempting to get the desired result with the markupInput and markupClicked MarkupDelegate methods, but I haven't been able find a way to get the UX just right. If I am able to set the cursor(caret) position that may help me as well. Thanks!

@stevengharris
Copy link
Owner

Funnily enough, the original RichEditorView that is pretty much the origin story for the MarkupEditor had placeholder text. I will try to take a look tomorrow and see how that might translate to the current world.

@mattli
Copy link
Author

mattli commented Apr 5, 2023

Thank you so much!

@stevengharris stevengharris linked a pull request Apr 5, 2023 that will close this issue
@stevengharris
Copy link
Owner

I did actually go back and model something after what was in the original RichEditorView. Basically, you pass a placeholder string at initialization time of the MarkupEditorView or MarkupEditorViewController (or MarkupWKWebView itself), and it sets a placeholder attribute on MU.editor, the document you are editing. Then, at various points, we updatePlaceholder, which adds or removes a class placeholder from MU.editor depending on whether the html is "empty" in the MarkupEditor sense of the word. The markup.css defines how to display the placeholder class - as gray text at the top left of the view. The points where updatePlaceholder is called include at setHtml time and on keyboard input.

I can see there is a problem when deleting text in an empty document. An empty document in the MarkupEditor should contain <p><br></p>, but somehow the paragraph is being deleted if you hit backspace while this "empty" document is showing. This messes up the logic I want to use to determine if the placeholder should be shown or not, so I need to fix that. In the meantime, see if this works as you expect it to by specifying placeholder when you create the MarkupEditorView or MarkupEditorViewController or MarkupWKWebView - I am not sure what your usage is. For example, for MarkupEditorView, you would do something like:

MarkupEditorView(markupDelegate: self, html: $demoHtml, placeholder: "Enter text")

Code is on the placeholder branch. I will merge this in after you give it a spin. It shouldn't break anything else and the defaults are for there to be no placeholder in any case.

FWIW, maybe there is a simple way to do this same thing on the Swift side. I was thinking perhaps with a View on top of the MarkupEditorView, kind of like you would do it with a TextEditor. I'm not sure what the equivalent would be for UIKit. I didn't try to go this route after I saw how cjwirth did this in the original RichTextEditor.

@mattli
Copy link
Author

mattli commented Apr 6, 2023

Hi Steven, I was able to play around with the changes you made. It works exactly as you described, including the issue when hitting backspace on the "empty" document. Outside of that, I think it's a great solution! I had similar thought about displaying/hiding some kind of placeholder view. Glad to have some options. Thank you for the detailed response and for working on this. I am learning a lot and very much appreciate it.

@stevengharris
Copy link
Owner

I fixed the problem with backspace (and included another change to make ToolbarButtonStyle public to help me on another project) and merged it in.

Note that the fix for backspace doesn't work properly on Intel-based Macs (like my iMac :-( ) because of #76. TL;DR... the keydown event is not detected on Intel-based Mac Catalyst apps.

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 a pull request may close this issue.

2 participants