1 //var scriptUrl, interestingTags, ignoredTags, tags, $;
4 var sendAjax = function(tagname, reason, action, callback){
7 url += $.i18n._('mark-tag/');
9 url += $.i18n._('interesting/');
12 url += $.i18n._('ignored/');
16 url += $.i18n._('unmark-tag/');
18 url = url + tagname + '/';
24 if (callback !== false){
25 call_settings.success = callback;
27 $.ajax(call_settings);
31 var unpickTag = function(from_target ,tagname, reason, send_ajax){
32 //send ajax request to delete tag
33 var deleteTagLocally = function(){
34 from_target[tagname].remove();
35 delete from_target[tagname];
38 sendAjax(tagname,reason,'remove',deleteTagLocally);
46 var setupTagDeleteEvents = function(obj,tag_store,tagname,reason,send_ajax){
47 obj.unbind('mouseover').bind('mouseover', function(){
48 $(this).attr('src', mediaUrl('media/images/close-small-hover.png'));
50 obj.unbind('mouseout').bind('mouseout', function(){
51 $(this).attr('src', mediaUrl('media/images/close-small-dark.png'));
53 obj.click( function(){
54 unpickTag(tag_store,tagname,reason,send_ajax);
58 var handlePickedTag = function(obj,reason){
59 var tagname = $.trim($(obj).prev().attr('value'));
60 var to_target = interestingTags;
61 var from_target = ignoredTags;
64 to_target = ignoredTags;
65 from_target = interestingTags;
66 to_tag_container = $('div .tags.ignored');
68 else if (reason != 'good'){
72 to_tag_container = $('div .tags.interesting');
75 if (tagname in from_target){
76 unpickTag(from_target,tagname,reason,false);
79 if (!(tagname in to_target)){
80 //send ajax request to pick this tag
82 sendAjax(tagname,reason,'add',function(){
83 var new_tag = $('<span></span>');
84 new_tag.addClass('deletable-tag');
85 var tag_link = $('<a></a>');
86 tag_link.attr('rel','tag');
87 tag_link.attr('href', scriptUrl + $.i18n._('tags/') + tagname);
88 tag_link.html(tagname);
89 var del_link = $('<img></img>');
90 del_link.addClass('delete-icon');
91 del_link.attr('src', mediaUrl('/media/images/close-small-dark.png'));
93 setupTagDeleteEvents(del_link, to_target, tagname, reason, true);
95 new_tag.append(tag_link);
96 new_tag.append(del_link);
97 to_tag_container.append(new_tag);
99 to_target[tagname] = new_tag;
104 var collectPickedTags = function(){
105 var good_prefix = 'interesting-tag-';
106 var bad_prefix = 'ignored-tag-';
107 var good_re = RegExp('^' + good_prefix);
108 var bad_re = RegExp('^' + bad_prefix);
109 interestingTags = {};
111 $('.deletable-tag').each(
113 var item_id = $(item).attr('id');
114 var tag_name, tag_store;
115 if (good_re.test(item_id)){
116 tag_name = item_id.replace(good_prefix,'');
117 tag_store = interestingTags;
120 else if (bad_re.test(item_id)){
121 tag_name = item_id.replace(bad_prefix,'');
122 tag_store = ignoredTags;
128 tag_store[tag_name] = $(item);
129 setupTagDeleteEvents($(item).find('img'),tag_store,tag_name,reason,true);
134 var setupHideIgnoredQuestionsControl = function(){
135 $('#hideIgnoredTagsCb').unbind('click').click(function(){
140 url: scriptUrl + $.i18n._('command/'),
141 data: {command:'toggle-ignored-questions'}
148 setupHideIgnoredQuestionsControl();
149 $("#interestingTagInput, #ignoredTagInput").autocomplete(tags, {
154 multipleSeparator: " ",
155 formatItem: function(row, i, max) {
156 return row.n + " ("+ row.c +")";
158 formatResult: function(row, i, max){
163 $("#interestingTagAdd").click(function(){handlePickedTag(this,'good');});
164 $("#ignoredTagAdd").click(function(){handlePickedTag(this,'bad');});
169 $(document).ready( function(){