<commit_before>var results           = [];
var paginationResults;

var previousResults = document.getElementById("previousResults");
var nextResults     = document.getElementById("nextResults");

var draggableMarker;

previousResults.addEventListener('click', function() {
    paginationResults -= 1;
    renderResults();
});
nextResults.addEventListener('click', function() {
    paginationResults += 1;
    renderResults();
});

function renderResults() {
    var $proposal = $('#proposal');
    var $proposalMessage = $('#proposal-message');

    var $searchStreet = $('#input-search');
    var $searchMunicipality = $('#input-ward');

    $proposal.empty();
    var features = [];

    var iconIdx = 0;
    for(var i=paginationResults*5, length=results.length; i<length && features.length<5; i++) {
        var address = results[i].address;
        var pos = results[i].point;

        var newAddress = new AddressResult(pos.x, pos.y, address, iconIdx++);
        $proposal.append(newAddress.render());

        // Create feature on vectore layer
        var feature = new OpenLayers.Feature.Vector(
                new OpenLayers.Geometry.Point(pos.x, pos.y),
                { 'additionalInfo' :
                    {
                        'streetName'   : address.street.name,
                        'number'       : address.number,
                        'postCode'     : address.street.postCode,
                        'municipality' : address.street.municipality
                    }
                },
                {
                    externalGraphic: newAddress.iconSrc(),
                    graphicWidth: 25,
                    graphicHeight: 32,
                    graphicYOffset: -32
                }
            );
        features.push(feature);

        // Define message if needed
        if ($searchMunicipality.val()) {
            $proposalMessage.html("Cette rue n'est pas répertoriée dans cette commune");
        } else if ($searchStreet.val().toLowerCase() == address.street.name.toLowerCase()) {
            $proposalMessage.html("Cette rue existe dans plusieurs communes, merci de préciser");
        }
    }

    // Mask/display pagination buttons
    if (paginationResults == 0) {
        previousResults.hidden = true;
    } else {
        previousResults.hidden = false;
    }

    if (results.length >= paginationResults * 5 + 6) {
        nextResults.hidden = false;
    } else {
        nextResults.hidden = true;
    }

    // Add features to layer
    cleanMap();
    fms.currentMap.homepageMarkersLayer.addFeatures(features);

    // Zoom to markers
    var markersBound = fms.currentMap.homepageMarkersLayer.getDataExtent();
    fms.currentMap.map.zoomToExtent(markersBound);

    // Show/hide proposal and message
    $proposalContainer = $('#proposal-container');
    $proposalContainer.slideDown();

    if ($proposalMessage.html()) {
        map.classList.add("map-big-message");
        $proposalMessage.slideDown();
    } else {
        map.classList.remove("map-big-message");
        map.classList.add("map-big");
        $proposalMessage.slideUp();
    }

}
function AddressResult(x, y, address, idx)
{
    var self = this;

    this.x = x;
    this.y = y;
    this.el = document.createElement('li');

    this.address = address;

    this.render = function() {
        this.el.innerHTML = '
' + this.address.street.name +
                            '
' +
                            '' + this.address.street.postCode + ' ' + this.address.street.municipality + '' +
                            '
';
        this.el.addEventListener('click', this.onclick);
        return  this.el;
    };

    this.iconSrc = function() {
        return "/static/images/marker/marker-" + idx + ".png";
    };

    this.onclick = function(event) {
        additionalInfo = {
            'streetName'   : self.address.street.name,
            'number'       : self.address.number,
            'postCode'     : self.address.street.postCode,
            'municipality' : self.address.street.municipality
        };

        initDragMarker(self.x, self.y, additionalInfo);
    };
}

function getAddressFromPoint(lang, x, y) {
    var self  = this;
    var origX = x;
    var origY = y;
    $.ajax({
        url: 'http://service.gis.irisnet.be/urbis/Rest/Localize/getaddressfromxy',
        type:'POST',
        dataType:'jsonp',
        data: {
            json: ['{',
                '"language": "' + lang + '",',
                '"point":{x:' + x + ',y:' + y + '}',
                '}'].join('\n')
        },
        success:function(response)
        {
            cleanMap();

            var street = response.result.address.street.name;
            var number = response.result.address.number;
            var postCode = response.result.address.street.postCode;

            //console.log(origX,origY);
            var municipality = zipcodes[(postCode=="1041"?"1040":postCode)].commune;
            //var origX = response.result.point.x;
            //var origY= response.result.point.y;
            //console.log(x,y);
            //INJECTION
            if (!BACKOFFICE && response.result.address.street.postCode in zipcodes && !zipcodes[String(response.result.address.street.postCode)].participation) {
                //var popupContent = "
" + street + ", " + number;
                // Convert the point and url for google street view
                var popupContent = "
Commune non participante
";
                popupContent += "
" +'Veuillez contacter la commune: '+ zipcodes[String(response.result.address.street.postCode)].phone + "
";
            } else {
                //var popupContent = "
" + street + ", " + number;
                // Convert the point and url for google street view
                var pointStreetView = UtilGeolocation.convertCoordinatesToWGS84(origX, y);
                var streetBiewLink = 'https://maps.google.be/maps?q=' + pointStreetView.y +','+ pointStreetView.origY +'&layer=c&z=17&iwloc=A&sll='+ pointStreetView.y + ',' + pointStreetView.x + '&cbp=13,240.6,0,0,0&cbll=' + pointStreetView.y + ',' + pointStreetView.x;
                var popupContent = "
Déplacez-moi à l'adresse exacte
";
                popupContent += "
" + street + ", " + number;
                popupContent += "
" + postCode + " " + municipality + "
";

                if (NEXT_PAGE_URL) {
                    popupContent += "C'est ici !";
                }
                popupContent += '
Street View
';
            }

            var popup = new OpenLayers.Popup(
                "popup",
                new OpenLayers.LonLat(fms.currentMap.draggableMarker.components[0].x, fms.currentMap.draggableMarker.components[0].y),
                new OpenLayers.Size(200,150),
                popupContent,
                true
            );
            popup.panMapIfOutOfView = true;

            fms.currentMap.map.addPopup(popup);
        },
        error:function(response)
        {
            // Error
            //~ var msg = 'Error: ' + response.status;
            //~ if(response.status == 'error') {
                //~ msg = 'Unable to locate this address';
            //~ }
        }
    });
}

function initDragMarker(x, y, additionalInfo) {
        cleanMap();

        // Remove message info
        var $map = $('#map');
        map.classList.remove("map-big-message");
        map.classList.add("map-big");

        var $proposalMessage = $('#proposal-message');
        $proposalMessage.slideUp();

        draggableMarker = fms.currentMap.addDraggableMarker(x, y);
        fms.currentMap.centerOnDraggableMarker();
        fms.currentMap.map.zoomTo(6);

        var popupContent = "
move the cursor
";

        if (additionalInfo) {
            popupContent += "
" + additionalInfo.streetName + ", " + additionalInfo.number;
            popupContent += "
" + additionalInfo.postCode + " " + additionalInfo.municipality + "
";

            if (additionalInfo.number) {
                popupContent += "It is here";
                popupContent += '
Street View
';
            }
        }

        var popup = new OpenLayers.Popup(
            "popup",
            new OpenLayers.LonLat(x, y),
            new OpenLayers.Size(200,150),
            popupContent,
            true
        );
        popup.panMapIfOutOfView = true;

        fms.currentMap.map.addPopup(popup);
}

function cleanMap() {
    // Remove all popups
    while(fms.currentMap.map.popups.length) {
         fms.currentMap.map.removePopup(fms.currentMap.map.popups[0]);
    }

    // Remove all features
    if (fms.currentMap.markersLayer) {
        fms.currentMap.markersLayer.destroyFeatures();
    }
    if (fms.currentMap.homepageMarkersLayer) {
        fms.currentMap.homepageMarkersLayer.destroyFeatures();
    }

    // Hide results
    $proposalContainer = $('#proposal-container');
    $proposalContainer.slideUp();
}

