Fix add caption
All checks were successful
Push image to registry / build-image (push) Successful in 8m4s

This commit is contained in:
2025-06-07 15:25:33 +02:00
parent 33b9c7ce5f
commit b877912d05
2 changed files with 50 additions and 16 deletions

View File

@ -287,8 +287,29 @@ abstract class BrowserJob implements ShouldQueue
}
}
public function typeText(Browser $browser, string $text, string $querySelector): void
/**
* Parse a string for use in JavaScript.
*
* @param string $string The string to parse.
* @return string The parsed string.
*/
private function parseJavaScriptString(string $string): string
{
return str_replace("'", "\\'", $string);
}
/**
* Type text into an input field using JavaScript.
*
* @param Browser $browser
* @param string $text The text to type.
* @param string $querySelector The CSS selector for the input field.
*/
public function setInputValue(Browser $browser, string $text, string $querySelector): void
{
$text = $this->parseJavaScriptString($text);
$querySelector = $this->parseJavaScriptString($querySelector);
$browser->script("
let element = document.querySelector('{$querySelector}');
if (element) {
@ -300,4 +321,31 @@ abstract class BrowserJob implements ShouldQueue
}
");
}
/**
* Paste text into an element using JavaScript.
* Can be useful for non input elements that need to get text. For example works
* with `contenteditable` elements.
*
* @param Browser $browser
* @param string $text The text to paste.
* @param string $querySelector The CSS selector for the input field.
*/
public function pasteText(Browser $browser, string $text, string $querySelector): void
{
$text = $this->parseJavaScriptString($text);
$querySelector = $this->parseJavaScriptString($querySelector);
$browser->script("
var el = document.querySelector('{$querySelector}'), text = \"{$text}\";
el.focus();
const dataTransfer = new DataTransfer();
dataTransfer.setData('text', text);
const event = new ClipboardEvent('paste', {
clipboardData: dataTransfer,
bubbles: true
});
el.dispatchEvent(event)
");
}
}