web/data/cubicweb.gmap.js
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Thu, 22 Sep 2011 16:12:23 +0200
changeset 7827 9bbf83f68bcc
parent 5774 0d792bceb25d
child 8154 151058945234
permissions -rw-r--r--
[entity] upgrade fetch_[unrelated_]order to benefit from changes introduced in 3.14 (closes #1942758) of rql generation parts of the ORM now based on rql syntax tree. This allows more powerful and flexible sort control by giving them the syntax tree instead of manipulating string. Also: * prefix new methods by 'cw_' * fix cases that currently crash in 3.14 due to the refactoring

/**
 *  :organization: Logilab
 *  :copyright: 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
 *  :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
 */

Widgets.GMapWidget = defclass('GMapWidget', null, {
    __init__: function(wdgnode) {
        // Assume we have imported google maps JS
        if (GBrowserIsCompatible()) {
            var uselabelstr = wdgnode.getAttribute('cubicweb:uselabel');
            var uselabel = true;
            if (uselabelstr) {
                if (uselabelstr == 'True') {
                    uselabel = true;
                }
                else {
                    uselabel = false;
                }
            }
            var map = new GMap2(wdgnode);
            map.addControl(new GSmallMapControl());
            var jsonurl = wdgnode.getAttribute('cubicweb:loadurl');
            var self = this; // bind this to a local variable
            jQuery.getJSON(jsonurl, function(geodata) {
                if (geodata.center) {
                    var zoomLevel = geodata.zoomlevel;
                    map.setCenter(new GLatLng(geodata.center.latitude, geodata.center.longitude), zoomLevel);
                }
                for (var i = 0; i < geodata.markers.length; i++) {
                    var marker = geodata.markers[i];
                    self.createMarker(map, marker, i + 1, uselabel);
                }
            });
            jQuery(wdgnode).after(this.legendBox);
        } else { // incompatible browser
            jQuery.unload(GUnload);
        }
    },

    createMarker: function(map, marker, i, uselabel) {
        var point = new GLatLng(marker.latitude, marker.longitude);
        var icon = new GIcon();
        icon.image = marker.icon[0];
        icon.iconSize = new GSize(marker.icon[1][0], marker.icon[1][1]);
        icon.iconAnchor = new GPoint(marker.icon[2][0], marker.icon[2][1]);
        if (marker.icon[3]) {
            icon.shadow4 = marker.icon[3];
        }
        if (typeof LabeledMarker == "undefined") {
            var gmarker = new GMarker(point, {
                icon: icon,
                title: marker.title
            });
        } else {
            var gmarker = new LabeledMarker(point, {
                icon: icon,
                title: marker.title,
                labelText: uselabel ? '<strong>' + i + '</strong>': '',
                labelOffset: new GSize(2, - 32)
            });
        }
        map.addOverlay(gmarker);
        GEvent.addListener(gmarker, 'click', function() {
            jQuery.post(marker.bubbleUrl, function(data) {
                map.openInfoWindowHtml(point, data);
            });
        });
    }

});