$(function(){

    var $searchStreet = $('#input-search');
    var $searchStreetNumber = $('#input-streetnumber');
    var $searchMunicipality = $('#input-ward');
    var $searchAddressForm = $('#search-address-form');
    var $searchTicketForm = $('#search-ticket-form');
    var $searchButton = $('#widget-search-button');
    var $searchTicketButton = $('#widget-search-ticket-button');
    var $proposal = $('#proposal');
    var $proposalContainer = $('#proposal-container');
    var $proposalMessage = $('#proposal-message');

    var $map = $('#map');
    $map.bind('markermoved',function(evt,point) {
        getAddressFromPoint(LANGUAGE_CODE, point.x, point.y);
    });

    /*$searchMunicipality.change(function(event){
        fms.currentMap.centerOnMunicipality($(this).val());
    });*/

    $searchTicketForm.submit(function(event){
        event.preventDefault();
        var searchValue = $('#input-ticket-search').val();

        if (searchValue && searchValue.length > 0) {
            //Get current language
            var currentLng = 'en';
            if (window.location.href.indexOf('/nl/') != -1) {
                currentLng = 'nl';
            } else if (window.location.href.indexOf('/fr/') != -1) {
                currentLng = 'fr';
            }
            if (window.location.href.indexOf('pro') != -1) {
                window.location = "/"+currentLng+"/pro/report/search?report_id="+searchValue;
            } else {
                window.location = "/"+currentLng+"/report/search?report_id="+searchValue;
            }
        }
    });

    $searchAddressForm.submit(function(event){
        event.preventDefault();

        paginationResults = 0;

        var searchValue = $searchStreet.val();
        $proposalContainer.slideUp();

        if (!$searchStreet.val()) {
            $searchTicketForm.show();
            return;
        }

        var btnLocalizeviamap = document.getElementById('btn-localizeviamap');
        if (btnLocalizeviamap) {
            btnLocalizeviamap.parentNode.removeChild(btnLocalizeviamap);
        }

        $searchStreet.addClass('loading');
        $searchButton.prop('disabled',true);
        $.ajax({
            url: URBIS_URL + 'service/urbis/Rest/Localize/getaddressesfields',
            dataType:'jsonp',
            data:{
                json:'{"language": "' + LANGUAGE_CODE + '",' +
                '"address": {' +
                    '"street": {' +
                        '"name": "' + $searchStreet.val().replace("\"","\\\"") + '",' +
                        '"postcode": "' + $searchMunicipality.val().replace("\"","\\\"") + '"' +
                    '},"number": "' + $searchStreetNumber.val() + '"' +
                '}}'
            }
        }).success(function(response){
            if(response.status == 'success' && response.result.length > 0)
            {
                var map = document.getElementById('map');
                var mapViewPort = document.getElementById('OpenLayers.Map_4_OpenLayers_ViewPort');

                cleanMap();

                $searchStreet.removeClass('loading');
                $searchButton.prop('disabled',false);
                $proposalMessage.empty();

                // Urbis response 1 result
                if(response.result.length == 1) {
                    var pos    = response.result[0].point;
                    var address = response.result[0].address;

                    additionalInfo = {
                        'streetName'   : address.street.name,
                        'number'       : address.number,
                        'postCode'     : address.street.postCode,
                        'municipality' : address.street.municipality
                    };

                    initDragMarker(pos.x, pos.y, additionalInfo);

                    map.classList.remove("map-big-message");
                    map.classList.add("map-big");
                }
                // Urbis response many results
                else {
                    features = [];

                    results = response.result;
                    document.getElementById('numberResults').innerHTML = results.length;

                    if (!fms.currentMap.homepageMarkersLayer) {
                        // Create vector layer
                        fms.currentMap.homepageMarkersLayer = new OpenLayers.Layer.Vector("Overlay");

                        // Add layer to map
                        fms.currentMap.map.addLayer(fms.currentMap.homepageMarkersLayer);

                        // Function to bind selector to initDragMarker
                        function bindClick(feature) {
                            var x = feature.geometry.x;
                            var y = feature.geometry.y;

                            initDragMarker(x, y, feature.attributes.additionalInfo);
                        }

                        // Add the selector control to the vectorLayer
                        var clickCtrl = new OpenLayers.Control.SelectFeature(fms.currentMap.homepageMarkersLayer, { onSelect: bindClick });
                        fms.currentMap.map.addControl(clickCtrl);
                        clickCtrl.activate();
                    }

                    renderResults();

                }
            }
            else
            {
                $searchTicketForm.show();
                $searchStreet.removeClass('loading');
                $searchButton.prop('disabled',false);
                if(response.status == "noresult" || response.status == "success")
                {
                    $proposalMessage.html('No corresponding address has been found').slideDown();
                }
                else
                {
                    $proposalMessage.html('' + response.status + '').slideDown();
                }
            }
        }).error(function(xhr,msg,error){
            $searchStreet.removeClass('loading');
            $searchButton.prop('disabled',false);

            $proposalMessage.html('Unexpected error.').slideDown();
        });
    });

    $searchAddressForm.submit();
});

(function() {

    var streetKeywords = document.getElementById('input-search');
    var postalCode = document.getElementById('input-ward');
    var searchBtn = document.getElementById('widget-search-button');

    function enableSearch() {
        var enableSearchBtn = false;

        if (streetKeywords.value) {
            enableSearchBtn = true;
        }

        searchBtn.disabled = !enableSearchBtn;
    }

    function municipalityChange() {
        enableSearch();

        fms.currentMap.centerOnMunicipality(postalCode.value);
        /*if ( !(streetKeywords.value) && (postalCode.value) ) {
            alert('middle of municipality : ' + postalCode.value);
        }*/
    }
    // Enable search button if one of fields contain a value
    streetKeywords.addEventListener('keyup', enableSearch);
    streetKeywords.addEventListener('change', enableSearch);
    postalCode.addEventListener('change', municipalityChange);

})(document);

// Localize report with map
(function() {

    var btnLocalizeviamap = document.getElementById('btn-localizeviamap');

    btnLocalizeviamap.addEventListener("click", function() {
        // Hard code center of map (~same value than fms.currentMap.map.getCenter() but as x,y and not lat,lon)
        initDragMarker(148894,170714);
        fms.currentMap.map.zoomTo(2);

        btnLocalizeviamap.parentNode.removeChild(btnLocalizeviamap);
    });

})(document);
<commit_msg>localiser sur carte: garde le zoom et position<commit_after>var results           = [];
var paginationResults;

var previousResults = document.getElementById("previousResults");
var nextResults     = document.getElementById("nextResults");

var draggableMarker;

previousResults.addEventListener('click', function() {
    paginationResults -= 1;
    renderResults();
});
nextResults.addEventListener('click', function() {
    paginationResults += 1;
    renderResults();
});

function renderResults() {
    var $proposal = $('#proposal');
    var $proposalMessage = $('#proposal-message');

    var $searchStreet = $('#input-search');
    var $searchMunicipality = $('#input-ward');

    $proposal.empty();
    var features = [];

    var iconIdx = 0;
    for(var i=paginationResults*5, length=results.length; i<length && features.length<5; i++) {
        var address = results[i].address;
        var pos = results[i].point;

        var newAddress = new AddressResult(pos.x, pos.y, address, iconIdx++);
        $proposal.append(newAddress.render());

        // Create feature on vectore layer
        var feature = new OpenLayers.Feature.Vector(
                new OpenLayers.Geometry.Point(pos.x, pos.y),
                { 'additionalInfo' :
                    {
                        'streetName'   : address.street.name,
                        'number'       : address.number,
                        'postCode'     : address.street.postCode,
                        'municipality' : address.street.municipality
                    }
                },
                {
                    externalGraphic: newAddress.iconSrc(),
                    graphicWidth: 25,
                    graphicHeight: 32,
                    graphicYOffset: -32
                }
            );
        features.push(feature);

        // Define message if needed
        if ($searchMunicipality.val()) {
            $proposalMessage.html("Cette rue n'est pas répertoriée dans cette commune");
        } else if ($searchStreet.val().toLowerCase() == address.street.name.toLowerCase()) {
            $proposalMessage.html("Cette rue existe dans plusieurs communes, merci de préciser");
        }
    }

    // Mask/display pagination buttons
    if (paginationResults == 0) {
        previousResults.hidden = true;
    } else {
        previousResults.hidden = false;
    }

    if (results.length >= paginationResults * 5 + 6) {
        nextResults.hidden = false;
    } else {
        nextResults.hidden = true;
    }

    // Add features to layer
    cleanMap();
    fms.currentMap.homepageMarkersLayer.addFeatures(features);

    // Zoom to markers
    var markersBound = fms.currentMap.homepageMarkersLayer.getDataExtent();
    fms.currentMap.map.zoomToExtent(markersBound);

    // Show/hide proposal and message
    $proposalContainer = $('#proposal-container');
    $proposalContainer.slideDown();

    if ($proposalMessage.html()) {
        map.classList.add("map-big-message");
        $proposalMessage.slideDown();
    } else {
        map.classList.remove("map-big-message");
        map.classList.add("map-big");
        $proposalMessage.slideUp();
    }

}
function AddressResult(x, y, address, idx)
{
    var self = this;

    this.x = x;
    this.y = y;
    this.el = document.createElement('li');

    this.address = address;

    this.render = function() {
        this.el.innerHTML = '
' + this.address.street.name +
                            '
' +
                            '' + this.address.street.postCode + ' ' + this.address.street.municipality + '' +
                            '
';
        this.el.addEventListener('click', this.onclick);
        return  this.el;
    };

    this.iconSrc = function() {
        return "/static/images/marker/marker-" + idx + ".png";
    };

    this.onclick = function(event) {
        additionalInfo = {
            'streetName'   : self.address.street.name,
            'number'       : self.address.number,
            'postCode'     : self.address.street.postCode,
            'municipality' : self.address.street.municipality
        };

        initDragMarker(self.x, self.y, additionalInfo);
    };
}

