// 定义pjax 预设pjax
var pjax = new Pjax({
// 这里填写页面中改变的部分(和 CSS 选择器用法一样)
selectors: ["#pjax-container","title"],
cacheBust: false,
elements: "a",
});
// 设置图片灯箱回调函数
function lazyimg_pjax() {
; (function ($) {
var defaults = {
coverColor: "#dfdfdf",
coverDiv: "",
showTime: 300,
offsetBottom: 0,
offsetTopm: 50,
onLoadBackEnd: function (index, dom) { },
onLoadBackStart: function (index, dom) { }
}
//所有待load src
var srcList = []
var lazyLoadCoutn = 0;
var windowHeight = $(window).height();
var windowWidth = $(window).width();
var lazyImgList = $("img[data-lazy-src]");
var default_base64_src = "data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==";
//获取img
function getImgNaturalDimensions(src, callback, lazyLoadCoutn) {
var nWidth, nHeight
var image = new Image()
image.src = src;
image.onload = function () {
callback(image.width, image.height);
defaults.onLoadBackStart(lazyLoadCoutn, $("img[data-lazy-src]:eq(" + lazyLoadCoutn + ")"));
}
return [nWidth, nHeight];
}
function showImg(lazyLoadCoutn, callback) {
var src = lazyImgList.eq(lazyLoadCoutn).attr("data-lazy-src")
getImgNaturalDimensions(src, function () {
try {
meng($("img[data-lazy-src]:eq(" + lazyLoadCoutn + ")"), lazyLoadCoutn, callback)
} catch (error) {
}
}, lazyLoadCoutn)
}
function meng(jDom, lazyLoadCoutn, callback) {
if (jDom.attr("data-comp")) {
return;
}
jDom.css("visibility", "hidden");
jDom.attr("src", jDom.attr("data-lazy-src"))
var w = jDom.width();
var h = jDom.height();
var offsetTop = jDom.offset().top;
var offsetLeft = jDom.offset().left;
jDom.css("visibility", "visible");
$("body").append("
" + defaults.coverDiv + "
");
noneM(lazyLoadCoutn, callback, jDom);
jDom.attr("data-comp", "true");
}
function noneM(lazyLoadCoutn, callback, jDom) {
if (true) {
$(".meng-lazy-div" + lazyLoadCoutn).animate({ opacity: "0" }, defaults.showTime, function () {
$(this).remove();
defaults.onLoadBackEnd(lazyLoadCoutn, jDom)
callback();
});
}
}
function checkOffset() {
var scrollTop = $(document).scrollTop();
var onlazyList = [];
lazyImgList.each(function (index) {
var dom = $(this);
if (!dom.attr("data-comp")) {
if (dom.offset().top - scrollTop + defaults.offsetTopm >= 0 && dom.offset().top - scrollTop < (windowHeight + defaults.offsetBottom)) {
onlazyList.push(index);
}
}
})
if (onlazyList.length != 0) {
showImg(onlazyList[0], function () {
checkOffset();
});
}
}
function range() {
checkOffset();
}
function init(setting) {
lazyImgList = $("img[data-lazy-src]");
defaults = $.extend(defaults, setting);
lazyImgList.each(function () {
var sr = $(this).attr("data-lazy-src");
srcList.push(sr);
$(this).attr("src", default_base64_src);
});
range();
window.onscroll = function () {
range()
}
}
function tryAgain() {
$("img[data-lazy-src]").removeAttr("data-comp")
init(defaults)
}
window.lazyLoadInit = init;
window.lazyLoadAgain = tryAgain;
})($)
}
// 设置memos回调函数
function 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 = "";
resultAll = bbBefore + result + bbAfter;
bbDom.insertAdjacentHTML('afterbegin', resultAll);
}else{
var bbBefore = "";
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 = ``
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: 'auto'
});
} 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() : '';
};
loadEditorBtn.addEventListener("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 += ``;
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 += ``;
}
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);
//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() {
// 给pjax容器加入css过渡动画
$("#pjax-container").addClass("uk-animation-slide-bottom-small");
// 评论区过渡动画
$(".comment-meta").attr("uk-scrollspy", "cls: uk-animation-fade; delay: 100");
$(".comment-author vcard").attr("uk-scrollspy", "cls: uk-animation-fade; delay: 100");
$(".comment-metadata").attr("uk-scrollspy", "cls: uk-animation-fade; delay: 100");
$(".comment-content").attr("uk-scrollspy", "cls: uk-animation-fade; delay: 100");
$(".reply").attr("uk-scrollspy", "cls: uk-animation-fade; delay: 100");
// 说说页面过渡动画
$("#shuoshuo_body").attr("uk-scrollspy", "target: > .shuoshuo; cls: uk-animation-fade; delay: 250");
}
// pjax发送时期
document.addEventListener("pjax:send", function () {
// pjax动画减少圆圈动画
NProgress.configure({
showSpinner: false
});
// pjax执行动画开始
NProgress.start(); //加载动画效果开始
});
// Pjax 成功后,重新加载下面的函数
document.addEventListener("pjax:success", function () {
// 重载图片懒加载插件的js
lazyimg_pjax()
lazyLoadInit({
// coverColor: "white",
// coverDiv: "优世界·一个记录生活点滴的小站
",
offsetBottom: 800,
offsetTopm: 800,
showTime: 1100
});
// 激活文章图片灯箱
window.ViewImage && ViewImage.init('.post-content img');
});
// pjax加载完成
document.addEventListener("pjax:complete", function () {
// pjax完成动画
NProgress.done();
// 重载一些js样式调整
pjax_reload()
// 激活返回顶部插件
$(function () {
$.scrollUp({
animation: 'fade',
scrollImg: true
});
});
// 重载评论
if (document.querySelector("#Comments")) {
Artalk.init({
el: '#Comments', // 绑定元素的 Selector
server: 'https://artalk.5b2.cn', // 后端地址
site: '优世界', // 你的站点名
flatMode: true
})
}
// 重载评论弹幕
if (document.querySelector("#Comments") && !isMobile()) {
loadBarrager()
}
// 重载memos
reload_memos()
});