var m={PAGES:{PROFILE:"profile",ARTICLES:"articles",MUMBLES:"mumbles",TIMELINE:"timeline",PHOTOS:"photos"},PAGINATION:{DEFAULT_PAGE_SIZE:10,DEFAULT_PAGE_NUM:1,MAX_VISIBLE_PAGES:5},BREAKPOINTS:{MOBILE:768,TABLET:768,DESKTOP:1024},DELAYS:{LOADING:300,TOAST_AUTO_HIDE:3e3,TOAST_HIDE_ANIMATION:300},MESSAGE_TYPES:{SUCCESS:{type:"success",icon:"fa-check-circle",color:"#059669",bgColor:"#ffffff",borderColor:"#10b981",textColor:"#065f46"},ERROR:{type:"error",icon:"fa-times-circle",color:"#dc2626",bgColor:"#ffffff",borderColor:"#ef4444",textColor:"#7f1d1d"},WARNING:{type:"warning",icon:"fa-exclamation-triangle",color:"#d97706",bgColor:"#ffffff",borderColor:"#f59e0b",textColor:"#92400e"},INFO:{type:"info",icon:"fa-info-circle",color:"#2563eb",bgColor:"#ffffff",borderColor:"#3b82f6",textColor:"#1e40af"}},SELECTORS:{navItem:".nav-item",navItemLink:".nav-item a",currentPageTitle:"#currentPageTitle",menuToggle:".menu-toggle",sidebarOverlay:".sidebar-overlay",memberSidebar:".member-sidebar",photosGrid:".photos-grid",deleteModal:"#deleteModal",loadingOverlay:"#loadingOverlay",toastContainer:"#toast-container",progressOverlay:"#progressOverlay"}};function M(){try{let s=localStorage.getItem("theme")||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light");return B(s)}catch(s){return console.error("\u521D\u59CB\u5316\u4E3B\u9898\u5931\u8D25:",s),B("light")}}function B(s){let e=["light","dark"].includes(s)?s:"light";$("html").attr("data-theme",e);try{localStorage.setItem("theme",e)}catch(t){console.warn("\u65E0\u6CD5\u4FDD\u5B58\u4E3B\u9898\u504F\u597D:",t)}return e}function E(){$(m.SELECTORS.progressOverlay).length===0&&$("body").append(`
            <div class="loading-overlay" id="progressOverlay" style="display: none; flex-direction: column; z-index: 9999;">
                <div class="loading-spinner" style="width: 80%; max-width: 400px; text-align: center;">
                    <div style="font-size: 1.1rem; margin-bottom: 15px; color: var(--text-color);" id="progressText">\u51C6\u5907\u4E0A\u4F20...</div>
                    <div style="width: 100%; height: 10px; background: rgba(0,0,0,0.1); border-radius: 5px; overflow: hidden; position: relative;">
                         <div id="progressBar" class="progress-bar-animated" style="width: 0%; height: 100%; background-color: var(--primary-color); border-radius: 5px; transition: width 0.2s ease;"></div>
                    </div>
                    <div id="progressPercent" style="margin-top: 8px; font-size: 0.9rem; color: var(--text-secondary);">0%</div>
                </div>
            </div>
        `)}function g(s="\u52A0\u8F7D\u4E2D..."){let e=$(".loading-spinner .loading-text");e.length>0&&e.text(s),$(m.SELECTORS.loadingOverlay).addClass("active")}function p(){$(m.SELECTORS.loadingOverlay).removeClass("active")}function k(s="\u4E0A\u4F20\u4E2D..."){E();let e=$(m.SELECTORS.progressOverlay);e.find("#progressText").text(s),e.find("#progressBar").css("width","0%"),e.find("#progressPercent").text("0%"),e.css("display","flex").addClass("active")}function S(s,e){let t=$(m.SELECTORS.progressOverlay);e&&t.find("#progressText").text(e),t.find("#progressBar").css("width",`${s}%`),t.find("#progressPercent").text(`${s}%`)}function y(){$(m.SELECTORS.progressOverlay).removeClass("active").fadeOut(200)}function c(s,e="info"){let t=m.MESSAGE_TYPES,o=t[e.toUpperCase()]||t.INFO,i=`message-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,r=$(`
        <div class="toast-message" id="${i}" data-type="${e}">
            <div class="toast-content">
                <div class="toast-icon">
                    <i class="fa ${o.icon}"></i>
                </div>
                <div class="toast-text">
                    <div class="toast-message-text">${s}</div>
                </div>
                <button type="button" class="toast-close">
                    <i class="fa fa-times"></i>
                </button>
            </div>
            <div class="toast-progress">
                <div class="toast-progress-bar"></div>
            </div>
        </div>
    `);r.css({"--toast-color":o.color,"--toast-bg-color":o.bgColor,"--toast-border-color":o.borderColor,"--toast-text-color":o.textColor});let n=$(m.SELECTORS.toastContainer);n.length===0&&(n=$('<div id="toast-container"></div>'),$("body").append(n)),n.append(r),setTimeout(()=>r.addClass("toast-show"),10),setTimeout(()=>r.find(".toast-progress-bar").addClass("toast-progress-active"),100),r.find(".toast-close").on("click",()=>A(i)),setTimeout(()=>A(i),m.DELAYS.TOAST_AUTO_HIDE)}function A(s){let e=$(`#${s}`);e.length!==0&&(e.addClass("toast-hide"),setTimeout(()=>{e.remove();let t=$(m.SELECTORS.toastContainer);t.children().length===0&&t.remove()},m.DELAYS.TOAST_HIDE_ANIMATION))}async function O(s,e){let t=$(s),o=t.html();try{t.addClass("btn-loading"),t.prop("disabled",!0),t.html(`<i class="fa fa-spinner fa-spin"></i> ${o}`),await e()}finally{t.prop("disabled",!1),t.removeClass("btn-loading"),t.html(o)}}function L(){try{let s=$("nav.member-nav .nav-item.active a"),e="";s.length>0&&(e=s.text().trim()),e||(e="\u4E2A\u4EBA\u4E2D\u5FC3"),document.title=`${e} - \u4E2A\u4EBA\u4E2D\u5FC3`}catch(s){console.error("\u66F4\u65B0\u9875\u9762\u6807\u9898\u5931\u8D25:",s)}}function D(){return $(window).width()<=m.BREAKPOINTS.MOBILE}function U(){$(m.SELECTORS.memberSidebar).toggleClass("active"),$(m.SELECTORS.sidebarOverlay).toggleClass("active")}function b(){$(m.SELECTORS.memberSidebar).removeClass("active"),$(m.SELECTORS.sidebarOverlay).removeClass("active")}function N(s){if(s===0)return"0 B";let e=1024,t=["B","KB","MB","GB","TB"],o=Math.floor(Math.log(s)/Math.log(e));return`${parseFloat((s/Math.pow(e,o)).toFixed(2))} ${t[o]}`}var T=class{constructor(e){this.options=e,this.vditor=null,this.init()}init(){let{elementId:e,markdown:t,theme:o,editOnly:i,uploadAddress:r,fileUpload:n,markdownValueEl:a}=this.options;!e||typeof Vditor>"u"||(a&&(a.style.display="none"),this.vditor=new Vditor(e,{value:t,height:"800px",width:"100%",theme:o==="dark"?"dark":"classic",mode:"ir",cache:{enable:!1},preview:{mode:i?"editor":"both",theme:{current:o==="dark"?"dark":"classic",path:"https://dpangzi.com/library/vditor/css/content-theme"},hljs:{enable:!0,style:"vs2015",lineNumber:!0}},counter:{enable:!0},link:{isOpen:!1},tab:"    ",toolbar:["emoji","headings","bold","italic","strike","link","|","list","ordered-list","check","outdent","indent","|","quote","line","code","inline-code","insert-before","insert-after","|","upload","table","|","undo","redo","|","edit-mode","content-theme","code-theme","|","both","preview","fullscreen"],upload:{accept:"image/*",handler:async l=>{if(!l||l.length===0)return;let u=l[0];if(!u.type.startsWith("image/")){console.error("Only image uploads are supported via this handler.");return}typeof n=="function"&&r&&r.trim()!==""&&await n(u,d=>{d&&this.vditor?.insertValue(`![image](${d})`)},r)}},after:()=>{let u=document.getElementById(e)?.querySelector(".vditor-toolbar");u&&u.querySelectorAll("button:not([type])").forEach(h=>h.setAttribute("type","button"))}}))}getMarkdown(){return this.vditor?this.vditor.getValue():""}getHtml(){return this.vditor?this.vditor.getHTML():""}};import j from"https://dpangzi.com/library/photoswipe/photoswipe.esm.min.js";var v=null,f=null;function _(){return f||(f=document.createElement("div"),f.className="pswp",document.body.appendChild(f),f)}function P(){let s=document.getElementById("photoPreview");s&&s.src&&H(s)}function H(s){s.removeEventListener("click",F),s.addEventListener("click",F)}function F(s){s.preventDefault();let e=s.currentTarget;C(e)}function C(s){let e=s?.src;if(!e)return;let t=s.naturalWidth||1920,o=s.naturalHeight||1080,i=new j({dataSource:[{src:e,width:t,height:o}],index:0,showHideAnimationType:"fade",bgOpacity:.88,escKey:!0,returnFocus:!1,zoom:!1,pswpElement:_()});return i.init(),v=i,i}function x(){v&&typeof v.destroy=="function"&&v.destroy(),v=null}var w=class{constructor(e={}){this.options=Object.assign({onMessage:(t,o)=>console.log(t,o),onLoading:(t,o)=>{}},e),this.config={MAX_DURATION:600,MIN_DURATION:1,AUDIO_TYPE:"audio/webm;codecs=opus",FALLBACK_TYPE:"audio/wav",UPDATE_INTERVAL:100},this.media={mediaRecorder:null,audioChunks:[],audioUrl:null,audioBlob:null,stream:null,audioElement:null},this.state={isRecording:!1,isPaused:!1,isPlaying:!1,duration:0,currentTime:0,startTime:null,recordingTimer:null,playbackTimer:null,hasRecording:!1},this.selectors={startBtn:"#startRecording",stopBtn:"#stopRecording",playBtn:"#playRecording",pauseBtn:"#pauseRecording",clearBtn:"#clearRecording",uploadBtn:"#uploadRecording",recordingSection:".recording-section",playerSection:"#recordingPlayer",statusText:"#recordingStatusText",recordingTime:"#recordingTime",currentTime:"#currentTime",totalTime:"#totalTime",progressBar:"#audioProgressBar",progressHandle:"#audioProgressHandle",progressContainer:"#audioProgress"}}init(){this.bindEvents(),this.resetState()}bindEvents(){$(this.selectors.startBtn).on("click",()=>this.startRecording()),$(this.selectors.stopBtn).on("click",()=>this.stopRecording()),$(this.selectors.playBtn).on("click",()=>this.togglePlayback()),$(this.selectors.pauseBtn).on("click",()=>this.pausePlayback()),$(this.selectors.clearBtn).on("click",()=>this.clearRecording()),$(this.selectors.uploadBtn).on("click",()=>this.uploadRecording()),this.bindProgressBarEvents()}resetState(){this.stopRecording(),this.stopPlayback(),this.cleanupMediaResources(),this.state={isRecording:!1,isPaused:!1,isPlaying:!1,duration:0,currentTime:0,startTime:null,recordingTimer:null,playbackTimer:null,hasRecording:!1},this.updateUI()}cleanupMediaResources(){this.media.stream&&(this.media.stream.getTracks().forEach(e=>e.stop()),this.media.stream=null),this.media.audioUrl&&(URL.revokeObjectURL(this.media.audioUrl),this.media.audioUrl=null),this.media.mediaRecorder=null,this.media.audioChunks=[],this.media.audioBlob=null,this.media.audioElement=null}async startRecording(){try{if(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia){this.options.onMessage("\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u5F55\u97F3\u529F\u80FD","error");return}let e=await navigator.mediaDevices.getUserMedia({audio:!0});this.media.stream=e;let t=MediaRecorder.isTypeSupported(this.config.AUDIO_TYPE)?this.config.AUDIO_TYPE:this.config.FALLBACK_TYPE;this.media.mediaRecorder=new MediaRecorder(e,{mimeType:t}),this.media.audioChunks=[],this.media.mediaRecorder.ondataavailable=o=>{o.data.size>0&&this.media.audioChunks.push(o.data)},this.media.mediaRecorder.onstop=()=>{this.processRecordedAudio(t)},this.media.mediaRecorder.start(),this.state.isRecording=!0,this.state.startTime=Date.now(),this.startRecordingTimer(),this.updateUI()}catch(e){console.error("\u5F55\u97F3\u542F\u52A8\u5931\u8D25:",e),this.options.onMessage("\u65E0\u6CD5\u542F\u52A8\u5F55\u97F3\uFF0C\u8BF7\u68C0\u67E5\u9EA6\u514B\u98CE\u6743\u9650","error")}}stopRecording(){this.media.mediaRecorder&&this.state.isRecording&&(this.media.mediaRecorder.stop(),this.state.isRecording=!1,this.stopRecordingTimer(),this.media.stream&&(this.media.stream.getTracks().forEach(e=>e.stop()),this.media.stream=null))}startRecordingTimer(){this.stopRecordingTimer(),this.state.recordingTimer=setInterval(()=>{let e=(Date.now()-this.state.startTime)/1e3;this.state.duration=e,this.updateTimeDisplay(e,this.selectors.recordingTime),e>=this.config.MAX_DURATION&&(this.stopRecording(),this.options.onMessage("\u5DF2\u8FBE\u5230\u6700\u5927\u5F55\u97F3\u65F6\u957F","info"))},this.config.UPDATE_INTERVAL)}stopRecordingTimer(){this.state.recordingTimer&&(clearInterval(this.state.recordingTimer),this.state.recordingTimer=null)}processRecordedAudio(e){this.media.audioBlob=new Blob(this.media.audioChunks,{type:e}),this.media.audioUrl=URL.createObjectURL(this.media.audioBlob),this.media.audioElement=new Audio(this.media.audioUrl),this.media.audioElement.onended=()=>{this.state.isPlaying=!1,this.stopPlaybackTimer(),this.state.currentTime=0,this.updateUI()},this.media.audioElement.onloadedmetadata=()=>{this.media.audioElement.duration&&isNaN(this.media.audioElement.duration)},this.state.hasRecording=!0,this.updateUI()}togglePlayback(){this.media.audioElement&&(this.state.isPlaying?this.pausePlayback():this.startPlayback())}startPlayback(){this.media.audioElement&&(this.media.audioElement.play(),this.state.isPlaying=!0,this.startPlaybackTimer(),this.updateUI())}pausePlayback(){this.media.audioElement&&(this.media.audioElement.pause(),this.state.isPlaying=!1,this.stopPlaybackTimer(),this.updateUI())}stopPlayback(){this.media.audioElement&&(this.media.audioElement.pause(),this.media.audioElement.currentTime=0,this.state.isPlaying=!1,this.stopPlaybackTimer(),this.state.currentTime=0,this.updateUI())}startPlaybackTimer(){this.stopPlaybackTimer(),this.state.playbackTimer=setInterval(()=>{this.media.audioElement&&(this.state.currentTime=this.media.audioElement.currentTime,this.updateTimeDisplay(this.state.currentTime,this.selectors.currentTime),this.updatePlaybackProgress())},this.config.UPDATE_INTERVAL)}stopPlaybackTimer(){this.state.playbackTimer&&(clearInterval(this.state.playbackTimer),this.state.playbackTimer=null)}clearRecording(){confirm("\u786E\u5B9A\u8981\u6E05\u9664\u5F53\u524D\u5F55\u97F3\u5417\uFF1F")&&this.resetState()}async uploadRecording(){if(!this.media.audioBlob){this.options.onMessage("\u6CA1\u6709\u53EF\u4E0A\u4F20\u7684\u5F55\u97F3","warning");return}let e="webm";this.media.audioBlob.type.includes("wav")?e="wav":this.media.audioBlob.type.includes("mp3")?e="mp3":this.media.audioBlob.type.includes("flac")&&(e="flac");let t=new FormData;t.append("record",this.media.audioBlob,`recording.${e}`),t.append("duration",this.state.duration.toString());try{this.options.onLoading(!0,"\u6B63\u5728\u4E0A\u4F20...");let o=await this.uploadWithProgress("/Audio/Upload",t,i=>{this.options.onLoading(!0,`\u6B63\u5728\u4E0A\u4F20\u5F55\u97F3...${i}%`)});if(this.options.onLoading(!1),!o.success){this.options.onMessage(o.msg||"\u4E0A\u4F20\u5931\u8D25","error");return}this.options.onMessage("\u5F55\u97F3\u4E0A\u4F20\u6210\u529F","success"),o.data&&o.data.accessUrl&&this.insertAudioToEditor(o.data.accessUrl),this.resetState()}catch(o){this.options.onLoading(!1),this.options.onMessage("\u4E0A\u4F20\u5931\u8D25: "+o.message,"error"),console.error("\u4E0A\u4F20\u5F55\u97F3\u5931\u8D25:",o)}}updateUI(){let{isRecording:e,hasRecording:t,isPlaying:o,duration:i,currentTime:r}=this.state;$(this.selectors.startBtn).toggle(!e&&!t),$(this.selectors.stopBtn).toggle(e),$(this.selectors.playBtn).toggle(t&&!o),$(this.selectors.pauseBtn).toggle(t&&o),$(this.selectors.clearBtn).toggle(t&&!e),$(this.selectors.uploadBtn).toggle(t&&!e),t?$(this.selectors.playerSection).slideDown():$(this.selectors.playerSection).slideUp(),e?($(this.selectors.statusText).text("\u6B63\u5728\u5F55\u97F3..."),$(this.selectors.recordingSection).addClass("recording")):($(this.selectors.statusText).text(t?"\u5F55\u97F3\u5B8C\u6210":"\u51C6\u5907\u5F55\u97F3"),$(this.selectors.recordingSection).removeClass("recording")),this.updateTimeDisplay(i,this.selectors.totalTime),this.updateTimeDisplay(r,this.selectors.currentTime),this.updatePlaybackProgress()}updateTimeDisplay(e,t){let o=Math.floor(e/60),i=Math.floor(e%60);$(t).text(`${o.toString().padStart(2,"0")}:${i.toString().padStart(2,"0")}`)}updatePlaybackProgress(){if(this.state.duration>0){let e=this.state.currentTime/this.state.duration*100;$(this.selectors.progressBar).css("width",`${e}%`),$(this.selectors.progressHandle).css("left",`${e}%`)}else $(this.selectors.progressBar).css("width","0%"),$(this.selectors.progressHandle).css("left","0%")}bindProgressBarEvents(){let e=!1;$(this.selectors.progressContainer).on("mousedown touchstart",o=>{this.state.hasRecording&&(e=!0,this.handleSeek(o))}),$(document).on("mousemove touchmove",o=>{e&&(o.preventDefault(),this.handleSeek(o))}),$(document).on("mouseup touchend",()=>{e=!1})}handleSeek(e){let t=$(this.selectors.progressContainer),o=t.offset(),i=t.width(),r=e.clientX;e.type.includes("touch")&&(r=e.touches[0].clientX);let n=(r-o.left)/i;n=Math.max(0,Math.min(1,n));let a=n*this.state.duration;this.seekTo(a)}seekTo(e){this.media.audioElement&&(this.media.audioElement.currentTime=e,this.state.currentTime=e,this.updateTimeDisplay(e,this.selectors.currentTime),this.updatePlaybackProgress())}uploadWithProgress(e,t,o){return new Promise((i,r)=>{let n=new XMLHttpRequest;n.open("POST",e,!0),n.upload&&o&&(n.upload.onprogress=a=>{if(a.lengthComputable){let l=Math.round(a.loaded/a.total*100);o(l)}}),n.onload=()=>{if(n.status>=200&&n.status<300)try{let a=JSON.parse(n.responseText);i(a)}catch{r(new Error("Invalid JSON response"))}else r(new Error(`Upload failed with status ${n.status}`))},n.onerror=()=>r(new Error("Network error")),n.send(t)})}insertAudioToEditor(e){try{let t=`
<audio controls src="${e}" style="max-width: 100%; margin: 10px 0;"></audio>
`,o=document.getElementById("mumbleContent")||document.getElementById("articleContent")||document.getElementById("timelineContent");if(o){let i=o.value||"";o.value=i+t}}catch(t){console.error("\u63D2\u5165\u97F3\u9891\u6807\u7B7E\u5931\u8D25:",t)}}};var I=class{constructor(){this.state={currentTheme:"light",currentDeleteItem:null},this.markdownEditor=null,this.audioRecorder=null,this.initialize()}initialize(){E(),this.bindEvents(),this.initPjax(),this.state.currentTheme=M(),this.initMarkdown(),this.initPhotoViewer(),document.getElementById("startRecording")&&this.initAudioRecorder()}initPjax(){$.pjax.defaults.timeout=5e3;let e=["nav.member-nav > ul > li.nav-item > a","#newArticle","#newMumble","#newTimeline","#uploadPhoto",".page-header .btn-secondary",".list-actions a",".photo-actions a"];$(document).pjax(e.join(", "),"#pjax-container",{scrollTo:0}),$(document).pjax("#member-article .pagination a","#member-article",{scrollTo:0}),$(document).pjax("#member-mumble .pagination a","#member-mumble",{scrollTo:0}),$(document).pjax("#member-timeline .pagination a","#member-timeline",{scrollTo:0}),$(document).pjax("#member-photo .pagination a","#member-photo",{scrollTo:0}),$(document).on("pjax:send",()=>$(m.SELECTORS.loadingOverlay).addClass("active")),$(document).on("pjax:complete",()=>$(m.SELECTORS.loadingOverlay).removeClass("active")),$(document).on("pjax:end",()=>{window.scrollTo(0,0),document.getElementById("startRecording")&&this.initAudioRecorder(),this.initMarkdown(),this.initPhotoViewer(),L(),D()&&b()})}initMarkdown(){let e=document.getElementById("articleContent"),t=document.getElementById("mumbleContent"),o=document.getElementById("timelineContent"),i=e||t||o;if(!i){this.markdownEditor=null;return}let r=document.getElementById("txt_"+i.id);if(!r){this.markdownEditor=null;return}let n=document.getElementById("uploadAddress")?.value,a=r.value||"";this.markdownEditor=new T({elementId:i.id,markdown:a,theme:this.state.currentTheme,editOnly:!0,uploadAddress:n,fileUpload:(l,u,d)=>this.fileUpload(l,u,d),markdownValueEl:r})}initPhotoViewer(){x();let e=document.getElementById("photoPreview"),t=document.getElementById("imageLoadingPlaceholder");e&&(e.src&&e.src!==""&&(e.complete&&e.naturalHeight!==0?(t&&t.remove(),e.style.display="block"):(e.onload=()=>{t&&t.remove(),e.style.display="block"},e.onerror=()=>{t&&(t.innerHTML='<i class="fa fa-exclamation-circle" style="font-size: 40px; color: var(--danger-color);"></i><span style="color: var(--text-secondary); margin-top: 8px;">\u7167\u7247\u52A0\u8F7D\u5931\u8D25</span>')})),P())}initAudioRecorder(){this.audioRecorder||(this.audioRecorder=new w({onMessage:(e,t)=>c(e,t),onLoading:(e,t)=>e?g(t):p()})),this.audioRecorder.init()}bindEvents(){this.bindNavigation(),this.bindSearch(),this.bindPublish(),this.bindTagInput(),this.bindPhotoUpload(),this.bindModal(),this.bindViewContent(),this.bindKeyboard(),$(document).on("click",m.SELECTORS.menuToggle,()=>U()),$(document).on("click",m.SELECTORS.sidebarOverlay,()=>b()),$(window).on("resize",()=>{$(window).width()>m.BREAKPOINTS.TABLET&&b()})}bindNavigation(){$(document).on("click",m.SELECTORS.navItem,e=>{$(m.SELECTORS.navItem).removeClass("active"),$(e.currentTarget).addClass("active")})}bindSearch(){$(document).on("click","#searchArticles",()=>{let e=$("#articleTitleSearch").val(),t=$("#articleTagSearch").val(),o=new URL("/member/articles",window.location.origin);e&&o.searchParams.set("title",e),t&&o.searchParams.set("tag",t),$.pjax({url:o.href,container:"#member-article",push:!0})}),$(document).on("click","#clearArticles",()=>{$("#articleTitleSearch").val(""),$("#articleTagSearch").val(""),$("#searchArticles").click()}),$(document).on("keyup","#articleTitleSearch",e=>{e.key==="Enter"&&$("#searchArticles").click()}),$(document).on("click","#searchMumbles",()=>{let e=$("#mumbleContentSearch").val(),t=new URL("/member/mumbles",window.location.origin);e&&t.searchParams.set("content",e),$.pjax({url:t.href,container:"#member-mumble",push:!0})}),$(document).on("click","#clearMumbles",()=>{$("#mumbleContentSearch").val(""),$("#searchMumbles").click()}),$(document).on("keyup","#mumbleContentSearch",e=>{e.key==="Enter"&&$("#searchMumbles").click()}),$(document).on("click","#searchTimeline",()=>{let e=$("#timelineSearch").val(),t=new URL("/member/timeline",window.location.origin);e&&t.searchParams.set("content",e),$.pjax({url:t.href,container:"#member-timeline",push:!0})}),$(document).on("click","#clearTimeline",()=>{$("#timelineSearch").val(""),$("#searchTimeline").click()}),$(document).on("keyup","#timelineSearch",e=>{e.key==="Enter"&&$("#searchTimeline").click()}),$(document).on("click","#searchPhotos",()=>{let e=$("#photoTagSearch").val(),t=$("#photoDescSearch").val(),o=new URL("/member/photos",window.location.origin);e&&o.searchParams.set("tag",e),t&&o.searchParams.set("description",t),$.pjax({url:o.href,container:"#member-photo",push:!0})}),$(document).on("click","#clearPhotos",()=>{$("#photoTagSearch").val(""),$("#photoDescSearch").val(""),$("#searchPhotos").click()}),$(document).on("keyup","#photoDescSearch",e=>{e.key==="Enter"&&$("#searchPhotos").click()})}bindPublish(){$(document).on("click","#saveProfile",()=>this.saveProfile()),$(document).on("click","#logout",()=>this.logout()),$(document).on("click","#uploadAvatar",()=>$("#avatarFile").click()),$(document).on("change","#avatarFile",e=>this.handleAvatarUpload(e)),$(document).on("click","#confirmPublish",async e=>{let t=$(e.currentTarget),o=t.data("action");o&&typeof this[o]=="function"&&await O(t,async()=>{await this[o]()})})}bindTagInput(){$(document).on("click","#addArticleTag",()=>{this.addTagFromInput("articleExtraTags","articleTags")}),$(document).on("keydown","#articleExtraTags",e=>{e.key==="Enter"&&(e.preventDefault(),this.addTagFromInput("articleExtraTags","articleTags"))}),$(document).on("click","#addPhotoTag",()=>{this.addTagFromInput("photoExtraTags","photoTags")}),$(document).on("keydown","#photoExtraTags",e=>{e.key==="Enter"&&(e.preventDefault(),this.addTagFromInput("photoExtraTags","photoTags"))})}addTagFromInput(e,t){let o=document.getElementById(e);if(!o)return;let i=(o.value||"").trim();i&&(this.addTagToSelector(t,i),o.value="")}addTagToSelector(e,t){let o=document.getElementById(e);if(!o)return;let i=Array.from(o.querySelectorAll('input[type="checkbox"]')).find(d=>d.value.trim().toLowerCase()===t.toLowerCase());if(i){i.checked=!0;return}let r=document.createElement("label");r.className="tag-option";let n=document.createElement("input");n.type="checkbox",n.value=t,n.checked=!0;let a=document.createElement("span"),l=document.createElement("i");l.className="fa fa-check";let u=document.createElement("em");u.textContent=t,a.appendChild(l),a.appendChild(u),r.appendChild(n),r.appendChild(a),o.appendChild(r)}bindPhotoUpload(){$(document).on("change","#photoFile",o=>{let i=o.target.files[0];if(!i)return;let r=new FileReader;r.onload=n=>{let a=$("#photoPreview");a.attr("src",n.target.result),a.show(),$("#imageLoadingPlaceholder").remove(),$("#previewContainer").addClass("active"),$("#dropZone").hide(),$("#fileName").text(i.name),$("#fileSize").text(N(i.size)),P()},r.readAsDataURL(i)}),$(document).on("click","#removeFileBtn",()=>{$("#photoFile").val(""),$("#previewContainer").removeClass("active"),$("#dropZone").show(),$("#photoPreview").attr("src",""),x()}),$(document).on("click","#viewPhotoBtn",()=>{let o=document.getElementById("photoPreview");o&&o.src&&C(o)});let e=document.getElementById("dropZone");e&&(["dragenter","dragover","dragleave","drop"].forEach(o=>{e.addEventListener(o,t,!1)}),["dragenter","dragover"].forEach(o=>e.addEventListener(o,()=>e.classList.add("drag-over"),!1)),["dragleave","drop"].forEach(o=>e.addEventListener(o,()=>e.classList.remove("drag-over"),!1)),e.addEventListener("drop",o=>{let r=o.dataTransfer.files,n=document.getElementById("photoFile");if(r.length>0){n.files=r;let a=new Event("change",{bubbles:!0});n.dispatchEvent(a)}},!1));function t(o){o.preventDefault(),o.stopPropagation()}}bindModal(){$("#closeDeleteModal").on("click",()=>this.hideDeleteModal()),$("#cancelDelete").on("click",()=>this.hideDeleteModal()),$("#confirmDelete").on("click",()=>this.confirmDelete()),$(document).on("click",".modal-overlay",e=>{e.target===e.currentTarget&&this.hideDeleteModal()})}bindViewContent(){let e=$("#viewContentModal");$("#closeViewContentModal, #closeViewContentBtn").on("click",()=>e.hide()),e.on("click",t=>{t.target===t.currentTarget&&$("#viewContentModal").hide()}),$(document).on("click",".mobile-content-toggle",t=>this.toggleMobileContent(t.target))}bindKeyboard(){$(document).on("keydown",e=>{e.key==="Escape"&&this.hideDeleteModal()})}toggleMobileContent(e){let t=$(e),o=t.prev(".mobile-content-wrapper");o.hasClass("collapsed")?(o.removeClass("collapsed"),t.html('<i class="fa fa-angle-up"></i> \u6536\u8D77\u5185\u5BB9')):(o.addClass("collapsed"),t.html('<i class="fa fa-angle-down"></i> \u5C55\u5F00\u5168\u6587'))}showContent(e,t="markdown"){let o=e;t==="markdown"&&typeof showdown<"u"?o=new showdown.Converter().makeHtml(e):t==="text"&&(o=$("<div>").text(e).html().replace(/\n/g,"<br>"));let i=$("<div>").html(o);if(i.find("img").css({"max-width":"100%",height:"auto"}),$("#viewContentModalBody").html(i),$("#viewContentModal").css("display","flex"),typeof Prism<"u")try{let r=document.getElementById("viewContentModalBody");r.querySelectorAll("pre code").length>0&&Prism.highlightAllUnder(r)}catch(r){console.error("\u4EE3\u7801\u9AD8\u4EAE\u5931\u8D25:",r)}}async saveProfile(){try{let e=new FormData;e.append("name",$("#nickname").val().trim()),e.append("sex",$("#gender").val()),e.append("sign",$("#signature").val().trim()),g();let o=await(await fetch("/Account/UpdateInfo",{method:"POST",body:e})).json();if(p(),!o.success)return c(o.message||"\u4FDD\u5B58\u5931\u8D25","error");c("\u4FDD\u5B58\u6210\u529F","success")}catch(e){console.error("\u4FDD\u5B58\u4E2A\u4EBA\u8D44\u6599\u5931\u8D25:",e),p(),c("\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5","error")}}async logout(){if(confirm("\u786E\u5B9A\u8981\u9000\u51FA\u767B\u5F55\u5417\uFF1F")){g();try{let e=await fetch("/Account/LogOut",{method:"POST"});e.redirected?window.location.href=e.url:e.ok?window.location.href="/":c("\u9000\u51FA\u5931\u8D25","error")}catch(e){console.error("\u9000\u51FA\u5931\u8D25:",e),c("\u9000\u51FA\u5931\u8D25","error")}finally{p()}}}async handleAvatarUpload(e){let t=e.target.files[0];if(!t)return;if(!t.type.startsWith("image/")){c("\u8BF7\u9009\u62E9\u56FE\u7247\u6587\u4EF6","error");return}let o=5*1024*1024;if(t.size>o){c("\u56FE\u7247\u6587\u4EF6\u4E0D\u80FD\u8D85\u8FC75MB","error");return}let i=new FileReader;i.onload=r=>{$("#avatarPreview, #userAvatar").attr("src",r.target.result)},i.readAsDataURL(t),await this.uploadImage(t)}async uploadImage(e){g();let t=new FormData;t.append("avatar",e);try{let i=await(await fetch("/Account/UpdateAvatar",{method:"POST",body:t})).json();if(p(),!i.success)return c(i.msg,"error");c("\u5934\u50CF\u4E0A\u4F20\u6210\u529F","success")}catch{p(),c("\u4E0A\u4F20\u53D1\u751F\u9519\u8BEF","error")}}deleteItem(e,t){this.state.currentDeleteItem={type:e,id:t},$(m.SELECTORS.deleteModal).show()}hideDeleteModal(){$(m.SELECTORS.deleteModal).hide(),this.state.currentDeleteItem=null}confirmDelete(){this.state.currentDeleteItem&&(g(),setTimeout(()=>{p(),this.hideDeleteModal(),c("\u5220\u9664\u6210\u529F","success"),$.pjax.reload("#"+this.getCurrentContainerId())},300))}getCurrentContainerId(){return location.pathname.includes("articles")?"member-article":location.pathname.includes("mumbles")?"member-mumble":location.pathname.includes("timeline")?"member-timeline":location.pathname.includes("photos")?"member-photo":"pjax-container"}async publishArticle(){let e=document.getElementById("submitAddress");if(!e)return;let t=e.value,o=document.getElementById("articleId").value,i=document.getElementById("articleTitle").value,r=document.getElementById("articleTags"),n=Array.from(r?.querySelectorAll('input[type="checkbox"]:checked')||[]).map(h=>h.value),a=document.getElementById("articleIntroduction").value,l="",u="";if(this.markdownEditor)l=this.markdownEditor.getMarkdown(),u=this.markdownEditor.getHtml();else{let h=document.getElementById("txt_articleContent");l=h?h.value:"",u=l}if(!i.trim())return c("\u6807\u9898\u4E0D\u80FD\u4E3A\u7A7A","warning");if(n.length===0)return c("\u8BF7\u9009\u62E9\u6807\u7B7E\u6216\u8F93\u5165\u8865\u5145\u6807\u7B7E","warning");if(!a.trim())return c("\u7B80\u4ECB\u4E0D\u80FD\u4E3A\u7A7A","warning");if(!l.trim()||l.length<5)return c("\u5185\u5BB9\u4E0D\u80FD\u4E3A\u7A7A","warning");let d=new FormData;o.trim()!==""&&d.append("id",o),d.append("title",i);for(let h of n)d.append("tags",h);d.append("introduction",a),d.append("markdown",l),d.append("content",u);try{let R=await(await fetch(t,{method:"POST",body:d})).json();if(!R.success)return c(R.msg||"\u53D1\u5E03\u5931\u8D25","error");c("\u6587\u7AE0\u53D1\u5E03\u6210\u529F","success"),$.pjax({url:"/member/articles",container:"#pjax-container"})}catch(h){c("\u53D1\u5E03\u5931\u8D25: "+h.message,"error")}}async publishMumble(){let e=document.getElementById("submitAddress");if(!e)return;let t=e.value,o=document.getElementById("mumbleId")?.value||"",i="",r="";if(this.markdownEditor)i=this.markdownEditor.getMarkdown(),r=this.markdownEditor.getHtml();else{let a=document.getElementById("mumbleContent");i=a?a.value:""}if(!i||!i.trim()||i.length<5)return c("\u8BF7\u8F93\u5165\u5185\u5BB9","warning");let n=new FormData;o.trim()!==""&&n.append("id",o),n.append("markdown",i),n.append("html",r);try{let l=await(await fetch(t,{method:"POST",body:n})).json();if(!l.success)return c(l.msg||"\u53D1\u5E03\u5931\u8D25","error");c("\u788E\u788E\u5FF5\u53D1\u5E03\u6210\u529F","success"),$.pjax({url:"/member/mumbles",container:"#pjax-container"})}catch(a){c("\u53D1\u5E03\u5931\u8D25: "+a.message,"error")}}async publishTimeline(){let e=document.getElementById("submitAddress");if(!e)return;let t=e.value,o=document.getElementById("timelineId").value,i=document.getElementById("timelineTitle").value,r=document.getElementById("timelineMore").value,n=document.getElementById("timelineDate").value,a="";if(this.markdownEditor)a=this.markdownEditor.getMarkdown();else{let u=document.getElementById("timelineContent");a=u?u.value:""}if(!i.trim())return c("\u6807\u9898\u4E0D\u80FD\u4E3A\u7A7A","warning");if(!n.trim())return c("\u65F6\u95F4\u4E0D\u80FD\u4E3A\u7A7A","warning");if(!a.trim()||a.length<5)return c("\u5185\u5BB9\u4E0D\u80FD\u4E3A\u7A7A","warning");let l=new FormData;o.trim()!==""&&l.append("id",o),l.append("title",i),l.append("more",r),l.append("date",n),l.append("content",a);try{let d=await(await fetch(t,{method:"POST",body:l})).json();if(!d.success)return c(d.msg||"\u53D1\u5E03\u5931\u8D25","error");c("\u65F6\u95F4\u8F74\u53D1\u5E03\u6210\u529F","success"),$.pjax({url:"/member/timeline",container:"#pjax-container"})}catch(u){c("\u53D1\u5E03\u5931\u8D25: "+u.message,"error")}}async publishPhoto(){let e=document.getElementById("submitAddress");if(!e)return;let t=e.value,o=document.getElementById("photoId")?.value||"",r=document.getElementById("photoFile").files[0];if(o.trim()===""&&!r)return c("\u8BF7\u9009\u62E9\u7167\u7247","warning");let n=document.getElementById("photoTags"),a=document.getElementById("photoDescription").value,l=new FormData;o.trim()!==""&&l.append("id",o),r&&l.append("photo",r),l.append("description",a);let u=Array.from(n?.querySelectorAll('input[type="checkbox"]:checked')||[]).map(d=>d.value);for(let d of u)l.append("tags",d);try{k("\u6B63\u5728\u4E0A\u4F20\u7167\u7247...");let d=await this.uploadWithProgress(t,l,h=>S(h,"\u6B63\u5728\u4E0A\u4F20\u7167\u7247..."));if(!d.success)return c(d.msg||"\u4E0A\u4F20\u5931\u8D25","error");c("\u7167\u7247\u4E0A\u4F20\u6210\u529F","success"),$.pjax({url:"/member/photos",container:"#pjax-container"})}catch(d){c("\u4E0A\u4F20\u5931\u8D25: "+d.message,"error")}finally{y()}}uploadWithProgress(e,t,o){return new Promise((i,r)=>{let n=new XMLHttpRequest;n.open("POST",e,!0),n.upload&&o&&(n.upload.onprogress=a=>{if(a.lengthComputable){let l=Math.round(a.loaded/a.total*100);o(l)}}),n.onload=()=>{if(n.status>=200&&n.status<300)try{let a=JSON.parse(n.responseText);i(a)}catch{r(new Error("Invalid JSON response"))}else r(new Error(`Upload failed with status ${n.status}`))},n.onerror=()=>r(new Error("Network error")),n.send(t)})}async fileUpload(e,t,o){let i=new FormData;i.append("image",e);try{k("\u6B63\u5728\u4E0A\u4F20\u56FE\u7247...");let r=await this.uploadWithProgress(o,i,n=>S(n,"\u6B63\u5728\u4E0A\u4F20\u56FE\u7247..."));y(),t(r.url||"")}catch(r){y(),c("\u56FE\u7247\u4E0A\u4F20\u5931\u8D25: "+r.message,"error"),console.error("\u56FE\u7247\u4E0A\u4F20\u5931\u8D25:",r),t("")}}};$(document).ready(()=>{try{window.memberCenter=new I}catch(s){console.error("\u4E2A\u4EBA\u4E2D\u5FC3\u521D\u59CB\u5316\u5931\u8D25:",s)}});export{I as MemberCenter};
//# sourceMappingURL=main.min.js.map
评论加载中...