1/** 2 * @file 3 * Common marker routines. 4 */ 5 6/*global jQuery, Drupal, GEvent, GInfoWindowTab, GLatLng, GLatLngBounds */ 7 8Drupal.gmap.addHandler('gmap', function (elem) { 9 var obj = this; 10 var infowindow; 11 12 if (obj.vars.styleBubble && obj.vars.styleBubble.enableBubbleStyle == 1) { 13 infowindow = new InfoBubble(obj.vars.styleBubble.styleBubbleOptions); 14 } 15 else { 16 infowindow = new google.maps.InfoWindow(); 17 } 18 19 obj.bind('init', function () { 20 if (obj.vars.behavior.autozoom) { 21 obj.bounds = new google.maps.LatLngBounds(); 22 } 23 }); 24 25 obj.bind('addmarker', function (marker) { 26 marker.opts.position = new google.maps.LatLng(marker.latitude, marker.longitude); 27 marker.opts.map = obj.map; 28 var m = Drupal.gmap.factory.marker(marker.opts); 29 marker.marker = m; 30 google.maps.event.addListener(m, 'click', function () { 31 obj.change('clickmarker', -1, marker); 32 }); 33 if (obj.vars.behavior.extramarkerevents) { 34 google.maps.event.addListener(m, 'mouseover', function () { 35 obj.change('mouseovermarker', -1, marker); 36 }); 37 google.maps.event.addListener(m, 'mouseout', function () { 38 obj.change('mouseoutmarker', -1, marker); 39 }); 40 google.maps.event.addListener(m, 'dblclick', function () { 41 obj.change('dblclickmarker', -1, marker); 42 }); 43 } 44 /** 45 * Perform a synthetic marker click on this marker on load. 46 */ 47 if (marker.autoclick || (marker.options && marker.options.autoclick)) { 48 obj.deferChange('clickmarker', -1, marker); 49 } 50 if (obj.vars.behavior.autozoom) { 51 obj.bounds.extend(new google.maps.LatLng(marker.latitude, marker.longitude)); 52 } 53 }); 54 55 // Default marker actions. 56 obj.bind('clickmarker', function (marker) { 57 // Close infowindow if open to prevent multiple windows 58 if (infowindow !== null) { 59 infowindow.close(); 60 } 61 if (marker.text) { 62 infowindow.setContent(marker.text); 63 infowindow.open(obj.map, marker.marker); 64 } 65 // Info Window Query / Info Window Offset 66 else if (marker.iwq || (obj.vars.iwq && typeof marker.iwo != 'undefined')) { 67 var iwq, iwo; 68 if (obj.vars.iwq) { 69 iwq = obj.vars.iwq; 70 } 71 if (marker.iwq) { 72 iwq = marker.iwq; 73 } 74 iwo = 0; 75 if (marker.iwo) { 76 iwo = marker.iwo; 77 } 78 // Create a container to store the cloned DOM elements. 79 var el = document.createElement('div'); 80 // Clone the matched object, run through the clone, stripping off ids, and move the clone into the container. 81 jQuery(iwq).eq(iwo).clone(false).find('*').removeAttr('id').appendTo(jQuery(el)); 82 infowindow.setContent(el); 83 infowindow.open(obj.map, marker.marker); 84 } 85 // AJAX content 86 else if (marker.rmt) { 87 //Immediately add a 'loading' bubble on click while we wait for AJAX 88 infowindow.setContent('<div class="gmap-marker-rmt-loading throbber">Loading</div>'); 89 infowindow.open(obj.map, marker.marker); 90 91 var uri = marker.rmt; 92 // If there was a callback, prefix that. 93 // (If there wasn't, marker.rmt was the FULL path.) 94 if (obj.vars.rmtcallback) { 95 uri = Drupal.absoluteUrl(obj.vars.rmtcallback + '/' + marker.rmt); 96 } 97 // @Bevan: I think it makes more sense to do it in this order. 98 // @Bevan: I don't like your choice of variable btw, seems to me like 99 // @Bevan: it belongs in the map object, or at *least* somewhere in 100 // @Bevan: the gmap settings proper... 101 //if (!marker.text && Drupal.settings.loadingImage) { 102 // marker.marker.openInfoWindowHtml(Drupal.settings.loadingImage); 103 //} 104 jQuery.get(uri, {}, function (data) { 105 infowindow.setContent(data); 106 infowindow.open(obj.map, marker.marker); 107 }); 108 } 109 // Tabbed content 110 else if (marker.tabs) { 111 var data = ""; 112 //tabs in an infowindow is no longer supported in API ver3. 113 for (var m in marker.tabs) { 114 data += marker.tabs[m]; 115 } 116 infowindow.setContent(data); 117 infowindow.open(obj.map, marker.marker); 118 } 119 // No content -- marker is a link 120 else if (marker.link) { 121 open(marker.link, '_self'); 122 } 123 }); 124 125 obj.bind('markersready', function () { 126 // If we are autozooming, set the map center at this time. 127 if (obj.vars.behavior.autozoom) { 128 if (!obj.bounds.isEmpty()) { 129 obj.map.fitBounds(obj.bounds); 130 var listener = google.maps.event.addListener(obj.map, "idle", function () { 131 if (obj.vars.maxzoom) { 132 var maxzoom = parseInt(obj.vars.maxzoom); 133 if (obj.map.getZoom() > maxzoom) obj.map.setZoom(maxzoom); 134 google.maps.event.removeListener(listener); 135 } 136 }); 137 } 138 } 139 }); 140 141 obj.bind('clearmarkers', function () { 142 // Reset bounds if autozooming 143 // @@@ Perhaps we should have a bounds for both markers and shapes? 144 if (obj.vars.behavior.autozoom) { 145 obj.bounds = new google.maps.LatLngBounds(); 146 } 147 }); 148 149 Drupal.gmap.getInfoWindow = function () { 150 return infowindow; 151 }; 152 153 // @@@ TODO: Some sort of bounds handling for deletemarker? We'd have to walk the whole thing to figure out the new bounds... 154});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.