lato_core 2.1.2 → 2.1.3
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 +4 -4
- data/app/assets/javascripts/lato_core/application.js +18 -9
- data/app/assets/javascripts/lato_core/modules/CoreButton.js +38 -0
- data/app/assets/javascripts/lato_core/{initializers/Charts.js → modules/CoreChart.js} +12 -12
- data/app/assets/javascripts/lato_core/modules/CoreDatepicker.js +42 -0
- data/app/assets/javascripts/lato_core/modules/CoreEditor.js +27 -0
- data/app/assets/javascripts/lato_core/modules/CoreFlash.js +27 -0
- data/app/assets/javascripts/lato_core/modules/CoreFormValidator.js +110 -0
- data/app/assets/javascripts/lato_core/{initializers/Layout.js → modules/CoreLayout.js} +6 -5
- data/app/assets/javascripts/lato_core/modules/CoreMediapicker.js +140 -0
- data/app/assets/javascripts/lato_core/{interfaces/Modal.js → modules/CoreModal.js} +27 -2
- data/app/assets/javascripts/lato_core/modules/CoreSelect.js +110 -0
- data/app/assets/javascripts/lato_core/{initializers/inputs/SortableManager.js → modules/CoreSortableManager.js} +7 -6
- data/app/assets/javascripts/lato_core/modules/CoreTable.js +28 -0
- data/app/assets/stylesheets/lato_core/cells/inputs/_inputs.scss +1 -0
- data/app/assets/stylesheets/lato_core/cells/inputs/_multipleselect.scss +6 -0
- data/app/assets/stylesheets/lato_core/cells/widgets/_index.scss +9 -0
- data/app/cells/lato_core/inputs/dropzone/views/show.html.erb +24 -20
- data/app/cells/lato_core/inputs/multipleselect/cell.rb +52 -0
- data/app/cells/lato_core/inputs/multipleselect/views/show.html.erb +16 -0
- data/app/cells/lato_core/inputs/select/cell.rb +19 -1
- data/app/cells/lato_core/inputs/select/views/show.html.erb +10 -2
- data/app/cells/lato_core/widgets/index/cell.rb +1 -0
- data/app/cells/lato_core/widgets/index/views/partials/counter.html.erb +3 -0
- data/app/cells/lato_core/widgets/index/views/show.html.erb +2 -0
- data/app/controllers/lato_core/back/superusers_controller.rb +9 -9
- data/app/controllers/lato_core/doc/cells_inputs_controller.rb +28 -0
- data/app/views/lato_core/doc/cells_elements/button.html.erb +0 -4
- data/app/views/lato_core/doc/cells_elements/modal.html.erb +4 -4
- data/app/views/lato_core/doc/cells_inputs/multipleselect.html.erb +110 -0
- data/app/views/lato_core/doc/cells_inputs/select.html.erb +48 -2
- data/app/views/lato_core/doc/doc/index.html.erb +1 -0
- data/app/views/lato_core/doc/general/generators.html.erb +40 -0
- data/app/views/layouts/lato_core/partials/_logo.html.erb +7 -5
- data/config/languages/default.yml +2 -1
- data/config/languages/it.yml +2 -1
- data/config/routes/doc.rb +5 -0
- data/lib/generators/lato_core/crud_controller_generator.rb +35 -0
- data/lib/generators/lato_core/crud_generator.rb +31 -12
- data/lib/generators/lato_core/crud_views_generator.rb +52 -0
- data/lib/generators/lato_core/initializer_generator.rb +38 -28
- data/lib/generators/lato_core/scaffold_generator.rb +30 -0
- data/lib/generators/lato_core/templates/crud_controller/app/controllers/lato/crud_controller.rb +94 -0
- data/lib/generators/lato_core/templates/crud_views/app/views/lato/crud/edit.html.erb +24 -0
- data/lib/generators/lato_core/templates/crud_views/app/views/lato/crud/index.html.erb +35 -0
- data/lib/generators/lato_core/templates/crud_views/app/views/lato/crud/new.html.erb +24 -0
- data/lib/generators/lato_core/templates/crud_views/app/views/lato/crud/shared/_form.html.erb +42 -0
- data/lib/generators/lato_core/templates/crud_views/app/views/lato/crud/show.html.erb +22 -0
- data/lib/generators/lato_core/templates/{assets → initializer/assets}/images/logo.svg +0 -0
- data/lib/generators/lato_core/templates/{assets → initializer/assets}/javascripts/application.js +0 -0
- data/lib/generators/lato_core/templates/{assets → initializer/assets}/stylesheets/application.scss +0 -0
- data/lib/generators/lato_core/templates/{assets → initializer/assets}/stylesheets/theme.scss.erb +0 -0
- data/lib/generators/lato_core/templates/initializer/controllers/application_controller.rb +25 -0
- data/lib/generators/lato_core/templates/initializer/views/application/index.html.erb +20 -0
- data/lib/lato_core/interfaces/token.rb +4 -3
- data/lib/lato_core/version.rb +1 -1
- metadata +33 -16
- data/app/assets/javascripts/lato_core/initializers/Elements.js +0 -67
- data/app/assets/javascripts/lato_core/initializers/Inputs.js +0 -249
- data/app/assets/javascripts/lato_core/initializers/inputs/MultipleSelect.js +0 -0
- data/lib/generators/lato_core/templates/controllers/application_controller.rb +0 -13
- data/lib/generators/lato_core/templates/views/application/index.html.erb +0 -16
File without changes
|
data/lib/generators/lato_core/templates/{assets → initializer/assets}/javascripts/application.js
RENAMED
File without changes
|
data/lib/generators/lato_core/templates/{assets → initializer/assets}/stylesheets/application.scss
RENAMED
File without changes
|
data/lib/generators/lato_core/templates/{assets → initializer/assets}/stylesheets/theme.scss.erb
RENAMED
File without changes
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lato
|
4
|
+
|
5
|
+
# ApplicationController.
|
6
|
+
class ApplicationController < ::ApplicationController
|
7
|
+
|
8
|
+
# set lato layout
|
9
|
+
layout 'lato_core/admin'
|
10
|
+
|
11
|
+
# initialize cells dependencies
|
12
|
+
before_action :core__cells_initialize
|
13
|
+
# manage superuser session for security
|
14
|
+
before_action :core__manage_superuser_session
|
15
|
+
|
16
|
+
def index
|
17
|
+
# set current menu active page
|
18
|
+
core__set_menu_active_item('sample_page')
|
19
|
+
# set current page title
|
20
|
+
core__set_header_active_page_title('Sample page')
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<%
|
2
|
+
# initialize a new row
|
3
|
+
main_row = cell(:elements, :row).new
|
4
|
+
# initialize a new block
|
5
|
+
main_block = cell(:elements, :block).new(class: 'xs-12 sm-12 md-12')
|
6
|
+
# initialize block title
|
7
|
+
main_block_title = cell(:elements, :title).new(label: "Welcome to this Lato sample page", size: 2)
|
8
|
+
%>
|
9
|
+
|
10
|
+
<!-- MAIN ROW -->
|
11
|
+
<%=raw main_row.open %>
|
12
|
+
<!-- MAIN BLOCK -->
|
13
|
+
<%=raw main_block.open %>
|
14
|
+
|
15
|
+
<%=raw main_block_title %>
|
16
|
+
|
17
|
+
<%=raw main_block.close %>
|
18
|
+
<!-- / MAIN BLOCK -->
|
19
|
+
<%=raw main_row.close %>
|
20
|
+
<!-- / MAIN ROW -->
|
@@ -8,13 +8,14 @@ module LatoCore
|
|
8
8
|
def core__encode_token exp, payload
|
9
9
|
exp = 1.day.from_now unless exp
|
10
10
|
payload[:exp] = exp.to_i
|
11
|
-
|
11
|
+
JWT.encode(payload, Rails.application.secrets.secret_key_base, 'HS256')
|
12
12
|
end
|
13
13
|
|
14
14
|
# This function return the payload of a token.
|
15
15
|
def core__decode_token token
|
16
16
|
begin
|
17
|
-
body = JWT.decode(token, Rails.application.secrets.secret_key_base
|
17
|
+
body = JWT.decode(token, Rails.application.secrets.secret_key_base,
|
18
|
+
true, algorithm: 'HS256')[0]
|
18
19
|
return HashWithIndifferentAccess.new body
|
19
20
|
rescue => exception
|
20
21
|
return nil
|
@@ -22,4 +23,4 @@ module LatoCore
|
|
22
23
|
end
|
23
24
|
|
24
25
|
end
|
25
|
-
end
|
26
|
+
end
|
data/lib/lato_core/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lato_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ideonetwork
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -138,7 +138,7 @@ dependencies:
|
|
138
138
|
version: '0'
|
139
139
|
description: Lato is a modular management system for Rails
|
140
140
|
email:
|
141
|
-
-
|
141
|
+
- dev@ideonetwork.it
|
142
142
|
executables: []
|
143
143
|
extensions: []
|
144
144
|
extra_rdoc_files: []
|
@@ -169,13 +169,18 @@ files:
|
|
169
169
|
- app/assets/images/lato_core/logo.svg
|
170
170
|
- app/assets/images/lato_core/user.png
|
171
171
|
- app/assets/javascripts/lato_core/application.js
|
172
|
-
- app/assets/javascripts/lato_core/
|
173
|
-
- app/assets/javascripts/lato_core/
|
174
|
-
- app/assets/javascripts/lato_core/
|
175
|
-
- app/assets/javascripts/lato_core/
|
176
|
-
- app/assets/javascripts/lato_core/
|
177
|
-
- app/assets/javascripts/lato_core/
|
178
|
-
- app/assets/javascripts/lato_core/
|
172
|
+
- app/assets/javascripts/lato_core/modules/CoreButton.js
|
173
|
+
- app/assets/javascripts/lato_core/modules/CoreChart.js
|
174
|
+
- app/assets/javascripts/lato_core/modules/CoreDatepicker.js
|
175
|
+
- app/assets/javascripts/lato_core/modules/CoreEditor.js
|
176
|
+
- app/assets/javascripts/lato_core/modules/CoreFlash.js
|
177
|
+
- app/assets/javascripts/lato_core/modules/CoreFormValidator.js
|
178
|
+
- app/assets/javascripts/lato_core/modules/CoreLayout.js
|
179
|
+
- app/assets/javascripts/lato_core/modules/CoreMediapicker.js
|
180
|
+
- app/assets/javascripts/lato_core/modules/CoreModal.js
|
181
|
+
- app/assets/javascripts/lato_core/modules/CoreSelect.js
|
182
|
+
- app/assets/javascripts/lato_core/modules/CoreSortableManager.js
|
183
|
+
- app/assets/javascripts/lato_core/modules/CoreTable.js
|
179
184
|
- app/assets/javascripts/lato_core/vendors/Sortable.min.js
|
180
185
|
- app/assets/javascripts/lato_core/vendors/chart.bundle.js
|
181
186
|
- app/assets/javascripts/lato_core/vendors/dropzone.js
|
@@ -217,6 +222,7 @@ files:
|
|
217
222
|
- app/assets/stylesheets/lato_core/cells/inputs/_general.scss
|
218
223
|
- app/assets/stylesheets/lato_core/cells/inputs/_geolocalization.scss
|
219
224
|
- app/assets/stylesheets/lato_core/cells/inputs/_inputs.scss
|
225
|
+
- app/assets/stylesheets/lato_core/cells/inputs/_multipleselect.scss
|
220
226
|
- app/assets/stylesheets/lato_core/cells/inputs/_number.scss
|
221
227
|
- app/assets/stylesheets/lato_core/cells/inputs/_password.scss
|
222
228
|
- app/assets/stylesheets/lato_core/cells/inputs/_select.scss
|
@@ -316,6 +322,7 @@ files:
|
|
316
322
|
- app/cells/lato_core/inputs/youtube/cell.rb
|
317
323
|
- app/cells/lato_core/inputs/youtube/views/show.html.erb
|
318
324
|
- app/cells/lato_core/widgets/index/cell.rb
|
325
|
+
- app/cells/lato_core/widgets/index/views/partials/counter.html.erb
|
319
326
|
- app/cells/lato_core/widgets/index/views/partials/new.html.erb
|
320
327
|
- app/cells/lato_core/widgets/index/views/partials/pagination.html.erb
|
321
328
|
- app/cells/lato_core/widgets/index/views/partials/search.html.erb
|
@@ -367,6 +374,7 @@ files:
|
|
367
374
|
- app/views/lato_core/doc/cells_inputs/email.html.erb
|
368
375
|
- app/views/lato_core/doc/cells_inputs/form.html.erb
|
369
376
|
- app/views/lato_core/doc/cells_inputs/geolocalization.html.erb
|
377
|
+
- app/views/lato_core/doc/cells_inputs/multipleselect.html.erb
|
370
378
|
- app/views/lato_core/doc/cells_inputs/number.html.erb
|
371
379
|
- app/views/lato_core/doc/cells_inputs/password.html.erb
|
372
380
|
- app/views/lato_core/doc/cells_inputs/select.html.erb
|
@@ -406,14 +414,23 @@ files:
|
|
406
414
|
- config/routes/back.rb
|
407
415
|
- config/routes/doc.rb
|
408
416
|
- db/migrate/20160224181217_create_lato_core_superusers.rb
|
417
|
+
- lib/generators/lato_core/crud_controller_generator.rb
|
409
418
|
- lib/generators/lato_core/crud_generator.rb
|
419
|
+
- lib/generators/lato_core/crud_views_generator.rb
|
410
420
|
- lib/generators/lato_core/initializer_generator.rb
|
411
|
-
- lib/generators/lato_core/
|
412
|
-
- lib/generators/lato_core/templates/
|
413
|
-
- lib/generators/lato_core/templates/
|
414
|
-
- lib/generators/lato_core/templates/
|
415
|
-
- lib/generators/lato_core/templates/
|
416
|
-
- lib/generators/lato_core/templates/views/
|
421
|
+
- lib/generators/lato_core/scaffold_generator.rb
|
422
|
+
- lib/generators/lato_core/templates/crud_controller/app/controllers/lato/crud_controller.rb
|
423
|
+
- lib/generators/lato_core/templates/crud_views/app/views/lato/crud/edit.html.erb
|
424
|
+
- lib/generators/lato_core/templates/crud_views/app/views/lato/crud/index.html.erb
|
425
|
+
- lib/generators/lato_core/templates/crud_views/app/views/lato/crud/new.html.erb
|
426
|
+
- lib/generators/lato_core/templates/crud_views/app/views/lato/crud/shared/_form.html.erb
|
427
|
+
- lib/generators/lato_core/templates/crud_views/app/views/lato/crud/show.html.erb
|
428
|
+
- lib/generators/lato_core/templates/initializer/assets/images/logo.svg
|
429
|
+
- lib/generators/lato_core/templates/initializer/assets/javascripts/application.js
|
430
|
+
- lib/generators/lato_core/templates/initializer/assets/stylesheets/application.scss
|
431
|
+
- lib/generators/lato_core/templates/initializer/assets/stylesheets/theme.scss.erb
|
432
|
+
- lib/generators/lato_core/templates/initializer/controllers/application_controller.rb
|
433
|
+
- lib/generators/lato_core/templates/initializer/views/application/index.html.erb
|
417
434
|
- lib/lato_core.rb
|
418
435
|
- lib/lato_core/cell.rb
|
419
436
|
- lib/lato_core/engine.rb
|
@@ -1,67 +0,0 @@
|
|
1
|
-
var ElementsInitializer = (function () {
|
2
|
-
|
3
|
-
function modalCloseButton () {
|
4
|
-
$('.elements-modal__close-button').click(function (e) {
|
5
|
-
var modal = $(this).parent()
|
6
|
-
var modalContent = modal.parent()
|
7
|
-
var modalContainer = modalContent.parent()
|
8
|
-
modalContainer.removeClass('elements-modal--active')
|
9
|
-
modalContainer.find('.elements-modal__modal').removeClass('elements-modal__modal--active')
|
10
|
-
$('body').removeClass('stop-scrolling')
|
11
|
-
e.preventDefault()
|
12
|
-
})
|
13
|
-
}
|
14
|
-
|
15
|
-
function flashCloseButton () {
|
16
|
-
$('.elements-flash__close-button').click(function (e) {
|
17
|
-
var flash = $(this).parent()
|
18
|
-
flash.addClass('elements-flash--hidden')
|
19
|
-
e.preventDefault()
|
20
|
-
})
|
21
|
-
}
|
22
|
-
|
23
|
-
function tableHeadFixed () {
|
24
|
-
var table = $('.elements-table--fixed .elements-table__table')
|
25
|
-
table.floatThead({
|
26
|
-
scrollContainer: function (table) {
|
27
|
-
return table.closest('.elements-table--fixed')
|
28
|
-
}
|
29
|
-
})
|
30
|
-
}
|
31
|
-
|
32
|
-
function buttonConfirmation () {
|
33
|
-
var button = $('.elements-button__element')
|
34
|
-
button.click(function (e) {
|
35
|
-
if ($(this).attr('data-confirmation') && $(this).attr('data-confirmation') === 'true') {
|
36
|
-
var confirmation = $(this).parent().find('.elements-button__confirmation')
|
37
|
-
|
38
|
-
// remove old confirmations popup
|
39
|
-
$('.elements-button__element').parent().find('.elements-button__confirmation').removeClass('elements-button__confirmation--active')
|
40
|
-
// open confirmation popup
|
41
|
-
$(confirmation).addClass('elements-button__confirmation--active')
|
42
|
-
// manage delete click
|
43
|
-
$(confirmation).find('.button.popup.false').click(function(e) {
|
44
|
-
$(confirmation).removeClass('elements-button__confirmation--active')
|
45
|
-
e.preventDefault()
|
46
|
-
})
|
47
|
-
|
48
|
-
e.preventDefault()
|
49
|
-
}
|
50
|
-
})
|
51
|
-
}
|
52
|
-
|
53
|
-
// Init:
|
54
|
-
|
55
|
-
function init () {
|
56
|
-
modalCloseButton()
|
57
|
-
flashCloseButton()
|
58
|
-
tableHeadFixed()
|
59
|
-
buttonConfirmation()
|
60
|
-
}
|
61
|
-
|
62
|
-
return {
|
63
|
-
init: init
|
64
|
-
}
|
65
|
-
|
66
|
-
})()
|
67
|
-
|
@@ -1,249 +0,0 @@
|
|
1
|
-
var InputsInitializer = (function () {
|
2
|
-
|
3
|
-
// Init plugins:
|
4
|
-
|
5
|
-
function initializeSelect () {
|
6
|
-
$('.inputs__select').each(function () {
|
7
|
-
$(this).selectize({
|
8
|
-
create: $(this).attr('data-create') === 'true',
|
9
|
-
maxItems: $(this).attr('data-multiple') === 'true' ? null : 1
|
10
|
-
})
|
11
|
-
})
|
12
|
-
}
|
13
|
-
|
14
|
-
function initializeDatetime () {
|
15
|
-
$('.inputs__input--datetime').datetimepicker({
|
16
|
-
format: 'd/m/Y H:i'
|
17
|
-
})
|
18
|
-
}
|
19
|
-
|
20
|
-
function initializeDate () {
|
21
|
-
$('.inputs__input--date').datetimepicker({
|
22
|
-
timepicker: false,
|
23
|
-
format: 'd/m/Y'
|
24
|
-
})
|
25
|
-
}
|
26
|
-
|
27
|
-
function initializeEditor () {
|
28
|
-
$('.inputs__editor').trumbowyg({
|
29
|
-
svgPath: $('#ddtj__editor-icons-path').html()
|
30
|
-
});
|
31
|
-
}
|
32
|
-
|
33
|
-
function initializeDropzone () {
|
34
|
-
$('.inputs__dropzone').each(function () {
|
35
|
-
var paramName = $(this).attr('data-param-name')
|
36
|
-
var maxFilesize = $(this).attr('data-max-size')
|
37
|
-
var maxFiles = $(this).attr('data.max-files')
|
38
|
-
$(this).dropzone({
|
39
|
-
paramName: paramName,
|
40
|
-
maxFilesize: maxFilesize,
|
41
|
-
maxFiles: maxFiles
|
42
|
-
})
|
43
|
-
})
|
44
|
-
}
|
45
|
-
|
46
|
-
function initializeGeolocalizationMap () {
|
47
|
-
$('.inputs-geolocalization').each(function () {
|
48
|
-
// find dom elements
|
49
|
-
var mapContainer = $(this).find('.inputs-geolocalization__map')[0]
|
50
|
-
var searchBoxInput = $(this).find('.inputs-geolocalization__search')[0]
|
51
|
-
var latInput = $(this).find('.inputs-geolocalization__input-lat')[0]
|
52
|
-
var lngInput = $(this).find('.inputs-geolocalization__input-lng')[0]
|
53
|
-
var addressInput = $(this).find('.inputs-geolocalization__input-address')[0]
|
54
|
-
// initialize map
|
55
|
-
var map = new google.maps.Map(mapContainer, {
|
56
|
-
zoom: parseInt($(mapContainer).attr('data-default-zoom')),
|
57
|
-
center: {
|
58
|
-
lat: parseFloat($(mapContainer).attr('data-default-lat')),
|
59
|
-
lng: parseFloat($(mapContainer).attr('data-default-lng'))
|
60
|
-
},
|
61
|
-
mapTypeId: $(mapContainer).attr('data-default-type'),
|
62
|
-
streetViewControl: false
|
63
|
-
})
|
64
|
-
// initialize markers
|
65
|
-
var markers = []
|
66
|
-
if ($(latInput).val() && $(lngInput).val()) {
|
67
|
-
markers.push(new google.maps.Marker({
|
68
|
-
map: map,
|
69
|
-
position: {lat: parseFloat($(latInput).val()), lng: parseFloat($(lngInput).val())},
|
70
|
-
title: $(addressInput).val()
|
71
|
-
}))
|
72
|
-
}
|
73
|
-
// initialize searchbox
|
74
|
-
var searchBox = new google.maps.places.SearchBox(searchBoxInput)
|
75
|
-
// sync map bounds with search
|
76
|
-
map.addListener('bounds_changed', function () {
|
77
|
-
searchBox.setBounds(map.getBounds())
|
78
|
-
})
|
79
|
-
// sync searchbox search with map and hidden inputs
|
80
|
-
searchBox.addListener('places_changed', function () {
|
81
|
-
// get search palces
|
82
|
-
var places = searchBox.getPlaces()
|
83
|
-
if (places.length === 0) { return }
|
84
|
-
// clean old markers
|
85
|
-
markers.forEach(function (marker) { marker.setMap(null) })
|
86
|
-
markers = []
|
87
|
-
// show first place on map
|
88
|
-
var bounds = new google.maps.LatLngBounds()
|
89
|
-
var place = places[0]
|
90
|
-
if (!place.geometry) { return }
|
91
|
-
markers.push(new google.maps.Marker({
|
92
|
-
map: map,
|
93
|
-
position: place.geometry.location,
|
94
|
-
title: place.formatted_address
|
95
|
-
}))
|
96
|
-
if (place.geometry.viewport) {
|
97
|
-
bounds.union(place.geometry.viewport)
|
98
|
-
} else {
|
99
|
-
bounds.extend(place.geometry.location)
|
100
|
-
}
|
101
|
-
map.fitBounds(bounds)
|
102
|
-
// save place info on hidden inputs
|
103
|
-
$(latInput).val(place.geometry.location.lat())
|
104
|
-
$(lngInput).val(place.geometry.location.lng())
|
105
|
-
$(addressInput).val(place.formatted_address)
|
106
|
-
})
|
107
|
-
})
|
108
|
-
}
|
109
|
-
|
110
|
-
function initializeYoutube () {
|
111
|
-
// manage input change
|
112
|
-
$('.inputs-youtube .inputs__input').change(function () {
|
113
|
-
var inputVal = $(this).val()
|
114
|
-
var videoId = getId(inputVal)
|
115
|
-
var iframeMarkup = '<iframe src="//www.youtube.com/embed/' + videoId + '" frameborder="0" allowfullscreen></iframe>'
|
116
|
-
var videoContainer = $(this).parent().find('.inputs-youtube__video')
|
117
|
-
if (inputVal && inputVal !== '') {
|
118
|
-
$(videoContainer).html(iframeMarkup)
|
119
|
-
$(videoContainer).addClass('inputs-youtube__video--active')
|
120
|
-
} else {
|
121
|
-
$(videoContainer).html('')
|
122
|
-
$(videoContainer).removeClass('inputs-youtube__video--active')
|
123
|
-
}
|
124
|
-
})
|
125
|
-
|
126
|
-
// trigger initial change
|
127
|
-
$('.inputs-youtube .inputs__input').trigger('change')
|
128
|
-
|
129
|
-
// function to get youtube video
|
130
|
-
function getId (url) {
|
131
|
-
var regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/
|
132
|
-
var match = url.match(regExp)
|
133
|
-
|
134
|
-
if (match && match[2].length === 11) {
|
135
|
-
return match[2]
|
136
|
-
} else {
|
137
|
-
return 'error'
|
138
|
-
}
|
139
|
-
}
|
140
|
-
}
|
141
|
-
|
142
|
-
// Validations:
|
143
|
-
|
144
|
-
function formInputsValidator () {
|
145
|
-
$('.inputs__form').submit(function (e) {
|
146
|
-
$(e.target).find('input').each(function () {
|
147
|
-
if (!validateInput(this)) { e.preventDefault() }
|
148
|
-
})
|
149
|
-
$(e.target).find('select').each(function () {
|
150
|
-
if (!validateInput(this)) { e.preventDefault() }
|
151
|
-
})
|
152
|
-
$(e.target).find('textarea').each(function () {
|
153
|
-
if (!validateInput(this)) { e.preventDefault() }
|
154
|
-
})
|
155
|
-
})
|
156
|
-
}
|
157
|
-
|
158
|
-
function validateInput (input) {
|
159
|
-
if ($(input).attr('data-required') && $(input).attr('data-required') === 'true') {
|
160
|
-
if (!validateInputRequired(input)) { return false }
|
161
|
-
}
|
162
|
-
|
163
|
-
if ($(input).attr('data-max-length')) {
|
164
|
-
if (!validateInputMaxLength(input)) { return false }
|
165
|
-
}
|
166
|
-
|
167
|
-
if ($(input).attr('data-min-length')) {
|
168
|
-
if (!validateInputMinLength(input)) { return false }
|
169
|
-
}
|
170
|
-
|
171
|
-
return true
|
172
|
-
}
|
173
|
-
|
174
|
-
function validateInputRequired (input) {
|
175
|
-
if ($(input).is(':checkbox')) {
|
176
|
-
var inputChecked = $(input).is(':checked')
|
177
|
-
if (!inputChecked || inputChecked === null || inputChecked === false) {
|
178
|
-
addInputErrorStyle(input)
|
179
|
-
return false
|
180
|
-
}
|
181
|
-
} else {
|
182
|
-
var inputValue = $(input).val()
|
183
|
-
if (inputValue === null || inputValue === '' || inputValue === ' ') {
|
184
|
-
addInputErrorStyle(input)
|
185
|
-
return false
|
186
|
-
}
|
187
|
-
}
|
188
|
-
|
189
|
-
return true
|
190
|
-
}
|
191
|
-
|
192
|
-
function validateInputMaxLength (input) {
|
193
|
-
var inputValue = $(input).val()
|
194
|
-
if (inputValue !== null && inputValue !== '' && inputValue.length > $(input).attr('data-max-length')) {
|
195
|
-
addInputErrorStyle(input)
|
196
|
-
return false
|
197
|
-
}
|
198
|
-
|
199
|
-
return true
|
200
|
-
}
|
201
|
-
|
202
|
-
function validateInputMinLength (input) {
|
203
|
-
var inputValue = $(input).val()
|
204
|
-
if (inputValue !== null && inputValue !== '' && inputValue.length < $(input).attr('data-min-length')) {
|
205
|
-
addInputErrorStyle(input)
|
206
|
-
return false
|
207
|
-
}
|
208
|
-
|
209
|
-
return true
|
210
|
-
}
|
211
|
-
|
212
|
-
function addInputErrorStyle (input) {
|
213
|
-
if ($(input).is('select')) {
|
214
|
-
$(input).next().addClass('inputs__select--error')
|
215
|
-
$(input).next().click(function () {
|
216
|
-
$(this).removeClass('inputs__select--error')
|
217
|
-
})
|
218
|
-
} else if ($(input).is('textarea')) {
|
219
|
-
$(input).addClass('inputs__textarea--error')
|
220
|
-
$(input).click(function () {
|
221
|
-
$(this).removeClass('inputs__textarea--error')
|
222
|
-
})
|
223
|
-
} else {
|
224
|
-
$(input).addClass('inputs__input--error')
|
225
|
-
$(input).focus(function () {
|
226
|
-
$(this).removeClass('inputs__input--error')
|
227
|
-
})
|
228
|
-
}
|
229
|
-
}
|
230
|
-
|
231
|
-
// Init:
|
232
|
-
function init () {
|
233
|
-
initializeSelect()
|
234
|
-
initializeDatetime()
|
235
|
-
initializeDate()
|
236
|
-
initializeEditor()
|
237
|
-
initializeDropzone()
|
238
|
-
initializeGeolocalizationMap()
|
239
|
-
initializeYoutube()
|
240
|
-
formInputsValidator()
|
241
|
-
|
242
|
-
SortableManager.init()
|
243
|
-
}
|
244
|
-
|
245
|
-
return {
|
246
|
-
init: init
|
247
|
-
}
|
248
|
-
|
249
|
-
})()
|