Added users tag support

This commit is contained in:
Pierre 2018-05-03 22:44:22 +02:00
parent 1044e3ff64
commit d6d6c2aa4c
3 changed files with 82 additions and 2 deletions

View File

@ -10,3 +10,17 @@
a { a {
cursor: pointer; cursor: pointer;
} }
/**
* <a> like elements
*/
.a {
cursor: pointer;
outline: none;
text-decoration: none;
color: #3c8dbc;
}
.a:focus, .a:hover {
color: #72afd2;
}

View File

@ -100,6 +100,10 @@
height: 1em; height: 1em;
} }
#conversationsElem .direct-chat-text a, #conversationsElem .direct-chat-text .a {
color: inherit;
}
#conversationsElem .direct-chat-text.not-first-message::before, #conversationsElem .direct-chat-text.not-first-message::before,
#conversationsElem .direct-chat-text.not-first-message::after { #conversationsElem .direct-chat-text.not-first-message::after {
display: none; display: none;

View File

@ -13,13 +13,75 @@ ComunicWeb.components.textParser = {
*/ */
parse: function(info){ parse: function(info){
//Add space at the begining and the end of the content to ensure
//parsing will not encounter errors
info.element.innerHTML = " " + info.element.innerHTML + " ";
//Prepare users tag parsing
this._prepare_user_tag_parsing(info.element);
//Parse emojies //Parse emojies
ComunicWeb.components.emoji.parser.parse({ ComunicWeb.components.emoji.parser.parse({
element: info.element element: info.element
}); });
} //Parse users tags
this._parse_users_tag(info.element);
},
/**
* Prepare users tag parsing
*
* @param {HTMLElement} target The target element to prepare
*/
_prepare_user_tag_parsing: function(target){
//Find all occurences of users tag
while(target.innerHTML.match(/@[a-zA-Z0-9.]+/i)){
//Get user tag
var userTag = target.innerHTML.match(/@[a-zA-Z0-9.]+/i)[0];
var userID = userTag.replace("@", "");
target.innerHTML = target.innerHTML.replace(userTag, "<userTag>"+userID+"</userTag>");
}
},
/**
* Parse users tag
*
* @param {HTMLElement} target The target element where user tags has
* to be parsed
*/
_parse_users_tag: function(target){
//Get the list of user tags of the target
var nodes = target.getElementsByTagName("userTag");
for (const num in nodes) {
if (nodes.hasOwnProperty(num)) {
const node = nodes[num];
//Get target user ID
const userID = node.innerHTML;
//Adapt node content
node.innerHTML = "@" + userID;
node.className = "a";
//Set event listener
node.addEventListener("click", function(ev){
//Open user page
openUserPage(userID);
});
}
}
},
} }