ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
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, array, doSetupProprietary(), doSetupTricky(), doSetupTrusted(), 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'))
224  )
225  );
226  $max = $config->get('CSS.MaxImgLength');
227 
228  $this->info['width'] =
229  $this->info['height'] =
230  $max === null ?
231  $trusted_wh :
233  'img',
234  // For img tags:
236  array(
237  new HTMLPurifier_AttrDef_CSS_Length('0', $max),
238  new HTMLPurifier_AttrDef_Enum(array('auto'))
239  )
240  ),
241  // For everyone else:
242  $trusted_wh
243  );
244 
245  $this->info['text-decoration'] = new HTMLPurifier_AttrDef_CSS_TextDecoration();
246 
247  $this->info['font-family'] = new HTMLPurifier_AttrDef_CSS_FontFamily();
248 
249  // this could use specialized code
250  $this->info['font-weight'] = new HTMLPurifier_AttrDef_Enum(
251  array(
252  'normal',
253  'bold',
254  'bolder',
255  'lighter',
256  '100',
257  '200',
258  '300',
259  '400',
260  '500',
261  '600',
262  '700',
263  '800',
264  '900'
265  ),
266  false
267  );
268 
269  // MUST be called after other font properties, as it references
270  // a CSSDefinition object
271  $this->info['font'] = new HTMLPurifier_AttrDef_CSS_Font($config);
272 
273  // same here
274  $this->info['border'] =
275  $this->info['border-bottom'] =
276  $this->info['border-top'] =
277  $this->info['border-left'] =
278  $this->info['border-right'] = new HTMLPurifier_AttrDef_CSS_Border($config);
279 
280  $this->info['border-collapse'] = new HTMLPurifier_AttrDef_Enum(
281  array('collapse', 'separate')
282  );
283 
284  $this->info['caption-side'] = new HTMLPurifier_AttrDef_Enum(
285  array('top', 'bottom')
286  );
287 
288  $this->info['table-layout'] = new HTMLPurifier_AttrDef_Enum(
289  array('auto', 'fixed')
290  );
291 
292  $this->info['vertical-align'] = new HTMLPurifier_AttrDef_CSS_Composite(
293  array(
295  array(
296  'baseline',
297  'sub',
298  'super',
299  'top',
300  'text-top',
301  'middle',
302  'bottom',
303  'text-bottom'
304  )
305  ),
308  )
309  );
310 
311  $this->info['border-spacing'] = new HTMLPurifier_AttrDef_CSS_Multiple(new HTMLPurifier_AttrDef_CSS_Length(), 2);
312 
313  // These CSS properties don't work on many browsers, but we live
314  // in THE FUTURE!
315  $this->info['white-space'] = new HTMLPurifier_AttrDef_Enum(
316  array('nowrap', 'normal', 'pre', 'pre-wrap', 'pre-line')
317  );
318 
319  if ($config->get('CSS.Proprietary')) {
320  $this->doSetupProprietary($config);
321  }
322 
323  if ($config->get('CSS.AllowTricky')) {
324  $this->doSetupTricky($config);
325  }
326 
327  if ($config->get('CSS.Trusted')) {
328  $this->doSetupTrusted($config);
329  }
330 
331  $allow_important = $config->get('CSS.AllowImportant');
332  // wrap all attr-defs with decorator that handles !important
333  foreach ($this->info as $k => $v) {
334  $this->info[$k] = new HTMLPurifier_AttrDef_CSS_ImportantDecorator($v, $allow_important);
335  }
336 
337  $this->setupConfigStuff($config);
338  }
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
Create styles array
The data for the language used.
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
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 343 of file CSSDefinition.php.

References array.

Referenced by doSetup().