function getAddressFromPoint(lang, x, y) {
    var self  = this;
    var origX = x;
    var origY = y;
    $.ajax({
        url: 'http://service.gis.irisnet.be/urbis/Rest/Localize/getaddressfromxy',
        type:'POST',
        dataType:'jsonp',
        data: {
            json: ['{',
                '"language": "' + lang + '",',
                '"point":{x:' + x + ',y:' + y + '}',
                '}'].join('\n')
        },
        success:function(response)
        {
            cleanMap();

            var street = response.result.address.street.name;
            var number = response.result.address.number;
            var postCode = response.result.address.street.postCode;

            //console.log(origX,origY);
            var municipality = zipcodes[(postCode=="1041"?"1040":postCode)].commune;
            //var origX = response.result.point.x;
            //var origY= response.result.point.y;
            //console.log(x,y);
            //INJECTION
            if (!BACKOFFICE && response.result.address.street.postCode in zipcodes && !zipcodes[String(response.result.address.street.postCode)].participation) {
                //var popupContent = "
" + street + ", " + number;
                // Convert the point and url for google street view
                var popupContent = "
Commune non participante
";
                popupContent += "
" +'Veuillez contacter la commune: '+ zipcodes[String(response.result.address.street.postCode)].phone + "
";
            } else {
                //var popupContent = "
" + street + ", " + number;
                // Convert the point and url for google street view
                var pointStreetView = UtilGeolocation.convertCoordinatesToWGS84(origX, y);
                var streetBiewLink = 'https://maps.google.be/maps?q=' + pointStreetView.y +','+ pointStreetView.origY +'&layer=c&z=17&iwloc=A&sll='+ pointStreetView.y + ',' + pointStreetView.x + '&cbp=13,240.6,0,0,0&cbll=' + pointStreetView.y + ',' + pointStreetView.x;
                var popupContent = "
Déplacez-moi à l'adresse exacte
";
                popupContent += "
" + street + ", " + number;
                popupContent += "
" + postCode + " " + municipality + "
";

                if (NEXT_PAGE_URL) {
                    popupContent += "C'est ici !";
                }
                popupContent += '
Street View
';
            }

            var popup = new OpenLayers.Popup(
                "popup",
                new OpenLayers.LonLat(fms.currentMap.draggableMarker.components[0].x, fms.currentMap.draggableMarker.components[0].y),
                new OpenLayers.Size(200,150),
                popupContent,
                true
            );
            popup.panMapIfOutOfView = true;

            fms.currentMap.map.addPopup(popup);
        },
        error:function(response)
        {
            // Error
            //~ var msg = 'Error: ' + response.status;
            //~ if(response.status == 'error') {
                //~ msg = 'Unable to locate this address';
            //~ }
        }
    });
}

function initDragMarker(x, y, additionalInfo) {
        cleanMap();

        // Remove message info
        var $map = $('#map');
        map.classList.remove("map-big-message");
        map.classList.add("map-big");

        var $proposalMessage = $('#proposal-message');
        $proposalMessage.slideUp();

        draggableMarker = fms.currentMap.addDraggableMarker(x, y);
        fms.currentMap.centerOnDraggableMarker();
        fms.currentMap.map.zoomTo(6);

        var popupContent = "
move the cursor
";

        if (additionalInfo) {
            popupContent += "
" + additionalInfo.streetName + ", " + additionalInfo.number;
            popupContent += "
" + additionalInfo.postCode + " " + additionalInfo.municipality + "
";

            if (additionalInfo.number) {
                popupContent += "It is here";
                popupContent += '
Street View
';
            }
        }

        var popup = new OpenLayers.Popup(
            "popup",
            new OpenLayers.LonLat(x, y),
            new OpenLayers.Size(200,150),
            popupContent,
            true
        );
        popup.panMapIfOutOfView = true;

        fms.currentMap.map.addPopup(popup);
}

function cleanMap() {
    // Remove all popups
    while(fms.currentMap.map.popups.length) {
         fms.currentMap.map.removePopup(fms.currentMap.map.popups[0]);
    }

    // Remove all features
    if (fms.currentMap.markersLayer) {
        fms.currentMap.markersLayer.destroyFeatures();
    }
    if (fms.currentMap.homepageMarkersLayer) {
        fms.currentMap.homepageMarkersLayer.destroyFeatures();
    }

    // Hide results
    $proposalContainer = $('#proposal-container');
    $proposalContainer.slideUp();
}

$(function(){

    var $searchStreet = $('#input-search');
    var $searchStreetNumber = $('#input-streetnumber');
    var $searchMunicipality = $('#input-ward');
    var $searchAddressForm = $('#search-address-form');
    var $searchTicketForm = $('#search-ticket-form');
    var $searchButton = $('#widget-search-button');
    var $searchTicketButton = $('#widget-search-ticket-button');
    var $proposal = $('#proposal');
    var $proposalContainer = $('#proposal-container');
    var $proposalMessage = $('#proposal-message');

    var $map = $('#map');
    $map.bind('markermoved',function(evt,point) {
        getAddressFromPoint(LANGUAGE_CODE, point.x, point.y);
    });

    /*$searchMunicipality.change(function(event){
        fms.currentMap.centerOnMunicipality($(this).val());
    });*/

    $searchTicketForm.submit(function(event){
        event.preventDefault();
        var searchValue = $('#input-ticket-search').val();

        if (searchValue && searchValue.length > 0) {
            //Get current language
            var currentLng = 'en';
            if (window.location.href.indexOf('/nl/') != -1) {
                currentLng = 'nl';
            } else if (window.location.href.indexOf('/fr/') != -1) {
                currentLng = 'fr';
            }
            if (window.location.href.indexOf('pro') != -1) {
                window.location = "/"+currentLng+"/pro/report/search?report_id="+searchValue;
            } else {
                window.location = "/"+currentLng+"/report/search?report_id="+searchValue;
            }
        }
    });

    $searchAddressForm.submit(function(event){
        event.preventDefault();

        paginationResults = 0;

        var searchValue = $searchStreet.val();
        $proposalContainer.slideUp();

        if (!$searchStreet.val()) {
            $searchTicketForm.show();
            return;
        }

        var btnLocalizeviamap = document.getElementById('btn-localizeviamap');
        if (btnLocalizeviamap) {
            btnLocalizeviamap.parentNode.removeChild(btnLocalizeviamap);
        }

        $searchStreet.addClass('loading');
        $searchButton.prop('disabled',true);
        $.ajax({
            url: URBIS_URL + 'service/urbis/Rest/Localize/getaddressesfields',
            dataType:'jsonp',
            data:{
                json:'{"language": "' + LANGUAGE_CODE + '",' +
                '"address": {' +
                    '"street": {' +
                        '"name": "' + $searchStreet.val().replace("\"","\\\"") + '",' +
                        '"postcode": "' + $searchMunicipality.val().replace("\"","\\\"") + '"' +
                    '},"number": "' + $searchStreetNumber.val() + '"' +
                '}}'
            }
        }).success(function(response){
            if(response.status == 'success' && response.result.length > 0)
            {
                var map = document.getElementById('map');
                var mapViewPort = document.getElementById('OpenLayers.Map_4_OpenLayers_ViewPort');

                cleanMap();

                $searchStreet.removeClass('loading');
                $searchButton.prop('disabled',false);
                $proposalMessage.empty();

                // Urbis response 1 result
                if(response.result.length == 1) {
                    var pos    = response.result[0].point;
                    var address = response.result[0].address;

                    additionalInfo = {
                        'streetName'   : address.street.name,
                        'number'       : address.number,
                        'postCode'     : address.street.postCode,
                        'municipality' : address.street.municipality
                    };

                    initDragMarker(pos.x, pos.y, additionalInfo);

                    map.classList.remove("map-big-message");
                    map.classList.add("map-big");
                }
                // Urbis response many results
                else {
                    features = [];

                    results = response.result;
                    document.getElementById('numberResults').innerHTML = results.length;

                    if (!fms.currentMap.homepageMarkersLayer) {
                        // Create vector layer
                        fms.currentMap.homepageMarkersLayer = new OpenLayers.Layer.Vector("Overlay");

                        // Add layer to map
                        fms.currentMap.map.addLayer(fms.currentMap.homepageMarkersLayer);

                        // Function to bind selector to initDragMarker
                        function bindClick(feature) {
                            var x = feature.geometry.x;
                            var y = feature.geometry.y;

                            initDragMarker(x, y, feature.attributes.additionalInfo);
                        }

                        // Add the selector control to the vectorLayer
                        var clickCtrl = new OpenLayers.Control.SelectFeature(fms.currentMap.homepageMarkersLayer, { onSelect: bindClick });
                        fms.currentMap.map.addControl(clickCtrl);
                        clickCtrl.activate();
                    }

                    renderResults();

                }
            }
            else
            {
                $searchTicketForm.show();
                $searchStreet.removeClass('loading');
                $searchButton.prop('disabled',false);
                if(response.status == "noresult" || response.status == "success")
                {
                    $proposalMessage.html('No corresponding address has been found').slideDown();
                }
                else
                {
                    $proposalMessage.html('' + response.status + '').slideDown();
                }
            }
        }).error(function(xhr,msg,error){
            $searchStreet.removeClass('loading');
            $searchButton.prop('disabled',false);

            $proposalMessage.html('Unexpected error.').slideDown();
        });
    });

    $searchAddressForm.submit();
});

