HTML checkbox input field

This commit is contained in:
Matze2010 2020-03-01 18:15:27 +00:00
parent b8346af548
commit 726c8caf54
2 changed files with 38 additions and 0 deletions

View File

@ -161,6 +161,7 @@ class Html
'img' => array('Image', $node, $element, $styles, null, null, null),
'br' => array('LineBreak', null, $element, $styles, null, null, null),
'a' => array('Link', $node, $element, $styles, null, null, null),
'input' => array('Input', $node, $element, $styles, null, null, null),
);
$newElement = null;
@ -233,6 +234,24 @@ class Html
return $newElement;
}
/**
* Parse input node
*
* @param \DOMNode $node
* @param \PhpOffice\PhpWord\Element\AbstractContainer $element
* @param array &$styles
*/
protected static function parseInput($node, $element, &$styles)
{
$attributes = $node->attributes;
if (($type = $attributes->getNamedItem('type')->value) === 'checkbox') {
$checked = ($checked = $attributes->getNamedItem('checked')) && $checked->value === "true" ?? false;
$textrun = $element->addTextRun();
$textrun->addFormField('checkbox')->setValue($checked);
}
}
/**
* Parse heading node
*

View File

@ -632,4 +632,23 @@ class HtmlTest extends AbstractWebServerEmbeddedTest
$this->assertTrue($doc->elementExists('/w:document/w:body/w:p/w:r/w:rPr/w:spacing'));
$this->assertEquals(150 * 15, $doc->getElement('/w:document/w:body/w:p/w:r/w:rPr/w:spacing')->getAttribute('w:val'));
}
/**
* Tests checkbox input field
*/
public function testInputCheckbox()
{
$phpWord = new \PhpOffice\PhpWord\PhpWord();
$section = $phpWord->addSection();
$html = '<input type="checkbox" checked="true" /><input type="checkbox" />';
Html::addHtml($section, $html);
$doc = TestHelperDOCX::getDocument($phpWord, 'Word2007');
$this->assertTrue($doc->elementExists('/w:document/w:body/w:p[1]/w:r/w:fldChar/w:ffData/w:checkBox'));
$this->assertEquals(1, $doc->getElement('/w:document/w:body/w:p[1]/w:r/w:fldChar/w:ffData/w:checkBox/w:checked')->getAttribute('w:val'));
$this->assertTrue($doc->elementExists('/w:document/w:body/w:p[2]/w:r/w:fldChar/w:ffData/w:checkBox'));
$this->assertEquals(0, $doc->getElement('/w:document/w:body/w:p[2]/w:r/w:fldChar/w:ffData/w:checkBox/w:checked')->getAttribute('w:val'));
}
}