asset_host_core 2.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (199) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.markdown +138 -0
  3. data/Rakefile +11 -0
  4. data/app/assets/images/asset_host_core/alert-overlay.png +0 -0
  5. data/app/assets/images/asset_host_core/arrow-left.gif +0 -0
  6. data/app/assets/images/asset_host_core/arrow-right.gif +0 -0
  7. data/app/assets/images/asset_host_core/fallback-img-rect.png +0 -0
  8. data/app/assets/images/asset_host_core/videoplayer-play.png +0 -0
  9. data/app/assets/images/asset_host_core/x.png +0 -0
  10. data/app/assets/javascripts/asset_host_core/admin/assets.js.coffee +221 -0
  11. data/app/assets/javascripts/asset_host_core/application.js +20 -0
  12. data/app/assets/javascripts/asset_host_core/assetadmin.js.coffee +56 -0
  13. data/app/assets/javascripts/asset_host_core/assethost.js.coffee.erb +17 -0
  14. data/app/assets/javascripts/asset_host_core/browserui.js.coffee +139 -0
  15. data/app/assets/javascripts/asset_host_core/chooserui.js.coffee +381 -0
  16. data/app/assets/javascripts/asset_host_core/client.js.coffee +29 -0
  17. data/app/assets/javascripts/asset_host_core/clients/BrightcoveVideo.js.coffee +64 -0
  18. data/app/assets/javascripts/asset_host_core/clients/templates/brightcove_embed.jst.eco +18 -0
  19. data/app/assets/javascripts/asset_host_core/clients/templates/vimeo_embed.jst.eco +1 -0
  20. data/app/assets/javascripts/asset_host_core/clients/templates/youtube_embed.jst.eco +1 -0
  21. data/app/assets/javascripts/asset_host_core/clients/vimeo_video.js.coffee +21 -0
  22. data/app/assets/javascripts/asset_host_core/clients/youtube_video.js.coffee +21 -0
  23. data/app/assets/javascripts/asset_host_core/cmsplugin.js.coffee +235 -0
  24. data/app/assets/javascripts/asset_host_core/models.js.coffee +586 -0
  25. data/app/assets/javascripts/asset_host_core/railsCMS.js.coffee +141 -0
  26. data/app/assets/javascripts/asset_host_core/slideshow.js.coffee +428 -0
  27. data/app/assets/javascripts/asset_host_core/templates/after_upload_button.jst.eco +3 -0
  28. data/app/assets/javascripts/asset_host_core/templates/asset_drop_asset.jst.eco +4 -0
  29. data/app/assets/javascripts/asset_host_core/templates/asset_modal.jst.eco +13 -0
  30. data/app/assets/javascripts/asset_host_core/templates/asset_preview.jst.eco +35 -0
  31. data/app/assets/javascripts/asset_host_core/templates/asset_search.jst.eco +2 -0
  32. data/app/assets/javascripts/asset_host_core/templates/browser_asset.jst.eco +1 -0
  33. data/app/assets/javascripts/asset_host_core/templates/browser_asset_tip.jst.eco +3 -0
  34. data/app/assets/javascripts/asset_host_core/templates/edit_modal.jst.eco +40 -0
  35. data/app/assets/javascripts/asset_host_core/templates/import_help.jst.eco +59 -0
  36. data/app/assets/javascripts/asset_host_core/templates/pagination_link.jst.eco +1 -0
  37. data/app/assets/javascripts/asset_host_core/templates/pagination_links.jst.eco +13 -0
  38. data/app/assets/javascripts/asset_host_core/templates/queued_file.jst.eco +11 -0
  39. data/app/assets/javascripts/asset_host_core/templates/save_and_close_view.jst.eco +4 -0
  40. data/app/assets/javascripts/asset_host_core/templates/upload_all_button.jst.eco +4 -0
  41. data/app/assets/javascripts/asset_host_core/templates/url_input.jst.eco +8 -0
  42. data/app/assets/stylesheets/asset_host_core/application.css.scss +384 -0
  43. data/app/assets/stylesheets/asset_host_core/jquery-ui.css +105 -0
  44. data/app/assets/stylesheets/asset_host_core/public.css.scss +204 -0
  45. data/app/assets/stylesheets/asset_host_core/slidetest.css.scss +93 -0
  46. data/app/controllers/asset_host_core/admin/api_users_controller.rb +72 -0
  47. data/app/controllers/asset_host_core/admin/assets_controller.rb +140 -0
  48. data/app/controllers/asset_host_core/admin/base_controller.rb +36 -0
  49. data/app/controllers/asset_host_core/admin/home_controller.rb +13 -0
  50. data/app/controllers/asset_host_core/admin/outputs_controller.rb +55 -0
  51. data/app/controllers/asset_host_core/api/assets_controller.rb +110 -0
  52. data/app/controllers/asset_host_core/api/base_controller.rb +43 -0
  53. data/app/controllers/asset_host_core/api/outputs_controller.rb +33 -0
  54. data/app/controllers/asset_host_core/application_controller.rb +43 -0
  55. data/app/controllers/asset_host_core/public_controller.rb +104 -0
  56. data/app/models/asset_host_core/api_user.rb +44 -0
  57. data/app/models/asset_host_core/api_user_permission.rb +6 -0
  58. data/app/models/asset_host_core/asset.rb +265 -0
  59. data/app/models/asset_host_core/asset_output.rb +69 -0
  60. data/app/models/asset_host_core/brightcove_video.rb +20 -0
  61. data/app/models/asset_host_core/output.rb +52 -0
  62. data/app/models/asset_host_core/permission.rb +19 -0
  63. data/app/models/asset_host_core/video.rb +8 -0
  64. data/app/models/asset_host_core/vimeo_video.rb +17 -0
  65. data/app/models/asset_host_core/youtube_video.rb +17 -0
  66. data/app/views/asset_host_core/admin/api_users/_form_fields.html.erb +5 -0
  67. data/app/views/asset_host_core/admin/api_users/edit.html.erb +26 -0
  68. data/app/views/asset_host_core/admin/api_users/index.html.erb +31 -0
  69. data/app/views/asset_host_core/admin/api_users/new.html.erb +17 -0
  70. data/app/views/asset_host_core/admin/api_users/show.html.erb +23 -0
  71. data/app/views/asset_host_core/admin/assets/index.html.erb +19 -0
  72. data/app/views/asset_host_core/admin/assets/metadata.html.erb +24 -0
  73. data/app/views/asset_host_core/admin/assets/show.html.erb +86 -0
  74. data/app/views/asset_host_core/admin/home/chooser.html.erb +49 -0
  75. data/app/views/asset_host_core/admin/outputs/_form_fields.html.erb +5 -0
  76. data/app/views/asset_host_core/admin/outputs/edit.html.erb +26 -0
  77. data/app/views/asset_host_core/admin/outputs/index.html.erb +27 -0
  78. data/app/views/asset_host_core/admin/outputs/new.html.erb +13 -0
  79. data/app/views/asset_host_core/admin/outputs/show.html.erb +17 -0
  80. data/app/views/asset_host_core/shared/_footerjs.html.erb +3 -0
  81. data/app/views/asset_host_core/shared/_navbar.html.erb +28 -0
  82. data/app/views/kaminari/_first_page.html.erb +3 -0
  83. data/app/views/kaminari/_gap.html.erb +3 -0
  84. data/app/views/kaminari/_last_page.html.erb +3 -0
  85. data/app/views/kaminari/_next_page.html.erb +3 -0
  86. data/app/views/kaminari/_page.html.erb +3 -0
  87. data/app/views/kaminari/_paginator.html.erb +17 -0
  88. data/app/views/kaminari/_prev_page.html.erb +3 -0
  89. data/app/views/layouts/asset_host_core/application.html.erb +54 -0
  90. data/app/views/layouts/asset_host_core/full_width.html.erb +32 -0
  91. data/app/views/layouts/asset_host_core/minimal.html.erb +45 -0
  92. data/config/initializers/simple_form.rb +142 -0
  93. data/config/initializers/simple_form_bootstrap.rb +45 -0
  94. data/config/locales/simple_form.en.yml +26 -0
  95. data/config/routes.rb +49 -0
  96. data/lib/asset_host_core.rb +38 -0
  97. data/lib/asset_host_core/config.rb +39 -0
  98. data/lib/asset_host_core/engine.rb +94 -0
  99. data/lib/asset_host_core/loaders.rb +34 -0
  100. data/lib/asset_host_core/loaders/asset_host.rb +30 -0
  101. data/lib/asset_host_core/loaders/base.rb +22 -0
  102. data/lib/asset_host_core/loaders/brightcove.rb +67 -0
  103. data/lib/asset_host_core/loaders/flickr.rb +114 -0
  104. data/lib/asset_host_core/loaders/url.rb +59 -0
  105. data/lib/asset_host_core/loaders/vimeo.rb +76 -0
  106. data/lib/asset_host_core/loaders/youtube.rb +90 -0
  107. data/lib/asset_host_core/model_methods.rb +61 -0
  108. data/lib/asset_host_core/paperclip.rb +4 -0
  109. data/lib/asset_host_core/paperclip/asset_thumbnail.rb +92 -0
  110. data/lib/asset_host_core/paperclip/attachment.rb +206 -0
  111. data/lib/asset_host_core/paperclip/trimmer.rb +33 -0
  112. data/lib/asset_host_core/resque_job.rb +13 -0
  113. data/lib/asset_host_core/version.rb +3 -0
  114. data/lib/tasks/asset_host_core_tasks.rake +4 -0
  115. data/spec/controllers/admin/api_users_controller_spec.rb +21 -0
  116. data/spec/controllers/admin/assets_controller_spec.rb +59 -0
  117. data/spec/controllers/admin/home_controller_spec.rb +4 -0
  118. data/spec/controllers/admin/outputs_controller_spec.rb +4 -0
  119. data/spec/controllers/api/assets_controller_spec.rb +133 -0
  120. data/spec/controllers/api/outputs_controller_spec.rb +51 -0
  121. data/spec/controllers/public_controller_spec.rb +4 -0
  122. data/spec/factories.rb +39 -0
  123. data/spec/features/api_users_spec.rb +78 -0
  124. data/spec/fixtures/api/brightcove/video.json +137 -0
  125. data/spec/fixtures/api/flickr/photos_getInfo.json +78 -0
  126. data/spec/fixtures/api/flickr/photos_getSizes.json +82 -0
  127. data/spec/fixtures/api/flickr/photos_licenses_getInfo.json +52 -0
  128. data/spec/fixtures/api/vimeo/video.json +28 -0
  129. data/spec/fixtures/api/youtube/discovery.json +5190 -0
  130. data/spec/fixtures/api/youtube/video.json +44 -0
  131. data/spec/fixtures/images/chipmunk.jpg +0 -0
  132. data/spec/fixtures/images/dude.jpg +0 -0
  133. data/spec/fixtures/images/ernie.jpg +0 -0
  134. data/spec/fixtures/images/fry.png +0 -0
  135. data/spec/fixtures/images/hat.jpg +0 -0
  136. data/spec/fixtures/images/spongebob.png +0 -0
  137. data/spec/fixtures/images/stars.jpg +0 -0
  138. data/spec/internal/app/controllers/application_controller.rb +16 -0
  139. data/spec/internal/app/controllers/sessions_controller.rb +24 -0
  140. data/spec/internal/app/models/user.rb +10 -0
  141. data/spec/internal/app/views/sessions/new.html.erb +14 -0
  142. data/spec/internal/config/database.yml +3 -0
  143. data/spec/internal/config/initializers/assethost_config.rb +57 -0
  144. data/spec/internal/config/routes.rb +7 -0
  145. data/spec/internal/db/combustion_test.sqlite +0 -0
  146. data/spec/internal/db/schema.rb +106 -0
  147. data/spec/internal/log/test.log +14769 -0
  148. data/spec/internal/public/favicon.ico +0 -0
  149. data/spec/internal/public/images/1_27f7745237849975ca90591c1fba5934_original. +0 -0
  150. data/spec/internal/public/images/1_7d33319deca787d5bb3f62ff06563ad2_original. +0 -0
  151. data/spec/internal/public/images/1_b6d48c8b1286104ce76649731e09645f_original. +0 -0
  152. data/spec/internal/public/images/1_b6d48c8b1286104ce76649731e09645f_original.jpg +0 -0
  153. data/spec/internal/public/images/1_b6d48c8b1286104ce76649731e09645f_original.txt +0 -0
  154. data/spec/internal/public/images/1_e179cbd27e07cb55042d0db36cdac095_original. +0 -0
  155. data/spec/internal/public/images/1_e669edd3dfd74be66fc38416e82e3a37_original. +0 -0
  156. data/spec/lib/asset_host_core/loaders/asset_host_spec.rb +33 -0
  157. data/spec/lib/asset_host_core/loaders/brightcove_spec.rb +51 -0
  158. data/spec/lib/asset_host_core/loaders/flickr_spec.rb +72 -0
  159. data/spec/lib/asset_host_core/loaders/url_spec.rb +42 -0
  160. data/spec/lib/asset_host_core/loaders/vimeo_spec.rb +51 -0
  161. data/spec/lib/asset_host_core/loaders/youtube_spec.rb +73 -0
  162. data/spec/lib/asset_host_core/loaders_spec.rb +4 -0
  163. data/spec/lib/asset_host_core/model_methods_spec.rb +4 -0
  164. data/spec/lib/asset_host_core/paperclip/asset_thumbnail_spec.rb +4 -0
  165. data/spec/lib/asset_host_core/paperclip/attachment_spec.rb +4 -0
  166. data/spec/lib/asset_host_core/resque_job_spec.rb +4 -0
  167. data/spec/lib/asset_host_core_spec.rb +4 -0
  168. data/spec/models/api_user_spec.rb +58 -0
  169. data/spec/models/asset_output_spec.rb +4 -0
  170. data/spec/models/asset_spec.rb +4 -0
  171. data/spec/models/output_spec.rb +4 -0
  172. data/spec/models/permission_spec.rb +4 -0
  173. data/spec/spec_helper.rb +30 -0
  174. data/spec/support/fixture_loader.rb +9 -0
  175. data/spec/support/param_helper.rb +14 -0
  176. data/spec/support/permission_matcher.rb +17 -0
  177. data/vendor/assets/images/jquery-ui/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  178. data/vendor/assets/images/jquery-ui/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  179. data/vendor/assets/images/jquery-ui/ui-bg_flat_10_000000_40x100.png +0 -0
  180. data/vendor/assets/images/jquery-ui/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  181. data/vendor/assets/images/jquery-ui/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  182. data/vendor/assets/images/jquery-ui/ui-bg_glass_65_ffffff_1x400.png +0 -0
  183. data/vendor/assets/images/jquery-ui/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  184. data/vendor/assets/images/jquery-ui/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  185. data/vendor/assets/images/jquery-ui/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  186. data/vendor/assets/images/jquery-ui/ui-icons_222222_256x240.png +0 -0
  187. data/vendor/assets/images/jquery-ui/ui-icons_228ef1_256x240.png +0 -0
  188. data/vendor/assets/images/jquery-ui/ui-icons_ef8c08_256x240.png +0 -0
  189. data/vendor/assets/images/jquery-ui/ui-icons_ffd27a_256x240.png +0 -0
  190. data/vendor/assets/images/jquery-ui/ui-icons_ffffff_256x240.png +0 -0
  191. data/vendor/assets/javascripts/backbone.js +1158 -0
  192. data/vendor/assets/javascripts/backbone.modelbinding.js +475 -0
  193. data/vendor/assets/javascripts/exif.js +695 -0
  194. data/vendor/assets/javascripts/jquery-ui.js +5614 -0
  195. data/vendor/assets/javascripts/simplemodal.js +698 -0
  196. data/vendor/assets/javascripts/spin.jquery.js +81 -0
  197. data/vendor/assets/javascripts/spin.min.js +1 -0
  198. data/vendor/assets/javascripts/underscore.min.js +1 -0
  199. metadata +658 -0
