space/app/controllers/spaces_controller.rb

171 lines
5.4 KiB
Ruby

class SpacesController < ApplicationController
FrontendMethods = ["unit", "showcase"]
def index
params = OrbitHelper.params
page = Page.where(:page_id => params[:page_id]).first
buildings = Building.filter_by_categories.collect do |building|
floors = building.floors.desc(:title).collect do |floor|
image = (!floor.frontend_image.thumb.url.nil? ? floor.frontend_image.thumb.url : "/assets/default-floor.jpg")
link = floor.layout.nil? ? (floor.floor_units.empty? ? "#" : "/#{I18n.locale.to_s}#{page.url}/#{floor.floor_units.first.to_param}?method=unit") : OrbitHelper.url_to_show(floor.to_param)
{
"floor-title" => floor.title,
"floor-image" => image,
"alt-title" => floor.title,
"link_to_show" => link
}
end
{
"building-title" => building.title,
"building-image" => building.image.url,
"alt-title" => building.title,
"floors" => floors
}
end
{
"buildings" => buildings,
"extras" => {
}
}
end
def show
params = OrbitHelper.params
floor = Floor.where(:uid => params[:uid]).first rescue nil
thumb_image = (!floor.frontend_image.thumb.url.nil? ? floor.frontend_image.thumb.url : "/assets/default-floor.jpg")
image = (!floor.frontend_image.mobile.url.nil? ? floor.frontend_image.mobile.url : "#")
page = Page.where(:page_id => params[:page_id]).first
site = Site.first
hover_color = (site.orbit_bar_submenu_background_color rescue nil) || 'null'
bg_color = (site.orbit_bar_background_color rescue nil) || 'null'
block_color = hex2rgba((site.orbit_bar_submenu_background_color rescue nil),0.3) || 'null'
{
"floor-title" => floor.title,
"floor-frontend-image-thumb" => thumb_image,
"floor-frontend-image" => image,
"image-alt" => floor.title,
"building-back-link" => "/" + I18n.locale.to_s + page.url,
"floor-layout" => floor.layout,
"floor-id" => floor.id.to_s,
"page-id" => page.page_id,
"hover_color" => hover_color,
"bg_color" => bg_color,
"block_color" => block_color,
"style_label" => style_label(bg_color,site.orbit_bar_text_color)
}
end
def floor_units
floor = Floor.find(params[:floor_id]) rescue nil
page = Page.where(:page_id => params[:page_id]).first rescue nil
units = []
if !floor.nil?
floor.floor_units.each do |unit|
url = "/#{I18n.locale.to_s}#{page.url}/#{unit.to_param}?method=unit" rescue "#"
units << {
"id" => unit.id.to_s,
"url" => url
}
end
end
render :json => {"success" => true, "units" => units}
end
def floor_sub_units
unit = FloorUnit.find(params[:unit_id]) rescue nil
page = Page.where(:page_id => params[:page_id]).first rescue nil
units = []
if !unit.nil?
unit.floor_sub_units.each do |subunit|
url = subunit.floor_sub_unit_images.empty? ? "#" : "/#{I18n.locale.to_s}#{page.url}/#{subunit.to_param}?method=showcase&layout=false" rescue "#"
units << {
"id" => subunit.id.to_s,
"url" => url
}
end
end
render :json => {"success" => true, "sub_units" => units}
end
def unit
params = OrbitHelper.params
unit = FloorUnit.where(:uid => params[:uid]).first rescue nil
page = Page.where(:page_id => params[:page_id]).first
layout = unit.layout.nil? ? "<div id='full-layout-canvas'><img href='<%= unit.layout_image.url %>' id='layout-image'></div>" : unit.layout
backlink = unit.floor.layout.nil? ? "/" + I18n.locale.to_s + page.url : "/" + I18n.locale.to_s + page.url + "/#{unit.floor.to_param}"
site = Site.first
hover_color = (site.orbit_bar_submenu_background_color rescue nil) || 'null'
bg_color = (site.orbit_bar_background_color rescue nil) || 'null'
block_color = hex2rgba((site.orbit_bar_submenu_background_color rescue nil),0.3) || 'null'
{
"unit-title" => unit.title,
"floor-back-link" => backlink,
"unit-layout" => layout,
"unit-id" => unit.id.to_s,
"page-id" => page.page_id,
"hover_color" => hover_color,
"bg_color" => bg_color,
"block_color" => block_color,
"style_label" => style_label(bg_color,site.orbit_bar_text_color)
}
end
def showcase
params = OrbitHelper.params
unit = FloorSubUnit.where(:uid => params[:uid]).first rescue nil
images = []
unit.floor_sub_unit_images.each do |image|
images << {
"image-thumb-url" => image.image.mobile.url,
"image-url" => image.image.url,
"alt-image" => unit.title
}
end
{
"unit-images" => images,
"extras" => {
"unit-title" => unit.title,
"content" => unit.content || ''
}
}
end
private
def hex2rgba(my_hex,percent=1)
if my_hex
if my_hex[0] == '#'
my_hex = my_hex[1..-1]
end
rgb = my_hex.split(//).each_slice(my_hex.length/3).map{|v| v.join.to_i(16)}
"rgba(#{rgb[0]},#{rgb[1]},#{rgb[2]},#{percent})"
else
nil
end
end
def style_label(color1,color2)
if color1
"<style>
.s-space.show-space .selection-box-label.active{
background: #{color1} !important;
color: #{color2} !important;
}
.overlay .anchor{
border-color: #{color1} transparent transparent transparent !important;
}
</style>"
else
""
end
end
end