radiant-assets-extension 0.0.6 → 0.0.7
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.
- data/{README → README.rdoc} +4 -2
- data/Rakefile +3 -3
- data/app/controllers/admin/assets_controller.rb +5 -22
- data/app/controllers/admin/attachments_controller.rb +21 -0
- data/app/controllers/admin/upload_handler.rb +22 -0
- data/app/helpers/assets_helper.rb +8 -2
- data/app/models/asset.rb +16 -2
- data/app/models/asset_tags.rb +56 -24
- data/app/models/attachment.rb +23 -0
- data/app/views/admin/assets/_attachment.html.erb +3 -0
- data/app/views/admin/assets/_attachments.html.erb +23 -0
- data/app/views/admin/assets/_grid.html.erb +3 -5
- data/app/views/admin/assets/_list.html.erb +2 -0
- data/app/views/admin/assets/_upload.html.erb +40 -0
- data/app/views/admin/assets/edit.html.erb +8 -0
- data/app/views/admin/assets/index.html.erb +1 -1
- data/app/views/admin/assets/new.html.erb +3 -42
- data/app/views/admin/assets/remove.html.erb +12 -0
- data/assets_extension.rb +6 -1
- data/config/routes.rb +5 -0
- data/db/migrate/20110225174217_add_caching_columns_to_asset.rb +26 -0
- data/db/migrate/20110225210821_add_attachment_to_pages.rb +12 -0
- data/db/migrate/20110225210912_add_timestamps_and_locking_to_assets.rb +19 -0
- data/db/migrate/20110320152044_add_position_to_attachments.rb +14 -0
- data/lib/radiant-assets-extension/s3_store.rb +1 -0
- data/lib/radiant-assets-extension/version.rb +1 -1
- data/public/stylesheets/admin/extensions/assets/assets.css +48 -12
- data/radiant-assets-extension.gemspec +1 -0
- metadata +32 -6
    
        data/{README → README.rdoc}
    RENAMED
    
    | @@ -7,7 +7,7 @@ Supports uploading of images as well as other files. | |
| 7 7 |  | 
| 8 8 | 
             
            == Radius Tags
         | 
| 9 9 |  | 
| 10 | 
            -
            <r: | 
| 10 | 
            +
            <r:image size="300x" />
         | 
| 11 11 |  | 
| 12 12 | 
             
            Proportionally resizes an image to 300px width. Supports imagemagick geometry
         | 
| 13 13 | 
             
            strings to do advanced resizing straight in Radius tags. Resized images are
         | 
| @@ -17,4 +17,6 @@ request. | |
| 17 17 | 
             
            == Todo
         | 
| 18 18 |  | 
| 19 19 | 
             
            - Attaching Assets to Pages
         | 
| 20 | 
            -
            - Easy/Automatic migration from paperclipped
         | 
| 20 | 
            +
            - Easy/Automatic migration from paperclipped (currently this extension should
         | 
| 21 | 
            +
              only be used on “fresh” radiant sites w/o an asset management solution
         | 
| 22 | 
            +
              already in place)
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -96,17 +96,17 @@ namespace :spec do | |
| 96 96 | 
             
              end
         | 
| 97 97 | 
             
            end
         | 
| 98 98 |  | 
| 99 | 
            -
            desc 'Generate documentation for the  | 
| 99 | 
            +
            desc 'Generate documentation for the assets extension.'
         | 
| 100 100 | 
             
            Rake::RDocTask.new(:rdoc) do |rdoc|
         | 
| 101 101 | 
             
              rdoc.rdoc_dir = 'rdoc'
         | 
| 102 | 
            -
              rdoc.title    = ' | 
| 102 | 
            +
              rdoc.title    = 'AssetsExtension'
         | 
| 103 103 | 
             
              rdoc.options << '--line-numbers' << '--inline-source'
         | 
| 104 104 | 
             
              rdoc.rdoc_files.include('README')
         | 
| 105 105 | 
             
              rdoc.rdoc_files.include('lib/**/*.rb')
         | 
| 106 106 | 
             
            end
         | 
| 107 107 |  | 
| 108 108 | 
             
            # For extensions that are in transition
         | 
| 109 | 
            -
            desc 'Test the  | 
| 109 | 
            +
            desc 'Test the assets extension.'
         | 
| 110 110 | 
             
            Rake::TestTask.new(:test) do |t|
         | 
| 111 111 | 
             
              t.libs << 'lib'
         | 
| 112 112 | 
             
              t.pattern = 'test/**/*_test.rb'
         | 
| @@ -1,28 +1,11 @@ | |
| 1 1 | 
             
            class Admin::AssetsController < Admin::ResourceController
         | 
| 2 | 
            +
              include Admin::UploadHandler
         | 
| 2 3 | 
             
              paginate_models
         | 
| 3 | 
            -
              helper :assets
         | 
| 4 4 |  | 
| 5 5 | 
             
              def create
         | 
| 6 | 
            -
                 | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
                 | 
| 10 | 
            -
                @asset.save!
         | 
| 11 | 
            -
                render_hacky_json(:markup => @template.asset_listing(@asset))
         | 
| 12 | 
            -
              rescue => e
         | 
| 13 | 
            -
                logger.warn(e.to_s)
         | 
| 14 | 
            -
                render_hacky_json(:markup => "Error: #{e.to_s}")
         | 
| 15 | 
            -
              end
         | 
| 16 | 
            -
              
         | 
| 17 | 
            -
            private
         | 
| 18 | 
            -
              # HACK: sending JSON as text/html
         | 
| 19 | 
            -
              # (https://github.com/blueimp/jQuery-File-Upload/wiki/Setup)
         | 
| 20 | 
            -
              # jquery.fileupload makes use of iframes for browsers like Microsoft
         | 
| 21 | 
            -
              # Internet Explorer and Opera, which do not yet support XMLHTTPRequest
         | 
| 22 | 
            -
              # uploads. They will only register a load event if the Content-type of the
         | 
| 23 | 
            -
              # response is set to text/plain or text/html, not if it is set to
         | 
| 24 | 
            -
              # application/json.
         | 
| 25 | 
            -
              def render_hacky_json(data)
         | 
| 26 | 
            -
                render :json => data, :content_type => 'text/html'
         | 
