mtl 1.1.9 → 1.1.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/mtl/document_modal.coffee +17 -1
- data/app/assets/stylesheets/mtl/extend/_collection-files.scss +25 -0
- data/lib/mtl/rails/card_file_presenter.rb +22 -11
- data/lib/mtl/version.rb +1 -1
- data/spec/mtl/rails/card_file_presenter_spec.rb +13 -11
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f56f1f9112e8493ee517caf8765768aa52112a9
|
4
|
+
data.tar.gz: aee2814c81cc4749b142e0defa84b2a0a896b4b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0fd302425fa76ce00f3d4eb653ddfe5cbfe00fe2b4fc59d2427460bbe87b74ae1b3b18e65e808582a420901ffab6775606ff1509f7780a8f6d6a658fa6952d60
|
7
|
+
data.tar.gz: 7175999428aa56c3af6ee95c7c441ed21899709a7a75460bb5789ba57be7a527e81754497140bea1a36e73a3cec0b92da10e6759475f3c5ccaf3eaee2229a6b3
|
@@ -88,7 +88,7 @@ findOrCreateDocumentModal = ->
|
|
88
88
|
initDocumentModal = ($fileCard) ->
|
89
89
|
filename = $fileCard.data('mtl-document-name')
|
90
90
|
title = $fileCard.prop('title')
|
91
|
-
url = $fileCard.
|
91
|
+
url = $fileCard.data('href')
|
92
92
|
$modal = $(
|
93
93
|
MTL.renderTemplate(
|
94
94
|
'document_modal',
|
@@ -122,6 +122,22 @@ $(document).on 'click', '[data-mtl-document-modal="open"]', (e) ->
|
|
122
122
|
when 39 # right
|
123
123
|
findOrCreateDocumentModal().find('.document-modal-next').trigger 'click'
|
124
124
|
|
125
|
+
|
126
|
+
$(document).on 'click', '[data-mtl-document-modal="open"] .download-link', (e) ->
|
127
|
+
e.stopPropagation()
|
128
|
+
$(this).removeAttr('download') if navigator.userAgent.search('Firefox') > -1
|
129
|
+
if window.navigator && window.navigator.msSaveOrOpenBlob
|
130
|
+
e.preventDefault()
|
131
|
+
xhr = new XMLHttpRequest()
|
132
|
+
xhr.open('GET', this.href, true)
|
133
|
+
xhr.responseType = 'blob'
|
134
|
+
xhr.onload = (e) =>
|
135
|
+
if (xhr.status == 200)
|
136
|
+
blob = new Blob([xhr.response], type: xhr.getResponseHeader('content-type'))
|
137
|
+
window.navigator.msSaveOrOpenBlob(blob, this.title)
|
138
|
+
xhr.send()
|
139
|
+
|
140
|
+
|
125
141
|
$(document).on 'click', '[data-mtl-document-modal="close"]', (e) ->
|
126
142
|
e.preventDefault()
|
127
143
|
closeDocumentModal()
|
@@ -7,6 +7,8 @@ $mtl-collection-file-bg: color('grey', 'lighten-5');
|
|
7
7
|
$mtl-collection-file-text-primary: color('grey', 'darken-4');
|
8
8
|
$mtl-collection-file-text-secondary: color('grey', 'base');
|
9
9
|
|
10
|
+
$mtl-collection-file-download: color('grey', 'darken-2');
|
11
|
+
|
10
12
|
// collection of file cards
|
11
13
|
.collection-files {
|
12
14
|
margin: (-$mtl-collection-files-spacing) 0 0 (-$mtl-collection-files-spacing);
|
@@ -27,6 +29,7 @@ $mtl-collection-file-text-secondary: color('grey', 'base');
|
|
27
29
|
background-size: cover;
|
28
30
|
background-position: center;
|
29
31
|
padding: 12px 13px 0;
|
32
|
+
cursor: pointer;
|
30
33
|
|
31
34
|
@media #{$small-and-down} {
|
32
35
|
width: 100%;
|
@@ -60,6 +63,28 @@ $mtl-collection-file-text-secondary: color('grey', 'base');
|
|
60
63
|
}
|
61
64
|
}
|
62
65
|
|
66
|
+
// additional direct download link
|
67
|
+
.download-link {
|
68
|
+
position: absolute;
|
69
|
+
right: 0;
|
70
|
+
bottom: 0;
|
71
|
+
opacity: 0;
|
72
|
+
transition-duration: .2s;
|
73
|
+
transition-property: opacity;
|
74
|
+
|
75
|
+
.material-icons {
|
76
|
+
display: block;
|
77
|
+
width: 30px;
|
78
|
+
height: 30px;
|
79
|
+
text-align: center;
|
80
|
+
line-height: 30px;
|
81
|
+
color: $mtl-collection-file-download;
|
82
|
+
}
|
83
|
+
}
|
84
|
+
&:hover .download-link {
|
85
|
+
opacity: 1;
|
86
|
+
}
|
87
|
+
|
63
88
|
// image only panel
|
64
89
|
&.card-panel-image {
|
65
90
|
text-indent: -6000px;
|
@@ -13,19 +13,22 @@ module Mtl
|
|
13
13
|
|
14
14
|
def render(filename, href, params = {})
|
15
15
|
params = params.reverse_merge type: File.extname(filename).delete('.')
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
16
|
+
params[:href] = href
|
17
|
+
card_params = { title: params[:title] || filename,
|
18
|
+
class: ['card-panel', params[:preview] ? 'card-panel-image' : nil],
|
19
|
+
data: data(filename, params),
|
20
|
+
style: if params[:preview]
|
21
|
+
"background-image: url(#{URI.encode(params[:preview])})"
|
22
|
+
end }
|
23
|
+
if params[:modal]
|
24
|
+
view.content_tag :div, render_body(filename, params), card_params
|
25
|
+
else
|
26
|
+
view.link_to render_body(filename, params), href, card_params.merge(target: '_blank')
|
27
|
+
end
|
25
28
|
end
|
26
29
|
|
27
30
|
def render_body(filename, params)
|
28
|
-
view.safe_join [label(filename, params[:title]), infos(params), delete(params)]
|
31
|
+
view.safe_join [label(filename, params[:title]), infos(params), delete(params), download(filename, params)]
|
29
32
|
end
|
30
33
|
|
31
34
|
private
|
@@ -56,6 +59,14 @@ module Mtl
|
|
56
59
|
view.mtl_icon :close, class: 'close', data: data.reject { |_, v| v.blank? }
|
57
60
|
end
|
58
61
|
|
62
|
+
def download(filename, params)
|
63
|
+
return unless params[:modal]
|
64
|
+
view.link_to view.mtl_icon(:file_download), params[:href], title: params[:title] || filename,
|
65
|
+
target: '_blank',
|
66
|
+
class: 'download-link',
|
67
|
+
download: params[:title] || filename
|
68
|
+
end
|
69
|
+
|
59
70
|
def data(filename, params)
|
60
71
|
data = params[:data] || {}
|
61
72
|
data.merge(modal_data(filename, params))
|
@@ -63,7 +74,7 @@ module Mtl
|
|
63
74
|
|
64
75
|
def modal_data(filename, params)
|
65
76
|
return {} unless params[:modal]
|
66
|
-
{ mtl_document_modal: 'open', mtl_document_name: filename }
|
77
|
+
{ mtl_document_modal: 'open', mtl_document_name: filename, href: params[:href] }
|
67
78
|
end
|
68
79
|
end
|
69
80
|
end
|
data/lib/mtl/version.rb
CHANGED
@@ -14,7 +14,7 @@ RSpec.describe Mtl::Rails::CardFilePresenter, dom: true do
|
|
14
14
|
context '#render' do
|
15
15
|
it 'renders a basic file card with filename and href' do
|
16
16
|
expect(subject.render('Document Dolorem.jpg', '/path/to/file.jpg')).to match_dom <<-HTML
|
17
|
-
<a title="Document Dolorem.jpg"
|
17
|
+
<a title="Document Dolorem.jpg" class="card-panel " target="_blank" href="/path/to/file.jpg">
|
18
18
|
<span class="truncate">Document Dolorem.jpg</span>
|
19
19
|
<span class="secondary">
|
20
20
|
<i class="material-icons red-text">image</i>
|
@@ -26,7 +26,7 @@ RSpec.describe Mtl::Rails::CardFilePresenter, dom: true do
|
|
26
26
|
|
27
27
|
it 'renders a file card with filename, href and a custom title' do
|
28
28
|
expect(subject.render('Document Dolorem.jpg', '/path/to/file.jpg', title: 'foo')).to match_dom <<-HTML
|
29
|
-
<a title="foo"
|
29
|
+
<a title="foo" class="card-panel " target="_blank" href="/path/to/file.jpg">
|
30
30
|
<strong class="truncate">foo</strong>
|
31
31
|
<span class="truncate">Document Dolorem.jpg</span>
|
32
32
|
<span class="secondary">
|
@@ -39,7 +39,7 @@ RSpec.describe Mtl::Rails::CardFilePresenter, dom: true do
|
|
39
39
|
|
40
40
|
it 'renders a file card with filename, href and a custom type' do
|
41
41
|
expect(subject.render('Document Dolorem.jpg', '/path/to/file.jpg', type: 'bar')).to match_dom <<-HTML
|
42
|
-
<a title="Document Dolorem.jpg"
|
42
|
+
<a title="Document Dolorem.jpg" class="card-panel " target="_blank" href="/path/to/file.jpg">
|
43
43
|
<span class="truncate">Document Dolorem.jpg</span>
|
44
44
|
<span class="secondary">
|
45
45
|
<i class="material-icons blue-text">insert_drive_file</i>
|
@@ -51,7 +51,7 @@ RSpec.describe Mtl::Rails::CardFilePresenter, dom: true do
|
|
51
51
|
|
52
52
|
it 'renders a file card with filename, href and a custom preview' do
|
53
53
|
expect(subject.render('Document Dolorem.jpg', '/path/to/file.jpg', preview: '/path/to/preview.jpg')).to match_dom <<-HTML
|
54
|
-
<a title="Document Dolorem.jpg"
|
54
|
+
<a title="Document Dolorem.jpg" class="card-panel card-panel-image" style="background-image: url(/path/to/preview.jpg)" target="_blank" href="/path/to/file.jpg">
|
55
55
|
<span class="truncate">Document Dolorem.jpg</span>
|
56
56
|
<span class="secondary">
|
57
57
|
<i class="material-icons red-text">image</i>
|
@@ -63,7 +63,7 @@ RSpec.describe Mtl::Rails::CardFilePresenter, dom: true do
|
|
63
63
|
|
64
64
|
it 'renders a file card with filename, href and a custom custom delete' do
|
65
65
|
expect(subject.render('Document Dolorem.jpg', '/path/to/file.jpg', delete: '/path/to/delete/the/file')).to match_dom <<-HTML
|
66
|
-
<a title="Document Dolorem.jpg"
|
66
|
+
<a title="Document Dolorem.jpg" class="card-panel " target="_blank" href="/path/to/file.jpg">
|
67
67
|
<span class="truncate">Document Dolorem.jpg</span>
|
68
68
|
<span class="secondary">
|
69
69
|
<i class="material-icons red-text">image</i>
|
@@ -76,7 +76,7 @@ RSpec.describe Mtl::Rails::CardFilePresenter, dom: true do
|
|
76
76
|
|
77
77
|
it 'renders a file card with filename, href and a custom custom delete and a confirm' do
|
78
78
|
expect(subject.render('Document Dolorem.jpg', '/path/to/file.jpg', delete: '/path/to/delete/the/file', confirm: 'sure?')).to match_dom <<-HTML
|
79
|
-
<a title="Document Dolorem.jpg"
|
79
|
+
<a title="Document Dolorem.jpg" class="card-panel " target="_blank" href="/path/to/file.jpg">
|
80
80
|
<span class="truncate">Document Dolorem.jpg</span>
|
81
81
|
<span class="secondary">
|
82
82
|
<i class="material-icons red-text">image</i>
|
@@ -89,19 +89,20 @@ RSpec.describe Mtl::Rails::CardFilePresenter, dom: true do
|
|
89
89
|
|
90
90
|
it 'renders a file card with filename, href and document modal options' do
|
91
91
|
expect(subject.render('Document Dolorem.jpg', '/path/to/file.jpg', modal: true)).to match_dom <<-HTML
|
92
|
-
<
|
92
|
+
<div title="Document Dolorem.jpg" class="card-panel " data-mtl-document-modal="open" data-mtl-document-name="Document Dolorem.jpg" data-href="/path/to/file.jpg">
|
93
93
|
<span class="truncate">Document Dolorem.jpg</span>
|
94
94
|
<span class="secondary">
|
95
95
|
<i class="material-icons red-text">image</i>
|
96
96
|
JPG
|
97
97
|
</span>
|
98
|
-
|
98
|
+
<a title="Document Dolorem.jpg" target="_blank" class="download-link" download="Document Dolorem.jpg" href="/path/to/file.jpg"><i class="material-icons">file_download</i></a>
|
99
|
+
</div>
|
99
100
|
HTML
|
100
101
|
end
|
101
102
|
|
102
103
|
it 'renders a file card with filename, href and custom data attributes' do
|
103
104
|
expect(subject.render('Document Dolorem.jpg', '/path/to/file.jpg', data: { something: '42' })).to match_dom <<-HTML
|
104
|
-
<a title="Document Dolorem.jpg"
|
105
|
+
<a title="Document Dolorem.jpg" class="card-panel " data-something="42" target="_blank" href="/path/to/file.jpg">
|
105
106
|
<span class="truncate">Document Dolorem.jpg</span>
|
106
107
|
<span class="secondary">
|
107
108
|
<i class="material-icons red-text">image</i>
|
@@ -113,13 +114,14 @@ RSpec.describe Mtl::Rails::CardFilePresenter, dom: true do
|
|
113
114
|
|
114
115
|
it 'renders a file card with filename, href, document modal options and custom data attributes' do
|
115
116
|
expect(subject.render('Document Dolorem.jpg', '/path/to/file.jpg', modal: true, data: { something: '42' })).to match_dom <<-HTML
|
116
|
-
<
|
117
|
+
<div title="Document Dolorem.jpg" class="card-panel " data-something="42" data-mtl-document-modal="open" data-mtl-document-name="Document Dolorem.jpg" data-href="/path/to/file.jpg">
|
117
118
|
<span class="truncate">Document Dolorem.jpg</span>
|
118
119
|
<span class="secondary">
|
119
120
|
<i class="material-icons red-text">image</i>
|
120
121
|
JPG
|
121
122
|
</span>
|
122
|
-
|
123
|
+
<a title="Document Dolorem.jpg" target="_blank" class="download-link" download="Document Dolorem.jpg" href="/path/to/file.jpg"><i class="material-icons">file_download</i></a>
|
124
|
+
</div>
|
123
125
|
HTML
|
124
126
|
end
|
125
127
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mtl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marco Plüss
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-09-
|
13
|
+
date: 2017-09-04 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: railties
|