cck_forms 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +1 -0
  3. data/README.md +1 -0
  4. data/Rakefile +40 -0
  5. data/lib/cck_forms/date_time.rb +58 -0
  6. data/lib/cck_forms/engine.rb +23 -0
  7. data/lib/cck_forms/form_builder_extensions.rb +18 -0
  8. data/lib/cck_forms/parameter_type_class/album.rb +100 -0
  9. data/lib/cck_forms/parameter_type_class/base.rb +275 -0
  10. data/lib/cck_forms/parameter_type_class/boolean.rb +24 -0
  11. data/lib/cck_forms/parameter_type_class/checkboxes.rb +202 -0
  12. data/lib/cck_forms/parameter_type_class/date.rb +35 -0
  13. data/lib/cck_forms/parameter_type_class/date_range.rb +53 -0
  14. data/lib/cck_forms/parameter_type_class/date_time.rb +76 -0
  15. data/lib/cck_forms/parameter_type_class/enum.rb +53 -0
  16. data/lib/cck_forms/parameter_type_class/file.rb +80 -0
  17. data/lib/cck_forms/parameter_type_class/float.rb +20 -0
  18. data/lib/cck_forms/parameter_type_class/image.rb +20 -0
  19. data/lib/cck_forms/parameter_type_class/integer.rb +77 -0
  20. data/lib/cck_forms/parameter_type_class/integer_range.rb +150 -0
  21. data/lib/cck_forms/parameter_type_class/map.rb +259 -0
  22. data/lib/cck_forms/parameter_type_class/phones.rb +204 -0
  23. data/lib/cck_forms/parameter_type_class/string.rb +13 -0
  24. data/lib/cck_forms/parameter_type_class/string_collection.rb +23 -0
  25. data/lib/cck_forms/parameter_type_class/text.rb +18 -0
  26. data/lib/cck_forms/parameter_type_class/time.rb +30 -0
  27. data/lib/cck_forms/parameter_type_class/work_hours.rb +369 -0
  28. data/lib/cck_forms/version.rb +3 -0
  29. data/lib/cck_forms.rb +4 -0
  30. data/vendor/assets/javascripts/cck_forms/jquery.workhours.js +399 -0
  31. data/vendor/assets/javascripts/cck_forms/map.js.coffee +322 -0
  32. metadata +116 -0