344  {
345  // Internet Explorer only scrollbar colors
346  $this->info['scrollbar-arrow-color'] = new HTMLPurifier_AttrDef_CSS_Color();
347  $this->info['scrollbar-base-color'] = new HTMLPurifier_AttrDef_CSS_Color();
348  $this->info['scrollbar-darkshadow-color'] = new HTMLPurifier_AttrDef_CSS_Color();
349  $this->info['scrollbar-face-color'] = new HTMLPurifier_AttrDef_CSS_Color();
350  $this->info['scrollbar-highlight-color'] = new HTMLPurifier_AttrDef_CSS_Color();
351  $this->info['scrollbar-shadow-color'] = new HTMLPurifier_AttrDef_CSS_Color();
352 
353  // vendor specific prefixes of opacity
354  $this->info['-moz-opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue();
355  $this->info['-khtml-opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue();
356 
357  // only opacity, for now
358  $this->info['filter'] = new HTMLPurifier_AttrDef_CSS_Filter();
359 
360  // more CSS3
361  $this->info['page-break-after'] =
362  $this->info['page-break-before'] = new HTMLPurifier_AttrDef_Enum(
363  array(
364  'auto',
365  'always',
366  'avoid',
367  'left',
368  'right'
369  )
370  );
371  $this->info['page-break-inside'] = new HTMLPurifier_AttrDef_Enum(array('auto', 'avoid'));
372 
373  $border_radius = new HTMLPurifier_AttrDef_CSS_Composite(
374  array(
375  new HTMLPurifier_AttrDef_CSS_Percentage(true), // disallow negative
376  new HTMLPurifier_AttrDef_CSS_Length('0') // disallow negative
377  ));
378 
379  $this->info['border-top-left-radius'] =
380  $this->info['border-top-right-radius'] =
381  $this->info['border-bottom-right-radius'] =
382  $this->info['border-bottom-left-radius'] = new HTMLPurifier_AttrDef_CSS_Multiple($border_radius, 2);
383  // TODO: support SLASH syntax
384  $this->info['border-radius'] = new HTMLPurifier_AttrDef_CSS_Multiple($border_radius, 4);
385 
386  }
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
Create styles array
The data for the language used.
Validates a keyword against a list of valid values.
Definition: Enum.php:10
Framework class for strings that involve multiple values.
Definition: Multiple.php:14
+ Here is the caller graph for this function:

◆ doSetupTricky()

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

Definition at line 391 of file CSSDefinition.php.

References array.

Referenced by doSetup().

392  {
393  $this->info['display'] = new HTMLPurifier_AttrDef_Enum(
394  array(
395  'inline',
396  'block',
397  'list-item',
398  'run-in',
399  'compact',
400  'marker',
401  'table',
402  'inline-block',
403  'inline-table',
404  'table-row-group',
405  'table-header-group',
406  'table-footer-group',
407  'table-row',
408  'table-column-group',
409  'table-column',
410  'table-cell',
411  'table-caption',
412  'none'
413  )
414  );
415  $this->info['visibility'] = new HTMLPurifier_AttrDef_Enum(
416  array('visible', 'hidden', 'collapse')
417  );
418  $this->info['overflow'] = new HTMLPurifier_AttrDef_Enum(array('visible', 'hidden', 'auto', 'scroll'));
419  $this->info['opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue();
420  }
Create styles array
The data for the language used.
Validates a keyword against a list of valid values.
Definition: Enum.php:10
+ Here is the caller graph for this function:

◆ doSetupTrusted()

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

Definition at line 425 of file CSSDefinition.php.

References array.

Referenced by doSetup().

426  {
427  $this->info['position'] = new HTMLPurifier_AttrDef_Enum(
428  array('static', 'relative', 'absolute', 'fixed')
429  );
430  $this->info['top'] =
431  $this->info['left'] =
432  $this->info['right'] =
433  $this->info['bottom'] = new HTMLPurifier_AttrDef_CSS_Composite(
434  array(
437  new HTMLPurifier_AttrDef_Enum(array('auto')),
438  )
439  );
440  $this->info['z-index'] = new HTMLPurifier_AttrDef_CSS_Composite(
441  array(
443  new HTMLPurifier_AttrDef_Enum(array('auto')),
444  )
445  );
446  }
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
Create styles array
The data for the language used.
Validates a keyword against a list of valid values.
Definition: Enum.php:10
Validates an integer.
Definition: Integer.php:10
+ 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 455 of file CSSDefinition.php.

References $config, and $d.

Referenced by doSetup().

456  {
457  // setup allowed elements
458  $support = "(for information on implementing this, see the " .
459  "support forums) ";
460  $allowed_properties = $config->get('CSS.AllowedProperties');
461  if ($allowed_properties !== null) {
462  foreach ($this->info as $name => $d) {
463  if (!isset($allowed_properties[$name])) {
464  unset($this->info[$name]);
465  }
466  unset($allowed_properties[$name]);
467  }
468  // emit errors
469  foreach ($allowed_properties as $name => $d) {
470  // :TODO: Is this htmlspecialchars() call really necessary?
471  $name = htmlspecialchars($name);
472  trigger_error("Style attribute '$name' is not supported $support", E_USER_WARNING);
473  }
474  }
475 
476  $forbidden_properties = $config->get('CSS.ForbiddenProperties');
477  if ($forbidden_properties !== null) {
478  foreach ($this->info as $name => $d) {
479  if (isset($forbidden_properties[$name])) {
480  unset($this->info[$name]);
481  }
482  }
483  }
484  }
for($col=0; $col< 50; $col++) $d
+ 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: