c80_map 0.1.0.2 → 0.1.0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +19 -1
- data/app/assets/javascripts/buttons/admin_buttons/button_area_link.js +88 -0
- data/app/assets/javascripts/buttons/admin_buttons/button_back_to_map.js +2 -4
- data/app/assets/javascripts/buttons/admin_buttons/button_cancel_remove.js +23 -0
- data/app/assets/javascripts/buttons/admin_buttons/button_edit.js +16 -0
- data/app/assets/javascripts/buttons/admin_buttons/button_remove.js +23 -0
- data/app/assets/javascripts/buttons/admin_buttons/button_save.js +32 -4
- data/app/assets/javascripts/c80_map.js.coffee +4 -1
- data/app/assets/javascripts/map_objects/area.js +20 -9
- data/app/assets/javascripts/map_objects/building.js +2 -3
- data/app/assets/javascripts/src/main.js +74 -10
- data/app/assets/javascripts/src/state_controller.js +97 -23
- data/app/assets/javascripts/src/utils/map_utils.js +23 -0
- data/app/assets/javascripts/src/utils/opacity_buttons_utils.js +15 -0
- data/app/assets/javascripts/src/{utils.js → utils/utils.js} +13 -0
- data/app/assets/javascripts/svg_elements/area_label.js +25 -0
- data/app/assets/javascripts/svg_elements/polygon.js +3 -1
- data/app/assets/stylesheets/map.scss +148 -66
- data/app/assets/stylesheets/view/modal_window.scss +13 -0
- data/app/controllers/c80_map/map_ajax_controller.rb +5 -1
- data/app/models/c80_map/area.rb +1 -0
- data/app/models/c80_map/area_representator.rb +75 -0
- data/app/models/c80_map/map_json.rb +28 -14
- data/app/views/c80_map/_map_row_index.html.erb +1 -0
- data/app/views/c80_map/shared/_modal_window.html.erb +28 -0
- data/db/migrate/{20160620040202_create_c80_map_areas.rb → 20160620040225_create_c80_map_areas.rb} +4 -1
- data/lib/c80_map/version.rb +1 -1
- metadata +14 -5
- /data/db/migrate/{20160620040206_create_c80_map_buildings.rb → 20160620040217_create_c80_map_buildings.rb} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b43c74930a6f28b01f695dc6d5dbc1c4e204bf7
|
4
|
+
data.tar.gz: c8bafb47d3dd2a5302596c55640e6f41b3718ffc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a60ce784ef3a4e3ba833b91e246ac00564b807ff0b40bf88f835e9068bd80597fc380cc93ea6a1d27c93cfa45958a3115fef5e82af21b9a7619372e2e60361d8
|
7
|
+
data.tar.gz: 5a21d16436b114a496a796e7f0738cfb50dbcbfc46ef43a3b864c8ef4c4c5becb77ca3f65b86f77c4fd53203a49d34e3f13c2863c8ffd3cbd777ede5743afedb
|
data/README.md
CHANGED
@@ -22,7 +22,25 @@ Or install it yourself as:
|
|
22
22
|
|
23
23
|
## Usage
|
24
24
|
|
25
|
-
|
25
|
+
0. Requires:
|
26
|
+
|
27
|
+
```
|
28
|
+
#= require bootstrap/alert
|
29
|
+
#= require bootstrap/dropdown
|
30
|
+
#= require bootstrap-select
|
31
|
+
```
|
32
|
+
|
33
|
+
2. Add this:
|
34
|
+
|
35
|
+
```
|
36
|
+
@import "c80_map";
|
37
|
+
```
|
38
|
+
|
39
|
+
```
|
40
|
+
#= require c80_map
|
41
|
+
```
|
42
|
+
|
43
|
+
1. Start (Host application script):
|
26
44
|
|
27
45
|
```
|
28
46
|
$(document).ready(function() {
|
@@ -0,0 +1,88 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
// при клике на эту кнопку произойдет показ модального окна _modal_window.html.erb
|
4
|
+
|
5
|
+
function AreaLinkButton() {
|
6
|
+
|
7
|
+
var _map = null;
|
8
|
+
var _this = this;
|
9
|
+
_this.el = null;
|
10
|
+
|
11
|
+
var show_modal_window = function () {
|
12
|
+
|
13
|
+
//var $dialog = $('#modal_window');
|
14
|
+
//$dialog.find("h4").text($t.data("wtitle"));
|
15
|
+
//$dialog.find("#form_comment").css('display','block');
|
16
|
+
//$dialog.find("input#comment_part_id").val(partid);
|
17
|
+
//$dialog.find("input#comment_author").val(author);
|
18
|
+
|
19
|
+
var $m = $('#modal_window');
|
20
|
+
var $cc = $m.find('.modal-body');
|
21
|
+
$m.find('.modal-title').text('Укажите площадь, соответствующую полигону на карте');
|
22
|
+
|
23
|
+
setTimeout(function () {
|
24
|
+
$("select#unlinked_areas").selectpicker({size: 50, tickIcon: 'hidden'});
|
25
|
+
}, 1);
|
26
|
+
|
27
|
+
setTimeout(function () {
|
28
|
+
//console.log($cc.find("button"));
|
29
|
+
$cc.find("button").on('click', function () {
|
30
|
+
if ($(this).attr('id') == "submit_area_link") {
|
31
|
+
_map.link_area();
|
32
|
+
}
|
33
|
+
});
|
34
|
+
}, 1000);
|
35
|
+
|
36
|
+
$link_show_modal_window.click();
|
37
|
+
|
38
|
+
};
|
39
|
+
|
40
|
+
var fetch_free_areas = function () {
|
41
|
+
$.ajax({
|
42
|
+
url:'/ajax/fetch_unlinked_areas',
|
43
|
+
type:'POST',
|
44
|
+
data: {building_id:"building_id"},
|
45
|
+
dataType:'script'
|
46
|
+
}).done(fetch_free_areas_done);
|
47
|
+
};
|
48
|
+
var fetch_free_areas_done = function (data, result) {
|
49
|
+
_map.save_preloader_klass.hide();
|
50
|
+
show_modal_window();
|
51
|
+
};
|
52
|
+
|
53
|
+
var $link_show_modal_window = null;
|
54
|
+
|
55
|
+
_this.onClick = function (e) {
|
56
|
+
if (_this.el.hasClass('disabled')) return;
|
57
|
+
e.preventDefault();
|
58
|
+
|
59
|
+
console.log("<AreaLinkButton.click>");
|
60
|
+
|
61
|
+
_map.save_preloader_klass.show();
|
62
|
+
|
63
|
+
fetch_free_areas();
|
64
|
+
};
|
65
|
+
|
66
|
+
_this.init = function (button_css_selector, link_to_map) {
|
67
|
+
_map = link_to_map;
|
68
|
+
_this.el = $(button_css_selector);
|
69
|
+
_this.el.on('click', _this.onClick);
|
70
|
+
_this.hide();
|
71
|
+
|
72
|
+
// найдем кнопку, клик по которой покажет окно [_modal_window.html.erb]
|
73
|
+
$link_show_modal_window = $('.show_modal_window');
|
74
|
+
|
75
|
+
//console.log("<AreaLinkButton.init>");
|
76
|
+
//console.log(this.el);
|
77
|
+
};
|
78
|
+
|
79
|
+
_this.hide = function () {
|
80
|
+
_this.el.css('display','none');
|
81
|
+
};
|
82
|
+
|
83
|
+
_this.show = function () {
|
84
|
+
console.log("<AreaLinkButton.show>");
|
85
|
+
_this.el.css('display','block');
|
86
|
+
};
|
87
|
+
|
88
|
+
}
|
@@ -11,19 +11,17 @@ function BackToMapButton() {
|
|
11
11
|
var _onClick = function () {
|
12
12
|
_map.setMode('viewing');
|
13
13
|
|
14
|
-
_map.current_area = null;
|
15
|
-
|
16
14
|
if (_map.current_building) {
|
17
15
|
_map.current_building.exit();
|
16
|
+
_map.current_building = null;
|
18
17
|
}
|
19
18
|
|
20
19
|
if (_map.current_area) {
|
21
20
|
_map.current_area.exit();
|
21
|
+
_map.current_area = null;
|
22
22
|
}
|
23
23
|
|
24
24
|
_map.svgRemoveAllNodes();
|
25
|
-
|
26
|
-
|
27
25
|
_map.draw_childs(_map.data["childs"]);
|
28
26
|
|
29
27
|
};
|
@@ -0,0 +1,23 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
function CancelRemoveButton() {
|
4
|
+
|
5
|
+
var _map = null;
|
6
|
+
var _this = this;
|
7
|
+
_this.el = null;
|
8
|
+
|
9
|
+
_this.onClick = function (e) {
|
10
|
+
if (_this.el.hasClass('disabled')) return;
|
11
|
+
e.preventDefault();
|
12
|
+
|
13
|
+
console.log("<CancelRemoveButton.onClick> Выходим из режима удаления полигона.");
|
14
|
+
_map.setMode('editing');
|
15
|
+
|
16
|
+
};
|
17
|
+
|
18
|
+
_this.init = function (button_css_selector, link_to_map) {
|
19
|
+
_map = link_to_map;
|
20
|
+
_this.el = $(button_css_selector);
|
21
|
+
_this.el.on('click', _this.onClick);
|
22
|
+
};
|
23
|
+
}
|
@@ -25,6 +25,7 @@ function EditButton() {
|
|
25
25
|
_this.state = state;
|
26
26
|
_this.el.removeClass('editing');
|
27
27
|
_this.el.removeClass('viewing');
|
28
|
+
_this.el.removeClass('removing');
|
28
29
|
_this.el.removeClass('view_building');
|
29
30
|
_this.el.removeClass('edit_building');
|
30
31
|
_this.el.removeClass('view_area');
|
@@ -40,6 +41,9 @@ function EditButton() {
|
|
40
41
|
this.onClick = function (e) {
|
41
42
|
e.preventDefault();
|
42
43
|
|
44
|
+
// если после исполнения switch..case эта перменная будет true - значит надо будет вызвать кое-какой код
|
45
|
+
var mark_restore_svg_overlay = false;
|
46
|
+
|
43
47
|
switch (_this.state) {
|
44
48
|
case 'editing':
|
45
49
|
_this.setState('viewing');
|
@@ -53,20 +57,32 @@ function EditButton() {
|
|
53
57
|
_this.setState('edit_building');
|
54
58
|
break;
|
55
59
|
|
60
|
+
// находились в режиме редактирования здания, и перешли в режим просмотра здания
|
56
61
|
case 'edit_building':
|
57
62
|
_this.setState('view_building');
|
63
|
+
mark_restore_svg_overlay = true;
|
58
64
|
break;
|
59
65
|
|
60
66
|
case 'view_area':
|
61
67
|
_this.setState('edit_area');
|
68
|
+
// спрячем от клика мышки все полигоны из svg_overlay, кроме редактируемого полигона
|
69
|
+
MapUtils.svgOverlayHideAllExcept(_map.last_clicked_g);
|
62
70
|
break;
|
63
71
|
|
72
|
+
// находились в режиме редактирования площади, и перешли в режим просмотра площади
|
64
73
|
case 'edit_area':
|
65
74
|
_this.setState('view_area');
|
75
|
+
mark_restore_svg_overlay = true;
|
66
76
|
break;
|
67
77
|
|
68
78
|
}
|
69
79
|
|
80
|
+
// покажем для клика мышкой все полигоны из svg_overlay
|
81
|
+
if (mark_restore_svg_overlay) {
|
82
|
+
MapUtils.svgOverlayRestore(_map.last_clicked_g);
|
83
|
+
_map.last_clicked_g = null;
|
84
|
+
}
|
85
|
+
|
70
86
|
};
|
71
87
|
|
72
88
|
this.init = function (button_css_selector, link_to_map) {
|
@@ -0,0 +1,23 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
function RemoveButton() {
|
4
|
+
|
5
|
+
var _map = null;
|
6
|
+
var _this = this;
|
7
|
+
_this.el = null;
|
8
|
+
|
9
|
+
_this.onClick = function (e) {
|
10
|
+
if (_this.el.hasClass('disabled')) return;
|
11
|
+
e.preventDefault();
|
12
|
+
|
13
|
+
console.log("<RemoveButton.onClick> Переходим в режим удаления полигона.");
|
14
|
+
_map.setMode('removing');
|
15
|
+
|
16
|
+
};
|
17
|
+
|
18
|
+
_this.init = function (button_css_selector, link_to_map) {
|
19
|
+
_map = link_to_map;
|
20
|
+
_this.el = $(button_css_selector);
|
21
|
+
_this.el.on('click', _this.onClick);
|
22
|
+
};
|
23
|
+
}
|
@@ -40,10 +40,38 @@ function SaveChangesButton() {
|
|
40
40
|
};
|
41
41
|
|
42
42
|
var sendDataToServerDone = function (data, result) {
|
43
|
-
|
44
|
-
console.log(data);
|
45
|
-
console.log(
|
46
|
-
|
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
|
+
|
47
75
|
};
|
48
76
|
|
49
77
|
_this.onClick = function (e) {
|
@@ -1,11 +1,14 @@
|
|
1
1
|
#= require ./svg_elements/helper.js
|
2
2
|
#= require ./svg_elements/polygon.js
|
3
|
+
#= require ./svg_elements/area_label.js
|
3
4
|
|
4
5
|
#= require_directory ./events
|
5
6
|
#= require_directory ./map_objects
|
6
7
|
#= require_directory ./view
|
7
8
|
#= require_tree ./buttons
|
8
9
|
|
9
|
-
#= require ./src/utils.js
|
10
|
+
#= require ./src/utils/utils.js
|
11
|
+
#= require ./src/utils/opacity_buttons_utils.js
|
12
|
+
#= require ./src/utils/map_utils.js
|
10
13
|
#= require ./src/state_controller.js
|
11
14
|
#= require ./src/main.js
|
@@ -4,6 +4,8 @@ function Area() {
|
|
4
4
|
|
5
5
|
var _map = null;
|
6
6
|
var _this = this;
|
7
|
+
_this.id = null;
|
8
|
+
|
7
9
|
//var _polygon = null;
|
8
10
|
//var _polygon_overlay = null;
|
9
11
|
|
@@ -50,6 +52,7 @@ function Area() {
|
|
50
52
|
|
51
53
|
_map = pself;
|
52
54
|
_this._options = options;
|
55
|
+
_this.id = options["id"];
|
53
56
|
|
54
57
|
// [4ddl5df]
|
55
58
|
if (_this._options["id"] == undefined) {
|
@@ -70,6 +73,10 @@ function Area() {
|
|
70
73
|
_this._polygon.parent_building_hash = parent_building_hash;
|
71
74
|
_this._polygon = $(_this._polygon.polygon);
|
72
75
|
|
76
|
+
// подпись над полигоном показываем только админам
|
77
|
+
if (IS_ADMIN) {
|
78
|
+
_this._label = new AreaLabel(options, _map);
|
79
|
+
}
|
73
80
|
|
74
81
|
_this._polygon_overlay = Polygon.createFromSaved(options, true, _map);
|
75
82
|
_this._polygon_overlay.area = _this;
|
@@ -77,10 +84,13 @@ function Area() {
|
|
77
84
|
_this._polygon_overlay.hover(_this._mouse_in, _this._mouse_out);
|
78
85
|
_this._calcBBox();
|
79
86
|
|
80
|
-
var k = '
|
87
|
+
var k = 'unassigned';
|
81
88
|
if (options.area_hash != undefined) {
|
82
|
-
if (
|
83
|
-
k = '
|
89
|
+
if (typeof options.area_hash.id !== 'undefined') {
|
90
|
+
k = 'free';
|
91
|
+
if (!options.area_hash.is_free) {
|
92
|
+
k = 'busy';
|
93
|
+
}
|
84
94
|
}
|
85
95
|
}
|
86
96
|
_this._polygon.parent().attr("class", k);
|
@@ -94,7 +104,7 @@ function Area() {
|
|
94
104
|
};
|
95
105
|
|
96
106
|
_this.enter = function () {
|
97
|
-
|
107
|
+
console.log("<Area.enter>");
|
98
108
|
//clog(_this._options);
|
99
109
|
|
100
110
|
/* рассчитаем масштаб, при котором можно вписать прямоугольник дома в прямоугольник рабочей области */
|
@@ -108,8 +118,8 @@ function Area() {
|
|
108
118
|
_map.x = _map.normalizeX(_map.CX - _map.scale * _cx - _map.container.offset().left);
|
109
119
|
_map.y = _map.normalizeY(_map.CY - _map.scale * _cy - _map.container.offset().top);
|
110
120
|
|
111
|
-
clog("<Area.enter> [qq] moveTo: " + _map.x + ", " + _map.y);
|
112
|
-
clog("<Area.enter> Call moveTo.");
|
121
|
+
//clog("<Area.enter> [qq] moveTo: " + _map.x + ", " + _map.y);
|
122
|
+
//clog("<Area.enter> Call moveTo.");
|
113
123
|
_map.moveTo(_map.x, _map.y, _map.scale, 400, 'easeInOutCubic');
|
114
124
|
|
115
125
|
setTimeout(timeoutEnter, 400);
|
@@ -122,6 +132,7 @@ function Area() {
|
|
122
132
|
_map.current_area._polygon.parent().attr("class", k);
|
123
133
|
}
|
124
134
|
|
135
|
+
// <g class='busy viewing_area'>..<polygon >.</g>
|
125
136
|
k = _this._polygon.parent().attr("class");
|
126
137
|
k += " viewing_area";
|
127
138
|
_this._polygon.parent().attr("class", k);
|
@@ -134,7 +145,7 @@ function Area() {
|
|
134
145
|
};
|
135
146
|
|
136
147
|
_this.exit = function () {
|
137
|
-
|
148
|
+
console.log('<Area.exit>');
|
138
149
|
};
|
139
150
|
|
140
151
|
this.invalidateAnimationMask = function () {
|
@@ -182,9 +193,9 @@ function Area() {
|
|
182
193
|
_cx = xmin + (xmax - xmin) / 2;
|
183
194
|
_cy = ymin + (ymax - ymin) / 2;
|
184
195
|
|
185
|
-
clog("<Area._calcBBox> " +
|
196
|
+
//clog("<Area._calcBBox> " +
|
186
197
|
//xmin + "," + ymin + "; " + xmax + "," + ymax +
|
187
|
-
"; center logical: " + _cx + "," + _cy + ", center screen: " + _map.rightX(_cx) + ", " + _map.rightY(_cy));
|
198
|
+
//"; center logical: " + _cx + "," + _cy + ", center screen: " + _map.rightX(_cx) + ", " + _map.rightY(_cy));
|
188
199
|
};
|
189
200
|
|
190
201
|
_this._mouse_in = function () {
|
@@ -245,7 +245,6 @@ function Building() {
|
|
245
245
|
_image_bg = null;
|
246
246
|
_image_overlay = null;
|
247
247
|
_zoomToMe();
|
248
|
-
_map.current_building = null;
|
249
248
|
};
|
250
249
|
|
251
250
|
// выдать центр дома в логических координатах
|
@@ -289,9 +288,9 @@ function Building() {
|
|
289
288
|
_cx = xmin + (xmax - xmin) / 2;
|
290
289
|
_cy = ymin + (ymax - ymin) / 2;
|
291
290
|
|
292
|
-
console.log("<Building._calcBBox> " +
|
291
|
+
//console.log("<Building._calcBBox> " +
|
293
292
|
//xmin + "," + ymin + "; " + xmax + "," + ymax +
|
294
|
-
"; center logical: " + _cx + "," + _cy + ", center screen: " + _map.rightX(_cx) + ", " + _map.rightY(_cy));
|
293
|
+
//"; center logical: " + _cx + "," + _cy + ", center screen: " + _map.rightX(_cx) + ", " + _map.rightY(_cy));
|
295
294
|
};
|
296
295
|
|
297
296
|
// при редактировании здания (т.е. изменении полигонов и holer-ов площадей)
|
@@ -1,5 +1,8 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
+
var IS_ADMIN = false;
|
4
|
+
var map_on_index_page = null;
|
5
|
+
|
3
6
|
var InitMap = function () {
|
4
7
|
|
5
8
|
// - to delete start -----------------------------------------------------------------------------------------------------------------------
|
@@ -16,7 +19,7 @@ var InitMap = function () {
|
|
16
19
|
var y = (window_height - image_height)/2;
|
17
20
|
// - to delete end -----------------------------------------------------------------------------------------------------------------------
|
18
21
|
|
19
|
-
$('#map_wrapper').beMap(
|
22
|
+
map_on_index_page = $('#map_wrapper').beMap(
|
20
23
|
{
|
21
24
|
source:LOCS_HASH,
|
22
25
|
scale: scale,
|
@@ -61,10 +64,11 @@ var clog = function () {
|
|
61
64
|
self.mode = 'viewing';
|
62
65
|
self.prev_mode = null;
|
63
66
|
self.setMode = null;
|
64
|
-
self.selected_area = null;
|
67
|
+
self.selected_area = null; // ссылка на полигон из #svg_overlay
|
65
68
|
self.drawing_poligon = null;
|
66
69
|
self.events = [];
|
67
70
|
self.edit_type = null;
|
71
|
+
self.remove_button_klass = null;
|
68
72
|
self.new_button_klass = null;
|
69
73
|
self.edit_button_klass = null;
|
70
74
|
self.complete_creating_button_klass = null;
|
@@ -73,9 +77,11 @@ var clog = function () {
|
|
73
77
|
self.current_area = null;
|
74
78
|
self.is_draw = false;
|
75
79
|
self.save_button_klass = null;
|
80
|
+
self.area_link_button_klass = null;
|
76
81
|
self.drawn_areas = []; // если имеются нарисованные но несохранённые Площади - они хранятся тут
|
77
82
|
self.drawn_buildings = []; // если имеются нарисованные но несохранённые Здания - они хранятся тут
|
78
83
|
self.save_preloader_klass = null;
|
84
|
+
self.last_clicked_g = null; // начали просматривать area\building (запустили сессию), и здесь храним ссылку на последний кликнутый полигон из svg_overlay в течение сессии
|
79
85
|
|
80
86
|
// true, если:
|
81
87
|
//- юзер не кликал по кнопкам zoom
|
@@ -194,6 +200,13 @@ var clog = function () {
|
|
194
200
|
e.init('.mapplic-new-button', self);
|
195
201
|
self.new_button_klass = e;
|
196
202
|
|
203
|
+
e = new RemoveButton();
|
204
|
+
e.init('.mapplic-remove-button', self);
|
205
|
+
self.remove_button_klass = e;
|
206
|
+
|
207
|
+
e = new CancelRemoveButton();
|
208
|
+
e.init('#cancelRemoving', self);
|
209
|
+
|
197
210
|
e = new CancelCreatingButton();
|
198
211
|
e.init("#cancelCreating", self);
|
199
212
|
|
@@ -203,6 +216,12 @@ var clog = function () {
|
|
203
216
|
self.save_button_klass = new SaveChangesButton();
|
204
217
|
self.save_button_klass.init('.mapplic-save-button', self);
|
205
218
|
|
219
|
+
// при клике на эту кнопку произойдет показ модального окна
|
220
|
+
self.area_link_button_klass = new AreaLinkButton();
|
221
|
+
self.area_link_button_klass.init('.mapplic-area-link-button', self);
|
222
|
+
|
223
|
+
$('[data-toggle="tooltip"]').tooltip();
|
224
|
+
|
206
225
|
});
|
207
226
|
|
208
227
|
// Controls
|
@@ -306,7 +325,7 @@ var clog = function () {
|
|
306
325
|
|
307
326
|
//app.deselectAll();
|
308
327
|
|
309
|
-
// поменяем внешний вид - добавим класс .selected
|
328
|
+
// поменяем внешний вид полигона - добавим класс .selected
|
310
329
|
self.selected_area.select();
|
311
330
|
|
312
331
|
// запомним начальные координаты кликаы
|
@@ -376,8 +395,8 @@ var clog = function () {
|
|
376
395
|
x = self.normalizeX(x);
|
377
396
|
y = self.normalizeY(y);
|
378
397
|
|
379
|
-
clog("<Map.mousemove> x = " + x + "; y = " + y);
|
380
|
-
clog("<Map.mousemove> Call moveTo.");
|
398
|
+
//clog("<Map.mousemove> x = " + x + "; y = " + y);
|
399
|
+
//clog("<Map.mousemove> Call moveTo.");
|
381
400
|
self.moveTo(x, y);
|
382
401
|
map.data('lastX', x);
|
383
402
|
map.data('lastY', y);
|
@@ -478,13 +497,24 @@ var clog = function () {
|
|
478
497
|
/* если находится в режиме просмотра площади - переключаемся на другую площадь */
|
479
498
|
else if (self.mode == 'view_building' || self.mode == 'view_area') {
|
480
499
|
|
500
|
+
//console.log($(event.target).parent());
|
501
|
+
// => g, который живёт в #svg_overlay, или, другими словами,
|
502
|
+
// тот g, по которому кликнули последний раз,
|
503
|
+
// просматривая либо здание, либо площадь
|
504
|
+
var $viewing_g_from_svg_overlay = $(event.target).parent();
|
505
|
+
|
481
506
|
// добираемся до объекта класса Area, который обслуживает полигон
|
482
|
-
p = $
|
507
|
+
p = $viewing_g_from_svg_overlay[0];
|
483
508
|
//clog($(event.target).parent()[0].obj.area_hash);
|
484
509
|
|
485
510
|
if (p.obj && p.obj.area) {
|
511
|
+
|
512
|
+
// запомним последний кликнутый полигон
|
513
|
+
self.last_clicked_g = $viewing_g_from_svg_overlay;
|
514
|
+
|
486
515
|
var area = p.obj.area;
|
487
|
-
clog("<mouseup> Входим в площадь.");
|
516
|
+
clog("<mouseup> Входим в площадь. self.last_clicked_g = ");
|
517
|
+
clog(self.last_clicked_g);
|
488
518
|
area.enter();
|
489
519
|
}
|
490
520
|
|
@@ -528,7 +558,7 @@ var clog = function () {
|
|
528
558
|
|
529
559
|
// какой должен быть минимальный масштаб, чтобы вписать отрезок [min,max] в отрезок [p1,p2]
|
530
560
|
self.calcScale = function (min, max, p1, p2) {
|
531
|
-
clog("<calcScale> [" + min + "," + max + '] to [' + p1 + "," + p2 + "]");
|
561
|
+
//clog("<calcScale> [" + min + "," + max + '] to [' + p1 + "," + p2 + "]");
|
532
562
|
return (p2 - p1) / (max - min);
|
533
563
|
};
|
534
564
|
|
@@ -647,6 +677,7 @@ var clog = function () {
|
|
647
677
|
|
648
678
|
self.svgRemoveAllNodes = function () {
|
649
679
|
self.svg.empty();
|
680
|
+
self.svg_overlay.empty();
|
650
681
|
};
|
651
682
|
|
652
683
|
self.draw_childs = function (childs, parent_hash) {
|
@@ -840,7 +871,9 @@ var clog = function () {
|
|
840
871
|
|
841
872
|
};
|
842
873
|
var __moveToTimeout = function () {
|
843
|
-
|
874
|
+
if (self.mode === 'edit_area'|| self.mode === 'view_area') {
|
875
|
+
$("#masked").removeClass('hiddn');
|
876
|
+
}
|
844
877
|
};
|
845
878
|
var __moveToAnimate = function () {
|
846
879
|
if (self.tooltip) self.tooltip.position();
|
@@ -848,7 +881,8 @@ var clog = function () {
|
|
848
881
|
|
849
882
|
// x,y - экранные координаты
|
850
883
|
self.moveTo = function (x, y, scale, d, easing) {
|
851
|
-
clog("<self.moveTo> x = " + x + "; y = " + y + "; scale = " + scale);
|
884
|
+
//clog("<self.moveTo> x = " + x + "; y = " + y + "; scale = " + scale);
|
885
|
+
clog('<self.moveTo>');
|
852
886
|
|
853
887
|
// если подан аргумент scale(масштаб)
|
854
888
|
// перемещаемся анимированно
|
@@ -974,6 +1008,36 @@ var clog = function () {
|
|
974
1008
|
|
975
1009
|
self.rightY = function(y) {
|
976
1010
|
return (y - self.y - self.container.offset().top) / self.scale
|
1011
|
+
};
|
1012
|
+
|
1013
|
+
// взять C80Map::current_area и назначить ей Rent::area.id,
|
1014
|
+
// выбранный в окне _modal_window.html.erb
|
1015
|
+
self.link_area = function () {
|
1016
|
+
|
1017
|
+
var $m = $('#modal_window');
|
1018
|
+
var $b = $m.find('.modal-footer').find('.btn');
|
1019
|
+
var $s = $m.find('select');
|
1020
|
+
|
1021
|
+
var rent_area_id = $s.val();
|
1022
|
+
var map_area_id = self.current_area.id;
|
1023
|
+
console.log("<Map.link_area> rent_area_id = " + rent_area_id + "; map_area_id = " + map_area_id);
|
1024
|
+
|
1025
|
+
$b.click();
|
1026
|
+
self.save_preloader_klass.show();
|
1027
|
+
|
1028
|
+
$.ajax({
|
1029
|
+
url:'/ajax/link_area',
|
1030
|
+
type:'POST',
|
1031
|
+
data: {
|
1032
|
+
rent_area_id: rent_area_id,
|
1033
|
+
map_area_id: map_area_id
|
1034
|
+
},
|
1035
|
+
dataType:"json"
|
1036
|
+
}).done(function (data, result) {
|
1037
|
+
self.save_preloader_klass.hide();
|
1038
|
+
self.data = data["updated_locations_json"];
|
1039
|
+
});
|
1040
|
+
|
977
1041
|
}
|
978
1042
|
|
979
1043
|
};
|