pwb 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +30 -3
  3. data/app/assets/javascripts/pwb/{application.js → application.js.erb} +19 -2
  4. data/app/assets/javascripts/pwb/paloma/landing.js +10 -10
  5. data/app/assets/javascripts/pwb/paloma/prop.js +14 -22
  6. data/app/assets/javascripts/pwb/paloma/sections.js +15 -15
  7. data/app/assets/javascripts/pwb/shared/inmo-map.js +121 -0
  8. data/app/assets/javascripts/pwb/shared/select-picker.js +15 -0
  9. data/app/assets/javascripts/pwb/shared/slick-carousel.js +10 -0
  10. data/app/assets/javascripts/pwb/shared/vue-main.js +31 -0
  11. data/app/assets/javascripts/pwb/themes/{berlin.js → berlin.js.erb} +61 -5
  12. data/app/assets/stylesheets/pwb/themes/berlin.scss +3 -0
  13. data/app/assets/stylesheets/pwb/themes/default.scss +4 -2
  14. data/app/assets/stylesheets/pwb/themes/default/landing_general.scss +1 -1
  15. data/app/assets/stylesheets/pwb/themes/default/language_switcher.scss +20 -0
  16. data/app/assets/stylesheets/pwb/themes/default/prop.scss +0 -4
  17. data/app/assets/stylesheets/pwb/themes/default/shame.scss +0 -59
  18. data/app/assets/stylesheets/pwb/themes/shared/gmap.scss +38 -0
  19. data/app/assets/stylesheets/pwb/themes/shared/search_box.scss +62 -0
  20. data/app/assets/stylesheets/pwb/themes/shared/shame.scss +6 -1
  21. data/app/assets/stylesheets/pwb/themes/shared/social.scss +84 -0
  22. data/app/controllers/pwb/api_public/v1/props_controller.rb +47 -1
  23. data/app/controllers/pwb/props_controller.rb +32 -3
  24. data/app/controllers/pwb/search_controller.rb +35 -3
  25. data/app/controllers/pwb/sections_controller.rb +24 -7
  26. data/app/controllers/pwb/welcome_controller.rb +2 -0
  27. data/app/helpers/pwb/application_helper.rb +16 -31
  28. data/app/helpers/pwb/images_helper.rb +43 -0
  29. data/app/models/pwb/agency.rb +2 -2
  30. data/app/models/pwb/content.rb +3 -2
  31. data/app/models/pwb/content_photo.rb +1 -1
  32. data/app/models/pwb/feature.rb +2 -2
  33. data/app/models/pwb/message.rb +1 -1
  34. data/app/models/pwb/prop.rb +10 -1
  35. data/app/models/pwb/prop_photo.rb +1 -1
  36. data/app/models/pwb/section.rb +2 -1
  37. data/app/models/pwb/website.rb +1 -1
  38. data/app/themes/berlin/views/layouts/pwb/application.html.erb +9 -4
  39. data/app/themes/berlin/views/pwb/props/not_found.html.erb +37 -0
  40. data/app/themes/berlin/views/pwb/props/show.html.erb +44 -11
  41. data/app/themes/berlin/views/pwb/search/buy.html.erb +15 -8
  42. data/app/themes/berlin/views/pwb/search/rent.html.erb +13 -6
  43. data/app/themes/berlin/views/pwb/sections/about_us.html.erb +25 -34
  44. data/app/themes/berlin/views/pwb/sections/contact_us.html.erb +23 -24
  45. data/app/themes/berlin/views/pwb/sections/static.html.erb +26 -26
  46. data/app/themes/berlin/views/pwb/welcome/_landing_carousel.html.erb +27 -18
  47. data/app/themes/berlin/views/pwb/welcome/_service.html.erb +2 -2
  48. data/app/themes/berlin/views/pwb/welcome/index.html.erb +5 -2
  49. data/app/themes/default/views/layouts/pwb/application.html.erb +15 -12
  50. data/app/themes/default/views/pwb/props/show.html.erb +29 -8
  51. data/app/themes/default/views/pwb/search/buy.html.erb +44 -48
  52. data/app/themes/default/views/pwb/search/rent.html.erb +44 -48
  53. data/app/themes/default/views/pwb/sections/about_us.html.erb +1 -0
  54. data/app/themes/default/views/pwb/sections/contact_us.html.erb +4 -0
  55. data/app/themes/default/views/pwb/sections/static.html.erb +1 -0
  56. data/app/themes/default/views/pwb/welcome/index.html.erb +14 -4
  57. data/app/views/pwb/_meta_tags.html.erb +10 -0
  58. data/app/views/pwb/props/_meta_tags.html.erb +8 -0
  59. data/app/views/pwb/search/_search_form_for_rent.html.erb +19 -16
  60. data/app/views/pwb/search/_search_form_landing.html.erb +35 -0
  61. data/app/views/pwb/search/search_ajax.js.erb +3 -1
  62. data/config/client_setups/default.json +113 -55
  63. data/config/initializers/i18n.rb +1 -0
  64. data/config/locales/admin.en.yml +19 -10
  65. data/config/locales/admin.es.yml +18 -0
  66. data/config/locales/de.yml +9 -6
  67. data/config/locales/devise.tr.yml +135 -0
  68. data/config/locales/devise.vi.yml +137 -0
  69. data/config/locales/en.yml +151 -161
  70. data/config/locales/es.yml +37 -35
  71. data/config/locales/fr.yml +147 -184
  72. data/config/locales/pt.yml +10 -8
  73. data/config/locales/rails.tr.yml +211 -0
  74. data/config/locales/rails.vi.yml +203 -0
  75. data/config/locales/ru.yml +13 -12
  76. data/config/locales/tr.yml +160 -0
  77. data/config/locales/vi.yml +162 -0
  78. data/config/locales/zh-HK.yml +2 -0
  79. data/config/routes.rb +4 -3
  80. data/db/migrate/20170513221300_create_cms.rb +1 -1
  81. data/lib/pwb/seeder.rb +1 -1
  82. data/lib/pwb/version.rb +1 -1
  83. data/spec/dummy/config/routes.rb +3 -4
  84. data/spec/dummy/db/schema.rb +11 -10
  85. data/spec/dummy/log/test.log +0 -0
  86. data/spec/dummy/public/uploads/pwb/content_photo/image/1/carousel_windows.jpg +0 -0
  87. data/spec/dummy/public/uploads/pwb/content_photo/image/2/carousel_deck_chair.jpg +0 -0
  88. data/spec/dummy/public/uploads/pwb/content_photo/image/3/carousel_grass.jpg +0 -0
  89. data/spec/dummy/public/uploads/pwb/content_photo/image/4/carousel_grass.jpg +0 -0
  90. data/spec/dummy/public/uploads/pwb/prop_photo/image/1/flat_balcony.jpg +0 -0
  91. data/spec/dummy/public/uploads/pwb/prop_photo/image/1/gdaje3atcct1gx2ngv9u.jpg +0 -0
  92. data/spec/dummy/public/uploads/pwb/prop_photo/image/1/new_villa.jpg +0 -0
  93. data/spec/dummy/public/uploads/pwb/prop_photo/image/2/flat_balcony.jpg +0 -0
  94. data/spec/dummy/public/uploads/pwb/prop_photo/image/2/kitchen_modern.jpg +0 -0
  95. data/spec/dummy/public/uploads/pwb/prop_photo/image/2/rxo23syongfydjpoizrd.jpg +0 -0
  96. data/spec/dummy/public/uploads/pwb/prop_photo/image/3/mansion_front.jpg +0 -0
  97. data/spec/dummy/public/uploads/pwb/prop_photo/image/3/vzlptgtccsk2d2ewp4id.jpg +0 -0
  98. data/spec/dummy/public/uploads/pwb/prop_photo/image/4/mansion_bedroom.jpg +0 -0
  99. data/spec/dummy/public/uploads/pwb/prop_photo/image/4/xwayprwnmmmhrzrgwvch.jpg +0 -0
  100. data/spec/dummy/public/uploads/pwb/prop_photo/image/5/flat_window.jpg +0 -0
  101. data/spec/dummy/public/uploads/pwb/prop_photo/image/5/ilxn2u37bak0v60u6f8q.jpg +0 -0
  102. data/spec/dummy/public/uploads/pwb/prop_photo/image/6/kitchen_classic.jpg +0 -0
  103. data/spec/dummy/public/uploads/pwb/prop_photo/image/7/flat_balcony.jpg +0 -0
  104. data/spec/dummy/public/uploads/pwb/prop_photo/image/8/lounge_cosy.jpg +0 -0
  105. data/spec/requests/pwb/themes_spec.rb +1 -0
  106. data/spec/views/pwb/welcome.html.erb_spec.rb +7 -0
  107. metadata +63 -6
  108. data/app/assets/javascripts/pwb/themes/berlin/jquery.min.js +0 -5
  109. data/app/assets/stylesheets/pwb/themes/default/search.scss +0 -8
