From 218da80cb558dfbc55d369eaa00055cf581d78fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=B5=B5=E5=90=8C=E5=AD=A6?= Date: Sat, 22 Feb 2025 14:41:44 +0800 Subject: [PATCH] =?UTF-8?q?fixed:=20memos=20=E9=80=82=E9=85=8Dpjax?= =?UTF-8?q?=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- themes/Ying/layouts/partials/footer.html | 4 +- themes/Ying/static/css/main.css | 197 +--- themes/Ying/static/js/coco-message.min.js | 1 + themes/Ying/static/js/main.js | 61 - themes/Ying/static/js/memos.js | 28 +- themes/Ying/static/js/mypjax.js | 1269 ++++++++++++++++++++- 6 files changed, 1269 insertions(+), 291 deletions(-) create mode 100644 themes/Ying/static/js/coco-message.min.js diff --git a/themes/Ying/layouts/partials/footer.html b/themes/Ying/layouts/partials/footer.html index 377f1509..64618afb 100644 --- a/themes/Ying/layouts/partials/footer.html +++ b/themes/Ying/layouts/partials/footer.html @@ -26,8 +26,8 @@ - - + + diff --git a/themes/Ying/static/css/main.css b/themes/Ying/static/css/main.css index db69523c..ab275279 100644 --- a/themes/Ying/static/css/main.css +++ b/themes/Ying/static/css/main.css @@ -2246,7 +2246,8 @@ diaoyong { .resimg { display: grid; - gap: 6px; + row-gap: 10px; + column-gap: 6px; width: 60%; grid-template-columns: repeat(2,1fr); margin-top: 5px; @@ -2681,7 +2682,7 @@ blockquote p { .memos-menu { margin-left: 40px; - color: transparent + /*color: transparent*/ } .memos-menu-d { @@ -2749,12 +2750,6 @@ blockquote p { } } -@media(max-width: 900px) and (prefers-color-scheme:dark) { - .bb-list-li { - background:var(--background-dark-color) - } -} - @media(min-width: 900px) { .memos_diaoyong .resimg { width:100%!important; @@ -2771,148 +2766,6 @@ blockquote p { } } -@media(prefers-color-scheme: dark) { - .bb-list-li { - background:var(--background-dark-color) - } - - .memos-xiala { - background-color: #282527 - } - - .memos-xiala .switchUser-btn,.memos-xiala .private-btn,.memos-xiala .oneday-btn,.image-btn,.code-btn { - color: var(--sanji-color) - } - - .memos-more-ico svg { - color: var(--erji-color) - } - - .memos-editor-textarea::placeholder { - color: #726859 - } - - .memos-tag-all { - background: #332e2f - } - - .memos-tag-sc-2 { - color: var(--erji-color) - } - - .memos-editor-body { - border: .5px solid #67534c - } - - .memos-tag-dg { - color: var(--erji-color) - } - - .memos-tag-sc { - color: #999!important; - background: #332e2f!important - } - - .bb-load button { - background: var(--background-dark-color) - } - - .memos_diaoyong_from a { - color: var(--sanji-color) - } - - .memos_diaoyong_time,.memos_diaoyong_laiz a,.memos_diaoyong_more a,.memos_diaoyong_from { - color: var(--erji-color) - } - - .memos_diaoyong_info p,.memos_diaoyong_info a { - color: var(--text-content-dark-color)!important - } - - .talks_comments svg { - color: var(--erji-color) - } - - .talks_comments svg:hover { - color: var(--text-highlight-color) - } - - .datacont pre,blockquote p { - background: #2c2829 - } - - .datacont pre code { - color: var(--sanji-color) - } - - .datacont code { - background: var(--background-dark-body-color); - border: 1px solid var(--background-dark-body-color); - color: var(--text-highlight-color) - } - - blockquote p { - border-left: 4px solid #5f5f5f; - color: #888!important - } - - .memos_diaoyong_info blockquote p { - color: #888!important - } - - .outline svg { - color: var(--erji-color) - } - - .outline svg:hover { - color: var(--sanji-color) - } - - .memos-path-input,.memos-token-input { - color: var(--text-content-dark-color)!important - } - - .editor-selector select { - color: var(--erji-color)!important - } - - .editor-selector::after { - border-color: var(--erji-color)transparent transparent transparent - } - - .memos-editor-content .memos-editor-textarea { - color: var(--text-content-dark-color) - } - - .memos-open-api-submit { - background: var(--background-dark-color)!important; - color: var(--text-highlight-color)!important - } - - .edit-btn,.archive-btn,.delete-btn,.cancel-edit-btn,.memos-image-list { - color: var(--erji-color) - } - - .memos-menu-d,.memos-img-edit { - background-color: #282527 - } - - .cancel-edit-btn { - border: .5px solid #201d1e - } - - #memos-tag-menu { - background-color: #282527!important; - box-shadow: 2px 4px 1rem rgba(0,0,0,.3)!important; - color: #888!important - } - - .tag-option.selected { - background-color: #3e3e3e!important; - color: #bdbdbd!important - } -} - .emoji-selector { display: grid; grid-template-columns: repeat(auto-fill,minmax(32px,1fr)); @@ -3019,16 +2872,6 @@ blockquote p { margin-right: 4px } -@media(prefers-color-scheme: dark) { - .sidebar-posts-title a { - color:var(--text-content-dark-color) - } - - .sidebar-biaot,.index-laodao { - color: var(--erji-color) - } -} - .about-img { position: relative } @@ -3259,20 +3102,6 @@ blockquote p { transform: scale(1.05) } -@media(prefers-color-scheme: dark) { - .archive-time,.archive-time-index { - color:var(--erji-color) - } - - .posts_list_article,.archives_one,.posts_list_article-index { - background: var(--background-dark-color) - } - - .posts-description { - color: #b7b7ab - } -} - .page-tiaozhuan .header,.page-tiaozhuan .footer-background { display: none } @@ -3333,24 +3162,6 @@ blockquote p { display: inline-block } -@media(prefers-color-scheme: dark) { - .tiaozhuan-all { - background:var(--background-dark-color)url(https://img.koobai.com/tiaozhuandark.webp)no-repeat 50%/cover; - color: #acacac - } - - .tiaozhuan-title { - color: #ddd - } -} - -@font-face { - font-family: JetBrainsMono; - font-display: swap; - src: url(https://img.koobai.com/fonts/JetBrainsMono-Regular.woff2)format("woff2"); - unicode-range: U+30-39,U+41-5A,U+61-7A -} - @media(min-width: 700px) { body { padding:0 30px @@ -3372,7 +3183,7 @@ blockquote p { @media(min-width: 900px) { .img-hide,.retu-hide { - transform: translateY(35%); + /*transform: translateY(35%);*/ transition: opacity .4s ease,transform .8s ease } diff --git a/themes/Ying/static/js/coco-message.min.js b/themes/Ying/static/js/coco-message.min.js new file mode 100644 index 00000000..ad88ed98 --- /dev/null +++ b/themes/Ying/static/js/coco-message.min.js @@ -0,0 +1 @@ +"use strict";function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}!function(o,t){"object"===("undefined"==typeof exports?"undefined":_typeof(exports))&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(o=o||self,o.cocoMessage=t())}(void 0,function(){function o(o,t){var e=document.createElement("div");for(var n in o){var s=o[n];"className"==n?(n="class",e.setAttribute(n,s)):"_"==n[0]&&e.addEventListener(n.slice(1),s)}if("string"==typeof t)e.innerHTML=t;else if("object"==_typeof(t)&&t.tagName)e.appendChild(t);else if(t)for(var i=0;i-1}function s(o,t){var e=o.className||"";if(n(e,t)){var s=e.split(/\s+/),i=s.indexOf(t);s.splice(i,1),o.className=s.join(" ")}""===o.className&&o.removeAttribute("class")}function i(){return r(arguments,"info")}function r(o,t){var e={};for(var n in h)e[n]=h[n];for(var s=0;s':""}function f(o,n){o&&(t(o,{padding:0,height:0}),e(o.children[0],"coco-msg-fade-out"),n&&n(),setTimeout(function(){if(o){for(var t=!1,e=0;e\n ',success:'\n \n ',warning:'\n \n ',error:'\n \n ',loading:'\n
\n \n \n \n
\n '}}function d(o){o&&o.parentNode.removeChild(o)}function g(){for(var o=0;o Math.random() - 0.5); - - function animate(article, delay) { - setTimeout(() => { - article.classList.add('visible'); - }, delay); - } - - const options = { - rootMargin: '0px 0px -70px 0px', - }; - - const observer = new IntersectionObserver((entries) => { - entries.forEach((entry, index) => { - if (entry.isIntersecting) { - // 类名 retu-hide 延迟 100 默认 img-hide 延迟 8,实现错落效果 - const delay = entry.target.classList.contains('retu-hide') ? index * 100 : index * 8; - animate(entry.target, delay); - observer.unobserve(entry.target); - } - }); - }, options); - - shuffledArticles.forEach((article) => { - observer.observe(article); - }); -} - - -function initEditor() { - const loadEditorBtn = document.getElementById("loadEditorBtn"); - const memosEditor = document.querySelector(".memos-editor"); - const editorBody = document.querySelector('.index-laodao'); - - if (loadEditorBtn) { - loadEditorBtn.addEventListener("click", function () { - // 切换编辑器显示状态 - getEditor != "show" ? hasMemosOpenId() : ''; - memosEditor.classList.toggle("d-none"); - - // 保存编辑器显示状态到 localStorage - if (window.localStorage) { - const isHidden = memosEditor.classList.contains("d-none"); - window.localStorage.setItem("memos-editor-display", isHidden ? "hide" : "show"); - getEditor = window.localStorage.getItem("memos-editor-display"); - } - - // 平滑滚动到 .index-laodao - if (editorBody && !memosEditor.classList.contains("d-none")) { - editorBody.scrollIntoView({ behavior: 'smooth' }); - } - }); - } -} - -// 初始化编辑器逻辑 -initEditor(); - diff --git a/themes/Ying/static/js/memos.js b/themes/Ying/static/js/memos.js index 34dc1c6e..27c88882 100644 --- a/themes/Ying/static/js/memos.js +++ b/themes/Ying/static/js/memos.js @@ -254,7 +254,7 @@ function updateHTMl(data,mode){ // 在动画执行之前调整 z-index document.querySelector('.memos-more-ico').style.zIndex = '1'; // 在DOM加载完毕后执行滑动加载动画 - animateSummaries(); + // animateSummaries(); if(document.querySelector('button.button-load')) document.querySelector('button.button-load').textContent = '再来几篇'; } @@ -316,7 +316,7 @@ function loadArtalk(memo_id) { pageTitle: '', server: 'https://artalk.5b2.cn/', site: '优世界', - darkMode: 'auto' + darkMode: false }); } else { commentDiv.classList.add('hidden'); @@ -471,18 +471,17 @@ function getEditIcon() { getEditor == "show" ? hasMemosOpenId() : ''; }; - loadEditorBtn.addEventListener("click", function () { + $('.load-memos-editor').on('click', function() { getEditor != "show" ? hasMemosOpenId() : ''; document.querySelector(".memos-editor").classList.toggle("d-none"); window.localStorage && window.localStorage.setItem("memos-editor-display", document.querySelector(".memos-editor").classList.contains("d-none") ? "hide" : "show"); getEditor = window.localStorage && window.localStorage.getItem("memos-editor-display"); - // 点击唠叨一下,平滑滚动到.index-laodao - let editorBody = document.querySelector('.index-laodao'); - if (editorBody && !document.querySelector(".memos-editor").classList.contains("d-none")) { - editorBody.scrollIntoView({ behavior: 'smooth' }); - } - + // 点击唠叨一下,平滑滚动到.index-laodao + let editorBody = document.querySelector('.index-laodao'); + if (editorBody && !document.querySelector(".memos-editor").classList.contains("d-none")) { + editorBody.scrollIntoView({ behavior: 'smooth' }); + } }); //标签数据 @@ -1249,14 +1248,3 @@ function handleTextareaInput() { handleTextareaInput(); document.querySelector('.memos-editor-textarea').addEventListener('input', handleTextareaInput); - -//memos、评论链接跳转中间页 -document.body.addEventListener('click', function(e) { - let target = e.target.closest('.atk-comment-wrap a, .datacont a'); - if (target && !target.href.includes('usj.cc')) { - e.preventDefault(); - let encodedUrl = btoa(target.href); - let url = '/tiaozhuan?target=' + encodedUrl; - window.open(url, '_blank'); - } -}); diff --git a/themes/Ying/static/js/mypjax.js b/themes/Ying/static/js/mypjax.js index 2f47dc75..1a73310b 100644 --- a/themes/Ying/static/js/mypjax.js +++ b/themes/Ying/static/js/mypjax.js @@ -388,7 +388,7 @@ function reload_memos(){ // 在动画执行之前调整 z-index document.querySelector('.memos-more-ico').style.zIndex = '1'; // 在DOM加载完毕后执行滑动加载动画 - animateSummaries(); + // animateSummaries(); if(document.querySelector('button.button-load')) document.querySelector('button.button-load').textContent = '再来几篇'; } @@ -450,7 +450,7 @@ function reload_memos(){ pageTitle: '', server: 'https://artalk.5b2.cn/', site: '优世界', - darkMode: 'auto' + darkMode: false }); } else { commentDiv.classList.add('hidden'); @@ -605,7 +605,7 @@ function reload_memos(){ getEditor == "show" ? hasMemosOpenId() : ''; }; - loadEditorBtn.addEventListener("click", function () { + $('.load-memos-editor').on('click', function() { getEditor != "show" ? hasMemosOpenId() : ''; document.querySelector(".memos-editor").classList.toggle("d-none"); window.localStorage && window.localStorage.setItem("memos-editor-display", document.querySelector(".memos-editor").classList.contains("d-none") ? "hide" : "show"); @@ -616,7 +616,6 @@ function reload_memos(){ if (editorBody && !document.querySelector(".memos-editor").classList.contains("d-none")) { editorBody.scrollIntoView({ behavior: 'smooth' }); } - }); //标签数据 @@ -1384,16 +1383,6 @@ function reload_memos(){ document.querySelector('.memos-editor-textarea').addEventListener('input', handleTextareaInput); -//memos、评论链接跳转中间页 - document.body.addEventListener('click', function(e) { - let target = e.target.closest('.atk-comment-wrap a, .datacont a'); - if (target && !target.href.includes('usj.cc')) { - e.preventDefault(); - let encodedUrl = btoa(target.href); - let url = '/tiaozhuan?target=' + encodedUrl; - window.open(url, '_blank'); - } - }); } // 设置pjax预先加载代码 function pjax_reload() { @@ -1458,7 +1447,1257 @@ document.addEventListener("pjax:complete", function () { loadBarrager() } // 重载memos - reload_memos() + var hasLogin = 0 //没登录隐藏编辑归档按钮 + + var memosData = { + dom:'#memos', + } + + var bbMemo = { + memos: 'https://memos.usj.cc/', + limit: '8', + creatorId: '1', + domId: '#bber', + }; + if(typeof(bbMemos) !=="undefined"){ + for(var key in bbMemos) { + if(bbMemos[key]){ + bbMemo[key] = bbMemos[key]; + } + } + } + function loadCssCode(code){ + var style = document.createElement('style'); + style.type = 'text/css'; + style.rel = 'stylesheet'; + style.appendChild(document.createTextNode(code)); + var head = document.getElementsByTagName('head')[0]; + head.appendChild(style); + } + + var limit = bbMemo.limit + var memos = bbMemo.memos + var mePage = 1,offset = 0,nextLength = 0,nextDom=''; + var bbDom = document.querySelector(bbMemo.domId); + var load = '
' +// 增加memos编辑及归档 + var memosOpenId = window.localStorage && window.localStorage.getItem("memos-access-token"); + var memosPath = window.localStorage && window.localStorage.getItem("memos-access-path"); + var getEditor = window.localStorage && window.localStorage.getItem("memos-editor-display"); + var memoChangeDate = 0; + var getSelectedValue = window.localStorage && window.localStorage.getItem("memos-visibility-select") || "PUBLIC"; + + + if(bbDom){ + getFirstList() //首次加载数据 + meNums() //加载总数 + var btn = document.querySelector("button.button-load"); + btn.addEventListener("click", function () { + btn.textContent= '加载中……'; + updateHTMl(nextDom) + if(nextLength < limit){ //返回数据条数小于限制条数,隐藏 + document.querySelector("button.button-load").remove() + return + } + getNextList() + }); + } + function getFirstList(){ + bbDom.insertAdjacentHTML('afterend', load); + let tagHtml = `
` // TAG筛选 memos搜索 + bbDom.insertAdjacentHTML('beforebegin', tagHtml); // TAG筛选 + var bbUrl = memos+"api/v1/memo?creatorId="+bbMemo.creatorId+"&rowStatus=NORMAL&limit="+limit; + let memosOpenId = window.localStorage && window.localStorage.getItem("memos-access-token"); + let oneDay = window.localStorage && window.localStorage.getItem("memos-oneday"); + if(memosOpenId && memosOpenId != null){ + fetch(bbUrl,{ + headers:{ + 'Authorization': `Bearer ${memosOpenId}`, + 'Content-Type': 'application/json', + 'Cache-Control': 'no-cache', + }, + cache: 'no-store', + }).then(res => res.json()).then( resdata =>{ + updateHTMl(resdata); + var nowLength = resdata.length; + if(nowLength < limit){ //返回数据条数小于 limit 则直接移除“加载更多”按钮,中断预加载 + document.querySelector("button.button-load").remove() + return + } + mePage++ + offset = limit*(mePage-1) + getNextList() + }); + if(oneDay == "open"){ + reloadList("ONEDAY"); + } + }else{ + fetch(bbUrl).then(res => res.json()).then( resdata =>{ + updateHTMl(resdata); + var nowLength = resdata.length; + if(nowLength < limit){ //返回数据条数小于 limit 则直接移除“加载更多”按钮,中断预加载 + document.querySelector("button.button-load").remove() + return + } + mePage++ + offset = limit*(mePage-1) + getNextList() + }); + } + } +//预加载下一页数据 + function getNextList(){ + var bbUrl = memos+"api/v1/memo?creatorId="+bbMemo.creatorId+"&rowStatus=NORMAL&limit="+limit+"&offset="+offset; + fetch(bbUrl).then(res => res.json()).then( resdata =>{ + nextDom = resdata; + nextLength = nextDom.length + mePage++ + offset = limit*(mePage-1) + if(nextLength < 1){ //返回数据条数为 0 ,隐藏 + document.querySelector("button.button-load").remove() + return + } + }) + } + +//加载总 Memos 数 + function meNums() { + var bbLoad = document.querySelector('.bb-load'); + var bbUrl = memos + "api/v1/memo/stats?creatorId=" + bbMemo.creatorId; + fetch(bbUrl).then(res => res.json()).then(resdata => { + if (Array.isArray(resdata)) { + // var allnums = ' ( 目前共唠叨了 ' + resdata.length + ' 条 )'; + //bbLoad.insertAdjacentHTML('afterend', allnums); + } + }); + } + +// 插入 html + function updateHTMl(data,mode){ + var result="",resultAll=""; + //登录显示编辑归档按钮 + if(memosOpenId && getEditor == "show"){ + hasLogin = 1 + } + const TAG_REG = /#([^#\s!.,;:?"'()]+)(?= )/g + , IMG_REG = /\!\[(.*?)\]\((.*?)\)/g //content 内 md 格式图片 + , LINK_REG = /\[(.*?)\]\((.*?)\)/g //链接新窗口打开 + marked.setOptions({ + breaks: false, + smartypants: false, + langPrefix: 'language-', + headerIds: false, + mangle: false + }); + for(var i=0;i < data.length;i++){ + var memoString = JSON.stringify(data[i]).replace(/"/g, '"'); + var memo_id = data[i].id; //评论调用 + var memoVis = data[i].visibility + var bbContREG = data[i].content + .replace(TAG_REG, "") + .replace(IMG_REG, '') + .replace(LINK_REG, '$1') + bbContREG = marked.parse(bbContREG) + + //解析 content 内 md 格式图片 + var IMG_ARR = data[i].content.match(IMG_REG) || '',IMG_ARR_Grid=''; + if(IMG_ARR){ + var IMG_ARR_Length = IMG_ARR.length,IMG_ARR_Url = ''; + if(IMG_ARR_Length !== 1){var IMG_ARR_Grid = " grid grid-"+IMG_ARR_Length} + IMG_ARR.forEach(item => { + let imgSrc = item.replace(/!\[.*?\]\((.*?)\)/g,'$1') + IMG_ARR_Url += '' + }); + bbContREG += '
'+IMG_ARR_Url+'
'; + } + //TAG 解析 + var tagArr = data[i].content.match(TAG_REG); + var memosTag = ''; + + if (tagArr) { + memosTag = tagArr.map(function(tag) { + var tagText = String(tag).replace(/[#]/g, ''); + return '
#' + tagText + '
'; + }).join(''); + } else { + memosTag = '
#日常
'; + } + + //解析内置资源文件 + if(data[i].resourceList && data[i].resourceList.length > 0){ + var resourceList = data[i].resourceList; + var imgUrl='',resUrl='',resImgLength = 0; + for(var j=0;j < resourceList.length;j++){ + var restype = resourceList[j].type.slice(0,5) + var resexlink = resourceList[j].externalLink + var resLink = '',fileId='' + if(resexlink){ + resLink = resexlink + }else{ + fileId = resourceList[j].publicId || resourceList[j].filename + resLink = memos+'o/r/'+resourceList[j].id //+'/'+fileId + } + if(restype == 'image'){ + imgUrl += '' + resImgLength = resImgLength + 1 + } + if(restype !== 'image'){ + resUrl += ''+resourceList[j].filename+'' + } + } + if(imgUrl){ + var resImgGrid = "" + if(resImgLength !== 1){var resImgGrid = "grid grid-"+resImgLength} + bbContREG += '
'+imgUrl+'
' + } + if(resUrl){ + bbContREG += '

'+resUrl+'

' + } + } + result += ` +
  • +
    +
    ${moment(data[i].createdTs * 1000).twitterLong()}
    ` + + if(hasLogin !== 0){ + result += `
    +
    ...
    +
    +
    修改
    +
    归档
    +
    删除
    +
    +
    + ` + } + + result += `
    +
    ${bbContREG}
    +
    +
    ${memosTag}
    ` + + if(memoVis == "PUBLIC"){ + result += `
    + +
    +
    + +
  • `; + }else if(memoVis !== "PUBLIC"){ + result += `
    `; + }else{ + result += ``; + } + } // end for + if(mode == "ONEDAY"){ + var bbBefore = "
    • "; + var bbAfter = "
  • "; + resultAll = bbBefore + result + bbAfter; + bbDom.insertAdjacentHTML('afterbegin', resultAll); + }else{ + var bbBefore = "
      "; + var bbAfter = "
    "; + resultAll = bbBefore + result + bbAfter; + bbDom.insertAdjacentHTML('beforeend', resultAll); + + // 在动画执行之前调整 z-index + document.querySelector('.memos-more-ico').style.zIndex = '1'; + // 在DOM加载完毕后执行滑动加载动画 + // animateSummaries(); + + if(document.querySelector('button.button-load')) document.querySelector('button.button-load').textContent = '再来几篇'; + } + } + +// TAG 筛选 + function getTagNow(e){ + //console.log(e.innerHTML) + let tagName = e.innerHTML.replace('#','') + let domClass = document.getElementById("bber") + window.scrollTo({ + top: domClass.offsetTop - 30, + behavior: "smooth" + }); + let tagHtmlNow = `
    标签筛选:
    ${e.innerHTML}
    ` + document.querySelector('#tag-list').innerHTML = tagHtmlNow + let bbUrl = memos+"api/v1/memo?creatorId="+bbMemo.creatorId+"&tag="+tagName+"&limit=20"; + fetch(bbUrl).then(res => res.json()).then( resdata =>{ + document.querySelector(bbMemo.domId).innerHTML = "" + if(document.querySelector("button.button-load")) document.querySelector("button.button-load").remove() + updateHTMl(resdata) + }) + } + +//增加memos评论 + function loadArtalk(memo_id) { + const commentDiv = document.getElementById('memo_' + memo_id); + const commentBtn = document.getElementById('btn_memo_' + memo_id); + const allCommentDivs = document.querySelectorAll("[id^='memo_']"); + const allCommentBtns = document.querySelectorAll("[id^='btn_memo_']"); + + if (commentDiv.classList.contains('hidden')) { + // 收起其他评论 + for (let i = 0; i < allCommentDivs.length; i++) { + if (allCommentDivs[i] !== commentDiv) { + allCommentDivs[i].classList.add('hidden'); + } + } + + commentDiv.classList.remove('hidden'); + //增加评论平滑定位 + const commentLi = document.getElementById(memo_id); + const commentLiPosition = commentLi.getBoundingClientRect().top + window.pageYOffset; + const offset = commentLiPosition - 3.5 * parseFloat(getComputedStyle(document.documentElement).fontSize); + if ('scrollBehavior' in document.documentElement.style) { + // 支持平滑滚动的情况下,使用 window.scrollTo + window.scrollTo({ + top: offset, + behavior: 'smooth' + }); + } else { + // 不支持平滑滚动的情况下,使用滚动容器的平滑滚动方法 + // 例如:document.documentElement.scrollTop = offset; + // 或者使用第三方的平滑滚动库 + } + const artalk = Artalk.init({ + el: '#memo_' + memo_id, + pageKey: '/m/' + memo_id, + pageTitle: '', + server: 'https://artalk.5b2.cn/', + site: '优世界', + darkMode: false + }); + } else { + commentDiv.classList.add('hidden'); + } + } + +//调用coco-message插件暗黑模式 + const darkModeMatcher = window.matchMedia('(prefers-color-scheme: dark)'); + darkModeMatcher.addEventListener('change', handleDarkModeChange); + function handleDarkModeChange(e) { + if (e.matches) { + document.documentElement.classList.add('dark'); + } else { + document.documentElement.classList.remove('dark'); + } + } + handleDarkModeChange(darkModeMatcher); + +// memos-editor唠叨编辑开始 + var memosDom = document.querySelector(memosData.dom); + var editIcon = "
    唠叨一下
    "; + var memosEditorCont = ` +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    + + +
    +
    保存
    +
    +
    +
    +
    +
    +`; + const element = document.querySelector('.index-laodao-titile'); // 选择器是你想要操作的元素的选择器 + element.insertAdjacentHTML('afterend', editIcon); + memosDom.insertAdjacentHTML('afterbegin',memosEditorCont); + + var memosEditorInner = document.querySelector(".memos-editor-inner"); + var memosEditorOption = document.querySelector(".memos-editor-option"); + var memosRadomCont = document.querySelector(".memos-random"); + + var codeBtn = document.querySelector(".code-btn"); + var codesingle = document.querySelector(".code-single"); + var linkBtn = document.querySelector(".link-btn"); + var linkimg = document.querySelector(".link-img"); + var privateBtn = document.querySelector(".private-btn"); + var oneDayBtn = document.querySelector(".oneday-btn"); + var switchUserBtn = document.querySelector(".switchUser-btn"); + var loadEditorBtn = document.querySelector(".load-memos-editor"); + var submitApiBtn = document.querySelector(".submit-openapi-btn"); + var submitMemoBtn = document.querySelector(".submit-memos-btn"); + var memosVisibilitySelect = document.querySelector(".select-memos-value"); + var pathInput = document.querySelector(".memos-path-input"); + var tokenInput = document.querySelector(".memos-token-input"); + var uploadImageInput = document.querySelector(".memos-upload-image-input"); + var memosTextarea = document.querySelector(".memos-editor-textarea"); + var editMemoDom = document.querySelector(".edit-memos"); + var editMemoBtn = document.querySelector(".edit-memos-btn"); + var cancelEditBtn = document.querySelector(".cancel-edit-btn"); + var biaoqing = document.querySelector(".biao-qing"); + + document.addEventListener("DOMContentLoaded", () => { + getEditIcon(); + }); + + function getEditIcon() { + let memosContent = '',memosVisibility = '',memosResource = [],memosRelation=[]; + let memosCount = window.localStorage && window.localStorage.getItem("memos-response-count"); + let memosPath = window.localStorage && window.localStorage.getItem("memos-access-path"); + let memosOpenId = window.localStorage && window.localStorage.getItem("memos-access-token"); + let getEditor = window.localStorage && window.localStorage.getItem("memos-editor-display"); + let isHide = getEditor === "hide"; + + let getSelectedValue = window.localStorage && window.localStorage.getItem("memos-visibility-select") || "PUBLIC"; + memosVisibilitySelect.value = getSelectedValue; + + window.localStorage && window.localStorage.setItem("memos-resource-list", JSON.stringify(memosResource)); + window.localStorage && window.localStorage.setItem("memos-relation-list", JSON.stringify(memosRelation)); + + memosTextarea.addEventListener('input', (e) => { + memosTextarea.style.height = 'inherit'; + memosTextarea.style.height = e.target.scrollHeight + 'px'; + }); + + if (getEditor !== null) { + document.querySelector(".memos-editor").classList.toggle("d-none",isHide); + getEditor == "show" ? hasMemosOpenId() : ''; + }; + + $('.load-memos-editor').on('click', function() { + getEditor != "show" ? hasMemosOpenId() : ''; + document.querySelector(".memos-editor").classList.toggle("d-none"); + window.localStorage && window.localStorage.setItem("memos-editor-display", document.querySelector(".memos-editor").classList.contains("d-none") ? "hide" : "show"); + getEditor = window.localStorage && window.localStorage.getItem("memos-editor-display"); + + // 点击唠叨一下,平滑滚动到.index-laodao + let editorBody = document.querySelector('.index-laodao'); + if (editorBody && !document.querySelector(".memos-editor").classList.contains("d-none")) { + editorBody.scrollIntoView({ behavior: 'smooth' }); + } + }); + + //标签数据 + document.addEventListener("DOMContentLoaded", function () { + memosPath = window.localStorage && window.localStorage.getItem("memos-access-path"); + memosOpenId = window.localStorage && window.localStorage.getItem("memos-access-token"); + if (memosPath && memosOpenId) { + document.querySelector(".memos-tag-list").classList.remove("d-none"); + } + }); + + //代码 + codeBtn.addEventListener("click", function () { + let memoCode = "```\n\n```"; + insertValue(memoCode,"",4); + }); + + //代码单反引号 + codesingle.addEventListener("click", function () { + insertValue("``","`",1) + }); + + //超级链接 + linkBtn.addEventListener("click", function () { + insertValue("[]()","[",1) + }); + + //图片外链引用 + linkimg.addEventListener("click", function () { + insertValue("![]()","!",1) + }); + + //以上四项的光标定位 + function insertValue(text,wrap,back) { + memosTextarea.focus(); + const start = memosTextarea.selectionStart; + const end = memosTextarea.selectionEnd; + const selectedText = memosTextarea.value.substring(start, end); + if(selectedText == ""){ + memosTextarea.value = memosTextarea.value.substring(0, start) + text + memosTextarea.value.substring(end); + memosTextarea.selectionStart = start + text.length - back; + memosTextarea.selectionEnd = start + text.length - back; + }else{ + let wrapSelText; + if( wrap == "`" ){ + wrapSelText = "`" + selectedText + "`"; + back = 0; + } + if( wrap == "[" ){ + wrapSelText = "[" + selectedText + "]()"; + } + if( wrap == "!" ){ + wrapSelText = "![" + selectedText + "]()"; + } + const newText = memosTextarea.value.substring(0, start) + wrapSelText + memosTextarea.value.substring(end); + memosTextarea.value = newText; + memosTextarea.selectionStart = start + wrapSelText.length - back; + memosTextarea.selectionEnd = end + wrapSelText.length - back - selectedText.length; + } + } + + memosVisibilitySelect.addEventListener('change', function() { + memoNowSelct = window.localStorage && window.localStorage.getItem("memos-visibility-select"); + var selectedValue = memosVisibilitySelect.value; + window.localStorage && window.localStorage.setItem("memos-visibility-select",selectedValue); + if(memoNowSelct == "PRIVATE" && selectedValue == "PUBLIC"){ + memoChangeDate = 1; + } + }); + + //私有模式筛选浏览 + privateBtn.addEventListener("click", async function () { + if (!privateBtn.classList.contains("private")) { + privateBtn.classList.add("private") + memosVisibilitySelect.value = "PRIVATE" + window.localStorage && window.localStorage.setItem("memos-mode", "NOPUBLIC"); + reloadList("NOPUBLIC") + cocoMessage.success("已进入私有浏览") + }else{ + memosVisibilitySelect.value = "PUBLIC" + window.localStorage && window.localStorage.setItem("memos-mode", ""); + privateBtn.classList.remove("private") + reloadList() + cocoMessage.success("已退出私有浏览") + } + }); + + //开启回忆一条 + oneDayBtn.addEventListener("click", async function () { + let oneDay = window.localStorage && window.localStorage.getItem("memos-oneday"); + if (oneDay == null ) { + window.localStorage && window.localStorage.setItem("memos-oneday","open"); + cocoMessage.success("已开启回忆,请刷新页面") + }else{ + window.localStorage && window.localStorage.removeItem("memos-oneday"); + reloadList() + cocoMessage.success("已退出回忆") + } + }); + + //图片上传 + uploadImageInput.addEventListener('change', () => { + memosPath = window.localStorage && window.localStorage.getItem("memos-access-path"); + memosOpenId = window.localStorage && window.localStorage.getItem("memos-access-token"); + if (memosPath && memosOpenId) { + let filesData = uploadImageInput.files[0]; + if (uploadImageInput.files.length !== 0){ + uploadImage(filesData); + cocoMessage.info('图片上传中……'); + } + } + }); + + async function uploadImage(data) { + let memosResourceListNow = JSON.parse(window.localStorage && window.localStorage.getItem("memos-resource-list")) || []; + let imageData = new FormData(); + let blobUrl = `${memosPath}/api/v1/resource/blob`; + imageData.append('file', data, data.name) + let resp = await fetch(blobUrl, { + method: "POST", + body: imageData, + headers: { + 'Authorization': `Bearer ${memosOpenId}` + } + }) + let res = await resp.json(); + if(res.id){ + let resexlink = res.externalLink; + let imgLink = '', fileId = ''; + if (resexlink) { + imgLink = resexlink + } else { + fileId = res.publicId || res.filename + imgLink = `${memosPath}/o/r/${res.id}`;///${fileId} + } + let imageList = ""; + imageList += `
    ${fileId}
    `; + document.querySelector(".memos-image-list").insertAdjacentHTML('afterbegin', imageList); + cocoMessage.success( + '上传成功', + ()=>{ + memosResourceListNow.push(res.id); + window.localStorage && window.localStorage.setItem("memos-resource-list", JSON.stringify(memosResourceListNow)); + imageListDrag() + }) + } + }; + + switchUserBtn.addEventListener("click", function () { + memosPath = window.localStorage && window.localStorage.getItem("memos-access-path"); + memosOpenId = window.localStorage && window.localStorage.getItem("memos-access-token"); + if (memosPath && memosOpenId) { + memosEditorOption.classList.remove("d-none"); + memosEditorInner.classList.add("d-none"); + memosRadomCont.innerHTML = ''; + tokenInput.value = ''; + pathInput.value = ''; + } + }); + + submitApiBtn.addEventListener("click", function () { + if(tokenInput.value == null || tokenInput.value == ''){ + cocoMessage.info('请输入 Token'); + }else if(pathInput.value == null || pathInput.value == ''){ + cocoMessage.info('请输入 Memos 地址'); + }else{ + getMemosData(pathInput.value,tokenInput.value); + } + }); + + submitMemoBtn.addEventListener("click", function () { + memosContent = memosTextarea.value; + memosVisibility = memosVisibilitySelect.value; + memosResource = window.localStorage && JSON.parse(window.localStorage.getItem("memos-resource-list")); + memosOpenId = window.localStorage && window.localStorage.getItem("memos-access-token"); + let TAG_REG = /(?<=#)([^#\s!.,;:?"'()]+)(?= )/g; + let memosTag = memosContent.match(TAG_REG); + let hasContent = memosContent.length !== 0; + if (memosOpenId && hasContent) { + let memoUrl = `${memosPath}/api/v1/memo`; + let memoBody = {content:memosContent,relationList:memosRelation,resourceIdList:memosResource,visibility:memosVisibility} + fetch(memoUrl, { + method: 'POST', + body: JSON.stringify(memoBody), + headers: { + 'Authorization': `Bearer ${memosOpenId}`, + 'Content-Type': 'application/json' + } + }).then(function (res) { + if (res.status == 200) { + if (memosTag !== null) { + let memoTagUrl = `${memosPath}/api/v1/tag`; + (async () => { + for await (const i of memosTag) { + const response = await fetch(memoTagUrl, { + method: 'POST', + headers: { + 'Authorization': `Bearer ${memosOpenId}`, + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + name: i + }) + }); + } + })(); + } + cocoMessage.success( + '唠叨成功', + () => { + document.querySelector(".memos-image-list").innerHTML = ''; + window.localStorage && window.localStorage.removeItem("memos-resource-list"); + window.localStorage && window.localStorage.removeItem("memos-relation-list"); + memosTextarea.value = ''; + memosTextarea.style.height = 'inherit'; + let memosMode = window.localStorage && window.localStorage.getItem("memos-mode"); + reloadList(memosMode) + }) + } + }); + + }else if(!hasContent){ + cocoMessage.info('内容不能为空'); + }else{ + cocoMessage.info( + '请设置 Access Tokens', + () => { + memosEditorInner.classList.add("d-none"); + memosEditorOption.classList.remove("d-none"); + } + ); + } + }); + + function hasMemosOpenId() { + if (!memosOpenId) { + memosEditorOption.classList.remove("d-none"); + cocoMessage.info('请设置 Access Tokens'); + }else{ + const tagUrl = `${memosPath}/api/v1/tag`; + const response = fetch(tagUrl,{ + method: 'GET', + headers: { + 'Authorization': `Bearer ${memosOpenId}`, + 'Content-Type': 'application/json' + } + }).then(response => response.json()).then(resdata => { + return resdata + }).then(response => { + let taglist = ""; + response.map((t)=>{ + taglist += ``; + }) + document.querySelector(".memos-tag-list").innerHTML = taglist; + // cocoMessage.success('准备就绪'); + memosEditorInner.classList.remove("d-none"); + memosEditorOption.classList.add("d-none"); + memosRadomCont.classList.remove("d-none"); + }).catch(err => { + memosEditorOption.classList.remove("d-none"); + cocoMessage.error('Access Tokens 有误,请重新输入!'); + }); + } + } + + function random(a,b) { + let choices = b - a + 1; + return Math.floor(Math.random() * choices + a); + } + + async function getMemosData(p,t) { + try { + let response = await fetch(`${p}/api/v1/memo`,{ + method: 'GET', + headers: { + 'Authorization': `Bearer ${t}`, + 'Content-Type': 'application/json' + } + }); + if (response.ok) { + let resdata = await response.json(); + if (resdata) { + memosCount = resdata.length; + window.localStorage && window.localStorage.setItem("memos-access-path", p); + window.localStorage && window.localStorage.setItem("memos-access-token", t); + window.localStorage && window.localStorage.setItem("memos-response-count", memosCount); + cocoMessage.success('保存成功', () => { + memosPath = window.localStorage && window.localStorage.getItem("memos-access-path"); + memosOpenId = window.localStorage && window.localStorage.getItem("memos-access-token"); + location.reload(); + hasMemosOpenId(); + }); + } + } else { + cocoMessage.error('出错了,再检查一下吧!'); + } + } catch (error) { + cocoMessage.error('出错了,再检查一下吧!'); + } + } + + async function updateAvatarUrl(e) { + try { + let response = await fetch(`${memosPath}/api/v1/user/me`,{ + method: 'GET', + headers: { + 'Authorization': `Bearer ${memosOpenId}`, + 'Content-Type': 'application/json' + } + }); + if (response.ok) { + let resdata = await response.json(); + e.forEach(item => { + item.avatarUrl = resdata.avatarUrl; + }); + updateRadom(e); + } else { + cocoMessage.error('出错了,再检查一下吧!'); + } + } catch (error) { + cocoMessage.error('出错了,再检查一下吧!'); + } + } + } + +//发布框 TAG + function setMemoTag(e){ + let memoTag = e.textContent + " "; + memosTextarea.value += memoTag; + } + + function deleteImage(e){ + if(e){ + let memoId = e.getAttribute("data-id") + let memosResource = window.localStorage && JSON.parse(window.localStorage.getItem("memos-resource-list")); + let memosResourceList = memosResource.filter(function(item){ return item != memoId}); + window.localStorage && window.localStorage.setItem("memos-resource-list", JSON.stringify(memosResourceList)); + e.remove() + } + } + +//图片上传缩略图拖动顺序 + function imageListDrag(){// 获取包含所有图像元素的父元素 + const imageList = document.querySelector('.memos-image-list'); + // 存储被拖动的元素 + let draggedItem = null; + let memosResourceList; + // 为每个图像元素添加拖动事件监听器 + imageList.querySelectorAll('.imagelist-item').forEach(item => { + item.draggable = true; + // 当拖动开始时 + item.addEventListener('dragstart', function(e) { + // 存储被拖动的元素 + draggedItem = this; + memosResourceList = []; + }); + // 当拖动元素进入目标区域时 + item.addEventListener('dragover', function(e) { + e.preventDefault(); // 阻止默认行为 + this.classList.add('dragover'); // 添加拖动进入样式 + }); + + // 当拖动元素离开目标区域时 + item.addEventListener('dragleave', function() { + this.classList.remove('dragover'); // 移除拖动进入样式 + }); + + // 当拖动元素放置到目标区域时 + item.addEventListener('drop', function(e) { + e.preventDefault(); // 阻止默认行为 + this.classList.remove('dragover'); // 移除拖动进入样式 + // 计算拖动元素中心点 + const rect = this.getBoundingClientRect(); + const centerX = rect.left + rect.width / 2; + // 判断鼠标相对中心点的位置 + const isLeft = e.clientX < centerX; + if (isLeft) { + // 插入到前一个元素前 + this.parentNode.insertBefore(draggedItem, this.previousElementSibling); + } else { + // 插入到后一个元素后 + this.parentNode.insertBefore(draggedItem, this.nextElementSibling); + } + document.querySelectorAll('.memos-image-list .imagelist-item').forEach((item) => { + let itemId = Number(item.dataset.id) + memosResourceList.push(itemId); + }) + window.localStorage && window.localStorage.setItem("memos-resource-list", JSON.stringify(memosResourceList)); + }); + }); + } + +// Emoji表情选择 + + let emojiSelectorVisible = false; + let emojiSelector; + let emojis = []; // 缓存表情数据 + +// 页面加载时获取表情数据 + window.addEventListener("DOMContentLoaded", async () => { + try { + emojis = await getEmojisData(); // 获取表情数据 + } catch (error) { + console.error('Failed to fetch emojis data:', error); + } + }); + +// 表情选择器点击事件处理 + biaoqing.addEventListener("click", function (event) { + event.stopPropagation(); + emojiSelectorVisible = !emojiSelectorVisible; + const memosPath = window.localStorage && window.localStorage.getItem("memos-access-path"); + const memosOpenId = window.localStorage && window.localStorage.getItem("memos-access-token"); + + if (emojiSelectorVisible && memosPath && memosOpenId) { + displayEmojiSelector(); + } else { + emojiSelector?.remove(); + } + }); + +// 显示表情选择器 + function displayEmojiSelector() { + if (!emojiSelector) { + emojiSelector = document.createElement('div'); + emojiSelector.classList.add('emoji-selector'); + + // 使用事件代理,将事件监听器添加到父元素上 + emojiSelector.addEventListener('click', (event) => { + const target = event.target; + if (target.classList.contains('emoji-item')) { + insertEmoji(target.innerHTML); // 直接插入emoji图标 + } + }); + } + + emojiSelector.innerHTML = ''; // 清空表情选择器内容 + + emojis.forEach(emoji => { + const emojiItem = document.createElement('div'); + emojiItem.classList.add('emoji-item'); + emojiItem.innerHTML = emoji.icon; + emojiItem.title = emoji.text; + emojiSelector.appendChild(emojiItem); + }); + + // 将表情下拉框插入到对应位置 + const memosEditorTools = document.querySelector(".memos-editor-footer"); + if (memosEditorTools) { + memosEditorTools.insertAdjacentElement('afterend', emojiSelector); + } + } + +// 获取json文件中的数据 + async function getEmojisData() { + const response = await fetch('/json/owo.json'); + const data = await response.json(); + return data.Emoji.container; + } + +// 表情光标位置 + function insertEmoji(emojiText) { + const selectionStart = memosTextarea.selectionStart; + const newValue = `${memosTextarea.value.substring(0, selectionStart)}${emojiText}${memosTextarea.value.substring(memosTextarea.selectionEnd)}`; + memosTextarea.value = newValue; + memosTextarea.dispatchEvent(new Event('input')); + const newCursorPosition = selectionStart + emojiText.length; + memosTextarea.setSelectionRange(newCursorPosition, newCursorPosition); + memosTextarea.focus(); + } + + +// 标签自动补全 + + const tagListElement = document.querySelector('.memos-tag-list'); + const tagMenu = document.getElementById('memos-tag-menu'); + let selectedTagIndex = -1; + + const getMatchingTags = (tagPrefix) => { + const allTags = Array.from(tagListElement.querySelectorAll('.memos-tag a')).map(tagLink => tagLink.textContent); + return allTags.filter(tag => tag.toLowerCase().includes(tagPrefix.toLowerCase())); + }; + + const hideTagMenu = () => tagMenu.style.display = 'none'; + + const showTagMenu = (matchingTags) => { + tagMenu.innerHTML = matchingTags.map(tag => `
    ${tag}
    `).join(''); + const { left, bottom } = memosTextarea.getBoundingClientRect(); + tagMenu.style.cssText = `display: block;`; + selectedTagIndex = -1; + }; + + const insertSelectedTag = (tag) => { + const inputValue = memosTextarea.value; + const cursorPosition = memosTextarea.selectionStart; + + const textBeforeCursor = inputValue.substring(0, cursorPosition); + const lines = textBeforeCursor.split('\n'); + const lastLine = lines[lines.length - 1]; + const wordsBeforeCursor = lastLine.split(/\s+/); + + wordsBeforeCursor.pop(); + + const newLastLine = `${wordsBeforeCursor.join(' ')} ${tag} `; + const newValue = inputValue.replace(lastLine, newLastLine); + + memosTextarea.value = newValue; + + const newCursorPosition = newValue.lastIndexOf(tag) + tag.length + 1; + + hideTagMenu(); + selectedTagIndex = -1; + + memosTextarea.focus(); + memosTextarea.setSelectionRange(newCursorPosition, newCursorPosition); + }; + + memosTextarea.addEventListener('input', () => { + const inputValue = memosTextarea.value; + const cursorPosition = memosTextarea.selectionStart; + + const lastWord = inputValue.substring(0, cursorPosition).split(/\s+/).pop(); + + if (lastWord && lastWord.includes('#')) { + const matchingTags = getMatchingTags(lastWord); + matchingTags.length > 0 ? showTagMenu(matchingTags) : hideTagMenu(); + } else { + hideTagMenu(); + } + }); + + memosTextarea.addEventListener('keydown', event => { + const keyCode = event.keyCode; + + if (tagMenu.style.display === 'block') { + const matchingTags = Array.from(tagMenu.querySelectorAll('.tag-option')).map(tag => tag.textContent); + + if (keyCode === 38 || keyCode === 40 || keyCode === 37 || keyCode === 39) { // 添加左右方向键的处理 + event.preventDefault(); + if (keyCode === 37 || keyCode === 39) { // 处理左右方向键 + const direction = keyCode === 37 ? -1 : 1; + selectedTagIndex = (selectedTagIndex + direction + matchingTags.length) % matchingTags.length; + } else { // 处理上下方向键 + selectedTagIndex = (selectedTagIndex + (keyCode === 38 ? -1 : 1) + matchingTags.length) % matchingTags.length; + } + Array.from(tagMenu.querySelectorAll('.tag-option')).forEach((option, index) => option.classList.toggle('selected', index === selectedTagIndex)); + } else if (keyCode === 13 && selectedTagIndex !== -1) { + event.preventDefault(); + insertSelectedTag(matchingTags[selectedTagIndex]); + } + } + }); + + tagMenu.addEventListener('click', event => { + insertSelectedTag(event.target.textContent); + }); + + +//修改 + let memosOldSelect; + function editMemo(memo) { + memosOldSelect = memosVisibilitySelect.value; + getEditor = window.localStorage && window.localStorage.getItem("memos-editor-display"); + memosOpenId = window.localStorage && window.localStorage.getItem("memos-access-token"); + if(memosOpenId && getEditor == "show"){ + document.querySelector(".memos-image-list").innerHTML = ''; + let e = JSON.parse(memo.getAttribute("data-form")); + memoResList = e.resourceList,memosResource = [],imageList = ""; + memosVisibilitySelect.value = e.visibility; + window.localStorage && window.localStorage.setItem("memos-editor-dataform",JSON.stringify(e)); + window.localStorage && window.localStorage.setItem("memos-visibility-select",memosVisibilitySelect.value); + memosTextarea.value = e.content; + memosTextarea.style.height = memosTextarea.scrollHeight + 'px'; + submitMemoBtn.classList.add("d-none"); + editMemoDom.classList.remove("d-none"); + if(memoResList.length > 0){ + for (let i = 0; i < memoResList.length; i++) { + let imgLink = '', fileId = '',resexlink = memoResList[i].externalLink; + if (resexlink) { + imgLink = resexlink + } else { + fileId = memoResList[i].publicId || memoResList[i].filename + imgLink = `${memosPath}/o/r/${memoResList[i].id}`;///${fileId} + } + memosResource.push(memoResList[i].id); + imageList += `
    ${fileId}
    `; + } + + + window.localStorage && window.localStorage.setItem("memos-resource-list", JSON.stringify(memosResource)); + document.querySelector(".memos-image-list").insertAdjacentHTML('afterbegin', imageList); + } + //平滑滚动到对应的class + let editorBody = document.querySelector('.index-laodao'); + if (editorBody) { + editorBody.scrollIntoView({ behavior: 'smooth' }); + } + } + } + + editMemoBtn.addEventListener("click", function () { + let dataformNow = JSON.parse(window.localStorage && window.localStorage.getItem("memos-editor-dataform")); + let memoId = dataformNow.id,memoRelationList = dataformNow.relationList, + memosOpenId = window.localStorage && window.localStorage.getItem("memos-access-token"), + memoContent = memosTextarea.value, + memocreatedTs = dataformNow.createdTs, + memoVisibility = memosVisibilitySelect.value, + memoResourceList = window.localStorage && JSON.parse(window.localStorage.getItem("memos-resource-list")); + if(memoChangeDate == 1){ + memocreatedTs = Math.floor(Date.now() / 1000);; + } + let hasContent = memoContent.length !== 0; + if (hasContent) { + let memoUrl = `${memosPath}/api/v1/memo/${memoId}`; + let memoBody = {content:memoContent,id:memoId,createdTs:memocreatedTs,relationList:memoRelationList,resourceIdList:memoResourceList,visibility:memoVisibility} + fetch(memoUrl, { + method: 'PATCH', + body: JSON.stringify(memoBody), + headers: { + 'Authorization': `Bearer ${memosOpenId}`, + 'Content-Type': 'application/json' + } + }).then(function(res) { + if (res.ok) { + cocoMessage.success( + '修改成功', + ()=>{ + memoChangeDate = 0; + memosVisibilitySelect.value = memosOldSelect; + submitMemoBtn.classList.remove("d-none"); + editMemoDom.classList.add("d-none"); + document.querySelector(".memos-image-list").innerHTML = ''; + window.localStorage && window.localStorage.removeItem("memos-resource-list"); + window.localStorage && window.localStorage.removeItem("memos-relation-list"); + memosTextarea.value = ''; + memosTextarea.style.height = 'inherit'; + window.localStorage && window.localStorage.removeItem("memos-editor-dataform"); + let memosMode = window.localStorage && window.localStorage.getItem("memos-mode"); + reloadList(memosMode) + }) + } + }) + } + }) + +//增加memo编辑的时候取消功能 + cancelEditBtn.addEventListener("click", function () { + if (!editMemoDom.classList.contains("d-none")) { + memosVisibilitySelect.value = memosOldSelect; + document.querySelector(".memos-image-list").innerHTML = ''; + window.localStorage && window.localStorage.removeItem("memos-resource-list"); + window.localStorage && window.localStorage.removeItem("memos-relation-list"); + memosTextarea.value = ''; + memosTextarea.style.height = 'inherit'; + window.localStorage && window.localStorage.removeItem("memos-editor-dataform"); + editMemoDom.classList.add("d-none"); + submitMemoBtn.classList.remove("d-none"); + } + }) + +//增加memos归档功能 + function archiveMemo(memoId) { + memosOpenId = window.localStorage && window.localStorage.getItem("memos-access-token"); + if(memosOpenId && memoId){ + let memoUrl = `${memosPath}/api/v1/memo/${memoId}`; + let memoBody = {id:memoId,rowStatus:"ARCHIVED"}; + fetch(memoUrl, { + method: 'PATCH', + body: JSON.stringify(memoBody), + headers: { + 'Authorization': `Bearer ${memosOpenId}`, + 'Content-Type': 'application/json' + } + }).then(function(res) { + if (res.ok) { + cocoMessage.success( + '归档成功', + ()=>{ + let memosMode = window.localStorage && window.localStorage.getItem("memos-mode"); + reloadList(memosMode) + }) + } + }) + } + } + +//增加memo删除功能 + function deleteMemo(memoId) { + let isOk = confirm("确定要删除此条唠叨吗?"); + if(isOk){ + memosOpenId = window.localStorage && window.localStorage.getItem("memos-access-token"); + if(memosOpenId && memoId){ + let memoUrl = `${memosPath}/api/v1/memo/${memoId}`; + fetch(memoUrl, { + method: 'DELETE', + headers: { + 'Authorization': `Bearer ${memosOpenId}`, + 'Content-Type': 'application/json' + } + }).then(function(res) { + if (res.ok) { + cocoMessage.success( + '删除成功', + ()=>{ + let memosMode = window.localStorage && window.localStorage.getItem("memos-mode"); + reloadList(memosMode) + }) + } + }).catch(err => { + cocoMessage.error('出错了,再检查一下吧') + }) + } + } + } + +//无刷新 + function reloadList(mode){ + var bberDom = document.querySelector("#bber"); + bberDom.innerHTML = ''; + memosOpenId = window.localStorage && window.localStorage.getItem("memos-access-token"); + var bbUrl; + if(mode == "NOPUBLIC"){ + bbUrl = memos+"api/v1/memo"; + }if(mode == "ONEDAY"){ + let memosCount = window.localStorage && window.localStorage.getItem("memos-response-count"); + let random = Math.floor(Math.random() * memosCount) + bbUrl = memos+"api/v1/memo?creatorId="+bbMemo.creatorId+"&limit=1&offset="+random; + }else{ + bbUrl = memos+"api/v1/memo?creatorId="+bbMemo.creatorId+"&rowStatus=NORMAL&limit="+limit; + } + fetch(bbUrl,{ + headers: { + 'Authorization': `Bearer ${memosOpenId}`, + 'Content-Type': 'application/json', + 'Cache-Control': 'no-cache', + }, + cache: 'no-store', + }).then(res => res.json()).then( resdata =>{ + if (mode == "NOPUBLIC") { + resdata = resdata.filter((item) => item.visibility !== "PUBLIC"); + } + if(mode == "ONEDAY"){ + updateHTMl(resdata,"ONEDAY"); + }else{ + updateHTMl(resdata); + var nowLength = resdata.length; + if(nowLength < limit){ //返回数据条数小于 limit 则直接移除“加载更多”按钮,中断预加载 + document.querySelector("button.button-load").remove() + return + } + mePage++ + offset = limit*(mePage-1) + getNextList(mode) + } + }); + } + +//发布框中无内容时,唠叨一下按钮为透明度0.4 + function handleTextareaInput() { + var textarea = document.querySelector('.memos-editor-textarea'); + var submitButton = document.querySelector('.submit-memos-btn'); + submitButton.style.opacity = textarea.value.trim() !== '' ? 1 : 0.4; + } + handleTextareaInput(); + document.querySelector('.memos-editor-textarea').addEventListener('input', handleTextareaInput); + + });