| 6 | 
            +
                rendering_upload_response do
         | 
| 7 | 
            +
                  @asset = Asset.create! params[:asset]
         | 
| 8 | 
            +
                  @template.content_tag(:li, @template.asset_listing(@asset))
         | 
| 9 | 
            +
                end
         | 
| 27 10 | 
             
              end
         | 
| 28 11 | 
             
            end
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            class Admin::AttachmentsController < Admin::ResourceController
         | 
| 2 | 
            +
              include Admin::UploadHandler
         | 
| 3 | 
            +
              
         | 
| 4 | 
            +
              def create
         | 
| 5 | 
            +
                rendering_upload_response do
         | 
| 6 | 
            +
                  @page = Page.find(params[:page_id])
         | 
| 7 | 
            +
                  attachment = @page.attachments.create!(params[:attachment])
         | 
| 8 | 
            +
                  render_to_string(:partial => 'admin/assets/attachment', :locals => {:attachment => attachment})
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
              
         | 
| 12 | 
            +
              # Gets called after successful update
         | 
| 13 | 
            +
              # only used when attachment update form not submitted using javascript
         | 
| 14 | 
            +
              def index
         | 
| 15 | 
            +
                redirect_to edit_admin_page_path(params[:page_id])
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
              
         | 
| 18 | 
            +
              def positions
         | 
| 19 | 
            +
                render :json => Attachment.reorder(params[:attachment])
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
            end
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            module Admin::UploadHandler
         | 
| 2 | 
            +
              private
         | 
| 3 | 
            +
                # HACK: sending JSON as text/html
         | 
| 4 | 
            +
                # (https://github.com/blueimp/jQuery-File-Upload/wiki/Setup)
         | 
| 5 | 
            +
                # jquery.fileupload makes use of iframes for browsers like Microsoft
         | 
| 6 | 
            +
                # Internet Explorer and Opera, which do not yet support XMLHTTPRequest
         | 
| 7 | 
            +
                # uploads. They will only register a load event if the Content-type of the
         | 
| 8 | 
            +
                # response is set to text/plain or text/html, not if it is set to
         | 
| 9 | 
            +
                # application/json.
         | 
| 10 | 
            +
                def render_hacky_json(data)
         | 
| 11 | 
            +
                  render :json => data, :content_type => 'text/html'
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
                
         | 
| 14 | 
            +
                # Renders a response appropriate for use with jquery.fileupload.js
         | 
| 15 | 
            +
                # Takes a block that should return an HTML string
         | 
| 16 | 
            +
                def rendering_upload_response
         | 
| 17 | 
            +
                  render_hacky_json(:markup => yield)
         | 
| 18 | 
            +
                rescue => e
         | 
| 19 | 
            +
                  logger.warn(e.to_s)
         | 
| 20 | 
            +
                  render_hacky_json(:markup => "Error: #{e.to_s}")
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
            end
         | 
| @@ -1,10 +1,16 @@ | |
| 1 1 | 
             
            module AssetsHelper  
         | 
| 2 2 | 
             
              def asset_listing(asset)
         | 
| 3 | 
            -
                 | 
| 3 | 
            +
                asset_icon(asset) +
         | 
| 4 4 | 
             
                content_tag(:span, asset.to_s, :class=>'title')
         | 
| 5 5 | 
             
              end
         | 
| 6 6 |  | 
| 7 | 
            -
              def  | 
| 7 | 
            +
              def asset_grid_item(asset)
         | 
| 8 | 
            +
                asset_icon(asset, 120) +
         | 
| 9 | 
            +
                content_tag(:span, "ID: #{asset.id}", :class => 'id') +
         | 
| 10 | 
            +
                content_tag(:span, asset.to_s, :class => 'caption')
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
              
         | 
| 13 | 
            +
              def asset_icon(asset, size=30)
         | 
| 8 14 | 
             
                asset.image? ? square_thumb(asset, size) : text_icon(asset, size)
         | 
| 9 15 | 
             
              end
         | 
| 10 16 |  | 
    
        data/app/models/asset.rb
    CHANGED
    
    | @@ -1,16 +1,30 @@ | |
| 1 1 | 
             
            class Asset < ActiveRecord::Base
         | 
| 2 | 
            +
              has_many :attachments, :include => :page, :dependent => :destroy
         | 
| 2 3 | 
             
              # HACK: incomplete
         | 
| 3 4 | 
             
              AUDIO_FORMATS = [:wav, :mp3, :m4a, :ogg]
         | 
| 4 5 | 
             
              VIDEO_FORMATS = [:mp4, :avi]
         | 
| 5 6 |  | 
| 6 7 | 
             
              image_accessor :upload
         | 
| 7 8 | 
             
              validates_presence_of :upload
         | 
| 9 | 
            +
              delegate :url, :width, :height, :landscape, :portrait, :to => :upload
         | 
| 10 | 
            +
              
         | 
| 11 | 
            +
              def uploads
         | 
| 12 | 
            +
                []
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
              
         | 
| 15 | 
            +
              def uploads=(new_uploads)
         | 
| 16 | 
            +
                # HACK: depends on javascript being present and packaging each file
         | 
| 17 | 
            +
                # in its own request
         | 
| 18 | 
            +
                # TODO: handle non-js situations with several files in one request
         | 
| 19 | 
            +
                # see Admin::AttachmentsController#create and Admin::AssetsController#create
         | 
| 20 | 
            +
                self.upload = Array(new_uploads).first
         | 
| 21 | 
            +
              end
         | 
| 8 22 |  | 
| 9 23 | 
             
              def format
         | 
| 10 24 | 
             
                 # HACK: relying on extension instead of using analyser and upload.format
         | 
| 11 25 | 
             
                 # analyser can throw us into very long loop when trying to identify
         | 
| 12 26 | 
             
                 # non-image files like word docs
         | 
| 13 | 
            -
                 upload.ext  | 
| 27 | 
            +
                 upload.ext ? upload.ext.to_sym : :generic
         | 
| 14 28 | 
             
              rescue Dragonfly::FunctionManager::UnableToHandle
         | 
| 15 29 | 
             
                :generic
         | 
| 16 30 | 
             
              end
         | 
| @@ -32,6 +46,6 @@ class Asset < ActiveRecord::Base | |
| 32 46 | 
             
              end
         | 
