Index: trunk/extensions/SemanticMaps/SM_Settings.php |
— | — | @@ -0,0 +1,77 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * File defining the settings for the Semantic Maps extension. |
| 6 | + * More info can be found at http://www.mediawiki.org/wiki/Extension:Semantic_Maps#Settings |
| 7 | + * |
| 8 | + * NOTICE: |
| 9 | + * Changing one of these settings can be done by copieng or cutting it, |
| 10 | + * and placing it in LocalSettings.php, AFTER the inclusion of Semantic Maps. |
| 11 | + * |
| 12 | + * @file SM_Settings.php |
| 13 | + * @ingroup SemanticMaps |
| 14 | + * |
| 15 | + * @licence GNU GPL v3 |
| 16 | + * @author Jeroen De Dauw < jeroendedauw@gmail.com > |
| 17 | + */ |
| 18 | + |
| 19 | +if ( !defined( 'MEDIAWIKI' ) ) { |
| 20 | + die( 'Not an entry point.' ); |
| 21 | +} |
| 22 | + |
| 23 | + |
| 24 | + |
| 25 | +# Mapping services configuration |
| 26 | + |
| 27 | + # Array of String. The default mapping service for each feature, which will be used when no valid service is provided by the user. |
| 28 | + # Each service needs to be enabled, if not, the first one from the available services will be taken. |
| 29 | + # Note: The default service needs to be available for the feature you set it for, since it's used as a fallback mechanism. |
| 30 | + $egMapsDefaultServices['qp'] = $egMapsDefaultService; |
| 31 | + $egMapsDefaultServices['fi'] = $egMapsDefaultService; |
| 32 | + |
| 33 | + |
| 34 | + |
| 35 | +# General |
| 36 | + |
| 37 | + # Boolean. Indicates if spatial extensions should be used for coordinate storage. |
| 38 | + # Spatial extensions significantly speed up querying, but are not present by default on postgres databases. |
| 39 | + # If this value is false, coordinates will be stored in 2 float fields. |
| 40 | + # You are unlikely to need to change this setting, so don't unless you know what you are doing! |
| 41 | + $smgUseSpatialExtensions = false; // TODO: $wgDBtype != 'postgres'; |
| 42 | + |
| 43 | + |
| 44 | + |
| 45 | +# Queries |
| 46 | + |
| 47 | + # Boolean. The default value for the forceshow parameter. Will force a map to be shown even when there are no query results |
| 48 | + # when set to true. This value will only be used when the user does not provide one. |
| 49 | + $smgQPForceShow = true; |
| 50 | + |
| 51 | + # Boolean. The default value for the showtitle parameter. Will hide the title in the marker pop-ups when set to true. |
| 52 | + # This value will only be used when the user does not provide one. |
| 53 | + $smgQPShowTitle = true; |
| 54 | + |
| 55 | + # String or false. Allows you to define the content and it's layout of marker pop-ups via a template. |
| 56 | + # This value will only be used when the user does not provide one. |
| 57 | + $smgQPTemplate = false; |
| 58 | + |
| 59 | + # Enum. The default output format of coordinates. |
| 60 | + # Possible values: Maps_COORDS_FLOAT, Maps_COORDS_DMS, Maps_COORDS_DM, Maps_COORDS_DD |
| 61 | + $smgQPCoodFormat = $egMapsCoordinateNotation; |
| 62 | + |
| 63 | + # Boolean. Indicates if coordinates should be outputted in directional notation by default. |
| 64 | + $smgQPCoodDirectional = $egMapsCoordinateDirectional; |
| 65 | + |
| 66 | + |
| 67 | + |
| 68 | +# Forms |
| 69 | + |
| 70 | + $smgFIMulti = true; |
| 71 | + |
| 72 | + $smgFIFieldSize = 40; |
| 73 | + |
| 74 | + # Integer or string. The default width and height of maps in forms created by using Semantic Forms. |
| 75 | + # These values only be used when the user does not provide them. |
| 76 | + $smgFIWidth = 665; |
| 77 | + $smgFIHeight = $egMapsMapHeight; |
| 78 | + |
\ No newline at end of file |
Property changes on: trunk/extensions/SemanticMaps/SM_Settings.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 79 | + native |
Index: trunk/extensions/SemanticMaps/INSTALL |
— | — | @@ -0,0 +1,56 @@ |
| 2 | +[[Semantic Maps 0.8]] |
| 3 | + |
| 4 | +You can find a wiki version of this document, which includes various helpfull links, at |
| 5 | +http://mapping.referata.com/wiki/Help:Installation#Semantic_Maps |
| 6 | + |
| 7 | +Make sure you have Semantic MediaWiki, Maps and Validator successfully installed |
| 8 | +before proceeding with the installation. Once you have downloaded the code, |
| 9 | +place the 'SemanticMaps' directory within your MediaWiki 'extensions' directory. |
| 10 | +Then add the following code to your LocalSettings.php file after the lines that install Maps: |
| 11 | + |
| 12 | +require_once( "$IP/extensions/SemanticMaps/SemanticMaps.php" ); |
| 13 | + |
| 14 | +The placement of the inclusion of Maps and Semantic Maps needs to be at a certain position. |
| 15 | +Hold the following rules into account: |
| 16 | +* Maps needs to be included before Semantic Maps. |
| 17 | +* Semantic MediaWiki needs to be included before Maps. |
| 18 | +* Semantic Forms (if used) needs to be included before Maps (after SMW). |
| 19 | + |
| 20 | +An example of a typical inclusion order: ..., SMW, ..., SF, ..., Maps, SM, ... |
| 21 | + |
| 22 | +=== Installing 0.6 and above === |
| 23 | + |
| 24 | +This applies only to people installing version 0.6 or later. |
| 25 | + |
| 26 | +Once You installed Semantic Maps, go to Special:SMWAdmin and run "database installation and upgrade". |
| 27 | +If you do not do this, geographic coordinates will not work properly, and you might encounters |
| 28 | +database errors on pages using them anyway. |
| 29 | + |
| 30 | +=== Upgrading to 0.6 and above === |
| 31 | + |
| 32 | +This applies to everyone upgrading from the first Semantic Google Maps to Semantic Maps 0.5.5. |
| 33 | + |
| 34 | +Make sure you have upgraded SMW to version 1.5.1 or above before installing Semantic Maps 0.6! |
| 35 | + |
| 36 | +When upgrading to 0.6 from any previous version, you need to run the "database installation and upgrade" |
| 37 | +script in Special:SMWAdmin. Not doing this will result into fatal PHP errors. You will also need to run |
| 38 | +the "data repair and upgrade" script on the same page, which is required in order to store all |
| 39 | +coordinates so that Semantic Maps recognizes them. Not doing this will result into queries not |
| 40 | +returning any coordinates. |
| 41 | + |
| 42 | +=== Upgrading from Semantic Google Maps === |
| 43 | + |
| 44 | +If you have Semantic Google Maps installed, and want to upgrade to Semantic Maps, these are the |
| 45 | +steps you need to follow: |
| 46 | + |
| 47 | +* Remove the SemanticGoogleMaps directory from your extension directory. |
| 48 | +* Remove (when you use it) Google Geocoder in a similar fashion. |
| 49 | +* Upload both Maps and Semantic Maps to your extension directory. |
| 50 | +* Make sure your API keys are in the right place |
| 51 | + (the variable $wgGoogleMapsKey will need to be renamed, or copied, to $egGoogleMapsKey). |
| 52 | +* Change all #semantic_google_map parser functions with #display_point. |
| 53 | +* Add parameter names to the value of the #display_point calls. |
| 54 | + |
| 55 | +After doing all these steps, you should be done. Maps and Semantic Maps are designed to be |
| 56 | +backward compatible with SGM, so all SGM code ''should'' work on Semantic Maps. If you |
| 57 | +encounter some problem though, please let the extension developers know. |
Property changes on: trunk/extensions/SemanticMaps/INSTALL |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 58 | + native |
Index: trunk/extensions/SemanticMaps/RELEASE-NOTES |
— | — | @@ -0,0 +1,429 @@ |
| 2 | +For a documentation of all features, see http://www.mediawiki.org/wiki/Extension:Semantic_Maps |
| 3 | + |
| 4 | +== Semantic Maps change log == |
| 5 | + |
| 6 | +This change log contains a list of completed to-do's (new features, bug fixes, refactoring) for every |
| 7 | +version of Semantic Maps. You can find the most upt-do-date version at |
| 8 | +http://www.mediawiki.org/wiki/Extension:Semantic_Maps/Version_history#Semantic_Maps_change_log |
| 9 | + |
| 10 | + |
| 11 | +=== Semantic Maps 0.8 === |
| 12 | +(2011-0x-xx) |
| 13 | + |
| 14 | +This version branched from Semantic Maps 0.7.x at version 0.7.3. |
| 15 | +See the maps release notes for all changes not specific to Semantic Maps. |
| 16 | + |
| 17 | +* Improved map query parameter support in the Special:Ask GUI |
| 18 | + |
| 19 | +* Fixed fatal error occuring when running maintenance/refreshLinks.php. |
| 20 | + |
| 21 | +* Rewrote all the form inputs to jQuery plugins. |
| 22 | + |
| 23 | +* Rewrote the map printers to use the SMQueryHandler class. |
| 24 | + |
| 25 | +* Added geocoding capability to the OpenLayers form input when having a GeoNames API account. |
| 26 | + |
| 27 | +* Added 'update map' button to all form inputs. |
| 28 | + |
| 29 | +=== Semantic Maps 0.7.3 === |
| 30 | +(2010-11-30) |
| 31 | + |
| 32 | +==== new features ==== |
| 33 | + |
| 34 | +* Added KML result format that allows the export of geographical data queried via SMW in the form of .kml files. |
| 35 | + |
| 36 | +=== Semantic Maps 0.7.2 === |
| 37 | +(2010-10-28) |
| 38 | + |
| 39 | +==== Bug fixes ==== |
| 40 | + |
| 41 | +* Fixed small layout issue in query pop-ups when property names are blank. |
| 42 | + |
| 43 | +=== Semantic Maps 0.7.1 === |
| 44 | +(2010-10-20) |
| 45 | + |
| 46 | +==== New features ==== |
| 47 | + |
| 48 | +* Image layers for OpenLayers maps, defined via pages in the Layer namespace. |
| 49 | + |
| 50 | +==== Bug fixes ==== |
| 51 | + |
| 52 | +* Support for images without namespace prefix in the statispoints parameter in map ask queries. |
| 53 | + |
| 54 | +* Fixed several issue with the OpenLayers form input. |
| 55 | + |
| 56 | +* Fixed fatal error for Google Maps v2 options on Special:Ask. |
| 57 | + |
| 58 | +=== Semantic Maps 0.7 === |
| 59 | +(2010-10-15) |
| 60 | + |
| 61 | +==== New features ==== |
| 62 | + |
| 63 | +* Added 'locations' parameter to the map query printers that allows for displaying static locations |
| 64 | + in addition to query results in queries. It behaves the same as the locations parameter in display_points. |
| 65 | + |
| 66 | +==== Bug fixes ==== |
| 67 | + |
| 68 | +* Fixed compatibility with the MW 1.17 resource loader. |
| 69 | + |
| 70 | +==== Internal improvements ==== |
| 71 | + |
| 72 | +* Use of Validator 0.4, allowing for more robust and consistent error reporting. |
| 73 | + |
| 74 | +* Restructured the directory structure of the extension to better match it's architecture. |
| 75 | + |
| 76 | +=== Semantic Maps 0.6.6 === |
| 77 | +(2010-08-26) |
| 78 | + |
| 79 | +=== New features === |
| 80 | + |
| 81 | +* Added support for 'semantic' extension type, added by SMW 1.5.2 and above. |
| 82 | + |
| 83 | +==== Refactoring ==== |
| 84 | + |
| 85 | +* Use of the new MapsMappingServices class of the Maps extension instead of the globals. |
| 86 | + |
| 87 | +==== Bug fixes ==== |
| 88 | + |
| 89 | +* Fixed issue that caused popup contents to be displayed incorrectly when using templates. |
| 90 | + |
| 91 | +* Fixed issue that lowercased template names provided with the template parameter in queries. |
| 92 | + |
| 93 | +=== Semantic Maps 0.6.5 === |
| 94 | +(2010-07-27) |
| 95 | + |
| 96 | +==== New features ==== |
| 97 | + |
| 98 | +* Added hook for default result formats based on queried data types (requires SMW 1.5.2 or above). |
| 99 | + |
| 100 | +==== Refactoring ==== |
| 101 | + |
| 102 | +* Moved map id creation to the mapping service class for all features. |
| 103 | + |
| 104 | +* Moved marker js creation for query printers to the mapping service class for all features. |
| 105 | + |
| 106 | +* Moved default zoom level access method to the mapping service class for all features. |
| 107 | + |
| 108 | +* Cleaned up the way specific parameter info is handled. |
| 109 | + |
| 110 | +* Improved the structure of the geocoding functionality in form inputs. |
| 111 | + |
| 112 | +==== Bug fixes ==== |
| 113 | + |
| 114 | +* Fixed the default zoom for form inputs and query printers. |
| 115 | + |
| 116 | +=== Semantic Maps 0.6.4 === |
| 117 | +(2010-07-08) |
| 118 | + |
| 119 | +==== New features ==== |
| 120 | + |
| 121 | +* Re-added service link support, which got removed in 0.6. |
| 122 | + |
| 123 | +==== Refactoring ==== |
| 124 | + |
| 125 | +* Moved more functionality over from feature classes to service classes to prevent crazy code-flow and code duplication. |
| 126 | + |
| 127 | +==== Bug fixes ==== |
| 128 | + |
| 129 | +* Fixed php notice that occurred in some queries, introduced in 0.6.3. |
| 130 | + |
| 131 | +* Fixed issue that caused result format maps not to load when a centre address was provided that could not be geocoded. |
| 132 | + |
| 133 | +=== Semantic Maps 0.6.3 === |
| 134 | +(2010-06-20) |
| 135 | + |
| 136 | +==== Refactoring ==== |
| 137 | + |
| 138 | +* Mayor refactoring of the mapping service handling, to make the code flow less messy and be able to do mapping service related things in a more consistent fashion. |
| 139 | + |
| 140 | +==== Bug fixes ==== |
| 141 | + |
| 142 | +* Fixed issue that caused Yahoo! Maps and OpenLayers maps not to load on form pages. |
| 143 | + |
| 144 | +* Fixed php warning originating from Validator that occurred on form pages with maps. |
| 145 | + |
| 146 | +* Fixed issue that caused a fatal error when doing a query via special:ask with a mapping format, present since 0.6. |
| 147 | + |
| 148 | +=== Semantic Maps 0.6.2 === |
| 149 | +(2010-06-07) |
| 150 | + |
| 151 | +==== Bug fixes ==== |
| 152 | + |
| 153 | +* Fixed fatal error that occurred when editing a page via a form with a map on it. |
| 154 | + |
| 155 | +=== Semantic Maps 0.6.1 === |
| 156 | +(2010-06-04) |
| 157 | + |
| 158 | +==== Bug fixes ==== |
| 159 | + |
| 160 | +* Fixed serious bug that caused mapping parameters to get ignored in semantic queries and forms. |
| 161 | + |
| 162 | +* Fixed fatal error that occurred when not disabling the form input feature when Semantic Forms is not installed. |
| 163 | + |
| 164 | +* Fixed bug in map form inputs that stored 'west' coordinates as 'south' coordinates, effectively rendering the resulting coordinate set invalid. |
| 165 | + |
| 166 | +=== Semantic Maps 0.6 === |
| 167 | +(2010-05-31) |
| 168 | + |
| 169 | +==== New features ==== |
| 170 | + |
| 171 | +* Added full support for both directional and non-directional coordinate notations in DMS, DD, DM and float notation. |
| 172 | + |
| 173 | +* Added native geographical proximity query support. |
| 174 | + |
| 175 | +* Added settings to specify the width and height of maps in forms. |
| 176 | + |
| 177 | +* Added settings to specify the format of coordinates as shown in query printouts. |
| 178 | + |
| 179 | +==== Refactoring ==== |
| 180 | + |
| 181 | +* Rewrote map divs and added loading message for each map. |
| 182 | + |
| 183 | +* Rewrote individual map JS to be added to the page header. |
| 184 | + |
| 185 | +* Restructured the directory structure to make what the services and features are more clear. |
| 186 | + |
| 187 | +* Rewrote storage of coordinates to make the proximity query scalable. |
| 188 | + |
| 189 | +==== Bug fixes ==== |
| 190 | + |
| 191 | +* Fixed conflict with prototype library that caused compatibility problems with the Halo extension. |
| 192 | + |
| 193 | +=== Semantic Maps 0.5.5 === |
| 194 | +(2010-03-20) |
| 195 | + |
| 196 | +==== Refactoring ==== |
| 197 | + |
| 198 | +* Moved the geographical proximity query from Semantic MediaWiki over to Semantic Maps. |
| 199 | + |
| 200 | +* Stylized the code to conform to MediaWiki's spacing conventions. |
| 201 | + |
| 202 | +==== Bug fixes ==== |
| 203 | + |
| 204 | +* Fixed issue causing properties of type Page to not show up in pop-ups when using the template parameter. |
| 205 | + |
| 206 | +* Fixed escaping issues that caused pop-ups to break when they contained '-signs. |
| 207 | + |
| 208 | +=== Semantic Maps 0.5.4 === |
| 209 | +(2010-03-01) |
| 210 | + |
| 211 | +==== Bug fixes ==== |
| 212 | + |
| 213 | +* Fixed potential xss vectors. |
| 214 | + |
| 215 | +* Fixed minor JS error that was present for all maps except OSM. |
| 216 | + |
| 217 | +* Fixed i18n issue that caused geocoords not to be recognized on several foreign language wiki's. |
| 218 | + |
| 219 | +=== Semantic Maps 0.5.3 === |
| 220 | +(2010-02-01) |
| 221 | + |
| 222 | +==== Bug fixes ==== |
| 223 | + |
| 224 | +* Fixed issue with the type and types parameters in the Yahoo! Maps form input. |
| 225 | + |
| 226 | +* Fixed OpenLayers form input projection bug, causing the the coordinates to be wrongly interpreted. |
| 227 | + |
| 228 | +* Fixed marker display for the OpenLayers form inputs. |
| 229 | + |
| 230 | +* Fixed issue causing a fatal error when executing a query on Special:Ask with the "map" format. |
| 231 | + |
| 232 | +=== Semantic Maps 0.5.2 === |
| 233 | +(2010-01-20) |
| 234 | + |
| 235 | +==== New features ==== |
| 236 | + |
| 237 | +* Added support for template= parameter to the result printers. |
| 238 | + |
| 239 | +* Added support for showtitle= parameter to the result printers. |
| 240 | + |
| 241 | +* Added icon parameter to the query printers, allowing you to set the icon for all markers that do not have a specific icon assigned via a compound query. |
| 242 | + |
| 243 | +==== Bug fixes ==== |
| 244 | + |
| 245 | +* Added missing SMW #Ask: parameters to the parameter list of the Semantic Maps query printers. |
| 246 | + |
| 247 | +* Fixed issue with centre parameter for maps with no results (using forceshow=on). |
| 248 | + |
| 249 | +=== Semantic Maps 0.5.1 === |
| 250 | +(2009-12-25) |
| 251 | + |
| 252 | +==== New features ==== |
| 253 | + |
| 254 | +* Added parameter support for the 'map' format on Special:Ask. |
| 255 | + |
| 256 | +* Added forceshow parameter to the result formats to allow users to force showing a map, even when there are no geographical coordinate results from a query. |
| 257 | + |
| 258 | +==== Refactoring ==== |
| 259 | + |
| 260 | +* Modified the parameter definitions to work with Validator 0.2. |
| 261 | + |
| 262 | +* Removed redundant (because of Validator 0.2) utility function calls from the mapping classes. |
| 263 | + |
| 264 | +* Ensured none of the form input classes get loaded when SF is not present. |
| 265 | + |
| 266 | +==== Bug fixes ==== |
| 267 | + |
| 268 | +* Fixed issue with the query printers causing error messages to be shown for ask specific parameters. |
| 269 | + |
| 270 | +===Semantic Maps 0.5=== |
| 271 | +(2009-12-17) |
| 272 | + |
| 273 | +====New features==== |
| 274 | + |
| 275 | +* Added a result format for the OL optimized for OSM service. |
| 276 | + |
| 277 | +* Added support for the new Special:Ask page's parameter handling to the query printers. |
| 278 | + |
| 279 | +==== Refactoring ==== |
| 280 | + |
| 281 | +* Moved the geographical coordinate data type handling from SMW to SM. |
| 282 | + |
| 283 | +* Added checks for extension dependencies that need to be present for Semantic Maps to be initialized. |
| 284 | + |
| 285 | +==== Bug fixes ==== |
| 286 | + |
| 287 | +* Fixed issue with the form input registration. The main service names where getting changed into the default mapping service. |
| 288 | + |
| 289 | +===Semantic Maps 0.4.2=== |
| 290 | +(2009-11-15) |
| 291 | + |
| 292 | +Changes in 0.4.2 discussed on the authors blog: |
| 293 | + |
| 294 | +* [http://blog.bn2vs.com/2009/11/16/maps-and-semantic-maps-0-4-2/ Maps and Semantic Maps 0.4.2 released] |
| 295 | +* [http://blog.bn2vs.com/2009/11/12/new-in-maps-0-4-2/ New in Maps 0.4.2] |
| 296 | + |
| 297 | +==== Bug fixes ==== |
| 298 | + |
| 299 | +* Fixed issue with backward compatibility of the $wgGoogleMapsKey variable. It got handled at the wrong point in the form input classes, causing the form geocoding functionality to be disabled for people still using the old variable name. |
| 300 | + |
| 301 | +===Semantic Maps 0.4.1=== |
| 302 | +(2009-11-10) |
| 303 | + |
| 304 | +====New features==== |
| 305 | + |
| 306 | +* Added smart geocoding to the QP's centre parameter. |
| 307 | + |
| 308 | +* Added smart geocoding to the FI's centre parameter. |
| 309 | + |
| 310 | +==== Bug fixes ==== |
| 311 | + |
| 312 | +* Fixed bug in the Yahoo! Maps form input, caused by not adapting a renamed variable. |
| 313 | + |
| 314 | +* Fixed bug in the form scripts caused by wrongly encoded JavaScript file of Maps. |
| 315 | + |
| 316 | +===Semantic Maps 0.4=== |
| 317 | +(2009-11-03) |
| 318 | + |
| 319 | +Changes in 0.4 discussed on the authors blog: |
| 320 | + |
| 321 | +* [http://blog.bn2vs.com/2009/11/03/finally-maps-and-semantic-maps-0-4/ Finally! Maps and Semantic Maps 0.4!] |
| 322 | + |
| 323 | +====Bug fixes==== |
| 324 | + |
| 325 | +* Fixed the repeated display of mapping services on the Special:Ask page, by [http://svn.wikimedia.org/viewvc/mediawiki?view=rev&revision=58187 adding an aliasing system to SMW]. |
| 326 | + |
| 327 | +* Fixed problem that caused the SM result formats to not get displayed on Special:Ask. |
| 328 | + |
| 329 | +===Semantic Maps 0.3.4=== |
| 330 | +(2009-09-12) |
| 331 | + |
| 332 | +Changes in 0.3.4 discussed on the authors blog: |
| 333 | + |
| 334 | +* [http://blog.bn2vs.com/2009/09/12/maps-and-semantic-maps-0-3-4-released/ Maps and Semantic Maps 0.3.4 released] |
| 335 | + |
| 336 | +====Bug fixes==== |
| 337 | + |
| 338 | +* Fixed bug causing error for people who do not have Semantic Forms installed and enabled, presumably introduced in 0.3. |
| 339 | + |
| 340 | +* Fixed bug causing only the last coordinate property from a result to be shown on a map format, and so causing the predecessors to be ignored in case of multiple coordinate properties. |
| 341 | + |
| 342 | +====Refactoring==== |
| 343 | + |
| 344 | +* Restructured the extension to work with the new feature hook system of Maps. |
| 345 | + |
| 346 | +===Semantic Maps 0.3.3=== |
| 347 | +(2009-08-15) |
| 348 | + |
| 349 | +Changes in 0.3.3 discussed on the authors blog: |
| 350 | + |
| 351 | +* [http://blog.bn2vs.com/2009/08/25/maps-and-semantic-maps-0-3-3/ Maps and Semantic Maps 0.3.3] |
| 352 | + |
| 353 | +====Bug fixes==== |
| 354 | + |
| 355 | +* Fixed error caused by the 'map' format on the Special:Ask page |
| 356 | + |
| 357 | +===Semantic Maps 0.3.2=== |
| 358 | +(2009-08-18) |
| 359 | + |
| 360 | +====Bug fixes==== |
| 361 | + |
| 362 | +* Fixed logic error that caused maps to have a wrong centre and zoom when a query only returned one result. |
| 363 | + |
| 364 | +* Fixed an issue with the centre parameter in queries. In some cases it would not be processed correctly and cause PHP notices. |
| 365 | + |
| 366 | +===Semantic Maps 0.3.1=== |
| 367 | +(2009-08-18) |
| 368 | + |
| 369 | +====Bug fixes==== |
| 370 | + |
| 371 | +* Fixed script design flaw that caused errors when using the 'map' format in a query. |
| 372 | + |
| 373 | +===Semantic Maps 0.3=== |
| 374 | +(2009-08-14) |
| 375 | + |
| 376 | +Changes in 0.3 discussed on the authors blog: |
| 377 | + |
| 378 | +* [http://blog.bn2vs.com/2009/08/13/final-changes-for-maps-and-sm-0-3/ Final changes for Maps and SM 0.3] |
| 379 | + |
| 380 | +* [http://blog.bn2vs.com/2009/08/07/new-features-in-maps-and-sm-0-3/ New features in Maps and SM 0.3] |
| 381 | + |
| 382 | +* [http://blog.bn2vs.com/2009/08/05/structural-changes-for-maps-and-sm-0-3/ Structural changes for Maps and SM 0.3] |
| 383 | + |
| 384 | +====New functionality==== |
| 385 | + |
| 386 | +* Yahoo! Maps and OpenLayers now handle the "icon=" parameter that can come from Semantic Compound Queries, as Google Maps already did. |
| 387 | + |
| 388 | +====Refactoring==== |
| 389 | + |
| 390 | +* Restructured the Query Printer classes (JavaScript based logic). |
| 391 | + |
| 392 | +* Made form input classes weakly typed, so they fully work with the new aliasing system. |
| 393 | + |
| 394 | +* Integrated the new hook system of Maps. |
| 395 | + |
| 396 | +* Made the form input class inherit from MapsMapFeature. |
| 397 | + |
| 398 | +====Bug fixes==== |
| 399 | + |
| 400 | +* Mapping formats get added only once, as opossed to multiple times in version 0.2.2. |
| 401 | + |
| 402 | +* Added "elementNamePrefix" to the map names and fields of form inputs to prevent JavaScript errors. |
| 403 | + |
| 404 | +* When a query returns no results, nothing will be displayed, instead of an empty map. |
| 405 | + |
| 406 | +* The Google Maps form input now zooms in correctly when a user looks up an address. |
| 407 | + |
| 408 | +===Semantic Maps 0.2=== |
| 409 | +(2009-07-29) |
| 410 | + |
| 411 | +====New functionality==== |
| 412 | + |
| 413 | +* Added a hook for [[Extension:Admin_Links|Admin Links]]. |
| 414 | + |
| 415 | +* Added multi geocoder integration with form inputs. |
| 416 | + |
| 417 | +* Added support for the Yahoo! Geocoder (in form inputs). |
| 418 | + |
| 419 | +====Refactoring==== |
| 420 | + |
| 421 | +* Restructured the Form Input classes. |
| 422 | + |
| 423 | +====Bug fixes==== |
| 424 | + |
| 425 | +* Fixed issue that occurred when a custom centre is set for a Yahoo! Maps map, causing the map to not display their markers correctly. |
| 426 | + |
| 427 | +===Semantic Maps 0.1=== |
| 428 | +(2009-07-21) |
| 429 | + |
| 430 | +* Initial release, featuring both result formats and form inputs for Google Maps (+ Google Earth), Yahoo! Maps and OpenLayers. |
Property changes on: trunk/extensions/SemanticMaps/RELEASE-NOTES |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 431 | + native |
Index: trunk/extensions/SemanticMaps/includes/services/GoogleMaps3/SM_GoogleMaps3MultiInput.php |
— | — | @@ -0,0 +1,47 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * Google Maps v3 form input class for multiple locations. |
| 6 | + * |
| 7 | + * @since 0.8 |
| 8 | + * @file SM_GoogleMaps3MultiInput.php |
| 9 | + * @ingroup SemanticMaps |
| 10 | + * |
| 11 | + * @licence GNU GPL v3 |
| 12 | + * @author Jeroen De Dauw < jeroendedauw@gmail.com > |
| 13 | + */ |
| 14 | +class SMGoogleMaps3MultiInput extends SMFormInput { |
| 15 | + |
| 16 | + /** |
| 17 | + * @see SMFormInput::getResourceModules |
| 18 | + * |
| 19 | + * @since 0.8 |
| 20 | + * |
| 21 | + * @return array of string |
| 22 | + */ |
| 23 | + protected function getResourceModules() { |
| 24 | + return array_merge( parent::getResourceModules(), array( 'ext.sm.fi.googlemaps3.multi' ) ); |
| 25 | + } |
| 26 | + |
| 27 | + public static function onInputRequest( $coordinates, $input_name, $is_mandatory, $is_disabled, array $field_args ) { |
| 28 | + $formInput = new self( MapsMappingServices::getServiceInstance( 'googlemaps3' ) ); |
| 29 | + return $formInput->getInputOutput( $coordinates, $input_name, $is_mandatory, $is_disabled, $field_args ); |
| 30 | + } |
| 31 | + |
| 32 | + /** |
| 33 | + * Returns a PHP object to encode to JSON with the map data. |
| 34 | + * |
| 35 | + * @since 0.8 |
| 36 | + * |
| 37 | + * @param array $params |
| 38 | + * @param Parser $parser |
| 39 | + * |
| 40 | + * @return mixed |
| 41 | + */ |
| 42 | + protected function getJSONObject( array $params, Parser $parser ) { |
| 43 | + $params['ismulti'] = true; |
| 44 | + |
| 45 | + return $params; |
| 46 | + } |
| 47 | + |
| 48 | +} |
Property changes on: trunk/extensions/SemanticMaps/includes/services/GoogleMaps3/SM_GoogleMaps3MultiInput.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 49 | + native |
Index: trunk/extensions/SemanticMaps/includes/services/GoogleMaps3/SM_GoogleMaps3.php |
— | — | @@ -0,0 +1,83 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * This groupe contains all Google Maps v3 related files of the Semantic Maps extension. |
| 6 | + * |
| 7 | + * @defgroup SMGoogleMaps3 Google Maps v3 |
| 8 | + * @ingroup SMGoogleMaps3 |
| 9 | + */ |
| 10 | + |
| 11 | +/** |
| 12 | + * This file holds the general information for the Google Maps v3 service. |
| 13 | + * |
| 14 | + * @since 0.8 |
| 15 | + * |
| 16 | + * @file SM_GoogleMaps3.php |
| 17 | + * @ingroup SMGoogleMaps3 |
| 18 | + * |
| 19 | + * @licence GNU GPL v3 |
| 20 | + * @author Jeroen De Dauw < jeroendedauw@gmail.com > |
| 21 | + */ |
| 22 | + |
| 23 | +if ( !defined( 'MEDIAWIKI' ) ) { |
| 24 | + die( 'Not an entry point.' ); |
| 25 | +} |
| 26 | + |
| 27 | +$moduleTemplate = array( |
| 28 | + 'localBasePath' => dirname( __FILE__ ), |
| 29 | + 'remoteBasePath' => $smgScriptPath . '/includes/services/GoogleMaps3', |
| 30 | + 'group' => 'ext.semanticmaps', |
| 31 | +); |
| 32 | + |
| 33 | +$wgResourceModules['ext.sm.fi.googlemaps3'] = $moduleTemplate + array( |
| 34 | + 'dependencies' => array( 'ext.maps.googlemaps3' ), |
| 35 | + 'scripts' => array( |
| 36 | + 'ext.sm.googlemapsinput.js' |
| 37 | + ), |
| 38 | +); |
| 39 | + |
| 40 | +$wgResourceModules['ext.sm.fi.googlemaps3.single'] = $moduleTemplate + array( |
| 41 | + 'dependencies' => array( 'ext.sm.fi.googlemaps3' ), |
| 42 | + 'scripts' => array( |
| 43 | + 'jquery.googlemapsinput.js', |
| 44 | + ), |
| 45 | + 'messages' => array( |
| 46 | + 'semanticmaps_enteraddresshere', |
| 47 | + 'semanticmaps-updatemap', |
| 48 | + 'semanticmaps_lookupcoordinates', |
| 49 | + 'semanticmaps-forminput-remove', |
| 50 | + 'semanticmaps-forminput-add', |
| 51 | + 'semanticmaps-forminput-locations' |
| 52 | + ) |
| 53 | +); |
| 54 | +/* |
| 55 | +$wgResourceModules['ext.sm.fi.googlemaps3.multi'] = $moduleTemplate + array( |
| 56 | + 'dependencies' => array( 'ext.sm.fi.googlemaps3', 'jquery.ui.button', 'jquery.ui.dialog' ), |
| 57 | + 'localBasePath' => dirname( __FILE__ ), |
| 58 | + 'scripts' => array( |
| 59 | + 'jquery.gmapsmultiinput.js', |
| 60 | + ), |
| 61 | + 'messages' => array( |
| 62 | + 'semanticmaps-forminput-remove', |
| 63 | + 'semanticmaps-forminput-add', |
| 64 | + 'semanticmaps-forminput-locations' |
| 65 | + ) |
| 66 | +); |
| 67 | +*/ |
| 68 | +unset( $moduleTemplate ); |
| 69 | + |
| 70 | +$wgHooks['MappingServiceLoad'][] = 'smfInitGoogleMaps3'; |
| 71 | + |
| 72 | +function smfInitGoogleMaps3() { |
| 73 | + global $wgAutoloadClasses, $sfgFormPrinter; |
| 74 | + |
| 75 | + $wgAutoloadClasses['SMGoogleMaps3FormInput'] = dirname( __FILE__ ) . '/SM_GoogleMaps3FormInput.php'; |
| 76 | + //$wgAutoloadClasses['SMGoogleMaps3MultiInput'] = dirname( __FILE__ ) . '/SM_GoogleMaps3MultiInput.php'; |
| 77 | + |
| 78 | + MapsMappingServices::registerServiceFeature( 'googlemaps3', 'qp', 'SMMapPrinter' ); |
| 79 | + MapsMappingServices::registerServiceFeature( 'googlemaps3', 'fi', 'SMGoogleMaps3FormInput' ); |
| 80 | + |
| 81 | + //$sfgFormPrinter->setInputTypeHook( 'googlemapsmulti', array( 'SMGoogleMaps3MultiInput', 'onInputRequest' ), array() ); |
| 82 | + |
| 83 | + return true; |
| 84 | +} |
Property changes on: trunk/extensions/SemanticMaps/includes/services/GoogleMaps3/SM_GoogleMaps3.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 85 | + native |
Index: trunk/extensions/SemanticMaps/includes/services/GoogleMaps3/ext.sm.googlemapsinput.js |
— | — | @@ -0,0 +1,33 @@ |
| 2 | +/** |
| 3 | + * JavasSript for the Google Maps v3 form input in the Semantic Maps extension. |
| 4 | + * @see http://www.mediawiki.org/wiki/Extension:Semantic_Maps |
| 5 | + * |
| 6 | + * @since 0.8 |
| 7 | + * @ingroup SemanticMaps |
| 8 | + * |
| 9 | + * @licence GNU GPL v3 |
| 10 | + * @author Jeroen De Dauw <jeroendedauw at gmail dot com> |
| 11 | + */ |
| 12 | + |
| 13 | +jQuery(document).ready(function() { |
| 14 | + if ( true ) { // TODO |
| 15 | + for ( i in window.maps.googlemaps3_forminputs ) { |
| 16 | + if ( window.maps.googlemaps3_forminputs[i].ismulti ) { |
| 17 | + jQuery( '#' + i + '_forminput' ).gmapsmultiinput( i, window.maps.googlemaps3_forminputs[i] ); |
| 18 | + } |
| 19 | + else { |
| 20 | + jQuery( '#' + i + '_forminput' ).googlemapsinput( i, window.maps.googlemaps3_forminputs[i] ); |
| 21 | + } |
| 22 | + } |
| 23 | + } |
| 24 | + else { |
| 25 | + alert( mediaWiki.msg( 'maps-googlemaps3-incompatbrowser' ) ); |
| 26 | + |
| 27 | + for ( i in window.maps.googlemaps3_forminputs ) { |
| 28 | + jQuery( '#' + i + '_forminput' ) |
| 29 | + .html( $( '<input />' ) |
| 30 | + .attr( { 'name': i, 'value': semanticMaps.buildInputValue( window.maps.googlemaps3_forminputs[i].locations ) } ) |
| 31 | + ); |
| 32 | + } |
| 33 | + } |
| 34 | +}); |
Property changes on: trunk/extensions/SemanticMaps/includes/services/GoogleMaps3/ext.sm.googlemapsinput.js |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 35 | + native |
Index: trunk/extensions/SemanticMaps/includes/services/GoogleMaps3/jquery.googlemapsinput.js |
— | — | @@ -0,0 +1,70 @@ |
| 2 | +/** |
| 3 | + * JavasSript for the Google Maps v3 form input of the Semantic Maps extension. |
| 4 | + * @see http://www.mediawiki.org/wiki/Extension:Semantic_Maps |
| 5 | + * |
| 6 | + * @since 0.8 |
| 7 | + * @ingroup SemanticMaps |
| 8 | + * |
| 9 | + * @licence GNU GPL v3 |
| 10 | + * @author Jeroen De Dauw <jeroendedauw at gmail dot com> |
| 11 | + */ |
| 12 | + |
| 13 | +(function( $ ){ $.fn.googlemapsinput = function( mapDivId, options ) { |
| 14 | + |
| 15 | + var self = this; |
| 16 | + var geocoder = false; |
| 17 | + |
| 18 | + /** |
| 19 | + * Creates and places a new marker on the map at the provided |
| 20 | + * coordinate set and the pans to it. |
| 21 | + * @param {Object} coordinate |
| 22 | + */ |
| 23 | + this.showCoordinate = function( coordinate ) { |
| 24 | + this.mapDiv.removeMarkers(); |
| 25 | + coordinate.icon = ''; |
| 26 | + coordinate.title = ''; |
| 27 | + coordinate.text = coord.dms( coordinate.lat, coordinate.lon ); |
| 28 | + var marker = this.mapDiv.addMarker( coordinate ); |
| 29 | + this.mapDiv.map.panTo( marker.getPosition() ); |
| 30 | + }; |
| 31 | + |
| 32 | + /** |
| 33 | + * Calls this.showCoordinate with the provided latLng and updates the input field. |
| 34 | + * @param {google.maps.LatLng} latLng |
| 35 | + */ |
| 36 | + this.showLatLng = function( latLng ) { |
| 37 | + var location = { lat: latLng.lat(), lon: latLng.lng() }; |
| 38 | + this.showCoordinate( location ); |
| 39 | + this.updateInput( [ location ] ); |
| 40 | + } |
| 41 | + |
| 42 | + this.setupGeocoder = function() { |
| 43 | + if ( geocoder === false ) { |
| 44 | + geocoder = new google.maps.Geocoder(); |
| 45 | + } |
| 46 | + } |
| 47 | + |
| 48 | + this.geocodeAddress = function( address ) { |
| 49 | + this.setupGeocoder(); |
| 50 | + geocoder.geocode( { 'address': address }, function( results, status ) { |
| 51 | + if ( status == google.maps.GeocoderStatus.OK ) { |
| 52 | + self.showLatLng( results[0].geometry.location ); |
| 53 | + } |
| 54 | + else { |
| 55 | + // TODO: i18n |
| 56 | + alert( "Geocode was not successful for the following reason: " + status ); |
| 57 | + } |
| 58 | + } ); |
| 59 | + }; |
| 60 | + |
| 61 | + this.mapforminput( mapDivId, options, { canGeocode: true } ); |
| 62 | + |
| 63 | + this.mapDiv.googlemaps( options ); |
| 64 | + |
| 65 | + google.maps.event.addListener( this.mapDiv.map, 'click', function( event ) { |
| 66 | + self.showLatLng( event.latLng ); |
| 67 | + } ); |
| 68 | + |
| 69 | + return this; |
| 70 | + |
| 71 | +}; })( jQuery ); |
\ No newline at end of file |
Property changes on: trunk/extensions/SemanticMaps/includes/services/GoogleMaps3/jquery.googlemapsinput.js |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 72 | + native |
Index: trunk/extensions/SemanticMaps/includes/services/GoogleMaps3/SM_GoogleMaps3FormInput.php |
— | — | @@ -0,0 +1,26 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * Google Maps v3 form input class. |
| 6 | + * |
| 7 | + * @since 0.8 |
| 8 | + * @file SM_GoogleMaps3FormInput.php |
| 9 | + * @ingroup SemanticMaps |
| 10 | + * |
| 11 | + * @licence GNU GPL v3 |
| 12 | + * @author Jeroen De Dauw < jeroendedauw@gmail.com > |
| 13 | + */ |
| 14 | +class SMGoogleMaps3FormInput extends SMFormInput { |
| 15 | + |
| 16 | + /** |
| 17 | + * @see SMFormInput::getResourceModules |
| 18 | + * |
| 19 | + * @since 0.8 |
| 20 | + * |
| 21 | + * @return array of string |
| 22 | + */ |
| 23 | + protected function getResourceModules() { |
| 24 | + return array_merge( parent::getResourceModules(), array( 'ext.sm.fi.googlemaps3.single' ) ); |
| 25 | + } |
| 26 | + |
| 27 | +} |
Property changes on: trunk/extensions/SemanticMaps/includes/services/GoogleMaps3/SM_GoogleMaps3FormInput.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 28 | + native |
Index: trunk/extensions/SemanticMaps/includes/services/GoogleMaps3/jquery.gmapsmultiinput.js |
— | — | @@ -0,0 +1,317 @@ |
| 2 | +/** |
| 3 | + * JavasSript for the Google Maps v3 form input of the Semantic Maps extension. |
| 4 | + * @see http://www.mediawiki.org/wiki/Extension:Semantic_Maps |
| 5 | + * |
| 6 | + * @since 0.8 |
| 7 | + * @ingroup SemanticMaps |
| 8 | + * |
| 9 | + * @licence GNU GPL v3 |
| 10 | + * @author Jeroen De Dauw <jeroendedauw at gmail dot com> |
| 11 | + */ |
| 12 | + |
| 13 | +(function( $ ){ $.fn.gmapsmultiinput = function( mapDivId, options ) { |
| 14 | + var MAPFILES_URL = "http://maps.gstatic.com/intl/en_us/mapfiles/"; |
| 15 | + |
| 16 | + var clickIcon = new google.maps.MarkerImage( |
| 17 | + MAPFILES_URL + 'dd-start.png', |
| 18 | + new google.maps.Size(20, 34), |
| 19 | + new google.maps.Point(0, 0), |
| 20 | + new google.maps.Point(10, 34) |
| 21 | + ); |
| 22 | + |
| 23 | + var clickMarker = null; |
| 24 | + |
| 25 | + var geocoder = new google.maps.Geocoder(); |
| 26 | + |
| 27 | + this.attr( { 'class': "ui-widget" } ).css( { 'width': 'auto' } ); |
| 28 | + |
| 29 | + this.html( |
| 30 | + $( '<div />' ).css( { |
| 31 | + 'display': 'none' |
| 32 | + } ).append( $( '<input />' ).attr( { 'type': 'text', 'name': options.inputname, 'id': mapDivId + '_values' } ) ) |
| 33 | + ); |
| 34 | + |
| 35 | + updateInputValue( semanticMaps.buildInputValue( options.locations ) ); |
| 36 | + |
| 37 | + var table = $( '<table />' ).attr( { 'class' : 'mapinput ui-widget ui-widget-content' } ); |
| 38 | + this.append( table ); |
| 39 | + |
| 40 | + var mapDiv = $( '<div />' ) |
| 41 | + .attr( { |
| 42 | + 'id': mapDivId, |
| 43 | + 'class': 'ui-widget ui-widget-content' |
| 44 | + } ) |
| 45 | + .css( { |
| 46 | + 'width': options.width, |
| 47 | + 'height': options.height |
| 48 | + } ); |
| 49 | + this.append( mapDiv ); |
| 50 | + mapDiv.googlemaps( options ); |
| 51 | + |
| 52 | + google.maps.event.addListener( mapDiv.map, 'click', onClickCallback ); |
| 53 | + |
| 54 | + function onClickCallback() { |
| 55 | + // TODO |
| 56 | + } |
| 57 | + |
| 58 | + table.append( |
| 59 | + '<thead><tr class="ui-widget-header "><th colspan="2">' + mediaWiki.msg( 'semanticmaps-forminput-locations' ) + '</th></tr></thead><tbody>' |
| 60 | + ); |
| 61 | + |
| 62 | + var rowNr = options.locations.length; |
| 63 | + |
| 64 | + for ( i in options.locations ) { |
| 65 | + appendTableRow( i, options.locations[i].lat, options.locations[i].lon ); |
| 66 | + } |
| 67 | + |
| 68 | + table.append( |
| 69 | + '<tr id="' + mapDivId + '_addrow"><td width="300px">' + |
| 70 | + '<input type="text" class="text ui-widget-content ui-corner-all" width="95%" id="' + mapDivId + '_addfield" />' + |
| 71 | + '</td><td>' + |
| 72 | + '<button id="' + mapDivId + '_addbutton" mapid="' + mapDivId + '">' + mediaWiki.msg( 'semanticmaps-forminput-add' ) + '</button>' + |
| 73 | + '</td></tr></tbody>' |
| 74 | + ); |
| 75 | + |
| 76 | + $( "#" + mapDivId + '_addbutton' ).button().click( onAddButtonClick ); |
| 77 | + |
| 78 | + function onAddButtonClick() { |
| 79 | + var location = $( '#' + mapDivId + '_addfield' ).attr( 'value' ); |
| 80 | + submitGeocodeQuery( location ); |
| 81 | + return false; |
| 82 | + } |
| 83 | + |
| 84 | + function submitGeocodeQuery( query ) { |
| 85 | + if ( /\s*^\-?\d+(\.\d+)?\s*\,\s*\-?\d+(\.\d+)?\s*$/.test( query ) ) { |
| 86 | + var latlng = parseLatLng(query); |
| 87 | + |
| 88 | + if (latlng == null) { |
| 89 | + $( '#' + mapDivId + '_addfield' ).attr( 'value', '' ); |
| 90 | + } else { |
| 91 | + geocode({ 'latLng': latlng }); |
| 92 | + } |
| 93 | + } else { |
| 94 | + geocode({ 'address': query }); |
| 95 | + } |
| 96 | + } |
| 97 | + |
| 98 | + function parseLatLng(value) { |
| 99 | + value.replace('/\s//g'); |
| 100 | + var coords = value.split(','); |
| 101 | + var lat = parseFloat(coords[0]); |
| 102 | + var lng = parseFloat(coords[1]); |
| 103 | + if (isNaN(lat) || isNaN(lng)) { |
| 104 | + return null; |
| 105 | + } else { |
| 106 | + return new google.maps.LatLng(lat, lng); |
| 107 | + } |
| 108 | + } |
| 109 | + |
| 110 | + function geocode(request) { |
| 111 | + var hash = ''; |
| 112 | + |
| 113 | + if (request.latLng) { |
| 114 | + clickMarker = new google.maps.Marker({ |
| 115 | + 'position': request.latLng, |
| 116 | + 'map': map, |
| 117 | + 'title': request.latLng.toString(), |
| 118 | + 'clickable': false, |
| 119 | + 'icon': clickIcon, |
| 120 | + 'shadow': shadow |
| 121 | + }); |
| 122 | + hash = 'q=' + request.latLng.toUrlValue(6); |
| 123 | + } else { |
| 124 | + hash = 'q=' + request.address; |
| 125 | + } |
| 126 | + |
| 127 | + var vpbias = false; |
| 128 | + var country = ''; |
| 129 | + var language = ''; |
| 130 | + |
| 131 | + if (vpbias) { |
| 132 | + hash += '&vpcenter=' + map.getCenter().toUrlValue(6); |
| 133 | + hash += '&vpzoom=' + map.getZoom(); |
| 134 | + request.bounds = map.getBounds(); |
| 135 | + } |
| 136 | + |
| 137 | + if (country) { |
| 138 | + hash += '&country=' + country; |
| 139 | + request.country = country; |
| 140 | + } |
| 141 | + |
| 142 | + if (language) { |
| 143 | + hash += '&language=' + language; |
| 144 | + request.language = language; |
| 145 | + } |
| 146 | + |
| 147 | + hashFragment = '#' + escape(hash); |
| 148 | + window.location.hash = escape(hash); |
| 149 | + geocoder.geocode(request, showResults); |
| 150 | + } |
| 151 | + |
| 152 | + function showResults(results, status) { |
| 153 | + var reverse = (clickMarker != null); // TODO |
| 154 | + |
| 155 | + if (! results) { |
| 156 | + // TODO |
| 157 | + alert("Geocoder did not return a valid response"); |
| 158 | + } else { |
| 159 | + //document.getElementById("statusValue").innerHTML = status; |
| 160 | + |
| 161 | + if (status == google.maps.GeocoderStatus.OK) { |
| 162 | + //document.getElementById("matchCount").innerHTML = results.length; |
| 163 | + var marker = new google.maps.Marker( { |
| 164 | + map: mapDiv.map, |
| 165 | + position: results[0].geometry.location, |
| 166 | + title: results[0].geometry.location.toString() |
| 167 | + } ); |
| 168 | + addLocationRow( results[0].geometry.location.lat(), results[0].geometry.location.lng() ); |
| 169 | + //plotMatchesOnMap(results, reverse); |
| 170 | + } else { |
| 171 | + if ( !reverse) { |
| 172 | + mapDiv.map.setCenter(new google.maps.LatLng(0.0, 0.0)); |
| 173 | + mapDiv.map.setZoom(1); // TODO |
| 174 | + } |
| 175 | + } |
| 176 | + } |
| 177 | + } |
| 178 | + |
| 179 | + function plotMatchesOnMap(results, reverse) { |
| 180 | + markers = new Array(results.length); |
| 181 | + var resultsListHtml = ""; |
| 182 | + |
| 183 | + var openInfoWindow = function(resultNum, result, marker) { |
| 184 | + return function() { |
| 185 | + if (selected != null) { |
| 186 | + document.getElementById('p' + selected).style.backgroundColor = "white"; |
| 187 | + clearBoundsOverlays(); |
| 188 | + } |
| 189 | + |
| 190 | + map.fitBounds(result.geometry.viewport); |
| 191 | + infowindow.setContent(getAddressComponentsHtml(result.address_components)); |
| 192 | + infowindow.open(map, marker); |
| 193 | + |
| 194 | + if (result.geometry.bounds) { |
| 195 | + boundsOverlay = new google.maps.Rectangle({ |
| 196 | + 'bounds': result.geometry.bounds, |
| 197 | + 'strokeColor': '#ff0000', |
| 198 | + 'strokeOpacity': 1.0, |
| 199 | + 'strokeWeight': 2.0, |
| 200 | + 'fillOpacity': 0.0 |
| 201 | + }); |
| 202 | + boundsOverlay.setMap(map); |
| 203 | + google.maps.event.addListener(boundsOverlay, 'click', onClickCallback); |
| 204 | + document.getElementById('boundsLegend').style.display = 'block'; |
| 205 | + } else { |
| 206 | + boundsOverlay = null; |
| 207 | + } |
| 208 | + |
| 209 | + viewportOverlay = new google.maps.Rectangle({ |
| 210 | + 'bounds': result.geometry.viewport, |
| 211 | + 'strokeColor': '#0000ff', |
| 212 | + 'strokeOpacity': 1.0, |
| 213 | + 'strokeWeight': 2.0, |
| 214 | + 'fillOpacity': 0.0 |
| 215 | + }); |
| 216 | + viewportOverlay.setMap(map); |
| 217 | + google.maps.event.addListener(viewportOverlay, 'click', onClickCallback); |
| 218 | + document.getElementById('viewportLegend').style.display = 'block'; |
| 219 | + |
| 220 | + document.getElementById('p' + resultNum).style.backgroundColor = "#eeeeff"; |
| 221 | + document.getElementById('matches').scrollTop = |
| 222 | + document.getElementById('p' + resultNum).offsetTop - |
| 223 | + document.getElementById('matches').offsetTop; |
| 224 | + selected = resultNum; |
| 225 | + } |
| 226 | + } |
| 227 | + |
| 228 | + for (var i = 0; i < results.length; i++) { |
| 229 | + var icon = new google.maps.MarkerImage( |
| 230 | + getMarkerImageUrl(i), |
| 231 | + new google.maps.Size(20, 34), |
| 232 | + new google.maps.Point(0, 0), |
| 233 | + new google.maps.Point(10, 34) |
| 234 | + ); |
| 235 | + |
| 236 | + markers[i] = new google.maps.Marker({ |
| 237 | + 'position': results[i].geometry.location, |
| 238 | + 'map': map, |
| 239 | + 'icon': icon, |
| 240 | + 'shadow': shadow |
| 241 | + }); |
| 242 | + |
| 243 | + google.maps.event.addListener(markers[i], 'click', openInfoWindow(i, results[i], markers[i])); |
| 244 | + |
| 245 | + resultsListHtml += getResultsListItem(i, getResultDescription(results[i])); |
| 246 | + } |
| 247 | + |
| 248 | + document.getElementById("matches").innerHTML = resultsListHtml; |
| 249 | + document.getElementById("p0").style.border = "none"; |
| 250 | + document.getElementById("matches").style.display = "block"; |
| 251 | + |
| 252 | + if (reverse){ |
| 253 | + // make a smooth movement to the clicked position |
| 254 | + map.panTo(clickMarker.getPosition()); |
| 255 | + google.maps.event.addListenerOnce(map, 'idle', function(){ |
| 256 | + selectMarker(0); |
| 257 | + }); |
| 258 | + } |
| 259 | + else { |
| 260 | + zoomToViewports(results); |
| 261 | + selectMarker(0); |
| 262 | + } |
| 263 | + } |
| 264 | + |
| 265 | + function getMarkerImageUrl(resultNum) { |
| 266 | + return MAPFILES_URL + "marker" + String.fromCharCode(65 + resultNum) + ".png"; |
| 267 | + } |
| 268 | + |
| 269 | + function addLocationRow( lat, lon ) { |
| 270 | + var addRow = $( '#' + mapDivId + '_addrow' ); |
| 271 | + |
| 272 | + addRow.remove(); |
| 273 | + appendTableRow( rowNr, lat, lon ); // TODO |
| 274 | + table.append( addRow ); |
| 275 | + $( '#' + mapDivId + '_addfield' ).attr( 'value', '' ); |
| 276 | + $( "#" + mapDivId + '_addbutton' ).button().click( onAddButtonClick ); |
| 277 | + rowNr++; |
| 278 | + |
| 279 | + updateInput(); |
| 280 | + } |
| 281 | + |
| 282 | + function onRemoveButtonClick() { |
| 283 | + $( '#' + mapDivId + '_row_' + $( this ).attr( 'rowid' ) ).remove(); |
| 284 | + updateInput(); |
| 285 | + return false; |
| 286 | + } |
| 287 | + |
| 288 | + function appendTableRow( i, lat, lon ) { |
| 289 | + table.append( |
| 290 | + '<tr id="' + mapDivId + '_row_' + i + '"><td>' + |
| 291 | + coord.dms( lat, lon ) + |
| 292 | + '</td><td>' + |
| 293 | + '<button class="forminput-remove" rowid="' + i + '" id="' + mapDivId + '_addbutton_' + i + '">' + |
| 294 | + mediaWiki.msg( 'semanticmaps-forminput-remove' ) + |
| 295 | + '</button>' + |
| 296 | + '</td></tr>' |
| 297 | + ); |
| 298 | + |
| 299 | + $( "#" + mapDivId + '_addbutton_' + i ).button().click( onRemoveButtonClick ); |
| 300 | + } |
| 301 | + |
| 302 | + |
| 303 | + |
| 304 | + function updateInput() { |
| 305 | + var locations = []; |
| 306 | + |
| 307 | + //$( '' ).each(); |
| 308 | + |
| 309 | + updateInputValue( semanticMaps.buildInputValue( locations ) ); |
| 310 | + } |
| 311 | + |
| 312 | + function updateInputValue( value ) { |
| 313 | + $( '#' + mapDivId + '_values' ).text( value ); |
| 314 | + } |
| 315 | + |
| 316 | + return this; |
| 317 | + |
| 318 | +}; })( jQuery ); |
\ No newline at end of file |
Property changes on: trunk/extensions/SemanticMaps/includes/services/GoogleMaps3/jquery.gmapsmultiinput.js |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 319 | + native |
Index: trunk/extensions/SemanticMaps/includes/services/YahooMaps/SM_YahooMapsForms.js |
— | — | @@ -0,0 +1,62 @@ |
| 2 | + /** |
| 3 | + * Javascript functions for Yahoo! Maps functionality in Semantic Maps |
| 4 | + * |
| 5 | + * @file SM_YahooMapsFunctions.js |
| 6 | + * @ingroup SMYahooMaps |
| 7 | + * |
| 8 | + * @author Jeroen De Dauw |
| 9 | + */ |
| 10 | + |
| 11 | +/** |
| 12 | + * This function holds specific functionality for the Yahoo! Maps form input of Semantic Maps. |
| 13 | + */ |
| 14 | +function makeFormInputYahooMap( mapName, locationFieldName, lat, lon, zoom, type, types, controls, scrollWheelZoom, marker_lat, marker_lon ) { |
| 15 | + var map = createYahooMap( |
| 16 | + document.getElementById( mapName ), |
| 17 | + new YGeoPoint( lat, lon ), |
| 18 | + zoom, |
| 19 | + type, |
| 20 | + types, |
| 21 | + controls, |
| 22 | + scrollWheelZoom, |
| 23 | + [ { "lat": marker_lat, "lon": marker_lon, "title": "", "label": "", "icon": "" } ] |
| 24 | + ); |
| 25 | + |
| 26 | + // Show a starting marker only if marker coordinates are provided. |
| 27 | + if ( marker_lat != null && marker_lon != null ) { |
| 28 | + map.addOverlay( createYMarker( new YGeoPoint( marker_lat, marker_lon ) ) ); |
| 29 | + } |
| 30 | + |
| 31 | + // Click event handler for updating the location of the marker. |
| 32 | + YEvent.Capture(map, EventsList.MouseClick, |
| 33 | + function(_e, point) { |
| 34 | + var loc = new YGeoPoint(point.Lat, point.Lon) |
| 35 | + map.removeMarkersAll(); |
| 36 | + document.getElementById(locationFieldName).value = convertLatToDMS(point.Lat)+', '+convertLngToDMS(point.Lon); |
| 37 | + map.addMarker(loc); |
| 38 | + map.panToLatLon(loc); |
| 39 | + } |
| 40 | + ); |
| 41 | + |
| 42 | + // Make the map variable available for other functions |
| 43 | + if (!window.YMaps) window.YMaps = new Object; |
| 44 | + eval("window.YMaps." + mapName + " = map;"); |
| 45 | +} |
| 46 | + |
| 47 | +/** |
| 48 | + * This function holds specific functionality for the Yahoo! Maps form input of Semantic Maps |
| 49 | + * TODO: Refactor as much code as possible to non specific functions |
| 50 | + */ |
| 51 | +function showYAddress(address, mapName, outputElementName, notFoundFormat) { |
| 52 | + var map = YMaps[mapName]; |
| 53 | + |
| 54 | + map.removeMarkersAll(); |
| 55 | + map.drawZoomAndCenter(address); |
| 56 | + |
| 57 | + YEvent.Capture(map, EventsList.onEndGeoCode, |
| 58 | + function(resultObj) { |
| 59 | + map.addOverlay(new YMarker(resultObj.GeoPoint)); |
| 60 | + document.getElementById(outputElementName).value = convertLatToDMS(resultObj.GeoPoint.Lat) + ', ' + convertLngToDMS(resultObj.GeoPoint.Lon); |
| 61 | + } |
| 62 | + ); |
| 63 | +} |
\ No newline at end of file |
Property changes on: trunk/extensions/SemanticMaps/includes/services/YahooMaps/SM_YahooMapsForms.js |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 64 | + native |
Index: trunk/extensions/SemanticMaps/includes/services/YahooMaps/SM_YahooMaps.php |
— | — | @@ -0,0 +1,37 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * This groupe contains all Yahoo! Maps related files of the Semantic Maps extension. |
| 6 | + * |
| 7 | + * @defgroup SMYahooMaps Yahoo! Maps |
| 8 | + * @ingroup SemanticMaps |
| 9 | + */ |
| 10 | + |
| 11 | +/** |
| 12 | + * This file holds the general information for the Yahoo! Maps service. |
| 13 | + * |
| 14 | + * @file SM_YahooMaps.php |
| 15 | + * @ingroup SMYahooMaps |
| 16 | + * |
| 17 | + * @author Jeroen De Dauw |
| 18 | + */ |
| 19 | + |
| 20 | +if ( !defined( 'MEDIAWIKI' ) ) { |
| 21 | + die( 'Not an entry point.' ); |
| 22 | +} |
| 23 | + |
| 24 | +$wgHooks['MappingServiceLoad'][] = 'smfInitYahooMaps'; |
| 25 | + |
| 26 | +function smfInitYahooMaps() { |
| 27 | + global $wgAutoloadClasses; |
| 28 | + |
| 29 | + $wgAutoloadClasses['SMYahooMapsQP'] = dirname( __FILE__ ) . '/SM_YahooMapsQP.php'; |
| 30 | + |
| 31 | + // TODO: the if should not be needed, but when omitted, a fatal error occurs cause the class that's extended by this one is not found. |
| 32 | + if ( defined( 'SF_VERSION' ) ) $wgAutoloadClasses['SMYahooMapsFormInput'] = dirname( __FILE__ ) . '/SM_YahooMapsFormInput.php'; |
| 33 | + |
| 34 | + MapsMappingServices::registerServiceFeature( 'yahoomaps', 'qp', 'SMMapPrinter' ); |
| 35 | + MapsMappingServices::registerServiceFeature( 'yahoomaps', 'fi', 'SMYahooMapsFormInput' ); |
| 36 | + |
| 37 | + return true; |
| 38 | +} |
\ No newline at end of file |
Property changes on: trunk/extensions/SemanticMaps/includes/services/YahooMaps/SM_YahooMaps.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 39 | + native |
Index: trunk/extensions/SemanticMaps/includes/services/YahooMaps/ext.sm.yahoomaps.js |
— | — | @@ -0,0 +1,3 @@ |
| 2 | +/** |
| 3 | + * |
| 4 | + */ |
\ No newline at end of file |
Property changes on: trunk/extensions/SemanticMaps/includes/services/YahooMaps/ext.sm.yahoomaps.js |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 5 | + native |
Index: trunk/extensions/SemanticMaps/includes/services/YahooMaps/SM_YahooMapsFormInput.php |
— | — | @@ -0,0 +1,57 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * File holding the SMYahooMapsFormInput class. |
| 6 | + * |
| 7 | + * @file SM_YahooMapsFormInput.php |
| 8 | + * @ingroup SMYahooMaps |
| 9 | + * |
| 10 | + * @author Jeroen De Dauw |
| 11 | + */ |
| 12 | + |
| 13 | +/** |
| 14 | + * Class for Yahoo Maps! form inputs. |
| 15 | + * |
| 16 | + * @ingroup SMYahooMaps |
| 17 | + * |
| 18 | + * @author Jeroen De Dauw |
| 19 | + */ |
| 20 | +class SMYahooMapsFormInput extends SMFormInput { |
| 21 | + |
| 22 | + /** |
| 23 | + * @see SMFormInput::getShowAddressFunction |
| 24 | + * |
| 25 | + * @since 0.6.5 |
| 26 | + */ |
| 27 | + protected function getShowAddressFunction() { |
| 28 | + global $egYahooMapsKey; |
| 29 | + return $egYahooMapsKey == '' ? false : 'showYAddress'; |
| 30 | + } |
| 31 | + |
| 32 | + /** |
| 33 | + * @see MapsMapFeature::addFormDependencies() |
| 34 | + */ |
| 35 | + protected function addFormDependencies() { |
| 36 | + global $wgOut; |
| 37 | + global $smgScriptPath, $smgStyleVersion; |
| 38 | + |
| 39 | + $this->service->addDependency( Html::linkedScript( "$smgScriptPath/includes/services/YahooMaps/SM_YahooMapsForms.js?$smgStyleVersion" ) ); |
| 40 | + $this->service->addDependencies( $wgOut ); |
| 41 | + } |
| 42 | + |
| 43 | + /** |
| 44 | + * @see MapsMapFeature::addSpecificMapHTML |
| 45 | + */ |
| 46 | + public function addSpecificMapHTML() { |
| 47 | + return Html::element( |
| 48 | + 'div', |
| 49 | + array( |
| 50 | + 'id' => $this->service->getMapId( false ), |
| 51 | + 'style' => "width: $this->width; height: $this->height; background-color: #cccccc; overflow: hidden;", |
| 52 | + ), |
| 53 | + wfMsg( 'maps-loading-map' ) |
| 54 | + ); |
| 55 | + |
| 56 | + } |
| 57 | + |
| 58 | +} |
\ No newline at end of file |
Property changes on: trunk/extensions/SemanticMaps/includes/services/YahooMaps/SM_YahooMapsFormInput.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 59 | + native |
Index: trunk/extensions/SemanticMaps/includes/services/YahooMaps/jquery.yahoomapsinput.js |
— | — | @@ -0,0 +1,18 @@ |
| 2 | +/** |
| 3 | + * JavasSript for the Yahoo! Maps form input of the Semantic Maps extension. |
| 4 | + * @see http://www.mediawiki.org/wiki/Extension:Semantic_Maps |
| 5 | + * |
| 6 | + * @since 0.8 |
| 7 | + * @ingroup SemanticMaps |
| 8 | + * |
| 9 | + * @licence GNU GPL v3 |
| 10 | + * @author Jeroen De Dauw <jeroendedauw at gmail dot com> |
| 11 | + */ |
| 12 | + |
| 13 | +(function( $ ){ $.fn.yahoomapsinput = function( options ) { |
| 14 | + |
| 15 | + |
| 16 | + |
| 17 | + return this; |
| 18 | + |
| 19 | +}; })( jQuery ); |
\ No newline at end of file |
Property changes on: trunk/extensions/SemanticMaps/includes/services/YahooMaps/jquery.yahoomapsinput.js |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 20 | + native |
Index: trunk/extensions/SemanticMaps/includes/services/OpenLayers/SM_OpenLayers.php |
— | — | @@ -0,0 +1,56 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * This groupe contains all OpenLayers related files of the Semantic Maps extension. |
| 6 | + * |
| 7 | + * @defgroup SMOpenLayers OpenLayers |
| 8 | + * @ingroup SemanticMaps |
| 9 | + */ |
| 10 | + |
| 11 | +/** |
| 12 | + * This file holds the general information for the OpenLayers service. |
| 13 | + * |
| 14 | + * @file SM_OpenLayers.php |
| 15 | + * @ingroup SMOpenLayers |
| 16 | + * |
| 17 | + * @author Jeroen De Dauw |
| 18 | + */ |
| 19 | + |
| 20 | +if ( !defined( 'MEDIAWIKI' ) ) { |
| 21 | + die( 'Not an entry point.' ); |
| 22 | +} |
| 23 | + |
| 24 | +$wgResourceModules['ext.sm.fi.openlayers'] = array( |
| 25 | + 'dependencies' => array( 'ext.maps.openlayers', 'jquery.ui.button', 'jquery.ui.dialog' ), |
| 26 | + 'localBasePath' => dirname( __FILE__ ), |
| 27 | + 'remoteBasePath' => $smgScriptPath . '/includes/services/OpenLayers', |
| 28 | + 'group' => 'ext.semanticmaps', |
| 29 | + 'scripts' => array( |
| 30 | + 'jquery.openlayersinput.js', |
| 31 | + 'ext.sm.openlayersinput.js' |
| 32 | + ), |
| 33 | + 'messages' => array( |
| 34 | + 'semanticmaps_enteraddresshere', |
| 35 | + 'semanticmaps-updatemap', |
| 36 | + 'semanticmaps_lookupcoordinates', |
| 37 | + 'semanticmaps-forminput-remove', |
| 38 | + 'semanticmaps-forminput-add', |
| 39 | + 'semanticmaps-forminput-locations' |
| 40 | + ) |
| 41 | +); |
| 42 | + |
| 43 | +$wgHooks['MappingServiceLoad'][] = 'smfInitOpenLayers'; |
| 44 | + |
| 45 | +function smfInitOpenLayers() { |
| 46 | + global $wgAutoloadClasses; |
| 47 | + |
| 48 | + $wgAutoloadClasses['SMOpenLayersQP'] = dirname( __FILE__ ) . '/SM_OpenLayersQP.php'; |
| 49 | + |
| 50 | + // TODO: the if should not be needed, but when omitted, a fatal error occurs cause the class that's extended by this one is not found. |
| 51 | + if ( defined( 'SF_VERSION' ) ) $wgAutoloadClasses['SMOpenLayersFormInput'] = dirname( __FILE__ ) . '/SM_OpenLayersFormInput.php'; |
| 52 | + |
| 53 | + MapsMappingServices::registerServiceFeature( 'openlayers', 'qp', 'SMMapPrinter' ); |
| 54 | + MapsMappingServices::registerServiceFeature( 'openlayers', 'fi', 'SMOpenLayersFormInput' ); |
| 55 | + |
| 56 | + return true; |
| 57 | +} |
\ No newline at end of file |
Property changes on: trunk/extensions/SemanticMaps/includes/services/OpenLayers/SM_OpenLayers.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 58 | + native |
Index: trunk/extensions/SemanticMaps/includes/services/OpenLayers/ext.sm.openlayersinput.js |
— | — | @@ -0,0 +1,25 @@ |
| 2 | +/** |
| 3 | + * JavasSript for the Google Maps v3 form input in the Semantic Maps extension. |
| 4 | + * @see http://www.mediawiki.org/wiki/Extension:Semantic_Maps |
| 5 | + * |
| 6 | + * @since 0.8 |
| 7 | + * @ingroup SemanticMaps |
| 8 | + * |
| 9 | + * @licence GNU GPL v3 |
| 10 | + * @author Jeroen De Dauw <jeroendedauw at gmail dot com> |
| 11 | + */ |
| 12 | + |
| 13 | +jQuery(document).ready(function() { |
| 14 | + if ( true ) { |
| 15 | + for ( i in window.maps.openlayers_forminputs ) { |
| 16 | + jQuery( '#' + i + '_forminput' ).openlayersinput( i, window.maps.openlayers_forminputs[i] ); |
| 17 | + } |
| 18 | + } |
| 19 | + else { |
| 20 | + alert( mediaWiki.msg( 'maps-openlayers-incompatbrowser' ) ); |
| 21 | + |
| 22 | + for ( i in window.maps.openlayers_forminputs ) { |
| 23 | + jQuery( '#' + i + '_forminput' ).text( mediaWiki.msg( 'maps-load-failed' ) ); |
| 24 | + } |
| 25 | + } |
| 26 | +}); |
Property changes on: trunk/extensions/SemanticMaps/includes/services/OpenLayers/ext.sm.openlayersinput.js |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 27 | + native |
Index: trunk/extensions/SemanticMaps/includes/services/OpenLayers/SM_OpenLayersFormInput.php |
— | — | @@ -0,0 +1,42 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * Class for OpenLayers form inputs. |
| 6 | + * |
| 7 | + * @file SM_OpenLayersFormInput.php |
| 8 | + * @ingroup SMOpenLayers |
| 9 | + * |
| 10 | + * @author Jeroen De Dauw |
| 11 | + */ |
| 12 | +class SMOpenLayersFormInput extends SMFormInput { |
| 13 | + |
| 14 | + /** |
| 15 | + * @see SMFormInput::getResourceModules |
| 16 | + * |
| 17 | + * @since 0.8 |
| 18 | + * |
| 19 | + * @return array of string |
| 20 | + */ |
| 21 | + protected function getResourceModules() { |
| 22 | + return array_merge( parent::getResourceModules(), array( 'ext.sm.fi.openlayers' ) ); |
| 23 | + } |
| 24 | + |
| 25 | + /** |
| 26 | + * Returns a PHP object to encode to JSON with the map data. |
| 27 | + * |
| 28 | + * @since 0.8 |
| 29 | + * |
| 30 | + * @param array $params |
| 31 | + * @param Parser $parser |
| 32 | + * |
| 33 | + * @return mixed |
| 34 | + */ |
| 35 | + protected function getJSONObject( array $params, Parser $parser ) { |
| 36 | + global $egMapsGeoNamesUser; |
| 37 | + |
| 38 | + $params['geonamesusername'] = $egMapsGeoNamesUser; |
| 39 | + |
| 40 | + return $params; |
| 41 | + } |
| 42 | + |
| 43 | +} |
Property changes on: trunk/extensions/SemanticMaps/includes/services/OpenLayers/SM_OpenLayersFormInput.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 44 | + native |
Index: trunk/extensions/SemanticMaps/includes/services/OpenLayers/jquery.openlayersinput.js |
— | — | @@ -0,0 +1,125 @@ |
| 2 | +/** |
| 3 | + * JavasSript for the OpenLayers form input of the Semantic Maps extension. |
| 4 | + * @see http://www.mediawiki.org/wiki/Extension:Semantic_Maps |
| 5 | + * |
| 6 | + * @since 0.8 |
| 7 | + * @ingroup SemanticMaps |
| 8 | + * |
| 9 | + * @licence GNU GPL v3 |
| 10 | + * @author Jeroen De Dauw <jeroendedauw at gmail dot com> |
| 11 | + */ |
| 12 | + |
| 13 | +(function( $ ){ $.fn.openlayersinput = function( mapDivId, options ) { |
| 14 | + |
| 15 | + var self = this; |
| 16 | + |
| 17 | + /** |
| 18 | + * @param {OpenLayers.LonLat} location |
| 19 | + * @param {string} title |
| 20 | + */ |
| 21 | + this.showLocation = function( location, title ) { |
| 22 | + var markerLayer = self.mapDiv.map.getLayer('markerLayer'); |
| 23 | + var markerCollection = markerLayer.markers; |
| 24 | + |
| 25 | + for ( var i = markerCollection.length - 1; i >= 0; i-- ) { |
| 26 | + markerLayer.removeMarker( markerCollection[i] ); |
| 27 | + } |
| 28 | + |
| 29 | + var normalProjectionLocation = new OpenLayers.LonLat( location.lon, location.lat ); |
| 30 | + normalProjectionLocation.transform( new OpenLayers.Projection( "EPSG:900913" ), new OpenLayers.Projection( "EPSG:4326" ) ); |
| 31 | + |
| 32 | + var text = coord.dms( normalProjectionLocation.lat, normalProjectionLocation.lon ); |
| 33 | + |
| 34 | + if ( title != '' ) { |
| 35 | + text = '<b>' + title + '</b><hr />' + text; |
| 36 | + } |
| 37 | + |
| 38 | + markerLayer.addMarker( |
| 39 | + this.mapDiv.getOLMarker( |
| 40 | + markerLayer, |
| 41 | + { |
| 42 | + lonlat: location, |
| 43 | + text: text, |
| 44 | + title: title, |
| 45 | + icon: options.icon |
| 46 | + } |
| 47 | + ) |
| 48 | + ); |
| 49 | + |
| 50 | + self.mapDiv.map.panTo( location ); |
| 51 | + |
| 52 | + self.input.attr( 'value', semanticMaps.buildInputValue( [ normalProjectionLocation ] ) ); |
| 53 | + }; |
| 54 | + |
| 55 | + this.projectAndShowLocation = function( location, title ) { |
| 56 | + location.transform( new OpenLayers.Projection( "EPSG:4326" ), new OpenLayers.Projection( "EPSG:900913" ) ); |
| 57 | + this.showLocation( location, title ); |
| 58 | + }; |
| 59 | + |
| 60 | + this.showCoordinate = function( coordinate ) { |
| 61 | + this.projectAndShowLocation( new OpenLayers.LonLat( coordinate.lon, coordinate.lat ), '' ); |
| 62 | + }; |
| 63 | + |
| 64 | + this.geocodeAddress = function( address ) { |
| 65 | + $.getJSON( |
| 66 | + 'http://api.geonames.org/searchJSON?callback=?', |
| 67 | + { |
| 68 | + 'q': address, |
| 69 | + 'username': options.geonamesusername, |
| 70 | + //'formatted': 'true', |
| 71 | + 'maxRows': 1 |
| 72 | + }, |
| 73 | + function( data ) { |
| 74 | + if ( data.totalResultsCount ) { |
| 75 | + if ( data.totalResultsCount > 0 ) { |
| 76 | + self.projectAndShowLocation( new OpenLayers.LonLat( data.geonames[0].lng, data.geonames[0].lat ), address ); |
| 77 | + } |
| 78 | + else { |
| 79 | + // TODO: notify no result |
| 80 | + } |
| 81 | + } |
| 82 | + else { |
| 83 | + // TODO: error |
| 84 | + } |
| 85 | + } |
| 86 | + ); |
| 87 | + }; |
| 88 | + |
| 89 | + this.mapforminput( mapDivId, options ); |
| 90 | + |
| 91 | + this.mapDiv.openlayers( mapDivId, options ); |
| 92 | + |
| 93 | + var clickControl = new (OpenLayers.Class(OpenLayers.Control, { |
| 94 | + defaultHandlerOptions: { |
| 95 | + 'single': true, |
| 96 | + 'double': false, |
| 97 | + 'pixelTolerance': 0, |
| 98 | + 'stopSingle': false, |
| 99 | + 'stopDouble': false |
| 100 | + }, |
| 101 | + |
| 102 | + initialize: function(options) { |
| 103 | + this.handlerOptions = OpenLayers.Util.extend( |
| 104 | + {}, this.defaultHandlerOptions |
| 105 | + ); |
| 106 | + OpenLayers.Control.prototype.initialize.apply( |
| 107 | + this, arguments |
| 108 | + ); |
| 109 | + this.handler = new OpenLayers.Handler.Click( |
| 110 | + this, { |
| 111 | + 'click': this.trigger |
| 112 | + }, this.handlerOptions |
| 113 | + ); |
| 114 | + }, |
| 115 | + |
| 116 | + trigger: function(e) { |
| 117 | + self.showLocation( self.mapDiv.map.getLonLatFromViewPortPx(e.xy), 'Click' ); // TODO |
| 118 | + } |
| 119 | + |
| 120 | + }))(); |
| 121 | + this.mapDiv.map.addControl( clickControl ); |
| 122 | + clickControl.activate(); |
| 123 | + |
| 124 | + return this; |
| 125 | + |
| 126 | +}; })( jQuery ); |
\ No newline at end of file |
Property changes on: trunk/extensions/SemanticMaps/includes/services/OpenLayers/jquery.openlayersinput.js |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 127 | + native |
Index: trunk/extensions/SemanticMaps/includes/services/GoogleMaps/SM_GoogleMaps.php |
— | — | @@ -0,0 +1,33 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * This groupe contains all Google Maps related files of the Semantic Maps extension. |
| 6 | + * |
| 7 | + * @defgroup SMGoogleMaps Google Maps |
| 8 | + * @ingroup SemanticMaps |
| 9 | + */ |
| 10 | + |
| 11 | +/** |
| 12 | + * This file holds the general information for the Google Maps service. |
| 13 | + * |
| 14 | + * @file SM_GoogleMaps.php |
| 15 | + * @ingroup SMGoogleMaps |
| 16 | + * |
| 17 | + * @author Jeroen De Dauw |
| 18 | + */ |
| 19 | + |
| 20 | +if ( !defined( 'MEDIAWIKI' ) ) { |
| 21 | + die( 'Not an entry point.' ); |
| 22 | +} |
| 23 | + |
| 24 | +$wgHooks['MappingServiceLoad'][] = 'smfInitGoogleMaps'; |
| 25 | + |
| 26 | +function smfInitGoogleMaps() { |
| 27 | + global $wgAutoloadClasses; |
| 28 | + |
| 29 | + $wgAutoloadClasses['SMGoogleMapsQP'] = dirname( __FILE__ ) . '/SM_GoogleMapsQP.php'; |
| 30 | + |
| 31 | + MapsMappingServices::registerServiceFeature( 'googlemaps2', 'qp', 'SMMapPrinter' ); |
| 32 | + |
| 33 | + return true; |
| 34 | +} |
\ No newline at end of file |
Property changes on: trunk/extensions/SemanticMaps/includes/services/GoogleMaps/SM_GoogleMaps.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 35 | + native |
Index: trunk/extensions/SemanticMaps/includes/SM_GeoCoordsValue.php |
— | — | @@ -0,0 +1,391 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * Implementation of datavalues that are geographic coordinates. |
| 6 | + * |
| 7 | + * @since 0.6 |
| 8 | + * |
| 9 | + * @file SM_GeoCoordsValue.php |
| 10 | + * @ingroup SemanticMaps |
| 11 | + * @ingroup SMWDataValues |
| 12 | + * |
| 13 | + * @author Jeroen De Dauw |
| 14 | + * @author Markus Krötzsch |
| 15 | + */ |
| 16 | +class SMGeoCoordsValue extends SMWDataValue { |
| 17 | + |
| 18 | + protected $coordinateSet; |
| 19 | + protected $wikiValue; |
| 20 | + |
| 21 | + /** |
| 22 | + * Set the default format to 'map' when the requested properties are |
| 23 | + * of type geographic coordinates. |
| 24 | + * |
| 25 | + * TODO: have a setting to turn this off and have it off by default for #show |
| 26 | + * |
| 27 | + * @since 0.6.5 |
| 28 | + * |
| 29 | + * @param $format Mixed: The format (string), or false when not set yet |
| 30 | + * @param $printRequests Array: The print requests made |
| 31 | + * @param $params Array: The parameters for the query printer |
| 32 | + * |
| 33 | + * @return true |
| 34 | + */ |
| 35 | + public static function addGeoCoordsDefaultFormat( &$format, array $printRequests, array $params ) { |
| 36 | + // Only set the format when not set yet. This allows other extensions to override the Semantic Maps behaviour. |
| 37 | + if ( $format === false ) { |
| 38 | + // Only apply when there is more then one print request. |
| 39 | + // This way requests comming from #show are ignored. |
| 40 | + if ( count( $printRequests ) > 1 ) { |
| 41 | + $allCoords = true; |
| 42 | + $first = true; |
| 43 | + |
| 44 | + // Loop through the print requests to determine their types. |
| 45 | + foreach( $printRequests as $printRequest ) { |
| 46 | + // Skip the first request, as it's the object. |
| 47 | + if ( $first ) { |
| 48 | + $first = false; |
| 49 | + continue; |
| 50 | + } |
| 51 | + |
| 52 | + $typeId = $printRequest->getTypeID(); |
| 53 | + |
| 54 | + if ( $typeId != '_geo' ) { |
| 55 | + $allCoords = false; |
| 56 | + break; |
| 57 | + } |
| 58 | + } |
| 59 | + |
| 60 | + // If they are all coordinates, set the result format to 'map'. |
| 61 | + if ( $allCoords ) { |
| 62 | + $format = 'map'; |
| 63 | + } |
| 64 | + } |
| 65 | + |
| 66 | + } |
| 67 | + |
| 68 | + return true; |
| 69 | + } |
| 70 | + |
| 71 | + /** |
| 72 | + * Adds support for the geographical coordinate data type to Semantic MediaWiki. |
| 73 | + * |
| 74 | + * @since 0.6 |
| 75 | + * |
| 76 | + * TODO: i18n keys still need to be moved |
| 77 | + * |
| 78 | + * @return true |
| 79 | + */ |
| 80 | + public static function initGeoCoordsType() { |
| 81 | + SMWDataValueFactory::registerDatatype( '_geo', __CLASS__, 'Geographic coordinate' ); |
| 82 | + return true; |
| 83 | + } |
| 84 | + |
| 85 | + /** |
| 86 | + * Defines the signature for geographical fields needed for the smw_coords table. |
| 87 | + * |
| 88 | + * @since 0.6 |
| 89 | + * |
| 90 | + * @param array $fieldTypes The field types defined by SMW, passed by reference. |
| 91 | + * |
| 92 | + * @return true |
| 93 | + */ |
| 94 | + public static function initGeoCoordsFieldTypes( array $fieldTypes ) { |
| 95 | + global $smgUseSpatialExtensions; |
| 96 | + |
| 97 | + // Only add the table when the SQL store is not a postgres database, and it has not been added by SMW itself. |
| 98 | + if ( $smgUseSpatialExtensions && !array_key_exists( 'c', $fieldTypes ) ) { |
| 99 | + $fieldTypes['c'] = 'Point NOT NULL'; |
| 100 | + } |
| 101 | + |
| 102 | + return true; |
| 103 | + } |
| 104 | + |
| 105 | + /** |
| 106 | + * Defines the layout for the smw_coords table which is used to store value of the GeoCoords type. |
| 107 | + * |
| 108 | + * @since 0.6 |
| 109 | + * |
| 110 | + * @param array $propertyTables The property tables defined by SMW, passed by reference. |
| 111 | + */ |
| 112 | + public static function initGeoCoordsTable( array $propertyTables ) { |
| 113 | + global $smgUseSpatialExtensions; |
| 114 | + |
| 115 | + // No spatial extensions support for postgres yet, so just store as 2 float fields. |
| 116 | + $signature = $smgUseSpatialExtensions ? array( 'point' => 'c' ) : array( 'lat' => 'f', 'lon' => 'f' ); |
| 117 | + $indexes = $smgUseSpatialExtensions ? array( array( 'point', 'SPATIAL INDEX' ) ) : array_keys( $signature ); |
| 118 | + |
| 119 | + $propertyTables['smw_coords'] = new SMWSQLStore2Table( |
| 120 | + 'sm_coords', |
| 121 | + $signature, |
| 122 | + $indexes // These are the fields that should be indexed. |
| 123 | + ); |
| 124 | + |
| 125 | + return true; |
| 126 | + } |
| 127 | + |
| 128 | + /** |
| 129 | + * @see SMWDataValue::parseUserValue |
| 130 | + * |
| 131 | + * @since 0.6 |
| 132 | + */ |
| 133 | + protected function parseUserValue( $value ) { |
| 134 | + $this->parseUserValueOrQuery( $value ); |
| 135 | + } |
| 136 | + |
| 137 | + /** |
| 138 | + * Overwrite SMWDataValue::getQueryDescription() to be able to process |
| 139 | + * comparators between all values. |
| 140 | + * |
| 141 | + * @since 0.6 |
| 142 | + * |
| 143 | + * @param string $value |
| 144 | + * |
| 145 | + * @return SMWDescription |
| 146 | + */ |
| 147 | + public function getQueryDescription( $value ) { |
| 148 | + return $this->parseUserValueOrQuery( $value, true ); |
| 149 | + } |
| 150 | + |
| 151 | + /** |
| 152 | + * Parses the value into the coordinates and any meta data provided, such as distance. |
| 153 | + * |
| 154 | + * @since 0.6 |
| 155 | + * |
| 156 | + * @param $value String |
| 157 | + * @param $asQuery Boolean |
| 158 | + */ |
| 159 | + protected function parseUserValueOrQuery( $value, $asQuery = false ) { |
| 160 | + $this->wikiValue = $value; |
| 161 | + |
| 162 | + $comparator = SMW_CMP_EQ; |
| 163 | + |
| 164 | + if ( $value == '' ) { |
| 165 | + $this->addError( wfMsg( 'smw_novalues' ) ); |
| 166 | + } else { |
| 167 | + SMWDataValue::prepareValue( $value, $comparator ); |
| 168 | + |
| 169 | + $parts = explode( '(', $value ); |
| 170 | + |
| 171 | + $coordinates = trim( array_shift( $parts ) ); |
| 172 | + $distance = count( $parts ) > 0 ? trim( array_shift( $parts ) ) : false; |
| 173 | + |
| 174 | + if ( $distance !== false ) { |
| 175 | + $distance = substr( trim( $distance ), 0, -1 ); |
| 176 | + |
| 177 | + if ( !MapsDistanceParser::isDistance( $distance ) ) { |
| 178 | + $this->addError( wfMsgExt( 'semanticmaps-unrecognizeddistance', array( 'parsemag' ), $distance ) ); |
| 179 | + $distance = false; |
| 180 | + } |
| 181 | + } |
| 182 | + |
| 183 | + $parsedCoords = MapsCoordinateParser::parseCoordinates( $coordinates ); |
| 184 | + if ( $parsedCoords ) { |
| 185 | + $this->coordinateSet = $parsedCoords; |
| 186 | + |
| 187 | + if ( $this->m_caption === false && !$asQuery ) { |
| 188 | + global $smgQPCoodFormat, $smgQPCoodDirectional; |
| 189 | + $this->m_caption = MapsCoordinateParser::formatCoordinates( $parsedCoords, $smgQPCoodFormat, $smgQPCoodDirectional ); |
| 190 | + } |
| 191 | + } else { |
| 192 | + $this->addError( wfMsgExt( 'maps_unrecognized_coords', array( 'parsemag' ), $coordinates, 1 ) ); |
| 193 | + } |
| 194 | + } |
| 195 | + |
| 196 | + if ( $asQuery ) { |
| 197 | + $this->setUserValue( $value ); |
| 198 | + |
| 199 | + switch ( true ) { |
| 200 | + case !$this->isValid() : |
| 201 | + return new SMWThingDescription(); |
| 202 | + break; |
| 203 | + case $distance !== false : |
| 204 | + return new SMAreaValueDescription( $this, $comparator, $distance ); |
| 205 | + break; |
| 206 | + default : |
| 207 | + return new SMGeoCoordsValueDescription( $this, $comparator ); |
| 208 | + break; |
| 209 | + } |
| 210 | + } |
| 211 | + } |
| 212 | + |
| 213 | + /** |
| 214 | + * @see SMWDataValue::parseDBkeys |
| 215 | + * |
| 216 | + * @since 0.6 |
| 217 | + */ |
| 218 | + protected function parseDBkeys( $args ) { |
| 219 | + global $smgQPCoodFormat, $smgQPCoodDirectional; |
| 220 | + |
| 221 | + $this->coordinateSet['lat'] = (float)$args[0]; |
| 222 | + $this->coordinateSet['lon'] = (float)$args[1]; |
| 223 | + |
| 224 | + $this->m_caption = MapsCoordinateParser::formatCoordinates( |
| 225 | + $this->coordinateSet, |
| 226 | + $smgQPCoodFormat, |
| 227 | + $smgQPCoodDirectional |
| 228 | + ); |
| 229 | + |
| 230 | + $this->wikiValue = $this->m_caption; |
| 231 | + } |
| 232 | + |
| 233 | + /** |
| 234 | + * @see SMWDataValue::getDBkeys |
| 235 | + * |
| 236 | + * @since 0.6 |
| 237 | + */ |
| 238 | + public function getDBkeys() { |
| 239 | + $this->unstub(); |
| 240 | + |
| 241 | + return array( |
| 242 | + $this->coordinateSet['lat'], |
| 243 | + $this->coordinateSet['lon'] |
| 244 | + ); |
| 245 | + } |
| 246 | + |
| 247 | + /** |
| 248 | + * @see SMWDataValue::getSignature |
| 249 | + * |
| 250 | + * @since 0.6 |
| 251 | + */ |
| 252 | + public function getSignature() { |
| 253 | + return 'ff'; |
| 254 | + } |
| 255 | + |
| 256 | + /** |
| 257 | + * @see SMWDataValue::getShortWikiText |
| 258 | + * |
| 259 | + * @since 0.6 |
| 260 | + */ |
| 261 | + public function getShortWikiText( $linked = null ) { |
| 262 | + if ( $this->isValid() && ( $linked !== null ) && ( $linked !== false ) ) { |
| 263 | + SMWOutputs::requireHeadItem( SMW_HEADER_TOOLTIP ); |
| 264 | + |
| 265 | + // TODO: fix lang keys so they include the space and coordinates. |
| 266 | + |
| 267 | + return '<span class="smwttinline">' . htmlspecialchars( $this->m_caption ) . '<span class="smwttcontent">' . |
| 268 | + htmlspecialchars ( wfMsgForContent( 'maps-latitude' ) . ' ' . $this->coordinateSet['lat'] ) . '<br />' . |
| 269 | + htmlspecialchars ( wfMsgForContent( 'maps-longitude' ) . ' ' . $this->coordinateSet['lon'] ) . |
| 270 | + '</span></span>'; |
| 271 | + } |
| 272 | + else { |
| 273 | + return htmlspecialchars( $this->m_caption ); |
| 274 | + } |
| 275 | + } |
| 276 | + |
| 277 | + /** |
| 278 | + * @see SMWDataValue::getShortHTMLText |
| 279 | + * |
| 280 | + * @since 0.6 |
| 281 | + */ |
| 282 | + public function getShortHTMLText( $linker = null ) { |
| 283 | + return $this->getShortWikiText( $linker ); |
| 284 | + } |
| 285 | + |
| 286 | + /** |
| 287 | + * @see SMWDataValue::getLongWikiText |
| 288 | + * |
| 289 | + * @since 0.6 |
| 290 | + */ |
| 291 | + public function getLongWikiText( $linked = null ) { |
| 292 | + if ( !$this->isValid() ) { |
| 293 | + return $this->getErrorText(); |
| 294 | + } |
| 295 | + else { |
| 296 | + global $smgQPCoodFormat, $smgQPCoodDirectional; |
| 297 | + return MapsCoordinateParser::formatCoordinates( $this->coordinateSet, $smgQPCoodFormat, $smgQPCoodDirectional ); |
| 298 | + } |
| 299 | + } |
| 300 | + |
| 301 | + /** |
| 302 | + * @see SMWDataValue::getLongHTMLText |
| 303 | + * |
| 304 | + * @since 0.6 |
| 305 | + */ |
| 306 | + public function getLongHTMLText( $linker = null ) { |
| 307 | + return $this->getLongWikiText( $linker ); |
| 308 | + } |
| 309 | + |
| 310 | + /** |
| 311 | + * @see SMWDataValue::getWikiValue |
| 312 | + * |
| 313 | + * @since 0.6 |
| 314 | + */ |
| 315 | + public function getWikiValue() { |
| 316 | + $this->unstub(); |
| 317 | + return $this->wikiValue; |
| 318 | + } |
| 319 | + |
| 320 | + /** |
| 321 | + * @see SMWDataValue::getExportData |
| 322 | + * |
| 323 | + * @since 0.6 |
| 324 | + */ |
| 325 | + public function getExportData() { |
| 326 | + if ( $this->isValid() ) { |
| 327 | + global $smgQPCoodFormat, $smgQPCoodDirectional; |
| 328 | + $lit = new SMWExpLiteral( |
| 329 | + MapsCoordinateParser::formatCoordinates( $this->coordinateSet, $smgQPCoodFormat, $smgQPCoodDirectional ), |
| 330 | + $this, |
| 331 | + 'http://www.w3.org/2001/XMLSchema#string' |
| 332 | + ); |
| 333 | + return new SMWExpData( $lit ); |
| 334 | + } else { |
| 335 | + return null; |
| 336 | + } |
| 337 | + } |
| 338 | + |
| 339 | + /** |
| 340 | + * Create links to mapping services based on a wiki-editable message. The parameters |
| 341 | + * available to the message are: |
| 342 | + * |
| 343 | + * $1: The location in non-directional float notation. |
| 344 | + * $2: The location in directional DMS notation. |
| 345 | + * $3: The latitude in non-directional float notation. |
| 346 | + * $4 The longitude in non-directional float notation. |
| 347 | + * |
| 348 | + * @since 0.6.4 |
| 349 | + * |
| 350 | + * @return array |
| 351 | + */ |
| 352 | + protected function getServiceLinkParams() { |
| 353 | + return array( |
| 354 | + MapsCoordinateParser::formatCoordinates( $this->coordinateSet, 'float', false ), |
| 355 | + MapsCoordinateParser::formatCoordinates( $this->coordinateSet, 'dms', true ), |
| 356 | + $this->coordinateSet['lat'], |
| 357 | + $this->coordinateSet['lon'] |
| 358 | + ); |
| 359 | + } |
| 360 | + |
| 361 | + /** |
| 362 | + * @since 0.6 |
| 363 | + * |
| 364 | + * @return array |
| 365 | + */ |
| 366 | + public function getCoordinateSet() { |
| 367 | + return $this->coordinateSet; |
| 368 | + } |
| 369 | + |
| 370 | + /** |
| 371 | + * @see SMWDataValue::getValueIndex |
| 372 | + * |
| 373 | + * @since 0.6 |
| 374 | + * |
| 375 | + * @return integer |
| 376 | + */ |
| 377 | + public function getValueIndex() { |
| 378 | + return 0; |
| 379 | + } |
| 380 | + |
| 381 | + /** |
| 382 | + * @see SMWDataValue::getLabelIndex |
| 383 | + * |
| 384 | + * @since 0.6 |
| 385 | + * |
| 386 | + * @return integer |
| 387 | + */ |
| 388 | + public function getLabelIndex() { |
| 389 | + return 0; |
| 390 | + } |
| 391 | + |
| 392 | +} |
\ No newline at end of file |
Property changes on: trunk/extensions/SemanticMaps/includes/SM_GeoCoordsValue.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 393 | + native |
Index: trunk/extensions/SemanticMaps/includes/forminputs/SM_FormInput.php |
— | — | @@ -0,0 +1,212 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * Base form input class. |
| 6 | + * |
| 7 | + * @file SM_FormInput.php |
| 8 | + * @ingroup SemanticMaps |
| 9 | + * |
| 10 | + * @licence GNU GPL v3 |
| 11 | + * @author Jeroen De Dauw < jeroendedauw@gmail.com > |
| 12 | + */ |
| 13 | +class SMFormInput { |
| 14 | + |
| 15 | + /** |
| 16 | + * @since 0.8 |
| 17 | + * |
| 18 | + * @var iMappingService |
| 19 | + */ |
| 20 | + protected $service; |
| 21 | + |
| 22 | + /** |
| 23 | + * A character to separate multiple locations with. |
| 24 | + * |
| 25 | + * @since 0.8 |
| 26 | + * |
| 27 | + * @var char |
| 28 | + */ |
| 29 | + const SEPARATOR = ';'; |
| 30 | + |
| 31 | + /** |
| 32 | + * Constructor. |
| 33 | + * |
| 34 | + * @since 0.8 |
| 35 | + * |
| 36 | + * @param iMappingService $service |
| 37 | + */ |
| 38 | + public function __construct( iMappingService $service ) { |
| 39 | + $this->service = $service; |
| 40 | + } |
| 41 | + |
| 42 | + /** |
| 43 | + * Returns an array containing the parameter info. |
| 44 | + * |
| 45 | + * @since 0.8 |
| 46 | + * |
| 47 | + * @return array |
| 48 | + */ |
| 49 | + protected function getParameterInfo() { |
| 50 | + global $smgFIMulti, $smgFIFieldSize; |
| 51 | + |
| 52 | + $params = MapsMapper::getCommonParameters(); |
| 53 | + $this->service->addParameterInfo( $params ); |
| 54 | + |
| 55 | + $params['zoom']->setDefault( false, false ); |
| 56 | + |
| 57 | + $params['multi'] = new Parameter( 'multi', Parameter::TYPE_BOOLEAN ); |
| 58 | + $params['multi']->setDefault( $smgFIMulti, false ); |
| 59 | + |
| 60 | + $params['fieldsize'] = new Parameter( 'fieldsize', Parameter::TYPE_INTEGER ); |
| 61 | + $params['fieldsize']->setDefault( $smgFIFieldSize, false ); |
| 62 | + $params['fieldsize']->addCriteria( new CriterionInRange( 5, 100 ) ); |
| 63 | + |
| 64 | + $params['centre'] = new Parameter( 'centre' ); |
| 65 | + $params['centre']->setDefault( false, false ); |
| 66 | + $params['centre']->addAliases( 'center' ); |
| 67 | + $params['centre']->addCriteria( new CriterionIsLocation() ); |
| 68 | + $manipulation = new MapsParamLocation(); |
| 69 | + $manipulation->toJSONObj = true; |
| 70 | + $params['centre']->addManipulations( $manipulation ); |
| 71 | + |
| 72 | + $params['icon'] = new Parameter( 'icon' ); |
| 73 | + $params['icon']->setDefault( '' ); |
| 74 | + $params['icon']->addCriteria( New CriterionNotEmpty() ); |
| 75 | + |
| 76 | + $params['locations'] = new ListParameter( 'locations', self::SEPARATOR ); |
| 77 | + $params['locations']->addCriteria( new CriterionIsLocation() ); |
| 78 | + $manipulation = new MapsParamLocation(); |
| 79 | + $manipulation->toJSONObj = true; |
| 80 | + $params['locations']->addManipulations( $manipulation ); |
| 81 | + |
| 82 | + return $params; |
| 83 | + } |
| 84 | + |
| 85 | + /** |
| 86 | + * |
| 87 | + * |
| 88 | + * @since 0.8 |
| 89 | + * |
| 90 | + * @param string $coordinates |
| 91 | + * @param string $input_name |
| 92 | + * @param boolean $is_mandatory |
| 93 | + * @param boolean $is_disabled |
| 94 | + * @param array $field_args |
| 95 | + * |
| 96 | + * @return string |
| 97 | + */ |
| 98 | + public function getInputOutput( $coordinates, $input_name, $is_mandatory, $is_disabled, array $params ) { |
| 99 | + $parameters = array(); |
| 100 | + foreach ( $params as $key => $value ) { |
| 101 | + if ( !is_array( $value ) && !is_object( $value ) ) { |
| 102 | + $parameters[$key] = $value; |
| 103 | + } |
| 104 | + } |
| 105 | + |
| 106 | + $parameters['locations'] = $coordinates; |
| 107 | + |
| 108 | + $validator = new Validator( wfMsg( 'maps_' . $this->service->getName() ), false ); |
| 109 | + $validator->setParameters( $parameters, $this->getParameterInfo() ); |
| 110 | + $validator->validateParameters(); |
| 111 | + |
| 112 | + $fatalError = $validator->hasFatalError(); |
| 113 | + |
| 114 | + if ( $fatalError === false ) { |
| 115 | + global $wgParser, $wgTitle; |
| 116 | + |
| 117 | + $params = $validator->getParameterValues(); |
| 118 | + $mapName = $this->service->getMapId(); |
| 119 | + |
| 120 | + $params['inputname'] = $input_name; |
| 121 | + |
| 122 | + $output = $this->getInputHTML( $params, $wgParser, $mapName ) . $this->getJSON( $params, $wgParser, $mapName ); |
| 123 | + |
| 124 | + $this->service->addResourceModules( $this->getResourceModules() ); |
| 125 | + |
| 126 | + if ( true /* !is_null( $wgTitle ) && $wgTitle->isSpecialPage() */ ) { // TODO |
| 127 | + global $wgOut; |
| 128 | + $this->service->addDependencies( $wgOut ); |
| 129 | + } |
| 130 | + else { |
| 131 | + $this->service->addDependencies( $wgParser ); |
| 132 | + } |
| 133 | + |
| 134 | + return $output; |
| 135 | + } |
| 136 | + else { |
| 137 | + return |
| 138 | + '<span class="errorbox">' . |
| 139 | + htmlspecialchars( wfMsgExt( 'validator-fatal-error', 'parsemag', $fatalError->getMessage() ) ) . |
| 140 | + '</span>'; |
| 141 | + } |
| 142 | + } |
| 143 | + |
| 144 | + /** |
| 145 | + * Returns the HTML to display the map input. |
| 146 | + * |
| 147 | + * @since 0.8 |
| 148 | + * |
| 149 | + * @param array $params |
| 150 | + * @param Parser $parser |
| 151 | + * @param string $mapName |
| 152 | + * |
| 153 | + * @return string |
| 154 | + */ |
| 155 | + protected function getInputHTML( array $params, Parser $parser, $mapName ) { |
| 156 | + return Html::element( |
| 157 | + 'div', |
| 158 | + array( |
| 159 | + 'id' => $mapName . '_forminput', |
| 160 | + 'style' => 'display: inline' |
| 161 | + ), |
| 162 | + wfMsg( 'semanticmaps-loading-forminput' ) |
| 163 | + ); |
| 164 | + } |
| 165 | + |
| 166 | + /** |
| 167 | + * Returns the JSON with the maps data. |
| 168 | + * |
| 169 | + * @since 0.8 |
| 170 | + * |
| 171 | + * @param array $params |
| 172 | + * @param Parser $parser |
| 173 | + * @param string $mapName |
| 174 | + * |
| 175 | + * @return string |
| 176 | + */ |
| 177 | + protected function getJSON( array $params, Parser $parser, $mapName ) { |
| 178 | + $object = $this->getJSONObject( $params, $parser ); |
| 179 | + |
| 180 | + if ( $object === false ) { |
| 181 | + return ''; |
| 182 | + } |
| 183 | + |
| 184 | + return Html::inlineScript( |
| 185 | + MapsMapper::getBaseMapJSON( $this->service->getName() . '_forminputs' ) |
| 186 | + . "maps.{$this->service->getName()}_forminputs.{$mapName}=" . json_encode( $object ) . ';' |
| 187 | + ); |
| 188 | + } |
| 189 | + |
| 190 | + /** |
| 191 | + * Returns a PHP object to encode to JSON with the map data. |
| 192 | + * |
| 193 | + * @since 0.8 |
| 194 | + * |
| 195 | + * @param array $params |
| 196 | + * @param Parser $parser |
| 197 | + * |
| 198 | + * @return mixed |
| 199 | + */ |
| 200 | + protected function getJSONObject( array $params, Parser $parser ) { |
| 201 | + return $params; |
| 202 | + } |
| 203 | + |
| 204 | + /** |
| 205 | + * @since 0.8 |
| 206 | + * |
| 207 | + * @return array of string |
| 208 | + */ |
| 209 | + protected function getResourceModules() { |
| 210 | + return array( 'ext.sm.forminputs' ); |
| 211 | + } |
| 212 | + |
| 213 | +} |
Property changes on: trunk/extensions/SemanticMaps/includes/forminputs/SM_FormInput.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 214 | + native |
Index: trunk/extensions/SemanticMaps/includes/forminputs/jquery.mapforminput.js |
— | — | @@ -0,0 +1,134 @@ |
| 2 | +/** |
| 3 | + * JavasSript for the form inputs of the Semantic Maps extension. |
| 4 | + * @see http://www.mediawiki.org/wiki/Extension:Semantic_Maps |
| 5 | + * |
| 6 | + * This jQuery plugin creates a simple interface consisting out of |
| 7 | + * a field with coordinates, a field for geocoding addresses and |
| 8 | + * a map that displays these locations. |
| 9 | + * |
| 10 | + * jQuery plugins using this one can implement the following methods: |
| 11 | + * - showCoordinate( location { lat, lon } ) |
| 12 | + * - geocodeAddress( string address ) |
| 13 | + * |
| 14 | + * @param {string} mapDivId |
| 15 | + * @param {Object} options |
| 16 | + * |
| 17 | + * @since 0.8 |
| 18 | + * @ingroup SemanticMaps |
| 19 | + * |
| 20 | + * @licence GNU GPL v3 |
| 21 | + * @author Jeroen De Dauw <jeroendedauw at gmail dot com> |
| 22 | + */ |
| 23 | +(function( $ ){ $.fn.mapforminput = function( mapDivId, options ) { |
| 24 | + |
| 25 | + var self = this; |
| 26 | + |
| 27 | + /** |
| 28 | + * Creates a string with the provided coordinates to populate the main input field with. |
| 29 | + * @param {Array} locations |
| 30 | + * @return {string} |
| 31 | + */ |
| 32 | + this.buildInputValue = function( locations ) { |
| 33 | + var floats = []; |
| 34 | + |
| 35 | + for ( i in locations ) { |
| 36 | + floats.push( coord.float( locations[i].lat, locations[i].lon ) ); |
| 37 | + } |
| 38 | + |
| 39 | + return floats.join( '; ' ); |
| 40 | + }; |
| 41 | + |
| 42 | + /** |
| 43 | + * Populate the main input field with the provided coordinates. |
| 44 | + * @param {Array} locations |
| 45 | + */ |
| 46 | + this.updateInput = function( locations ) { |
| 47 | + this.input.attr( 'value', this.buildInputValue( locations ) ); |
| 48 | + } |
| 49 | + |
| 50 | + this.input = $( '<input />' ).attr( { |
| 51 | + 'type': 'text', |
| 52 | + 'name': options.inputname, |
| 53 | + 'id': mapDivId + '_values', |
| 54 | + 'value': this.buildInputValue( options.locations ), |
| 55 | + 'size': options.fieldsize |
| 56 | + } ); |
| 57 | + |
| 58 | + var updateButton = $( '<button />' ).text( mediaWiki.msg( 'semanticmaps-updatemap' ) ); |
| 59 | + |
| 60 | + updateButton.click( function() { |
| 61 | + var locations = coord.split( self.input.attr( 'value' ) ); |
| 62 | + var location = coord.parse( locations[0] ); |
| 63 | + |
| 64 | + if ( location !== false ) { |
| 65 | + self.showCoordinate( location ); |
| 66 | + } |
| 67 | + |
| 68 | + return false; |
| 69 | + } ); |
| 70 | + |
| 71 | + this.input.keypress( function( event ) { |
| 72 | + if ( event.which == '13' ) { |
| 73 | + updateButton.click(); |
| 74 | + } |
| 75 | + } ); |
| 76 | + |
| 77 | + this.geofield = $( '<input />' ).attr( { |
| 78 | + 'type': 'text', |
| 79 | + 'id': mapDivId + '_geofield', |
| 80 | + 'value': mediaWiki.msg( 'semanticmaps_enteraddresshere' ), |
| 81 | + 'style': 'color: darkgray', |
| 82 | + 'size': options.fieldsize |
| 83 | + } ); |
| 84 | + |
| 85 | + this.geofield.focus( function() { |
| 86 | + if ( this.value == mediaWiki.msg( 'semanticmaps_enteraddresshere' ) ) { |
| 87 | + this.value = ''; |
| 88 | + $( this ).css( 'color', '' ); |
| 89 | + } |
| 90 | + } ); |
| 91 | + |
| 92 | + this.geofield.blur( function() { |
| 93 | + if ( this.value == '' ) { |
| 94 | + this.value = mediaWiki.msg( 'semanticmaps_enteraddresshere' ); |
| 95 | + $( this ).css( 'color', 'darkgray' ); |
| 96 | + } |
| 97 | + } ); |
| 98 | + |
| 99 | + var geoButton = $( '<button />' ).text( mediaWiki.msg( 'semanticmaps_lookupcoordinates' ) ); |
| 100 | + |
| 101 | + geoButton.click( function() { |
| 102 | + self.geocodeAddress( self.geofield.attr( 'value' ) ); |
| 103 | + return false; |
| 104 | + } ); |
| 105 | + |
| 106 | + this.geofield.keypress( function( event ) { |
| 107 | + if ( event.which == '13' ) { |
| 108 | + geoButton.click(); |
| 109 | + } |
| 110 | + } ); |
| 111 | + |
| 112 | + var mapDiv = $( '<div />' ) |
| 113 | + .attr( { |
| 114 | + 'id': mapDivId, |
| 115 | + 'class': 'ui-widget ui-widget-content' |
| 116 | + } ) |
| 117 | + .css( { |
| 118 | + 'width': options.width, |
| 119 | + 'height': options.height |
| 120 | + } ); |
| 121 | + this.mapDiv = mapDiv; |
| 122 | + |
| 123 | + if ( this.showCoordinate ) { |
| 124 | + this.html( $( '<p />' ).append( this.input ).append( updateButton ) ); |
| 125 | + } |
| 126 | + |
| 127 | + if ( this.geocodeAddress ) { |
| 128 | + this.append( $( '<p />' ).append( this.geofield ).append( geoButton ) ); |
| 129 | + } |
| 130 | + |
| 131 | + this.append( mapDiv ); |
| 132 | + |
| 133 | + return this; |
| 134 | + |
| 135 | +}; })( jQuery ); |
\ No newline at end of file |
Property changes on: trunk/extensions/SemanticMaps/includes/forminputs/jquery.mapforminput.js |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 136 | + native |
Index: trunk/extensions/SemanticMaps/includes/forminputs/SM_FormInputs.php |
— | — | @@ -0,0 +1,116 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * Initialization file for form input functionality in the Maps extension |
| 6 | + * |
| 7 | + * @file SM_FormInputs.php |
| 8 | + * @ingroup SemanticMaps |
| 9 | + * |
| 10 | + * @author Jeroen De Dauw |
| 11 | + */ |
| 12 | + |
| 13 | +if ( !defined( 'MEDIAWIKI' ) ) { |
| 14 | + die( 'Not an entry point.' ); |
| 15 | +} |
| 16 | + |
| 17 | +$wgResourceModules['ext.sm.forminputs'] = array( |
| 18 | + 'dependencies' => array( 'ext.maps.coord' ), |
| 19 | + 'localBasePath' => dirname( __FILE__ ), |
| 20 | + 'remoteBasePath' => $smgScriptPath . '/includes/forminputs', |
| 21 | + 'group' => 'ext.semanticmaps', |
| 22 | + 'scripts' => array( |
| 23 | + 'jquery.mapforminput.js' |
| 24 | + ), |
| 25 | + 'messages' => array( |
| 26 | + ) |
| 27 | +); |
| 28 | + |
| 29 | +$wgHooks['MappingFeatureLoad'][] = 'SMFormInputs::initialize'; |
| 30 | + |
| 31 | +final class SMFormInputs { |
| 32 | + |
| 33 | + public static function initialize() { |
| 34 | + global $smgDir, $wgAutoloadClasses, $sfgFormPrinter; |
| 35 | + |
| 36 | + // This code should not get called when SF is not loaded, but let's have this |
| 37 | + // check to not run into problems when people mess up the settings. |
| 38 | + if ( !defined( 'SF_VERSION' ) ) return true; |
| 39 | + |
| 40 | + $wgAutoloadClasses['SMFormInput'] = dirname( __FILE__ ) . '/SM_FormInput.php'; |
| 41 | + |
| 42 | + $hasFormInputs = false; |
| 43 | + |
| 44 | + foreach ( MapsMappingServices::getServiceIdentifiers() as $serviceIdentifier ) { |
| 45 | + $service = MapsMappingServices::getServiceInstance( $serviceIdentifier ); |
| 46 | + |
| 47 | + // Check if the service has a form input. |
| 48 | + $FIClass = $service->getFeature( 'fi' ); |
| 49 | + |
| 50 | + // If the service has no FI, skipt it and continue with the next one. |
| 51 | + if ( $FIClass === false ) continue; |
| 52 | + |
| 53 | + // At least one form input will be enabled when this point is reached. |
| 54 | + $hasFormInputs = true; |
| 55 | + |
| 56 | + // Add the result form input type for the service name. |
| 57 | + self::initFormHook( $service->getName(), $service->getName() ); |
| 58 | + |
| 59 | + // Loop through the service alliases, and add them as form input types. |
| 60 | + foreach ( $service->getAliases() as $alias ) { |
| 61 | + self::initFormHook( $alias, $service->getName() ); |
| 62 | + } |
| 63 | + } |
| 64 | + |
| 65 | + // Add the 'map' form input type if there are mapping services that have FI's loaded. |
| 66 | + if ( $hasFormInputs ) self::initFormHook( 'map' ); |
| 67 | + |
| 68 | + return true; |
| 69 | + } |
| 70 | + |
| 71 | + /** |
| 72 | + * Adds a mapping service's form hook. |
| 73 | + * |
| 74 | + * @param string $inputName The name of the form input. |
| 75 | + * @param strig $mainName |
| 76 | + */ |
| 77 | + private static function initFormHook( $inputName, $mainName = '' ) { |
| 78 | + global $wgAutoloadClasses, $sfgFormPrinter, $smgDir; |
| 79 | + |
| 80 | + // Add the form input hook for the service. |
| 81 | + $field_args = array(); |
| 82 | + |
| 83 | + if ( $mainName != '' ) { |
| 84 | + $field_args['service_name'] = $mainName; |
| 85 | + } |
| 86 | + |
| 87 | + //$sfgFormPrinter->registerInputType( 'SMMapInput' ); |
| 88 | + |
| 89 | + $sfgFormPrinter->setInputTypeHook( $inputName, 'smfSelectFormInputHTML', $field_args ); |
| 90 | + } |
| 91 | + |
| 92 | +} |
| 93 | + |
| 94 | +/** |
| 95 | + * Calls the relevant form input class depending on the provided service. |
| 96 | + * |
| 97 | + * @param string $coordinates |
| 98 | + * @param string $input_name |
| 99 | + * @param boolean $is_mandatory |
| 100 | + * @param boolean $is_disabled |
| 101 | + * @param array $field_args |
| 102 | + * |
| 103 | + * @return array |
| 104 | + */ |
| 105 | +function smfSelectFormInputHTML( $coordinates, $input_name, $is_mandatory, $is_disabled, array $field_args ) { |
| 106 | + // Get the service name from the field_args, and set it to null if it doesn't exist. |
| 107 | + $serviceName = array_key_exists( 'service_name', $field_args ) ? $field_args['service_name'] : null; |
| 108 | + |
| 109 | + // Get the instance of the service class. |
| 110 | + $service = MapsMappingServices::getValidServiceInstance( $serviceName, 'fi' ); |
| 111 | + |
| 112 | + // Get an instance of the class handling the current form input and service. |
| 113 | + $formInput = $service->getFeatureInstance( 'fi' ); |
| 114 | + |
| 115 | + // Get and return the form input HTML from the hook corresponding with the provided service. |
| 116 | + return $formInput->getInputOutput( $coordinates, $input_name, $is_mandatory, $is_disabled, $field_args ); |
| 117 | +} |
Property changes on: trunk/extensions/SemanticMaps/includes/forminputs/SM_FormInputs.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 118 | + native |
Index: trunk/extensions/SemanticMaps/includes/SM_GeoCoordsValueDescription.php |
— | — | @@ -0,0 +1,93 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * Description of one data value of type Goegraphical Coordinates. |
| 6 | + * |
| 7 | + * @since 0.6 |
| 8 | + * @file SM_GeoCoordsValueDescription.php |
| 9 | + * @ingroup SemanticMaps |
| 10 | + * |
| 11 | + * @author Jeroen De Dauw |
| 12 | + */ |
| 13 | +class SMGeoCoordsValueDescription extends SMWValueDescription { |
| 14 | + |
| 15 | + /** |
| 16 | + * Constructor. |
| 17 | + * |
| 18 | + * @since 0.6 |
| 19 | + * |
| 20 | + * @param SMGeoCoordsValue $dataValue |
| 21 | + */ |
| 22 | + public function __construct( SMGeoCoordsValue $dataValue, $comparator ) { |
| 23 | + parent::__construct( $dataValue, $comparator ); |
| 24 | + } |
| 25 | + |
| 26 | + /** |
| 27 | + * @see SMWDescription::getQueryString |
| 28 | + * |
| 29 | + * @since 0.6 |
| 30 | + * |
| 31 | + * @param Boolean $asvalue |
| 32 | + */ |
| 33 | + public function getQueryString( $asValue = false ) { |
| 34 | + if ( $this->m_datavalue !== null ) { |
| 35 | + $queryString = $this->m_datavalue->getWikiValue(); |
| 36 | + return $asValue ? $queryString : "[[$queryString]]"; |
| 37 | + } else { |
| 38 | + return $asValue ? '+' : ''; |
| 39 | + } |
| 40 | + } |
| 41 | + |
| 42 | + /** |
| 43 | + * @see SMWDescription::getSQLCondition |
| 44 | + * |
| 45 | + * @since 0.6 |
| 46 | + * |
| 47 | + * @param string $tableName |
| 48 | + * @param array $fieldNames |
| 49 | + * @param DatabaseBase or Database $dbs |
| 50 | + * |
| 51 | + * @return true |
| 52 | + */ |
| 53 | + public function getSQLCondition( $tableName, array $fieldNames, $dbs ) { |
| 54 | + global $smgUseSpatialExtensions; |
| 55 | + |
| 56 | + $dataValue = $this->getDatavalue(); |
| 57 | + |
| 58 | + // Only execute the query when the description's type is geographical coordinates, |
| 59 | + // the description is valid, and the near comparator is used. |
| 60 | + if ( $dataValue->getTypeID() != '_geo' || !$dataValue->isValid() ) return false; |
| 61 | + |
| 62 | + $comparator = false; |
| 63 | + |
| 64 | + switch ( $this->getComparator() ) { |
| 65 | + case SMW_CMP_EQ: $comparator = '='; break; |
| 66 | + case SMW_CMP_LEQ: $comparator = '<='; break; |
| 67 | + case SMW_CMP_GEQ: $comparator = '>='; break; |
| 68 | + case SMW_CMP_NEQ: $comparator = '!='; break; |
| 69 | + } |
| 70 | + |
| 71 | + if ( $comparator ) { |
| 72 | + $coordinates = $dataValue->getCoordinateSet(); |
| 73 | + |
| 74 | + $lat = $dbs->addQuotes( $coordinates['lat'] ); |
| 75 | + $lon = $dbs->addQuotes( $coordinates['lon'] ); |
| 76 | + |
| 77 | + $conditions = array(); |
| 78 | + |
| 79 | + if ( $smgUseSpatialExtensions ) { |
| 80 | + // TODO |
| 81 | + } |
| 82 | + else { |
| 83 | + $conditions[] = "{$tableName}.$fieldNames[0] $comparator $lat"; |
| 84 | + $conditions[] = "{$tableName}.$fieldNames[1] $comparator $lon"; |
| 85 | + } |
| 86 | + |
| 87 | + return implode( ' && ', $conditions ); |
| 88 | + } |
| 89 | + else { |
| 90 | + return false; |
| 91 | + } |
| 92 | + } |
| 93 | + |
| 94 | +} |
\ No newline at end of file |
Property changes on: trunk/extensions/SemanticMaps/includes/SM_GeoCoordsValueDescription.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 95 | + native |
Index: trunk/extensions/SemanticMaps/includes/queryprinters/SM_QueryPrinters.php |
— | — | @@ -0,0 +1,100 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * Initialization file for query printer functionality in the Semantic Maps extension |
| 6 | + * |
| 7 | + * @file SM_QueryPrinters.php |
| 8 | + * @ingroup SemanticMaps |
| 9 | + * |
| 10 | + * @author Jeroen De Dauw |
| 11 | + */ |
| 12 | + |
| 13 | +if ( !defined( 'MEDIAWIKI' ) ) { |
| 14 | + die( 'Not an entry point.' ); |
| 15 | +} |
| 16 | + |
| 17 | +$wgHooks['MappingFeatureLoad'][] = 'SMQueryPrinters::initialize'; |
| 18 | + |
| 19 | +final class SMQueryPrinters { |
| 20 | + |
| 21 | + /** |
| 22 | + * Initialization function for Maps query printer functionality. |
| 23 | + */ |
| 24 | + public static function initialize() { |
| 25 | + global $smgDir, $wgAutoloadClasses; |
| 26 | + |
| 27 | + $wgAutoloadClasses['SMQueryHandler'] = dirname( __FILE__ ) . '/SM_QueryHandler.php'; |
| 28 | + $wgAutoloadClasses['SMMapper'] = dirname( __FILE__ ) . '/SM_Mapper.php'; |
| 29 | + $wgAutoloadClasses['SMMapPrinter'] = dirname( __FILE__ ) . '/SM_MapPrinter.php'; |
| 30 | + $wgAutoloadClasses['SMKMLPrinter'] = dirname( __FILE__ ) . '/SM_KMLPrinter.php'; |
| 31 | + |
| 32 | + self::initFormat( 'kml', 'SMKMLPrinter' ); |
| 33 | + |
| 34 | + $hasQueryPrinters = false; |
| 35 | + |
| 36 | + foreach ( MapsMappingServices::getServiceIdentifiers() as $serviceIdentifier ) { |
| 37 | + $service = MapsMappingServices::getServiceInstance( $serviceIdentifier ); |
| 38 | + |
| 39 | + // Check if the service has a query printer. |
| 40 | + $QPClass = $service->getFeature( 'qp' ); |
| 41 | + |
| 42 | + // If the service has no QP, skipt it and continue with the next one. |
| 43 | + if ( $QPClass === false ) continue; |
| 44 | + |
| 45 | + // At least one query printer will be enabled when this point is reached. |
| 46 | + $hasQueryPrinters = true; |
| 47 | + |
| 48 | + // Initiate the format. |
| 49 | + $aliases = $service->getAliases(); |
| 50 | + self::initFormat( $service->getName(), 'SMMapper' /* $QPClass */, $aliases ); |
| 51 | + } |
| 52 | + |
| 53 | + // Add the 'map' result format if there are mapping services that have QP's loaded. |
| 54 | + if ( $hasQueryPrinters ) { |
| 55 | + self::initFormat( 'map', 'SMMapper' ); |
| 56 | + } |
| 57 | + |
| 58 | + return true; |
| 59 | + } |
| 60 | + |
| 61 | + /** |
| 62 | + * Add the result format for a mapping service or alias. |
| 63 | + * |
| 64 | + * @param string $format |
| 65 | + * @param string $formatClass |
| 66 | + * @param array $aliases |
| 67 | + */ |
| 68 | + private static function initFormat( $format, $formatClass, array $aliases = array() ) { |
| 69 | + global $wgAutoloadClasses, $smgDir, $smwgResultAliases; |
| 70 | + |
| 71 | + // Add the QP to SMW. |
| 72 | + self::addFormatQP( $format, $formatClass ); |
| 73 | + |
| 74 | + // If SMW supports aliasing, add the aliases to $smwgResultAliases. |
| 75 | + if ( isset( $smwgResultAliases ) ) { |
| 76 | + $smwgResultAliases[$format] = $aliases; |
| 77 | + } |
| 78 | + else { // If SMW does not support aliasing, add every alias as a format. |
| 79 | + foreach ( $aliases as $alias ) self::addFormatQP( $alias, $formatClass ); |
| 80 | + } |
| 81 | + } |
| 82 | + |
| 83 | + /** |
| 84 | + * Adds a QP to SMW's $smwgResultFormats array or SMWQueryProcessor |
| 85 | + * depending on if SMW supports $smwgResultFormats. |
| 86 | + * |
| 87 | + * @param string $format |
| 88 | + * @param string $class |
| 89 | + */ |
| 90 | + private static function addFormatQP( $format, $class ) { |
| 91 | + global $smwgResultFormats; |
| 92 | + |
| 93 | + if ( isset( $smwgResultFormats ) ) { |
| 94 | + $smwgResultFormats[$format] = $class; |
| 95 | + } |
| 96 | + else { // BC with some old SMW version |
| 97 | + SMWQueryProcessor::$formats[$format] = $class; |
| 98 | + } |
| 99 | + } |
| 100 | + |
| 101 | +} |
Property changes on: trunk/extensions/SemanticMaps/includes/queryprinters/SM_QueryPrinters.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 102 | + native |
Index: trunk/extensions/SemanticMaps/includes/queryprinters/SM_MapPrinter.php |
— | — | @@ -0,0 +1,371 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * Query printer for maps. Is invoked via SMMapper. |
| 6 | + * Can be overriden per service to have custom output. |
| 7 | + * |
| 8 | + * @file SM_MapPrinter.php |
| 9 | + * @ingroup SemanticMaps |
| 10 | + * |
| 11 | + * @licence GNU GPL v3 |
| 12 | + * @author Jeroen De Dauw < jeroendedauw@gmail.com > |
| 13 | + */ |
| 14 | +class SMMapPrinter extends SMWResultPrinter { |
| 15 | + |
| 16 | + /** |
| 17 | + * @since 0.6 |
| 18 | + * |
| 19 | + * @var iMappingService |
| 20 | + */ |
| 21 | + protected $service; |
| 22 | + |
| 23 | + /** |
| 24 | + * @since 0.8 |
| 25 | + * |
| 26 | + * @var false or string |
| 27 | + */ |
| 28 | + protected $fatalErrorMsg = false; |
| 29 | + |
| 30 | + /** |
| 31 | + * @since 0.8 |
| 32 | + * |
| 33 | + * @var array |
| 34 | + */ |
| 35 | + protected $parameters; |
| 36 | + |
| 37 | + /** |
| 38 | + * Constructor. |
| 39 | + * |
| 40 | + * @param $format String |
| 41 | + * @param $inline |
| 42 | + * @param $service iMappingService |
| 43 | + */ |
| 44 | + public function __construct( $format, $inline, iMappingService $service ) { |
| 45 | + $this->service = $service; |
| 46 | + } |
| 47 | + |
| 48 | + /** |
| 49 | + * (non-PHPdoc) |
| 50 | + * @see SMWResultPrinter::readParameters() |
| 51 | + */ |
| 52 | + protected function readParameters( /* array */ $params, $outputmode ) { |
| 53 | + parent::readParameters( $params, $outputmode ); |
| 54 | + |
| 55 | + $validator = new Validator( $this->getName(), false ); |
| 56 | + $validator->setParameters( $params, $this->getParameterInfo() ); |
| 57 | + $validator->validateParameters(); |
| 58 | + |
| 59 | + $fatalError = $validator->hasFatalError(); |
| 60 | + |
| 61 | + if ( $fatalError === false ) { |
| 62 | + $this->parameters = $validator->getParameterValues(); |
| 63 | + } |
| 64 | + else { |
| 65 | + $this->fatalErrorMsg = |
| 66 | + '<span class="errorbox">' . |
| 67 | + htmlspecialchars( wfMsgExt( 'validator-fatal-error', 'parsemag', $fatalError->getMessage() ) ) . |
| 68 | + '</span>'; |
| 69 | + } |
| 70 | + } |
| 71 | + |
| 72 | + /** |
| 73 | + * Returns an array containing the parameter info. |
| 74 | + * |
| 75 | + * @since 0.8 |
| 76 | + * |
| 77 | + * @return array |
| 78 | + */ |
| 79 | + protected function getParameterInfo() { |
| 80 | + global $egMapsDefaultLabel, $egMapsDefaultTitle; |
| 81 | + global $smgQPForceShow, $smgQPShowTitle, $smgQPTemplate; |
| 82 | + |
| 83 | + $params = MapsMapper::getCommonParameters(); |
| 84 | + $this->service->addParameterInfo( $params ); |
| 85 | + |
| 86 | + $params['zoom']->setDefault( false ); |
| 87 | + $params['zoom']->setDoManipulationOfDefault( false ); |
| 88 | + |
| 89 | + $params['staticlocations'] = new ListParameter( 'staticlocations', ';' ); |
| 90 | + $params['staticlocations']->addAliases( 'locations' ); |
| 91 | + $params['staticlocations']->addCriteria( new CriterionIsLocation( '~' ) ); |
| 92 | + $params['staticlocations']->addManipulations( new MapsParamLocation( '~' ) ); |
| 93 | + $params['staticlocations']->setDefault( array() ); |
| 94 | + |
| 95 | + $params['centre'] = new Parameter( 'centre' ); |
| 96 | + $params['centre']->setDefault( false ); |
| 97 | + $params['centre']->addAliases( 'center' ); |
| 98 | + $params['centre']->addCriteria( new CriterionIsLocation() ); |
| 99 | + $params['centre']->setDoManipulationOfDefault( false ); |
| 100 | + $manipulation = new MapsParamLocation(); |
| 101 | + $manipulation->toJSONObj = true; |
| 102 | + $params['centre']->addManipulations( $manipulation ); |
| 103 | + |
| 104 | + $params['icon'] = new Parameter( |
| 105 | + 'icon', |
| 106 | + Parameter::TYPE_STRING, |
| 107 | + '', |
| 108 | + array(), |
| 109 | + array( |
| 110 | + New CriterionNotEmpty() |
| 111 | + ) |
| 112 | + ); |
| 113 | + |
| 114 | + $params['forceshow'] = new Parameter( |
| 115 | + 'forceshow', |
| 116 | + Parameter::TYPE_BOOLEAN, |
| 117 | + $smgQPForceShow, |
| 118 | + array( 'force show' ) |
| 119 | + ); |
| 120 | + |
| 121 | + $params['showtitle'] = new Parameter( |
| 122 | + 'showtitle', |
| 123 | + Parameter::TYPE_BOOLEAN, |
| 124 | + $smgQPShowTitle, |
| 125 | + array( 'show title' ) |
| 126 | + ); |
| 127 | + |
| 128 | + $params['template'] = new Parameter( |
| 129 | + 'template', |
| 130 | + Parameter::TYPE_STRING, |
| 131 | + $smgQPTemplate, |
| 132 | + array(), |
| 133 | + array( |
| 134 | + New CriterionNotEmpty() |
| 135 | + ) |
| 136 | + ); |
| 137 | + $params['template']->setDoManipulationOfDefault( false ); |
| 138 | + |
| 139 | + $params['title'] = new Parameter( |
| 140 | + 'title', |
| 141 | + Parameter::TYPE_STRING, |
| 142 | + $egMapsDefaultTitle |
| 143 | + ); |
| 144 | + |
| 145 | + $params['label'] = new Parameter( |
| 146 | + 'label', |
| 147 | + Parameter::TYPE_STRING, |
| 148 | + $egMapsDefaultLabel, |
| 149 | + array( 'text' ) |
| 150 | + ); |
| 151 | + |
| 152 | + return $params; |
| 153 | + } |
| 154 | + |
| 155 | + /** |
| 156 | + * Builds up and returns the HTML for the map, with the queried coordinate data on it. |
| 157 | + * |
| 158 | + * @param SMWQueryResult $res |
| 159 | + * @param $outputmode |
| 160 | + * |
| 161 | + * @return array |
| 162 | + */ |
| 163 | + public final function getResultText( /* SMWQueryResult */ $res, $outputmode ) { |
| 164 | + if ( $this->fatalErrorMsg === false ) { |
| 165 | + global $wgParser; |
| 166 | + |
| 167 | + $params = $this->parameters; |
| 168 | + |
| 169 | + $queryHandler = new SMQueryHandler( $res, $outputmode ); |
| 170 | + $queryHandler->setShowSubject( $params['showtitle'] ); |
| 171 | + $queryHandler->setTemplate( $params['template'] ); |
| 172 | + |
| 173 | + $this->handleMarkerData( $params, $queryHandler->getLocations() ); |
| 174 | + $locationAmount = count( $params['locations'] ); |
| 175 | + |
| 176 | + if ( $params['forceshow'] || $locationAmount > 0 ) { |
| 177 | + // We can only take care of the zoom defaulting here, |
| 178 | + // as not all locations are available in whats passed to Validator. |
| 179 | + if ( $params['zoom'] === false && $locationAmount <= 1 ) { |
| 180 | + $params['zoom'] = $this->service->getDefaultZoom(); |
| 181 | + } |
| 182 | + |
| 183 | + $mapName = $this->service->getMapId(); |
| 184 | + |
| 185 | + SMWOutputs::requireHeadItem( $mapName, $this->service->getDependencyHtml() ); |
| 186 | + foreach ( $this->service->getResourceModules() as $resourceModule ) { |
| 187 | + SMWOutputs::requireResource( $resourceModule ); |
| 188 | + } |
| 189 | + |
| 190 | + return array( |
| 191 | + $this->getMapHTML( $params, $wgParser, $mapName ) . $this->getJSON( $params, $wgParser, $mapName ), |
| 192 | + 'noparse' => true, |
| 193 | + 'isHTML' => true |
| 194 | + ); |
| 195 | + } |
| 196 | + else { |
| 197 | + return ''; |
| 198 | + } |
| 199 | + } |
| 200 | + else { |
| 201 | + return $this->fatalErrorMsg; |
| 202 | + } |
| 203 | + } |
| 204 | + |
| 205 | + /** |
| 206 | + * Returns the HTML to display the map. |
| 207 | + * |
| 208 | + * @since 0.8 |
| 209 | + * |
| 210 | + * @param array $params |
| 211 | + * @param Parser $parser |
| 212 | + * @param string $mapName |
| 213 | + * |
| 214 | + * @return string |
| 215 | + */ |
| 216 | + protected function getMapHTML( array $params, Parser $parser, $mapName ) { |
| 217 | + return Html::element( |
| 218 | + 'div', |
| 219 | + array( |
| 220 | + 'id' => $mapName, |
| 221 | + 'style' => "width: {$params['width']}; height: {$params['height']}; background-color: #cccccc; overflow: hidden;", |
| 222 | + ), |
| 223 | + wfMsg( 'maps-loading-map' ) |
| 224 | + ); |
| 225 | + } |
| 226 | + |
| 227 | + /** |
| 228 | + * Returns the JSON with the maps data. |
| 229 | + * |
| 230 | + * @since 0.8 |
| 231 | + * |
| 232 | + * @param array $params |
| 233 | + * @param Parser $parser |
| 234 | + * @param string $mapName |
| 235 | + * |
| 236 | + * @return string |
| 237 | + */ |
| 238 | + protected function getJSON( array $params, Parser $parser, $mapName ) { |
| 239 | + $object = $this->getJSONObject( $params, $parser ); |
| 240 | + |
| 241 | + if ( $object === false ) { |
| 242 | + return ''; |
| 243 | + } |
| 244 | + |
| 245 | + return Html::inlineScript( |
| 246 | + MapsMapper::getBaseMapJSON( $this->service->getName() ) |
| 247 | + . "maps.{$this->service->getName()}.{$mapName}=" . json_encode( $object ) . ';' |
| 248 | + ); |
| 249 | + } |
| 250 | + |
| 251 | + /** |
| 252 | + * Returns a PHP object to encode to JSON with the map data. |
| 253 | + * |
| 254 | + * @since 0.8 |
| 255 | + * |
| 256 | + * @param array $params |
| 257 | + * @param Parser $parser |
| 258 | + * |
| 259 | + * @return mixed |
| 260 | + */ |
| 261 | + protected function getJSONObject( array $params, Parser $parser ) { |
| 262 | + return $params; |
| 263 | + } |
| 264 | + |
| 265 | + /** |
| 266 | + * Converts the data in the coordinates parameter to JSON-ready objects. |
| 267 | + * These get stored in the locations parameter, and the coordinates on gets deleted. |
| 268 | + * |
| 269 | + * @since 0.8 |
| 270 | + * |
| 271 | + * @param array &$params |
| 272 | + * @param array $queryLocations |
| 273 | + */ |
| 274 | + protected function handleMarkerData( array &$params, array $queryLocations ) { |
| 275 | + global $wgTitle; |
| 276 | + |
| 277 | + $parser = new Parser(); |
| 278 | + $iconUrl = MapsMapper::getFileUrl( $params['icon'] ); |
| 279 | + $params['locations'] = array(); |
| 280 | + |
| 281 | + foreach ( array_merge( $params['staticlocations'], $queryLocations ) as $location ) { |
| 282 | + if ( $location->isValid() ) { |
| 283 | + $jsonObj = $location->getJSONObject( $params['title'], $params['label'], $iconUrl ); |
| 284 | + |
| 285 | + $jsonObj['title'] = strip_tags( $jsonObj['title'] ); |
| 286 | + |
| 287 | + $params['locations'][] = $jsonObj; |
| 288 | + } |
| 289 | + } |
| 290 | + |
| 291 | + unset( $params['staticlocations'] ); |
| 292 | + } |
| 293 | + |
| 294 | + /** |
| 295 | + * Reads the parameters and gets the query printers output. |
| 296 | + * |
| 297 | + * @param SMWQueryResult $results |
| 298 | + * @param array $params |
| 299 | + * @param $outputmode |
| 300 | + * |
| 301 | + * @return array |
| 302 | + */ |
| 303 | + public final function getResult( /* SMWQueryResult */ $results, /* array */ $params, $outputmode ) { |
| 304 | + // Skip checks, results with 0 entries are normal. |
| 305 | + $this->readParameters( $params, $outputmode ); |
| 306 | + |
| 307 | + return $this->getResultText( $results, SMW_OUTPUT_HTML ); |
| 308 | + } |
| 309 | + |
| 310 | + /** |
| 311 | + * Returns the internationalized name of the mapping service. |
| 312 | + * |
| 313 | + * @return string |
| 314 | + */ |
| 315 | + public final function getName() { |
| 316 | + return wfMsg( 'maps_' . $this->service->getName() ); |
| 317 | + } |
| 318 | + |
| 319 | + /** |
| 320 | + * Returns a list of parameter information, for usage by Special:Ask and others. |
| 321 | + * |
| 322 | + * @return array |
| 323 | + */ |
| 324 | + public function getParameters() { |
| 325 | + $params = parent::getParameters(); |
| 326 | + |
| 327 | + // Now go through the descriptions, and convert them from Validator- to SMW-style. |
| 328 | + foreach ( $this->getParameterInfo() as $paramDesc ) { |
| 329 | + $param = array( |
| 330 | + 'name' => $paramDesc->getName(), |
| 331 | + 'type' => $this->getMappedParamType( $paramDesc->getType() ), |
| 332 | + 'description' => $paramDesc->getDescription() ? $paramDesc->getDescription() : '', |
| 333 | + 'default' => $paramDesc->isRequired() ? '' : $paramDesc->getDefault() |
| 334 | + ); |
| 335 | + |
| 336 | + foreach ( $paramDesc->getCriteria() as $criterion ) { |
| 337 | + if ( $criterion instanceof CriterionInArray ) { |
| 338 | + $param['values'] = $criterion->getAllowedValues(); |
| 339 | + $param['type'] = $paramDesc->isList() ? 'enum-list' : 'enumeration'; |
| 340 | + break; |
| 341 | + } |
| 342 | + } |
| 343 | + |
| 344 | + $params[] = $param; |
| 345 | + } |
| 346 | + |
| 347 | + return $params; |
| 348 | + } |
| 349 | + |
| 350 | + /** |
| 351 | + * Takes in an element of the Parameter::TYPE_ enum and turns it into an SMW type (string) indicator. |
| 352 | + * |
| 353 | + * @since 0.8 |
| 354 | + * |
| 355 | + * @param Parameter::TYPE_ $type |
| 356 | + * |
| 357 | + * @return string |
| 358 | + */ |
| 359 | + protected function getMappedParamType( $type ) { |
| 360 | + static $typeMap = array( |
| 361 | + Parameter::TYPE_STRING => 'string', |
| 362 | + Parameter::TYPE_BOOLEAN => 'boolean', |
| 363 | + Parameter::TYPE_CHAR => 'int', |
| 364 | + Parameter::TYPE_FLOAT => 'int', |
| 365 | + Parameter::TYPE_INTEGER => 'int', |
| 366 | + Parameter::TYPE_NUMBER => 'int', |
| 367 | + ); |
| 368 | + |
| 369 | + return $typeMap[$type]; |
| 370 | + } |
| 371 | + |
| 372 | +} |
Property changes on: trunk/extensions/SemanticMaps/includes/queryprinters/SM_MapPrinter.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 373 | + native |
Index: trunk/extensions/SemanticMaps/includes/queryprinters/SM_QueryHandler.php |
— | — | @@ -0,0 +1,479 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * Class for handling geographical SMW queries. |
| 6 | + * |
| 7 | + * @since 0.7.3 |
| 8 | + * |
| 9 | + * @ingroup SemanticMaps |
| 10 | + * @file SM_QueryHandler.php |
| 11 | + * |
| 12 | + * @author Jeroen De Dauw |
| 13 | + */ |
| 14 | +class SMQueryHandler { |
| 15 | + |
| 16 | + protected $queryResult; |
| 17 | + protected $outputmode; |
| 18 | + |
| 19 | + protected $locations = false; |
| 20 | + |
| 21 | + /** |
| 22 | + * The template to use for the text, or false if there is none. |
| 23 | + * |
| 24 | + * @since 0.7.3 |
| 25 | + * |
| 26 | + * @var false or string |
| 27 | + */ |
| 28 | + protected $template = false; |
| 29 | + |
| 30 | + /** |
| 31 | + * The global icon. |
| 32 | + * |
| 33 | + * @since 0.7.3 |
| 34 | + * |
| 35 | + * @var string |
| 36 | + */ |
| 37 | + public $icon = ''; |
| 38 | + |
| 39 | + /** |
| 40 | + * The global text. |
| 41 | + * |
| 42 | + * @since 0.8 |
| 43 | + * |
| 44 | + * @var string |
| 45 | + */ |
| 46 | + public $text = ''; |
| 47 | + |
| 48 | + /** |
| 49 | + * The global title. |
| 50 | + * |
| 51 | + * @since 0.8 |
| 52 | + * |
| 53 | + * @var string |
| 54 | + */ |
| 55 | + public $title = ''; |
| 56 | + |
| 57 | + /** |
| 58 | + * Make a separate link to the title or not? |
| 59 | + * |
| 60 | + * @since 0.7.3 |
| 61 | + * |
| 62 | + * @var boolean |
| 63 | + */ |
| 64 | + public $titleLinkSeperate; |
| 65 | + |
| 66 | + /** |
| 67 | + * Should link targets be made absolute (instead of relative)? |
| 68 | + * |
| 69 | + * @since 0.8 |
| 70 | + * |
| 71 | + * @var boolean |
| 72 | + */ |
| 73 | + protected $linkAbsolute; |
| 74 | + |
| 75 | + /** |
| 76 | + * The text used for the link to the page (if it's created). $1 will be replaced by the page name. |
| 77 | + * |
| 78 | + * @since 0.8 |
| 79 | + * |
| 80 | + * @var string |
| 81 | + */ |
| 82 | + protected $pageLinkText; |
| 83 | + |
| 84 | + /** |
| 85 | + * A separator to use beteen the subject and properties in the text field. |
| 86 | + * |
| 87 | + * @since 0.8 |
| 88 | + * |
| 89 | + * @var string |
| 90 | + */ |
| 91 | + protected $subjectSeparator = '<hr />'; |
| 92 | + |
| 93 | + /** |
| 94 | + * Make the subject in the text bold or not? |
| 95 | + * |
| 96 | + * @since 0.8 |
| 97 | + * |
| 98 | + * @var boolean |
| 99 | + */ |
| 100 | + protected $boldSubject = true; |
| 101 | + |
| 102 | + /** |
| 103 | + * Show the subject in the text or not? |
| 104 | + * |
| 105 | + * @since 0.8 |
| 106 | + * |
| 107 | + * @var boolean |
| 108 | + */ |
| 109 | + protected $showSubject = true; |
| 110 | + |
| 111 | + /** |
| 112 | + * Constructor. |
| 113 | + * |
| 114 | + * @since 0.7.3 |
| 115 | + * |
| 116 | + * @param SMWQueryResult $queryResult |
| 117 | + * @param integer $outputmode |
| 118 | + */ |
| 119 | + public function __construct( SMWQueryResult $queryResult, $outputmode, $linkAbsolute = false, $pageLinkText = '$1', $titleLinkSeperate = false ) { |
| 120 | + $this->queryResult = $queryResult; |
| 121 | + $this->outputmode = $outputmode; |
| 122 | + |
| 123 | + $this->linkAbsolute = $linkAbsolute; |
| 124 | + $this->pageLinkText = $pageLinkText; |
| 125 | + $this->titleLinkSeperate = $titleLinkSeperate; |
| 126 | + } |
| 127 | + |
| 128 | + /** |
| 129 | + * Sets the template. |
| 130 | + * |
| 131 | + * @since 0.8 |
| 132 | + * |
| 133 | + * @param string $template |
| 134 | + */ |
| 135 | + public function setTemplate( $template ) { |
| 136 | + $this->template = $template == '' ? false : $template; |
| 137 | + } |
| 138 | + |
| 139 | + /** |
| 140 | + * Sets the global icon. |
| 141 | + * |
| 142 | + * @since 0.8 |
| 143 | + * |
| 144 | + * @param string $icon |
| 145 | + */ |
| 146 | + public function setIcon( $icon ) { |
| 147 | + $this->icon = $icon; |
| 148 | + } |
| 149 | + |
| 150 | + /** |
| 151 | + * Sets the global title. |
| 152 | + * |
| 153 | + * @since 0.8 |
| 154 | + * |
| 155 | + * @param string $title |
| 156 | + */ |
| 157 | + public function setTitle( $title ) { |
| 158 | + $this->title = $title; |
| 159 | + } |
| 160 | + |
| 161 | + /** |
| 162 | + * Sets the global text. |
| 163 | + * |
| 164 | + * @since 0.8 |
| 165 | + * |
| 166 | + * @param string $text |
| 167 | + */ |
| 168 | + public function setText( $text ) { |
| 169 | + $this->text = $text; |
| 170 | + } |
| 171 | + |
| 172 | + /** |
| 173 | + * Sets the subject separator. |
| 174 | + * |
| 175 | + * @since 0.8 |
| 176 | + * |
| 177 | + * @param string $subjectSeparator |
| 178 | + */ |
| 179 | + public function setSubjectSeparator( $subjectSeparator ) { |
| 180 | + $this->subjectSeparator = $subjectSeparator; |
| 181 | + } |
| 182 | + |
| 183 | + /** |
| 184 | + * Sets if the subject should be made bold in the text. |
| 185 | + * |
| 186 | + * @since 0.8 |
| 187 | + * |
| 188 | + * @param string $boldSubject |
| 189 | + */ |
| 190 | + public function setBoldSubject( $boldSubject ) { |
| 191 | + $this->boldSubject = $boldSubject; |
| 192 | + } |
| 193 | + |
| 194 | + /** |
| 195 | + * Sets if the subject should shown in the text. |
| 196 | + * |
| 197 | + * @since 0.8 |
| 198 | + * |
| 199 | + * @param string $showSubject |
| 200 | + */ |
| 201 | + public function setShowSubject( $showSubject ) { |
| 202 | + $this->showSubject = $showSubject; |
| 203 | + } |
| 204 | + |
| 205 | + /** |
| 206 | + * Gets the query result as a list of locations. |
| 207 | + * |
| 208 | + * @since 0.7.3 |
| 209 | + * |
| 210 | + * @return array of MapsLocation |
| 211 | + */ |
| 212 | + public function getLocations() { |
| 213 | + if ( $this->locations === false ) { |
| 214 | + $this->locations = $this->findLocations(); |
| 215 | + } |
| 216 | + |
| 217 | + return $this->locations; |
| 218 | + } |
| 219 | + |
| 220 | + /** |
| 221 | + * Gets the query result as a list of locations. |
| 222 | + * |
| 223 | + * @since 0.7.3 |
| 224 | + * |
| 225 | + * @return array of MapsLocation |
| 226 | + */ |
| 227 | + protected function findLocations() { |
| 228 | + $locations = array(); |
| 229 | + |
| 230 | + while ( ( $row = $this->queryResult->getNext() ) !== false ) { |
| 231 | + $locations = array_merge( $locations, $this->handleResultRow( $row ) ); |
| 232 | + } |
| 233 | + |
| 234 | + return $locations; |
| 235 | + } |
| 236 | + |
| 237 | + /** |
| 238 | + * Returns the locations found in the provided result row. |
| 239 | + * |
| 240 | + * @since 0.7.3 |
| 241 | + * |
| 242 | + * @param array $row Array of SMWResultArray |
| 243 | + * |
| 244 | + * @return array of MapsLocation |
| 245 | + */ |
| 246 | + protected function handleResultRow( array /* of SMWResultArray */ $row ) { |
| 247 | + $coords = array(); |
| 248 | + $properties = array(); |
| 249 | + |
| 250 | + $title = ''; |
| 251 | + $text = ''; |
| 252 | + |
| 253 | + // Loop throught all fields of the record. |
| 254 | + foreach ( $row as $i => $resultArray ) { |
| 255 | + /* SMWPrintRequest */ $printRequest = $resultArray->getPrintRequest(); |
| 256 | + |
| 257 | + // Loop throught all the parts of the field value. |
| 258 | + while ( ( /* SMWDataValue */ $object = $resultArray->getNextObject() ) !== false ) { |
| 259 | + if ( $object->getTypeID() == '_wpg' && $i == 0 ) { |
| 260 | + list( $title, $text ) = $this->handleResultSubject( $object ); |
| 261 | + } |
| 262 | + else if ( $object->getTypeID() != '_geo' && $i != 0 ) { |
| 263 | + $properties[] = $this->handleResultProperty( $object, $printRequest ); |
| 264 | + } |
| 265 | + else if ( $printRequest->getMode() == SMWPrintRequest::PRINT_PROP && $printRequest->getTypeID() == '_geo' ) { |
| 266 | + $coords[] = $object->getDBkeys(); |
| 267 | + } |
| 268 | + } |
| 269 | + } |
| 270 | + |
| 271 | + if ( count( $properties ) > 0 && $text != '' ) { |
| 272 | + $text .= $this->subjectSeparator; |
| 273 | + } |
| 274 | + |
| 275 | + $icon = $this->getLocationIcon( $row ); |
| 276 | + |
| 277 | + return $this->buildLocationsList( $coords, $title, $text, $icon, $properties ); |
| 278 | + } |
| 279 | + |
| 280 | + /** |
| 281 | + * Handles a SMWDataValue subject value. |
| 282 | + * Gets the plain text title and creates the HTML text with headers and the like. |
| 283 | + * |
| 284 | + * @since 0.8 |
| 285 | + * |
| 286 | + * @param SMWDataValue $object |
| 287 | + * |
| 288 | + * @return array with title and text |
| 289 | + */ |
| 290 | + protected function handleResultSubject( SMWDataValue $object ) { |
| 291 | + global $wgUser; |
| 292 | + |
| 293 | + $title = $object->getLongText( $this->outputmode, null ); |
| 294 | + $text = ''; |
| 295 | + |
| 296 | + if ( $this->showSubject ) { |
| 297 | + if ( !$this->titleLinkSeperate && $this->linkAbsolute ) { |
| 298 | + $text = Html::element( |
| 299 | + 'a', |
| 300 | + array( 'href' => $object->getTitle()->getFullUrl() ), |
| 301 | + $object->getTitle()->getText() |
| 302 | + ); |
| 303 | + } |
| 304 | + else { |
| 305 | + $text = $object->getLongText( $this->outputmode, $wgUser->getSkin() ); |
| 306 | + } |
| 307 | + |
| 308 | + if ( $this->boldSubject ) { |
| 309 | + $text = '<b>' . $text . '</b>'; |
| 310 | + } |
| 311 | + |
| 312 | + if ( $this->titleLinkSeperate ) { |
| 313 | + $text .= Html::element( |
| 314 | + 'a', |
| 315 | + array( 'href' => $object->getTitle()->getFullUrl() ), |
| 316 | + str_replace( '$1', $object->getTitle()->getText(), $this->params['pagelinktext'] ) |
| 317 | + ); |
| 318 | + } |
| 319 | + } |
| 320 | + |
| 321 | + return array( $title, $text ); |
| 322 | + } |
| 323 | + |
| 324 | + /** |
| 325 | + * Handles a single property (SMWPrintRequest) to be displayed for a record (SMWDataValue). |
| 326 | + * |
| 327 | + * @since 0.8 |
| 328 | + * |
| 329 | + * @param SMWDataValue $object |
| 330 | + * @param SMWPrintRequest $printRequest |
| 331 | + * |
| 332 | + * @return string |
| 333 | + */ |
| 334 | + protected function handleResultProperty( SMWDataValue $object, SMWPrintRequest $printRequest ) { |
| 335 | + global $wgUser; |
| 336 | + |
| 337 | + if ( $this->template ) { |
| 338 | + if ( $object instanceof SMWWikiPageValue ) { |
| 339 | + return $object->getTitle()->getPrefixedText(); |
| 340 | + } else { |
| 341 | + return $object->getLongText( SMW_OUTPUT_WIKI, NULL ); |
| 342 | + } |
| 343 | + } |
| 344 | + |
| 345 | + if ( $this->linkAbsolute ) { |
| 346 | + $t = Title::newFromText( $printRequest->getHTMLText( NULL ), SMW_NS_PROPERTY ); |
| 347 | + |
| 348 | + if ( $t->exists() ) { |
| 349 | + $propertyName = $propertyName = Html::element( |
| 350 | + 'a', |
| 351 | + array( 'href' => $t->getFullUrl() ), |
| 352 | + $printRequest->getHTMLText( NULL ) |
| 353 | + ); |
| 354 | + } |
| 355 | + else { |
| 356 | + $propertyName = $printRequest->getHTMLText( NULL ); |
| 357 | + } |
| 358 | + } |
| 359 | + else { |
| 360 | + $propertyName = $printRequest->getHTMLText( $wgUser->getSkin() ); |
| 361 | + } |
| 362 | + |
| 363 | + if ( $this->linkAbsolute ) { |
| 364 | + $hasPage = $object->getTypeID() == '_wpg'; |
| 365 | + |
| 366 | + if ( $hasPage ) { |
| 367 | + $t = Title::newFromText( $object->getLongText( $this->outputmode, NULL ), NS_MAIN ); |
| 368 | + $hasPage = $t->exists(); |
| 369 | + } |
| 370 | + |
| 371 | + if ( $hasPage ) { |
| 372 | + $propertyValue = Html::element( |
| 373 | + 'a', |
| 374 | + array( 'href' => $t->getFullUrl() ), |
| 375 | + $object->getLongText( $this->outputmode, NULL ) |
| 376 | + ); |
| 377 | + } |
| 378 | + else { |
| 379 | + $propertyValue = $object->getLongText( $this->outputmode, NULL ); |
| 380 | + } |
| 381 | + } |
| 382 | + else { |
| 383 | + $propertyValue = $object->getLongText( $this->outputmode, $wgUser->getSkin() ); |
| 384 | + } |
| 385 | + |
| 386 | + return $propertyName . ( $propertyName == '' ? '' : ': ' ) . $propertyValue; |
| 387 | + } |
| 388 | + |
| 389 | + /** |
| 390 | + * Builds a set of locations with the provided title, text and icon. |
| 391 | + * |
| 392 | + * @since 0.8 |
| 393 | + * |
| 394 | + * @param array $coords |
| 395 | + * @param string $title |
| 396 | + * @param string $text |
| 397 | + * @param string $icon |
| 398 | + * @param array $properties |
| 399 | + * |
| 400 | + * @return array of MapsLocation |
| 401 | + */ |
| 402 | + protected function buildLocationsList( array $coords, $title, $text, $icon, array $properties ) { |
| 403 | + $locations = array(); |
| 404 | + |
| 405 | + if ( $this->template ) { |
| 406 | + global $wgParser; |
| 407 | + $parser = clone $wgParser; |
| 408 | + } |
| 409 | + else { |
| 410 | + $text .= implode( '<br />', $properties ); |
| 411 | + } |
| 412 | + |
| 413 | + foreach ( $coords as $coord ) { |
| 414 | + if ( count( $coord ) >= 2 ) { |
| 415 | + $location = new MapsLocation(); |
| 416 | + $location->setCoordinates( $coord ); |
| 417 | + |
| 418 | + if ( $location->isValid() ) { |
| 419 | + if ( $this->template ) { |
| 420 | + $segments = array_merge( |
| 421 | + array( $this->template, 'title=' . $title, 'latitude=' . $location->getLatitude(), 'longitude=' . $location->getLongitude() ), |
| 422 | + $properties |
| 423 | + ); |
| 424 | + |
| 425 | + $text .= $parser->parse( '{{' . implode( '|', $segments ) . '}}', $parser->getTitle(), new ParserOptions() )->getText(); |
| 426 | + } |
| 427 | + |
| 428 | + $location->setTitle( $title ); |
| 429 | + $location->setText( $text ); |
| 430 | + $location->setIcon( $icon ); |
| 431 | + |
| 432 | + $locations[] = $location; |
| 433 | + } |
| 434 | + } |
| 435 | + } |
| 436 | + |
| 437 | + return $locations; |
| 438 | + } |
| 439 | + |
| 440 | + /** |
| 441 | + * Get the icon for a row. |
| 442 | + * |
| 443 | + * @since 0.7.3 |
| 444 | + * |
| 445 | + * @param array $row |
| 446 | + * |
| 447 | + * @return string |
| 448 | + */ |
| 449 | + protected function getLocationIcon( array $row ) { |
| 450 | + $icon = ''; |
| 451 | + $legend_labels = array(); |
| 452 | + |
| 453 | + // Look for display_options field, which can be set by Semantic Compound Queries |
| 454 | + // the location of this field changed in SMW 1.5 |
| 455 | + $display_location = method_exists( $row[0], 'getResultSubject' ) ? $row[0]->getResultSubject() : $row[0]; |
| 456 | + |
| 457 | + if ( property_exists( $display_location, 'display_options' ) && is_array( $display_location->display_options ) ) { |
| 458 | + $display_options = $display_location->display_options; |
| 459 | + if ( array_key_exists( 'icon', $display_options ) ) { |
| 460 | + $icon = $display_options['icon']; |
| 461 | + |
| 462 | + // This is somewhat of a hack - if a legend label has been set, we're getting it for every point, instead of just once per icon |
| 463 | + if ( array_key_exists( 'legend label', $display_options ) ) { |
| 464 | + |
| 465 | + $legend_label = $display_options['legend label']; |
| 466 | + |
| 467 | + if ( ! array_key_exists( $icon, $legend_labels ) ) { |
| 468 | + $legend_labels[$icon] = $legend_label; |
| 469 | + } |
| 470 | + } |
| 471 | + } |
| 472 | + } // Icon can be set even for regular, non-compound queries If it is, though, we have to translate the name into a URL here |
| 473 | + elseif ( $this->icon != '' ) { |
| 474 | + $icon = MapsMapper::getFileUrl( $this->icon ); |
| 475 | + } |
| 476 | + |
| 477 | + return $icon; |
| 478 | + } |
| 479 | + |
| 480 | +} |
Property changes on: trunk/extensions/SemanticMaps/includes/queryprinters/SM_QueryHandler.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 481 | + native |
Index: trunk/extensions/SemanticMaps/includes/queryprinters/SM_Mapper.php |
— | — | @@ -0,0 +1,76 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * Default class to assign as handler for map result formats. |
| 6 | + * The reason SMMapPrinter is not used for this directly is that |
| 7 | + * this would not allow having a deriving class of SMMapPrinter |
| 8 | + * for a particular mapping service. |
| 9 | + * |
| 10 | + * @file SM_Mapper.php |
| 11 | + * @ingroup SemanticMaps |
| 12 | + * |
| 13 | + * @licence GNU GPL v3 |
| 14 | + * @author Jeroen De Dauw < jeroendedauw@gmail.com > |
| 15 | + */ |
| 16 | +final class SMMapper { |
| 17 | + |
| 18 | + /** |
| 19 | + * @var SMMapPrinter |
| 20 | + */ |
| 21 | + protected $queryPrinter; |
| 22 | + |
| 23 | + /** |
| 24 | + * @since 0.8 |
| 25 | + * |
| 26 | + * @var boolean |
| 27 | + */ |
| 28 | + protected $isMapFormat; |
| 29 | + |
| 30 | + /** |
| 31 | + * Constructor. |
| 32 | + * |
| 33 | + * @param $format String |
| 34 | + * @param $inline |
| 35 | + */ |
| 36 | + public function __construct( $format, $inline ) { |
| 37 | + global $egMapsDefaultServices; |
| 38 | + |
| 39 | + $this->isMapFormat = $format == 'map'; |
| 40 | + |
| 41 | + // TODO: allow service parameter to override the default |
| 42 | + // Note: if this is allowed, then the getParameters should only return the base parameters. |
| 43 | + if ( $this->isMapFormat ) $format = $egMapsDefaultServices['qp']; |
| 44 | + |
| 45 | + // Get the instance of the service class. |
| 46 | + $service = MapsMappingServices::getValidServiceInstance( $format, 'qp' ); |
| 47 | + |
| 48 | + // Get an instance of the class handling the current query printer and service. |
| 49 | + $QPClass = $service->getFeature( 'qp' ); |
| 50 | + $this->queryPrinter = new $QPClass( $format, $inline, $service ); |
| 51 | + } |
| 52 | + |
| 53 | + /** |
| 54 | + * Intercept calls to getName, so special behaviour for the map format can be implemented. |
| 55 | + * |
| 56 | + * @since 0.8 |
| 57 | + * |
| 58 | + * @return string |
| 59 | + */ |
| 60 | + public function getName() { |
| 61 | + return $this->isMapFormat ? wfMsg( 'maps_map' ) : $this->queryPrinter->getName(); |
| 62 | + } |
| 63 | + |
| 64 | + /** |
| 65 | + * SMW thinks this class is a SMWResultPrinter, and calls methods that should |
| 66 | + * be forewarded to $this->queryPrinter on it. |
| 67 | + * |
| 68 | + * @since 0.8 |
| 69 | + * |
| 70 | + * @param string $name |
| 71 | + * @param array $arguments |
| 72 | + */ |
| 73 | + public function __call( $name, array $arguments ) { |
| 74 | + return call_user_func_array( array( $this->queryPrinter, $name ), $arguments ); |
| 75 | + } |
| 76 | + |
| 77 | +} |
Property changes on: trunk/extensions/SemanticMaps/includes/queryprinters/SM_Mapper.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 78 | + native |
Index: trunk/extensions/SemanticMaps/includes/queryprinters/SM_KMLPrinter.php |
— | — | @@ -0,0 +1,146 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * SMWResultPrinter class for printing a query result as KML. |
| 6 | + * |
| 7 | + * @since 0.7.3 |
| 8 | + * |
| 9 | + * @file SM_KMLPrinter.php |
| 10 | + * @ingroup SemanticMaps |
| 11 | + * |
| 12 | + * @author Jeroen De Dauw |
| 13 | + */ |
| 14 | +class SMKMLPrinter extends SMWResultPrinter { |
| 15 | + |
| 16 | + /** |
| 17 | + * Handler of the print request. |
| 18 | + * |
| 19 | + * @since 0.7.3 |
| 20 | + * |
| 21 | + * @param SMWQueryResult $res |
| 22 | + * @param $outputmode |
| 23 | + * |
| 24 | + * @return array |
| 25 | + */ |
| 26 | + public function getResultText( /* SMWQueryResult */ $res, $outputmode ) { |
| 27 | + $validator = new Validator( $this->getName(), false ); |
| 28 | + |
| 29 | + $validator->setParameters( $this->m_params, $this->getParameterInfo() ); |
| 30 | + |
| 31 | + $validator->validateParameters(); |
| 32 | + |
| 33 | + $fatalError = $validator->hasFatalError(); |
| 34 | + |
| 35 | + if ( $fatalError !== false ) { |
| 36 | + return '<span class="errorbox">' . |
| 37 | + htmlspecialchars( wfMsgExt( 'validator-fatal-error', 'parsemag', $fatalError->getMessage() ) ) . |
| 38 | + '</span>'; |
| 39 | + } |
| 40 | + |
| 41 | + $params = $validator->getParameterValues(); |
| 42 | + |
| 43 | + if ( $outputmode == SMW_OUTPUT_FILE ) { |
| 44 | + return $this->getKML( $res, $outputmode, $params ); |
| 45 | + } |
| 46 | + else { |
| 47 | + return $this->getLink( $res, $outputmode, $params ); |
| 48 | + } |
| 49 | + } |
| 50 | + |
| 51 | + /** |
| 52 | + * Returns a list of parameter definitions. |
| 53 | + * |
| 54 | + * @since 0.7.4 |
| 55 | + * |
| 56 | + * @return array |
| 57 | + */ |
| 58 | + protected function getParameterInfo() { |
| 59 | + $params = array(); |
| 60 | + |
| 61 | + $params[] = new Parameter( 'text' ); |
| 62 | + $params[] = new Parameter( 'title' ); |
| 63 | + |
| 64 | + $params[] = new Parameter( 'linkabsolute', Parameter::TYPE_BOOLEAN, true ); |
| 65 | + |
| 66 | + $params['pagelinktext'] = new Parameter( 'pagelinktext', Parameter::TYPE_STRING, wfMsg( 'semanticmaps-default-kml-pagelink' ) ); |
| 67 | + |
| 68 | + return $params; |
| 69 | + } |
| 70 | + |
| 71 | + /** |
| 72 | + * Returns the KML for the query result. |
| 73 | + * |
| 74 | + * @since 0.7.3 |
| 75 | + * |
| 76 | + * @param SMWQueryResult $res |
| 77 | + * @param integer $outputmode |
| 78 | + * @param array $params |
| 79 | + * |
| 80 | + * @return string |
| 81 | + */ |
| 82 | + protected function getKML( SMWQueryResult $res, $outputmode, array $params ) { |
| 83 | + $queryHandler = new SMQueryHandler( $res, $outputmode, $params['linkabsolute'], $params['pagelinktext'], false ); |
| 84 | + $queryHandler->setText( $params['text'] ); |
| 85 | + $queryHandler->setTitle( $params['title'] ); |
| 86 | + $queryHandler->setSubjectSeparator( '' ); |
| 87 | + |
| 88 | + $formatter = new MapsKMLFormatter( $params ); |
| 89 | + $formatter->addPlacemarks( $queryHandler->getLocations() ); |
| 90 | + |
| 91 | + return $formatter->getKML(); |
| 92 | + } |
| 93 | + |
| 94 | + /** |
| 95 | + * Returns a link (HTML) pointing to a query that returns the actual KML file. |
| 96 | + * |
| 97 | + * @since 0.7.3 |
| 98 | + * |
| 99 | + * @param SMWQueryResult $res |
| 100 | + * @param integer $outputmode |
| 101 | + * @param array $params |
| 102 | + * |
| 103 | + * @return string |
| 104 | + */ |
| 105 | + protected function getLink( SMWQueryResult $res, $outputmode, array $params ) { |
| 106 | + $searchLabel = $this->getSearchLabel( $outputmode ); |
| 107 | + $link = $res->getQueryLink( $searchLabel ? $searchLabel : wfMsgForContent( 'semanticmaps-kml-link' ) ); |
| 108 | + $link->setParameter( 'kml', 'format' ); |
| 109 | + |
| 110 | + $link->setParameter( $params['linkabsolute'] ? 'yes' : 'no', 'linkabsolute' ); |
| 111 | + |
| 112 | + $link->setParameter( $params['pagelinktext'], 'pagelinktext' ); |
| 113 | + |
| 114 | + if ( array_key_exists( 'limit', $this->m_params ) ) { |
| 115 | + $link->setParameter( $this->m_params['limit'], 'limit' ); |
| 116 | + } else { // Use a reasonable default limit. |
| 117 | + $link->setParameter( 20, 'limit' ); |
| 118 | + } |
| 119 | + |
| 120 | + $this->isHTML = ( $outputmode == SMW_OUTPUT_HTML ); |
| 121 | + |
| 122 | + return $link->getText( $outputmode, $this->mLinker ); |
| 123 | + } |
| 124 | + |
| 125 | + /** |
| 126 | + * @see SMWResultPrinter::getMimeType() |
| 127 | + */ |
| 128 | + public function getMimeType( $res ) { |
| 129 | + return 'application/vnd.google-earth.kml+xml'; |
| 130 | + } |
| 131 | + |
| 132 | + /** |
| 133 | + * @see SMWResultPrinter::getFileName() |
| 134 | + */ |
| 135 | + public function getFileName( $res ) { |
| 136 | + // TODO |
| 137 | + return 'kml.kml'; |
| 138 | + } |
| 139 | + |
| 140 | + /** |
| 141 | + * @see SMWResultPrinter::getName() |
| 142 | + */ |
| 143 | + public final function getName() { |
| 144 | + return wfMsg( 'semanticmaps-kml' ); |
| 145 | + } |
| 146 | + |
| 147 | +} |
Property changes on: trunk/extensions/SemanticMaps/includes/queryprinters/SM_KMLPrinter.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 148 | + native |
Index: trunk/extensions/SemanticMaps/includes/SM_AreaValueDescription.php |
— | — | @@ -0,0 +1,197 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * Description of a geographical area defined by a coordinates set and a distance to the bounds. |
| 6 | + * The bounds are a 'rectangle' (but bend due to the earhs curvature), as the resulting query |
| 7 | + * would otherwise be to resource intensive. |
| 8 | + * |
| 9 | + * @since 0.6 |
| 10 | + * |
| 11 | + * @file SM_AreaValueDescription.php |
| 12 | + * @ingroup SemanticMaps |
| 13 | + * |
| 14 | + * @author Jeroen De Dauw |
| 15 | + * |
| 16 | + * TODO: would be awesome to use Spatial Extensions to select coordinates |
| 17 | + */ |
| 18 | +class SMAreaValueDescription extends SMWValueDescription { |
| 19 | + |
| 20 | + /** |
| 21 | + * Associative array containing the bounds of the area, or false when not set. |
| 22 | + * |
| 23 | + * @since 0.6 |
| 24 | + * |
| 25 | + * @var mixed |
| 26 | + */ |
| 27 | + protected $bounds = false; |
| 28 | + |
| 29 | + /** |
| 30 | + * Constructor. |
| 31 | + * |
| 32 | + * @since 0.6 |
| 33 | + * |
| 34 | + * @param SMGeoCoordsValue $dataValue |
| 35 | + * @param string $comparator |
| 36 | + * @param string $radius |
| 37 | + */ |
| 38 | + public function __construct( SMGeoCoordsValue $dataValue, $comparator, $radius ) { |
| 39 | + parent::__construct( $dataValue, $comparator ); |
| 40 | + |
| 41 | + // Only if the MapsGeoFunctions class is loaded, we can create the bounding box. |
| 42 | + if ( self::geoFunctionsAreAvailable() ) { |
| 43 | + $this->calculateBounds( $dataValue, $radius ); |
| 44 | + } |
| 45 | + } |
| 46 | + |
| 47 | + /** |
| 48 | + * Sets the mBounds fields to an array returned by SMAreaValueDescription::getBoundingBox. |
| 49 | + * |
| 50 | + * @since 0.6 |
| 51 | + * |
| 52 | + * @param SMGeoCoordsValue $dataValue |
| 53 | + * @param string $radius |
| 54 | + */ |
| 55 | + protected function calculateBounds( SMGeoCoordsValue $dataValue, $radius ) { |
| 56 | + $this->bounds = self::getBoundingBox( |
| 57 | + $dataValue->getCoordinateSet(), |
| 58 | + MapsDistanceParser::parseDistance( $radius ) |
| 59 | + ); |
| 60 | + } |
| 61 | + |
| 62 | + /** |
| 63 | + * @see SMWDescription:getQueryString |
| 64 | + * |
| 65 | + * @since 0.6 |
| 66 | + * |
| 67 | + * @param Boolean $asvalue |
| 68 | + */ |
| 69 | + public function getQueryString( $asValue = false ) { |
| 70 | + if ( $this->m_datavalue !== null ) { |
| 71 | + $queryString = $this->m_datavalue->getWikiValue(); |
| 72 | + return $asValue ? $queryString : "[[$queryString]]"; |
| 73 | + } else { |
| 74 | + return $asValue ? '+' : ''; |
| 75 | + } |
| 76 | + } |
| 77 | + |
| 78 | + /** |
| 79 | + * @see SMWDescription:prune |
| 80 | + * |
| 81 | + * @since 0.6 |
| 82 | + */ |
| 83 | + public function prune( &$maxsize, &$maxdepth, &$log ) { |
| 84 | + if ( ( $maxsize < $this->getSize() ) || ( $maxdepth < $this->getDepth() ) ) { |
| 85 | + $log[] = $this->getQueryString(); |
| 86 | + |
| 87 | + $result = new SMWThingDescription(); |
| 88 | + $result->setPrintRequests( $this->getPrintRequests() ); |
| 89 | + |
| 90 | + return $result; |
| 91 | + } else { |
| 92 | + $maxsize = $maxsize - $this->getSize(); |
| 93 | + $maxdepth = $maxdepth - $this->getDepth(); |
| 94 | + return $this; |
| 95 | + } |
| 96 | + } |
| 97 | + |
| 98 | + /** |
| 99 | + * Returns the bounds of the area. |
| 100 | + * |
| 101 | + * @since 0.6 |
| 102 | + * |
| 103 | + * @return array |
| 104 | + */ |
| 105 | + public function getBounds() { |
| 106 | + return $this->bounds; |
| 107 | + } |
| 108 | + |
| 109 | + /** |
| 110 | + * @see SMWDescription::getSQLCondition |
| 111 | + * |
| 112 | + * @since 0.6 |
| 113 | + * |
| 114 | + * @param string $tableName |
| 115 | + * @param array $fieldNames |
| 116 | + * @param DatabaseBase or Database $dbs |
| 117 | + * |
| 118 | + * @return string or false |
| 119 | + */ |
| 120 | + public function getSQLCondition( $tableName, array $fieldNames, $dbs ) { |
| 121 | + global $smgUseSpatialExtensions; |
| 122 | + |
| 123 | + $dataValue = $this->getDatavalue(); |
| 124 | + |
| 125 | + // Only execute the query when the description's type is geographical coordinates, |
| 126 | + // the description is valid, and the near comparator is used. |
| 127 | + if ( $dataValue->getTypeID() != '_geo' |
| 128 | + || !$dataValue->isValid() |
| 129 | + || ( $this->getComparator() != SMW_CMP_EQ && $this->getComparator() != SMW_CMP_NEQ ) |
| 130 | + ) { |
| 131 | + return false; |
| 132 | + } |
| 133 | + |
| 134 | + $north = $dbs->addQuotes( $this->bounds['north'] ); |
| 135 | + $east = $dbs->addQuotes( $this->bounds['east'] ); |
| 136 | + $south = $dbs->addQuotes( $this->bounds['south'] ); |
| 137 | + $west = $dbs->addQuotes( $this->bounds['west'] ); |
| 138 | + |
| 139 | + $isEq = $this->getComparator() == SMW_CMP_EQ; |
| 140 | + |
| 141 | + if ( $smgUseSpatialExtensions ) { |
| 142 | + // TODO |
| 143 | + $sql = ''; |
| 144 | + } |
| 145 | + else { |
| 146 | + $conditions = array(); |
| 147 | + |
| 148 | + $smallerThen = $isEq ? '<' : '>='; |
| 149 | + $biggerThen = $isEq ? '>' : '<='; |
| 150 | + $joinCond = $isEq ? '&&' : '||'; |
| 151 | + |
| 152 | + $conditions[] = "{$tableName}.$fieldNames[0] $smallerThen $north"; |
| 153 | + $conditions[] = "{$tableName}.$fieldNames[0] $biggerThen $south"; |
| 154 | + $conditions[] = "{$tableName}.$fieldNames[1] $smallerThen $east"; |
| 155 | + $conditions[] = "{$tableName}.$fieldNames[1] $biggerThen $west"; |
| 156 | + |
| 157 | + $sql = implode( " $joinCond ", $conditions ); |
| 158 | + } |
| 159 | + |
| 160 | + return $sql; |
| 161 | + } |
| 162 | + |
| 163 | + /** |
| 164 | + * Returns the lat and lon limits of a bounding box around a circle defined by the provided parameters. |
| 165 | + * |
| 166 | + * @since 0.6 |
| 167 | + * |
| 168 | + * @param array $centerCoordinates Array containing non-directional float coordinates with lat and lon keys. |
| 169 | + * @param float $circleRadius The radidus of the circle to create a bounding box for, in m. |
| 170 | + * |
| 171 | + * @return An associative array containing the limits with keys north, east, south and west. |
| 172 | + */ |
| 173 | + protected static function getBoundingBox( array $centerCoordinates, $circleRadius ) { |
| 174 | + $north = MapsGeoFunctions::findDestination( $centerCoordinates, 0, $circleRadius ); |
| 175 | + $east = MapsGeoFunctions::findDestination( $centerCoordinates, 90, $circleRadius ); |
| 176 | + $south = MapsGeoFunctions::findDestination( $centerCoordinates, 180, $circleRadius ); |
| 177 | + $west = MapsGeoFunctions::findDestination( $centerCoordinates, 270, $circleRadius ); |
| 178 | + |
| 179 | + return array( |
| 180 | + 'north' => $north['lat'], |
| 181 | + 'east' => $east['lon'], |
| 182 | + 'south' => $south['lat'], |
| 183 | + 'west' => $west['lon'], |
| 184 | + ); |
| 185 | + } |
| 186 | + |
| 187 | + /** |
| 188 | + * Returns a boolean indicating if MapsGeoFunctions is available. |
| 189 | + * |
| 190 | + * @since 0.6 |
| 191 | + * |
| 192 | + * @return boolean |
| 193 | + */ |
| 194 | + protected static function geoFunctionsAreAvailable() { |
| 195 | + return class_exists( 'MapsGeoFunctions' ); |
| 196 | + } |
| 197 | + |
| 198 | +} |
\ No newline at end of file |
Property changes on: trunk/extensions/SemanticMaps/includes/SM_AreaValueDescription.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 199 | + native |
Index: trunk/extensions/SemanticMaps/COPYING |
— | — | @@ -0,0 +1,682 @@ |
| 2 | +The license text below "----" applies to all files within this distribution, other |
| 3 | +than those that are in a directory which contains files named "LICENSE" or |
| 4 | +"COPYING", or a subdirectory thereof. For those files, the license text contained in |
| 5 | +said file overrides any license information contained in directories of smaller depth. |
| 6 | +Alternative licenses are typically used for software that is provided by external |
| 7 | +parties, and merely packaged with this software for convenience. |
| 8 | +---- |
| 9 | + |
| 10 | + GNU GENERAL PUBLIC LICENSE |
| 11 | + Version 3, 29 June 2007 |
| 12 | + |
| 13 | + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> |
| 14 | + Everyone is permitted to copy and distribute verbatim copies |
| 15 | + of this license document, but changing it is not allowed. |
| 16 | + |
| 17 | + Preamble |
| 18 | + |
| 19 | + The GNU General Public License is a free, copyleft license for |
| 20 | +software and other kinds of works. |
| 21 | + |
| 22 | + The licenses for most software and other practical works are designed |
| 23 | +to take away your freedom to share and change the works. By contrast, |
| 24 | +the GNU General Public License is intended to guarantee your freedom to |
| 25 | +share and change all versions of a program--to make sure it remains free |
| 26 | +software for all its users. We, the Free Software Foundation, use the |
| 27 | +GNU General Public License for most of our software; it applies also to |
| 28 | +any other work released this way by its authors. You can apply it to |
| 29 | +your programs, too. |
| 30 | + |
| 31 | + When we speak of free software, we are referring to freedom, not |
| 32 | +price. Our General Public Licenses are designed to make sure that you |
| 33 | +have the freedom to distribute copies of free software (and charge for |
| 34 | +them if you wish), that you receive source code or can get it if you |
| 35 | +want it, that you can change the software or use pieces of it in new |
| 36 | +free programs, and that you know you can do these things. |
| 37 | + |
| 38 | + To protect your rights, we need to prevent others from denying you |
| 39 | +these rights or asking you to surrender the rights. Therefore, you have |
| 40 | +certain responsibilities if you distribute copies of the software, or if |
| 41 | +you modify it: responsibilities to respect the freedom of others. |
| 42 | + |
| 43 | + For example, if you distribute copies of such a program, whether |
| 44 | +gratis or for a fee, you must pass on to the recipients the same |
| 45 | +freedoms that you received. You must make sure that they, too, receive |
| 46 | +or can get the source code. And you must show them these terms so they |
| 47 | +know their rights. |
| 48 | + |
| 49 | + Developers that use the GNU GPL protect your rights with two steps: |
| 50 | +(1) assert copyright on the software, and (2) offer you this License |
| 51 | +giving you legal permission to copy, distribute and/or modify it. |
| 52 | + |
| 53 | + For the developers' and authors' protection, the GPL clearly explains |
| 54 | +that there is no warranty for this free software. For both users' and |
| 55 | +authors' sake, the GPL requires that modified versions be marked as |
| 56 | +changed, so that their problems will not be attributed erroneously to |
| 57 | +authors of previous versions. |
| 58 | + |
| 59 | + Some devices are designed to deny users access to install or run |
| 60 | +modified versions of the software inside them, although the manufacturer |
| 61 | +can do so. This is fundamentally incompatible with the aim of |
| 62 | +protecting users' freedom to change the software. The systematic |
| 63 | +pattern of such abuse occurs in the area of products for individuals to |
| 64 | +use, which is precisely where it is most unacceptable. Therefore, we |
| 65 | +have designed this version of the GPL to prohibit the practice for those |
| 66 | +products. If such problems arise substantially in other domains, we |
| 67 | +stand ready to extend this provision to those domains in future versions |
| 68 | +of the GPL, as needed to protect the freedom of users. |
| 69 | + |
| 70 | + Finally, every program is threatened constantly by software patents. |
| 71 | +States should not allow patents to restrict development and use of |
| 72 | +software on general-purpose computers, but in those that do, we wish to |
| 73 | +avoid the special danger that patents applied to a free program could |
| 74 | +make it effectively proprietary. To prevent this, the GPL assures that |
| 75 | +patents cannot be used to render the program non-free. |
| 76 | + |
| 77 | + The precise terms and conditions for copying, distribution and |
| 78 | +modification follow. |
| 79 | + |
| 80 | + TERMS AND CONDITIONS |
| 81 | + |
| 82 | + 0. Definitions. |
| 83 | + |
| 84 | + "This License" refers to version 3 of the GNU General Public License. |
| 85 | + |
| 86 | + "Copyright" also means copyright-like laws that apply to other kinds of |
| 87 | +works, such as semiconductor masks. |
| 88 | + |
| 89 | + "The Program" refers to any copyrightable work licensed under this |
| 90 | +License. Each licensee is addressed as "you". "Licensees" and |
| 91 | +"recipients" may be individuals or organizations. |
| 92 | + |
| 93 | + To "modify" a work means to copy from or adapt all or part of the work |
| 94 | +in a fashion requiring copyright permission, other than the making of an |
| 95 | +exact copy. The resulting work is called a "modified version" of the |
| 96 | +earlier work or a work "based on" the earlier work. |
| 97 | + |
| 98 | + A "covered work" means either the unmodified Program or a work based |
| 99 | +on the Program. |
| 100 | + |
| 101 | + To "propagate" a work means to do anything with it that, without |
| 102 | +permission, would make you directly or secondarily liable for |
| 103 | +infringement under applicable copyright law, except executing it on a |
| 104 | +computer or modifying a private copy. Propagation includes copying, |
| 105 | +distribution (with or without modification), making available to the |
| 106 | +public, and in some countries other activities as well. |
| 107 | + |
| 108 | + To "convey" a work means any kind of propagation that enables other |
| 109 | +parties to make or receive copies. Mere interaction with a user through |
| 110 | +a computer network, with no transfer of a copy, is not conveying. |
| 111 | + |
| 112 | + An interactive user interface displays "Appropriate Legal Notices" |
| 113 | +to the extent that it includes a convenient and prominently visible |
| 114 | +feature that (1) displays an appropriate copyright notice, and (2) |
| 115 | +tells the user that there is no warranty for the work (except to the |
| 116 | +extent that warranties are provided), that licensees may convey the |
| 117 | +work under this License, and how to view a copy of this License. If |
| 118 | +the interface presents a list of user commands or options, such as a |
| 119 | +menu, a prominent item in the list meets this criterion. |
| 120 | + |
| 121 | + 1. Source Code. |
| 122 | + |
| 123 | + The "source code" for a work means the preferred form of the work |
| 124 | +for making modifications to it. "Object code" means any non-source |
| 125 | +form of a work. |
| 126 | + |
| 127 | + A "Standard Interface" means an interface that either is an official |
| 128 | +standard defined by a recognized standards body, or, in the case of |
| 129 | +interfaces specified for a particular programming language, one that |
| 130 | +is widely used among developers working in that language. |
| 131 | + |
| 132 | + The "System Libraries" of an executable work include anything, other |
| 133 | +than the work as a whole, that (a) is included in the normal form of |
| 134 | +packaging a Major Component, but which is not part of that Major |
| 135 | +Component, and (b) serves only to enable use of the work with that |
| 136 | +Major Component, or to implement a Standard Interface for which an |
| 137 | +implementation is available to the public in source code form. A |
| 138 | +"Major Component", in this context, means a major essential component |
| 139 | +(kernel, window system, and so on) of the specific operating system |
| 140 | +(if any) on which the executable work runs, or a compiler used to |
| 141 | +produce the work, or an object code interpreter used to run it. |
| 142 | + |
| 143 | + The "Corresponding Source" for a work in object code form means all |
| 144 | +the source code needed to generate, install, and (for an executable |
| 145 | +work) run the object code and to modify the work, including scripts to |
| 146 | +control those activities. However, it does not include the work's |
| 147 | +System Libraries, or general-purpose tools or generally available free |
| 148 | +programs which are used unmodified in performing those activities but |
| 149 | +which are not part of the work. For example, Corresponding Source |
| 150 | +includes interface definition files associated with source files for |
| 151 | +the work, and the source code for shared libraries and dynamically |
| 152 | +linked subprograms that the work is specifically designed to require, |
| 153 | +such as by intimate data communication or control flow between those |
| 154 | +subprograms and other parts of the work. |
| 155 | + |
| 156 | + The Corresponding Source need not include anything that users |
| 157 | +can regenerate automatically from other parts of the Corresponding |
| 158 | +Source. |
| 159 | + |
| 160 | + The Corresponding Source for a work in source code form is that |
| 161 | +same work. |
| 162 | + |
| 163 | + 2. Basic Permissions. |
| 164 | + |
| 165 | + All rights granted under this License are granted for the term of |
| 166 | +copyright on the Program, and are irrevocable provided the stated |
| 167 | +conditions are met. This License explicitly affirms your unlimited |
| 168 | +permission to run the unmodified Program. The output from running a |
| 169 | +covered work is covered by this License only if the output, given its |
| 170 | +content, constitutes a covered work. This License acknowledges your |
| 171 | +rights of fair use or other equivalent, as provided by copyright law. |
| 172 | + |
| 173 | + You may make, run and propagate covered works that you do not |
| 174 | +convey, without conditions so long as your license otherwise remains |
| 175 | +in force. You may convey covered works to others for the sole purpose |
| 176 | +of having them make modifications exclusively for you, or provide you |
| 177 | +with facilities for running those works, provided that you comply with |
| 178 | +the terms of this License in conveying all material for which you do |
| 179 | +not control copyright. Those thus making or running the covered works |
| 180 | +for you must do so exclusively on your behalf, under your direction |
| 181 | +and control, on terms that prohibit them from making any copies of |
| 182 | +your copyrighted material outside their relationship with you. |
| 183 | + |
| 184 | + Conveying under any other circumstances is permitted solely under |
| 185 | +the conditions stated below. Sublicensing is not allowed; section 10 |
| 186 | +makes it unnecessary. |
| 187 | + |
| 188 | + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. |
| 189 | + |
| 190 | + No covered work shall be deemed part of an effective technological |
| 191 | +measure under any applicable law fulfilling obligations under article |
| 192 | +11 of the WIPO copyright treaty adopted on 20 December 1996, or |
| 193 | +similar laws prohibiting or restricting circumvention of such |
| 194 | +measures. |
| 195 | + |
| 196 | + When you convey a covered work, you waive any legal power to forbid |
| 197 | +circumvention of technological measures to the extent such circumvention |
| 198 | +is effected by exercising rights under this License with respect to |
| 199 | +the covered work, and you disclaim any intention to limit operation or |
| 200 | +modification of the work as a means of enforcing, against the work's |
| 201 | +users, your or third parties' legal rights to forbid circumvention of |
| 202 | +technological measures. |
| 203 | + |
| 204 | + 4. Conveying Verbatim Copies. |
| 205 | + |
| 206 | + You may convey verbatim copies of the Program's source code as you |
| 207 | +receive it, in any medium, provided that you conspicuously and |
| 208 | +appropriately publish on each copy an appropriate copyright notice; |
| 209 | +keep intact all notices stating that this License and any |
| 210 | +non-permissive terms added in accord with section 7 apply to the code; |
| 211 | +keep intact all notices of the absence of any warranty; and give all |
| 212 | +recipients a copy of this License along with the Program. |
| 213 | + |
| 214 | + You may charge any price or no price for each copy that you convey, |
| 215 | +and you may offer support or warranty protection for a fee. |
| 216 | + |
| 217 | + 5. Conveying Modified Source Versions. |
| 218 | + |
| 219 | + You may convey a work based on the Program, or the modifications to |
| 220 | +produce it from the Program, in the form of source code under the |
| 221 | +terms of section 4, provided that you also meet all of these conditions: |
| 222 | + |
| 223 | + a) The work must carry prominent notices stating that you modified |
| 224 | + it, and giving a relevant date. |
| 225 | + |
| 226 | + b) The work must carry prominent notices stating that it is |
| 227 | + released under this License and any conditions added under section |
| 228 | + 7. This requirement modifies the requirement in section 4 to |
| 229 | + "keep intact all notices". |
| 230 | + |
| 231 | + c) You must license the entire work, as a whole, under this |
| 232 | + License to anyone who comes into possession of a copy. This |
| 233 | + License will therefore apply, along with any applicable section 7 |
| 234 | + additional terms, to the whole of the work, and all its parts, |
| 235 | + regardless of how they are packaged. This License gives no |
| 236 | + permission to license the work in any other way, but it does not |
| 237 | + invalidate such permission if you have separately received it. |
| 238 | + |
| 239 | + d) If the work has interactive user interfaces, each must display |
| 240 | + Appropriate Legal Notices; however, if the Program has interactive |
| 241 | + interfaces that do not display Appropriate Legal Notices, your |
| 242 | + work need not make them do so. |
| 243 | + |
| 244 | + A compilation of a covered work with other separate and independent |
| 245 | +works, which are not by their nature extensions of the covered work, |
| 246 | +and which are not combined with it such as to form a larger program, |
| 247 | +in or on a volume of a storage or distribution medium, is called an |
| 248 | +"aggregate" if the compilation and its resulting copyright are not |
| 249 | +used to limit the access or legal rights of the compilation's users |
| 250 | +beyond what the individual works permit. Inclusion of a covered work |
| 251 | +in an aggregate does not cause this License to apply to the other |
| 252 | +parts of the aggregate. |
| 253 | + |
| 254 | + 6. Conveying Non-Source Forms. |
| 255 | + |
| 256 | + You may convey a covered work in object code form under the terms |
| 257 | +of sections 4 and 5, provided that you also convey the |
| 258 | +machine-readable Corresponding Source under the terms of this License, |
| 259 | +in one of these ways: |
| 260 | + |
| 261 | + a) Convey the object code in, or embodied in, a physical product |
| 262 | + (including a physical distribution medium), accompanied by the |
| 263 | + Corresponding Source fixed on a durable physical medium |
| 264 | + customarily used for software interchange. |
| 265 | + |
| 266 | + b) Convey the object code in, or embodied in, a physical product |
| 267 | + (including a physical distribution medium), accompanied by a |
| 268 | + written offer, valid for at least three years and valid for as |
| 269 | + long as you offer spare parts or customer support for that product |
| 270 | + model, to give anyone who possesses the object code either (1) a |
| 271 | + copy of the Corresponding Source for all the software in the |
| 272 | + product that is covered by this License, on a durable physical |
| 273 | + medium customarily used for software interchange, for a price no |
| 274 | + more than your reasonable cost of physically performing this |
| 275 | + conveying of source, or (2) access to copy the |
| 276 | + Corresponding Source from a network server at no charge. |
| 277 | + |
| 278 | + c) Convey individual copies of the object code with a copy of the |
| 279 | + written offer to provide the Corresponding Source. This |
| 280 | + alternative is allowed only occasionally and noncommercially, and |
| 281 | + only if you received the object code with such an offer, in accord |
| 282 | + with subsection 6b. |
| 283 | + |
| 284 | + d) Convey the object code by offering access from a designated |
| 285 | + place (gratis or for a charge), and offer equivalent access to the |
| 286 | + Corresponding Source in the same way through the same place at no |
| 287 | + further charge. You need not require recipients to copy the |
| 288 | + Corresponding Source along with the object code. If the place to |
| 289 | + copy the object code is a network server, the Corresponding Source |
| 290 | + may be on a different server (operated by you or a third party) |
| 291 | + that supports equivalent copying facilities, provided you maintain |
| 292 | + clear directions next to the object code saying where to find the |
| 293 | + Corresponding Source. Regardless of what server hosts the |
| 294 | + Corresponding Source, you remain obligated to ensure that it is |
| 295 | + available for as long as needed to satisfy these requirements. |
| 296 | + |
| 297 | + e) Convey the object code using peer-to-peer transmission, provided |
| 298 | + you inform other peers where the object code and Corresponding |
| 299 | + Source of the work are being offered to the general public at no |
| 300 | + charge under subsection 6d. |
| 301 | + |
| 302 | + A separable portion of the object code, whose source code is excluded |
| 303 | +from the Corresponding Source as a System Library, need not be |
| 304 | +included in conveying the object code work. |
| 305 | + |
| 306 | + A "User Product" is either (1) a "consumer product", which means any |
| 307 | +tangible personal property which is normally used for personal, family, |
| 308 | +or household purposes, or (2) anything designed or sold for incorporation |
| 309 | +into a dwelling. In determining whether a product is a consumer product, |
| 310 | +doubtful cases shall be resolved in favor of coverage. For a particular |
| 311 | +product received by a particular user, "normally used" refers to a |
| 312 | +typical or common use of that class of product, regardless of the status |
| 313 | +of the particular user or of the way in which the particular user |
| 314 | +actually uses, or expects or is expected to use, the product. A product |
| 315 | +is a consumer product regardless of whether the product has substantial |
| 316 | +commercial, industrial or non-consumer uses, unless such uses represent |
| 317 | +the only significant mode of use of the product. |
| 318 | + |
| 319 | + "Installation Information" for a User Product means any methods, |
| 320 | +procedures, authorization keys, or other information required to install |
| 321 | +and execute modified versions of a covered work in that User Product from |
| 322 | +a modified version of its Corresponding Source. The information must |
| 323 | +suffice to ensure that the continued functioning of the modified object |
| 324 | +code is in no case prevented or interfered with solely because |
| 325 | +modification has been made. |
| 326 | + |
| 327 | + If you convey an object code work under this section in, or with, or |
| 328 | +specifically for use in, a User Product, and the conveying occurs as |
| 329 | +part of a transaction in which the right of possession and use of the |
| 330 | +User Product is transferred to the recipient in perpetuity or for a |
| 331 | +fixed term (regardless of how the transaction is characterized), the |
| 332 | +Corresponding Source conveyed under this section must be accompanied |
| 333 | +by the Installation Information. But this requirement does not apply |
| 334 | +if neither you nor any third party retains the ability to install |
| 335 | +modified object code on the User Product (for example, the work has |
| 336 | +been installed in ROM). |
| 337 | + |
| 338 | + The requirement to provide Installation Information does not include a |
| 339 | +requirement to continue to provide support service, warranty, or updates |
| 340 | +for a work that has been modified or installed by the recipient, or for |
| 341 | +the User Product in which it has been modified or installed. Access to a |
| 342 | +network may be denied when the modification itself materially and |
| 343 | +adversely affects the operation of the network or violates the rules and |
| 344 | +protocols for communication across the network. |
| 345 | + |
| 346 | + Corresponding Source conveyed, and Installation Information provided, |
| 347 | +in accord with this section must be in a format that is publicly |
| 348 | +documented (and with an implementation available to the public in |
| 349 | +source code form), and must require no special password or key for |
| 350 | +unpacking, reading or copying. |
| 351 | + |
| 352 | + 7. Additional Terms. |
| 353 | + |
| 354 | + "Additional permissions" are terms that supplement the terms of this |
| 355 | +License by making exceptions from one or more of its conditions. |
| 356 | +Additional permissions that are applicable to the entire Program shall |
| 357 | +be treated as though they were included in this License, to the extent |
| 358 | +that they are valid under applicable law. If additional permissions |
| 359 | +apply only to part of the Program, that part may be used separately |
| 360 | +under those permissions, but the entire Program remains governed by |
| 361 | +this License without regard to the additional permissions. |
| 362 | + |
| 363 | + When you convey a copy of a covered work, you may at your option |
| 364 | +remove any additional permissions from that copy, or from any part of |
| 365 | +it. (Additional permissions may be written to require their own |
| 366 | +removal in certain cases when you modify the work.) You may place |
| 367 | +additional permissions on material, added by you to a covered work, |
| 368 | +for which you have or can give appropriate copyright permission. |
| 369 | + |
| 370 | + Notwithstanding any other provision of this License, for material you |
| 371 | +add to a covered work, you may (if authorized by the copyright holders of |
| 372 | +that material) supplement the terms of this License with terms: |
| 373 | + |
| 374 | + a) Disclaiming warranty or limiting liability differently from the |
| 375 | + terms of sections 15 and 16 of this License; or |
| 376 | + |
| 377 | + b) Requiring preservation of specified reasonable legal notices or |
| 378 | + author attributions in that material or in the Appropriate Legal |
| 379 | + Notices displayed by works containing it; or |
| 380 | + |
| 381 | + c) Prohibiting misrepresentation of the origin of that material, or |
| 382 | + requiring that modified versions of such material be marked in |
| 383 | + reasonable ways as different from the original version; or |
| 384 | + |
| 385 | + d) Limiting the use for publicity purposes of names of licensors or |
| 386 | + authors of the material; or |
| 387 | + |
| 388 | + e) Declining to grant rights under trademark law for use of some |
| 389 | + trade names, trademarks, or service marks; or |
| 390 | + |
| 391 | + f) Requiring indemnification of licensors and authors of that |
| 392 | + material by anyone who conveys the material (or modified versions of |
| 393 | + it) with contractual assumptions of liability to the recipient, for |
| 394 | + any liability that these contractual assumptions directly impose on |
| 395 | + those licensors and authors. |
| 396 | + |
| 397 | + All other non-permissive additional terms are considered "further |
| 398 | +restrictions" within the meaning of section 10. If the Program as you |
| 399 | +received it, or any part of it, contains a notice stating that it is |
| 400 | +governed by this License along with a term that is a further |
| 401 | +restriction, you may remove that term. If a license document contains |
| 402 | +a further restriction but permits relicensing or conveying under this |
| 403 | +License, you may add to a covered work material governed by the terms |
| 404 | +of that license document, provided that the further restriction does |
| 405 | +not survive such relicensing or conveying. |
| 406 | + |
| 407 | + If you add terms to a covered work in accord with this section, you |
| 408 | +must place, in the relevant source files, a statement of the |
| 409 | +additional terms that apply to those files, or a notice indicating |
| 410 | +where to find the applicable terms. |
| 411 | + |
| 412 | + Additional terms, permissive or non-permissive, may be stated in the |
| 413 | +form of a separately written license, or stated as exceptions; |
| 414 | +the above requirements apply either way. |
| 415 | + |
| 416 | + 8. Termination. |
| 417 | + |
| 418 | + You may not propagate or modify a covered work except as expressly |
| 419 | +provided under this License. Any attempt otherwise to propagate or |
| 420 | +modify it is void, and will automatically terminate your rights under |
| 421 | +this License (including any patent licenses granted under the third |
| 422 | +paragraph of section 11). |
| 423 | + |
| 424 | + However, if you cease all violation of this License, then your |
| 425 | +license from a particular copyright holder is reinstated (a) |
| 426 | +provisionally, unless and until the copyright holder explicitly and |
| 427 | +finally terminates your license, and (b) permanently, if the copyright |
| 428 | +holder fails to notify you of the violation by some reasonable means |
| 429 | +prior to 60 days after the cessation. |
| 430 | + |
| 431 | + Moreover, your license from a particular copyright holder is |
| 432 | +reinstated permanently if the copyright holder notifies you of the |
| 433 | +violation by some reasonable means, this is the first time you have |
| 434 | +received notice of violation of this License (for any work) from that |
| 435 | +copyright holder, and you cure the violation prior to 30 days after |
| 436 | +your receipt of the notice. |
| 437 | + |
| 438 | + Termination of your rights under this section does not terminate the |
| 439 | +licenses of parties who have received copies or rights from you under |
| 440 | +this License. If your rights have been terminated and not permanently |
| 441 | +reinstated, you do not qualify to receive new licenses for the same |
| 442 | +material under section 10. |
| 443 | + |
| 444 | + 9. Acceptance Not Required for Having Copies. |
| 445 | + |
| 446 | + You are not required to accept this License in order to receive or |
| 447 | +run a copy of the Program. Ancillary propagation of a covered work |
| 448 | +occurring solely as a consequence of using peer-to-peer transmission |
| 449 | +to receive a copy likewise does not require acceptance. However, |
| 450 | +nothing other than this License grants you permission to propagate or |
| 451 | +modify any covered work. These actions infringe copyright if you do |
| 452 | +not accept this License. Therefore, by modifying or propagating a |
| 453 | +covered work, you indicate your acceptance of this License to do so. |
| 454 | + |
| 455 | + 10. Automatic Licensing of Downstream Recipients. |
| 456 | + |
| 457 | + Each time you convey a covered work, the recipient automatically |
| 458 | +receives a license from the original licensors, to run, modify and |
| 459 | +propagate that work, subject to this License. You are not responsible |
| 460 | +for enforcing compliance by third parties with this License. |
| 461 | + |
| 462 | + An "entity transaction" is a transaction transferring control of an |
| 463 | +organization, or substantially all assets of one, or subdividing an |
| 464 | +organization, or merging organizations. If propagation of a covered |
| 465 | +work results from an entity transaction, each party to that |
| 466 | +transaction who receives a copy of the work also receives whatever |
| 467 | +licenses to the work the party's predecessor in interest had or could |
| 468 | +give under the previous paragraph, plus a right to possession of the |
| 469 | +Corresponding Source of the work from the predecessor in interest, if |
| 470 | +the predecessor has it or can get it with reasonable efforts. |
| 471 | + |
| 472 | + You may not impose any further restrictions on the exercise of the |
| 473 | +rights granted or affirmed under this License. For example, you may |
| 474 | +not impose a license fee, royalty, or other charge for exercise of |
| 475 | +rights granted under this License, and you may not initiate litigation |
| 476 | +(including a cross-claim or counterclaim in a lawsuit) alleging that |
| 477 | +any patent claim is infringed by making, using, selling, offering for |
| 478 | +sale, or importing the Program or any portion of it. |
| 479 | + |
| 480 | + 11. Patents. |
| 481 | + |
| 482 | + A "contributor" is a copyright holder who authorizes use under this |
| 483 | +License of the Program or a work on which the Program is based. The |
| 484 | +work thus licensed is called the contributor's "contributor version". |
| 485 | + |
| 486 | + A contributor's "essential patent claims" are all patent claims |
| 487 | +owned or controlled by the contributor, whether already acquired or |
| 488 | +hereafter acquired, that would be infringed by some manner, permitted |
| 489 | +by this License, of making, using, or selling its contributor version, |
| 490 | +but do not include claims that would be infringed only as a |
| 491 | +consequence of further modification of the contributor version. For |
| 492 | +purposes of this definition, "control" includes the right to grant |
| 493 | +patent sublicenses in a manner consistent with the requirements of |
| 494 | +this License. |
| 495 | + |
| 496 | + Each contributor grants you a non-exclusive, worldwide, royalty-free |
| 497 | +patent license under the contributor's essential patent claims, to |
| 498 | +make, use, sell, offer for sale, import and otherwise run, modify and |
| 499 | +propagate the contents of its contributor version. |
| 500 | + |
| 501 | + In the following three paragraphs, a "patent license" is any express |
| 502 | +agreement or commitment, however denominated, not to enforce a patent |
| 503 | +(such as an express permission to practice a patent or covenant not to |
| 504 | +sue for patent infringement). To "grant" such a patent license to a |
| 505 | +party means to make such an agreement or commitment not to enforce a |
| 506 | +patent against the party. |
| 507 | + |
| 508 | + If you convey a covered work, knowingly relying on a patent license, |
| 509 | +and the Corresponding Source of the work is not available for anyone |
| 510 | +to copy, free of charge and under the terms of this License, through a |
| 511 | +publicly available network server or other readily accessible means, |
| 512 | +then you must either (1) cause the Corresponding Source to be so |
| 513 | +available, or (2) arrange to deprive yourself of the benefit of the |
| 514 | +patent license for this particular work, or (3) arrange, in a manner |
| 515 | +consistent with the requirements of this License, to extend the patent |
| 516 | +license to downstream recipients. "Knowingly relying" means you have |
| 517 | +actual knowledge that, but for the patent license, your conveying the |
| 518 | +covered work in a country, or your recipient's use of the covered work |
| 519 | +in a country, would infringe one or more identifiable patents in that |
| 520 | +country that you have reason to believe are valid. |
| 521 | + |
| 522 | + If, pursuant to or in connection with a single transaction or |
| 523 | +arrangement, you convey, or propagate by procuring conveyance of, a |
| 524 | +covered work, and grant a patent license to some of the parties |
| 525 | +receiving the covered work authorizing them to use, propagate, modify |
| 526 | +or convey a specific copy of the covered work, then the patent license |
| 527 | +you grant is automatically extended to all recipients of the covered |
| 528 | +work and works based on it. |
| 529 | + |
| 530 | + A patent license is "discriminatory" if it does not include within |
| 531 | +the scope of its coverage, prohibits the exercise of, or is |
| 532 | +conditioned on the non-exercise of one or more of the rights that are |
| 533 | +specifically granted under this License. You may not convey a covered |
| 534 | +work if you are a party to an arrangement with a third party that is |
| 535 | +in the business of distributing software, under which you make payment |
| 536 | +to the third party based on the extent of your activity of conveying |
| 537 | +the work, and under which the third party grants, to any of the |
| 538 | +parties who would receive the covered work from you, a discriminatory |
| 539 | +patent license (a) in connection with copies of the covered work |
| 540 | +conveyed by you (or copies made from those copies), or (b) primarily |
| 541 | +for and in connection with specific products or compilations that |
| 542 | +contain the covered work, unless you entered into that arrangement, |
| 543 | +or that patent license was granted, prior to 28 March 2007. |
| 544 | + |
| 545 | + Nothing in this License shall be construed as excluding or limiting |
| 546 | +any implied license or other defenses to infringement that may |
| 547 | +otherwise be available to you under applicable patent law. |
| 548 | + |
| 549 | + 12. No Surrender of Others' Freedom. |
| 550 | + |
| 551 | + If conditions are imposed on you (whether by court order, agreement or |
| 552 | +otherwise) that contradict the conditions of this License, they do not |
| 553 | +excuse you from the conditions of this License. If you cannot convey a |
| 554 | +covered work so as to satisfy simultaneously your obligations under this |
| 555 | +License and any other pertinent obligations, then as a consequence you may |
| 556 | +not convey it at all. For example, if you agree to terms that obligate you |
| 557 | +to collect a royalty for further conveying from those to whom you convey |
| 558 | +the Program, the only way you could satisfy both those terms and this |
| 559 | +License would be to refrain entirely from conveying the Program. |
| 560 | + |
| 561 | + 13. Use with the GNU Affero General Public License. |
| 562 | + |
| 563 | + Notwithstanding any other provision of this License, you have |
| 564 | +permission to link or combine any covered work with a work licensed |
| 565 | +under version 3 of the GNU Affero General Public License into a single |
| 566 | +combined work, and to convey the resulting work. The terms of this |
| 567 | +License will continue to apply to the part which is the covered work, |
| 568 | +but the special requirements of the GNU Affero General Public License, |
| 569 | +section 13, concerning interaction through a network will apply to the |
| 570 | +combination as such. |
| 571 | + |
| 572 | + 14. Revised Versions of this License. |
| 573 | + |
| 574 | + The Free Software Foundation may publish revised and/or new versions of |
| 575 | +the GNU General Public License from time to time. Such new versions will |
| 576 | +be similar in spirit to the present version, but may differ in detail to |
| 577 | +address new problems or concerns. |
| 578 | + |
| 579 | + Each version is given a distinguishing version number. If the |
| 580 | +Program specifies that a certain numbered version of the GNU General |
| 581 | +Public License "or any later version" applies to it, you have the |
| 582 | +option of following the terms and conditions either of that numbered |
| 583 | +version or of any later version published by the Free Software |
| 584 | +Foundation. If the Program does not specify a version number of the |
| 585 | +GNU General Public License, you may choose any version ever published |
| 586 | +by the Free Software Foundation. |
| 587 | + |
| 588 | + If the Program specifies that a proxy can decide which future |
| 589 | +versions of the GNU General Public License can be used, that proxy's |
| 590 | +public statement of acceptance of a version permanently authorizes you |
| 591 | +to choose that version for the Program. |
| 592 | + |
| 593 | + Later license versions may give you additional or different |
| 594 | +permissions. However, no additional obligations are imposed on any |
| 595 | +author or copyright holder as a result of your choosing to follow a |
| 596 | +later version. |
| 597 | + |
| 598 | + 15. Disclaimer of Warranty. |
| 599 | + |
| 600 | + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY |
| 601 | +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT |
| 602 | +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY |
| 603 | +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, |
| 604 | +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| 605 | +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM |
| 606 | +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF |
| 607 | +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. |
| 608 | + |
| 609 | + 16. Limitation of Liability. |
| 610 | + |
| 611 | + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
| 612 | +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS |
| 613 | +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY |
| 614 | +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE |
| 615 | +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF |
| 616 | +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD |
| 617 | +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), |
| 618 | +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF |
| 619 | +SUCH DAMAGES. |
| 620 | + |
| 621 | + 17. Interpretation of Sections 15 and 16. |
| 622 | + |
| 623 | + If the disclaimer of warranty and limitation of liability provided |
| 624 | +above cannot be given local legal effect according to their terms, |
| 625 | +reviewing courts shall apply local law that most closely approximates |
| 626 | +an absolute waiver of all civil liability in connection with the |
| 627 | +Program, unless a warranty or assumption of liability accompanies a |
| 628 | +copy of the Program in return for a fee. |
| 629 | + |
| 630 | + END OF TERMS AND CONDITIONS |
| 631 | + |
| 632 | + How to Apply These Terms to Your New Programs |
| 633 | + |
| 634 | + If you develop a new program, and you want it to be of the greatest |
| 635 | +possible use to the public, the best way to achieve this is to make it |
| 636 | +free software which everyone can redistribute and change under these terms. |
| 637 | + |
| 638 | + To do so, attach the following notices to the program. It is safest |
| 639 | +to attach them to the start of each source file to most effectively |
| 640 | +state the exclusion of warranty; and each file should have at least |
| 641 | +the "copyright" line and a pointer to where the full notice is found. |
| 642 | + |
| 643 | + <one line to give the program's name and a brief idea of what it does.> |
| 644 | + Copyright (C) <year> <name of author> |
| 645 | + |
| 646 | + This program is free software: you can redistribute it and/or modify |
| 647 | + it under the terms of the GNU General Public License as published by |
| 648 | + the Free Software Foundation, either version 3 of the License, or |
| 649 | + (at your option) any later version. |
| 650 | + |
| 651 | + This program is distributed in the hope that it will be useful, |
| 652 | + but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 653 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 654 | + GNU General Public License for more details. |
| 655 | + |
| 656 | + You should have received a copy of the GNU General Public License |
| 657 | + along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 658 | + |
| 659 | +Also add information on how to contact you by electronic and paper mail. |
| 660 | + |
| 661 | + If the program does terminal interaction, make it output a short |
| 662 | +notice like this when it starts in an interactive mode: |
| 663 | + |
| 664 | + <program> Copyright (C) <year> <name of author> |
| 665 | + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. |
| 666 | + This is free software, and you are welcome to redistribute it |
| 667 | + under certain conditions; type `show c' for details. |
| 668 | + |
| 669 | +The hypothetical commands `show w' and `show c' should show the appropriate |
| 670 | +parts of the General Public License. Of course, your program's commands |
| 671 | +might be different; for a GUI interface, you would use an "about box". |
| 672 | + |
| 673 | + You should also get your employer (if you work as a programmer) or school, |
| 674 | +if any, to sign a "copyright disclaimer" for the program, if necessary. |
| 675 | +For more information on this, and how to apply and follow the GNU GPL, see |
| 676 | +<http://www.gnu.org/licenses/>. |
| 677 | + |
| 678 | + The GNU General Public License does not permit incorporating your program |
| 679 | +into proprietary programs. If your program is a subroutine library, you |
| 680 | +may consider it more useful to permit linking proprietary applications with |
| 681 | +the library. If this is what you want to do, use the GNU Lesser General |
| 682 | +Public License instead of this License. But first, please read |
| 683 | +<http://www.gnu.org/philosophy/why-not-lgpl.html>. |
\ No newline at end of file |
Property changes on: trunk/extensions/SemanticMaps/COPYING |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 684 | + native |
Index: trunk/extensions/SemanticMaps/SemanticMaps.i18n.php |
— | — | @@ -0,0 +1,1130 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * Internationalization file for the Semantic Maps extension |
| 6 | + * |
| 7 | + * @file SemanticMaps.i18n.php |
| 8 | + * @ingroup Semantic Maps |
| 9 | + * |
| 10 | + * @author Jeroen De Dauw |
| 11 | + */ |
| 12 | + |
| 13 | +$messages = array(); |
| 14 | + |
| 15 | +/** English |
| 16 | + * @author Jeroen De Dauw |
| 17 | + */ |
| 18 | +$messages['en'] = array( |
| 19 | + // General |
| 20 | + 'semanticmaps-desc' => "Provides the ability to view and edit coordinate data stored with the Semantic MediaWiki extension ([http://mapping.referata.com/wiki/Examples demo's]).", |
| 21 | + 'semanticmaps-unrecognizeddistance' => 'The value $1 is not a valid distance.', |
| 22 | + 'semanticmaps-kml-link' => 'View the KML file', |
| 23 | + 'semanticmaps-kml' => 'KML', |
| 24 | + 'semanticmaps-default-kml-pagelink' => 'View page $1', |
| 25 | + |
| 26 | + // Forms |
| 27 | + 'semanticmaps-loading-forminput' => 'Loading map form input...', |
| 28 | + 'semanticmaps_lookupcoordinates' => 'Look up coordinates', |
| 29 | + 'semanticmaps_enteraddresshere' => 'Enter address here', |
| 30 | + 'semanticmaps-updatemap' => 'Update map', |
| 31 | + 'semanticmaps_notfound' => 'not found', |
| 32 | + 'semanticmaps-forminput-remove' => 'Remove', |
| 33 | + 'semanticmaps-forminput-add' => 'Add', |
| 34 | + 'semanticmaps-forminput-locations' => 'Locations', |
| 35 | + |
| 36 | + // Parameter descriptions |
| 37 | + 'semanticmaps_paramdesc_format' => 'The mapping service used to generate the map', |
| 38 | + 'semanticmaps_paramdesc_geoservice' => 'The geocoding service used to turn addresses into coordinates', |
| 39 | + 'semanticmaps_paramdesc_height' => 'The height of the map, in pixels (default is $1)', |
| 40 | + 'semanticmaps_paramdesc_width' => 'The width of the map, in pixels (default is $1)', |
| 41 | + 'semanticmaps_paramdesc_zoom' => 'The zoom level of the map', |
| 42 | + 'semanticmaps_paramdesc_centre' => 'The coordinates of the maps\' centre', |
| 43 | + 'semanticmaps_paramdesc_controls' => 'The user controls placed on the map', |
| 44 | + 'semanticmaps_paramdesc_types' => 'The map types available on the map', |
| 45 | + 'semanticmaps_paramdesc_type' => 'The default map type for the map', |
| 46 | + 'semanticmaps_paramdesc_overlays' => 'The overlays available on the map', |
| 47 | + 'semanticmaps_paramdesc_autozoom' => 'If zoom in and out by using the mouse scroll wheel is enabled', |
| 48 | + 'semanticmaps_paramdesc_layers' => 'The layers available on the map', |
| 49 | +); |
| 50 | + |
| 51 | +/** Message documentation (Message documentation) |
| 52 | + * @author Fryed-peach |
| 53 | + * @author Purodha |
| 54 | + * @author Raymond |
| 55 | + */ |
| 56 | +$messages['qqq'] = array( |
| 57 | + 'semanticmaps-desc' => '{{desc}}', |
| 58 | + 'semanticmaps_paramdesc_overlays' => 'An "overlay" is a map layer, containing icons or images, or whatever, to enrich, in this case, the map. Could for example be a layer with speed cameras, or municipality borders.', |
| 59 | +); |
| 60 | + |
| 61 | +/** Afrikaans (Afrikaans) |
| 62 | + * @author Naudefj |
| 63 | + */ |
| 64 | +$messages['af'] = array( |
| 65 | + 'semanticmaps-desc' => 'Bied die vermoë om koördinaatdata met behulp van die Semantiese MediaWiki-uitbreiding te sien en te wysig ([http://mapping.referata.com/wiki/Examples demo]).', |
| 66 | + 'semanticmaps-unrecognizeddistance' => 'Die waarde "$1" is nie \'n geldige afstand nie.', |
| 67 | + 'semanticmaps_lookupcoordinates' => 'Soek koördinate op', |
| 68 | + 'semanticmaps_enteraddresshere' => 'Voer adres hier in', |
| 69 | + 'semanticmaps_notfound' => 'nie gevind nie', |
| 70 | + 'semanticmaps_paramdesc_format' => 'Die kaartdiens wat die kaart lewer', |
| 71 | + 'semanticmaps_paramdesc_geoservice' => 'Die geokoderingsdiens gebruik om adresse na koördinate om te skakel', |
| 72 | + 'semanticmaps_paramdesc_height' => 'Die hoogte van die kaart in spikkels (standaard is $1)', |
| 73 | + 'semanticmaps_paramdesc_width' => 'Die breedte van die kaart in spikkels (standaard is $1)', |
| 74 | + 'semanticmaps_paramdesc_zoom' => 'Die zoom-vlak van die kaart', |
| 75 | + 'semanticmaps_paramdesc_centre' => 'Die koördinate van die middel van die kaart', |
| 76 | + 'semanticmaps_paramdesc_controls' => 'Die gebruikerskontroles op die kaart geplaas', |
| 77 | + 'semanticmaps_paramdesc_types' => 'Die kaarttipes beskikbaar op die kaart', |
| 78 | + 'semanticmaps_paramdesc_type' => 'Die standaard kaarttipe vir die kaart', |
| 79 | + 'semanticmaps_paramdesc_overlays' => 'Die oorleggings beskikbaar op die kaart', |
| 80 | + 'semanticmaps_paramdesc_autozoom' => 'Of in- en uitzoom met die muis se wiel moontlik is', |
| 81 | + 'semanticmaps_paramdesc_layers' => 'Die lae beskikbaar op die kaart', |
| 82 | +); |
| 83 | + |
| 84 | +/** Gheg Albanian (Gegë) |
| 85 | + * @author Mdupont |
| 86 | + */ |
| 87 | +$messages['aln'] = array( |
| 88 | + 'semanticmaps_paramdesc_zoom' => 'Shkalla e zmadhimit Harta', |
| 89 | + 'semanticmaps_paramdesc_centre' => "Koordinatat e qendrës hartave '", |
| 90 | + 'semanticmaps_paramdesc_controls' => 'Perdoruesi kontrolleve të vendosura në hartë', |
| 91 | + 'semanticmaps_paramdesc_types' => 'Llojet Harta dispozicion në hartë', |
| 92 | + 'semanticmaps_paramdesc_type' => 'Harta default lloji për hartën', |
| 93 | + 'semanticmaps_paramdesc_overlays' => 'Overlays në dispozicion në hartë', |
| 94 | + 'semanticmaps_paramdesc_autozoom' => 'Nëse zoom brenda dhe jashtë duke përdorur rrotëzën miut është i aktivizuar', |
| 95 | + 'semanticmaps_paramdesc_layers' => 'Shtresat në dispozicion në hartë', |
| 96 | +); |
| 97 | + |
| 98 | +/** Arabic (العربية) |
| 99 | + * @author Meno25 |
| 100 | + * @author OsamaK |
| 101 | + */ |
| 102 | +$messages['ar'] = array( |
| 103 | + 'semanticmaps-desc' => 'يقدم إمكانية عرض وتعديل بيانات التنسيق التي خزنها امتداد سيمانتيك ميدياويكي ([http://mapping.referata.com/wiki/Examples تجربة]).', |
| 104 | + 'semanticmaps-kml' => 'كيه إم إل', |
| 105 | + 'semanticmaps_lookupcoordinates' => 'ابحث عن الإحداثيات', |
| 106 | + 'semanticmaps_enteraddresshere' => 'أدخل العنوان هنا', |
| 107 | + 'semanticmaps_notfound' => 'لم يوجد', |
| 108 | + 'semanticmaps_paramdesc_format' => 'خدمة الخرائط المستخدمة لتوليد الخريطة', |
| 109 | + 'semanticmaps_paramdesc_geoservice' => 'خدمة التكويد الجغرافي المستخدمة لتحويل العناوين إلى إحداثيات', |
| 110 | + 'semanticmaps_paramdesc_height' => 'ارتفاع الخريطة، بالبكسل (افتراضيا $1)', |
| 111 | + 'semanticmaps_paramdesc_width' => 'عرض الخريطة، بالبكسل (افتراضيا $1)', |
| 112 | + 'semanticmaps_paramdesc_zoom' => 'مستوى التقريب للخريطة', |
| 113 | + 'semanticmaps_paramdesc_centre' => 'إحداثيات وسط الخريطة', |
| 114 | + 'semanticmaps_paramdesc_controls' => 'متحكمات المستخدم موضوعة على الخريطة', |
| 115 | + 'semanticmaps_paramdesc_types' => 'أنواع الخرائط المتوفرة على الخريطة', |
| 116 | + 'semanticmaps_paramdesc_type' => 'نوع الخريطة الافتراضي للخريطة', |
| 117 | + 'semanticmaps_paramdesc_overlays' => 'الطبقات الفوقية متوفرة على الخريطة', |
| 118 | + 'semanticmaps_paramdesc_autozoom' => 'لو أن التقريب والابتعاد بواسطة استخدام عجلة تدحرج الفأرة مفعلة', |
| 119 | + 'semanticmaps_paramdesc_layers' => 'الطبقات المتوفرة على الخريطة', |
| 120 | +); |
| 121 | + |
| 122 | +/** Egyptian Spoken Arabic (مصرى) |
| 123 | + * @author Ghaly |
| 124 | + * @author Meno25 |
| 125 | + */ |
| 126 | +$messages['arz'] = array( |
| 127 | + 'semanticmaps_name' => 'خرائط دلالية', |
| 128 | + 'semanticmaps_lookupcoordinates' => 'ابحث عن الإحداثيات', |
| 129 | + 'semanticmaps_enteraddresshere' => 'أدخل العنوان هنا', |
| 130 | +); |
| 131 | + |
| 132 | +/** Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца)) |
| 133 | + * @author EugeneZelenko |
| 134 | + * @author Jim-by |
| 135 | + * @author Wizardist |
| 136 | + */ |
| 137 | +$messages['be-tarask'] = array( |
| 138 | + 'semanticmaps-desc' => 'Забясьпечвае магчымасьць прагляду і рэдагаваньня зьвестак пра каардынаты, якія захоўваюцца з дапамогай пашырэньня Semantic MediaWiki ([http://mapping.referata.com/wiki/Examples дэманстрацыя]).', |
| 139 | + 'semanticmaps-unrecognizeddistance' => 'Значэньне $1 — няслушная адлегласьць.', |
| 140 | + 'semanticmaps-kml-link' => 'Паказаць KML-файл', |
| 141 | + 'semanticmaps-default-kml-pagelink' => 'Паказаць старонку $1', |
| 142 | + 'semanticmaps_lookupcoordinates' => 'Пошук каардынатаў', |
| 143 | + 'semanticmaps_enteraddresshere' => 'Увядзіце тут адрас', |
| 144 | + 'semanticmaps_notfound' => 'ня знойдзена', |
| 145 | + 'semanticmaps_paramdesc_format' => 'Картаграфічны сэрвіс, які выкарыстоўваецца для стварэньня мапаў', |
| 146 | + 'semanticmaps_paramdesc_geoservice' => 'Сэрвіс геаграфічнага кадаваньня, які выкарыстоўваецца для пераўтварэньня адрасоў ў каардынаты', |
| 147 | + 'semanticmaps_paramdesc_height' => 'Вышыня мапы ў піксэлях (па змоўчваньні $1)', |
| 148 | + 'semanticmaps_paramdesc_width' => 'Шырыня мапы ў піксэлях (па змоўчваньні $1)', |
| 149 | + 'semanticmaps_paramdesc_zoom' => 'Маштаб мапы', |
| 150 | + 'semanticmaps_paramdesc_centre' => 'Каардынаты цэнтру мапы', |
| 151 | + 'semanticmaps_paramdesc_controls' => 'Элемэнты кіраваньня на мапе', |
| 152 | + 'semanticmaps_paramdesc_types' => 'Тыпы мапы даступныя на мапе', |
| 153 | + 'semanticmaps_paramdesc_type' => 'Тып мапы па змоўчваньні', |
| 154 | + 'semanticmaps_paramdesc_overlays' => 'Даступныя слаі на мапе', |
| 155 | + 'semanticmaps_paramdesc_autozoom' => 'Калі ўключана зьмяншэньне ці павялічэньне маштабу праз кола пракруткі мышы', |
| 156 | + 'semanticmaps_paramdesc_layers' => 'Даступныя слаі на мапе', |
| 157 | +); |
| 158 | + |
| 159 | +/** Breton (Brezhoneg) |
| 160 | + * @author Fohanno |
| 161 | + * @author Fulup |
| 162 | + * @author Y-M D |
| 163 | + */ |
| 164 | +$messages['br'] = array( |
| 165 | + 'semanticmaps-desc' => 'Talvezout a ra da welet ha da gemmañ roadennoù stoket dre an astenn Semantic MediaWiki ([http://mapping.referata.com/wiki/Examples demo]).', |
| 166 | + 'semanticmaps-unrecognizeddistance' => "An talvoud $1 n'eo ket un hed reizh anezhañ.", |
| 167 | + 'semanticmaps-kml-link' => 'Gwelet ar restr KML', |
| 168 | + 'semanticmaps-default-kml-pagelink' => 'Gwelet ar pennad $1', |
| 169 | + 'semanticmaps_lookupcoordinates' => 'Istimañ an daveennoù', |
| 170 | + 'semanticmaps_enteraddresshere' => "Merkit ar chomlec'h amañ", |
| 171 | + 'semanticmaps_notfound' => "N'eo ket bet kavet", |
| 172 | + 'semanticmaps_paramdesc_format' => 'Ar servij kartennaouiñ implijet da grouiñ ar gartenn', |
| 173 | + 'semanticmaps_paramdesc_geoservice' => "Ar servij geokodiñ implijet da dreiñ ar chomlec'hioù e daveennoù", |
| 174 | + 'semanticmaps_paramdesc_height' => 'Uhelder ar gartenn, e pikseloù ($1 dre izouer)', |
| 175 | + 'semanticmaps_paramdesc_width' => 'Ledander ar gartenn, e pikseloù ($1 dre izouer)', |
| 176 | + 'semanticmaps_paramdesc_zoom' => 'Live zoum ar gartenn', |
| 177 | + 'semanticmaps_paramdesc_centre' => 'Daveennoù kreiz ar gartenn', |
| 178 | + 'semanticmaps_paramdesc_controls' => "Ar c'hontrolloù implijer lakaet war ar gartenn", |
| 179 | + 'semanticmaps_paramdesc_types' => "Ar seurtoù kartennoù a c'haller kaout war ar gartenn", |
| 180 | + 'semanticmaps_paramdesc_type' => 'Ar seurt kartenn dre ziouer evit ar gartenn', |
| 181 | + 'semanticmaps_paramdesc_overlays' => "Ar gwiskadoù a c'haller da gaout war ar gartenn", |
| 182 | + 'semanticmaps_paramdesc_autozoom' => 'Mard eo gweredekaet ar zoumañ hag an dizoumañ gant rodig al logodenn', |
| 183 | + 'semanticmaps_paramdesc_layers' => 'Ar gwiskadoù zo da gaout war ar gartenn', |
| 184 | +); |
| 185 | + |
| 186 | +/** Bosnian (Bosanski) |
| 187 | + * @author CERminator |
| 188 | + * @author Palapa |
| 189 | + */ |
| 190 | +$messages['bs'] = array( |
| 191 | + 'semanticmaps-desc' => 'Daje mogućnost pregleda i uređivanja podataka koordinata koji su spremljeni putem Semantic MediaWiki proširenja ([http://mapping.referata.com/wiki/Examples demo]).', |
| 192 | + 'semanticmaps-unrecognizeddistance' => 'Vrijednost $1 nije ispravno odstojanje.', |
| 193 | + 'semanticmaps-kml-link' => 'Pogledajte KML datoteku', |
| 194 | + 'semanticmaps-default-kml-pagelink' => 'Pogledajte stranicu $1', |
| 195 | + 'semanticmaps_lookupcoordinates' => 'Nađi koordinate', |
| 196 | + 'semanticmaps_enteraddresshere' => 'Unesite adresu ovdje', |
| 197 | + 'semanticmaps_notfound' => 'nije pronađeno', |
| 198 | + 'semanticmaps_paramdesc_format' => 'Usluga kartiranja korištena za generiranje karte', |
| 199 | + 'semanticmaps_paramdesc_geoservice' => 'Usluga geokodiranja korištena za pretvaranje adresa u koordinate', |
| 200 | + 'semanticmaps_paramdesc_height' => 'Visina mape, u pikselima (pretpostavljeno je $1)', |
| 201 | + 'semanticmaps_paramdesc_width' => 'Širina mape, u pikselima (pretpostavljeno je $1)', |
| 202 | + 'semanticmaps_paramdesc_zoom' => 'Nivo zumiranja mape', |
| 203 | + 'semanticmaps_paramdesc_centre' => 'Koordinate centra karte', |
| 204 | + 'semanticmaps_paramdesc_controls' => 'Korisničke kontrole postavljene na kartu', |
| 205 | + 'semanticmaps_paramdesc_types' => 'Tipovi karti dostupnih na mapi', |
| 206 | + 'semanticmaps_paramdesc_type' => 'Pretpostavljeni tip karte za kartu', |
| 207 | + 'semanticmaps_paramdesc_overlays' => 'Slojevi dostupni na karti', |
| 208 | + 'semanticmaps_paramdesc_autozoom' => 'Ako je zumiranje i odaljavanje putem kotačića na mišu omogućeno', |
| 209 | + 'semanticmaps_paramdesc_layers' => 'Slojevi dostupni na mapi', |
| 210 | +); |
| 211 | + |
| 212 | +/** Catalan (Català) |
| 213 | + * @author Paucabot |
| 214 | + * @author Solde |
| 215 | + * @author Toniher |
| 216 | + */ |
| 217 | +$messages['ca'] = array( |
| 218 | + 'semanticmaps-desc' => "Proporciona l'habilitat de visualitzar i editar dades de coordenades emmagatzemades a través de l'extensió del Semantic MediaWiki ([http://mapping.referata.com/wiki/Examples alguns exemples]). |
| 219 | +Serveis de mapes disponibles: $1", |
| 220 | + 'semanticmaps-unrecognizeddistance' => 'El valor $1 no és un valor de distància.', |
| 221 | + 'semanticmaps-kml-link' => 'Visualitza el fitxer KML', |
| 222 | + 'semanticmaps-default-kml-pagelink' => 'Visualitza la pàgina $1', |
| 223 | + 'semanticmaps_lookupcoordinates' => 'Consulta les coordenades', |
| 224 | + 'semanticmaps_enteraddresshere' => 'Introduïu una adreça a continuació', |
| 225 | + 'semanticmaps_notfound' => "no s'ha trobat", |
| 226 | + 'semanticmaps_paramdesc_format' => "El servei de mapes que s'utilitza per generar el mapa", |
| 227 | + 'semanticmaps_paramdesc_geoservice' => 'El servei de geocodificació que es fa servir per transformar les adreces en coordenades', |
| 228 | + 'semanticmaps_paramdesc_height' => "L'altura del mapa, en píxel (per defecte és $1)", |
| 229 | + 'semanticmaps_paramdesc_width' => "L'amplada del mapa, en píxels (per defecte és $1)", |
| 230 | + 'semanticmaps_paramdesc_zoom' => 'El nivell de zoom del mapa', |
| 231 | + 'semanticmaps_paramdesc_centre' => 'Les coordenades del centre dels mapes', |
| 232 | + 'semanticmaps_paramdesc_controls' => "Els controls d'usuari emplaçats al mapa", |
| 233 | + 'semanticmaps_paramdesc_types' => 'El tipus de mapa disponibles en el mapa', |
| 234 | + 'semanticmaps_paramdesc_type' => 'El tipus de mapa per defecte del mapa', |
| 235 | + 'semanticmaps_paramdesc_overlays' => 'Les capes disponibles en el mapa', |
| 236 | + 'semanticmaps_paramdesc_autozoom' => "Si està disponible el zoom d'augment i reducció fent servir la rodeta del ratolí", |
| 237 | + 'semanticmaps_paramdesc_layers' => 'Les capes disponibles al mapa', |
| 238 | +); |
| 239 | + |
| 240 | +/** German (Deutsch) |
| 241 | + * @author DaSch |
| 242 | + * @author Imre |
| 243 | + * @author Kghbln |
| 244 | + * @author Pill |
| 245 | + * @author The Evil IP address |
| 246 | + * @author Umherirrender |
| 247 | + */ |
| 248 | +$messages['de'] = array( |
| 249 | + 'semanticmaps-desc' => 'Ermöglicht das Anzeigen und Bearbeiten von Daten zu Koordinaten, die mit Semantic MediaWiki gespeichert werden ([http://mapping.referata.com/wiki/Examples Demonstrationsseite]).', |
| 250 | + 'semanticmaps-unrecognizeddistance' => 'Der Wert $1 ist keine gültige Distanz.', |
| 251 | + 'semanticmaps-kml-link' => 'KML-Datei ansehen', |
| 252 | + 'semanticmaps-default-kml-pagelink' => 'Artikel $1 ansehen', |
| 253 | + 'semanticmaps_lookupcoordinates' => 'Koordinaten nachschlagen', |
| 254 | + 'semanticmaps_enteraddresshere' => 'Adresse hier eingeben', |
| 255 | + 'semanticmaps_notfound' => 'nicht gefunden', |
| 256 | + 'semanticmaps_paramdesc_format' => 'Der Kartographiedienst zum Generieren der Karte', |
| 257 | + 'semanticmaps_paramdesc_geoservice' => 'Der Geokodierungsdienst, um Adressen in Koordinaten umzuwandeln', |
| 258 | + 'semanticmaps_paramdesc_height' => 'Die Höhe der Karte in Pixeln (Standard ist $1)', |
| 259 | + 'semanticmaps_paramdesc_width' => 'Die Breite der Karte in Pixeln (Standard ist $1)', |
| 260 | + 'semanticmaps_paramdesc_zoom' => 'Die Vergrößerungsstufe der Karte', |
| 261 | + 'semanticmaps_paramdesc_centre' => 'Die Koordinaten der Kartenmitte', |
| 262 | + 'semanticmaps_paramdesc_controls' => 'Die Benutzerkontrollen, die sich auf der Karte befinden', |
| 263 | + 'semanticmaps_paramdesc_types' => 'Die verfügbaren Kartentypen für die Karte', |
| 264 | + 'semanticmaps_paramdesc_type' => 'Der Standard-Kartentyp für die Karte', |
| 265 | + 'semanticmaps_paramdesc_overlays' => 'Die auf der Karte verfügbaren Overlays', |
| 266 | + 'semanticmaps_paramdesc_autozoom' => 'Wenn Vergrößerung und Verkleinerung mit dem Maus-Scrollrad aktiviert ist', |
| 267 | + 'semanticmaps_paramdesc_layers' => 'Die auf der Karte verfügbaren Ebenen', |
| 268 | +); |
| 269 | + |
| 270 | +/** Lower Sorbian (Dolnoserbski) |
| 271 | + * @author Michawiki |
| 272 | + */ |
| 273 | +$messages['dsb'] = array( |
| 274 | + 'semanticmaps-desc' => 'Bitujo zmóžnosć se koordinatowe daty pśez rozšyrjenje Semantic MediaWiki woglědaś a wobźěłaś ([http://mapping.referata.com/wiki/Examples demo]).', |
| 275 | + 'semanticmaps-unrecognizeddistance' => 'Gódnota $1 njejo płaśiwa distanca.', |
| 276 | + 'semanticmaps-kml-link' => 'KML-dataju se woglědaś', |
| 277 | + 'semanticmaps-default-kml-pagelink' => 'Bok $1 se woglědaś', |
| 278 | + 'semanticmaps_lookupcoordinates' => 'Za koordinatami póglědaś', |
| 279 | + 'semanticmaps_enteraddresshere' => 'Zapódaj how adresu', |
| 280 | + 'semanticmaps_notfound' => 'njenamakany', |
| 281 | + 'semanticmaps_paramdesc_format' => 'Kartěrowańska słužba, kótaraž se wužywa, aby napórała kórtu', |
| 282 | + 'semanticmaps_paramdesc_geoservice' => 'Geokoděrowańska słužba, kótaraž se wužywa, aby pśetwóriła adrese do koordinatow', |
| 283 | + 'semanticmaps_paramdesc_height' => 'Wusokosć kórty, w pikselach (standard jo $1)', |
| 284 | + 'semanticmaps_paramdesc_width' => 'Šyrokosć kórty, w pikselach (standard jo $1)', |
| 285 | + 'semanticmaps_paramdesc_zoom' => 'Skalěrowański schóźeńk kórty', |
| 286 | + 'semanticmaps_paramdesc_centre' => 'Koordinaty srjejźišća kórty', |
| 287 | + 'semanticmaps_paramdesc_controls' => 'Wužywarske elementy na kórśe', |
| 288 | + 'semanticmaps_paramdesc_types' => 'Kórtowe typy, kótarež stoje za kórtu k dispoziciji', |
| 289 | + 'semanticmaps_paramdesc_type' => 'Standardny kórtowy typ za kórtu', |
| 290 | + 'semanticmaps_paramdesc_overlays' => 'Pśewarstowanja, kótarež stoje za kórtu k dispoziciji', |
| 291 | + 'semanticmaps_paramdesc_autozoom' => 'Jolic pówětšenje a pómjeńšenje z pomocu kólaska myški jo zmóžnjone', |
| 292 | + 'semanticmaps_paramdesc_layers' => 'Warsty, kótarež stoje za kórtu k dispoziciji', |
| 293 | +); |
| 294 | + |
| 295 | +/** Greek (Ελληνικά) |
| 296 | + * @author ZaDiak |
| 297 | + */ |
| 298 | +$messages['el'] = array( |
| 299 | + 'semanticmaps_lookupcoordinates' => 'Επιθεώρηση συντεταγμένων', |
| 300 | + 'semanticmaps_enteraddresshere' => 'Εισαγωγή διεύθυνσης εδώ', |
| 301 | + 'semanticmaps_notfound' => 'δεν βρέθηκε', |
| 302 | +); |
| 303 | + |
| 304 | +/** Esperanto (Esperanto) |
| 305 | + * @author Yekrats |
| 306 | + */ |
| 307 | +$messages['eo'] = array( |
| 308 | + 'semanticmaps_lookupcoordinates' => 'Rigardi koordinatojn', |
| 309 | + 'semanticmaps_enteraddresshere' => 'Enigu adreson ĉi tie', |
| 310 | + 'semanticmaps_notfound' => 'ne trovita', |
| 311 | +); |
| 312 | + |
| 313 | +/** Spanish (Español) |
| 314 | + * @author Crazymadlover |
| 315 | + * @author Imre |
| 316 | + * @author Locos epraix |
| 317 | + * @author Translationista |
| 318 | + */ |
| 319 | +$messages['es'] = array( |
| 320 | + 'semanticmaps-desc' => 'Proporciona la capacidad de ver y editar los datos coordinados almacenados a través de la extensión Semantic MediaWiki ([http://mapping.referata.com/wiki/Examples demo]).', |
| 321 | + 'semanticmaps-unrecognizeddistance' => 'El valor $1 no esuna distancia válida.', |
| 322 | + 'semanticmaps_lookupcoordinates' => 'Busque las coordenadas', |
| 323 | + 'semanticmaps_enteraddresshere' => 'Ingresar dirección aquí', |
| 324 | + 'semanticmaps_notfound' => 'no encontrado', |
| 325 | + 'semanticmaps_paramdesc_format' => 'El servicio cartográfico usado para generar el mapa', |
| 326 | + 'semanticmaps_paramdesc_geoservice' => 'El servicio de geocodificación para convertir direcciones en coordenadas', |
| 327 | + 'semanticmaps_paramdesc_height' => 'Alto del mapa en píxeles (el predeterminado es $1)', |
| 328 | + 'semanticmaps_paramdesc_width' => 'Ancho del mapa en píxeles (el predeterminado es $1)', |
| 329 | + 'semanticmaps_paramdesc_zoom' => 'Nivel de acercamiento del mapa', |
| 330 | + 'semanticmaps_paramdesc_centre' => 'Las coordenadas del centro del mapa', |
| 331 | + 'semanticmaps_paramdesc_controls' => 'Los controles de usuario ubicados en el mapa', |
| 332 | + 'semanticmaps_paramdesc_types' => 'Los tipos de mapa disponibles en el mapa', |
| 333 | + 'semanticmaps_paramdesc_type' => 'El tipo de mapa predeterminado para el mapa', |
| 334 | + 'semanticmaps_paramdesc_overlays' => 'FUZZY!!! Las capas disponibles en el mapa', |
| 335 | + 'semanticmaps_paramdesc_autozoom' => 'En caso de que el acercamiento y alejamiento mediante la rueda del ratón esté habilitado', |
| 336 | + 'semanticmaps_paramdesc_layers' => 'Las capas disponibles en el mapa', |
| 337 | +); |
| 338 | + |
| 339 | +/** Basque (Euskara) |
| 340 | + * @author An13sa |
| 341 | + */ |
| 342 | +$messages['eu'] = array( |
| 343 | + 'semanticmaps_lookupcoordinates' => 'Koordenatuak bilatu', |
| 344 | +); |
| 345 | + |
| 346 | +/** Finnish (Suomi) |
| 347 | + * @author Crt |
| 348 | + * @author Str4nd |
| 349 | + */ |
| 350 | +$messages['fi'] = array( |
| 351 | + 'semanticmaps_enteraddresshere' => 'Kirjoita osoite tähän', |
| 352 | + 'semanticmaps_notfound' => 'ei löytynyt', |
| 353 | + 'semanticmaps_paramdesc_height' => 'Kartan korkeus pikseleinä (oletus on $1)', |
| 354 | + 'semanticmaps_paramdesc_width' => 'Kartan leveys pikseleinä (oletus on $1)', |
| 355 | + 'semanticmaps_paramdesc_zoom' => 'Kartan suurennostaso', |
| 356 | + 'semanticmaps_paramdesc_centre' => 'Kartan keskipisteen koordinaatit', |
| 357 | +); |
| 358 | + |
| 359 | +/** French (Français) |
| 360 | + * @author Crochet.david |
| 361 | + * @author Grondin |
| 362 | + * @author IAlex |
| 363 | + * @author Jean-Frédéric |
| 364 | + * @author Peter17 |
| 365 | + * @author PieRRoMaN |
| 366 | + * @author Sherbrooke |
| 367 | + * @author Urhixidur |
| 368 | + */ |
| 369 | +$messages['fr'] = array( |
| 370 | + 'semanticmaps-desc' => "Permet d'afficher et de modifier les données de coordonnées stockées par l'extension Semantic MediaWiki ([http://mapping.referata.com/wiki/Examples demo]).", |
| 371 | + 'semanticmaps-unrecognizeddistance' => "La valeur $1 n'est pas une distance valide", |
| 372 | + 'semanticmaps-kml-link' => 'Voir le fichier KML', |
| 373 | + 'semanticmaps-default-kml-pagelink' => 'Voir l’article $1', |
| 374 | + 'semanticmaps_lookupcoordinates' => 'Estimer les coordonnées', |
| 375 | + 'semanticmaps_enteraddresshere' => 'Entrez ici l’adresse', |
| 376 | + 'semanticmaps_notfound' => 'pas trouvé', |
| 377 | + 'semanticmaps_paramdesc_format' => 'Le service de cartographie utilisé pour générer la carte', |
| 378 | + 'semanticmaps_paramdesc_geoservice' => 'Le service de géocodage utilisé pour transformer les adresses en coordonnées', |
| 379 | + 'semanticmaps_paramdesc_height' => 'La hauteur de la carte, en pixels ($1 par défaut)', |
| 380 | + 'semanticmaps_paramdesc_width' => 'La largeur de la carte, en pixels ($1 par défaut)', |
| 381 | + 'semanticmaps_paramdesc_zoom' => 'Le niveau d’agrandissement de la carte', |
| 382 | + 'semanticmaps_paramdesc_centre' => 'Les coordonnées du centre de la carte', |
| 383 | + 'semanticmaps_paramdesc_controls' => 'Les contrôles utilisateurs placés sur la carte', |
| 384 | + 'semanticmaps_paramdesc_types' => 'Les types de cartes disponibles sur la carte', |
| 385 | + 'semanticmaps_paramdesc_type' => 'Le type de carte par défaut pour la carte', |
| 386 | + 'semanticmaps_paramdesc_overlays' => 'Les revêtements disponibles sur la carte', |
| 387 | + 'semanticmaps_paramdesc_autozoom' => 'Si le zoom avant et arrière en utilisant la molette de la souris est activé', |
| 388 | + 'semanticmaps_paramdesc_layers' => 'Les revêtements disponibles sur la carte', |
| 389 | +); |
| 390 | + |
| 391 | +/** Franco-Provençal (Arpetan) |
| 392 | + * @author ChrisPtDe |
| 393 | + */ |
| 394 | +$messages['frp'] = array( |
| 395 | + 'semanticmaps-unrecognizeddistance' => 'La valor $1 est pas una distance valida.', |
| 396 | + 'semanticmaps_lookupcoordinates' => 'Èstimar les coordonâs', |
| 397 | + 'semanticmaps_enteraddresshere' => 'Buchiéd l’adrèce ique', |
| 398 | + 'semanticmaps_notfound' => 'pas trovâ', |
| 399 | +); |
| 400 | + |
| 401 | +/** Galician (Galego) |
| 402 | + * @author Toliño |
| 403 | + */ |
| 404 | +$messages['gl'] = array( |
| 405 | + 'semanticmaps-desc' => 'Proporciona a capacidade de ollar e modificar os datos de coordenadas gardados a través da extensión Semantic MediaWiki ([http://mapping.referata.com/wiki/Examples demostración]).', |
| 406 | + 'semanticmaps-unrecognizeddistance' => 'O valor $1 non é unha distancia válida.', |
| 407 | + 'semanticmaps-kml-link' => 'Ollar o ficheiro KML', |
| 408 | + 'semanticmaps-default-kml-pagelink' => 'Ver a páxina "$1"', |
| 409 | + 'semanticmaps_lookupcoordinates' => 'Ver as coordenadas', |
| 410 | + 'semanticmaps_enteraddresshere' => 'Introduza o enderezo aquí', |
| 411 | + 'semanticmaps_notfound' => 'non se atopou', |
| 412 | + 'semanticmaps_paramdesc_format' => 'O servizo de cartografía utilizado para xerar o mapa', |
| 413 | + 'semanticmaps_paramdesc_geoservice' => 'O servizo de xeocodificación usado para transformar enderezos en coordenadas', |
| 414 | + 'semanticmaps_paramdesc_height' => 'A altura do mapa, en píxeles (por defecto, $1)', |
| 415 | + 'semanticmaps_paramdesc_width' => 'O largo do mapa, en píxeles (por defecto, $1)', |
| 416 | + 'semanticmaps_paramdesc_zoom' => 'O nivel de zoom do mapa', |
| 417 | + 'semanticmaps_paramdesc_centre' => 'As coordenadas do centro do mapa', |
| 418 | + 'semanticmaps_paramdesc_controls' => 'Os controis de usuario situados no mapa', |
| 419 | + 'semanticmaps_paramdesc_types' => 'Os tipos de mapa dispoñibles no mapa', |
| 420 | + 'semanticmaps_paramdesc_type' => 'O tipo de mapa por defecto para o mapa', |
| 421 | + 'semanticmaps_paramdesc_overlays' => 'As sobreposicións dispoñibles no mapa', |
| 422 | + 'semanticmaps_paramdesc_autozoom' => 'Activa o achegamento e afastamento coa roda do rato', |
| 423 | + 'semanticmaps_paramdesc_layers' => 'As capas dispoñibles no mapa', |
| 424 | +); |
| 425 | + |
| 426 | +/** Swiss German (Alemannisch) |
| 427 | + * @author Als-Holder |
| 428 | + */ |
| 429 | +$messages['gsw'] = array( |
| 430 | + 'semanticmaps-desc' => 'Ergänzt e Megligkeit zum Aaluege un Bearbeite vu Koordinate, wu im Ramme vu dr Erwyterig „Semantisch MediaWiki“ gspycheret wore sin. [http://www.mediawiki.org/wiki/Extension:Semantic_Maps Dokumäntation]. [http://mapping.referata.com/wiki/Examples Demo]', |
| 431 | + 'semanticmaps-unrecognizeddistance' => 'Dr Wert $1 isch kei giltigi Dischtanz.', |
| 432 | + 'semanticmaps-kml-link' => 'KML-Datei aaluege', |
| 433 | + 'semanticmaps-default-kml-pagelink' => 'Syte $1 aaluege', |
| 434 | + 'semanticmaps_lookupcoordinates' => 'Koordinate nooluege', |
| 435 | + 'semanticmaps_enteraddresshere' => 'Doo Adräss yygee', |
| 436 | + 'semanticmaps_notfound' => 'nit gfunde', |
| 437 | + 'semanticmaps_paramdesc_format' => 'Dr Chartedienscht, wu brucht wäre soll zum Erzyyge vu dr Charte', |
| 438 | + 'semanticmaps_paramdesc_geoservice' => 'Dr Geokodierigs-Service, wu brucht wäre soll zum umwandle vu Adrässe in Koordinate', |
| 439 | + 'semanticmaps_paramdesc_height' => 'D Hechi vu dr Charte, in Pixel (Standard: $1)', |
| 440 | + 'semanticmaps_paramdesc_width' => 'D Breiti vu dr Charte, in Pixel (Standard: $1)', |
| 441 | + 'semanticmaps_paramdesc_zoom' => 'S Zoom-Level vu dr Charte', |
| 442 | + 'semanticmaps_paramdesc_centre' => 'D Koordinate vum Mittelpunkt vu dr Charte', |
| 443 | + 'semanticmaps_paramdesc_controls' => 'D Hilfsmittel, wu in d Charte yygfiegt sin', |
| 444 | + 'semanticmaps_paramdesc_types' => 'D Chartetype, wu fir d Charte verfiegbar sin', |
| 445 | + 'semanticmaps_paramdesc_type' => 'Dr Standard-Chartetyp fir d Charte', |
| 446 | + 'semanticmaps_paramdesc_overlays' => 'D Overlays, wu fir d Charte verfiegbar sin', |
| 447 | + 'semanticmaps_paramdesc_autozoom' => 'Eb mer e Charte cha vergreßere oder verchleinere mit em Muusrad', |
| 448 | + 'semanticmaps_paramdesc_layers' => 'D Lage, wu fir Charte verfiegbar sin', |
| 449 | +); |
| 450 | + |
| 451 | +/** Hebrew (עברית) |
| 452 | + * @author Rotemliss |
| 453 | + * @author YaronSh |
| 454 | + */ |
| 455 | +$messages['he'] = array( |
| 456 | + 'semanticmaps-desc' => 'הוספת האפשרות לצפייה ולעריכה בנתוני קואורדינטה המאוחסנים דרך הרחבת המדיה־ויקי הסמנטי ([http://mapping.referata.com/wiki/Examples הדגמה]).1', |
| 457 | + 'semanticmaps_lookupcoordinates' => 'חיפוש קואורדינטות', |
| 458 | + 'semanticmaps_enteraddresshere' => 'כתבו כתובת כאן', |
| 459 | + 'semanticmaps_notfound' => 'לא נמצאה', |
| 460 | + 'semanticmaps_paramdesc_format' => 'שירות המיפוי המשמש להכנת המפה', |
| 461 | + 'semanticmaps_paramdesc_height' => 'גובה המפה, בפיקסלים (ברירת המחדל היא $1)', |
| 462 | + 'semanticmaps_paramdesc_width' => 'רוחב המפה, בפיקסלים (ברירת המחדל היא $1)', |
| 463 | + 'semanticmaps_paramdesc_zoom' => 'רמת התקריב של המפה', |
| 464 | + 'semanticmaps_paramdesc_centre' => 'קואורדינטות מרכז המפה', |
| 465 | + 'semanticmaps_paramdesc_controls' => 'פקדי המשתמש ממוקמים על המפה', |
| 466 | + 'semanticmaps_paramdesc_types' => 'צורות המפה הזמינות על המפה', |
| 467 | + 'semanticmaps_paramdesc_type' => 'סוג ברירת המחדל של המפה עבור המפה', |
| 468 | + 'semanticmaps_paramdesc_overlays' => 'השכבות הזמינות במפה', |
| 469 | + 'semanticmaps_paramdesc_layers' => 'השכבות הזמינות במפה', |
| 470 | +); |
| 471 | + |
| 472 | +/** Croatian (Hrvatski) |
| 473 | + * @author Tivek |
| 474 | + */ |
| 475 | +$messages['hr'] = array( |
| 476 | + 'semanticmaps-desc' => "Pruža pregledavanje i uređivanje koordinata spremljenih koristeći Semantic MediaWiki ekstenziju ([http://mapping.referata.com/wiki/Examples demo's]).", |
| 477 | + 'semanticmaps-unrecognizeddistance' => 'Vrijednost $1 nije valjana udaljenost.', |
| 478 | + 'semanticmaps_lookupcoordinates' => 'Potraži koordinate', |
| 479 | + 'semanticmaps_enteraddresshere' => 'Unesite adresu ovdje', |
| 480 | + 'semanticmaps_notfound' => 'nije nađeno', |
| 481 | + 'semanticmaps_paramdesc_format' => 'Kartografska usluga koja se koristi za stvaranje karte', |
| 482 | + 'semanticmaps_paramdesc_geoservice' => 'Goecoding usluga koja pretvara adrese u koordinate', |
| 483 | + 'semanticmaps_paramdesc_height' => 'Visina karte, u pikselima ($1 ako nije navedeno)', |
| 484 | + 'semanticmaps_paramdesc_width' => 'Širina karte, u pikselima ($1 ako nije navedeno)', |
| 485 | + 'semanticmaps_paramdesc_zoom' => 'Razina zumiranja karte', |
| 486 | + 'semanticmaps_paramdesc_centre' => 'Koordinate centra karte', |
| 487 | + 'semanticmaps_paramdesc_controls' => 'Korisničke kontrole stavljene na kartu', |
| 488 | + 'semanticmaps_paramdesc_types' => 'Dostupni tipovi karte', |
| 489 | + 'semanticmaps_paramdesc_type' => 'Prvotno zadani tip karte', |
| 490 | + 'semanticmaps_paramdesc_overlays' => 'Nadslojevi dostupni na karti', |
| 491 | + 'semanticmaps_paramdesc_autozoom' => 'Ako je omogućeno zumiranje kotačićem miša', |
| 492 | + 'semanticmaps_paramdesc_layers' => 'Slojevi dostupni na karti', |
| 493 | +); |
| 494 | + |
| 495 | +/** Upper Sorbian (Hornjoserbsce) |
| 496 | + * @author Michawiki |
| 497 | + */ |
| 498 | +$messages['hsb'] = array( |
| 499 | + 'semanticmaps-desc' => 'Zmóžnja zwobraznjenje a wobdźěłanje koordinatowych datow, kotrež su so z rozšěrjenjom Semantic MediaWiki składowali ([http://mapping.referata.com/wiki/Examples přikłady]).', |
| 500 | + 'semanticmaps-unrecognizeddistance' => 'Hódnota $1 płaćiwa distanca njeje.', |
| 501 | + 'semanticmaps-kml-link' => 'KML-dataju sej wobhladać', |
| 502 | + 'semanticmaps-default-kml-pagelink' => 'Nastawk $1 sej wobhladać', |
| 503 | + 'semanticmaps_lookupcoordinates' => 'Za koordinatami hladać', |
| 504 | + 'semanticmaps_enteraddresshere' => 'Zapodaj tu adresu', |
| 505 | + 'semanticmaps_notfound' => 'njenamakany', |
| 506 | + 'semanticmaps_paramdesc_format' => 'Kartěrowanska słužba, kotraž so wužiwa, zo by kartu wutworiła', |
| 507 | + 'semanticmaps_paramdesc_geoservice' => 'Geokodowanska słužba, kotraž so wužiwa, zo by adresy do koordinatow přetworiła', |
| 508 | + 'semanticmaps_paramdesc_height' => 'Wysokosć karty, w pikselach (standard je $1)', |
| 509 | + 'semanticmaps_paramdesc_width' => 'Šěrokosć karty, w pikselach (standard je $1)', |
| 510 | + 'semanticmaps_paramdesc_zoom' => 'Skalowanski schodźenk karty', |
| 511 | + 'semanticmaps_paramdesc_centre' => 'Koordinaty srjedźišća karty', |
| 512 | + 'semanticmaps_paramdesc_controls' => 'Wužiwarske elementy na karće', |
| 513 | + 'semanticmaps_paramdesc_types' => 'Kartowe typy, kotrež za kartu k dispoziciji steja', |
| 514 | + 'semanticmaps_paramdesc_type' => 'Standardny kartowy typ za kartu', |
| 515 | + 'semanticmaps_paramdesc_overlays' => 'Naworštowanja, kotrež za kartu k dispoziciji steja', |
| 516 | + 'semanticmaps_paramdesc_autozoom' => 'Jeli powjetšenje a pomjenšenje z pomocu kolesko myški je zmóžnjene', |
| 517 | + 'semanticmaps_paramdesc_layers' => 'Woršty, kotrež za kartu k dispoziciji steja', |
| 518 | +); |
| 519 | + |
| 520 | +/** Hungarian (Magyar) |
| 521 | + * @author Dani |
| 522 | + * @author Glanthor Reviol |
| 523 | + */ |
| 524 | +$messages['hu'] = array( |
| 525 | + 'semanticmaps-desc' => 'Lehetővé teszi a szemantikus MediaWiki kiterjesztés segítségével tárolt koordinátaadatok megtekintését és szerkesztését ([http://mapping.referata.com/wiki/Examples demo]).', |
| 526 | + 'semanticmaps_lookupcoordinates' => 'Koordináták felkeresése', |
| 527 | + 'semanticmaps_enteraddresshere' => 'Add meg a címet itt', |
| 528 | + 'semanticmaps_notfound' => 'nincs találat', |
| 529 | + 'semanticmaps_paramdesc_format' => 'A térkép generálásához használt térképszolgáltatás.', |
| 530 | + 'semanticmaps_paramdesc_height' => 'A térkép magassága, képpontban (alapértelmezetten $1)', |
| 531 | + 'semanticmaps_paramdesc_width' => 'A térkép szélessége, képpontban (alapértelmezetten $1)', |
| 532 | + 'semanticmaps_paramdesc_zoom' => 'A térkép nagyítása', |
| 533 | + 'semanticmaps_paramdesc_centre' => 'A térkép középpontjának koordinátái', |
| 534 | + 'semanticmaps_paramdesc_types' => 'A térképen elérhető térképtípusok', |
| 535 | + 'semanticmaps_paramdesc_type' => 'A térkép alapértelmezett térképtípusa', |
| 536 | + 'semanticmaps_paramdesc_overlays' => 'A térképen lévő rétegek', |
| 537 | + 'semanticmaps_paramdesc_layers' => 'A térképen lévő rétegek', |
| 538 | +); |
| 539 | + |
| 540 | +/** Interlingua (Interlingua) |
| 541 | + * @author McDutchie |
| 542 | + */ |
| 543 | +$messages['ia'] = array( |
| 544 | + 'semanticmaps-desc' => 'Forni le capacitate de vider e modificar datos de coordinatas immagazinate con le extension Semantic MediaWiki ([http://mapping.referata.com/wiki/Examples demonstrationes]).', |
| 545 | + 'semanticmaps-unrecognizeddistance' => 'Le valor $1 non es un distantia valide.', |
| 546 | + 'semanticmaps-kml-link' => 'Vider le file KML', |
| 547 | + 'semanticmaps-default-kml-pagelink' => 'Vider articulo $1', |
| 548 | + 'semanticmaps_lookupcoordinates' => 'Cercar coordinatas', |
| 549 | + 'semanticmaps_enteraddresshere' => 'Entra adresse hic', |
| 550 | + 'semanticmaps_notfound' => 'non trovate', |
| 551 | + 'semanticmaps_paramdesc_format' => 'Le servicio cartographic usate pro generar le carta', |
| 552 | + 'semanticmaps_paramdesc_geoservice' => 'Le servicio de geocodification usate pro converter adresses in coordinatas', |
| 553 | + 'semanticmaps_paramdesc_height' => 'Le altitude del carta, in pixeles (predefinition es $1)', |
| 554 | + 'semanticmaps_paramdesc_width' => 'Le latitude del carta, in pixeles (predefinition es $1)', |
| 555 | + 'semanticmaps_paramdesc_zoom' => 'Le nivello de zoom del carta', |
| 556 | + 'semanticmaps_paramdesc_centre' => 'Le coordinatas del centro del carta', |
| 557 | + 'semanticmaps_paramdesc_controls' => 'Le buttones de adjustamento placiate in le carta', |
| 558 | + 'semanticmaps_paramdesc_types' => 'Le typos de carta disponibile in le carta', |
| 559 | + 'semanticmaps_paramdesc_type' => 'Le typo de carta predefinite pro le carta', |
| 560 | + 'semanticmaps_paramdesc_overlays' => 'Le superpositiones disponibile in le carta', |
| 561 | + 'semanticmaps_paramdesc_autozoom' => 'Si le zoom avante e retro con le rota de rolamento del mouse es active', |
| 562 | + 'semanticmaps_paramdesc_layers' => 'Le stratos disponibile in le carta', |
| 563 | +); |
| 564 | + |
| 565 | +/** Indonesian (Bahasa Indonesia) |
| 566 | + * @author Bennylin |
| 567 | + * @author Farras |
| 568 | + * @author IvanLanin |
| 569 | + */ |
| 570 | +$messages['id'] = array( |
| 571 | + 'semanticmaps-desc' => 'Memampukan penampilan dan penyuntingan data koordinat yang disimpan melalui pengaya MediaWiki Semantic ([http://mapping.referata.com/wiki/Examples demo]).', |
| 572 | + 'semanticmaps-unrecognizeddistance' => 'Nilai $1 bukan jarak yang sah.', |
| 573 | + 'semanticmaps-kml-link' => 'Lihat berkas KML', |
| 574 | + 'semanticmaps-default-kml-pagelink' => 'Lihat halaman $1', |
| 575 | + 'semanticmaps_lookupcoordinates' => 'Cari koordinat', |
| 576 | + 'semanticmaps_enteraddresshere' => 'Masukkan alamat di sini', |
| 577 | + 'semanticmaps_notfound' => 'tidak ditemukan', |
| 578 | + 'semanticmaps_paramdesc_format' => 'Layanan pemetaan untuk membuat peta', |
| 579 | + 'semanticmaps_paramdesc_geoservice' => 'Layanan kode geo untuk mengubah alamat menjadi koordinat', |
| 580 | + 'semanticmaps_paramdesc_height' => 'Tinggi peta, dalam piksel (umumnya $1)', |
| 581 | + 'semanticmaps_paramdesc_width' => 'Lebar peta, dalam piksel (umumnya $1)', |
| 582 | + 'semanticmaps_paramdesc_zoom' => 'Tingkat zum peta', |
| 583 | + 'semanticmaps_paramdesc_centre' => 'Koordinat bagian tengah peta', |
| 584 | + 'semanticmaps_paramdesc_controls' => 'Kontrol pengguna yang diletakkan di peta', |
| 585 | + 'semanticmaps_paramdesc_types' => 'Jenis peta tersedia di peta', |
| 586 | + 'semanticmaps_paramdesc_type' => 'Jenis peta biasa untuk peta ini', |
| 587 | + 'semanticmaps_paramdesc_overlays' => 'Lapisan yang tersedia di peta', |
| 588 | + 'semanticmaps_paramdesc_autozoom' => 'Bila ingin zum dekat dan jauh menggunakan mouse, gunakan roda gulung', |
| 589 | + 'semanticmaps_paramdesc_layers' => 'Lapisan tersedia di peta', |
| 590 | +); |
| 591 | + |
| 592 | +/** Italian (Italiano) |
| 593 | + * @author Civvì |
| 594 | + * @author Darth Kule |
| 595 | + * @author HalphaZ |
| 596 | + */ |
| 597 | +$messages['it'] = array( |
| 598 | + 'semanticmaps-desc' => "Offre la possibilità di visualizzare e modificare le coordinate memorizzate attraverso l'estensione Semantic MediaWiki ([http://mapping.referata.com/wiki/Examples demo]).", |
| 599 | + 'semanticmaps-unrecognizeddistance' => 'Il valore $1 non è una distanza valida.', |
| 600 | + 'semanticmaps_lookupcoordinates' => 'Cerca coordinate', |
| 601 | + 'semanticmaps_enteraddresshere' => 'Inserisci indirizzo qui', |
| 602 | + 'semanticmaps_notfound' => 'non trovato', |
| 603 | + 'semanticmaps_paramdesc_format' => 'Il servizio di mapping utilizzato per generare la mappa', |
| 604 | + 'semanticmaps_paramdesc_geoservice' => 'Il servizio di geocoding utilizzato per trasformare gli indirizzi in coordinate', |
| 605 | + 'semanticmaps_paramdesc_height' => "L'altezza della mappa in pixel (il valore di default è $1)", |
| 606 | + 'semanticmaps_paramdesc_width' => 'La larghezza della mappa in pixel (il valore di default è $1)', |
| 607 | + 'semanticmaps_paramdesc_zoom' => 'Il livello di zoom della mappa', |
| 608 | + 'semanticmaps_paramdesc_centre' => 'Le coordinate del centro della mappa', |
| 609 | + 'semanticmaps_paramdesc_controls' => 'I controlli utente posizionati sulla mappa', |
| 610 | + 'semanticmaps_paramdesc_types' => 'I tipi di mappa disponibili sulla mappa', |
| 611 | + 'semanticmaps_paramdesc_type' => 'Il tipo mappa predefinito per la mappa', |
| 612 | + 'semanticmaps_paramdesc_overlays' => 'Gli overlay disponibili sulla mappa', |
| 613 | + 'semanticmaps_paramdesc_autozoom' => 'Se sono attivati lo zoom avanti e indietro utilizzando la rotellina del mouse', |
| 614 | + 'semanticmaps_paramdesc_layers' => 'Gli strati (layer) disponibili sulla mappa', |
| 615 | +); |
| 616 | + |
| 617 | +/** Japanese (日本語) |
| 618 | + * @author Fryed-peach |
| 619 | + * @author Mizusumashi |
| 620 | + * @author 青子守歌 |
| 621 | + */ |
| 622 | +$messages['ja'] = array( |
| 623 | + 'semanticmaps-desc' => 'Semantic MediaWiki 拡張機能を通して格納された座標データを表示・編集する機能を提供する ([http://mapping.referata.com/wiki/Examples 実演])。', |
| 624 | + 'semanticmaps-unrecognizeddistance' => '値$1は有効な距離ではありません。', |
| 625 | + 'semanticmaps-kml-link' => 'KMLファイルを閲覧', |
| 626 | + 'semanticmaps-default-kml-pagelink' => 'ページ$1を表示', |
| 627 | + 'semanticmaps_lookupcoordinates' => '座標を調べる', |
| 628 | + 'semanticmaps_enteraddresshere' => '住所をここに入力します', |
| 629 | + 'semanticmaps_notfound' => '見つかりません', |
| 630 | + 'semanticmaps_paramdesc_format' => '地図の生成に利用されている地図サービス', |
| 631 | + 'semanticmaps_paramdesc_geoservice' => '住所の座標への変換に利用されているジオコーディングサービス', |
| 632 | + 'semanticmaps_paramdesc_height' => '地図の縦幅 (単位はピクセル、既定は$1)', |
| 633 | + 'semanticmaps_paramdesc_width' => '地図の横幅 (単位はピクセル、既定は$1)', |
| 634 | + 'semanticmaps_paramdesc_zoom' => '地図の拡大度', |
| 635 | + 'semanticmaps_paramdesc_centre' => '地図の中心の座標', |
| 636 | + 'semanticmaps_paramdesc_controls' => 'この地図上に設置するユーザーコントロール', |
| 637 | + 'semanticmaps_paramdesc_types' => 'この地図で利用できる地図タイプ', |
| 638 | + 'semanticmaps_paramdesc_type' => 'この地図のデフォルト地図タイプ', |
| 639 | + 'semanticmaps_paramdesc_overlays' => 'この地図で利用できるオーバーレイ', |
| 640 | + 'semanticmaps_paramdesc_autozoom' => 'マウスのスクロールホイールを使ったズームインやアウトを有効にするか', |
| 641 | + 'semanticmaps_paramdesc_layers' => 'この地図で利用できるレイヤー', |
| 642 | +); |
| 643 | + |
| 644 | +/** Khmer (ភាសាខ្មែរ) |
| 645 | + * @author Thearith |
| 646 | + */ |
| 647 | +$messages['km'] = array( |
| 648 | + 'semanticmaps_lookupcoordinates' => 'ក្រឡេកមើលកូអរដោនេ', |
| 649 | +); |
| 650 | + |
| 651 | +/** Colognian (Ripoarisch) |
| 652 | + * @author Purodha |
| 653 | + */ |
| 654 | +$messages['ksh'] = array( |
| 655 | + 'semanticmaps-desc' => 'Määt et müjjelesch, Koodinaate ze beloore un ze ändere, di per Semantesch Mediawiki faßjehallde woodte. (E [http://mapping.referata.com/wiki/Examples Beijshpöll])', |
| 656 | + 'semanticmaps_lookupcoordinates' => 'Koordinate nohkike', |
| 657 | + 'semanticmaps_enteraddresshere' => 'Donn hee de Address enjäve', |
| 658 | + 'semanticmaps_notfound' => 'nit jefonge', |
| 659 | + 'semanticmaps_paramdesc_format' => 'Dä Deens för Kaate ußzejävve, woh heh di Kaat vun kütt', |
| 660 | + 'semanticmaps_paramdesc_geoservice' => "Dä Deens för Adräße en Ko'odinaate öm_ze_wandelle", |
| 661 | + 'semanticmaps_paramdesc_height' => 'De Hühde vun heh dä Kaat en Pixelle — schtandattmääßesch {{PLURAL:$1|$1 Pixel|$1 Pixelle|nix}}', |
| 662 | + 'semanticmaps_paramdesc_width' => 'De Breedt vun heh dä Kaat en Pixelle — schtandattmääßesch {{PLURAL:$1|$1 Pixel|$1 Pixelle|nix}}', |
| 663 | + 'semanticmaps_paramdesc_zoom' => 'Wi doll dä Zoom fö heh di Kaat es', |
| 664 | + 'semanticmaps_paramdesc_centre' => "De Ko'odinaate op de Ääd, vun de Medde vun heh dä Kaat", |
| 665 | + 'semanticmaps_paramdesc_controls' => 'De Knöppe för de Bedeenung, di op di Kaat jemohlt wäääde', |
| 666 | + 'semanticmaps_paramdesc_types' => 'De Kaate-Zoote di mer för heh di Kaat ußsöhke kann', |
| 667 | + 'semanticmaps_paramdesc_type' => 'De Schtandatt Kaate-Zoot för heh di Kaat', |
| 668 | + 'semanticmaps_paramdesc_overlays' => 'De zohsäzlijje Eijnzelheijte, di mer op di Kaat drop bränge kann', |
| 669 | + 'semanticmaps_paramdesc_autozoom' => 'Falls et erin un eruß zoome met däm Kompjuter singe Muuß ierem Rättsche aanjeschalldt es, dann:', |
| 670 | + 'semanticmaps_paramdesc_layers' => 'De Nivohs, di för di Kaat ze han sin', |
| 671 | +); |
| 672 | + |
| 673 | +/** Kurdish (Latin) (Kurdî (Latin)) |
| 674 | + * @author George Animal |
| 675 | + */ |
| 676 | +$messages['ku-latn'] = array( |
| 677 | + 'semanticmaps_notfound' => 'nehate dîtin', |
| 678 | +); |
| 679 | + |
| 680 | +/** Luxembourgish (Lëtzebuergesch) |
| 681 | + * @author Robby |
| 682 | + */ |
| 683 | +$messages['lb'] = array( |
| 684 | + 'semanticmaps-unrecognizeddistance' => 'De Wäert $1 ass keng valabel Distanz.', |
| 685 | + 'semanticmaps-kml-link' => 'KML-Fichier weisen', |
| 686 | + 'semanticmaps-default-kml-pagelink' => 'Säit $1 weisen', |
| 687 | + 'semanticmaps_lookupcoordinates' => 'Koordinaten nokucken', |
| 688 | + 'semanticmaps_enteraddresshere' => 'Adress hei aginn', |
| 689 | + 'semanticmaps_notfound' => 'net fonnt', |
| 690 | + 'semanticmaps_paramdesc_format' => "De Kartographie-Service dee fir d'generéiere vun der Kaart benotzt gëtt", |
| 691 | + 'semanticmaps_paramdesc_height' => "D'Héicht vun der Kaart, a Pixelen (Standard ass $1)", |
| 692 | + 'semanticmaps_paramdesc_width' => "D'Breet vun der Kaart, a Pixelen (Standard ass $1)", |
| 693 | + 'semanticmaps_paramdesc_zoom' => 'DenNiveau vum Zoom vun der Kaart', |
| 694 | + 'semanticmaps_paramdesc_centre' => "D'Koordinate vum zentrum vun der Kaart", |
| 695 | + 'semanticmaps_paramdesc_controls' => "D'Benotzerkontrollen déi op der Kaart plazéiert sinn", |
| 696 | + 'semanticmaps_paramdesc_types' => 'Déi disponibel Kaartentypen op der Kaart', |
| 697 | + 'semanticmaps_paramdesc_type' => "De Standard-Kaartentyp fir d'Kaart", |
| 698 | +); |
| 699 | + |
| 700 | +/** Macedonian (Македонски) |
| 701 | + * @author Bjankuloski06 |
| 702 | + */ |
| 703 | +$messages['mk'] = array( |
| 704 | + 'semanticmaps-desc' => 'Овозможува прегледување и уредување на координатни податоци складирани со додатокот Семантички МедијаВики ([http://mapping.referata.com/wiki/Examples урнеци]).', |
| 705 | + 'semanticmaps-unrecognizeddistance' => 'Вредноста $1 не претставува важечко растојание.', |
| 706 | + 'semanticmaps-kml-link' => 'Преглед на KML-податотеката', |
| 707 | + 'semanticmaps-default-kml-pagelink' => 'Преглед на статијата $1', |
| 708 | + 'semanticmaps_lookupcoordinates' => 'Побарај координати', |
| 709 | + 'semanticmaps_enteraddresshere' => 'Внесете адреса тука', |
| 710 | + 'semanticmaps_notfound' => 'не е најдено ништо', |
| 711 | + 'semanticmaps_paramdesc_format' => 'Картографската служба со која се создава картата', |
| 712 | + 'semanticmaps_paramdesc_geoservice' => 'Службата за геокодирање со која адресите се претвораат во координати', |
| 713 | + 'semanticmaps_paramdesc_height' => 'Висината на картата во пиксели ($1 по основно)', |
| 714 | + 'semanticmaps_paramdesc_width' => 'Ширината на картата во пиксели ($1 по основно)', |
| 715 | + 'semanticmaps_paramdesc_zoom' => 'Размерот на картата', |
| 716 | + 'semanticmaps_paramdesc_centre' => 'Координатите на средиштето на картата', |
| 717 | + 'semanticmaps_paramdesc_controls' => 'Корисничките контроли за на картата', |
| 718 | + 'semanticmaps_paramdesc_types' => 'Типови на карти, достапни за картата', |
| 719 | + 'semanticmaps_paramdesc_type' => 'Основно зададениот тип на карта', |
| 720 | + 'semanticmaps_paramdesc_overlays' => 'Достапните облоги за картата', |
| 721 | + 'semanticmaps_paramdesc_autozoom' => 'Ако е овозможено приближување и оддалечување со тркалцето на глушецот', |
| 722 | + 'semanticmaps_paramdesc_layers' => 'Слоевите достапни на картата', |
| 723 | +); |
| 724 | + |
| 725 | +/** Malayalam (മലയാളം) |
| 726 | + * @author Praveenp |
| 727 | + */ |
| 728 | +$messages['ml'] = array( |
| 729 | + 'semanticmaps_enteraddresshere' => 'വിലാസം നൽകുക', |
| 730 | + 'semanticmaps_notfound' => 'കണ്ടെത്താനായില്ല', |
| 731 | +); |
| 732 | + |
| 733 | +/** Dutch (Nederlands) |
| 734 | + * @author Jeroen De Dauw |
| 735 | + * @author Siebrand |
| 736 | + */ |
| 737 | +$messages['nl'] = array( |
| 738 | + 'semanticmaps-desc' => 'Biedt de mogelijkheid om locatiegegevens die opgeslagen zijn in Semantic MediaWiki te bewerken en te bekijken', |
| 739 | + 'semanticmaps-unrecognizeddistance' => 'De waarde "$1" is geen geldige afstand.', |
| 740 | + 'semanticmaps-kml-link' => 'KML-bestand bekijken', |
| 741 | + 'semanticmaps-default-kml-pagelink' => 'Pagina $1 bekijken', |
| 742 | + 'semanticmaps_lookupcoordinates' => 'Coördinaten opzoeken', |
| 743 | + 'semanticmaps_enteraddresshere' => 'Voer hier het adres in', |
| 744 | + 'semanticmaps_notfound' => 'niet gevonden', |
| 745 | + 'semanticmaps_paramdesc_format' => 'De kaartdienst die de kaart levert', |
| 746 | + 'semanticmaps_paramdesc_geoservice' => 'De geocoderingsdienst die adressen in coördinaten converteert', |
| 747 | + 'semanticmaps_paramdesc_height' => 'De hoogte van de kaart in pixels (standaard is $1)', |
| 748 | + 'semanticmaps_paramdesc_width' => 'De breedte van de kaart in pixels (standaard is $1)', |
| 749 | + 'semanticmaps_paramdesc_zoom' => 'Het zoomniveau van de kaart', |
| 750 | + 'semanticmaps_paramdesc_centre' => 'De coördinaten van het midden van de kaart', |
| 751 | + 'semanticmaps_paramdesc_controls' => 'De op de kaart te plaatsen hulpmiddelen', |
| 752 | + 'semanticmaps_paramdesc_types' => 'De voor de kaart beschikbare kaarttypen', |
| 753 | + 'semanticmaps_paramdesc_type' => 'Het standaard kaarttype voor de kaart', |
| 754 | + 'semanticmaps_paramdesc_overlays' => 'De voor de kaart beschikbare overlays', |
| 755 | + 'semanticmaps_paramdesc_autozoom' => 'Of in- en uitzoomen met het scrollwiel van de muis mogelijk is', |
| 756 | + 'semanticmaps_paramdesc_layers' => 'De lagen die beschikbaar zijn voor de kaart', |
| 757 | +); |
| 758 | + |
| 759 | +/** Norwegian Nynorsk (Norsk (nynorsk)) |
| 760 | + * @author Harald Khan |
| 761 | + */ |
| 762 | +$messages['nn'] = array( |
| 763 | + 'semanticmaps_lookupcoordinates' => 'Sjekk koordinatar', |
| 764 | + 'semanticmaps_enteraddresshere' => 'Skriv inn adressa her', |
| 765 | +); |
| 766 | + |
| 767 | +/** Norwegian (bokmål) (Norsk (bokmål)) |
| 768 | + * @author Event |
| 769 | + * @author Jon Harald Søby |
| 770 | + * @author Nghtwlkr |
| 771 | + */ |
| 772 | +$messages['no'] = array( |
| 773 | + 'semanticmaps-desc' => 'Tilbyr muligheten til å se og endre koordinatdata lagret gjennom Semantic MediaWiki-utvidelsen ([http://mapping.referata.com/wiki/Examples demo]).', |
| 774 | + 'semanticmaps-unrecognizeddistance' => 'Verdien $1 er ikke en gyldig avstand.', |
| 775 | + 'semanticmaps-kml-link' => 'Vis KML-filen', |
| 776 | + 'semanticmaps-default-kml-pagelink' => 'Vis siden $1', |
| 777 | + 'semanticmaps_lookupcoordinates' => 'Sjekk koordinater', |
| 778 | + 'semanticmaps_enteraddresshere' => 'Skriv inn adressen her', |
| 779 | + 'semanticmaps_notfound' => 'ikke funnet', |
| 780 | + 'semanticmaps_paramdesc_format' => 'Karttjenesten brukt for å generere kart', |
| 781 | + 'semanticmaps_paramdesc_geoservice' => 'Geokodetjenesten brukt for å gjøre adresser om til koordinater', |
| 782 | + 'semanticmaps_paramdesc_height' => 'Høyden til kartet, i piksler (standard er $1)', |
| 783 | + 'semanticmaps_paramdesc_width' => 'Bredden til kartet, i piksler (standard er $1)', |
| 784 | + 'semanticmaps_paramdesc_zoom' => 'Zoomnivået til kartet', |
| 785 | + 'semanticmaps_paramdesc_centre' => 'Koordinatene til kartets senter', |
| 786 | + 'semanticmaps_paramdesc_controls' => 'Brukerkontrollene plassert på kartet', |
| 787 | + 'semanticmaps_paramdesc_types' => 'Karttypene tilgjengelig for kartet', |
| 788 | + 'semanticmaps_paramdesc_type' => 'Standard karttype for kartet', |
| 789 | + 'semanticmaps_paramdesc_overlays' => 'Overlag tilgjengelig for kartet', |
| 790 | + 'semanticmaps_paramdesc_autozoom' => 'Dersom zooming ved bruk av musehjulet er slått på', |
| 791 | + 'semanticmaps_paramdesc_layers' => 'Lagene tilgjengelig på kartet', |
| 792 | +); |
| 793 | + |
| 794 | +/** Occitan (Occitan) |
| 795 | + * @author Cedric31 |
| 796 | + */ |
| 797 | +$messages['oc'] = array( |
| 798 | + 'semanticmaps-desc' => "Permet de veire e modificar las donadas de coordenadas estocadas a travèrs l'extension Semantic MediaWiki. [http://www.mediawiki.org/wiki/Extension:Semantic_Maps Documentacion]. [http://mapping.referata.com/wiki/Examples Demo]", |
| 799 | + 'semanticmaps_lookupcoordinates' => 'Estimar las coordenadas', |
| 800 | + 'semanticmaps_enteraddresshere' => 'Picatz aicí l’adreça', |
| 801 | + 'semanticmaps_notfound' => 'pas trobat', |
| 802 | +); |
| 803 | + |
| 804 | +/** Polish (Polski) |
| 805 | + * @author Deejay1 |
| 806 | + * @author Derbeth |
| 807 | + * @author Leinad |
| 808 | + * @author Odder |
| 809 | + * @author Sp5uhe |
| 810 | + */ |
| 811 | +$messages['pl'] = array( |
| 812 | + 'semanticmaps-desc' => 'Daje możliwość przeglądania oraz edytowania współrzędnych zapisanych przez rozszerzenie Semantic MediaWiki ([http://mapping.referata.com/wiki/Examples demo]).', |
| 813 | + 'semanticmaps-unrecognizeddistance' => 'Wartość $1 nie jest poprawną odległością.', |
| 814 | + 'semanticmaps-kml-link' => 'Wyświetla plik KML', |
| 815 | + 'semanticmaps-default-kml-pagelink' => 'Pokaż stronę $1', |
| 816 | + 'semanticmaps_lookupcoordinates' => 'Wyszukaj współrzędne', |
| 817 | + 'semanticmaps_enteraddresshere' => 'Podaj adres', |
| 818 | + 'semanticmaps_notfound' => 'nie odnaleziono', |
| 819 | + 'semanticmaps_paramdesc_format' => 'Usługa kartograficzna używana do generowania map', |
| 820 | + 'semanticmaps_paramdesc_geoservice' => 'Usługa geokodowania wykorzystywana do przeliczania adresów na współrzędne', |
| 821 | + 'semanticmaps_paramdesc_height' => 'Wysokość mapy w pikselach (domyślnie $1)', |
| 822 | + 'semanticmaps_paramdesc_width' => 'Szerokość mapy w pikselach (domyślnie $1)', |
| 823 | + 'semanticmaps_paramdesc_zoom' => 'Stopień powiększenia mapy', |
| 824 | + 'semanticmaps_paramdesc_centre' => 'Współrzędne środka mapy', |
| 825 | + 'semanticmaps_paramdesc_controls' => 'Elementy sterujące dla użytkownika umieszczone na mapie', |
| 826 | + 'semanticmaps_paramdesc_types' => 'Rodzaje map dostępne na mapie', |
| 827 | + 'semanticmaps_paramdesc_type' => 'Domyślny typ mapy', |
| 828 | + 'semanticmaps_paramdesc_overlays' => 'Dostępne nakładki do mapy', |
| 829 | + 'semanticmaps_paramdesc_autozoom' => 'Jeśli włączone jest powiększanie i pomniejszanie za pomocą kółka myszy', |
| 830 | + 'semanticmaps_paramdesc_layers' => 'Dostępne na mapie warstwy', |
| 831 | +); |
| 832 | + |
| 833 | +/** Piedmontese (Piemontèis) |
| 834 | + * @author Borichèt |
| 835 | + * @author Dragonòt |
| 836 | + */ |
| 837 | +$messages['pms'] = array( |
| 838 | + 'semanticmaps-desc' => "A dà la possibilità ëd vardé e modifiché ij dat ëd le coordinà memorisà con l'estension Semantic MediaWiki ([http://mapping.referata.com/wiki/Demo d'esempi]).", |
| 839 | + 'semanticmaps-unrecognizeddistance' => "Ël valor $1 a l'é pa na distansa bon-a.", |
| 840 | + 'semanticmaps-kml-link' => "Vëdde l'archivi KML", |
| 841 | + 'semanticmaps-default-kml-pagelink' => 'Lese la pàgina $1', |
| 842 | + 'semanticmaps_lookupcoordinates' => 'Serca coordinà', |
| 843 | + 'semanticmaps_enteraddresshere' => 'Ansëriss adrëssa sì', |
| 844 | + 'semanticmaps_notfound' => 'pa trovà', |
| 845 | + 'semanticmaps_paramdesc_format' => 'Ël servissi ëd cartografìa dovrà për generé la carta', |
| 846 | + 'semanticmaps_paramdesc_geoservice' => "Ël servissi ëd geocodìfica dovrà për trasformé j'adrësse an coordinà", |
| 847 | + 'semanticmaps_paramdesc_height' => "L'autëssa dla carta, an pontin (lë stàndard a l'é $1)", |
| 848 | + 'semanticmaps_paramdesc_width' => "La larghëssa dla carta, an pontin (lë stàndard a l'é $1)", |
| 849 | + 'semanticmaps_paramdesc_zoom' => "Ël livel d'angrandiment ëd la carta", |
| 850 | + 'semanticmaps_paramdesc_centre' => 'Le coordinà dël sènter ëd la carta', |
| 851 | + 'semanticmaps_paramdesc_controls' => 'Ij contròj utent piassà an sla carta', |
| 852 | + 'semanticmaps_paramdesc_types' => 'Le sòrt ëd carte disponìbij an sla carta', |
| 853 | + 'semanticmaps_paramdesc_type' => 'Ël tipo ëd carta stàndard për la carta', |
| 854 | + 'semanticmaps_paramdesc_overlays' => 'Le dzor-posission disponìbij an sla carta', |
| 855 | + 'semanticmaps_paramdesc_autozoom' => "Se l'angrandiment anans e andré an dovrand la roëtta dël rat a l'é abilità", |
| 856 | + 'semanticmaps_paramdesc_layers' => 'Ij livej disponìbij an sla carta', |
| 857 | +); |
| 858 | + |
| 859 | +/** Pashto (پښتو) |
| 860 | + * @author Ahmed-Najib-Biabani-Ibrahimkhel |
| 861 | + */ |
| 862 | +$messages['ps'] = array( |
| 863 | + 'semanticmaps_notfound' => 'و نه موندل شو', |
| 864 | +); |
| 865 | + |
| 866 | +/** Portuguese (Português) |
| 867 | + * @author Hamilton Abreu |
| 868 | + * @author Indech |
| 869 | + * @author Malafaya |
| 870 | + */ |
| 871 | +$messages['pt'] = array( |
| 872 | + 'semanticmaps-desc' => 'Permite ver e editar dados de coordenadas, armazenados através da extensão MediaWiki Semântico ([http://mapping.referata.com/wiki/Examples demonstração]). |
| 873 | +Serviços de cartografia disponíveis: $1', |
| 874 | + 'semanticmaps-unrecognizeddistance' => 'O valor $1 não é uma distância válida.', |
| 875 | + 'semanticmaps-kml-link' => 'Ver o ficheiro KML', |
| 876 | + 'semanticmaps-default-kml-pagelink' => 'Ver a página $1', |
| 877 | + 'semanticmaps_lookupcoordinates' => 'Pesquisar coordenadas', |
| 878 | + 'semanticmaps_enteraddresshere' => 'Introduza um endereço aqui', |
| 879 | + 'semanticmaps_notfound' => 'não encontrado', |
| 880 | + 'semanticmaps_paramdesc_format' => 'O serviço de cartografia usado para gerar o mapa', |
| 881 | + 'semanticmaps_paramdesc_geoservice' => 'O serviço de geocódigos usado para transformar endereços em coordenadas', |
| 882 | + 'semanticmaps_paramdesc_height' => 'A altura do mapa, em pixels (por omissão, $1)', |
| 883 | + 'semanticmaps_paramdesc_width' => 'A largura do mapa, em pixels (por omissão, $1)', |
| 884 | + 'semanticmaps_paramdesc_zoom' => 'O nível de aproximação do mapa', |
| 885 | + 'semanticmaps_paramdesc_centre' => 'As coordenadas do centro do mapa', |
| 886 | + 'semanticmaps_paramdesc_controls' => 'Os controles colocados no mapa', |
| 887 | + 'semanticmaps_paramdesc_types' => 'Os tipos de mapa disponíveis no mapa', |
| 888 | + 'semanticmaps_paramdesc_type' => 'O tipo do mapa, por omissão', |
| 889 | + 'semanticmaps_paramdesc_overlays' => 'As sobreposições disponíveis no mapa', |
| 890 | + 'semanticmaps_paramdesc_autozoom' => 'Possibilitar a aproximação e afastamento usando a roda de deslizamento do rato', |
| 891 | + 'semanticmaps_paramdesc_layers' => 'As camadas disponíveis no mapa', |
| 892 | +); |
| 893 | + |
| 894 | +/** Brazilian Portuguese (Português do Brasil) |
| 895 | + * @author Eduardo.mps |
| 896 | + * @author Giro720 |
| 897 | + * @author Luckas Blade |
| 898 | + */ |
| 899 | +$messages['pt-br'] = array( |
| 900 | + 'semanticmaps-desc' => 'Provê a possibilidade de ver e editar dados de coordenadas armazenados através da extensão Semantic MediaWiki. ([http://mapping.referata.com/wiki/Examples demonstração]).', |
| 901 | + 'semanticmaps-unrecognizeddistance' => 'O valor $1 não é uma distância válida.', |
| 902 | + 'semanticmaps-kml-link' => 'Ver o arquivo KML', |
| 903 | + 'semanticmaps-default-kml-pagelink' => 'Ver a página $1', |
| 904 | + 'semanticmaps_lookupcoordinates' => 'Pesquisar coordenadas', |
| 905 | + 'semanticmaps_enteraddresshere' => 'Introduza um endereço aqui', |
| 906 | + 'semanticmaps_notfound' => 'Não encontrado', |
| 907 | + 'semanticmaps_paramdesc_format' => 'O serviço de cartografia usado para gerar o mapa', |
| 908 | + 'semanticmaps_paramdesc_geoservice' => 'O serviço de geocódigos usado para transformar endereços em coordenadas', |
| 909 | + 'semanticmaps_paramdesc_height' => 'A altura do mapa, em pixels (por padrão, $1)', |
| 910 | + 'semanticmaps_paramdesc_width' => 'A largura do mapa, em pixels (por padrão, $1)', |
| 911 | + 'semanticmaps_paramdesc_zoom' => 'O nível de aproximação do mapa', |
| 912 | + 'semanticmaps_paramdesc_centre' => 'As coordenadas do centro do mapa', |
| 913 | + 'semanticmaps_paramdesc_controls' => 'Os controles colocados no mapa', |
| 914 | + 'semanticmaps_paramdesc_types' => 'Os tipos de mapa disponíveis no mapa', |
| 915 | + 'semanticmaps_paramdesc_type' => 'O tipo do mapa, por padrão', |
| 916 | + 'semanticmaps_paramdesc_overlays' => 'As sobreposições disponíveis no mapa', |
| 917 | + 'semanticmaps_paramdesc_autozoom' => 'Possibilitar a aproximação e afastamento usando a roda de deslizamento do mouse', |
| 918 | + 'semanticmaps_paramdesc_layers' => 'As camadas disponíveis no mapa', |
| 919 | +); |
| 920 | + |
| 921 | +/** Romanian (Română) |
| 922 | + * @author Firilacroco |
| 923 | + */ |
| 924 | +$messages['ro'] = array( |
| 925 | + 'semanticmaps_enteraddresshere' => 'Introduceți adresa aici', |
| 926 | + 'semanticmaps_notfound' => 'nu a fost găsit', |
| 927 | +); |
| 928 | + |
| 929 | +/** Tarandíne (Tarandíne) |
| 930 | + * @author Joetaras |
| 931 | + */ |
| 932 | +$messages['roa-tara'] = array( |
| 933 | + 'semanticmaps-desc' => "Dè l'abbilità a fà vedè e cangià le coordinate reggistrate cu l'estenzione Semandiche de MediaUicchi ([http://mapping.referata.com/wiki/Examples demo]).", |
| 934 | + 'semanticmaps_lookupcoordinates' => 'Ingroce le coordinate', |
| 935 | + 'semanticmaps_enteraddresshere' => "Scaffe l'indirizze aqquà", |
| 936 | + 'semanticmaps_notfound' => 'no acchiate', |
| 937 | +); |
| 938 | + |
| 939 | +/** Russian (Русский) |
| 940 | + * @author Eugene Mednikov |
| 941 | + * @author Lockal |
| 942 | + * @author Александр Сигачёв |
| 943 | + */ |
| 944 | +$messages['ru'] = array( |
| 945 | + 'semanticmaps-desc' => 'Обеспечивает возможность просмотра и редактирования координатных данных, хранящихся в семантическом расширении MediaWiki ([http://mapping.referata.com/wiki/Examples примеры]).', |
| 946 | + 'semanticmaps-unrecognizeddistance' => 'Значение $1 не является допустимым расстоянием.', |
| 947 | + 'semanticmaps-kml-link' => 'Просмотреть файл KML', |
| 948 | + 'semanticmaps-default-kml-pagelink' => 'Просмотреть страницу $1', |
| 949 | + 'semanticmaps_lookupcoordinates' => 'Найти координаты', |
| 950 | + 'semanticmaps_enteraddresshere' => 'Введите адрес', |
| 951 | + 'semanticmaps_notfound' => 'не найдено', |
| 952 | + 'semanticmaps_paramdesc_format' => 'Картографическая служба, используемая для создания карт', |
| 953 | + 'semanticmaps_paramdesc_geoservice' => 'Служба геокодирования используется для преобразования адреса в координаты', |
| 954 | + 'semanticmaps_paramdesc_height' => 'Высота карты в пикселях (по умолчанию $1)', |
| 955 | + 'semanticmaps_paramdesc_width' => 'Ширина карты в пикселях (по умолчанию $1)', |
| 956 | + 'semanticmaps_paramdesc_zoom' => 'Масштаб карты', |
| 957 | + 'semanticmaps_paramdesc_centre' => 'Координаты центра карты', |
| 958 | + 'semanticmaps_paramdesc_controls' => 'Элементы управления на карте', |
| 959 | + 'semanticmaps_paramdesc_types' => 'Типы карты, доступные на карте', |
| 960 | + 'semanticmaps_paramdesc_type' => 'Тип карты по умолчанию', |
| 961 | + 'semanticmaps_paramdesc_overlays' => 'Доступные наложения', |
| 962 | + 'semanticmaps_paramdesc_autozoom' => 'Если включено увеличение и уменьшение масштаб с помощью колеса прокрутки мыши', |
| 963 | + 'semanticmaps_paramdesc_layers' => 'Доступные на карте слои', |
| 964 | +); |
| 965 | + |
| 966 | +/** Slovak (Slovenčina) |
| 967 | + * @author Helix84 |
| 968 | + */ |
| 969 | +$messages['sk'] = array( |
| 970 | + 'semanticmaps-desc' => 'Poskytuje schopnosť zobrazovať a upravovať údaje súradníc uložené prostredníctvom rozšírenia Semantic MediaWiki ([http://mapping.referata.com/wiki/Examples demo]).', |
| 971 | + 'semanticmaps_lookupcoordinates' => 'Vyhľadať súradnice', |
| 972 | + 'semanticmaps_enteraddresshere' => 'Sem zadajte emailovú adresu', |
| 973 | + 'semanticmaps_notfound' => 'nenájdené', |
| 974 | + 'semanticmaps_paramdesc_format' => 'Služba použitá na tvorbu mapy', |
| 975 | + 'semanticmaps_paramdesc_geoservice' => 'Služba použitá na vyhľadanie súradníc na základe adresy', |
| 976 | + 'semanticmaps_paramdesc_height' => 'Výška mapy v pixloch (predvolené je $1)', |
| 977 | + 'semanticmaps_paramdesc_width' => 'Šírka mapy v pixloch (predvolené je $1)', |
| 978 | + 'semanticmaps_paramdesc_zoom' => 'Úroveň priblíženia mapy', |
| 979 | + 'semanticmaps_paramdesc_centre' => 'Súradnice stredu mapy', |
| 980 | + 'semanticmaps_paramdesc_controls' => 'Používateľské ovládacie prvky umiestnené na mape', |
| 981 | + 'semanticmaps_paramdesc_types' => 'Typy máp dostupné na mape', |
| 982 | + 'semanticmaps_paramdesc_type' => 'Predvolený typ mapy na mape', |
| 983 | + 'semanticmaps_paramdesc_overlays' => 'Vrstvy dostupné na mape', |
| 984 | + 'semanticmaps_paramdesc_autozoom' => 'Či je povolené približovanie a odďaľovanie mapy kolieskom myši', |
| 985 | + 'semanticmaps_paramdesc_layers' => 'Dostupné vrstvy mapy', |
| 986 | +); |
| 987 | + |
| 988 | +/** Serbian Cyrillic ekavian (Српски (ћирилица)) |
| 989 | + * @author Михајло Анђелковић |
| 990 | + */ |
| 991 | +$messages['sr-ec'] = array( |
| 992 | + 'semanticmaps-unrecognizeddistance' => 'Вредност $1 није исправно растојање.', |
| 993 | + 'semanticmaps_enteraddresshere' => 'Унеси адресу овде', |
| 994 | + 'semanticmaps_notfound' => 'није нађено', |
| 995 | + 'semanticmaps_paramdesc_height' => 'Висина мапе у пикселима (подразумевано је $1)', |
| 996 | + 'semanticmaps_paramdesc_width' => 'Ширина мапе у пикселима (подразумевано је $1)', |
| 997 | + 'semanticmaps_paramdesc_zoom' => 'Ниво увећања мапе', |
| 998 | + 'semanticmaps_paramdesc_centre' => 'Координате центра мапе', |
| 999 | +); |
| 1000 | + |
| 1001 | +/** Serbian Latin ekavian (Srpski (latinica)) |
| 1002 | + * @author Michaello |
| 1003 | + */ |
| 1004 | +$messages['sr-el'] = array( |
| 1005 | + 'semanticmaps-unrecognizeddistance' => 'Vrednost $1 nije ispravno rastojanje.', |
| 1006 | + 'semanticmaps_enteraddresshere' => 'Unesi adresu ovde', |
| 1007 | + 'semanticmaps_notfound' => 'nije nađeno', |
| 1008 | + 'semanticmaps_paramdesc_height' => 'Visina mape u pikselima (podrazumevano je $1)', |
| 1009 | + 'semanticmaps_paramdesc_width' => 'Širina mape u pikselima (podrazumevano je $1)', |
| 1010 | + 'semanticmaps_paramdesc_zoom' => 'Nivo uvećanja mape', |
| 1011 | + 'semanticmaps_paramdesc_centre' => 'Koordinate centra mape', |
| 1012 | +); |
| 1013 | + |
| 1014 | +/** Swedish (Svenska) |
| 1015 | + * @author Boivie |
| 1016 | + * @author Najami |
| 1017 | + * @author Per |
| 1018 | + */ |
| 1019 | +$messages['sv'] = array( |
| 1020 | + 'semanticmaps-desc' => 'Ger möjligheten att titta på och ändra koordinatdata sparad genom Semantic MediaWiki-utvidgningen ([http://mapping.referata.com/wiki/Examples demo]).', |
| 1021 | + 'semanticmaps_lookupcoordinates' => 'Kolla upp koordinater', |
| 1022 | + 'semanticmaps_enteraddresshere' => 'Skriv in adress här', |
| 1023 | + 'semanticmaps_notfound' => 'hittades inte', |
| 1024 | + 'semanticmaps_paramdesc_height' => 'Höjden på kartan i pixlar (standard är $1)', |
| 1025 | + 'semanticmaps_paramdesc_width' => 'Bredden på kartan i pixlar (standard är $1)', |
| 1026 | + 'semanticmaps_paramdesc_zoom' => 'Zoomnivån för kartan', |
| 1027 | + 'semanticmaps_paramdesc_centre' => 'Koordinaterna för kartans mittpunkt', |
| 1028 | + 'semanticmaps_paramdesc_type' => 'Standard karttyp för kartan', |
| 1029 | + 'semanticmaps_paramdesc_layers' => 'Lagren tillgängliga för kartan', |
| 1030 | +); |
| 1031 | + |
| 1032 | +/** Telugu (తెలుగు) |
| 1033 | + * @author Veeven |
| 1034 | + */ |
| 1035 | +$messages['te'] = array( |
| 1036 | + 'semanticmaps_enteraddresshere' => 'చిరునామాని ఇక్కడ ఇవ్వండి', |
| 1037 | + 'semanticmaps_notfound' => 'కనబడలేదు', |
| 1038 | +); |
| 1039 | + |
| 1040 | +/** Tagalog (Tagalog) |
| 1041 | + * @author AnakngAraw |
| 1042 | + */ |
| 1043 | +$messages['tl'] = array( |
| 1044 | + 'semanticmaps-desc' => 'Nagbibigay ng kakayahang makita at baguhin ang dato ng tugmaang nakatabi sa pamamagitan ng dugtong na Semantikong MediaWiki ([http://mapping.referata.com/wiki/Examples pagpapakita]).', |
| 1045 | + 'semanticmaps-unrecognizeddistance' => 'Hindi isang tanggap na layo ang halagang $1.', |
| 1046 | + 'semanticmaps_lookupcoordinates' => "Hanapin ang mga tugmaang-pampook (''coordinate'')", |
| 1047 | + 'semanticmaps_enteraddresshere' => 'Ipasok ang adres dito', |
| 1048 | + 'semanticmaps_notfound' => 'hindi natagpuan', |
| 1049 | + 'semanticmaps_paramdesc_format' => 'Ang palingkurang pangpagmamapa na ginamit sa paglikha ng mapa', |
| 1050 | + 'semanticmaps_paramdesc_geoservice' => 'Ang paglingkurang pang-geokodigo na ginagamit upang maging mga tugmaang-pampook ang mga direksyon', |
| 1051 | + 'semanticmaps_paramdesc_height' => 'Ang taas ng mapa, sa piksels ($1 ang likas na nakatakda)', |
| 1052 | + 'semanticmaps_paramdesc_width' => 'Ang lapad ng mapa, sa piksels ($1 ang likas na nakatakda)', |
| 1053 | + 'semanticmaps_paramdesc_zoom' => 'Ang antas ng paglapit-tutok ng mapa', |
| 1054 | + 'semanticmaps_paramdesc_centre' => 'Ang mga tugmaang-pampook ng gitna ng mga mapa', |
| 1055 | + 'semanticmaps_paramdesc_controls' => 'Ang mga pangtaban ng tagagamit na inilagay sa ibabaw ng mapa', |
| 1056 | + 'semanticmaps_paramdesc_types' => 'Ang mga uri ng mapang makukuha na nasa ibabaw ng mapa', |
| 1057 | + 'semanticmaps_paramdesc_type' => 'Ang likas na nakatakdang uri ng mapa na para sa mapa', |
| 1058 | + 'semanticmaps_paramdesc_overlays' => 'Ang makukuhang mga patong na nasa ibabaw ng mapa', |
| 1059 | + 'semanticmaps_paramdesc_autozoom' => 'Kapag pinagana ang pagtutok-lapit at paglayo sa pamamagitan ng pang-ikid ng maws', |
| 1060 | + 'semanticmaps_paramdesc_layers' => 'Ang makukuhang mga patong na nasa ibabaw ng mapa', |
| 1061 | +); |
| 1062 | + |
| 1063 | +/** Turkish (Türkçe) |
| 1064 | + * @author Vito Genovese |
| 1065 | + */ |
| 1066 | +$messages['tr'] = array( |
| 1067 | + 'semanticmaps_lookupcoordinates' => 'Koordinat ara', |
| 1068 | + 'semanticmaps_enteraddresshere' => 'Adresi buraya girin', |
| 1069 | + 'semanticmaps_notfound' => 'bulunamadı', |
| 1070 | + 'semanticmaps_paramdesc_zoom' => 'Haritanın yakınlaşma seviyesi', |
| 1071 | + 'semanticmaps_paramdesc_layers' => 'Haritada mevcut olan katmanlar', |
| 1072 | +); |
| 1073 | + |
| 1074 | +/** Veps (Vepsan kel') |
| 1075 | + * @author Игорь Бродский |
| 1076 | + */ |
| 1077 | +$messages['vep'] = array( |
| 1078 | + 'semanticmaps_notfound' => 'ei voi löuta', |
| 1079 | +); |
| 1080 | + |
| 1081 | +/** Vietnamese (Tiếng Việt) |
| 1082 | + * @author Minh Nguyen |
| 1083 | + * @author Vinhtantran |
| 1084 | + */ |
| 1085 | +$messages['vi'] = array( |
| 1086 | + 'semanticmaps-desc' => 'Cung cấp khả năng xem và sửa đổi dữ liệu tọa độ được lưu bởi phần mở rộng Semantic MediaWiki ([http://mapping.referata.com/wiki/Examples thử xem]).', |
| 1087 | + 'semanticmaps-unrecognizeddistance' => 'Giá trị $1 không phải là tầm hợp lệ.', |
| 1088 | + 'semanticmaps_lookupcoordinates' => 'Tra tọa độ', |
| 1089 | + 'semanticmaps_enteraddresshere' => 'Nhập địa chỉ vào đây', |
| 1090 | + 'semanticmaps_notfound' => 'không tìm thấy', |
| 1091 | + 'semanticmaps_paramdesc_format' => 'Dịch vụ cung cấp bản đồ', |
| 1092 | + 'semanticmaps_paramdesc_geoservice' => 'Dịch vụ mã hóa địa lý được sử dụng để tính ra tọa độ của địa chỉ', |
| 1093 | + 'semanticmaps_paramdesc_height' => 'Chiều cao của bản đồ bằng điểm ảnh (mặc định là $1)', |
| 1094 | + 'semanticmaps_paramdesc_width' => 'Chiều rộng của bản đồ bằng điểm ảnh (mặc định là $1)', |
| 1095 | + 'semanticmaps_paramdesc_zoom' => 'Mức độ thu phóng của bản đồ', |
| 1096 | + 'semanticmaps_paramdesc_centre' => 'Tọa độ của trung tâm bản đồ', |
| 1097 | + 'semanticmaps_paramdesc_controls' => 'Các điều khiển nằm trên bản đồ', |
| 1098 | + 'semanticmaps_paramdesc_types' => 'Các chế độ có sẵn dành cho bản đồ', |
| 1099 | + 'semanticmaps_paramdesc_type' => 'Chế độ mặc định của bản đồ', |
| 1100 | + 'semanticmaps_paramdesc_overlays' => 'Các lấp có sẵn trên bản đồ', |
| 1101 | + 'semanticmaps_paramdesc_autozoom' => 'Bánh xe chuột có thu phóng hay không', |
| 1102 | + 'semanticmaps_paramdesc_layers' => 'Các lớp có sẵn trên bản đồ', |
| 1103 | +); |
| 1104 | + |
| 1105 | +/** Volapük (Volapük) |
| 1106 | + * @author Smeira |
| 1107 | + */ |
| 1108 | +$messages['vo'] = array( |
| 1109 | + 'semanticmaps_lookupcoordinates' => 'Tuvön koordinatis', |
| 1110 | +); |
| 1111 | + |
| 1112 | +/** Simplified Chinese (中文(简体)) |
| 1113 | + * @author Gzdavidwong |
| 1114 | + */ |
| 1115 | +$messages['zh-hans'] = array( |
| 1116 | + 'semanticmaps_lookupcoordinates' => '查找坐标', |
| 1117 | + 'semanticmaps_notfound' => '未找到', |
| 1118 | +); |
| 1119 | + |
| 1120 | +/** Traditional Chinese (中文(繁體)) |
| 1121 | + * @author Gzdavidwong |
| 1122 | + * @author Mark85296341 |
| 1123 | + * @author Sheepy |
| 1124 | + * @author Wrightbus |
| 1125 | + */ |
| 1126 | +$messages['zh-hant'] = array( |
| 1127 | + 'semanticmaps-default-kml-pagelink' => '檢視頁面 $1', |
| 1128 | + 'semanticmaps_lookupcoordinates' => '尋找座標', |
| 1129 | + 'semanticmaps_notfound' => '未找到', |
| 1130 | +); |
| 1131 | + |
Property changes on: trunk/extensions/SemanticMaps/SemanticMaps.i18n.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 1132 | + native |
Index: trunk/extensions/SemanticMaps/SemanticMaps.php |
— | — | @@ -0,0 +1,111 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * Initialization file for the Maps extension. |
| 6 | + * |
| 7 | + * On MediaWiki.org: http://www.mediawiki.org/wiki/Extension:Semantic_Maps |
| 8 | + * Official documentation: http://mapping.referata.com/wiki/Semantic_Maps |
| 9 | + * Examples/demo's: http://mapping.referata.com/wiki/Semantic_Maps_examples |
| 10 | + * |
| 11 | + * @file SemanticMaps.php |
| 12 | + * @ingroup SemanticMaps |
| 13 | + * |
| 14 | + * @licence GNU GPL v3 |
| 15 | + * @author Jeroen De Dauw < jeroendedauw@gmail.com > |
| 16 | + */ |
| 17 | + |
| 18 | +/** |
| 19 | + * This documenation group collects source code files belonging to Semantic Maps. |
| 20 | + * |
| 21 | + * Please do not use this group name for other code. If you have an extension to |
| 22 | + * Semantic Maps, please use your own group definition. |
| 23 | + * |
| 24 | + * @defgroup SemanticMaps Semantic Maps |
| 25 | + */ |
| 26 | + |
| 27 | +if ( !defined( 'MEDIAWIKI' ) ) { |
| 28 | + die( 'Not an entry point.' ); |
| 29 | +} |
| 30 | + |
| 31 | +if ( version_compare( $wgVersion, '1.17', '<' ) ) { |
| 32 | + die( '<b>Error:</b> This version of Semantic Maps requires MediaWiki 1.17 or above; use Maps 0.7.x for older versions.' ); |
| 33 | +} |
| 34 | + |
| 35 | +// Show a warning if Maps is not loaded. |
| 36 | +if ( ! defined( 'Maps_VERSION' ) ) { |
| 37 | + die( '<b>Error:</b> You need to have <a href="http://www.mediawiki.org/wiki/Extension:Maps">Maps</a> installed in order to use <a href="http://www.mediawiki.org/wiki/Extension:Semantic Maps">Semantic Maps</a>.<br />' ); |
| 38 | +} |
| 39 | + |
| 40 | +// Show a warning if Semantic MediaWiki is not loaded. |
| 41 | +if ( ! defined( 'SMW_VERSION' ) ) { |
| 42 | + die( '<b>Error:</b> You need to have <a href="http://semantic-mediawiki.org/wiki/Semantic_MediaWiki">Semantic MediaWiki</a> installed in order to use <a href="http://www.mediawiki.org/wiki/Extension:Semantic Maps">Semantic Maps</a>.<br />' ); |
| 43 | +} |
| 44 | + |
| 45 | +define( 'SM_VERSION', '0.8 alpha' ); |
| 46 | + |
| 47 | +$wgExtensionCredits[defined( 'SEMANTIC_EXTENSION_TYPE' ) ? 'semantic' : 'other'][] = array( |
| 48 | + 'path' => __FILE__, |
| 49 | + 'name' => 'Semantic Maps', |
| 50 | + 'version' => SM_VERSION, |
| 51 | + 'author' => array( |
| 52 | + '[http://www.mediawiki.org/wiki/User:Jeroen_De_Dauw Jeroen De Dauw]' |
| 53 | + ), |
| 54 | + 'url' => 'http://www.mediawiki.org/wiki/Extension:Semantic_Maps', |
| 55 | + 'descriptionmsg' => 'semanticmaps-desc' |
| 56 | +); |
| 57 | + |
| 58 | +$smgScriptPath = ( $wgExtensionAssetsPath === false ? '/extensions' : $wgExtensionAssetsPath ) . '/SemanticMaps'; |
| 59 | +$smgDir = dirname( __FILE__ ) . '/'; |
| 60 | + |
| 61 | +$smgStyleVersion = $wgStyleVersion . '-' . SM_VERSION; |
| 62 | + |
| 63 | +// Include the settings file. |
| 64 | +require_once 'SM_Settings.php'; |
| 65 | + |
| 66 | +# (named) Array of String. This array contains the available features for Maps. |
| 67 | +# Commenting out the inclusion of any feature will make Maps completely ignore it, and so improve performance. |
| 68 | + |
| 69 | + # Query printers |
| 70 | + include_once $smgDir . 'includes/queryprinters/SM_QueryPrinters.php'; |
| 71 | + # Form imputs |
| 72 | + include_once $smgDir . 'includes/forminputs/SM_FormInputs.php'; |
| 73 | + |
| 74 | +# Include the mapping services that should be loaded into Semantic Maps. |
| 75 | +# Commenting or removing a mapping service will cause Semantic Maps to completely ignore it, and so improve performance. |
| 76 | + |
| 77 | + # Google Maps API v2 |
| 78 | + include_once $smgDir . 'includes/services/GoogleMaps/SM_GoogleMaps.php'; |
| 79 | + # Google Maps API v3 |
| 80 | + include_once $smgDir . 'includes/services/GoogleMaps3/SM_GoogleMaps3.php'; |
| 81 | + # OpenLayers API |
| 82 | + include_once $smgDir . 'includes/services/OpenLayers/SM_OpenLayers.php'; |
| 83 | + # Yahoo! Maps API |
| 84 | + include_once $smgDir . 'includes/services/YahooMaps/SM_YahooMaps.php'; |
| 85 | + |
| 86 | +$wgExtensionMessagesFiles['SemanticMaps'] = $smgDir . 'SemanticMaps.i18n.php'; |
| 87 | + |
| 88 | +$incDir = dirname( __FILE__ ) . '/includes/'; |
| 89 | + |
| 90 | +// Data values |
| 91 | +$wgAutoloadClasses['SMGeoCoordsValue'] = $incDir . 'SM_GeoCoordsValue.php'; |
| 92 | + |
| 93 | +// Value descriptions |
| 94 | +$wgAutoloadClasses['SMGeoCoordsValueDescription'] = $incDir . 'SM_GeoCoordsValueDescription.php'; |
| 95 | +$wgAutoloadClasses['SMAreaValueDescription'] = $incDir . 'SM_AreaValueDescription.php'; |
| 96 | + |
| 97 | +$wgAutoloadClasses['SemanticMapsHooks'] = dirname( __FILE__ ) . '/SemanticMaps.hooks.php'; |
| 98 | + |
| 99 | +// Hook for initializing the Geographical Coordinate type. |
| 100 | +$wgHooks['smwInitDatatypes'][] = 'SMGeoCoordsValue::initGeoCoordsType'; |
| 101 | + |
| 102 | +// Hook for initializing the field types needed by Geographical Coordinates. |
| 103 | +$wgHooks['SMWCustomSQLStoreFieldType'][] = 'SMGeoCoordsValue::initGeoCoordsFieldTypes'; |
| 104 | + |
| 105 | +// Hook for defining a table to store geographical coordinates in. |
| 106 | +$wgHooks['SMWPropertyTables'][] = 'SMGeoCoordsValue::initGeoCoordsTable'; |
| 107 | + |
| 108 | +// Hook for defining the default query printer for queries that ask for geographical coordinates. |
| 109 | +$wgHooks['SMWResultFormat'][] = 'SMGeoCoordsValue::addGeoCoordsDefaultFormat'; |
| 110 | + |
| 111 | +// Hook for adding a Semantic Maps links to the Admin Links extension. |
| 112 | +$wgHooks['AdminLinks'][] = 'SemanticMapsHooks::addToAdminLinks'; |
Property changes on: trunk/extensions/SemanticMaps/SemanticMaps.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 113 | + native |
Index: trunk/extensions/SemanticMaps/SemanticMaps.hooks.php |
— | — | @@ -0,0 +1,36 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +/** |
| 5 | + * Static class for hooks handled by the Semantic Maps extension. |
| 6 | + * |
| 7 | + * @since 0.7 |
| 8 | + * |
| 9 | + * @file SemanticMaps.hooks.php |
| 10 | + * @ingroup SemanticMaps |
| 11 | + * |
| 12 | + * @author Jeroen De Dauw |
| 13 | + */ |
| 14 | +final class SemanticMapsHooks { |
| 15 | + |
| 16 | + /** |
| 17 | + * Adds a link to Admin Links page. |
| 18 | + * |
| 19 | + * @since 0.7 |
| 20 | + * |
| 21 | + * @return true |
| 22 | + */ |
| 23 | + public static function addToAdminLinks( &$admin_links_tree ) { |
| 24 | + $displaying_data_section = $admin_links_tree->getSection( wfMsg( 'smw_adminlinks_displayingdata' ) ); |
| 25 | + |
| 26 | + // Escape if SMW hasn't added links. |
| 27 | + if ( is_null( $displaying_data_section ) ) return true; |
| 28 | + |
| 29 | + $smw_docu_row = $displaying_data_section->getRow( 'smw' ); |
| 30 | + |
| 31 | + $sm_docu_label = wfMsg( 'adminlinks_documentation', wfMsg( 'semanticmaps_name' ) ); |
| 32 | + $smw_docu_row->addItem( AlItem::newFromExternalLink( 'http://mapping.referata.com/wiki/Semantic_Maps', $sm_docu_label ) ); |
| 33 | + |
| 34 | + return true; |
| 35 | + } |
| 36 | + |
| 37 | +} |
\ No newline at end of file |
Property changes on: trunk/extensions/SemanticMaps/SemanticMaps.hooks.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 38 | + native |
Index: trunk/extensions/SemanticMaps/README |
— | — | @@ -0,0 +1,25 @@ |
| 2 | +== About == |
| 3 | + |
| 4 | +Semantic Maps is an extension that adds semantic capabilities to the Maps extension. This |
| 5 | +includes the ability to add, edit, aggregate and visualize coordinate data stored through |
| 6 | +the Semantic MediaWiki extension. |
| 7 | + |
| 8 | +Since Semantic Maps uses the Maps API, you can use multiple mapping services. These include |
| 9 | +Google Maps (with Google Earth support), Yahoo! Maps, OpenLayers and OpenStreetMap. |
| 10 | + |
| 11 | +Both Semantic Maps and Maps are based on Semantic Google Maps and Semantic Layers, and are |
| 12 | +meant to replace these extensions. Having Semantic MediaWiki and Maps installed is a |
| 13 | +prerequisite for the Semantic Maps extension; the code will not work without it. |
| 14 | + |
| 15 | +Notes on installing Semantic Maps are found in the file INSTALL. |
| 16 | + |
| 17 | + |
| 18 | +== Contributing == |
| 19 | + |
| 20 | +If you have bug reports or requests, please add them to the Talk page [0]. You can also |
| 21 | +send them to Jeroen De Dauw, jeroendedauw -at- gmail.com, and Yaron Koren, at yaron57 -at- |
| 22 | +gmail.com. |
| 23 | + |
| 24 | +[0] http://www.mediawiki.org/w/index.php?title=Extension_talk:Semantic_Maps |
| 25 | + |
| 26 | +For more info, see http://mapping.referata.com/wiki/Mapping_on_MediaWiki |
\ No newline at end of file |
Property changes on: trunk/extensions/SemanticMaps/README |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 27 | + native |