初始版本
diff --git a/themes/bootstrap-blog/scripts/bs_paginator.js b/themes/bootstrap-blog/scripts/bs_paginator.js
new file mode 100644
index 0000000..472f450
--- /dev/null
+++ b/themes/bootstrap-blog/scripts/bs_paginator.js
@@ -0,0 +1,120 @@
+'use strict';
+
+function bsPaginatorHelper(options){
+  /* jshint validthis: true */
+  options = options || {};
+
+  var current = options.current || this.page.current || 0;
+  var total = options.total || this.page.total || 1;
+  var endSize = options.hasOwnProperty('end_size') ? +options.end_size : 1;
+  var midSize = options.hasOwnProperty('mid_size') ? +options.mid_size : 2;
+  var space = options.hasOwnProperty('space') ? options.space : '…';
+  var base = options.base || this.page.base || this.config.root || '';
+  var format = options.format || this.config.pagination_dir + '/%d/';
+  var prevText = options.prev_text || 'Prev';
+  var nextText = options.next_text || 'Next';
+  var prevNext = options.hasOwnProperty('prev_next') ? options.prev_next : true;
+  var transform = options.transform;
+  var self = this;
+  var result = '';
+  var i;
+
+  if (!current) return '';
+
+  var currentPage = '<li class="active"><span class="page-number">' +
+    (transform ? transform(current) : current) +
+    '</span></li>';
+
+  function link(i){
+    return self.url_for(i === 1 ? base : base + format.replace('%d', i));
+  }
+
+  function pageLink(i){
+    return '<li><a class="page-number" href="' + link(i) + '">' +
+      (transform ? transform(i) : i) +
+      '</a></li>';
+  }
+
+  // Display the link to the previous page
+  if (prevNext){
+    if (current > 1) {
+      result += '<li><a class="page-prev" rel="prev" ' +
+              'href="' + link(current - 1) + '">' + prevText + '</a></li>';
+    } else {
+      result += '<li class="disabled"><span class="page-prev">' + prevText + '</a></li>';
+    }
+  }
+
+  if (options.show_all){
+    // Display pages on the left side of the current page
+    for (i = 1; i < current; i++){
+      result += pageLink(i);
+    }
+
+    // Display the current page
+    result += currentPage;
+
+    // Display pages on the right side of the current page
+    for (i = current + 1; i <= total; i++){
+      result += pageLink(i);
+    }
+  } else {
+    // It's too complicated. May need refactor.
+    var leftEnd = current <= endSize ? current - 1 : endSize;
+    var rightEnd = total - current <= endSize ? current + 1 : total - endSize + 1;
+    var leftMid = current - midSize <= endSize ? current - midSize + endSize : current - midSize;
+    var rightMid = current + midSize + endSize > total ? current + midSize - endSize : current + midSize;
+    var spaceHtml = '<li class="disabled"><span class="page-space">' + space + '</span></li>';
+
+    // Display pages on the left edge
+    for (i = 1; i <= leftEnd; i++){
+      result += pageLink(i);
+    }
+
+    // Display spaces between edges and middle pages
+    if (space && current - endSize - midSize > 1){
+      result += spaceHtml;
+    }
+
+    // Display left middle pages
+    if (leftMid > leftEnd){
+      for (i = leftMid; i < current; i++){
+        result += pageLink(i);
+      }
+    }
+
+    // Display the current page
+    result += currentPage;
+
+    // Display right middle pages
+    if (rightMid < rightEnd){
+      for (i = current + 1; i <= rightMid; i++){
+        result += pageLink(i);
+      }
+    }
+
+    // Display spaces between edges and middle pages
+    if (space && total - endSize - midSize > current){
+      result += spaceHtml;
+    }
+
+    // Dispaly pages on the right edge
+    for (i = rightEnd; i <= total; i++){
+      result += pageLink(i);
+    }
+  }
+
+  // Display the link to the next page
+  if (prevNext){
+    if (current < total) {
+      result += '<li><a class="page-next" rel="next" ' +
+              'href="' + link(current + 1) + '">' + nextText + '</a></li>';
+    } else {
+      result += '<li class="disabled"><span class="page-next">' + nextText + '</a></li>';
+    }
+  }
+
+  return '<nav><ul class="pagination">' + result + '</ul></nav>';
+}
+
+hexo.extend.helper.register('bs_paginator', bsPaginatorHelper);