/b3log-solo-skins/ease/js/ease.js
JavaScript | 306 lines | 238 code | 40 blank | 28 comment | 44 complexity | 6910e52ef130b0a9aad930bd78841888 MD5 | raw file
Possible License(s): Apache-2.0, LGPL-2.1
- /*
- * 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 ease js.
- *
- * @author <a href="mailto:LLY219@gmail.com">Liyuan Li</a>
- * @version 1.0.0.9, May 28, 2012
- */
- var goTranslate = function () {
- window.open("http://translate.google.com/translate?sl=auto&tl=auto&u=" + location.href);
- };
- var getNextPage = function () {
- var $more = $(".article-next");
- currentPage += 1;
- var path = "/articles/";
- if(location.pathname.indexOf("tags") > -1) {
- var tagsPathnaem = location.pathname.split("/tags/");
- var tags = tagsPathnaem[1].split("/");
- path = "/articles/tags/" + tags[0] + "/";
- } else if (location.pathname.indexOf("archives") > -1) {
- var archivesPathname = location.pathname.split("/archives/");
- var archives = archivesPathname[1].split("/");
- path = "/articles/archives/" + archives[0] + "/" + archives[1] + "/";
- }
-
- $.ajax({
- url: latkeConfig.staticServePath + path + currentPage,
- type: "GET",
- beforeSend: function () {
- $more.css("background",
- "url(" + latkeConfig.staticServePath + "/skins/ease/images/ajax-loader.gif) no-repeat scroll center center #fefefe");
- },
- success: function(result, textStatus){
- if (!result.sc) {
- 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 += '<li class="article">' +
- '<div class="article-title">' +
- '<h2>' +
- '<a rel="bookmark" class="ft-gray" href="' + latkeConfig.servePath + article.articlePermalink + '">' +
- article.articleTitle +
- '</a>';
- if (article.hasUpdated) {
- articlesHTML += '<sup>' + Label.updatedLabel + '</sup>';
- }
-
- if (article.articlePutTop) {
- articlesHTML += '<sup>' + Label.topArticleLabel + '</sup>';
- }
-
- articlesHTML += '</h2>' +
- '<div class="right">' +
- '<a rel="nofollow" class="ft-gray" href="' + latkeConfig.servePath + article.articlePermalink + '#comments">' +
- + article.articleCommentCount + ' ' + Label.commentLabel +
- '</a> ' +
- '<a rel="nofollow" class="ft-gray" href="' + latkeConfig.servePath + article.articlePermalink + '">' +
- article.articleViewCount + ' ' + Label.viewLabel +
- '</a>' +
- '</div>' +
- '<div class="clear"></div>' +
- '</div>' +
- '<div class="article-body">' +
- '<div id="abstract' + article.oId + '">' +
- article.articleAbstract +
- '</div>' +
- '<div id="content' + article.oId + '" class="none"></div>' +
- '</div>' +
- '<div class="article-info">' +
- '<div class="right ft-gray">';
- if (article.hasUpdated) {
- articlesHTML += Util.toDate(article.articleUpdateDate, 'yy-MM-dd HH:mm');
- } else {
- articlesHTML += Util.toDate(article.articleCreateDate, 'yy-MM-dd HH:mm');
- }
-
- articlesHTML += ' <a href="' + latkeConfig.servePath + '/authors/' + article.authorId + '">' + article.authorName + '</a>' +
- '</div>' +
- '<div class="left ft-gray">' +
- Label.tag1Label + " ";
-
- var articleTags = article.articleTags.split(",");
- for (var j = 0; j < articleTags.length; j++) {
- articlesHTML += '<a rel="tag" href="' + latkeConfig.servePath + '/tags/' + encodeURIComponent(articleTags[j]) + '">' +
- articleTags[j] + '</a>';
-
- if (j < articleTags.length - 1) {
- articlesHTML += ", ";
- }
- }
-
- articlesHTML += '</div>' +
- '<div class="clear"></div>' +
- '</div>' +
- '</li>';
- }
-
- $(".body>ul").append(articlesHTML);
-
- // ??????
- if (pagination.paginationPageCount === currentPage) {
- $more.remove();
- } else {
- $more.css("background", "none");
- }
- }
- });
- };
- var ease = {
- $header: $(".header"),
- $banner: $(".header").find(".banner"),
- headerH: $(".header").height(),
- $body: $(".body"),
- $nav: $(".nav"),
- getCurrentPage: function () {
- var $next = $(".article-next");
- if ($next.length > 0) {
- window.currentPage = $next.data("page");
- }
- },
-
- setNavCurrent: function () {
- $(".nav ul a").each(function () {
- var $this = $(this);
- if ($this.attr("href") === latkeConfig.servePath + location.pathname) {
- $this.addClass("current");
- } else if (/\/[0-9]+$/.test(location.pathname)) {
- $(".nav ul li")[0].className = "current";
- }
- });
- },
-
- initCommon: function () {
- Util.init();
- Util.replaceSideEm($(".recent-comments-content"));
- Util.buildTags("tagsSide");
- this.$body.css("paddingTop", this.headerH + "px");
- },
-
- initArchives: function () {
- var $archives = $(".archives");
- if ($archives.length < 1) {
- return;
- }
-
- var years = [],
- $archiveList = $archives.find("span").each(function () {
- var year = $(this).data("year"),
- tag = true;
- for (var i = 0; i < years.length; i++) {
- if (year === years[i]) {
- tag = false;
- break;
- }
- }
- if (tag) {
- years.push(year);
- }
- });
-
- var yearsHTML = "";
- for (var j = 0; j < years.length; j++) {
- var monthsHTML = "";
- for (var l = 0; l < $archiveList.length; l++) {
- var $month = $($archiveList[l]);
- if ($month.data("year") === years[j]) {
- monthsHTML += $month.html();
- }
- }
-
- yearsHTML += "<div><h3 class='ft-gray'>" + years[j] + "</h3>" + monthsHTML + "</div>";
- }
-
- $archives.html(yearsHTML);
-
- // position
- var $items = $(".archives>div"),
- line = 0,
- top = 0,
- heights = [];
-
- for (var m = 0; m < $items.length; m++) {
- for (var n = 0; n < 3; n++) {
- if (m >= $items.length) {
- break;
- }
-
- $items[m].style.left = (n * 318) + "px";
-
- if (line > 0) {
- if ($items[m - 3].style.top !== "") {
- top = parseInt($items[m - 3].style.top);
- }
- $items[m].style.top = $($items[m - 3]).height() + 60 + top + "px";
-
- heights[n] = parseInt($items[m].style.top) + $($items[m]).height() + 60;
- } else {
- heights[n] = $($items[m]).height() + 60;
- }
-
- if (n < 2) {
- m += 1;
- }
- }
- line += 1;
- }
-
- // archive height
- $archives.height(heights.sort()[2]);
- },
-
- scrollEvent: function () {
- var _it = this;
- $(window).scroll(function () {
- var y = $(window).scrollTop();
-
- // header event
- if (y >= _it.headerH && _it.$banner.css("display") === "block" &&
- $("body").height() - $(window).height() > _it.headerH * 2) {
- _it.$header.css("top", "0");
- _it.$banner.css("display", "none");
- _it.$body.css("paddingTop", _it.$nav.height() + "px");
- }
-
- if (y < _it.headerH && _it.$banner.css("display") === "none") {
- _it.$header.css("top", "auto");
- _it.$banner.css("display", "block");
- _it.$body.css("paddingTop", _it.headerH + "px");
- }
-
- // go top icon show or hide
- if (y > _it.headerH) {
- var bodyH = $(window).height();
- var top = y + bodyH - 21;
- if ($("body").height() - 58 <= y + bodyH) {
- top = $(".footer").offset().top - 21;
- }
- $("#goTop").fadeIn("slow").css("top", top);
- } else {
- $("#goTop").hide();
- }
- });
- },
-
- setDynamic: function () {
- var $dynamic = $(".dynamic");
- if ($(".dynamic").length < 1) {
- return;
- }
-
- var $comments = $dynamic.find(".side-comments"),
- $tags = $dynamic.find(".side-tags"),
- $mostComment = $dynamic.find(".side-most-comment"),
- $mostView = $dynamic.find(".side-most-view");
-
- if ($comments.height() > $tags.height()) {
- $tags.height($comments.height());
- } else {
- $comments.height($tags.height());
- }
-
- if ($mostComment.height() > $mostView.height()) {
- $mostView.height($mostComment.height());
- } else {
- $mostComment.height($mostView.height());
- }
-
- // emotions
- $(".article-body").each(function () {
- this.innerHTML = Util.replaceEmString($(this).html());
- });
- }
- };
-
- (function () {
- ease.getCurrentPage();
- ease.initCommon();
- ease.scrollEvent();
- ease.setNavCurrent();
-
- ease.initArchives();
- ease.setDynamic();
- })();