@@ -12,6 +12,7 @@ module Pwb
12
12
  # .order('price_sale_current_cents ASC')
13
13
  # @properties = Prop.where(nil) # creates an anonymous scope
14
14
  apply_search_filter filtering_params(params)
15
+ set_map_markers
15
16
  render "/pwb/search/search_ajax.js.erb", layout: false
16
17
  # view rendered will use js to inject results...
17
18
  end
@@ -23,6 +24,7 @@ module Pwb
23
24
  @properties = Prop.visible.for_rent
24
25
 
25
26
  apply_search_filter filtering_params(params)
27
+ set_map_markers
26
28
  render "/pwb/search/search_ajax.js.erb", layout: false
27
29
  # view rendered will use js to inject results...
28
30
  end
@@ -46,8 +48,9 @@ module Pwb
46
48
  # ..
47
49
 
48
50
  set_common_search_inputs
49
-
51
+ set_select_picker_texts
50
52
  apply_search_filter filtering_params(params)
53
+ set_map_markers
51
54
 
52
55
  # below allows setting in form of any input values that might have been passed by param
53
56
  @search_defaults = params[:search].present? ? params[:search] : {}
@@ -77,9 +80,9 @@ module Pwb
77
80
  # 150 250 500 1,000 1,500 2,000 2,500 3,000 4,000 5,000 10,000)
