ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
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? @type 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? @type 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...
 
 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

Reimplemented from HTMLPurifier_Definition.

Definition at line 22 of file CSSDefinition.php.

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')) {
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
384 }
Validates the value of background-position.
Validates shorthand CSS property background.
Definition: Background.php:8
Validates the border property as defined by CSS.
Definition: Border.php:7
Validates Color as defined by CSS.
Definition: Color.php:7
Allows multiple validators to attempt to validate attribute.
Definition: Composite.php:13
Validates a font family list according to CSS spec.
Definition: FontFamily.php:7
Validates shorthand CSS property font.
Definition: Font.php:7
Decorator which enables !important to be used in CSS values.
Represents a Length as defined by CSS.
Definition: Length.php:7
Validates shorthand CSS property list-style.
Definition: ListStyle.php:8
Framework class for strings that involve multiple values.
Definition: Multiple.php:15
Validates a number as defined by the CSS spec.
Definition: Number.php:7
Validates a Percentage as defined by the CSS spec.
Definition: Percentage.php:7
Validates the value for the CSS property text-decoration.
Validates a URI in CSS syntax, which uses url('http://example.com')
Definition: URI.php:13
Validates a keyword against a list of valid values.
Definition: Enum.php:11
Decorator that, depending on a token, switches between two definitions.
Definition: Switch.php:7
setupConfigStuff($config)
Performs extra config-based processing.
$border_style
Definition: example_022.php:83
info()
Definition: info.php:2
$config
Definition: bootstrap.php:15

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

+ 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.

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 }
Microsoft's proprietary filter: CSS property.
Definition: Filter.php:9

References info().

Referenced by doSetup().

+ 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.

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 }

References info().

Referenced by doSetup().

+ 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.

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 }
Validates an integer.
Definition: Integer.php:11

References info().

Referenced by doSetup().

+ 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.

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 }
for( $i=6;$i< 13;$i++) for($i=1; $i< 13; $i++) $d
Definition: date.php:296

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

Referenced by doSetup().

+ 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.

@type 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: