diff --git a/Gemfile.lock b/Gemfile.lock index 997fcae..61e9555 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -218,9 +218,9 @@ GEM pg (1.6.3-x86_64-darwin) pg (1.6.3-x86_64-linux) pg (1.6.3-x86_64-linux-musl) - pg_search (2.3.8) - activerecord (>= 7.2) - activesupport (>= 7.2) + pg_search (2.4.0) + activerecord (>= 8.0) + activesupport (>= 8.0) pp (0.6.4) prettyprint premailer (1.30.0) @@ -393,7 +393,7 @@ DEPENDENCIES image_processing (~> 1.2) importmap-rails jbuilder - json (= 2.21.2) + json (< 3) kaminari lexxy mobility (~> 1.3.0.rc1) @@ -506,7 +506,7 @@ CHECKSUMS pg (1.6.3-x86_64-darwin) sha256=ee2e04a17c0627225054ffeb43e31a95be9d7e93abda2737ea3ce4a62f2729d6 pg (1.6.3-x86_64-linux) sha256=5d9e188c8f7a0295d162b7b88a768d8452a899977d44f3274d1946d67920ae8d pg (1.6.3-x86_64-linux-musl) sha256=9c9c90d98c72f78eb04c0f55e9618fe55d1512128e411035fe229ff427864009 - pg_search (2.3.8) sha256=10e2d365d76ac432c79875c3ce17cf285c97c029548d84990b02406e52347c06 + pg_search (2.4.0) sha256=8b0b518aad9d0dcb507f7de35c0145d495c0dbe3c6e0babeeb3b226b5981ccaf pp (0.6.4) sha256=dfcb0fce700c41456265922884f9fe195d7fbb0674a3578e6c0f69588e82b570 premailer (1.30.0) sha256=55f7cfa5099c18f3698a0b5548da448f402e8bf4cbc9410e32e37fb211078c21 premailer-rails (1.12.0) sha256=c13815d161b9bc7f7d3d81396b0bb0a61a90fa9bd89931548bf4e537c7710400 diff --git a/app/assets/stylesheets/assets.css b/app/assets/stylesheets/assets.css index 9f86926..1b378d8 100644 --- a/app/assets/stylesheets/assets.css +++ b/app/assets/stylesheets/assets.css @@ -146,3 +146,8 @@ } } + +.asset-preview { + width: 180px; + max-width: 100%; +} diff --git a/app/controllers/admin/assets_controller.rb b/app/controllers/admin/assets_controller.rb index 8078a01..9832486 100644 --- a/app/controllers/admin/assets_controller.rb +++ b/app/controllers/admin/assets_controller.rb @@ -1,6 +1,6 @@ class Admin::AssetsController < Admin::AdminController - before_action :set_asset, only: %i[ edit update destroy ] + before_action :set_asset, only: %i[ edit update replace destroy ] helper_method :sorting_technique @@ -43,6 +43,16 @@ class Admin::AssetsController < Admin::AdminController end + def replace + blob = ActiveStorage::Blob.find_signed(params[:signed_id]) + @asset.file.attach(blob) + + respond_to do |format| + format.turbo_stream + end + end + + # DELETE /assets/1 or /assets/1.json def destroy @asset.destroy! diff --git a/app/javascript/controllers/upload_controller.js b/app/javascript/controllers/upload_controller.js index bcee3ba..ee74e30 100644 --- a/app/javascript/controllers/upload_controller.js +++ b/app/javascript/controllers/upload_controller.js @@ -7,7 +7,8 @@ export default class extends Controller { url: String, createUrl: String, parentId: Number, - target: String + target: String, + limit: Number } connect() { @@ -21,8 +22,10 @@ export default class extends Controller { const container = document.getElementById(this.targetValue) - const files = event.target.files || event.dataTransfer.files; - Array.from(files).forEach((file, index) => { + const selected = Array.from(event.target.files || event.dataTransfer.files) + const files = this.limitValue > 0 ? selected.slice(0, this.limitValue) : selected + + files.forEach((file, index) => { const uid = 'new_' + Date.now() + '_' + index const target_div = document.createElement('div') diff --git a/app/views/admin/assets/_file.html.erb b/app/views/admin/assets/_file.html.erb new file mode 100644 index 0000000..ee3954a --- /dev/null +++ b/app/views/admin/assets/_file.html.erb @@ -0,0 +1,23 @@ +<%= tag.div id: 'asset_file', class: 'field' do %> +