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
|