插件功能:shift+鼠标悬停,悬浮窗打开折叠节点,同预览链接。
预览折叠内容,减少折叠展开操作。
插件代码
pluginManager.register("dlg_open", {
run() {
function close(i, n=200) {
e = !1,
setTimeout((()=>{
e || (t = !1,
P.hover.close(i.topicData.ky))
}
), n, "hide-hover-popup")
}
let ckey = "shiftKey ctrlKey";
const n = "[nel=dom].node-foldup";
mouseKeyEvt({
selector: n,
key: ckey,
async callback({pageX: n, pageY: a}) {
if (jutil.browser.isMobile())
return;
if ("no" === P.config.topictableHoverPreview && $(this).is("#topic-table-rows *"))
return;
if (await jsleep(10),
!this._mousemove)
return;
const s = this;
this._mousemove = !1,
e = !0;
let r = isEmpty(P.config.hoverSeconds) ? .15 : parseFloat(P.config.hoverSeconds);
ckey && (r = 0),
delayAction((async()=>{
const cur_node_ky = $(this).attr("ky");
var cur_node_data=P.memory.get(cur_node_ky);
P.hover.closeAll(this);
const m_dialog = P.hover.popup(cur_node_data);
if (!m_dialog)
return;
this.dialog = m_dialog;
let pos = "right-middle";
let port = $("[ky=" + cur_node_ky + "] .icon-circle.node-btn");
m_dialog.$view.snapTo(pos, port);
let right_side = m_dialog.$view.offset().left+150;
let left_side = m_dialog.$view.offset().left+20;
let cursor_x = (n>right_side)?right_side:(n<left_side)?left_side:n+5;
m_dialog.$view.offset({
left: cursor_x,
});
m_dialog.$view.offset().left + m_dialog.$view.width() > $(window).width() && m_dialog.$view.offset({
left: $(window).width() - m_dialog.$view.width()
});
const l = $(this).parents(".node,.topic-table-row")
, d = l.width() + l.offset().left;
m_dialog.$view.offset().left > d && m_dialog.$view.offset({
left: d
}),
until((()=>m_dialog.$view && m_dialog.$view.offset().top + m_dialog.$view.height() > $(window).height()), (()=>{
m_dialog.$view.offset({
top: $(window).height() - m_dialog.$view.height() - 15
})
}
), 3e3),
until((()=>m_dialog.$view && m_dialog.$view.offset().top < 0), (()=>{
m_dialog.$view.offset({
top: 3
})
}
), 3e3),
m_dialog.$view.attr("theKy", cur_node_data.ky),
m_dialog.$view.on("mouseenter", (function() {
e = !0;
}
)).on("mouseleave", (function() {
close(m_dialog);
}
))
}
), 1e3 * r)
}
}),
EVT(n, {
mousemove_dlgopenMoveTrue() {
$(this).css("cursor", "context-menu"),
this._mousemove = !0
},
mouseleave_dlgopenPreventPreview(e) {
t === e.target && (t = !1),
this.dialog && close(this.dialog)
},
mousedown_dlgopenHidePreview(e) {
t === e.target && (t = !1),
this.dialog && close(this.dialog, 0)
}
})
}
});