(function() {

    var streetKeywords = document.getElementById('input-search');
    var postalCode = document.getElementById('input-ward');
    var searchBtn = document.getElementById('widget-search-button');

    function enableSearch() {
        var enableSearchBtn = false;

        if (streetKeywords.value) {
            enableSearchBtn = true;
        }

        searchBtn.disabled = !enableSearchBtn;
    }

    function municipalityChange() {
        enableSearch();

        fms.currentMap.centerOnMunicipality(postalCode.value);
        /*if ( !(streetKeywords.value) && (postalCode.value) ) {
            alert('middle of municipality : ' + postalCode.value);
        }*/
    }
    // Enable search button if one of fields contain a value
    streetKeywords.addEventListener('keyup', enableSearch);
    streetKeywords.addEventListener('change', enableSearch);
    postalCode.addEventListener('change', municipalityChange);

})(document);

// Localize report with map
(function() {

    var btnLocalizeviamap = document.getElementById('btn-localizeviamap');

    btnLocalizeviamap.addEventListener("click", function() {
        // Hard code center of map (~same value than fms.currentMap.map.getCenter() but as x,y and not lat,lon)
        initDragMarker(fms.currentMap.map.center.lon,fms.currentMap.map.center.lat);

        btnLocalizeviamap.parentNode.removeChild(btnLocalizeviamap);
    });

})(document);
<|endoftext|>


<commit_before>(function(window) {
  'use strict';

  function calendar(config) {

    var startDay,
    today,
    month,
    year,
    date,
    extra,
    daysInMonth,
    firstDayInMonth,
    initSuccess

    initialize()

    if (initSuccess) {
      return {
        data: generateCalendarMonthArray(year, month, startDay),
        // add index so January = 1
        month: month + 1,
        year: year,
        startDay: startDay,
        dayInNumber: generateDayNumber(startDay),
      }
    }

    function generateCalendarMonthArray(y, m, sd) {
      date = new Date(y, m, 1)
      // get the offset date in week (month view)
      extra = (date.getDay() + 7 - sd) % 7
      date.setDate(date.getDate() - extra)

      var arrMonth = []
      var arrWeek = []
      // keep looping until next month comes
      while (true) {
        // reset the week array on new loop
        arrWeek = []
        for (var i = 0; i < 7; i++) {
          arrWeek.push(date.getDate())
          date.setDate(date.getDate() + 1)
        }
        arrMonth.push(arrWeek)
        // stop looping if the last week array contains next month date
        if (date.getMonth() !== month ) {
          break
        }
      }
      return arrMonth
    }

    function generateDayNumber(sd) {
      var dayInNumber = []
      var _startDay = sd
      for (var i = 0; i < 7; i++) {
        if(_startDay > 7) {
          _startDay = 0
        }
        dayInNumber.push(_startDay)
        _startDay += 1
      }
      return dayInNumber
    }

    function initialize() {
      if (typeof config === 'undefined') {
        config = {}
      }

      if (typeof config.startDay === 'undefined') {
        config.startDay = 'Mon'
      }

      if (typeof config.startDay === 'string') {
        config.startDay = config.startDay.toUpperCase()
      }

      if (config.startDay === 'SUN' || config.startDay === 'SUNDAY') {
        config.startDay = 0
      }

      if (config.startDay === 'MON' || config.startDay === 'MONDAY') {
        config.startDay = 1
      }

      if (config.startDay === 'SAT' || config.startDay === 'SATURDAY') {
        config.startDay = 6
      }

      // if startDay is undefined, return startDay as Sunday
      startDay = Number(config.startDay) || 0,

      today = new Date()
      // make January become 1 instead of 0
      month = config.month - 1|| today.getMonth(),
      year = config.year || today.getFullYear(),

      // all initialization data was success
      initSuccess = true
    }
  }

  window.calendar = calendar

})(window)
<commit_msg>small bug fix<commit_after>(function(window) {
  'use strict';

  function calendar(config) {

    var startDay,
    today,
    month,
    year,
    date,
    extra,
    daysInMonth,
    firstDayInMonth,
    initSuccess

    initialize()

    if (initSuccess) {
      return {
        data: generateCalendarMonthArray(year, month, startDay),
        // add index so January = 1
        month: month + 1,
        year: year,
        startDay: startDay,
        dayNumber: generateDayNumber(startDay),
      }
    }

    function generateCalendarMonthArray(y, m, sd) {
      console.log(y)
      date = new Date(y, m, 1)
      // get the offset date in week (month view)
      extra = (date.getDay() + 7 - sd) % 7
      date.setDate(date.getDate() - extra)

      var arrMonth = []
      var arrWeek = []
      // keep looping until next month comes
      while (true) {
        // reset the week array on new loop
        arrWeek = []
        for (var i = 0; i < 7; i++) {
          if (date.getMonth() !== month ) {
            arrWeek.push(0)
          } else {
            arrWeek.push(date.getDate())
          }
          date.setDate(date.getDate() + 1)
        }
        arrMonth.push(arrWeek)
        // stop looping if the last week array contains next month date
        if (date.getMonth() !== month ) {
          break
        }
      }
      return arrMonth
    }

    function generateDayNumber(sd) {
      var dayInNumber = []
      var _startDay = sd
      for (var i = 0; i < 7; i++) {
        if(_startDay > 7) {
          _startDay = 0
        }
        dayInNumber.push(_startDay)
        _startDay += 1
      }
      return dayInNumber
    }

    function initialize() {
      if (typeof config === 'undefined') {
        config = {}
      }

      if (typeof config.startDay === 'undefined') {
        config.startDay = 'Mon'
      }

      if (typeof config.startDay === 'string') {
        config.startDay = config.startDay.toUpperCase()
      }

      if (config.startDay === 'SUN' || config.startDay === 'SUNDAY') {
        config.startDay = 0
      }

      if (config.startDay === 'MON' || config.startDay === 'MONDAY') {
        config.startDay = 1
      }

      if (config.startDay === 'SAT' || config.startDay === 'SATURDAY') {
        config.startDay = 6
      }

      // if startDay is undefined, return startDay as Sunday
      startDay = Number(config.startDay) || 0

      today = new Date()
      month = config.month - 1
      year = config.year || today.getFullYear()

      if (typeof config.month === 'undefined') {
        month = today.getMonth()
      }

      // all initialization data was success
      initSuccess = true
    }
  }

  window.calendar = calendar

})(window)
<|endoftext|>


<commit_before>var get = Ember.get;

export default Ember.Component.extend({
  classNameBindings: [':tag-drop', 'tag::no-category', 'tags:has-drop','categoryStyle','tagClass'],
  categoryStyle: Discourse.computed.setting('category_style'), // match the category-drop style
  currentCategory: Em.computed.or('secondCategory', 'firstCategory'),
  showFilterByTag: Discourse.computed.setting('show_filter_by_tag'),
  showTagDropdown: Em.computed.and('showFilterByTag', 'tags'),
  tagId: null,

  tagName: 'li',

  tags: function() {
    if (this.siteSettings.tags_sort_alphabetically && Discourse.Site.currentProp('top_tags')) {
      return Discourse.Site.currentProp('top_tags').sort();
    } else {
      return Discourse.Site.currentProp('top_tags');
    }
  }.property('site.top_tags'),

  iconClass: function() {
    if (this.get('expanded')) { return "fa fa-caret-down"; }
    return "fa fa-caret-right";
  }.property('expanded'),

  tagClass: function() {
    if (this.get('tagId')) {
      return "tag-" + this.get('tagId');
    } else {
      return "tag_all";
    }
  }.property('tagId'),

  allTagsUrl: function() {
    if (this.get('currentCategory')) {
      return this.get('currentCategory.url') + "?allTags=1";
    } else {
      return "/";
    }
  }.property('firstCategory', 'secondCategory'),

  allTagsLabel: function() {
    return I18n.t("tagging.selector_all_tags");
  }.property('tag'),

  dropdownButtonClass: function() {
    var result = 'badge-category category-dropdown-button';
    if (Em.isNone(this.get('tag'))) {
      result += ' home';
    }
    return result;
  }.property('tag'),

  clickEventName: function() {
    return "click.tag-drop-" + (this.get('tag') || "all");
  }.property('tag'),

  actions: {
    expand: function() {
      var self = this;

      if(!this.get('renderTags')){
        this.set('renderTags',true);
        Em.run.next(function(){
          self.send('expand');
        });
        return;
      }

      if (this.get('expanded')) {
        this.close();
        return;
      }

      if (this.get('tags')) {
        this.set('expanded', true);
      }
      var $dropdown = this.$()[0];

      this.$('a[data-drop-close]').on('click.tag-drop', function() {
        self.close();
      });

      Em.run.next(function(){
        self.$('.cat a').add('html').on(self.get('clickEventName'), function(e) {
          var $target = $(e.target),
              closest = $target.closest($dropdown);

          if ($(e.currentTarget).hasClass('badge-wrapper')){
            self.close();
          }

          return ($(e.currentTarget).hasClass('badge-category') || (closest.length && closest[0] === $dropdown)) ? true : self.close();
        });
      });
    }
  },

  removeEvents: function(){
    $('html').off(this.get('clickEventName'));
    this.$('a[data-drop-close]').off('click.tag-drop');
  },

  close: function() {
    this.removeEvents();
    this.set('expanded', false);
  },

  willDestroyElement: function() {
    this.removeEvents();
  }

});
<commit_msg>Remove `Discourse.computed` now that we have it in stable<commit_after>import { setting } from 'discourse/lib/computed';