| 33 47 |  | 
| 34 48 | 
             
              def to_s
         | 
| 35 | 
            -
                caption || upload.name
         | 
| 49 | 
            +
                caption || upload.name || ''
         | 
| 36 50 | 
             
              end
         | 
| 37 51 | 
             
            end
         | 
    
        data/app/models/asset_tags.rb
    CHANGED
    
    | @@ -27,26 +27,37 @@ module AssetTags | |
| 27 27 | 
             
              # TODO: accept width/height attributes and do something sensible like
         | 
| 28 28 | 
             
              # resizing proportionally
         | 
| 29 29 | 
             
              tag 'image' do |tag|
         | 
| 30 | 
            -
                 | 
| 31 | 
            -
                 | 
| 32 | 
            -
                 | 
| 30 | 
            +
                asset = find_asset(tag)
         | 
| 31 | 
            +
                options = tag.attr.dup
         | 
| 32 | 
            +
                image = resized_or_original_image(asset, options.delete('size'))
         | 
| 33 | 
            +
                %{<img src="#{image.url}"#{html_attributes(options)}>}
         | 
| 33 34 | 
             
              end
         | 
| 34 35 |  | 
| 35 36 | 
             
              desc %{
         | 
| 36 37 | 
             
                Selects an asset. Does not render anything itself but gives access to the
         | 
| 37 38 | 
             
                asset's attributes such as size
         | 
| 38 39 |  | 
| 39 | 
            -
                 | 
| 40 | 
            -
                
         | 
| 41 | 
            -
                <r:asset id="22" [size="200"]><r:url /></r:asset>
         | 
| 40 | 
            +
                <r:asset id="22"><r:url /></r:asset>
         | 
| 42 41 | 
             
              }
         | 
| 43 42 | 
             
              tag 'asset' do |tag|
         | 
| 44 | 
            -
                assert_id_given(tag)
         | 
| 45 43 | 
             
                tag.locals.asset = find_asset(tag)
         | 
| 46 44 | 
             
                tag.expand
         | 
| 47 45 | 
             
              end
         | 
| 48 46 |  | 
| 49 | 
            -
              % | 
| 47 | 
            +
              desc %{
         | 
| 48 | 
            +
                Renders the URL of an asset
         | 
| 49 | 
            +
                
         | 
| 50 | 
            +
                Accepts optional size parameter in which case, if the asset is an image,
         | 
| 51 | 
            +
                the URL to a resized version of the image will be returned
         | 
| 52 | 
            +
                
         | 
| 53 | 
            +
                <r:asset:url [size="200x200"] id="22" />
         | 
| 54 | 
            +
              }
         | 
| 55 | 
            +
              tag 'asset:url' do |tag|
         | 
| 56 | 
            +
                image = resized_or_original_image(tag.locals.asset, tag.attr['size'])
         | 
| 57 | 
            +
                (image && image.url) || tag.locals.asset.url
         | 
| 58 | 
            +
              end
         | 
| 59 | 
            +
              
         | 
| 60 | 
            +
              %w[caption width height].each do |attribute|
         | 
| 50 61 | 
             
                desc %{
         | 
| 51 62 | 
             
                  Renders the #{attribute} of the current asset
         | 
| 52 63 | 
             
                }
         | 
| @@ -55,13 +66,6 @@ module AssetTags | |
| 55 66 | 
             
                end
         | 
| 56 67 | 
             
              end
         | 
| 57 68 |  | 
| 58 | 
            -
              desc %{
         | 
| 59 | 
            -
                Renders the caption of the current asset
         | 
| 60 | 
            -
              }
         | 
| 61 | 
            -
              tag 'asset:caption' do |tag|
         | 
| 62 | 
            -
                tag.locals.asset.caption
         | 
| 63 | 
            -
              end
         | 
| 64 | 
            -
              
         | 
| 65 69 | 
             
              desc %{
         | 
| 66 70 | 
             
                Renders contents if the current asset is an image
         | 
| 67 71 | 
             
              }
         | 
| @@ -92,17 +96,45 @@ module AssetTags | |
| 92 96 | 
             
                end
         | 
| 93 97 | 
             
              end
         | 
| 94 98 |  | 
| 95 | 
            -
             | 
| 96 | 
            -
               | 
| 97 | 
            -
                 | 
| 99 | 
            +
              # Namespace only
         | 
| 100 | 
            +
              tag 'attachments' do |tag|
         | 
| 101 | 
            +
                tag.expand
         | 
| 98 102 | 
             
              end
         | 
| 99 | 
            -
             | 
| 103 | 
            +
              
         | 
| 104 | 
            +
              desc %{
         | 
| 105 | 
            +
                Selects the first attached asset of the page and renders the tag's contents.
         | 
| 106 | 
            +
                If there are no assets on the page, nothing is rendered.
         | 
| 107 | 
            +
              }
         | 
| 108 | 
            +
              tag 'attachments:first' do |tag|
         | 
| 109 | 
            +
                if attachment = tag.locals.page.attachments.first
         | 
| 110 | 
            +
                  tag.locals.asset = attachment.asset
         | 
| 111 | 
            +
                  tag.expand
         | 
| 112 | 
            +
                end
         | 
| 113 | 
            +
              end
         | 
| 114 | 
            +
              
         | 
| 115 | 
            +
              tag 'attachments:each' do |tag|
         | 
| 116 | 
            +
                tag.locals.page.attachments.collect do |attachment|
         | 
| 117 | 
            +
                  tag.locals.attachment = attachment
         | 
| 118 | 
            +
                  tag.locals.asset = attachment.asset
         | 
| 119 | 
            +
                  tag.expand
         | 
| 120 | 
            +
                end
         | 
| 121 | 
            +
              end
         | 
| 122 | 
            +
              
         | 
| 123 | 
            +
            private
         | 
| 100 124 | 
             
              def find_asset(tag)
         | 
| 101 | 
            -
                asset  | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 125 | 
            +
                tag.locals.asset || Asset.find(tag.attr['id'])
         | 
| 126 | 
            +
              rescue ActiveRecord::RecordNotFound
         | 
| 127 | 
            +
                raise TagError, 'Please supply an id attribute'
         | 
| 128 | 
            +
              end
         | 
| 129 | 
            +
              
         | 
| 130 | 
            +
              def resized_or_original_image(asset, size)
         | 
| 131 | 
            +
                if asset.image?
         | 
| 132 | 
            +
                  size ? asset.upload.process(:resize, size) : asset.upload
         | 
| 106 133 | 
             
                end
         | 
| 107 134 | 
             
              end
         | 
| 135 | 
            +
              
         | 
| 136 | 
            +
              def html_attributes(options)
         | 
| 137 | 
            +
                attributes = options.inject('') { |s, (k, v)| s << %{#{k.downcase}="#{v}" } }.strip
         | 
| 138 | 
            +
                " #{attributes}" unless attributes.empty?
         | 
| 139 | 
            +
              end
         | 
| 108 140 | 
             
            end
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            require 'acts_as_list'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class Attachment < ActiveRecord::Base
         | 
| 4 | 
            +
              belongs_to :asset, :autosave => true
         | 
| 5 | 
            +
              belongs_to :page
         | 
| 6 | 
            +
              
         | 
| 7 | 
            +
              acts_as_list :scope => :page_id
         | 
| 8 | 
            +
              
         | 
| 9 | 
            +
              def self.reorder(new_order)
         | 
| 10 | 
            +
                new_order.each_with_index do |id, index|
         | 
| 11 | 
            +
                  find(id).update_attributes! :position => index+1
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
                new_order
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
              
         | 
| 16 | 
            +
              def uploads=(new_uploads)
         | 
| 17 | 
            +
                (asset || build_asset).uploads=new_uploads
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
              
         | 
| 20 | 
            +
              def uploads
         | 
| 21 | 
            +
                (asset || build_asset).uploads
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
            end
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            <h2>Attachments</h2>
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            <%= render :partial => 'admin/assets/upload', :locals => {:record => @page.attachments.build, :url => admin_page_attachments_path(@page)} %>
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            <ul id="assets">
         | 
| 6 | 
            +
              <%= render :partial => 'admin/assets/attachment', :collection => @page.attachments.reject(&:new_record?) %> 
         | 
| 7 | 
            +
            </ul>
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            <script type="text/javascript">
         | 
| 10 | 
            +
              (function($) {
         | 
| 11 | 
            +
                $(function() {
         | 
| 12 | 
            +
                  $('#assets').sortable({
         | 
| 13 | 
            +
                    update: function(event, ui) {
         | 
| 14 | 
            +
                      $.ajax({
         | 
| 15 | 
            +
                        type: "POST",
         | 
| 16 | 
            +
                        url: '<%= positions_admin_page_attachments_path(@page) %>',
         | 
| 17 | 
            +
                        data: '_method=PUT&'+$(this).sortable('serialize'),
         | 
| 18 | 
            +
                      });
         | 
| 19 | 
            +
                    }
         | 
| 20 | 
            +
                  }).disableSelection();
         | 
| 21 | 
            +
                });
         | 
| 22 | 
            +
              }(jQuery));
         | 
| 23 | 
            +
            </script>
         | 
| @@ -1,11 +1,9 @@ | |
| 1 1 | 
             
            <ul id="assets">
         | 
| 2 | 
            -
              <% unless  | 
| 3 | 
            -
                <%  | 
| 2 | 
            +
              <% unless assets.empty? %>
         | 
| 3 | 
            +
                <% assets.each do |asset| %>
         | 
| 4 4 | 
             
                  <li>
         | 
| 5 5 | 
             
                    <% link_to edit_admin_asset_path(asset) do %>
         | 
| 6 | 
            -
                      <%=  | 
| 7 | 
            -
                      <span class="id">ID: <%= asset.id %></span>
         | 
| 8 | 
            -
                      <span class="caption"><%= asset %></span>
         | 
| 6 | 
            +
                      <%= asset_grid_item(asset) %>
         | 
| 9 7 | 
             
                    <% end %>
         | 
| 10 8 | 
             
                    <%= link_to_remove(asset) %>
         | 
| 11 9 | 
             
                  </li>
         | 
| @@ -3,6 +3,7 @@ | |
| 3 3 | 
             
                <th class="name">Name</th>
         | 
| 4 4 | 
             
                <th class="format">Type</th>
         | 
| 5 5 | 
             
                <th class="size">Size</th>
         | 
| 6 | 
            +
                <th class="updated_at">Last Changed</th>
         | 
| 6 7 | 
             
                <th class="actions">Modify</th>
         | 
| 7 8 | 
             
              </thead>
         | 
| 8 9 | 
             
              <tbody>
         | 
| @@ -12,6 +13,7 @@ | |
| 12 13 | 
             
                    <td class="name"><%= asset_listing(asset) %></td>
         | 
| 13 14 | 
             
                    <td class="format"><%= asset.format.to_s.mb_chars.upcase %></td>
         | 
| 14 15 | 
             
                    <td class="size"><%= number_to_human_size(asset.upload.size) %></td>
         | 
| 16 | 
            +
                    <td class="updated_at"><%= time_ago_in_words asset.updated_at %> ago</td>
         | 
| 15 17 | 
             
                    <td class="actions"><%= link_to_remove(asset)  %></td>
         | 
| 16 18 | 
             
                  </tr>
         | 
| 17 19 | 
             
                  <% end %>
         | 
| @@ -0,0 +1,40 @@ | |
| 1 | 
            +
            <% include_stylesheet 'admin/extensions/assets/assets' %>
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            <% form_for record, :url => url, :html => {:multipart => true, :id => 'asset_upload', 'data-onsubmit_status'=>'Uploading Asset…'} do |f| %>
         | 
| 4 | 
            +
              <p>Click or drag files here to upload</p>
         | 
| 5 | 
            +
              <%= f.file_field :uploads, :multiple => true %>
         | 
| 6 | 
            +
              
         | 
| 7 | 
            +
              <p class="buttons">
         | 
| 8 | 
            +
                <%= f.submit 'Upload Asset', :class=>'button' %>
         | 
| 9 | 
            +
                or <%= link_to 'Cancel', admin_assets_path %>
         | 
| 10 | 
            +
              </p>
         | 
| 11 | 
            +
            <% end %>
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
         | 
| 14 | 
            +
            <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js"></script>
         | 
| 15 | 
            +
            <% include_stylesheet 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/themes/base/jquery-ui.css' %>
         | 
| 16 | 
            +
            <script type="text/javascript">jQuery.noConflict();</script>
         | 
| 17 | 
            +
            <script src="/jquery.fileupload/jquery.fileupload.js" type="text/javascript"></script>
         | 
| 18 | 
            +
            <script src="/jquery.fileupload/jquery.fileupload-ui.js" type="text/javascript"></script>
         | 
| 19 | 
            +
            <% include_stylesheet '/jquery.fileupload/jquery.fileupload-ui.css' %>
         | 
| 20 | 
            +
            <script type="text/javascript">
         | 
| 21 | 
            +
              (function($) {
         | 
| 22 | 
            +
                $(function () {
         | 
| 23 | 
            +
                  $('form#asset_upload').fileUploadUI({
         | 
| 24 | 
            +
                    uploadTable: $('#assets'),
         | 
| 25 | 
            +
                    downloadTable: $('#assets'),
         | 
| 26 | 
            +
                    buildUploadRow: function (files, index) {
         | 
| 27 | 
            +
                      return $('<li>' + files[index].name +
         | 
| 28 | 
            +
                               '<span class="file_upload_progress"><div><\/div><\/span>' +
         | 
| 29 | 
            +
                               '<span class="file_upload_cancel">' +
         | 
| 30 | 
            +
                               '<button class="ui-state-default ui-corner-all" title="Cancel">' +
         | 
| 31 | 
            +
                               '<span class="ui-icon ui-icon-cancel">Cancel<\/span>' +
         | 
| 32 | 
            +
                               '<\/button><\/span><\/li>');
         | 
| 33 | 
            +
                    },
         | 
| 34 | 
            +
                    buildDownloadRow: function (file) {
         | 
| 35 | 
            +
                      return $(file.markup);
         | 
| 36 | 
            +
                    }
         | 
| 37 | 
            +
                  });
         | 
| 38 | 
            +
                });
         | 
| 39 | 
            +
              }(jQuery));
         | 
| 40 | 
            +
            </script>
         | 
| @@ -18,6 +18,14 @@ | |
| 18 18 | 
             
                </table>
         | 
| 19 19 | 
             
                <%= f.file_field :upload %>
         | 
| 20 20 | 
             
                <%= display(@asset) %>
         | 
| 21 | 
            +
                <%- if @asset.attachments.any? -%>
         | 
| 22 | 
            +
                  <h2>Included on <%= pluralize(@asset.attachments.size, 'this page', 'these pages') %>:</h2>
         | 
| 23 | 
            +
                  <ul>
         | 
| 24 | 
            +
                    <%- @asset.attachments.each do |attachment| -%>
         | 
| 25 | 
            +
                      <li><%= link_to attachment.page.title, edit_admin_page_path(attachment.page) %></li>
         | 
| 26 | 
            +
                    <%- end -%>
         | 
| 27 | 
            +
                  </ul>
         | 
| 28 | 
            +
                <%- end -%>
         | 
| 21 29 | 
             
              </div>
         | 
| 22 30 | 
             
              <p class="buttons">
         | 
| 23 31 | 
             
                <%= save_model_button(@asset) %>
         | 
| @@ -1,45 +1,6 @@ | |
| 1 | 
            -
            <% include_stylesheet 'admin/extensions/assets/assets' %>
         | 
| 2 | 
            -
             | 
| 3 1 | 
             
            <h1>Upload New Assets</h1>
         | 
| 4 | 
            -
            <table id="files">
         | 
| 5 | 
            -
              <tbody></tbody>
         | 
| 6 | 
            -
            </table>
         | 
| 7 2 |  | 
| 8 | 
            -
            < | 
| 9 | 
            -
             | 
| 10 | 
            -
              <%= f.file_field :upload, :multiple => true %>
         | 
| 11 | 
            -
              
         | 
| 12 | 
            -
              <!-- <p class="buttons">
         | 
| 13 | 
            -
                <%= f.submit 'Upload Asset', :class=>'button' %>
         | 
| 14 | 
            -
                or <%= link_to 'Cancel', admin_assets_path %>
         | 
| 15 | 
            -
              </p> -->
         | 
| 16 | 
            -
            <% end %>
         | 
| 3 | 
            +
            <ul id="assets">
         | 
| 4 | 
            +
            </ul>
         | 
| 17 5 |  | 
| 18 | 
            -
             | 
| 19 | 
            -
            <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js"></script>
         | 
| 20 | 
            -
            <% include_stylesheet 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/themes/base/jquery-ui.css' %>
         | 
| 21 | 
            -
            <script type="text/javascript">jQuery.noConflict();</script>
         | 
| 22 | 
            -
            <script src="/jquery.fileupload/jquery.fileupload.js" type="text/javascript"></script>
         | 
| 23 | 
            -
            <script src="/jquery.fileupload/jquery.fileupload-ui.js" type="text/javascript"></script>
         | 
| 24 | 
            -
            <% include_stylesheet '/jquery.fileupload/jquery.fileupload-ui.css' %>
         | 
| 25 | 
            -
            <script type="text/javascript">
         | 
| 26 | 
            -
              (function($) {
         | 
| 27 | 
            -
                $(function () {
         | 
| 28 | 
            -
                  $('form.new_asset').fileUploadUI({
         | 
| 29 | 
            -
                    uploadTable: $('#files'),
         | 
| 30 | 
            -
                    downloadTable: $('#files'),
         | 
| 31 | 
            -
                    buildUploadRow: function (files, index) {
         | 
| 32 | 
            -
                      return $('<tr><td>' + files[index].name + '<\/td>' +
         | 
| 33 | 
            -
                               '<td class="file_upload_progress"><div><\/div><\/td>' +
         | 
| 34 | 
            -
                               '<td class="file_upload_cancel">' +
         | 
| 35 | 
            -
                               '<button class="ui-state-default ui-corner-all" title="Cancel">' +
         | 
| 36 | 
            -
                               '<span class="ui-icon ui-icon-cancel">Cancel<\/span>' +
         | 
| 37 | 
            -
                               '<\/button><\/td><\/tr>');
         | 
| 38 | 
            -
                    },
         | 
| 39 | 
            -
                    buildDownloadRow: function (file) {
         | 
| 40 | 
            -
                      return $('<tr><td>' + file.markup + '<\/td><\/tr>');
         | 
| 41 | 
            -
                    }
         | 
| 42 | 
            -
                  });
         | 
| 43 | 
            -
                });
         | 
| 44 | 
            -
              }(jQuery));
         | 
| 45 | 
            -
            </script>
         | 
| 6 | 
            +
            <%= render :partial => 'upload', :locals => {:record => @asset, :url => admin_assets_path} %>
         | 
| @@ -8,6 +8,18 @@ | |
| 8 8 |  | 
| 9 9 | 
             
            <table class="index" id="assets">
         | 
| 10 10 | 
             
              <tr><td class="name"><%= asset_listing(@asset) %></td></tr>
         | 
| 11 | 
            +
              <% if @asset.attachments.any? %>
         | 
| 12 | 
            +
                <tr>
         | 
| 13 | 
            +
                  <th>
         | 
| 14 | 
            +
                    It's being used on the following
         | 
| 15 | 
            +
                    <%= pluralize(@asset.attachments.size, 'page') %> and will be removed from
         | 
| 16 | 
            +
                    there as well:
         | 
| 17 | 
            +
                    </th>
         | 
| 18 | 
            +
                </tr>
         | 
| 19 | 
            +
                <% @asset.attachments.each do |attachment| %>
         | 
| 20 | 
            +
                  <tr><td><%= attachment.page.title %></td></tr>
         | 
| 21 | 
            +
                <% end %>
         | 
| 22 | 
            +
              <% end %>
         | 
| 11 23 | 
             
            </table>
         | 
| 12 24 |  | 
| 13 25 | 
             
            <% form_for [:admin, @asset], :html => {:method => :delete, 'data-onsubmit_status'=>'Removing asset…'} do |f| %>
         | 
    
        data/assets_extension.rb
    CHANGED
    
    | @@ -29,6 +29,11 @@ class AssetsExtension < Radiant::Extension | |
| 29 29 | 
             
                tab 'Content' do
         | 
| 30 30 | 
             
                  add_item 'Assets', '/admin/assets', :after => 'Pages'
         | 
| 31 31 | 
             
                end
         | 
| 32 | 
            -
                 | 
| 32 | 
            +
                admin.page.edit.add :main, 'admin/assets/attachments', :after => :form
         | 
| 33 | 
            +
                ApplicationController.helper(:assets)
         | 
| 34 | 
            +
                Page.class_eval do
         | 
| 35 | 
            +
                  include AssetTags
         | 
| 36 | 
            +
                  has_many :attachments, :include => :asset, :order => :position
         | 
| 37 | 
            +
                end
         | 
| 33 38 | 
             
              end
         | 
| 34 39 | 
             
            end
         | 
    
        data/config/routes.rb
    CHANGED
    
    | @@ -2,4 +2,9 @@ ActionController::Routing::Routes.draw do |map| | |
| 2 2 | 
             
              map.namespace :admin, :member => { :remove => :get } do |admin|
         | 
| 3 3 | 
             
                admin.resources :assets
         | 
| 4 4 | 
             
              end
         | 
| 5 | 
            +
              map.namespace :admin do |admin|
         | 
| 6 | 
            +
                admin.resources :pages do |pages|
         | 
| 7 | 
            +
                  pages.resources :attachments, :collection => { :positions => :put }
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
              end
         | 
| 5 10 | 
             
            end
         | 
| @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            class AddCachingColumnsToAsset < ActiveRecord::Migration
         | 
| 2 | 
            +
              def self.up
         | 
| 3 | 
            +
                add_column :assets, :upload_name, :string
         | 
| 4 | 
            +
                add_column :assets, :upload_ext, :string
         | 
| 5 | 
            +
                add_column :assets, :upload_size, :integer
         | 
| 6 | 
            +
                add_column :assets, :upload_width, :integer
         | 
| 7 | 
            +
                add_column :assets, :upload_height, :integer
         | 
| 8 | 
            +
                puts "Updating existing assets…"
         | 
| 9 | 
            +
                Asset.all.each do |asset|
         | 
| 10 | 
            +
                  asset.upload_name = asset.upload.name
         | 
| 11 | 
            +
                  asset.upload_ext = asset.upload.ext
         | 
| 12 | 
            +
                  asset.upload_size = asset.upload.size
         | 
| 13 | 
            +
                  asset.upload_width = asset.upload.width
         | 
| 14 | 
            +
                  asset.upload_height = asset.upload.height
         | 
| 15 | 
            +
                  asset.save!
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              def self.down
         | 
| 20 | 
            +
                remove_column :assets, :upload_name
         | 
| 21 | 
            +
                remove_column :assets, :upload_ext
         | 
| 22 | 
            +
                remove_column :assets, :upload_size
         | 
| 23 | 
            +
                remove_column :assets, :upload_width
         | 
| 24 | 
            +
                remove_column :assets, :upload_height
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
            end
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            class AddTimestampsAndLockingToAssets < ActiveRecord::Migration
         | 
| 2 | 
            +
              def self.up
         | 
| 3 | 
            +
                add_column :assets, :lock_version, :integer, :default => 0
         | 
| 4 | 
            +
                add_column :assets, :created_at, :datetime
         | 
| 5 | 
            +
                add_column :assets, :updated_at, :datetime
         | 
| 6 | 
            +
                puts 'Updating current assets with dates'
         | 
| 7 | 
            +
                Asset.all.each do |asset|
         | 
| 8 | 
            +
                  asset.created_at = Time.now
         | 
| 9 | 
            +
                  asset.updated_at = Time.now
         | 
| 10 | 
            +
                  asset.save!
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              def self.down
         | 
| 15 | 
            +
                remove_column :assets, :lock_version
         | 
| 16 | 
            +
                add_column :assets, :created_at
         | 
| 17 | 
            +
                add_column :assets, :updated_at
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
            end
         | 
| @@ -0,0 +1,14 @@ | |
| 1 | 
            +
            class AddPositionToAttachments < ActiveRecord::Migration
         | 
| 2 | 
            +
              def self.up
         | 
| 3 | 
            +
                add_column :attachments, :position, :integer
         | 
| 4 | 
            +
                Page.all(:include => :attachments).each do |page|
         | 
| 5 | 
            +
                  page.attachments.each_with_index do |attachment, index|
         | 
| 6 | 
            +
                    attachment.update_attributes :position => index+1
         | 
| 7 | 
            +
                  end
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              def self.down
         | 
| 12 | 
            +
                remove_column :attachments, :position
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
            end
         | 
| @@ -17,32 +17,41 @@ table.index .size { | |
| 17 17 | 
             
              padding-right: 5px;
         | 
| 18 18 | 
             
            }
         | 
| 19 19 |  | 
| 20 | 
            +
            table#assets .icon,
         | 
| 21 | 
            +
            table#assets .thumbnail {
         | 
| 22 | 
            +
              margin-right: 5px;
         | 
| 23 | 
            +
            }
         | 
| 24 | 
            +
             | 
| 20 25 | 
             
            #assets .icon {
         | 
| 26 | 
            +
              float: left;
         | 
| 27 | 
            +
              font-size: 75%;
         | 
| 21 28 | 
             
              display: block;
         | 
| 22 29 | 
             
              text-align: center;
         | 
| 23 30 | 
             
              background: #ccc;
         | 
| 24 31 | 
             
              text-transform: uppercase;
         | 
| 32 | 
            +
              overflow: hidden;
         | 
| 25 33 | 
             
            }
         | 
| 26 34 |  | 
| 27 | 
            -
            table#assets . | 
| 28 | 
            -
             | 
| 29 | 
            -
               | 
| 35 | 
            +
            table#assets th.name,
         | 
| 36 | 
            +
            table#assets td.name {
         | 
| 37 | 
            +
              width: auto;
         | 
| 30 38 | 
             
            }
         | 
