Add tags filter.
This commit is contained in:
parent
1a4c305149
commit
b484a76768
|
@ -2368,8 +2368,49 @@ var wpex = {};
|
|||
var self = this;
|
||||
if (undefined === $.fn.imagesLoaded || undefined === $.fn.isotope) { return }
|
||||
var containers = $(window.wpexAnimsition.linkElement).parents(window.wpexAnimsition.container_block);
|
||||
function get_filter_constraint(filterLink){
|
||||
var filter_attr = window.wpexAnimsition.filter_attr;
|
||||
var filter_constraint = filterLink.attr(filter_attr);
|
||||
var filter_attrs = filter_attr.split(",");
|
||||
if(filter_attrs.length != 1){
|
||||
filter_constraint = [];
|
||||
filter_attr = "";
|
||||
filter_attrs.forEach(function(fa){
|
||||
var tmp_filter_constraint = filterLink.attr(fa);
|
||||
if( tmp_filter_constraint != undefined){
|
||||
if(window.wpexAnimsition.use_attr_filter){
|
||||
if(tmp_filter_constraint == "all"){
|
||||
filter_constraint.push("["+fa+"]");
|
||||
}else{
|
||||
filter_constraint.push("["+fa+(fa[fa.length-1] == "s" ? '*' : '')+"=\""+tmp_filter_constraint+"\"]");
|
||||
}
|
||||
}else{
|
||||
filter_constraint.push(tmp_filter_constraint);
|
||||
}
|
||||
}
|
||||
})
|
||||
if(window.wpexAnimsition.use_attr_filter){
|
||||
filter_constraint = filter_constraint.join("],[");
|
||||
}else{
|
||||
filter_constraint = filter_constraint.join(",");
|
||||
}
|
||||
}else{
|
||||
if(window.wpexAnimsition.use_attr_filter){
|
||||
if(filter_constraint == "all"){
|
||||
filter_constraint = "["+window.wpexAnimsition.filter_attr+"]";
|
||||
}else{
|
||||
filter_constraint = "["+window.wpexAnimsition.filter_attr+"=\""+filter_constraint+"\"]";
|
||||
}
|
||||
}
|
||||
}
|
||||
if(filterLink.data("count_limit") != undefined){
|
||||
filter_constraint = filter_constraint+":nth-child(-n+"+filterLink.data("count_limit")+")";
|
||||
}
|
||||
console.log(filter_constraint);
|
||||
return filter_constraint;
|
||||
}
|
||||
$(containers).each(function (i,v) {
|
||||
var $container = $(this);
|
||||
var $container = $(v);
|
||||
$container.imagesLoaded(function () {
|
||||
var activeItems;
|
||||
var $filter = $container.parent().find(window.wpexAnimsition.filter_bar);
|
||||
|
@ -2377,31 +2418,11 @@ var wpex = {};
|
|||
var $filterLinks = $filter.find(window.wpexAnimsition.filter_option);
|
||||
activeItems = '';
|
||||
if($filterLinks.length != 0){
|
||||
var filter_constraint = $filterLinks.eq(0).attr(window.wpexAnimsition.filter_attr);
|
||||
if(filter_constraint == "all"){
|
||||
filter_constraint = "["+window.wpexAnimsition.filter_attr+"]";
|
||||
}else{
|
||||
if(window.wpexAnimsition.use_attr_filter){
|
||||
filter_constraint = "["+window.wpexAnimsition.filter_attr+"=\""+filter_constraint+"\"]";
|
||||
}
|
||||
}
|
||||
if($filterLinks.eq(0).data("count_limit") != undefined){
|
||||
filter_constraint = filter_constraint+":nth-child(-n+"+$filterLinks.eq(0).data("count_limit")+")";
|
||||
}
|
||||
var filter_constraint = get_filter_constraint($filterLinks.eq(0));
|
||||
activeItems = filter_constraint;
|
||||
}
|
||||
$filterLinks.click(function () {
|
||||
var filter_constraint = $(this).attr(window.wpexAnimsition.filter_attr);
|
||||
if(filter_constraint == "all"){
|
||||
filter_constraint = "["+window.wpexAnimsition.filter_attr+"]";
|
||||
}else{
|
||||
if(window.wpexAnimsition.use_attr_filter){
|
||||
filter_constraint = "["+window.wpexAnimsition.filter_attr+"=\""+filter_constraint+"\"]";
|
||||
}
|
||||
}
|
||||
if($(this).data("count_limit") != undefined){
|
||||
filter_constraint = filter_constraint+":nth-child(-n+"+$(this).data("count_limit")+")";
|
||||
}
|
||||
var filter_constraint = get_filter_constraint($(this));
|
||||
$grid.isotope({ filter: filter_constraint});
|
||||
self.equalHeights();
|
||||
return false;
|
||||
|
|
|
@ -133,23 +133,45 @@ class AnnouncementsController < ApplicationController
|
|||
|
||||
def pack_data(is_random=false)
|
||||
cats = OrbitHelper.widget_categories || []
|
||||
tags = OrbitHelper.widget_tags || []
|
||||
subpart = OrbitHelper.get_current_widget
|
||||
get_tabs_option
|
||||
anns = []
|
||||
use_tag = false
|
||||
if @tab_option == 0
|
||||
anns = get_anncs_for_pack_data(cats,is_random)
|
||||
anns = get_anncs_for_pack_data(cats,tags,is_random)
|
||||
else
|
||||
if cats.count != 1 || tags == ["all"]
|
||||
cats.each do |cat|
|
||||
anns = anns + get_anncs_for_pack_data([cat])
|
||||
anns = anns + get_anncs_for_pack_data([cat],tags)
|
||||
end
|
||||
else
|
||||
tags.each do |tag|
|
||||
anns = anns + get_anncs_for_pack_data(cats,[tag])
|
||||
end
|
||||
use_tag = true
|
||||
end
|
||||
end
|
||||
mp = (anns[0]["img_src"] rescue "")
|
||||
mpd = (anns[0]["img_description"] rescue "")
|
||||
if @tab_option == 1
|
||||
if use_tag
|
||||
tags = ["all"] + tags
|
||||
else
|
||||
cats = ["all"] + cats
|
||||
end
|
||||
anns = anns.sort{|v1,v2| v2["postdate"]<=>v1["postdate"]}
|
||||
end
|
||||
cats = cats.uniq
|
||||
tags = tags.uniq
|
||||
tags_translations = tags.map{|tag_id|
|
||||
if tag_id == "all"
|
||||
t = I18n.t(:all)
|
||||
else
|
||||
t = Tag.find(tag_id).name rescue ""
|
||||
end
|
||||
[tag_id,t]
|
||||
}.to_h
|
||||
cats_translations = cats.map{|cat_id|
|
||||
if cat_id == "all"
|
||||
t = I18n.t(:all)
|
||||
|
@ -171,12 +193,29 @@ class AnnouncementsController < ApplicationController
|
|||
if all_cats.count == 0
|
||||
all_cats = ["all"]
|
||||
end
|
||||
all_tags = tags.dup
|
||||
all_tags.delete "all"
|
||||
if all_tags.count == 0
|
||||
all_tags = ["all"]
|
||||
end
|
||||
max_all_count = [OrbitHelper.widget_data_count,anns.count].min
|
||||
if @tab_option != 0
|
||||
OrbitHelper.set_widget_title(OrbitHelper.widget_title +
|
||||
"<div style=\"clear: both;\"></div>" +
|
||||
"<ul class=\"nav_tabs_filter\">" +
|
||||
cats.map.with_index{|cat,i|
|
||||
(use_tag ? tags.map.with_index{|tag,i|
|
||||
read_more_url = "/#{I18n.locale.to_s + page.url}" rescue ""
|
||||
read_more_url = read_more_url + "?" + {"category"=>all_cats,"tags"=>(tag == 'all' ? all_tags : [tag])}.to_param if read_more_url != ""
|
||||
read_more_text = I18n.t("announcement.more")
|
||||
if tag != "all"
|
||||
begin
|
||||
read_more_text = I18n.t("announcement.more_") + tags_translations[tag]
|
||||
rescue
|
||||
nil
|
||||
end
|
||||
end
|
||||
"<li class=\"filter_tab#{i == 0 ? ' active' : ''}\" data-count_limit=\"#{max_all_count}\" data-read_more_text=\"#{read_more_text}\" data-read_more=\"#{read_more_url}\" data-tags=\"#{tag}\">#{tags_translations[tag]}</li>"
|
||||
}.join("") : cats.map.with_index{|cat,i|
|
||||
read_more_url = "/#{I18n.locale.to_s + page.url}" rescue ""
|
||||
read_more_url = read_more_url + "?" + {"category"=>(cat == 'all' ? all_cats : cat)}.to_param if read_more_url != ""
|
||||
read_more_text = I18n.t("announcement.more")
|
||||
|
@ -188,9 +227,10 @@ class AnnouncementsController < ApplicationController
|
|||
end
|
||||
end
|
||||
"<li class=\"filter_tab#{i == 0 ? ' active' : ''}\" #{(cat == 'all' && @all_setting_option == 0) ? "data-count_limit=\"#{max_all_count}\"" : ''} data-read_more_text=\"#{read_more_text}\" data-read_more=\"#{read_more_url}\" data-category=\"#{cats_relations[cat]}\">#{cats_translations[cat]}</li>"
|
||||
}.join("") +
|
||||
}.join("")) +
|
||||
"</ul>"
|
||||
)
|
||||
filter_attr = (use_tag ? 'data-tags' : 'data-category')
|
||||
extra_html = '
|
||||
<script>
|
||||
if(typeof(wpexAnimsition) == "undefined"){
|
||||
|
@ -206,14 +246,18 @@ class AnnouncementsController < ApplicationController
|
|||
"parent_block": "[data-subpart-id=\"'+subpart.id.to_s+'\"]",
|
||||
"filter_bar": ".nav_tabs_filter",
|
||||
"filter_option": "li.filter_tab",
|
||||
"filter_attr": "data-category",
|
||||
"filter_attr": "'+filter_attr+'",
|
||||
"filter_target_attr": "class",
|
||||
"use_attr_filter": true,
|
||||
"equal_height": false
|
||||
};
|
||||
}else{
|
||||
var filter_attr = "'+filter_attr+'";
|
||||
wpexAnimsition.parent_block = wpexAnimsition.parent_block + ", [data-subpart-id=\"'+subpart.id.to_s+'\"]";
|
||||
wpexAnimsition.container_block = wpexAnimsition.container_block + ", [data-subpart-id=\"'+subpart.id.to_s+'\"] [data-list=\"announcements\"]:not(tbody)";
|
||||
if( wpexAnimsition.filter_attr.indexOf(filter_attr) == -1 ){
|
||||
wpexAnimsition.filter_attr += ("," + filter_attr);
|
||||
}
|
||||
}
|
||||
var wpexLocalize = {
|
||||
"lightboxType": "iLightbox",
|
||||
|
@ -410,11 +454,10 @@ class AnnouncementsController < ApplicationController
|
|||
end
|
||||
end
|
||||
end
|
||||
def get_anncs_for_pack_data(cats,is_random = false)
|
||||
tags = OrbitHelper.widget_tags || []
|
||||
def get_anncs_for_pack_data(cats,tags,is_random = false)
|
||||
subpart = OrbitHelper.get_current_widget
|
||||
widget_data_count = OrbitHelper.widget_data_count
|
||||
anns_cache = AnnsCache.where(parent_id: subpart.id.to_s + cats.to_s + widget_data_count.to_s,locale: I18n.locale.to_s)
|
||||
anns_cache = AnnsCache.where(parent_id: subpart.id.to_s + cats.to_s + tags.to_s + widget_data_count.to_s,locale: I18n.locale.to_s)
|
||||
set_image_version_for_widget()
|
||||
devide_flag = (!(defined? SiteFeed).nil?)
|
||||
if anns_cache.count != 1 || is_random
|
||||
|
@ -432,10 +475,10 @@ class AnnouncementsController < ApplicationController
|
|||
now_anns = sorted_anns.to_a
|
||||
top_anns = now_anns.select{|v| v.is_top}.map{|v| data_to_human_type(v)}
|
||||
not_top_anns = now_anns.select{|v| !v.is_top}.map{|v| data_to_human_type(v)}
|
||||
AnnsCache.create(parent_id: subpart.id.to_s + cats.to_s + widget_data_count.to_s,locale: I18n.locale.to_s,filter_result: {top: top_anns,not_top: not_top_anns})
|
||||
AnnsCache.create(parent_id: subpart.id.to_s + cats.to_s + tags.to_s + widget_data_count.to_s,locale: I18n.locale.to_s,filter_result: {top: top_anns,not_top: not_top_anns})
|
||||
else
|
||||
anns = sorted_anns.map{|v| data_to_human_type(v)}
|
||||
AnnsCache.create(parent_id: subpart.id.to_s + cats.to_s + widget_data_count.to_s,locale: I18n.locale.to_s,filter_result: anns)
|
||||
AnnsCache.create(parent_id: subpart.id.to_s + cats.to_s + tags.to_s + widget_data_count.to_s,locale: I18n.locale.to_s,filter_result: anns)
|
||||
end
|
||||
else
|
||||
if devide_flag
|
||||
|
|
|
@ -76,6 +76,7 @@ module AnnouncementsHelper
|
|||
"subtitle" => a.subtitle,
|
||||
"statuses" => statuses,
|
||||
"category" => a.category.title,
|
||||
"tag_ids" => (a.tag_ids.map{|id| id.to_s}.to_s.gsub('"',"'") rescue '[]'),
|
||||
"postdate" => a.postdate,
|
||||
"author" => author,
|
||||
"link_to_show" => link_to_show,
|
||||
|
@ -199,7 +200,6 @@ module AnnouncementsHelper
|
|||
tags = page.tags
|
||||
tags = params[:tags] if params[:tags].present?
|
||||
categories = params['category']=='all' ? (page.categories || []) : (Array(params['category']) rescue (page.categories || []))
|
||||
categories = ["all"] if params[:tags].present?
|
||||
end
|
||||
if !params["source"].present?
|
||||
if @type == "show_widget"
|
||||
|
|
Loading…
Reference in New Issue