var get = Ember.get;

export default Ember.Component.extend({
  classNameBindings: [':tag-drop', 'tag::no-category', 'tags:has-drop','categoryStyle','tagClass'],
  categoryStyle: setting('category_style'), // match the category-drop style
  currentCategory: Em.computed.or('secondCategory', 'firstCategory'),
  showFilterByTag: setting('show_filter_by_tag'),
  showTagDropdown: Em.computed.and('showFilterByTag', 'tags'),
  tagId: null,

  tagName: 'li',

  tags: function() {
    if (this.siteSettings.tags_sort_alphabetically && Discourse.Site.currentProp('top_tags')) {
      return Discourse.Site.currentProp('top_tags').sort();
    } else {
      return Discourse.Site.currentProp('top_tags');
    }
  }.property('site.top_tags'),

  iconClass: function() {
    if (this.get('expanded')) { return "fa fa-caret-down"; }
    return "fa fa-caret-right";
  }.property('expanded'),

  tagClass: function() {
    if (this.get('tagId')) {
      return "tag-" + this.get('tagId');
    } else {
      return "tag_all";
    }
  }.property('tagId'),

  allTagsUrl: function() {
    if (this.get('currentCategory')) {
      return this.get('currentCategory.url') + "?allTags=1";
    } else {
      return "/";
    }
  }.property('firstCategory', 'secondCategory'),

  allTagsLabel: function() {
    return I18n.t("tagging.selector_all_tags");
  }.property('tag'),

  dropdownButtonClass: function() {
    var result = 'badge-category category-dropdown-button';
    if (Em.isNone(this.get('tag'))) {
      result += ' home';
    }
    return result;
  }.property('tag'),

  clickEventName: function() {
    return "click.tag-drop-" + (this.get('tag') || "all");
  }.property('tag'),

  actions: {
    expand: function() {
      var self = this;

      if(!this.get('renderTags')){
        this.set('renderTags',true);
        Em.run.next(function(){
          self.send('expand');
        });
        return;
      }

      if (this.get('expanded')) {
        this.close();
        return;
      }

      if (this.get('tags')) {
        this.set('expanded', true);
      }
      var $dropdown = this.$()[0];

      this.$('a[data-drop-close]').on('click.tag-drop', function() {
        self.close();
      });

      Em.run.next(function(){
        self.$('.cat a').add('html').on(self.get('clickEventName'), function(e) {
          var $target = $(e.target),
              closest = $target.closest($dropdown);

          if ($(e.currentTarget).hasClass('badge-wrapper')){
            self.close();
          }

          return ($(e.currentTarget).hasClass('badge-category') || (closest.length && closest[0] === $dropdown)) ? true : self.close();
        });
      });
    }
  },

  removeEvents: function(){
    $('html').off(this.get('clickEventName'));
    this.$('a[data-drop-close]').off('click.tag-drop');
  },

  close: function() {
    this.removeEvents();
    this.set('expanded', false);
  },

  willDestroyElement: function() {
    this.removeEvents();
  }

});
<|endoftext|>


<commit_before>define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) {
"use strict";

var oop = require("../lib/oop");
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;

var DocCommentHighlightRules = function() {
    this.$rules = {
        "start" : [ {
            token : "comment.doc.tag",
            regex : "@[\\w\\d_]+" // TODO: fix email addresses
        },
        DocCommentHighlightRules.getTagRule(),
        {
            defaultToken : "comment.doc",
            caseInsensitive: true
        }]
    };
};

oop.inherits(DocCommentHighlightRules, TextHighlightRules);

DocCommentHighlightRules.getTagRule = function(start) {
    return {
        token : "comment.doc.tag.storage.type",
        regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b"
    };
}

DocCommentHighlightRules.getStartRule = function(start) {
    return {
        token : "comment.doc", // doc comment
        regex : "\\/\\*(?=\\*)",
        next  : start
    };
};

DocCommentHighlightRules.getEndRule = function (start) {
    return {
        token : "comment.doc", // closing comment
        regex : "\\*\\/",
        next  : start
    };
};

exports.DocCommentHighlightRules = DocCommentHighlightRules;

});

define("ace/mode/haxe_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) {
"use strict";

var oop = require("../lib/oop");

var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;

var HaxeHighlightRules = function() {

    var keywords = (
        "break|case|cast|catch|class|continue|default|else|enum|extends|for|function|if|implements|import|in|inline|interface|new|override|package|private|public|return|static|super|switch|this|throw|trace|try|typedef|untyped|var|while|Array|Void|Bool|Int|UInt|Float|Dynamic|String|List|Hash|IntHash|Error|Unknown|Type|Std"
    );

    var buildinConstants = (
        "null|true|false"
    );

    var keywordMapper = this.createKeywordMapper({
        "variable.language": "this",
        "keyword": keywords,
        "constant.language": buildinConstants
    }, "identifier");

    this.$rules = {
        "start" : [
            {
                token : "comment",
                regex : "\\/\\/.*$"
            },
            DocCommentHighlightRules.getStartRule("doc-start"),
            {
                token : "comment", // multi line comment
                regex : "\\/\\*",
                next : "comment"
            }, {
                token : "string.regexp",
                regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"
            }, {
                token : "string", // single line
                regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
            }, {
                token : "string", // single line
                regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
            }, {
                token : "constant.numeric", // hex
                regex : "0[xX][0-9a-fA-F]+\\b"
            }, {
                token : "constant.numeric", // float
                regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
            }, {
                token : "constant.language.boolean",
                regex : "(?:true|false)\\b"
            }, {
                token : keywordMapper,
                regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
            }, {
                token : "keyword.operator",
                regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"
            }, {
                token : "punctuation.operator",
                regex : "\\?|\\:|\\,|\\;|\\."
            }, {
                token : "paren.lparen",
                regex : "[[({<]"
            }, {
                token : "paren.rparen",
                regex : "[\\])}>]"
            }, {
                token : "text",
                regex : "\\s+"
            }
        ],
        "comment" : [
            {
                token : "comment", // closing comment
                regex : ".*?\\*\\/",
                next : "start"
            }, {
                token : "comment", // comment spanning whole line
                regex : ".+"
            }
        ]
    };

    this.embedRules(DocCommentHighlightRules, "doc-",
        [ DocCommentHighlightRules.getEndRule("start") ]);
};

oop.inherits(HaxeHighlightRules, TextHighlightRules);

exports.HaxeHighlightRules = HaxeHighlightRules;
});

define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) {
"use strict";

var Range = require("../range").Range;

var MatchingBraceOutdent = function() {};

(function() {

    this.checkOutdent = function(line, input) {
        if (! /^\s+$/.test(line))
            return false;

        return /^\s*\}/.test(input);
    };

    this.autoOutdent = function(doc, row) {
        var line = doc.getLine(row);
        var match = line.match(/^(\s*\})/);

        if (!match) return 0;

        var column = match[1].length;
        var openBracePos = doc.findMatchingBracket({row: row, column: column});

        if (!openBracePos || openBracePos.row == row) return 0;

        var indent = this.$getIndent(doc.getLine(openBracePos.row));
        doc.replace(new Range(row, 0, row, column-1), indent);
    };

    this.$getIndent = function(line) {
        return line.match(/^\s*/)[0];
    };

}).call(MatchingBraceOutdent.prototype);

exports.MatchingBraceOutdent = MatchingBraceOutdent;
});

