main_content = $('.moment_type_main'); function remove_image_temp(){ if(!$('.image_edit_temp .add_img_box').length > 0){ var temp = $('.add_img_box'); $('.image_edit_temp').html(temp); } main_content.empty(); } function back_image_temp(){ var temp = $('.add_img_box'); main_content.html(temp); $('.image_edit_temp').empty(); } //发布卡片 $('body').on('click', '.moment_card_type a', function () { $('.push_item').attr('type', 'card'); main_content = $('.moment_type_main'); if ($('.add_card_box').length > 0) { return false; } remove_image_temp(); main_content.html('
'); $('.moment_type_main .loading_box').remove(); main_content.append( `
# 输入别名或者标题,自动生成链接卡片 支持文章, 页面等网址
`); }); $('body').on('click', '.edit_content .push_card', function () { var card_url = $('.edit_card_box .edit_content input').val(); var num = $('.card_sortble .moment_card_item').length; if (num > 2) { cocoMessage.error('最多插入3个卡片'); $('.edit_card_box .edit_content input').val(''); return false; } var c_type = $('.card_choose .uk-active a').attr('c_type'); switch (c_type) { case "post": card_post(card_url); break; case "page": edit_page(card_url); break; } }); function card_post(card_url){ $.ajax({ type: 'GET', url: `/apis/api.console.halo.run/v1alpha1/posts?keyword=${card_url}&labelSelector=content.halo.run%2Fdeleted%3Dfalse&page=1&size=20`, beforeSend: function () { cocoMessage.info('生成中...'); }, success: function (data) { $('.edit_card_box .edit_content input').val(''); if (data.total > 0) { if(data.total>1){ cocoMessage.error('当前搜索的文章有多个无法选择'); }else{ var item = data.items[0] $('.show_card').show(); $('.card_sortble').append(getcard(item.post.metadata.name,item.post.spec.cover,item.post.spec.title,'post')); cocoMessage.success('已生成卡片'); } } else { cocoMessage.error('文章不存在'); } } }); } function edit_page(card_url){ $.ajax({ type: 'GET', url: `/apis/api.console.halo.run/v1alpha1/singlepages?keyword=${card_url}&labelSelector=content.halo.run%2Fdeleted%3Dfalse&page=1&size=20`, beforeSend: function () { cocoMessage.info('生成中...'); }, success: function (data) { $('.edit_card_box .edit_content input').val(''); if (data.total > 0) { if(data.total>1){ cocoMessage.error('当前搜索的页面有多个无法选择'); }else{ var item = data.items[0] $('.show_card').show(); $('.card_sortble').append(getcard(item.page.metadata.name,item.page.spec.cover,item.page.spec.title,'page')); cocoMessage.success('已生成卡片'); } } else { cocoMessage.error('页面不存在'); } } }); } function getcard(name,cover,title,type){ return `

${title}

