Cari Blog Ini

2013-01-13

Reply Button Thesis For Blogger V2

Pada Thesis For Blogspot Basic fungsi reply button dan threaded comment tidak berfungsi dengan sempurna. Untuk mengaktifkan fungsi threaded comment tersebut, dapat dilakukan sedikit modifikasi pada fungsi threaded comment dan javascriptnya.

Saya akan mencoba untuk menerapkan threaded commenting pada TFBV2

Cara yang Saya gunakan adalah:

Langkah 1

Ubah code:

<b:include data='post' name='comments'/>


note: ada 4 code <b:include data='post' name='comments'/> dalam template TFBV2 dan semuanya saya ubah

menjadi:

<b:if cond='data:post.showThreadedComments'>
<b:include data='post' name='threaded_comments'/>
<b:else/>
<b:include data='post' name='comments'/>
</b:if>


Langkah 2
Saya ganti code javascript threaded comment menjadi:

<b:includable id='threaded_comment_js' var='post'>
  <script defer='defer' expr:src='data:post.commentSrc' type='text/javascript'/>
  <script type='text/javascript'>

    (function() {

      var items = <data:post.commentJso/>;

      var msgs = <data:post.commentMsgs/>;

      var config = <data:post.commentConfig/>;

// <![CDATA[

      var cursor = null;

      if (items && items.length > 0) {cursor = parseInt(items[items.length - 1].timestamp) + 1;}

      var bodyFromEntry = function(entry) {

        if (entry.gd$extendedProperty) {

          for (var k in entry.gd$extendedProperty) {

            if (entry.gd$extendedProperty[k].name == 'blogger.contentRemoved') {

              return '<span>' + entry.content.$t + '</span>';

            }

          }

        }

        return entry.content.$t;

      }



      var parse = function(data) {

        cursor = null;

        var comments = [];

        if (data && data.feed && data.feed.entry) {

          for (var i = 0, entry; entry = data.feed.entry[i]; i++) {

            var comment = {};

            // comment ID, parsed out of the original id format

            var id = /blog-(\d+).post-(\d+)/.exec(entry.id.$t);

            comment.id = id ? id[2] : null;

            comment.body = bodyFromEntry(entry);

            comment.timestamp = Date.parse(entry.published.$t) + '';

            if (entry.author && entry.author.constructor === Array) {

              var auth = entry.author[0];

              if (auth) {

                comment.author = {

                  name: (auth.name ? auth.name.$t : undefined),

                  profileUrl: (auth.uri ? auth.uri.$t : undefined),

                  avatarUrl: (auth.gd$image ? auth.gd$image.src : undefined)

                };

              }

            }

            if (entry.link) {

              if (entry.link[2]) {

                comment.link = comment.permalink = entry.link[2].href;

              }

              if (entry.link[3]) {

                var pid = /.*comments\/default\/(\d+)\?.*/.exec(entry.link[3].href);

                if (pid && pid[1]) {

                  comment.parentId = pid[1];

                }

              }

            }

            comment.deleteclass = 'item-control blog-admin';

            if (entry.gd$extendedProperty) {

              for (var k in entry.gd$extendedProperty) {

                if (entry.gd$extendedProperty[k].name == 'blogger.itemClass') {

                  comment.deleteclass += ' ' + entry.gd$extendedProperty[k].value;

                }

              }

            }

            comments.push(comment);

          }

        }

        return comments;

      };



      var paginator = function(callback) {

        if (hasMore()) {

          var url = config.feed + '?alt=json&v=2&orderby=published&reverse=false&max-results=50';

          if (cursor) {

            url += '&published-min=' + new Date(cursor).toISOString();

          }

          window.bloggercomments = function(data) {

            var parsed = parse(data);

            cursor = parsed.length < 50 ? null

                : parseInt(parsed[parsed.length - 1].timestamp) + 1

            callback(parsed);

            window.bloggercomments = null;

          }

          url += '&callback=bloggercomments';

          var script = document.createElement('script');

          script.type = 'text/javascript';

          script.src = url;

          document.getElementsByTagName('head')[0].appendChild(script);

        }

      };

      var hasMore = function() {

        return !!cursor;

      };

      var getMeta = function(key, comment) {

        if ('iswriter' == key) {

          var matches = !!comment.author

              && comment.author.name == config.authorName

              && comment.author.profileUrl == config.authorUrl;

          return matches ? 'true' : '';

        } else if ('deletelink' == key) {

          return config.baseUri + '/delete-comment.g?blogID='

               + config.blogId + '&postID=' + comment.id;

        } else if ('deleteclass' == key) {

          return comment.deleteclass;

        }

        return '';

      };



      var replybox = null;

      var replyUrlParts = null;

      var replyParent = undefined;



      var onReply = function(commentId, domId) {

        if (replybox == null) {

          // lazily cache replybox, and adjust to suit this style:

          replybox = document.getElementById('comment-editor');

          if (replybox != null) {

            replybox.height = '250px';

            replybox.style.display = 'block';

            replyUrlParts = replybox.src.split('#');

          }

        }

        if (replybox && (commentId !== replyParent)) {

          document.getElementById(domId).insertBefore(replybox, null);

          replybox.src = replyUrlParts[0]

              + (commentId ? '&parentID=' + commentId : '')

              + '#' + replyUrlParts[1];

          replyParent = commentId;

        }

      };



      var hash = (window.location.hash || '#').substring(1);

      var startThread, targetComment;

      if (/^comment-form_/.test(hash)) {

        startThread = hash.substring('comment-form_'.length);

      } else if (/^c[0-9]+$/.test(hash)) {

        targetComment = hash.substring(1);

      }



      // Configure commenting API:

      var configJso = {

        'maxDepth': config.maxThreadDepth

      };

      var provider = {

        'id': config.postId,

        'data': items,

        'loadNext': paginator,

        'hasMore': hasMore,

        'getMeta': getMeta,

        'onReply': onReply,

        'rendered': true,

        'initComment': targetComment,

        'initReplyThread': startThread,

        'config': configJso,

        'messages': msgs

      };



      var render = function() {

        if (window.goog && window.goog.comments) {

          var holder = document.getElementById('comment-holder');

          window.goog.comments.render(holder, provider);

        }

      };



      // render now, or queue to render when library loads:

      if (window.goog && window.goog.comments) {

        render();

      } else {

        window.goog = window.goog || {};

        window.goog.comments = window.goog.comments || {};

        window.goog.comments.loadQueue = window.goog.comments.loadQueue || [];

        window.goog.comments.loadQueue.push(render);

      }

    })();

// ]]>

  </script>
</b:includable>

Tidak ada komentar:

Posting Komentar

Popular Posts