define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) {
"use strict";

var oop = require("../../lib/oop");
var Behaviour = require("../behaviour").Behaviour;
var TokenIterator = require("../../token_iterator").TokenIterator;
var lang = require("../../lib/lang");

var SAFE_INSERT_IN_TOKENS =
    ["text", "paren.rparen", "punctuation.operator"];
var SAFE_INSERT_BEFORE_TOKENS =
    ["text", "paren.rparen", "punctuation.operator", "comment"];

var context;
var contextCache = {};
var initContext = function(editor) {
    var id = -1;
    if (editor.multiSelect) {
        id = editor.selection.index;
        if (contextCache.rangeCount != editor.multiSelect.rangeCount)
            contextCache = {rangeCount: editor.multiSelect.rangeCount};
    }
    if (contextCache[id])
        return context = contextCache[id];
    context = contextCache[id] = {
        autoInsertedBrackets: 0,
        autoInsertedRow: -1,
        autoInsertedLineEnd: "",
        maybeInsertedBrackets: 0,
        maybeInsertedRow: -1,
        maybeInsertedLineStart: "",
        maybeInsertedLineEnd: ""
    };
};

var getWrapped = function(selection, selected, opening, closing) {
    var rowDiff = selection.end.row - selection.start.row;
    return {
        text: opening + selected + closing,
        selection: [
                0,
                selection.start.column + 1,
                rowDiff,
                selection.end.column + (rowDiff ? 0 : 1)
            ]
    };
};

var CstyleBehaviour = function() {
    this.add("braces", "insertion", function(state, action, editor, session, text) {
        var cursor = editor.getCursorPosition();
        var line = session.doc.getLine(cursor.row);
        if (text == '{') {
            initContext(editor);
            var selection = editor.getSelectionRange();
            var selected = session.doc.getTextRange(selection);
            if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
                return getWrapped(selection, selected, '{', '}');
            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
                if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) {
                    CstyleBehaviour.recordAutoInsert(editor, session, "}");
                    return {
                        text: '{}',
                        selection: [1, 1]
                    };
                } else {
                    CstyleBehaviour.recordMaybeInsert(editor, session, "{");
                    return {
                        text: '{',
                        selection: [1, 1]
                    };
                }
            }
        } else if (text == '}') {
            initContext(editor);
            var rightChar = line.substring(cursor.column, cursor.column + 1);
            if (rightChar == '}') {
                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
                    CstyleBehaviour.popAutoInsertedClosing();
                    return {
                        text: '',
                        selection: [1, 1]
                    };
                }
            }
        } else if (text == "\n" || text == "\r\n") {
            initContext(editor);
            var closing = "";
            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
                closing = lang.stringRepeat("}", context.maybeInsertedBrackets);
                CstyleBehaviour.clearMaybeInsertedClosing();
            }
            var rightChar = line.substring(cursor.column, cursor.column + 1);
            if (rightChar === '}') {
                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');
                if (!openBracePos)
                     return null;
                var next_indent = this.$getIndent(session.getLine(openBracePos.row));
            } else if (closing) {
                var next_indent = this.$getIndent(line);
            } else {
                CstyleBehaviour.clearMaybeInsertedClosing();
                return;
            }
            var indent = next_indent + session.getTabString();

            return {
                text: '\n' + indent + '\n' + next_indent + closing,
                selection: [1, indent.length, 1, indent.length]
            };
        } else {
            CstyleBehaviour.clearMaybeInsertedClosing();
        }
    });

    this.add("braces", "deletion", function(state, action, editor, session, range) {
        var selected = session.doc.getTextRange(range);
        if (!range.isMultiLine() && selected == '{') {
            initContext(editor);
            var line = session.doc.getLine(range.start.row);
            var rightChar = line.substring(range.end.column, range.end.column + 1);
            if (rightChar == '}') {
                range.end.column++;
                return range;
            } else {
                context.maybeInsertedBrackets--;
            }
        }
    });

    this.add("parens", "insertion", function(state, action, editor, session, text) {
        if (text == '(') {
            initContext(editor);
            var selection = editor.getSelectionRange();
            var selected = session.doc.getTextRange(selection);
            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
                return getWrapped(selection, selected, '(', ')');
            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
                CstyleBehaviour.recordAutoInsert(editor, session, ")");
                return {
                    text: '()',
                    selection: [1, 1]
                };
            }
        } else if (text == ')') {
            initContext(editor);
            var cursor = editor.getCursorPosition();
            var line = session.doc.getLine(cursor.row);
            var rightChar = line.substring(cursor.column, cursor.column + 1);
            if (rightChar == ')') {
                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
                    CstyleBehaviour.popAutoInsertedClosing();
                    return {
                        text: '',
                        selection: [1, 1]
                    };
                }
            }
        }
    });

    this.add("parens", "deletion", function(state, action, editor, session, range) {
        var selected = session.doc.getTextRange(range);
        if (!range.isMultiLine() && selected == '(') {
            initContext(editor);
            var line = session.doc.getLine(range.start.row);
            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
            if (rightChar == ')') {
                range.end.column++;
                return range;
            }
        }
    });

    this.add("brackets", "insertion", function(state, action, editor, session, text) {
        if (text == '[') {
            initContext(editor);
            var selection = editor.getSelectionRange();
            var selected = session.doc.getTextRange(selection);
            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
                return getWrapped(selection, selected, '[', ']');
            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
                CstyleBehaviour.recordAutoInsert(editor, session, "]");
                return {
                    text: '[]',
                    selection: [1, 1]
                };
            }
        } else if (text == ']') {
            initContext(editor);
            var cursor = editor.getCursorPosition();
            var line = session.doc.getLine(cursor.row);
            var rightChar = line.substring(cursor.column, cursor.column + 1);
            if (rightChar == ']') {
                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
                    CstyleBehaviour.popAutoInsertedClosing();
                    return {
                        text: '',
                        selection: [1, 1]
                    };
                }
            }
        }
    });

    this.add("brackets", "deletion", function(state, action, editor, session, range) {
        var selected = session.doc.getTextRange(range);
        if (!range.isMultiLine() && selected == '[') {
            initContext(editor);
            var line = session.doc.getLine(range.start.row);
            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
            if (rightChar == ']') {
                range.end.column++;
                return range;
            }
        }
    });

    this.add("string_dquotes", "insertion", function(state, action, editor, session, text) {
        if (text == '"' || text == "'") {
            initContext(editor);
            var quote = text;
            var selection = editor.getSelectionRange();
            var selected = session.doc.getTextRange(selection);
            if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
                return getWrapped(selection, selected, quote, quote);
            } else if (!selected) {
                var cursor = editor.getCursorPosition();
                var line = session.doc.getLine(cursor.row);
                var leftChar = line.substring(cursor.column-1, cursor.column);
                var rightChar = line.substring(cursor.column, cursor.column + 1);

                var token = session.getTokenAt(cursor.row, cursor.column);
                var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);
                if (leftChar == "\\" && token && /escape/.test(token.type))
                    return null;

                var stringBefore = token && /string|escape/.test(token.type);
                var stringAfter = !rightToken || /string|escape/.test(rightToken.type);

                var pair;
                if (rightChar == quote) {
                    pair = stringBefore !== stringAfter;
                } else {
                    if (stringBefore && !stringAfter)
                        return null; // wrap string with different quote
                    if (stringBefore && stringAfter)
                        return null; // do not pair quotes inside strings
                    var wordRe = session.$mode.tokenRe;
                    wordRe.lastIndex = 0;
                    var isWordBefore = wordRe.test(leftChar);
                    wordRe.lastIndex = 0;
                    var isWordAfter = wordRe.test(leftChar);
                    if (isWordBefore || isWordAfter)
                        return null; // before or after alphanumeric
                    if (rightChar && !/[\s;,.})\]\\]/.test(rightChar))
                        return null; // there is rightChar and it isn't closing
                    pair = true;
                }
                return {
                    text: pair ? quote + quote : "",
                    selection: [1,1]
                };
            }
        }
    });

    this.add("string_dquotes", "deletion", function(state, action, editor, session, range) {
        var selected = session.doc.getTextRange(range);
        if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
            initContext(editor);
            var line = session.doc.getLine(range.start.row);
            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
            if (rightChar == selected) {
                range.end.column++;
                return range;
            }
        }
    });

};

CstyleBehaviour.isSaneInsertion = function(editor, session) {
    var cursor = editor.getCursorPosition();
    var iterator = new TokenIterator(session, cursor.row, cursor.column);
    if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
        var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
        if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
            return false;
    }
    iterator.stepForward();
    return iterator.getCurrentTokenRow() !== cursor.row ||
        this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
};

CstyleBehaviour.$matchTokenType = function(token, types) {
    return types.indexOf(token.type || token) > -1;
};

CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
    var cursor = editor.getCursorPosition();
    var line = session.doc.getLine(cursor.row);
    if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))
        context.autoInsertedBrackets = 0;
    context.autoInsertedRow = cursor.row;
    context.autoInsertedLineEnd = bracket + line.substr(cursor.column);
    context.autoInsertedBrackets++;
};

CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
    var cursor = editor.getCursorPosition();
    var line = session.doc.getLine(cursor.row);
    if (!this.isMaybeInsertedClosing(cursor, line))
        context.maybeInsertedBrackets = 0;
    context.maybeInsertedRow = cursor.row;
    context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
    context.maybeInsertedLineEnd = line.substr(cursor.column);
    context.maybeInsertedBrackets++;
};

CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
    return context.autoInsertedBrackets > 0 &&
        cursor.row === context.autoInsertedRow &&
        bracket === context.autoInsertedLineEnd[0] &&
        line.substr(cursor.column) === context.autoInsertedLineEnd;
};

CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
    return context.maybeInsertedBrackets > 0 &&
        cursor.row === context.maybeInsertedRow &&
        line.substr(cursor.column) === context.maybeInsertedLineEnd &&
        line.substr(0, cursor.column) == context.maybeInsertedLineStart;
};

CstyleBehaviour.popAutoInsertedClosing = function() {
    context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);
    context.autoInsertedBrackets--;
};

CstyleBehaviour.clearMaybeInsertedClosing = function() {
    if (context) {
        context.maybeInsertedBrackets = 0;
        context.maybeInsertedRow = -1;
    }
};

oop.inherits(CstyleBehaviour, Behaviour);

exports.CstyleBehaviour = CstyleBehaviour;
});

