Merge pull request #2552 from consul/budgets_map_improvements
Backport: Budgets map improvements
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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'
|
||||
|
||||
Reference in New Issue
Block a user