Index: trunk/extensions/SemanticMediaWiki/includes/SMW_OldDataValue.php |
— | — | @@ -53,10 +53,6 @@ |
54 | 54 | * in a strict sense. |
55 | 55 | */ |
56 | 56 | var $unit; |
57 | | - /** |
58 | | - * Error message, if value could not be intitialised. FALSE otherwise. |
59 | | - */ |
60 | | - var $error; |
61 | 57 | |
62 | 58 | /** |
63 | 59 | * String identifier that describes which of the returned |
— | — | @@ -262,7 +258,7 @@ |
263 | 259 | * make a value invalid, preventing it, e.g., from being stored in the database. |
264 | 260 | */ |
265 | 261 | function setError($message) { |
266 | | - $this->error = $message; |
| 262 | + $this->addError($message); |
267 | 263 | $this->description = false; |
268 | 264 | $this->tooltip = false; |
269 | 265 | } |
— | — | @@ -292,7 +288,6 @@ |
293 | 289 | $this->unit = ''; |
294 | 290 | $this->input = 'K'; |
295 | 291 | $this->others = array(); |
296 | | - $this->error = false; |
297 | 292 | |
298 | 293 | $this->tooltip = false; |
299 | 294 | $this->description = false; |
— | — | @@ -338,7 +333,7 @@ |
339 | 334 | public function getLongWikiText($linked = NULL) { |
340 | 335 | // copied from deprecated getValueDescription |
341 | 336 | if ($this->description === false) { |
342 | | - if ($this->error === false) { |
| 337 | + if ($this->isValid()) { |
343 | 338 | if (count($this->others)>0) { |
344 | 339 | $sep = ''; |
345 | 340 | foreach ($this->others as $other) { |
— | — | @@ -347,7 +342,9 @@ |
348 | 343 | } |
349 | 344 | if (' (' != $sep) $this->description .= ')'; |
350 | 345 | } |
351 | | - } else { $this->description = '<span class="smwwarning">' . $this->error . '</span>'; } |
| 346 | + } else { |
| 347 | + $this->description = $this->getErrorText(); |
| 348 | + } |
352 | 349 | } |
353 | 350 | return $this->description; |
354 | 351 | } |
— | — | @@ -429,13 +426,6 @@ |
430 | 427 | } |
431 | 428 | |
432 | 429 | /** |
433 | | - * Return error string or false if no error occured. |
434 | | - */ |
435 | | - function getError() { |
436 | | - return $this->error; |
437 | | - } |
438 | | - |
439 | | - /** |
440 | 430 | * Return the type id for this value, or FALSE if no type was given. |
441 | 431 | */ |
442 | 432 | function getTypeID() { |
— | — | @@ -464,7 +454,7 @@ |
465 | 455 | function getValueDescription() { |
466 | 456 | trigger_error("The function getValueDescription() is deprecated. Use getLongWikiText() or getLongHTMLText().", E_USER_NOTICE); |
467 | 457 | if ($this->description === false) { |
468 | | - if ($this->error === false) { |
| 458 | + if ($this->isValid()) { |
469 | 459 | if (count($this->others)>0) { |
470 | 460 | $sep = ''; |
471 | 461 | foreach ($this->others as $other) { |
— | — | @@ -473,7 +463,7 @@ |
474 | 464 | } |
475 | 465 | if (' (' != $sep) $this->description .= ')'; |
476 | 466 | } |
477 | | - } else { $this->description = '<span class="smwwarning">' . $this->error . '</span>'; } |
| 467 | + } else { $this->description = $this->getErrorText(); } |
478 | 468 | } |
479 | 469 | return $this->description; |
480 | 470 | } |
— | — | @@ -487,7 +477,7 @@ |
488 | 478 | */ |
489 | 479 | function getTooltip() { |
490 | 480 | if ($this->tooltip === false) { |
491 | | - if ($this->error === false) { |
| 481 | + if ($this->isValid()) { |
492 | 482 | $this->tooltip = ''; |
493 | 483 | $sep = ''; |
494 | 484 | foreach ($this->others as $id => $other) { |
— | — | @@ -555,14 +545,6 @@ |
556 | 546 | } |
557 | 547 | |
558 | 548 | /** |
559 | | - * Return TRUE if a value was defined and understood by the given type, |
560 | | - * and false if parsing errors occured or no value was given. |
561 | | - */ |
562 | | - function isValid() { |
563 | | - return ( ($this->error === false) && ($this->vuser !== false) ); |
564 | | - } |
565 | | - |
566 | | - /** |
567 | 549 | * Return TRUE if values of the given type generally have a numeric version. |
568 | 550 | */ |
569 | 551 | function isNumeric() { |
Index: trunk/extensions/SemanticMediaWiki/includes/SMW_DataValue.php |
— | — | @@ -11,6 +11,8 @@ |
12 | 12 | |
13 | 13 | protected $m_attribute = false; /// The text label of the respective attribute or false if none given |
14 | 14 | protected $m_caption = false; /// The text label to be used for output or false if none given |
| 15 | + protected $m_errors = array(); /// Array of error text messages |
| 16 | + protected $m_isset = false; /// True if a value was set. |
15 | 17 | |
16 | 18 | ///// Set methods ///// |
17 | 19 | |
— | — | @@ -20,10 +22,12 @@ |
21 | 23 | * label for printout might also be specified. |
22 | 24 | */ |
23 | 25 | public function setUserValue($value, $caption = false) { |
| 26 | + $this->m_errors = array(); // clear errors |
24 | 27 | if ($caption !== false) { |
25 | 28 | $this->m_caption = $caption; |
26 | 29 | } |
27 | 30 | $this->parseUserValue($value); // may set caption if not set yet, depending on datavalue |
| 31 | + $this->m_isset = true; |
28 | 32 | } |
29 | 33 | |
30 | 34 | /** |
— | — | @@ -32,8 +36,10 @@ |
33 | 37 | * implementations should support round-tripping). |
34 | 38 | */ |
35 | 39 | public function setXSDValue($value, $unit) { |
| 40 | + $this->m_errors = array(); // clear errors |
36 | 41 | $this->m_caption = false; |
37 | 42 | $this->parseXSDValue($value, $unit); |
| 43 | + $this->m_isset = true; |
38 | 44 | } |
39 | 45 | |
40 | 46 | /** |
— | — | @@ -55,6 +61,14 @@ |
56 | 62 | */ |
57 | 63 | abstract public function setOutputFormat($formatstring); |
58 | 64 | |
| 65 | + /** |
| 66 | + * Add a new error string to the error list. All error string must be wiki and |
| 67 | + * html-safe! No further escaping will happen! |
| 68 | + */ |
| 69 | + protected function addError($errorstring) { |
| 70 | + $this->m_errors[] = $errorstring; |
| 71 | + } |
| 72 | + |
59 | 73 | ///// Abstract processing methods ///// |
60 | 74 | |
61 | 75 | /** |
— | — | @@ -152,8 +166,9 @@ |
153 | 167 | |
154 | 168 | /** |
155 | 169 | * Return error string or an empty string if no error occured. |
| 170 | + * @DEPRECATED |
156 | 171 | */ |
157 | | - abstract public function getError(); |
| 172 | + public function getError() {} |
158 | 173 | |
159 | 174 | /** |
160 | 175 | * Return a short string that unambiguously specify the type of this value. |
— | — | @@ -177,18 +192,39 @@ |
178 | 193 | abstract public function getHash(); |
179 | 194 | |
180 | 195 | /** |
| 196 | + * Return TRUE if values of the given type generally have a numeric version. |
| 197 | + */ |
| 198 | + abstract public function isNumeric(); |
| 199 | + |
| 200 | + /** |
181 | 201 | * Return TRUE if a value was defined and understood by the given type, |
182 | 202 | * and false if parsing errors occured or no value was given. |
183 | 203 | */ |
184 | | - abstract public function isValid(); |
| 204 | + public function isValid() { |
| 205 | + return ( (count($this->m_errors) == 0) && $this->m_isset ); |
| 206 | + } |
185 | 207 | |
186 | 208 | /** |
187 | | - * Return TRUE if values of the given type generally have a numeric version. |
| 209 | + * Return a string that displays all error messages as a tooltip, or |
| 210 | + * an empty string if no errors happened. |
188 | 211 | */ |
189 | | - abstract public function isNumeric(); |
| 212 | + public function getErrorText() { |
| 213 | + if (count($this->m_errors) > 0) { |
| 214 | + $errors = implode(', ', $this->m_errors); |
| 215 | + return '<span class="smwttpersist"><span class="smwtticon">warning.png</span><span class="smwttcontent">' . $errors . '</span></span>'; |
| 216 | + } else { |
| 217 | + return ''; |
| 218 | + } |
| 219 | + } |
190 | 220 | |
| 221 | + /** |
| 222 | + * Return an array of error messages, or an empty array |
| 223 | + * if no errors occurred. |
| 224 | + */ |
| 225 | + public function getErrors() { |
| 226 | + return $this->m_errors; |
| 227 | + } |
191 | 228 | |
192 | | - |
193 | 229 | /*********************************************************************/ |
194 | 230 | /* Static methods for initialisation */ |
195 | 231 | /*********************************************************************/ |
Index: trunk/extensions/SemanticMediaWiki/includes/SMW_DV_Error.php |
— | — | @@ -7,13 +7,12 @@ |
8 | 8 | */ |
9 | 9 | class SMWErrorValue extends SMWDataValue { |
10 | 10 | |
11 | | - private $m_error; |
12 | 11 | private $m_value; |
13 | 12 | private $m_infolinks = Array(); |
14 | 13 | |
15 | 14 | public function SMWErrorValue($errormsg = '', $uservalue = '', $caption = false) { |
16 | | - $this->m_error = $errormsg; |
17 | 15 | $this->setUserValue($uservalue, $caption); |
| 16 | + $this->addError($errormsg); |
18 | 17 | } |
19 | 18 | |
20 | 19 | protected function parseUserValue($value) { |
— | — | @@ -31,9 +30,6 @@ |
32 | 31 | public function setOutputFormat($formatstring){ |
33 | 32 | // no output formats |
34 | 33 | } |
35 | | - public function setError($errormsg){ |
36 | | - $this->m_error = $errormsg; |
37 | | - } |
38 | 34 | |
39 | 35 | public function getShortWikiText($linked = NULL) { |
40 | 36 | //TODO: support linking? |
— | — | @@ -46,11 +42,11 @@ |
47 | 43 | |
48 | 44 | public function getLongWikiText($linked = NULL) { |
49 | 45 | //TODO: support linking? |
50 | | - return '<span class="smwwarning">'.$this->m_error.'</span>'; |
| 46 | + return $this->getErrorText() . ' '; // is a hack to get non-empty table rows for better img placement in FF (any maybe elsewhere too); should not hurt |
51 | 47 | } |
52 | 48 | |
53 | 49 | public function getLongHTMLText($linker = NULL) { |
54 | | - return $this->getLongWikiText($linker); |
| 50 | + return $this->getErrorText() . ' '; // is a hack to get non-empty table rows for better img placement in FF (any maybe elsewhere too); should not hurt |
55 | 51 | } |
56 | 52 | |
57 | 53 | public function getXSDValue() { |
— | — | @@ -69,10 +65,6 @@ |
70 | 66 | return ''; // empty unit |
71 | 67 | } |
72 | 68 | |
73 | | - public function getError() { |
74 | | - return $this->m_error; |
75 | | - } |
76 | | - |
77 | 69 | public function getTypeID(){ |
78 | 70 | return 'error'; |
79 | 71 | } |
— | — | @@ -82,13 +74,9 @@ |
83 | 75 | } |
84 | 76 | |
85 | 77 | public function getHash() { |
86 | | - return $this->getLongWikiText() . $this->m_value; |
| 78 | + return $this->getLongWikiText(); // use only error for hash so as not to display the same error twice |
87 | 79 | } |
88 | 80 | |
89 | | - public function isValid() { |
90 | | - return (($this->m_error == '') && ($this->m_value !== '') ); |
91 | | - } |
92 | | - |
93 | 81 | public function isNumeric() { |
94 | 82 | return false; |
95 | 83 | } |
Index: trunk/extensions/SemanticMediaWiki/includes/SMW_DV_URI.php |
— | — | @@ -19,7 +19,6 @@ |
20 | 20 | */ |
21 | 21 | class SMWURIValue extends SMWDataValue { |
22 | 22 | |
23 | | - private $m_error = ''; |
24 | 23 | private $m_value = ''; |
25 | 24 | private $m_xsdvalue = ''; |
26 | 25 | private $m_infolinks = Array(); |
— | — | @@ -53,7 +52,7 @@ |
54 | 53 | foreach ($uri_blacklist as $uri) { |
55 | 54 | if (' ' == $uri[0]) $uri = mb_substr($uri,1); //tolerate beautification space |
56 | 55 | if ($uri == mb_substr($value,0,mb_strlen($uri))) { //disallowed URI! |
57 | | - $this->m_error = wfMsgForContent('smw_baduri', $uri); |
| 56 | + $this->addError(wfMsgForContent('smw_baduri', $uri)); |
58 | 57 | return true; |
59 | 58 | } |
60 | 59 | } |
— | — | @@ -63,7 +62,7 @@ |
64 | 63 | $this->m_value = str_replace(array('&','<',' '),array('&','<','_'),$value); // TODO: spaces are just not allowed and should lead to an error |
65 | 64 | $this->m_infolinks[] = SMWInfolink::newAttributeSearchLink('+', $this->m_attribute, $this->m_value); |
66 | 65 | } else { |
67 | | - $this->m_error = (wfMsgForContent('smw_emptystring')); |
| 66 | + $this->addError(wfMsgForContent('smw_emptystring')); |
68 | 67 | } |
69 | 68 | return true; |
70 | 69 | |
— | — | @@ -78,9 +77,8 @@ |
79 | 78 | } |
80 | 79 | |
81 | 80 | public function getShortWikiText($linked = NULL) { |
82 | | - //TODO: Support linking |
83 | 81 | wfDebug("\r\n getShortWikiText: ".$this->m_caption); |
84 | | - return $this->m_caption; |
| 82 | + return $this->m_caption; // TODO: support linking with caption as alternative text, depending on type of DV |
85 | 83 | } |
86 | 84 | |
87 | 85 | public function getShortHTMLText($linker = NULL) { |
— | — | @@ -88,15 +86,19 @@ |
89 | 87 | } |
90 | 88 | |
91 | 89 | public function getLongWikiText($linked = NULL) { |
92 | | - if (! ($this->m_error === '')){ |
93 | | - return ('<span class="smwwarning">' . $this->m_error . '</span>'); |
94 | | - } else { |
95 | | - return $this->m_value; |
96 | | - } |
| 90 | + if ($this->isValid()){ |
| 91 | + return $this->getErrorText(); |
| 92 | + } else { |
| 93 | + return $this->m_value; |
| 94 | + } |
97 | 95 | } |
98 | 96 | |
99 | 97 | public function getLongHTMLText($linker = NULL) { |
100 | | - return '<span class="external free">' . htmlspecialchars($this->m_value) . '</span>'; /// TODO support linking |
| 98 | + if ($this->isValid()){ |
| 99 | + return $this->getErrorText(); |
| 100 | + } else { |
| 101 | + return '<span class="external free">' . htmlspecialchars($this->m_value) . '</span>'; /// TODO support linking |
| 102 | + } |
101 | 103 | } |
102 | 104 | |
103 | 105 | public function getXSDValue() { |
— | — | @@ -115,10 +117,6 @@ |
116 | 118 | return ''; // empty unit |
117 | 119 | } |
118 | 120 | |
119 | | - public function getError() { |
120 | | - return $this->m_error; |
121 | | - } |
122 | | - |
123 | 121 | public function getTypeID(){ |
124 | 122 | switch ($this->m_mode) { |
125 | 123 | case SMW_URI_MODE_URL: return 'url'; |
— | — | @@ -136,10 +134,6 @@ |
137 | 135 | return $this->getShortWikiText(false); |
138 | 136 | } |
139 | 137 | |
140 | | - public function isValid() { |
141 | | - return (($this->m_error == '') && ($this->m_value !== '') ); |
142 | | - } |
143 | | - |
144 | 138 | public function isNumeric() { |
145 | 139 | return false; |
146 | 140 | } |
Index: trunk/extensions/SemanticMediaWiki/includes/SMW_DV_Types.php |
— | — | @@ -12,7 +12,6 @@ |
13 | 13 | class SMWTypesValue extends SMWDataValue { |
14 | 14 | |
15 | 15 | private $m_typelabels = false; |
16 | | - private $m_error = ''; |
17 | 16 | private $m_xsdvalue = false; |
18 | 17 | |
19 | 18 | protected function parseUserValue($value) { |
— | — | @@ -38,16 +37,23 @@ |
39 | 38 | } |
40 | 39 | |
41 | 40 | public function getShortWikiText($linked = NULL) { |
| 41 | + if ($this->m_caption !== false) { |
| 42 | + return $this->m_caption; |
| 43 | + } |
| 44 | + return $this->getLongWikiText($linked); |
| 45 | + } |
| 46 | + |
| 47 | + public function getShortHTMLText($linker = NULL) { |
| 48 | + if ($this->m_caption !== false) { |
| 49 | + return htmlspecialchars($this->m_caption); |
| 50 | + } |
| 51 | + return $this->getLongHTMLText($linker); |
| 52 | + } |
| 53 | + |
| 54 | + public function getLongWikiText($linked = NULL) { |
42 | 55 | if ( ($linked === NULL) || ($linked === false) ) { |
43 | | - if ($this->m_caption === false) { |
44 | | - return str_replace('_',' ',implode(', ', $this->getTypeLabels())); |
45 | | - } else { |
46 | | - return $this->m_caption; |
47 | | - } |
| 56 | + return str_replace('_',' ',implode(', ', $this->getTypeLabels())); |
48 | 57 | } else { |
49 | | - if ($this->m_caption !== false) { ///TODO: how can we support linking for nary texts? |
50 | | - return $this->m_caption; |
51 | | - } |
52 | 58 | global $wgContLang; |
53 | 59 | $result = ''; |
54 | 60 | $typenamespace = $wgContLang->getNsText(SMW_NS_TYPE); |
— | — | @@ -64,19 +70,11 @@ |
65 | 71 | } |
66 | 72 | } |
67 | 73 | |
68 | | - public function getShortHTMLText($linker = NULL) { |
69 | | - ///TODO Support linking |
| 74 | + public function getLongHTMLText($linker = NULL) { |
| 75 | + /// TODO: support linking |
70 | 76 | return implode(', ', $this->m_typelabels); |
71 | 77 | } |
72 | 78 | |
73 | | - public function getLongWikiText($linked = NULL) { |
74 | | - return $this->getShortWikiText($linked); |
75 | | - } |
76 | | - |
77 | | - public function getLongHTMLText($linker = NULL) { |
78 | | - return $this->getShortHTMLText($linker); |
79 | | - } |
80 | | - |
81 | 79 | public function getXSDValue() { |
82 | 80 | if ($this->isValid()) { |
83 | 81 | if ($this->m_xsdvalue === false) { |
— | — | @@ -100,10 +98,6 @@ |
101 | 99 | return ''; // empty unit |
102 | 100 | } |
103 | 101 | |
104 | | - public function getError() { |
105 | | - return $this->m_error; |
106 | | - } |
107 | | - |
108 | 102 | public function getTypeID() { |
109 | 103 | return 'types'; |
110 | 104 | } |
— | — | @@ -116,11 +110,6 @@ |
117 | 111 | return implode('[]', $this->getTypeLabels()); |
118 | 112 | } |
119 | 113 | |
120 | | - public function isValid() { |
121 | | - return ( ($this->m_error == '') && |
122 | | - ( ($this->m_typelabels !== false) || ($this->m_xsdvalue !== false) ) ); |
123 | | - } |
124 | | - |
125 | 114 | public function isNumeric() { |
126 | 115 | return false; |
127 | 116 | } |
Index: trunk/extensions/SemanticMediaWiki/includes/SMW_DV_String.php |
— | — | @@ -8,7 +8,6 @@ |
9 | 9 | */ |
10 | 10 | class SMWStringValue extends SMWDataValue { |
11 | 11 | |
12 | | - private $m_error = ''; |
13 | 12 | private $m_value = ''; |
14 | 13 | private $m_xsdvalue = ''; |
15 | 14 | private $m_infolinks = Array(); |
— | — | @@ -21,14 +20,14 @@ |
22 | 21 | $this->m_xsdvalue = smwfXMLContentEncode($value); |
23 | 22 | // 255 below matches smw_attributes.value_xsd definition in smwfMakeSemanticTables() |
24 | 23 | if (strlen($this->m_xsdvalue) > 255) { |
25 | | - $this->m_error = wfMsgForContent('smw_maxstring', $this->m_xsdvalue); |
| 24 | + $this->addError(wfMsgForContent('smw_maxstring', $this->m_xsdvalue)); |
26 | 25 | $this->m_value = $this->m_xsdvalue; |
27 | 26 | } else { |
28 | 27 | $this->m_value = $this->m_xsdvalue; |
29 | 28 | $this->m_infolinks[] = SMWInfolink::newAttributeSearchLink('+', $this->m_attribute, $this->m_value); |
30 | 29 | } |
31 | 30 | } else { |
32 | | - $this->m_error = wfMsgForContent('smw_emptystring'); |
| 31 | + $this->addError(wfMsgForContent('smw_emptystring')); |
33 | 32 | } |
34 | 33 | return true; |
35 | 34 | } |
— | — | @@ -52,16 +51,16 @@ |
53 | 52 | } |
54 | 53 | |
55 | 54 | public function getLongWikiText($linked = NULL) { |
56 | | - if (! ($this->m_error === '')){ |
57 | | - return ('<span class="smwwarning">' . $this->m_error . '</span>'); |
| 55 | + if (!$this->isValid()) { |
| 56 | + return $this->getErrorText(); |
58 | 57 | } else { |
59 | 58 | return $this->m_value; |
60 | 59 | } |
61 | 60 | } |
62 | 61 | |
63 | 62 | public function getLongHTMLText($linker = NULL) { |
64 | | - if (! ($this->m_error === '')){ |
65 | | - return ('<span class="smwwarning">' . $this->m_error . '</span>'); |
| 63 | + if (!$this->isValid()) { |
| 64 | + return $this->getErrorText(); |
66 | 65 | } else { |
67 | 66 | return htmlspecialchars($this->m_value); |
68 | 67 | } |
— | — | @@ -82,10 +81,6 @@ |
83 | 82 | public function getUnit() { |
84 | 83 | return ''; // empty unit |
85 | 84 | } |
86 | | - |
87 | | - public function getError() { |
88 | | - return $this->m_error; |
89 | | - } |
90 | 85 | |
91 | 86 | public function getTypeID(){ |
92 | 87 | return 'string'; |
— | — | @@ -99,10 +94,6 @@ |
100 | 95 | return $this->getLongWikiText(false) . $this->m_xsdvalue ; |
101 | 96 | } |
102 | 97 | |
103 | | - public function isValid() { |
104 | | - return (($this->m_error == '') && ($this->m_value !== '') ); |
105 | | - } |
106 | | - |
107 | 98 | public function isNumeric() { |
108 | 99 | return false; |
109 | 100 | } |
Index: trunk/extensions/SemanticMediaWiki/includes/SMW_DV_NAry.php |
— | — | @@ -14,11 +14,6 @@ |
15 | 15 | private $m_values = array(); |
16 | 16 | |
17 | 17 | /** |
18 | | - * variable for representing error messages |
19 | | - */ |
20 | | - private $m_error; |
21 | | - |
22 | | - /** |
23 | 18 | * types as we received them when datafactory called us |
24 | 19 | */ |
25 | 20 | private $m_type = array(); |
— | — | @@ -182,10 +177,6 @@ |
183 | 178 | return ''; // empty unit |
184 | 179 | } |
185 | 180 | |
186 | | - public function getError() { |
187 | | - return $this->m_error; |
188 | | - } |
189 | | - |
190 | 181 | public function getTypeID() { |
191 | 182 | return 'nary'; |
192 | 183 | } |
Index: trunk/extensions/SemanticMediaWiki/skins/SMW_tooltip.js |
— | — | @@ -40,10 +40,12 @@ |
41 | 41 | if(spans[i].className=="smwtticon"){ |
42 | 42 | img=document.createElement("img"); |
43 | 43 | img.setAttribute("src",imagePath+spans[i].innerHTML); |
| 44 | + img.setAttribute("style","padding-right: 5px; padding-left: 5px;"); // setting a CSS class here fails |
44 | 45 | a.replaceChild(img, a.firstChild); |
45 | 46 | } |
46 | 47 | //make content invisible |
47 | 48 | //done here and not in the css so that non-js clients can see it |
| 49 | + //TODO: why not delete this span completely? |
48 | 50 | if(spans[i].className=="smwttcontent"){ |
49 | 51 | spans[i].style.display="none"; |
50 | 52 | } |
Index: trunk/extensions/SemanticMediaWiki/skins/images/warning.png |
Cannot display: file marked as a binary type. |
svn:mime-type = image/png |
Property changes on: trunk/extensions/SemanticMediaWiki/skins/images/warning.png |
___________________________________________________________________ |
Added: svn:mime-type |
51 | 53 | + image/png |