78
81
 
79
82
  set_common_search_inputs
80
-
83
+ set_select_picker_texts
81
84
  apply_search_filter filtering_params(params)
82
-
85
+ set_map_markers
83
86
  @search_defaults = params[:search].present? ? params[:search] : {}
84
87
 
85
88
  js 'Main/Search#sort' # trigger client-side paloma script
@@ -88,6 +91,27 @@ module Pwb
88
91
 
89
92
  private
90
93
 
94
+ def set_map_markers
95
+ @map_markers = []
96
+ @properties.each do |property|
97
+ if property.show_map
98
+ @map_markers.push(
99
+ {
100
+ id: property.id,
101
+ title: property.title,
102
+ show_url: property.contextual_show_path(@operation_type),
103
+ image_url: property.primary_image_url,
104
+ display_price: property.contextual_price_with_currency(@operation_type),
105
+ position: {
106
+ lat: property.latitude,
107
+ lng: property.longitude
108
+ }
109
+ }
110
+ )
111
+ end
112
+ end
113
+ end
114
+
91
115
  # A list of the param names that can be used for filtering the Product list
92
116
  def filtering_params(params)
93
117
  unless params[:search]
@@ -105,6 +129,14 @@ module Pwb
105
129
  :for_rent_price_till, :property_type, :property_state, :count_bathrooms, :count_bedrooms)
106
130
  end
107
131
 
