aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/javascript/activetext/index.js32
-rw-r--r--package.json3
-rw-r--r--test/dummy/db/migrate/20180212164506_create_active_storage_tables.active_storage.rb26
-rw-r--r--test/dummy/db/schema.rb23
-rw-r--r--test/dummy/yarn.lock5
-rw-r--r--yarn.lock4
6 files changed, 91 insertions, 2 deletions
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"