c80_map_floors 0.1.0.7 → 0.1.0.8

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.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/buttons/admin_buttons/button_area_link.js +29 -7
  3. data/app/assets/javascripts/buttons/admin_buttons/button_building_link.js +19 -1
  4. data/app/assets/javascripts/buttons/admin_buttons/button_edit.js +17 -0
  5. data/app/assets/javascripts/buttons/admin_buttons/button_floor_link.js +6 -5
  6. data/app/assets/javascripts/buttons/admin_buttons/button_save.js +1 -1
  7. data/app/assets/javascripts/c80_map_floors.js.coffee +8 -5
  8. data/app/assets/javascripts/map_objects/building.js +32 -3
  9. data/app/assets/javascripts/src/main.js +179 -41
  10. data/app/assets/javascripts/src/state_controller.js +16 -1
  11. data/app/assets/javascripts/svg_elements/admin_building_label.js +61 -0
  12. data/app/assets/javascripts/svg_elements/polygon.js +25 -8
  13. data/app/assets/stylesheets/c80_map_floors.scss +6 -2
  14. data/app/assets/stylesheets/map.scss +24 -11
  15. data/app/assets/stylesheets/view/modal_window.scss +5 -0
  16. data/app/controllers/c80_map_floors/ajax_controller.rb +59 -18
  17. data/app/models/c80_map_floors/area_representator.rb +13 -2
  18. data/app/models/c80_map_floors/building_representator.rb +13 -0
  19. data/app/models/c80_map_floors/floor_representator.rb +20 -10
  20. data/app/views/c80_map_floors/ajax/fetch_unlinked_areas.js.erb +4 -2
  21. data/app/views/c80_map_floors/ajax/fetch_unlinked_buildings.js.erb +2 -0
  22. data/app/views/c80_map_floors/ajax/fetch_unlinked_floors.js.erb +3 -1
  23. data/app/views/c80_map_floors/ajax/shared/_select_list_unlinked_areas.html.erb +6 -4
  24. data/app/views/c80_map_floors/ajax/shared/_select_list_unlinked_buildings.html.erb +9 -8
  25. data/app/views/c80_map_floors/ajax/shared/_select_list_unlinked_floors.html.erb +8 -3
  26. data/config/routes.rb +7 -0
  27. data/lib/c80_map_floors/version.rb +1 -1
  28. metadata +3 -2
