summaryrefslogtreecommitdiffstats
path: root/templates
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2009-12-08 22:50:21 -0500
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2009-12-08 22:50:21 -0500
commit86250a6d49e69ff04d128d11bfa82d9a7b345bbf (patch)
tree8d9e58419b50630adc537ac92907d04946edc925 /templates
parenta3748b45fec574f1fc2469edae4401c53184e791 (diff)
downloadaskbot-86250a6d49e69ff04d128d11bfa82d9a7b345bbf.tar.gz
askbot-86250a6d49e69ff04d128d11bfa82d9a7b345bbf.tar.bz2
askbot-86250a6d49e69ff04d128d11bfa82d9a7b345bbf.zip
added interesting and ignored tag selectors (works) and per-tag subscription (not tested yet)
Diffstat (limited to 'templates')
-rw-r--r--templates/authopenid/complete.html1
-rw-r--r--templates/base.html1
-rw-r--r--templates/content/images/close-small-dark.pngbin0 -> 226 bytes
-rw-r--r--templates/content/js/com.cnprog.admin.js2
-rw-r--r--templates/content/js/com.cnprog.post.js174
-rw-r--r--templates/content/js/com.cnprog.utils.js2
-rw-r--r--templates/content/js/compress.bat3
-rw-r--r--templates/content/js/flot-build.bat2
-rw-r--r--templates/content/style/style.css32
-rw-r--r--templates/index.html18
-rw-r--r--templates/questions.html88
-rw-r--r--templates/tag_selector.html42
-rw-r--r--templates/user_email_subscriptions.html3
-rw-r--r--templates/user_stats.html2
14 files changed, 314 insertions, 56 deletions
diff --git a/templates/authopenid/complete.html b/templates/authopenid/complete.html
index 9a94c3c4..ce5fb7fe 100644
--- a/templates/authopenid/complete.html
+++ b/templates/authopenid/complete.html
@@ -88,6 +88,7 @@ parameters:
</div>
<p class='nomargin'>{% trans "receive updates motivational blurb" %}</p>
{% include "edit_user_email_feeds_form.html" %}
+ <p class='nomargin'>{% trans "Tag filter tool will be your right panel, once you log in." %}</p>
<div class="submit-row"><input type="submit" class="submit" name="bnewaccount" value="{% trans "create account" %}"/></div>
</form>
</div>
diff --git a/templates/base.html b/templates/base.html
index ec0a53d7..daafc3bc 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -75,7 +75,6 @@
{% endblock%}
</div>
-
<div id="CARight">
{% block sidebar%}
{% endblock%}
diff --git a/templates/content/images/close-small-dark.png b/templates/content/images/close-small-dark.png
new file mode 100644
index 00000000..280c1fc7
--- /dev/null
+++ b/templates/content/images/close-small-dark.png
Binary files differ
diff --git a/templates/content/js/com.cnprog.admin.js b/templates/content/js/com.cnprog.admin.js
index 73b5768f..cb1c1b15 100644
--- a/templates/content/js/com.cnprog.admin.js
+++ b/templates/content/js/com.cnprog.admin.js
@@ -3,7 +3,7 @@ $().ready( function(){
success: function(a,b){$('.admin #action_status').html($.i18n._('changes saved'));},
dataType:'json',
timeout:5000,
- url: $.i18n._('/') + $.i18n._('moderate-user/') + viewUserID + '/'
+ url: scriptUrl + $.i18n._('moderate-user/') + viewUserID + '/'
};
var form = $('.admin #moderate_user_form').ajaxForm(options);
var box = $('.admin input#id_is_approved').click(function(){
diff --git a/templates/content/js/com.cnprog.post.js b/templates/content/js/com.cnprog.post.js
index 5d58ff21..0d4c52d3 100644
--- a/templates/content/js/com.cnprog.post.js
+++ b/templates/content/js/com.cnprog.post.js
@@ -500,7 +500,7 @@ function createComments(type) {
jDiv.append('<p id="' + divId + '" class="comment">'
+ $.i18n._('to comment, need') + ' ' +
+ repNeededForComments + ' ' + $.i18n._('community karma points')
- + '<a href="' + $.i18n._('/') + $.i18n._('faq/') + '" class="comment-user">'
+ + '<a href="' + scriptUrl + $.i18n._('faq/') + '" class="comment-user">'
+ $.i18n._('please see') + 'faq</a></span></p>');
}
}
@@ -601,7 +601,7 @@ function createComments(type) {
$(this).children().each(
function(i){
var comment_id = $(this).attr('id').replace('comment-','');
- var delete_url = $.i18n._('/') + objectType + 's/' + post_id + '/'
+ var delete_url = scriptUrl + objectType + 's/' + post_id + '/'
+ $.i18n._('comments/') + comment_id + '/' + $.i18n._('delete/');
var html = $(this).html();
var CommentsClass;
@@ -615,12 +615,12 @@ function createComments(type) {
delete_icon.click(function(){CommentsClass.deleteComment($(this),comment_id,delete_url);});
delete_icon.unbind('mouseover').bind('mouseover',
function(){
- $(this).attr('src',$.i18n._('/') + 'content/images/close-small-hover.png');
+ $(this).attr('src',scriptUrl + 'content/images/close-small-hover.png');
}
);
delete_icon.unbind('mouseout').bind('mouseout',
function(){
- $(this).attr('src',$.i18n._('/') + 'content/images/close-small.png');
+ $(this).attr('src',scriptUrl + 'content/images/close-small.png');
}
);
}
@@ -670,12 +670,178 @@ function createComments(type) {
};
}
+function pickedTags(){
+
+ var sendAjax = function(tagname, reason, action, callback){
+ url = scriptUrl;
+ if (action == 'add'){
+ url += $.i18n._('mark-tag/');
+ if (reason == 'good'){
+ url += $.i18n._('interesting/');
+ }
+ else {
+ url += $.i18n._('ignored/');
+ }
+ }
+ else {
+ url += $.i18n._('unmark-tag/');
+ }
+ url = url + tagname + '/';
+
+ call_settings = {
+ type:'POST',
+ url:url
+ }
+ if (callback != false){
+ call_settings['success'] = callback;
+ }
+ $.ajax(call_settings);
+ }
+
+
+ var unpickTag = function(from_target ,tagname, reason, send_ajax){
+ //send ajax request to delete tag
+ var deleteTagLocally = function(){
+ from_target[tagname].remove();
+ delete from_target[tagname];
+ }
+ if (send_ajax){
+ sendAjax(tagname,reason,'remove',deleteTagLocally);
+ }
+ else {
+ deleteTagLocally();
+ }
+
+ }
+
+ var setupTagDeleteEvents = function(obj,tag_store,tagname,reason,send_ajax){
+ obj.unbind('mouseover').bind('mouseover', function(){
+ $(this).attr('src', scriptUrl + 'content/images/close-small-hover.png');
+ });
+ obj.unbind('mouseout').bind('mouseout', function(){
+ $(this).attr('src', scriptUrl + 'content/images/close-small-dark.png');
+ });
+ obj.click( function(){
+ unpickTag(tag_store,tagname,reason,send_ajax);
+ });
+ }
+
+ var handlePickedTag = function(obj,reason){
+ var tagname = $.trim($(obj).prev().attr('value'));
+ to_target = interestingTags;
+ from_target = ignoredTags;
+ if (reason == 'bad'){
+ to_target = ignoredTags;
+ from_target = interestingTags;
+ to_tag_container = $('div .tags.ignored');
+ }
+ else if (reason != 'good'){
+ return;
+ }
+ else {
+ to_tag_container = $('div .tags.interesting');
+ }
+
+ if (tagname in from_target){
+ unpickTag(from_target,tagname,reason,false);
+ }
+
+ if (!(tagname in to_target)){
+ //send ajax request to pick this tag
+
+ sendAjax(tagname,reason,'add',function(){
+ new_tag = $('<span></span>');
+ new_tag.addClass('deletable-tag');
+ tag_link = $('<a></a>');
+ tag_link.attr('rel','tag');
+ tag_link.attr('href', scriptUrl + $.i18n._('tags/') + tagname);
+ tag_link.html(tagname);
+ del_link = $('<img></img>');
+ del_link.addClass('delete-icon');
+ del_link.attr('src', scriptUrl + 'content/images/close-small-dark.png');
+
+ setupTagDeleteEvents(del_link, to_target, tagname, reason, true);
+
+ new_tag.append(tag_link);
+ new_tag.append(del_link);
+ to_tag_container.append(new_tag);
+
+ to_target[tagname] = new_tag;
+ });
+ }
+ }
+
+ var collectPickedTags = function(){
+ var good_prefix = 'interesting-tag-';
+ var bad_prefix = 'ignored-tag-';
+ var good_re = RegExp('^' + good_prefix);
+ var bad_re = RegExp('^' + bad_prefix);
+ interestingTags = {};
+ ignoredTags = {};
+ $('.deletable-tag').each(
+ function(i,item){
+ item_id = $(item).attr('id')
+ if (good_re.test(item_id)){
+ tag_name = item_id.replace(good_prefix,'');
+ tag_store = interestingTags;
+ reason = 'good';
+ }
+ else if (bad_re.test(item_id)){
+ tag_name = item_id.replace(bad_prefix,'');
+ tag_store = ignoredTags;
+ reason = 'bad';
+ }
+ else {
+ return;
+ }
+ tag_store[tag_name] = $(item);
+ setupTagDeleteEvents($(item).find('img'),tag_store,tag_name,reason,true)
+ }
+ );
+ }
+
+ var setupHideIgnoredQuestionsControl = function(){
+ $('#hideIgnoredTagsCb').unbind('click').click(function(){
+ $.ajax({
+ type: 'POST',
+ dataType: 'json',
+ cache: false,
+ url: scriptUrl + $.i18n._('command/'),
+ data: {command:'toggle-ignored-questions'}
+ });
+ });
+ }
+ return {
+ init: function(){
+ collectPickedTags();
+ setupHideIgnoredQuestionsControl();
+ $("#interestingTagInput, #ignoredTagInput").autocomplete(tags, {
+ minChars: 1,
+ matchContains: true,
+ max: 20,
+ multiple: true,
+ multipleSeparator: " ",
+ formatItem: function(row, i, max) {
+ return row.n + " ("+ row.c +")";
+ },
+ formatResult: function(row, i, max){
+ return row.n;
+ }
+
+ });
+ $("#interestingTagAdd").click(function(){handlePickedTag(this,'good')});
+ $("#ignoredTagAdd").click(function(){handlePickedTag(this,'bad')});
+ }
+ };
+}
+
var questionComments = createComments('question');
var answerComments = createComments('answer');
$().ready(function() {
questionComments.init();
answerComments.init();
+ pickedTags().init();
});
var commentsFactory = {'question' : questionComments, 'answer' : answerComments};
diff --git a/templates/content/js/com.cnprog.utils.js b/templates/content/js/com.cnprog.utils.js
index cf27c8a1..b19b6773 100644
--- a/templates/content/js/com.cnprog.utils.js
+++ b/templates/content/js/com.cnprog.utils.js
@@ -36,7 +36,7 @@ var notify = function() {
function appendLoader(containerSelector) {
$(containerSelector).append('<img class="ajax-loader" '
- +'src="' + $.i18n._('/') + 'content/images/indicator.gif" title="'
+ +'src="' + scriptUrl + 'content/images/indicator.gif" title="'
+$.i18n._('loading...')
+'" alt="'
+$.i18n._('loading...')
diff --git a/templates/content/js/compress.bat b/templates/content/js/compress.bat
index 41e1882a..5b2673cf 100644
--- a/templates/content/js/compress.bat
+++ b/templates/content/js/compress.bat
@@ -2,5 +2,4 @@
#java -jar yuicompressor-2.4.2.jar --type js --charset utf-8 wmd\showdown.js -o wmd\showdown-min.js
#java -jar yuicompressor-2.4.2.jar --type js --charset utf-8 com.cnprog.post.js -o com.cnprog.post.pack.js
java -jar yuicompressor-2.4.2.jar --type js --charset utf-8 se_hilite_src.js -o se_hilite.js
-
-pause \ No newline at end of file
+pause
diff --git a/templates/content/js/flot-build.bat b/templates/content/js/flot-build.bat
index fc715e3a..f9f32cb7 100644
--- a/templates/content/js/flot-build.bat
+++ b/templates/content/js/flot-build.bat
@@ -1,3 +1,3 @@
java -jar yuicompressor-2.4.2.jar --type js --charset utf-8 jquery.flot.js -o jquery.flot.pack.js
-pause \ No newline at end of file
+pause
diff --git a/templates/content/style/style.css b/templates/content/style/style.css
index 4038e8a1..47b4dc00 100644
--- a/templates/content/style/style.css
+++ b/templates/content/style/style.css
@@ -162,7 +162,7 @@ blockquote
border-right:1px solid #b4b48e;
border-bottom:1px solid #b4b48e;*/
background: white;/* #f9f7ed;*/
- margin:10px 0 10px 0;
+ /*margin:10px 0 10px 0;*/
/*background:url(../images/quest-bg.gif) repeat-x top;*/
}
#listA .qstA thumb {float:left; }
@@ -204,7 +204,14 @@ blockquote
/*border-bottom:1px solid #888a85;*/
}
.evenMore {font-size:14px; font-weight:800;}
-.questions-count{font-size:32px;font-family:sans-serif;font-weight:600;padding:0 0 5px 7px;color:#a40000;}
+.questions-count{
+ font-size:32px;
+ font-family:sans-serif;
+ font-weight:600;
+ padding:0 0 5px 0px;
+ color:#a40000;
+ margin-top:3px;
+}
/*内容块*/
.boxA {background:#888a85; padding:6px; margin-bottom:8px;border 1px solid #babdb6;}
@@ -216,7 +223,7 @@ blockquote
.boxB .body {border:1px solid #aaaaaa; padding:8px; background:#FFF; font-size:13px; line-height:160%;}
.boxB .more {padding:1px; text-align:right; font-weight:800;}
.boxC {
- background:#babdb6;/*f9f7ed;*/
+ background: #cacdc6;/*f9f7ed;*/
padding:10px;
margin-bottom:8px;
border-top:1px solid #eeeeec;
@@ -224,6 +231,12 @@ blockquote
border-right:1px solid #a9aca5;
border-bottom:1px solid #babdb6;
}
+.boxC p {
+ margin-bottom:8px;
+}
+.boxC p.nomargin {
+ margin:0px;
+}
.boxC p.info-box-follow-up-links {
text-align:right;
margin:0;
@@ -308,12 +321,14 @@ blockquote
/*标签*/
.tag {font-size:13px; font-weight:normal; color:#333; text-decoration:none;background-color:#EEE; border-left:3px solid #777; border-top:1px solid #EEE; border-bottom:1px solid #CCC; border-right:1px solid #CCC; padding:1px 8px 1px 8px;}
.tags {font-family:sans-serif; line-height:200%; display:block; margin-top:5px;}
-.tags a {font-size:13px; font-weight:normal; color:#333; text-decoration:none;background-color:#EEE; border-left:3px solid #777; border-top:1px solid #EEE; border-bottom:1px solid #CCC; border-right:1px solid #CCC; padding:1px 8px 1px 8px;}
+.tags a {white-space: nowrap; font-size:13px; font-weight:normal; color:#333; text-decoration:none;background-color:#EEE; border-left:3px solid #777; border-top:1px solid #EEE; border-bottom:1px solid #CCC; border-right:1px solid #CCC; padding:1px 8px 1px 8px;}
.tags a:hover {background-color:#fFF;color:#333;}
.tagsbox {line-height:200%;}
.tagsbox a {font-size:13px; font-weight:normal; color:#333; text-decoration:none;background-color:#EEE; border-left:3px solid #777; border-top:1px solid #EEE; border-bottom:1px solid #CCC; border-right:1px solid #CCC; padding:1px 8px 1px 8px;}
.tagsbox a:hover {background-color:#fFF;color:#333;}
.tag-number {font-weight:700;font-family:sans-serif;}
+.marked-tags { margin-top: 0px;margin-bottom: 5px; }
+.deletable-tag { margin-right: 3px; white-space:nowrap; }
/*奖牌*/
a.medal { font-size:14px; line-height:250%; font-weight:800; color:#333; text-decoration:none; background:url(../images/medala.gif) no-repeat; border-left:1px solid #EEE; border-top:1px solid #EEE; border-bottom:1px solid #CCC; border-right:1px solid #CCC; padding:4px 12px 4px 6px;}
@@ -1422,3 +1437,12 @@ ul.form-horizontal-rows li input {
text-align:center;
font-weight:bold;
}
+#tagSelector {
+ padding-bottom: 2px;
+}
+#hideIgnoredTagsControl {
+ margin: 5px 0 0 0;
+}
+#hideIgnoredTagsCb {
+ margin: 0 2px 0 1px;
+}
diff --git a/templates/index.html b/templates/index.html
index 470612b4..68a13197 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -10,13 +10,15 @@
<meta name="description" content="{{ settings.APP_DESCRIPTION }}" />{% endblock %}
{% block forejs %}
<script type="text/javascript">
- $().ready(function(){
- var tab_id = "{{ tab_id }}";
- $("#"+tab_id).attr('className',"on");
- $("#nav_questions").attr('className',"on");
- });
-
- </script>
+ var tags = {{ tags_autocomplete|safe }};
+ $().ready(function(){
+ var tab_id = "{{ tab_id }}";
+ $("#"+tab_id).attr('className',"on");
+ $("#nav_questions").attr('className',"on");
+ });
+ </script>
+ <script type='text/javascript' src='{% href "/content/js/com.cnprog.editor.js" %}'></script>
+ <script type='text/javascript' src='{% href "/content/js/com.cnprog.post.js" %}'></script>
{% endblock %}
{% block content %}
<div class="tabBar">
@@ -118,6 +120,8 @@
<div class="more"><a href="{% url faq %}">{% trans "faq" %} »</a></div>
</div>
</div>
+{% else %}
+{% include "tag_selector.html" %}
{% endif %}
<div class="boxC">
<h3>{% trans "Recent tags" %}</h3>
diff --git a/templates/questions.html b/templates/questions.html
index 47bda129..63026dc3 100644
--- a/templates/questions.html
+++ b/templates/questions.html
@@ -8,16 +8,19 @@
{% block title %}{% spaceless %}{% trans "Questions" %}{% endspaceless %}{% endblock %}
{% block forejs %}
<script type="text/javascript">
- $().ready(function(){
- var tab_id = "{{ tab_id }}";
- $("#"+tab_id).attr('className',"on");
- $("#nav_questions").attr('className',"on");
- Hilite.exact = false;
- Hilite.elementid = "listA";
- Hilite.debug_referrer = location.href;
- });
-
- </script>
+ var tags = {{ tags_autocomplete|safe }};
+ $().ready(function(){
+ var tab_id = "{{ tab_id }}";
+ $("#"+tab_id).attr('className',"on");
+ var on_tab = {% if is_unanswered %}'#nav_unanswered'{% else %}'#nav_questions'{% endif %};
+ $(on_tab).attr('className','on');
+ Hilite.exact = false;
+ Hilite.elementid = "listA";
+ Hilite.debug_referrer = location.href;
+ });
+ </script>
+ <script type='text/javascript' src='{% href "/content/js/com.cnprog.editor.js" %}'></script>
+ <script type='text/javascript' src='{% href "/content/js/com.cnprog.post.js" %}'></script>
{% endblock %}
{% block content %}
<div class="tabBar">
@@ -32,7 +35,11 @@
{% trans "Found by title" %}
{% endif %}
{% else %}
- {% trans "All questions" %}
+ {% if is_unanswered %}
+ {% trans "Unanswered questions" %}
+ {% else %}
+ {% trans "All questions" %}
+ {% endif %}
{% endif %}
{% endif %}
</div>
@@ -45,7 +52,17 @@
</div>
<div id="listA">
{% for question in questions.object_list %}
- <div class="qstA">
+ <div class="qstA"
+ {% if request.user.is_authenticated %}
+ {% if question.interesting_score > 0 %}
+ style="background:#ffff99;"
+ {% else %}
+ {% if question.ignored_score > 0 %}
+ style="background:#f3f3f3;"
+ {% endif %}
+ {% endif %}
+ {% endif %}
+ >
<h2>
<a href="{{ question.get_absolute_url }}">{{ question.get_question_title }}</a>
</h2>
@@ -134,25 +151,18 @@
{% endblock %}
{% block tail %}
-
- <div class="pager">
- {% cnprog_paginator context %}
-
- </div>
- <div class="pagesize">
- {% cnprog_pagesize context %}
- </div>
-
+ <div class="pager">{% cnprog_paginator context %}</div>
+ <div class="pagesize">{% cnprog_pagesize context %}</div>
{% endblock %}
{% block sidebar %}
<div class="boxC">
{% if searchtag %}
- {% blocktrans count questions_count as cnt with questions_count|intcomma as q_num and searchtag as tagname %}
- have total {{q_num}} questions tagged {{tagname}}
- {% plural %}
- have total {{q_num}} questions tagged {{tagname}}
- {% endblocktrans %}
+ {% blocktrans count questions_count as cnt with questions_count|intcomma as q_num and searchtag as tagname %}
+ have total {{q_num}} questions tagged {{tagname}}
+ {% plural %}
+ have total {{q_num}} questions tagged {{tagname}}
+ {% endblocktrans %}
{% else %}
{% if searchtitle %}
{% if settings.USE_SPHINX_SEARCH %}
@@ -169,14 +179,22 @@
{% endblocktrans %}
{% endif %}
{% else %}
- {% blocktrans count questions as cnt with questions_count|intcomma as q_num %}
- have total {{q_num}} questions
- {% plural %}
- have total {{q_num}} questions
- {% endblocktrans %}
+ {% if is_unanswered %}
+ {% blocktrans count questions as cnt with questions_count|intcomma as q_num %}
+ have total {{q_num}} unanswered questions
+ {% plural %}
+ have total {{q_num}} unanswered questions
+ {% endblocktrans %}
+ {% else %}
+ {% blocktrans count questions as cnt with questions_count|intcomma as q_num %}
+ have total {{q_num}} questions
+ {% plural %}
+ have total {{q_num}} questions
+ {% endblocktrans %}
+ {% endif %}
{% endif %}
{% endif %}
- <p>
+ <p class="nomargin">
{% ifequal tab_id "latest" %}
{% trans "latest questions info" %}
{% endifequal %}
@@ -197,15 +215,17 @@
{% endifequal %}
</p>
</div>
+{% if request.user.is_authenticated %}
+{% include "tag_selector.html" %}
+{% endif %}
<div class="boxC">
<h3 class="subtitle">{% trans "Related tags" %}</h3>
<div class="tags">
{% for tag in tags %}
- <a rel="tag" title="{% trans "see questions tagged" %}'{{ tag.name }}'{% trans "using tags" %}" href="{% url forum.views.tag tag.name|urlencode %}">{{ tag.name }}</a>
+ <a rel="tag" title="{% blocktrans with tag.name as tag_name %}see questions tagged '{{ tag_name }}'{% endblocktrans %}" href="{% url forum.views.tag tag.name|urlencode %}">{{ tag.name }}</a>
<span class="tag-number">&#215; {{ tag.used_count|intcomma }}</span>
<br />
{% endfor %}
- <br />
</div>
</div>
diff --git a/templates/tag_selector.html b/templates/tag_selector.html
new file mode 100644
index 00000000..6edc5cc8
--- /dev/null
+++ b/templates/tag_selector.html
@@ -0,0 +1,42 @@
+{% load i18n %}
+{% load extra_tags %}
+<div id="tagSelector" class="boxC">
+ <h3 class="subtitle">{% trans "Interesting tags" %}</h3>
+ <div class="tags interesting marked-tags">
+ {% for tag_name in interesting_tag_names %}
+ {% spaceless %}
+ <span class="deletable-tag" id="interesting-tag-{{tag_name}}">
+ <a rel="tag"
+ title="{% blocktrans with tag as tagname %}see questions tagged '{{ tag_name }}'{% endblocktrans %}"
+ href="{% url tag_questions tag_name|urlencode %}">{{tag_name}}</a>
+ <img class="delete-icon"
+ src="{% href "/content/images/close-small-dark.png" %}"
+ title="{% blocktrans %}remove '{{tag_name}}' from the list of interesting tags{% endblocktrans %}"/>
+ </span>
+ {% endspaceless %}
+ {% endfor %}
+ </div>
+ <input id="interestingTagInput" autocomplete="off" type="text"/>
+ <input id="interestingTagAdd" type="submit" value="{% trans "Add" %}"/>
+ <h3 class="subtitle">{% trans "Ignored tags" %}</h3>
+ <div class="tags ignored marked-tags">
+ {% for tag_name in ignored_tag_names %}
+ {% spaceless %}
+ <span class="deletable-tag" id="ignored-tag-{{tag_name}}">
+ <a rel="tag"
+ title="{% blocktrans with tag as tagname %}see questions tagged '{{ tag_name }}'{% endblocktrans %}"
+ href="{% url tag_questions tag_name|urlencode %}">{{tag_name}}</a>
+ <img class="delete-icon"
+ src="{% href "/content/images/close-small-dark.png" %}"
+ title="{% blocktrans %}remove '{{tag_name}}' from the list of ignored tags{% endblocktrans %}"/>
+ </span>
+ {% endspaceless %}
+ {% endfor %}
+ </div>
+ <input id="ignoredTagInput" autocomplete="off" type="text"/>
+ <input id="ignoredTagAdd" type="submit" value="{% trans "Add" %}"/>
+ <p id="hideIgnoredTagsControl">
+ <input id="hideIgnoredTagsCb" type="checkbox" {% if request.user.hide_ignored_questions %}checked="checked"{% endif %} />
+ <label id="hideIgnoredTagsLabel" for="hideIgnoredTags">{% trans "keep ingored questions hidden" %}</label>
+ <p>
+</div>
diff --git a/templates/user_email_subscriptions.html b/templates/user_email_subscriptions.html
index 8f27bd2a..c0204cbc 100644
--- a/templates/user_email_subscriptions.html
+++ b/templates/user_email_subscriptions.html
@@ -13,6 +13,9 @@
{% endif %}
<form method="POST">
{% include "edit_user_email_feeds_form.html" %}
+ <table class='form-as-table'>
+ {{tag_filter_selection_form}}
+ </table>
<div class="submit-row text-align-right">
<input type="submit" class="submit" name="save" value="{% trans "Update" %}"/>
<input type="submit" class="submit" name="stop_email" value="{% trans "Stop sending email" %}"/>
diff --git a/templates/user_stats.html b/templates/user_stats.html
index 06f1cd2b..ecc39807 100644
--- a/templates/user_stats.html
+++ b/templates/user_stats.html
@@ -97,7 +97,7 @@
<td width="180" valign="top">
{% for tag in user_tags%}
<a rel="tag"
- title="{% blocktrans with tag.name as tag_name %}see other questions tagged '{{ tag_name }}' {% endblocktrans %}"
+ title="{% blocktrans with tag.name as tag_name %}see other questions with {{view_user}}'s contributions tagged '{{ tag_name }}' {% endblocktrans %}"
href="{% url forum.views.tag tag|urlencode %}?user={{view_user.username}}">{{tag.name}}</a>
<span class="tag-number">&#215; {{ tag.user_tag_usage_count|intcomma }}</span><br/>
{% if forloop.counter|divisibleby:"10" %}