2011-04-04 58 views
0

所以我使用這個叫timeago的東西。對於那些不知道的人,可以在這裏找到。 http://timeago.yarp.com/真的很noobish javascript問題

這很酷,但我想添加單詞「發生」。如何在每個「前」短語的開頭添加「發生的」一詞? 因此,不要說「3分鐘前」,而是說「3分鐘前發生」。而不是「不到一分鐘前」,它會說「發生在不到一分鐘前」。

謝謝!

(function($) { 
    $.timeago = function(timestamp) { 
    if (timestamp instanceof Date) { 
     return inWords(timestamp); 
    } else if (typeof timestamp === "string") { 
     return inWords($.timeago.parse(timestamp)); 
    } else { 
     return inWords($.timeago.datetime(timestamp)); 
    } 
    }; 
    var $t = $.timeago; 

    $.extend($.timeago, { 
    settings: { 
     refreshMillis: 60000, 
     allowFuture: false, 
     strings: { 
     prefixAgo: null, 
     prefixFromNow: null, 
     suffixAgo: "ago", 
     suffixFromNow: "from now", 
     seconds: "less than a minute", 
     minute: "about a minute", 
     minutes: "%d minutes", 
     hour: "about an hour", 
     hours: "about %d hours", 
     day: "a day", 
     days: "%d days", 
     month: "about a month", 
     months: "%d months", 
     year: "about a year", 
     years: "%d years", 
     numbers: [] 
     } 
    }, 
    inWords: function(distanceMillis) { 
     var $l = this.settings.strings; 
     var prefix = $l.prefixAgo; 
     var suffix = $l.suffixAgo; 
     if (this.settings.allowFuture) { 
     if (distanceMillis < 0) { 
      prefix = $l.prefixFromNow; 
      suffix = $l.suffixFromNow; 
     } 
     distanceMillis = Math.abs(distanceMillis); 
     } 

     var seconds = distanceMillis/1000; 
     var minutes = seconds/60; 
     var hours = minutes/60; 
     var days = hours/24; 
     var years = days/365; 

     function substitute(stringOrFunction, number) { 
     var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction; 
     var value = ($l.numbers && $l.numbers[number]) || number; 
     return string.replace(/%d/i, value); 
     } 

     var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) || 
     seconds < 90 && substitute($l.minute, 1) || 
     minutes < 45 && substitute($l.minutes, Math.round(minutes)) || 
     minutes < 90 && substitute($l.hour, 1) || 
     hours < 24 && substitute($l.hours, Math.round(hours)) || 
     hours < 48 && substitute($l.day, 1) || 
     days < 30 && substitute($l.days, Math.floor(days)) || 
     days < 60 && substitute($l.month, 1) || 
     days < 365 && substitute($l.months, Math.floor(days/30)) || 
     years < 2 && substitute($l.year, 1) || 
     substitute($l.years, Math.floor(years)); 

     return $.trim([prefix, words, suffix].join(" ")); 
    }, 
    parse: function(iso8601) { 
     var s = $.trim(iso8601); 
     s = s.replace(/\.\d\d\d+/,""); // remove milliseconds 
     s = s.replace(/-/,"/").replace(/-/,"/"); 
     s = s.replace(/T/," ").replace(/Z/," UTC"); 
     s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400 
     return new Date(s); 
    }, 
    datetime: function(elem) { 
     // jQuery's `is()` doesn't play well with HTML5 in IE 
     var isTime = $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time"); 
     var iso8601 = isTime ? $(elem).attr("datetime") : $(elem).attr("title"); 
     return $t.parse(iso8601); 
    } 
    }); 

    $.fn.timeago = function() { 
    var self = this; 
    self.each(refresh); 

    var $s = $t.settings; 
    if ($s.refreshMillis > 0) { 
     setInterval(function() { self.each(refresh); }, $s.refreshMillis); 
    } 
    return self; 
    }; 

    function refresh() { 
    var data = prepareData(this); 
    if (!isNaN(data.datetime)) { 
     $(this).text(inWords(data.datetime)); 
    } 
    return this; 
    } 

    function prepareData(element) { 
    element = $(element); 
    if (!element.data("timeago")) { 
     element.data("timeago", { datetime: $t.datetime(element) }); 
     var text = $.trim(element.text()); 
     if (text.length > 0) { 
     element.attr("title", text); 
     } 
    } 
    return element.data("timeago"); 
    } 

    function inWords(date) { 
    return $t.inWords(distance(date)); 
    } 

    function distance(date) { 
    return (new Date().getTime() - date.getTime()); 
    } 

    // fix for IE6 suckage 
    document.createElement("abbr"); 
    document.createElement("time"); 
}(jQuery)); 
+0

那麼,這段代碼是該插件的源代碼嗎?你自己的代碼呢? – BoltClock 2011-04-04 00:30:33

回答

3

嘗試改變

prefixAgo: null, 

prefixAgo: "Happened", 

這應該與字"Happened "

要在前面的一切避免修改實際的源代碼,您可以將代碼行添加到自己的代碼中。

$.timeago.settings.strings.prefix = "Happened";

+0

不是一個好主意,以便在更新插件的情況下修改插件,並用新版本替換舊版本。 – BoltClock 2011-04-04 00:33:27

+0

好東西!我會在7分鐘內接受你的答案。謝謝。我猜單引號和雙引號並不重要(因爲下面的人使用單引號)。 – user657847 2011-04-04 00:33:58

+0

@BoltClock我同意。可惜這個插件不允許你自己覆蓋設置。 – Raynos 2011-04-04 00:35:23

4

我不熟悉那個圖書館,雖然它看起來非常好。閱讀您的文章,但我認爲我有一個解決方案。

更新:

prefixAgo: null, 

要:

prefixAgo: 'Happened', 

更新

HMZ,才意識到這是使用它的插件,而不是你的腳本。嘗試更新這一行你的腳本在你inits之一:

jQuery.timeago.settings.strings.prefixAgo = 'Happened'; 
+0

嗯?我在哪裏添加jQuery.timeago.settings.strings.prefixAgo ='發生了'; ?單引號還是雙引號?我知道PHP,你應該使用單一的大部分,所以Apache只解析它一次...或類似的東西。 – user657847 2011-04-04 00:43:27

+0

在腳本的頂部?或者在使用timeago庫之前的任何時候。 – Khez 2011-04-04 00:44:40

+0

@ user657847在JavaScript中單引號或雙引號無關緊要。這完全一樣。 – Raynos 2011-04-04 08:08:36