lato_media 2.1
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 +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +27 -0
- data/Rakefile +5 -0
- data/app/assets/config/lato_media_manifest.js +2 -0
- data/app/assets/javascripts/lato_media/application.js +18 -0
- data/app/assets/javascripts/lato_media/initializers/Inputs.js +62 -0
- data/app/assets/javascripts/lato_media/interfaces/MediaSelector.js +128 -0
- data/app/assets/stylesheets/lato_media/application.scss +17 -0
- data/app/assets/stylesheets/lato_media/cells/_cells.scss +2 -0
- data/app/assets/stylesheets/lato_media/cells/elements/_elements.scss +2 -0
- data/app/assets/stylesheets/lato_media/cells/elements/_preview.scss +67 -0
- data/app/assets/stylesheets/lato_media/cells/elements/_previews.scss +23 -0
- data/app/assets/stylesheets/lato_media/cells/inputs/_gallery.scss +13 -0
- data/app/assets/stylesheets/lato_media/cells/inputs/_inputs.scss +2 -0
- data/app/assets/stylesheets/lato_media/cells/inputs/_media.scss +25 -0
- data/app/assets/stylesheets/lato_media/pages/_medias.scss +20 -0
- data/app/assets/stylesheets/lato_media/pages/_pages.scss +1 -0
- data/app/assets/stylesheets/lato_media/partials/_media_selector.scss +53 -0
- data/app/assets/stylesheets/lato_media/partials/_partials.scss +1 -0
- data/app/assets/stylesheets/lato_media/theme.scss.erb +12 -0
- data/app/cells/lato_media/elements/preview/cell.rb +44 -0
- data/app/cells/lato_media/elements/preview/views/general.html.erb +14 -0
- data/app/cells/lato_media/elements/preview/views/image.html.erb +10 -0
- data/app/cells/lato_media/elements/preview/views/not_found.html.erb +15 -0
- data/app/cells/lato_media/elements/preview/views/show.html.erb +33 -0
- data/app/cells/lato_media/elements/previews/cell.rb +37 -0
- data/app/cells/lato_media/elements/previews/views/show.html.erb +43 -0
- data/app/cells/lato_media/inputs/gallery/cell.rb +80 -0
- data/app/cells/lato_media/inputs/gallery/views/show.html.erb +39 -0
- data/app/cells/lato_media/inputs/media/cell.rb +64 -0
- data/app/cells/lato_media/inputs/media/views/show.html.erb +40 -0
- data/app/controllers/lato_media/application_controller.rb +13 -0
- data/app/controllers/lato_media/back/back_controller.rb +13 -0
- data/app/controllers/lato_media/back/media_selector_controller.rb +43 -0
- data/app/controllers/lato_media/back/medias_controller.rb +101 -0
- data/app/controllers/lato_media/doc/cells_controller.rb +43 -0
- data/app/controllers/lato_media/doc/doc_controller.rb +17 -0
- data/app/controllers/lato_media/doc/general_controller.rb +9 -0
- data/app/helpers/lato_media/application_helper.rb +4 -0
- data/app/jobs/lato_media/application_job.rb +4 -0
- data/app/mailers/lato_media/application_mailer.rb +6 -0
- data/app/models/lato_media/application_record.rb +5 -0
- data/app/models/lato_media/media/entity_helpers.rb +15 -0
- data/app/models/lato_media/media.rb +26 -0
- data/app/views/lato_media/back/media_selector/load_form.js.erb +9 -0
- data/app/views/lato_media/back/media_selector/load_index.js.erb +6 -0
- data/app/views/lato_media/back/media_selector/load_inputs_gallery.js.erb +6 -0
- data/app/views/lato_media/back/media_selector/load_inputs_media.js.erb +6 -0
- data/app/views/lato_media/back/medias/edit.html.erb +51 -0
- data/app/views/lato_media/back/medias/index.html.erb +25 -0
- data/app/views/lato_media/back/medias/new.html.erb +25 -0
- data/app/views/lato_media/back/medias/refresh_index.js.erb +11 -0
- data/app/views/lato_media/back/medias/shared/_dropzone_modal.html.erb +12 -0
- data/app/views/lato_media/back/medias/shared/_form.html.erb +52 -0
- data/app/views/lato_media/back/medias/shared/_index.html.erb +14 -0
- data/app/views/lato_media/doc/cells/elements_preview.html.erb +241 -0
- data/app/views/lato_media/doc/cells/elements_previews.html.erb +87 -0
- data/app/views/lato_media/doc/cells/inputs_gallery.html.erb +63 -0
- data/app/views/lato_media/doc/cells/inputs_media.html.erb +63 -0
- data/app/views/lato_media/doc/doc/index.html.erb +59 -0
- data/app/views/lato_media/doc/general/installation.html.erb +49 -0
- data/app/views/lato_media/doc/general/personalization.html.erb +0 -0
- data/app/views/lato_media/partials/_media_selector.html.erb +12 -0
- data/app/views/lato_media/partials/media_selector/_modal.html.erb +16 -0
- data/app/views/lato_media/partials/media_selector/_modal_form.html.erb +6 -0
- data/app/views/lato_media/partials/media_selector/_modal_index.html.erb +18 -0
- data/config/configs.yml +50 -0
- data/config/initializers/assets.rb +4 -0
- data/config/languages/default.yml +39 -0
- data/config/languages/it.yml +39 -0
- data/config/routes/api.rb +3 -0
- data/config/routes/back.rb +9 -0
- data/config/routes/doc.rb +15 -0
- data/config/routes.rb +16 -0
- data/db/migrate/20160224181218_create_lato_media_media.rb +15 -0
- data/lib/lato_media/engine.rb +16 -0
- data/lib/lato_media/version.rb +3 -0
- data/lib/lato_media.rb +5 -0
- data/lib/tasks/lato_media_tasks.rake +4 -0
- metadata +179 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: d98dcf681865bedf65da24fa84faf6de698dafcf
|
|
4
|
+
data.tar.gz: 1b59c4832da05d4f69385656040ebf2f8ec78be3
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: c11d7f15b2b5f721605dcb39120f7ccedef89355a81f0fefb49f777d3ae7894762763961758dc740d60751f967e168ad932c2f5e7a5e9da6728a0f67c8d6d7f0
|
|
7
|
+
data.tar.gz: 5622ff9d9ccea5382d9da718d7d3e7c1d6176db3b029a49a82d131b28dae3847dfb79018a598fc66936ba04359818f498aa04ed15ce1007f660c5ae7a317eb54
|
data/MIT-LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright 2017 Gregorio Galante
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Lato Media
|
|
2
|
+
|
|
3
|
+
## Installation
|
|
4
|
+
|
|
5
|
+
Add the lato_media gem on your Gemfile
|
|
6
|
+
|
|
7
|
+
```ruby
|
|
8
|
+
gem 'lato_media'
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Install the gem
|
|
12
|
+
|
|
13
|
+
```console
|
|
14
|
+
bundle install
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Copy the migrations
|
|
18
|
+
|
|
19
|
+
```console
|
|
20
|
+
rails lato_media:install:migrations
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Exec migrations
|
|
24
|
+
|
|
25
|
+
```console
|
|
26
|
+
bundle exec rake db:migrate
|
|
27
|
+
```
|
data/Rakefile
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
|
2
|
+
// listed below.
|
|
3
|
+
//
|
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
|
5
|
+
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
|
|
6
|
+
//
|
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
|
8
|
+
// compiled file. JavaScript code in this file should be added after the last require_* statement.
|
|
9
|
+
//
|
|
10
|
+
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
|
|
11
|
+
// about supported directives.
|
|
12
|
+
//
|
|
13
|
+
//= require_tree ./initializers
|
|
14
|
+
//= require_tree ./interfaces
|
|
15
|
+
|
|
16
|
+
$(window).load(function () {
|
|
17
|
+
MediaInputsInitializer.init()
|
|
18
|
+
})
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
var MediaInputsInitializer = (function () {
|
|
2
|
+
|
|
3
|
+
function initializeMedia () {
|
|
4
|
+
$('.inputs-media .inputs-media__input').change(function () {
|
|
5
|
+
// get utils data
|
|
6
|
+
var id = $(this).attr('id')
|
|
7
|
+
var media = $('#inputs-media-' + id)
|
|
8
|
+
var input = $(media).find('.inputs-media__input')
|
|
9
|
+
var action = $(media).find('.inputs-media__reload')
|
|
10
|
+
var value = $(input).attr('value')
|
|
11
|
+
// generate new url
|
|
12
|
+
var url = action.attr('href')
|
|
13
|
+
url = _updateQueryStringParameter(url, 'id', id)
|
|
14
|
+
url = _updateQueryStringParameter(url, 'value', value)
|
|
15
|
+
// update url and send request
|
|
16
|
+
$(action).attr('href', url)
|
|
17
|
+
$(action).trigger('click')
|
|
18
|
+
})
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function initializeGallery () {
|
|
22
|
+
$('.inputs-gallery .inputs-gallery__input').change(function () {
|
|
23
|
+
// get utils data
|
|
24
|
+
var id = $(this).attr('id')
|
|
25
|
+
var gallery = $('#inputs-gallery-' + id)
|
|
26
|
+
var input = $(gallery).find('.inputs-gallery__input')
|
|
27
|
+
var action = $(gallery).find('.inputs-gallery__reload')
|
|
28
|
+
var value = $(input).attr('value')
|
|
29
|
+
// generate new url
|
|
30
|
+
var url = action.attr('href')
|
|
31
|
+
url = _updateQueryStringParameter(url, 'id', id)
|
|
32
|
+
url = _updateQueryStringParameter(url, 'value', value)
|
|
33
|
+
// update url and send request
|
|
34
|
+
$(action).attr('href', url)
|
|
35
|
+
$(action).trigger('click')
|
|
36
|
+
})
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// This function updates uri params.
|
|
40
|
+
function _updateQueryStringParameter(uri, key, value) {
|
|
41
|
+
var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
|
|
42
|
+
var separator = uri.indexOf('?') !== -1 ? "&" : "?";
|
|
43
|
+
if (uri.match(re)) {
|
|
44
|
+
return uri.replace(re, '$1' + key + "=" + value + '$2');
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
return uri + separator + key + "=" + value;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Init:
|
|
52
|
+
|
|
53
|
+
function init () {
|
|
54
|
+
initializeMedia()
|
|
55
|
+
initializeGallery()
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return {
|
|
59
|
+
init: init
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
})()
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
var MediaSelector = (function () {
|
|
2
|
+
|
|
3
|
+
// This is the main function used to active the media selector.
|
|
4
|
+
// The inputId is the input used by the selector to save the selected data.
|
|
5
|
+
// The maxItems is a possible option used to set how many images can be selected.
|
|
6
|
+
function open (inputId, maxItems, event) {
|
|
7
|
+
if (!maxItems) { maxItems = 1 }
|
|
8
|
+
if (event) { event.preventDefault() }
|
|
9
|
+
// listen events on modal
|
|
10
|
+
_listenLoadIndexAction(inputId, maxItems)
|
|
11
|
+
_listenCancelButtonAction(inputId)
|
|
12
|
+
_listenListButtonAction(inputId)
|
|
13
|
+
_listenAddButtonAction(inputId)
|
|
14
|
+
// load index for media selector
|
|
15
|
+
_reloadIndex()
|
|
16
|
+
// open the modal
|
|
17
|
+
Modal.open('media__media_selector')
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// This function closes the media selector and remove all event watcher on it.
|
|
21
|
+
function close (event) {
|
|
22
|
+
if (event) { event.preventDefault() }
|
|
23
|
+
// remove event listener
|
|
24
|
+
$('#media__media_selector').unbind('loadIndexAction')
|
|
25
|
+
$('#media__media_selector_cancel_button').unbind('click')
|
|
26
|
+
// close the modal
|
|
27
|
+
Modal.close('media__media_selector')
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// This function reload the index list for the medias.
|
|
31
|
+
function _reloadIndex () {
|
|
32
|
+
$('#media__media_selector_load_index').trigger('click')
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// This functions listens the dom cha on the media selector and run the correct actions.
|
|
36
|
+
function _listenLoadIndexAction (inputId, maxItems) {
|
|
37
|
+
$('#media__media_selector').bind('loadIndexAction', function () {
|
|
38
|
+
// update active medias
|
|
39
|
+
_updateActiveMedias(inputId)
|
|
40
|
+
// listen medias click action
|
|
41
|
+
var medias = $('#media__media_selector .partials__media-selector-index-list .elements-preview')
|
|
42
|
+
$(medias).click(function () {
|
|
43
|
+
var mediaId = $(this).attr('data-media-id')
|
|
44
|
+
// update input with selected medias
|
|
45
|
+
_updateInput(mediaId, inputId, maxItems)
|
|
46
|
+
// update view for selected media
|
|
47
|
+
_updateActiveMedias(inputId)
|
|
48
|
+
})
|
|
49
|
+
})
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// This function listens the click on cancel button to clear the input.
|
|
53
|
+
function _listenCancelButtonAction (inputId) {
|
|
54
|
+
$('#media__media_selector_cancel_button').bind('click', function (e) {
|
|
55
|
+
e.preventDefault()
|
|
56
|
+
var input = $('#' + inputId)
|
|
57
|
+
$(input).val('')
|
|
58
|
+
$(input).trigger('change')
|
|
59
|
+
close()
|
|
60
|
+
})
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// This function listens the click on add button to update the input.
|
|
64
|
+
function _listenAddButtonAction (inputId) {
|
|
65
|
+
$('#media__media_selector_add_button').bind('click', function (e) {
|
|
66
|
+
e.preventDefault()
|
|
67
|
+
$('#media__media_selector_load_form').trigger('click')
|
|
68
|
+
})
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// This function listens the click on add button to update the input.
|
|
72
|
+
function _listenListButtonAction (inputId) {
|
|
73
|
+
$('#media__media_selector_list_button').bind('click', function (e) {
|
|
74
|
+
e.preventDefault()
|
|
75
|
+
$('#media__media_selector_load_index').trigger('click')
|
|
76
|
+
})
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// This function update the input with a specific id to add / remove a media.
|
|
80
|
+
function _updateInput (mediaId, inputId, maxItems) {
|
|
81
|
+
// find input informations
|
|
82
|
+
var input = $('#' + inputId)
|
|
83
|
+
var inputValue = $(input).val()
|
|
84
|
+
var selectedMedias = inputValue ? inputValue.split(',') : []
|
|
85
|
+
// update selected medias
|
|
86
|
+
var mediaIndex = selectedMedias.indexOf(mediaId)
|
|
87
|
+
if (mediaIndex > -1) {
|
|
88
|
+
selectedMedias.splice(mediaIndex, 1)
|
|
89
|
+
} else {
|
|
90
|
+
if (maxItems > 1 && selectedMedias.length >= maxItems) {
|
|
91
|
+
alert('You can not select other medias')
|
|
92
|
+
return
|
|
93
|
+
}
|
|
94
|
+
if (maxItems > 1) {
|
|
95
|
+
selectedMedias.push(mediaId)
|
|
96
|
+
} else {
|
|
97
|
+
selectedMedias = [mediaId]
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// update input value
|
|
101
|
+
$(input).val(selectedMedias.join())
|
|
102
|
+
$(input).trigger("change") // manually trigger change event
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// This function update the style to show active medias.
|
|
106
|
+
function _updateActiveMedias (inputId) {
|
|
107
|
+
// find inputs informations
|
|
108
|
+
var input = $('#' + inputId)
|
|
109
|
+
var inputValue = $(input).val()
|
|
110
|
+
var selectedMedias = inputValue.split(',')
|
|
111
|
+
// update style
|
|
112
|
+
var medias = $('#media__media_selector .partials__media-selector-index-list .elements-preview')
|
|
113
|
+
$(medias).each(function () {
|
|
114
|
+
var mediaId = $(this).attr('data-media-id')
|
|
115
|
+
if (selectedMedias.indexOf(mediaId) > -1) {
|
|
116
|
+
$(this).addClass('elements-preview--active')
|
|
117
|
+
} else {
|
|
118
|
+
$(this).removeClass('elements-preview--active')
|
|
119
|
+
}
|
|
120
|
+
})
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return {
|
|
124
|
+
open: open,
|
|
125
|
+
close: close
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
})()
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
|
3
|
+
* listed below.
|
|
4
|
+
*
|
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
|
6
|
+
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
|
7
|
+
*
|
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
|
9
|
+
* compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
|
|
10
|
+
* files in this directory. Styles in this file should be added after the last require_* statement.
|
|
11
|
+
* It is generally better to create a new file per style scope.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
@import "theme";
|
|
15
|
+
@import "cells/cells";
|
|
16
|
+
@import "partials/partials";
|
|
17
|
+
@import "pages/pages";
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
.elements-preview {
|
|
2
|
+
border: solid 1px $color_grey;
|
|
3
|
+
display: block;
|
|
4
|
+
outline: 0;
|
|
5
|
+
overflow: hidden;
|
|
6
|
+
|
|
7
|
+
&:focus {
|
|
8
|
+
border-color: $color_main;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.elements-preview__container {
|
|
13
|
+
position: relative;
|
|
14
|
+
padding-bottom: 100%;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.elements-preview__label {
|
|
18
|
+
overflow: hidden;
|
|
19
|
+
white-space: nowrap;
|
|
20
|
+
text-overflow: ellipsis;
|
|
21
|
+
position: absolute;
|
|
22
|
+
left: 50%;
|
|
23
|
+
bottom: 10px;
|
|
24
|
+
right: auto;
|
|
25
|
+
transform: translate(-50%, 0);
|
|
26
|
+
max-width: 70%;
|
|
27
|
+
background: rgba($color_white, 0.85);
|
|
28
|
+
box-shadow: 0px 11px 20px rgba(41, 59, 90, 0.08);
|
|
29
|
+
padding: 5px;
|
|
30
|
+
border-radius: 5px;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.elements-preview__icon-container {
|
|
34
|
+
width: 100%;
|
|
35
|
+
height: 100%;
|
|
36
|
+
position: absolute;
|
|
37
|
+
top: 0;
|
|
38
|
+
left: 0;
|
|
39
|
+
background-color: $color_white;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.elements-preview__icon {
|
|
43
|
+
position: absolute;
|
|
44
|
+
top: 50%;
|
|
45
|
+
left: 50%;
|
|
46
|
+
transform: translate(-50%, -50%);
|
|
47
|
+
font-size: 50px;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.elements-preview__image {
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.elements-preview__not-found {
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.elements-preview__image-background {
|
|
59
|
+
position: absolute;
|
|
60
|
+
top: 0;
|
|
61
|
+
left: 0;
|
|
62
|
+
width: 100%;
|
|
63
|
+
height: 100%;
|
|
64
|
+
background-size: cover;
|
|
65
|
+
background-position: center;
|
|
66
|
+
background-repeat: no-repeat;
|
|
67
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
.elements-previews {
|
|
2
|
+
outline: 0;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.elements-previews__list {
|
|
6
|
+
border-radius: 10px;
|
|
7
|
+
border: solid 1px $color_grey;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.elements-previews__not-found {
|
|
11
|
+
border-radius: 10px;
|
|
12
|
+
border: solid 1px $color_grey;
|
|
13
|
+
position: relative;
|
|
14
|
+
width: 100%;
|
|
15
|
+
height: 200px;
|
|
16
|
+
|
|
17
|
+
span {
|
|
18
|
+
position: absolute;
|
|
19
|
+
top: 50%;
|
|
20
|
+
left: 50%;
|
|
21
|
+
transform: translate(-50%, -50%);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
.inputs-media {
|
|
2
|
+
|
|
3
|
+
&:hover {
|
|
4
|
+
.elements-preview__container {
|
|
5
|
+
background-color: $color_main;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.elements-preview__image-background, .elements-preview__icon-container {
|
|
9
|
+
transition: all 0.25s;
|
|
10
|
+
opacity: 0.75;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.inputs-media__preview {
|
|
16
|
+
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.inputs-media__input {
|
|
20
|
+
display: none;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.inputs-media__reload {
|
|
24
|
+
display: none;
|
|
25
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
.medias__medias-index {
|
|
2
|
+
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.medias__dropzone {
|
|
6
|
+
form {
|
|
7
|
+
min-height: 350px;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.medias__dropzone-modal-actions {
|
|
12
|
+
position: fixed;
|
|
13
|
+
bottom: 0;
|
|
14
|
+
left: 0;
|
|
15
|
+
width: 100%;
|
|
16
|
+
background: $color_white;
|
|
17
|
+
text-align: right;
|
|
18
|
+
padding: 15px;
|
|
19
|
+
border-top: solid 2px $color_grey;
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import "medias";
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
.partials__media-selector {
|
|
2
|
+
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.partials__media-selector-actions {
|
|
6
|
+
display: none;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.partials__media-selector-index-container {
|
|
10
|
+
padding-bottom: 70px;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.partials__media-selector-index {
|
|
14
|
+
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.partials__media-selector-index-list {
|
|
18
|
+
|
|
19
|
+
.elements-preview {
|
|
20
|
+
cursor: pointer;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.elements-preview--active {
|
|
24
|
+
border-color: $color_main;
|
|
25
|
+
background-color: $color_main;
|
|
26
|
+
|
|
27
|
+
.elements-preview__image-background, .elements-preview__icon-container {
|
|
28
|
+
opacity: 0.5;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.partials__media-selector-index-pagination {
|
|
35
|
+
margin-top: 10px;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.partials__media-selector-buttons {
|
|
39
|
+
position: fixed;
|
|
40
|
+
bottom: 0;
|
|
41
|
+
left: 0;
|
|
42
|
+
width: 100%;
|
|
43
|
+
background: $color_white;
|
|
44
|
+
text-align: right;
|
|
45
|
+
padding: 15px;
|
|
46
|
+
border-top: solid 2px $color_grey;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.partials__media-selector-form {
|
|
50
|
+
form {
|
|
51
|
+
min-height: 350px;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import "media_selector";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<%
|
|
2
|
+
colors = core__get_colors
|
|
3
|
+
%>
|
|
4
|
+
|
|
5
|
+
$color_white: <%= colors[:white] %>;
|
|
6
|
+
$color_black: <%= colors[:black] %>;
|
|
7
|
+
$color_grey: <%= colors[:grey] %>;
|
|
8
|
+
$color_main: <%= colors[:main] %>;
|
|
9
|
+
$color_active: <%= colors[:active] %>;
|
|
10
|
+
$color_danger: <%= colors[:danger] %>;
|
|
11
|
+
$color_warning: <%= colors[:warning] %>;
|
|
12
|
+
$color_success: <%= colors[:success] %>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
module LatoMedia
|
|
2
|
+
|
|
3
|
+
class Elements::Preview::Cell < LatoCore::Cell
|
|
4
|
+
|
|
5
|
+
view_paths << "#{LatoMedia::Engine.root}/app/cells"
|
|
6
|
+
|
|
7
|
+
@@requested_args = [:media]
|
|
8
|
+
|
|
9
|
+
@@default_args = {
|
|
10
|
+
class: '',
|
|
11
|
+
size: 'large',
|
|
12
|
+
height: nil,
|
|
13
|
+
url: nil,
|
|
14
|
+
remote: false,
|
|
15
|
+
onclick: ''
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
def initialize(args = {})
|
|
19
|
+
@args = validate_args(
|
|
20
|
+
args: args,
|
|
21
|
+
requested_args: @@requested_args,
|
|
22
|
+
default_args: @@default_args
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
set_conditions
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def show
|
|
29
|
+
render 'show.html'
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
def set_conditions
|
|
35
|
+
if @args[:media].image?
|
|
36
|
+
@icon = ''
|
|
37
|
+
else
|
|
38
|
+
@icon = 'file-o'
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<div
|
|
2
|
+
class="elements-preview__container elements-preview__not-found"
|
|
3
|
+
<% if @args[:height] %>
|
|
4
|
+
style="height: <%= @args[:height] %>px; padding-bottom : 0;"
|
|
5
|
+
<% end %>
|
|
6
|
+
>
|
|
7
|
+
<div class="elements-preview__icon-container">
|
|
8
|
+
<div class="elements-preview__icon">
|
|
9
|
+
<i class="fa fa-<%= @icon %>" aria-hidden="true"></i>
|
|
10
|
+
</div>
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
<div class="elements-preview__label"><%= @args[:media].title %></div>
|
|
14
|
+
</div>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<div
|
|
2
|
+
class="elements-preview__container elements-preview__image"
|
|
3
|
+
<% if @args[:height] %>
|
|
4
|
+
style="height: <%= @args[:height] %>px; padding-bottom : 0;"
|
|
5
|
+
<% end %>
|
|
6
|
+
>
|
|
7
|
+
<div class="elements-preview__image-background" style="background-image: url(<%= @args[:media].attachment.url(@args[:size]) %>)"></div>
|
|
8
|
+
|
|
9
|
+
<div class="elements-preview__label"><%= @args[:media].title %></div>
|
|
10
|
+
</div>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<div
|
|
2
|
+
class="elements-preview__container elements-preview__not-found"
|
|
3
|
+
<% if @args[:height] %>
|
|
4
|
+
style="height: <%= @args[:height] %>px; padding-bottom : 0;"
|
|
5
|
+
<% end %>
|
|
6
|
+
>
|
|
7
|
+
|
|
8
|
+
<div class="elements-preview__icon-container">
|
|
9
|
+
<div class="elements-preview__icon">
|
|
10
|
+
<i class="fa fa-ban" aria-hidden="true"></i>
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
|
|
14
|
+
<div class="elements-preview__label"><%= LANGUAGES[:lato_media][:mixed][:file_not_present] %></div>
|
|
15
|
+
</div>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<% if @args[:url] %>
|
|
2
|
+
<a
|
|
3
|
+
href="<%= @args[:url] %>"
|
|
4
|
+
class="elements-preview <%= @args[:class] %>"
|
|
5
|
+
onclick="<%= @args[:onclick] %>"
|
|
6
|
+
data-media-id="<%= @args[:media].id %>"
|
|
7
|
+
<% if @args[:remote] %>
|
|
8
|
+
data-remote="true"
|
|
9
|
+
<% end %>
|
|
10
|
+
>
|
|
11
|
+
<% else %>
|
|
12
|
+
<div
|
|
13
|
+
class="elements-preview <%= @args[:class] %>"
|
|
14
|
+
onclick="<%= @args[:onclick] %>"
|
|
15
|
+
data-media-id="<%= @args[:media].id %>"
|
|
16
|
+
>
|
|
17
|
+
<% end %>
|
|
18
|
+
|
|
19
|
+
<% if @args[:media].exists? %>
|
|
20
|
+
<% if @args[:media].image? %>
|
|
21
|
+
<%= render './image.html' %>
|
|
22
|
+
<% else %>
|
|
23
|
+
<%= render './general.html' %>
|
|
24
|
+
<% end %>
|
|
25
|
+
<% else %>
|
|
26
|
+
<%= render './not_found.html' %>
|
|
27
|
+
<% end %>
|
|
28
|
+
|
|
29
|
+
<% if @args[:url] %>
|
|
30
|
+
</a>
|
|
31
|
+
<% else %>
|
|
32
|
+
</div>
|
|
33
|
+
<% end %>
|