define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) {
"use strict";

var oop = require("../../lib/oop");
var Range = require("../../range").Range;
var BaseFoldMode = require("./fold_mode").FoldMode;

var FoldMode = exports.FoldMode = function(commentRegex) {
    if (commentRegex) {
        this.foldingStartMarker = new RegExp(
            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
        );
        this.foldingStopMarker = new RegExp(
            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
        );
    }
};
oop.inherits(FoldMode, BaseFoldMode);

(function() {

    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
    this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/;
    this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/;
    this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/;
    this._getFoldWidgetBase = this.getFoldWidget;
    this.getFoldWidget = function(session, foldStyle, row) {
        var line = session.getLine(row);

        if (this.singleLineBlockCommentRe.test(line)) {
            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))
                return "";
        }

        var fw = this._getFoldWidgetBase(session, foldStyle, row);

        if (!fw && this.startRegionRe.test(line))
            return "start"; // lineCommentRegionStart

        return fw;
    };

    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {
        var line = session.getLine(row);

        if (this.startRegionRe.test(line))
            return this.getCommentRegionBlock(session, line, row);

        var match = line.match(this.foldingStartMarker);
        if (match) {
            var i = match.index;

            if (match[1])
                return this.openingBracketBlock(session, match[1], row, i);

            var range = session.getCommentFoldRange(row, i + match[0].length, 1);

            if (range && !range.isMultiLine()) {
                if (forceMultiline) {
                    range = this.getSectionRange(session, row);
                } else if (foldStyle != "all")
                    range = null;
            }

            return range;
        }

        if (foldStyle === "markbegin")
            return;

        var match = line.match(this.foldingStopMarker);
        if (match) {
            var i = match.index + match[0].length;

            if (match[1])
                return this.closingBracketBlock(session, match[1], row, i);

            return session.getCommentFoldRange(row, i, -1);
        }
    };

    this.getSectionRange = function(session, row) {
        var line = session.getLine(row);
        var startIndent = line.search(/\S/);
        var startRow = row;
        var startColumn = line.length;
        row = row + 1;
        var endRow = row;
        var maxRow = session.getLength();
        while (++row < maxRow) {
            line = session.getLine(row);
            var indent = line.search(/\S/);
            if (indent === -1)
                continue;
            if  (startIndent > indent)
                break;
            var subRange = this.getFoldWidgetRange(session, "all", row);

            if (subRange) {
                if (subRange.start.row <= startRow) {
                    break;
                } else if (subRange.isMultiLine()) {
                    row = subRange.end.row;
                } else if (startIndent == indent) {
                    break;
                }
            }
            endRow = row;
        }

        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);
    };
    this.getCommentRegionBlock = function(session, line, row) {
        var startColumn = line.search(/\s*$/);
        var maxRow = session.getLength();
        var startRow = row;

        var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/;
        var depth = 1;
        while (++row < maxRow) {
            line = session.getLine(row);
            var m = re.exec(line);
            if (!m) continue;
            if (m[1]) depth--;
            else depth++;

            if (!depth) break;
        }

        var endRow = row;
        if (endRow > startRow) {
            return new Range(startRow, startColumn, endRow, line.length);
        }
    };

}).call(FoldMode.prototype);

});

define("ace/mode/haxe",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/haxe_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) {
"use strict";

var oop = require("../lib/oop");
var TextMode = require("./text").Mode;
var HaxeHighlightRules = require("./haxe_highlight_rules").HaxeHighlightRules;
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
var CStyleFoldMode = require("./folding/cstyle").FoldMode;

var Mode = function() {
    this.HighlightRules = HaxeHighlightRules;

    this.$outdent = new MatchingBraceOutdent();
    this.$behaviour = new CstyleBehaviour();
    this.foldingRules = new CStyleFoldMode();
};
oop.inherits(Mode, TextMode);

(function() {
    this.lineCommentStart = "//";
    this.blockComment = {start: "/*", end: "*/"};

    this.getNextLineIndent = function(state, line, tab) {
        var indent = this.$getIndent(line);

        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
        var tokens = tokenizedLine.tokens;

        if (tokens.length && tokens[tokens.length-1].type == "comment") {
            return indent;
        }

        if (state == "start") {
            var match = line.match(/^.*[\{\(\[]\s*$/);
            if (match) {
                indent += tab;
            }
        }

        return indent;
    };

    this.checkOutdent = function(state, line, input) {
        return this.$outdent.checkOutdent(line, input);
    };

    this.autoOutdent = function(state, doc, row) {
        this.$outdent.autoOutdent(doc, row);
    };

    this.$id = "ace/mode/haxe";
}).call(Mode.prototype);

exports.Mode = Mode;
});
<commit_msg>Update tmp/bower_components/ace-builds/src/mode-haxe.js<commit_after><|endoftext|>


<commit_before>/**
 * @file TriggerPop component
 * @author liangxiaojun(liangxiaojun@derbysoft.com)
 */

import React, {Component, Fragment} from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import eventsOn from 'dom-helpers/events/on';
import eventsOff from 'dom-helpers/events/off';

import Pop from '../_Pop';
import Paper from '../Paper';
import Theme from '../Theme';

import Position from '../_statics/Position';

import Event from '../_vendors/Event';
import Util from '../_vendors/Util';
import TriggerPopCalculation from '../_vendors/TriggerPopCalculation';
import Dom from '../_vendors/Dom';

class TriggerPop extends Component {

    static Position = Position;
    static Theme = Theme;

    constructor(props, ...restArgs) {

        super(props, ...restArgs);

        // closest scrollable element of trigger
        this.scrollEl = null;

    }

    /**
     * public
     */
    getEl = () => {
        return this.refs.pop && this.refs.pop.getEl();
    };

    /**
     * reset pop position
     * @param transitionEl
     */
    resetPosition = (transitionEl = this.refs.pop.getEl()) => {

        const {parentEl, triggerEl, position, isTriggerPositionFixed} = this.props;

        TriggerPopCalculation.setStyle(parentEl, triggerEl, transitionEl, this.getScrollEl(),
            position, isTriggerPositionFixed);

    };

    /**
     * find the closest scrollable parent element
     * @param triggerEl
     * @returns {*}
     */
    getScrollEl = (triggerEl = this.props.triggerEl) => {

        if (this.props.scrollEl) {
            return this.props.scrollEl;
        }

        if (this.scrollEl) {
            return this.scrollEl;
        }

        const scrollEl = Dom.getClosestScrollable(triggerEl);
        return this.scrollEl = scrollEl || document.body;

    };

    /**
     * scroll event callback
     */
    handleScroll = () => {
        this.resetPosition();
    };

    /**
     * add scroll event
     * @param scrollEl
     */
    addWatchScroll = (scrollEl = this.getScrollEl()) => {

        const {triggerEl} = this.props;

        if (!triggerEl) {
            return;
        }

        scrollEl && eventsOn(scrollEl, 'scroll', this.handleScroll);

    };

    /**
     * remove scroll event
     * @param scrollEl
     */
    removeWatchScroll = (scrollEl = this.getScrollEl()) => {
        scrollEl && eventsOff(scrollEl, 'scroll', this.handleScroll);
    };

    componentDidUpdate(prevProps) {
        if (this.props.shouldFollowScroll && !prevProps.visible && this.props.visible) {
            this.addWatchScroll();
        } else if (prevProps.shouldFollowScroll && prevProps.visible && !this.props.visible) {
            this.removeWatchScroll();
        }
    }

    render() {

        const {

                children,

                className, contentClassName, theme,
                hasTriangle, triangle, position, isAnimated,

                // not passing down these props
                isEscClose, isBlurClose, shouldPreventContainerScroll,
                isTriggerPositionFixed, shouldFollowScroll,

                ...restProps

            } = this.props,

            popClassName = classNames('trigger-pop', {
                'trigger-pop-has-triangle': hasTriangle,
                [`theme-${theme}`]: theme,
                [`trigger-pop-${position}`]: position,
                'trigger-pop-animated': isAnimated,
                [className]: className
            }),

            popContentClassName = classNames('trigger-pop-content', {
                [contentClassName]: contentClassName
            });

        return (
            <Pop {...restProps}
                 ref="pop"
                 className={popClassName}
                 container={<Paper></Paper>}
                 isAnimated={isAnimated}
                 onWheel={e => Event.wheelHandler(e, this.props)}
                 resetPosition={this.resetPosition}>
                {
                    popEl => (
                        <Fragment>

                            {
                                hasTriangle ?

                                        {triangle}

                                    :
                                    null
                            }

 Event.wheelHandler(e, this.props)}>
                                {typeof children === 'function' ? children(popEl) : children}

                        </Fragment>
                    )
                }
            </Pop>
        );

    }

}

TriggerPop.propTypes = {

    /**
     * The CSS class name of the root element.
     */
    className: PropTypes.string,

    /**
     * The CSS class name of the content element.
     */
    contentClassName: PropTypes.string,

    modalClassName: PropTypes.string,

    /**
     * Override the styles of the root element.
     */
    style: PropTypes.object,

    /**
     * The trigger pop theme.Can be primary,highlight,success,warning,error.
     */
    theme: PropTypes.oneOf(Util.enumerateValue(Theme)),

    parentEl: PropTypes.object,

    /**
     * This is the DOM element that will be used to set the position of the trigger pop.
     */
    triggerEl: PropTypes.object,

    /**
     * If true,the trigger pop is visible.
     */
    visible: PropTypes.bool,

    /**
     * If true,the trigger pop will have a triangle on the top of the DOM element.
     */
    hasTriangle: PropTypes.bool,

    triangle: PropTypes.element,

    showModal: PropTypes.bool,

    /**
     * The trigger pop alignment.The value can be Popup.Position.LEFT or Popup.Position.RIGHT.
     */
    position: PropTypes.oneOf(Util.enumerateValue(Position)),

    /**
     * If true,popup will have animation effects.
     */
    isAnimated: PropTypes.bool,

    /**
     * The depth of Paper component.
     */
    depth: PropTypes.number,

    isBlurClose: PropTypes.bool,
    isEscClose: PropTypes.bool,
    shouldPreventContainerScroll: PropTypes.bool,
    isTriggerPositionFixed: PropTypes.bool,

    shouldFollowScroll: PropTypes.bool,
    scrollEl: PropTypes.object,

    resetPositionWait: PropTypes.number,

    /**
     * The function of popup render.
     */
    onRender: PropTypes.func,

    /**
     * The function of popup rendered.
     */
    onRendered: PropTypes.func,

    /**
     * The function of popup destroy.
     */
    onDestroy: PropTypes.func,

    /**
     * The function of popup destroyed.
     */
    onDestroyed: PropTypes.func,

    /**
     * Callback function fired when wrapper wheeled.
     */
    onWheel: PropTypes.func

};

TriggerPop.defaultProps = {

    theme: Theme.DEFAULT,
    parentEl: document.body,
    depth: 3,

    visible: false,
    hasTriangle: true,
    triangle:

,
    showModal: false,
    position: Position.BOTTOM,
    isAnimated: true,

    isBlurClose: true,
    isEscClose: true,
    shouldPreventContainerScroll: true,
    isTriggerPositionFixed: false,
    shouldFollowScroll: false,
    resetPositionWait: 250

};

export default TriggerPop;
<commit_msg>update TriggerPop<commit_after>/**
 * @file TriggerPop component
 * @author liangxiaojun(liangxiaojun@derbysoft.com)
 */

import React, {Component, Fragment} from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import eventsOn from 'dom-helpers/events/on';
import eventsOff from 'dom-helpers/events/off';

import Pop from '../_Pop';
import Paper from '../Paper';
import Theme from '../Theme';

import Position from '../_statics/Position';

import Event from '../_vendors/Event';
import Util from '../_vendors/Util';
import TriggerPopCalculation from '../_vendors/TriggerPopCalculation';
import Dom from '../_vendors/Dom';

class TriggerPop extends Component {

    static Position = Position;
    static Theme = Theme;

    constructor(props, ...restArgs) {

        super(props, ...restArgs);

        // closest scrollable element of trigger
        this.scrollEl = null;

    }

    /**
     * public
     */
    getEl = () => {
        return this.refs.pop && this.refs.pop.getEl();
    };

    /**
     * reset pop position
     * @param transitionEl
     */
    resetPosition = (transitionEl = this.refs.pop.getEl()) => {

        const {parentEl, triggerEl, position} = this.props;

        TriggerPopCalculation.setStyle(parentEl, triggerEl, transitionEl, this.getScrollEl(), position);

    };

    /**
     * find the closest scrollable parent element
     * @param triggerEl
     * @returns {*}
     */
    getScrollEl = (triggerEl = this.props.triggerEl) => {

        if (this.props.scrollEl) {
            return this.props.scrollEl;
        }

        if (this.scrollEl) {
            return this.scrollEl;
        }

        const scrollEl = Dom.getClosestScrollable(triggerEl);
        return this.scrollEl = scrollEl || document.body;

    };

    /**
     * scroll event callback
     */
    handleScroll = () => {
        this.resetPosition();
    };

    /**
     * add scroll event
     * @param scrollEl
     */
    addWatchScroll = (scrollEl = this.getScrollEl()) => {

        const {triggerEl} = this.props;

        if (!triggerEl) {
            return;
        }

        scrollEl && eventsOn(scrollEl, 'scroll', this.handleScroll);

    };

    /**
     * remove scroll event
     * @param scrollEl
     */
    removeWatchScroll = (scrollEl = this.getScrollEl()) => {
        scrollEl && eventsOff(scrollEl, 'scroll', this.handleScroll);
    };

    componentDidUpdate(prevProps) {
        if (this.props.shouldFollowScroll && !prevProps.visible && this.props.visible) {
            this.addWatchScroll();
        } else if (prevProps.shouldFollowScroll && prevProps.visible && !this.props.visible) {
            this.removeWatchScroll();
        }
    }

    render() {

        const {

                children,

                className, contentClassName, theme,
                hasTriangle, triangle, position, isAnimated,

                // not passing down these props
                isEscClose, isBlurClose, shouldPreventContainerScroll,
                shouldFollowScroll,

                ...restProps

            } = this.props,

            popClassName = classNames('trigger-pop', {
                'trigger-pop-has-triangle': hasTriangle,
                [`theme-${theme}`]: theme,
                [`trigger-pop-${position}`]: position,
                'trigger-pop-animated': isAnimated,
                [className]: className
            }),

            popContentClassName = classNames('trigger-pop-content', {
                [contentClassName]: contentClassName
            });

        return (
            <Pop {...restProps}
                 ref="pop"
                 className={popClassName}
                 container={<Paper></Paper>}
                 isAnimated={isAnimated}
                 onWheel={e => Event.wheelHandler(e, this.props)}
                 resetPosition={this.resetPosition}>
                {
                    popEl => (
                        <Fragment>

                            {
                                hasTriangle ?

                                        {triangle}

                                    :
                                    null
                            }

 Event.wheelHandler(e, this.props)}>
                                {typeof children === 'function' ? children(popEl) : children}

                        </Fragment>
                    )
                }
            </Pop>
        );

    }

}