@@ -78,7 +78,7 @@ function StateController() {
78
78
  case "editing":
79
79
  //<editor-fold desc="...">
80
80
 
81
- console.log("<StateController.setMode> <ожидается рисование полигонов Зданий>.");
81
+ console.log("<StateController.setMode> <ожидается рисование полигонов Зданий или их привязка>.");
82
82
 
83
83
  // спрячем надписи "цена за метр" и адрес с телефоном
84
84
  _this.left_side.css("top", -300);
@@ -96,6 +96,9 @@ function StateController() {
96
96
  _this.map_editing.css('display', 'block');
97
97
  _this.map_removing.css('display', 'none');
98
98
 
99
+ // покажем кнопку "связать здание с полигоном"
100
+ _map.building_link_button_klass.show();
101
+
99
102
  // покажем кнопки, присущие этому режиму
100
103
  _this.mzoom_buttons.css('opacity', '1');
101
104
 
@@ -107,6 +110,9 @@ function StateController() {
107
110
  // скроем подсказки - сколько свободных площадей где есть
108
111
  _map.hide_free_areas_hint();
109
112
 
113
+ //Показать все админские лейблы.
114
+ _map.admin_label_show_all();
115
+
110
116
  //</editor-fold>
111
117
  break;
112
118
 
@@ -132,6 +138,11 @@ function StateController() {
132
138
  _this.map_editing.css('display', 'none');
133
139
  _this.map_removing.css('display', 'none');
134
140
 
141
+ // скроем кнопку "связать здание с полигоном"
142
+ if (_map.building_link_button_klass != null) {
143
+ _map.building_link_button_klass.hide();
144
+ }
145
+
135
146
  // покажем кнопки zoom
136
147
  _this.mzoom_buttons.css('opacity', '1');
137
148
 
@@ -167,6 +178,10 @@ function StateController() {
167
178
 
168
179
  // покажем подсказки - сколько свободных площадей где есть
169
180
  _map.show_free_areas_hint();
181
+
182
+ //Скрыть все админские лейблы.
183
+ _map.admin_label_hide_all();
184
+
170
185
  //</editor-fold>
171
186
  break;
172
187
 
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ /**
4
+ *
5
+ * @param options - Это C80MapFloors::MapBuilding.my_as_json
6
+ * @param link_to_map - ссылка на класс карты
7
+ * @param params - вспомогательные параметры для отрисовки (например, координаты центра)
8
+ * @constructor
9
+ */
10
+ var AdminBuildingLabel = function (options, link_to_map, params) {
11
+
12
+ var _this = this;
13
+
14
+ this._x = null;
15
+ this._y = null;
16
+ this._map = null;
17
+ this._g = null;
18
+ this._text_element_ns = null;
19
+
20
+ console.log('<AdminBuildingLabel> Пытаемся создать админский лейбл для Здания, options["data"] = ' + options["data"]);
21
+ // options["data"] - это C80MapFloors::BuildingRepresentator::InstanceMethods.my_as_json
22
+ if (options["data"] != null && typeof options["data"]["id"] != 'undefined') {
23
+ console.log('<Building.init> Для полигона id=' + options["id"] + ' создаём админский лейбл title=' + options["data"]["title"]);
24
+
25
+ //this._x = options["coords"][0];
26
+ //this._y = options["coords"][1];
27
+
28
+ this._x = params['cx'];
29
+ this._y = params['cy'];
30
+
31
+ this._map = link_to_map;
32
+
33
+ // создадим узел, который будет помещён в дерево и будет виден пользователю
34
+ this._g = document.createElementNS('http://www.w3.org/2000/svg', 'g');
35
+ this._text_element_ns = document.createElementNS('http://www.w3.org/2000/svg', 'text');
36
+ this._text_element_ns.setAttribute('x', this._x);
37
+ this._text_element_ns.setAttribute('y', this._y);
38
+ this._text_element_ns.setAttribute('fill', '#000000');
39
+ this._text_element_ns.setAttribute('style', 'font-size:12px;font-weight:bold;');
40
+
41
+ // помещаем текст: id=<id_привязанного_Здания>; title=<Заголовок_привязанного_здания>
42
+ this._text_element_ns.textContent = "id="+options["data"]["id"] + "; название='" + options["data"]["title"] + "'";
43
+
44
+ // "антагонист" метода destroy()
45
+ this._map.addNodeToSvg(this._g, false);
46
+ this._g.appendChild(this._text_element_ns);
47
+
48
+ }
49
+
50
+ // самоуничтожение
51
+ this.destroy = function () {
52
+ if (this._map != null) {
53
+ console.log('<AdminBuildingLabel.destroy> Уничтожаем админскую метку.');
54
+ _this._map.removeNodeFromSvg(_this._g, false);
55
+ _this._g.removeChild(_this._text_element_ns);
56
+ delete _this._text_element_ns;
57
+ delete _this._g;
58
+ }
59
+ };
60
+
61
+ };
@@ -1,13 +1,23 @@
1
- /* Polygon constructor */
2
- var Polygon = function (x, y, is_overlay, self) {
3
-
4
- this._map = self;
1
+ /** Конструктор. Создать полигон и прицепить в список отображения карты.
2
+ *
3
+ * @param x
4
+ * @param y
5
+ * @param is_overlay
6
+ * @param link_to_map - ссылка на класс карты
7
+ * @constructor
8
+ */
9
+ var Polygon = function (x, y, is_overlay, link_to_map) {
10
+
11
+ this._map = link_to_map;
5
12
  this._map.is_draw = true;
6
13
 
7
14
  this.params = [x, y]; //array of coordinates of polygon points
8
15
 
16
+ // создаём полигон
9
17
  this.g = document.createElementNS('http://www.w3.org/2000/svg', 'g');
10
18
  this.polygon = document.createElementNS('http://www.w3.org/2000/svg', 'polyline');
19
+
20
+ // цепляем полигон в список отображения карты
11
21
  this._map.addNodeToSvg(this.g, is_overlay);
12
22
  this.g.appendChild(this.polygon);
13
23
 
@@ -169,12 +179,19 @@ Polygon.prototype.deselect = function () {
169
179
  return this;
170
180
  };
171
181
 
172
- Polygon.createFromSaved = function (params, is_overlay, self) {
182
+ /** Создать полигон по параметрам (и "прицепить" его в список отображения карты).
183
+ *
184
+ * @param params
185
+ * @param is_overlay
186
+ * @param link_to_map - ссылка на класс карты
187
+ * @returns {Polygon}
188
+ */
189
+ Polygon.createFromSaved = function (params, is_overlay, link_to_map) {
173
190
  //console.log("<Polygon.createFromSaved>");
174
191
  //console.log("<Polygon.createFromSaved> is_overlay = " + is_overlay);
175
192
 
176
193
  var coords = params.coords,
177
- area = new Polygon(coords[0], coords[1], is_overlay, self);
194
+ area = new Polygon(coords[0], coords[1], is_overlay, link_to_map);
178
195
 
179
196
  for (var i = 2, c = coords.length; i < c; i += 2) {
180
197
  area.addPoint(coords[i], coords[i + 1]);
@@ -186,8 +203,8 @@ Polygon.createFromSaved = function (params, is_overlay, self) {
186
203
  area.setCoords(area.params).deselect();
187
204
  delete(area.polyline);
188
205
 
189
- self.is_draw = false;
190
- self.drawing_poligon = null;
206
+ link_to_map.is_draw = false;
207
+ link_to_map.drawing_poligon = null;
191
208
 
192
209
  return area;
193
210
 
@@ -1,5 +1,9 @@
1
- @import "bootstrap-sprockets";
2
- @import "bootstrap";
1
+
2
+ //#-> Уехали в host app (в частности: s101km)
3
+ //@import "bootstrap-sprockets";
4
+ //@import "bootstrap";
5
+ //@import 'bootstrap-select';
6
+
3
7
  @import "map";
4
8
  @import "ui/**/*";
5
9
  @import "view/**/*";
@@ -1227,7 +1227,7 @@ div#map_wrapper {
1227
1227
  }
1228
1228
  }
1229
1229
 
1230
- polygon, polyline {
1230
+ polygon, polyline { /* общий внешний вид полигона */
1231
1231
  fill: rgba(255, 255, 255, 0);
1232
1232
  stroke: rgba(255, 255, 255, 0);
1233
1233
  cursor: pointer;
@@ -1246,7 +1246,7 @@ div#map_wrapper {
1246
1246
  g {
1247
1247
 
1248
1248
  &.free {
1249
- polygon, polyline {
1249
+ polygon, polyline { /* СВОБОДНЫЙ полигон */
1250
1250
  fill: rgba(0, 255, 19, 0.30);
1251
1251
  stroke: rgba(51, 51, 51, 0.36);
1252
1252
  cursor: pointer;
@@ -1260,7 +1260,7 @@ div#map_wrapper {
1260
1260
  }
1261
1261
 
1262
1262
  &.busy {
1263
- polygon, polyline {
1263
+ polygon, polyline { /* ЗАНЯТЫЙ полигон */
1264
1264
  fill: rgba(255, 4, 0, 0.30);
1265
1265
  stroke: rgba(255, 4, 0, 0.30);
1266
1266
  cursor: pointer;
@@ -1275,7 +1275,7 @@ div#map_wrapper {
1275
1275
 
1276
1276
  &.unassigned {
1277
1277
 
1278
- polygon, polyline {
1278
+ polygon, polyline { /* НЕНАЗНАЧЕННЫЙ полигон */
1279
1279
  fill: rgba(131, 131, 131, 0.30);
1280
1280
  stroke: rgba(131, 131, 131, 0.40);
1281
1281
  cursor: pointer;
@@ -1287,7 +1287,7 @@ div#map_wrapper {
1287
1287
  }
1288
1288
 
1289
1289
  &.viewing_area {
1290
- polygon, polyline {
1290
+ polygon, polyline { /* НЕНАЗНАЧЕННЫЙ и просматриваемый полигон (с пунктиром) */
1291
1291
  /*background: transparent url(image_path('loader_button.gif')) no-repeat 0 0;*/
1292
1292
  fill: rgba(131, 131, 131, 0.50);
1293
1293
  stroke: rgba(131, 131, 131, 0.60);
@@ -1305,7 +1305,7 @@ div#map_wrapper {
1305
1305
  }
1306
1306
 
1307
1307
  &.viewing_area {
1308
- polygon, polyline {
1308
+ polygon, polyline { /* подразумевается НАЗНАЧЕННЫЙ полигон */
1309
1309
  /*background: transparent url(image_path('loader_button.gif')) no-repeat 0 0;*/
1310
1310
  fill: rgba(0, 255, 19, 0.10);
1311
1311
  stroke: rgba(255, 246, 242, 0.59);
@@ -1336,7 +1336,7 @@ div#map_wrapper {
1336
1336
  opacity: 0;
1337
1337
  }
1338
1338
 
1339
- polygon, polyline {
1339
+ polygon, polyline { /* невидимый полигон оверлейного слоя */
1340
1340
  fill: rgba(255, 255, 255, 0);
1341
1341
  stroke: rgba(255, 255, 255, 0);
1342
1342
  cursor: pointer;
@@ -1353,7 +1353,7 @@ div#map_wrapper {
1353
1353
  display: block;
1354
1354
  }
1355
1355
 
1356
- polygon, polyline {
1356
+ polygon, polyline { /* когда редактируем, полигоны светятся синим */
1357
1357
  fill: rgba(103, 232, 237, 0.30);
1358
1358
  stroke: rgba(0, 255, 19, 0.90);
1359
1359
  &:hover {
@@ -1363,7 +1363,7 @@ div#map_wrapper {
1363
1363
  }
1364
1364
 
1365
1365
  g.free {
1366
- polygon, polyline {
1366
+ polygon, polyline { /* когда редактируем, СВОБОДНЫЕ полигоны светятся зелёным */
1367
1367
  fill: rgba(0, 255, 19, 0.20);
1368
1368
  stroke: rgba(255, 255, 255, 0.90);
1369
1369
  cursor: pointer;
@@ -1377,7 +1377,7 @@ div#map_wrapper {
1377
1377
  }
1378
1378
 
1379
1379
  g.busy {
1380
- polygon, polyline {
1380
+ polygon, polyline { /* когда редактируем, ЗАНЯТЫЕ полигоны светятся красным */
1381
1381
  fill: rgba(255, 4, 0, 0.30);
1382
1382
  stroke: rgba(255, 255, 255, 0.90);
1383
1383
  cursor: pointer;
@@ -1393,6 +1393,19 @@ div#map_wrapper {
1393
1393
  }
1394
1394
  }
1395
1395
 
1396
+ &.editing {
1397
+ #svg {
1398
+ polygon.selected { /* когда редактируем карту, ВЫБРАННЫЙ полигон [здания] светится фиолетовым */
1399
+ fill: rgba(135, 18, 237, 0.40);
1400
+ stroke: rgba(0, 255, 19, 0.90);
1401
+ &:hover {
1402
+ fill: rgba(135, 18, 237, 0.70);
1403
+ stroke: rgba(255, 0, 169, 0.99);
1404
+ }
1405
+ }
1406
+ }
1407
+ }
1408
+
1396
1409
  // спрячем все полигоны, кроме редактируемого полигона
1397
1410
  &.edit_area {
1398
1411
  #svg {
@@ -1412,7 +1425,7 @@ div#map_wrapper {
1412
1425
  display: block;
1413
1426
  }
1414
1427
 
1415
- polygon, polyline {
1428
+ polygon, polyline { /* когда создаём, все полигоны светятся красным */
1416
1429
  fill: rgba(255, 61, 0, 0.50);
1417
1430
  stroke: rgba(255, 255, 255, 0.8);
1418
1431
  &:hover {
@@ -15,4 +15,9 @@ div#modal_window {
15
15
  background-color: transparent;
16
16
  }
17
17
 
18
+ /* выправляем выравнивание в bootstrap-select-picker */
19
+ span.filter-option {
20
+ text-align: left !important;
21
+ }
22
+
18
23
  }
@@ -5,10 +5,15 @@ module C80MapFloors
5
5
  # puts "<AjaxController.map_edit_buttons> #{params}"
6
6
  end
7
7
 
8
+ # прислать ВСЕ Площади указанного Этажа
8
9
  def fetch_unlinked_areas
9
- # Rails.logger.debug "<AjaxController.fetch_unlinked_areas> params = #{params}"
10
+ Rails.logger.debug "[TRACE] <AjaxController.fetch_unlinked_areas> params = #{params}"
11
+ # <AjaxController.fetch_unlinked_areas> params = {"sfloor_id"=>"1", "controller"=>"c80_map_floors/ajax", "action"=>"fetch_unlinked_areas"}
10
12
 
11
- @unlinked_areas = Rent::Area.unlinked_areas
13
+ # Sfloor - принадлежит моделям host-проекта (в частности, stroy101km)
14
+ # noinspection RubyResolve
15
+ @sfloor_areas = Sfloor.find(params[:sfloor_id].to_i).areas
16
+ Rails.logger.debug "[TRACE] <AjaxController.fetch_unlinked_areas> @sfloor_areas.count = #{@sfloor_areas.count}"
12
17
 
13
18
  end
14
19
 
@@ -17,31 +22,40 @@ module C80MapFloors
17
22
  Rails.logger.debug "[TRACE] <AjaxController.fetch_unlinked_floors> params = #{params}"
18
23
  # [TRACE] <AjaxController.fetch_unlinked_floors> params = {"building_id"=>"1", "controller"=>"c80_map_floors/ajax", "action"=>"fetch_unlinked_floors"}
19
24
 
20
- @unlinked_floors = Sfloor.unlinked_floors(params[:building_id]) # Sfloor - Этаж из host app, который еще и floor_representator
25
+ # меняем логику - делаем менее строгой, теперь присылаются ВСЕ этажи указанного Здания
26
+ # @unlinked_floors = Sfloor.unlinked_floors(params[:building_id]) # Sfloor - Этаж из host app, который еще и floor_representator
27
+
28
+ # Building - принадлежит моделям host-проекта (в частности, stroy101km)
29
+ # noinspection RubyResolve
30
+ @building_sfloors = Building.find(params[:building_id].to_i).sfloors
21
31
 
22
32
  end
23
33
 
24
34
  def fetch_unlinked_buildings
25
- # Rails.logger.debug "<AjaxController.fetch_unlinked_buildings> params = #{params}"
35
+ Rails.logger.debug "[TRACE] <AjaxController.fetch_unlinked_buildings> params = #{params}"
26
36
 
27
- @unlinked_buildings = Rent::Building.unlinked_buildings
37
+ @unlinked_buildings = Building.all.order_title
28
38
 
29
39
  end
30
40
 
31
41
  # связать Rent::Area и Map::Area
32
42
  # в процессе произойдёт обновление json-файла с данными
43
+ # noinspection RubyResolve
33
44
  def link_area
34
- Rails.logger.debug "<AjaxController.link_area> params = #{params}"
45
+ Rails.logger.debug "[TRACE] <AjaxController.link_area> params = #{params}"
46
+ # [TRACE] <AjaxController.link_area> params = {"area_id"=>"364", "apolygon_id"=>"3", "controller"=>"c80_map_floors/ajax", "action"=>"link_area"}
47
+
48
+ # фиксируем участников
49
+ rent_area = ::Area.find(params[:area_id])
50
+ area = C80MapFloors::Area.find(params[:apolygon_id])
35
51
 
36
- # TODO:: т.к. ПОКА используем этот gem только в stroy101, то должно быть не Rent::Area
37
- rent_area = Rent::Area.find(params[:rent_area_id])
38
- map_area = C80Map::Area.find(params[:map_area_id])
39
- rent_area.map_areas.delete_all
40
- rent_area.map_areas << map_area
52
+ # rent_area has_one area(полигон)
53
+ rent_area.area.delete_all if rent_area.area.present?
54
+ rent_area.area = area
41
55
  rent_area.save
42
56
 
43
57
  result = {
44
- updated_locations_json: C80Map::MapJson.fetch_json
58
+ updated_locations_json: C80MapFloors::MapJson.fetch_json
45
59
  }
46
60
 
47
61
  respond_to do |format|
@@ -51,18 +65,45 @@ module C80MapFloors
51
65
  end
52
66
 
53
67
  #
68
+ # noinspection RubyResolve
54
69
  def link_building
55
70
 
56
- Rails.logger.debug "<AjaxController.link_building> params = #{params}"
71
+ Rails.logger.debug "[TRACE] <AjaxController.link_building> params = #{params}"
72
+ # [TRACE] <AjaxController.link_building> params = {"rent_building_id"=>"29", "map_building_id"=>"10", "controller"=>"c80_map_floors/ajax", "action"=>"link_building"}
73
+ rent_building = ::Building.find(params[:building_id])
57
74
 
58
- rent_building = Rent::Building.find(params[:rent_building_id])
59
- map_building = C80Map::MapBuilding.find(params[:map_building_id])
60
- rent_building.map_buildings.delete_all
61
- rent_building.map_buildings << map_building
75
+ map_building = C80MapFloors::MapBuilding.find(params[:map_building_id])
76
+
77
+ rent_building.map_building.delete_all if rent_building.map_building.present?
78
+ rent_building.map_building = map_building
62
79
  rent_building.save
63
80
 
64
81
  result = {
65
- updated_locations_json: C80Map::MapJson.fetch_json
82
+ updated_locations_json: C80MapFloors::MapJson.fetch_json
83
+ }
84
+
85
+ respond_to do |format|
86
+ format.json { render json: result }
87
+ end
88
+
89
+ end
90
+
91
+ # связать Этаж и Картинку Этажа (обновится JSON карты)
92
+ def link_floor
93
+ Rails.logger.debug "[TRACE] <AjaxController.link_floor> params = #{params}"
94
+ # <AjaxController.link_floor> params = {"sfloor_id"=>"3", "floor_id"=>"2", "controller"=>"c80_map_floors/ajax", "action"=>"link_floor"}
95
+
96
+ # фиксируем участников
97
+ sfloor = Sfloor.find(params[:sfloor_id])
98
+ floor = C80MapFloors::Floor.find(params[:floor_id])
99
+
100
+ # sfloor has_one floor
101
+ sfloor.floor.delete_all if sfloor.floor.present?
102
+ sfloor.floor = floor
103
+ sfloor.save
104
+
105
+ result = {
106
+ updated_locations_json: C80MapFloors::MapJson.fetch_json
66
107
  }
67
108
 
68
109
  respond_to do |format|
@@ -19,7 +19,9 @@ module C80MapFloors
19
19
  def acts_as_map_area_representator
20
20
  class_eval do
21
21
 
22
- has_many :map_areas, :as => :area_representator, :class_name => 'C80MapFloors::Area', :dependent => :nullify
22
+ # has_many :map_areas, :as => :area_representator, :class_name => 'C80MapFloors::Area', :dependent => :nullify
23
+ has_one :area, :as => :area_representator, :class_name => 'C80MapFloors::Area', :dependent => :nullify
24
+
23
25
  after_save :update_json
24
26
 
25
27
  def self.unlinked_areas
@@ -32,8 +34,17 @@ module C80MapFloors
32
34
  res
33
35
  end
34
36
 
37
+ # выдать название привязанного к Площади полигона
38
+ def apolygon_title
39
+ res = '-'
40
+ if self.area.present?
41
+ res = "id=#{self.area.id}"
42
+ end
43
+ res
44
+ end
45
+
35
46
  def update_json
36
- # MapJson.update_json # NOTE:: возможно, временно отключён
47
+ MapJson.update_json # NOTE:: возможно, временно отключён
37
48
  end
38
49
 
39
50
  end
@@ -14,6 +14,7 @@ module C80MapFloors
14
14
  klass.send(:include, InstanceMethods)
15
15
  end
16
16
 
17
+ # noinspection ALL
17
18
  module ClassMethods
18
19
 
19
20
  def acts_as_map_building_representator
@@ -22,6 +23,8 @@ module C80MapFloors
22
23
  has_one :map_building, :as => :building_representator, :class_name => 'C80MapFloors::MapBuilding', :dependent => :nullify
23
24
  after_save :update_json
24
25
 
26
+ scope :order_title, -> {order(:title => :asc)}
27
+
25
28
  def self.unlinked_buildings
26
29
  res = []
27
30
  self.all.each do |building|
@@ -36,10 +39,20 @@ module C80MapFloors
36
39
  MapJson.update_json
37
40
  end
38
41
 
42
+ # выдать название привязанного к Зданию полигона
43
+ def bpolygon_title
44
+ res = '-'
45
+ if self.map_building.present?
46
+ res = "'#{self.map_building.title}'"
47
+ end
48
+ res
49
+ end
50
+
39
51
  end
40
52
  end
41
53
  end
42
54
 
55
+ # noinspection ALL
43
56
  module InstanceMethods
44
57
 
45
58
  def my_as_json
@@ -20,24 +20,34 @@ module C80MapFloors
20
20
  class_eval do
21
21
 
22
22
  has_one :floor, :as => :map_floor_representator, :class_name => 'C80MapFloors::Floor', :dependent => :nullify
23
+
23
24
  # after_save :update_json # NOTE:: возможно, временно
24
25
 
25
26
  # выдать список несвязанных с полигонами Этажей (указанного здания building_id)
26
- def self.unlinked_floors(building_id)
27
- res = []
28
- self.all.each do |sfloor|
29
- unless sfloor.floor.present?
30
- res << sfloor
31
- end
32
- end
33
- Rails.logger.debug "[TRACE] <floor_representator.unlinked_floors> Кол-во несвязанных Этажей: #{res.count}."
34
- res
35
- end
27
+ # def self.unlinked_floors(building_id) # building_id - не используется, надо дописать код, чтобы использовался
28
+ # res = []
29
+ # self.all.each do |sfloor|
30
+ # unless sfloor.floor.present?
31
+ # res << sfloor
32
+ # end
33
+ # end
34
+ # Rails.logger.debug "[TRACE] <floor_representator.unlinked_floors> Кол-во несвязанных Этажей: #{res.count}."
35
+ # res
36
+ # end
36
37
 
37
38
  def update_json
38
39
  MapJson.update_json
39
40
  end
40
41
 
42
+ # выдать название привязанного к Этажу полигона (но у Этажа вместо полигона выступает картинка)
43
+ def fpolygon_title
44
+ res = '-'
45
+ if self.floor.present?
46
+ res = "'#{self.floor.title}'"
47
+ end
48
+ res
49
+ end
50
+
41
51
  end
42
52
  end
43
53
  end
@@ -1,7 +1,9 @@
1
+ //noinspection JSUnusedGlobalSymbols
1
2
  var $m = $('#modal_window');
3
+ //noinspection JSUnusedGlobalSymbols
2
4
  var $cc = $m.find('.modal-body');
3
- var html_str = "<%= j render :partial => "c80_map_floors/ajax/shared/select_list_unlinked_areas",
5
+ var html_str = "<%= j render :partial => 'c80_map_floors/ajax/shared/select_list_unlinked_areas',
4
6
  :locals => {
5
- areas:@unlinked_areas
7
+ areas: @sfloor_areas
6
8
  } %>";
7
9
  $cc.html(html_str);
@@ -1,4 +1,6 @@
1
+ //noinspection JSUnusedGlobalSymbols
1
2
  var $m = $('#modal_window');
3
+ //noinspection JSUnusedGlobalSymbols
2
4
  var $cc = $m.find('.modal-body');
3
5
  var html_str = "<%= j render :partial => "c80_map_floors/ajax/shared/select_list_unlinked_buildings",
4
6
  :locals => {
@@ -1,7 +1,9 @@
1
+ //noinspection JSUnusedGlobalSymbols
1
2
  var $m = $('#modal_window');
3
+ //noinspection JSUnusedGlobalSymbols
2
4
  var $cc = $m.find('.modal-body');
3
5
  var html_str = "<%= j render :partial => 'c80_map_floors/ajax/shared/select_list_unlinked_floors',
4
6
  :locals => {
5
- floors:@unlinked_floors
7
+ sfloors: @building_sfloors
6
8
  } %>";
7
9
  $cc.html(html_str);
@@ -1,6 +1,8 @@
1
- <select id="unlinked_areas" class="selectpicker" data-style="btn-default">
2
- <% areas.each do |area|%>
3
- <option value="<%= area.id%>"><%= area.title %></option>
1
+ <%# список Площадей указанного Этажа, который выводится в modal bootstrap окне после нажатия кнопки "назначить площадь" %>
2
+
3
+ <select id="unlinked_areas" class="selectpicker" data-style="btn-default" data-width="400px">
4
+ <% areas.each do |area| %>
5
+ <option value="<%= area.id%>"><%= "#{area.name} (назначен полигон: #{area.apolygon_title})" %></option>
4
6
  <% end %>
5
7
  </select>
6
- <button type="button" id='submit_area_link' class="btn btn-primary">Сохранить</button>
8
+ <button type="button" id='submit_area_link' class="btn btn-success">Сохранить</button>
@@ -1,10 +1,11 @@
1
- <select id="unlinked_buildings" class="selectpicker" data-style="btn-default">
2
- <% buildings.each do |building| %>
3
- <% tt = building.title %>
4
- <% unless building.map_building.present? %>
5
- <% tt += ' (полигон назначен)' %>
6
- <% end %>
7
- <option value="<%= building.id%>"><%= tt %></option>
1
+ <%# список всех Зданий, который выводится в modal bootstrap окне после нажатия кнопки "назначить Здание" %>
2
+ <%# в названии файла присутствует unlinked - это рудимент, legacy from the past %>
3
+
4
+ <!--suppress HtmlFormInputWithoutLabel -->
5
+ <select id="unlinked_buildings" class="selectpicker" data-style="btn-default" data-width="400px">
6
+ <% # noinspection RubyResolve
7
+ buildings.each do |building| %>
8
+ <option value="<%= building.id%>"><%= "#{building.title} (назначен полигон: #{building.bpolygon_title})" %></option>
8
9
  <% end %>
9
10
  </select>
10
- <button type="button" id='submit_building_link' class="btn btn-primary">Сохранить</button>
11
+ <button type="button" id='submit_building_link' class="btn btn-success">Назначить</button>
@@ -1,6 +1,11 @@
1
- <select id="unlinked_floors" class="selectpicker" data-style="btn-default">
2
- <% floors.each do |floor| %>
3
- <option value="<%= floor.id%>"><%= floor.title %></option>
1
+ <%# список Этажей указанного Здания, который выводится в modal bootstrap окне после нажатия кнопки "назначить этаж" %>
2
+ <%# в названии файла присутствует unlinked - это было так, но я сделал менее строже - добавил возможность переназначить %>
3
+
4
+ <!--suppress HtmlFormInputWithoutLabel -->
5
+ <select id="unlinked_floors" class="selectpicker" data-style="btn-default" data-width="400px">
6
+ <% # noinspection RubyResolve
7
+ sfloors.each do |sfloor| %>
8
+ <option value="<%= sfloor.id%>"><%= "#{sfloor.title} (назначена картинка: #{sfloor.fpolygon_title})" %></option>
4
9
  <% end %>
5
10
  </select>
6
11
  <button type="button" id='submit_floor_link' class="btn btn-success">Сохранить</button>
data/config/routes.rb CHANGED
@@ -2,5 +2,12 @@ C80MapFloors::Engine.routes.draw do
2
2
  match '/save_map_data', to: 'map_ajax#save_map_data', via: :post
3
3
  match '/ajax/map_edit_buttons', :to => 'ajax#map_edit_buttons', :via => :post
4
4
 
5
+ match '/ajax/link_building', :to => 'ajax#link_building', :via => :post
6
+ match '/ajax/link_floor', :to => 'ajax#link_floor', :via => :post
7
+ match '/ajax/link_area', :to => 'ajax#link_area', :via => :post
8
+
9
+ # слово unlinked - это рудимент, legacy from the past
10
+ match '/ajax/fetch_unlinked_buildings', to: 'ajax#fetch_unlinked_buildings', via: :post
5
11
  match '/ajax/fetch_unlinked_floors', to: 'ajax#fetch_unlinked_floors', via: :post
12
+ match '/ajax/fetch_unlinked_areas', to: 'ajax#fetch_unlinked_areas', via: :post
6
13
  end
@@ -1,3 +1,3 @@
1
1
  module C80MapFloors
2
- VERSION = '0.1.0.7'
2
+ VERSION = '0.1.0.8'
3
3
  end