@@ -0,0 +1,322 @@
1
+ class window.CckFormsMap
2
+ @addMap: (map) ->
3
+ @allMapsList ||= []
4
+ @allMapsList.push map
5
+ @allMaps: ->
6
+ @allMapsList || []
7
+ @switchMapTo: (mapType)->
8
+ @map: (type, element, initialPoint, fields, options = {})->
9
+ options['groupId'] = element.data('id')
10
+
11
+ switch type
12
+ when "yandex" then new CckFormsMap.YandexMap(element, initialPoint, fields, options)
13
+ when "google" then new CckFormsMap.GoogleMap(element, initialPoint, fields, options)
14
+ else
15
+ throw "Invalid map type: #{type}"
16
+
17
+ class CckFormsMap.AbstractMap
18
+ type: ->
19
+ constructor: (htmlElement, @initialCoordinate, @fields, options = {})->
20
+ @htmlElement = $(htmlElement)
21
+ @readOnlyMap = options.readOnly
22
+ @groupId = options.groupId
23
+
24
+ CckFormsMap.addMap @
25
+ @._render()
26
+ movePointTo: (somewhere)->
27
+ hide: ->
28
+ @htmlElement.hide()
29
+ show: ->
30
+ @htmlElement.show()
31
+ CckFormsMap.currentMap = @
32
+
33
+ setCenter: (latitudeAndLongitude)->
34
+ setZoom: (zoom)->
35
+ @internalMapAPI.setZoom zoom
36
+ setMarkerToPoint: (latitudeAndLongitude) ->
37
+
38
+ setCenterByGeocode: (geocode) ->
39
+
40
+ options = {
41
+ url: 'https://geocode-maps.yandex.ru/1.x/'
42
+ dataType: 'json'
43
+ data: {format: 'json', geocode: geocode, results: 1}
44
+ }
45
+
46
+ xhr = $.ajax options
47
+ xhr.done (data) =>
48
+ if data.response.GeoObjectCollection.featureMember[0]
49
+ point = data.response.GeoObjectCollection.featureMember[0].GeoObject.Point.pos.split ' '
50
+ latlon = {latitude: point[1], longitude: point[0]}
51
+
52
+ @fields.latitude.val point[1]
53
+ @fields.longitude.val point[0]
54
+
55
+ @.setMarkerToPoint latlon
56
+ @.setCenter latlon
57
+ @.setZoom 17 # подобран экспериментально
58
+
59
+ xhr.fail ->
60
+ alert "Произошла ошибка на сервере"
61
+
62
+
63
+ refresh: ->
64
+
65
+ _render: ->
66
+
67
+ _anotherMaps: ->
68
+ maps = []
69
+ _self = @
70
+ $.each CckFormsMap.allMaps(), ->
71
+ if @ != _self && @.groupId == _self.groupId
72
+ maps.push @
73
+ maps
74
+
75
+ class CckFormsMap.YandexMap extends CckFormsMap.AbstractMap
76
+ type: -> "yandex"
77
+ _render: ->
78
+ ymaps.ready =>
79
+ coords = [@initialCoordinate.longitude, @initialCoordinate.latitude]
80
+ @internalMapAPI = new ymaps.Map(@htmlElement[0],
81
+ center: coords
82
+ zoom: @initialCoordinate.zoom
83
+ type: "yandex#map"
84
+ , {})
85
+ @internalMapAPI.controls.add "zoomControl"
86
+ @yandexMapPlacemark = new ymaps.Placemark(coords,
87
+ iconContent: ""
88
+ ,
89
+ preset: "twirl#blueStretchyIcon"
90
+ )
91
+ @internalMapAPI.geoObjects.add @yandexMapPlacemark
92
+
93
+ @internalMapAPI.events.add "click", (e) =>
94
+ return if @readOnlyMap
95
+ coords = e.get("coordPosition")
96
+ @fields.latitude.val coords[1]
97
+ @fields.longitude.val coords[0]
98
+ @fields.zoom.val @internalMapAPI.getZoom()
99
+ @yandexMapPlacemark.geometry.setCoordinates coords
100
+
101
+ $.each @._anotherMaps(), ->
102
+ @.setMarkerToPoint latitude: coords[1], longitude: coords[0]
103
+
104
+ @internalMapAPI.events.add "boundschange", (e) =>
105
+ newZoom = e.get("newZoom")
106
+ zoomChanged = e.get("oldZoom") != newZoom
107
+
108
+ newCenter = e.get("newCenter")
109
+ centerChanged = e.get("oldCenter") != newCenter
110
+
111
+ zoom = @internalMapAPI.getZoom()
112
+ @fields.zoom.val zoom
113
+
114
+ $.each @._anotherMaps(), ->
115
+ @.setZoom zoom if zoomChanged
116
+ @.setCenter {latitude: newCenter[1], longitude: newCenter[0]} if centerChanged and not @ignoreCenterChange
117
+
118
+ setMarkerToPoint: (latitudeAndLongitude) ->
119
+ @yandexMapPlacemark?.geometry.setCoordinates [latitudeAndLongitude.longitude, latitudeAndLongitude.latitude]
120
+ setCenter: (latitudeAndLongitude)->
121
+ @ignoreCenterChange = true
122
+
123
+ if @internalMapAPI
124
+ @internalMapAPI.setCenter [latitudeAndLongitude.longitude, latitudeAndLongitude.latitude]
125
+ else
126
+ ymaps.ready => @internalMapAPI.setCenter [latitudeAndLongitude.longitude, latitudeAndLongitude.latitude]
127
+
128
+ @ignoreCenterChange = false
129
+
130
+ setZoom: (zoom)->
131
+ if @internalMapAPI
132
+ @internalMapAPI.setZoom zoom
133
+ else
134
+ ymaps.ready => @internalMapAPI.setZoom zoom
135
+
136
+ refresh: ->
137
+ if @internalMapAPI
138
+ @internalMapAPI.container.fitToViewport()
139
+ else
140
+ ymaps.ready => @internalMapAPI.container.fitToViewport()
141
+
142
+
143
+ class CckFormsMap.GoogleMap extends CckFormsMap.AbstractMap
144
+ type: -> "google"
145
+ _render: ->
146
+ latlng = new google.maps.LatLng(@initialCoordinate.latitude, @initialCoordinate.longitude)
147
+ googleMapOptions =
148
+ zoom: @initialCoordinate.zoom
149
+ center: latlng
150
+ mapTypeId: google.maps.MapTypeId.ROADMAP
151
+ scrollwheel: false
152
+ streetViewControl: false
153
+
154
+ @internalMapAPI = new google.maps.Map(@htmlElement[0], googleMapOptions)
155
+
156
+ @googleMapMarker = null
157
+ createOrMoveMarker = (latLng)=>
158
+ @fields.latitude.val latLng.lat()
159
+ @fields.longitude.val latLng.lng()
160
+ if @googleMapMarker
161
+ @googleMapMarker.setPosition latLng
162
+ else
163
+ @._createMarker(latLng)
164
+ googleMapPosition = @googleMapMarker.position
165
+ $.each @._anotherMaps(), ->
166
+ @.setMarkerToPoint latitude: googleMapPosition.lat(), longitude: googleMapPosition.lng()
167
+
168
+ createOrMoveMarker latlng if @fields.latitude.val() or @fields.longitude.val()
169
+ @fields.zoom.val @internalMapAPI.getZoom() if not @fields.zoom.val() or @fields.zoom.val() is 0
170
+ google.maps.event.addListener @internalMapAPI, "click", (event) =>
171
+ return if @readOnlyMap
172
+ createOrMoveMarker event.latLng
173
+
174
+ google.maps.event.addListener @internalMapAPI, "zoom_changed", =>
175
+ zoom = @internalMapAPI.getZoom()
176
+ @fields.zoom.val zoom
177
+ $.each @._anotherMaps(), ->
178
+ @.setZoom zoom
179
+ google.maps.event.addListener @internalMapAPI, "center_changed", =>
180
+ return if @ignoreCenterChange
181
+ center = @internalMapAPI.getCenter()
182
+ $.each @._anotherMaps(), ->
183
+ @.setCenter latitude: center.lat(), longitude: center.lng()
184
+
185
+ _createMarker: (latLng)->
186
+ @googleMapMarker = new google.maps.Marker(
187
+ position: latLng
188
+ map: @internalMapAPI
189
+ )
190
+
191
+ #title: ''
192
+ google.maps.event.addListener @googleMapMarker, "click", =>
193
+ @googleMapMarker.setMap null
194
+ @googleMapMarker = null
195
+ @fields.latitude.val ""
196
+ @fields.longitude.val ""
197
+
198
+ setMarkerToPoint: (latitudeAndLongitude) ->
199
+ @._createMarker(null) unless @googleMapMarker
200
+ @googleMapMarker.setPosition new google.maps.LatLng(latitudeAndLongitude.latitude, latitudeAndLongitude.longitude)
201
+
202
+
203
+ setCenter: (latitudeAndLongitude)->
204
+ @ignoreCenterChange = true
205
+ @internalMapAPI.setCenter(new google.maps.LatLng(latitudeAndLongitude.latitude, latitudeAndLongitude.longitude))
206
+ @ignoreCenterChange = false
207
+ show: ->
208
+ super()
209
+ @.refresh()
210
+
211
+ refresh: ->
212
+ center = @internalMapAPI.getCenter() # для того, чтобы центр карты не занимался ерундой
213
+ google.maps.event.trigger(@internalMapAPI, "resize")
214
+ @internalMapAPI.setCenter(center)
215
+
216
+
217
+ switch_map = ($canvas, mapType) ->
218
+ $.each $canvas.data('maps'), (i, map) ->
219
+ map.show()
220
+ if map.type() == mapType
221
+ map.show()
222
+ $canvas.find('#' + map.groupId + '_type').val mapType
223
+ else
224
+ map.hide()
225
+
226
+
227
+ window.init_map = (canvas) ->
228
+
229
+ $canvas = $(canvas)
230
+ $source = $canvas.find('[data-map-data-source]')
231
+ options = $source.data("options")
232
+ mapId = $source.data("id")
233
+
234
+ $lat = $("#" + mapId + "_latitude")
235
+ $lon = $("#" + mapId + "_longitude")
236
+ $zoom = $("#" + mapId + "_zoom")
237
+
238
+ fields = zoom: $zoom, latitude: $lat, longitude: $lon
239
+
240
+ latLng = new google.maps.LatLng(options.latitude, options.longitude)
241
+ zoom = options.zoom
242
+
243
+
244
+ if $lat.val() and $lon.val()
245
+ latLng = new google.maps.LatLng($lat.val(), $lon.val())
246
+ hasLatLng = true
247
+
248
+ if ($zoom.val()) > 0
249
+ zoom = $zoom.val() * 1
250
+ hasZoom = true
251
+
252
+
253
+ initialPoint = latitude: latLng.lat(), longitude: latLng.lng(), zoom: zoom
254
+ readOnly = !!$(@).data("readOnly")
255
+
256
+ maps = {}
257
+ $.each $source.data("allowedMaps"), (i, mapType) ->
258
+ $map = $('#' + mapId + '_' + mapType)
259
+ maps[mapType] = new CckFormsMap.map(mapType, $map, initialPoint, fields, readOnly: readOnly)
260
+
261
+ $canvas.data('maps', maps)
262
+
263
+
264
+ cityInputSelectorst = [
265
+ '#' + $source.data("cityid"),
266
+ '[data-behavior="map_city_change"]'
267
+ ].join(', ')
268
+ $cityInput = $(cityInputSelectorst)
269
+
270
+ if $cityInput.data('mapCityValue')
271
+ mapCityValue = $cityInput.data('mapCityValue')
272
+ $cityInput = $cityInput.find(mapCityValue)
273
+
274
+ handleCityChange = =>
275
+ cities = $source.data("cities")
276
+ city = cities[$cityInput.val()]
277
+
278
+ if city
279
+ latLng = new google.maps.LatLng(city.lat, city.lon) unless hasLatLng
280
+ zoom = city.zoom unless hasZoom
281
+
282
+ $.each $canvas.data('maps'), (i, map) ->
283
+ map.setCenter latitude: latLng.lat(), longitude: latLng.lng()
284
+ map.setZoom zoom
285
+
286
+ $cityInput.change handleCityChange
287
+ handleCityChange() unless $lat.val() or $lon.val()
288
+
289
+ activeMapType = $canvas
290
+ .find('.cck-map-switchers a.active')
291
+ .data("mapType")
292
+
293
+ switch_map($canvas, activeMapType)
294
+
295
+
296
+ $ ->
297
+ start = ->
298
+ try
299
+
300
+ $(document).on "click", ".cck-map-switchers a", (e) ->
301
+ e.preventDefault()
302
+
303
+ $(@).addClass("active")
304
+ .siblings()
305
+ .removeClass "active"
306
+
307
+ mapType = $(@).data("mapType")
308
+ $canvas = $(@).closest('.map-canvas')
309
+
310
+ switch_map $canvas, mapType
311
+
312
+ $.each $('.map-canvas'), (index, canvas) ->
313
+ init_map canvas
314
+
315
+
316
+ catch error
317
+ window.console?.error error
318
+
319
+ if window.mapsReady
320
+ window.mapsReady.on start
321
+ else
322
+ start()
metadata ADDED
@@ -0,0 +1,116 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cck_forms
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Ilya Konanykhin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-11-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mongoid
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '5.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '5.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: neofiles
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ description: Custom field types for Mongoid objects
56
+ email:
57
+ - ilya.konanykhin@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - LICENSE
63
+ - README.md
64
+ - Rakefile
65
+ - lib/cck_forms.rb
66
+ - lib/cck_forms/date_time.rb
67
+ - lib/cck_forms/engine.rb
68
+ - lib/cck_forms/form_builder_extensions.rb
69
+ - lib/cck_forms/parameter_type_class/album.rb
70
+ - lib/cck_forms/parameter_type_class/base.rb
71
+ - lib/cck_forms/parameter_type_class/boolean.rb
72
+ - lib/cck_forms/parameter_type_class/checkboxes.rb
73
+ - lib/cck_forms/parameter_type_class/date.rb
74
+ - lib/cck_forms/parameter_type_class/date_range.rb
75
+ - lib/cck_forms/parameter_type_class/date_time.rb
76
+ - lib/cck_forms/parameter_type_class/enum.rb
77
+ - lib/cck_forms/parameter_type_class/file.rb
78
+ - lib/cck_forms/parameter_type_class/float.rb
79
+ - lib/cck_forms/parameter_type_class/image.rb
80
+ - lib/cck_forms/parameter_type_class/integer.rb
81
+ - lib/cck_forms/parameter_type_class/integer_range.rb
82
+ - lib/cck_forms/parameter_type_class/map.rb
83
+ - lib/cck_forms/parameter_type_class/phones.rb
84
+ - lib/cck_forms/parameter_type_class/string.rb
85
+ - lib/cck_forms/parameter_type_class/string_collection.rb
86
+ - lib/cck_forms/parameter_type_class/text.rb
87
+ - lib/cck_forms/parameter_type_class/time.rb
88
+ - lib/cck_forms/parameter_type_class/work_hours.rb
89
+ - lib/cck_forms/version.rb
90
+ - vendor/assets/javascripts/cck_forms/jquery.workhours.js
91
+ - vendor/assets/javascripts/cck_forms/map.js.coffee
92
+ homepage: http://github.com/ilya-konanykhin/cck_forms
93
+ licenses:
94
+ - MIT
95
+ metadata: {}
96
+ post_install_message:
97
+ rdoc_options: []
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ requirements: []
111
+ rubyforge_project:
112
+ rubygems_version: 2.5.1
113
+ signing_key:
114
+ specification_version: 4
115
+ summary: Content Construction Kit Forms
116
+ test_files: []