Add bulk labeling mode for pet appearances
We copy the same feature from alt styles, now that the UI is shared via support form helpers! Easy peasy! This adds a "Then: Go to unlabeled appearance" checkbox next to the submit button on the pet appearance edit form. If checked, it takes you to the first unlabeled appearance in the database, and keeps the box checked for next time. Slam through 'em!
This commit is contained in:
parent
02836494ae
commit
b656ccd982
4 changed files with 34 additions and 1 deletions
|
@ -8,7 +8,7 @@ class PetStatesController < ApplicationController
|
|||
def update
|
||||
if @pet_state.update(pet_state_params)
|
||||
flash[:notice] = "Pet appearance \##{@pet_state.id} successfully saved!"
|
||||
redirect_to @pet_type
|
||||
redirect_to destination_after_save
|
||||
else
|
||||
render action: :edit, status: :bad_request
|
||||
end
|
||||
|
@ -24,4 +24,29 @@ class PetStatesController < ApplicationController
|
|||
def pet_state_params
|
||||
params.require(:pet_state).permit(:pose, :glitched)
|
||||
end
|
||||
|
||||
def destination_after_save
|
||||
if params[:next] == "unlabeled-appearance"
|
||||
next_unlabeled_appearance_path
|
||||
else
|
||||
@pet_type
|
||||
end
|
||||
end
|
||||
|
||||
def next_unlabeled_appearance_path
|
||||
# Rather than just getting the newest unlabeled pet state, prioritize the
|
||||
# newest *pet type*. This better matches the user's perception of what the
|
||||
# newest state is, because the Rainbow Pool UI is grouped by pet type!
|
||||
unlabeled_appearance = PetState.unlabeled.newest_pet_type.newest.first
|
||||
|
||||
if unlabeled_appearance
|
||||
edit_pet_type_pet_state_path(
|
||||
unlabeled_appearance.pet_type,
|
||||
unlabeled_appearance,
|
||||
next: "unlabeled-appearance"
|
||||
)
|
||||
else
|
||||
@pet_type
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -17,6 +17,10 @@ class PetState < ApplicationRecord
|
|||
|
||||
alias_method :swf_asset_ids_from_association, :swf_asset_ids
|
||||
|
||||
scope :newest, -> { order(created_at: :desc) }
|
||||
scope :newest_pet_type, -> { joins(:pet_type).merge(PetType.newest) }
|
||||
scope :unlabeled, -> { with_pose("UNKNOWN") }
|
||||
|
||||
# A simple ordering that tries to bring reliable pet states to the front.
|
||||
scope :emotion_order, -> {
|
||||
order(Arel.sql(
|
||||
|
|
|
@ -15,6 +15,7 @@ class PetType < ApplicationRecord
|
|||
species = Species.find_by_name!(species_name)
|
||||
where(color_id: color.id, species_id: species.id)
|
||||
}
|
||||
scope :newest, -> { order(created_at: :desc) }
|
||||
scope :preferring_species, ->(species_id) {
|
||||
joins(:species).order([Arel.sql("species_id = ? DESC"), species_id])
|
||||
}
|
||||
|
|
|
@ -34,6 +34,9 @@
|
|||
|
||||
= f.actions do
|
||||
= f.submit "Save changes"
|
||||
= f.go_to_next_field title: "If checked, takes you to the first unlabeled appearance in the database, if any. Useful for labeling in bulk!" do
|
||||
= f.go_to_next_check_box "unlabeled-appearance"
|
||||
Then: Go to unlabeled appearance
|
||||
|
||||
- content_for :stylesheets do
|
||||
= stylesheet_link_tag "application/breadcrumbs"
|
||||
|
|
Loading…
Reference in a new issue