| 31 39 |  | 
| 32 | 
            -
            table#assets . | 
| 33 | 
            -
               | 
| 40 | 
            +
            table#assets th.actions {
         | 
| 41 | 
            +
            /*  min-width: 7em;*/
         | 
| 42 | 
            +
              min-width: auto;
         | 
| 34 43 | 
             
            }
         | 
| 35 44 |  | 
| 36 | 
            -
            table#assets . | 
| 37 | 
            -
               | 
| 38 | 
            -
             | 
| 39 | 
            -
            }
         | 
| 45 | 
            +
            /*table#assets th.size {*/
         | 
| 46 | 
            +
            /*  min-width: 5em;*/
         | 
| 47 | 
            +
            /*}*/
         | 
| 40 48 |  | 
| 41 | 
            -
            #assets, #assets li {
         | 
| 49 | 
            +
            ul#assets, #assets li {
         | 
| 42 50 | 
             
              display: block;
         | 
| 43 51 | 
             
              list-style: none;
         | 
| 44 52 | 
             
              margin: 0;
         | 
| 45 53 | 
             
              padding: 0;
         | 
| 54 | 
            +
              overflow: hidden;
         | 
| 46 55 | 
             
            }
         | 
| 47 56 |  | 
| 48 57 | 
             
            #assets li {
         | 
