? full_screen.css ? throbber.gif ? throbber.png ? js/full_screen.js ? js/markerloader_chunks.js ? markers/small/black.png ? markers/small/bpink.png ? markers/small/bred.png ? markers/small/brown.png ? markers/small/dblue.png ? markers/small/dgreen.png ? markers/small/fgreen.png ? markers/small/gray.png ? markers/small/green.png ? markers/small/lblue.png ? markers/small/lgray.png ? markers/small/orange.png ? markers/small/pblue.png ? markers/small/pgreen.png ? markers/small/pink.png ? markers/small/purple.png ? markers/small/pyellow.png ? markers/small/resources ? markers/small/white.png ? markers/small/yellow.png Index: gmap.css =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/gmap/Attic/gmap.css,v retrieving revision 1.3.2.2 diff -u -p -r1.3.2.2 gmap.css --- gmap.css 19 Sep 2007 00:23:21 -0000 1.3.2.2 +++ gmap.css 19 May 2008 10:08:40 -0000 @@ -28,3 +28,13 @@ v\:* { .gmap-right { float: right; } + +/* Hides lat-lon textfields when javascript is enabled in location pickers */ +html.js .gmap-location-picker .form-item { + display: none; +} + +/* Content area of info windows is about 60x120px by default */ +.gmap-loading-image { + margin: 15px 90px; +} Index: gmap.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/gmap/Attic/gmap.module,v retrieving revision 1.51.2.111 diff -u -p -r1.51.2.111 gmap.module --- gmap.module 8 May 2008 23:18:48 -0000 1.51.2.111 +++ gmap.module 19 May 2008 10:08:42 -0000 @@ -27,6 +27,11 @@ define('GMAP_WMS', variable_get('gmap_wm // for details on using other version numbers. define('GMAP_API_VERSION', '2.s'); +// Chunk markerloader defaults +define('GMAP_CHUNK_THRESHOLD', 20); +define('GMAP_CHUNK_SIZE', 1); +define('GMAP_CHUNK_DELAY', 200); + /** * Get the defaults for a gmap. @@ -35,11 +40,11 @@ function gmap_defaults() { $defaults = array( 'width' => '300px', 'height' => '200px', - 'zoom' => 3, + 'zoom' => 1, 'maxzoom' => 14, 'controltype' => 'Small', 'align' => 'None', - 'latlong' => '40,0', + 'latlong' => '30,-100', 'maptype' => 'Map', 'line_colors' => array('#00cc00', '#ff0000', '#0000ff'), ); @@ -55,7 +60,7 @@ function gmap_defaults() { /** * Implementation of hook_gmap(). */ -function gmap_gmap($op, $map=null) { +function gmap_gmap($op, $map = null) { switch ($op) { case 'macro': return array( @@ -71,28 +76,70 @@ function gmap_gmap($op, $map=null) { ); case 'pre_theme_map': $path = drupal_get_path('module', 'gmap') .'/js/'; + $js_settings = array(); + // Activate markers if needed if ($map['behavior']['dynmarkers'] || !empty($map['markers'])) { drupal_add_js($path .'icon.js'); drupal_add_js($path .'marker.js'); drupal_add_js($path . variable_get('gmap_mm_type', 'gmap') .'_marker.js'); } + if ($map['behavior']['locpick']) { drupal_add_js($path .'locpick.js'); + // Client-side UI strings need to be translatable too. + $js_settings['t']['locpickSingleClickMessage'] = t('Double click the map to set the location. Single click the marker to delete.'); } + + if ($map['behavior']['fullscreenswitcher']) { + // Text for the fullscreen button / control + $js_settings['t']['fullScreenSwitcher'] = array( + 'textOff' => t('Full Screen'), + 'titleOff' => t('Show map in full screen'), + 'textOn' => t('Exit'), + 'titleOn' => t('Exit full screen'), + ); + drupal_add_js($path .'full_screen.js'); + drupal_add_css(drupal_get_path('module', 'gmap') . '/full_screen.css'); + } + if (variable_get('gmap_load_zoom_plugin', TRUE) && !$map['behavior']['nomousezoom']) { drupal_add_js(drupal_get_path('module', 'gmap') .'/thirdparty/mousewheel.js'); } - if ($map['markers'] || $map['lines']) { - drupal_add_js($path .'markerloader_static.js'); + + if ($map['lines'] || $map['markers']) { + // Get the chunk markerloader settings. + $chunk_settings = variable_get('gmap_chunk_markerloader', array( + 'autoLoad' => TRUE, // Automatically use the chunk marker loader if there are lots of markers? + 'threshold' => GMAP_CHUNK_THRESHOLD, // How many is 'lots'? + 'chunkSize' => GMAP_CHUNK_SIZE, // How many markers per chunk. + 'chunkDelay' => GMAP_CHUNK_DELAY, // Delay between each chunk in miliseconds. + )); + + // Should we load markers in chunks? + if ($map['behavior']['chunkmarkerloader'] || ($chunk_settings['autoLoad'] && (count($map['markers']) > $chunk_settings['threshold']))) { + // loadChunkMarkers() in js/markerloader_chunks.js needs these settings too. + $js_settings['loadChunkMarkers'] = $chunk_settings; + drupal_add_js($path .'markerloader_chunks.js'); + } + else { + drupal_add_js($path .'markerloader_static.js'); + } } + if ($map['shapes']) { drupal_add_js($path .'shapeloader_static.js'); drupal_add_js($path .'gmap_shapes.js'); } + if (is_array($map['feed'])) { drupal_add_js($path .'markerloader_georss.js'); } + + // Add the settings. + if (!empty($js_settings)) { + drupal_add_js($js_settings, 'setting'); + } break; case 'macro_multiple': return array('points', 'markers', 'feed', 'circle', 'rpolygon', 'polygon', 'line'); @@ -129,6 +176,11 @@ function gmap_gmap($op, $map=null) { 'default' => FALSE, 'help' => t('Load the marker loader system even if no markers to load are detected. Useful if you are injecting markers from somewhere else.'), ), + 'chunkmarkerloader' => array( + 'title' => t('Unconditionally load markers in chunks'), + 'default' => FALSE, + 'help' => t('Load markers in chunks, even if there are few markers. It is a good idea to load markers in chunks if you have lots of markers. See the Chunk Markerloader settings for details and autoload settings.'), + ), 'overview' => array( 'title' => t('Enable Overview Map'), 'default' => FALSE, @@ -139,6 +191,11 @@ function gmap_gmap($op, $map=null) { 'default' => FALSE, 'help' => t('Removes the map type control from the upper right corner. Recommended for very narrow maps.'), ), + 'fullscreenswitcher' => array( + 'title' => t('Enable the Fullscreen Switcher'), + 'default' => FALSE, + 'help' => t('Adds a button control to the map that switches the map between fullscreen and standard modes.'), + ), 'collapsehack' => array( 'title' => t('Work around bugs when maps appear in collapsible fieldsets'), 'default' => FALSE, @@ -151,6 +208,7 @@ function gmap_gmap($op, $map=null) { ), ); } + return $map; } /** @@ -165,7 +223,7 @@ function _gmap_doheader() { drupal_add_css($gmap_path .'/gmap.css'); drupal_add_js($gmap_path .'/js/gmap.js'); $mm = variable_get('gmap_mm_type', 'gmap'); - if ($mm=='clusterer') { + if ($mm == 'clusterer') { drupal_add_js($gmap_path .'/js/icon.js'); drupal_add_js($gmap_path .'/thirdparty/Clusterer2.js'); } @@ -175,9 +233,11 @@ function _gmap_doheader() { if (empty($mms[$mm])) { $mms[$mm] = array(); } + + // Html markup for the spinning 'loading' image for asynchronous callbacks + drupal_add_js(array('loadingImage' => theme('gmap_loading_image')), 'setting'); drupal_add_js(array('gmap_markermanager' => $mms[$mm]), 'setting'); -// @@@ -drupal_add_js($gmap_path .'/js/poly.js'); + drupal_add_js($gmap_path .'/js/poly.js'); $key = variable_get('googlemap_api_key', ''); if (module_exists('keys_api')) { $key = keys_api_get_key('gmap', $_SERVER['HTTP_HOST']); @@ -187,6 +247,15 @@ drupal_add_js($gmap_path .'/js/poly.js') } /** + * Returns html markup for the a loading image or 'throbber'. + */ +function theme_gmap_loading_image() { + $t = t('Loading...'); + $att = array('class' => 'gmap-loading-image'); + return theme('image', drupal_get_path('module', 'gmap') .'/throbber.gif', $t, $t, $att); +} + +/** * Cleans the gmap variables to prevent javascript interjection. * * @param $gmap @@ -998,7 +1067,6 @@ function theme_gmap_coord($element) { function theme_gmap_macrotext($element) { drupal_add_js(drupal_get_path('module', 'gmap') .'/js/macro.js'); - // @@@ drupal_add_js(drupal_get_path('module', 'gmap') .'/js/macrobuilder.js'); return theme('textarea', $element); } @@ -1047,7 +1115,10 @@ function theme_gmap($element) { $style[] = 'height: '. $map['height']; $element['#attributes']['class'] = trim($element['#attributes']['class'] .'gmap gmap-map gmap-'. $map['id'] .'-gmap'); - $o = '
'; + + // Some markup parsers (IE) don't handle empty inners well. Use the space to let users know javascript is required. + // @@@ Google static maps could be useful here. + $o = 'timeout()) in miliseconds between each chunk.'),
+ '#default_value' => $chunk_settings['chunkDelay'],
+ '#size' => 4,
+ ),
+ );
+
+ // Ensure the $opts data structure is valid.
$opts = variable_get('gmap_markermanager', array());
- if (!is_array($opts['gmap'])) {
- $opts['gmap'] = array();
- }
- if (!is_array($opts['gmarkermanager'])) {
- $opts['gmarkermanager'] = array();
- }
- if (!is_array($opts['clusterer'])) {
- $opts['clusterer'] = array();
+ $default_opts = array(
+ 'gmap' => array(),
+ 'gmarkermanager' => array(
+ 'borderPadding' => 0,
+ 'maxZoom' => 4,
+ 'trackMarkers' => FALSE,
+ 'markerMinZoom' => 4,
+ 'markerMaxZoom' => 0,
+ ),
+ 'clusterer' => array(
+ 'clusterer_file' => 'Clusterer2.js',
+ 'marker' => 'cluster',
+ 'max_nocluster' => 150,
+ 'cluster_min' => 5,
+ 'max_lines' => 10,
+ ),
+ );
+ $opts = array_merge($default_opts, $opts);
+ foreach($default_opts as $key => $array) {
+ $opts[$key] = array_merge($array, $opts[$key]);
}
- $opts['gmap'] = array_merge(array(
- // None.
- ), $opts['gmap']);
-
- $opts['gmarkermanager'] = array_merge(array(
- 'borderPadding' => 0,
- 'maxZoom' => 4,
- 'trackMarkers' => FALSE,
- 'markerMinZoom' => 4,
- 'markerMaxZoom' => 0,
- ), $opts['gmarkermanager']);
-
- $opts['clusterer'] = array_merge(array(
- 'clusterer_file' => 'Clusterer2.js',
- 'marker' => 'cluster',
- 'max_nocluster' => 150,
- 'cluster_min' => 5,
- 'max_lines' => 10,
- ), $opts['clusterer']);
-
$form['gmap_markermanager'] = array(
'#type' => 'fieldset',
'#title' => t('Marker manager'),
@@ -237,7 +279,7 @@ function _gmap_admin_settings() {
'#tree' => FALSE,
'#required' => TRUE,
'#options' => array(
- 'gmap' => t('No manager (use addOverlay directly)'),
+ 'gmap' => t('No manager (use GMap API directly)'),
'gmarkermanager' => t("Google's GMarkerManager"),
'clusterer' => t("Jef Poskanzer's Clusterer"),
),
@@ -354,7 +396,7 @@ function _gmap_admin_settings() {
$form['location']['gmap_location_map'] = array(
'#type' => 'textfield',
'#title' => t('Default location map'),
- '#default_value' => variable_get('gmap_location_map', '[gmap|id=locmap|center=40,0|zoom=3|width=100%|height=400px]'),
+ '#default_value' => variable_get('gmap_location_map', '[gmap|id=locmap|center=30,-100|zoom=1|width=100%|height=400px]'),
'#size' => 50,
'#maxlength' => 500,
'#description' => t('The gmap macro for the map to be used in the location.module for setting latitude and longitude.'),
Index: js/address.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/gmap/js/Attic/address.js,v
retrieving revision 1.1.2.10
diff -u -p -r1.1.2.10 address.js
--- js/address.js 30 Apr 2008 20:43:45 -0000 1.1.2.10
+++ js/address.js 19 May 2008 10:08:43 -0000
@@ -2,7 +2,6 @@
/**
* Address widget and GMap geocoder routines.
- *
*/
////////////////////////////////////////
Index: js/align.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/gmap/js/Attic/align.js,v
retrieving revision 1.1.2.7
diff -u -p -r1.1.2.7 align.js
--- js/align.js 30 Apr 2008 21:06:39 -0000 1.1.2.7
+++ js/align.js 19 May 2008 10:08:43 -0000
@@ -42,5 +42,4 @@ Drupal.gmap.addHandler('gmap',function(e
add.push('align='+obj.vars.align);
}
});
-
});
Index: js/gmap.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/gmap/js/Attic/gmap.js,v
retrieving revision 1.1.2.28
diff -u -p -r1.1.2.28 gmap.js
--- js/gmap.js 30 Apr 2008 21:06:39 -0000 1.1.2.28
+++ js/gmap.js 19 May 2008 10:08:43 -0000
@@ -411,9 +411,10 @@ Drupal.gmap.addHandler('controltype', fu
});
});
+// Setup the maps.
if (Drupal.jsEnabled) {
$(document).ready(Drupal.gmap.setup).unload(function() {
- //Google cleanup.
- GUnload();
- });
+ //Google cleanup.
+ GUnload();
+ });
}
Index: js/gmap_marker.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/gmap/js/Attic/gmap_marker.js,v
retrieving revision 1.1.2.26
diff -u -p -r1.1.2.26 gmap_marker.js
--- js/gmap_marker.js 30 Apr 2008 21:06:39 -0000 1.1.2.26
+++ js/gmap_marker.js 19 May 2008 10:08:43 -0000
@@ -24,6 +24,12 @@ Drupal.gmap.addHandler('gmap', function(
else {
obj.bounds.extend(marker.marker.getPoint());
}
+ }
+ });
+
+ // Check that chunkMarkerLoader has finished before actually setting the center.
+ obj.bind('markersready', function() {
+ if (obj.bounds) {
obj.map.setCenter(obj.bounds.getCenter(), Math.min(obj.map.getBoundsZoomLevel(obj.bounds), obj.vars.maxzoom));
}
});
Index: js/icon.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/gmap/js/Attic/icon.js,v
retrieving revision 1.1.2.10
diff -u -p -r1.1.2.10 icon.js
--- js/icon.js 30 Apr 2008 21:06:39 -0000 1.1.2.10
+++ js/icon.js 19 May 2008 10:08:43 -0000
@@ -198,5 +198,4 @@ Drupal.gmap.addHandler('gmap', function(
marker.opts.icon = Drupal.gmap.getIcon(marker.markername,marker.offset);
});
}
-
});
Index: js/locpick.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/gmap/js/Attic/locpick.js,v
retrieving revision 1.1.2.3
diff -u -p -r1.1.2.3 locpick.js
--- js/locpick.js 12 Mar 2007 23:12:57 -0000 1.1.2.3
+++ js/locpick.js 19 May 2008 10:08:43 -0000
@@ -9,7 +9,7 @@ Drupal.gmap.addHandler('gmap',function(e
var binding = obj.bind("locpickchange", function() {
if (obj.locpick_coord) {
- GEvent.trigger(obj.map,"click",null,obj.locpick_coord);
+ GEvent.trigger(obj.map,"dblclick", null, obj.locpick_coord);
}
});
@@ -22,8 +22,14 @@ Drupal.gmap.addHandler('gmap',function(e
obj.bind("init", function() {
if (obj.vars.behavior.locpick) {
obj.locpick_coord = new GLatLng(obj.vars.latitude, obj.vars.longitude);
-
- GEvent.addListener(obj.map, "click", function(overlay,point) {
+ // Don't allow GMap2 to zoom on double click. That breaks the following listener.
+ obj.map.disableDoubleClickZoom();
+ var singleClickCount = 0;
+ var doubleClicked = false;
+
+ GEvent.addListener(obj.map, "dblclick", function(overlay,point) {
+ // Don't warn about single clicks, it's a double click.
+ doubleClicked = true;
obj.map.checkResize();
if (!overlay) {
if (obj.locpick_point) {
@@ -36,9 +42,23 @@ Drupal.gmap.addHandler('gmap',function(e
obj.map.panTo(point);
obj.change('locpickchange', binding);
}
- else {
+ });
+
+ GEvent.addListener(obj.map, "click", function(overlay) {
+ if (overlay) {
// Unsetting the location
- obj.change('locpickremove',-1);
+ obj.change('locpickremove', -1);
+ }
+ else {
+ // This could be a double or a single click. Assume it's a single unless proven otherwise.
+ doubleClicked = false;
+ setTimeout(function() {
+ // It's a popup alertbox, which is rather annoying. So don't show it more than twice.
+ if (!doubleClicked && singleClickCount++ < 2) {
+ // It's definately a single click. Tell the user they need to double click.
+ alert(Drupal.settings.t.locpickSingleClickMessage);
+ }
+ }, 500);
}
});
}
@@ -131,4 +151,3 @@ Drupal.gmap.addHandler('locpick_longitud
}
});
});
-
Index: js/marker.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/gmap/js/Attic/marker.js,v
retrieving revision 1.1.2.2
diff -u -p -r1.1.2.2 marker.js
--- js/marker.js 30 Apr 2008 21:06:39 -0000 1.1.2.2
+++ js/marker.js 19 May 2008 10:08:43 -0000
@@ -34,14 +34,28 @@ Drupal.gmap.addHandler('gmap', function(
// Default marker actions.
obj.bind('clickmarker',function(marker) {
- if (marker.text) {
- marker.marker.openInfoWindowHtml(marker.text);
- }
+ // AJAX content
if (marker.rmt) {
- $.get(obj.vars.rmtcallback + '/' + marker.rmt, {}, function(data){
+ var uri = marker.rmt;
+ if (obj.vars.rmtcallback) {
+ uri = obj.vars.rmtcallback + '/' + marker.rmt;
+ }
+ $.get(uri, {}, function(data) {
marker.marker.openInfoWindowHtml(data);
});
+ // Because we're waiting on an external http request, load something to let the user know we're working on it.
+ if (marker.text) {
+ marker.marker.openInfoWindowHtml(marker.text);
+ }
+ else if (Drupal.settings.loadingImage) {
+ marker.marker.openInfoWindowHtml(Drupal.settings.loadingImage);
+ }
+ }
+ // Local/stored content
+ else if (marker.text) {
+ marker.marker.openInfoWindowHtml(marker.text);
}
+ // Tabbed content
else if (marker.tabs) {
var infoWinTabs = [];
for (var m in marker.tabs) {
@@ -49,6 +63,7 @@ Drupal.gmap.addHandler('gmap', function(
}
marker.marker.openInfoWindowTabsHtml(infoWinTabs);
}
+ // No content -- marker is a link
else if (marker.link) {
open(marker.link,'_self');
}
Index: js/poly.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/gmap/js/Attic/poly.js,v
retrieving revision 1.1.2.3
diff -u -p -r1.1.2.3 poly.js
--- js/poly.js 30 Apr 2008 21:06:39 -0000 1.1.2.3
+++ js/poly.js 19 May 2008 10:08:43 -0000
@@ -2,7 +2,6 @@
/**
* GPolyLine / GPolygon manager
- *
*/
Drupal.gmap.map.prototype.poly = {};
@@ -58,8 +57,3 @@ Drupal.gmap.map.prototype.poly.calcPolyP
points.push(points[0]);
return points;
};
-
-/**
- * Circle -- on screen.
- */
-//Drupal.gmap.map.prototype.
Index: markers/small/blue.png
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/gmap/markers/small/Attic/blue.png,v
retrieving revision 1.1
diff -u -p -r1.1 blue.png
Binary files /tmp/cvse4Dz3G and blue.png differ
Index: markers/small/red.png
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/gmap/markers/small/Attic/red.png,v
retrieving revision 1.1
diff -u -p -r1.1 red.png
Binary files /tmp/cvsJAWCBg and red.png differ
Index: markers/small/small.ini
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/gmap/markers/small/Attic/small.ini,v
retrieving revision 1.1.2.1
diff -u -p -r1.1.2.1 small.ini
--- markers/small/small.ini 6 Feb 2007 17:32:52 -0000 1.1.2.1
+++ markers/small/small.ini 19 May 2008 10:08:44 -0000
@@ -7,12 +7,88 @@ infoX = 10
infoY = 2
; Marker sets
+[small black]
+name = "Small Black"
+sequence = "black.png"
+
[small blue]
name = "Small Blue"
sequence = "blue.png"
+[small bpink]
+name = "Small Bright Pink"
+sequence = "bpink.png"
+
+[small bred]
+name = "Small Bright red"
+sequence = "bred.png"
+
+[small brown]
+name = "Small Brown"
+sequence = "brown.png"
+
+[small dblue]
+name = "Small Dark Blue"
+sequence = "dblue.png"
+
+[small dgreen]
+name = "Small Dark Green"
+sequence = "dgreen.png"
+
+[small fgreen]
+name = "Small Flouro Green"
+sequence = "fgreen.png"
+
+[small gray]
+name = "Small Gray"
+sequence = "gray.png"
+
+[small green]
+name = "Small Green"
+sequence = "green.png"
+
+[small lblue]
+name = "Small Light Blue"
+sequence = "lblue.png"
+
+[small lgray]
+name = "Small Light Gray"
+sequence = "lgray.png"
+
+[small orange]
+name = "Small Orange"
+sequence = "orange.png"
+
+[small pblue]
+name = "Small Pale Blue"
+sequence = "pblue.png"
+
+[small pgreen]
+name = "Small Pale Green"
+sequence = "pgreen.png"
+
+[small pyellow]
+name = "Small Pale Yellow"
+sequence = "pyellow.png"
+
+[small pink]
+name = "Small Pink"
+sequence = "pink.png"
+
+[small purple]
+name = "Small Purple"
+sequence = "purple.png"
+
[small red]
name = "Small Red"
sequence = "red.png"
-; Files
\ No newline at end of file
+[small white]
+name = "Small White"
+sequence = "white.png"
+
+[small yellow]
+name = "Small Yellow"
+sequence = "yellow.png"
+
+; Files