Merge pull request #2552 from consul/budgets_map_improvements

Backport: Budgets map improvements
This commit is contained in:
Raimond Garcia
2018-03-27 17:49:23 +02:00
committed by GitHub
6 changed files with 48 additions and 19 deletions

View File

@@ -70,9 +70,18 @@ App.Map =
$(zoomInputSelector).val ''
return
contentPopup = (title,investment,budget) ->
content = "<a href='/budgets/#{budget}/investments/#{investment}'>#{title}</a>"
return content
openMarkerPopup = (e) ->
marker = e.target
$.ajax 'investments/' + marker.options['id'] + '/json_data',
type: 'GET'
dataType: 'json'
success: (data) ->
e.target.bindPopup(getPopupContent(data)).openPopup()
getPopupContent = (data) ->
content = "<a href='/budgets/#{data['budget_id']}/investments/#{data['investment_id']}'>#{data['investment_title']}</a>"
return content
mapCenterLatLng = new (L.LatLng)(mapCenterLatitude, mapCenterLongitude)
map = L.map(element.id).setView(mapCenterLatLng, zoom)
@@ -88,8 +97,11 @@ App.Map =
if addMarkerInvestments
for i in addMarkerInvestments
add_marker=createMarker(i.lat , i.long)
add_marker.bindPopup(contentPopup(i.investment_title, i.investment_id, i.budget_id))
if App.Map.validCoordinates(i)
marker = createMarker(i.lat, i.long)
marker.options['id'] = i.id
marker.on 'click', openMarkerPopup
toogleMap: ->
$('.map').toggle()

View File

@@ -4,10 +4,11 @@ module Budgets
include CommentableActions
include FlagActions
before_action :authenticate_user!, except: [:index, :show]
before_action :authenticate_user!, except: [:index, :show, :json_data]
load_and_authorize_resource :budget
load_and_authorize_resource :investment, through: :budget, class: "Budget::Investment"
load_and_authorize_resource :budget, except: :json_data
load_and_authorize_resource :investment, through: :budget, class: "Budget::Investment",
except: :json_data
before_action -> { flash.now[:notice] = flash[:notice].html_safe if flash[:html_safe] && flash[:notice] }
before_action :load_ballot, only: [:index, :show]
@@ -16,6 +17,8 @@ module Budgets
before_action :load_categories, only: [:index, :new, :create]
before_action :set_default_budget_filter, only: :index
skip_authorization_check only: :json_data
feature_flag :budgets
has_orders %w{most_voted newest oldest}, only: :show
@@ -79,6 +82,19 @@ module Budgets
super
end
def json_data
investment = Budget::Investment.find(params[:id])
data = {
investment_id: investment.id,
investment_title: investment.title,
budget_id: investment.budget.id
}.to_json
respond_to do |format|
format.json { render json: data }
end
end
private
def resource_model

View File

@@ -65,15 +65,6 @@ module BudgetsHelper
end
def current_budget_map_locations
current_budget.investments.map do |investment|
next unless investment.map_location.present?
{
lat: investment.map_location.latitude,
long: investment.map_location.longitude,
investment_title: investment.title,
investment_id: investment.id,
budget_id: current_budget.id
}
end.flatten.compact
MapLocation.where(investment_id: current_budget.investments).map { |l| l.json_data }
end
end

View File

@@ -21,7 +21,7 @@ module Abilities
can [:search, :read], Annotation
can [:read], Budget
can [:read], Budget::Group
can [:read, :print], Budget::Investment
can [:read, :print, :json_data], Budget::Investment
can :read_results, Budget, phase: "finished"
can :new, DirectMessage
can [:read, :debate, :draft_publication, :allegations, :result_publication, :proposals], Legislation::Process, published: true

View File

@@ -9,4 +9,12 @@ class MapLocation < ActiveRecord::Base
latitude.present? && longitude.present? && zoom.present?
end
def json_data
{
id: id,
lat: latitude,
long: longitude
}
end
end

View File

@@ -17,3 +17,5 @@ scope '/participatory_budget' do
post :vote, on: :member
end
end
get 'investments/:id/json_data', to: :json_data, controller: 'budgets/investments'