Files
halo-theme-pix/templates/assets/js/app.js
T
2026-03-10 17:17:32 +08:00

1595 lines
52 KiB
JavaScript

var $body = (window.opera) ? (document.compatMode == "CSS1Compat" ? $('html') : $('body')) : $('html,body');
var storage = window.localStorage;
var lazyLoadInstance = new LazyLoad({});
$(document).on('click', '.left_menu_box ul li a , .widget_nav_menu ul li a, .menu-top-container ul li a', function () {
var t = $(this);
t.siblings("ul").slideToggle(200);
t.parent().siblings().find("ul").hide(200);
if (t.parent().hasClass('has_children')) {
t.find('.drop_icon').toggleClass('up');
}
$('.left_menu_box ul li').removeClass('current-pjax-item current-menu-item current-menu-parent current-menu-ancestor');
t.parent().addClass('current-pjax-item');
});
var route = location.href.substring(0, location.href.indexOf('?') === -1 ? (location.href.indexOf('#') === -1 ? location.href.length : location.href.indexOf('#')) : location.href.indexOf('?'))
$('.left_menu_box ul li a').each((i, e) => {
if (e.parentElement.childNodes.length > 3) {
return
}
let href = e.href.substring(0, e.href.indexOf('?') === -1 ? (e.href.indexOf('#') === -1 ? e.href.length : e.href.indexOf('#')) : e.href.indexOf('?'))
if (route === href) {
e.parentElement.classList.add('current-pjax-item')
}
})
$('.left_menu_box ul li ul li a').each((i, e) => {
let href = e.href.substring(0, e.href.indexOf('?') === -1 ? (e.href.indexOf('#') === -1 ? e.href.length : e.href.indexOf('#')) : e.href.indexOf('?'))
if (route === href) {
e.parentElement.parentElement.parentElement.classList.add('current-pjax-item')
}
})
//全局loading
function loading_template() {
tag = '<div class="loader" uk-spinner></div>';
tag += '</div>';
return tag;
}
function loading_start(target) {
target.append(loading_template());
}
function loading_done(target) {
target.children('.loader').remove();
}
//话题表情添加
$(document).on('click', 'a.smile_btn', function () {
var a = $(this).html();
var textarea = $("textarea#topic_content");
var content = textarea.val();
textarea.val(content + a);
textarea.focus();
});
$(document).on('click', '.smile_box i', function () {
var t = $(".smile_show");
t.slideToggle(100);
});
//选择话题
$(document).on('click', '.t_cat_box li', function () {
var name = $(this).find('.c_name span').html();
$('.t_cat_toogle span').html(name);
UIkit.dropdown('.t_cat_box').hide(false);
});
$(document).on('click', '.up_cat_btn', function () {
var name = $('input#add_cat').val();
if (!name) {
cocoMessage.error("请填写话题");
return false;
}
$('.t_cat_toogle span').text(name)
UIkit.dropdown('.t_cat_box').hide(false);
});
$(document).on('click', '.simi a', function () {
var visible = $(this).attr('visible');
if (visible == 'PUBLIC') {
$(this).html('<i class="ri-lock-line"></i>').attr('visible', 'PRIVATE');
$(this).children().css({"background": "#ddd", "color": "#c6c6c6"});
} else {
$(this).html('<i class="ri-lock-unlock-line"></i>').attr('visible', 'PUBLIC');
$(this).children().css({"background": "#e3efe7", "color": "#66c187"});
}
});
//消息通知
cocoMessage.config({
duration: 2000,
});
//sortable事件 隐藏input
UIkit.util.on('.img_show', 'start', function (item) {
$(".up_img_btn").hide();
});
UIkit.util.on('.img_show', 'moved', function (item) {
var img_num = $('.add_img_box .t_media_item').length;
if (img_num < 9) {
$(".up_img_btn").show();
}
});
UIkit.util.on('.img_show', 'stop', function (item) {
var img_num = $('.add_img_box .t_media_item').length;
if (img_num < 9) {
$(".up_img_btn").show();
}
});
//ajax上传图片到媒体库
$(document).on('change', '#topic_img_up', function (e) {
e.preventDefault();
if ($('#topic_img_up').val() == '') {
return;
}
const policyName = Theme.moments.policy_name;
const groupName = Theme.moments.group_name;
var files = $('#topic_img_up')[0].files;
var imgtot = 0;
var num = $('.add_img_box .t_media_item').length;
// 检查选择的图片数量是否会导致总数超过限制
if (num + files.length > 9) {
cocoMessage.error("最多上传9张图片, 当前已上传" + num + "张。" + "你选择了" + files.length + "张");
return; // 阻止上传
}
// 计算总大小
$.each(files, function (i, file) {
imgtot += file['size'];
});
var tot = imgtot / 1024000;
$(".up_img_btn i").remove();
$(".up_img_btn").prepend("<div class='img_load_text'><div uk-spinner='ratio: .6'></div><span>" + tot.toFixed(2) + "MB</span></div>");
// 上传图片
$.each(files, function (i, file) {
var data = new FormData();
data.append('file', file);
policyName && data.append('policyName', policyName);
groupName && data.append('groupName', groupName);
$.ajax({
type: "POST",
url: `${Theme.moments.attachments_upload_api}`,
dataType: 'json',
data: data,
processData: false,
contentType: false,
beforeSend: function () {
$('input#topic_img_up').attr('disabled', 'disabled');
},
success: function (data) {
var thum = data.metadata.annotations["storage.halo.run/uri"] || data.metadata.annotations["storage.halo.run/external-link"] || data.metadata.annotations["lskypro.plugin.halo.chenhe.me/image-link"];
var src = thum;
var media = '<div class="t_media_item" data-src="' + src + '" data-thum="' + thum + '">';
media += '<a class="topic-img-de"><i class="ri-subtract-line"></i></a>';
media += '<img src="' + thum + '">';
media += '</div>';
$(".img_show").prepend(media);
num = $('.add_img_box .t_media_item').length;
if (num >= 8) {
$("a.up_img_btn").hide();
}
$(".img_load_text").remove();
$('input#topic_img_up').removeAttr('disabled');
},
});
});
$(".up_img_btn").prepend("<i class='ri-add-line'></i>");
});
//检查上传图片数量
function check_image_num() {
var num = $('.add_img_box .t_media_item').length;
if (num > 8) {
cocoMessage.error("最多上传9张图片");
return true;
}
//if(num == '8'){$("a.up_img_btn").hide();}
}
//sortable事件 隐藏input
UIkit.util.on('.img_show', 'start', function (item) {
$(".up_img_btn").hide();
});
UIkit.util.on('.img_show', 'moved', function (item) {
var img_num = $('.add_img_box .t_media_item').length;
if (img_num < 9) {
$(".up_img_btn").show();
}
});
UIkit.util.on('.img_show', 'stop', function (item) {
var img_num = $('.add_img_box .t_media_item').length;
if (img_num < 9) {
$(".up_img_btn").show();
}
});
//获取媒体库图片
$(document).on('click', '.up_from_media a', function () {
$(".attch_nav .pre").hide();
$(".attch_nav .nex").hide();
$(".attch_nav").attr('paged', '1');
$(".wp_get_media_list").empty();
$(".show_media_box").show();
$.ajax({
type: "get",
url: `/apis/${Theme.moments.attachments_api}/v1alpha1/attachments?group=&page=1&size=40&ungrouped=false&accepts=image/*`,
contentType: "application/json",
beforeSend: function () {
},
success: function (data) {
var list = data.items;
$.each(list, function (i, value) {
var thum = value.status.permalink;
var src = value.status.permalink;
var wf_media = '<li data-src="' + src + '"><img src="' + thum + '"></li>';//图片预览
$(".wp_get_media_list").append(wf_media);
});
var max = data.totalPages;
if (max > 1) {
$(".attch_nav .nex").show();
} else {
$(".attch_nav .nex").hide();
}
}
});
});
//媒体库分页
$(document).on('click', '.attch_nav a', function () {
$(".wp_get_media_list").empty();
var type = $(this).attr('class');
var paged = $(".attch_nav").attr('paged');
if (type == 'nex') {
var paged = parseInt(paged) + 1;
} else if (type == 'pre' && paged !== '') {
var paged = parseInt(paged) - 1;
}
$(".attch_nav").attr('paged', paged);
$.ajax({
type: "get",
url: `/apis/${Theme.moments.attachments_api}/v1alpha1/attachments?group=&page=${paged}&size=40&ungrouped=false&accepts=image/*`,
contentType: "application/json",
beforeSend: function () {
},
success: function (data) {
$(".wp_get_media_list").empty();
var list = data.items;
$.each(list, function (i, value) {
var thum = value.status.permalink;
var src = value.status.permalink;
var mediaType = value.spec.mediaType
var wf_media = `<li data-src="${src}" data-type="${mediaType}"><img src="${thum}"></li>`;//图片预览
$(".wp_get_media_list").append(wf_media);
});
var max = data.totalPages;
if (max <= paged) {
$(".attch_nav .nex").hide();
} else {
$(".attch_nav .nex").show();
}
if (paged > 1) {
$(".attch_nav .pre").show();
} else {
$(".attch_nav .pre").hide();
}
}
});
});
//收起媒体库
$(document).on('click', '.show_media_box .souqi', function () {
$(".show_media_box").hide();
$(".wp_get_media_list").empty();
});
//从媒体库插入图片
$(document).on('click', '.wp_get_media_list li', function () {
var num = $('.add_img_box .t_media_item').length;
if (num == '8') {
$("a.up_img_btn").hide();
}
if (check_image_num()) {
return false;
}
;
var thum = $(this).children().attr('src');
var src = $(this).attr('data-src');
var type = $(this).attr('data-type');
var media = '<div class="t_media_item" data-src="' + src + '" data-thum="' + thum + '" data-type="' + type + '">';
media += '<a class="topic-img-de"><i class="ri-subtract-line"></i></a>';
media += '<img src="' + thum + '">';//图片预览
media += '</div>';
$(".img_show").prepend(media);
});
//删除图片
$(document).on('click', '.topic-img-de', function () {
var msg = "确认删除此图片?";
if (confirm(msg) == true) {
$(this).parent().remove();
} else {
return false;
}
var num = $('.add_img_box .t_media_item').length;
if (num < 9) {
$("a.up_img_btn").show();
}
});
//插入外部图片链接
$(document).on('click', '.up_from_cdn a', function () {
//$(".show_media_box .souqi").click();
$(".show_cdn_media").show();
});
//取消
$(document).on('click', 'a.img_link_cancel', function () {
$(".show_cdn_media").hide();
});
//插入
$(document).on('click', 'a.img_link_btn', function () {
var img_url = $("#img_link_up").val();
//获得上传文件名
if (!/\.(jpg|png|gif|webp|jpeg)$/.test(img_url) || img_url == '') {
cocoMessage.error("图片格式不正确!");
return false;
}
if (check_image_num()) {
return false;
}
var num = $('.add_img_box .t_media_item').length;
if (num == '8') {
$("a.up_img_btn").hide();
}
var src = img_url;
var type = 'image/' + img_url.substring(img_url.lastIndexOf('.') + 1);
var media = '<div class="t_media_item" data-src="' + src + '" data-thum="' + src + '" data-type="' + type + '">';
media += '<a class="topic-img-de"><i class="ri-subtract-line"></i></a>';
media += '<img src="' + src + '">';//图片预览
media += '</div>';
$(".img_show").prepend(media);
$("#img_link_up").val('');
});
//ajax获取我的地理位置
$(document).on('click','.loca .laqu',function(){
var gaode_key = Theme.moments.gaode_key;
var ip = '';
$.ajax({
type: "get",
url:`/apis/uc.api.security.halo.run/v1alpha1/devices`,
contentType: "application/json",
success: function(data){
if(data.length>0){
var ipAddress = data[0].device.spec.ipAddress;
if (!/^10\.|^192\.|^168\.|^172\./.test(ipAddress)) {
ip = data[0].device.spec.ipAddress
}
}
$.ajax({
type: "get",
url:`https://restapi.amap.com/v3/ip?ip=${ip}&key=${gaode_key}`,
contentType: "application/json",
beforeSend: function () {
$(".loca_text").text("数据拉取中..");
},
success: function(data){
if(data.status == '1') {
var city = 'X市' ;
if(typeof data.city === 'string') {
city = data.city;
}
var province = 'X省';
if(typeof data.province === 'string') {
province = data.province;
}
var loca = ""+province+" · "+city+"";
$.cookie('mylocal', loca, { expires: 30, path: '/' });
$(".loca_text").html(loca).attr("state",'1'); //设置为开启
}else{
cocoMessage.error(data.info);
}
}
});
}
});
});
//插入自定义位置
$(document).on('click','a.set_local_btn',function(){
var loca = $("#set_local").val();
var state = $(".loca_text").attr('state');
//$("a.close_local").text('位置已开启').css('color','#8890cc');
if(loca == ''){
cocoMessage.error("为空则不显示位置");
$(".loca_text").text('').attr("state",'0');
$("a.close_local").text('位置已关闭').css('color','#ddd');
$.removeCookie('mylocal',{ path: '/'});
} else {
$(".loca_text").text(loca).attr("state",'1');
$("a.close_local").text('位置已开启').css('color','#8890cc');
$.cookie('mylocal', loca, { expires: 30, path: '/' });
}
});
//关闭地理位置
$(document).on('click','a.close_local',function(){
$(".loca_text").text('').attr("state",'0');
$("a.close_local").text('位置已关闭').css('color','#ddd');
$.removeCookie('mylocal',{ path: '/'});
});
$(document).on('click','.loca_text',function(){
$("a.close_local").text('位置已开启').css('color','#8890cc');
});
//发布更新瞬间
$(document).on('click', '.push_item', function () {
var content = $("#topic_content").val(); //内容
var catname = $(".t_cat_toogle span").text(); //分类名
var loca = $(".loca_text").text(); //位置
var act = $('.push_item').attr('action');
var pid = $('.push_item').attr('pid');
var moment_type = $('.push_item').attr('type'); //片刻类型
var visible = $(".simi a").attr('visible'); //私密 PUBLIC:公开 PRIVATE:私密
var min = Theme.moments.min_push_num;
if (min > 0) {
if (content == '') {
cocoMessage.error("请输入内容");
return false;
}
if (content.length < min) {
cocoMessage.error("内容不得少于" + min + "个字");
return false;
}
}
let tags = []
if (catname != null && catname != '') {
tags.push(catname)
content += `<p><a class=\"tag\" href=\"?tag=${catname}\" data-pjax=\"\">${catname}</a></p>`
}
get_moment_data(moment_type);
if (act == 'push') {
var pushData = {
apiVersion: 'moment.halo.run/v1alpha1',
kind: 'Moment',
metadata: {
generateName: "moment-",
},
spec: {
content: {
html: content,
medium: moment_data,
raw: content
},
owner: "",
tags: tags,
visible: visible
},
}
if(loca!=null && loca!='' && loca!='数据拉取中..') {
pushData.metadata.annotations = {
"mylocal": loca
};
}
$.ajax({
type: "post",
url: `/apis/${Theme.moments.push_api}/v1alpha1/moments`,
contentType: "application/json",
data: JSON.stringify(pushData),
beforeSend: function () {
cocoMessage.info("发布中..");
},
success: function (data) {
cocoMessage.success('发布成功!');
location.reload();
},
error: function (request) {
cocoMessage.success('发布失败!');
console.log(request)
}
});
}
if (act == 'update') {
var version = $('.push_item').attr('version');
var owner = $('.push_item').attr('owner');
var releaseTime = $('.push_item').attr('releaseTime');
var updateData = {
apiVersion: 'moment.halo.run/v1alpha1',
kind: 'Moment',
metadata: {
generateName: "moment-",
name: pid,
finalizers: ["tag-moment-protection", "moment-protection"],
version: parseInt(version)
},
spec: {
content: {
html: content,
medium: moment_data,
raw: content
},
owner: owner,
releaseTime: releaseTime,
tags: tags,
visible: visible
},
}
if(loca!=null && loca!='' && loca!='数据拉取中..') {
updateData.metadata.annotations = {
"mylocal": loca
};
}
$.ajax({
type: "PUT",
url: `/apis/${Theme.moments.api}/v1alpha1/moments/` + pid,
contentType: "application/json",
data: JSON.stringify(updateData),
beforeSend: function () {
cocoMessage.info("更新中..");
},
success: function (data) {
cocoMessage.success('更新成功!');
location.reload();
},
error: function (request) {
cocoMessage.success('更新失败!');
console.log(request)
}
});
}
});
//获取片刻类型参数
function get_moment_data(type) {
moment_data = [];
switch (type) {
case "image":
$(".t_media_item").each(function () {
var src = $(this).attr('data-src');
var type = $(this).attr('data-type');
var obj = {
url: src,
type: "PHOTO",
originType: type
}
moment_data.push(obj); //图片
});
break;
case "card":
$(".card_sortble .moment_card_item").each(function () {
var pid = $(this).attr('pid');
var type = $(this).attr('type');
var obj = {
url: pid,
type: "POST",
originType: type
}
moment_data.push(obj); //卡片
});
break;
case "audio":
get_audio_data();
break;
case "video":
get_video_data();
break;
}
}
//片刻音乐参数
function get_audio_data() {
var type = $('.audio_choose li.uk-active a').attr('au_type');
if (type == 'local') {
var url = $('input#moment_audio_url').val();
var obj = {
url: url,
type: "AUDIO",
originType: 'audio/' + type
}
} else {
var n_id = $('input#moment_audio_api').val();
var obj = {
url: n_id,
type: "AUDIO",
originType: 'audio/' + type
}
}
moment_data.push(obj);
}
//片刻视频参数
function get_video_data() {
var type = $('.video_choose li.uk-active a').attr('vi_type');
if (type == 'local') {
var url = $('input#moment_video_url').val();
var obj = {
url: url,
type: "VIDEO",
originType: 'video/mp4'
}
} else if (type == 'bili') {
var bvid = $('input#moment_video_bili').val();
var obj = {
url: bvid,
type: "VIDEO",
originType: 'video/bili'
}
}
moment_data.push(obj);
}
//片刻空值提示
function get_moment_error(type) {
switch (type) {
case "card":
var v = $('.show_card .moment_card_item');
if (v.length == 0) {
return false;
}
break;
case "audio":
var au_type = $('.audio_choose li.uk-active a').attr('au_type');
var url = $('input#moment_audio_url').val(); //歌曲链接
var title = $('input#moment_audio_name').val(); //标题
var cover = $('.loacl_audio .audio_left img').length; //封面
if (au_type == 'local') {
if (url == '' || title == '' || cover == 0) {
return false;
}
} else {
var n_id = $('input#moment_audio_api').val();
if (n_id == '') {
return false;
}
}
break;
case "video":
var vi_type = $('.video_choose li.uk-active a').attr('vi_type');
var url = $('input#moment_video_url').val();
//var cover = $('.m_media_left img').length;
if (vi_type == 'local') {
if (url == '') {
return false;
}
} else {
var bvid = $('input#moment_video_bili').val();
if (bvid == '') {
return false;
}
}
break;
}
}
//ajax 分类筛选 moment
$(document).on('click', '.moment_cat_nav ul li a', function () {
var t = $('.moment_cat_nav ul li a');
if (t.hasClass('disabled')) {
return false;
}
$('.moment_cat_nav ul li a').addClass('disabled');
var temp = $("#comment_form_reset");
var form = $(".respond_box");
var form = $("#t_commentform").prop('outerHTML');
temp.html(form);
$(".moment_list").empty();
$('#t_pagination a').hide();
$(this).addClass('active');
$(this).parent().siblings().children().removeClass('active');
var cat = $(this).attr('data');
$.ajax({
type: "GET",
url: cat,
beforeSend: function () {
$('.moment_list').html('<div class="loading_box"><div uk-spinner></div></div>');
},
success: function (data) {
$('.moment_list .loading_box').remove();
$('#t_pagination a').text(Theme.site_page);
var result = $(data).find(".moment_list .p_item");
$(".moment_list").append(result.fadeIn(300));
var newhref = $(data).find("#t_pagination a").attr("href");
if (newhref == undefined) {
$('#t_pagination a').hide();
} else {
$("#t_pagination a").attr("href", newhref);
$('#t_pagination a').show();
}
getMomentAudio();
initAgree();
lazyLoadInstance.update();
$('.moment_cat_nav ul li a').removeClass('disabled');
}
});
});
//ajax加载片刻
$(document).on('click', '#t_pagination a', function () {
const postListElement = document.getElementById("post_item");
var href = $(this).attr('data');
$.ajax({
type: "GET",
url: href,
beforeSend: function () {
$('#t_pagination .post-paging').html('<div uk-spinner></div>');
},
success: function (posts) {
if (posts) {
var result = $(posts).find(".moment_list .p_item");
$('#t_pagination .post-paging').html(`<a>${Theme.site_page}</a>`);
$(".moment_list").append(result.fadeIn(300));
window.pjax.refresh(postListElement)
var newhref = $(posts).find("#t_pagination a").attr("data"); //找出新的下一页链接
if (newhref != undefined) {
$("#t_pagination a").attr("data", newhref);
$('#t_pagination a').show();
} else {
$("#t_pagination a").hide(); //如果没有下一页了,隐藏
}
$body.animate({scrollTop: result.offset().top - 58}, 500);
getMomentAudio();
initAgree();
lazyLoadInstance.update();
} else {
$('#t_pagination a').hide();
}
}
});
return false;
});
//ajax加载图库
$(document).on('click', '#p_pagination a', function () {
var href = $(this).attr('data');
$.ajax({
type: "GET",
url: href,
beforeSend: function () {
$('#p_pagination .post-paging').html('<div uk-spinner></div>');
},
success: function (photos) {
if (photos) {
var result = $(photos).find(".norpost_list .gallery-photo");
$('#p_pagination .post-paging').html(`<a>${Theme.site_page}</a>`);
$(".gallery-photos").append(result.fadeIn(300));
var newhref = $(photos).find("#p_pagination a").attr("data"); //找出新的下一页链接
if (newhref != undefined) {
$("#p_pagination a").attr("data", newhref);
$('#p_pagination a').show();
} else {
$("#p_pagination a").hide(); //如果没有下一页了,隐藏
}
pix.initGalleryPhotos();
} else {
$('#p_pagination a').hide();
}
}
});
return false;
});
//阅读更多按钮
$(document).on('click', 'a.show-more-btn', function () {
var t = $(this);
t.prev().show();
t.next().show();
t.siblings('.dotd').hide();
t.hide();
});
$(document).on('click', 'a.read-less-btn', function () {
var t = $(this);
t.siblings('.rm_hidden').hide();
t.siblings('.dotd').show();
t.prev().show();
t.hide();
});
//加载阅读全文
/*
function load_readmore(post_data){
var max = 80;
var moretext = '更多';
var lesstext = '收起';
var data = $(post_data).find('.t_content p');
$.each(data, function(index, value) {
//console.log(value);
var t = $(this);
var str = t.text();
//if (str.length > max) {
var excerpt = str.substring(0, max);
var secdHalf = str.substring(max, str.length);
var strtoadd = excerpt + "<span class='second-section'>" + secdHalf + "</span><a class='show-more-btn' title='Click to Show More'>" + moretext + "</a><span class='read-less' title='Click to Show Less'>" + lesstext + "</span>";
$(this).html(excerpt);
//}
console.log(excerpt);
});
}
*/
//正则替换链接 无用
function replaceReg(str) {
var regexp = /((http|ftp|https|file):\/\/([\w\-]+\.)+[\w\-]+(\/[\w\u4e00-\u9fa5\-\.\/?\@\%\!\&=\+\~\:\#\;\,]*)?)/ig;
return str.replace(regexp, function (m) {
return '<a class="mo_link" target="_blank" href="' + m + '"><i class="ri-links-line"></i>' + m + '</a>';
})
}
//ajax加载评论
$(document).on('click', '.show_comment', function () {
$('.blog_list_inner').css('min-height', 'calc(100vh)');
var pid = $(this).attr('pid');
var other = $(this).parents('.moment_item').siblings('div');
$.each(other, function (name, value) {
//遍历每个 回复表单
var otherid = $(this).find('.show_comment').attr('pid');
$("#halo-comment-" + otherid).hide();
});
$(`#halo-comment-${pid}`).css('display', $(`#halo-comment-${pid}`).css('display') == 'block' ? 'none' : 'block');
});
//片刻点赞
$(document).on('click', '.up_like ', function () {
if ($(this).hasClass('done')) {
cocoMessage.info("您已经点过赞了");
return false;
} else {
$(this).addClass('done');
var pid = $(this).data("id");
var key = $(this).data("key");
console.log(key)
let agreeArr = localStorage.getItem(`pix.upvoted.${key}.names`)
? JSON.parse(localStorage.getItem(`pix.upvoted.${key}.names`))
: [];
rateHolder = $(this).children('span');
iconHolder = $(this).children('i');
$.ajax({
type: 'post',
contentType: "application/json; charset=utf-8",
url: '/apis/api.halo.run/v1alpha1/trackers/upvote',
data: JSON.stringify({
group: key == "moment" ? "moment.halo.run" : "content.halo.run",
plural: key == "moment" ? "moments" : "posts",
name: pid,
}),
success: function (data) {
$(iconHolder).toggleClass('ri-heart-2-fill');
var num = $(rateHolder).text();
$(rateHolder).text(++num);
agreeArr.push(pid);
const val = JSON.stringify(agreeArr);
localStorage.setItem(`pix.upvoted.${key}.names`, val);
cocoMessage.success("感谢您的支持");
}
}); // end ajax
}
});
function initAgree() {
var agreeAnnius = $('.up_like')
if (agreeAnnius.length > 0) {
let agreeArr = JSON.parse(localStorage.getItem(`pix.upvoted.${$(agreeAnnius[0]).data("key")}.names`))
for (var i = 0; i < agreeAnnius.length; i++) {
let pid = $(agreeAnnius[i]).attr('data-id');
if (agreeArr != null) {
let flag = agreeArr.includes(pid);
if (flag) {
$(agreeAnnius[i]).addClass('done');
}
}
}
}
}
function getMomentAudio() {
var audioList = $('.pix_player.qt')
if (audioList.length > 0) {
for (var i = 0; i < audioList.length; i++) {
let id = $(audioList[i]).attr('id');
let type = $(audioList[i]).attr('type');
var result = type.substring(type.indexOf("audio/") + 6);
if (id != null && id != '') {
var api = `${Theme.play.pix_mu_api || 'https://api.i-meto.com/meting/api'}?type=song&id=:id`
var meta = {
type: result,
id: id,
}
let url = api.replace(":id", meta.id);
$.ajax({
type: "get",
url: url,
success: function (res) {
var html = ''
if (res.length > 0) {
let author = res[0].author;
let pic = res[0].pic;
let title = res[0].title;
let url = res[0].url;
let lrc = res[0].lrc;
html = `<div class="player_thum">
<img src="${pic}">
</div>
<div class="player_meta">
<div class="title"><span class="name">${title}</span><span class="author">${author}</span></div>
<div class="player_tool">
<div class="player_time"><div class="current_time"></div><span></span><div class="total_time"></div></div>
</div>
</div>
<a class="play_btn" data ="${url}" lrc="${lrc}"><i class="ri-play-line"></i></a>
<div class="play_bg"><img src="${pic}"></div>`;
} else {
html = '音乐参数错误';
}
$('#' + id).html(html);
}
});
}
}
}
}
//ajax分类筛选 posts
$(document).on('click', '.posts_cat_nav ul li a', function () {
const postListElement = document.getElementById("post_item");
var t = $('.posts_cat_nav ul li a');
if (t.hasClass('disabled')) {
return false;
}
$('.posts_cat_nav ul li a').addClass('disabled');
$(".norpost_list").empty();
$('#pagination a').hide();
$(this).addClass('active');
$(this).parent().siblings().children().removeClass('active');
var cat = $(this).attr('data');
$.ajax({
type: "GET",
url: cat,
headers: {
Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
},
beforeSend: function () {
$('.norpost_list').html('<div class="loading_box"><div uk-spinner></div></div>');
},
success: function (data) {
$('#pagination a').text(Theme.site_page);
var result = $(data).find(".norpost_list").children();
$(".norpost_list").append(result.fadeIn(300));
window.pjax && window.pjax.refresh(postListElement)
let newhref = $(data).find("#pagination a").attr("data") || $(data).find(".arc_pagenav a").attr("data");
if (newhref != undefined) {
$("#pagination a").attr("data", newhref);
$('#pagination a').show();
} else {
$('#pagination a').hide();
}
$('.loading_box').remove();
initAgree()
lazyLoadInstance.update();
$('.posts_cat_nav ul li a').removeClass('disabled');
}
});
});
//首页ajax加载文章
$('body').on('click', '#pagination a', function () {
const postListElement = document.getElementById("post_item");
var href = $(this).attr('data');
$.ajax({
type: "GET",
url: href,
headers: {
Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
},
beforeSend: function () {
$('#pagination .post-paging').html('<div uk-spinner></div>');
},
success: function (data) {
if (data) {
var result = $(data).find(".norpost_list ").children();
$('#pagination .post-paging').html(`<a>${Theme.site_page}</a>`);
$('.norpost_list').append($(result).fadeIn(400));
window.pjax && window.pjax.refresh(postListElement)
var newhref = $(data).find("#pagination a").attr("data") || $(data).find(".arc_pagenav a").attr("data"); //找出新的下一页链接
if (newhref != undefined) {
$("#pagination a").attr("data", newhref);
$('#pagination a').show();
} else {
$("#pagination a").hide(); //如果没有下一页了,隐藏
}
$body.animate({scrollTop: result.offset().top - 58}, 500);
initAgree()
lazyLoadInstance.update();
}
}
});
return false;
});
//分类页面文章加载
$('body').on('click', '.arc_pagenav a', function () {
const postListElement = document.getElementById("post_item");
$(this).hide();
var content = $('.norpost_list');
var href = $(this).attr('data');
if (href != undefined) {
$.ajax({
type: "GET",
url: href,
headers: {
Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
},
beforeSend: function () {
$('.arc_pagenav').append('<div uk-spinner></div>');
},
success: function (data) {
var post = $(data).find(".norpost_list").children();
content.append(post.fadeIn(300));
window.pjax && window.pjax.refresh(postListElement)
var newhref = $(data).find(".arc_pagenav a").attr("data"); //找出新的下一页链接
if (newhref != undefined) {
$(".arc_pagenav a").attr("data", newhref);
$('.arc_pagenav a').show();
} else {
$(".arc_pagenav a").hide(); //如果没有下一页了,隐藏
}
$('.arc_pagenav .uk-spinner').remove();
$body.animate({scrollTop: post.offset().top - 58}, 500);
initAgree()
lazyLoadInstance.update();
}
});
}
return false;
});
function loginUrl() {
window.location.href = `/login?redirect_uri=${encodeURIComponent(window.location.pathname)}`;
}
$(document).on('mouseenter', '.lbc .left_menu_box ul li a , body.mod_third_s .left_menu_box ul li a', function (event) {
var title = $(this).find('.nav_title').text();
$(this).append("<span class='menu_tips'>" + title + "</span>");
});
$(document).on('mouseleave', '.lbc .left_menu_box ul li a , body.mod_third_s .left_menu_box ul li a', function (event) {
$(this).find('.menu_tips').remove();
});
//滚动
$(document).ready(function (e) {
$(window).scroll(function () {
var b = $(window).scrollTop(); //监控窗口已滚动的距离;
if (b > 190) {
$('.top_bar').addClass('mobile_active');
} else {
$('.top_bar').removeClass('mobile_active');
}
if (b > 200) {
$('a.go_top').addClass('show');
} else {
$('a.go_top').removeClass('show');
}
});
});
$.fn.autoTextarea = function (options) {
var defaults = {
maxHeight: null,//文本框是否自动撑高,默认:null,不自动撑高;如果自动撑高必须输入数值,该值作为文本框自动撑高的最大高度
minHeight: 50
};
var opts = $.extend({}, defaults, options);
return $(this).each(function () {
$(this).bind("paste cut keydown keyup focus blur", function () {
var height, style = this.style;
this.style.height = opts.minHeight + 'px';
if (this.scrollHeight > opts.minHeight) {
if (opts.maxHeight && this.scrollHeight > opts.maxHeight) {
height = opts.maxHeight;
style.overflowY = 'scroll';
} else {
height = this.scrollHeight;
style.overflowY = 'hidden';
}
style.height = height + 'px';
}
});
});
};
//$("textarea#comment").autoTextarea({
// maxHeight: 160,//文本框是否自动撑高,默认:null,不自动撑高;如果自动撑高必须输入数值,该值作为文本框自动撑高的最大高度
//});
$('body').on('click', '.com_msg_btn', function () {
var num = $(this).attr('check');
if (num == 0) {
return false;
}
$.ajax({
type: 'POST',
dataType: 'json',
url: Theme.ajaxurl,
data: {
'action': 'up_unread_msg',
},
beforeSend: function () {
},
success: function (data) {
if (data.code == '0') {
$('small.f_unread_num').remove();
} else {
return false;
}
}
});
});
//搜索类型
$('body').on('click', '.s_set_box a', function(){
var type = $(this).attr('data');
$(this).addClass('active').siblings('a').removeClass('active');
$('form#index_search input[type="hidden"]').val(type);
$.cookie('s_type', type, { expires: 30, path: '/' });
});
$('body').on('click', '.top_s_box a', function(){
UIkit.dropdown('.s_set_box').hide(false);
var data = $(this).attr('data');
var type = $(this).text();
$('.set_text').text(type);
$('form#top_search input[type="hidden"]').val(data);
});
//黑暗模式
$('body').on('click', '.t_dark a', function () {
var date = new Date();
date.setTime(date.getTime() + (3 * 60 * 60 * 1000));
var t = $('html');
if (t.hasClass('dark')) {
document.cookie = "dark=normal;path=/;expires=" + date.toGMTString();
} else {
document.cookie = "dark=dark;path=/;expires=" + date.toGMTString();
}
t.toggleClass('dark');
});
//片刻管理按钮
$(document).on('mouseenter', '.post_control_btn', function (event) {
var a = $(this).siblings('.post_control_box');
a.addClass('show');
});
$(document).on('mouseleave', '.post_control', function (event) {
$(this).find('.post_control_box').removeClass('show');
});
//社交小工具二维码
$(document).on('mouseenter', '.sw_social', function (event) {
var qrbox = $(this).siblings('.sw_qrcode');
if (qrbox.length > 0) {
qrbox.addClass('active');
qrbox.fadeIn(200);
}
});
$(document).on('mouseleave', '.sw_social', function (event) {
var qrbox = $(this).siblings('.sw_qrcode');
if (qrbox.length > 0) {
qrbox.removeClass('active');
qrbox.fadeOut(200);
}
});
//点击收起移动侧栏
$('body').on('click', '.m_offcanvas', function () {
var target = event.target;
var parentAnchor = $(target).closest('a');
if (target.getAttribute('href') == '#' || parentAnchor.attr('href') == '#') {
}else{
UIkit.offcanvas('.m_offcanvas').hide();
}
});
//刷新一言
$('body').on('click', '.yiyan_box .change', function () {
var url = Theme.widget_yiyan.api || 'https://v1.hitokoto.cn'
fetch(url)
.then(response => response.json())
.then(data => {
const hitokoto = document.querySelector('.yiyan_box p')
hitokoto.setAttribute("uk-tooltip", data.from);
hitokoto.innerText = data.hitokoto
})
.catch(console.error)
});
$('.yiyan_box .change').click();
//pjax
if (Theme.pjax) {
let pjaxSelectors = ["head title", "#pjax-container", ".pjax"]
var pjax = new Pjax({
elements: 'a:not([target="_blank"]):not([pjax="exclude"])',
selectors: pjaxSelectors,
analytics: false,
cacheBust: false,
});
document.addEventListener('pjax:send', function () {
NProgress.start();
})
document.addEventListener('pjax:complete', function () {
lazyLoadInstance.update();
typeof hljs === 'object' && hljs.highlightAll();
typeof Prism === 'object' && Prism.highlightAll();
autoload_posts_music();
initBlog();
NProgress.done();
})
}
$('body').on('click', '.msg_modal_inner .unread_box .box .mark_read', function (e) {
console.log(e)
let msg_name = $(this).parent()[0].getAttribute('msg-name')
let username = Theme.username
$.ajax({
type: "put",
url: `/apis/api.notification.halo.run/v1alpha1/userspaces/${username}/notifications/${msg_name}/mark-as-read`,
success: function (res) {
pix.getMsg()
}
});
})
const getWindowInfo = () => {
pix.initTopBar()
};
const debounce = (fn, delay) => {
let timer;
return function () {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => {
fn();
}, delay);
}
};
const cancalDebounce = debounce(getWindowInfo, 1);
window.addEventListener('resize', cancalDebounce);
//固定顶部栏
$(document).scroll(function () {
let topBar = $('#masthead .top_bar');
var placeholder = document.querySelector('#masthead .uk-sticky-placeholder');
console.log()
var width = topBar.width();
var scrT = document.documentElement.scrollTop;
if (window.innerWidth > 960) {
// 如果滚动的距离>60
if (scrT > 60) {
topBar.addClass('uk-active uk-sticky-fixed').css({"width": width, "top": '0px', "position": "fixed"});
placeholder.hidden = false;
} else {
topBar.removeClass('uk-active uk-sticky-fixed').css({"width": "auto", "top": "auto", "position": ""});
placeholder.hidden = true;
}
} else {
// 如果滚动的距离>0
if (scrT > 0) {
topBar.addClass('uk-active uk-sticky-below')
} else {
topBar.removeClass('uk-active uk-sticky-below')
}
}
});
// 获取当前具有 "current" 类的元素
var currentElement = document.querySelector('.current');
// 检查是否找到了具有 "current" 类的元素
if (currentElement) {
// 将当前元素滚动到视图中
currentElement.scrollIntoView({
behavior: 'smooth', // 平滑滚动
block: 'start' // 将当前元素顶部对齐到视口顶部
});
}
$('body').on('click', '.listree-btn', function () {
"目录[+]" == $(".listree-btn").text() ? $(".listree-btn").attr("title", "收起").text("目录[-]").parent().next().show() : $(".listree-btn").attr("title", "展开").text("目录[+]").parent().next().hide();
return !1
});
// toc
function autotree() {
$(document).ready(function () {
$('.listree-titles').html('<a class="listree-btn" title="展开">目录[+]</a>')
$('#listree-ol').empty();
$("#listree-ol").css("display", "none")
// 获取所有标题元素
var headings = document.querySelectorAll('.post-single .single-content *:is(h1, h2, h3, h4, h5, h6)');
// 为标题元素添加 listree-list 类,并修改 id
headings.forEach(function (heading, index) {
heading.classList.add('listree-list');
heading.id = 'listree-list' + index;
});
// 创建一个空的目录列表
var tocList = document.querySelector('#listree-ol');
// 保存每个级别的父列表项
var parentItems = {};
// 遍历每个标题元素
headings.forEach(function (heading, index) {
// 创建列表项
var listItem = document.createElement('li');
// 创建标题链接
var link = document.createElement('a');
// 直接设置链接的href为标题元素的id
link.href = '#listree-list' + index;
link.classList.add('toc-link', 'node-name--' + heading.tagName);
link.textContent = heading.textContent.trim();
// 将标题链接添加到列表项中
listItem.appendChild(link);
// 获取当前标题级别
var level = parseInt(heading.tagName.slice(1));
// 查找当前标题的父级列表项
var parentItem = parentItems[level - 1];
// 如果存在父级列表项,则将当前列表项作为其子项
if (parentItem) {
// 如果父级列表项还没有子列表,则创建一个子列表
if (!parentItem.querySelector('ul')) {
var subList = document.createElement('ul');
parentItem.appendChild(subList);
}
// 将当前列表项添加到父级列表的子列表中
parentItem.querySelector('ul').appendChild(listItem);
} else {
// 如果不存在父级列表项,则将当前列表项直接添加到根列表中
tocList.appendChild(listItem);
}
// 更新当前级别的父列表项为当前列表项
parentItems[level] = listItem;
});
$(".listree-btn").click(function () {
"目录[+]" == $(".listree-btn").text() ? $(".listree-btn").attr("title", "收起").text("目录[-]").parent().next().show() : $(".listree-btn").attr("title", "展开").text("目录[+]").parent().next().hide();
return !1
});
$("a.toc-link").click(function (event) {
event.preventDefault();
var targetId = $(this).attr("href");
$("html, body").animate({
scrollTop: $(targetId).offset().top - 77
}, 800);
});
// 判断是否存在目录,设置显示或隐藏
if ($('#listree-ol').children().length > 0) {
$(".listree-box").css("display", "block");
} else {
$(".listree-box").css("display", "none");
}
})
jQuery(document).ready(function (f) {
var T = f(".listree-list");
if (T.length < 1)
return;
var b = [];
function Q() {
T.each(function () {
var T = f(this).offset();
b.push(Math.floor(T.top))
})
}
function a(T) {
var b = f("#listree-ol li");
var Q = f(".listree-list dt");
if (b.length < 1)
return;
var a = b.outerHeight();
if (!b.eq(T).hasClass("current")) {
b.removeClass("current");
b.eq(T).addClass("current");
Q.animate({
top: a * T + (b.outerHeight() - Q.outerHeight()) / 2 + 1
}, 50)
}
}
function X() {
if ($('#listree-ol').children().length < 1)
return;
var f = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
var Q = Math.ceil(f + 77);
var X = 0;
for (var aU = 0; aU < b.length; aU++) {
if (Q >= b[aU]) {
X = aU
} else {
break
}
}
if (X < 0)
X = 0;
if (!T.eq(X).hasClass("current")) {
T.removeClass("current");
T.eq(X).addClass("current");
a(X)
}
}
Q();
setTimeout(X, 0);
f(window).on("scroll", X)
});
}
pix.addRuntime();
$(document).ready(function () {
$("[data-fancybox]").fancybox({
selector: '[data-fancybox]',
loop: true,
transitionEffect: 'slide',
protect: true,
buttons: ['slideShow', 'fullScreen', 'thumbs', 'close'],
hash: false
})
})
function initBlog() {
pix.initTopBar(),
pix.getMsg(),
initAgree(),
pix.initGalleryPhotos(),
pix.loadLightbox(),
pix.topCategoriesBarScroll(),
pix.topTableBarScroll(),
getMomentAudio(),
Theme.toc.all_open && autotree()
}
pix.roleMoments();
initBlog()