dayjs.extend(window.dayjs_plugin_relativeTime) dayjs.locale('zh-cn') function get_info(callback) { chrome.storage.sync.get( { apiUrl: '', apiTokens: '', hidetag: '', showtag: '', memo_lock: '', open_action: '', open_content: '', userid: '', resourceIdList: [] }, function (items) { var flag = false var returnObject = {} if (items.apiUrl === '' || items.repo === '') { flag = false } else { flag = true } returnObject.status = flag if (!items.apiUrl.endsWith('/')) { items.apiUrl += '/'; } returnObject.apiUrl = items.apiUrl returnObject.apiTokens = items.apiTokens returnObject.hidetag = items.hidetag returnObject.showtag = items.showtag returnObject.memo_lock = items.memo_lock returnObject.open_content = items.open_content returnObject.open_action = items.open_action returnObject.userid = items.userid returnObject.resourceIdList = items.resourceIdList if (callback) callback(returnObject) } ) } get_info(function (info) { if (info.status) { //已经有绑定信息了,折叠 $('#blog_info').hide() } var memoNow = info.memo_lock if (memoNow == '') { chrome.storage.sync.set( { memo_lock: 'PUBLIC' } ) $("#lock-now").text(chrome.i18n.getMessage("lockPublic")) } if (memoNow == "PUBLIC") { $("#lock-now").text(chrome.i18n.getMessage("lockPublic")) } else if (memoNow == "PRIVATE") { $("#lock-now").text(chrome.i18n.getMessage("lockPrivate")) } else if (memoNow == "PROTECTED") { $("#lock-now").text(chrome.i18n.getMessage("lockProtected")) } $('#apiUrl').val(info.apiUrl) $('#apiTokens').val(info.apiTokens) $('#hideInput').val(info.hidetag) $('#showInput').val(info.showtag) if (info.open_action === 'upload_image') { //打开的时候就是上传图片 uploadImage(info.open_content) } else { $("textarea[name=text]").val(info.open_content) } //从localstorage 里面读取数据 setTimeout(get_info, 1) }) $("textarea[name=text]").focus() //监听输入结束,保存未发送内容到本地 $("textarea[name=text]").blur(function () { chrome.storage.sync.set( { open_action: 'save_text', open_content: $("textarea[name=text]").val() } ) }) $("textarea[name=text]").on('keydown', function (ev) { if (ev.code === 'Enter' && (ev.ctrlKey || ev.metaKey)) { $('#content_submit_text').click() } }) //监听拖拽事件,实现拖拽到窗口上传图片 initDrag() //监听复制粘贴事件,实现粘贴上传图片 document.addEventListener('paste', function (e) { let photo = null if (e.clipboardData.files[0]) { photo = e.clipboardData.files[0] } else if (e.clipboardData.items[0] && e.clipboardData.items[0].getAsFile()) { photo = e.clipboardData.items[0].getAsFile() } if (photo != null) { uploadImage(photo) } }) function initDrag() { var file = null var obj = $("textarea[name=text]")[0] obj.ondragenter = function (ev) { if (ev.target.className === 'common-editor-inputer') { $.message({ message: chrome.i18n.getMessage("picDrag"), autoClose: false }) $('body').css('opacity', 0.3) } ev.dataTransfer.dropEffect = 'copy' } obj.ondragover = function (ev) { ev.preventDefault() ev.dataTransfer.dropEffect = 'copy' } obj.ondrop = function (ev) { $('body').css('opacity', 1) ev.preventDefault() var files = ev.dataTransfer.files || ev.target.files for (var i = 0; i < files.length; i++) { file = files[i] } uploadImage(file) } obj.ondragleave = function (ev) { ev.preventDefault() if (ev.target.className === 'common-editor-inputer') { $.message({ message: chrome.i18n.getMessage("picCancelDrag") }) $('body').css('opacity', 1) } } } let relistNow = [] function uploadImage(data) { $.message({ message: chrome.i18n.getMessage("picUploading"), autoClose: false }) //根据data判断是图片地址还是base64加密的数据 get_info(function (info) { const formData = new FormData() if (info.status) { let old_name = data.name.split('.'); let file_ext = data.name.split('.').pop(); let now = dayjs().format('YYYYMMDDHHmmss') let new_name = old_name[0] + '_' + now + '.' + file_ext; formData.append('file', data, new_name) var upAjaxUrl = info.apiUrl + 'api/v1/resource/blob' $.ajax({ url: upAjaxUrl, data: formData, type: 'post', cache: false, processData: false, contentType: false, dataType: 'json', headers: { 'Authorization': 'Bearer ' + info.apiTokens }, success: function (data) { console.log(data) if (data.id) { //获取到图片 relistNow.push(data.id) chrome.storage.sync.set( { open_action: '', open_content: '', resourceIdList: relistNow }, function () { $.message({ message: chrome.i18n.getMessage("picSuccess") }) } ) } else { //发送失败 清空open_action(打开时候进行的操作),同时清空open_content chrome.storage.sync.set( { open_action: '', open_content: '', resourceIdList: [] }, function () { $.message({ message: chrome.i18n.getMessage("picFailed") }) } ) } } }) } else { $.message({ message: chrome.i18n.getMessage("placeApiUrl") }) } }) } $('#saveKey').click(function () { var apiUrl = $('#apiUrl').val() var apiTokens = $('#apiTokens').val() // 设置请求参数 const settings = { async: true, crossDomain: true, url: apiUrl + 'api/v1/auth/status', method: 'POST', headers: { 'Authorization': 'Bearer ' + apiTokens } }; $.ajax(settings).done(function (response) { if (response && response.id) { // 如果响应包含用户 ID,存储 apiUrl 和 apiTokens chrome.storage.sync.set( { apiUrl: apiUrl, apiTokens: apiTokens, userid: response.id }, function () { $.message({ message: chrome.i18n.getMessage("saveSuccess") }); $('#blog_info').hide(); } ); } else { // 如果响应不包含用户 ID,显示错误消息 $.message({ message: chrome.i18n.getMessage("invalidToken") }); } }).fail(function () { // 请求失败时显示错误消息 $.message({ message: chrome.i18n.getMessage("invalidToken") }); }); }); $('#opensite').click(function () { get_info(function (info) { chrome.tabs.create({ url: info.apiUrl }) }) }) $('#tags').click(function () { get_info(function (info) { if (info.apiUrl) { var parent = "memos/-"; // 如果不使用 user 过滤,会返回所有用户的标签 var filter = "?filter=" + encodeURIComponent(`creator == 'users/${info.userid}'`); var tagUrl = info.apiUrl + 'api/v1/' + parent + '/tags' + filter; var tagDom = ""; $.ajax({ url: tagUrl, type: "GET", contentType: "application/json;", dataType: "json", headers: { 'Authorization': 'Bearer ' + info.apiTokens }, success: function (data) { $.each(data.tagAmounts, function (tag, amount) { tagDom += '#' + tag + ''; }); tagDom += '' $("#taglist").html(tagDom).slideToggle(500) } }) } else { $.message({ message: chrome.i18n.getMessage("placeApiUrl") }) } }) }) $(document).on("click", "#hideTag", function () { $('#taghide').slideToggle(500) }) $('#saveTag').click(function () { // 保存数据 chrome.storage.sync.set( { hidetag: $('#hideInput').val(), showtag: $('#showInput').val() }, function () { $.message({ message: chrome.i18n.getMessage("saveSuccess") }) $('#taghide').hide() } ) }) $('#lock').click(function () { $("#lock-wrapper").toggleClass("!hidden", 1000); }) $(document).on("click", ".item-lock", function () { $("#lock-wrapper").toggleClass("!hidden", 1000); $("#lock-now").text($(this).text()) _this = $(this)[0].dataset.type; chrome.storage.sync.set( { memo_lock: _this } ) }) $('#search').click(function () { get_info(function (info) { if (info.status) { $("#randomlist").html('').hide() var searchDom = "" const pattern = $("textarea[name=text]").val() if (pattern) { $.ajax({ //memos+"api/"+apiV1+"memo?creatorId="+bbMemo.creatorId+"&content="+serchText+"&limit=20"; url: info.apiUrl + "api/v1/memo", type: "GET", contentType: "application/json;", dataType: "json", headers: { 'Authorization': 'Bearer ' + info.apiTokens }, success: function (data) { const options = { keys: ['content'] }; const fuse = new Fuse(data, options); var searchData = fuse.search(pattern) for (var i = 0; i < searchData.length; i++) { searchDom += '
' + dayjs(new Date(searchData[i].item.createdTs) * 1000).fromNow() + '
' + searchData[i].item.content.replace(/!\[.*?\]\((.*?)\)/g, ' ').replace(/\[(.*?)\]\((.*?)\)/g, ' $1 ') + '
' if (searchData[i].item.resourceList && searchData[i].item.resourceList.length > 0) { var resourceList = searchData[i].item.resourceList; 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 = info.apiUrl + 'o/r/' + resourceList[j].id + '/' + fileId } if (restype == 'image') { searchDom += '' } if (restype !== 'image') { searchDom += '' + resourceList[j].filename + '' } } } searchDom += '
' } window.ViewImage && ViewImage.init('.random-image') $("#randomlist").html(searchDom).slideDown(500); } }); } else { $.message({ message: chrome.i18n.getMessage("searchNow") }) } } else { $.message({ message: chrome.i18n.getMessage("placeApiUrl") }) } }) }) $('#random').click(function () { get_info(function (info) { if (info.status) { $("#randomlist").html('').hide() var nowTag = $("textarea[name=text]").val().match(/#([^\s#]+)/) if ($("#taglist").is(':visible') && nowTag[1]) { var tagUrl = info.apiUrl + 'api/v1/memo?rowStatus=NORMAL&tag=' + nowTag[1] $.ajax({ url: tagUrl, type: "GET", contentType: "application/json;", dataType: "json", headers: { 'Authorization': 'Bearer ' + info.apiTokens }, success: function (data) { let randomNum = Math.floor(Math.random() * (data.length)); var randomData = data[randomNum] randDom(randomData) } }) } else { var randomUrl0 = info.apiUrl + 'api/v1/memo?rowStatus=NORMAL&limit=1' $.ajax({ url: randomUrl0, type: "GET", contentType: "application/json;", dataType: "json", headers: { 'Authorization': 'Bearer ' + info.apiTokens }, success: function (data0) { var creatorId = data0[0].creatorId var randomUrl1 = info.apiUrl + 'api/v1/memo/stats?creatorId=' + creatorId $.ajax({ url: randomUrl1, type: "GET", contentType: "application/json;", dataType: "json", headers: { 'Authorization': 'Bearer ' + info.apiTokens }, success: function (data1) { let randomNum = Math.floor(Math.random() * (data1.length)) + 1; var randomUrl2 = info.apiUrl + 'api/v1/memo?rowStatus=NORMAL&limit=1&offset=' + randomNum $.ajax({ url: randomUrl2, type: "GET", contentType: "application/json;", dataType: "json", headers: { 'Authorization': 'Bearer ' + info.apiTokens }, success: function (data2) { var randomData = data2[0] randDom(randomData) } }); } }); } }) } } else { $.message({ message: chrome.i18n.getMessage("placeApiUrl") }) } }) }) function randDom(randomData) { get_info(function (info) { var randomDom = '
' + dayjs(new Date(randomData.createdTs * 1000)).fromNow() + '
' + randomData.content.replace(/!\[.*?\]\((.*?)\)/g, ' ').replace(/\[(.*?)\]\((.*?)\)/g, ' $1 ') + '
' if (randomData.resourceList && randomData.resourceList.length > 0) { var resourceList = randomData.resourceList; 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 = info.apiUrl + 'o/r/' + resourceList[j].id + '/' + fileId } if (restype == 'image') { randomDom += '' } if (restype !== 'image') { randomDom += '' + resourceList[j].filename + '' } } } randomDom += '
' window.ViewImage && ViewImage.init('.random-image') $("#randomlist").html(randomDom).slideDown(500); }) } $(document).on("click", "#random-link", function () { var memoId = $("#random-link").data('id'); get_info(function (info) { chrome.tabs.create({ url: info.apiUrl + "m/" + memoId }) }) }) $(document).on("click", "#random-delete", function () { get_info(function (info) { var memosId = $("#random-delete").data('id'); var deleteUrl = info.apiUrl + 'api/v1/memo/' + memosId $.ajax({ url: deleteUrl, type: "PATCH", data: JSON.stringify({ 'id': memosId, 'rowStatus': "ARCHIVED" }), contentType: "application/json;", dataType: "json", headers: { 'Authorization': 'Bearer ' + info.apiTokens }, success: function (result) { $("#randomlist").html('').hide() $.message({ message: chrome.i18n.getMessage("archiveSuccess") }) }, error: function (err) {//清空open_action(打开时候进行的操作),同时清空open_content $.message({ message: chrome.i18n.getMessage("archiveFailed") }) } }) }) }) $(document).on("click", ".item-container", function () { var tagHtml = $(this).text() + " " add(tagHtml); }) $('#newtodo').click(function () { var tagHtml = "\n- [ ] " add(tagHtml); }) $('#getlink').click(function () { chrome.tabs.query({ active: true, currentWindow: true }, ([tab]) => { var linkHtml = " [" + tab.title + "](" + tab.url + ") " if (tab.url) { add(linkHtml); } else { $.message({ message: chrome.i18n.getMessage("getTabFailed") }) } }) }) $('#upres').click(async function () { $('#inFile').click() }) $('#inFile').on('change', function (data) { var fileVal = $('#inFile').val(); var file = null if (fileVal == '') { return; } file = this.files[0]; uploadImage(file) }); function add(str) { var tc = document.getElementById("content"); var tclen = tc.value.length; tc.focus(); if (typeof document.selection != "undefined") { document.selection.createRange().text = str; } else { tc.value = tc.value.substr(0, tc.selectionStart) + str + tc.value.substring(tc.selectionStart, tclen); } } $('#blog_info_edit').click(function () { $('#blog_info').slideToggle() }) $('#content_submit_text').click(function () { var contentVal = $("textarea[name=text]").val() if (contentVal) { sendText() } else { $.message({ message: chrome.i18n.getMessage("placeContent") }) } }) function getOne(memosId) { get_info(function (info) { if (info.apiUrl) { $("#randomlist").html('').hide() var getUrl = info.apiUrl + 'api/v1/memo/' + memosId $.ajax({ url: getUrl, type: "GET", contentType: "application/json;", dataType: "json", headers: { 'Authorization': 'Bearer ' + info.apiTokens }, success: function (data) { randDom(data) } }) } else { $.message({ message: chrome.i18n.getMessage("placeApiUrl") }) } }) } function sendText() { get_info(function (info) { if (info.status) { $.message({ message: chrome.i18n.getMessage("memoUploading") }) //$("#content_submit_text").attr('disabled','disabled'); let content = $("textarea[name=text]").val() var hideTag = info.hidetag var showTag = info.showtag var nowTag = $("textarea[name=text]").val().match(/(#[^\s#]+)/) var sendvisi = info.memo_lock || '' if (nowTag) { if (nowTag[1] == showTag) { sendvisi = 'PUBLIC' } else if (nowTag[1] == hideTag) { sendvisi = 'PRIVATE' } } $.ajax({ url: info.apiUrl + 'api/v1/memos', type: "POST", data: JSON.stringify({ 'content': content, 'visibility': sendvisi, 'resourceIdList': info.resourceIdList || [], }), contentType: "application/json;", dataType: "json", headers: { 'Authorization': 'Bearer ' + info.apiTokens }, success: function (data) { //发送成功 getOne(data.id) chrome.storage.sync.set( { open_action: '', open_content: '', resourceIdList: '' }, function () { $.message({ message: chrome.i18n.getMessage("memoSuccess") }) //$("#content_submit_text").removeAttr('disabled'); $("textarea[name=text]").val('') } ) }, error: function (err) {//清空open_action(打开时候进行的操作),同时清空open_content chrome.storage.sync.set( { open_action: '', open_content: '', resourceIdList: '' }, function () { $.message({ message: chrome.i18n.getMessage("memoFailed") }) } ) }, }) } else { $.message({ message: chrome.i18n.getMessage("placeApiUrl") }) } }) }