132
+ def set_select_picker_texts
133
+ @select_picker_texts = {
134
+ noneSelectedText: I18n.t("selectpicker.noneSelectedText"),
135
+ noneResultsText: I18n.t("selectpicker.noneResultsText"),
136
+ countSelectedText: I18n.t("selectpicker.countSelectedText")
137
+ }.to_json
138
+ end
139
+
108
140
  def set_common_search_inputs
109
141
  # for these 2 below, I'm checking in form if count is > 1
110
142
  # assumption is that there will be at least one Zone with blank values
@@ -42,14 +42,31 @@ module Pwb
42
42
  end
43
43
 
44
44
  def contact_us
45
- # below for google map rendering via paloma:
46
- js current_agency_primary_address: @current_agency.primary_address
47
- js show_contact_map: @current_agency.show_contact_map
45
+ # below was for google map rendering via paloma:
46
+ # js current_agency_primary_address: @current_agency.primary_address
47
+ # js show_contact_map: @current_agency.show_contact_map
48
48
  # could explicitly set function for Paloma to use like so:
49
49
  # js "Pwb/Sections#contact_us"
50
50
  # @enquiry = Message.new
51
51
  @page_title = I18n.t("contactUs")
52
52
 
53
+ @map_markers = []
54
+ if @current_agency.show_contact_map
55
+ @map_markers.push(
56
+ {
57
+ id: @current_agency.id,
58
+ title: @current_agency.display_name,
59
+ show_url: "#",
60
+ image_url: @current_website.logo_url,
61
+ # display_price: @current_agency.contextual_price_with_currency(@operation_type),
62
+ position: {
63
+ lat: @current_agency.primary_address.latitude,
64
+ lng: @current_agency.primary_address.longitude
65
+ }
66
+ }
67
+ )
68
+ end
69
+
53
70
  render "/pwb/sections/contact_us"
54
71
  end
55
72
 
@@ -75,9 +92,9 @@ module Pwb
75
92
  origin_ip: request.ip,
76
93
  user_agent: request.user_agent,
77
94
  delivery_email: @current_agency.email_for_general_contact_form
78
- # origin_email: params[:contact][:email]
79
- }
80
- )
95
+ # origin_email: params[:contact][:email]
96
+ }
97
+ )
81
98
  unless @enquiry.save && @client.save
82
99
  @error_messages += @client.errors.full_messages
83
100
  @error_messages += @enquiry.errors.full_messages
@@ -110,7 +127,7 @@ module Pwb
110
127
  private
111
128
 
112
129
  def header_image
113
- # used by berlin theme
130
+ # used by berlin theme and meta tags
114
131
  hi_content = Content.where(tag: 'landing-carousel')[0]
115
132
  @header_image = hi_content.present? ? hi_content.default_photo : nil
116
133
  end
@@ -11,6 +11,8 @@ module Pwb
11
11
  @properties_for_sale = Prop.for_sale.visible.order('highlighted DESC').limit 9
12
12
  @properties_for_rent = Prop.for_rent.visible.order('highlighted DESC').limit 9
13
13
 
14
+ @search_defaults = params[:search].present? ? params[:search] : {}
15
+
14
16
  render "pwb/welcome/index"
15
17
  end
16
18
  end
@@ -2,46 +2,26 @@ module Pwb
2
2
  module ApplicationHelper
3
3
 
4
4
  def properties_carousel_footer
5
- # TODO - diplay array of thumbnails below main
5
+ # TODO - diplay array of thumbnails below main
6
6
  # properties carousel is images count > ...
7
7
  # <a href="#" class="theater" rel="group" hidefocus="true">
8
8
  # <%= opt_image_tag((@property_details.ordered_photo 3), :quality => "auto", class: "", alt: "") %>
9
9
  # </a>
10
10
  end
11
11
 
