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