tb_media 1.0

Sign up to get free protection for your applications and to get access to all the features.
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}) %>");