diff --git a/app/assets/javascripts/content.js b/app/assets/javascripts/content.js
index a5e7dc4e..3068018f 100644
--- a/app/assets/javascripts/content.js
+++ b/app/assets/javascripts/content.js
@@ -77,9 +77,13 @@ $(document).ready(function () {
toggle.attr('data-tooltip', 'Unfavorite this page');
}
- $.ajax({
+ post_url = (content_class == 'documents'
+ ? '/documents/' + content_id + '/toggle_favorite'
+ : "/plan/" + content_class + "/" + content_id + "/toggle_favorite");
+
+ $.ajax({
type: "POST",
- url: "/plan/" + content_class + "/" + content_id + "/toggle_favorite",
+ url: post_url,
data: { id: content_id },
success: function () {
// console.log("success!");
diff --git a/app/controllers/documents_controller.rb b/app/controllers/documents_controller.rb
index 690bb022..e2ee46bf 100644
--- a/app/controllers/documents_controller.rb
+++ b/app/controllers/documents_controller.rb
@@ -172,6 +172,17 @@ class DocumentsController < ApplicationController
end
end
+ def toggle_favorite
+ document = Document.with_deleted.find_or_initialize_by(id: params[:id])
+
+ unless document.updatable_by?(current_user)
+ flash[:notice] = "You don't have permission to edit that!"
+ return redirect_back fallback_location: document
+ end
+
+ document.update!(favorite: !document.favorite)
+ end
+
def destroy
if current_user.can_delete?(@document)
@document.destroy
diff --git a/app/views/content/list/_cards.html.erb b/app/views/content/list/_cards.html.erb
index d76a71b4..17032215 100644
--- a/app/views/content/list/_cards.html.erb
+++ b/app/views/content/list/_cards.html.erb
@@ -27,10 +27,12 @@
<%= link_to edit_polymorphic_path(content), class: 'green-text right', target: content.is_a?(Document) ? '_new' : '_self' do %>
- <%= content_type.icon %> Edit
+ <%= content_type.icon %>
+ Edit
<% end %>
<%= link_to polymorphic_path(content), class: 'blue-text text-lighten-1' do %>
- <%= content_type.icon %> View
+ <%= content_type.icon %>
+ View
<% end %>
diff --git a/config/routes.rb b/config/routes.rb
index 9f391ff4..9023df68 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -27,9 +27,12 @@ Rails.application.routes.draw do
get '/queue_analysis', to: 'documents#queue_analysis', on: :member
post '/link_entity', to: 'documents#link_entity', on: :collection
+ post :toggle_favorite, on: :member
+
# todo these routes don't belong here and make for awfully weird urls (/documents/:analysis_id/destroy, etc)
get '/destroy_analysis', to: 'documents#destroy_analysis', on: :member
get '/destroy_entity', to: 'documents#destroy_document_entity', on: :member
+
end
scope '/my' do
diff --git a/db/migrate/20200128174509_add_favorite_flag_to_documents.rb b/db/migrate/20200128174509_add_favorite_flag_to_documents.rb
new file mode 100644
index 00000000..35bc46a0
--- /dev/null
+++ b/db/migrate/20200128174509_add_favorite_flag_to_documents.rb
@@ -0,0 +1,5 @@
+class AddFavoriteFlagToDocuments < ActiveRecord::Migration[6.0]
+ def change
+ add_column :documents, :favorite, :boolean
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index da34e01f..d6883732 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2020_01_28_161646) do
+ActiveRecord::Schema.define(version: 2020_01_28_174509) do
create_table "active_storage_attachments", force: :cascade do |t|
t.string "name", null: false
@@ -914,6 +914,7 @@ ActiveRecord::Schema.define(version: 2020_01_28_161646) do
t.text "synopsis"
t.datetime "deleted_at"
t.integer "universe_id"
+ t.boolean "favorite"
t.index ["universe_id", "deleted_at"], name: "index_documents_on_universe_id_and_deleted_at"
t.index ["universe_id"], name: "index_documents_on_universe_id"
t.index ["user_id"], name: "index_documents_on_user_id"