ar_JO
5 years ago
ar_SA
5 years ago
at_AT
5 years ago
bg_BG
5 years ago
bn_BD
5 years ago
cs_CZ
5 years ago
da_DK
5 years ago
de_AT
5 years ago
de_CH
5 years ago
de_DE
5 years ago
el_CY
5 years ago
el_GR
5 years ago
en_AU
5 years ago
en_CA
5 years ago
en_GB
5 years ago
en_HK
5 years ago
en_IN
5 years ago
en_NG
5 years ago
en_NZ
5 years ago
en_PH
5 years ago
en_SG
5 years ago
en_UG
5 years ago
en_US
5 years ago
en_ZA
5 years ago
es_AR
5 years ago
es_ES
5 years ago
es_PE
5 years ago
es_VE
5 years ago
et_EE
5 years ago
fa_IR
5 years ago
fi_FI
5 years ago
fr_BE
5 years ago
fr_CA
5 years ago
fr_CH
5 years ago
fr_FR
5 years ago
he_IL
5 years ago
hr_HR
5 years ago
hu_HU
5 years ago
hy_AM
5 years ago
id_ID
5 years ago
is_IS
5 years ago
it_CH
5 years ago
it_IT
5 years ago
ja_JP
5 years ago
ka_GE
5 years ago
kk_KZ
5 years ago
ko_KR
5 years ago
lt_LT
5 years ago
lv_LV
5 years ago
me_ME
5 years ago
mn_MN
5 years ago
ms_MY
5 years ago
nb_NO
5 years ago
ne_NP
5 years ago
nl_BE
5 years ago
nl_NL
5 years ago
pl_PL
5 years ago
pt_BR
5 years ago
pt_PT
5 years ago
ro_MD
5 years ago
ro_RO
5 years ago
ru_RU
5 years ago
sk_SK
5 years ago
sl_SI
5 years ago
sr_Cyrl_RS
5 years ago
sr_Latn_RS
5 years ago
sr_RS
5 years ago
sv_SE
5 years ago
th_TH
5 years ago
tr_TR
5 years ago
uk_UA
5 years ago
vi_VN
5 years ago
zh_CN
5 years ago
zh_TW
5 years ago
Address.php
5 years ago
Barcode.php
5 years ago
Base.php
5 years ago
Biased.php
5 years ago
Color.php
5 years ago
Company.php
5 years ago
DateTime.php
5 years ago
File.php
5 years ago
HtmlLorem.php
5 years ago
Image.php
5 years ago
Internet.php
5 years ago
Lorem.php
5 years ago
Miscellaneous.php
5 years ago
Payment.php
5 years ago
Person.php
5 years ago
PhoneNumber.php
5 years ago
Text.php
5 years ago
UserAgent.php
5 years ago
Uuid.php
5 years ago
HtmlLorem.php
277 lines
| 1 | <?php |
| 2 | |
| 3 | namespace Faker\Provider; |
| 4 | |
| 5 | use Faker\Generator; |
| 6 | use Faker\UniqueGenerator; |
| 7 | |
| 8 | class HtmlLorem extends Base |
| 9 | { |
| 10 | |
| 11 | const HTML_TAG = "html"; |
| 12 | const HEAD_TAG = "head"; |
| 13 | const BODY_TAG = "body"; |
| 14 | const DIV_TAG = "div"; |
| 15 | const P_TAG = "p"; |
| 16 | const A_TAG = "a"; |
| 17 | const SPAN_TAG = "span"; |
| 18 | const TABLE_TAG = "table"; |
| 19 | const THEAD_TAG = "thead"; |
| 20 | const TBODY_TAG = "tbody"; |
| 21 | const TR_TAG = "tr"; |
| 22 | const TD_TAG = "td"; |
| 23 | const TH_TAG = "th"; |
| 24 | const UL_TAG = "ul"; |
| 25 | const LI_TAG = "li"; |
| 26 | const H_TAG = "h"; |
| 27 | const B_TAG = "b"; |
| 28 | const I_TAG = "i"; |
| 29 | const TITLE_TAG = "title"; |
| 30 | const FORM_TAG = "form"; |
| 31 | const INPUT_TAG = "input"; |
| 32 | const LABEL_TAG = "label"; |
| 33 | |
| 34 | private $idGenerator; |
| 35 | |
| 36 | public function __construct(Generator $generator) |
| 37 | { |
| 38 | parent::__construct($generator); |
| 39 | $generator->addProvider(new Lorem($generator)); |
| 40 | $generator->addProvider(new Internet($generator)); |
| 41 | } |
| 42 | |
| 43 | /** |
| 44 | * @param integer $maxDepth |
| 45 | * @param integer $maxWidth |
| 46 | * |
| 47 | * @return string |
| 48 | */ |
| 49 | public function randomHtml($maxDepth = 4, $maxWidth = 4) |
| 50 | { |
| 51 | $document = new \DOMDocument(); |
| 52 | $this->idGenerator = new UniqueGenerator($this->generator); |
| 53 | |
| 54 | $head = $document->createElement("head"); |
| 55 | $this->addRandomTitle($head); |
| 56 | |
| 57 | $body = $document->createElement("body"); |
| 58 | $this->addLoginForm($body); |
| 59 | $this->addRandomSubTree($body, $maxDepth, $maxWidth); |
| 60 | |
| 61 | $html = $document->createElement("html"); |
| 62 | $html->appendChild($head); |
| 63 | $html->appendChild($body); |
| 64 | |
| 65 | $document->appendChild($html); |
| 66 | return $document->saveHTML(); |
| 67 | } |
| 68 | |
| 69 | private function addRandomSubTree(\DOMElement $root, $maxDepth, $maxWidth) |
| 70 | { |
| 71 | $maxDepth--; |
| 72 | if ($maxDepth <= 0) { |
| 73 | return $root; |
| 74 | } |
| 75 | |
| 76 | $siblings = mt_rand(1, $maxWidth); |
| 77 | for ($i = 0; $i < $siblings; $i++) { |
| 78 | if ($maxDepth == 1) { |
| 79 | $this->addRandomLeaf($root); |
| 80 | } else { |
| 81 | $sibling = $root->ownerDocument->createElement("div"); |
| 82 | $root->appendChild($sibling); |
| 83 | $this->addRandomAttribute($sibling); |
| 84 | $this->addRandomSubTree($sibling, mt_rand(0, $maxDepth), $maxWidth); |
| 85 | } |
| 86 | } |
| 87 | return $root; |
| 88 | } |
| 89 | |
| 90 | private function addRandomLeaf(\DOMElement $node) |
| 91 | { |
| 92 | $rand = mt_rand(1, 10); |
| 93 | switch ($rand) { |
| 94 | case 1: |
| 95 | $this->addRandomP($node); |
| 96 | break; |
| 97 | case 2: |
| 98 | $this->addRandomA($node); |
| 99 | break; |
| 100 | case 3: |
| 101 | $this->addRandomSpan($node); |
| 102 | break; |
| 103 | case 4: |
| 104 | $this->addRandomUL($node); |
| 105 | break; |
| 106 | case 5: |
| 107 | $this->addRandomH($node); |
| 108 | break; |
| 109 | case 6: |
| 110 | $this->addRandomB($node); |
| 111 | break; |
| 112 | case 7: |
| 113 | $this->addRandomI($node); |
| 114 | break; |
| 115 | case 8: |
| 116 | $this->addRandomTable($node); |
| 117 | break; |
| 118 | default: |
| 119 | $this->addRandomText($node); |
| 120 | break; |
| 121 | } |
| 122 | } |
| 123 | |
| 124 | private function addRandomAttribute(\DOMElement $node) |
| 125 | { |
| 126 | $rand = mt_rand(1, 2); |
| 127 | switch ($rand) { |
| 128 | case 1: |
| 129 | $node->setAttribute("class", $this->generator->word); |
| 130 | break; |
| 131 | case 2: |
| 132 | $node->setAttribute("id", (string)$this->idGenerator->randomNumber(5)); |
| 133 | break; |
| 134 | } |
| 135 | } |
| 136 | |
| 137 | private function addRandomP(\DOMElement $element, $maxLength = 10) |
| 138 | { |
| 139 | |
| 140 | $node = $element->ownerDocument->createElement(static::P_TAG); |
| 141 | $node->textContent = $this->generator->sentence(mt_rand(1, $maxLength)); |
| 142 | $element->appendChild($node); |
| 143 | } |
| 144 | |
| 145 | private function addRandomText(\DOMElement $element, $maxLength = 10) |
| 146 | { |
| 147 | $text = $element->ownerDocument->createTextNode($this->generator->sentence(mt_rand(1, $maxLength))); |
| 148 | $element->appendChild($text); |
| 149 | } |
| 150 | |
| 151 | private function addRandomA(\DOMElement $element, $maxLength = 10) |
| 152 | { |
| 153 | $text = $element->ownerDocument->createTextNode($this->generator->sentence(mt_rand(1, $maxLength))); |
| 154 | $node = $element->ownerDocument->createElement(static::A_TAG); |
| 155 | $node->setAttribute("href", $this->generator->safeEmailDomain); |
| 156 | $node->appendChild($text); |
| 157 | $element->appendChild($node); |
| 158 | } |
| 159 | |
| 160 | private function addRandomTitle(\DOMElement $element, $maxLength = 10) |
| 161 | { |
| 162 | $text = $element->ownerDocument->createTextNode($this->generator->sentence(mt_rand(1, $maxLength))); |
| 163 | $node = $element->ownerDocument->createElement(static::TITLE_TAG); |
| 164 | $node->appendChild($text); |
| 165 | $element->appendChild($node); |
| 166 | } |
| 167 | |
| 168 | private function addRandomH(\DOMElement $element, $maxLength = 10) |
| 169 | { |
| 170 | $h = static::H_TAG . (string)mt_rand(1, 3); |
| 171 | $text = $element->ownerDocument->createTextNode($this->generator->sentence(mt_rand(1, $maxLength))); |
| 172 | $node = $element->ownerDocument->createElement($h); |
| 173 | $node->appendChild($text); |
| 174 | $element->appendChild($node); |
| 175 | } |
| 176 | |
| 177 | private function addRandomB(\DOMElement $element, $maxLength = 10) |
| 178 | { |
| 179 | $text = $element->ownerDocument->createTextNode($this->generator->sentence(mt_rand(1, $maxLength))); |
| 180 | $node = $element->ownerDocument->createElement(static::B_TAG); |
| 181 | $node->appendChild($text); |
| 182 | $element->appendChild($node); |
| 183 | } |
| 184 | |
| 185 | private function addRandomI(\DOMElement $element, $maxLength = 10) |
| 186 | { |
| 187 | $text = $element->ownerDocument->createTextNode($this->generator->sentence(mt_rand(1, $maxLength))); |
| 188 | $node = $element->ownerDocument->createElement(static::I_TAG); |
| 189 | $node->appendChild($text); |
| 190 | $element->appendChild($node); |
| 191 | } |
| 192 | |
| 193 | private function addRandomSpan(\DOMElement $element, $maxLength = 10) |
| 194 | { |
| 195 | $text = $element->ownerDocument->createTextNode($this->generator->sentence(mt_rand(1, $maxLength))); |
| 196 | $node = $element->ownerDocument->createElement(static::SPAN_TAG); |
| 197 | $node->appendChild($text); |
| 198 | $element->appendChild($node); |
| 199 | } |
| 200 | |
| 201 | private function addLoginForm(\DOMElement $element) |
| 202 | { |
| 203 | |
| 204 | $textInput = $element->ownerDocument->createElement(static::INPUT_TAG); |
| 205 | $textInput->setAttribute("type", "text"); |
| 206 | $textInput->setAttribute("id", "username"); |
| 207 | |
| 208 | $textLabel = $element->ownerDocument->createElement(static::LABEL_TAG); |
| 209 | $textLabel->setAttribute("for", "username"); |
| 210 | $textLabel->textContent = $this->generator->word; |
| 211 | |
| 212 | $passwordInput = $element->ownerDocument->createElement(static::INPUT_TAG); |
| 213 | $passwordInput->setAttribute("type", "password"); |
| 214 | $passwordInput->setAttribute("id", "password"); |
| 215 | |
| 216 | $passwordLabel = $element->ownerDocument->createElement(static::LABEL_TAG); |
| 217 | $passwordLabel->setAttribute("for", "password"); |
| 218 | $passwordLabel->textContent = $this->generator->word; |
| 219 | |
| 220 | $submit = $element->ownerDocument->createElement(static::INPUT_TAG); |
| 221 | $submit->setAttribute("type", "submit"); |
| 222 | $submit->setAttribute("value", $this->generator->word); |
| 223 | |
| 224 | $submit = $element->ownerDocument->createElement(static::FORM_TAG); |
| 225 | $submit->setAttribute("action", $this->generator->safeEmailDomain); |
| 226 | $submit->setAttribute("method", "POST"); |
| 227 | $submit->appendChild($textLabel); |
| 228 | $submit->appendChild($textInput); |
| 229 | $submit->appendChild($passwordLabel); |
| 230 | $submit->appendChild($passwordInput); |
| 231 | $element->appendChild($submit); |
| 232 | } |
| 233 | |
| 234 | private function addRandomTable(\DOMElement $element, $maxRows = 10, $maxCols = 6, $maxTitle = 4, $maxLength = 10) |
| 235 | { |
| 236 | $rows = mt_rand(1, $maxRows); |
| 237 | $cols = mt_rand(1, $maxCols); |
| 238 | |
| 239 | $table = $element->ownerDocument->createElement(static::TABLE_TAG); |
| 240 | $thead = $element->ownerDocument->createElement(static::THEAD_TAG); |
| 241 | $tbody = $element->ownerDocument->createElement(static::TBODY_TAG); |
| 242 | |
| 243 | $table->appendChild($thead); |
| 244 | $table->appendChild($tbody); |
| 245 | |
| 246 | $tr = $element->ownerDocument->createElement(static::TR_TAG); |
| 247 | $thead->appendChild($tr); |
| 248 | for ($i = 0; $i < $cols; $i++) { |
| 249 | $th = $element->ownerDocument->createElement(static::TH_TAG); |
| 250 | $th->textContent = $this->generator->sentence(mt_rand(1, $maxTitle)); |
| 251 | $tr->appendChild($th); |
| 252 | } |
| 253 | for ($i = 0; $i < $rows; $i++) { |
| 254 | $tr = $element->ownerDocument->createElement(static::TR_TAG); |
| 255 | $tbody->appendChild($tr); |
| 256 | for ($j = 0; $j < $cols; $j++) { |
| 257 | $th = $element->ownerDocument->createElement(static::TD_TAG); |
| 258 | $th->textContent = $this->generator->sentence(mt_rand(1, $maxLength)); |
| 259 | $tr->appendChild($th); |
| 260 | } |
| 261 | } |
| 262 | $element->appendChild($table); |
| 263 | } |
| 264 | |
| 265 | private function addRandomUL(\DOMElement $element, $maxItems = 11, $maxLength = 4) |
| 266 | { |
| 267 | $num = mt_rand(1, $maxItems); |
| 268 | $ul = $element->ownerDocument->createElement(static::UL_TAG); |
| 269 | for ($i = 0; $i < $num; $i++) { |
| 270 | $li = $element->ownerDocument->createElement(static::LI_TAG); |
| 271 | $li->textContent = $this->generator->sentence(mt_rand(1, $maxLength)); |
| 272 | $ul->appendChild($li); |
| 273 | } |
| 274 | $element->appendChild($ul); |
| 275 | } |
| 276 | } |
| 277 |