c80_map_floors 0.1.0.7 → 0.1.0.8

Sign up to get free protection for your applications and to get access to all the features.
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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 024bd7cdec99eb000d8b7986033389cf7f3f8ee0
4
- data.tar.gz: 67faa01e03d8d6f3f1b36b6d9ca01c1d7f125185
3
+ metadata.gz: e1c7da30384334272686359b100a6f88785e8bf3
4
+ data.tar.gz: 48d8272466a5594ea7b10f87fa4769ef8cf36b36
5
5
  SHA512:
6
- metadata.gz: c09e4ca07abdb7df0cd7c3c493c44ba2148c0c569e02e159f855b102bb5a70281a063b2db54861874e1d0f0c93af34ed04e195eb3ac5dbf2006ffc3e90a7558f
7
- data.tar.gz: 38c966cea8cc656cae79dfe3e3063bf7ba98e0e08d4cd919b27c8389bbbad42eb5a32d7a502abfcff8ef957f10a0c9070fd2e79276d9500d27ead7f92cd33f66
6
+ metadata.gz: 1459b0de09e7f77bbe55758537bea23b6b00a10ee75d496f65e304e60e1120dfc6eccece12dbd52ec16c98acecc65f4af5a0004a8c38f83d9b88adb2ff416391
7
+ data.tar.gz: e68b313b3553f958e0be706cfbe568cddaccbff9bd3b1f242d400839f7fbe0e48b13af391e083fcec0786a65463b24750351a82448cc685feda12f610fc061a6
@@ -40,15 +40,24 @@ function AreaLinkButton() {
40
40
 
41
41
  };
42
42
 
43
- var fetch_free_areas = function () {
43
+ /** функция, запрашивающая с сервера Площади (указанного Этажа).
44
+ *
45
+ * @param sfid - ID Этажа, которому должны принадлежать Площади
46
+ */
47
+ var fetch_areas_by_floor = function (sfid) {
48
+ console.log('<ButtonAreaLink.fetch_areas_by_floor> ');
49
+
44
50
  $.ajax({
45
51
  url:'/ajax/fetch_unlinked_areas',
46
52
  type:'POST',
47
- data: {building_id:"building_id"},
53
+ data: {
54
+ sfloor_id: sfid
55
+ },
48
56
  dataType:'script'
49
- }).done(fetch_free_areas_done);
57
+ }).done(fetch_areas_by_floor_done);
58
+
50
59
  };
