added order for faq
This commit is contained in:
parent
0a7713dce6
commit
3ee5ecd592
|
@ -1,4 +1,79 @@
|
|||
/*
|
||||
Place all the styles related to the matching controller here.
|
||||
They will automatically be included in application.css.
|
||||
*/
|
||||
/*reset*/
|
||||
h1, h2, h3, h4, h5, p{
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
br{
|
||||
display: block;
|
||||
margin: 0 0 5px;
|
||||
}
|
||||
ol, ul{
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
li{
|
||||
list-style: none;
|
||||
}
|
||||
body > img {
|
||||
display: none;
|
||||
}
|
||||
|
||||
img{
|
||||
border: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
a {
|
||||
outline: none;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
table, tr, td{
|
||||
padding: 0;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
/*reset end *//* CSS Document */
|
||||
|
||||
#web_resource_order_table{
|
||||
border-collapse: unset !important;
|
||||
position: relative;
|
||||
width: 593px;
|
||||
margin: 40px auto;
|
||||
}
|
||||
|
||||
#web_resource_order_table th{
|
||||
background-color: #454545;
|
||||
color: #fff;
|
||||
}
|
||||
.position-text{
|
||||
position: relative;
|
||||
width: 85px;
|
||||
}
|
||||
|
||||
#web_resource_order_table .editable-input{
|
||||
position: relative;
|
||||
width: 25px;
|
||||
margin-bottom: 0;
|
||||
padding: 0px 0px 0px 5px;
|
||||
}
|
||||
|
||||
.position-text-div{
|
||||
height: 22px;
|
||||
}
|
||||
|
||||
.order-edit-notification{
|
||||
background-color: #ffffd5;
|
||||
z-index: 10;
|
||||
display: none;
|
||||
height: 25px;
|
||||
left: 40%;
|
||||
position: fixed;
|
||||
text-align: center;
|
||||
margin-top: 5px;
|
||||
top: 85px;
|
||||
width: 400px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
|
|
|
@ -60,6 +60,31 @@ class Admin::FaqsController < OrbitAdminController
|
|||
redirect_to admin_faqs_path
|
||||
end
|
||||
|
||||
def order
|
||||
empty_position_qas = Qa.where(:order_position => nil)
|
||||
if empty_position_qas.count > 0
|
||||
max_position = Qa.max(:order_position)
|
||||
max_position = 0 if max_position.nil?
|
||||
empty_position_qas.each_with_index do |epl,i|
|
||||
epl.order_position = i + max_position
|
||||
epl.save
|
||||
end
|
||||
end
|
||||
@qas = Qa.all.asc(:order_position)
|
||||
end
|
||||
|
||||
def updateorder
|
||||
ids_with_order = params[:order]
|
||||
ids_with_order.each_with_index do |id,index|
|
||||
qa = Qa.find(id) rescue nil
|
||||
if !qa.nil?
|
||||
qa.order_position = index
|
||||
qa.save
|
||||
end
|
||||
end
|
||||
render :json => {"success" => true}.to_json
|
||||
end
|
||||
|
||||
private
|
||||
def setup_vars
|
||||
@module_app = ModuleApp.where(:key => "faq").first
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
class FaqsController < ApplicationController
|
||||
def index
|
||||
faqs = Qa.can_display.order_by(:created_at=>'desc').filter_by_categories
|
||||
faqs = Qa.can_display.order_by(:order_position => "asc").filter_by_categories
|
||||
f = faqs.collect do |qa|
|
||||
statuses = qa.statuses_with_classname.collect do |status|
|
||||
{
|
||||
|
|
|
@ -16,6 +16,7 @@ class Qa
|
|||
field :create_user_id
|
||||
field :update_user_id
|
||||
field :uid, type: String
|
||||
field :order_position, type: Integer, default: -1
|
||||
|
||||
has_many :qa_links, :autosave => true, :dependent => :destroy
|
||||
has_many :qa_files, :autosave => true, :dependent => :destroy
|
||||
|
|
|
@ -0,0 +1,123 @@
|
|||
<% content_for :page_specific_css do %>
|
||||
<%= stylesheet_link_tag "admin/faqs" %>
|
||||
<% end %>
|
||||
<div class="order-edit-notification">Please click "Save Order" button when you are done.</div>
|
||||
<table width="100%" id="web_resource_order_table" class="table table-striped" class="web_soursce_table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Position</th>
|
||||
<th>Link</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% @qas.each_with_index do |qa,i| %>
|
||||
<tr>
|
||||
<td class="position-text">
|
||||
<div class="position-text-div" data-value="<%= (i + 1).to_s %>"><%= (i + 1).to_s %></div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="link-text-id" data-link-id="<%= qa.id.to_s %>"><%= qa.title %></div>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="bottomnav clearfix" style="left: 81px;">
|
||||
<div class="action pull-right">
|
||||
<a class="btn btn-info disabled" id="save-order-button" href="#">Save Order</a>
|
||||
</div>
|
||||
<div class="pagination pagination-centered"></div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
|
||||
var makeEditable = function(){
|
||||
var input_box = $("<input type='text'/>"),
|
||||
el = $(this);
|
||||
input_box.addClass("editable-input");
|
||||
input_box.val(el.data("value"));
|
||||
input_box.attr("data-old-id",el.data("value"));
|
||||
input_box.on("blur",function(){
|
||||
putBackdiv($(this));
|
||||
});
|
||||
input_box.on("keypress",function(e){
|
||||
if(e.keyCode == 13 || e.keyCode == 27){
|
||||
putBackdiv($(this),e.keyCode);
|
||||
}
|
||||
})
|
||||
el.parent().html(input_box);
|
||||
input_box.focus();
|
||||
}
|
||||
|
||||
var putBackdiv = function(el,keyCode){
|
||||
current_value = parseInt((el.val() == "" ? el.data("old-id") : el.val())),
|
||||
old_value = parseInt(el.data("old-id"));
|
||||
if(isNaN(current_value) || keyCode == 27){
|
||||
current_value = old_value;
|
||||
}
|
||||
if(old_value != current_value){
|
||||
var new_index_value = (current_value > old_value ? current_value + 1 : current_value - 1),
|
||||
div = $("<div class='position-text-div' data-value='" + current_value + "'>" + new_index_value + "</div>");
|
||||
div.on("click",makeEditable);
|
||||
el.parent().html(div);
|
||||
$("#save-order-button").removeClass("disabled");
|
||||
$(".order-edit-notification").slideDown();
|
||||
sortTable(el.data("old-id"),current_value);
|
||||
}else{
|
||||
var div = $("<div class='position-text-div' data-value='" + current_value + "'>" + current_value + "</div>");
|
||||
div.on("click",makeEditable);
|
||||
el.parent().html(div);
|
||||
}
|
||||
}
|
||||
|
||||
var sortTable = function(changed_index,changed_to){
|
||||
var table_element = document.getElementById("web_resource_order_table"),
|
||||
data = [],
|
||||
allRows = table_element.rows;
|
||||
for(i = 1; i < allRows.length; i++){
|
||||
var thisRow = allRows[i],
|
||||
text = thisRow.cells[0].textContent.trim(),
|
||||
hash = {};
|
||||
hash.index = parseInt(text);
|
||||
text = thisRow.cells[1].innerHTML.trim();
|
||||
if(text != " "){
|
||||
hash.link = text;
|
||||
}
|
||||
data.push(hash);
|
||||
}
|
||||
data = data.sort(function(a,b){return a.index - b.index});
|
||||
renderSortedTable(data,table_element);
|
||||
}
|
||||
|
||||
var renderSortedTable = function(data,table_element){
|
||||
var allRows = table_element.rows;
|
||||
for(i = 0;i < data.length; i++){
|
||||
var thisRow = allRows[i + 1],
|
||||
current_value = i + 1;
|
||||
thisRow.cells[0].innerHTML = "<div class='position-text-div' data-value='" + current_value + "'>" + current_value + "</div>";
|
||||
thisRow.cells[1].innerHTML = data[i].link;
|
||||
}
|
||||
$("#web_resource_order_table div.position-text-div").on("click",makeEditable);
|
||||
}
|
||||
|
||||
$("#save-order-button").on("click",function(){
|
||||
var el = $(this);
|
||||
if(!el.hasClass("disabled")){
|
||||
var data = [];
|
||||
$("#web_resource_order_table .link-text-id").each(function(){
|
||||
data.push($(this).data("link-id"));
|
||||
})
|
||||
$.ajax({
|
||||
url : "/admin/faqs/updateorder",
|
||||
data : {"order" : data},
|
||||
dataType : "json",
|
||||
type : "post"
|
||||
}).done(function(){
|
||||
el.addClass("disabled");
|
||||
$(".order-edit-notification").slideUp();
|
||||
})
|
||||
}
|
||||
return false;
|
||||
})
|
||||
|
||||
$("#web_resource_order_table div.position-text-div").on("click",makeEditable);
|
||||
|
||||
</script>
|
|
@ -3,6 +3,7 @@ en:
|
|||
faq:
|
||||
all: All
|
||||
new: New
|
||||
order: Order
|
||||
default_widget:
|
||||
question: Question
|
||||
title: Question
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
zh_tw:
|
||||
|
||||
faq:
|
||||
order: Order
|
||||
default_widget:
|
||||
question: 問題
|
||||
title: 問題
|
||||
|
|
|
@ -3,6 +3,8 @@ Rails.application.routes.draw do
|
|||
locales = Site.find_by(site_active: true).in_use_locales rescue I18n.available_locales
|
||||
scope "(:locale)", locale: Regexp.new(locales.join("|")) do
|
||||
namespace :admin do
|
||||
get "/faqs/order" => "faqs#order"
|
||||
post "/faqs/updateorder" => "faqs#updateorder"
|
||||
resources :faqs
|
||||
end
|
||||
end
|
||||
|
|
|
@ -38,10 +38,16 @@ module Faq
|
|||
:active_for_category => 'Faq',
|
||||
:available_for => 'managers'
|
||||
|
||||
context_link 'faq.order',
|
||||
:link_path=>"admin_faqs_order_path" ,
|
||||
:priority=>4,
|
||||
:active_for_action=>{'admin/faqs'=>'order'},
|
||||
:available_for => 'managers'
|
||||
|
||||
context_link 'tags',
|
||||
:link_path=>"admin_module_app_tags_path" ,
|
||||
:link_arg=>"{:module_app_id=>ModuleApp.find_by(:key=>'faq').id}",
|
||||
:priority=>4,
|
||||
:priority=>5,
|
||||
:active_for_action=>{'admin/faqs'=>'tags'},
|
||||
:active_for_tag => 'Faq',
|
||||
:available_for => 'managers'
|
||||
|
|
Loading…
Reference in New Issue