Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Ind.ie Projects
Waystone
Commits
c2656a5c
Unverified
Commit
c2656a5c
authored
Aug 30, 2015
by
Aral Balkan
Browse files
Cleaned up public.js a bit.
parent
f366b168
Changes
1
Hide whitespace changes
Inline
Side-by-side
static/js/public.js
View file @
c2656a5c
...
...
@@ -45,177 +45,176 @@ function getOlderMessages(){
// .get('//' + set.meta.waystoneURL +'/posts-before/'+oldestPostID)
.
end
(
function
(
error
,
posts
)
{
var
loadProgress
=
document
.
getElementById
(
'
loadProgress
'
);
var
displayNoneClass
=
"
displayNone
"
;
// Hide the progress indicator
loadProgress
.
classList
.
add
(
displayNoneClass
);
posts
=
JSON
.
parse
(
posts
.
text
);
// console.log(posts);
if
(
posts
.
length
==
0
){
console
.
log
(
'
No older posts.
'
);
return
;
}
var
loadProgress
=
document
.
getElementById
(
'
loadProgress
'
);
var
displayNoneClass
=
"
displayNone
"
;
// Hide the progress indicator
loadProgress
.
classList
.
add
(
displayNoneClass
);
posts
=
JSON
.
parse
(
posts
.
text
);
// console.log(posts);
if
(
posts
.
length
==
0
){
console
.
log
(
'
No older posts.
'
);
return
;
}
console
.
log
(
"
Got
"
+
posts
.
length
+
"
older posts.
"
);
var
repeaterNodeInnerHTML
=
"
<div class='messageBody' data-set-attribute='id message.key messageBodyIDFormatter'>
"
+
"
<div class='image-and-body'>
"
+
"
<img class='profileImage' data-set-attribute='src message.key profileImagePathFormatter'>
"
+
"
<div class='bodyText' data-set-text='html message.value'>Message body HTML</div>
"
+
"
<div class='meta'><span class='postDate' data-set-attribute='data-timestamp message.key timestampFormatter' data-set-text='message.key postDateFormatter'></span><span data-set-text='message.key personFormatter'></span> <a data-set-attribute='href message.key addFriendLinkFormatter' data-set-text='html message.key addFriendTextFormatter'></a></div>
"
+
"
</div>
"
+
"
</div>
"
;
var
messages
=
document
.
getElementById
(
'
messages
'
);
// Create the repeater node.
var
div
=
document
.
createElement
(
'
div
'
);
div
.
setAttribute
(
'
data-set-repeat
'
,
'
message messages
'
);
div
.
setAttribute
(
'
class
'
,
'
message
'
);
div
.
setAttribute
(
'
data-set-attribute
'
,
'
id message.key
'
);
div
.
innerHTML
=
repeaterNodeInnerHTML
;
// Insert new items at the end.
insertAfter
(
messages
,
messages
.
lastElementChild
,
div
);
repeaterNode
=
messages
.
lastElementChild
;
// Bug: Formatters are not being passed from the server correctly
// when injectData is true. As a workaround: I’m duplicating them on the
// client also.
set
.
format
[
'
messageBodyIDFormatter
'
]
=
function
(
messageID
)
{
return
messageID
+
"
-body
"
;
}
set
.
format
[
'
messageStatusIDFormatter
'
]
=
function
(
messageID
)
{
return
messageID
+
"
-status
"
;
}
set
.
format
[
'
profileImagePathFormatter
'
]
=
function
(
messageID
)
{
var
personHandle
=
messageID
.
substr
(
messageID
.
lastIndexOf
(
'
Z-
'
)
+
2
);
var
profileImagePath
=
"
/public/
"
+
personHandle
+
"
/about/me.jpg
"
;
return
profileImagePath
;
}
set
.
format
[
'
postDateFormatter
'
]
=
function
(
messageID
)
{
//
// Parses message IDs in the following forms into separate groups for
// * timeline clock (deprecated)
// * message time (replace underscores with colons to convert to valid timestamp)
// * account handle (optional)
//
// 000000001-2015-08-10T18_49_10.467Z-laura
// 000000001-2015-08-10T18_49_10.467Z
// 2015-08-10T18_49_10.467Z-laura
// 2015-08-10T18_49_10.467Z
//
console
.
log
(
"
Got
"
+
posts
.
length
+
"
older posts.
"
)
;
var
messageIDParserRegExp
=
/^
(\d{9})?
-
?(\d{4}
-
\d{2}
-
\d{2}
T
\d{2}
_
\d{2}
_
\d{2}\.\d{3}
Z
)
-
?(
.*
)?
/
;
var
repeaterNodeInnerHTML
=
"
<div class='messageBody' data-set-attribute='id message.key messageBodyIDFormatter'>
"
+
"
<div class='image-and-body'>
"
+
"
<img class='profileImage' data-set-attribute='src message.key profileImagePathFormatter'>
"
+
"
<div class='bodyText' data-set-text='html message.value'>Message body HTML</div>
"
+
"
<div class='meta'><span class='postDate' data-set-attribute='data-timestamp message.key timestampFormatter' data-set-text='message.key postDateFormatter'></span><span data-set-text='message.key personFormatter'></span> <a data-set-attribute='href message.key addFriendLinkFormatter' data-set-text='html message.key addFriendTextFormatter'></a></div>
"
+
"
</div>
"
+
"
</div>
"
;
var
matches
=
messageID
.
match
(
messageIDParserRegExp
);
var
messages
=
document
.
getElementById
(
'
messages
'
);
if
(
matches
!=
null
){
var
depracatedOptionalMessageClock
=
matches
[
1
];
var
timestamp
=
matches
[
2
];
var
optionalAccountHandle
=
matches
[
3
];
// Create the repeater node.
var
div
=
document
.
createElement
(
'
div
'
);
div
.
setAttribute
(
'
data-set-repeat
'
,
'
message messages
'
);
div
.
setAttribute
(
'
class
'
,
'
message
'
);
div
.
setAttribute
(
'
data-set-attribute
'
,
'
id message.key
'
);
div
.
innerHTML
=
repeaterNodeInnerHTML
;
// Desearialise the timestamp.
timestamp
=
timestamp
.
replace
(
/_/g
,
'
:
'
);
// Insert new items at the end.
insertAfter
(
messages
,
messages
.
lastElementChild
,
div
);
var
now
=
new
Date
();
var
timeOfPost
=
new
Date
(
timestamp
);
repeaterNode
=
messages
.
lastElementChild
;
// to secs -> mins -> hours -> days
var
timeSincePostInDays
=
(
now
-
timeOfPost
)
/
1000
/
60
/
60
/
24
;
// Bug: Formatters are not being passed from the server correctly
// when injectData is true. As a workaround: I’m duplicating them on the
// client also.
set
.
format
[
'
messageBodyIDFormatter
'
]
=
function
(
messageID
)
{
return
messageID
+
"
-body
"
;
}
var
humanTime
=
moment
(
timeOfPost
).
fromNow
();
set
.
format
[
'
messageStatusIDFormatter
'
]
=
function
(
messageID
)
{
return
messageID
+
"
-status
"
;
return
humanTime
+
"
"
;
}
set
.
format
[
'
profileImagePathFormatter
'
]
=
function
(
messageID
)
{
var
personHandle
=
messageID
.
substr
(
messageID
.
lastIndexOf
(
'
Z-
'
)
+
2
);
var
profileImagePath
=
"
/public/
"
+
personHandle
+
"
/about/me.jpg
"
;
return
profileImagePath
;
else
{
// This should never happen and probably shows that some sort of corrupted date got through somehow.
return
'
No date.
'
;
}
}
set
.
format
[
'
postDateFormatter
'
]
=
function
(
messageID
)
{
//
// Parses message IDs in the following forms into separate groups for
// * timeline clock (deprecated)
// * message time (replace underscores with colons to convert to valid timestamp)
// * account handle (optional)
//
// 000000001-2015-08-10T18_49_10.467Z-laura
// 000000001-2015-08-10T18_49_10.467Z
// 2015-08-10T18_49_10.467Z-laura
// 2015-08-10T18_49_10.467Z
//
var
messageIDParserRegExp
=
/^
(\d{9})?
-
?(\d{4}
-
\d{2}
-
\d{2}
T
\d{2}
_
\d{2}
_
\d{2}\.\d{3}
Z
)
-
?(
.*
)?
/
;
set
.
format
[
'
timestampFormatter
'
]
=
function
(
messageID
)
{
var
messageIDParserRegExp
=
/^
(\d{9})?
-
?(\d{4}
-
\d{2}
-
\d{2}
T
\d{2}
_
\d{2}
_
\d{2}\.\d{3}
Z
)
-
?(
.*
)?
/
;
var
matches
=
messageID
.
match
(
messageIDParserRegExp
);
var
matches
=
messageID
.
match
(
messageIDParserRegExp
);
if
(
matches
!=
null
){
var
depracatedOptionalMessageClock
=
matches
[
1
];
var
timestamp
=
matches
[
2
];
var
optionalAccountHandle
=
matches
[
3
];
if
(
matches
!=
null
)
{
var
timestamp
=
matches
[
2
];
// Desearialise the timestamp.
timestamp
=
timestamp
.
replace
(
/_/g
,
'
:
'
);
var
now
=
new
Date
();
var
timeOfPost
=
new
Date
(
timestamp
);
// to secs -> mins -> hours -> days
var
timeSincePostInDays
=
(
now
-
timeOfPost
)
/
1000
/
60
/
60
/
24
;
var
humanTime
=
moment
(
timeOfPost
).
fromNow
();
// Deserialise the timestamp.
timestamp
=
timestamp
.
replace
(
/_/g
,
'
:
'
);
return
humanTime
+
"
"
;
}
else
{
// This should never happen and probably shows that some sort of corrupted date got through somehow.
return
'
No date.
'
;
}
return
timestamp
;
}
else
{
// This should never happen and probably shows that some sort of corrupted ID got through somehow.
return
(
new
Date
());
}
}
set
.
format
[
'
timestampFormatter
'
]
=
function
(
messageID
)
{
var
messageIDParserRegExp
=
/^
(\d{9})?
-
?(\d{4}
-
\d{2}
-
\d{2}
T
\d{2}
_
\d{2}
_
\d{2}\.\d{3}
Z
)
-
?(
.*
)?
/
;
// Format the person’s name
set
.
format
[
'
personFormatter
'
]
=
function
(
messageID
)
{
var
personHandleDelimeter
=
messageID
.
lastIndexOf
(
'
Z-
'
);
var
matches
=
messageID
.
match
(
messageIDParserRegExp
);
if
(
matches
!=
null
)
{
var
timestamp
=
matches
[
2
];
if
(
personHandleDelimeter
!=
-
1
)
{
// From someone else
personHandle
=
messageID
.
substr
(
personHandleDelimeter
+
2
);
// Deserialise the timestamp.
timestamp
=
timestamp
.
replace
(
/_/g
,
'
:
'
);
return
timestamp
;
}
else
{
// This should never happen and probably shows that some sort of corrupted ID got through somehow.
return
(
new
Date
());
}
// TODO: Once public profile pages are implemented, link to them.
return
"
by
"
+
personHandle
+
"
.
"
;
}
// Format the person’s name
set
.
format
[
'
personFormatter
'
]
=
function
(
messageID
)
{
var
personHandleDelimeter
=
messageID
.
lastIndexOf
(
'
Z-
'
);
if
(
personHandleDelimeter
!=
-
1
)
{
// From someone else
personHandle
=
messageID
.
substr
(
personHandleDelimeter
+
2
);
// TODO: Once public profile pages are implemented, link to them.
return
"
by
"
+
personHandle
+
"
.
"
;
}
else
{
// This is the person themselves.
// TODO: Once the timestamps are in there, just return that.
return
''
;
}
else
{
// This is the person themselves.
// TODO: Once the timestamps are in there, just return that.
return
''
;
}
}
set
.
format
[
'
addFriendLinkFormatter
'
]
=
function
(
messageID
)
{
var
personHandleDelimeter
=
messageID
.
lastIndexOf
(
'
Z-
'
);
set
.
format
[
'
addFriendLinkFormatter
'
]
=
function
(
messageID
)
{
var
personHandleDelimeter
=
messageID
.
lastIndexOf
(
'
Z-
'
);
if
(
personHandleDelimeter
!=
-
1
)
{
// From someone else
var
personHandle
=
messageID
.
substr
(
personHandleDelimeter
+
2
);
var
addFriendLink
=
"
indie://friend/
"
+
personHandle
;
if
(
personHandleDelimeter
!=
-
1
)
{
// From someone else
var
personHandle
=
messageID
.
substr
(
personHandleDelimeter
+
2
);
var
addFriendLink
=
"
indie://friend/
"
+
personHandle
;
return
addFriendLink
;
}
// // TODO: Filter out the person themselves.
// else
// {
// // This is the person themselves, no need to display a friend link.
// return '';
// }
return
addFriendLink
;
}
// // TODO: Filter out the person themselves.
// else
// {
// // This is the person themselves, no need to display a friend link.
// return '';
// }
}
set
.
format
[
'
addFriendTextFormatter
'
]
=
function
(
messageID
)
{
set
.
format
[
'
addFriendTextFormatter
'
]
=
function
(
messageID
)
{
var
personHandleDelimeter
=
messageID
.
lastIndexOf
(
'
Z-
'
);
var
personHandleDelimeter
=
messageID
.
lastIndexOf
(
'
Z-
'
);
var
profileImagePath
=
''
;
if
(
personHandleDelimeter
!=
-
1
){
return
"
<img class='add-friend-icon' src='/images/person_add@2x.png' alt='Send friend request'>
"
}
// // TODO: Filter out the person themselves.
// else
// {
// //This is the person themselves, no need to display a friend link.
// return ''
// }
var
profileImagePath
=
''
;
if
(
personHandleDelimeter
!=
-
1
){
return
"
<img class='add-friend-icon' src='/images/person_add@2x.png' alt='Send friend request'>
"
}
// Update the repeater node
set
(
repeaterNode
,
{
messages
:
posts
})
// // TODO: Filter out the person themselves.
// else
// {
// //This is the person themselves, no need to display a friend link.
// return ''
// }
}
// Update the repeater node
set
(
repeaterNode
,
{
messages
:
posts
})
});
}
...
...
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