frc-ui
Version:
React Web UI
138 lines (137 loc) • 5.23 kB
JavaScript
import classNames from 'classnames';
import { MessageType as Type } from '../interfaces';
import transparent from '../images/transparent.png';
import { fromItem, pca, title } from './Html';
const underName = {
'4': '平安利顺'
};
export default (data, content, callback) => {
let node = null;
if (data.type === Type.TEXT) {
if (data.style) {
node = document.createElement('span');
node.innerHTML = data.content;
node.style = data.style;
}
else {
node = document.createTextNode(data.content);
}
node.eleType = data.type;
}
else if (data.type === Type.EMO) {
node = document.createElement('img');
node.className = classNames(['emojione', data.content]);
node.src = transparent;
}
else if (data.type === Type.IMAGE) {
node = document.createElement('img');
node.className = classNames(['chat-image']);
node.src = data.content;
node.onclick = callback;
}
else if (data.type === Type.LINK) {
node = document.createElement('a');
node.href = data.content;
node.className = classNames(['chat-link']);
node.target = '_blank';
node.innerHTML = data.content;
}
else if (data.type === Type.HTML) {
node = document.createElement('div');
node.innerHTML = data.content;
let aa = node.getElementsByTagName('a');
const length = aa ? aa.length : 0;
for (let i = 0; i < length; i++) {
aa[i].target = '_blank';
}
}
else if (data.type === Type.NEWS) {
node = document.createElement('div');
node.innerHTML = data.content;
let aa = node.getElementsByTagName('a');
const length = aa ? aa.length : 0;
for (let i = 0; i < length; i++) {
aa[i].target = '_blank';
}
}
else if (data.type === Type.ELEMENT) {
node = document.createElement(data.content);
}
else if (data.type === Type.GIF) {
node = gif(data, content, callback);
}
else if (data.type === Type.SHOW_ALL) {
node = document.createElement('a');
node.innerText = data.content;
node.style = 'color:#0D4FB8;text-decoration:underline;margin-left:5px;';
node.onclick = callback;
}
else if (data.type === Type.CUSTOM_PC) {
const d = data.content;
node = document.createElement('div');
let innerHTML = '<span>';
innerHTML += title(`${d.maturityTerm} ${d.shortName}`);
innerHTML += fromItem('【当前边际】:', !data.isHas ? '***' : d.bidRate === null ? '' : d.bidRate ? `${d.bidRate}%` : '');
innerHTML += fromItem('【全场倍数】:', !data.isHas ? '***' : d.marketMutiple === null ? '' : d.marketMutiple || '');
innerHTML += fromItem('【边际倍数】:', !data.isHas ? '***' : d.bidMultiple === null ? '' : d.bidMultiple || '');
innerHTML += fromItem('【发行人预期】:', !data.isHas ? '***' : d.issuerExpect === null ? '' : d.issuerExpect || '');
if (data.isHas) {
innerHTML += fromItem('【备 注】:', d.margGuid);
}
innerHTML += '</span>';
node.innerHTML = innerHTML;
if (!data.isHas && !data.isApply) {
node.appendChild(pca(false, underName[d.underwriterId], callback));
}
else if (!data.isHas && data.isApply) {
node.appendChild(pca(true, underName[d.underwriterId], callback));
}
}
if (node) {
node.eleType = data.type;
node.content = data.content;
content.appendChild(node);
content.appendChild(document.createTextNode(''));
}
return node;
};
const gif = (data, content, callback) => {
let node = document.createElement('div');
node.className = classNames(['collect-emoji-warp']);
let img = document.createElement('img');
img.src = data.content;
img.className = classNames(['custom-emoji']);
node.appendChild(img);
if (typeof callback !== 'function') {
return node;
}
let div = document.createElement('div');
let i = document.createElement('i');
div.className = classNames(['collect-emoji-div']);
i.className = classNames(['collect-emoji-icon sumscope-icon icon-star-o']);
div.appendChild(i);
div.onclick = function () {
callback(data.content);
};
let timeout = null;
node.onmouseover = function () {
if (timeout) {
clearTimeout(timeout);
timeout = null;
}
const rect = img.getBoundingClientRect();
div.style.cssText =
'width: ' + rect.width + 'px; ' + 'height: ' + rect.height + 'px; ' + 'top: ' + 0 + 'px; ' + 'left: ' + 0 + 'px;';
let min = Math.min(rect.width, rect.height);
i.style.cssText = 'font-size: ' + Math.round(min / 2) + 'px;';
node.appendChild(div);
};
node.onmouseout = function () {
timeout = setTimeout(() => {
node.removeChild(div);
clearTimeout(timeout);
timeout = null;
}, 200);
};
return node;
};