12
- def bg_image(photo, options = {})
13
- unless photo && photo.image.present?
14
- return ""
15
- end
16
- if Rails.application.config.use_cloudinary
17
- image_url = cl_image_path photo.image, options
18
- else
19
- image_url = image_path photo.image.url
20
- end
21
- #style="background-image:linear-gradient( rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.1) ),url(<%= carousel_item.default_photo %>);"
22
- if options[:gradient]
23
- "background-image: linear-gradient(#{options[:gradient]}), url(#{image_url});".html_safe
24
- else
25
- "background-image: url(#{image_url});".html_safe
26
- end
27
- end
28
-
29
- def opt_image_tag(photo, options = {})
30
- unless photo && photo.image.present?
31
- return nil
32
- end
33
- if Rails.application.config.use_cloudinary
34
- cl_image_tag photo.image, options
35
- else
36
- image_tag photo.image.url, options
37
- end
38
- end
39
-
40
-
41
12
  def page_title(title_val)
42
13
  content_for :page_title, title_val.to_s
43
14
  end
44
15
 
16
+ # def meta_tags(tags_array = [])
17
+ # tags_string = ""
18
+ # tags_array.each do |tag|
19
+ # tags_string += "<meta property='#{tag[:property]}' content='#{tag[:content]}' />"
20
+ # end
21
+ # content_for :page_head, tags_string
22
+ # # <meta property="og:image" content="http://examples.opengraphprotocol.us/media/images/75.png">
23
+ # end
24
+
45
25
  def area_unit(property)
46
26
  area_unit = "m<sup>2</sup>"
47
27
  if property.area_unit && (property.area_unit == "sqft")
@@ -52,7 +32,12 @@ module Pwb
52
32
 
53
33
  def localized_link_to(locale_with_var = nil, options = nil, html_options = nil)
54
34
  link_class = locale_with_var["variant"]
55
- link = "<a class='#{link_class}' href='/#{options["locale"]}'></a>"
35
+ href = "/#{options["locale"]}"
36
+ begin
37
+ href = url_for(options)
38
+ rescue ActionController::UrlGenerationError
39
+ end
40
+ link = "<a class='#{link_class}' href='#{href}'></a>"
56
41
  return link.html_safe
57
42
 
58
43
  # if params["controller"] && params["controller"].include?("devise/")
@@ -0,0 +1,43 @@
1
+ module Pwb
2
+ module ImagesHelper
3
+
4
+ def bg_image(photo, options = {})
5
+ image_url = get_opt_image_url photo, options
6
+ #style="background-image:linear-gradient( rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.1) ),url(<%= carousel_item.default_photo %>);"
7
+ if options[:gradient]
8
+ "background-image: linear-gradient(#{options[:gradient]}), url(#{image_url});".html_safe
9
+ else
10
+ "background-image: url(#{image_url});".html_safe
11
+ end
12
+ end
13
+
14
+ def opt_image_tag(photo, options = {})
15
+ unless photo && photo.image.present?
16
+ return nil
17
+ end
18
+ if Rails.application.config.use_cloudinary
19
+ cl_image_tag photo.image, options
20
+ else
21
+ image_tag photo.image.url, options
22
+ end
23
+ end
24
+
25
+ def opt_image_url(photo, options = {})
26
+ get_opt_image_url photo, options
27
+ end
28
+
29
+ private
30
+
31
+ def get_opt_image_url(photo, options)
32
+ unless photo && photo.image.present?
33
+ return ""
34
+ end
35
+ if Rails.application.config.use_cloudinary
36
+ image_url = cl_image_path photo.image, options
37
+ else
38
+ image_url = image_url photo.image.url
39
+ end
40
+ end
41
+
42
+ end
43
+ end
@@ -6,8 +6,8 @@ module Pwb
6
6
 
7
7
  # belongs_to_active_hash :theme, foreign_key: "theme_name", class_name: "Pwb::Theme", shortcuts: [:friendly_name], primary_key: "name"
8
8
 
9
- belongs_to :primary_address, class_name: "Address", foreign_key: 'primary_address_id'
10
- belongs_to :secondary_address, class_name: "Address", foreign_key: 'secondary_address_id'
9
+ belongs_to :primary_address, optional: true, class_name: "Address", foreign_key: 'primary_address_id'
10
+ belongs_to :secondary_address, optional: true, class_name: "Address", foreign_key: 'secondary_address_id'
11
11
 