| @@ -51,7 +60,6 @@ table#assets .icon { | |
| 51 60 | 
             
              margin-right: 1px;
         | 
| 52 61 | 
             
              margin-bottom: 1px;
         | 
| 53 62 | 
             
              position: relative;
         | 
| 54 | 
            -
              overflow: hidden;
         | 
| 55 63 | 
             
            }
         | 
| 56 64 |  | 
| 57 65 | 
             
            #assets li a {
         | 
| @@ -73,6 +81,10 @@ table#assets .icon { | |
| 73 81 | 
             
              display: block;
         | 
| 74 82 | 
             
            }
         | 
| 75 83 |  | 
| 84 | 
            +
            #assets li .action {
         | 
| 85 | 
            +
              right: 2px;
         | 
| 86 | 
            +
            }
         | 
| 87 | 
            +
             | 
| 76 88 | 
             
            #assets li .caption {
         | 
| 77 89 | 
             
              top: auto;
         | 
| 78 90 | 
             
              bottom: 0;
         | 
| @@ -92,7 +104,6 @@ table#assets .remove::before { | |
| 92 104 | 
             
            }
         | 
| 93 105 |  | 
| 94 106 | 
             
            #assets li .remove {
         | 
| 95 | 
            -
              right: 2px;
         | 
| 96 107 | 
             
              width: 12px;
         | 
