ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e
HTMLPurifier_CSSDefinition Class Reference

Defines allowed CSS attributes and what their values are. More...

+ Inheritance diagram for HTMLPurifier_CSSDefinition:
+ Collaboration diagram for HTMLPurifier_CSSDefinition:

Data Fields

 $type = 'CSS'
 
 $info = array()
 Assoc array of attribute name to definition object. More...
 
- Data Fields inherited from HTMLPurifier_Definition
 $setup = false
 Has setup() been called yet? bool. More...
 
 $optimized = null
 If true, write out the final definition object to the cache after setup. More...
 
 $type
 What type of definition is it? string. More...
 

Protected Member Functions

 doSetup ($config)
 Constructs the info array. More...
 
 doSetupProprietary ($config)
 
 doSetupTricky ($config)
 
 doSetupTrusted ($config)
 
 setupConfigStuff ($config)
 Performs extra config-based processing. More...
 
- Protected Member Functions inherited from HTMLPurifier_Definition
 doSetup ($config)
 Sets up the definition object into the final form, something not done by the constructor. More...
 

Additional Inherited Members

- Public Member Functions inherited from HTMLPurifier_Definition
 setup ($config)
 Setup function that aborts if already setup. More...
 

Detailed Description

Defines allowed CSS attributes and what their values are.

See also
HTMLPurifier_HTMLDefinition

Definition at line 7 of file CSSDefinition.php.

Member Function Documentation

◆ doSetup()

HTMLPurifier_CSSDefinition::doSetup (   $config)
protected

Constructs the info array.

The meat of this class.

Parameters
HTMLPurifier_Config$config

Definition at line 22 of file CSSDefinition.php.

References $border_style, $config, doSetupProprietary(), doSetupTricky(), doSetupTrusted(), info(), and setupConfigStuff().