12
12
  def self.unique_instance
13
13
  # there will be only one row, and its ID must be '1'
@@ -1,10 +1,11 @@
1
1
  module Pwb
2
2
  class Content < ApplicationRecord
3
3
  has_many :content_photos, dependent: :destroy
4
- belongs_to :section, foreign_key: "section_key", primary_key: "link_path"
4
+ belongs_to :section, optional: true, foreign_key: "section_key", primary_key: "link_path"
5
5
 
6
6
  translates :raw, fallbacks_for_empty_translations: true
7
- globalize_accessors locales: [:en, :ca, :es, :fr, :ar, :de, :ru, :pt]
7
+ globalize_accessors locales: I18n.available_locales
8
+ # globalize_accessors locales: [:en, :ca, :es, :fr, :ar, :de, :ru, :pt]
8
9
 
9
10
  def default_photo
10
11
  content_photos.first
@@ -1,7 +1,7 @@
1
1
  module Pwb
2
2
  class ContentPhoto < ApplicationRecord
3
3
  mount_uploader :image, ContentPhotoUploader
4
- belongs_to :content
4
+ belongs_to :content, optional: true
5
5
 
6
6
  # validates_processing_of :image
7
7
  # validate :image_size_validation
@@ -1,8 +1,8 @@
1
1
  module Pwb
2
2
  class Feature < ApplicationRecord
3
- belongs_to :property
3
+ belongs_to :property, optional: true
4
4
 
5
- belongs_to :feature_field_key, class_name: :FieldKey, foreign_key: :feature_key, inverse_of: :features
5
+ belongs_to :feature_field_key, optional: true, class_name: :FieldKey, foreign_key: :feature_key, inverse_of: :features
6
6
  # above allows:
7
7
  # Property.first.features.count and
8
8
  # FieldKey.last.properties_count but most importantly
@@ -1,5 +1,5 @@
1
1
  module Pwb
2
2
  class Message < ApplicationRecord
3
- belongs_to :client
3
+ belongs_to :client, optional: true
4
4
  end
5
5
  end
@@ -1,7 +1,8 @@
1
1
  module Pwb
2
2
  class Prop < ApplicationRecord
3
3
  translates :title, :description
4
- globalize_accessors locales: [:en, :ca, :es, :fr, :ar, :de, :ru, :pt]
4
+ globalize_accessors locales: I18n.available_locales
5
+ # globalize_accessors locales: [:en, :ca, :es, :fr, :ar, :de, :ru, :pt]
5
6
 
6
7
  # Use EUR as model level currency
7
8
  # register_currency :eur
@@ -124,6 +125,14 @@ module Pwb
124
125
  end
125
126
 
126
127
 
128
+ def primary_image_url
129
+ if prop_photos.length > 0
130
+ ordered_photo(1).image.url
131
+ else
132
+ ""
133
+ end
134
+ end
135
+
127
136
  # def ordered_photo_url(number)
128
137
  # # allows me to pick an individual image according to an order
129
138
  # unless prop_photos.length >= number
@@ -1,6 +1,6 @@
1
1
  module Pwb
2
2
  class PropPhoto < ApplicationRecord
3
3
  mount_uploader :image, PropPhotoUploader
4
- belongs_to :prop
4
+ belongs_to :prop, optional: true
5
5
  end
6
6
  end
@@ -2,7 +2,8 @@ module Pwb
2
2
  class Section < ApplicationRecord
3
3
  translates :page_title, fallbacks_for_empty_translations: true
4
4
  translates :link_title, fallbacks_for_empty_translations: true
5
- globalize_accessors locales: [:en, :ca, :es, :fr, :ar, :de, :ru, :pt]
5
+ globalize_accessors locales: I18n.available_locales
6
+ # [:en, :ca, :es, :fr, :ar, :de, :ru, :pt]
6
7
 
