c80_map_floors 0.1.0.13 → 0.1.0.14

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 50f534c6084f5c188d5f141ef6d0f18ebd8df9c7
4
- data.tar.gz: eb692e9196cde1ddfe4173815b988bb3e8fbcc5f
3
+ metadata.gz: 88a96587633879cbf066e95d7def1255baf2ec98
4
+ data.tar.gz: e39ff855343fb9414674c213592304cb9e50b2f3
5
5
  SHA512:
6
- metadata.gz: 10683282932bc7141992c1496c03303974a116b437d8b87ebf6a646620f926b0112fc0941675a19c3f6185c74a778ee7317ef60c865472ba4fb550d0af4f21b1
7
- data.tar.gz: 82746892067cc5f2202d42628ec3138c3a15e0eafbff87222fcd3dc6be59fe16e4626702c31a8259b1b792d9b194508937f29bcbdb01495828f3e2ee2cc82867
6
+ metadata.gz: f2551ea5b39b34191c788aecafbe66d9917ba52e4b7e68dd91c222ea20a5202ed7fe451982cc7f2fd817f4efed8912e7aba38493567472ae3cf0b1e96a206d8d
7
+ data.tar.gz: 08281d57352b78c8f1c4913188b5fe0ab139f7ecf65b5a244555b26f1e7eb6d448323f61517300bfcbf17dd9b6c24241c745db46be61f9c457a2d8cddaeac5a9
@@ -8,10 +8,16 @@ function SaveChangesButton() {
8
8
 
9
9
  var sendDataToServer = function () {
10
10
 
11
+ // новые полигоны площадей и зданий
11
12
  var areas;
12
13
  var buildings;
13
- var i, len;
14
14
 
15
+ // удаляемые полигоны площадей
16
+ var deleted_areas = [];
17
+
18
+ var i, len, iarea;
19
+
20
+ // собираем новые полигоны площадей
15
21
  len = _map.drawn_areas.length;
16
22
  if (len > 0) {
17
23
  areas = [];
@@ -20,6 +26,7 @@ function SaveChangesButton() {
20
26
  }
21
27
  }
22
28
 
29
+ // собираем новые полигоны зданий
23
30
  len = _map.drawn_buildings.length;
24
31
  if (len > 0) {
25
32
  buildings = [];
@@ -28,50 +35,31 @@ function SaveChangesButton() {
28
35
  }
29
36
  }
30
37
 
38
+ // собираем удаляемые площади
39
+ len = _map.areas_for_delete.length;
40
+ if (len > 0) {
41
+ for (i = 0; i < len; i ++) {
42
+ iarea = _map.areas_for_delete[i];
43
+ if (iarea == null) continue;
44
+ deleted_areas.push(iarea.id);
45
+ }
46
+ }
47
+ console.log('<ButtonSave.sendDataToServer> deleted_areas: ' + deleted_areas.join(', '));
48
+
31
49
  $.ajax({
32
50
  url: '/save_map_data',
33
51
  type: 'POST',
34
52
  data: {
35
53
  areas: areas,
36
- buildings: buildings
54
+ buildings: buildings,
55
+ deleted_areas: deleted_areas
37
56
  },
38
- dataType: 'json'
57
+ dataType: 'script'
39
58
  }).done(sendDataToServerDone);
40
59
  };
41
60
 
42
61
  var sendDataToServerDone = function (data, result) {
43
-
44
- //console.log("<ButtonSave.sendDataToServerDone> data,result:");
45
- //console.log(data);
46
- // => Object
47
- // areas: Array[1]
48
- // 0: Object:
49
- // id: 16,
50
- // old_temp_id: "76400",
51
- // buildings: Array,
52
- // updated_locations_json: null
53
- //console.log(result);
54
- // => success
55
-
56
- _map.save_preloader_klass.hide();
57
-
58
- _map.data = data["updated_locations_json"];
59
-
60
- //var i;
61
- //var iarea_resp_params;
62
- //var idrawn_area;
63
- //for (i = 0; i< data["areas"].length; i++) {
64
- // iarea_resp_params = data["areas"][i];
65
- // найдем в массиве drawn_areas область, данные о которой сохранили на сервере
66
- //idrawn_area = utils.getById(iarea["old_temp_id"], _map.drawn_areas);
67
- //idrawn_area["id"] = iarea["id"];
68
- //
69
- //}
70
-
71
- _map.drawn_areas = [];
72
- _map.drawn_buildings = [];
73
- _this.check_and_enable();
74
-
62
+ // ничего не делаем, т.к. ответ от скрипта сделает всё сам
75
63
  };
76
64
 
77
65
  _this.onClick = function (e) {
@@ -90,7 +78,7 @@ function SaveChangesButton() {
90
78
  _this.check_and_enable = function () {
91
79
 
92
80
  //check
93
- var mark_dirty = _map.drawn_areas.length || _map.drawn_buildings.length;
81
+ var mark_dirty = _map.drawn_areas.length || _map.drawn_buildings.length || _map.areas_for_delete;
94
82
 
95
83
  // enable
96
84
  if (mark_dirty) {
@@ -26,6 +26,17 @@ function UpdateJsonButton() {
26
26
  _map.save_preloader_klass.hide();
27
27
  };
28
28
 
29
+ // спрятать кнопку
30
+ this.hide = function () {
31
+ _this.el.css('display','none');
32
+ };
33
+
34
+ // показать кнопку
35
+ this.show = function () {
36
+ //console.log("<FloorLinkButton.show>");
37
+ _this.el.css('display','block');
38
+ };
39
+
29
40
  // инициализация
30
41
  this.init = function (button_css_selector, link_to_map) {
31
42
  _map = link_to_map;
@@ -275,5 +275,13 @@ function Area() {
275
275
  coords: _this._options["coords"],
276
276
  parent_floor_id: _this._options["parent_floor_json"]["id"]
277
277
  }
278
- }
278
+ };
279
+
280
+ _this.invalidate_del_mark = function (is_deleted) {
281
+ if (is_deleted) {
282
+ $(_this._polygon).addClass('for_delete');
283
+ } else {
284
+ $(_this._polygon).removeClass('for_delete');
285
+ }
286
+ };
279
287
  }
@@ -83,8 +83,10 @@ var InitMap = function (params) {
83
83
  self.area_link_button_klass = null;
84
84
  self.building_link_button_klass = null;
85
85
  self.floor_link_button_klass = null;
86
+ self.update_json_klass = null;
86
87
  self.drawn_areas = []; // если имеются нарисованные но несохранённые Площади - они хранятся тут
87
88
  self.drawn_buildings = []; // если имеются нарисованные но несохранённые Здания - они хранятся тут
89
+ self.areas_for_delete = []; // если имеются Площади, которые готовы к удалению, они хранятся тут
88
90
  self.save_preloader_klass = null;
89
91
  self.last_clicked_g = null; // начали просматривать area\building (запустили сессию), и здесь храним ссылку на последний кликнутый полигон из svg_overlay в течение сессии
90
92
  //self.o.dnd_enable = null; // если да, то можно карту dnd мышкой
@@ -237,8 +239,8 @@ var InitMap = function (params) {
237
239
  }).done(function () {
238
240
  console.log('<ajax.done>');
239
241
 
240
- self.edit_button_klass = new UpdateJsonButton();
241
- self.edit_button_klass.init('.mapplic-update-json', self);
242
+ self.update_json_klass = new UpdateJsonButton();
243
+ self.update_json_klass.init('.mapplic-update-json', self);
242
244
 
243
245
  self.edit_button_klass = new EditButton();
244
246
  self.edit_button_klass.init('.mapplic-edit-button', self);
@@ -553,6 +555,7 @@ var InitMap = function (params) {
553
555
  else {
554
556
 
555
557
  var p;
558
+ var $viewing_g_from_svg_overlay;
556
559
 
557
560
  /* если находимся в режиме просмотра всей карты - входим в здание */
558
561
  if (self.mode == 'viewing') {
@@ -624,7 +627,7 @@ var InitMap = function (params) {
624
627
  // => g, который живёт в #svg_overlay, или, другими словами,
625
628
  // тот g, по которому кликнули последний раз,
626
629
  // просматривая либо здание, либо площадь
627
- var $viewing_g_from_svg_overlay = $(event.target).parent();
630
+ $viewing_g_from_svg_overlay = $(event.target).parent();
628
631
 
629
632
  // добираемся до объекта класса Area, который обслуживает полигон
630
633
  p = $viewing_g_from_svg_overlay[0];
@@ -645,6 +648,27 @@ var InitMap = function (params) {
645
648
 
646
649
  }
647
650
 
651
+ else if (self.mode == 'removing') {
652
+ console.log('<main.js> mode = removing');
653
+
654
+ // => g, который живёт в #svg_overlay, или, другими словами,
655
+ // тот g, по которому кликнули последний раз,
656
+ // просматривая либо здание, либо площадь
657
+ $viewing_g_from_svg_overlay = $(event.target).parent();
658
+
659
+ // добираемся до объекта класса Area, который обслуживает полигон
660
+ p = $viewing_g_from_svg_overlay[0];
661
+
662
+ if (p.obj && p.obj.area) {
663
+ console.log('[breakpoint]');
664
+ var area = p.obj.area;
665
+ self.registerDeletingArea(area);
666
+ } else {
667
+ console.log('<main.js> [error] нету у полигона объекта, или этот объект не Area');
668
+ }
669
+
670
+ }
671
+
648
672
  }
649
673
 
650
674
  //noinspection JSUnresolvedFunction
@@ -1087,6 +1111,24 @@ var InitMap = function (params) {
1087
1111
  self.drawn_buildings.push(building);
1088
1112
  };
1089
1113
 
1114
+ // отмечаем площадь, как "площадь для удаления",
1115
+ // т.е. помещаем её в список "для удаления",
1116
+ // который обработается, когда нажмём кнопку "сохранить изменения".
1117
+ self.registerDeletingArea = function(area) {
1118
+ var is_deleted = false;
1119
+
1120
+ if (utils.getById(area.id, self.areas_for_delete) == null) {
1121
+ console.log('<registerDeletingArea> Регистрируем: area.id = ' + area.id);
1122
+ self.areas_for_delete.push(area);
1123
+ is_deleted = true;
1124
+ } else {
1125
+ console.log('<registerDeletingArea> Убираем: area.id = ' + area.id);
1126
+ utils.deleteById(area.id, self.areas_for_delete);
1127
+ }
1128
+
1129
+ area.invalidate_del_mark(is_deleted);
1130
+ };
1131
+
1090
1132
  /**
1091
1133
  * Зная ширину контейнера и контента,
1092
1134
  * используя указанные параметры,
@@ -216,6 +216,8 @@ function StateController() {
216
216
  _this.main_map.css('opacity', '1');
217
217
 
218
218
  _map.save_button_klass.hide();
219
+ _map.floor_link_button_klass.hide();
220
+ _map.update_json_klass.hide();
219
221
 
220
222
  // прячем кнопку "создать полигон"
221
223
  OpacityButtonsUtils.hide(_this.new_button);
@@ -473,6 +475,8 @@ function StateController() {
473
475
  // скроем форму поиска
474
476
  _map.search_gui_klass.position_hide();
475
477
 
478
+ _map.update_json_klass.show();
479
+
476
480
  //</editor-fold>
477
481
  break;
478
482
 
@@ -7,6 +7,7 @@ var utils = {
7
7
  var iel;
8
8
  for (i=0; i<arr.length; i++) {
9
9
  iel = arr[i];
10
+ if (iel == undefined) continue;
10
11
  if (iel.hasOwnProperty('id') && iel['id'] == id) {
11
12
  return iel;
12
13
  }
@@ -14,6 +15,20 @@ var utils = {
14
15
  return null;
15
16
  },
16
17
 
18
+ deleteById: function (id, arr) {
19
+ var i, iel;
20
+ var len = arr.length;
21
+ for (i = len - 1; i >= 0; i--) {
22
+ iel = arr[i];
23
+ if (iel == undefined) continue;
24
+ if (iel.hasOwnProperty('id') && iel['id'] == id) {
25
+ console.log('<deleteById> deleted: id = ' + iel['id']);
26
+ delete arr[i];
27
+ break;
28
+ }
29
+ }
30
+ },
31
+
17
32
  offsetX: function (node) {
18
33
  var box = node.getBoundingClientRect(),
19
34
  scroll = window.pageXOffset;
@@ -1255,6 +1255,18 @@ div#map_wrapper {
1255
1255
  -moz-transition: stroke 0.6s, fill 0.4s, opacity .8s ease-in;
1256
1256
  transition: stroke 0.6s, fill 0.4s, opacity .8s ease-in;
1257
1257
 
1258
+ &.for_delete { /*polygon*/ /* удаляемый полигон */
1259
+
1260
+ fill: rgba(0,0,0, 0.3) !important;
1261
+ stroke: rgba(0,0,0, 0.6) !important;
1262
+
1263
+ &:hover, &.hover {
1264
+ fill: rgba(0,0,0, 0.4) !important;
1265
+ stroke: rgba(0,0,0, 0.7) !important;
1266
+ }
1267
+
1268
+ }
1269
+
1258
1270
  }
1259
1271
 
1260
1272
  polygon.found { /* удовлетворяющий поиску полигон ЗДАНИЯ */
@@ -68,13 +68,21 @@ module C80MapFloors
68
68
  end
69
69
  end
70
70
 
71
- result[:updated_locations_json] = MapJson.fetch_json
71
+ if params[:deleted_areas].present?
72
+ params[:deleted_areas].each do |area_id|
73
+ # Rails.logger.debug "[TRACE] <map_ajax_controller.save_map_data> area_id = #{area_id}."
74
+ # [TRACE] <map_ajax_controller.save_map_data> area_id = 43.
75
+ area = C80MapFloors::Area.find(area_id)
76
+ area.destroy
77
+ end
78
+ end
72
79
 
73
- puts "<MapAjaxController.save_map_data> result = #{result.to_json}"
80
+ MapJson.update_json
81
+
82
+ rescue ActiveRecord::RecordNotFound
83
+ Rails.logger.debug '[TRACE] <MapAjaxController.save_map_data> record not found'
84
+ MapJson.update_json
74
85
 
75
- respond_to do |format|
76
- format.json { render json: result }
77
- end
78
86
  end
79
87
 
80
88
  end
@@ -0,0 +1,2 @@
1
+ //noinspection SillyAssignmentJS
2
+ window.location.href = window.location.href.split('#').join('');
@@ -1,3 +1,3 @@
1
1
  module C80MapFloors
2
- VERSION = '0.1.0.13'
2
+ VERSION = '0.1.0.14'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: c80_map_floors
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.13
4
+ version: 0.1.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - C80609A
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-02-20 00:00:00.000000000 Z
11
+ date: 2017-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -193,6 +193,7 @@ files:
193
193
  - app/views/c80_map_floors/ajax/shared/_select_list_unlinked_buildings.html.erb
194
194
  - app/views/c80_map_floors/ajax/shared/_select_list_unlinked_floors.html.erb
195
195
  - app/views/c80_map_floors/ajax/update_map_json.js.erb
196
+ - app/views/c80_map_floors/map_ajax/save_map_data.js.erb
196
197
  - app/views/c80_map_floors/shared/_modal_window.html.erb
197
198
  - app/views/c80_map_floors/shared/_save_preloader.html.erb
198
199
  - app/views/c80_map_floors/shared/map_row/_area_order_button.html.erb