51
- var fetch_free_areas_done = function (data, result) {
60
+ var fetch_areas_by_floor_done = function (data, result) {
52
61
  _map.save_preloader_klass.hide();
53
62
  show_modal_window();
54
63
  };
@@ -61,9 +70,22 @@ function AreaLinkButton() {
61
70
 
62
71
  //console.log("<AreaLinkButton.click>");
63
72
 
64
- _map.save_preloader_klass.show();
65
-
66
- fetch_free_areas();
73
+ //_map.save_preloader_klass.show();
74
+ //fetch_areas_by_floor();
75
+
76
+ // сначала пробуем добраться до данных Этажа картинки этажа
77
+ var floor_data = _map.current_building.json_current_floor()["data"];
78
+
79
+ if (floor_data == null || floor_data == undefined) {
80
+ alert('[ERROR] Перед тем, как назначать Площадь, необходимо назначить Этаж.');
81
+ } else {
82
+ // ID Этажа, которому должны принадлежать Площади, которые надо вывести в модальном окне
83
+ var sfid = floor_data["id"];
84
+ console.log("<ButtonAreaLink.onClick> Нажали кнопку 'Связать Площадь', запрашиваем Площади Этажа sfid = " + sfid);
85
+ _map.save_preloader_klass.show();
86
+ fetch_areas_by_floor(sfid);
87
+ }
88
+
67
89
  };
68
90
 
69
91
  _this.init = function (button_css_selector, link_to_map) {
@@ -56,7 +56,7 @@ function BuildingLinkButton() {
56
56
  var $link_show_modal_window = null;
57
57
 
58
58
  _this.onClick = function (e) {
59
- if (_this.el.hasClass('disabled')) return;
59
+ if (_this.el.hasClass('mapplic-disabled')) return;
60
60
  e.preventDefault();
61
61
 
62
62
  //console.log("<BuildingLinkButton.click>");
@@ -83,9 +83,27 @@ function BuildingLinkButton() {
83
83
  _this.el.css('display','none');
84
84
  };
85
85
 
86
+ // При входе в режим "Редактирование Карты": кнопка должна быть неактивна, если не выбрано ни одного полигона здания.
87
+ // также этот публичный метод вызывается, когда кликаем по полигонам Зданий в режиме редактирования (переключаемся между полигонами)
88
+ _this.en_check = function () {
89
+ console.log("<en_check> [breakpoint]");
90
+
91
+ //check
92
+ var mark_dirty = _map.selected_area != null;
93
+
94
+ // enable
95
+ if (mark_dirty) {
96
+ _this.el.removeClass('mapplic-disabled');
97
+ } else {
98
+ _this.el.addClass('mapplic-disabled');
99
+ }
100
+
101
+ };
102
+
86
103
  _this.show = function () {
87
104
  //console.log("<BuildingLinkButton.show>");
88
105
  _this.el.css('display','block');
106
+ _this.en_check();
89
107
  };
90
108
 
91
109
  }
@@ -70,10 +70,27 @@ function EditButton() {
70
70
  var mark_restore_svg_overlay = false;
71
71
 
72
72
  switch (_this.state) {
73
+
74
+ // переходим в режим "просмотра карты" из режима "редактирования карты"
73
75
  case 'editing':
74
76
  _this.setState('viewing');
77
+
78
+ //<editor-fold desc="// уходя из режима редактирования, чистим кое-какие переменные, связанные с назначением Зданий полигонам">
79
+ // сбросим css класс (возможно выбранного полигона)
80
+ console.log('<ButtonEdit.onClick> set viewing state, [breakpoint].');
81
+
82
+ if (_map.selected_area != undefined) {
83
+ _map.selected_area.deselect();
84
+ _map.selected_area = null;
85
+ }
86
+
87
+ // сбросим значение переменной current_building
88
+ _map.current_building = null;
89
+ //</editor-fold>
90
+
75
91
  break;
76
92
 
93
+ // переходим в режим "редактирования карты" из режима "просмотра карты"
77
94
  case 'viewing':
78
95
  _this.setState('editing');
79
96
  break;
@@ -37,11 +37,12 @@ function FloorLinkButton() {
37
37
 
38
38
  // клик по кнопке "применить" вызовет _map.link_floor()
39
39
  setTimeout(function () {
40
- //console.log($cc.find("button"));
41
- $cc.find("button").on('click', function () {
42
- if ($(this).attr('id') == "submit_floor_link") {
43
- _map.link_floor();
44
- }
40
+ //console.log($cc.find("button#submit_floor_link"));
41
+ var b = $cc.find("button#submit_floor_link");
42
+ //console.log('<breakpoint>');
43
+ b.on('click', function () {
44
+ //console.log('<ButtonFloorLink.submit_floor_link> CLICK');
45
+ _map.link_floor();
45
46
  });
46
47
  }, 1000);
47
48
 
@@ -75,7 +75,7 @@ function SaveChangesButton() {
75
75
  };
76
76
 
77
77
  _this.onClick = function (e) {
78
- if (_this.el.hasClass('disabled')) return;
78
+ if (_this.el.hasClass('mapplic-disabled')) return;
79
79
  e.preventDefault();
80
80
  _map.save_preloader_klass.show();
81
81
  sendDataToServer();
@@ -1,10 +1,12 @@
1
1
  #= require history_jquery
2
- #= require bootstrap/transition
3
- # require bootstrap/modal # Bootstrap Modal immediately disappearing: http://stackoverflow.com/a/13670437 # т.к. 101км это первый проект и там уже много нахуеверчено, в том числе: bootstrap.min.js лежит в папке lib/, то эту строку комментируем (только для 101km)
4
2
  #= require bootstrap/tooltip
5
- #= require bootstrap/alert
6
- #= require bootstrap/dropdown
7
- #= require bootstrap-select
3
+
4
+ #-> Уехали в host app (в частности: в s101km)
5
+ # require bootstrap/modal # Bootstrap Modal immediately disappearing: http://stackoverflow.com/a/13670437 # т.к. 101км это первый проект и там уже много нахуеверчено, в том числе: bootstrap.min.js лежит в папке lib/, то эту строку комментируем (только для 101km)
6
+ # require bootstrap/transition
7
+ # require bootstrap/alert
8
+ # require bootstrap/dropdown
9
+ # require bootstrap-select
8
10
 
9
11
  #= require_tree ./lib
10
12
 
@@ -12,6 +14,7 @@
12
14
  #= require ./svg_elements/polygon.js
13
15
  #= require ./svg_elements/area_label.js
14
16
  #= require ./svg_elements/building_label.js
17
+ #= require ./svg_elements/admin_building_label.js
15
18
 
16
19
  #= require_tree ./events
17
20
  #= require_tree ./map_objects
@@ -27,6 +27,9 @@ function Building() {
27
27
  // если вошли в какой-то этаж - эта переменная будет хранить ссылку на объект с данными полигона Этажа из locations.json
28
28
  var _json_current_floor = null;
29
29
 
30
+ _this._label = null;
31
+ _this._admin_label = null;
32
+
30
33
  var _zoomToMe = function () {
31
34
 
32
35
  /* рассчитаем масштаб, при котором можно вписать прямоугольник дома в прямоугольник рабочей области */
@@ -148,7 +151,7 @@ function Building() {
148
151
 
149
152
  };
150
153
 
151
- var _proccess_floors_data = function () {
154
+ var _process_floors_data = function () {
152
155
 
153
156
  if (_options["floors"] != undefined && _options["floors"].length) {
154
157
  _parse_floors(_options["floors"]);
@@ -158,6 +161,11 @@ function Building() {
158
161
 
159
162
  };
160
163
 
164
+ /**
165
+ *
166
+ * @param options - Это C80MapFloors::MapBuilding.my_as_json
167
+ * @param link_to_map
168
+ */
161
169
  _this.init = function (options, link_to_map) {
162
170
 
163
171
  if (options['coords'] != undefined && options['coords'].length) {
@@ -184,14 +192,21 @@ function Building() {
184
192
  _this.options["id"] = Math.ceil((Math.random()*100000));
185
193
  }
186
194
 
195
+ // создать полигон здания и прицепить в список отображения карты [в svg слой (т.к. is_overlay = false)]
187
196
  _polygon = Polygon.createFromSaved(options, false, _map);
188
197
  _polygon.building = _this;
189
198
 
190
199
  _this._calcBBox();
191
200
 
192
- // подпись над зданием - сколько свободных площадей
201
+ // TODO:: подпись над зданием - сколько свободных площадей
193
202
  _this._label = new BuildingLabel(options, _map);
194
203
 
204
+ // подпись над полигоном показываем только админам
205
+ // UPD: не прокатит, т.к. здания инициализируются ДО того, как приходит ajax/map_edit_buttons, где IS_ADMIN=true
206
+ //if (IS_ADMIN) {
207
+ // _this._admin_label = new AdminBuildingLabel(options, _map);
208
+ //}
209
+
195
210
  }
196
211
  };
197
212
 
@@ -207,7 +222,7 @@ function Building() {
207
222
  setTimeout(function () {
208
223
 
209
224
  // запустим внутренний механизм парсинга этажей и их отрисовки
210
- _proccess_floors_data();
225
+ _process_floors_data();
211
226
 
212
227
  // если у ПолигонаЗдания есть ПолигоныЭтажей - войдем в 1й этаж
213
228
  if (fCalcObjSize(_map_floors_hash) > 0) {
@@ -365,4 +380,18 @@ function Building() {
365
380
  return result;
366
381
  };
367
382
 
383
+ // показать/скрыть админские лейблы
384
+ this.admin_label_show = function () {
385
+ if (_this._admin_label == null) {
386
+ console.log('<Building.admin_label_show> Показать админский лейбл полигона Здания id=' + _this.id);
387
+ _this._admin_label = new AdminBuildingLabel(_options, _map, {cx:_cx, cy:_cy});
388
+ }
389
+ };
390
+ this.admin_label_hide = function () {
391
+ if (_this._admin_label != null) {
392
+ console.log('<Building.admin_label_hide> Уничтожить админский лейбл.');
393
+ _this._admin_label.destroy();
394
+ _this._admin_label = null;
395
+ }
396
+ };
368
397
  }
@@ -392,17 +392,23 @@ var InitMap = function (params) {
392
392
  return false;
393
393
  }; // IE drag fix
394
394
 
395
+ /* после запуска приложения - всегда слушаем нажатия мышью на полигоны и вершины */
395
396
  function onSvgMousedown(e) {
396
397
 
397
398
  //#-> Убрал 'edit_building', т.к. мы не можем ничего нарисовать в этом режиме - картинки этажей добавляются через админку
398
399
  if (self.mode === 'editing' || self.mode === 'edit_area' || self.mode === 'edit_floor') { // || self.mode === "edit_building"
399
400
  if (e.target.parentNode.tagName === 'g') {
400
- console.log("<onSvgMousedown> e = ");
401
+ console.log("<onSvgMousedown> Нажали мышью на полигон или вершину.");
401
402
  //console.log(e.pageX);
402
403
  //console.log("<mouseDown> e.target.parentNode.tagName = " + e.target.parentNode.tagName);
403
404
  //console.log(e.target);
404
405
  //info.unload();
405
406
 
407
+ // если ДО этого нажатия уже была "выбранная" область - "снимем" с неё css класс
408
+ if (self.selected_area != null && self.selected_area != undefined) {
409
+ self.selected_area.deselect();
410
+ }
411
+
406
412
  // запомним ссылку на "выбранную" область
407
413
  self.selected_area = e.target.parentNode.obj;
408
414
 
@@ -417,27 +423,44 @@ var InitMap = function (params) {
417
423
  'y': e.pageY
418
424
  };
419
425
 
420
- // если взаимодействуем с вершиной
426
+ //#-> a) Определяем, что хотим подвинуть мышкой методом drag-n-drop
427
+
428
+ // если хотим подвинуть вершину
421
429
  if (utils.hasClass(e.target, 'helper')) {
422
430
  var helper = e.target;
423
- //console.log("<mouseDown> helper.action = ");
424
- //console.log(helper.action);
425
431
  self.edit_type = helper.action; // pointMove
426
432
 
427
433
  if (helper.n >= 0) { // if typeof selected_area == polygon
428
434
  self.selected_area.selected_point = helper.n;
429
435
  }
430
436
 
431
- self.addEvent(self.el[0], 'mousemove', self.onEdit)
432
- //self.addEvent(self.el[0], 'mousemove', self.selected_area.onEdit)
433
- .addEvent(self.el[0], 'mouseup', self.onEditStop);
434
- }
437
+ //#-> b) После этого вешаем слушатели
438
+ self.addEvent(self.el[0], 'mousemove', self.onMouseMove)
439
+ .addEvent(self.el[0], 'mouseup', self.onMouseUp);
435
440
 
441
+ }
442
+ // если хотим подвинуть фигуру
443
+ //#-> отменили dnd фигур 20161227
436
444
  else if (e.target.tagName === 'rect' || e.target.tagName === 'circle' || e.target.tagName === 'polygon') {
437
- self.edit_type = 'move';
438
- self.addEvent(self.el[0], 'mousemove', self.onEdit)
439
- .addEvent(self.el[0], 'mouseup', self.onEditStop);
445
+ //self.edit_type = 'move';
446
+
447
+ // если это полигон здания - фиксируем его
448
+ var selected_area_building = self.selected_area.building;
449
+ if (selected_area_building != undefined && selected_area_building != null) {
450
+ self.current_building = selected_area_building; // фиксируем полигон здания в режиме "редактирования карты" при клике по полигону на карте
451
+ console.log("<self.onSvgMousedown> Это не Drag-n-drop, а обычный клик по полигону Здания c id=" + self.current_building.options["id"]);
452
+
453
+ // включим кнопку "связать Здание"
454
+ self.building_link_button_klass.en_check();
455
+
456
+ } else {
457
+ console.log("<self.onSvgMousedown> Это не Drag-n-drop, а обычный клик по фигуре.");
458
+ }
459
+
440
460
  }
461
+
462
+ // когда реализуем корректный механизм dnd фигур, тут должен очутиться (b)
463
+
441
464
  } else {
442
465
  //app.deselectAll();
443
466
  //info.unload();
@@ -452,7 +475,7 @@ var InitMap = function (params) {
452
475
  // Drag & drop
453
476
  function onDragNdrop(event) {
454
477
  //console.log("<mousedown> edit_type = " + self.edit_type);
455
- console.log("<mousedown> mode = " + self.mode + " dnd_enable = " + self.o.dnd_enable);
478
+ console.log("<mousedown> mode = " + self.mode + ", dnd_enable = " + self.o.dnd_enable + ', edit_type = ' + self.edit_type);
456
479
  //console.log(event);
457
480
 
458
481
  // если в данный момент не редактируем фигуру (т.е. не двигаем вершину фигуры)
@@ -506,7 +529,7 @@ var InitMap = function (params) {
506
529
 
507
530
  console.log("<mouseup> Отпустили мышь после клика, текущий режим карты: mode = " + self.mode);
508
531
 
509
- // исключаем случайный dnd дрожащей рукой
532
+ // исключаем случайный dnd дрожащей рукой [xdnd?]
510
533
  var dx = map.data('startX') - map.data('lastX');
511
534
  var dy = map.data('startY') - map.data('lastY');
512
535
  var delta = Math.sqrt(dx*dx + dy*dy);
@@ -533,7 +556,7 @@ var InitMap = function (params) {
533
556
  if (p.obj && p.obj.building) {
534
557
  var building = p.obj.building;
535
558
  console.log("<mouseup> Текущий mode карты 'viewing' => Входим в здание (а потом building сам решит, входить ли на 1й этаж).");
536
- self.current_building = building;
559
+ self.current_building = building; /* когда вошли в здание, определили переменную */
537
560
  building.enter();
538
561
  }
539
562
 
@@ -933,21 +956,62 @@ var InitMap = function (params) {
933
956
 
934
957
  };
935
958
 
936
- self.onEdit = function (e) {
959
+ //<editor-fold desc="// двигаем фигуру мышкой методом drag-n-drop">
960
+ self.onMouseMove = function (e) { // мышь нажата и двигается
937
961
 
938
- //console.log("<Polygon.prototype.onEdit> _s_f = " + _s_f);
939
- //console.log("<Polygon.prototype.onEdit> e = ");
962
+ //console.log("<Polygon.prototype.onMouseMove> _s_f = " + _s_f);
963
+ //console.log("<Polygon.prototype.onMouseMove> e = ");
940
964
  //console.log(_s_f);
941
965
  //console.log(e.pageX);
942
966
 
943
967
  var selected_area = self.selected_area;
944
968
  var edit_type = self.edit_type;
945
- //console.log("<Polygon.prototype.onEdit> edit_type = " + edit_type);
969
+ //console.log("<Polygon.prototype.onMouseMove> edit_type = " + edit_type);
946
970
 
947
971
  selected_area.dynamicEdit(selected_area[edit_type](e.pageX - selected_area.delta.x, e.pageY - selected_area.delta.y));
948
972
  selected_area.delta.x = e.pageX;
949
973
  selected_area.delta.y = e.pageY;
950
974
  };
975
+ self.onMouseUp = function (e) { // отпустили мышь (другими словами - закончили drag'n'drop)
976
+ console.log("<self.onMouseUp> [for_breakpoint] Отпустили мышь.");
977
+
978
+ var _s_f = self.selected_area;
979
+ var edit_type = self.edit_type;
980
+
981
+ //#-> определим, был ли drag-n-drop вообще? Код работает неверно, поэтому и закомментирован
982
+
983
+ var dx = e.pageX - _s_f.delta.x;
984
+ var dy = e.pageY - _s_f.delta.y;
985
+
986
+ //var delta = Math.sqrt(dx*dx + dy*dy);
987
+ //var is_real_dragging = delta > 2;
988
+ //
989
+ // Если dnd был - двигаем фигуру
990
+ //if (is_real_dragging) {
991
+ // console.log("<self.onMouseUp> Drag-n-drop detected.");
992
+ var aa = _s_f[edit_type](dx, dy);
993
+ var bb = _s_f.dynamicEdit(aa);
994
+ _s_f.setParams(bb);
995
+ //}
996
+ //
997
+ // если dnd не было - справляемся о режиме и в случае редактирования карты (т.е. когда допустимо назначать
998
+ // Здания полигонам зданий) в current_building положим ссылку на фигуру, по которой был клик
999
+ //else {
1000
+
1001
+ // если это полигон здания - фиксируем его
1002
+ //var selected_area_building = self.selected_area.building;
1003
+ //if (selected_area_building != undefined && selected_area_building != null) {
1004
+ // self.current_building = selected_area_building;
1005
+ // console.log("<self.onMouseUp> Это не Drag-n-drop, а обычный клик по полигону Здания c id=" + self.current_building.options.id);
1006
+ //} else {
1007
+ // console.log("<self.onMouseUp> Это не Drag-n-drop, а обычный клик по фигуре.");
1008
+ //}
1009
+ //console.log('<breakpoint>');
1010
+ //}
1011
+
1012
+ self.removeAllEvents();
1013
+ };
1014
+ //</editor-fold>
951
1015
 
952
1016
  self.onDrawStop = function (e) {
953
1017
  console.log("<Map.onDrawStop> Закончили рисовать.");
@@ -973,8 +1037,8 @@ var InitMap = function (params) {
973
1037
  if (self.prev_mode == "edit_floor") {
974
1038
  console.log("<Map.onDrawStop> Создаём Area.");
975
1039
 
976
- var bo = self.current_building.options;
977
- var fo = self.current_building.json_current_floor();
1040
+ //var bo = self.current_building.options;
1041
+ var fo = self.current_building.json_current_floor(); // когда нарисовали полигон Площади - определяем Этаж родитель
978
1042
  var a = new Area();
979
1043
  a.init({ coords:_n_f.params }, fo, self);
980
1044
  //a.is_new = true;
@@ -1002,16 +1066,6 @@ var InitMap = function (params) {
1002
1066
  self.setMode('editing');
1003
1067
  };
1004
1068
 
1005
- self.onEditStop = function (e) {
1006
- //console.log("<Polygon.prototype.onEditStop>");
1007
- var _s_f = self.selected_area,
1008
- edit_type = self.edit_type;
1009
-
1010
- _s_f.setParams(_s_f.dynamicEdit(_s_f[edit_type](e.pageX - _s_f.delta.x, e.pageY - _s_f.delta.y)));
1011
-
1012
- self.removeAllEvents();
1013
- };
1014
-
1015
1069
  self.registerJustDrownArea = function (area) {
1016
1070
  self.drawn_areas.push(area);
1017
1071
  };
@@ -1377,9 +1431,9 @@ var InitMap = function (params) {
1377
1431
  var $s = $m.find('select');
1378
1432
 
1379
1433
  // извлекаем значения
1380
- var rent_area_id = $s.val();
1381
- var map_area_id = self.current_area.id;
1382
- //console.log("<Map.link_area> rent_area_id = " + rent_area_id + "; map_area_id = " + map_area_id);
1434
+ var area_id = $s.val();
1435
+ var apolygon_id = self.current_area.id;
1436
+ console.log("<Map.link_area> Связать Площадь area_id = " + area_id + " c полигоном apolygon_id = " + apolygon_id);
1383
1437
 
1384
1438
  // нажимаем кнопку "закрыть"
1385
1439
  $b.click();
@@ -1393,8 +1447,8 @@ var InitMap = function (params) {
1393
1447
  url:'/ajax/link_area',
1394
1448
  type:'POST',
1395
1449
  data: {
1396
- rent_area_id: rent_area_id,
1397
- map_area_id: map_area_id
1450
+ area_id: area_id,
1451
+ apolygon_id: apolygon_id
1398
1452
  },
1399
1453
  dataType:"json"
1400
1454
  }).done(function (data, result) {
@@ -1404,9 +1458,40 @@ var InitMap = function (params) {
1404
1458
 
1405
1459
  };
1406
1460
 
1407
- // взять C80MapFloors::current_floor и назначить ему sfloor.id выбранный в окне _modal_window.html.erb
1461
+ // взять C80MapFloors::current_floor и назначить ему sfloor_id выбранный в окне _modal_window.html.erb
1408
1462
  self.link_floor = function () {
1409
- console.log('<link_floor> Связать Этаж sfloor.id=' + sfloor.id + ' с полигоном current_floor=' + current_floor + '.');
1463
+
1464
+ // фиксируем компоненты модального окна
1465
+ var $m = $('#modal_window');
1466
+ var $b = $m.find('.modal-footer').find('.btn');
1467
+ var $s = $m.find('select');
1468
+
1469
+ // извлекаем значения
1470
+ var sfloor_id = $s.val(); // id Этажа
1471
+ var current_floor_id = self.current_building.json_current_floor()["id"]; // id Картинки Этажа (связываем Этаж с картинкой)
1472
+ console.log('<link_floor> Связать Этаж sfloor_id=' + sfloor_id + ' с Картинкой Этажа current_floor_id=' + current_floor_id + '.');
1473
+
1474
+ // нажимаем кнопку "закрыть"
1475
+ $b.click();
1476
+
1477
+ // показываем прелоадер
1478
+ self.save_preloader_klass.show();
1479
+
1480
+ // отправляем запрос на сервер
1481
+ // TODO_MY:: реализовать обработчик ошибок
1482
+ $.ajax({
1483
+ url:'/ajax/link_floor',
1484
+ type:'POST',
1485
+ data: {
1486
+ sfloor_id: sfloor_id,
1487
+ floor_id: current_floor_id
1488
+ },
1489
+ dataType:"json"
1490
+ }).done(function (data, result) {
1491
+ self.save_preloader_klass.hide();
1492
+ self.data = data["updated_locations_json"];
1493
+ });
1494
+
1410
1495
  };
1411
1496
 
1412
1497
  // взять C80MapFloors::current_building и назначить ему Rent::building.id,
@@ -1420,9 +1505,9 @@ var InitMap = function (params) {
1420
1505
  var $s = $m.find('select');
1421
1506
 
1422
1507
  // извлекаем значения
1423
- var rent_building_id = $s.val();
1424
- var map_building_id = self.current_building.id; //#-> [iddqd]
1425
- //console.log("<Map.link_area> rent_building_id = " + rent_building_id + "; map_building_id = " + map_building_id);
1508
+ var building_id = $s.val();
1509
+ var map_building_id = self.current_building["id"]; //#-> [iddqd]
1510
+ console.log("<Map.link_area> building_id = " + building_id + "; map_building_id = " + map_building_id);
1426
1511
 
1427
1512
  // нажимаем кнопку "закрыть"
1428
1513
  $b.click();
@@ -1436,7 +1521,7 @@ var InitMap = function (params) {
1436
1521
  url:'/ajax/link_building',
1437
1522
  type:'POST',
1438
1523
  data: {
1439
- rent_building_id: rent_building_id,
1524
+ building_id: building_id,
1440
1525
  map_building_id: map_building_id
1441
1526
  },
1442
1527
  dataType:"json"
@@ -1459,6 +1544,59 @@ var InitMap = function (params) {
1459
1544
 
1460
1545
  };
1461
1546
 
1547
+ // показать/скрыть все админские лейблы всех полигонов, которые отображены в данный момент на экране
1548
+ self.admin_label_show_all = function () {
1549
+ if (IS_ADMIN) {
1550
+
1551
+ var s = self.svg;
1552
+ var c = s.children();
1553
+ var l = c.length;
1554
+ var i, ig;
1555
+
1556
+ console.log('<admin_label_show_all> Показать все админские лейблы полигонов в кол-ве ' + l + ' шт.');
1557
+
1558
+ for (i=0; i<l; i++) {
1559
+ ig = s[0].children[i]; // именно [0]
1560
+ //console.log(ig['obj']); // => Polygon
1561
+ if (ig != undefined) { // такое тоже бывает
1562
+ if (ig['obj'] != undefined) { //
1563
+ if (ig['obj']['building'] != undefined) { // добираемся до класса Building.js
1564
+ ig['obj']['building'].admin_label_show(); // показываем админский лейбл
1565
+ }
1566
+ }
1567
+ }
1568
+
1569
+ }
1570
+
1571
+ }
1572
+ };
1573
+ self.admin_label_hide_all = function () {
1574
+ if (IS_ADMIN) {
1575
+
1576
+ var s = self.svg;
1577
+ var c = s.children();
1578
+ var l = c.length;
1579
+ var i, ig;
1580
+
1581
+ console.log('<admin_label_hide_all> Скрыть все админские лейблы полигонов в кол-ве ' + l + ' шт.');
1582
+
1583
+ for (i=0; i<l; i++) {
1584
+ ig = s[0].children[i]; // именно [0]
1585
+ //console.log(ig['obj']); // => Polygon
1586
+ if (ig != undefined) { // такое тоже бывает
1587
+ if (ig['obj'] != undefined) { //
1588
+ if (ig['obj']['building'] != undefined) { // добираемся до класса Building.js
1589
+ ig['obj']['building'].admin_label_hide(); // скрываем админский лейбл
1590
+ }
1591
+ }
1592
+ }
1593
+
1594
+ }
1595
+
1596
+ }
1597
+ };
1598
+
1599
+
1462
1600
  };
1463
1601
 
1464
1602
  // Create a jQuery plugin