| 97 108 | 
             
              height: 12px;
         | 
| 98 109 | 
             
              text-indent: -1000em;
         | 
| @@ -114,3 +125,28 @@ table#assets .remove::before, | |
| 114 125 | 
             
            #actions .new a::before {
         | 
| 115 126 | 
             
              background: url('/images/admin/plus.png') no-repeat left bottom;
         | 
| 116 127 | 
             
            }
         | 
| 128 | 
            +
             | 
| 129 | 
            +
            /*
         | 
| 130 | 
            +
              Overriding values from jquery.fileupload-ui.css
         | 
| 131 | 
            +
              Need higher specificity as that file is only loaded later
         | 
| 132 | 
            +
            */
         | 
| 133 | 
            +
             | 
| 134 | 
            +
            html .file_upload {
         | 
| 135 | 
            +
              width: auto;
         | 
| 136 | 
            +
              height: auto;
         | 
| 137 | 
            +
              margin: 1em 0;
         | 
| 138 | 
            +
            }
         | 
| 139 | 
            +
             | 
| 140 | 
            +
            html .file_upload .buttons {display: none}
         | 
| 141 | 
            +
             | 
| 142 | 
            +
             | 
| 143 | 
            +
            html .file_upload,
         | 
| 144 | 
            +
            html .file_upload_small,
         | 
