75 lines
2.3 KiB
Ruby
75 lines
2.3 KiB
Ruby
require_relative '../../lib/carto/styles/style'
|
|
require_relative '../../lib/carto/styles/point'
|
|
require_relative '../../lib/carto/styles/line'
|
|
require_relative '../../lib/carto/styles/polygon'
|
|
require_relative '../../lib/carto/styles/geometry'
|
|
require_relative '../../lib/carto/form'
|
|
|
|
module ModelFactories
|
|
class LayerFactory
|
|
def self.get_new(options)
|
|
::Layer.new(options)
|
|
end
|
|
|
|
def self.get_default_base_layer(user)
|
|
basemap = user.default_basemap.except('default')
|
|
options = if basemap['className'] === 'googlemaps'
|
|
{ kind: 'gmapsbase', options: basemap }
|
|
else
|
|
{ kind: 'tiled', options: basemap }
|
|
end
|
|
|
|
::Layer.new(options)
|
|
end
|
|
|
|
def self.get_default_data_layer(table_name, user, geometry_type)
|
|
data_layer = ::Layer.new(Cartodb.config[:layer_opts]['data'].deep_dup)
|
|
data_layer.options['table_name'] = table_name
|
|
data_layer.options['user_name'] = user.username
|
|
data_layer.options['tile_style'] = tile_style(user, geometry_type)
|
|
data_layer.infowindow ||= {}
|
|
data_layer.infowindow['fields'] = []
|
|
data_layer.tooltip ||= {}
|
|
data_layer.tooltip['fields'] = []
|
|
|
|
if user.builder_enabled?
|
|
data_layer.options['style_properties'] = style_properties(geometry_type)
|
|
end
|
|
|
|
data_layer
|
|
end
|
|
|
|
# Info: does not perform validity checks
|
|
def self.get_default_labels_layer(base_layer)
|
|
::Layer.new(
|
|
kind: 'tiled',
|
|
options: base_layer.options.except('className', 'labels').merge(
|
|
'type' => 'Tiled',
|
|
'name' => "#{base_layer.options['name']} Labels"
|
|
).merge(base_layer.options['labels'])
|
|
)
|
|
end
|
|
|
|
def self.style_properties(geometry_type)
|
|
{
|
|
type: 'simple',
|
|
properties: Carto::Form.new(geometry_type).to_hash
|
|
}
|
|
end
|
|
|
|
def self.tile_style(user, geometry_type)
|
|
user.builder_enabled? ? builder_tile_style(geometry_type) : legacy_tile_style(geometry_type)
|
|
end
|
|
|
|
def self.builder_tile_style(geometry_type)
|
|
style_class = Carto::Styles::Style.style_for_geometry_type(geometry_type)
|
|
|
|
style_class ? style_class.new.to_cartocss : legacy_tile_style(geometry_type)
|
|
end
|
|
|
|
def self.legacy_tile_style(geometry_type)
|
|
"#layer #{Cartodb.config[:layer_opts]['default_tile_styles'][geometry_type]}"
|
|
end
|
|
end
|
|
end
|