TriggerPop.propTypes = {

    /**
     * The CSS class name of the root element.
     */
    className: PropTypes.string,

    /**
     * The CSS class name of the content element.
     */
    contentClassName: PropTypes.string,

    modalClassName: PropTypes.string,

    /**
     * Override the styles of the root element.
     */
    style: PropTypes.object,

    /**
     * The trigger pop theme.Can be primary,highlight,success,warning,error.
     */
    theme: PropTypes.oneOf(Util.enumerateValue(Theme)),

    parentEl: PropTypes.object,

    /**
     * This is the DOM element that will be used to set the position of the trigger pop.
     */
    triggerEl: PropTypes.object,

    /**
     * If true,the trigger pop is visible.
     */
    visible: PropTypes.bool,

    /**
     * If true,the trigger pop will have a triangle on the top of the DOM element.
     */
    hasTriangle: PropTypes.bool,

    triangle: PropTypes.element,

    showModal: PropTypes.bool,

    /**
     * The trigger pop alignment.The value can be Popup.Position.LEFT or Popup.Position.RIGHT.
     */
    position: PropTypes.oneOf(Util.enumerateValue(Position)),

    /**
     * If true,popup will have animation effects.
     */
    isAnimated: PropTypes.bool,

    /**
     * The depth of Paper component.
     */
    depth: PropTypes.number,

    isBlurClose: PropTypes.bool,
    isEscClose: PropTypes.bool,
    shouldPreventContainerScroll: PropTypes.bool,

    shouldFollowScroll: PropTypes.bool,
    scrollEl: PropTypes.object,

    resetPositionWait: PropTypes.number,

    /**
     * The function of popup render.
     */
    onRender: PropTypes.func,

    /**
     * The function of popup rendered.
     */
    onRendered: PropTypes.func,

    /**
     * The function of popup destroy.
     */
    onDestroy: PropTypes.func,

    /**
     * The function of popup destroyed.
     */
    onDestroyed: PropTypes.func,

    /**
     * Callback function fired when wrapper wheeled.
     */
    onWheel: PropTypes.func

};

TriggerPop.defaultProps = {

    theme: Theme.DEFAULT,
    parentEl: document.body,
    depth: 3,

    visible: false,
    hasTriangle: true,
    triangle:

,
    showModal: false,
    position: Position.BOTTOM,
    isAnimated: true,

    isBlurClose: true,
    isEscClose: true,
    shouldPreventContainerScroll: true,
    shouldFollowScroll: false,
    resetPositionWait: 250

};

export default TriggerPop;
<|endoftext|>


<commit_before>define(['mac/bitpacking'], function(bitpacking) {

  'use strict';

  return function(resource) {
    resource.getUnpackedData = function() {
      return bitpacking.unpackBits(this.data.buffer, this.data.byteOffset, this.data.byteLength);
    };
  };

});
<commit_msg>Change BITD to new loader format<commit_after>define(['mac/bitpacking'], function(bitpacking) {

  'use strict';

  return function(item) {
    item.getUnpackedData = function() {
      return this.getBytes().then(function(bytes) {
        return bitpacking.unpackBits(bytes.buffer, bytes.byteOffset, bytes.byteLength);
      });
    };
  };

});
<|endoftext|>