c80_map 0.1.0.2 → 0.1.0.10

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.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +19 -1
  3. data/app/assets/javascripts/buttons/admin_buttons/button_area_link.js +88 -0
  4. data/app/assets/javascripts/buttons/admin_buttons/button_back_to_map.js +2 -4
  5. data/app/assets/javascripts/buttons/admin_buttons/button_cancel_remove.js +23 -0
  6. data/app/assets/javascripts/buttons/admin_buttons/button_edit.js +16 -0
  7. data/app/assets/javascripts/buttons/admin_buttons/button_remove.js +23 -0
  8. data/app/assets/javascripts/buttons/admin_buttons/button_save.js +32 -4
  9. data/app/assets/javascripts/c80_map.js.coffee +4 -1
  10. data/app/assets/javascripts/map_objects/area.js +20 -9
  11. data/app/assets/javascripts/map_objects/building.js +2 -3
  12. data/app/assets/javascripts/src/main.js +74 -10
  13. data/app/assets/javascripts/src/state_controller.js +97 -23
  14. data/app/assets/javascripts/src/utils/map_utils.js +23 -0
  15. data/app/assets/javascripts/src/utils/opacity_buttons_utils.js +15 -0
  16. data/app/assets/javascripts/src/{utils.js → utils/utils.js} +13 -0
  17. data/app/assets/javascripts/svg_elements/area_label.js +25 -0
  18. data/app/assets/javascripts/svg_elements/polygon.js +3 -1
  19. data/app/assets/stylesheets/map.scss +148 -66
  20. data/app/assets/stylesheets/view/modal_window.scss +13 -0
  21. data/app/controllers/c80_map/map_ajax_controller.rb +5 -1
  22. data/app/models/c80_map/area.rb +1 -0
  23. data/app/models/c80_map/area_representator.rb +75 -0
  24. data/app/models/c80_map/map_json.rb +28 -14
  25. data/app/views/c80_map/_map_row_index.html.erb +1 -0
  26. data/app/views/c80_map/shared/_modal_window.html.erb +28 -0
  27. data/db/migrate/{20160620040202_create_c80_map_areas.rb → 20160620040225_create_c80_map_areas.rb} +4 -1
  28. data/lib/c80_map/version.rb +1 -1
  29. metadata +14 -5
  30. /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: d665b0899ef1892fa872db9e7d5eb4ccb1ed0e7c
4
- data.tar.gz: 6cc5fd6361ed4625b8c2bf924c59d83ccb9d77b9
3
+ metadata.gz: 4b43c74930a6f28b01f695dc6d5dbc1c4e204bf7
4
+ data.tar.gz: c8bafb47d3dd2a5302596c55640e6f41b3718ffc
5
5
  SHA512:
6
- metadata.gz: ccf055688da0f4c368d30a44504174dff41a1144dd5478f61fa31bf016126174e0c88068e350b346e7274ad3928f43990625f32b314a87309911d45e9c1f2442
7
- data.tar.gz: 4edd62b64af0b96f65ac9a0ee627e42bac4effaf203406ad961fc79928a6799986e81920aaad18857b6d5d0d4f7691a0b6b94077fce69ac6e4d463704374248e
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
- 1. Host application:
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
- console.log("<ButtonSave.sendDataToServerDone> data,result:");
44
- console.log(data);
45
- console.log(result);
46
- console.log("<ButtonSave.sendDataToServerDone> ------------");
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 = 'free';
87
+ var k = 'unassigned';
81
88
  if (options.area_hash != undefined) {
82
- if (!options.area_hash.is_free) {
83
- k = 'busy';
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
- //clog("<Building.enter>");
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
- _map.current_area = null;
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 = $(event.target).parent()[0];
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
- $("#masked").removeClass('hiddn');
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
  };