既読エントリを見えなくする

最新版には不要です。

ソースを特に追ってなかった人がなんとなくやったことなのでどうもすみません。




jQuery は便利だなぁ。
selector で not(has(...)) するにはどうしたらいいのか分かりません!

diff --git a/root/static/js/remedie.js b/root/static/js/remedie.js
index 6eae944..480d0eb 100644
--- a/root/static/js/remedie.js
+++ b/root/static/js/remedie.js
@@ -652,6 +652,7 @@ Remedie.prototype = {
   markItemAsUnwatched: function(item) {
     // XXX should be 'downloaded' if it has local file
     this.updateStatus({ item_id: item.id, status: 'new' }, function() {
+      $('#channel-item-title-' + item.id).removeClass('channel-item-watched');
       $('#channel-item-title-' + item.id).addClass('channel-item-unwatched');
       remedie.items[item.id].is_unwatched = true;
     });
@@ -823,7 +824,9 @@ Remedie.prototype = {
                   '<span class="unwatched-count-' + channel.id + '">' + 
                   (channel.unwatched_count ? channel.unwatched_count : 0) + '</span> unwatched'
               ],
-              'p', { className: 'channel-header-description' }, channel.props.description
+              'p', { className: 'channel-header-description' }, channel.props.description,
+              'input', { type: 'checkbox', checked: false, id: 'togglewatched', name: 'togglewatched' }, '',
+              'span', {}, 'hide watched item'
             ],
             'div', { className: "clear" }, null
           ]
@@ -839,6 +842,8 @@ Remedie.prototype = {
           'div', { id: 'channel-items', className: "clear" }, null
         );
 
+        $("#togglewatched").click(function(){remedie.toggleWatchedItems()});
+
         $.each(r.items, function(index, item) {
           remedie.items[item.id] = item;
           $("#channel-items").createAppend(@@ -860,17 +865,19 @@ Remedie.prototype = {
                   ],
                ],
                'h3', { id: 'channel-item-title-' + item.id,
-                       className: item.is_unwatched ? 'channel-item-unwatched' : '' }, item.name,
+                       className: item.is_unwatched ? 'channel-item-unwatched' : 'channel-item-watched' }, item.name,
                'div', { className: 'item-infobox-description' }, item.props.description
              ],
              'div', { className: "clear" }, null
            ]
-         );
-
+          );
+          
          if (item.props.thumbnail)
            RemedieUtil.layoutImage($("#item-thumbnail-image-" + item.id), item.props.thumbnail.url, 128, 96);
        });
 
+        //$("#channel-items").sortable({items: '> div'});
+
        $(".channel-header")
         .contextMenu("channel-context-menu", {
           bindings: {
@@ -986,6 +993,10 @@ Remedie.prototype = {
       }
     });
   },
+  
+  toggleWatchedItems: function() {
+        $(".channel-item:has(.channel-item-watched)").toggle();
+  },
 
   manuallyRefreshChannel: function(channel, clearStaleItems) {
     $.blockUI();