| 145 | 
            +
            html .file_upload_large {
         | 
| 146 | 
            +
              background: #F5F1E2;
         | 
| 147 | 
            +
              border-color: #ccc;
         | 
| 148 | 
            +
            }
         | 
| 149 | 
            +
             | 
| 150 | 
            +
            html .file_upload_highlight {
         | 
| 151 | 
            +
              background: lawngreen;
         | 
| 152 | 
            +
            }
         | 
| @@ -14,6 +14,7 @@ Gem::Specification.new do |s| | |
| 14 14 |  | 
| 15 15 | 
             
              s.add_dependency 'dragonfly', '~>0.8.2'
         | 
| 16 16 | 
             
              s.add_dependency 'aws-s3', '~>0.6.2'
         | 
| 17 | 
            +
              s.add_dependency 'acts_as_list', '~>0.1.2'
         | 
| 17 18 |  | 
| 18 19 | 
             
              s.files         = `git ls-files`.split("\n")
         | 
| 19 20 | 
             
              s.test_files    = `git ls-files -- {test,spec,features}/*`.split("\n")
         | 
    
        metadata
    CHANGED
    
    | @@ -1,13 +1,13 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: radiant-assets-extension
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              hash:  | 
| 4 | 
            +
              hash: 17
         | 
| 5 5 | 
             
              prerelease: false
         | 