@@ -0,0 +1,20 @@
1
+ module AssetHostCore
2
+ class BrightcoveVideo < Video
3
+ attr_accessible :length
4
+
5
+ def attrs
6
+ {
7
+ "data-assethost" => "BrightcoveVideo", # The native client class
8
+ "data-ah-videoid" => self.videoid
9
+ }
10
+ end
11
+
12
+ def as_json
13
+ {
14
+ :class => "BrightcoveVideo",
15
+ :videoid => self.videoid,
16
+ :length => self.length
17
+ }
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,52 @@
1
+ module AssetHostCore
2
+ class Output < ActiveRecord::Base
3
+ has_many :asset_outputs
4
+
5
+ after_save :delete_asset_outputs, if: -> { self.size_changed? || self.extension_changed? }
6
+
7
+ #----------
8
+
9
+ def self.paperclip_sizes
10
+ @paperclip_sizes ||= begin
11
+ sizes = {}
12
+
13
+ Output.all.each do |output|
14
+ sizes.merge! output.paperclip_options
15
+ end
16
+
17
+ sizes
18
+ end
19
+ end
20
+
21
+
22
+ #----------
23
+
24
+ def code_sym
25
+ self.code.to_sym
26
+ end
27
+
28
+ #----------
29
+
30
+ def paperclip_options
31
+ {
32
+ self.code.to_sym => {
33
+ :geometry => '',
34
+ :size => self.size,
35
+ :format => self.extension.to_sym,
36
+ :prerender => self.prerender,
37
+ :output => self.id,
38
+ :rich => self.is_rich
39
+ }
40
+ }
41
+ end
42
+
43
+ #----------
44
+
45
+ protected
46
+
47
+ def delete_asset_outputs
48
+ # destroy each AssetOutput, triggering file and cache deletion
49
+ self.asset_outputs.each { |ao| ao.destroy }
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,19 @@
1
+ module AssetHostCore
2
+ class Permission < ActiveRecord::Base
3
+ ABILITIES = [
4
+ :read,
5
+ :write
6
+ ]
7
+
8
+ attr_accessible :resource, :ability
9
+
10
+ has_many :api_user_permissions
11
+ has_many :api_users, through: :api_user_permissions
12
+
13
+ validates :resource, :ability, presence: true
14
+
15
+ def to_s
16
+ "[#{self.resource}] #{self.ability}"
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,8 @@
1
+ module AssetHostCore
2
+ class Video < ActiveRecord::Base
3
+ self.abstract_class = true
4
+
5
+ has_one :asset
6
+ attr_accessible :videoid
7
+ end
8
+ end
@@ -0,0 +1,17 @@
1
+ module AssetHostCore
2
+ class VimeoVideo < Video
3
+ def attrs
4
+ {
5
+ "data-assethost" => "VimeoVideo",
6
+ "data-ah-videoid" => self.videoid
7
+ }
8
+ end
9
+
10
+ def as_json
11
+ {
12
+ :class => "VimeoVideo",
13
+ :videoid => self.videoid
14
+ }
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module AssetHostCore
2
+ class YoutubeVideo < Video
3
+ def attrs
4
+ {
5
+ "data-assethost" => "YoutubeVideo",
6
+ "data-ah-videoid" => self.videoid
7
+ }
8
+ end
9
+
10
+ def as_json
11
+ {
12
+ :class => "YoutubeVideo",
13
+ :videoid => self.videoid
14
+ }
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,5 @@
1
+ <%= f.input :name %>
2
+ <%= f.input :email %>
3
+ <%= f.input :is_active %>
4
+
5
+ <%= f.association :permissions %>
@@ -0,0 +1,26 @@
1
+ <h2><%= @PAGE_TITLE = "Edit API User: #{@api_user.name}" %></h2>
2
+
3
+ <%= simple_form_for [:a, @api_user], html: { class: 'form-horizontal' } do |f| %>
4
+ <%= f.error_notification %>
5
+
6
+ <fieldset>
7
+ <%= render 'form_fields', f: f %>
8
+
9
+ <% if f.object.persisted? %>
10
+ <%= f.input :auth_token, disabled: true %>
11
+ <%= link_to "Reset Token", reset_token_a_api_user_path(f.object), method: :put, data: { confirm: "WARNING: Resetting the token will immediately cause all API calls for this account to stop working.\nClick OK to reset the API token for #{@api_user.name}.\nClick CANCEL to return to editing."} %>
12
+ <% end %>
13
+
14
+ <div class="form-actions">
15
+ <%= f.submit "Update", class: "btn btn-primary" %>
16
+
17
+ <%= link_to("Delete", a_api_user_path(@api_user),
18
+ class: "btn btn-danger pull-right",
19
+ method: :delete,
20
+ data: { confirm: "Click OK to delete this API User.\n" \
21
+ "Click CANCEL to return to editing."
22
+ }
23
+ ) %>
24
+ </div>
25
+ </fieldset>
26
+ <% end %>
@@ -0,0 +1,31 @@
1
+ <h2><%= @PAGE_TITLE = "API Users" %></h2>
2
+ <p><%= link_to "Add an API User", new_a_api_user_path, class: "btn btn-success" %></p>
3
+
4
+ <%= paginate @api_users %>
5
+
6
+ <table class="table table-striped">
7
+ <thead>
8
+ <tr>
9
+ <th>Edit</th>
10
+ <th>Name</th>
11
+ <th>E-mail</th>
12
+ <th>Auth Token</th>
13
+ <th>Active?</th>
14
+ <th>Last Auth</th>
15
+ </tr>
16
+ </thead>
17
+ <tbody>
18
+ <% @api_users.each do |api_user| %>
19
+ <tr>
20
+ <td><%= link_to "Edit", edit_a_api_user_path(api_user), class: "btn" %></td>
21
+ <td><%= api_user.name %></td>
22
+ <td><%= api_user.email %></td>
23
+ <td><%= api_user.auth_token %></td>
24
+ <td><%= api_user.is_active? %></td>
25
+ <td><%= api_user.last_authenticated %></td>
26
+ </tr>
27
+ <% end %>
28
+ </tbody>
29
+ </table>
30
+
31
+ <%= paginate @api_users %>
@@ -0,0 +1,17 @@
1
+ <h2><%= @PAGE_TITLE = "New API User" %></h2>
2
+
3
+ <%= simple_form_for [:a, @api_user], html: { class: 'form-horizontal' } do |f| %>
4
+ <%= f.error_notification %>
5
+
6
+ <fieldset>
7
+ <%= render 'form_fields', f: f %>
8
+
9
+ <div class="alert alert-info">
10
+ Auth Token will be generated when this API User is saved.
11
+ </div>
12
+
13
+ <div class="form-actions">
14
+ <%= f.submit "Save", class: "btn" %>
15
+ </div>
16
+ </fieldset>
17
+ <% end %>
@@ -0,0 +1,23 @@
1
+ <h2><%= @PAGE_TITLE = "API User: #{@api_user.name}" %></h2>
2
+
3
+ <dl>
4
+ <dt>Name</dt>
5
+ <dd><%= @api_user.name %></dd>
6
+
7
+ <dt>Active?</dt>
8
+ <dd><%= @api_user.is_active? %></dd>
9
+
10
+ <dt>Auth Token</dt>
11
+ <dd><%= @api_user.auth_token %></dd>
12
+
13
+ <dt>Created At</dt>
14
+ <dd><%= @api_user.created_at %></dd>
15
+
16
+ <dt>Last Authentication</dt>
17
+ <dd><%= @api_user.last_authenticated %></dd>
18
+
19
+ <dt>Last Updated</dt>
20
+ <dd><%= @api_user.updated_at %></dd>
21
+ </dl>
22
+
23
+ <%= link_to "Edit", edit_a_api_user_path(@api_user), class: "btn btn-primary" %> &nbsp;
@@ -0,0 +1,19 @@
1
+ <% @PAGE_TITLE = "Asset Management" %>
2
+
3
+ <div class='assetbox' id='asset_browser'></div>
4
+
5
+ <script type="text/javascript">
6
+ var browser = new AssetHost.BrowserUI({
7
+ root_path: "<%= assethost.a_assets_path %>",
8
+ assets:<%= @assets.to_json.html_safe %>,
9
+ page: <%= @assets.current_page %>,
10
+ total: <%= @assets.total_count %>,
11
+ query: <%= @query.to_json.html_safe %>,
12
+ modalSelect: true,
13
+ modalAdmin: false
14
+ });
15
+
16
+ browser.assets.bind('selected',function (a) {
17
+ window.location = "<%= assethost.a_assets_path %>/"+a.get("id")
18
+ });
19
+ </script>
@@ -0,0 +1,24 @@
1
+ <h2><%= @PAGE_TITLE = "Add Metadata" %></h2>
2
+
3
+ <%= simple_form_for :assets, url: metadata_a_assets_path, method: :put do |f| %>
4
+ <% @assets.each do |asset| %>
5
+ <div class="row">
6
+ <%= f.simple_fields_for asset.id.to_s, asset do |af| %>
7
+ <hr/>
8
+ <div class="span3">
9
+ <%= asset.image.tag(AssetHostCore.config.modal_size) %>
10
+ </div>
11
+ <div class="span5">
12
+ <h3>Asset #<%=asset.id%></h3>
13
+ <%= af.input :title %>
14
+ <%= af.input :caption, as: :text, input_html: { rows: 3 }%>
15
+ <%= af.input :owner %>
16
+ <%= af.input :url %>
17
+ </div>
18
+ <br class="clear"/>
19
+ <% end %>
20
+ </div>
21
+ <% end %>
22
+
23
+ <%= f.submit "Update Metadata", class: "btn pull-right" %>
24
+ <% end %>
@@ -0,0 +1,86 @@
1
+ <% @PAGE_TITLE = "Asset: #{@asset.title}" %>
2
+
3
+ <!-- assets pager -->
4
+ <ul class="pager">
5
+ <% if @prev %>
6
+ <li class="previous">
7
+ <%= link_to "&larr; #{@prev.title.blank? ? "Asset #{@prev.id}" : @prev.title[0..30]}".html_safe, a_asset_path(@prev) %>
8
+ </li>
9
+ <% end %>
10
+
11
+ <% if @next %>
12
+ <li class="next">
13
+ <%= link_to "#{@next.title.blank? ? "Asset #{@next.id}" : @next.title[0..30]} &rarr;".html_safe, a_asset_path(@next) %>
14
+ </li>
15
+ <% end %>
16
+ </ul>
17
+
18
+ <div id="asset"></div>
19
+
20
+ <br/>
21
+
22
+ <div id="editform">
23
+ <%= simple_form_for([:a, @asset], html: { class: "form-horizontal" }) do |f| %>
24
+ <div class="row">
25
+ <div class="span6">
26
+ <fieldset>
27
+ <legend>Basics</legend>
28
+ <%= f.input :title, hint: @asset.image_title? ? "<small><strong>From Image:</strong> #{@asset.image_title}</small>" : nil %>
29
+ <%= f.input :caption, as: :text, input_html: { rows: 5 }, hint: @asset.image_description? ? "<small><strong>From Image:</strong> #{@asset.image_description}</small>" : nil %>
30
+ </fieldset>
31
+ </div>
32
+ <div class="span2 replace-asset">
33
+ <h3>Replace:</h3>
34
+ <div id="replacedrop" style="height: 180px;margin-top: 16px">
35
+ <p style="font-size: 18px;line-height: 24px;color: #aaa;text-align: center;margin: 8px">Drop File Here to Replace Asset</p>
36
+ </div>
37
+ </div>
38
+ </div>
39
+ <div class="row">
40
+ <div class="span8">
41
+ <fieldset>
42
+ <legend>Rights</legend>
43
+ <%= f.input :owner, hint: @asset.image_copyright? ? "<small><strong>From Image:</strong> #{@asset.image_copyright}</small>" : nil, input_html: { class: "span5" } %>
44
+ <%= f.input :url, input_html: { class: "span5" } %>
45
+ </fieldset>
46
+
47
+ <fieldset>
48
+ <legend>Metadata</legend>
49
+ <div class="form-horizontal">
50
+ <%= f.input :image_taken, as: :date %>
51
+ </div>
52
+ <%= f.input :image_gravity, as: :select, collection: AssetHostCore::Asset::GRAVITY_OPTIONS %>
53
+ </fieldset>
54
+
55
+ <fieldset>
56
+ <legend>Internal</legend>
57
+ <%= f.input :notes, input_html: { rows: 5 } %>
58
+ </fieldset>
59
+
60
+
61
+ <div class="form-actions">
62
+ <%= f.submit "Update Asset", class: "btn btn-primary" %>
63
+ <%= link_to "Destroy Asset",
64
+ a_asset_path(@asset),
65
+ :method => :delete,
66
+ :class => "btn btn-danger pull-right",
67
+ :data => { confirm: "Are you sure you want to delete this asset? You are responsible for making sure no content is using it before deletion." } %>
68
+
69
+ </div>
70
+ </div>
71
+ </div>
72
+ <% end %>
73
+ </div>
74
+
75
+ <script type="text/javascript">
76
+ assetAdm = new AssetHost.AssetAdmin(
77
+ <%= @asset.json.to_json.html_safe %>,
78
+ {
79
+ el: "#asset",
80
+ replace: "#replacedrop",
81
+ replacePath: "<%= replace_a_asset_path @asset %>"
82
+ }
83
+ )
84
+
85
+ assetClient = new AssetHost.Client()
86
+ </script>
@@ -0,0 +1,49 @@
1
+ <% @PAGE_TITLE = "Drop Test" %>
2
+
3
+ <div class="row-fluid">
4
+ <div class="span4">
5
+ <h3>Selected Assets:</h3>
6
+
7
+ <div id="my_assets" style="">
8
+ <p><i>Drop assets here to add them to your story</i></p>
9
+ </div>
10
+
11
+ </div>
12
+ <div class="span8">
13
+ <div class="row">
14
+ <div class="pull-right" id="search_box">
15
+
16
+ </div>
17
+ </div>
18
+
19
+ <div id="asset_browser" class="assetbox"></div>
20
+
21
+ <br class="clear"/>
22
+ </div>
23
+ </div>
24
+
25
+ <script type="text/javascript">
26
+ var browser = new AssetHost.BrowserUI({
27
+ assets: <%= @assets.to_json.html_safe %>,
28
+ page: <%= @assets.current_page %>,
29
+ total: <%= @assets.total_count %>,
30
+ modalSelect: true,
31
+ modalAdmin: true
32
+ });
33
+
34
+ chooser = new AssetHost.ChooserUI({
35
+ browser: browser
36
+ });
37
+
38
+ window.opener.postMessage("LOADED","*");
39
+
40
+ $(window).bind("message", function (evt) {
41
+ evt = evt.originalEvent
42
+ chooser.selectAssets(evt.data)
43
+
44
+ chooser.bind('saveAndClose',function(json) {
45
+ evt.source.postMessage(json,evt.origin);
46
+ window.close();
47
+ });
48
+ });
49
+ </script>
@@ -0,0 +1,5 @@
1
+ <%= f.input :code %>
2
+ <%= f.input :size %>
3
+ <%= f.input :extension %>
4
+ <%= f.input :prerender %>
5
+ <%= f.input :is_rich %>
@@ -0,0 +1,26 @@
1
+ <h2><%= @PAGE_TITLE = "Edit Output: #{@output.code}" %></h2>
2
+
3
+ <div class="alert">
4
+ <strong>Warning!</strong> Editing a size or extension requires that AssetHost delete all rendered assets for this output. They
5
+ will be re-rendered on first request.
6
+ </div>
7
+
8
+ <%= simple_form_for [:a, @output], html: { class: "form-horizontal" } do |f| %>
9
+ <%= f.error_notification %>
10
+
11
+ <fieldset>
12
+ <%= render 'form_fields', f: f %>
13
+
14
+ <div class="form-actions">
15
+ <%= f.submit "Update Output", class: "btn btn-primary" %>
16
+
17
+ <%= link_to("Delete", a_output_path(@output),
18
+ class: "btn btn-danger pull-right",
19
+ method: :delete,
20
+ data: { confirm: "Click OK to delete this Output.\n" \
21
+ "Click CANCEL to return to editing."
22
+ }
23
+ ) %>
24
+ </div>
25
+ </fieldset>
26
+ <% end %>