From 7aca36e46b66ccd33fffdbd4b5e373f36baefb43 Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Sun, 4 Jan 2015 14:19:19 +0100 Subject: [PATCH 01/19] Added Paperclip attachment handler --- Gemfile | 3 +++ Gemfile.lock | 10 ++++++++++ app/models/screenshot.rb | 6 ++++++ db/schema.rb | 17 +++++++++++------ 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/Gemfile b/Gemfile index 8e22019..9246d1a 100644 --- a/Gemfile +++ b/Gemfile @@ -94,3 +94,6 @@ gem 'pg_search' # Use SLIM as our templating language gem 'slim-rails' + +# Attachment/image handling +gem "paperclip", "~> 4.2" diff --git a/Gemfile.lock b/Gemfile.lock index 408b7c7..c056c89 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -48,6 +48,10 @@ GEM columnize (~> 0.8) debugger-linecache (~> 1.2) slop (~> 3.6) + climate_control (0.0.3) + activesupport (>= 3.0) + cocaine (0.5.5) + climate_control (>= 0.0.3, < 1.0) coderay (1.1.0) coffee-rails (4.1.0) coffee-script (>= 2.2.0) @@ -93,6 +97,11 @@ GEM multi_json (1.10.1) nokogiri (1.6.5) mini_portile (~> 0.6.0) + paperclip (4.2.1) + activemodel (>= 3.0.0) + activesupport (>= 3.0.0) + cocaine (~> 0.5.3) + mime-types pg (0.17.1) pg_search (0.7.8) activerecord (>= 3.1) @@ -189,6 +198,7 @@ DEPENDENCIES jbuilder (~> 2.0) jquery-rails jquery.fileupload-rails + paperclip (~> 4.2) pg pg_search rails (= 4.2.0) diff --git a/app/models/screenshot.rb b/app/models/screenshot.rb index 5a51727..985e83d 100644 --- a/app/models/screenshot.rb +++ b/app/models/screenshot.rb @@ -5,6 +5,12 @@ class Screenshot < ActiveRecord::Base order('uploaddatetime DESC') } + has_attached_file :image, + styles: { :large => "800x600>", :thumb => "160x120>" }, + default_url: "/images/dummy/no-screenshots-upload-one.svg" + #path: :rails_root/public/system/:class/:attachment/:id_partition/:style/:filename + validates_attachment_content_type :image, :content_type => /\Aimage\/png\Z/ + def image_url(size) "#{Rails.configuration.images_path_prefix}/#{self.package.name[0]}/#{self.package.name}/#{self.id}_#{size}.png" end diff --git a/db/schema.rb b/db/schema.rb index cf2c660..489ff6c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20141229173351) do +ActiveRecord::Schema.define(version: 20150103194230) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -41,16 +41,21 @@ ActiveRecord::Schema.define(version: 20141229173351) do create_table "screenshots", force: :cascade do |t| t.integer "package_id" - t.string "version", limit: 50 + t.string "version", limit: 50 t.datetime "uploaddatetime" - t.string "uploaderhash", limit: 72 - t.string "uploaderip", limit: 15 + t.string "uploaderhash", limit: 72 + t.string "uploaderip", limit: 15 t.boolean "approved" t.boolean "markedfordelete" - t.string "delete_reason", limit: 100 - t.string "description", limit: 40 + t.string "delete_reason", limit: 100 + t.string "description", limit: 40 t.datetime "created_at" t.datetime "updated_at" + t.string "image_file_name" + t.string "image_content_type" + t.integer "image_file_size" + t.datetime "image_updated_at" + t.string "image_fingerprint" end add_index "screenshots", ["id", "approved"], name: "id_approved", using: :btree From 4a0a3c312356596cf887acde70830e5cbfb6e2bd Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Sun, 4 Jan 2015 14:19:27 +0100 Subject: [PATCH 02/19] Added Paperclip migrations --- ...50103182901_add_attachment_image_to_screenshots.rb | 11 +++++++++++ ...0103194230_add_fingerprint_column_to_screenshot.rb | 9 +++++++++ 2 files changed, 20 insertions(+) create mode 100644 db/migrate/20150103182901_add_attachment_image_to_screenshots.rb create mode 100644 db/migrate/20150103194230_add_fingerprint_column_to_screenshot.rb diff --git a/db/migrate/20150103182901_add_attachment_image_to_screenshots.rb b/db/migrate/20150103182901_add_attachment_image_to_screenshots.rb new file mode 100644 index 0000000..4dba184 --- /dev/null +++ b/db/migrate/20150103182901_add_attachment_image_to_screenshots.rb @@ -0,0 +1,11 @@ +class AddAttachmentImageToScreenshots < ActiveRecord::Migration + def self.up + change_table :screenshots do |t| + t.attachment :image + end + end + + def self.down + remove_attachment :screenshots, :image + end +end diff --git a/db/migrate/20150103194230_add_fingerprint_column_to_screenshot.rb b/db/migrate/20150103194230_add_fingerprint_column_to_screenshot.rb new file mode 100644 index 0000000..b3e2963 --- /dev/null +++ b/db/migrate/20150103194230_add_fingerprint_column_to_screenshot.rb @@ -0,0 +1,9 @@ +class AddFingerprintColumnToScreenshot < ActiveRecord::Migration + def self.up + add_column :screenshots, :image_fingerprint, :string + end + + def self.down + remove_column :screenshots, :image_fingerprint + end +end From 247a61c30f4e36d2575b47fb7ad3bc4a246d35b3 Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Sun, 4 Jan 2015 14:19:52 +0100 Subject: [PATCH 03/19] Ignoring screenshots in Paperclip asset path --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 35f258b..928e04d 100644 --- a/.gitignore +++ b/.gitignore @@ -14,5 +14,6 @@ # Ignore all logfiles and tempfiles. /log/*.log /tmp -/public/screenshots +/public/screenshots/ /public/assets/ +/public/system/ From f5d099e30a5b805a17c39f90be6a66d2da0a74bc Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Sun, 4 Jan 2015 14:20:13 +0100 Subject: [PATCH 04/19] Added suggested advance-deprecation for Rails 5 --- config/environments/development.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/config/environments/development.rb b/config/environments/development.rb index 0e89cdb..b39331a 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -27,6 +27,10 @@ Debshots::Application.configure do # number of complex assets. config.assets.debug = true + # ActiveRecord errors propagate normally (forward deprecation to Rails 5) + config.active_record.raise_in_transactional_callbacks = true + + # URL prefix leading to the static images that should get delivered by the web server config.images_path_prefix = '/screenshots' From 38df37057abb2cb4a8fc2435946ad472c44dcfb0 Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Sun, 4 Jan 2015 14:20:31 +0100 Subject: [PATCH 05/19] Added migration script to add screenshots to Paperclip --- lib/tasks/screenshots_to_paperclip.rake | 32 +++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 lib/tasks/screenshots_to_paperclip.rake diff --git a/lib/tasks/screenshots_to_paperclip.rake b/lib/tasks/screenshots_to_paperclip.rake new file mode 100644 index 0000000..1daba4b --- /dev/null +++ b/lib/tasks/screenshots_to_paperclip.rake @@ -0,0 +1,32 @@ +desc "Convert images from the original screenshots directory tree to paperclip-styled images" + +task :screenshots_to_paperclip => :environment do + Rails.logger = Logger.new(STDOUT) + Rails.logger.level = Logger::INFO + #Rails.logger.level = Logger::DEBUG + + base_path = Rails.root.join('public') + + Rails.logger.info "Iterating over screenshots" + Screenshot.all.each do |screenshot| + path = File.join(base_path, screenshot.image_url(:large)) + Rails.logger.info "- #{screenshot.id} (package: #{screenshot.package.name}) (path: #{path})" + + # Check that the file actually exists + unless File.file? path + Rails.logger.error "Screenshots not found at #{path}. Skipping." + next + end + + # Has the screenshot been migrated already? + if screenshot.image.exists? + Rails.logger.error "Screenshot already migrated. Skipping." + next + end + + File.open(path, 'rb') do |image_file| + screenshot.image = image_file + screenshot.save + end + end +end From e4e8c0c0dbc097644f23a9e0de4f348e9ec65501 Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Sun, 4 Jan 2015 14:20:54 +0100 Subject: [PATCH 06/19] Changed "puts" to proper logging --- lib/tasks/import_debian.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tasks/import_debian.rake b/lib/tasks/import_debian.rake index d8eb298..dfd6c63 100644 --- a/lib/tasks/import_debian.rake +++ b/lib/tasks/import_debian.rake @@ -47,7 +47,7 @@ task :import_debian => :environment do Rails.logger.level = Logger::INFO #Rails.logger.level = Logger::DEBUG - puts "Importing Debian package information" + Rails.logger.info "Importing Debian package information" repositories.each do |repository| Rails.logger.info "Fetching Release file for repository: #{repository[:url]} with components: #{repository[:components]}" From 095ec7813afa4154094f0f774380f4cb1bddd86e Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Sun, 4 Jan 2015 16:57:20 +0100 Subject: [PATCH 07/19] Removing old methods before I used Paperclip --- app/models/screenshot.rb | 35 ----------------------------------- 1 file changed, 35 deletions(-) diff --git a/app/models/screenshot.rb b/app/models/screenshot.rb index 985e83d..5402a70 100644 --- a/app/models/screenshot.rb +++ b/app/models/screenshot.rb @@ -11,23 +11,6 @@ class Screenshot < ActiveRecord::Base #path: :rails_root/public/system/:class/:attachment/:id_partition/:style/:filename validates_attachment_content_type :image, :content_type => /\Aimage\/png\Z/ - def image_url(size) - "#{Rails.configuration.images_path_prefix}/#{self.package.name[0]}/#{self.package.name}/#{self.id}_#{size}.png" - end - - # Get the URL leading to a screenshot of this package - def url(size) - if self.approved - # TODO: Make the path configurable - basepath = "/screenshots/" - else - # TODO: Choose a path that makes unapproved screenshots unavailable - basepath = "/screenshots/unapproved/" - end - - File.join(basepath, self.package.name[0], self.package.name, "#{self.id}_#{size}.png") - end - # Return caption for full-screen screenshots. # Takes the description of a screenshot if available. # Otherwise it falls back to the general description of its package. @@ -39,27 +22,9 @@ class Screenshot < ActiveRecord::Base end end - def image_file(size) - # Screenshot files are at e.g. - # .../public/screenshots/f/firefox/5871654_large.png - Rails.configuration.images_path.join(self.package.name[0], self.package.name, "#{self.id}_#{size}.png") end - # Delete all image files related to this screenshot - def delete_all_images - Rails.configuration.image_sizes.each do |size,dimensions| - image_file = self.image_file(size) - Rails.logger.info "(before_destroy) Deleting screenshot image '#{image_file}' from disk" - if File.exist?(image_file) - File.delete(image_file) - else - Rails.logger.error "(before_destroy) File '#{image_file}' not found - could not delete it" - end end - end - # Callback to delete image files from disk when a screenshot record gets destroyed - before_destroy do |screenshot| - screenshot.delete_all_images end end From 9877b25267f0a6f875117b70211330061949c7f4 Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Sun, 4 Jan 2015 16:57:35 +0100 Subject: [PATCH 08/19] Added "uploader" and "status" methods for Screenshot class --- app/models/screenshot.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/app/models/screenshot.rb b/app/models/screenshot.rb index 5402a70..fdf0890 100644 --- a/app/models/screenshot.rb +++ b/app/models/screenshot.rb @@ -22,9 +22,24 @@ class Screenshot < ActiveRecord::Base end end + def uploader + # TODO: Implement the ownership of images + "Anonymous" end + def status + text = '' + # Completes the sentence: "This image…" + if self.approved + text <<'is public' + else + text <<'has to be moderated before being publicly visible' end + if self.markedfordelete + text <<' (and was requested to be removed)' + end + + text end end From 2d8e1a43b0438ccabb7d48898d06af77a23e0527 Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Sun, 4 Jan 2015 16:58:04 +0100 Subject: [PATCH 09/19] Showing details about a screenshot --- app/assets/stylesheets/my.scss | 14 ++++++++++++++ app/views/packages/details.slim | 7 ++++--- app/views/packages/upload.slim | 16 +++++++++++++--- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/app/assets/stylesheets/my.scss b/app/assets/stylesheets/my.scss index 493124d..58f8395 100644 --- a/app/assets/stylesheets/my.scss +++ b/app/assets/stylesheets/my.scss @@ -296,3 +296,17 @@ a.black text-shadow: 0 0 2px black; } } + +/* Properties of a screenshot - shown in details view */ +.property-title +{ + font-weight: bolder; + font-size: 120%; + color: #808080; +} + +.property +{ + margin-left: 2em; + margin-bottom: 0.5em; +} \ No newline at end of file diff --git a/app/views/packages/details.slim b/app/views/packages/details.slim index 378a465..b057d4f 100644 --- a/app/views/packages/details.slim +++ b/app/views/packages/details.slim @@ -5,7 +5,7 @@ //.progress.radius //span.meter style="width: #{rand(100)}%" Rating -.row.packagepage +.row.packagepage.listview .small-12.columns h1 =@package.name @@ -15,9 +15,10 @@ ul.small-block-grid-1.medium-block-grid-2.large-block-grid-2 - for screenshot in @package.screenshots li - a.black.fancybox href=screenshot.url('large') rel='fancybox-thumb' title=screenshot.caption - img src=screenshot.url('large') + a.black.fancybox href=screenshot.image.url(:large, timestamp: false) rel='fancybox-thumb' title=screenshot.caption + = image_tag(screenshot.image.url(:large, timestamp: false), alt: screenshot.caption) .imgcaption =screenshot.caption + //- raise // TODO: Enable comments in a later version // = partial '/package/comments' diff --git a/app/views/packages/upload.slim b/app/views/packages/upload.slim index 5e33b3a..b815eef 100644 --- a/app/views/packages/upload.slim +++ b/app/views/packages/upload.slim @@ -8,7 +8,11 @@ // First row contains the upload form .row .small-6.columns - input id="fileupload" type="file" name="files[]" data-url=upload_image_path(name: @package.name) multiple=true + //input id="fileupload" type="file" name="files[]" data-url=upload_image_path(name: @package.name) multiple=true + + = form_for @package, :url => upload_image_path, :html => { :multipart => true } do |form| + = form.file_field :image + a.button.radius.expand href=upload_package_by_name_path(name: @package.name) ' Click or drag a PNG screenshot file here .small-6.columns @@ -16,9 +20,15 @@ - for screenshot in @package.screenshots .row .small-6.columns - img src=screenshot.url('large') + = image_tag(screenshot.image.url(:large, timestamp: false), alt: screenshot.caption) + .small-6.columns - ' read-only Form + .property-title This image shows the… + .property =screenshot.caption + .property-title It was uploaded by… + .property =screenshot.uploader + .property-title The image… + .property =screenshot.status .small-4.columns .bigpanel From 5e8dd243a37fc44ddcc3a937be4dd3ba983b037c Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Sun, 4 Jan 2015 18:58:35 +0100 Subject: [PATCH 10/19] Switch to iterator --- app/views/packages/details.slim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/packages/details.slim b/app/views/packages/details.slim index b057d4f..9200fb8 100644 --- a/app/views/packages/details.slim +++ b/app/views/packages/details.slim @@ -13,7 +13,7 @@ p.subtitle = @package.description ul.small-block-grid-1.medium-block-grid-2.large-block-grid-2 - - for screenshot in @package.screenshots + - @package.screenshots.each do |screenshot| li a.black.fancybox href=screenshot.image.url(:large, timestamp: false) rel='fancybox-thumb' title=screenshot.caption = image_tag(screenshot.image.url(:large, timestamp: false), alt: screenshot.caption) From d1feaf923b0cd23753c00628f93c503dbb95bb59 Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Sun, 4 Jan 2015 18:58:45 +0100 Subject: [PATCH 11/19] Use new Paperclip method --- app/views/packages/_grid_thumbnail.slim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/views/packages/_grid_thumbnail.slim b/app/views/packages/_grid_thumbnail.slim index 77bfbd1..92c331f 100644 --- a/app/views/packages/_grid_thumbnail.slim +++ b/app/views/packages/_grid_thumbnail.slim @@ -2,7 +2,9 @@ a.black href=package_path(name: pkg.name) div.grid-thumbnail - if pkg.screenshots.any? - img src=pkg.screenshots[0].url('small') + // TODO: smarter search for the beste screenshot instead of taking the first one + - screenshot = pkg.screenshots.first + = image_tag(screenshot.image.url(:thumb, timestamp: false), alt: screenshot.caption) - else img.screenshot src="/images/dummy/no-screenshots-upload-one.svg" div From 3a5aee211fb820f9c752ed2754bb927876c434cc Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Sun, 4 Jan 2015 18:58:55 +0100 Subject: [PATCH 12/19] Upload page layout simplified --- app/views/packages/upload.slim | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/app/views/packages/upload.slim b/app/views/packages/upload.slim index b815eef..5a3ddf7 100644 --- a/app/views/packages/upload.slim +++ b/app/views/packages/upload.slim @@ -4,7 +4,7 @@ p.subtitle = @package.description .row.packagepage - .small-8.columns + .small-12.medium-7.large-8.columns // First row contains the upload form .row .small-6.columns @@ -17,20 +17,18 @@ ' Click or drag a PNG screenshot file here .small-6.columns ' Form - - for screenshot in @package.screenshots - .row - .small-6.columns + - @package.screenshots.each do |screenshot| + .listview + a.black.fancybox href=screenshot.image.url(:large, timestamp: false) rel='fancybox-thumb' title=screenshot.caption = image_tag(screenshot.image.url(:large, timestamp: false), alt: screenshot.caption) + .imgcaption + => screenshot.caption + - if screenshot.uploader + | (Uploaded by + =< screenshot.uploader + | ) - .small-6.columns - .property-title This image shows the… - .property =screenshot.caption - .property-title It was uploaded by… - .property =screenshot.uploader - .property-title The image… - .property =screenshot.status - - .small-4.columns + .small-12.medium-5.large-4.columns .bigpanel p Thanks for uploading more screenshots. Please note: ul From b2eb08b975798bed96139e9a4ff4f021d8af9dd5 Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Sun, 4 Jan 2015 18:59:03 +0100 Subject: [PATCH 13/19] Added hint on Paperclip --- README.Developer | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.Developer b/README.Developer index b4a9e1e..1d21366 100644 --- a/README.Developer +++ b/README.Developer @@ -32,3 +32,6 @@ coalesce("packages"."long_description"::text, ''))) ); Used: https://github.com/semaperepelitsa/jquery.fileupload-rails Which is a gem for: https://github.com/blueimp/jQuery-File-Upload + +Paperclip for attachment/screenshot file handlind within ActiveRecord +https://github.com/thoughtbot/paperclip \ No newline at end of file From 165f6f166d246add653d6c082be396d9f0c63990 Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Mon, 12 Jan 2015 00:18:12 +0100 Subject: [PATCH 14/19] Layout of details package improved --- app/views/packages/details.slim | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/app/views/packages/details.slim b/app/views/packages/details.slim index 9200fb8..51d37f8 100644 --- a/app/views/packages/details.slim +++ b/app/views/packages/details.slim @@ -5,11 +5,11 @@ //.progress.radius //span.meter style="width: #{rand(100)}%" Rating -.row.packagepage.listview +.row.packagepage .small-12.columns h1 =@package.name - .small-7.medium-8.columns + .small-12.medium-8.columns p.subtitle = @package.description ul.small-block-grid-1.medium-block-grid-2.large-block-grid-2 @@ -18,12 +18,24 @@ a.black.fancybox href=screenshot.image.url(:large, timestamp: false) rel='fancybox-thumb' title=screenshot.caption = image_tag(screenshot.image.url(:large, timestamp: false), alt: screenshot.caption) .imgcaption =screenshot.caption + + // Upload image + li + //a.button.radius.expand href=upload_package_by_name_path(name: @package.name) Upload a new screenshot + //= form_for @package, :url => upload_image_path, :html => { :multipart => true } do |form| + //= form.file_field :image + + = form_for Screenshot.new, url: upload_image_path, html: { multipart: true } do |f| + = f.label :image, 'Upload new screenshot' + = f.file_field :image, id: 'fileupload', multiple: true + = f.submit 'Save' + //- raise // TODO: Enable comments in a later version // = partial '/package/comments' - .small-5.medium-4.columns + .small-12.medium-4.columns .bigpanel // Use action long description p @@ -36,7 +48,7 @@ ' The goal of Icedove is to produce a cross platform standalone mail ' application using the XUL user interface language. - a.button.radius.expand href=upload_package_by_name_path(name: @package.name) Upload a new screenshot + //a.button.radius.expand href=upload_package_by_name_path(name: @package.name) Upload a new screenshot // TODO: Enable comment form //javascript: From 351d42ccbba421b07da037a8b208bdedea0ffc1c Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Mon, 12 Jan 2015 00:18:57 +0100 Subject: [PATCH 15/19] Fixed views to use Paperclip --- app/views/packages/index-list.slim | 6 ++++-- app/views/welcome/home.slim | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/views/packages/index-list.slim b/app/views/packages/index-list.slim index 329331f..1a4e4c8 100644 --- a/app/views/packages/index-list.slim +++ b/app/views/packages/index-list.slim @@ -20,8 +20,10 @@ =pkg.name ' > - if pkg.screenshots.any? - a.black.fancybox title=pkg.screenshots.first.caption rel=pkg.id href=pkg.screenshots.first.url('large') - img.screenshot src=pkg.screenshots.first.url('large') + // TODO: smarter search for the beste screenshot instead of taking the first one + - screenshot = pkg.screenshots.first + a.black.fancybox title=screenshot.caption rel=pkg.id href=screenshot.image.url(:large, timestamp: false) + = image_tag(screenshot.image.url(:large, timestamp: false), alt: screenshot.caption) - if pkg.screenshots.length > 1 a.black href=package_path(name: pkg.name) .text-center More screenshots… diff --git a/app/views/welcome/home.slim b/app/views/welcome/home.slim index 15097c1..a08f186 100644 --- a/app/views/welcome/home.slim +++ b/app/views/welcome/home.slim @@ -31,7 +31,7 @@ div.row // TODO: load actual newest upload and cache it // TODO: link to the package page a.black href=package_path(@newest_uploaded_package.name) - img src=@newest_uploaded_package.screenshots[0].image_url('large') + img src=@newest_uploaded_package.screenshots.first.image.url(:large, timestamp: false) p strong =@newest_uploaded_package.name @@ -43,7 +43,7 @@ div.row // TODO: load actual most popular package and highest-rated screenshot and cache it // TODO: link to the package page a.black href=package_path(@most_popular_package.name) - img src=@most_popular_package.screenshots[0].image_url('large') + img src=@most_popular_package.screenshots.first.image.url(:large, timestamp: false) p strong =@most_popular_package.name From 3fa13965cd698a1494d3b007b64bfa2c7c9c1f9c Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Tue, 13 Jan 2015 22:48:11 +0100 Subject: [PATCH 16/19] Ignoring screenshot images --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 928e04d..549ebcd 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ /public/screenshots/ /public/assets/ /public/system/ +/public/screenshots From 23216cf38c57fb615c12a75d95b03d5e1200ac00 Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Tue, 13 Jan 2015 22:49:28 +0100 Subject: [PATCH 17/19] Added jQuery file upload plugin --- app/controllers/packages_controller.rb | 9 ++++++++- app/views/packages/details.slim | 14 +++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/controllers/packages_controller.rb b/app/controllers/packages_controller.rb index fe62262..c7ea6d4 100644 --- a/app/controllers/packages_controller.rb +++ b/app/controllers/packages_controller.rb @@ -61,6 +61,13 @@ class PackagesController < ApplicationController end def upload_image - "uploaded" + #render text: params[:image].to_json + #render text: params.to_json + @package = Package.find_by(name: params[:name]) + new_screenshot = @package.screenshots.create(params[:screenshot]) + @packages.save + #new_screenshot.image = params[:image] + + render text: "File has been uploaded successfully" end end diff --git a/app/views/packages/details.slim b/app/views/packages/details.slim index 51d37f8..4d9219c 100644 --- a/app/views/packages/details.slim +++ b/app/views/packages/details.slim @@ -25,7 +25,7 @@ //= form_for @package, :url => upload_image_path, :html => { :multipart => true } do |form| //= form.file_field :image - = form_for Screenshot.new, url: upload_image_path, html: { multipart: true } do |f| + = form_for :screenshot, url: upload_image_path, html: { multipart: true } do |f| = f.label :image, 'Upload new screenshot' = f.file_field :image, id: 'fileupload', multiple: true = f.submit 'Save' @@ -50,6 +50,18 @@ //a.button.radius.expand href=upload_package_by_name_path(name: @package.name) Upload a new screenshot +javascript: + $(function () { + $('#fileupload').fileupload({ + dataType: 'json', + done: function (e, data) { + $.each(data.result.files, function (index, file) { + $('

