Save
This commit is contained in:
@@ -257,3 +257,58 @@ function get_full_phone() {
|
||||
|
||||
wp_send_json_success(['html' => $html]);
|
||||
}
|
||||
|
||||
if (!function_exists('split_text_into_spans')) {
|
||||
function split_text_into_spans($content, $wordClass = 'word', $charClass = 'char') {
|
||||
if (empty($content)) return '';
|
||||
|
||||
$doc = new DOMDocument('1.0', 'UTF-8');
|
||||
libxml_use_internal_errors(true);
|
||||
|
||||
$doc->loadHTML('<?xml encoding="utf-8" ?><div id="wrapper">'.$content.'</div>', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
|
||||
libxml_clear_errors();
|
||||
|
||||
$xpath = new DOMXPath($doc);
|
||||
|
||||
$textNodes = $xpath->query("//div[@id='wrapper']//text()[not(ancestor::script or ancestor::style or ancestor::svg or ancestor::code or ancestor::pre or ancestor::iframe)]");
|
||||
|
||||
foreach ($textNodes as $node) {
|
||||
$text = $node->nodeValue;
|
||||
if (!preg_match('/\S/u', $text)) continue;
|
||||
|
||||
$fragment = $doc->createDocumentFragment();
|
||||
|
||||
$words = preg_split('/(\s+)/u', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
|
||||
|
||||
foreach ($words as $word) {
|
||||
if (trim($word) === '') {
|
||||
$fragment->appendChild($doc->createTextNode($word));
|
||||
continue;
|
||||
}
|
||||
|
||||
$wordSpan = $doc->createElement('span');
|
||||
$wordSpan->setAttribute('class', $wordClass);
|
||||
|
||||
$chars = preg_split('//u', $word, -1, PREG_SPLIT_NO_EMPTY);
|
||||
foreach ($chars as $ch) {
|
||||
$span = $doc->createElement('span');
|
||||
$span->setAttribute('class', $charClass);
|
||||
$span->appendChild($doc->createTextNode($ch));
|
||||
$wordSpan->appendChild($span);
|
||||
}
|
||||
|
||||
$fragment->appendChild($wordSpan);
|
||||
}
|
||||
|
||||
$node->parentNode->replaceChild($fragment, $node);
|
||||
}
|
||||
|
||||
$wrapper = $doc->getElementById('wrapper');
|
||||
$html = '';
|
||||
foreach ($wrapper->childNodes as $child) {
|
||||
$html .= $doc->saveHTML($child);
|
||||
}
|
||||
|
||||
return $html;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user