UNPKG

hexo-cnortles-source

Version:

一个HEXO博客的静态资源,可随便使用

243 lines (218 loc) 7.71 kB
console.log( "Codes uses GPL Licence" ) function insertAtCursor(myField, myValue) { //IE 浏览器 if (document.selection) { myField.focus(); sel = document.selection.createRange(); sel.text = myValue; sel.select(); } //FireFox、Chrome等 else if (myField.selectionStart || myField.selectionStart == '0') { var startPos = myField.selectionStart; var endPos = myField.selectionEnd; // 保存滚动条 var restoreTop = myField.scrollTop; myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length); if (restoreTop > 0) { myField.scrollTop = restoreTop; } myField.focus(); myField.selectionStart = startPos + myValue.length; myField.selectionEnd = startPos + myValue.length; } else { myField.value += myValue; myField.focus(); } } let rmf = {}; rmf.showRightMenu = function (isTrue, x = 0, y = 0) { let $rightMenu = $('#rightMenu'); $rightMenu.css('top', x + 'px').css('left', y + 'px'); if (isTrue) { $rightMenu.show(); } else { $rightMenu.hide(); } } rmf.switchDarkMode = function () { const nowMode = document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light' if (nowMode === 'light') { activateDarkMode() saveToLocal.set('theme', 'dark', 2) GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night) } else { activateLightMode() saveToLocal.set('theme', 'light', 2) GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day) } // handle some cases typeof utterancesTheme === 'function' && utterancesTheme() typeof FB === 'object' && window.loadFBComment() window.DISQUS && document.getElementById('disqus_thread').children.length && setTimeout(() => window.disqusReset(), 200) }; rmf.copyWordsLink = function () { let url = window.location.href let txa = document.createElement("textarea"); txa.value = url; document.body.appendChild(txa) txa.select(); document.execCommand("Copy"); document.body.removeChild(txa); Swal.fire("复制成功!"); } rmf.switchReadMode = function () { const $body = document.body $body.classList.add('read-mode') const newEle = document.createElement('button') newEle.type = 'button' newEle.className = 'fas fa-sign-out-alt exit-readmode' $body.appendChild(newEle) function clickFn() { $body.classList.remove('read-mode') newEle.remove() newEle.removeEventListener('click', clickFn) } newEle.addEventListener('click', clickFn) } //复制选中文字 rmf.copySelect = function () { document.execCommand('Copy', false, null); //这里可以写点东西提示一下 已复制 } //回到顶部 rmf.scrollToTop = function () { btf.scrollToDest(0, 500); } rmf.translate = function () { document.getElementById("translateLink").click(); } // 右键菜单事件 document.onkeydown = function (event) { event = (event || window.event); if (event.keyCode == 17) { console.log("你知道的太多了"); return; } } function popupMenu() { //window.oncontextmenu=function(){return false;} window.oncontextmenu = function (event) { if(event.ctrlKey)return true; console.log(event.keyCode) $('.rightMenu-group.hide').hide(); //如果有文字选中,则显示 文字选中相关的菜单项 if (document.getSelection().toString()) { $('#menu-text').show(); } if (document.getElementById('post')) { $('#menu-post').show(); } else { if (document.getElementById('page')) { $('#menu-post').show(); } } var el = window.document.body; el = event.target; var a=/^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\*\+,;=.]+$/ if (a.test(window.getSelection().toString())){ $('#menu-too').show() } if (el.tagName == 'A') { $('#menu-to').show() rmf.open = function () { location.href = el.href } rmf.openWithNewTab = function () { window.open(el.href); } rmf.copyLink = function () { let url = el.href let txa = document.createElement("textarea"); txa.value = url; document.body.appendChild(txa) txa.select(); document.execCommand("Copy"); document.body.removeChild(txa); } } if (el.tagName == 'IMG') { $('#menu-img').show() rmf.openWithNewTab = function () { window.open(el.src); } rmf.click = function () { el.click() } rmf.copyLink = function () { let url = el.src let txa = document.createElement("textarea"); txa.value = url; document.body.appendChild(txa) txa.select(); document.execCommand("Copy"); document.body.removeChild(txa); } } else if (el.tagName == "TEXTAREA" || el.tagName == "INPUT") { $('#menu-paste').show(); rmf.paste = function () { navigator.permissions .query({ name: 'clipboard-read' }) .then(result => { if (result.state == 'granted' || result.state == 'prompt') { //读取剪贴板 navigator.clipboard.readText().then(text => { console.log(text) insertAtCursor(el, text) }) } else { alert('请允许读取剪贴板!') } }) } } let pageX = event.clientX + 10; let pageY = event.clientY; let rmWidth = $('#rightMenu').width(); let rmHeight = $('#rightMenu').height(); if (pageX + rmWidth > window.innerWidth) { pageX -= rmWidth + 10; } if (pageY + rmHeight > window.innerHeight) { pageY -= pageY + rmHeight - window.innerHeight; } rmf.showRightMenu(true, pageY, pageX); return false; }; window.addEventListener('click', function () { rmf.showRightMenu(false); }); } if (!(navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))) { popupMenu() } const box = document.documentElement function addLongtabListener(target, callback) { let timer = 0 // 初始化timer target.ontouchstart = () => { timer = 0 // 重置timer timer = setTimeout(() => { callback(); timer = 0 }, 380) // 超时器能成功执行,说明是长按 } target.ontouchmove = () => { clearTimeout(timer) // 如果来到这里,说明是滑动 timer = 0 } target.ontouchend = () => { // 到这里如果timer有值,说明此触摸时间不足380ms,是点击 if (timer) { clearTimeout(timer) } } } addLongtabListener(box, popupMenu)