| 6 6 | 
             
              segments: 
         | 
| 7 7 | 
             
              - 0
         | 
| 8 8 | 
             
              - 0
         | 
| 9 | 
            -
              -  | 
| 10 | 
            -
              version: 0.0. | 
| 9 | 
            +
              - 7
         | 
| 10 | 
            +
              version: 0.0.7
         | 
| 11 11 | 
             
            platform: ruby
         | 
| 12 12 | 
             
            authors: 
         | 
| 13 13 | 
             
            - Gerrit Kaiser
         | 
| @@ -15,7 +15,7 @@ autorequire: | |
| 15 15 | 
             
            bindir: bin
         | 
| 16 16 | 
             
            cert_chain: []
         | 
| 17 17 |  | 
| 18 | 
            -
            date: 2011- | 
| 18 | 
            +
            date: 2011-03-20 00:00:00 +00:00
         | 
| 19 19 | 
             
            default_executable: 
         | 
| 20 20 | 
             
            dependencies: 
         | 
| 21 21 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| @@ -50,6 +50,22 @@ dependencies: | |
| 50 50 | 
             
                    version: 0.6.2
         | 
| 51 51 | 
             
              type: :runtime
         | 
| 52 52 | 
             
              version_requirements: *id002
         | 
| 53 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 54 | 
            +
              name: acts_as_list
         | 
| 55 | 
            +
              prerelease: false
         | 
| 56 | 
            +
              requirement: &id003 !ruby/object:Gem::Requirement 
         | 
| 57 | 
            +
                none: false
         | 
| 58 | 
            +
                requirements: 
         | 
| 59 | 
            +
                - - ~>
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 61 | 
            +
                    hash: 31
         | 
| 62 | 
            +
                    segments: 
         | 
| 63 | 
            +
                    - 0
         | 
| 64 | 
            +
                    - 1
         | 
| 65 | 
            +
                    - 2
         | 
| 66 | 
            +
                    version: 0.1.2
         | 
| 67 | 
            +
              type: :runtime
         | 
| 68 | 
            +
              version_requirements: *id003
         | 
| 53 69 | 
             
            description: Makes Radiant better by adding images!
         | 
| 54 70 | 
             
            email: 
         | 
| 55 71 | 
             
            - gerrit@gerritkaiser.de
         | 
| @@ -62,14 +78,20 @@ extra_rdoc_files: [] | |
| 62 78 | 
             
            files: 
         | 
| 63 79 | 
             
            - .gitignore
         | 
| 64 80 | 
             
            - Gemfile
         | 
| 65 | 
            -
            - README
         | 
| 81 | 
            +
            - README.rdoc
         | 
| 66 82 | 
             
            - Rakefile
         | 
| 67 83 | 
             
            - app/controllers/admin/assets_controller.rb
         | 
| 84 | 
            +
            - app/controllers/admin/attachments_controller.rb
         | 
| 85 | 
            +
            - app/controllers/admin/upload_handler.rb
         | 
| 68 86 | 
             
            - app/helpers/assets_helper.rb
         | 
| 69 87 | 
             
            - app/models/asset.rb
         | 
| 70 88 | 
             
            - app/models/asset_tags.rb
         | 
| 89 | 
            +
            - app/models/attachment.rb
         | 
| 90 | 
            +
            - app/views/admin/assets/_attachment.html.erb
         | 
| 91 | 
            +
            - app/views/admin/assets/_attachments.html.erb
         | 
| 71 92 | 
             
            - app/views/admin/assets/_grid.html.erb
         | 
| 72 93 | 
             
            - app/views/admin/assets/_list.html.erb
         | 
| 94 | 
            +
            - app/views/admin/assets/_upload.html.erb
         | 
| 73 95 | 
             
            - app/views/admin/assets/edit.html.erb
         | 
| 74 96 | 
             
            - app/views/admin/assets/index.html.erb
         | 
| 75 97 | 
             
            - app/views/admin/assets/new.html.erb
         | 
| @@ -82,6 +104,10 @@ files: | |
| 82 104 | 
             
            - db/migrate/20110224001246_add_images_table.rb
         | 
| 83 105 | 
             
            - db/migrate/20110225021327_add_caption.rb
         | 
| 84 106 | 
             
            - db/migrate/20110225023017_rename_model_class.rb
         | 
| 107 | 
            +
            - db/migrate/20110225174217_add_caching_columns_to_asset.rb
         | 
| 108 | 
            +
            - db/migrate/20110225210821_add_attachment_to_pages.rb
         | 
| 109 | 
            +
            - db/migrate/20110225210912_add_timestamps_and_locking_to_assets.rb
         | 
| 110 | 
            +
            - db/migrate/20110320152044_add_position_to_attachments.rb
         | 
| 85 111 | 
             
            - features/support/env.rb
         | 
| 86 112 | 
             
            - features/support/paths.rb
         | 
| 87 113 | 
             
            - lib/radiant-assets-extension.rb
         | 
| @@ -101,7 +127,7 @@ has_rdoc: true | |
| 101 127 | 
             
            homepage: http://ext.radiantcms.org/extensions/269-assets
         | 
| 102 128 | 
             
            licenses: []
         | 
| 103 129 |  | 
| 104 | 
            -
            post_install_message: "\n  Add this to your radiant project with:\n    config.gem 'radiant-assets-extension', :version => '0.0. | 
| 130 | 
            +
            post_install_message: "\n  Add this to your radiant project with:\n    config.gem 'radiant-assets-extension', :version => '0.0.7'\n  "
         | 
| 105 131 | 
             
            rdoc_options: []
         | 
| 106 132 |  | 
| 107 133 | 
             
            require_paths: 
         |