7
8
  has_many :contents, foreign_key: "section_key", primary_key: "link_path"
8
9
 
@@ -1,7 +1,7 @@
1
1
  module Pwb
2
2
  class Website < ApplicationRecord
3
3
  extend ActiveHash::Associations::ActiveRecordExtensions
4
- belongs_to_active_hash :theme, foreign_key: "theme_name", class_name: "Pwb::Theme", shortcuts: [:friendly_name], primary_key: "name"
4
+ belongs_to_active_hash :theme, optional: true, foreign_key: "theme_name", class_name: "Pwb::Theme", shortcuts: [:friendly_name], primary_key: "name"
5
5
 
6
6
  def self.unique_instance
7
7
  # there will be only one row, and its ID must be '1'
@@ -4,6 +4,9 @@
4
4
  <meta charset="utf-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <meta name="robots" content="index, follow">
7
+ <title><%= yield(:page_title) %></title>
8
+ <%= yield(:page_head) %>
9
+
7
10
  <%# display_meta_tags site: @current_website.tenant_display_name %>
8
11
  <%= stylesheet_link_tag "pwb/themes/berlin", media: "all" %>
9
12
  <style>
@@ -17,13 +20,12 @@
17
20
  <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
18
21
  <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
19
22
  <![endif]-->
20
- <title><%= yield(:page_title) %></title>
21
23
  </head>
22
24
  <body class="tnt-body <%= @current_website.body_style %>">
23
25
  <!-- Pre Loader -->
24
- <div id="aa-preloader-area">
26
+ <!-- <div id="aa-preloader-area">
25
27
  <div class="pulse"></div>
26
- </div>
28
+ </div> -->
27
29
  <!-- SCROLL TOP BUTTON -->
28
30
  <a class="scrollToTop" href="#"><i class="fa fa-angle-double-up"></i></a>
29
31
  <!-- END SCROLL TOP BUTTON -->
@@ -41,7 +43,9 @@
41
43
  </div>
42
44
  </section>
43
45
  <% else %>
44
- <%= yield %>
46
+ <div id="main-vue">
47
+ <%= yield %>
48
+ </div>
45
49
  <% end %>
46
50
  <%= render :partial => '/pwb/footer', :locals => {} %>
47
51
  <%= render :partial => '/pwb/analytics', :locals => {} %>
@@ -80,5 +84,6 @@
80
84
  if (raf) raf(function() { window.setTimeout(loadDeferredStyles, 0); });
81
85
  else window.addEventListener('load', loadDeferredStyles);
82
86
  </script>
87
+ <%= yield(:page_script) %>
83
88
  </body>
84
89
  </html>
@@ -0,0 +1,37 @@
1
+ <% page_title @page_title %>
2
+ <!-- Start Property header -->
3
+ <section id="aa-property-header" style="<%= bg_image @header_image, height: 800, crop: "scale", quality: "auto" %>">
4
+ <div class="container">
5
+ <div class="row">
6
+ <div class="col-md-12">
7
+ <div class="aa-property-header-inner">
8
+ <h2>
9
+ <%= I18n.t("property.details") %>
10
+ </h2>
11
+ <ol class="breadcrumb">
12
+ <li>
13
+ <%= link_to pwb.root_path(locale: locale), class: "" do %>
14
+ <%= I18n.t("webContentSections.home") %>
15
+ <% end %>
16
+ </li>
17
+ <li class="active"><%= t "propertyNotFound" %>
18
+ </li>
19
+ </ol>
20
+ </div>
21
+ </div>
22
+ </div>
23
+ </div>
24
+ </section>
25
+ <!-- End Property header -->
26
+ <!-- Start Properties -->
27
+ <section id="aa-properties">
28
+ <div class="container">
29
+ <div class="row">
30
+ <div class="col-md-9" style="min-height:300px;">
31
+ <h2>
32
+ <%= t "propertyNotFound" %>
33
+ </h2>
34
+ </div>
35
+ </div>
36
+ </div>
37
+ </section>