23  {
24  $this->info['text-align'] = new HTMLPurifier_AttrDef_Enum(
25  array('left', 'right', 'center', 'justify'),
26  false
27  );
28 
30  $this->info['border-bottom-style'] =
31  $this->info['border-right-style'] =
32  $this->info['border-left-style'] =
33  $this->info['border-top-style'] = new HTMLPurifier_AttrDef_Enum(
34  array(
35  'none',
36  'hidden',
37  'dotted',
38  'dashed',
39  'solid',
40  'double',
41  'groove',
42  'ridge',
43  'inset',
44  'outset'
45  ),
46  false
47  );
48 
49  $this->info['border-style'] = new HTMLPurifier_AttrDef_CSS_Multiple($border_style);
50 
51  $this->info['clear'] = new HTMLPurifier_AttrDef_Enum(
52  array('none', 'left', 'right', 'both'),
53  false
54  );
55  $this->info['float'] = new HTMLPurifier_AttrDef_Enum(
56  array('none', 'left', 'right'),
57  false
58  );
59  $this->info['font-style'] = new HTMLPurifier_AttrDef_Enum(
60  array('normal', 'italic', 'oblique'),
61  false
62  );
63  $this->info['font-variant'] = new HTMLPurifier_AttrDef_Enum(
64  array('normal', 'small-caps'),
65  false
66  );
67 
68  $uri_or_none = new HTMLPurifier_AttrDef_CSS_Composite(
69  array(
70  new HTMLPurifier_AttrDef_Enum(array('none')),
72  )
73  );
74 
75  $this->info['list-style-position'] = new HTMLPurifier_AttrDef_Enum(
76  array('inside', 'outside'),
77  false
78  );
79  $this->info['list-style-type'] = new HTMLPurifier_AttrDef_Enum(
80  array(
81  'disc',
82  'circle',
83  'square',
84  'decimal',
85  'lower-roman',
86  'upper-roman',
87  'lower-alpha',
88  'upper-alpha',
89  'none'
90  ),
91  false
92  );
93  $this->info['list-style-image'] = $uri_or_none;
94 
95  $this->info['list-style'] = new HTMLPurifier_AttrDef_CSS_ListStyle($config);
96 
97  $this->info['text-transform'] = new HTMLPurifier_AttrDef_Enum(
98  array('capitalize', 'uppercase', 'lowercase', 'none'),
99  false
100  );
101  $this->info['color'] = new HTMLPurifier_AttrDef_CSS_Color();
102 
103  $this->info['background-image'] = $uri_or_none;
104  $this->info['background-repeat'] = new HTMLPurifier_AttrDef_Enum(
105  array('repeat', 'repeat-x', 'repeat-y', 'no-repeat')
106  );
107  $this->info['background-attachment'] = new HTMLPurifier_AttrDef_Enum(
108  array('scroll', 'fixed')
109  );
110  $this->info['background-position'] = new HTMLPurifier_AttrDef_CSS_BackgroundPosition();
111 
112  $border_color =
113  $this->info['border-top-color'] =
114  $this->info['border-bottom-color'] =
115  $this->info['border-left-color'] =
116  $this->info['border-right-color'] =
117  $this->info['background-color'] = new HTMLPurifier_AttrDef_CSS_Composite(
118  array(
119  new HTMLPurifier_AttrDef_Enum(array('transparent')),
121  )
122  );
123 
124  $this->info['background'] = new HTMLPurifier_AttrDef_CSS_Background($config);
125 
126  $this->info['border-color'] = new HTMLPurifier_AttrDef_CSS_Multiple($border_color);
127 
128  $border_width =
129  $this->info['border-top-width'] =
130  $this->info['border-bottom-width'] =
131  $this->info['border-left-width'] =
132  $this->info['border-right-width'] = new HTMLPurifier_AttrDef_CSS_Composite(
133  array(
134  new HTMLPurifier_AttrDef_Enum(array('thin', 'medium', 'thick')),
135  new HTMLPurifier_AttrDef_CSS_Length('0') //disallow negative
136  )
137  );
138 
139  $this->info['border-width'] = new HTMLPurifier_AttrDef_CSS_Multiple($border_width);
140 
141  $this->info['letter-spacing'] = new HTMLPurifier_AttrDef_CSS_Composite(
142  array(
143  new HTMLPurifier_AttrDef_Enum(array('normal')),
145  )
146  );
147 
148  $this->info['word-spacing'] = new HTMLPurifier_AttrDef_CSS_Composite(
149  array(
150  new HTMLPurifier_AttrDef_Enum(array('normal')),
152  )
153  );
154 
155  $this->info['font-size'] = new HTMLPurifier_AttrDef_CSS_Composite(
156  array(
158  array(
159  'xx-small',
160  'x-small',
161  'small',
162  'medium',
163  'large',
164  'x-large',
165  'xx-large',
166  'larger',
167  'smaller'
168  )
169  ),
172  )
173  );
174 
175  $this->info['line-height'] = new HTMLPurifier_AttrDef_CSS_Composite(
176  array(
177  new HTMLPurifier_AttrDef_Enum(array('normal')),
178  new HTMLPurifier_AttrDef_CSS_Number(true), // no negatives
181  )
182  );
183 
184  $margin =
185  $this->info['margin-top'] =
186  $this->info['margin-bottom'] =
187  $this->info['margin-left'] =
188  $this->info['margin-right'] = new HTMLPurifier_AttrDef_CSS_Composite(
189  array(
192  new HTMLPurifier_AttrDef_Enum(array('auto'))
193  )
194  );
195 
196  $this->info['margin'] = new HTMLPurifier_AttrDef_CSS_Multiple($margin);
197 
198  // non-negative
199  $padding =
200  $this->info['padding-top'] =
201  $this->info['padding-bottom'] =
202  $this->info['padding-left'] =
203  $this->info['padding-right'] = new HTMLPurifier_AttrDef_CSS_Composite(
204  array(
207  )
208  );
209 
210  $this->info['padding'] = new HTMLPurifier_AttrDef_CSS_Multiple($padding);
211 
212  $this->info['text-indent'] = new HTMLPurifier_AttrDef_CSS_Composite(
213  array(
216  )
217  );
218 
219  $trusted_wh = new HTMLPurifier_AttrDef_CSS_Composite(
220  array(
223  new HTMLPurifier_AttrDef_Enum(array('auto', 'initial', 'inherit'))
224  )
225  );
226  $trusted_min_wh = new HTMLPurifier_AttrDef_CSS_Composite(
227  array(
230  new HTMLPurifier_AttrDef_Enum(array('initial', 'inherit'))
231  )
232  );
233  $trusted_max_wh = new HTMLPurifier_AttrDef_CSS_Composite(
234  array(
237  new HTMLPurifier_AttrDef_Enum(array('none', 'initial', 'inherit'))
238  )
239  );
240  $max = $config->get('CSS.MaxImgLength');
241 
242  $this->info['width'] =
243  $this->info['height'] =
244  $max === null ?
245  $trusted_wh :
247  'img',
248  // For img tags:
250  array(
251  new HTMLPurifier_AttrDef_CSS_Length('0', $max),
252  new HTMLPurifier_AttrDef_Enum(array('auto'))
253  )
254  ),
255  // For everyone else:
256  $trusted_wh
257  );
258  $this->info['min-width'] =
259  $this->info['min-height'] =
260  $max === null ?
261  $trusted_min_wh :
263  'img',
264  // For img tags:
266  array(
267  new HTMLPurifier_AttrDef_CSS_Length('0', $max),
268  new HTMLPurifier_AttrDef_Enum(array('initial', 'inherit'))
269  )
270  ),
271  // For everyone else:
272  $trusted_min_wh
273  );
274  $this->info['max-width'] =
275  $this->info['max-height'] =
276  $max === null ?
277  $trusted_max_wh :
279  'img',
280  // For img tags:
282  array(
283  new HTMLPurifier_AttrDef_CSS_Length('0', $max),
284  new HTMLPurifier_AttrDef_Enum(array('none', 'initial', 'inherit'))
285  )
286  ),
287  // For everyone else:
288  $trusted_max_wh
289  );
290 
291  $this->info['text-decoration'] = new HTMLPurifier_AttrDef_CSS_TextDecoration();
292 
293  $this->info['font-family'] = new HTMLPurifier_AttrDef_CSS_FontFamily();
294 
295  // this could use specialized code
296  $this->info['font-weight'] = new HTMLPurifier_AttrDef_Enum(
297  array(
298  'normal',
299  'bold',
300  'bolder',
301  'lighter',
302  '100',
303  '200',
304  '300',
305  '400',
306  '500',
307  '600',
308  '700',
309  '800',
310  '900'
311  ),
312  false
313  );
314 
315  // MUST be called after other font properties, as it references
316  // a CSSDefinition object
317  $this->info['font'] = new HTMLPurifier_AttrDef_CSS_Font($config);
318 
319  // same here
320  $this->info['border'] =
321  $this->info['border-bottom'] =
322  $this->info['border-top'] =
323  $this->info['border-left'] =
324  $this->info['border-right'] = new HTMLPurifier_AttrDef_CSS_Border($config);
325 
326  $this->info['border-collapse'] = new HTMLPurifier_AttrDef_Enum(
327  array('collapse', 'separate')
328  );
329 
330  $this->info['caption-side'] = new HTMLPurifier_AttrDef_Enum(
331  array('top', 'bottom')
332  );
333 
334  $this->info['table-layout'] = new HTMLPurifier_AttrDef_Enum(
335  array('auto', 'fixed')
336  );
337 
338  $this->info['vertical-align'] = new HTMLPurifier_AttrDef_CSS_Composite(
339  array(
341  array(
342  'baseline',
343  'sub',
344  'super',
345  'top',
346  'text-top',
347  'middle',
348  'bottom',
349  'text-bottom'
350  )
351  ),
354  )
355  );
356 
357  $this->info['border-spacing'] = new HTMLPurifier_AttrDef_CSS_Multiple(new HTMLPurifier_AttrDef_CSS_Length(), 2);
358 
359  // These CSS properties don't work on many browsers, but we live
360  // in THE FUTURE!
361  $this->info['white-space'] = new HTMLPurifier_AttrDef_Enum(
362  array('nowrap', 'normal', 'pre', 'pre-wrap', 'pre-line')
363  );
364 
365  if ($config->get('CSS.Proprietary')) {
366  $this->doSetupProprietary($config);
367  }
368 
369  if ($config->get('CSS.AllowTricky')) {
370  $this->doSetupTricky($config);
371  }
372 
373  if ($config->get('CSS.Trusted')) {
374  $this->doSetupTrusted($config);
375  }
376 
377  $allow_important = $config->get('CSS.AllowImportant');
378  // wrap all attr-defs with decorator that handles !important
379  foreach ($this->info as $k => $v) {
380  $this->info[$k] = new HTMLPurifier_AttrDef_CSS_ImportantDecorator($v, $allow_important);
381  }
382 
383  $this->setupConfigStuff($config);
384  }
$config
Definition: bootstrap.php:15
Decorator that, depending on a token, switches between two definitions.
Definition: Switch.php:6
Validates the value for the CSS property text-decoration.
Represents a Length as defined by CSS.
Definition: Length.php:6
Validates shorthand CSS property background.
Definition: Background.php:7
Validates a number as defined by the CSS spec.
Definition: Number.php:6
Allows multiple validators to attempt to validate attribute.
Definition: Composite.php:12
Validates a Percentage as defined by the CSS spec.
Definition: Percentage.php:6
setupConfigStuff($config)
Performs extra config-based processing.
Validates a font family list according to CSS spec.
Definition: FontFamily.php:6
Validates Color as defined by CSS.
Definition: Color.php:6
Validates shorthand CSS property font.
Definition: Font.php:6
Validates a URI in CSS syntax, which uses url('http://example.com')
Definition: URI.php:12
Validates the border property as defined by CSS.
Definition: Border.php:6
Validates the value of background-position.
Decorator which enables !important to be used in CSS values.
Validates a keyword against a list of valid values.
Definition: Enum.php:10
$border_style
Definition: example_022.php:83
info()
Definition: info.php:2
Framework class for strings that involve multiple values.
Definition: Multiple.php:14
Validates shorthand CSS property list-style.
Definition: ListStyle.php:7
+ Here is the call graph for this function:

