Order in the admin page using jquery-ui sortable widget.
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
//= require jquery-ui/widgets/datepicker
|
||||
//= require jquery-ui/i18n/datepicker-es
|
||||
//= require jquery-ui/widgets/autocomplete
|
||||
//= require jquery-ui/widgets/sortable
|
||||
//= require jquery-fileupload/basic
|
||||
//= require foundation
|
||||
//= require turbolinks
|
||||
@@ -71,6 +72,7 @@
|
||||
//= require leaflet
|
||||
//= require map
|
||||
//= require polls
|
||||
//= require sortable
|
||||
|
||||
var initialize_modules = function() {
|
||||
App.Comments.initialize();
|
||||
@@ -110,6 +112,7 @@ var initialize_modules = function() {
|
||||
App.PollsAdmin.initialize();
|
||||
App.Map.initialize();
|
||||
App.Polls.initialize();
|
||||
App.Sortable.initialize();
|
||||
};
|
||||
|
||||
$(function(){
|
||||
|
||||
9
app/assets/javascripts/sortable.js.coffee
Normal file
9
app/assets/javascripts/sortable.js.coffee
Normal file
@@ -0,0 +1,9 @@
|
||||
App.Sortable =
|
||||
initialize: ->
|
||||
$(".sortable").sortable
|
||||
update: (event, ui) ->
|
||||
new_order = $(this).sortable('toArray', {attribute: 'data-answer-id'});
|
||||
$.ajax
|
||||
url: $('.sortable').data('js-url'),
|
||||
data: {ordered_list: new_order},
|
||||
type: 'POST'
|
||||
@@ -18,4 +18,5 @@
|
||||
@import 'datepicker_overrides';
|
||||
@import 'jquery-ui/autocomplete';
|
||||
@import 'autocomplete_overrides';
|
||||
@import 'jquery-ui/sortable';
|
||||
@import 'leaflet';
|
||||
|
||||
@@ -37,6 +37,12 @@ class Admin::Poll::Questions::AnswersController < Admin::Poll::BaseController
|
||||
@documents = @answer.documents
|
||||
|
||||
render 'admin/poll/questions/answers/documents'
|
||||
end
|
||||
|
||||
def order_answers
|
||||
::Poll::Question::Answer.order_answers(params[:ordered_list])
|
||||
#redirect_to admin_question_path(params[:question_id])
|
||||
render :nothing => true
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -14,4 +14,12 @@ class Poll::Question::Answer < ActiveRecord::Base
|
||||
def description
|
||||
super.try :html_safe
|
||||
end
|
||||
|
||||
def self.order_answers(ordered_array)
|
||||
ordered_array.each_with_index do |answer_id, order|
|
||||
answer = self.find(answer_id)
|
||||
answer.update_attribute(:given_order, (order + 1))
|
||||
answer.save
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -47,30 +47,32 @@
|
||||
<th scope="col" class="text-center"><%= t("admin.questions.show.answers.videos") %></th>
|
||||
</tr>
|
||||
|
||||
<% @question.question_answers.each do |answer| %>
|
||||
<tr id="<%= dom_id(answer) %>" class="poll_question_answer">
|
||||
<td><%= link_to answer.title, admin_answer_path(answer) %></td>
|
||||
<td><%= answer.description %></td>
|
||||
<td class="text-center">
|
||||
(<%= answer.images.count %>)
|
||||
<br>
|
||||
<%= link_to t("admin.questions.show.answers.images_list"),
|
||||
admin_answer_images_path(answer) %>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
(<%= answer.documents.count rescue 0 %>)
|
||||
<br>
|
||||
<%= link_to t("admin.questions.show.answers.documents_list"),
|
||||
admin_answer_documents_path(answer) %>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
(<%= answer.videos.count %>)
|
||||
<br>
|
||||
<%= link_to t("admin.questions.show.answers.video_list"),
|
||||
admin_answer_videos_path(answer) %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
<tbody class="sortable" data-js-url="<%= admin_question_answers_order_answers_path(@question.id) %>">
|
||||
<% @question.question_answers.each do |answer| %>
|
||||
<tr id="<%= dom_id(answer) %>" class="poll_question_answer" data-answer-id="<%= answer.id %>">
|
||||
<td><%= link_to answer.title, admin_answer_path(answer) %></td>
|
||||
<td><%= answer.description %></td>
|
||||
<td class="text-center">
|
||||
(<%= answer.images.count %>)
|
||||
<br>
|
||||
<%= link_to t("admin.questions.show.answers.images_list"),
|
||||
admin_answer_images_path(answer) %>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
(<%= answer.documents.count rescue 0 %>)
|
||||
<br>
|
||||
<%= link_to t("admin.questions.show.answers.documents_list"),
|
||||
admin_answer_documents_path(answer) %>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
(<%= answer.videos.count %>)
|
||||
<br>
|
||||
<%= link_to t("admin.questions.show.answers.video_list"),
|
||||
admin_answer_videos_path(answer) %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<% if @question.video_url.present? %>
|
||||
|
||||
@@ -306,6 +306,7 @@ Rails.application.routes.draw do
|
||||
resources :videos, controller: 'questions/answers/videos'
|
||||
get :documents, to: 'questions/answers#documents'
|
||||
end
|
||||
post '/answers/order_answers', to: 'questions/answers#order_answers'
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
class AddGivenOrderToPollQuestionAnswers < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :poll_question_answers, :given_order, :integer, default: 1
|
||||
end
|
||||
end
|
||||
@@ -11,7 +11,7 @@
|
||||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 20171006145053) do
|
||||
ActiveRecord::Schema.define(version: 20171010143623) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
@@ -680,6 +680,7 @@ ActiveRecord::Schema.define(version: 20171006145053) do
|
||||
t.string "title"
|
||||
t.text "description"
|
||||
t.integer "question_id"
|
||||
t.integer "given_order", default: 1
|
||||
end
|
||||
|
||||
add_index "poll_question_answers", ["question_id"], name: "index_poll_question_answers_on_question_id", using: :btree
|
||||
|
||||
Reference in New Issue
Block a user