diff --git a/js/article.js b/js/article.js
index 1d3d6f1..46b6cbe 100644
--- a/js/article.js
+++ b/js/article.js
@@ -135,7 +135,7 @@ document.head.appendChild(script);
// 列表
function at_list() {
-
+
function adjustNavHeight() {
var windowHeight = window.innerHeight; // 获取页面高度
$(".anchor-nav").css("height", windowHeight + "px"); // 设置导航栏高度为页面高度
@@ -8880,17 +8880,35 @@ ${header
if (!cell || !cell.cellId) return '';
const content = cell.text || '';
+
+ // 1. 判断是否是 Base64 图片 (用于点击预览逻辑)
const isBase64Image = /^
]*src=["']data:image\//i.test(content);
- const finalContent = isBase64Image
- ? content.replace(
+ // 2. 判断是否是服务器特定的图片路径 (用于拼接域名)
+ const isServerPathImage = /src=["']\/public\/articleTableImage/i.test(content);
+
+ let finalContent = content;
+
+ if (isBase64Image) {
+ // 处理 Base64:注入点击预览 picPreview
+ finalContent = content.replace(
/
]*?)src=["'](data:image\/[^"']+)["']([^>]*)>/gi,
(match, preAttrs, src, postAttrs) => {
const safeSrc = src.replace(/'/g, "\\'");
- return `
`;
+ return `
`;
}
- )
- : content;
+ );
+ } else if (isServerPathImage) {
+ // 处理特定路径:拼接域名 https://submission.tmrjournals.com
+ finalContent = content.replace(
+ /
]*?)src=["'](\/public\/articleTableImage[^"']+)["']([^>]*)>/gi,
+ (match, preAttrs, src, postAttrs) => {
+ const fullUrl = `https://submission.tmrjournals.com${src}`;
+ // 建议这里也加上 max-width 兼容性更好
+ return `
`;
+ }
+ );
+ }
return `
@@ -8974,7 +8992,7 @@ text-align:left;color:#333;" >${item.table.note ? item.table.note : ''
updateCitationDisplayWithMyTable('.wen_rong .content-box .conthtmn', result.data.refers, {
writeInnerHTML: true,
hideEmptyCite: true
- });
+ });
}
/**
@@ -8985,138 +9003,138 @@ function updateCitationDisplayWithMyTable(root, refers, opt) {
opt = opt || {};
var el = typeof root === 'string' ? document.querySelector(root) : root;
if (!el) return { idToNum: {}, order: [] };
-
+
// 1) 合法参考文献集合
var validRef = Object.create(null);
(refers || []).forEach(function (r) {
- if (r && r.p_refer_id != null) validRef[String(r.p_refer_id)] = true;
+ if (r && r.p_refer_id != null) validRef[String(r.p_refer_id)] = true;
});
-
+
function parseIds(raw) {
- return String(raw || '')
- .split(',')
- .map(function (s) { return s.trim(); })
- .filter(Boolean);
+ return String(raw || '')
+ .split(',')
+ .map(function (s) { return s.trim(); })
+ .filter(Boolean);
}
-
+
function formatNums(nums) {
- var a = nums.filter(function (n, i, arr) { return arr.indexOf(n) === i; })
- .sort(function (x, y) { return x - y; });
- var out = [], i = 0;
- while (i < a.length) {
- var j = i;
- while (j < a.length - 1 && a[j + 1] === a[j] + 1) j++;
- if (j - i >= 2) out.push(a[i] + '–' + a[j]);
- else for (var k = i; k <= j; k++) out.push(String(a[k]));
- i = j + 1;
- }
- return out.join(', ');
+ var a = nums.filter(function (n, i, arr) { return arr.indexOf(n) === i; })
+ .sort(function (x, y) { return x - y; });
+ var out = [], i = 0;
+ while (i < a.length) {
+ var j = i;
+ while (j < a.length - 1 && a[j + 1] === a[j] + 1) j++;
+ if (j - i >= 2) out.push(a[i] + '–' + a[j]);
+ else for (var k = i; k <= j; k++) out.push(String(a[k]));
+ i = j + 1;
+ }
+ return out.join(', ');
}
-
+
// 2) 建一个“表格索引”:tableId -> 真实表格节点
// 这里把常见承载节点都尝试一遍,你可按官网实际 class 再加
var tableMap = Object.create(null);
var tableCandidates = el.querySelectorAll(
- 'table, .myeditabledivTable, .wordTableHtml, [data-table-id], [data-amt-id], [main-id]'
+ 'table, .myeditabledivTable, .wordTableHtml, [data-table-id], [data-amt-id], [main-id]'
);
tableCandidates.forEach(function (node) {
- var ids = [
- node.getAttribute('data-table-id'),
- node.getAttribute('data-amt-id'),
- node.getAttribute('data-id'),
- node.getAttribute('main-id')
- ].filter(Boolean).map(String);
- ids.forEach(function (id) {
- if (!tableMap[id]) tableMap[id] = node;
- });
+ var ids = [
+ node.getAttribute('data-table-id'),
+ node.getAttribute('data-amt-id'),
+ node.getAttribute('data-id'),
+ node.getAttribute('main-id')
+ ].filter(Boolean).map(String);
+ ids.forEach(function (id) {
+ if (!tableMap[id]) tableMap[id] = node;
+ });
});
-
+
// 3) 全局编号状态
var idToNum = Object.create(null);
var order = [];
var nextNum = 1;
-
+
function assignId(id) {
- id = String(id);
- if (!validRef[id]) return null; // 不存在就不显示
- if (idToNum[id] == null) {
- idToNum[id] = nextNum++;
- order.push(id);
- }
- return idToNum[id];
+ id = String(id);
+ if (!validRef[id]) return null; // 不存在就不显示
+ if (idToNum[id] == null) {
+ idToNum[id] = nextNum++;
+ order.push(id);
+ }
+ return idToNum[id];
}
-
+
function paintCiteNode(node, ids) {
- var nums = [];
- ids.forEach(function (id) {
- var n = assignId(id);
- if (n != null) nums.push(n);
- });
- nums = nums.filter(function (v, i, a) { return a.indexOf(v) === i; })
- .sort(function (a, b) { return a - b; });
-
- if (!nums.length) {
- node.removeAttribute('data-cite-label');
- if (opt.writeInnerHTML) node.innerHTML = '';
- if (opt.hideEmptyCite !== false) node.style.display = 'none';
- return;
- }
-
- var label = formatNums(nums);
- node.setAttribute('data-cite-label', label);
- if (opt.writeInnerHTML) node.innerHTML = '[' + label + ']';
+ var nums = [];
+ ids.forEach(function (id) {
+ var n = assignId(id);
+ if (n != null) nums.push(n);
+ });
+ nums = nums.filter(function (v, i, a) { return a.indexOf(v) === i; })
+ .sort(function (a, b) { return a - b; });
+
+ if (!nums.length) {
+ node.removeAttribute('data-cite-label');
+ if (opt.writeInnerHTML) node.innerHTML = '';
+ if (opt.hideEmptyCite !== false) node.style.display = 'none';
+ return;
+ }
+
+ var label = formatNums(nums);
+ node.setAttribute('data-cite-label', label);
+ if (opt.writeInnerHTML) node.innerHTML = '[' + label + ']';
}
-
+
// 4) 扫描一个子树内 mycite/autocite
function scanCitesInSubtree(node) {
- node.querySelectorAll('mycite, autocite').forEach(function (cite) {
- paintCiteNode(cite, parseIds(cite.getAttribute('data-id')));
- });
+ node.querySelectorAll('mycite, autocite').forEach(function (cite) {
+ paintCiteNode(cite, parseIds(cite.getAttribute('data-id')));
+ });
}
-
+
// 5) 主遍历:遇到 mytable 时“提前注入”对应表格引用
var consumedTableNode = new WeakSet();
-
+
function walk(node) {
- if (!node || node.nodeType !== 1) return;
- var tag = node.tagName.toLowerCase();
-
- // 5.1 引用标签
- if (tag === 'mycite' || tag === 'autocite') {
- paintCiteNode(node, parseIds(node.getAttribute('data-id')));
- return;
- }
-
- // 5.2 mytable 占位:在这里扫描对应表格
- if (tag === 'mytable') {
- var tid = String(node.getAttribute('data-id') || '').trim();
- var tableNode = tid ? tableMap[tid] : null;
- if (!tableNode) {
- // 兜底:按属性再找一次
- tableNode = el.querySelector(
- '[data-table-id="' + tid + '"], [data-amt-id="' + tid + '"], [data-id="' + tid + '"], [main-id="' + tid + '"]'
- );
+ if (!node || node.nodeType !== 1) return;
+ var tag = node.tagName.toLowerCase();
+
+ // 5.1 引用标签
+ if (tag === 'mycite' || tag === 'autocite') {
+ paintCiteNode(node, parseIds(node.getAttribute('data-id')));
+ return;
}
- if (tableNode && !consumedTableNode.has(tableNode)) {
- scanCitesInSubtree(tableNode); // 在 mytable 位置提前计入
- consumedTableNode.add(tableNode); // 后续真实表格处不再重复
+
+ // 5.2 mytable 占位:在这里扫描对应表格
+ if (tag === 'mytable') {
+ var tid = String(node.getAttribute('data-id') || '').trim();
+ var tableNode = tid ? tableMap[tid] : null;
+ if (!tableNode) {
+ // 兜底:按属性再找一次
+ tableNode = el.querySelector(
+ '[data-table-id="' + tid + '"], [data-amt-id="' + tid + '"], [data-id="' + tid + '"], [main-id="' + tid + '"]'
+ );
+ }
+ if (tableNode && !consumedTableNode.has(tableNode)) {
+ scanCitesInSubtree(tableNode); // 在 mytable 位置提前计入
+ consumedTableNode.add(tableNode); // 后续真实表格处不再重复
+ }
+ return;
+ }
+
+ // 5.3 若走到真实表格节点,且已在 mytable 处消费过,则跳过
+ if (consumedTableNode.has(node)) return;
+
+ // 5.4 正常递归
+ for (var ch = node.firstElementChild; ch; ch = ch.nextElementSibling) {
+ walk(ch);
}
- return;
- }
-
- // 5.3 若走到真实表格节点,且已在 mytable 处消费过,则跳过
- if (consumedTableNode.has(node)) return;
-
- // 5.4 正常递归
- for (var ch = node.firstElementChild; ch; ch = ch.nextElementSibling) {
- walk(ch);
- }
}
-
+
walk(el);
-
+
return { idToNum: idToNum, order: order };
- }
+}
function initArticleHtml(htmlData, refs, type) {
document.querySelectorAll('wmath').forEach(el => {