Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
348a7b6e
Commit
348a7b6e
authored
Aug 20, 2012
by
Rocky Duan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
render time ago in front end
parent
71df263f
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
156 additions
and
1 deletions
+156
-1
lms/static/coffee/src/discussion/content.coffee
+2
-0
lms/static/js/jquery.timeago.js
+152
-0
lms/templates/discussion/_content.mustache
+1
-1
lms/templates/discussion/_js_dependencies.html
+1
-0
No files found.
lms/static/coffee/src/discussion/content.coffee
View file @
348a7b6e
...
...
@@ -374,6 +374,8 @@ initializeFollowThread = (thread) ->
initializeFollowThread
$content
$local
=
Discussion
.
generateLocal
(
$content
.
children
(
".discussion-content"
))
$local
(
"span.timeago"
).
timeago
()
$contentTitle
=
$local
(
".thread-title"
)
if
$contentTitle
.
length
...
...
lms/static/js/jquery.timeago.js
0 → 100644
View file @
348a7b6e
/**
* Timeago is a jQuery plugin that makes it easy to support automatically
* updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
*
* @name timeago
* @version 0.11.4
* @requires jQuery v1.2.3+
* @author Ryan McGeary
* @license MIT License - http://www.opensource.org/licenses/mit-license.php
*
* For usage and examples, visit:
* http://timeago.yarp.com/
*
* Copyright (c) 2008-2012, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org)
*/
(
function
(
$
)
{
$
.
timeago
=
function
(
timestamp
)
{
if
(
timestamp
instanceof
Date
)
{
return
inWords
(
timestamp
);
}
else
if
(
typeof
timestamp
===
"string"
)
{
return
inWords
(
$
.
timeago
.
parse
(
timestamp
));
}
else
if
(
typeof
timestamp
===
"number"
)
{
return
inWords
(
new
Date
(
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"
,
wordSeparator
:
" "
,
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
;
}
}
var
seconds
=
Math
.
abs
(
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
<
42
&&
substitute
(
$l
.
day
,
1
)
||
days
<
30
&&
substitute
(
$l
.
days
,
Math
.
round
(
days
))
||
days
<
45
&&
substitute
(
$l
.
month
,
1
)
||
days
<
365
&&
substitute
(
$l
.
months
,
Math
.
round
(
days
/
30
))
||
years
<
1.5
&&
substitute
(
$l
.
year
,
1
)
||
substitute
(
$l
.
years
,
Math
.
round
(
years
));
var
separator
=
$l
.
wordSeparator
===
undefined
?
" "
:
$l
.
wordSeparator
;
return
$
.
trim
([
prefix
,
words
,
suffix
].
join
(
separator
));
},
parse
:
function
(
iso8601
)
{
var
s
=
$
.
trim
(
iso8601
);
s
=
s
.
replace
(
/
\.\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
)
{
var
iso8601
=
$t
.
isTime
(
elem
)
?
$
(
elem
).
attr
(
"datetime"
)
:
$
(
elem
).
attr
(
"title"
);
return
$t
.
parse
(
iso8601
);
},
isTime
:
function
(
elem
)
{
// jQuery's `is()` doesn't play well with HTML5 in IE
return
$
(
elem
).
get
(
0
).
tagName
.
toLowerCase
()
===
"time"
;
// $(elem).is("time");
}
});
$
.
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
&&
!
(
$t
.
isTime
(
element
)
&&
element
.
attr
(
"title"
)))
{
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
));
lms/templates/discussion/_content.mustache
View file @
348a7b6e
...
...
@@ -32,7 +32,7 @@
{{/
thread
}}
<div
class=
"info"
>
<div
class=
"comment-time"
>
<span
class=
"time
-ago"
>
{{
content
.
updated_at
}}
</span>
ago
by
<span
class=
"time
ago"
title=
"
{{
content
.
updated_at
}}
"
>
sometime
</span>
by
{{#
content
.
anonymous
}}
anonymous
{{/
content
.
anonymous
}}
...
...
lms/templates/discussion/_js_dependencies.html
View file @
348a7b6e
...
...
@@ -23,6 +23,7 @@
<script
type=
"text/javascript"
src=
"${static.url('js/Markdown.Sanitizer.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/Markdown.Editor.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/jquery.autocomplete.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/jquery.timeago.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/jquery.tagsinput.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/mustache.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/URI.min.js')}"
></script>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment