/* * Copyright (c) 2009, 2010, 2011, 2012, B3log Team * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @fileoverview timeline js. * * @author Liyuan Li * @version 1.0.1.0, Jan 30, 2013 */ var timeline = { _COLHA: 0, _COLHB: 20, _initArticleList: function () { var $articles = $(".articles"); if ($articles.length === 0 || $(".articles > .fn-clear").length > 0) { return; } $(window).resize(function () { var colH = [timeline._COLHA, timeline._COLHB]; $articles.find("article").each(function () { var $it = $(this), isLeft = colH[1] > colH[0], top = isLeft ? colH[0] : colH[1]; if (!$it.hasClass("r") && !$it.hasClass("l")) { $it.css({ "top": top + "px", "position": "absolute" }); if (isLeft) { this.className = "l"; } else { this.className = "r"; } } colH[( isLeft ? '0' : '1' )] += parseInt($it.outerHeight(true)); }); $articles.height(colH[0] > colH[1] ? colH[0] : colH[1]); }); setTimeout(function () { $(window).resize(); }, 500); }, _initIndexList: function () { var $archives = $(".articles > .fn-clear"); if ($archives.length === 0) { return; } // 如果为 index 页面,重构 archives 结构,使其可收缩 var year = 0; $(".nav-abs li").each(function (i) { var $this = $(this); $this.hide(); if (year !== $this.data("year")) { year = $this.data("year"); $this.before("
  • " + year + "
  • "); } }); // 首次加载时,当没有下一页时,使用 js 隐藏"更多"按钮 if ($(".article-more").parent().data("count") <= $(".article-more").parent().find("article").length) { $(".article-more").remove(); } $(window).resize(function () { $archives.each(function () { var colH = [timeline._COLHA + 60, timeline._COLHB * 4]; var $articles = $(this).find("article"); if ($articles.length === 0) { $(this).find("h2").remove(); $(this).css("margin-bottom" , 0); } else { $articles.each(function () { var $it = $(this), isLeft = colH[1] > colH[0], top = isLeft ? colH[0] : colH[1]; if (!$it.hasClass("r") && !$it.hasClass("l")) { $it.css({ "top": top + "px", "position": "absolute" }); if (isLeft) { this.className = "l"; } else { this.className = "r"; } } colH[( isLeft ? '0' : '1' )] += parseInt($it.outerHeight(true)); }); $(this).height(colH[0] > colH[1] ? colH[0] : colH[1]); } }); }); setTimeout(function () { $(window).resize(); }, 500); }, _setNavCurrent: function () { $(".header li a").each(function () { if($(this).prop("href") === location.href.split("#")[0]) { this.className = "current"; } else { this.className = ""; } }) }, init: function () { $(window).scroll(function () { if ($(window).scrollTop() > 60) { $(".ico-top").show(); } else { $(".ico-top").hide(); } }); timeline._initIndexList(); timeline._initArticleList(); timeline._setNavCurrent(); }, translate: function () { window.open("http://translate.google.com/translate?sl=auto&tl=auto&u=" + location.href); }, getArchive: function (year, month, monthName) { var archiveDate = year + month, archive = year + "/" + month; window.location.hash = "#" + archiveDate; if ($("#" + archiveDate + " > article").length === 0) { var archiveDataTitle = year + " " + Label.yearLabel + " " + month + " " + Label.monthLabel; if (Label.localeString.substring(0, 2) === "en") { archiveDataTitle = monthName + " " + year; } var archiveHTML = '

    ' + archiveDataTitle + '

    ' + '
    ' + Label.moreLabel + '
    '; $("#" + archiveDate).html(archiveHTML).css("margin-bottom", "50px"); timeline.getNextPage($("#" + archiveDate).find(".article-more")[0], archive); } }, getNextPage: function (it, archive) { var $more = $(it), currentPage = $more.data("page") + 1, path = "/articles/"; if($("#tag").length === 1) { var pathnames = location.pathname.split("/"); path = "/articles/tags/" + pathnames[pathnames.length - 1] + "/"; } else if ($("#author").length === 1) { var pathnames = location.pathname.split("/"); path = "/articles/authors/" + pathnames[pathnames.length - 1] + "/"; } else if (archive) { path = "/articles/archives/" + archive + "/"; } $.ajax({ url: latkeConfig.servePath + path + currentPage, type: "GET", beforeSend: function () { $more.css("background", "url(" + latkeConfig.staticServePath + "/skins/timeline/images/ajax-loader.gif) no-repeat scroll center center #60829F").text(""); }, success: function(result, textStatus){ if (!result.sc) { $more.css("background", "none #60829F").text("Error"); return; } if (result.rslts.articles.length === 0) { $more.remove(); return; } var articlesHTML = "", pagination = result.rslts.pagination; // append articles for (var i = 0; i < result.rslts.articles.length; i++) { var article = result.rslts.articles[i]; articlesHTML += '
    ' + '

    ' +article.articleTitle + ''; if (article.hasUpdated) { articlesHTML += '' + Label.updatedLabel + ''; } if (article.articlePutTop) { articlesHTML += '' + Label.topArticleLabel + ''; } articlesHTML += '

    ' + article.articleAbstract + '

    ' + ''; var articleTags = article.articleTags.split(","); for (var j = 0; j < articleTags.length; j++) { articlesHTML += '' + articleTags[j] + ''; if (j < articleTags.length - 1) { articlesHTML += ","; } } articlesHTML += ' ' + ' ' + (article.articleCommentCount === 0 ? Label.noCommentLabel : article.articleCommentCount) + ' ' + '' + article.articleViewCount + '
    '; } $more.before(articlesHTML).data("page", currentPage); // 最后一页处理 if (pagination.paginationPageCount <= currentPage) { $more.remove(); } else { $more.css("background", "none #60829F").text(Label.moreLabel); } setTimeout(function () { $(window).resize(); }, 500); } }); }, toggleArchives: function (it, year) { $(".nav-abs li").each(function (i) { var $it = $(this); if (!$it.hasClass("year")) { $it.hide(); if (year === $it.data("year") && $(it).hasClass("close")) { $it.show(); } } }); $(".nav-abs li.year").each(function () { if (parseInt($(this).text()) === year) { if ($(it).hasClass("close")) { it.className = "year open"; } else { it.className = "year close"; } } else { this.className = "year close"; } }); } }; (function () { Util.init(); Util.replaceSideEm($(".recent-comments-content")); Util.buildTags("tagsSide"); timeline.init(); })();