Blame view

vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/StrictBlockquote.php 2.85 KB
abf1649b   andryeyev   Чистая установка ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
  <?php
  
  /**
   * Takes the contents of blockquote when in strict and reformats for validation.
   */
  class HTMLPurifier_ChildDef_StrictBlockquote extends HTMLPurifier_ChildDef_Required
  {
      /**
       * @type array
       */
      protected $real_elements;
  
      /**
       * @type array
       */
      protected $fake_elements;
  
      /**
       * @type bool
       */
      public $allow_empty = true;
  
      /**
       * @type string
       */
      public $type = 'strictblockquote';
  
      /**
       * @type bool
       */
      protected $init = false;
  
      /**
       * @param HTMLPurifier_Config $config
       * @return array
       * @note We don't want MakeWellFormed to auto-close inline elements since
       *       they might be allowed.
       */
      public function getAllowedElements($config)
      {
          $this->init($config);
          return $this->fake_elements;
      }
  
      /**
       * @param array $children
       * @param HTMLPurifier_Config $config
       * @param HTMLPurifier_Context $context
       * @return array
       */
      public function validateChildren($children, $config, $context)
      {
          $this->init($config);
  
          // trick the parent class into thinking it allows more
          $this->elements = $this->fake_elements;
          $result = parent::validateChildren($children, $config, $context);
          $this->elements = $this->real_elements;
  
          if ($result === false) {
              return array();
          }
          if ($result === true) {
              $result = $children;
          }
  
          $def = $config->getHTMLDefinition();
          $block_wrap_name = $def->info_block_wrapper;
          $block_wrap = false;
          $ret = array();
  
          foreach ($result as $node) {
              if ($block_wrap === false) {
                  if (($node instanceof HTMLPurifier_Node_Text && !$node->is_whitespace) ||
                      ($node instanceof HTMLPurifier_Node_Element && !isset($this->elements[$node->name]))) {
                          $block_wrap = new HTMLPurifier_Node_Element($def->info_block_wrapper);
                          $ret[] = $block_wrap;
                  }
              } else {
                  if ($node instanceof HTMLPurifier_Node_Element && isset($this->elements[$node->name])) {
                      $block_wrap = false;
  
                  }
              }
              if ($block_wrap) {
                  $block_wrap->children[] = $node;
              } else {
                  $ret[] = $node;
              }
          }
          return $ret;
      }
  
      /**
       * @param HTMLPurifier_Config $config
       */
      private function init($config)
      {
          if (!$this->init) {
              $def = $config->getHTMLDefinition();
              // allow all inline elements
              $this->real_elements = $this->elements;
              $this->fake_elements = $def->info_content_sets['Flow'];
              $this->fake_elements['#PCDATA'] = true;
              $this->init = true;
          }
      }
  }
  
  // vim: et sw=4 sts=4