').text(file.name).appendTo(document.body); + }); + } + }); + }); + // TODO: Enable comment form //javascript: // $('#comment-summary').on( 'input', function() { From 4f567e839f47b86e93c16133941c47b79336e38e Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Mon, 9 Feb 2015 22:00:17 +0100 Subject: [PATCH 18/19] Merge --- app/views/layouts/_topbar.slim | 2 +- app/views/packages/details.slim | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/layouts/_topbar.slim b/app/views/layouts/_topbar.slim index fc1de9e..1d67f4f 100644 --- a/app/views/layouts/_topbar.slim +++ b/app/views/layouts/_topbar.slim @@ -19,7 +19,7 @@ header ul.right li class=('active' if controller_name=='welcome') a href="/" Home - li class=('active' if controller_name=='package') + li class=('active' if controller_name=='packages') a href="/packages" Explore li class=('active' if controller_name=='upload') a href="/upload" Contribute diff --git a/app/views/packages/details.slim b/app/views/packages/details.slim index 4d9219c..cb0bf09 100644 --- a/app/views/packages/details.slim +++ b/app/views/packages/details.slim @@ -9,7 +9,7 @@ .small-12.columns h1 =@package.name - .small-12.medium-8.columns + .small-7.medium-7.columns p.subtitle = @package.description ul.small-block-grid-1.medium-block-grid-2.large-block-grid-2 @@ -35,7 +35,7 @@ // TODO: Enable comments in a later version // = partial '/package/comments' - .small-12.medium-4.columns + .small-5.medium-5.columns .bigpanel // Use action long description p From 7451cca9cf78ea233219c8d50ada3c0495808678 Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Tue, 10 Feb 2015 01:20:28 +0100 Subject: [PATCH 19/19] Uploading screenshots works --- app/controllers/packages_controller.rb | 16 +++++++++-- app/views/packages/upload.slim | 39 +++++++++++++++----------- 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/app/controllers/packages_controller.rb b/app/controllers/packages_controller.rb index c7ea6d4..6095bf7 100644 --- a/app/controllers/packages_controller.rb +++ b/app/controllers/packages_controller.rb @@ -58,16 +58,26 @@ class PackagesController < ApplicationController # TODO raise "name not given" unless params[:name] @package = Package.find_by(name: params[:name]) + @new_screenshot = @package.screenshots.new end def upload_image #render text: params[:image].to_json #render text: params.to_json @package = Package.find_by(name: params[:name]) - new_screenshot = @package.screenshots.create(params[:screenshot]) - @packages.save + @new_screenshot = @package.screenshots.create(image: params[:image]) + @new_screenshot.save + #raise + #@package.save #new_screenshot.image = params[:image] - render text: "File has been uploaded successfully" + #render text: "File has been uploaded successfully" + redirect_to upload_package_by_name_path end + + private + + #def user_params + # params.require(:screenshot).permit(:image) + #end end diff --git a/app/views/packages/upload.slim b/app/views/packages/upload.slim index 5a3ddf7..7588442 100644 --- a/app/views/packages/upload.slim +++ b/app/views/packages/upload.slim @@ -10,23 +10,28 @@ .small-6.columns //input id="fileupload" type="file" name="files[]" data-url=upload_image_path(name: @package.name) multiple=true - = form_for @package, :url => upload_image_path, :html => { :multipart => true } do |form| - = form.file_field :image + //= form_for @new_screenshot, :url => upload_image_path, :html => { :multipart => true } do |form| + // = form.file_field :image + // = form.submit 'Save' + = form_tag(upload_image_path, multipart: true) + = file_field_tag('image') + = submit_tag a.button.radius.expand href=upload_package_by_name_path(name: @package.name) ' Click or drag a PNG screenshot file here .small-6.columns ' Form + - puts @package.screenshots - @package.screenshots.each do |screenshot| .listview a.black.fancybox href=screenshot.image.url(:large, timestamp: false) rel='fancybox-thumb' title=screenshot.caption = image_tag(screenshot.image.url(:large, timestamp: false), alt: screenshot.caption) - .imgcaption - => screenshot.caption - - if screenshot.uploader - | (Uploaded by - =< screenshot.uploader - | ) +// .imgcaption +// => screenshot.caption +// - if screenshot.uploader +// | (Uploaded by +// =< screenshot.uploader +// | ) .small-12.medium-5.large-4.columns .bigpanel @@ -65,12 +70,12 @@ // .imgcaption =screenshot.caption // -javascript: - $('#fileupload').fileupload({ - dataType: 'json', - done: function (e, data) { - $.each(data.result.files, function (index, file) { - $('

').text(file.name).appendTo(document.body); - }); - } - }); +//javascript: +// $('#fileupload').fileupload({ +// dataType: 'json', +// done: function (e, data) { +// $.each(data.result.files, function (index, file) { +// $('

').text(file.name).appendTo(document.body); +// }); +// } +// });