Changeset 12706


Ignore:
Timestamp:
Dec 8, 2011, 10:36:35 PM (9 years ago)
Author:
rvelices
Message:

rv_gmaps use places autocomplete + added new markers + better algo for displaying markers

Location:
extensions/rv_gmaps/trunk
Files:
8 added
3 deleted
23 edited

Legend:

Unmodified
Added
Removed
  • extensions/rv_gmaps/trunk/admin/admin_config.php

    r12701 r12706  
    6363  );
    6464
     65$files = array();
    6566$path=PHPWG_PLUGINS_PATH.$rvm_dir.'/template/markers/';
    6667$dir_contents = opendir($path);
     
    6970  if (!is_file($path.'/'.$filename) or get_extension($filename)!='tpl')
    7071    continue;
    71   $filename = get_filename_wo_extension( $filename );
    72   $template->append('marker_icons',
     72        $files[] = get_filename_wo_extension($filename);
     73 }
     74closedir($dir_contents);
     75
     76sort($files);
     77foreach($files as $file)
     78{
     79        $template->append('marker_icons',
    7380      array(
    74         $filename => str_replace( '_', ' ', $filename),
     81        $file => str_replace( '_', ' ', $file),
    7582      ),
    7683      true
     
    7986$template->assign('selected_marker_icon', rvm_get_config_var('marker_icon', '') );
    8087
    81 closedir($dir_contents);
     88
    8289?>
  • extensions/rv_gmaps/trunk/changelog.txt

    r12367 r12706  
     12.3.b
     2- search for places / location uses now google auto complete
     3- fix some bad markers not showing (google removed some images from their servers)
     4- added some new marker icons
     5- full migration to maps api v3
     6
    172.3.a
    28- fix jquery version
  • extensions/rv_gmaps/trunk/language/ar_SA/lang.php

    r8691 r12706  
    1313$lang['Show all']='اظهار الكل';
    1414$lang['show all pictures around this location']='اظهر كل الصور المحيطة بهذه';
    15 $lang['Search a location...']='البحث عن منطقة...';
    1615
    1716$lang['Loading']='تحميل';
  • extensions/rv_gmaps/trunk/language/cs_CZ/lang.php

    r8724 r12706  
    1313$lang['Show all']='Zobrazit vše';
    1414$lang['show all photos around this location']='zobrazit fotografie v okolí';
    15 $lang['Search a location...']='Najít polohu...';
    1615
    1716$lang['Loading']='Nahrávání';
  • extensions/rv_gmaps/trunk/language/de_DE/lang.php

    r8724 r12706  
    1313$lang['Show all']='Zeigt Alle';
    1414$lang['show all photos around this location']='zeigt alle Bilder rund um dieser Position';
    15 $lang['Search a location...']='Suche eine Position...';
    1615
    1716$lang['Loading']='lädt';
  • extensions/rv_gmaps/trunk/language/en_UK/lang.php

    r8724 r12706  
    1313$lang['Show all']='Show all';
    1414$lang['show all photos around this location']='show all photos around this location';
    15 $lang['Search a location...']='Search a location...';
    1615
    1716$lang['Loading']='Loading';
  • extensions/rv_gmaps/trunk/language/es_ES/lang.php

    r8724 r12706  
    1313$lang['Show all']='Presenta todo';
    1414$lang['show all photos around this location']='Presenta todas las imágenes cerca de estas coordenadas';
    15 $lang['Search a location...']='Buscar un lugar...';
    1615
    1716$lang['Loading']='Carga';
  • extensions/rv_gmaps/trunk/language/fr_FR/lang.php

    r8724 r12706  
    1313$lang['Show all']='Présente tout';
    1414$lang['show all photos around this location']='Présente toutes les images à proximité de ces coordonnées';
    15 $lang['Search a location...']='Rechercher un lieu...';
    1615
    1716$lang['Loading']='Chargement';
  • extensions/rv_gmaps/trunk/language/hu_HU/lang.php

    r8724 r12706  
    1313$lang['Show all']='Összes megjelenítése';
    1414$lang['show all photos around this location']='Összes kép mellé ezeket a koordinátákat';
    15 $lang['Search a location...']='Hely keresése...';
    1615
    1716$lang['Loading']='Töltés';
  • extensions/rv_gmaps/trunk/language/it_IT/lang.php

    r8724 r12706  
    1313$lang['Show all']='Presenta tutto';
    1414$lang['show all photos around this location']='Presenta tutte le immagini in prossimità di queste coordinate';
    15 $lang['Search a location...']='Cecare un luogo...';
    1615
    1716$lang['Loading']='Caricamento';
  • extensions/rv_gmaps/trunk/language/lv_LV/lang.php

    r8724 r12706  
    1313$lang['Show all']='Rādīt visu';
    1414$lang['show all photos around this location']='rādīt visus attēlus ap šo (vietu) lokāciju';
    15 $lang['Search a location...']='Meklēt lokāciju...';
    1615
    1716$lang['Loading']='Lādēšana';
  • extensions/rv_gmaps/trunk/language/nl_NL/lang.php

    r11406 r12706  
    1313$lang['Show all']='Toon alles';
    1414$lang['show all photos around this location']='toon alle afbeeldingen in de buurt van deze locatie';
    15 $lang['Search a location...']='Zoek een locatie...';
    1615
    1716$lang['Loading']='Laden';
  • extensions/rv_gmaps/trunk/language/no_NO/lang.php

    r9006 r12706  
    1313$lang['Show all']='Vis alle';
    1414$lang['show all photos around this location']='vis alle bilder rundt denne lokalisasjonen';
    15 $lang['Search a location...']='Søk på en lokalisasjon...';
    1615
    1716$lang['Loading']='Laster';
  • extensions/rv_gmaps/trunk/language/pl_PL/lang.php

    r8724 r12706  
    1414$lang['Show all']='Pokaż wszystko';
    1515$lang['show all photos around this location']='pokaż wszystkie obrazy w pobliżu tej lokalizacji';
    16 $lang['Search a location...']='Szukaj lokalizacji...';
    1716
    1817$lang['Loading']='Wczytywanie';
  • extensions/rv_gmaps/trunk/language/ru_RU/lang.php

    r9083 r12706  
    1313$lang['Show all']='Показать все';
    1414$lang['show all photos around this location']='Показать все фотографии вблизи от этой точки';
    15 $lang['Search a location...']='Поиск места...';
    1615
    1716$lang['Loading']='Загрузка';
  • extensions/rv_gmaps/trunk/language/sk_SK/lang.php

    r9480 r12706  
    1313$lang['Show all']='Zobraziť všetko';
    1414$lang['show all pictures around this location']='zobraziť fotografie v okolí';
    15 $lang['Search a location...']='Nájsť polohu...';
    1615
    1716$lang['Loading']='Nahrávanie';
  • extensions/rv_gmaps/trunk/main.inc.php

    r12701 r12706  
    11<?php /*
    22Plugin Name: RV Maps&Earth
    3 Version: 2.3.b-alpha
     3Version: 2.3.b
    44Description: Extend your gallery with Google Maps and Google Earth ...
    55Plugin URI: http://piwigo.org/ext/extension_view.php?eid=122
     
    77Author URI: http://www.modusoptimus.com/
    88*/
    9 define( 'RVM_PLUGIN_VERSION', '2.3.b-alpha');
     9define( 'RVM_PLUGIN_VERSION', '2.3.b');
    1010defined('PHPWG_ROOT_PATH') or die('Hacking attempt!');
    1111
  • extensions/rv_gmaps/trunk/map_data.php

    r12698 r12706  
    132132  rvo( ",\n" );
    133133
    134   rvo( 'kml_url: "'.rvm_duplicate_kml_index_url(array('box'=>$c['bounds'], 'flat'=>1), array('start') ). '"' );
    135   rvo( ",\n" );
    136 
    137134  $max_per_cluster = rvm_get_config_var('nb_images_per_marker',20);
    138135  if ( count($c['items']) >  $max_per_cluster )
     
    160157    rvo( "{" );
    161158    rvo( "tn: ".jsgm_str( get_thumbnail_url( $img ) ) );
    162     rvo( "," );
    163     rvo( "name: ".jsgm_str( trigger_event('render_element_description', $title) ) );
    164     rvo( "," );
    165     rvo( "comment: ".jsgm_str( trigger_event('render_element_description', $img['comment']) ) );
    166     rvo( "," );
    167     rvo( "page_url: ".jsgm_str( $page_url ) );
     159    rvo( ",name: ".jsgm_str( trigger_event('render_element_description', $title) ) );
     160    rvo( ",comment: ".jsgm_str( trigger_event('render_element_description', $img['comment']) ) );
     161    rvo( ",page_url: ".jsgm_str( $page_url ) );
    168162    rvo( "}" );
    169163  }
  • extensions/rv_gmaps/trunk/template/data_handler.js

    r12701 r12706  
    1212
    1313        google.maps.event.bind( this._map, "click", this, this._onMapClick);
    14         //google.maps.event.bind( this._infoWindow, "domready", this, this._onInfoWindowDomReady);
    1514}
    1615
     
    2322_navHtmlIds: ["gotoPrevImage", "gotoNextImage"],
    2423_navHtmlHandles: [],
    25 _recursionProtect: 0,
    2624_prevResult: { nb_items:0 },
    2725
     
    7068        if (changed)
    7169        {
    72                 var newMarkers = [];
     70// BEGIN NEW ****************   
     71                var markersToRemove=[], clustersToAdd=[], newMarkers=[];
     72                data.image_clusters.sort( function(a,b) { return PwgDataHandler.cmpll( a.position, b.position); } );
     73                for (i=0; i<data.image_clusters.length; i++)
     74                {
     75                        var cluster = data.image_clusters[i];
     76                        while(this._markers.length)
     77                        {
     78                                var marker = this._markers[0];
     79                                if (PwgDataHandler.cmpll(cluster.position, marker.getPosition()) == 0)
     80                                {
     81                                        marker.pwg = {
     82                                                nb_items: cluster.nb_items,
     83                                                images: cluster.items,
     84                                                bounds: cluster.bounds,
     85                                                blowup_url: cluster.blowup_url
     86                                                };
     87                                        newMarkers.push(marker);
     88                                        this._markers.shift();
     89                                        cluster = null;
     90                                        break;
     91                                }
     92                                else if (PwgDataHandler.cmpll(cluster.position, marker.getPosition()) < 0)
     93                                {
     94                                        break;
     95                                }
     96                                else
     97                                {
     98                                        markersToRemove.push(marker);
     99                                        this._markers.shift();
     100                                }
     101                        }
     102
     103                        if (cluster)
     104                                clustersToAdd.push(cluster);
     105                }
     106
     107                if (document.is_debug) glog('reused ' + newMarkers.length + ' exact markers');
     108                markersToRemove = markersToRemove.concat( this._markers );
     109
     110                var infoWindowMarker = this._infoWindow.getAnchor();
     111                for (i=0; i<clustersToAdd.length; i++)
     112                {
     113                        var cluster = clustersToAdd[i];
     114                        var theTitle = "";
     115                        if (cluster.nb_items>1)
     116                                theTitle = Localization.fmt1("%d photos", cluster.nb_items);
     117                        else
     118                                theTitle = cluster.items[0].name;
     119
     120                        var marker = markersToRemove.pop();
     121                        if (marker && marker==infoWindowMarker)
     122                        {
     123                                marker.setMap(null);
     124                                google.maps.event.clearInstanceListeners(marker);
     125                                if (document.is_debug) glog('removed marker with infoWindow');
     126                                marker = this._markers.pop();
     127                        }
     128
     129                        if (!marker)
     130                        {
     131                                marker = new google.maps.Marker(this.options.markerOptions);
     132                                marker.setPosition(cluster.position);
     133                                marker.setTitle(theTitle);
     134                                google.maps.event.addListener( marker, "click", pwgBind(this, this._onMarkerClick, marker) );
     135                                google.maps.event.addListener( marker, "dblclick", pwgBind(this, this._onMarkerDblClick, marker) );
     136                                marker.setMap(this._map);
     137                        }
     138                        else
     139                        {
     140                                marker.currentImageIndex=0;
     141                                marker.setPosition( cluster.position );
     142                                marker.setTitle(theTitle);
     143                        }
     144
     145                        newMarkers.push(marker);
     146
     147                        marker.pwg = {
     148                                nb_items: cluster.nb_items,
     149                                images: cluster.items,
     150                                bounds: cluster.bounds,
     151                                blowup_url: cluster.blowup_url
     152                                };
     153                }
     154
     155                for (i=0; i<markersToRemove.length; i++)
     156                {
     157                        markersToRemove[i].setMap(null);
     158                        google.maps.event.clearInstanceListeners(markersToRemove[i]);
     159                }
     160
     161                this._markers = newMarkers;
     162                this._markers.sort( function(a,b) { return PwgDataHandler.cmpll( a.getPosition(), b.getPosition()); } );
     163// END new
     164               
     165/*              var newMarkers = [];
    73166                var infoWindowMarker = this._infoWindow.getAnchor();
    74167
     
    123216                        google.maps.event.clearInstanceListeners(this._markers[i]);
    124217                }
    125 
     218*/
    126219                this._markers = newMarkers;
    127220                this._prevResult.nb_items=data.nb_items;
     
    207300_onInfoWindowDomReady: function()
    208301{
    209         if (this._recursionProtect)
    210                 return;
    211302        if (!this._infoWindow.getAnchor() || this._infoWindow.getAnchor().pwg.images.length<2)
    212303                return;
    213         try {
    214                 this._recursionProtect = 1;
    215                 for (var i=0; i< this._navHtmlIds.length; i++)
    216                 {
    217                         var elt = document.getElementById( this._navHtmlIds[i] );
    218                         if (elt)
    219                                 this._navHtmlHandles.push( google.maps.event.addDomListener(elt, "click", pwgBind(this, this._onPictureNavigate, this._infoWindow.getAnchor(), i) ) );
    220                 }
    221         }
    222         finally {
    223                 this._recursionProtect = 0;
     304        for (var i=0; i< this._navHtmlIds.length; i++)
     305        {
     306                var elt = document.getElementById( this._navHtmlIds[i] );
     307                if (elt)
     308                        this._navHtmlHandles.push( google.maps.event.addDomListener(elt, "click", pwgBind(this, this._onPictureNavigate, this._infoWindow.getAnchor(), i) ) );
    224309        }
    225310},
     
    267352}
    268353
     354PwgDataHandler.cmpll = function(a,b) {
     355        var d= a.lng() - b.lng();
     356        if (d < -.5e-6)
     357                return -1;
     358        else if (d > .5e-6)
     359                return 1;
     360        d= a.lat() - b.lat();
     361        if (d < -.5e-6)
     362                return -1;
     363        else if (d > .5e-6)
     364                return 1;
     365        return 0;
     366}
    269367
    270368String.prototype.urlNoHtm = function()
  • extensions/rv_gmaps/trunk/template/data_loader.js

    r12701 r12706  
    7777        var bounds = new google.maps.LatLngBounds( this._map.getBounds().getSouthWest(), this._map.getBounds().getNorthEast() );
    7878       
    79         //bug as of v 3.7 -
     79        //BEGIN BUG in maps api as of v3.7 - when map wraps horizontally more than 360 deg - the getBounds is wrong
    8080        var isOver = false;
    8181        if (bounds.getSouthWest().lng() < bounds.getNorthEast().lng())
     
    9090                isOver = true;
    9191        }
     92        if (!isOver)
     93        {//very emprical tests
     94                if (this._map.getDiv().offsetWidth / this._map.getDiv().offsetHeight > 1.3
     95                                && this._map.getZoom()<3
     96                                && bounds.getSouthWest().lat() < -50
     97                                && bounds.getNorthEast().lat() > 50)
     98                {
     99                        isOver = true;
     100                }
     101        }
    92102       
    93103        if (isOver)
    94104                bounds = new google.maps.LatLngBounds( new google.maps.LatLng(this._map.getBounds().getSouthWest().lat(),-179.9), new google.maps.LatLng(this._map.getBounds().getNorthEast().lat(), 179.9) );
    95         //end bug
     105        //END bug
    96106       
    97107       
     
    117127        /*if ( !bounds.isFullLat() )*/
    118128        {
    119                 nd = latRange*12/100;
    120                 sd = latRange*4/100;
     129                nd = latRange*0.12;
     130                sd = latRange*0.04;
    121131        }
    122132        /*if ( !bounds.isFullLng() )*/
    123133        {
    124                 ed = lonRange*9/100;
    125                 wd = lonRange*7/100;
     134                ed = lonRange*0.09;
     135                wd = lonRange*0.07;
    126136        }
    127137        var digits = Math.max( getLatLonDigits(latRange,4,2), getLatLonDigits(lonRange,4,2) );
  • extensions/rv_gmaps/trunk/template/map.tpl

    r12701 r12706  
    77<title>{$GALLERY_TITLE}</title>
    88
    9 <script src="http://maps.googleapis.com/maps/api/js?sensor=false&amp;language={$lang_info.code}" type="text/javascript"></script>
     9<script src="http://maps.googleapis.com/maps/api/js?sensor=false&amp;language={$lang_info.code}&amp;libraries=places" type="text/javascript"></script>
    1010
    1111{combine_script id='jquery' load='header' path='http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js'}
     
    5151        if (console)
    5252        {
    53                 console.log(msg + " b="+map.getBounds().toUrlValue() + " c="+map.getCenter().toUrlValue() + " z="+map.getZoom() );
     53                var b = map.getBounds();
     54                if (b)
     55                        console.log(msg + " b="+b.toUrlValue() + " c="+map.getCenter().toUrlValue() + " z="+map.getZoom() );
     56                else
     57                        console.log(msg);
    5458        }
    5559}
     
    111115
    112116        map.pwgDataLoader.start( "{/literal}{$U_MAP_DATA}{literal}" );
     117       
     118        var ac = new google.maps.places.Autocomplete( document.getElementById('q') );
     119        ac.bindTo('bounds', map);
     120        google.maps.event.addListener(ac, 'place_changed', function() {
     121                var place = ac.getPlace();
     122                if (place.geometry.viewport) {
     123                        map.fitBounds(place.geometry.viewport);
     124                } else {
     125                        map.setCenter(place.geometry.location);
     126                        map.setZoom(17);  // Why 17? Because it looks good.
     127                }
     128        } );
    113129}
    114130
     
    198214                </a>
    199215    <span class="gmnoprint">
    200                         <form action="#" onsubmit="if (this.q.value!='' &amp;&amp; this.q.value!='{'Search a location...'|@translate|@escape:javascript}') searchLocation(this.q.value);return false;">
    201                                 <input type="text" size="32" name="q"
    202                                         value="{'Search a location...'|@translate}"
    203                                         onfocus="if (value=='{'Search a location...'|@translate|@escape:javascript}') value='';"
    204                                         onblur="if (value=='') value='{'Search a location...'|@translate|@escape:javascript}'" />
    205                                 <input type="submit" value="{'Search'|@translate}"/>
    206                         </form>
     216                        <input type="text" size="48" id="q" />
    207217                </span>
    208218  </div>
  • extensions/rv_gmaps/trunk/template/picture_map_content.tpl

    r10082 r12706  
    11
    22{html_head}
    3 <script src="http://maps.google.com/maps/api/js?sensor=false&amp;hl={$lang_info.code}" type="text/javascript"></script>
     3<script src="http://maps.google<script src="http://maps.googleapis.com/maps/api/js?sensor=false&amp;language={$lang_info.code}" type="text/javascript"></script>
    44{combine_script id='jquery' load='header' path='themes/default/js/jquery.min.js'}
    55{combine_script id='jquery.nyroModal' load='async' path="`$PLUGIN_LOCATION`/template/nyroModal/jquery.nyroModal-1.6.2.js" version='1.6.2'}
  • extensions/rv_gmaps/trunk/template/style.css

    r3447 r12706  
    4949}
    5050
    51 #titlebar FORM {
    52   display:inline;
    53   margin:0;
    54 }
    55 
    56 #titlebar FORM INPUT {
     51#titlebar INPUT {
    5752  border: 1px solid gray;
    5853  font-size:80%;
    59 }
    60 
    61 #titlebar FORM INPUT {
    6254  color: #404040;
    6355  background-color: #dddddd;
    6456}
    6557
    66 #titlebar FORM INPUT:focus {
     58
     59#titlebar INPUT:focus {
    6760  color: black;
    6861  background-color: #ffffff;
Note: See TracChangeset for help on using the changeset viewer.