Tag management module completed
This commit is contained in:
parent
218592c1f9
commit
e028791d68
|
@ -1,25 +1,53 @@
|
||||||
function cardCheck() {
|
// function cardCheck() {
|
||||||
if($('.tags').length) {
|
// if($('.tags').length) {
|
||||||
var $card = $('.checkbox-card .card'),
|
// var $card = $('.checkbox-card .card'),
|
||||||
$check = $card.children($('input[type="checkbox"]'));
|
// $check = $card.children($('input[type="checkbox"]'));
|
||||||
$check.each(function(){
|
// $check.each(function(){
|
||||||
if($(this).attr('checked')) {
|
// if($(this).attr('checked')) {
|
||||||
$(this).parent(".check").addClass("active");
|
// $(this).parent(".check").addClass("active");
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
} else {
|
// } else {
|
||||||
var $card = $('.checkbox-card>li'),
|
// var $card = $('.checkbox-card>li'),
|
||||||
$check = $('input[type="checkbox"]');
|
// $check = $('input[type="checkbox"]');
|
||||||
$check.each(function(){
|
// $check.each(function(){
|
||||||
if($(this).attr('checked')) {
|
// if($(this).attr('checked')) {
|
||||||
$(this).parent("li").addClass("active");
|
// $(this).parent("li").addClass("active");
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
}
|
// }
|
||||||
$card.on('click', function() {
|
// $card.on('click', function() {
|
||||||
$(this).toggleClass('active')
|
// $(this).toggleClass('active')
|
||||||
});
|
// });
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
// Focus first element
|
||||||
|
!function ($) {
|
||||||
|
$.fn.cardCheck = function(param) {
|
||||||
|
_defaultSettings = {
|
||||||
|
check: '',
|
||||||
|
};
|
||||||
|
_set = $.extend(_defaultSettings, param);
|
||||||
|
$card = $(this);
|
||||||
|
$check = _set.check;
|
||||||
|
$check.each(function(){
|
||||||
|
if($(this).attr('checked')) {
|
||||||
|
$(this).parent($card).addClass("active");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$card.on('click', function() {
|
||||||
|
$(this).toggleClass('active')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}(window.jQuery);
|
||||||
$(function(){
|
$(function(){
|
||||||
cardCheck();
|
if($('.tags').length) {
|
||||||
|
$('.card').cardCheck({
|
||||||
|
check: $('.card input[type="checkbox"]'),
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
$('.checkbox-card > li').cardCheck({
|
||||||
|
check: $('.checkbox-card > li input[type="checkbox"]'),
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
|
@ -52,10 +52,12 @@
|
||||||
// if(showTags == 0) {
|
// if(showTags == 0) {
|
||||||
// $('#deselect, #deleteTags').addClass('hide')
|
// $('#deselect, #deleteTags').addClass('hide')
|
||||||
// }
|
// }
|
||||||
li.children('.card').removeClass('active').children('input').attr('checked', false);
|
|
||||||
if($('.tags input[type="checkbox"]:checked').length == 0) {
|
|
||||||
$('#deselect, #deleteTags, #addDefault').addClass('hide')
|
// li.children('.card').removeClass('active').children('input').attr('checked', false);
|
||||||
}
|
// if($('.tags input[type="checkbox"]:checked').length == 0) {
|
||||||
|
// $('#deselect, #deleteTags, #addDefault').addClass('hide')
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,6 +53,13 @@
|
||||||
} else {
|
} else {
|
||||||
$viewPage.find('.content').load(url, function(){
|
$viewPage.find('.content').load(url, function(){
|
||||||
$viewPage.clone(true).appendTo( $pageslide.empty() ).show();
|
$viewPage.clone(true).appendTo( $pageslide.empty() ).show();
|
||||||
|
if($('#filter-default-tag').length) {
|
||||||
|
$('#filter-default-tag').fastLiveFilter('.add-default-tags-list', '.filter-item', '.tag');
|
||||||
|
addTagsTab();
|
||||||
|
$('#view-page .card').cardCheck({
|
||||||
|
check: $('#view-page input[type="checkbox"]'),
|
||||||
|
});
|
||||||
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,12 +195,12 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if($('#add-tags').length) {
|
// if($('#add-tags').length) {
|
||||||
$('.set_new').addClass('active in').siblings().removeClass('active in');
|
// $('.set_new').addClass('active in').siblings().removeClass('active in');
|
||||||
$('#pageslide .selete_defat .search-query').attr('id','filter-default-tag')
|
// $('#pageslide .select_default .search-query').attr('id','filter-default-tag')
|
||||||
$('#filter-default-tag').fastLiveFilter('.add-defalt-tags-list', '.filter-item', '.tag');
|
// $('#filter-default-tag').fastLiveFilter('.add-default-tags-list', '.filter-item', '.tag');
|
||||||
$('.add-defalt-tags-list .filter-item').removeClass('mark');
|
// $('.add-default-tags-list .filter-item').removeClass('mark');
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close the pageslide
|
// Close the pageslide
|
||||||
|
@ -242,7 +249,9 @@
|
||||||
$pageslide.hide();
|
$pageslide.hide();
|
||||||
_sliding = false;
|
_sliding = false;
|
||||||
if( typeof callback != 'undefined' ) callback();
|
if( typeof callback != 'undefined' ) callback();
|
||||||
$body.css({'width': 'auto'})
|
$body.css({'width': 'auto'});
|
||||||
|
$('#view-page .content').empty();
|
||||||
|
$('#view-page .pane').remove();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -233,9 +233,9 @@
|
||||||
// for Orbit
|
// for Orbit
|
||||||
if($('#add-tags').length) {
|
if($('#add-tags').length) {
|
||||||
$('.set_new').addClass('active in').siblings().removeClass('active in');
|
$('.set_new').addClass('active in').siblings().removeClass('active in');
|
||||||
$('#pageslide .selete_defat .search-query').attr('id','filter-default-tag')
|
$('#pageslide .select_default .search-query').attr('id','filter-default-tag')
|
||||||
$('#filter-default-tag').fastLiveFilter('.add-defalt-tags-list', '.filter-item', '.tag');
|
$('#filter-default-tag').fastLiveFilter('.add-default-tags-list', '.filter-item', '.tag');
|
||||||
$('.add-defalt-tags-list .filter-item').removeClass('mark');
|
$('.add-default-tags-list .filter-item').removeClass('mark');
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,11 +13,10 @@ function checkedLength() {
|
||||||
$moduleTags,
|
$moduleTags,
|
||||||
$defaultTags,
|
$defaultTags,
|
||||||
$toDefault;
|
$toDefault;
|
||||||
$card.on('click', function() {
|
function reload_links() {
|
||||||
if($('.default-tags').length) {
|
if($('.default-tags').length) {
|
||||||
$moduleTags = $('.module-tags input[type="checkbox"]:checked');
|
$moduleTags = $('.module-tags input[type="checkbox"]:checked');
|
||||||
$defaultTags = $('.default-tags input[type="checkbox"]:checked');
|
$defaultTags = $('.default-tags input[type="checkbox"]:checked');
|
||||||
var ids = new Array();
|
|
||||||
|
|
||||||
if($moduleTags.length > 1 || $moduleTags.length+$defaultTags.length > 1) {
|
if($moduleTags.length > 1 || $moduleTags.length+$defaultTags.length > 1) {
|
||||||
$('#mergerTags').removeClass('hide');
|
$('#mergerTags').removeClass('hide');
|
||||||
|
@ -97,14 +96,14 @@ function checkedLength() {
|
||||||
$('#deselect').off('click', deselect);
|
$('#deselect').off('click', deselect);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
})
|
}
|
||||||
$('#mergerTags').on('click', function() {
|
$card.on('click', function() {
|
||||||
if($moduleTags || $defaultTags) {
|
reload_links();
|
||||||
if($moduleTags.length > 1 || $moduleTags.length+$defaultTags.length > 1) {
|
});
|
||||||
$('#tags-merger form').attr("action", $(this).attr("rel"));
|
$('#selectAllTags').on('click', function() {
|
||||||
mergerTags()
|
$('.filter-item:not(".mark") input[type="checkbox"]').attr('checked', true);
|
||||||
}
|
$('.filter-item:not(".mark") .card').addClass('active');
|
||||||
}
|
reload_links();
|
||||||
});
|
});
|
||||||
$('#deleteTags').on('click', function() {
|
$('#deleteTags').on('click', function() {
|
||||||
$('#delete_tags .tags-groups').empty();
|
$('#delete_tags .tags-groups').empty();
|
||||||
|
@ -127,6 +126,14 @@ function checkedLength() {
|
||||||
$filterItem.find('a').removeAttr('href');
|
$filterItem.find('a').removeAttr('href');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
$('#mergerTags').on('click', function() {
|
||||||
|
if($moduleTags || $defaultTags) {
|
||||||
|
if($moduleTags.length > 1 || $moduleTags.length+$defaultTags.length > 1) {
|
||||||
|
$('#tags-merger form').attr("action", $(this).attr("rel"));
|
||||||
|
mergerTags()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
$('#removeDefaults').on('click', function() {
|
$('#removeDefaults').on('click', function() {
|
||||||
$('#remove_defaults .tags-groups').empty();
|
$('#remove_defaults .tags-groups').empty();
|
||||||
$('#remove_defaults a.remove-defaults').attr("href", $(this).attr("rel"));
|
$('#remove_defaults a.remove-defaults').attr("href", $(this).attr("rel"));
|
||||||
|
@ -154,7 +161,7 @@ function checkedLength() {
|
||||||
|
|
||||||
|
|
||||||
function addTagsTab() {
|
function addTagsTab() {
|
||||||
$('#add-tags .nav a').click(function (e) {
|
$('a[data-toggle="tab"]').click(function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$(this).tab('show');
|
$(this).tab('show');
|
||||||
})
|
})
|
||||||
|
@ -198,5 +205,5 @@ $(function() {
|
||||||
} else {
|
} else {
|
||||||
checkedLength();
|
checkedLength();
|
||||||
};
|
};
|
||||||
addTagsTab();
|
// addTagsTab();
|
||||||
});
|
});
|
||||||
|
|
|
@ -20,8 +20,8 @@
|
||||||
#pageslide .content {
|
#pageslide .content {
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
}
|
}
|
||||||
#pageslide #view-page .content,
|
#items #pageslide #view-page .content,
|
||||||
#pageslide #view-page .pane {
|
#items #pageslide #view-page .pane {
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
margin-top: 57px;
|
margin-top: 57px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,6 +153,6 @@
|
||||||
width: 199px;
|
width: 199px;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
}
|
}
|
||||||
#pageslide .add-defalt-tags-list {
|
#pageslide .add-default-tags-list {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
|
@ -12,12 +12,12 @@ class Admin::ModuleTagsController < OrbitBackendController
|
||||||
helper 'admin/tags'
|
helper 'admin/tags'
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@included_tags = @module_app.module_tags.where(is_default: true)
|
|
||||||
@tags = @module_app.module_tags
|
@tags = @module_app.module_tags
|
||||||
@default_tags = get_default_tags
|
@default_tags = get_default_tags
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
|
@default_tags = get_default_tags_without_included
|
||||||
@tag = ModuleTag.new
|
@tag = ModuleTag.new
|
||||||
render layout: false
|
render layout: false
|
||||||
end
|
end
|
||||||
|
@ -73,7 +73,11 @@ class Admin::ModuleTagsController < OrbitBackendController
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_included_default
|
def update_included_default
|
||||||
@module_app.update_attribute(:module_tag_ids, (@module_app.module_tag_ids - get_default_tag_ids) << params[:ids])
|
default_tags = ModuleTag.find(params[:ids].split(',')) rescue nil
|
||||||
|
default_tags.each do |tag|
|
||||||
|
clone_tag_from_default(tag)
|
||||||
|
end
|
||||||
|
redirect_to admin_module_tags_url(module_app_id: @module_app_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
@ -84,8 +88,8 @@ class Admin::ModuleTagsController < OrbitBackendController
|
||||||
@module_app_id = @module_app.id rescue nil
|
@module_app_id = @module_app.id rescue nil
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_default_tags
|
def get_default_tags_without_included
|
||||||
ModuleTag.where(is_default: true)
|
ModuleTag.where(is_default: true, parent_id: nil) - @module_app.module_tags.where(is_default: true).map{|m| m.parent }
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_default_tag_ids
|
def get_default_tag_ids
|
||||||
|
|
|
@ -50,11 +50,7 @@ class Admin::TagsController < OrbitBackendController
|
||||||
if module_tags
|
if module_tags
|
||||||
module_tags.each do |module_tag|
|
module_tags.each do |module_tag|
|
||||||
module_tag.update_attribute(:is_default, true)
|
module_tag.update_attribute(:is_default, true)
|
||||||
new_tag = module_tag.clone
|
clone_tag_to_default(module_tag)
|
||||||
new_tag['_id'] = BSON::ObjectId.new
|
|
||||||
new_tag['module_app_id'] = @module_app.id
|
|
||||||
new_tag.save
|
|
||||||
module_tag.update_attribute(:parent_id, new_tag.id)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
redirect_to admin_tags_url
|
redirect_to admin_tags_url
|
||||||
|
|
|
@ -64,13 +64,12 @@ class OrbitBackendController < ApplicationController
|
||||||
tag_array = @module_app.tags.inject([]){ |result, value|
|
tag_array = @module_app.tags.inject([]){ |result, value|
|
||||||
result << [value.name, value]
|
result << [value.name, value]
|
||||||
}
|
}
|
||||||
params[:direction].eql?('asc') ? tag_array.sort : tag_array.sort.reverse!
|
params[:direction].eql?('asc') ? tag_array.sort! : tag_array.sort!.reverse!
|
||||||
sorted_objects = Array.new
|
sorted_objects = Array.new
|
||||||
tag_array.each do |x|
|
tag_array.each do |x|
|
||||||
taggings = x[1].taggings
|
taggings = x[1].taggings
|
||||||
taggings.each {|tagging| sorted_objects << tagging.taggable }
|
taggings.each {|tagging| sorted_objects << tagging.taggable }
|
||||||
end
|
end
|
||||||
# debugger
|
|
||||||
sorted_objects.flatten!
|
sorted_objects.flatten!
|
||||||
sorted_objects.uniq!
|
sorted_objects.uniq!
|
||||||
objects = get_with_nil(objects, option, sorted_objects)
|
objects = get_with_nil(objects, option, sorted_objects)
|
||||||
|
@ -155,7 +154,7 @@ class OrbitBackendController < ApplicationController
|
||||||
def get_with_nil(objects, option, sorted_objects)
|
def get_with_nil(objects, option, sorted_objects)
|
||||||
tmp = Array.new
|
tmp = Array.new
|
||||||
objects.each { |object| tmp << [get_string_value_from_object(object), object] if (object.send(option).blank? || (object.send(option).size == 0 rescue nil)) }
|
objects.each { |object| tmp << [get_string_value_from_object(object), object] if (object.send(option).blank? || (object.send(option).size == 0 rescue nil)) }
|
||||||
sorted = params[:direction].eql?('asc') ? tmp.sort : tmp.sort.reverse!
|
sorted = params[:direction].eql?('asc') ? tmp.sort : tmp.sort.reverse
|
||||||
sorted_tmp = sorted.collect {|a| a[1] }
|
sorted_tmp = sorted.collect {|a| a[1] }
|
||||||
a = params[:direction].eql?('asc') ? (sorted_tmp + sorted_objects) : (sorted_objects + sorted_tmp)
|
a = params[:direction].eql?('asc') ? (sorted_tmp + sorted_objects) : (sorted_objects + sorted_tmp)
|
||||||
a.flatten
|
a.flatten
|
||||||
|
|
|
@ -3,7 +3,8 @@
|
||||||
<!-- footer -->
|
<!-- footer -->
|
||||||
<div class="bottomnav clearfix">
|
<div class="bottomnav clearfix">
|
||||||
<div class="action pull-right">
|
<div class="action pull-right">
|
||||||
<button id="deselect" class="btn btn-inverse toggable hide"><%= t(:deselect) %></button>
|
<button id="selectAllTags" class="btn"><%= t(:select_all) %></button>
|
||||||
|
<button id="deselect" class="btn btn-inverse toggable hide"><%= t(:deselect_all) %></button>
|
||||||
<%= link_to t(:delete), '#', id: "deleteTags", class: "btn btn-danger toggable hide", rel: '' %>
|
<%= link_to t(:delete), '#', id: "deleteTags", class: "btn btn-danger toggable hide", rel: '' %>
|
||||||
<%= link_to t(:merge), '#', id: "mergerTags", class: "btn btn-success toggable hide", rel: merge_admin_module_tags_path(module_app_id: @module_app_id) %>
|
<%= link_to t(:merge), '#', id: "mergerTags", class: "btn btn-success toggable hide", rel: merge_admin_module_tags_path(module_app_id: @module_app_id) %>
|
||||||
<%= link_to t(:remove_default), '#', id: "removeDefaults", class: "btn btn-info toggable hide", rel: '' %>
|
<%= link_to t(:remove_default), '#', id: "removeDefaults", class: "btn btn-info toggable hide", rel: '' %>
|
||||||
|
|
|
@ -1,80 +1,49 @@
|
||||||
<div id="add-tags">
|
<div id="add-tags">
|
||||||
<legend>Add Tags</legend>
|
|
||||||
<ul class="nav nav-pills">
|
|
||||||
<li class="active"><a href=".set_new" data-toggle="tab">Create new</a></li>
|
|
||||||
<li><a href=".selete_defat" data-toggle="tab">Use Default</a></li>
|
|
||||||
</ul>
|
|
||||||
<div class="tab-content">
|
|
||||||
|
|
||||||
<div class="set_new tab-pane fade active in">
|
<legend>Add Tags</legend>
|
||||||
<%= form_for @tag, url: admin_module_tags_path(module_app_id: @module_app_id), remote: true, id: 'create_new_tags' do |f| %>
|
<ul class="nav nav-pills">
|
||||||
<fieldset>
|
<li class="active"><a href=".set_new" data-toggle="tab">Create new</a></li>
|
||||||
<%= render partial: "admin/tags/form", :locals => { :f => f } %>
|
<li><a href=".select_default" data-toggle="tab">Use Default</a></li>
|
||||||
<div class="form-actions">
|
</ul>
|
||||||
<a href="javascript:$.pageslide.close()" class="btn btn-small"><%= t(:cancel) %></a>
|
<div class="tab-content">
|
||||||
<%= f.submit t(:create_), class: 'btn btn-primary btn-small' %>
|
|
||||||
</div>
|
<div class="set_new tab-pane fade active in">
|
||||||
</fieldset>
|
<%= form_for @tag, url: admin_module_tags_path(module_app_id: @module_app_id), remote: true, id: 'create_new_tags' do |f| %>
|
||||||
<% end %>
|
<fieldset>
|
||||||
|
<%= render partial: "admin/tags/form", :locals => { :f => f } %>
|
||||||
|
<div class="form-actions">
|
||||||
|
<a href="javascript:$.pageslide.close()" class="btn btn-small"><%= t(:cancel) %></a>
|
||||||
|
<%= f.submit t(:create_), class: 'btn btn-primary btn-small' %>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="select_default tags tab-pane fade">
|
||||||
|
<input id="filter-default-tag" class="search-query" type="text" placeholder="Search Tags" value="">
|
||||||
|
<%= form_tag update_included_default_admin_module_tags_path(module_app_id: @module_app_id), id: "filter-default-tag", method: :post, remote: true do %>
|
||||||
|
<fieldset>
|
||||||
|
<ul class="add-default-tags-list tags-groups checkbox-card">
|
||||||
|
<% @default_tags.each do |module_tag| %>
|
||||||
|
<li class="filter-item default">
|
||||||
|
<p class="card pull-left">
|
||||||
|
<input type="checkbox">
|
||||||
|
<%= check_box_tag "ids[]", module_tag.id, false, class: "tag_id" %>
|
||||||
|
</p>
|
||||||
|
<a>
|
||||||
|
<span class="amount"><%= get_tagging_count(module_tag) %></span>
|
||||||
|
<%= show_names_slash(module_tag) %>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
<div class="form-actions">
|
||||||
|
<a href="javascript:$.pageslide.close()" class="btn btn-small"><%= t(:cancel) %></a>
|
||||||
|
<%= submit_tag t(:add), class: 'btn btn-primary btn-small' %>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="selete_defat tags tab-pane fade">
|
|
||||||
<input class="search-query" type="text" placeholder="Search Tags" value="">
|
|
||||||
<form id="use_default_tags">
|
|
||||||
<fieldset>
|
|
||||||
<ul class="add-defalt-tags-list tags-groups checkbox-card">
|
|
||||||
<li class="filter-item default">
|
|
||||||
<p class="card pull-left">
|
|
||||||
<input type="checkbox">
|
|
||||||
</p>
|
|
||||||
<a>
|
|
||||||
<span class="amount">8</span>
|
|
||||||
<span class="tag">Apple</span> / <span class="tag">蘋果</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="filter-item default">
|
|
||||||
<p class="card pull-left">
|
|
||||||
<input type="checkbox">
|
|
||||||
</p>
|
|
||||||
<a>
|
|
||||||
<span class="amount">8</span>
|
|
||||||
<span class="tag">Bus</span> / <span class="tag">巴士</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="filter-item default">
|
|
||||||
<p class="card pull-left">
|
|
||||||
<input type="checkbox">
|
|
||||||
</p>
|
|
||||||
<a>
|
|
||||||
<span class="amount">8</span>
|
|
||||||
<span class="tag">Cake</span> / <span class="tag">蛋糕</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="filter-item default">
|
|
||||||
<p class="card pull-left">
|
|
||||||
<input type="checkbox">
|
|
||||||
</p>
|
|
||||||
<a>
|
|
||||||
<span class="amount">8</span>
|
|
||||||
<span class="tag">Dog</span> / <span class="tag">狗</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="filter-item default">
|
|
||||||
<p class="card pull-left">
|
|
||||||
<input type="checkbox">
|
|
||||||
</p>
|
|
||||||
<a>
|
|
||||||
<span class="amount">8</span>
|
|
||||||
<span class="tag">Elephant</span> / <span class="tag">大象</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<div class="form-actions">
|
|
||||||
<a href="javascript:$.pageslide.close()" class="btn btn-small">Cancel</a>
|
|
||||||
<a class="btn btn-primary btn-small">Submit</a>
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
|
@ -4,5 +4,7 @@ $("#remove_defaults").modal('hide');
|
||||||
$("#tags_index").html("<%= j render 'index' %>")
|
$("#tags_index").html("<%= j render 'index' %>")
|
||||||
$.pageslide.close();
|
$.pageslide.close();
|
||||||
openSlide();
|
openSlide();
|
||||||
cardCheck();
|
$('.card').cardCheck({
|
||||||
|
check: $('.card input[type="checkbox"]'),
|
||||||
|
});
|
||||||
checkedLength()
|
checkedLength()
|
|
@ -1,7 +1,8 @@
|
||||||
<!-- footer -->
|
<!-- footer -->
|
||||||
<div class="bottomnav clearfix">
|
<div class="bottomnav clearfix">
|
||||||
<div class="action pull-right">
|
<div class="action pull-right">
|
||||||
<button id="deselect" class="btn btn-inverse toggable hide"><%= t(:deselect) %></button>
|
<button id="selectAllTags" class="btn"><%= t(:select_all) %></button>
|
||||||
|
<button id="deselect" class="btn btn-inverse toggable hide"><%= t(:deselect_all) %></button>
|
||||||
<%= link_to t(:delete), '#', id: "deleteTags", class: "btn btn-danger toggable hide", rel: '' %>
|
<%= link_to t(:delete), '#', id: "deleteTags", class: "btn btn-danger toggable hide", rel: '' %>
|
||||||
<%= link_to t(:merge), '#', id: "mergerTags", class: "btn btn-success toggable hide", rel: merge_admin_tags_path %>
|
<%= link_to t(:merge), '#', id: "mergerTags", class: "btn btn-success toggable hide", rel: merge_admin_tags_path %>
|
||||||
<%= link_to t(:add_to_default), add_to_default_admin_tags_path, id: "addDefault", class: "btn btn-info toggable hide", method: :post, remote: true %>
|
<%= link_to t(:add_to_default), add_to_default_admin_tags_path, id: "addDefault", class: "btn btn-info toggable hide", method: :post, remote: true %>
|
||||||
|
|
|
@ -3,5 +3,7 @@ $("#tags-merger").modal('hide');
|
||||||
$("#tags_index").html("<%= j render 'index' %>")
|
$("#tags_index").html("<%= j render 'index' %>")
|
||||||
$.pageslide.close();
|
$.pageslide.close();
|
||||||
openSlide();
|
openSlide();
|
||||||
cardCheck();
|
$('.card').cardCheck({
|
||||||
|
check: $('.card input[type="checkbox"]'),
|
||||||
|
});
|
||||||
checkedLength()
|
checkedLength()
|
|
@ -25,11 +25,23 @@
|
||||||
</nav>
|
</nav>
|
||||||
<section id="main-wrap">
|
<section id="main-wrap">
|
||||||
<div class="wrap-inner">
|
<div class="wrap-inner">
|
||||||
|
<div id="filter" class="topnav clearfix">
|
||||||
|
<ul class="breadcrumb pull-left">
|
||||||
|
<li><a href="/orbit_4.0.1/admin/dashboards/dashboards.shtml">Dashboard</a> <span class="divider">/</span></li>
|
||||||
|
<li class="active">All</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="pull-right">
|
||||||
|
<input id="filter-input" class="search-query input-medium" type="text" placeholder="Search Tags" value="">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<%= yield %>
|
<%= yield %>
|
||||||
<div id="view-page" class="nano" style="display:none">
|
<div id="pageslide">
|
||||||
<div class="content">
|
<div id="view-page" class="nano" style="display:none">
|
||||||
</div>
|
<div class="content">
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<%= javascript_include_tag "lib/jquery.pageslide.js" %>
|
<%= javascript_include_tag "lib/jquery.pageslide.js" %>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -5,7 +5,7 @@ en:
|
||||||
create:
|
create:
|
||||||
error:
|
error:
|
||||||
tag: Error when creating tag.
|
tag: Error when creating tag.
|
||||||
deselect: Deselect
|
deselect_all: Deselect all
|
||||||
editing:
|
editing:
|
||||||
tag: Editing tag
|
tag: Editing tag
|
||||||
login_orbit: Log In to Orbit
|
login_orbit: Log In to Orbit
|
||||||
|
@ -14,6 +14,7 @@ en:
|
||||||
tag: New tag
|
tag: New tag
|
||||||
no_app: No module
|
no_app: No module
|
||||||
remove_default: Remove default
|
remove_default: Remove default
|
||||||
|
select_all: Select all
|
||||||
tag:
|
tag:
|
||||||
add: Add tag
|
add: Add tag
|
||||||
delete: Delete tags
|
delete: Delete tags
|
||||||
|
|
|
@ -116,6 +116,7 @@ Orbit::Application.routes.draw do
|
||||||
post 'delete_tags'
|
post 'delete_tags'
|
||||||
post 'merge'
|
post 'merge'
|
||||||
post 'remove_default'
|
post 'remove_default'
|
||||||
|
post 'update_included_default'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -81,12 +81,21 @@ module OrbitTag
|
||||||
module Merging
|
module Merging
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def create_tag(name, taggings, module_app, default=false)
|
def clone_tag(module_tag, parent_id=nil, set_parent=nil)
|
||||||
new_tag = module_app.module_tags.create(name_translations: name, module_app_id: module_app.id, is_default: default)
|
new_tag = module_tag.clone
|
||||||
taggings.each do |tagging|
|
new_tag['_id'] = BSON::ObjectId.new
|
||||||
tagging.taggable.taggings.create(tag_id: new_tag.tag.id) unless tagging.taggable.taggings.detect{|t| t.tag_id.eql?(new_tag.tag.id)}
|
new_tag['module_app_id'] = @module_app.id
|
||||||
end
|
new_tag['parent_id'] = parent_id
|
||||||
new_tag
|
new_tag.save
|
||||||
|
module_tag.update_attribute(:parent_id, new_tag.id) if set_parent
|
||||||
|
end
|
||||||
|
|
||||||
|
def clone_tag_from_default(default_tag)
|
||||||
|
clone_tag(default_tag, default_tag.id)
|
||||||
|
end
|
||||||
|
|
||||||
|
def clone_tag_to_default(default_tag)
|
||||||
|
clone_tag(default_tag, nil, true)
|
||||||
end
|
end
|
||||||
|
|
||||||
def merge_default_tags(name, tag_leases)
|
def merge_default_tags(name, tag_leases)
|
||||||
|
@ -123,7 +132,10 @@ module OrbitTag
|
||||||
|
|
||||||
def merge_tags(name, taggings, module_app_id, default=nil)
|
def merge_tags(name, taggings, module_app_id, default=nil)
|
||||||
module_app = ModuleApp.find(module_app_id)
|
module_app = ModuleApp.find(module_app_id)
|
||||||
new_tag = create_tag(name, taggings, module_app, default)
|
new_tag = module_app.module_tags.create(name_translations: name, module_app_id: module_app.id, is_default: default)
|
||||||
|
taggings.each do |tagging|
|
||||||
|
tagging.taggable.taggings.create(tag_id: new_tag.tag.id) unless tagging.taggable.taggings.detect{|t| t.tag_id.eql?(new_tag.tag.id)}
|
||||||
|
end
|
||||||
new_tag
|
new_tag
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue