s0x90
10 years ago
6 changed files with 3243 additions and 14 deletions
-
2models.py
-
129static/lib/js/livestamp.js
-
3111static/lib/js/moment.js
-
4static/src/js/livestamp.min.js
-
7static/src/js/moment.min.js
-
4views.xml
@ -0,0 +1,129 @@ |
|||
// Livestamp.js / v1.1.2 / (c) 2012 Matt Bradley / MIT License
|
|||
(function($, moment) { |
|||
var updateInterval = 1e3, |
|||
paused = false, |
|||
$livestamps = $([]), |
|||
|
|||
init = function() { |
|||
livestampGlobal.resume(); |
|||
}, |
|||
|
|||
prep = function($el, timestamp) { |
|||
var oldData = $el.data('livestampdata'); |
|||
if (typeof timestamp == 'number') |
|||
timestamp *= 1e3; |
|||
|
|||
$el.removeAttr('data-livestamp') |
|||
.removeData('livestamp'); |
|||
|
|||
timestamp = moment(timestamp); |
|||
if (moment.isMoment(timestamp) && !isNaN(+timestamp)) { |
|||
var newData = $.extend({ }, { 'original': $el.contents() }, oldData); |
|||
newData.moment = moment(timestamp); |
|||
|
|||
$el.data('livestampdata', newData).empty(); |
|||
$livestamps.push($el[0]); |
|||
} |
|||
}, |
|||
|
|||
run = function() { |
|||
if (paused) return; |
|||
livestampGlobal.update(); |
|||
setTimeout(run, updateInterval); |
|||
}, |
|||
|
|||
livestampGlobal = { |
|||
update: function() { |
|||
$('[data-livestamp]').each(function() { |
|||
var $this = $(this); |
|||
prep($this, $this.data('livestamp')); |
|||
}); |
|||
|
|||
var toRemove = []; |
|||
$livestamps.each(function() { |
|||
var $this = $(this), |
|||
data = $this.data('livestampdata'); |
|||
|
|||
if (data === undefined) |
|||
toRemove.push(this); |
|||
else if (moment.isMoment(data.moment)) { |
|||
var from = $this.html(), |
|||
to = data.moment.fromNow(); |
|||
|
|||
if (from != to) { |
|||
var e = $.Event('change.livestamp'); |
|||
$this.trigger(e, [from, to]); |
|||
if (!e.isDefaultPrevented()) |
|||
$this.html(to); |
|||
} |
|||
} |
|||
}); |
|||
|
|||
$livestamps = $livestamps.not(toRemove); |
|||
}, |
|||
|
|||
pause: function() { |
|||
paused = true; |
|||
}, |
|||
|
|||
resume: function() { |
|||
paused = false; |
|||
run(); |
|||
}, |
|||
|
|||
interval: function(interval) { |
|||
if (interval === undefined) |
|||
return updateInterval; |
|||
updateInterval = interval; |
|||
} |
|||
}, |
|||
|
|||
livestampLocal = { |
|||
add: function($el, timestamp) { |
|||
if (typeof timestamp == 'number') |
|||
timestamp *= 1e3; |
|||
timestamp = moment(timestamp); |
|||
|
|||
if (moment.isMoment(timestamp) && !isNaN(+timestamp)) { |
|||
$el.each(function() { |
|||
prep($(this), timestamp); |
|||
}); |
|||
livestampGlobal.update(); |
|||
} |
|||
|
|||
return $el; |
|||
}, |
|||
|
|||
destroy: function($el) { |
|||
$livestamps = $livestamps.not($el); |
|||
$el.each(function() { |
|||
var $this = $(this), |
|||
data = $this.data('livestampdata'); |
|||
|
|||
if (data === undefined) |
|||
return $el; |
|||
|
|||
$this |
|||
.html(data.original ? data.original : '') |
|||
.removeData('livestampdata'); |
|||
}); |
|||
|
|||
return $el; |
|||
}, |
|||
|
|||
isLivestamp: function($el) { |
|||
return $el.data('livestampdata') !== undefined; |
|||
} |
|||
}; |
|||
|
|||
$.livestamp = livestampGlobal; |
|||
$(init); |
|||
$.fn.livestamp = function(method, options) { |
|||
if (!livestampLocal[method]) { |
|||
options = method; |
|||
method = 'add'; |
|||
} |
|||
|
|||
return livestampLocal[method](this, options); |
|||
}; |
|||
})(jQuery, moment); |
3111
static/lib/js/moment.js
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -1,4 +0,0 @@ |
|||
// Livestamp.js / v1.1.2 / (c) 2012 Matt Bradley / MIT License
|
|||
(function(d,g){var h=1E3,i=!1,e=d([]),j=function(b,a){var c=b.data("livestampdata");"number"==typeof a&&(a*=1E3);b.removeAttr("data-livestamp").removeData("livestamp");a=g(a);g.isMoment(a)&&!isNaN(+a)&&(c=d.extend({},{original:b.contents()},c),c.moment=g(a),b.data("livestampdata",c).empty(),e.push(b[0]))},k=function(){i||(f.update(),setTimeout(k,h))},f={update:function(){d("[data-livestamp]").each(function(){var a=d(this);j(a,a.data("livestamp"))});var b=[];e.each(function(){var a=d(this),c=a.data("livestampdata"); |
|||
if(void 0===c)b.push(this);else if(g.isMoment(c.moment)){var e=a.html(),c=c.moment.fromNow();if(e!=c){var f=d.Event("change.livestamp");a.trigger(f,[e,c]);f.isDefaultPrevented()||a.html(c)}}});e=e.not(b)},pause:function(){i=!0},resume:function(){i=!1;k()},interval:function(b){if(void 0===b)return h;h=b}},l={add:function(b,a){"number"==typeof a&&(a*=1E3);a=g(a);g.isMoment(a)&&!isNaN(+a)&&(b.each(function(){j(d(this),a)}),f.update());return b},destroy:function(b){e=e.not(b);b.each(function(){var a= |
|||
d(this),c=a.data("livestampdata");if(void 0===c)return b;a.html(c.original?c.original:"").removeData("livestampdata")});return b},isLivestamp:function(b){return void 0!==b.data("livestampdata")}};d.livestamp=f;d(function(){f.resume()});d.fn.livestamp=function(b,a){l[b]||(a=b,b="add");return l[b](this,a)}})(jQuery,moment); |
7
static/src/js/moment.min.js
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
Write
Preview
Loading…
Cancel
Save
Reference in new issue