c80_map_floors 0.1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.travis.yml +3 -0
  4. data/CODE_OF_CONDUCT.md +13 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +67 -0
  8. data/Rakefile +1 -0
  9. data/app/admin/c80_map_floors/floors.rb +57 -0
  10. data/app/admin/c80_map_floors/map_buildings.rb +49 -0
  11. data/app/admin/c80_map_floors/settings.rb +32 -0
  12. data/app/assets/javascripts/buttons/admin_buttons/button_area_link.js +91 -0
  13. data/app/assets/javascripts/buttons/admin_buttons/button_building_link.js +91 -0
  14. data/app/assets/javascripts/buttons/admin_buttons/button_cancel_create.js +21 -0
  15. data/app/assets/javascripts/buttons/admin_buttons/button_cancel_remove.js +23 -0
  16. data/app/assets/javascripts/buttons/admin_buttons/button_complete_create.js +22 -0
  17. data/app/assets/javascripts/buttons/admin_buttons/button_edit.js +96 -0
  18. data/app/assets/javascripts/buttons/admin_buttons/button_new.js +46 -0
  19. data/app/assets/javascripts/buttons/admin_buttons/button_remove.js +23 -0
  20. data/app/assets/javascripts/buttons/admin_buttons/button_save.js +111 -0
  21. data/app/assets/javascripts/buttons/button_back_to_map.js +84 -0
  22. data/app/assets/javascripts/buttons/zoom_buttons.js +78 -0
  23. data/app/assets/javascripts/c80_map_floors.js.coffee +23 -0
  24. data/app/assets/javascripts/events/app_event.js +15 -0
  25. data/app/assets/javascripts/map_objects/area.js +251 -0
  26. data/app/assets/javascripts/map_objects/building.js +294 -0
  27. data/app/assets/javascripts/map_objects/dot.js +14 -0
  28. data/app/assets/javascripts/map_objects/floor.js +10 -0
  29. data/app/assets/javascripts/src/main.js +1421 -0
  30. data/app/assets/javascripts/src/state_controller.js +322 -0
  31. data/app/assets/javascripts/src/utils/map_utils.js +23 -0
  32. data/app/assets/javascripts/src/utils/opacity_buttons_utils.js +15 -0
  33. data/app/assets/javascripts/src/utils/utils.js +140 -0
  34. data/app/assets/javascripts/svg_elements/area_label.js +25 -0
  35. data/app/assets/javascripts/svg_elements/building_label.js +65 -0
  36. data/app/assets/javascripts/svg_elements/helper.js +36 -0
  37. data/app/assets/javascripts/svg_elements/polygon.js +194 -0
  38. data/app/assets/javascripts/view/save_preloader.js +30 -0
  39. data/app/assets/stylesheets/c80_map_floors.scss +4 -0
  40. data/app/assets/stylesheets/map.scss +1464 -0
  41. data/app/assets/stylesheets/view/buttons/area_order_button.scss +16 -0
  42. data/app/assets/stylesheets/view/buttons/back_to_map_button.scss +28 -0
  43. data/app/assets/stylesheets/view/elems/building_info.scss +54 -0
  44. data/app/assets/stylesheets/view/elems/free_areas_label.scss +116 -0
  45. data/app/assets/stylesheets/view/elems/map_objects/map_object_image_bg.scss +10 -0
  46. data/app/assets/stylesheets/view/modal_window.scss +13 -0
  47. data/app/assets/stylesheets/view/save_preloader.scss +206 -0
  48. data/app/controllers/c80_map_floors/ajax_controller.rb +65 -0
  49. data/app/controllers/c80_map_floors/application_controller.rb +6 -0
  50. data/app/controllers/c80_map_floors/map_ajax_controller.rb +70 -0
  51. data/app/helpers/c80_map_floors/application_helper.rb +28 -0
  52. data/app/models/c80_map_floors/area.rb +20 -0
  53. data/app/models/c80_map_floors/area_representator.rb +75 -0
  54. data/app/models/c80_map_floors/base_map_object.rb +41 -0
  55. data/app/models/c80_map_floors/building_representator.rb +72 -0
  56. data/app/models/c80_map_floors/floor.rb +37 -0
  57. data/app/models/c80_map_floors/map_building.rb +45 -0
  58. data/app/models/c80_map_floors/map_json.rb +35 -0
  59. data/app/models/c80_map_floors/setting.rb +32 -0
  60. data/app/uploaders/c80_map_floors/building_image_uploader.rb +31 -0
  61. data/app/uploaders/c80_map_floors/floor_image_uploader.rb +33 -0
  62. data/app/uploaders/c80_map_floors/map_image_uploader.rb +31 -0
  63. data/app/views/c80_map_floors/_map_row_index.html.erb +40 -0
  64. data/app/views/c80_map_floors/ajax/fetch_unlinked_areas.js.erb +7 -0
  65. data/app/views/c80_map_floors/ajax/fetch_unlinked_buildings.js.erb +7 -0
  66. data/app/views/c80_map_floors/ajax/map_edit_buttons.js.erb +36 -0
  67. data/app/views/c80_map_floors/ajax/shared/_map_creating.html.erb +6 -0
  68. data/app/views/c80_map_floors/ajax/shared/_map_editing.html.erb +4 -0
  69. data/app/views/c80_map_floors/ajax/shared/_map_removing.html.erb +5 -0
  70. data/app/views/c80_map_floors/ajax/shared/_select_list_unlinked_areas.html.erb +6 -0
  71. data/app/views/c80_map_floors/ajax/shared/_select_list_unlinked_buildings.html.erb +10 -0
  72. data/app/views/c80_map_floors/shared/_modal_window.html.erb +28 -0
  73. data/app/views/c80_map_floors/shared/_save_preloader.html.erb +3 -0
  74. data/app/views/c80_map_floors/shared/map_row/_area_order_button.html.erb +7 -0
  75. data/app/views/c80_map_floors/shared/map_row/_building_info.html.erb +17 -0
  76. data/bin/console +14 -0
  77. data/bin/setup +7 -0
  78. data/c80_map_floors.gemspec +28 -0
  79. data/config/routes.rb +4 -0
  80. data/db/migrate/20161015190000_create_c80_map_floors_settings.rb +8 -0
  81. data/db/migrate/20161015190001_create_c80_map_floors_map_buildings.rb +10 -0
  82. data/db/migrate/20161015190002_create_c80_map_floors_areas.rb +12 -0
  83. data/db/migrate/20161015190003_add_building_representator_to_c80_map_floors_buildings.rb +6 -0
  84. data/db/migrate/20161015190004_create_c80_map_floors_floors.rb +16 -0
  85. data/db/migrate/20161019111010_add_title_to_c80_map_floors_buildings.rb +5 -0
  86. data/db/migrate/20161020184040_add_coords_img_to_c80_map_floors_buildings.rb +5 -0
  87. data/db/seeds/c80_map_floors_01_fill_map_settings.rb +6 -0
  88. data/db/seeds/c80_map_floors_02_create_test_area.rb +7 -0
  89. data/lib/c80_map_floors.rb +8 -0
  90. data/lib/c80_map_floors/engine.rb +23 -0
  91. data/lib/c80_map_floors/version.rb +3 -0
  92. metadata +218 -0
