c80_map_floors 0.1.0.25 → 0.2.0.0

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: a29cc94d09f89bc12853f7ccbbaa07492715f6e8
4
- data.tar.gz: 106961b0879d3e43293ad8f4bf9cf382fbc9c9e6
3
+ metadata.gz: 29c8408b56215867ecb61bc6c0c96541a8b3645c
4
+ data.tar.gz: ee01051314c85f074b1d9acb033095fa1095cee0
5
5
  SHA512:
6
- metadata.gz: 82b6ff9925c03e6d9823f93bc56dc1b0e158e92e815ef300dcce2d909a181ad652407dd5f8cbf199bebc3d7008a0055b4ba62f314d86858d08daed75decaabb7
7
- data.tar.gz: 6cbf672924aa9db5751a6ef7b6842ad4f6b73a8f76c93ec853bcb80bbdc6c8057d85795a316ed5e75d7b60934c003b4c25e75404673d56c48b0f44a80e6292e1
6
+ metadata.gz: d8ccb255f481143ab61df377077b9205d0d9df7162d4c5fc9569a8d49a3abf4989b68149af9a276f01d719b87ebe6465eb419f1541d5004e28e459a4d8e7f199
7
+ data.tar.gz: 60502338215bf6d3c889ac9cce8ef9e288d833c659af2f158f19eb6ee6f4c315c7a099f650f885ffe524bba819f39273db5a5fd647673f39770ed9a221e1bf71
data/README.md CHANGED
@@ -69,12 +69,17 @@ Create in host app's assets\javascripts:
69
69
  $(document).ready(function() {
70
70
  if ($('#map_wrapper').length) {
71
71
  InitMap({
72
- dnd_enable:false
72
+ dnd_enable:false,
73
+ debug: true,
74
+ left_padding: 50,
75
+ right_padding: 50,
76
+ focus_area_width: 500,
77
+ focus_area_height: 500
73
78
  });
74
79
  }
75
80
  });
76
81
  ```
77
-
82
+ ![map padding tuning](map_padding_tuning.jpg)
78
83
 
79
84
  # Helpers
80
85
  ```
