c80_map_floors 0.1.0.13 → 0.1.0.14

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 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