diff --git a/js/article_v2.js b/js/article_v2.js index 1376556..88d01e8 100644 --- a/js/article_v2.js +++ b/js/article_v2.js @@ -101,6 +101,113 @@ margin-left: calc((100% - 190px - 65px)/2) !important; margin-top:10px; } +.zuo_zhe_name .article-author-link { + cursor: pointer; + text-decoration: none; +} +.zuo_zhe_name .article-author-link:hover { + text-decoration: underline; +} +/* 部署默认隐藏,浏览器调试时将 display 改为 block 即可启用 */ +.article-author-popup { + position: fixed; + z-index: 10001; + // display: none !important; + min-width: 280px; + + background: #fff; + border: 1px solid #333; + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.18); + padding: 14px 16px 18px; + font-size: 14px; + line-height: 1.5; + color: #333; + box-sizing: border-box; +} +.article-author-popup-arrow { + position: absolute; + left: 0; + bottom: 0; + width: 0; + height: 0; + pointer-events: none; + z-index: 2; +} +.article-author-popup-arrow-border, +.article-author-popup-arrow-inner { + position: absolute; + left: 0; + bottom: 0; + transform: translateX(-50%); + width: 0; + height: 0; + border-style: solid; +} +.article-author-popup-arrow-border { + margin-bottom: -8px; + border-width: 8px 8px 0; + border-color: #333 transparent transparent; +} +.article-author-popup-arrow-inner { + margin-bottom: -6px; + border-width: 7px 7px 0; + border-color: #fff transparent transparent; +} +.article-author-popup.is-below .article-author-popup-arrow { + bottom: auto; + top: 0; +} +.article-author-popup.is-below .article-author-popup-arrow-border { + margin-bottom: 0; + margin-top: -8px; + border-width: 0 8px 8px; + border-color: transparent transparent #333; +} +.article-author-popup.is-below .article-author-popup-arrow-inner { + margin-bottom: 0; + margin-top: -6px; + border-width: 0 7px 7px; + border-color: transparent transparent #fff; +} +.article-author-popup-header { + display: flex; + justify-content: space-between; + align-items: flex-start; + margin-bottom: 8px; +} +.article-author-popup-name { + font-weight: bold; + font-size: 15px; + padding-right: 12px; +} +.article-author-popup-close { + cursor: pointer; + font-size: 18px; + line-height: 1; + color: #666; + flex-shrink: 0; +} +.article-author-popup-affiliation { + font-size: 14px; + color: #333; + line-height: 22px; + margin-bottom: 12px; +} +.article-author-popup-affiliation sup { + color: rgb(0, 112, 192); +} +.article-author-popup-search { + border-top: 1px solid #e0e0e0; + padding-top: 10px; + font-size: 13px; +} +.article-author-popup-search a { + color: #006699; + text-decoration: underline; +} +.article-author-popup-search a:hover { + color: #004466; +} ` document.head.appendChild(style); @@ -478,6 +585,158 @@ function renderCitations(citations, doi) { } } +function escapeAuthorAttr(str) { + return String(str || '').replace(/&/g, '&').replace(/"/g, '"').replace(/' + organs[i].alias + ' ' + organs[i].organ_name); + break; + } + } + } + return lines.join('
'); +} + +function getPubMedAuthorUrl(name) { + var searchName = formatAuthorSearchName(name); + return 'https://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=search&term=' + encodeURIComponent(searchName); +} + +function getGoogleScholarAuthorUrl(name) { + var searchName = formatAuthorSearchName(name); + return 'https://scholar.google.com/scholar?as_q=&num=10&btnG=Search+Scholar&as_sauthors=' + + encodeURIComponent('"' + searchName + '"') + + '&as_publication=&as_ylo=&as_yhi=&as_sdt=1&as_sdtp=&as_vis=1&hl=en'; +} + +var articleAuthorPopupTrigger = null; + +function hideArticleAuthorPopup() { + articleAuthorPopupTrigger = null; + $('#article-author-popup').hide().removeClass('is-below is-active'); +} + +function positionArticleAuthorPopup() { + var $trigger = articleAuthorPopupTrigger; + var $popup = $('#article-author-popup'); + if (!$trigger || !$trigger.length || !$popup.length || !$popup.is(':visible')) return; + + var rect = $trigger[0].getBoundingClientRect(); + var triggerCenterX = rect.left + rect.width / 2; + var gap = 12; + + $popup.css({ visibility: 'hidden', display: 'block' }); + var popupWidth = $popup.outerWidth(); + var popupHeight = $popup.outerHeight(); + var left = triggerCenterX - popupWidth / 2; + var top = rect.top - popupHeight - gap; + var isBelow = false; + + left = Math.max(8, Math.min(left, window.innerWidth - popupWidth - 8)); + if (top < 8) { + top = rect.bottom + gap; + isBelow = true; + } + + var arrowLeft = triggerCenterX - left; + arrowLeft = Math.max(16, Math.min(arrowLeft, popupWidth - 16)); + + $popup.toggleClass('is-below', isBelow); + $popup.css({ + left: left + 'px', + top: top + 'px', + visibility: 'visible' + }); + $popup.find('.article-author-popup-arrow').css('left', arrowLeft + 'px'); +} + +function showArticleAuthorPopup($trigger, authorName, affiliation) { + var $popup = $('#article-author-popup'); + if (!$popup.length) { + $('body').append( + '
' + + '
' + + '' + + '' + + '
' + + '
' + + '
Search author on: ' + + ' | ' + + '' + + '
' + + '
' + + '' + + '' + + '
' + ); + $popup = $('#article-author-popup'); + $popup.find('.article-author-popup-close').on('click', function (e) { + e.stopPropagation(); + hideArticleAuthorPopup(); + }); + } + + articleAuthorPopupTrigger = $trigger; + $popup.addClass('is-active').show(); + + if (!$popup.find('.article-author-popup-arrow').length) { + $popup.append( + '
' + + '' + + '
' + ); + } + + $popup.find('.article-author-popup-name').text(authorName); + $popup.find('.article-author-popup-affiliation').html(affiliation || ''); + $popup.find('.article-author-popup-pubmed').attr('href', getPubMedAuthorUrl(authorName)); + $popup.find('.article-author-popup-scholar').attr('href', getGoogleScholarAuthorUrl(authorName)); + + positionArticleAuthorPopup(); + requestAnimationFrame(function () { + positionArticleAuthorPopup(); + }); +} + +function initArticleAuthorPopup(organs) { + $(document).off('click.articleAuthorLink', '.zuo_zhe_name .article-author-link'); + $(document).on('click.articleAuthorLink', '.zuo_zhe_name .article-author-link', function (e) { + e.preventDefault(); + e.stopPropagation(); + var $link = $(this); + var authorName = $link.attr('data-author-name') || $.trim($link.text()); + var affiliation = getAuthorAffiliationHtml($link.attr('data-author-ors'), organs); + showArticleAuthorPopup($link, authorName, affiliation); + }); + + $(document).off('click.articleAuthorPopupOutside'); + $(document).on('click.articleAuthorPopupOutside', function (e) { + if (!$(e.target).closest('#article-author-popup, .article-author-link').length) { + hideArticleAuthorPopup(); + } + }); + + $(window).off('scroll.articleAuthorPopup resize.articleAuthorPopup'); + $(window).on('scroll.articleAuthorPopup resize.articleAuthorPopup', function () { + positionArticleAuthorPopup(); + }); +} + // 文章内容 function article_con() { $('.wen_jian .left .toggle-btn').html('Author Information ▼') @@ -709,10 +968,11 @@ function article_con() { } else { ORC_ID = '' } + var authorLink = '' + j_authior[i].author_name + ''; if (i == j_authior.length - 1) { - stra += j_authior[i].author_name + '' + j_authior[i].ors + rep + '' + ORC_ID + mes + stra += authorLink + '' + j_authior[i].ors + rep + '' + ORC_ID + mes } else { - stra += j_authior[i].author_name + '' + j_authior[i].ors + rep + '' + ORC_ID + mes + ', ' + stra += authorLink + '' + j_authior[i].ors + rep + '' + ORC_ID + mes + ', ' } } @@ -726,6 +986,7 @@ function article_con() { str += strg + ""; $('.wen_jian .left>div.zuo_zhe').html(str); + initArticleAuthorPopup(j_organ); $('.wen_jian .left>div.zuo_zhe>sup').css({ color: commonSupColor, });