diff --git a/app/assets/javascripts/lib/checkbox.card.js b/app/assets/javascripts/lib/checkbox.card.js index d8c05b237..7b7e97aac 100644 --- a/app/assets/javascripts/lib/checkbox.card.js +++ b/app/assets/javascripts/lib/checkbox.card.js @@ -1,25 +1,53 @@ -function cardCheck() { - if($('.tags').length) { - var $card = $('.checkbox-card .card'), - $check = $card.children($('input[type="checkbox"]')); - $check.each(function(){ - if($(this).attr('checked')) { - $(this).parent(".check").addClass("active"); - } - }) - } else { - var $card = $('.checkbox-card>li'), - $check = $('input[type="checkbox"]'); - $check.each(function(){ - if($(this).attr('checked')) { - $(this).parent("li").addClass("active"); - } - }) - } - $card.on('click', function() { - $(this).toggleClass('active') - }); -} +// function cardCheck() { +// if($('.tags').length) { +// var $card = $('.checkbox-card .card'), +// $check = $card.children($('input[type="checkbox"]')); +// $check.each(function(){ +// if($(this).attr('checked')) { +// $(this).parent(".check").addClass("active"); +// } +// }) +// } else { +// var $card = $('.checkbox-card>li'), +// $check = $('input[type="checkbox"]'); +// $check.each(function(){ +// if($(this).attr('checked')) { +// $(this).parent("li").addClass("active"); +// } +// }) +// } +// $card.on('click', function() { +// $(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(){ - cardCheck(); + if($('.tags').length) { + $('.card').cardCheck({ + check: $('.card input[type="checkbox"]'), + }); + } else { + $('.checkbox-card > li').cardCheck({ + check: $('.checkbox-card > li input[type="checkbox"]'), + }); + } }); \ No newline at end of file diff --git a/app/assets/javascripts/lib/jquery.fastLiveFilter.js b/app/assets/javascripts/lib/jquery.fastLiveFilter.js index b843a6271..4c0cf4c5d 100644 --- a/app/assets/javascripts/lib/jquery.fastLiveFilter.js +++ b/app/assets/javascripts/lib/jquery.fastLiveFilter.js @@ -52,10 +52,12 @@ // if(showTags == 0) { // $('#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') + // } } } } diff --git a/app/assets/javascripts/lib/jquery.pageslide.js b/app/assets/javascripts/lib/jquery.pageslide.js index 83a0c3773..a85ce0b87 100644 --- a/app/assets/javascripts/lib/jquery.pageslide.js +++ b/app/assets/javascripts/lib/jquery.pageslide.js @@ -53,6 +53,13 @@ } else { $viewPage.find('.content').load(url, function(){ $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) { - $('.set_new').addClass('active in').siblings().removeClass('active in'); - $('#pageslide .selete_defat .search-query').attr('id','filter-default-tag') - $('#filter-default-tag').fastLiveFilter('.add-defalt-tags-list', '.filter-item', '.tag'); - $('.add-defalt-tags-list .filter-item').removeClass('mark'); - } + // if($('#add-tags').length) { + // $('.set_new').addClass('active in').siblings().removeClass('active in'); + // $('#pageslide .select_default .search-query').attr('id','filter-default-tag') + // $('#filter-default-tag').fastLiveFilter('.add-default-tags-list', '.filter-item', '.tag'); + // $('.add-default-tags-list .filter-item').removeClass('mark'); + // } } // Close the pageslide @@ -242,7 +249,9 @@ $pageslide.hide(); _sliding = false; if( typeof callback != 'undefined' ) callback(); - $body.css({'width': 'auto'}) + $body.css({'width': 'auto'}); + $('#view-page .content').empty(); + $('#view-page .pane').remove(); }); } diff --git a/app/assets/javascripts/lib/jquery.pageslide_old.js b/app/assets/javascripts/lib/jquery.pageslide_old.js index 1cd2fd84e..2309a0451 100644 --- a/app/assets/javascripts/lib/jquery.pageslide_old.js +++ b/app/assets/javascripts/lib/jquery.pageslide_old.js @@ -233,9 +233,9 @@ // for Orbit if($('#add-tags').length) { $('.set_new').addClass('active in').siblings().removeClass('active in'); - $('#pageslide .selete_defat .search-query').attr('id','filter-default-tag') - $('#filter-default-tag').fastLiveFilter('.add-defalt-tags-list', '.filter-item', '.tag'); - $('.add-defalt-tags-list .filter-item').removeClass('mark'); + $('#pageslide .select_default .search-query').attr('id','filter-default-tag') + $('#filter-default-tag').fastLiveFilter('.add-default-tags-list', '.filter-item', '.tag'); + $('.add-default-tags-list .filter-item').removeClass('mark'); } // } diff --git a/app/assets/javascripts/lib/tags.js.erb b/app/assets/javascripts/lib/tags.js.erb index e8b4a1251..b9a8f0761 100644 --- a/app/assets/javascripts/lib/tags.js.erb +++ b/app/assets/javascripts/lib/tags.js.erb @@ -13,11 +13,10 @@ function checkedLength() { $moduleTags, $defaultTags, $toDefault; - $card.on('click', function() { + function reload_links() { if($('.default-tags').length) { $moduleTags = $('.module-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) { $('#mergerTags').removeClass('hide'); @@ -97,14 +96,14 @@ function checkedLength() { $('#deselect').off('click', deselect); }; }; - }) - $('#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() - } - } + } + $card.on('click', function() { + reload_links(); + }); + $('#selectAllTags').on('click', function() { + $('.filter-item:not(".mark") input[type="checkbox"]').attr('checked', true); + $('.filter-item:not(".mark") .card').addClass('active'); + reload_links(); }); $('#deleteTags').on('click', function() { $('#delete_tags .tags-groups').empty(); @@ -127,6 +126,14 @@ function checkedLength() { $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() { $('#remove_defaults .tags-groups').empty(); $('#remove_defaults a.remove-defaults').attr("href", $(this).attr("rel")); @@ -154,7 +161,7 @@ function checkedLength() { function addTagsTab() { - $('#add-tags .nav a').click(function (e) { + $('a[data-toggle="tab"]').click(function (e) { e.preventDefault(); $(this).tab('show'); }) @@ -198,5 +205,5 @@ $(function() { } else { checkedLength(); }; - addTagsTab(); + // addTagsTab(); }); diff --git a/app/assets/stylesheets/lib/pageslide.css b/app/assets/stylesheets/lib/pageslide.css index 697c5ab99..ad233d76d 100644 --- a/app/assets/stylesheets/lib/pageslide.css +++ b/app/assets/stylesheets/lib/pageslide.css @@ -20,8 +20,8 @@ #pageslide .content { padding: 15px; } -#pageslide #view-page .content, -#pageslide #view-page .pane { +#items #pageslide #view-page .content, +#items #pageslide #view-page .pane { padding: 0px; margin-top: 57px; } diff --git a/app/assets/stylesheets/lib/tags-groups.css b/app/assets/stylesheets/lib/tags-groups.css index b5ed7ac02..e715e474a 100644 --- a/app/assets/stylesheets/lib/tags-groups.css +++ b/app/assets/stylesheets/lib/tags-groups.css @@ -153,6 +153,6 @@ width: 199px; margin-bottom: 5px; } -#pageslide .add-defalt-tags-list { +#pageslide .add-default-tags-list { margin-bottom: 0; } \ No newline at end of file diff --git a/app/controllers/admin/module_tags_controller.rb b/app/controllers/admin/module_tags_controller.rb index 7b04d8143..653b88b95 100644 --- a/app/controllers/admin/module_tags_controller.rb +++ b/app/controllers/admin/module_tags_controller.rb @@ -12,12 +12,12 @@ class Admin::ModuleTagsController < OrbitBackendController helper 'admin/tags' def index - @included_tags = @module_app.module_tags.where(is_default: true) @tags = @module_app.module_tags @default_tags = get_default_tags end def new + @default_tags = get_default_tags_without_included @tag = ModuleTag.new render layout: false end @@ -73,7 +73,11 @@ class Admin::ModuleTagsController < OrbitBackendController end 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 protected @@ -84,8 +88,8 @@ class Admin::ModuleTagsController < OrbitBackendController @module_app_id = @module_app.id rescue nil end - def get_default_tags - ModuleTag.where(is_default: true) + def get_default_tags_without_included + ModuleTag.where(is_default: true, parent_id: nil) - @module_app.module_tags.where(is_default: true).map{|m| m.parent } end def get_default_tag_ids diff --git a/app/controllers/admin/tags_controller.rb b/app/controllers/admin/tags_controller.rb index 05a2ad982..817a9726b 100644 --- a/app/controllers/admin/tags_controller.rb +++ b/app/controllers/admin/tags_controller.rb @@ -50,11 +50,7 @@ class Admin::TagsController < OrbitBackendController if module_tags module_tags.each do |module_tag| module_tag.update_attribute(:is_default, true) - new_tag = module_tag.clone - 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) + clone_tag_to_default(module_tag) end end redirect_to admin_tags_url diff --git a/app/controllers/orbit_backend_controller.rb b/app/controllers/orbit_backend_controller.rb index 9a79ab45c..699425288 100644 --- a/app/controllers/orbit_backend_controller.rb +++ b/app/controllers/orbit_backend_controller.rb @@ -64,13 +64,12 @@ class OrbitBackendController < ApplicationController tag_array = @module_app.tags.inject([]){ |result, 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 tag_array.each do |x| taggings = x[1].taggings taggings.each {|tagging| sorted_objects << tagging.taggable } end - # debugger sorted_objects.flatten! sorted_objects.uniq! objects = get_with_nil(objects, option, sorted_objects) @@ -155,7 +154,7 @@ class OrbitBackendController < ApplicationController def get_with_nil(objects, option, sorted_objects) 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)) } - 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] } a = params[:direction].eql?('asc') ? (sorted_tmp + sorted_objects) : (sorted_objects + sorted_tmp) a.flatten diff --git a/app/views/admin/module_tags/_index.html.erb b/app/views/admin/module_tags/_index.html.erb index 9501845d5..b639016ed 100644 --- a/app/views/admin/module_tags/_index.html.erb +++ b/app/views/admin/module_tags/_index.html.erb @@ -3,7 +3,8 @@
- + + <%= 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(:remove_default), '#', id: "removeDefaults", class: "btn btn-info toggable hide", rel: '' %> diff --git a/app/views/admin/module_tags/_new.html.erb b/app/views/admin/module_tags/_new.html.erb index a19a671c5..f541725c3 100644 --- a/app/views/admin/module_tags/_new.html.erb +++ b/app/views/admin/module_tags/_new.html.erb @@ -1,80 +1,49 @@
-Add Tags - -
-
- <%= form_for @tag, url: admin_module_tags_path(module_app_id: @module_app_id), remote: true, id: 'create_new_tags' do |f| %> -
- <%= render partial: "admin/tags/form", :locals => { :f => f } %> -
- <%= t(:cancel) %> - <%= f.submit t(:create_), class: 'btn btn-primary btn-small' %> -
-
- <% end %> + Add Tags + +
+ +
+ <%= form_for @tag, url: admin_module_tags_path(module_app_id: @module_app_id), remote: true, id: 'create_new_tags' do |f| %> +
+ <%= render partial: "admin/tags/form", :locals => { :f => f } %> +
+ <%= t(:cancel) %> + <%= f.submit t(:create_), class: 'btn btn-primary btn-small' %> +
+
+ <% end %> +
+ +
+ + <%= form_tag update_included_default_admin_module_tags_path(module_app_id: @module_app_id), id: "filter-default-tag", method: :post, remote: true do %> +
+ +
+ <%= t(:cancel) %> + <%= submit_tag t(:add), class: 'btn btn-primary btn-small' %> +
+
+ <% end %> +
-
-
\ No newline at end of file diff --git a/app/views/admin/module_tags/index.js.erb b/app/views/admin/module_tags/index.js.erb index d10a3ef34..699910e16 100644 --- a/app/views/admin/module_tags/index.js.erb +++ b/app/views/admin/module_tags/index.js.erb @@ -4,5 +4,7 @@ $("#remove_defaults").modal('hide'); $("#tags_index").html("<%= j render 'index' %>") $.pageslide.close(); openSlide(); -cardCheck(); +$('.card').cardCheck({ + check: $('.card input[type="checkbox"]'), +}); checkedLength() \ No newline at end of file diff --git a/app/views/admin/tags/_index.html.erb b/app/views/admin/tags/_index.html.erb index 05fd6245e..3b4f63a63 100644 --- a/app/views/admin/tags/_index.html.erb +++ b/app/views/admin/tags/_index.html.erb @@ -1,7 +1,8 @@
- + + <%= 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(:add_to_default), add_to_default_admin_tags_path, id: "addDefault", class: "btn btn-info toggable hide", method: :post, remote: true %> diff --git a/app/views/admin/tags/index.js.erb b/app/views/admin/tags/index.js.erb index a1c2e5e7f..d100fe76b 100644 --- a/app/views/admin/tags/index.js.erb +++ b/app/views/admin/tags/index.js.erb @@ -3,5 +3,7 @@ $("#tags-merger").modal('hide'); $("#tags_index").html("<%= j render 'index' %>") $.pageslide.close(); openSlide(); -cardCheck(); +$('.card').cardCheck({ + check: $('.card input[type="checkbox"]'), +}); checkedLength() \ No newline at end of file diff --git a/app/views/layouts/back_end.html.erb b/app/views/layouts/back_end.html.erb index 25baa5d6e..4603684e5 100644 --- a/app/views/layouts/back_end.html.erb +++ b/app/views/layouts/back_end.html.erb @@ -25,11 +25,23 @@
+
+ + +
+ +
+
<%= yield %> - +
+ +
<%= javascript_include_tag "lib/jquery.pageslide.js" %>
diff --git a/config/locales/new_ui.en.yml b/config/locales/new_ui.en.yml index 96a686cbd..279be7fa8 100644 --- a/config/locales/new_ui.en.yml +++ b/config/locales/new_ui.en.yml @@ -5,7 +5,7 @@ en: create: error: tag: Error when creating tag. - deselect: Deselect + deselect_all: Deselect all editing: tag: Editing tag login_orbit: Log In to Orbit @@ -14,6 +14,7 @@ en: tag: New tag no_app: No module remove_default: Remove default + select_all: Select all tag: add: Add tag delete: Delete tags diff --git a/config/routes.rb b/config/routes.rb index 036fd9518..c7dfbab9a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -116,6 +116,7 @@ Orbit::Application.routes.draw do post 'delete_tags' post 'merge' post 'remove_default' + post 'update_included_default' end end diff --git a/lib/orbit_tag/taggable.rb b/lib/orbit_tag/taggable.rb index ae232a531..b7a933b38 100644 --- a/lib/orbit_tag/taggable.rb +++ b/lib/orbit_tag/taggable.rb @@ -81,12 +81,21 @@ module OrbitTag module Merging protected - def create_tag(name, taggings, module_app, default=false) - 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 + def clone_tag(module_tag, parent_id=nil, set_parent=nil) + new_tag = module_tag.clone + new_tag['_id'] = BSON::ObjectId.new + new_tag['module_app_id'] = @module_app.id + new_tag['parent_id'] = parent_id + 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 def merge_default_tags(name, tag_leases) @@ -123,7 +132,10 @@ module OrbitTag def merge_tags(name, taggings, module_app_id, default=nil) 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 end