diff --git a/app/javascript/activetext/index.js b/app/javascript/activetext/index.js index c77ed0ab26..03cb9960cb 100644 --- a/app/javascript/activetext/index.js +++ b/app/javascript/activetext/index.js @@ -1 +1,33 @@ import * as Trix from "trix" +import { DirectUpload } from "activestorage" + +// FIXME: Hard coded routes +const directUploadsURL = "/rails/active_storage/direct_uploads" +const blobsURL = "/rails/active_storage/blobs" + +addEventListener("trix-attachment-add", event => { + const { attachment } = event + if (!attachment.file) return + + const delegate = { + directUploadWillStoreFileWithXHR: (xhr) => { + xhr.upload.addEventListener("progress", event => { + const progress = event.loaded / event.total * 100 + attachment.setUploadProgress(progress) + }) + } + } + + const directUpload = new DirectUpload(attachment.file, directUploadsURL, delegate) + + directUpload.create((error, attributes) => { + if (error) { + console.warn("Failed to store file for attachment", attachment, error) + } else { + console.log("Created blob for attachment", attributes, attachment) + const { signed_id } = attributes + const url = `${blobsURL}/${signed_id}/${encodeURIComponent(attachment.file.name)}` + attachment.setAttributes({ url, signed_id }) + } + }) +}) diff --git a/package.json b/package.json index 7f0c79a054..62d5b702db 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ ], "license": "MIT", "dependencies": { - "trix": "^0.11.1" + "trix": "^0.11.1", + "activestorage": ">= 5.2.0-rc1" }, "private": true } diff --git a/test/dummy/db/migrate/20180212164506_create_active_storage_tables.active_storage.rb b/test/dummy/db/migrate/20180212164506_create_active_storage_tables.active_storage.rb new file mode 100644 index 0000000000..360e0d1b7a --- /dev/null +++ b/test/dummy/db/migrate/20180212164506_create_active_storage_tables.active_storage.rb @@ -0,0 +1,26 @@ +# This migration comes from active_storage (originally 20170806125915) +class CreateActiveStorageTables < ActiveRecord::Migration[5.2] + def change + create_table :active_storage_blobs do |t| + t.string :key, null: false + t.string :filename, null: false + t.string :content_type + t.text :metadata + t.bigint :byte_size, null: false + t.string :checksum, null: false + t.datetime :created_at, null: false + + t.index [ :key ], unique: true + end + + create_table :active_storage_attachments do |t| + t.string :name, null: false + t.references :record, null: false, polymorphic: true, index: false + t.references :blob, null: false + + t.datetime :created_at, null: false + + t.index [ :record_type, :record_id, :name, :blob_id ], name: "index_active_storage_attachments_uniqueness", unique: true + end + end +end diff --git a/test/dummy/db/schema.rb b/test/dummy/db/schema.rb index 21d6c8d847..f892368183 100644 --- a/test/dummy/db/schema.rb +++ b/test/dummy/db/schema.rb @@ -10,7 +10,28 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2018_02_08_205311) do +ActiveRecord::Schema.define(version: 2018_02_12_164506) do + + create_table "active_storage_attachments", force: :cascade do |t| + t.string "name", null: false + t.string "record_type", null: false + t.integer "record_id", null: false + t.integer "blob_id", null: false + t.datetime "created_at", null: false + t.index ["blob_id"], name: "index_active_storage_attachments_on_blob_id" + t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true + end + + create_table "active_storage_blobs", force: :cascade do |t| + t.string "key", null: false + t.string "filename", null: false + t.string "content_type" + t.text "metadata" + t.bigint "byte_size", null: false + t.string "checksum", null: false + t.datetime "created_at", null: false + t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true + end create_table "messages", force: :cascade do |t| t.string "subject" diff --git a/test/dummy/yarn.lock b/test/dummy/yarn.lock index 3b1f47bf41..af299bfcf8 100644 --- a/test/dummy/yarn.lock +++ b/test/dummy/yarn.lock @@ -56,9 +56,14 @@ acorn@^5.0.0: version "5.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.4.1.tgz#fdc58d9d17f4a4e98d102ded826a9b9759125102" +"activestorage@>= 5.2.0-rc1": + version "5.2.0-rc1" + resolved "https://registry.yarnpkg.com/activestorage/-/activestorage-5.2.0-rc1.tgz#79898996eceb0f13575eff41fb109051fbfa49b0" + "activetext@file:../..": version "0.1" dependencies: + activestorage ">= 5.2.0-rc1" trix "^0.11.1" ajv-keywords@^2.1.0: diff --git a/yarn.lock b/yarn.lock index fbaef41eaa..f98622eb64 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,10 @@ # yarn lockfile v1 +"activestorage@>= 5.2.0-rc1": + version "5.2.0-rc1" + resolved "https://registry.yarnpkg.com/activestorage/-/activestorage-5.2.0-rc1.tgz#79898996eceb0f13575eff41fb109051fbfa49b0" + trix@^0.11.1: version "0.11.1" resolved "https://registry.yarnpkg.com/trix/-/trix-0.11.1.tgz#ffe54f2757c2c2385b8424fd5c5d2ab712a09acc"