cortex-plugins-core 0.4.5 → 0.4.6
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/cells/plugins/core/asset_info/index.haml +2 -0
- data/app/cells/plugins/core/asset_info/show.haml +41 -0
- data/app/cells/plugins/core/asset_info_cell.rb +48 -0
- data/app/models/asset_field_type.rb +25 -22
- data/app/models/asset_field_type.rb.orig +154 -0
- data/lib/cortex/plugins/core/version.rb +1 -1
- data/lib/tasks/cortex/core/media.rake +25 -7
- metadata +5 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1d1a73688bdd9211a0a2d10cc2684e1f4da60273
|
4
|
+
data.tar.gz: e90bb298eded507752ba92394a8060c79caf98b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6583a84706ff696839b07effd2a6a972e8a7d4be9d0ebcbec729d33bd6942daa1a016ead31411f8b99c0a5222f94542fdd8d4f651e64dd59d5f001e496abc310
|
7
|
+
data.tar.gz: a29a15fa4cf916975acd3b6b4c1d011486764a5d5da7f31c8bf174ff5595beb4ba9f95447600dfa38bced1b683aeeda859b8d6a987b53d6de0a1180179317b86
|
@@ -0,0 +1,41 @@
|
|
1
|
+
- if asset
|
2
|
+
:javascript
|
3
|
+
document.addEventListener("DOMContentLoaded", function(event) {
|
4
|
+
new Clipboard('#copy-asset-url');
|
5
|
+
});
|
6
|
+
|
7
|
+
.asset-info.mdl-card.mdl-shadow--2dp
|
8
|
+
.mdl-card__title
|
9
|
+
%h2.mdl-card__title-text
|
10
|
+
= image_tag(asset['url'], style: 'max-height: 200px;')
|
11
|
+
.mdl-card__supporting-text
|
12
|
+
%dl
|
13
|
+
%dt Original Filename
|
14
|
+
%dd
|
15
|
+
= asset['file_name']
|
16
|
+
%dt File Type
|
17
|
+
%dd
|
18
|
+
= asset['content_type']
|
19
|
+
%dt File Size
|
20
|
+
%dd
|
21
|
+
= number_to_human_size(asset['file_size'])
|
22
|
+
%dt Dimensions
|
23
|
+
%dd
|
24
|
+
= dimensions
|
25
|
+
%dt Creator
|
26
|
+
%dd
|
27
|
+
= creator.fullname
|
28
|
+
%dt Created
|
29
|
+
%dd
|
30
|
+
= created_at
|
31
|
+
%dt Last Modified
|
32
|
+
%dd
|
33
|
+
= updated_at
|
34
|
+
%dt URL
|
35
|
+
%dd
|
36
|
+
= link_to_asset
|
37
|
+
.mdl-card__menu
|
38
|
+
.mdl-button.mdl-button--icon.mdl-js-button.mdl-js-ripple-effect#copy-asset-url{data: {'clipboard-text': asset['url']}}
|
39
|
+
%i.material-icons content_copy
|
40
|
+
.mdl-tooltip{for: 'copy-asset-url'}
|
41
|
+
Copy Asset URL
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Plugins
|
2
|
+
module Core
|
3
|
+
class AssetInfoCell < Plugins::Core::Cell
|
4
|
+
include ActionView::Helpers::NumberHelper
|
5
|
+
|
6
|
+
property :data
|
7
|
+
property :content_item
|
8
|
+
|
9
|
+
def show
|
10
|
+
render
|
11
|
+
end
|
12
|
+
|
13
|
+
def index
|
14
|
+
render
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def config
|
20
|
+
@options[:config] || {}
|
21
|
+
end
|
22
|
+
|
23
|
+
def asset
|
24
|
+
data['asset']
|
25
|
+
end
|
26
|
+
|
27
|
+
def dimensions
|
28
|
+
"#{asset['dimensions']['width']} x #{asset['dimensions']['width']}"
|
29
|
+
end
|
30
|
+
|
31
|
+
def creator
|
32
|
+
content_item.creator
|
33
|
+
end
|
34
|
+
|
35
|
+
def created_at
|
36
|
+
content_item.created_at.to_formatted_s(:long_ordinal)
|
37
|
+
end
|
38
|
+
|
39
|
+
def updated_at
|
40
|
+
DateTime.parse(asset['updated_at']).to_formatted_s(:long_ordinal)
|
41
|
+
end
|
42
|
+
|
43
|
+
def link_to_asset
|
44
|
+
link_to(asset['url'], asset['url'])
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -5,7 +5,8 @@ class AssetFieldType < FieldType
|
|
5
5
|
:asset_updated_at,
|
6
6
|
:asset
|
7
7
|
|
8
|
-
attr_reader :dimensions
|
8
|
+
attr_reader :dimensions,
|
9
|
+
:existing_data
|
9
10
|
|
10
11
|
before_save :extract_dimensions
|
11
12
|
|
@@ -26,14 +27,16 @@ class AssetFieldType < FieldType
|
|
26
27
|
|
27
28
|
def data
|
28
29
|
{
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
30
|
+
'asset': {
|
31
|
+
'file_name': asset_file_name,
|
32
|
+
'url': asset.url,
|
33
|
+
'style_urls': style_urls,
|
34
|
+
'dimensions': dimensions,
|
35
|
+
'content_type': asset_content_type,
|
36
|
+
'file_size': asset_file_size,
|
37
|
+
'updated_at': asset_updated_at
|
38
|
+
},
|
39
|
+
'asset_field_type_id': id
|
37
40
|
}
|
38
41
|
end
|
39
42
|
|
@@ -59,8 +62,8 @@ class AssetFieldType < FieldType
|
|
59
62
|
unless tempfile.nil?
|
60
63
|
geometry = Paperclip::Geometry.from_file(tempfile)
|
61
64
|
@dimensions = {
|
62
|
-
|
63
|
-
|
65
|
+
width: geometry.width.to_i,
|
66
|
+
height: geometry.height.to_i
|
64
67
|
}
|
65
68
|
end
|
66
69
|
end
|
@@ -76,7 +79,7 @@ class AssetFieldType < FieldType
|
|
76
79
|
end
|
77
80
|
|
78
81
|
def validate_presence?
|
79
|
-
|
82
|
+
validations.key? :presence
|
80
83
|
end
|
81
84
|
|
82
85
|
def attachment_size_validator
|
@@ -115,21 +118,21 @@ class AssetFieldType < FieldType
|
|
115
118
|
attachment_content_type_validator.validate_each(self, :asset, asset)
|
116
119
|
end
|
117
120
|
|
121
|
+
def style_urls
|
122
|
+
if existing_data.empty?
|
123
|
+
(metadata[:styles].map { |key, value| [key, asset.url(key)] }).to_h
|
124
|
+
else
|
125
|
+
existing_data[:asset][:style_urls]
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
118
129
|
def existing_metadata
|
119
130
|
metadata.except!(:existing_data)
|
120
131
|
|
121
|
-
unless
|
122
|
-
metadata[:path]
|
132
|
+
unless existing_data.empty?
|
133
|
+
metadata[:path].gsub(":id", existing_data['asset_field_type_id']) if metadata[:path]
|
123
134
|
end
|
124
135
|
|
125
136
|
metadata
|
126
137
|
end
|
127
|
-
|
128
|
-
def updated_url(path)
|
129
|
-
# Take the parse path of the existing URL and drop the first '/',
|
130
|
-
# that will be added later and we don't want to duplicate it
|
131
|
-
# Then remove the old file extension and replace it with the paperclipp'd new one
|
132
|
-
new_path = URI.parse(path).path.slice(1..-1)
|
133
|
-
new_path.gsub(File.extname(path), ".:extension")
|
134
|
-
end
|
135
138
|
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
class AssetFieldType < FieldType
|
2
|
+
attr_accessor :asset_file_name,
|
3
|
+
:asset_content_type,
|
4
|
+
:asset_file_size,
|
5
|
+
:asset_updated_at,
|
6
|
+
:asset
|
7
|
+
|
8
|
+
attr_reader :dimensions,
|
9
|
+
:existing_data
|
10
|
+
|
11
|
+
before_save :extract_dimensions
|
12
|
+
|
13
|
+
do_not_validate_attachment_file_type :asset
|
14
|
+
validates :asset, attachment_presence: true, if: :validate_presence?
|
15
|
+
validate :validate_asset_size, if: :validate_size?
|
16
|
+
validate :validate_asset_content_type, if: :validate_content_type?
|
17
|
+
|
18
|
+
def metadata=(metadata_hash)
|
19
|
+
@metadata = metadata_hash.deep_symbolize_keys
|
20
|
+
@existing_data = metadata_hash[:existing_data]
|
21
|
+
Paperclip::HasAttachedFile.define_on(self.class, :asset, existing_metadata)
|
22
|
+
end
|
23
|
+
|
24
|
+
def data=(data_hash)
|
25
|
+
self.asset = data_hash.deep_symbolize_keys[:asset]
|
26
|
+
end
|
27
|
+
|
28
|
+
def data
|
29
|
+
{
|
30
|
+
<<<<<<< HEAD
|
31
|
+
'asset': {
|
32
|
+
'file_name': asset_file_name,
|
33
|
+
'url': asset.url,
|
34
|
+
'dimensions': dimensions,
|
35
|
+
'content_type': asset_content_type,
|
36
|
+
'file_size': asset_file_size,
|
37
|
+
'updated_at': asset_updated_at
|
38
|
+
},
|
39
|
+
'asset_field_type_id': id
|
40
|
+
=======
|
41
|
+
'asset': {
|
42
|
+
'file_name': asset_file_name,
|
43
|
+
'url': asset.url,
|
44
|
+
'style_urls': style_urls,
|
45
|
+
'dimensions': dimensions,
|
46
|
+
'content_type': asset_content_type,
|
47
|
+
'file_size': asset_file_size,
|
48
|
+
'updated_at': asset_updated_at
|
49
|
+
}
|
50
|
+
>>>>>>> Implement storage of thumbnail/style URLs, asset wizard info box, and asset thumbnail in index
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
def field_item_as_indexed_json_for_field_type(field_item, options = {})
|
55
|
+
json = {}
|
56
|
+
json[mapping_field_name] = asset_file_name
|
57
|
+
json
|
58
|
+
end
|
59
|
+
|
60
|
+
def mapping
|
61
|
+
{name: mapping_field_name, type: :string, analyzer: :keyword}
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def image?
|
67
|
+
asset_content_type =~ %r{^(image|(x-)?application)/(bmp|gif|jpeg|jpg|pjpeg|png|x-png)$}
|
68
|
+
end
|
69
|
+
|
70
|
+
def extract_dimensions
|
71
|
+
return unless image?
|
72
|
+
tempfile = asset.queued_for_write[:original]
|
73
|
+
unless tempfile.nil?
|
74
|
+
geometry = Paperclip::Geometry.from_file(tempfile)
|
75
|
+
@dimensions = {
|
76
|
+
width: geometry.width.to_i,
|
77
|
+
height: geometry.height.to_i
|
78
|
+
}
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def allowed_content_types
|
83
|
+
validations[:allowed_extensions].collect do |allowed_content_type|
|
84
|
+
MimeMagic.by_extension(allowed_content_type).type
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def mapping_field_name
|
89
|
+
"#{field_name.parameterize('_')}_asset_file_name"
|
90
|
+
end
|
91
|
+
|
92
|
+
def validate_presence?
|
93
|
+
validations.key? :presence
|
94
|
+
end
|
95
|
+
|
96
|
+
def attachment_size_validator
|
97
|
+
AttachmentSizeValidator.new(validations[:size].merge(attributes: :asset))
|
98
|
+
end
|
99
|
+
|
100
|
+
def attachment_content_type_validator
|
101
|
+
AttachmentContentTypeValidator.new({content_type: allowed_content_types}.merge(attributes: :asset))
|
102
|
+
end
|
103
|
+
|
104
|
+
alias_method :valid_presence_validation?, :validate_presence?
|
105
|
+
|
106
|
+
def validate_size?
|
107
|
+
begin
|
108
|
+
attachment_size_validator
|
109
|
+
true
|
110
|
+
rescue ArgumentError, NoMethodError
|
111
|
+
false
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def validate_content_type?
|
116
|
+
begin
|
117
|
+
attachment_content_type_validator
|
118
|
+
true
|
119
|
+
rescue ArgumentError, NoMethodError
|
120
|
+
false
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def validate_asset_size
|
125
|
+
attachment_size_validator.validate_each(self, :asset, asset)
|
126
|
+
end
|
127
|
+
|
128
|
+
def validate_asset_content_type
|
129
|
+
attachment_content_type_validator.validate_each(self, :asset, asset)
|
130
|
+
end
|
131
|
+
|
132
|
+
def style_urls
|
133
|
+
if existing_data.empty?
|
134
|
+
(metadata[:styles].map { |key, value| [key, asset.url(key)] }).to_h
|
135
|
+
else
|
136
|
+
existing_data[:asset][:style_urls]
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def existing_metadata
|
141
|
+
metadata.except!(:existing_data)
|
142
|
+
|
143
|
+
<<<<<<< HEAD
|
144
|
+
unless @existing_data.empty?
|
145
|
+
metadata[:path].gsub(":id", @existing_data['asset_field_type_id']) if metadata[:path]
|
146
|
+
=======
|
147
|
+
unless existing_data.empty?
|
148
|
+
metadata[:path] = updated_url(existing_data['asset']['url'])
|
149
|
+
>>>>>>> Implement storage of thumbnail/style URLs, asset wizard info box, and asset thumbnail in index
|
150
|
+
end
|
151
|
+
|
152
|
+
metadata
|
153
|
+
end
|
154
|
+
end
|
@@ -73,7 +73,7 @@ namespace :cortex do
|
|
73
73
|
"description": "Provide details and metadata that will enhance search or inform end-users.",
|
74
74
|
"columns": [
|
75
75
|
{
|
76
|
-
"grid_width":
|
76
|
+
"grid_width": 6,
|
77
77
|
"elements": [
|
78
78
|
{
|
79
79
|
"id": media.fields[1].id
|
@@ -95,6 +95,20 @@ namespace :cortex do
|
|
95
95
|
"id": media.fields[5].id
|
96
96
|
}
|
97
97
|
]
|
98
|
+
},
|
99
|
+
{
|
100
|
+
"grid_width": 6,
|
101
|
+
"elements": [
|
102
|
+
{
|
103
|
+
"plugin": {
|
104
|
+
"class_name": "plugins/core/asset_info",
|
105
|
+
"render_method": "show",
|
106
|
+
"data": {
|
107
|
+
"field_id": media.fields.find_by_name('Asset').id
|
108
|
+
}
|
109
|
+
}
|
110
|
+
},
|
111
|
+
]
|
98
112
|
}
|
99
113
|
]
|
100
114
|
}
|
@@ -118,12 +132,16 @@ namespace :cortex do
|
|
118
132
|
"name": "Thumbnail",
|
119
133
|
"cells": [{
|
120
134
|
"field": {
|
121
|
-
"
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
135
|
+
"plugin": {
|
136
|
+
"class_name": "plugins/core/asset_info",
|
137
|
+
"render_method": "index",
|
138
|
+
"data": {
|
139
|
+
"field_id": media.fields.find_by_name('Asset').id
|
140
|
+
},
|
141
|
+
"config": {
|
142
|
+
"thumbnail_style": "mini"
|
143
|
+
}
|
144
|
+
}
|
127
145
|
}
|
128
146
|
}]
|
129
147
|
},
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cortex-plugins-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- CareerBuilder Employer Site & Content Products
|
@@ -121,6 +121,9 @@ files:
|
|
121
121
|
- app/assets/javascripts/cortex-field_types-core/application.js
|
122
122
|
- app/cells/plugins/core/asset/input.haml
|
123
123
|
- app/cells/plugins/core/asset_cell.rb
|
124
|
+
- app/cells/plugins/core/asset_info/index.haml
|
125
|
+
- app/cells/plugins/core/asset_info/show.haml
|
126
|
+
- app/cells/plugins/core/asset_info_cell.rb
|
124
127
|
- app/cells/plugins/core/boolean/checkbox.haml
|
125
128
|
- app/cells/plugins/core/boolean/switch.haml
|
126
129
|
- app/cells/plugins/core/boolean_cell.rb
|
@@ -141,6 +144,7 @@ files:
|
|
141
144
|
- app/cells/plugins/core/user/dropdown.haml
|
142
145
|
- app/cells/plugins/core/user_cell.rb
|
143
146
|
- app/models/asset_field_type.rb
|
147
|
+
- app/models/asset_field_type.rb.orig
|
144
148
|
- app/models/boolean_field_type.rb
|
145
149
|
- app/models/date_time_field_type.rb
|
146
150
|
- app/models/tag_field_type.rb
|