◆ doSetupProprietary()

HTMLPurifier_CSSDefinition::doSetupProprietary (   $config)
protected
Parameters
HTMLPurifier_Config$config

Definition at line 389 of file CSSDefinition.php.

References info().

Referenced by doSetup().

390  {
391  // Internet Explorer only scrollbar colors
392  $this->info['scrollbar-arrow-color'] = new HTMLPurifier_AttrDef_CSS_Color();
393  $this->info['scrollbar-base-color'] = new HTMLPurifier_AttrDef_CSS_Color();
394  $this->info['scrollbar-darkshadow-color'] = new HTMLPurifier_AttrDef_CSS_Color();
395  $this->info['scrollbar-face-color'] = new HTMLPurifier_AttrDef_CSS_Color();
396  $this->info['scrollbar-highlight-color'] = new HTMLPurifier_AttrDef_CSS_Color();
397  $this->info['scrollbar-shadow-color'] = new HTMLPurifier_AttrDef_CSS_Color();
398 
399  // vendor specific prefixes of opacity
400  $this->info['-moz-opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue();
401  $this->info['-khtml-opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue();
402 
403  // only opacity, for now
404  $this->info['filter'] = new HTMLPurifier_AttrDef_CSS_Filter();
405 
406  // more CSS3
407  $this->info['page-break-after'] =
408  $this->info['page-break-before'] = new HTMLPurifier_AttrDef_Enum(
409  array(
410  'auto',
411  'always',
412  'avoid',
413  'left',
414  'right'
415  )
416  );
417  $this->info['page-break-inside'] = new HTMLPurifier_AttrDef_Enum(array('auto', 'avoid'));
418 
419  $border_radius = new HTMLPurifier_AttrDef_CSS_Composite(
420  array(
421  new HTMLPurifier_AttrDef_CSS_Percentage(true), // disallow negative
422  new HTMLPurifier_AttrDef_CSS_Length('0') // disallow negative
423  ));
424 
425  $this->info['border-top-left-radius'] =
426  $this->info['border-top-right-radius'] =
427  $this->info['border-bottom-right-radius'] =
428  $this->info['border-bottom-left-radius'] = new HTMLPurifier_AttrDef_CSS_Multiple($border_radius, 2);
429  // TODO: support SLASH syntax
430  $this->info['border-radius'] = new HTMLPurifier_AttrDef_CSS_Multiple($border_radius, 4);
431 
432  }
Represents a Length as defined by CSS.
Definition: Length.php:6
Allows multiple validators to attempt to validate attribute.
Definition: Composite.php:12
Validates a Percentage as defined by the CSS spec.
Definition: Percentage.php:6
Microsoft's proprietary filter: CSS property.
Definition: Filter.php:8
Validates Color as defined by CSS.
Definition: Color.php:6
Validates a keyword against a list of valid values.
Definition: Enum.php:10
info()
Definition: info.php:2
Framework class for strings that involve multiple values.
Definition: Multiple.php:14
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ doSetupTricky()

HTMLPurifier_CSSDefinition::doSetupTricky (   $config)
protected
Parameters
HTMLPurifier_Config$config

Definition at line 437 of file CSSDefinition.php.

References info().

Referenced by doSetup().

438  {
439  $this->info['display'] = new HTMLPurifier_AttrDef_Enum(
440  array(
441  'inline',
442  'block',
443  'list-item',
444  'run-in',
445  'compact',
446  'marker',
447  'table',
448  'inline-block',
449  'inline-table',
450  'table-row-group',
451  'table-header-group',
452  'table-footer-group',
453  'table-row',
454  'table-column-group',
455  'table-column',
456  'table-cell',
457  'table-caption',
458  'none'
459  )
460  );
461  $this->info['visibility'] = new HTMLPurifier_AttrDef_Enum(
462  array('visible', 'hidden', 'collapse')
463  );
464  $this->info['overflow'] = new HTMLPurifier_AttrDef_Enum(array('visible', 'hidden', 'auto', 'scroll'));
465  $this->info['opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue();
466  }
Validates a keyword against a list of valid values.
Definition: Enum.php:10
info()
Definition: info.php:2
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ doSetupTrusted()

HTMLPurifier_CSSDefinition::doSetupTrusted (   $config)
protected
Parameters
HTMLPurifier_Config$config

Definition at line 471 of file CSSDefinition.php.

References info().

Referenced by doSetup().

472  {
473  $this->info['position'] = new HTMLPurifier_AttrDef_Enum(
474  array('static', 'relative', 'absolute', 'fixed')
475  );
476  $this->info['top'] =
477  $this->info['left'] =
478  $this->info['right'] =
479  $this->info['bottom'] = new HTMLPurifier_AttrDef_CSS_Composite(
480  array(
483  new HTMLPurifier_AttrDef_Enum(array('auto')),
484  )
485  );
486  $this->info['z-index'] = new HTMLPurifier_AttrDef_CSS_Composite(
487  array(
489  new HTMLPurifier_AttrDef_Enum(array('auto')),
490  )
491  );
492  }
Represents a Length as defined by CSS.
Definition: Length.php:6
Allows multiple validators to attempt to validate attribute.
Definition: Composite.php:12
Validates a Percentage as defined by the CSS spec.
Definition: Percentage.php:6
Validates a keyword against a list of valid values.
Definition: Enum.php:10
info()
Definition: info.php:2
Validates an integer.
Definition: Integer.php:10
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ setupConfigStuff()

HTMLPurifier_CSSDefinition::setupConfigStuff (   $config)
protected

Performs extra config-based processing.

Based off of HTMLPurifier_HTMLDefinition.

Parameters
HTMLPurifier_Config$config
Todo:
Refactor duplicate elements into common class (probably using composition, not inheritance).

Definition at line 501 of file CSSDefinition.php.

References $config, $d, $name, and info().

Referenced by doSetup().

502  {
503  // setup allowed elements
504  $support = "(for information on implementing this, see the " .
505  "support forums) ";
506  $allowed_properties = $config->get('CSS.AllowedProperties');
507  if ($allowed_properties !== null) {
508  foreach ($this->info as $name => $d) {
509  if (!isset($allowed_properties[$name])) {
510  unset($this->info[$name]);
511  }
512  unset($allowed_properties[$name]);
513  }
514  // emit errors
515  foreach ($allowed_properties as $name => $d) {
516  // :TODO: Is this htmlspecialchars() call really necessary?
517  $name = htmlspecialchars($name);
518  trigger_error("Style attribute '$name' is not supported $support", E_USER_WARNING);
519  }
520  }
521 
522  $forbidden_properties = $config->get('CSS.ForbiddenProperties');
523  if ($forbidden_properties !== null) {
524  foreach ($this->info as $name => $d) {
525  if (isset($forbidden_properties[$name])) {
526  unset($this->info[$name]);
527  }
528  }
529  }
530  }
$config
Definition: bootstrap.php:15
info()
Definition: info.php:2
for($i=6; $i< 13; $i++) for($i=1; $i< 13; $i++) $d
Definition: date.php:296
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Field Documentation

◆ $info

HTMLPurifier_CSSDefinition::$info = array()

Assoc array of attribute name to definition object.

HTMLPurifier_AttrDef[]

Definition at line 16 of file CSSDefinition.php.

◆ $type

HTMLPurifier_CSSDefinition::$type = 'CSS'

Definition at line 10 of file CSSDefinition.php.


The documentation for this class was generated from the following file: