tb_media 1.0

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.
Files changed (61) hide show
  1. checksums.yaml +15 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +28 -0
  4. data/Readme.markdown +73 -0
  5. data/app/assets/images/spud/admin/files_thumbs/dat_thumb.png +0 -0
  6. data/app/assets/images/spud/admin/files_thumbs/doc_thumb.png +0 -0
  7. data/app/assets/images/spud/admin/files_thumbs/jpg_thumb.png +0 -0
  8. data/app/assets/images/spud/admin/files_thumbs/mp3_thumb.png +0 -0
  9. data/app/assets/images/spud/admin/files_thumbs/pdf_thumb.png +0 -0
  10. data/app/assets/images/spud/admin/files_thumbs/png_thumb.png +0 -0
  11. data/app/assets/images/spud/admin/files_thumbs/ppt_thumb.png +0 -0
  12. data/app/assets/images/spud/admin/files_thumbs/txt_thumb.png +0 -0
  13. data/app/assets/images/spud/admin/files_thumbs/xls_thumb.png +0 -0
  14. data/app/assets/images/spud/admin/files_thumbs/zip_thumb.png +0 -0
  15. data/app/assets/images/spud/admin/media/checkers.jpg +0 -0
  16. data/app/assets/images/spud/admin/media_thumb.png +0 -0
  17. data/app/assets/images/spud/admin/media_thumb@2x.png +0 -0
  18. data/app/assets/images/spud/admin/media_tiny.png +0 -0
  19. data/app/assets/javascripts/spud/admin/media/application.js +175 -0
  20. data/app/assets/javascripts/spud/admin/media/picker.js +219 -0
  21. data/app/assets/javascripts/spud/admin/media/plugin.js +99 -0
  22. data/app/assets/libs/jcrop/css/Jcrop.gif +0 -0
  23. data/app/assets/libs/jcrop/css/jquery.Jcrop.css +165 -0
  24. data/app/assets/libs/jcrop/css/jquery.Jcrop.min.css +29 -0
  25. data/app/assets/libs/jcrop/js/jquery.Jcrop.js +1694 -0
  26. data/app/assets/libs/jcrop/js/jquery.Jcrop.min.js +22 -0
  27. data/app/assets/libs/jcrop/js/jquery.color.js +661 -0
  28. data/app/assets/libs/jcrop/js/jquery.min.js +4 -0
  29. data/app/assets/libs/tiny_mce/plugins/spud_media/blank.htm +12 -0
  30. data/app/assets/libs/tiny_mce/plugins/spud_media/css/template.css +23 -0
  31. data/app/assets/libs/tiny_mce/plugins/spud_media/editor_plugin.js +1 -0
  32. data/app/assets/libs/tiny_mce/plugins/spud_media/editor_plugin_src.js +159 -0
  33. data/app/assets/libs/tiny_mce/plugins/spud_media/js/template.js +106 -0
  34. data/app/assets/libs/tiny_mce/plugins/spud_media/langs/en_dlg.js +1 -0
  35. data/app/assets/libs/tiny_mce/plugins/spud_media/template.htm +31 -0
  36. data/app/assets/stylesheets/spud/admin/media/application.css +103 -0
  37. data/app/assets/stylesheets/spud/admin/media/plugin.css +154 -0
  38. data/app/controllers/protected_media_controller.rb +26 -0
  39. data/app/controllers/spud/admin/media_controller.rb +73 -0
  40. data/app/controllers/spud/admin/media_picker_controller.rb +28 -0
  41. data/app/helpers/protected_media_helper.rb +3 -0
  42. data/app/helpers/spud/admin/users_helper.rb +2 -0
  43. data/app/helpers/spud/user_sessions_helper.rb +2 -0
  44. data/app/models/spud_media.rb +154 -0
  45. data/app/views/spud/admin/media/edit.html.erb +50 -0
  46. data/app/views/spud/admin/media/index.html.erb +37 -0
  47. data/app/views/spud/admin/media/new.html.erb +26 -0
  48. data/app/views/spud/admin/media_picker/_media.html.erb +19 -0
  49. data/app/views/spud/admin/media_picker/create.html.erb +1 -0
  50. data/app/views/spud/admin/media_picker/create.js.erb +1 -0
  51. data/app/views/spud/admin/media_picker/index.html.erb +103 -0
  52. data/config/routes.rb +13 -0
  53. data/db/migrate/20120101194256_create_spud_media.rb +11 -0
  54. data/db/migrate/20120501203325_add_protected_to_spud_media.rb +6 -0
  55. data/db/migrate/20120508132153_add_cropping_to_spud_media.rb +9 -0
  56. data/lib/spud_media/configuration.rb +11 -0
  57. data/lib/spud_media/engine.rb +16 -0
  58. data/lib/spud_media/version.rb +5 -0
  59. data/lib/tasks/spud_media_tasks.rake +15 -0
  60. data/lib/tb_media.rb +6 -0
  61. metadata +257 -0
