asset_host_core 2.0.0.beta

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 (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 %>