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 +4 -4
- data/app/assets/javascripts/buttons/admin_buttons/button_save.js +24 -36
- data/app/assets/javascripts/buttons/admin_buttons/button_update_json.js +11 -0
- data/app/assets/javascripts/map_objects/area.js +9 -1
- data/app/assets/javascripts/src/main.js +45 -3
- data/app/assets/javascripts/src/state_controller.js +4 -0
- data/app/assets/javascripts/src/utils/utils.js +15 -0
- data/app/assets/stylesheets/map.scss +12 -0
- data/app/controllers/c80_map_floors/map_ajax_controller.rb +13 -5
- data/app/views/c80_map_floors/map_ajax/save_map_data.js.erb +2 -0
- data/lib/c80_map_floors/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 88a96587633879cbf066e95d7def1255baf2ec98
|
4
|
+
data.tar.gz: e39ff855343fb9414674c213592304cb9e50b2f3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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: '
|
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.
|
241
|
-
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
|
-
|
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
|
-
|
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
|
-
|
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
|
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.
|
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-
|
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
|