@@ -0,0 +1,103 @@
1
+ /*
2
+ *= require jcrop/css/jquery.Jcrop
3
+ *= require spud/admin/media/plugin
4
+ */
5
+
6
+ img.size-50-thumb {
7
+ width:50px;
8
+ padding-right:5px;
9
+ }
10
+ #details{
11
+ padding-bottom: 25px;
12
+ }
13
+ .page_row{
14
+ padding: 5px 0 5px 5px;
15
+ }
16
+
17
+ /* Crop tool
18
+ ------------------------ */
19
+ #spud_media_cropper_outer{
20
+ width: 900px;
21
+ /*height: 800px;*/
22
+ margin:auto;
23
+ border: 1px solid #ccc;
24
+ border-top: none;
25
+ }
26
+ #spud_media_cropper{
27
+ position: relative;
28
+ overflow: hidden;
29
+ width: 900px;
30
+ /*height: 800px;*/
31
+ background:url('/assets/spud/admin/media/checkers.jpg');
32
+ margin:auto;
33
+ }
34
+ #spud_media_cropper_container{
35
+
36
+ }
37
+ #spud_media_cropper_jcrop_container{
38
+ position: absolute;
39
+ }
40
+ #spud_media_cropper_target{
41
+ position: absolute;
42
+ }
43
+ #spud_media_cropper_image{
44
+ position: absolute;
45
+ }
46
+
47
+ /* Crop toolbar
48
+ ------------------ */
49
+ #spud_media_cropper_toolbar{
50
+ font-size: 11px;
51
+ background: #ccc;
52
+ width: 882px;
53
+ margin:0 auto;
54
+ padding: 5px 10px;
55
+ border-top-right-radius: 8px;
56
+ border-top-left-radius: 8px;
57
+ background-image: linear-gradient(bottom, rgb(204,204,204) 33%, rgb(230,230,230) 66%);
58
+ background-image: -o-linear-gradient(bottom, rgb(204,204,204) 33%, rgb(230,230,230) 66%);
59
+ background-image: -moz-linear-gradient(bottom, rgb(204,204,204) 33%, rgb(230,230,230) 66%);
60
+ background-image: -webkit-linear-gradient(bottom, rgb(204,204,204) 33%, rgb(230,230,230) 66%);
61
+ background-image: -ms-linear-gradient(bottom, rgb(204,204,204) 33%, rgb(230,230,230) 66%);
62
+ background-image: -webkit-gradient(
63
+ linear,
64
+ left bottom,
65
+ left top,
66
+ color-stop(0.33, rgb(204,204,204)),
67
+ color-stop(0.66, rgb(230,230,230))
68
+ );
69
+ clear: both;
70
+ }
71
+ #spud_media_cropper_toolbar form{
72
+ margin: 0;
73
+ -webkit-touch-callout: none;
74
+ -webkit-user-select: none;
75
+ -khtml-user-select: none;
76
+ -moz-user-select: none;
77
+ -ms-user-select: none;
78
+ user-select: none;
79
+ }
80
+ #spud_media_cropper_toolbar input[type=text],
81
+ #spud_media_cropper_toolbar label{
82
+ display: inline-block;
83
+ margin: 0;
84
+ font-size: 11px;
85
+ height: 11px;
86
+ line-height: 11px;
87
+ }
88
+ #spud_media_cropper_toolbar input[type=text]{
89
+ width: 30px;
90
+ }
91
+ .spud_media_cropper_toolbar_item{
92
+ margin-right: 6px;
93
+ padding-right: 6px;
94
+ display: inline-block;
95
+ border-right: 1px solid #ccc;
96
+ }
97
+ #spud_media_cropper_toolbar_actions{
98
+ float: right;
99
+ }
100
+ a[id^="spud_media_cropper_resize_"]:active{
101
+ position: relative;
102
+ top: 1px;
103
+ }
@@ -0,0 +1,154 @@
1
+ .spud_media_picker{
2
+ background: white;
3
+ font: normal 12px/12px sans-serif;
4
+ }
5
+ .spud_media_picker_container{
6
+ padding: 10px;
7
+ }
8
+
9
+ /* Picker Tabs
10
+ -------------- */
11
+ .spud_media_picker_tabs{
12
+ border-bottom: 1px solid #ccc;
13
+ margin: 0 0 10px;
14
+ }
15
+ .spud_media_picker_tab{
16
+ display: inline-block;
17
+ font: normal 12px/22px sans-serif;
18
+ padding: 0 5px;
19
+ margin: 0 5px 0 0;
20
+ position: relative;
21
+ top: 1px;
22
+ -webkit-touch-callout: none;
23
+ -webkit-user-select: none;
24
+ -khtml-user-select: none;
25
+ -moz-user-select: none;
26
+ -ms-user-select: none;
27
+ user-select: none;
28
+ }
29
+ .spud_media_picker_tab_active{
30
+ border: 1px solid #ccc;
31
+ border-bottom: 1px solid white;
32
+ }
33
+ .spud_media_picker_tab_body{
34
+ display: none;
35
+ height: 200px;
36
+ padding-bottom: 40px;
37
+ position: relative;
38
+ }
39
+
40
+ /* Buttons
41
+ ------------ */
42
+ .spud_media_picker_buttons{
43
+ position: absolute;
44
+ bottom: 0;
45
+ left: 0;
46
+ width: 100%;
47
+ }
48
+ .spud_media_picker_buttons a, .spud_media_picker_buttons input, .spud_media_picker_buttons button{
49
+ float: right;
50
+ margin-left: 5px;
51
+ }
52
+ .spud_media_picker label{
53
+ font-size: 12px;
54
+ }
55
+
56
+ /* Uploader
57
+ ------------ */
58
+ .spud_media_picker_upload_progress{
59
+ display: none;
60
+ }
61
+ .spud_media_picker_upload_progress .bar{
62
+ width: 0;
63
+ }
64
+
65
+ /* Picker List
66
+ --------------- */
67
+ .spud_media_picker_list{
68
+ height: 100%;
69
+ width: 200px;
70
+ overflow: auto;
71
+ border: 1px solid #ccc;
72
+ float: left;
73
+ margin: 0 0 10px 0;
74
+ }
75
+ .spud_media_picker_item{
76
+ cursor: pointer;
77
+ padding: 3px;
78
+ font: normal 12px/20px sans-serif;
79
+ border-top: 1px solid #ccc;
80
+ overflow: hidden;
81
+ height: 20px;
82
+ white-space: nowrap;
83
+ -webkit-touch-callout: none;
84
+ -webkit-user-select: none;
85
+ -khtml-user-select: none;
86
+ -moz-user-select: none;
87
+ -ms-user-select: none;
88
+ user-select: none;
89
+ }
90
+ .spud_media_picker_item:first-child{
91
+ border-top: none;
92
+ }
93
+ .spud_media_picker_item:last-child{
94
+ border-bottom: 1px solid #ccc;
95
+ }
96
+ .spud_media_picker_item:hover{
97
+ background: #E6E6E6;
98
+ }
99
+ .spud_media_picker_item_selected{
100
+ background: #D6E4F5;
101
+ }
102
+ .spud_media_picker_item img{
103
+ max-width: 20px;
104
+ max-height: 20px;
105
+ float: left;
106
+ margin: 0 4px 0 0;
107
+ }
108
+
109
+ /* Picker Details
110
+ -------------------- */
111
+ .spud_media_picker_details{
112
+ margin: 0 0 0 220px;
113
+ display: none;
114
+ overflow-x: hidden;
115
+ }
116
+ .spud_media_picker_details_thumb{
117
+ max-width: 100px;
118
+ max-height: 100px;
119
+ }
120
+ .spud_media_picker_details_meta{
121
+ font: bold 11px sans-serif;
122
+ margin: 10px 0 0;
123
+ padding: 0 0 0 15px;
124
+ white-space: nowrap;
125
+ }
126
+ .spud_media_picker_details_meta span{
127
+ font-weight: normal;
128
+ }
129
+
130
+ /* Advanced Options
131
+ ------------------- */
132
+ .spud_media_picker_tab_advanced{
133
+
134
+ }
135
+ .spud_media_picker_option{
136
+ margin: 10px 0;
137
+ }
138
+ .spud_media_picker_tab_advanced label{
139
+ width: 100px;
140
+ padding: 0 5px 0 0;
141
+ text-align: right;
142
+ }
143
+ .spud_media_picker_tab_advanced label, .spud_media_picker_tab_advanced select, .spud_media_picker_tab_advanced input{
144
+ display: inline-block;
145
+ margin: 0;
146
+ }
147
+ .spud_media_picker_tab_advanced select{
148
+ font: normal 12px/12px sans-serif;
149
+ height: auto;
150
+ padding: 0;
151
+ }
152
+ .spud_media_picker_option_dimensions input{
153
+ width: 50px;
154
+ }
@@ -0,0 +1,26 @@
1
+ class ProtectedMediaController < Spud::ApplicationController
2
+
3
+ before_filter :require_user
4
+
5
+ def show
6
+ @media = SpudMedia.where(:id => params[:id]).first
7
+ if @media.blank?
8
+ flash[:error] = "The requested file could not be found"
9
+ redirect_to(root_url)
10
+ else
11
+ if Spud::Media.config.paperclip_storage == :s3
12
+ secure_url = @media.attachment.s3_object(params[:style]).url_for(:read, :secure => true, :expires => 10.minutes)
13
+ redirect_to(secure_url.to_s)
14
+ else
15
+ filepath = File.join(Rails.root, @media.attachment.path(params[:style]))
16
+ if !File.exists?(filepath)
17
+ flash[:error] = "The requested file could not be found"
18
+ redirect_to root_path
19
+ else
20
+ send_file(filepath, :disposition => 'inline')
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,73 @@
1
+ class Spud::Admin::MediaController < Spud::Admin::ApplicationController
2
+ layout 'layouts/spud/admin/detail'
3
+ add_breadcrumb "Media", :spud_admin_media_path
4
+ belongs_to_spud_app :media
5
+ before_filter :load_media,:only => [:edit,:update,:show,:destroy,:set_private,:set_access]
6
+
7
+ def index
8
+ @media = SpudMedia.order("created_at DESC").paginate :page => params[:page]
9
+ respond_with @media
10
+ end
11
+
12
+ def new
13
+ @page_name = "New Media"
14
+ add_breadcrumb "New", :new_spud_admin_medium_path
15
+ @media = SpudMedia.new
16
+ respond_with @media
17
+ end
18
+
19
+ def create
20
+ @page_name = "New Media"
21
+ add_breadcrumb "New", :new_spud_admin_medium_path
22
+ @media = SpudMedia.new(params[:spud_media])
23
+ location = spud_admin_media_path
24
+ if @media.save
25
+ flash[:notice] = "File uploaded successfully"
26
+ if @media.is_image?
27
+ location = edit_spud_admin_medium_path(@media.id)
28
+ end
29
+ end
30
+ respond_with @media, :location => location
31
+ end
32
+
33
+ def show
34
+ @page_name = "Media: #{@media.attachment_file_name}"
35
+ add_breadcrumb @media.attachment_file_name, :new_spud_admin_media_path
36
+ respond_with @media
37
+ end
38
+
39
+ def edit
40
+ if !@media.is_image?
41
+ flash[:error] = "Unable to edit #{@media.attachment_file_name}"
42
+ redirect_to spud_admin_media_url
43
+ end
44
+ end
45
+
46
+ def update
47
+ if @media.update_attributes(params[:spud_media])
48
+ @media.attachment.reprocess!
49
+ end
50
+ respond_with @media, :location => spud_admin_media_url
51
+ end
52
+
53
+ def destroy
54
+ flash[:notice] = "File successfully destroyed" if @media.destroy
55
+ respond_with @media, :location => spud_admin_media_url
56
+ end
57
+
58
+ def set_access
59
+ is_protected = params[:protected] || false
60
+ @media.update_attribute(:is_protected, is_protected)
61
+ respond_with @media, :location => spud_admin_media_url
62
+ end
63
+
64
+ private
65
+ def load_media
66
+ @media = SpudMedia.where(:id => params[:id]).first
67
+ if @media.blank?
68
+ flash[:error] = "Media Asset not found!"
69
+ redirect_to spud_admin_media_url() and return
70
+ end
71
+
72
+ end
73
+ end
@@ -0,0 +1,28 @@
1
+ class Spud::Admin::MediaPickerController < Spud::Admin::ApplicationController
2
+
3
+ include RespondsToParent
4
+
5
+ layout false
6
+ respond_to :html
7
+
8
+ def index
9
+ @media = SpudMedia.all
10
+ respond_with @media
11
+ end
12
+
13
+ def create
14
+ @media = SpudMedia.new(params[:spud_media])
15
+ if @media.save
16
+ if request.xhr?
17
+ render 'create', :status => 200
18
+ else
19
+ respond_to_parent do
20
+ render 'create.js', :status => 200
21
+ end
22
+ end
23
+ else
24
+ render nil, :status => 422
25
+ end
26
+ end
27
+
28
+ end
@@ -0,0 +1,3 @@
1
+ module ProtectedMediaHelper
2
+
3
+ end
@@ -0,0 +1,2 @@
1
+ module Spud::Admin::UsersHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module Spud::UserSessionsHelper
2
+ end
@@ -0,0 +1,154 @@
1
+ class SpudMedia < ActiveRecord::Base
2
+
3
+ has_attached_file :attachment,
4
+ :storage => Spud::Media.paperclip_storage,
5
+ :s3_credentials => Spud::Media.s3_credentials,
6
+ :s3_permissions => lambda { |attachment, style|
7
+ attachment.instance.is_protected ? 'private' : 'public-read'
8
+ },
9
+ :path => Spud::Media.paperclip_storage == :s3 ? Spud::Media.storage_path : lambda { |attachment|
10
+ attachment.instance.is_protected ? Spud::Media.storage_path_protected : Spud::Media.storage_path
11
+ },
12
+ :url => Spud::Media.storage_url,
13
+ :styles => lambda { |attachment| attachment.instance.dynamic_styles }
14
+
15
+ attr_accessible :attachment_content_type,:attachment_file_name,:attachment_file_size,:attachment, :is_protected, :crop_x, :crop_y, :crop_w, :crop_h, :crop_s
16
+
17
+ validates_numericality_of :crop_x, :crop_y, :crop_w, :crop_h, :crop_s, :allow_nil => true
18
+
19
+ before_create :rename_file
20
+ #after_create :validate_permissions
21
+ before_update :validate_permissions
22
+
23
+ def rename_file
24
+ # remove periods and other unsafe characters from file name to make routing easier
25
+ extension = File.extname(attachment_file_name)
26
+ filename = attachment_file_name.chomp(extension).parameterize
27
+ attachment.instance_write :file_name, filename + extension
28
+ end
29
+
30
+ def image_from_type
31
+
32
+ if self.is_image? || self.is_pdf?
33
+ return self.attachment_url(:small)
34
+
35
+ elsif self.attachment_content_type.blank?
36
+ return "spud/admin/files_thumbs/dat_thumb.png"
37
+
38
+ elsif self.attachment_content_type.match(/jpeg|jpg/)
39
+ return "spud/admin/files_thumbs/jpg_thumb.png"
40
+
41
+ elsif self.attachment_content_type.match(/png/)
42
+ return "spud/admin/files_thumbs/png_thumb.png"
43
+
44
+ elsif self.attachment_content_type.match(/zip|tar|tar\.gz|gz/)
45
+ return "spud/admin/files_thumbs/zip_thumb.png"
46
+
47
+ elsif self.attachment_content_type.match(/xls|xlsx/)
48
+ return "spud/admin/files_thumbs/xls_thumb.png"
49
+
50
+ elsif self.attachment_content_type.match(/doc|docx/)
51
+ return "spud/admin/files_thumbs/doc_thumb.png"
52
+
53
+ elsif self.attachment_content_type.match(/ppt|pptx/)
54
+ return "spud/admin/files_thumbs/ppt_thumb.png"
55
+
56
+ elsif self.attachment_content_type.match(/txt|text/)
57
+ return "spud/admin/files_thumbs/txt_thumb.png"
58
+
59
+ elsif self.attachment_content_type.match(/pdf|ps/)
60
+ return "spud/admin/files_thumbs/pdf_thumb.png"
61
+
62
+ elsif self.attachment_content_type.match(/mp3|wav|aac/)
63
+ return "spud/admin/files_thumbs/mp3_thumb.png"
64
+ end
65
+
66
+ return "spud/admin/files_thumbs/dat_thumb.png"
67
+ end
68
+
69
+ def is_image?
70
+ if self.attachment_content_type.match(/jpeg|jpg|png/)
71
+ return true
72
+ else
73
+ return false
74
+ end
75
+ end
76
+
77
+ def is_pdf?
78
+ if self.attachment_content_type.match(/pdf/)
79
+ return true
80
+ else
81
+ return false
82
+ end
83
+ end
84
+
85
+ def has_custom_crop?
86
+ return (crop_x && crop_y && crop_w && crop_h && crop_s)
87
+ end
88
+
89
+ def dynamic_styles
90
+ styles = {}
91
+ if is_image? || is_pdf?
92
+ styles[:small] = '50'
93
+ if has_custom_crop?
94
+ styles[:cropped] = {:geometry => '', :convert_options => "-resize #{crop_s}% -crop #{crop_w}x#{crop_h}+#{crop_x}+#{crop_y}"}
95
+ end
96
+ end
97
+ return styles
98
+ end
99
+
100
+ # if you are using S3, attachment.url will automatically point to the S3 url
101
+ # protected files need to hit the rails middle-man first
102
+ # this method will provide the correct url for either case
103
+ def attachment_url(style=nil)
104
+ # defaults to cropped style if that style exists, otherwise use original
105
+ if !style
106
+ style = (is_image? && has_custom_crop?) ? 'cropped' : 'original'
107
+ end
108
+ if Spud::Media.paperclip_storage == :s3 && is_protected
109
+ return Paperclip::Interpolations.interpolate(Spud::Media.config.storage_url, attachment, style)
110
+ else
111
+ return attachment.url(style)
112
+ end
113
+ end
114
+
115
+ # If is_protected has changed, we need to make sure we are setting the appropriate permissions
116
+ # This means either moving the file in the filesystem or setting the appropriate ACL in S3
117
+ def validate_permissions
118
+ if Spud::Media.config.paperclip_storage == :filesystem
119
+ validate_permissions_filesystem
120
+ elsif Spud::Media.config.paperclip_storage == :s3
121
+ validate_permissions_s3
122
+ end
123
+ end
124
+
125
+ private
126
+
127
+ def validate_permissions_filesystem
128
+ if is_protected
129
+ old_path = Paperclip::Interpolations.interpolate(Spud::Media.config.storage_path, attachment, 'original')
130
+ new_path = Paperclip::Interpolations.interpolate(Spud::Media.config.storage_path_protected, attachment, 'original')
131
+ else
132
+ old_path = Paperclip::Interpolations.interpolate(Spud::Media.config.storage_path_protected, attachment, 'original')
133
+ new_path = Paperclip::Interpolations.interpolate(Spud::Media.config.storage_path, attachment, 'original')
134
+ end
135
+ new_base_dir = File.dirname(File.dirname(new_path))
136
+ old_base_dir= File.dirname(File.dirname(old_path))
137
+ if File.directory?(old_base_dir)
138
+ FileUtils.mv(old_base_dir, new_base_dir)
139
+ end
140
+ end
141
+
142
+ def validate_permissions_s3
143
+ if is_protected
144
+ attachment.s3_object(:original).acl = :private
145
+ attachment.s3_object(:cropped).acl = :private if attachment.s3_object(:cropped).exists?
146
+ attachment.s3_object(:small).acl = :private if attachment.s3_object(:small).exists?
147
+ else
148
+ attachment.s3_object(:original).acl = :public_read
149
+ attachment.s3_object(:cropped).acl = :public_read if attachment.s3_object(:cropped).exists?
150
+ attachment.s3_object(:small).acl = :public_read if attachment.s3_object(:small).exists?
151
+ end
152
+ end
153
+
154
+ end
@@ -0,0 +1,50 @@
1
+ <%= error_messages_for(@media) %>
2
+
3
+ <div id="spud_media_cropper_toolbar">
4
+ <%= form_for @media, :url => spud_admin_medium_path(@media) do |f| %>
5
+
6
+ <div class="spud_media_cropper_toolbar_item">
7
+ <%= label_tag :x %>
8
+ <%= f.text_field :crop_x %>
9
+ </div>
10
+
11
+ <div class="spud_media_cropper_toolbar_item">
12
+ <%= label_tag :y %>
13
+ <%= f.text_field :crop_y %>
14
+ </div>
15
+
16
+ <div class="spud_media_cropper_toolbar_item">
17
+ <%= label_tag :width %>
18
+ <%= f.text_field :crop_w %>
19
+ </div>
20
+
21
+ <div class="spud_media_cropper_toolbar_item">
22
+ <%= label_tag :height %>
23
+ <%= f.text_field :crop_h %>
24
+ </div>
25
+
26
+ <div class="spud_media_cropper_toolbar_item">
27
+ <%= label_tag :scale, 'Size' %>
28
+ <%= f.hidden_field :crop_s %>
29
+ <a href="#" id="spud_media_cropper_resize_up"><i class="icon-plus"></i></a>
30
+ <a href="#" id="spud_media_cropper_resize_down"><i class="icon-minus"></i></a>
31
+ </div>
32
+
33
+ <div id="spud_media_cropper_toolbar_actions">
34
+ <%= f.submit 'Crop', :id => 'spud_media_cropper_submit', :class => 'btn btn-mini btn-primary' %>
35
+ <%= link_to "Don't Crop", spud_admin_media_path, :class => 'btn btn-mini' %>
36
+ </div>
37
+ <% end %>
38
+ </div>
39
+
40
+ <div id="spud_media_cropper_outer">
41
+ <div id="spud_media_cropper">
42
+ <div id="spud_media_cropper_jcrop_container">
43
+ <img src="<%= @media.attachment_url(:original) %>" id="spud_media_cropper_image" />
44
+ </div>
45
+ </div>
46
+ </div>
47
+
48
+ <script type="text/javascript">
49
+ $(window).load(spud.admin.media.edit);
50
+ </script>
@@ -0,0 +1,37 @@
1
+ <%=content_for :data_controls do%>
2
+ <%=link_to "Upload File",new_spud_admin_medium_path(),:class => "btn btn-primary",:title => "Upload File"%>
3
+ <%end%>
4
+ <%=content_for :detail do%>
5
+ <div class="page_list">
6
+ <%@media.each do |media|%>
7
+ <div class="page_row">
8
+
9
+ <span class="row_meta">
10
+ <% if media.is_protected && (media.is_image? || media.is_pdf?) %>
11
+ <img src="<%= media.image_from_type %>" class="size-50-thumb" />
12
+ <% else %>
13
+ <%= image_tag(media.image_from_type, :class => "size-50-thumb") %>
14
+ <% end %>
15
+ <%= link_to media.attachment.url.split("/").last, media.attachment_url %>
16
+ </span>
17
+
18
+ <span class="edit_controls">
19
+ <% if media.is_image? %>
20
+ <%= link_to 'Crop', edit_spud_admin_medium_path(media.id), :class => 'btn' %>
21
+ <% end %>
22
+ <% if media.is_protected %>
23
+ <%= link_to raw('<i class="icon-lock"></i> Protected'), set_access_spud_admin_medium_path(media.id, :protected => false), :method => :put, :class => 'btn' %>
24
+ <% else %>
25
+ <%= link_to 'Public', set_access_spud_admin_medium_path(media.id, :protected => true), :method => :put, :class => 'btn' %>
26
+ <% end %>
27
+ <%=link_to "Remove", spud_admin_medium_path(:id => media.id),:method => :delete,:class => 'btn btn-danger',:confirm => "Are you sure you want to remove this file?"%>
28
+ </span>
29
+
30
+ <br style="clear:both;"/>
31
+ </div>
32
+ <%end%>
33
+ <%=will_paginate @media%>
34
+
35
+ </div>
36
+
37
+ <%end%>
@@ -0,0 +1,26 @@
1
+
2
+
3
+
4
+ <%=form_for @media,:url => spud_admin_media_path(),:html=>{:class=>"form-horizontal", :multipart => true} do |f|%>
5
+ <fieldset>
6
+ <legend>Upload Media</legend>
7
+
8
+ <div class="control-group">
9
+ <%=f.label :attachment, "Choose File",:class =>"control-label"%>
10
+ <div class="controls">
11
+ <%=f.file_field :attachment%>
12
+ </div>
13
+ </div>
14
+
15
+ <div class="control-group">
16
+ <%= f.label :is_protected, 'Protected File', :class => 'control-label' %>
17
+ <div class="controls">
18
+ <%= f.check_box :is_protected %>
19
+ </div>
20
+ </div>
21
+
22
+ <div class="form-actions">
23
+ <%=f.submit "Upload", :class=>"btn btn-primary","data-loading-text"=>"Uploading..."%> or <%=link_to "cancel",spud_admin_media_path,:class => "btn"%>
24
+ </div>
25
+ <%end%>
26
+
@@ -0,0 +1,19 @@
1
+ <%= content_tag :div, :class => 'spud_media_picker_item',
2
+ 'data-id' => media.id,
3
+ 'data-type' => (media.is_image? ? 'img' : 'file'),
4
+ 'data-url' => media.attachment.url,
5
+ 'data-name' => media.attachment_file_name,
6
+ 'data-size' => media.attachment_file_size,
7
+ 'data-lastmod' => media.attachment_updated_at.blank? == false ? media.attachment_updated_at.strftime("%l:%M %p, %D") : '',
8
+ 'data-protected' => (media.is_protected ? 'Yes' : 'No') do %>
9
+ <span class="spud_media_picker_item_thumb">
10
+ <% if media.is_protected && (media.is_image? || media.is_pdf?) %>
11
+ <img src="<%= media.image_from_type %>"/>
12
+ <% else %>
13
+ <%= image_tag(media.image_from_type) %>
14
+ <% end %>
15
+ </span>
16
+ <span class="spud_media_picker_item_filename">
17
+ <%= media.attachment_file_name %>
18
+ </span>
19
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= render :partial => 'media', :locals => {:media => @media} %>
@@ -0,0 +1 @@
1
+ spud.admin.mediapicker.onLegacyUploadComplete("<%= escape_javascript(render :partial => 'media', :locals => {:media => @media}) %>");