Вход Регистрация
Файл: vendor/fakerphp/faker/src/Faker/Provider/HtmlLorem.php
Строк: 490
<?php

namespace FakerProvider;

use 
FakerGenerator;
use 
FakerUniqueGenerator;

class 
HtmlLorem extends Base
{
    public const 
HTML_TAG 'html';
    public const 
HEAD_TAG 'head';
    public const 
BODY_TAG 'body';
    public const 
DIV_TAG 'div';
    public const 
P_TAG 'p';
    public const 
A_TAG 'a';
    public const 
SPAN_TAG 'span';
    public const 
TABLE_TAG 'table';
    public const 
THEAD_TAG 'thead';
    public const 
TBODY_TAG 'tbody';
    public const 
TR_TAG 'tr';
    public const 
TD_TAG 'td';
    public const 
TH_TAG 'th';
    public const 
UL_TAG 'ul';
    public const 
LI_TAG 'li';
    public const 
H_TAG 'h';
    public const 
B_TAG 'b';
    public const 
I_TAG 'i';
    public const 
TITLE_TAG 'title';
    public const 
FORM_TAG 'form';
    public const 
INPUT_TAG 'input';
    public const 
LABEL_TAG 'label';

    private 
$idGenerator;

    public function 
__construct(Generator $generator)
    {
        
parent::__construct($generator);
        
$generator->addProvider(new Lorem($generator));
        
$generator->addProvider(new Internet($generator));
    }

    
/**
     * @param int $maxDepth
     * @param int $maxWidth
     *
     * @return string
     */
    
public function randomHtml($maxDepth 4$maxWidth 4)
    {
        if (!
class_exists(DOMDocument::class, false)) {
            throw new 
RuntimeException('ext-dom is required to use randomHtml.');
        }

        
$document = new DOMDocument();
        
$this->idGenerator = new UniqueGenerator($this->generator);

        
$head $document->createElement('head');
        
$this->addRandomTitle($head);

        
$body $document->createElement('body');
        
$this->addLoginForm($body);
        
$this->addRandomSubTree($body$maxDepth$maxWidth);

        
$html $document->createElement('html');
        
$html->appendChild($head);
        
$html->appendChild($body);

        
$document->appendChild($html);

        return 
$document->saveHTML();
    }

    private function 
addRandomSubTree(DOMElement $root$maxDepth$maxWidth)
    {
        --
$maxDepth;

        if (
$maxDepth <= 0) {
            return 
$root;
        }

        
$siblings self::numberBetween(1$maxWidth);

        for (
$i 0$i $siblings; ++$i) {
            if (
$maxDepth == 1) {
                
$this->addRandomLeaf($root);
            } else {
                
$sibling $root->ownerDocument->createElement('div');
                
$root->appendChild($sibling);
                
$this->addRandomAttribute($sibling);
                
$this->addRandomSubTree($siblingself::numberBetween(0$maxDepth), $maxWidth);
            }
        }

        return 
$root;
    }

    private function 
addRandomLeaf(DOMElement $node): void
    
{
        
$rand self::numberBetween(110);

        switch (
$rand) {
            case 
1:
                
$this->addRandomP($node);

                break;

            case 
2:
                
$this->addRandomA($node);

                break;

            case 
3:
                
$this->addRandomSpan($node);

                break;

            case 
4:
                
$this->addRandomUL($node);

                break;

            case 
5:
                
$this->addRandomH($node);

                break;

            case 
6:
                
$this->addRandomB($node);

                break;

            case 
7:
                
$this->addRandomI($node);

                break;

            case 
8:
                
$this->addRandomTable($node);

                break;

            default:
                
$this->addRandomText($node);

                break;
        }
    }

    private function 
addRandomAttribute(DOMElement $node): void
    
{
        
$rand self::numberBetween(12);

        switch (
$rand) {
            case 
1:
                
$node->setAttribute('class'$this->generator->word());

                break;

            case 
2:
                
$node->setAttribute('id', (string) $this->idGenerator->randomNumber(5));

                break;
        }
    }

    private function 
addRandomP(DOMElement $element$maxLength 10): void
    
{
        
$node $element->ownerDocument->createElement(static::P_TAG);
        
$node->textContent $this->generator->sentence(self::numberBetween(1$maxLength));
        
$element->appendChild($node);
    }

    private function 
addRandomText(DOMElement $element$maxLength 10): void
    
{
        
$text $element->ownerDocument->createTextNode($this->generator->sentence(self::numberBetween(1$maxLength)));
        
$element->appendChild($text);
    }

    private function 
addRandomA(DOMElement $element$maxLength 10): void
    
{
        
$text $element->ownerDocument->createTextNode($this->generator->sentence(self::numberBetween(1$maxLength)));
        
$node $element->ownerDocument->createElement(static::A_TAG);
        
$node->setAttribute('href'$this->generator->safeEmailDomain());
        
$node->appendChild($text);
        
$element->appendChild($node);
    }

    private function 
addRandomTitle(DOMElement $element$maxLength 10): void
    
{
        
$text $element->ownerDocument->createTextNode($this->generator->sentence(self::numberBetween(1$maxLength)));
        
$node $element->ownerDocument->createElement(static::TITLE_TAG);
        
$node->appendChild($text);
        
$element->appendChild($node);
    }

    private function 
addRandomH(DOMElement $element$maxLength 10): void
    
{
        
$h = static::H_TAG . (string) self::numberBetween(13);
        
$text $element->ownerDocument->createTextNode($this->generator->sentence(self::numberBetween(1$maxLength)));
        
$node $element->ownerDocument->createElement($h);
        
$node->appendChild($text);
        
$element->appendChild($node);
    }

    private function 
addRandomB(DOMElement $element$maxLength 10): void
    
{
        
$text $element->ownerDocument->createTextNode($this->generator->sentence(self::numberBetween(1$maxLength)));
        
$node $element->ownerDocument->createElement(static::B_TAG);
        
$node->appendChild($text);
        
$element->appendChild($node);
    }

    private function 
addRandomI(DOMElement $element$maxLength 10): void
    
{
        
$text $element->ownerDocument->createTextNode($this->generator->sentence(self::numberBetween(1$maxLength)));
        
$node $element->ownerDocument->createElement(static::I_TAG);
        
$node->appendChild($text);
        
$element->appendChild($node);
    }

    private function 
addRandomSpan(DOMElement $element$maxLength 10): void
    
{
        
$text $element->ownerDocument->createTextNode($this->generator->sentence(self::numberBetween(1$maxLength)));
        
$node $element->ownerDocument->createElement(static::SPAN_TAG);
        
$node->appendChild($text);
        
$element->appendChild($node);
    }

    private function 
addLoginForm(DOMElement $element): void
    
{
        
$textInput $element->ownerDocument->createElement(static::INPUT_TAG);
        
$textInput->setAttribute('type''text');
        
$textInput->setAttribute('id''username');

        
$textLabel $element->ownerDocument->createElement(static::LABEL_TAG);
        
$textLabel->setAttribute('for''username');
        
$textLabel->textContent $this->generator->word();

        
$passwordInput $element->ownerDocument->createElement(static::INPUT_TAG);
        
$passwordInput->setAttribute('type''password');
        
$passwordInput->setAttribute('id''password');

        
$passwordLabel $element->ownerDocument->createElement(static::LABEL_TAG);
        
$passwordLabel->setAttribute('for''password');
        
$passwordLabel->textContent $this->generator->word();

        
$submit $element->ownerDocument->createElement(static::INPUT_TAG);
        
$submit->setAttribute('type''submit');
        
$submit->setAttribute('value'$this->generator->word());

        
$submit $element->ownerDocument->createElement(static::FORM_TAG);
        
$submit->setAttribute('action'$this->generator->safeEmailDomain());
        
$submit->setAttribute('method''POST');
        
$submit->appendChild($textLabel);
        
$submit->appendChild($textInput);
        
$submit->appendChild($passwordLabel);
        
$submit->appendChild($passwordInput);
        
$element->appendChild($submit);
    }

    private function 
addRandomTable(DOMElement $element$maxRows 10$maxCols 6$maxTitle 4$maxLength 10): void
    
{
        
$rows self::numberBetween(1$maxRows);
        
$cols self::numberBetween(1$maxCols);

        
$table $element->ownerDocument->createElement(static::TABLE_TAG);
        
$thead $element->ownerDocument->createElement(static::THEAD_TAG);
        
$tbody $element->ownerDocument->createElement(static::TBODY_TAG);

        
$table->appendChild($thead);
        
$table->appendChild($tbody);

        
$tr $element->ownerDocument->createElement(static::TR_TAG);
        
$thead->appendChild($tr);

        for (
$i 0$i $cols; ++$i) {
            
$th $element->ownerDocument->createElement(static::TH_TAG);
            
$th->textContent $this->generator->sentence(self::numberBetween(1$maxTitle));
            
$tr->appendChild($th);
        }

        for (
$i 0$i $rows; ++$i) {
            
$tr $element->ownerDocument->createElement(static::TR_TAG);
            
$tbody->appendChild($tr);

            for (
$j 0$j $cols; ++$j) {
                
$th $element->ownerDocument->createElement(static::TD_TAG);
                
$th->textContent $this->generator->sentence(self::numberBetween(1$maxLength));
                
$tr->appendChild($th);
            }
        }
        
$element->appendChild($table);
    }

    private function 
addRandomUL(DOMElement $element$maxItems 11$maxLength 4): void
    
{
        
$num self::numberBetween(1$maxItems);
        
$ul $element->ownerDocument->createElement(static::UL_TAG);

        for (
$i 0$i $num; ++$i) {
            
$li $element->ownerDocument->createElement(static::LI_TAG);
            
$li->textContent $this->generator->sentence(self::numberBetween(1$maxLength));
            
$ul->appendChild($li);
        }
        
$element->appendChild($ul);
    }
}
Онлайн: 0
Реклама