c80_map 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.travis.yml +3 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +51 -0
- data/Rakefile +1 -0
- data/app/admin/c80_map/settings.rb +32 -0
- data/app/assets/javascripts/buttons/admin_buttons/button_back_to_map.js +48 -0
- data/app/assets/javascripts/buttons/admin_buttons/button_cancel_create.js +21 -0
- data/app/assets/javascripts/buttons/admin_buttons/button_complete_create.js +22 -0
- data/app/assets/javascripts/buttons/admin_buttons/button_edit.js +80 -0
- data/app/assets/javascripts/buttons/admin_buttons/button_new.js +46 -0
- data/app/assets/javascripts/buttons/admin_buttons/button_save.js +83 -0
- data/app/assets/javascripts/buttons/zoom_buttons.js +61 -0
- data/app/assets/javascripts/c80_map.js.coffee +11 -0
- data/app/assets/javascripts/events/app_event.js +15 -0
- data/app/assets/javascripts/map_objects/area.js +221 -0
- data/app/assets/javascripts/map_objects/building.js +309 -0
- data/app/assets/javascripts/map_objects/dot.js +14 -0
- data/app/assets/javascripts/src/main.js +992 -0
- data/app/assets/javascripts/src/state_controller.js +220 -0
- data/app/assets/javascripts/src/utils.js +127 -0
- data/app/assets/javascripts/svg_elements/helper.js +36 -0
- data/app/assets/javascripts/svg_elements/polygon.js +192 -0
- data/app/assets/javascripts/view/save_preloader.js +30 -0
- data/app/assets/stylesheets/c80_map.scss +2 -0
- data/app/assets/stylesheets/map.scss +1435 -0
- data/app/assets/stylesheets/view/save_preloader.scss +206 -0
- data/app/controllers/c80_map/application_controller.rb +6 -0
- data/app/controllers/c80_map/map_ajax_controller.rb +54 -0
- data/app/helpers/c80_map/application_helper.rb +33 -0
- data/app/models/c80_map/area.rb +5 -0
- data/app/models/c80_map/building.rb +73 -0
- data/app/models/c80_map/setting.rb +30 -0
- data/app/uploaders/c80_map/map_image_uploader.rb +31 -0
- data/app/views/c80_map/_map_row.html.erb +15 -0
- data/app/views/c80_map/_map_row_index.html.erb +39 -0
- data/app/views/c80_map/shared/_save_preloader.html.erb +3 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/c80_map.gemspec +25 -0
- data/config/routes.rb +3 -0
- data/db/migrate/20160617130000_create_c80_map_settings.rb +8 -0
- data/db/migrate/20160620040202_create_c80_map_areas.rb +9 -0
- data/db/migrate/20160620040204_create_c80_map_buildings.rb +8 -0
- data/db/seeds/801_fill_map_settings.rb +6 -0
- data/lib/c80_map/engine.rb +23 -0
- data/lib/c80_map/version.rb +3 -0
- data/lib/c80_map.rb +8 -0
- metadata +136 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
div#savePreloader {
|
|
2
|
+
position: absolute;
|
|
3
|
+
z-index: 100000;
|
|
4
|
+
top: 0;
|
|
5
|
+
left: 0;
|
|
6
|
+
bottom: 0;
|
|
7
|
+
right: 0;
|
|
8
|
+
background-color: rgba(0, 0, 0, .01);
|
|
9
|
+
display: none;
|
|
10
|
+
opacity: 0;
|
|
11
|
+
text-align: center; /*!*/
|
|
12
|
+
white-space: nowrap; /*!*/
|
|
13
|
+
|
|
14
|
+
transition: all 0.4s ease-in-out;
|
|
15
|
+
-webkit-transition: all 0.4s ease-in-out;
|
|
16
|
+
-moz-transition: all 0.4s ease-in-out;
|
|
17
|
+
-ms-transition: all 0.4s ease-in-out;
|
|
18
|
+
-o-transition: all 0.4s ease-in-out;
|
|
19
|
+
|
|
20
|
+
&.shown {
|
|
21
|
+
background-color: rgba(0, 0, 0, .4);
|
|
22
|
+
opacity: 1;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
span.helper {
|
|
26
|
+
display: inline-block; /*!*/
|
|
27
|
+
vertical-align: middle; /*!*/
|
|
28
|
+
height: 100%; /*!*/
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.uil-ring-css {
|
|
32
|
+
background: none;
|
|
33
|
+
position: relative;
|
|
34
|
+
width: 200px;
|
|
35
|
+
height: 200px;
|
|
36
|
+
vertical-align: middle; /*!*/
|
|
37
|
+
display: inline-block;
|
|
38
|
+
transform:scale(0.5);
|
|
39
|
+
|
|
40
|
+
> div {
|
|
41
|
+
position: absolute;
|
|
42
|
+
display: block;
|
|
43
|
+
width: 160px;
|
|
44
|
+
height: 160px;
|
|
45
|
+
top: 20px;
|
|
46
|
+
left: 20px;
|
|
47
|
+
border-radius: 80px;
|
|
48
|
+
box-shadow: 0 6px 0 0 #59ebff;
|
|
49
|
+
-ms-animation: uil-ring-anim 1s linear infinite;
|
|
50
|
+
-moz-animation: uil-ring-anim 1s linear infinite;
|
|
51
|
+
-webkit-animation: uil-ring-anim 1s linear infinite;
|
|
52
|
+
-o-animation: uil-ring-anim 1s linear infinite;
|
|
53
|
+
animation: uil-ring-anim 1s linear infinite;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
&:before {
|
|
57
|
+
display:block;
|
|
58
|
+
position: absolute;
|
|
59
|
+
top:0;
|
|
60
|
+
left:0;
|
|
61
|
+
bottom:0;
|
|
62
|
+
right:0;
|
|
63
|
+
content: 'wait';
|
|
64
|
+
font-size:26px;
|
|
65
|
+
color: white;
|
|
66
|
+
margin-top: 80px;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@-webkit-keyframes uil-ring-anim {
|
|
73
|
+
0% {
|
|
74
|
+
-ms-transform: rotate(0deg);
|
|
75
|
+
-moz-transform: rotate(0deg);
|
|
76
|
+
-webkit-transform: rotate(0deg);
|
|
77
|
+
-o-transform: rotate(0deg);
|
|
78
|
+
transform: rotate(0deg);
|
|
79
|
+
}
|
|
80
|
+
100% {
|
|
81
|
+
-ms-transform: rotate(360deg);
|
|
82
|
+
-moz-transform: rotate(360deg);
|
|
83
|
+
-webkit-transform: rotate(360deg);
|
|
84
|
+
-o-transform: rotate(360deg);
|
|
85
|
+
transform: rotate(360deg);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@-webkit-keyframes uil-ring-anim {
|
|
90
|
+
0% {
|
|
91
|
+
-ms-transform: rotate(0deg);
|
|
92
|
+
-moz-transform: rotate(0deg);
|
|
93
|
+
-webkit-transform: rotate(0deg);
|
|
94
|
+
-o-transform: rotate(0deg);
|
|
95
|
+
transform: rotate(0deg);
|
|
96
|
+
}
|
|
97
|
+
100% {
|
|
98
|
+
-ms-transform: rotate(360deg);
|
|
99
|
+
-moz-transform: rotate(360deg);
|
|
100
|
+
-webkit-transform: rotate(360deg);
|
|
101
|
+
-o-transform: rotate(360deg);
|
|
102
|
+
transform: rotate(360deg);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
@-moz-keyframes uil-ring-anim {
|
|
107
|
+
0% {
|
|
108
|
+
-ms-transform: rotate(0deg);
|
|
109
|
+
-moz-transform: rotate(0deg);
|
|
110
|
+
-webkit-transform: rotate(0deg);
|
|
111
|
+
-o-transform: rotate(0deg);
|
|
112
|
+
transform: rotate(0deg);
|
|
113
|
+
}
|
|
114
|
+
100% {
|
|
115
|
+
-ms-transform: rotate(360deg);
|
|
116
|
+
-moz-transform: rotate(360deg);
|
|
117
|
+
-webkit-transform: rotate(360deg);
|
|
118
|
+
-o-transform: rotate(360deg);
|
|
119
|
+
transform: rotate(360deg);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
@-ms-keyframes uil-ring-anim {
|
|
124
|
+
0% {
|
|
125
|
+
-ms-transform: rotate(0deg);
|
|
126
|
+
-moz-transform: rotate(0deg);
|
|
127
|
+
-webkit-transform: rotate(0deg);
|
|
128
|
+
-o-transform: rotate(0deg);
|
|
129
|
+
transform: rotate(0deg);
|
|
130
|
+
}
|
|
131
|
+
100% {
|
|
132
|
+
-ms-transform: rotate(360deg);
|
|
133
|
+
-moz-transform: rotate(360deg);
|
|
134
|
+
-webkit-transform: rotate(360deg);
|
|
135
|
+
-o-transform: rotate(360deg);
|
|
136
|
+
transform: rotate(360deg);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
@-moz-keyframes uil-ring-anim {
|
|
141
|
+
0% {
|
|
142
|
+
-ms-transform: rotate(0deg);
|
|
143
|
+
-moz-transform: rotate(0deg);
|
|
144
|
+
-webkit-transform: rotate(0deg);
|
|
145
|
+
-o-transform: rotate(0deg);
|
|
146
|
+
transform: rotate(0deg);
|
|
147
|
+
}
|
|
148
|
+
100% {
|
|
149
|
+
-ms-transform: rotate(360deg);
|
|
150
|
+
-moz-transform: rotate(360deg);
|
|
151
|
+
-webkit-transform: rotate(360deg);
|
|
152
|
+
-o-transform: rotate(360deg);
|
|
153
|
+
transform: rotate(360deg);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
@-webkit-keyframes uil-ring-anim {
|
|
158
|
+
0% {
|
|
159
|
+
-ms-transform: rotate(0deg);
|
|
160
|
+
-moz-transform: rotate(0deg);
|
|
161
|
+
-webkit-transform: rotate(0deg);
|
|
162
|
+
-o-transform: rotate(0deg);
|
|
163
|
+
transform: rotate(0deg);
|
|
164
|
+
}
|
|
165
|
+
100% {
|
|
166
|
+
-ms-transform: rotate(360deg);
|
|
167
|
+
-moz-transform: rotate(360deg);
|
|
168
|
+
-webkit-transform: rotate(360deg);
|
|
169
|
+
-o-transform: rotate(360deg);
|
|
170
|
+
transform: rotate(360deg);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
@-o-keyframes uil-ring-anim {
|
|
175
|
+
0% {
|
|
176
|
+
-ms-transform: rotate(0deg);
|
|
177
|
+
-moz-transform: rotate(0deg);
|
|
178
|
+
-webkit-transform: rotate(0deg);
|
|
179
|
+
-o-transform: rotate(0deg);
|
|
180
|
+
transform: rotate(0deg);
|
|
181
|
+
}
|
|
182
|
+
100% {
|
|
183
|
+
-ms-transform: rotate(360deg);
|
|
184
|
+
-moz-transform: rotate(360deg);
|
|
185
|
+
-webkit-transform: rotate(360deg);
|
|
186
|
+
-o-transform: rotate(360deg);
|
|
187
|
+
transform: rotate(360deg);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
@keyframes uil-ring-anim {
|
|
192
|
+
0% {
|
|
193
|
+
-ms-transform: rotate(0deg);
|
|
194
|
+
-moz-transform: rotate(0deg);
|
|
195
|
+
-webkit-transform: rotate(0deg);
|
|
196
|
+
-o-transform: rotate(0deg);
|
|
197
|
+
transform: rotate(0deg);
|
|
198
|
+
}
|
|
199
|
+
100% {
|
|
200
|
+
-ms-transform: rotate(360deg);
|
|
201
|
+
-moz-transform: rotate(360deg);
|
|
202
|
+
-webkit-transform: rotate(360deg);
|
|
203
|
+
-o-transform: rotate(360deg);
|
|
204
|
+
transform: rotate(360deg);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
module C80Map
|
|
2
|
+
class MapAjaxController < ApplicationController
|
|
3
|
+
|
|
4
|
+
def save_map_data
|
|
5
|
+
puts "<MapAjaxController.save_map_data> #{params[:buildings]}"
|
|
6
|
+
|
|
7
|
+
#{ "buildings"=>{"0"=>{"coords"=>["2496.5894495412845",...]}} }
|
|
8
|
+
#{ "areas"=>{"0"=>{"coords"=>["2496.5894495412845",...]}} }
|
|
9
|
+
|
|
10
|
+
result = {
|
|
11
|
+
areas: [],
|
|
12
|
+
buildings: [],
|
|
13
|
+
updated_locations_json: nil
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
if params[:buildings].present?
|
|
17
|
+
params[:buildings].each_key do |key|
|
|
18
|
+
new_building_options = params[:buildings][key]
|
|
19
|
+
puts "<MapAjaxController.save_map_data> new_building_options = #{new_building_options}"
|
|
20
|
+
puts "<MapAjaxController.save_map_data> new_building_options[:coords] = #{new_building_options[:coords]}"
|
|
21
|
+
b = Building.new({ coords: new_building_options[:coords].join(',') })
|
|
22
|
+
|
|
23
|
+
# в случае успеха - вернём id созданного здания,
|
|
24
|
+
# тогда js обновит id и перенесёт здание из массива "новые здания" (drawn_buildings).
|
|
25
|
+
# в случае неудачи - вернём описание ошибки
|
|
26
|
+
# завершаем всё обновленным locations.json, который Map возьмёт
|
|
27
|
+
# и положит в data
|
|
28
|
+
|
|
29
|
+
if b.valid?
|
|
30
|
+
b.save
|
|
31
|
+
result[:buildings] << { id: b.id }
|
|
32
|
+
else
|
|
33
|
+
result[:buildings] << { id: new_building_options.id, status: 'error' }
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# if params[:areas].present?
|
|
39
|
+
# params[:areas].each_with_key do |new_area_options,key|
|
|
40
|
+
#
|
|
41
|
+
# if b.present?
|
|
42
|
+
#
|
|
43
|
+
# end
|
|
44
|
+
# end
|
|
45
|
+
# end
|
|
46
|
+
puts "<MapAjaxController.save_map_data> result = #{result.to_json}"
|
|
47
|
+
|
|
48
|
+
respond_to do |format|
|
|
49
|
+
format.json { render json: params }
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module C80Map
|
|
2
|
+
module ApplicationHelper
|
|
3
|
+
|
|
4
|
+
def render_map(page_tag)
|
|
5
|
+
if page_tag == 'index'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# map_settings = C80Map::Setting.first
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# т.к. в json попадают строки вида
|
|
12
|
+
# /home/scout/git/bitbucket/vorsa/public/uploads/map/map.jpg
|
|
13
|
+
# извлечём эту строку, затем во вью обработаем её image_path
|
|
14
|
+
|
|
15
|
+
p = Rails.root.join("public", "locations.json")
|
|
16
|
+
locs = File.read(p)
|
|
17
|
+
locs_hash = JSON.parse(locs)
|
|
18
|
+
locs_hash["img"] = image_path(locs_hash["img"])
|
|
19
|
+
|
|
20
|
+
render :partial => 'c80_map/map_row_index',
|
|
21
|
+
:locals => {
|
|
22
|
+
locs_hash: locs_hash,
|
|
23
|
+
mapwidth:locs_hash["mapwidth"],
|
|
24
|
+
mapheight:locs_hash["mapheight"]
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
else
|
|
28
|
+
render :partial => 'c80_map/map_row'
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
module C80Map
|
|
2
|
+
class Building < ActiveRecord::Base
|
|
3
|
+
has_many :areas, :class_name => 'C80Map::Area', :dependent => :destroy
|
|
4
|
+
validates :coords, uniqueness: true
|
|
5
|
+
after_save :update_json
|
|
6
|
+
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
def update_json
|
|
10
|
+
|
|
11
|
+
locations_path = Rails.root.join("public", "locations.json")
|
|
12
|
+
locs = File.read(locations_path)
|
|
13
|
+
puts "<update_json> #{ Rails.root.join("public", "locations.json") }"
|
|
14
|
+
|
|
15
|
+
locs_hash = JSON.parse(locs)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# и заполняем объектами из собранного массива
|
|
19
|
+
|
|
20
|
+
# обходим все Building и составляем массив вида
|
|
21
|
+
# [{id, object_type=object_type, coords, building_hash, img, childs:[<areas>]},..]
|
|
22
|
+
buildings_to_location_json = []
|
|
23
|
+
Building.all.each do |b|
|
|
24
|
+
ob = {
|
|
25
|
+
id: b.id,
|
|
26
|
+
object_type: 'building',
|
|
27
|
+
coords: b.coords,
|
|
28
|
+
building_hash: {
|
|
29
|
+
id: 2,
|
|
30
|
+
title: "Здание 2",
|
|
31
|
+
props: {
|
|
32
|
+
square: "1234 кв.м.",
|
|
33
|
+
square_free: "124 кв. м",
|
|
34
|
+
floor_height: "6 кв. м",
|
|
35
|
+
column_step: "2 м",
|
|
36
|
+
gate_type: "рaспашные",
|
|
37
|
+
communications: "Интернет, электричество, водоснабжение",
|
|
38
|
+
price: "от 155 руб/кв.м в месяц"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
img: {
|
|
42
|
+
bg: {
|
|
43
|
+
src: "/assets/sample_bg-e36f4b42acde72d4ff05376498e5834423165d43e73650dd24a342ecb20779b9.gif"
|
|
44
|
+
},
|
|
45
|
+
overlay: {
|
|
46
|
+
src: "/assets/sample_overlay-f99419a8904207a6ac74288bccac16c76b388b7162bf2629a2a8dd825746f49b.gif"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
childs: []
|
|
50
|
+
}
|
|
51
|
+
buildings_to_location_json << ob
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# после чего удаляем из locs_hash все object_type=building
|
|
55
|
+
# locs_hash["childs"].each do |child|
|
|
56
|
+
# if child["object_type"] == 'building'
|
|
57
|
+
# delete locs_hash["childs"]
|
|
58
|
+
# end
|
|
59
|
+
# end
|
|
60
|
+
|
|
61
|
+
# просто заменяем всех детей
|
|
62
|
+
locs_hash["childs"] = buildings_to_location_json
|
|
63
|
+
|
|
64
|
+
puts "<Building.update_json> #{locs_hash}"
|
|
65
|
+
|
|
66
|
+
# File.open(locations_path, 'w') do |f|
|
|
67
|
+
# f.write(locs_hash.to_json)
|
|
68
|
+
# end
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module C80Map
|
|
2
|
+
class Setting < ActiveRecord::Base
|
|
3
|
+
mount_uploader :map_image, C80Map::MapImageUploader
|
|
4
|
+
after_save :update_json
|
|
5
|
+
|
|
6
|
+
def map_img
|
|
7
|
+
MiniMagick::Image.open(map_image.path)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
protected
|
|
11
|
+
|
|
12
|
+
def update_json
|
|
13
|
+
|
|
14
|
+
locations_path = Rails.root.join("public", "locations.json")
|
|
15
|
+
locs = File.read(locations_path)
|
|
16
|
+
puts "<update_json> #{ Rails.root.join("public", "locations.json") }"
|
|
17
|
+
|
|
18
|
+
locs_hash = JSON.parse(locs)
|
|
19
|
+
locs_hash["mapwidth"] = map_img["width"].to_s
|
|
20
|
+
locs_hash["mapheight"] = map_img["height"].to_s
|
|
21
|
+
locs_hash["img"] = map_image.url.to_s
|
|
22
|
+
|
|
23
|
+
File.open(locations_path,'w') do |f|
|
|
24
|
+
f.write(locs_hash.to_json)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module C80Map
|
|
2
|
+
|
|
3
|
+
class MapImageUploader < CarrierWave::Uploader::Base
|
|
4
|
+
|
|
5
|
+
include CarrierWave::MiniMagick
|
|
6
|
+
|
|
7
|
+
storage :file
|
|
8
|
+
|
|
9
|
+
version :thumb do
|
|
10
|
+
process :resize_to_fit => [500,500]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def store_dir
|
|
14
|
+
"uploads/map/"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def filename
|
|
18
|
+
if original_filename
|
|
19
|
+
"map_#{secure_token(4)}.#{file.extension}"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
protected
|
|
24
|
+
def secure_token(length=16)
|
|
25
|
+
var = :"@#{mounted_as}_secure_token"
|
|
26
|
+
model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.hex(length/2))
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<div class="container-fluid" id="row_under_header">
|
|
2
|
+
<div class="container" id="under_header">
|
|
3
|
+
<div id="left_side">
|
|
4
|
+
<div class="clearfix"><span id="pbrown">Площади от</span></div>
|
|
5
|
+
<span id="pnavy"><%= @spro.header_price %></span>
|
|
6
|
+
<span id="pdark">рублей/кв.м.</span>
|
|
7
|
+
</div>
|
|
8
|
+
<div id="right_side">
|
|
9
|
+
<p id="ptele"><%= @spro.address_telephone_1 %></p>
|
|
10
|
+
<p id="paddress"><%= @spro.address_locality %><br>
|
|
11
|
+
<%= @spro.address_street %></p>
|
|
12
|
+
</div>
|
|
13
|
+
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
var LOCS_HASH = <%= locs_hash.to_json.html_safe %>;
|
|
3
|
+
var MAP_WIDTH = <%= mapwidth %>;
|
|
4
|
+
var MAP_HEIGHT = <%= mapheight %>;
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div class="container" id="container_left_side">
|
|
8
|
+
<div id="left_side">
|
|
9
|
+
<div class="clearfix"><span id="pbrown">Площади от</span></div>
|
|
10
|
+
<span id="pnavy"><%= @spro.header_price %></span>
|
|
11
|
+
<span id="pdark">рублей/кв.м.</span>
|
|
12
|
+
</div>
|
|
13
|
+
<div id="right_side">
|
|
14
|
+
<p id="ptele"><%= @spro.address_telephone_1 %></p>
|
|
15
|
+
<p id="paddress"><%= @spro.address_locality %><br>
|
|
16
|
+
<%= @spro.address_street %></p>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<div id="map_wrapper">
|
|
21
|
+
<%= render "c80_map/shared/save_preloader" %>
|
|
22
|
+
<div class="mcontainer">
|
|
23
|
+
<div class="mmap">
|
|
24
|
+
<div class="layers"></div>
|
|
25
|
+
<div id="masked" style="-webkit-clip-path:polygon(0 0, 0 1px)"></div>
|
|
26
|
+
<svg id='svg' xmlns="http://www.w3.org/2000/svg" version="1.2" viewbox='0 0 <%= mapwidth %> <%=mapheight%>' baseProfile="tiny" preserveAspectRatio="xMaxYMax"></svg>
|
|
27
|
+
<div class="overlay_layers"></div>
|
|
28
|
+
<svg id='svg_overlay' xmlns="http://www.w3.org/2000/svg" version="1.2" viewbox='0 0 <%= mapwidth %> <%=mapheight%>' baseProfile="tiny" preserveAspectRatio="xMaxYMax"></svg>
|
|
29
|
+
</div>
|
|
30
|
+
<div class="container" id="ui">
|
|
31
|
+
<%= render "layouts/shared/map_row/building_info" %>
|
|
32
|
+
<%= render "layouts/shared/map_row/area_order_button" %>
|
|
33
|
+
</div>
|
|
34
|
+
<div class="container" id="container_buttons">
|
|
35
|
+
<div class="mzoom_buttons"></div>
|
|
36
|
+
<div class="status_bar"></div>
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
data/bin/console
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require "bundler/setup"
|
|
4
|
+
require "c80_map"
|
|
5
|
+
|
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
|
8
|
+
|
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
|
10
|
+
# require "pry"
|
|
11
|
+
# Pry.start
|
|
12
|
+
|
|
13
|
+
require "irb"
|
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
data/c80_map.gemspec
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require 'c80_map/version'
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |spec|
|
|
7
|
+
spec.name = "c80_map"
|
|
8
|
+
spec.version = C80Map::VERSION
|
|
9
|
+
spec.authors = ["C80609A"]
|
|
10
|
+
spec.email = ["c080609a@gmail.com"]
|
|
11
|
+
|
|
12
|
+
spec.summary = 'Map'
|
|
13
|
+
spec.description = 'Map + map editor'
|
|
14
|
+
spec.homepage = 'http://www.vorsa-park.ru'
|
|
15
|
+
spec.license = "MIT"
|
|
16
|
+
|
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
18
|
+
spec.bindir = "exe"
|
|
19
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
20
|
+
spec.require_paths = ["lib"]
|
|
21
|
+
|
|
22
|
+
spec.add_development_dependency "bundler", "~> 1.9"
|
|
23
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
|
24
|
+
spec.add_dependency 'activesupport', ['>= 3.0.0']
|
|
25
|
+
end
|
data/config/routes.rb
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module C80Map
|
|
2
|
+
class Engine < ::Rails::Engine
|
|
3
|
+
isolate_namespace C80Map
|
|
4
|
+
|
|
5
|
+
initializer :c80_map do
|
|
6
|
+
if defined?(ActiveAdmin)
|
|
7
|
+
ActiveAdmin.application.load_paths += Dir["#{config.root}/app/models/**/"]
|
|
8
|
+
#ActiveAdmin.application.load_paths += Dir["#{config.root}/app/models/concerns/**/"]
|
|
9
|
+
ActiveAdmin.application.load_paths += Dir["#{config.root}/app/admin/c80_map/**/"]
|
|
10
|
+
# ActiveAdmin.application.load_paths += Dir["#{config.root}/app/jobs/**/"]
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
initializer :append_migrations do |app|
|
|
15
|
+
unless app.root.to_s.match root.to_s
|
|
16
|
+
config.paths["db/migrate"].expanded.each do |expanded_path|
|
|
17
|
+
app.config.paths["db/migrate"] << expanded_path
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|