c80_map_floors 0.1.0.25 → 0.2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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