@@ -0,0 +1,25 @@
1
+ var AreaLabel = function (options, link_to_map) {
2
+
3
+ if (options.area_hash != undefined && typeof options.area_hash.id != 'undefined') {
4
+
5
+ this._x = options.coords[0];
6
+ this._y = options.coords[1];
7
+ this._map = link_to_map;
8
+
9
+ // создадим узел, который будет помещён в дерево и будет виден пользователю
10
+ this._g = document.createElementNS('http://www.w3.org/2000/svg', 'g');
11
+ this._text_element_ns = document.createElementNS('http://www.w3.org/2000/svg', 'text');
12
+ this._text_element_ns.setAttribute('x', this._x);
13
+ this._text_element_ns.setAttribute('y', this._y);
14
+ this._text_element_ns.setAttribute('fill', '#000000');
15
+ this._text_element_ns.setAttribute('style', 'font-size:12px;font-weight:bold;');
16
+ this._text_element_ns.textContent = "id="+options.area_hash.id + "; " + options.area_hash.title;
17
+
18
+ //
19
+ this._map.addNodeToSvg(this._g, true);
20
+ this._g.appendChild(this._text_element_ns);
21
+
22
+ }
23
+
24
+
25
+ };
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ var BuildingLabel = function (options, link_to_map) {
4
+
5
+ if ( options["rent_building_hash"] != undefined &&
6
+ typeof options["rent_building_hash"].id != 'undefined' &&
7
+ options["rent_building_hash"].props.free_areas_count != 0
8
+ ) {
9
+
10
+ this._x = options.coords[0];
11
+ this._y = options.coords[1];
12
+ this._map = link_to_map;
13
+
14
+ var center_for_cicrle_x = this._x;
15
+ var center_for_cicrle_y = this._y - 100;
16
+
17
+ // создадим узел, который будет помещён в дерево и будет виден пользователю
18
+ this._g = document.createElementNS('http://www.w3.org/2000/svg', 'g');
19
+ this._g.setAttribute("class","free_areas_label");
20
+
21
+ this._bg_pulse = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
22
+ this._bg_pulse.setAttribute("cx",center_for_cicrle_x);
23
+ this._bg_pulse.setAttribute("cy",center_for_cicrle_y);
24
+ this._bg_pulse.setAttribute("r", 40);
25
+ this._bg_pulse.setAttribute("class","pulse");
26
+
27
+ this._bg_pulse2 = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
28
+ this._bg_pulse2.setAttribute("cx",center_for_cicrle_x);
29
+ this._bg_pulse2.setAttribute("cy",center_for_cicrle_y);
30
+ this._bg_pulse2.setAttribute("r", 40);
31
+ this._bg_pulse2.setAttribute("class","pulse2");
32
+
33
+ this._bg_circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
34
+ this._bg_circle.setAttribute("cx",center_for_cicrle_x);
35
+ this._bg_circle.setAttribute("cy",center_for_cicrle_y);
36
+ this._bg_circle.setAttribute("r",40);
37
+ this._bg_circle.setAttribute("class","circle");
38
+
39
+ this._text_element_ns = document.createElementNS('http://www.w3.org/2000/svg', 'text');
40
+ this._text_element_ns.setAttribute('x', center_for_cicrle_x);
41
+ this._text_element_ns.setAttribute('y', center_for_cicrle_y);
42
+ this._text_element_ns.setAttribute('class', 'text');
43
+ this._text_element_ns.textContent = options["rent_building_hash"].props.free_areas_count;
44
+
45
+ this._aLine = document.createElementNS('http://www.w3.org/2000/svg', 'line');
46
+ this._aLine.setAttribute('x1', this._x);
47
+ this._aLine.setAttribute('y1', this._y);
48
+ this._aLine.setAttribute('x2', center_for_cicrle_x);
49
+ this._aLine.setAttribute('y2', center_for_cicrle_y);
50
+ this._aLine.setAttribute('stroke', '#39BD5F');
51
+ this._aLine.setAttribute('stroke-width', '2');
52
+
53
+
54
+ // цепляем НЕ в #svg_overlay (об этом нам говорит is_overlay = false аргумент)
55
+ this._map.addNodeToSvg(this._g, false);
56
+
57
+ this._g.appendChild(this._aLine);
58
+ this._g.appendChild(this._bg_pulse);
59
+ this._g.appendChild(this._bg_pulse2);
60
+ this._g.appendChild(this._bg_circle);
61
+ this._g.appendChild(this._text_element_ns);
62
+
63
+ }
64
+
65
+ };
@@ -0,0 +1,36 @@
1
+
2
+ /* Helper constructor */
3
+ function Helper(node, x, y) {
4
+ this.helper = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
5
+ this.helper.setAttribute('class', 'helper');
6
+ this.helper.setAttribute('height', 5);
7
+ this.helper.setAttribute('width', 5);
8
+ this.helper.setAttribute('x', x - 3);
9
+ this.helper.setAttribute('y', y - 3);
10
+ node.appendChild(this.helper);
11
+ }
12
+
13
+ Helper.prototype.setCoords = function (x, y) {
14
+ this.helper.setAttribute('x', x - 3);
15
+ this.helper.setAttribute('y', y - 3);
16
+
17
+ return this;
18
+ };
19
+
20
+ Helper.prototype.setAction = function (action) {
21
+ this.helper.action = action;
22
+
23
+ return this;
24
+ };
25
+
26
+ Helper.prototype.setCursor = function (cursor) {
27
+ utils.addClass(this.helper, cursor);
28
+
29
+ return this;
30
+ };
31
+
32
+ Helper.prototype.setId = function (id) {
33
+ this.helper.n = id;
34
+
35
+ return this;
36
+ };
@@ -0,0 +1,194 @@
1
+ /* Polygon constructor */
2
+ var Polygon = function (x, y, is_overlay, self) {
3
+
4
+ this._map = self;
5
+ this._map.is_draw = true;
6
+
7
+ this.params = [x, y]; //array of coordinates of polygon points
8
+
9
+ this.g = document.createElementNS('http://www.w3.org/2000/svg', 'g');
10
+ this.polygon = document.createElementNS('http://www.w3.org/2000/svg', 'polyline');
11
+ this._map.addNodeToSvg(this.g, is_overlay);
12
+ this.g.appendChild(this.polygon);
13
+
14
+ this.g.obj = this;
15
+ /* Link to parent object */
16
+
17
+ this.helpers = [ //array of all helpers-rectangles
18
+ new Helper(this.g, this.params[0], this.params[1])
19
+ ];
20
+
21
+ this.helpers[0].setAction('pointMove').setCursor('pointer').setId(0);
22
+
23
+ this.selected_point = -1;
24
+
25
+ this.select().redraw();
26
+
27
+ // app.addObject(this); //add this object to array of all objects
28
+ };
29
+
30
+ Polygon.prototype.setCoords = function (params) {
31
+ //console.log(params);
32
+ var coords_values = params.join(' ');
33
+ this.polygon.setAttribute('points', coords_values);
34
+ utils.foreach(this.helpers, function (x, i) {
35
+ x.setCoords(params[2 * i], params[2 * i + 1]);
36
+ });
37
+
38
+ return this;
39
+ };
40
+
41
+ Polygon.prototype.setParams = function (arr) {
42
+ this.params = Array.prototype.slice.call(arr);
43
+
44
+ return this;
45
+ };
46
+
47
+ Polygon.prototype.addPoint = function (x, y) {
48
+ var helper = new Helper(this.g, x, y);
49
+ helper.setAction('pointMove').setCursor('pointer').setId(this.helpers.length);
50
+ this.helpers.push(helper);
51
+ this.params.push(x, y);
52
+ this.redraw();
53
+
54
+ return this;
55
+ };
56
+
57
+ Polygon.prototype.redraw = function () {
58
+ this.setCoords(this.params);
59
+
60
+ return this;
61
+ };
62
+
63
+ Polygon.prototype.right_angle = function (x, y) {
64
+ var old_x = this.params[this.params.length - 2],
65
+ old_y = this.params[this.params.length - 1],
66
+ dx = x - old_x,
67
+ dy = -(y - old_y),
68
+ tan = dy / dx; //tangens
69
+
70
+ if (dx > 0 && dy > 0) {
71
+ if (tan > 2.414) {
72
+ x = old_x;
73
+ } else if (tan < 0.414) {
74
+ y = old_y;
75
+ } else {
76
+ Math.abs(dx) > Math.abs(dy) ? x = old_x + dy : y = old_y - dx;
77
+ }
78
+ } else if (dx < 0 && dy > 0) {
79
+ if (tan < -2.414) {
80
+ x = old_x;
81
+ } else if (tan > -0.414) {
82
+ y = old_y;
83
+ } else {
84
+ Math.abs(dx) > Math.abs(dy) ? x = old_x - dy : y = old_y + dx;
85
+ }
86
+ } else if (dx < 0 && dy < 0) {
87
+ if (tan > 2.414) {
88
+ x = old_x;
89
+ } else if (tan < 0.414) {
90
+ y = old_y;
91
+ } else {
92
+ Math.abs(dx) > Math.abs(dy) ? x = old_x + dy : y = old_y - dx;
93
+ }
94
+ } else if (dx > 0 && dy < 0) {
95
+ if (tan < -2.414) {
96
+ x = old_x;
97
+ } else if (tan > -0.414) {
98
+ y = old_y;
99
+ } else {
100
+ Math.abs(dx) > Math.abs(dy) ? x = old_x - dy : y = old_y + dx;
101
+ }
102
+ }
103
+
104
+ return {
105
+ x: x,
106
+ y: y
107
+ };
108
+ };
109
+
110
+ Polygon.prototype.dynamicDraw = function (x, y, right_angle) {
111
+ var temp_params = [].concat(this.params);
112
+
113
+ if (right_angle) {
114
+ var right_coords = this.right_angle(x, y);
115
+ x = right_coords.x;
116
+ y = right_coords.y;
117
+ }
118
+
119
+ temp_params.push(x, y);
120
+
121
+ this.setCoords(temp_params);
122
+
123
+ return temp_params;
124
+ };
125
+
126
+ Polygon.prototype.move = function (x, y) { //offset x and y
127
+ var temp_params = Object.create(this.params);
128
+
129
+ for (var i = 0, count = this.params.length; i < count; i++) {
130
+ //i % 2 ? this.params[i] += y : this.params[i] += x;
131
+ if (i % 2) {
132
+ this.params[i] = Number(this.params[i]) + y;
133
+ } else {
134
+ this.params[i] = Number(this.params[i]) + x;
135
+ }
136
+ }
137
+
138
+ return temp_params;
139
+ };
140
+
141
+ Polygon.prototype.pointMove = function (x, y) { //offset x and y
142
+ this.params[2 * this.selected_point] += x;
143
+ this.params[2 * this.selected_point + 1] += y;
144
+
145
+ return this.params;
146
+ };
147
+
148
+ Polygon.prototype.dynamicEdit = function (temp_params) {
149
+ this.setCoords(temp_params);
150
+
151
+ return temp_params;
152
+ };
153
+
154
+ Polygon.prototype.remove = function () {
155
+ this._map.removeNodeFromSvg(this.g);
156
+ };
157
+
158
+ Polygon.prototype.select = function () {
159
+ //console.log("<POLYGON.SELECT>");
160
+ utils.addClass(this.polygon, 'selected');
161
+
162
+ return this;
163
+ };
164
+
165
+ Polygon.prototype.deselect = function () {
166
+ //console.log("<POLYGON.DE-SELECT>");
167
+ utils.removeClass(this.polygon, 'selected');
168
+
169
+ return this;
170
+ };
171
+
172
+ Polygon.createFromSaved = function (params, is_overlay, self) {
173
+ //console.log("<Polygon.createFromSaved>");
174
+ //console.log("<Polygon.createFromSaved> is_overlay = " + is_overlay);
175
+
176
+ var coords = params.coords,
177
+ area = new Polygon(coords[0], coords[1], is_overlay, self);
178
+
179
+ for (var i = 2, c = coords.length; i < c; i += 2) {
180
+ area.addPoint(coords[i], coords[i + 1]);
181
+ }
182
+
183
+ area.polyline = area.polygon;
184
+ area.polygon = document.createElementNS('http://www.w3.org/2000/svg', 'polygon');
185
+ area.g.replaceChild(area.polygon, area.polyline);
186
+ area.setCoords(area.params).deselect();
187
+ delete(area.polyline);
188
+
189
+ self.is_draw = false;
190
+ self.drawing_poligon = null;
191
+
192
+ return area;
193
+
194
+ };
@@ -0,0 +1,30 @@
1
+ function SavePreloader() {
2
+
3
+ var _this = this;
4
+ var $el;
5
+
6
+ _this.init = function () {
7
+ $el = $("#savePreloader");
8
+ };
9
+
10
+ _this.show = function () {
11
+ $el.css("display","block");
12
+ $el.addClass('shown');
13
+ };
14
+
15
+ _this.hide = function () {
16
+ $el.removeClass('shown');
17
+ setTimeout(function () {
18
+ $el.css("display","none");
19
+ },500);
20
+ };
21
+
22
+ _this.toggle = function () {
23
+ if ($el.hasClass('shown')) {
24
+ _this.hide();
25
+ } else {
26
+ _this.show();
27
+ }
28
+ };
29
+
30
+ }
@@ -0,0 +1,4 @@
1
+ @import "bootstrap-sprockets";
2
+ @import "bootstrap";
3
+ @import "map";
4
+ @import "view/**/*";
@@ -0,0 +1,1464 @@
1
+ %ebutton {
2
+ background-color: #1F283E;
3
+ color: #fff !important;
4
+ display: block;
5
+ font-size: 14px;
6
+ font-weight: bold;
7
+ cursor: pointer;
8
+ text-align: center;
9
+ line-height: 37px;
10
+ width: 40px;
11
+ height: 40px;
12
+ position: relative;
13
+ z-index: 99999;
14
+
15
+ transition: all 0.2s ease-in-out;
16
+ -webkit-transition: all 0.2s ease-in-out;
17
+ -moz-transition: all 0.2s ease-in-out;
18
+ -ms-transition: all 0.2s ease-in-out;
19
+ -o-transition: all 0.2s ease-in-out;
20
+
21
+ &:after {
22
+ position: absolute;
23
+ top: 2px;
24
+ left: 0;
25
+ right: 0;
26
+ bottom: 0;
27
+ display: block;
28
+ color: #ffffff;
29
+ font-weight: bold;
30
+ font-family: Arial, Helvetica, sans-serif;
31
+ font-size: 20px;
32
+ }
33
+ }
34
+
35
+ .ebutton {
36
+ @extend %ebutton;
37
+ }
38
+
39
+ //----------------------------------------------------------------------------------------------------------------------
40
+
41
+ .melem {
42
+ background-color: #fff;
43
+ font-size: 0;
44
+ overflow: hidden;
45
+
46
+ * {
47
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
48
+ }
49
+
50
+ > * {
51
+ opacity: 1;
52
+ -webkit-transition: opacity 0.6s;
53
+ -moz-transition: opacity 0.6s;
54
+ transition: opacity 0.6s;
55
+ }
56
+
57
+ a {
58
+ color: #333;
59
+ text-decoration: none !important;
60
+ }
61
+
62
+ input,
63
+ button {
64
+ outline: none;
65
+ }
66
+
67
+ }
68
+
69
+ /* Fullscreen */
70
+ :-webkit-full-screen {
71
+ width: 100%;
72
+ height: 100% !important;
73
+ }
74
+
75
+ :-webkit-full-screen .mapplic-fullscreen-button {
76
+ background-image: url(image_url('be_map/fullscreen-exit.png'));
77
+ }
78
+
79
+ /* Preloader */
80
+ .melem.mloading {
81
+ background: #f4f4f4 url(image_url('be_map/mloader.gif')) no-repeat center;
82
+ }
83
+
84
+ .melem.merror {
85
+ background: #f4f4f4 url(image_url('be_map/error-icon.png')) no-repeat center;
86
+ }
87
+
88
+ .melem.mloading > * {
89
+ opacity: 0;
90
+ }
91
+
92
+ /* Main elements */
93
+ .mcontainer {
94
+ background-color: #f8f8f8;
95
+ display: inline-block;
96
+ overflow: hidden;
97
+ position: relative;
98
+ width: 70%;
99
+ height: 100%;
100
+
101
+ .overlay_layers img {
102
+ z-index: 3;
103
+ }
104
+
105
+ #masked {
106
+ position: absolute;
107
+ top: 0;
108
+ left: 0;
109
+ right: 0;
110
+ bottom: 0;
111
+ background: transparent url(image_path('anim_lines.gif')) repeat 0 0;
112
+ font-size: 300px;
113
+ opacity: 0.4;
114
+
115
+ -webkit-transition: opacity 0.02s;
116
+ -moz-transition: opacity 0.02s;
117
+ transition: opacity 0.02s;
118
+
119
+ &.hiddn {
120
+ display: none;
121
+ }
122
+ }
123
+
124
+ }
125
+
126
+ :-webkit-full-screen .mcontainer {
127
+ width: 80%;
128
+ }
129
+
130
+ .mmap {
131
+ position: absolute;
132
+ left: 0;
133
+ top: 0;
134
+ overflow: visible !important;
135
+ }
136
+
137
+ /* Map layer */
138
+ .mlayer {
139
+ top: 0;
140
+ left: 0;
141
+ width: 100%;
142
+ height: 100%;
143
+ position: absolute;
144
+
145
+ &.main_map { /*qwwq*/
146
+ -webkit-transition: opacity 0.2s;
147
+ -moz-transition: opacity 0.2s;
148
+ transition: opacity 0.2s;
149
+ }
150
+ }
151
+
152
+ .mlayer img {
153
+ width: 100%;
154
+ }
155
+
156
+ .mmap .mmap-image {
157
+ position: absolute;
158
+ top: 0;
159
+ left: 0;
160
+ width: 100%;
161
+ height: 100%;
162
+ -webkit-touch-callout: none;
163
+ -webkit-user-select: none;
164
+ -khtml-user-select: none;
165
+ -moz-user-select: none;
166
+ -ms-user-select: none;
167
+ user-select: none;
168
+ }
169
+
170
+ .mmap.mzoomable .mmap-image {
171
+ cursor: url(image_url('be_map/openhand.cur')), default;
172
+ }
173
+
174
+ .mmap.mzoomable.mdragging .mmap-image {
175
+ cursor: url(image_url('be_map/closedhand.cur')), move;
176
+ }
177
+
178
+ .mapplic-locations {
179
+ position: absolute;
180
+ top: 0;
181
+ left: 0;
182
+ width: 100%;
183
+ height: 100%;
184
+ }
185
+
186
+ .mapplic-pin {
187
+ background-image: url(images/pin.png);
188
+ background-size: 18px 24px;
189
+ background-repeat: no-repeat;
190
+ background-position: center;
191
+ width: 18px;
192
+ height: 24px;
193
+ margin-top: -23px;
194
+ margin-left: -9px;
195
+ position: absolute;
196
+ }
197
+
198
+ .mapplic-pin.iconpin {
199
+ background-image: url(images/pin-large.png);
200
+ background-size: 30px 42px;
201
+ color: #fff;
202
+ font-size: 14px;
203
+ font-weight: normal;
204
+ line-height: 36px;
205
+ text-align: center;
206
+ width: 30px;
207
+ height: 42px;
208
+ margin-top: -42px;
209
+ margin-left: -15px;
210
+ }
211
+
212
+ .mapplic-pin.orange {
213
+ background-image: url(images/pin-orange.png);
214
+ }
215
+
216
+ .mapplic-pin.yellow {
217
+ background-image: url(images/pin-yellow.png);
218
+ }
219
+
220
+ .mapplic-pin.green {
221
+ background-image: url(images/pin-green.png);
222
+ }
223
+
224
+ .mapplic-pin.blue {
225
+ background-image: url(images/pin-blue.png);
226
+ }
227
+
228
+ .mapplic-pin.purple {
229
+ background-image: url(images/pin-purple.png);
230
+ }
231
+
232
+ .mapplic-pin.white {
233
+ background-image: url(images/pin-white.png);
234
+ }
235
+
236
+ .mapplic-pin.iconpin.orange {
237
+ background-image: url(images/pin-orange-large.png);
238
+ }
239
+
240
+ .mapplic-pin.iconpin.yellow {
241
+ background-image: url(images/pin-yellow-large.png);
242
+ }
243
+
244
+ .mapplic-pin.iconpin.green {
245
+ background-image: url(images/pin-green-large.png);
246
+ }
247
+
248
+ .mapplic-pin.iconpin.blue {
249
+ background-image: url(images/pin-blue-large.png);
250
+ }
251
+
252
+ .mapplic-pin.iconpin.purple {
253
+ background-image: url(images/pin-purple-large.png);
254
+ }
255
+
256
+ .mapplic-pin.iconpin.white {
257
+ background-image: url(images/pin-purple-white.png);
258
+ }
259
+
260
+ .mapplic-pin.circular {
261
+ background-image: none;
262
+ background-color: #fb7575;
263
+ border-radius: 6px;
264
+ box-shadow: 0 -2px 0 rgba(0, 0, 0, 0.1) inset;
265
+ width: 12px;
266
+ height: 12px;
267
+ margin-left: -6px;
268
+ margin-top: -6px;
269
+ }
270
+
271
+ .mapplic-pin.transparent {
272
+ background-image: none;
273
+ background-color: #fb7575;
274
+ border-radius: 10px;
275
+ width: 20px;
276
+ height: 20px;
277
+ margin-left: -10px;
278
+ margin-top: -10px;
279
+ opacity: 0.5 !important;
280
+ }
281
+
282
+ .mapplic-pin.mapplic-animate {
283
+ -webkit-animation: bounce-in 0.4s forwards;
284
+ animation: bounce-in 0.4s forwards;
285
+ }
286
+
287
+ @-webkit-keyframes bounce-in {
288
+ 0% {
289
+ margin-top: -120px;
290
+ opacity: 0;
291
+ }
292
+ 33% {
293
+ margin-top: -25px;
294
+ opacity: 1;
295
+ }
296
+ 66% {
297
+ margin-top: -30px;
298
+ }
299
+ 100% {
300
+ margin-top: -23px;
301
+ opacity: 1;
302
+ }
303
+ }
304
+
305
+ /* Minimap */
306
+ .mapplic-minimap {
307
+ border: 1px solid rgba(0, 0, 0, 0.2);
308
+ border-radius: 2px;
309
+ position: absolute;
310
+ width: 140px;
311
+ margin: 10px;
312
+ bottom: 0;
313
+ right: 0;
314
+ opacity: 0.5;
315
+ overflow: hidden;
316
+ -webkit-transition: opacity 0.6s;
317
+ -moz-transition: opacity 0.6s;
318
+ transition: opacity 0.6s;
319
+ -webkit-touch-callout: none;
320
+ -webkit-user-select: none;
321
+ -khtml-user-select: none;
322
+ -moz-user-select: none;
323
+ -ms-user-select: none;
324
+ user-select: none;
325
+ }
326
+
327
+ .mapplic-minimap img {
328
+ width: 100%;
329
+ }
330
+
331
+ .mapplic-minimap-overlay {
332
+ background-color: rgba(0, 0, 0, 0.4);
333
+ position: absolute;
334
+ width: 100%;
335
+ height: 100%;
336
+ top: 0;
337
+ left: 0;
338
+ }
339
+
340
+ .mapplic-minimap .mapplic-minimap-active {
341
+ position: absolute;
342
+ opacity: 1;
343
+ top: 0;
344
+ left: 0;
345
+ -webkit-transition: clip 0.1s;
346
+ -moz-transition: clip 0.1s;
347
+ transition: clip 0.1s;
348
+ }
349
+
350
+ .mapplic-minimap-background {
351
+ -webkit-filter: blur(2px);
352
+ }
353
+
354
+ /* Clear Button */
355
+ .mapplic-clear-button {
356
+ background-color: #fff;
357
+ background-image: url(images/reset.png);
358
+ background-size: 16px 16px;
359
+ background-repeat: no-repeat;
360
+ background-position: center;
361
+ border: 1px solid #eee;
362
+ border-bottom: 1px solid #ddd;
363
+ border-radius: 3px;
364
+ margin: 10px;
365
+ width: 28px;
366
+ height: 28px;
367
+ position: absolute;
368
+ bottom: 0;
369
+ left: 0;
370
+ }
371
+
372
+ .mapplic-clear-button:active {
373
+ background-color: #eee;
374
+ }
375
+
376
+ /* Zoom Buttons */
377
+
378
+ #container_buttons {
379
+ position: relative;
380
+ height: 0;
381
+
382
+ &:after {
383
+ position: absolute;
384
+ display: block;
385
+ background-color: transparent;
386
+ top: -700px;
387
+ left: -969px;
388
+ width: 1000px;
389
+ height: 800px;
390
+ }
391
+
392
+ &:before {
393
+ position: absolute;
394
+ display: block;
395
+ background-color: transparent;
396
+ top: -700px;
397
+ left: 1037px;
398
+ width: 1000px;
399
+ height: 800px;
400
+ }
401
+
402
+ .mzoom_buttons {
403
+ margin: 10px;
404
+ position: absolute;
405
+ left: 50px;
406
+ bottom: 10px !important;
407
+
408
+ transition: all 0.2s ease-in-out;
409
+ -webkit-transition: all 0.2s ease-in-out;
410
+ -moz-transition: all 0.2s ease-in-out;
411
+ -ms-transition: all 0.2s ease-in-out;
412
+ -o-transition: all 0.2s ease-in-out;
413
+
414
+ a {
415
+ @extend %ebutton;
416
+
417
+ &:active, &:focus, &:hover {
418
+ background-color: #2c3959;
419
+ }
420
+
421
+ &.mapplic-zoomin-button {
422
+ border-radius: 1px 1px 0 0;
423
+ &:after {
424
+ content: '+';
425
+ }
426
+ }
427
+
428
+ &.mapplic-zoomout-button {
429
+ border-radius: 0 0 1px 1px;
430
+ border-top: none;
431
+ &:after {
432
+ content: '-';
433
+ }
434
+ }
435
+
436
+ &.mapplic-edit-button {
437
+ border-radius: 0 0 1px 1px;
438
+ border-top: none;
439
+
440
+ &:after {
441
+ content: 'ред';
442
+ font-size: 14px;
443
+ }
444
+
445
+ &.editing, &.edit_area, &.edit_building {
446
+ background-color: #a10000;
447
+ }
448
+ }
449
+
450
+ &.mapplic-new-button {
451
+ border-radius: 0 0 1px 1px;
452
+ border-top: none;
453
+ background-color: #a10000;
454
+ opacity: 0;
455
+ display: none;
456
+
457
+ &:after {
458
+ content: '+';
459
+ }
460
+
461
+ }
462
+
463
+ &.mapplic-remove-button {
464
+ border-radius: 0 0 1px 1px;
465
+ border-top: none;
466
+ background-color: #a10000;
467
+ // opacity: 0;
468
+ display: none;
469
+
470
+ &:after {
471
+ content: '-';
472
+ }
473
+
474
+ }
475
+
476
+ &.mapplic-save-button {
477
+ border-radius: 0 0 1px 1px;
478
+ border-top: none;
479
+ background-color: #a10000;
480
+ display: none;
481
+ border-bottom: 1px solid #14233C;
482
+
483
+ &:after {
484
+ content: '\f0c7';
485
+ font-family: 'FontAwesome';
486
+ font-size: 21px;
487
+ font-weight: normal;
488
+ }
489
+
490
+ &:active, &:focus, &:hover {
491
+ background-color: #ba0000;
492
+ }
493
+
494
+ &.mapplic-disabled {
495
+ &:active, &:focus, &:hover {
496
+ background-color: #8f8f8f;
497
+ }
498
+ }
499
+
500
+ }
501
+
502
+ &.mapplic-area-link-button, &.mapplic-building-link-button {
503
+ border-radius: 0 0 1px 1px;
504
+ border-top: none;
505
+ background-color: #a10000;
506
+ border-bottom: 1px solid #14233C;
507
+ display: none;
508
+
509
+ &:after {
510
+ content: '\f044';
511
+ font-family: 'FontAwesome';
512
+ font-size: 21px;
513
+ font-weight: normal;
514
+ }
515
+
516
+ &:active, &:focus, &:hover {
517
+ background-color: #ba0000;
518
+ }
519
+
520
+ &.mapplic-disabled {
521
+ &:active, &:focus, &:hover {
522
+ background-color: #8f8f8f;
523
+ }
524
+ }
525
+
526
+ }
527
+
528
+ &.mapplic-disabled {
529
+ background-color: #8f8f8f;
530
+ cursor: default;
531
+ }
532
+
533
+ }
534
+
535
+ }
536
+
537
+ .back_to_map_button {
538
+ margin: 10px;
539
+ position: absolute;
540
+ left: 100px;
541
+ bottom: 10px !important;
542
+ display: none;
543
+
544
+ a {
545
+ @extend %ebutton;
546
+ padding-left: 15px;
547
+ padding-right: 15px;
548
+ width: auto;
549
+
550
+ }
551
+
552
+ }
553
+
554
+ .status_bar {
555
+ position: absolute;
556
+ bottom: 20px !important;
557
+ left: 108px;
558
+ font-size: 14px;
559
+
560
+ > * {
561
+ display: none;
562
+ }
563
+
564
+ div.status_block {
565
+
566
+ > * {
567
+ float: left;
568
+ line-height: 37px;
569
+ padding: 0 15px;
570
+ }
571
+
572
+ span.message {
573
+ background-color: #CCA87C;
574
+ color: #fff;
575
+ display: block;
576
+ height: 40px;
577
+ }
578
+
579
+ a {
580
+ @extend %ebutton;
581
+ width: auto;
582
+ }
583
+
584
+ &#map_creating {
585
+
586
+ a#cancelCreating {
587
+ background-color: #a10000;
588
+ }
589
+ }
590
+
591
+ &#map_editing {
592
+
593
+ }
594
+
595
+ }
596
+
597
+ }
598
+
599
+ }
600
+
601
+ /* Fullscreen Button */
602
+ .mapplic-fullscreen-button {
603
+ background-color: #fff;
604
+ background-image: url(image_path('fullscreen.png'));
605
+ background-repeat: no-repeat;
606
+ background-position: center;
607
+ border: 1px solid #eee;
608
+ border-bottom: 1px solid #ddd;
609
+ border-radius: 2px;
610
+ margin: 10px;
611
+ width: 28px;
612
+ height: 28px;
613
+ position: absolute;
614
+ top: 0;
615
+ left: 0;
616
+ }
617
+
618
+ /* Levels */
619
+ .mapplic-levels {
620
+ position: absolute;
621
+ top: 0;
622
+ right: 0;
623
+ margin: 10px;
624
+ overflow: hidden;
625
+ }
626
+
627
+ .mapplic-levels > * {
628
+ border: 1px solid #eee;
629
+ display: block;
630
+ width: 100%;
631
+ -webkit-box-sizing: border-box;
632
+ -moz-box-sizing: border-box;
633
+ box-sizing: border-box;
634
+ }
635
+
636
+ .mlevels_select {
637
+ background-color: #fff;
638
+ border-top: none;
639
+ color: #666;
640
+ margin: 0;
641
+ padding: 6px 2px;
642
+ font-size: 14px;
643
+ outline: none;
644
+ }
645
+
646
+ .mapplic-levels a {
647
+ background-color: #fff;
648
+ background-repeat: no-repeat;
649
+ background-position: center;
650
+ cursor: pointer;
651
+ height: 24px;
652
+ width: 100%;
653
+ }
654
+
655
+ .mapplic-levels a:active {
656
+ background-color: #f8f8f8;
657
+ }
658
+
659
+ .mapplic-levels .mapplic-levels-up {
660
+ background-image: url(images/arrow-up.png);
661
+ background-size: 8px 4px;
662
+ border-radius: 3px 3px 0 0;
663
+ }
664
+
665
+ .mapplic-levels .mapplic-levels-down {
666
+ background-image: url(images/arrow-down.png);
667
+ background-size: 8px 4px;
668
+ border-top: none;
669
+ border-radius: 0 0 3px 3px;
670
+ }
671
+
672
+ .mapplic-levels a.mapplic-disabled {
673
+ background-color: #eee;
674
+ cursor: default;
675
+ }
676
+
677
+ /* Sidebar */
678
+ .mapplic-sidebar {
679
+ background-color: #f8f8f8;
680
+ width: 30%;
681
+ height: 100%;
682
+ float: left;
683
+ position: relative;
684
+ }
685
+
686
+ :-webkit-full-screen .mapplic-sidebar {
687
+ width: 20%;
688
+ }
689
+
690
+ /* Search */
691
+ .mapplic-search-form {
692
+ background-color: #f8f8f8;
693
+ border-bottom: 1px solid #eee;
694
+ border-right: 1px solid #f4f4f4;
695
+ padding: 14px 12px;
696
+ margin: 0;
697
+ width: 100%;
698
+ position: absolute;
699
+ -webkit-box-sizing: border-box;
700
+ -moz-box-sizing: border-box;
701
+ box-sizing: border-box;
702
+ }
703
+
704
+ .mapplic-search-input {
705
+ background-image: url(images/viewer.png);
706
+ background-size: 17px 16px;
707
+ background-repeat: no-repeat;
708
+ background-position: 8px;
709
+ border: 2px solid #eee;
710
+ border-radius: 2px;
711
+ font-size: 14px;
712
+ font-family: inherit;
713
+ line-height: 20px;
714
+ height: 38px;
715
+ margin: 0;
716
+ padding: 8px 32px;
717
+ width: 100%;
718
+ -webkit-box-sizing: border-box;
719
+ -moz-box-sizing: border-box;
720
+ box-sizing: border-box;
721
+
722
+ -webkit-transition: border-color 0.1s;
723
+ -moz-transition: border-color 0.1s;
724
+ transition: border-color 0.1s;
725
+ }
726
+
727
+ .mapplic-search-input:focus {
728
+ border-color: #6ed8dd;
729
+ }
730
+
731
+ .mapplic-search-clear {
732
+ background-image: url(images/cross.png);
733
+ background-size: 8px 8px;
734
+ background-repeat: no-repeat;
735
+ background-color: transparent;
736
+ background-position: center;
737
+ border: none;
738
+ cursor: pointer;
739
+ display: none;
740
+ position: absolute;
741
+ top: 14px;
742
+ right: 14px;
743
+ margin: 2px 0;
744
+ width: 34px;
745
+ height: 34px;
746
+ }
747
+
748
+ .mapplic-not-found {
749
+ color: #bbb;
750
+ display: none;
751
+ font-size: 13px;
752
+ padding: 0 30px;
753
+ position: absolute;
754
+ text-align: center;
755
+ top: 100px;
756
+ }
757
+
758
+ /* List */
759
+ .mapplic-list-container {
760
+ padding-top: 67px;
761
+ height: 100%;
762
+ overflow-y: auto;
763
+ -webkit-box-sizing: border-box;
764
+ -moz-box-sizing: border-box;
765
+ box-sizing: border-box;
766
+ }
767
+
768
+ .mapplic-list {
769
+ list-style: none;
770
+ padding: 0;
771
+ margin: 0;
772
+ overflow-y: auto;
773
+ height: 100%;
774
+ }
775
+
776
+ .mapplic-list-container ol {
777
+ border-color: #eee;
778
+ list-style: none;
779
+ padding: 0;
780
+ margin: 0;
781
+ }
782
+
783
+ .mapplic-list-container li {
784
+ border-color: inherit;
785
+ }
786
+
787
+ .mapplic-list-category > a {
788
+ background-color: #888;
789
+ box-shadow: 0 -2px 0 rgba(0, 0, 0, 0.05) inset;
790
+ color: #fff;
791
+ display: block;
792
+ font-size: 14px;
793
+ line-height: 26px;
794
+ padding: 10px 12px;
795
+ white-space: nowrap;
796
+ overflow: hidden;
797
+ text-overflow: ellipsis;
798
+ box-sizing: border-box;
799
+ }
800
+
801
+ .mapplic-list-category ol {
802
+ border-bottom: 2px solid #eee !important;
803
+ }
804
+
805
+ .mapplic-list-thumbnail {
806
+ border-radius: 2px;
807
+ float: left;
808
+ margin-right: 10px;
809
+ }
810
+
811
+ .mapplic-list-category > a .mapplic-list-count {
812
+ background-color: rgba(0, 0, 0, 0.1);
813
+ border-radius: 2px;
814
+ float: right;
815
+ font-size: 12px;
816
+ font-weight: bold;
817
+ line-height: 20px;
818
+ padding: 0 6px;
819
+ margin-left: 10px;
820
+ text-align: center;
821
+ margin-top: 4px;
822
+ -webkit-transition: border-radius 0.2s;
823
+ -moz-transition: border-radius 0.2s;
824
+ transition: border-radius 0.2s;
825
+
826
+ }
827
+
828
+ .mapplic-list-location {
829
+ border-bottom: 1px solid #eee;
830
+ margin: 0;
831
+ }
832
+
833
+ .mapplic-list-location > a {
834
+ background-color: #fff;
835
+ border-left: 1px solid transparent;
836
+ display: block;
837
+ font-size: 14px;
838
+ padding: 10px;
839
+ min-height: 50px;
840
+ -webkit-transition: border 0.2s;
841
+ -moz-transition: border 0.2s;
842
+ transition: border 0.2s;
843
+ }
844
+
845
+ .mapplic-list-location > a:hover {
846
+ background-color: #f4fcfc;
847
+ border-left: 2px solid;
848
+ border-color: inherit;
849
+ }
850
+
851
+ .mapplic-list-location h4 {
852
+ color: #444;
853
+ font-size: 16px;
854
+ font-weight: normal;
855
+ margin: 4px 0 8px 0;
856
+ text-align: left;
857
+ }
858
+
859
+ .mapplic-list-location span {
860
+ /* 42 -20 13 30*/
861
+ color: #bbb;
862
+ font-size: 13px;
863
+ font-weight: normal;
864
+ }
865
+
866
+ /* Tooltip */
867
+ .mapplic-tooltip {
868
+ background-color: #fff;
869
+ border-radius: 2px;
870
+ box-shadow: 0 0 6px rgba(0, 0, 0, 0.2);
871
+ display: none;
872
+ max-width: 260px;
873
+ min-width: 120px;
874
+ margin-top: -76px;
875
+ padding: 16px;
876
+ position: absolute;
877
+ -webkit-transition: margin 0.1s;
878
+ -moz-transition: margin 0.1s;
879
+ transition: margin 0.1s;
880
+ }
881
+
882
+ .mapplic-tooltip-title {
883
+ color: #333;
884
+ font-size: 20px;
885
+ font-weight: normal;
886
+ margin: 0 30px 12px 0;
887
+ }
888
+
889
+ .mapplic-hovertip {
890
+ min-width: 30px;
891
+ padding: 6px 14px;
892
+ pointer-events: none;
893
+ }
894
+
895
+ .mapplic-hovertip .mapplic-tooltip-title {
896
+ margin: 0;
897
+ font-size: 16px;
898
+ line-height: 24px;
899
+ text-align: center;
900
+ }
901
+
902
+ .mapplic-bottom .mapplic-tooltip-triangle {
903
+ border-color: transparent transparent #fff transparent;
904
+ border-width: 0 7px 8px 7px;
905
+ top: 0;
906
+ margin-top: -8px;
907
+ }
908
+
909
+ .mapplic-tooltip-content {
910
+ max-height: 160px;
911
+ overflow-y: auto;
912
+ }
913
+
914
+ .mapplic-tooltip-content p {
915
+ margin-top: 0;
916
+ }
917
+
918
+ .mapplic-tooltip-image {
919
+ width: 46%;
920
+ height: 100%;
921
+ /*margin: 5px 20px 5px 0;*/
922
+ margin: -16px 16px -16px -16px;
923
+ float: left;
924
+ }
925
+
926
+ .mapplic-tooltip-description,
927
+ .mapplic-tooltip p {
928
+ color: #aaa;
929
+ font-size: 13px;
930
+ line-height: 20px;
931
+ }
932
+
933
+ .mapplic-tooltip-link {
934
+ background-color: #6CB5F4;
935
+ border-radius: 2px;
936
+ color: #fff !important;
937
+ float: right;
938
+ font-size: 14px;
939
+ line-height: 32px;
940
+ padding: 0 12px;
941
+ margin-top: 10px;
942
+ -webkit-transition: background-color 0.2s;
943
+ -moz-transition: background-color 0.2s;
944
+ transition: background-color 0.2s;
945
+ }
946
+
947
+ .mapplic-tooltip-link:hover {
948
+ background-color: #888;
949
+ }
950
+
951
+ .mapplic-tooltip img {
952
+ max-width: 100%;
953
+ }
954
+
955
+ .mapplic-tooltip-close {
956
+ background-image: url(images/cross.png);
957
+ background-position: center;
958
+ background-repeat: no-repeat;
959
+ background-size: 8px 8px;
960
+ background-color: transparent;
961
+ border: none;
962
+ cursor: pointer;
963
+ float: right;
964
+ margin: -10px -14px 0 0;
965
+ padding: 10px 12px;
966
+ width: 10px;
967
+ height: 10px;
968
+ opacity: 0.5;
969
+ -webkit-transition: opacity 0.2s;
970
+ -moz-transition: opacity 0.2s;
971
+ transition: opacity 0.2s;
972
+ }
973
+
974
+ .mapplic-tooltip-close:hover {
975
+ opacity: 1.0;
976
+ }
977
+
978
+ .mapplic-tooltip-triangle {
979
+ border-color: #fff transparent transparent transparent;
980
+ border-style: solid;
981
+ border-width: 8px 7px 0 7px;
982
+ width: 0;
983
+ height: 0;
984
+ position: absolute;
985
+ bottom: 0;
986
+ left: 50%;
987
+ margin-bottom: -8px;
988
+ margin-left: -7px;
989
+ -webkit-transition: left 0.1s;
990
+ -moz-transition: left 0.1s;
991
+ transition: left 0.1s;
992
+ }
993
+
994
+ /* Tooltip down */
995
+ .mapplic-tooltip-down .mapplic-tooltip-triangle {
996
+ border-width: 0 7px 8px 7px;
997
+ border-color: transparent transparent #fff transparent;
998
+ top: 0;
999
+ margin-top: -8px;
1000
+ }
1001
+
1002
+ /* Coordinates */
1003
+ .mapplic-coordinates {
1004
+ background-color: rgba(255, 255, 255, 0.9);
1005
+ color: #333;
1006
+ position: absolute;
1007
+ margin: 10px;
1008
+ margin-left: -80px;
1009
+ padding: 4px 6px;
1010
+ font-size: 14px;
1011
+ top: 0;
1012
+ left: 50%;
1013
+ pointer-events: none;
1014
+ }
1015
+
1016
+ /* Responsive layout */
1017
+ @media all and (max-width: 667px) {
1018
+ .mapplic-container,
1019
+ .mapplic-sidebar {
1020
+ width: 100%;
1021
+ }
1022
+
1023
+ .mapplic-tooltip {
1024
+ max-width: 240px;
1025
+ }
1026
+
1027
+ .mapplic-minimap {
1028
+ width: 120px;
1029
+ }
1030
+
1031
+ .mapplic-element {
1032
+ height: auto !important;
1033
+ }
1034
+
1035
+ .mapplic-fullscreen-button {
1036
+ display: none;
1037
+ }
1038
+
1039
+ .mapplic-search-form {
1040
+ border-right: none;
1041
+ }
1042
+ }
1043
+
1044
+ /* RETINA */
1045
+ @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi), (min-resolution: 2dppx) {
1046
+ .mapplic-search-clear,
1047
+ .mapplic-tooltip-close {
1048
+ background-image: url(images/cross@2x.png);
1049
+ }
1050
+
1051
+ .mapplic-levels .mapplic-levels-up {
1052
+ background-image: url(images/arrow-up@2x.png);
1053
+ }
1054
+
1055
+ .mapplic-levels .mapplic-levels-down {
1056
+ background-image: url(images/arrow-down@2x.png);
1057
+ }
1058
+
1059
+ a.mapplic-zoomin-button {
1060
+ background-image: url(images/plus@2x.png);
1061
+ }
1062
+
1063
+ a.mapplic-zoomout-button {
1064
+ background-image: url(images/minus@2x.png);
1065
+ }
1066
+
1067
+ .mapplic-search-input {
1068
+ background-image: url(images/viewer@2x.png);
1069
+ }
1070
+
1071
+ .mapplic-pin {
1072
+ background-image: url(images/pin@2x.png);
1073
+ }
1074
+ .mapplic-pin.orange {
1075
+ background-image: url(images/pin-orange@2x.png);
1076
+ }
1077
+ .mapplic-pin.yellow {
1078
+ background-image: url(images/pin-yellow@2x.png);
1079
+ }
1080
+ .mapplic-pin.green {
1081
+ background-image: url(images/pin-green@2x.png);
1082
+ }
1083
+ .mapplic-pin.blue {
1084
+ background-image: url(images/pin-blue@2x.png);
1085
+ }
1086
+ .mapplic-pin.purple {
1087
+ background-image: url(images/pin-purple@2x.png);
1088
+ }
1089
+ .mapplic-pin.white {
1090
+ background-image: url(images/pin-white@2x.png);
1091
+ }
1092
+
1093
+ .mapplic-pin.iconpin {
1094
+ background-image: url(images/pin-large@2x.png);
1095
+ }
1096
+ .mapplic-pin.iconpin.orange {
1097
+ background-image: url(images/pin-orange-large@2x.png);
1098
+ }
1099
+ .mapplic-pin.iconpin.yellow {
1100
+ background-image: url(images/pin-yellow-large@2x.png);
1101
+ }
1102
+ .mapplic-pin.iconpin.green {
1103
+ background-image: url(images/pin-green-large@2x.png);
1104
+ }
1105
+ .mapplic-pin.iconpin.blue {
1106
+ background-image: url(images/pin-blue-large@2x.png);
1107
+ }
1108
+ .mapplic-pin.iconpin.purple {
1109
+ background-image: url(images/pin-purple-large@2x.png);
1110
+ }
1111
+ .mapplic-pin.iconpin.white {
1112
+ background-image: url(images/pin-white-large@2x.png);
1113
+ }
1114
+
1115
+ .mapplic-clear-button {
1116
+ background-image: url(images/reset@2x.png);
1117
+ }
1118
+ }
1119
+
1120
+ /* Map */
1121
+ .mapplic-element svg {
1122
+ width: 100%;
1123
+ height: 100%;
1124
+ }
1125
+
1126
+ .mapplic-element svg a {
1127
+ cursor: pointer;
1128
+ }
1129
+
1130
+ .mapplic-active,
1131
+ a.mapplic-active > path,
1132
+ g.mapplic-active > * {
1133
+ fill: #343F4B;
1134
+ opacity: 1.0;
1135
+ }
1136
+
1137
+ .mapplic-clickable:not(g),
1138
+ g.mapplic-clickable > * {
1139
+ cursor: pointer;
1140
+ opacity: 0.4;
1141
+ -webkit-transition: opacity 0.2s;
1142
+ -moz-transition: opacity 0.2s;
1143
+ transition: opacity 0.2s;
1144
+ }
1145
+
1146
+ .mapplic-clickable:not(g):hover,
1147
+ g.mapplic-clickable:hover > * {
1148
+ opacity: 0.8;
1149
+ }
1150
+
1151
+ .mmap-image *[id^=nopointer] {
1152
+ pointer-events: none;
1153
+ }
1154
+
1155
+ [id^=landmarks] .mapplic-clickable {
1156
+ cursor: pointer;
1157
+ }
1158
+
1159
+ .area_order_button {
1160
+ position: absolute;
1161
+ z-index: 5;
1162
+ padding: 20px;
1163
+ background-color: #ececec;
1164
+ display: none;
1165
+ font-size: 14px;
1166
+
1167
+ -webkit-transition: all 0.8s cubic-bezier(.25, .8, .25, 1);
1168
+ -moz-transition: all 0.8s cubic-bezier(.25, .8, .25, 1);
1169
+ transition: all 0.8s cubic-bezier(.25, .8, .25, 1);
1170
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
1171
+
1172
+ > * {
1173
+ float: left;
1174
+ }
1175
+
1176
+ h5 {
1177
+
1178
+ }
1179
+
1180
+ ul {
1181
+ list-style: none;
1182
+ margin: 0;
1183
+ padding: 0;
1184
+ li {
1185
+ float: left;
1186
+ margin-right: 5px;
1187
+
1188
+ div.checkbox:after {
1189
+ top: 8px;
1190
+ }
1191
+ }
1192
+ }
1193
+
1194
+ a {
1195
+ width: auto;
1196
+ padding: 0 15px;
1197
+ float: right;
1198
+ }
1199
+ }
1200
+
1201
+ //----------------------------------------------------------------------------------------------------------------------
1202
+
1203
+ div#map_wrapper {
1204
+ position: relative;
1205
+
1206
+ div.mcontainer {
1207
+ background-color: #D9D9D9;
1208
+
1209
+ #svg {
1210
+ position: absolute;
1211
+ top: 0;
1212
+ left: 0;
1213
+ width: 100%;
1214
+ height: 100%;
1215
+ z-index: 2;
1216
+ display: inline-block;
1217
+
1218
+ rect.helper {
1219
+ fill: #FFF;
1220
+ stroke: #000;
1221
+ stroke-width: 2px;
1222
+ display: none;
1223
+ cursor: pointer;
1224
+ &:hover {
1225
+ fill: blue;
1226
+ stroke: red;
1227
+ }
1228
+ }
1229
+
1230
+ polygon, polyline {
1231
+ fill: rgba(255, 255, 255, 0);
1232
+ stroke: rgba(255, 255, 255, 0);
1233
+ cursor: pointer;
1234
+
1235
+ &:hover, &.hover {
1236
+ fill: rgba(255, 255, 255, 0.5);
1237
+ stroke: rgba(255, 255, 255, 0.1);
1238
+ }
1239
+
1240
+ -webkit-transition: stroke 0.6s, fill 0.4s, opacity .8s ease-in;
1241
+ -moz-transition: stroke 0.6s, fill 0.4s, opacity .8s ease-in;
1242
+ transition: stroke 0.6s, fill 0.4s, opacity .8s ease-in;
1243
+
1244
+ }
1245
+
1246
+ g {
1247
+
1248
+ &.free {
1249
+ polygon, polyline {
1250
+ fill: rgba(0, 255, 19, 0.30);
1251
+ stroke: rgba(51, 51, 51, 0.36);
1252
+ cursor: pointer;
1253
+
1254
+ &:hover, &.hover {
1255
+ fill: rgba(0, 255, 19, 0.50);
1256
+ stroke: rgba(251, 251, 251, 0.86);
1257
+ }
1258
+
1259
+ }
1260
+ }
1261
+
1262
+ &.busy {
1263
+ polygon, polyline {
1264
+ fill: rgba(255, 4, 0, 0.30);
1265
+ stroke: rgba(255, 4, 0, 0.30);
1266
+ cursor: pointer;
1267
+
1268
+ &:hover, &.hover {
1269
+ fill: rgba(255, 4, 0, 0.40);
1270
+ stroke: rgba(251, 251, 251, 0.86);
1271
+ }
1272
+
1273
+ }
1274
+ }
1275
+
1276
+ &.unassigned {
1277
+
1278
+ polygon, polyline {
1279
+ fill: rgba(131, 131, 131, 0.30);
1280
+ stroke: rgba(131, 131, 131, 0.40);
1281
+ cursor: pointer;
1282
+
1283
+ &:hover, &.hover {
1284
+ fill: rgba(131, 131, 131, 0.40);
1285
+ stroke: rgba(251, 251, 251, 0.86);
1286
+ }
1287
+ }
1288
+
1289
+ &.viewing_area {
1290
+ polygon, polyline {
1291
+ /*background: transparent url(image_path('loader_button.gif')) no-repeat 0 0;*/
1292
+ fill: rgba(131, 131, 131, 0.50);
1293
+ stroke: rgba(131, 131, 131, 0.60);
1294
+ stroke-width: 2px;
1295
+ stroke-dasharray: 10;
1296
+ animation: dash 555s linear;
1297
+
1298
+ &:hover, &.hover {
1299
+ fill: rgba(131, 131, 131, 0.70);
1300
+ stroke: rgba(251, 251, 251, 0.86);
1301
+ }
1302
+ }
1303
+ }
1304
+
1305
+ }
1306
+
1307
+ &.viewing_area {
1308
+ polygon, polyline {
1309
+ /*background: transparent url(image_path('loader_button.gif')) no-repeat 0 0;*/
1310
+ fill: rgba(0, 255, 19, 0.10);
1311
+ stroke: rgba(255, 246, 242, 0.59);
1312
+ stroke-width: 2px;
1313
+ stroke-dasharray: 10;
1314
+ animation: dash 555s linear;
1315
+
1316
+ &:hover, &.hover {
1317
+ fill: rgba(0, 255, 19, 0.50);
1318
+ stroke: rgba(255, 246, 242, 0.79);
1319
+ }
1320
+ }
1321
+ }
1322
+ }
1323
+
1324
+ }
1325
+
1326
+ #svg_overlay {
1327
+ position: absolute;
1328
+ top: 0;
1329
+ left: 0;
1330
+ width: 100%;
1331
+ height: 100%;
1332
+ z-index: 4;
1333
+ display: inline-block;
1334
+
1335
+ rect.helper {
1336
+ opacity: 0;
1337
+ }
1338
+
1339
+ polygon, polyline {
1340
+ fill: rgba(255, 255, 255, 0);
1341
+ stroke: rgba(255, 255, 255, 0);
1342
+ cursor: pointer;
1343
+ }
1344
+
1345
+ }
1346
+
1347
+ &.editing,
1348
+ &.edit_area,
1349
+ &.edit_building {
1350
+ #svg {
1351
+
1352
+ rect.helper {
1353
+ display: block;
1354
+ }
1355
+
1356
+ polygon, polyline {
1357
+ fill: rgba(103, 232, 237, 0.30);
1358
+ stroke: rgba(0, 255, 19, 0.90);
1359
+ &:hover {
1360
+ fill: rgba(103, 232, 237, 0.60);
1361
+ stroke: rgba(255, 0, 169, 0.99);
1362
+ }
1363
+ }
1364
+
1365
+ g.free {
1366
+ polygon, polyline {
1367
+ fill: rgba(0, 255, 19, 0.20);
1368
+ stroke: rgba(255, 255, 255, 0.90);
1369
+ cursor: pointer;
1370
+
1371
+ &:hover, &.hover {
1372
+ fill: rgba(0, 255, 19, 0.50);
1373
+ stroke: rgba(0, 0, 0, 0.80);
1374
+ }
1375
+
1376
+ }
1377
+ }
1378
+
1379
+ g.busy {
1380
+ polygon, polyline {
1381
+ fill: rgba(255, 4, 0, 0.30);
1382
+ stroke: rgba(255, 255, 255, 0.90);
1383
+ cursor: pointer;
1384
+
1385
+ &:hover, &.hover {
1386
+ fill: rgba(255, 4, 0, 0.40);
1387
+ stroke: rgba(0, 0, 0, 0.80);
1388
+ }
1389
+
1390
+ }
1391
+ }
1392
+
1393
+ }
1394
+ }
1395
+
1396
+ // спрячем все полигоны, кроме редактируемого полигона
1397
+ &.edit_area {
1398
+ #svg {
1399
+ g {
1400
+ opacity: 0;
1401
+ &.viewing_area {
1402
+ opacity: 1.0;
1403
+ }
1404
+ }
1405
+ }
1406
+ }
1407
+
1408
+ &.creating {
1409
+ #svg {
1410
+
1411
+ rect.helper {
1412
+ display: block;
1413
+ }
1414
+
1415
+ polygon, polyline {
1416
+ fill: rgba(255, 61, 0, 0.50);
1417
+ stroke: rgba(255, 255, 255, 0.8);
1418
+ &:hover {
1419
+ fill: rgba(255, 4, 0, 0.70);
1420
+ stroke: rgba(255, 255, 255, 0.9);
1421
+ }
1422
+ }
1423
+
1424
+ }
1425
+ }
1426
+
1427
+ }
1428
+
1429
+ }
1430
+
1431
+ @keyframes dash {
1432
+ to {
1433
+ stroke-dashoffset: 10000;
1434
+ }
1435
+ }
1436
+
1437
+ .popover {
1438
+ z-index: 100;
1439
+ position: absolute;
1440
+ }
1441
+
1442
+ .popover-content {
1443
+ ul {
1444
+ margin: 0;
1445
+ padding: 0 0 0 10px;
1446
+ list-style: disc;
1447
+ }
1448
+ }
1449
+
1450
+ #div_afa {
1451
+ > ul {
1452
+ list-style: none;
1453
+ padding: 0;
1454
+
1455
+ > li {
1456
+ float: left;
1457
+ margin-bottom: 10px;
1458
+
1459
+ ul {
1460
+
1461
+ }
1462
+ }
1463
+ }
1464
+ }