` } $(document).on('click', '.de_card', function() { var msg = "确认删除此卡片?"; var num = $('.moment_card_item').length; if (confirm(msg)==true){ $(this).parents('.moment_card_item').remove(); } else { return false; } if(num == 1){ $(".show_card").hide(); } }); //图文编辑 返回图文编辑区域 $('body').on('click', '.moment_image_type a', function() { back_image_temp(); $('.push_item').attr('type','image'); }); //发布音乐-------------------------------------------------------------- $('body').on('click', '.moment_audio_type a', function() { $('.push_item').attr('type','audio'); main_content = $('.moment_type_main'); if($('.add_audio_box').length > 0){ return false; } remove_image_temp(); main_content.append( `
# 请插入歌曲外链
`); }); //音乐和视频上传 $(document).on('change','#moment_img_up',function(){ if($('#moment_img_up').val() == '') return; var f = this.files[0]; var formData = new FormData(); formData.append('file',f); const policyName = Theme.moments.policy_name; const groupName = Theme.moments.group_name; policyName && formData.append('policyName',policyName) groupName && formData.append('groupName',groupName) $.ajax({ type: "POST", url: `${Theme.moments.attachments_upload_api}`, dataType: 'json', data: formData, processData : false, contentType : false, beforeSend: function () { cocoMessage.info('上传中...'); $('.m_media_left i').remove(); $('.m_media_left').append("
"); var imged = $('.m_media_left img'); if(imged.length > 0){ imged.remove(); } }, success: function(data){ var thum = data.metadata.annotations["storage.halo.run/uri"] || data.metadata.annotations["storage.halo.run/external-link"] $('.m_media_left .up_loading').remove(); $('.m_media_left').append(''); cocoMessage.success('上传成功'); $('input#moment_video_url').val(thum) } }); }); $('body').on('click', '.audio_choose a', function() { var text = '# 请插入封面,歌名以及歌曲外链'; var type = $(this).attr('au_type'); if(type != 'local'){ var text = '# 请输入歌曲ID'; } $('.edit_audio_box .tips').text(text); }); //发布视频-------------------------------------------------------------- $('body').on('click', '.moment_video_type a', function() { $('.push_item').attr('type','video'); main_content = $('.moment_type_main'); if($('.add_video_box').length > 0){ return false; } remove_image_temp(); main_content.html('
'); $('.moment_type_main .loading_box').remove(); main_content.append( `
# 请上传视频或填写视频外链
`); }); $('body').on('click', '.video_choose a', function() { var text = '# 请上传视频或填写视频外链'; var type = $(this).attr('vi_type'); if(type == 'bili'){ var text = '# 请输入B站视频bvid'; } $('.edit_video_box .tips').text(text); }); //图文类型 //$('body').on('click', '.moment_video_type a', function() { //}); //删除片刻文章 $('body').on('click', '.control_delete_post', function() { var pid = $(this).parent().attr('pid'); var msg = "确定删除瞬间?"; if (confirm(msg)==true){ $.ajax({ type: 'DELETE', dataType: 'json', url: `/apis/${Theme.moments.api}/v1alpha1/moments/`+pid, contentType: "application/json", beforeSend: function () { cocoMessage.info('处理中..'); }, success: function (data) { cocoMessage.success('删除成功'); setTimeout(()=>{ $(`#post-${pid}`)[0].remove() },1000) }, error: function (request) { if(request.status){ cocoMessage.error('瞬间不存在或已删除'); }else{ cocoMessage.error('删除失败'); } console.log(request) }, }); } else { return false; } }); //置顶片刻 $('body').on('click', '.sticky_btn', function() { var pid = $(this).parent().attr('pid'); var stick = $(this).hasClass('stick'); if(stick){ var state = 'stick'; } else { var state = 'unstick'; } var msg = "确定执行此操作?"; if (confirm(msg)==true){ $.ajax({ type: 'POST', dataType: 'json', url: Theme.ajaxurl, data: { 'action':'stick_moment', pid:pid, state:state }, beforeSend: function () { cocoMessage.info('处理中..'); }, success: function (data) { if(data.state == '1'){ cocoMessage.success(data.msg); if(data.type == 'stick'){ var post_item = $('#post-'+pid+'.moment_item'); post_item.remove(); $('.moment_list').prepend(post_item.prop('outerHTML')); $('#post-'+pid+'.moment_item').find('.post_footer_meta .right').prepend(' TOP'); $('#post-'+pid+'.moment_item').find('.post_control').remove(); } else { $('#post-'+pid+'.moment_item').find('.sticky_icon').remove(); } } else { cocoMessage.error('操作失败'); } } }); } else { return false; } }); //编辑片刻 $('body').on('click', '.control_edit_post', function() { $(".loca_text").empty().attr("state",'0'); $(".loca_text").attr("uk-tooltip", "title:获取位置; pos: top; offset:2;"); $('.moment_image_type a').click(); $('#topic_content').val(''); $(".simi a").html('').attr('visible','PUBLIC'); $(".simi a").children().css({"background":"#e3efe7","color":"#66c187"}); $('.t_media_item').remove(); $('#moment_audio_api').remove(); var pid = $(this).parent().attr('pid'); $('.push_item').html('更新'); $('.push_item').attr('pid',pid).attr('action','update') $.ajax({ type: 'GET', url: `/apis/${Theme.moments.api}/v1alpha1/moments/`+pid, beforeSend: function () { cocoMessage.info('数据拉取中'); //$('.t_form').before('
'); }, success: function (data) { $('.push_item').attr('version',data.metadata.version) $('.push_item').attr('owner',data.spec.owner) $('.push_item').attr('releaseTime',data.spec.releaseTime) //发布状态 if(data.spec.visible == 'PRIVATE'){ $(".simi a").html('').attr('visible','PRIVATE'); $(".simi a").children().css({"background":"#ddd","color":"#c6c6c6"}); } else { $(".simi a").html('').attr('visible','PUBLIC'); $(".simi a").children().css({"background":"#e3efe7","color":"#66c187"}); } var medium = data.spec.content.medium; var tags = data.spec.tags if(medium.length > 0){ var type = medium[0].type; } let content = data.spec.content.html; if(content == null){ content = ''; }else{ // 创建一个新的HTML解析器对象 var parser = new DOMParser(); // 解析HTML字符串并获取根元素 var doc = parser.parseFromString(content, 'text/html'); // 获取根元素下的所有子元素 var elements = doc.body.childNodes; // 需要删除的链接元素的条件 var conditions = doc.querySelectorAll('p > a.tag'); // 遍历子元素并删除特定段落元素和链接元素 for (var i = 0; i < conditions.length; i++) { for (var j = 0; j < elements.length; j++) { if (elements[j].nodeName === 'P' && elements[j].querySelector('a.tag')) { elements[j].parentNode.removeChild(elements[j]); } } content = doc.body.innerHTML; } } $('#topic_content').val(content); if(tags.length > 0){ $('.t_cat_toogle span').text(tags[0]); } if(data.metadata.annotations?.mylocal!=null && data.metadata.annotations?.mylocal!='') { $('.loca_text').text(data.metadata.annotations?.mylocal); } switch(type) { case "PHOTO": //if(data.moment_data.length > 0){ 文字片刻没有数据 edit_image(data); //} break; case "POST": edit_card(data); break; case "AUDIO": edit_audio(data); break; case "VIDEO": edit_video(data); break; } cocoMessage.success('拉取完成'); } }); }); //发布片刻重置 $('body').on('click', '.normal_edit,.center .mobile_edit', function() { $('.push_item').attr('action','push').html('发布'); $('.moment_image_type a').click(); $(".simi a").html('').attr('visible','PUBLIC'); $(".simi a").children().css({"background":"#e3efe7","color":"#66c187"}); $('#topic_content').val(''); $(".loca_text").empty().attr("state",'0'); $('#set_local, [name="set_local"]').val(''); $('.t_media_item').remove(); $('.t_cat_toogle span').text('叽里咕噜'); }); //编辑片刻类型(已兼容图片+视频)------------------------------------------------------------------------------ function edit_image(data){ var m_data = data.spec.content.medium; $('.t_media_item').remove(); $('.moment_image_type a').click(); if(m_data && m_data.length > 0){ // reverse() 是为了配合 prepend,确保显示顺序与发布时一致 var new_data = [...m_data].reverse(); $.each(new_data, function(index, value) { var src = value.url; var type = value.originType || ""; // 获取 MIME 类型 var mediaInnerHtml = ''; // --- 核心逻辑:判定是否为视频 --- // 1. 检查 MIME 类型是否以 video/ 开头 // 2. 检查文件名后缀是否为常见的视频格式(防止 originType 丢失的情况) var isVideo = type.startsWith('video/') || src.toLowerCase().endsWith('.mp4') || src.toLowerCase().endsWith('.webm') || src.toLowerCase().endsWith('.mov'); if (isVideo) { // 如果是视频,使用 video 标签预览 mediaInnerHtml = ``; } else { // 如果是图片,保持原有的 img 标签 mediaInnerHtml = ``; } // 构建外层容器 var media = `
${mediaInnerHtml}
`; $(".img_show").prepend(media); }); } } function edit_video(data){ var m_data = data.spec.content.medium[0]; var type = m_data.originType; //var url = m_data.url; $('.moment_video_type a').click(); var add = setInterval(function() { if(type != 'video/bili'){ var url = m_data.url; $('input#moment_video_url').val(url); if(url !== ''){ $('.m_media_left i').remove(); $('.m_media_left').append(''); } } else if(type == 'video/bili') { if($('.video_choose').length > 0){ var bvid = m_data.url; UIkit.switcher('.video_choose').show(1); $('input#moment_video_bili').val(bvid); } } if($('.edit_video_box').length == 1){ clearInterval(add); } }, 100); } function edit_audio(data){ var m_data = data.spec.content.medium[0]; var type = m_data.originType; $('.moment_audio_type a').click(); var add = setInterval(function() { if(type == 'audio/netease' || type == 'audio/tencent' || type == 'audio/kugou' || type == 'audio/kuwo'){ var result = type.substring(type.indexOf("audio/") + 6); if($('.audio_choose').length > 0){ var n_id = m_data.url; var index = $('.audio_choose li.'+result+'').index(); UIkit.switcher('.audio_choose').show(index); $('.edit_audio_box .tips').text('# 请输入歌曲ID'); $('.'+result+'_audio').append(''); $('input#moment_audio_api').val(n_id); } } else { var index = $('.audio_choose li.local').index(); UIkit.switcher('.audio_choose').show(index); var url = m_data.url; $('.edit_audio_box .tips').text('# 请插入歌曲外链'); $('input#moment_audio_url').val(url); } if($('.edit_audio_box').length == 1){ clearInterval(add); } }, 100); } function edit_card(data) { var m_data = data.spec.content.medium; $('.card_sortble .moment_card_item').remove(); $('.moment_card_type a').click(); var pid = data.metadata.name; var card_list = $("#post-"+pid+"").find('.moment_card_item'); var add = setInterval(function() { $('.show_card').show(); $.each(m_data, function(index, value) { var srcValue = card_list.eq(index).find('img').attr('src'); var h4Text = card_list.eq(index).find('h4').text(); $('.card_sortble').append(getcard(value.url,srcValue,h4Text,value.originType)); }); if($('.edit_card_box').length == 1){ clearInterval(add); } }, 100); }