@@ -6,12 +6,13 @@ function BackToMapButton() {
6
6
  var _this = this;
7
7
 
8
8
  var _cnt = null;
9
- var _btn = null;
9
+ var _$btn = null;
10
+
11
+ var __$building_info = null; // вспомогательно: относительно окна выравниваем кнопку
12
+ var __$mcontainer = null; // вспомогательно: для выравнивания кнопки
10
13
 
11
- // вспомогательно: относительно окна выравниваем кнопку
12
- var _$building_info = null;
13
-
14
- var _onClick = function () {
14
+ var _onClick = function (e) {
15
+ e.preventDefault();
15
16
  _map.setMode('viewing');
16
17
 
17
18
  if (_map.current_building) {
@@ -44,13 +45,13 @@ function BackToMapButton() {
44
45
  _map = link_to_map;
45
46
  _cnt = $('<div></div>').addClass('back_to_map_button');
46
47
  _cnt.appendTo($(parent_div_selector));
47
- _btn = $('<a href="#" id="BackToMapButton">Обратно на карту</a>');
48
+ _$btn = $('<a href="#" id="BackToMapButton">Обратно на карту</a>');
48
49
  //noinspection JSUnresolvedFunction
49
- _btn.on('click', _onClick);
50
- _cnt.append(_btn);
50
+ _$btn.on('click', _onClick);
51
+ _cnt.append(_$btn);
51
52
 
52
- // фиксируем вспомогательный элемент
53
- _$building_info = $('.building_info');
53
+ __$building_info = $('.building_info'); // фиксируем вспомогательные элементы
54
+ __$mcontainer = $('.mcontainer'); // фиксируем вспомогательные элементы
54
55
 
55
56
  };
56
57
 
@@ -63,25 +64,25 @@ function BackToMapButton() {
63
64
  };
64
65
  var __show = function () {
65
66
  // фиксируем
66
- var building_info_top = _$building_info.offset().top - _map.container.offset().top;
67
- var building_info_height = _$building_info.height();
67
+ var building_info_top = __$building_info.offset().top - __$mcontainer.offset().top;
68
+ var building_info_height = __$building_info.outerHeight(true);
68
69
 
69
70
  // считаем
70
71
  var btn_top = building_info_top + building_info_height;
71
- var btn_left = _$building_info.offset().left;
72
+ var btn_left = __$building_info.offset().left - __$mcontainer.offset().left;
72
73
 
73
74
  // позиционируем
74
- _btn.css('top', btn_top + 'px');
75
- _btn.css('left', btn_left + 'px');
75
+ _$btn.css('top', btn_top + 'px');
76
+ _$btn.css('left', btn_left + 'px');
76
77
 
77
78
  // показываем
78
- _btn.css('opacity','1');
79
+ _$btn.css('opacity','1');
79
80
  _cnt.css('display', 'block');
80
81
  };
81
82
 
82
83
  _this.hide = function () {
83
84
  _cnt.css('display', 'none');
84
- _btn.css('opacity', '0');
85
+ _$btn.css('opacity', '0');
85
86
  }
86
87
 
87
88
  }
@@ -104,14 +104,7 @@ function Building() {
104
104
  }
105
105
  if (map_floor_as_json["img_bg"]["url"] != "null") {
106
106
 
107
- // NOTE::картинку этажа рисуем не по bounding box здания, а по значениям из базы
108
-
109
- // сначала возьём координаты coords_img здания
110
- var tmp = _options["coords_img"].split(",");
111
- var xx = parseFloat(tmp[0]);
112
- var yy = parseFloat(tmp[1]);
113
-
114
- // и сложим их с корректирующими координатами coords этажа
107
+ // картинку этажа рисуем по значениям из базы
115
108
  var xx2 = 0;
116
109
  var yy2 = 0;
117
110
  if (map_floor_as_json["coords"].length) {
@@ -125,8 +118,8 @@ function Building() {
125
118
 
126
119
  // просим карту нарисовать картинку с данными характеристиками
127
120
  _$image_bg = _map.draw_map_object_image_bg(map_floor_as_json["img_bg"]["url"], {
128
- x: xx + xx2,
129
- y: yy + yy2,
121
+ x: xx2,
122
+ y: yy2,
130
123
  width: map_floor_as_json["img_bg_width"],
131
124
  height: map_floor_as_json["img_bg_height"]
132
125
  }/*, 'building'*/);
@@ -24,18 +24,17 @@ var InitMap = function (params) {
24
24
  var y = (window_height - image_height)/2;
25
25
  // - to delete end -----------------------------------------------------------------------------------------------------------------------
26
26
 
27
- map_on_index_page = $('#map_wrapper').beMap(
28
- {
29
- source:LOCS_HASH,
30
- scale: scale,
31
- x: x,
32
- y: y,
33
- mapwidth: MAP_WIDTH,
34
- mapheight: MAP_HEIGHT,
35
- height: window_height,
36
- dnd_enable: dnd_enable
37
- }
38
- );
27
+ var map_params = {
28
+ source:LOCS_HASH,
29
+ scale: scale,
30
+ x: x,
31
+ y: y,
32
+ mapwidth: MAP_WIDTH,
33
+ mapheight: MAP_HEIGHT,
34
+ height: window_height
35
+ };
36
+ map_params = $.extend(map_params, params);
37
+ map_on_index_page = $('#map_wrapper').beMap(map_params);
39
38
 
40
39
  };
41
40
 
@@ -44,7 +43,6 @@ var InitMap = function (params) {
44
43
  var Map = function () {
45
44
  var self = this;
46
45
 
47
- self.debug = false;
48
46
  self.o = {
49
47
  source: 'locations.json', // data
50
48
  height: 400, // viewbox height, pixels
@@ -59,7 +57,12 @@ var InitMap = function (params) {
59
57
  scale: 1,
60
58
  x: 0,
61
59
  y: 0,
62
- dnd_enable: true
60
+ dnd_enable: true,
61
+ debug: false,
62
+ left_padding: 20,
63
+ focus_area_width: 520,
64
+ top_padding: 20,
65
+ focus_area_height: 520
63
66
  };
64
67
  self.svg = null;
65
68
  self.svg_overlay = null;
@@ -295,7 +298,7 @@ var InitMap = function (params) {
295
298
  self.draw_childs(data["buildings"]);
296
299
 
297
300
  // проверим, всё ли уместилось
298
- self.ivalidateViewArea();
301
+ self.invalidateViewArea();
299
302
 
300
303
  // инициализируем класс, обслуживающий поиск
301
304
  self.search_gui_klass = new SearchGUI(self);
@@ -390,7 +393,7 @@ var InitMap = function (params) {
390
393
  // ------------------------------------------------------------------------------------------------------------------------
391
394
 
392
395
 
393
- self.ivalidateViewArea();
396
+ self.invalidateViewArea();
394
397
 
395
398
  }).resize();
396
399
 
@@ -724,7 +727,7 @@ var InitMap = function (params) {
724
727
  return pageC - scale * logicC;
725
728
  };
726
729
 
727
- /* --- ivalidateViewArea BEGIN --------------------------------------------------------------------------------- */
730
+ /* --- invalidateViewArea BEGIN --------------------------------------------------------------------------------- */
728
731
 
729
732
  var _$m = $("#map_wrapper");
730
733
  var _$b = $('.container');//$('footer .container');
@@ -733,21 +736,24 @@ var InitMap = function (params) {
733
736
  var _is_debug_drawn = false;
734
737
  var _$address_p = $('#paddress'); // 20161003: после редизайна надо дополнительно позиционировать блок с адресом
735
738
 
736
- self.ivalidateViewArea = function () {
737
- //console.log('<init> _$b.offset().left = ' + _$b.offset().left);
739
+ self.invalidateViewArea = function () {
740
+ console.log('<invalidateViewArea>');
738
741
 
739
742
  // рассчитаем "константы" - прямоугольник, в который надо вписывать картинки зданий при входе в них
740
- self.X1 = _$b.offset().left + 100;
743
+ self.X1 = self.o.left_padding;
744
+ self.X2 = self.o.left_padding + self.o.focus_area_width;
745
+
746
+ self.Y1 = self.o.top_padding;
747
+ self.Y2 = self.o.top_padding + self.o.focus_area_height;
748
+
749
+ self.CX = (self.X2 + self.X1) / 2;
750
+ self.CY = (self.Y2 + self.Y1) / 2;
751
+
741
752
  self.X1S = _$b.offset().left + 200;
742
- self.Y1 = 73;
743
753
  self.Y1S = 140;
744
- self.X2 = self.X1 + _$b.width() * .5;
745
754
  self.X2S = self.X1 + _$b.width() * .4;
746
755
  self.X3 = self.X1 + _$b.width() - 100;
747
- self.Y2 = _$m.height() - 20;
748
756
  self.Y2S = _$m.height() - 80;
749
- self.CX = (self.X2 - self.X1) / 2 - 2 + self.X1;
750
- self.CY = (self.Y2 - self.Y1) / 2 - 2 + self.Y1;
751
757
 
752
758
  self.X10 = _$b.offset().left + 15;
753
759
  self.X20 = self.X10 + _$b.width();
@@ -760,21 +766,24 @@ var InitMap = function (params) {
760
766
  if (self.container) $container_buttons.css("margin-top", (self.container.height() -10) + "px");
761
767
 
762
768
  // DEBUG
763
- if (self.debug) {
769
+ if (self.o.debug) {
764
770
 
765
771
  if (!_is_debug_drawn) {
766
772
  _is_debug_drawn = true;
767
773
 
768
- var style = "display:block;position:absolute;background-color:#00ff00;opacity:0.4;";
774
+ var style = "display:block;position:absolute;background-color:#00ff00;opacity:0.7;";
769
775
  var style_x = style + "width:1px;height:800px;top:0;left:{X}px;";
770
776
  var style_y = style + "width:3000px;height:1px;left:0;top:{Y}px;";
771
777
  //var style_dot = style + 'width:4px;height:4px;left:{X}px;top:{Y}px;';
772
778
 
773
779
  var to_draw = [
774
- {x: self.X10},
775
- {x: self.X20},
776
- {y: self.Y10},
777
- {y: self.Y20},
780
+ {x: self.X1},
781
+ {x: self.X2},
782
+ {y: self.Y1},
783
+ {y: self.Y2},
784
+ //{x: self.X20},
785
+ //{y: self.Y10},
786
+ //{y: self.Y20},
778
787
  {x: self.CX},
779
788
  {y: self.CY}
780
789
  ];
@@ -799,7 +808,7 @@ var InitMap = function (params) {
799
808
 
800
809
  };
801
810
 
802
- /* --- ivalidateViewArea END ----------------------------------------------------------------------------------- */
811
+ /* --- invalidateViewArea END ----------------------------------------------------------------------------------- */
803
812
 
804
813
  self.addEvent = function (target, eventType, func) {
805
814
  self.events.push(new AppEvent(target, eventType, func));
@@ -942,7 +951,9 @@ var InitMap = function (params) {
942
951
  };
943
952
 
944
953
  self._draw_map_object_image_bg_onload = function ($image) {
945
- self.clear_all_map_object_image_bg();
954
+ setTimeout(function() {
955
+ self.clear_all_map_object_image_bg();
956
+ }, 500);
946
957
  self.__compose_css_style_for_map_object_image($image); // рассчитаем позиционирующий стиль и применим его к созданной оверлейной картинке
947
958
  };
948
959
 
@@ -12,7 +12,7 @@ function BuildingInfo(options) {
12
12
 
13
13
  var _this = this;
14
14
 
15
- var _el_building_info = null;
15
+ var _$el_building_info = null;
16
16
 
17
17
  // текуще отображаемое здание (Это данные от C80MapFloors::MapBuilding, метод my_as_json5)
18
18
  var _cur_map_building_json;
@@ -137,18 +137,18 @@ function BuildingInfo(options) {
137
137
  };
138
138
 
139
139
  this.show = function() {
140
- _el_building_info.css("top", _el_building_info.data("init"));
140
+ _$el_building_info.css("top", _$el_building_info.data("init"));
141
141
  };
142
142
 
143
143
  this.hide = function() {
144
144
 
145
- if (_el_building_info.data("init") == undefined) {
146
- _el_building_info.data('init', _el_building_info.css("top"));
145
+ if (_$el_building_info.data("init") == undefined) {
146
+ _$el_building_info.data('init', _$el_building_info.css("top"));
147
147
  }
148
148
 
149
- var h = _el_building_info.height() + 100;
150
- _el_building_info.css("top", -h+'px');
151
- _el_building_info.css("display", "block");
149
+ var h = _$el_building_info.height() + 100;
150
+ _$el_building_info.css("top", -h+'px');
151
+ _$el_building_info.css("display", "block");
152
152
  };
153
153
 
154
154
  /**
@@ -220,7 +220,7 @@ function BuildingInfo(options) {
220
220
 
221
221
  // TODO:: этот код должен переехать туда, где будем выводить инфо о площади без арендатора
222
222
  /*// заполняем данными ссылку 'Оставить заявку'
223
- var $a_make_order = _el_building_info.find('.c80_order_invoking_btn');
223
+ var $a_make_order = _$el_building_info.find('.c80_order_invoking_btn');
224
224
  $a_make_order.data('comment-text', 'Здравствуйте, оставляю заявку на площадь: ' + area_json["title"]);
225
225
  $a_make_order.data('subj-id', area_json["id"]);*/
226
226
 
@@ -229,7 +229,7 @@ function BuildingInfo(options) {
229
229
  };
230
230
 
231
231
  this.set_left = function(left) {
232
- _el_building_info.css("left", left + "px");
232
+ _$el_building_info.css("left", left + "px");
233
233
  };
234
234
 
235
235
  //------------------------------------------------------------------------------------------------------------------------
@@ -253,7 +253,7 @@ function BuildingInfo(options) {
253
253
  this._fInit = function (options) {
254
254
 
255
255
  // фиксируем html-узел
256
- _el_building_info = $('.building_info');
256
+ _$el_building_info = $('.building_info');
257
257
 
258
258
  // TODO:: _options extend options
259
259
  _options = $.extend(_options, options);
@@ -267,7 +267,7 @@ function BuildingInfo(options) {
267
267
  });
268
268
 
269
269
  // находим заголовок
270
- _$title = _el_building_info.find('h3');
270
+ _$title = _$el_building_info.find('h3');
271
271
 
272
272
  };
273
273
 
@@ -122,8 +122,10 @@ function SearchGUI(link_to_map) {
122
122
  */
123
123
  this.position_inside = function () {
124
124
  //console.log('<position_inside> [breakpoint].');
125
- _$container.css("left", -200);
126
- _$container.css("top", _$container.data('init_position_top'));
125
+ if (_$container != null) { // может быть null, если вдруг gui поиска не пришёл с сервера
126
+ _$container.css("left", -200);
127
+ _$container.css("top", _$container.data('init_position_top'));
128
+ }
127
129
  };
128
130
 
129
131
  /**
@@ -131,7 +133,9 @@ function SearchGUI(link_to_map) {
131
133
  * Например, когда переходим в режим редактирования.
132
134
  */
133
135
  this.position_hide = function () {
134
- _$container.css("top", -200);
136
+ if (_$container != null) { // может быть null, если вдруг gui поиска не пришёл с сервера
137
+ _$container.css("top", -200);
138
+ }
135
139
  };
136
140
 
137
141
  //--[ private ]-----------------------------------------------------------------------------------------------------
@@ -1,5 +1,5 @@
1
1
  #BackToMapButton {
2
- background-color: #3377A8;
2
+ background-color: #5FCE4B;
3
3
  color: #fff !important;
4
4
  display: block;
5
5
  font-size: 17px;
@@ -20,9 +20,10 @@
20
20
  text-transform: uppercase;
21
21
  /*font-family: FrankRegular, sans-serif;*/
22
22
  font-weight: normal;
23
+ margin: 10px 0;
23
24
 
24
25
  &:hover {
25
- background-color: #5FCE4B;
26
+ background-color: #3377A8;
26
27
  }
27
28
 
28
29
  }
@@ -2,7 +2,7 @@
2
2
  .building_info {
3
3
  position: absolute;
4
4
  z-index: 5;
5
- top: 10px;
5
+ top: 15px;
6
6
  padding: 20px;
7
7
  background-color: #ededed;
8
8
  display: none;
@@ -0,0 +1,26 @@
1
+ # Предыстория: изначально карта создавалась на основе арта 101км.
2
+ # Чтобы при приближении к картинке этажа не возникало мыла,
3
+ # я их готовил размерами в 2 раза больше.
4
+ # Теперь пришёл единый psd (карта s40), в котором картинки этажей
5
+ # уже размещены и позиционированы поверх картинки карты. И нет
6
+ # надобности увеличивать их в 2 раза.
7
+ #
8
+ # Поэтому: методы модели Floor обращаются теперь к этому хелперу,
9
+ # задача которого - выдавать размеры картинок этажей. 20170413
10
+ # + в host приложении можно переопределить этот функционал.
11
+ #
12
+ module C80MapFloors
13
+ module ModelFloorHelper
14
+
15
+ def get_width(image)
16
+ img = MiniMagick::Image.open(image.path)
17
+ img['width']/2
18
+ end
19
+
20
+ def get_height(image)
21
+ img = MiniMagick::Image.open(image.path)
22
+ img['height']/2
23
+ end
24
+
25
+ end
26
+ end
@@ -14,13 +14,16 @@ module C80MapFloors
14
14
  mount_uploader :img_bg, C80MapFloors::FloorImageUploader # TODO:: FloorImageUploader класс должен использоваться только для загрузки img_bg [потому что 78aasq]
15
15
  mount_uploader :img_overlay, C80MapFloors::FloorImageUploader
16
16
 
17
+ include C80MapFloors::ModelFloorHelper
18
+
17
19
  # NOTE:: Т.к. для этажей используются картинки в два раза детальнее (в два раза больше, чем оригинал карты), то делим попалам
18
20
  # размеры картинки уйдут в js - они помогут её css-абсолютно правильно масштабировать и позиционировать
19
21
  def img_bg_width
20
22
  res = nil
21
23
  if img_bg.present?
22
- img = MiniMagick::Image.open(img_bg.path)
23
- res = img["width"]/2
24
+ res = get_width(img_bg)
25
+ # img = MiniMagick::Image.open(img_bg.path)
26
+ # res = img["width"]/2
24
27
  end
25
28
  res
26
29
  end
@@ -28,8 +31,9 @@ module C80MapFloors
28
31
  def img_bg_height
29
32
  res = nil
30
33
  if img_bg.present?
31
- img = MiniMagick::Image.open(img_bg.path)
32
- res = img["height"]/2
34
+ res = get_height(img_bg)
35
+ # img = MiniMagick::Image.open(img_bg.path)
36
+ # res = img["height"]/2
33
37
  end
34
38
  res
35
39
  end
@@ -1,3 +1,3 @@
1
1
  module C80MapFloors
2
- VERSION = '0.1.0.25'
2
+ VERSION = '0.2.0.0'
3
3
  end
Binary file
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.25
4
+ version: 0.2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - C80609A
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-04-12 00:00:00.000000000 Z
11
+ date: 2017-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -169,6 +169,7 @@ files:
169
169
  - app/controllers/c80_map_floors/application_controller.rb
170
170
  - app/controllers/c80_map_floors/map_ajax_controller.rb
171
171
  - app/helpers/c80_map_floors/application_helper.rb
172
+ - app/helpers/c80_map_floors/model_floor_helper.rb
172
173
  - app/helpers/c80_map_floors/search_gui_helper.rb
173
174
  - app/models/c80_map_floors/area.rb
174
175
  - app/models/c80_map_floors/area_representator.rb
@@ -220,6 +221,7 @@ files:
220
221
  - lib/c80_map_floors/version.rb
221
222
  - lib/integer.rb
222
223
  - lib/search_result.rb
224
+ - map_padding_tuning.jpg
223
225
  homepage: http://www.vorsa-park.ru
224
226
  licenses:
225
227
  - MIT