HEX
Server: nginx
System: Linux 167746b7b9c4 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User: www-data (1000)
PHP: 8.4.3
Disabled: NONE
Upload Files
File: /www/sites/cbgdh_com/index/wp-content/themes/onenav/assets/js/new-post.js
/*!
 * Theme Name:One Nav
 * Theme URI:https://www.iotheme.cn/
 * Author:iowen
 * Author URI:https://www.iowen.cn/
 */

var IO = IO || {};

IO.isContentChanged = false;

// 文章封面图按钮
$.fn.postCoverImg = function () {
    return this.each(function () {
        var $this = $(this),
            $input = $this.find('.cover-img'),
            $preview = $this.find('.show-preview'),
            $delete = $this.find('.cover-delete');
            
        var addIco = $preview.data('add_ico');
        
        var mediaType = $this.data('media-type'),
            maxFileSize = $this.data('size') * 1024 * 1024;

        var media = new IO.media({
            type: 'image',
            mediaType: mediaType,
            maxFileSize: maxFileSize,
            fileTypes: 'jpg,jpeg,png',
            uploadMultiple: 1,
            multiple: 1,
            isUpload: maxFileSize > 0 ? true : false,
        });

        var setImg = function (src) {
            $preview.attr('src', src);
            $input.val(src).trigger('input');
            $delete.show();
        }

        $this.on('click', function () {
            media.open();
        });

        $delete.on('click', function (e) {
            e.stopPropagation();

            $preview.attr('src', addIco);
            $input.val('').trigger('input');
            $delete.hide();
        });
        
        media.$el.on('lists_submit', function (e, data) {
            var lists = data.data;
            for (let item of lists) {
                setImg(item.url);
            }
			
        });

        media.$el.on('input_submit', function (e, data) {
            var lists = data.data;
            for (let item of lists) {
                setImg(item);
            }

        });
    });
};

// 项目组
$.fn.ioMetaItemGroup = function () {
    /**
     * 初始化子模态框数据
     * 
     * @param {jQuery} $modal 当前模态框
     * @param {jQuery} $currentItem 当前项目
     */
    function initChildData($modal, $currentItem) {
        var $metaGroup = $modal.find('.meta-item-group');
        if (!$metaGroup.length || !$metaGroup.attr('is-child')) return;
        
        var $metaBody = $metaGroup.find('.meta-item-body');

        var itemPrefab = $metaGroup.find('.meta-item-prefab').html();
        var titleBy = $metaGroup.data('title-by');

        var updateNames = function () {
            $metaBody.find('.meta-data-box').each(function (index, box) {
                $(box).find('input').each(function (_, input) {
                    var $input = $(input);
                    var name = input.name;
                    var dataID = $input.attr('data-id');
                    input.name = name.replace(/\[\d+\]/, '[' + index + ']');
                    dataID && $input.attr('data-id', dataID.replace(/\[\d+\]/, '[' + index + ']'));
                });
            });
        };

        // 清空所有子元素
        $metaGroup.each(function (_, el) {
            var $el = $(el);
            if ($el.attr('is-child')) {
                $el.find('.meta-item-body').empty();
            }
        });

        // 取值
        var $childInput = $currentItem.find('[data-child]');
        var childInputData = {}
        if ($childInput.length) {
            $childInput.each(function (_, el) {
                var $el = $(el);
                var name = $el.data('id');
                var d = name.split(']').map(item => item.replace('[', ''));
                if (d.length == 2) {
                    // 初始化子对象
                    if (!childInputData[d[0]]) {
                        childInputData[d[0]] = {};
                    }
                    // 赋值
                    childInputData[d[0]][d[1]] = el.value;
                } else {
                    // 其他情况...
                }
            });
        }

        // 赋值,生成子元素
        if (Object.keys(childInputData).length == 0) return;
        // 创建子元素
        $metaBody.append(itemPrefab.repeat(Object.keys(childInputData).length));
        // 赋值
        var $newItems = $metaBody.find('.meta-data-box');
        $newItems.each(function (index, item) {
            var $item = $(item);
            var data = childInputData[index];
            $item.find('input, select, textarea').each(function (_, el) {
                var $el = $(el);
                var dataName = $el.data('name');
                var name = $el.data('id');
                name = name.replace(/\[\d+\]/, '');
                $el.val(data[name]);
                setTimeout(function () {
                    $el.attr('name', dataName).removeAttr('data-name');
                }, 0);
            });
            if (titleBy) {
                var title = titleBy.map(function (name) {
                    return data[name];
                }).join(' ');
                $item.find('.show-item-title').text(title);
            }
        });
        setTimeout(function () {
            updateNames();
        }, 10);
    }

    /**
     * 创建子模态框元素生成的数据
     * 
     * 只处理两级
     * @param {jQuery} $currentItem 当前对象 
     * @param {Object} data
     * @param {jQuery} $modal
     */
    function createChildInput($currentItem, data, $modal) {
        var $metaGroup = $modal.find('.meta-item-group');
        if (!$metaGroup.length || !$metaGroup.attr('is-child')) return;

        var parentID = $currentItem.closest('.meta-data-box').attr('data-index');
        var parentName = $modal.data('name');
        var modalTarget = $metaGroup.data('modal-target');
 
        // 创建子元素
        var html = '';
        for (let key in data) {
            var names = key.split('[').map(item => item.replace(']', ''));
            html += `<input type="hidden" name="${parentName}[${parentID}][${names[0]}][${names[1]}][${names[2]}]" data-child="${modalTarget}" data-id="[${names[1]}]${names[2]}" value="${data[key]}">`;
        }
        $currentItem.find('.hide-input').append(html);
    }

    /**
     * 创建多选输入框生成的数据
     * 
     * @param {jQuery} $currentItem - 插入输入框的目标元素
     * @param {Object} data - 包含字段名及对应值数组的对象
     * @param {jQuery} $modal - 用于获取 parentName 的模态框元素
     */
    function createMultiInput($currentItem, data, $modal) {
        var parentID = $currentItem.closest('.meta-data-box').attr('data-index');
        var parentName = $modal.data('name');

        $.each(data, function (name, values) {
            var baseName = name.replace('[]', '');
            values.forEach(function (value) {
                var $input = $('<input>', {
                    type: "hidden",
                    name: `${parentName}[${parentID}][${baseName}][]`,
                    "data-id": name,
                    "is-multi": "true",
                    value: value
                });
                $currentItem.append($input);
            });
        });
    }

    return this.each(function () {
        var $this = $(this);
        var $body = $this.find('.meta-item-body');
        var $modal = $($this.data('modal-target'));
        var $currentItem = null;

        var itemPrefab = $this.find('.meta-item-prefab').html();
        var titleBy = $this.data('title-by');
        var isChild = $this.attr('is-child');
        var autoIndex = $this.data('auto-index') || false;
        
        // 自动序号,先取最大值
        var getMaxIndex = function () {
            if (!autoIndex) {
                return 0;
            }
            var maxIndex = -Infinity;
            $body.find('[data-id="' + autoIndex + '"]').each(function (_, el) {
                var index = $(el).val();
                maxIndex = Math.max(maxIndex, index);
            });
            return maxIndex === -Infinity ? 0 : maxIndex;
        };
        var maxIndex = getMaxIndex();

        // 更新 name 和 data-id 的序号
        var updateNamesIndex = function () {
            $body.find('.meta-data-box').each(function (index, box) {
                var $box = $(box);
                $box.attr('data-index', index);
                $box.find('input').each(function (_, input) {
                    var $input = $(input);
                    var name = input.name;
                    var dataID = $input.attr('data-id');
                    input.name = name.replace(/\[\d+\]/, '[' + index + ']');
                    if (isChild && dataID) {
                        $input.attr('data-id', dataID.replace(/\[\d+\]/, '[' + index + ']'));
                    }
                });
            });
            if (!$body.attr('init')) {
                $body.attr('init', 'true');
            } else {
                IO.isContentChanged = true;
            }
        };

        // 添加项目
        $this.on('click', '.meta-item-add', function () {
            var $newItem = $(itemPrefab);
            $newItem.find('input, select, textarea').each(function (_, el) {
                var dataName = $(el).data('name');
                if (dataName) {
                    $(el).attr('name', dataName).removeAttr('data-name');
                }
            });

            if (autoIndex) {
                // 设置自增项目
                maxIndex++;
                $newItem.find('[data-id="' + autoIndex + '"]').val(maxIndex);
            }

            $body.append($newItem);

            $newItem.find('[modal-set]').trigger('click');
            updateNamesIndex();
        });

        // 删除项目
        $this.on('click', '.meta-item-delete', function () {
            $(this).closest('.meta-data-box').remove();
            updateNamesIndex();
        });

        $this.sortable({
            items: '.meta-data-box',
            handle: '.meta-item-sort',
            axis: 'y',
            containment: 'parent',
            cursor: 'move',
            revert: 100,
            tolerance: 'pointer',
            update: updateNamesIndex
        });

        // 模态框触发显示
        $this.on('click', '[modal-set]', function () {
            $currentItem = $(this);
            $modal.modal('show');
            if (!isChild) {
                initChildData($modal, $currentItem);
            }

            // 取值
            var data = {};
            var multiData = {};
            $currentItem.find('input, textarea').each(function (_, el) {
                var dataName = $(el).data('id');
                var value = el.value;
                if (isChild) {
                    dataName = dataName.replace(/\[\d+\]/, '');
                }
                if (dataName) {
                    if (dataName.includes('[]')) {
                        // 多选
                        if (!multiData[dataName]) {
                            multiData[dataName] = [];
                        }
                        if (value) {
                            multiData[dataName].push(value);
                        }
                    } else {
                        data[dataName] = value;
                    }
                }
            });

            // 设置模态框中的input对应name的值
            $modal.find('input, select, textarea').each(function (_, el) {
                var $el = $(el);
                if ($el.attr('data-name')) return;
                var name = $el.attr('name');
                if ($el.attr('type') == 'checkbox') {
                    el.checked = data[name] == '1';
                    $el.trigger('change');
                } else if ($el.attr('type') == 'radio') {
                    if (data[name] == $el.val()) {
                        el.checked = true;
                        $el.trigger('change');
                    }
                } else {
                    el.value = data[name];
                    $el.trigger('change');
                }
            });

            // 设置多选
            multiData && $.each(multiData, function(name, values) {
                values.forEach(function(value) {
                    $('input[type="checkbox"][name="' + name + '"][value="' + value + '"]').prop('checked', true).trigger('change');
                });
            });
        });
        // 模态框提交按钮
        $modal.find('.modal-submit').on('click', function () {
            var data = {};
            var multiData = {};
            var childData = {};
            var isValid = true;

            // 取值
            $modal.find('input, select, textarea').each(function (_, el) {
                var $el = $(el);
                var name = $el.attr('name');
                if (!name) return;
                
                var value = $el.val();
                
                // 必填项验证
                if (value === '' && $el.attr('required')) {
                    var msg = $el.closest('.form-group').find('.option-name').text() + IO.contributeVar.local.no_empty;
                    showAlert({ "status": 3, "msg": msg });
                    isValid = false;  // 设置验证失败
                    return false;  // 停止 .each 循环
                }
        
                // 根据类型转换值
                if ($el.attr('type') === 'checkbox') {
                    if($el.hasClass('switch')){
                        value = $el.is(':checked') ? 1 : 0;
                    } else {
                        value = $el.is(':checked') ? $el.val() : '';
                    }
                } else if ($el.attr('type') === 'number') {
                    value = Number(value);  // 转为数字
                } else if ($el.attr('type') === 'radio') {
                    if ($el.is(':checked')) {
                        value = $el.val();  // 获取选中单选按钮的值
                    } else {
                        return;  // 未选中则跳过此项
                    }
                }
        
                // 存储处理后的值
                // 判断 name 是否包含 []
                if (name.includes('[]')) {
                    // 多选
                    if (!multiData[name]) {
                        multiData[name] = [];
                    }
                    if (value) {
                        multiData[name].push(value);
                    }
                } else {
                    data[name] = value;
                }
                $el.attr('data-child') && (childData[name] = value);
            });

            if (!isValid) return;

            // 删除$currentItem下的 [data-child]
            !isChild && $currentItem.find('[data-child]').remove();
            // 删除 [is-multi]
            multiData && $currentItem.find('[is-multi]').remove();
            // 赋值
            $currentItem.find('input, select, textarea').each(function (_, el) {
                var name = $(el).data('id');
                if (isChild) {
                    name = name.replace(/\[\d+\]/, '');
                }
                el.value = data[name];
            });

            // 创建 [is-multi]
            multiData && createMultiInput($currentItem, multiData, $modal); 

            // 创建 [data-child]
            !isChild && createChildInput($currentItem, childData, $modal);

            if (titleBy) {
                var title = titleBy.map(function (name) {
                    return data[name];
                }).join(' ');
                $currentItem.find('.show-item-title').text(title);
            }
            $modal.modal('hide');
        });
        // 模态框删除按钮
        $modal.find('.modal-delete').on('click', function () {
            $currentItem.closest('.meta-data-box').remove();
            $modal.modal('hide');
            updateNamesIndex();
        });

        updateNamesIndex();
    });
};
/**
 * 缩略图   
 * 
 * 增删图片,排序
 * @returns 
 */
$.fn.ioScreenshot = function () {
    return this.each(function () {
        var $this = $(this);
        var $body = $this.find('.screenshot-body .row-a');
        var $add = $this.find('.screenshot-add');
        var $none = $this.find('.screenshot-none');

        var mediaType = $this.data('media-type'),
            maxFileSize = $this.data('size') * 1024 * 1024,
            inputName = $body.data('name');

        // 注册 IO.media
        var media = new IO.media({
            type: 'image',
            mediaType: mediaType,
            maxFileSize: maxFileSize,
            fileTypes: 'jpg,jpeg,png',
            uploadMultiple: 6,
            maxFileCount: 10,
            isUpload: maxFileSize > 0 ? true : false,
        });

        // 更新$none状态
        var updateNone = function () {
            if ($body.find('.screenshot-item').length == 0) {
                $none.show();
            } else {
                $none.hide();
            }
        };
        // 更新 input 的 name 序号(screenshot[1][img])
        var updateIndex = function () {
            $body.find('input').each(function (index, el) {
                var $el = $(el);
                var name = $el.attr('name');
                name = name.replace(/\[\d+\]/, '[' + index + ']');
                $el.attr('name', name);
            });
            IO.isContentChanged = true;
            updateNone();
        };

        // 打开媒体选择框
        $add.on('click', function () {
            media.open();
        });

        // 媒体选择框提交
        media.$el.on('lists_submit', function (e, data) {
            var lists = data.data;
            if (lists.length > 0) {
                // 构建 screenshot-item 元素
                var html = lists.map(function (item) {
                    return `<div class="screenshot-item">
                    <div class="screenshot-item-img"><img src="${item.url}"></div>
                    <input type="hidden" name="${inputName}" value="${item.url}">
                    <div class="screenshot-item-delete"><i class="iconfont icon-close"></i></div>
                </div>`;
                }).join('');
                $body.append(html);
            
                updateIndex();
            }
        });

        // 删除
        $body.on('click', '.screenshot-item-delete', function () {
            $(this).closest('.screenshot-item').remove();
            updateIndex();
        });

        // 排序
        $body.sortable({
            items: '.screenshot-item',
            handle: '.screenshot-item-img',
            containment: 'parent',
            placeholder: 'screenshot-item-placeholder', 
            revert: 100,
            cursor: 'move',
            tolerance: 'pointer',
            update: updateIndex
        });

        updateNone();
    });
};

(function ($) { 
    $(document).ready(function () {
        var checkIOMedia = setInterval(function () {
            if (typeof IO !== 'undefined' && IO.media) {
                $('.posts-cover-img').postCoverImg();
                $('.screenshot-set-box').ioScreenshot();
                clearInterval(checkIOMedia);
            }
        }, 100);
        setTimeout(function () {
            clearInterval(checkIOMedia);
        }, 10000);
        $('.meta-item-group').ioMetaItemGroup();
    });
    $('input, textarea, select').on('input', function() {
        IO.isContentChanged = true;
    });
    $(window).on('beforeunload', function (event) {
        if (IO.isContentChanged) {
            event.preventDefault();
            return ''; // 返回空字符串以触发默认的离开确认提示
        }
    });
    
    if (typeof tinymce !== 'undefined') {
        const editor = tinymce.get('post_content'); // 使用你的编辑器ID替换 'your_editor_id'

        if (editor) {
            editor.on('input change', function() {
                IO.isContentChanged = true;
            });
        } else {
            // 如果编辑器未初始化,延时检查直到编辑器可用
            tinymce.on('addeditor', function(e) {
                if (e.editor.id === 'post_content') {
                    e.editor.on('input change', function() {
                        IO.isContentChanged = true;
                    });
                }
            });
        }
    }
    $('#get_info').click(function() {
        var url = $('.sites-link').val();
        if( url != '' ){
            if(isURL(url)){
                getUrlData(url);
            }else{
                showAlert({"status":3,"msg":IO.contributeVar.local.url_error});
            }
        }else{
            showAlert({"status":3,"msg":IO.contributeVar.local.fill_url});
        }
    });
    $('.new-posts-submit').click(function() {
        var $this = $(this); 

        tinyMCE.triggerSave();
        
        captcha_ajax($this, '', function (result) {
            IO.isContentChanged = false;
            if(result.status == 1){
                $('.form-control').not(':button, :submit, :reset, :hidden').val('').removeAttr('checked').removeAttr('selected');
                //清理图标
                $(".show-sites").attr("src", IO.addico);
                $(".tougao-sites").val('');
                $(".upload-sites").val("").parent().removeClass('disabled');
                $('[name="image_captcha"]').val('');
                $('.image-captcha').click();
            }
            if (result.action) {
                var $target = $(result.action.target);
                $target.attr('href', result.action.url).trigger(result.action.event);
                if (result.action.edit_url) {
                    var modalID = $target.data('modal_id');
                    $(document).on('hidden.bs.modal', '#refresh_modal_' + modalID, function (e) {
                        $this = $(this);
                        if ($this.attr('is-user')) {
                            window.location.href = result.action.edit_url;
                            window.location.reload;
                        } else {
                            console.log('s');
                        }
                        $this.removeAttr('is-user');
                    });
                }
            }
        });
        return false;
    }); 
    $('.remove-ico').click(function() {
        var doc_id = $(this).data('type');
        $("#show_"+doc_id).attr("src", IO.addico);
        $("#remove_"+doc_id).hide();
        $("#upload_"+doc_id).val("");
    });

    $('.count-tips .form-control').off('compositionstart compositionend input').on({
        compositionstart: function () {
            $(this).attr('data-status', false);
        },
        compositionend: function () {
            $(this).attr('data-status', true);
            changeInput($(this));
        },
        input: function () {
            if ($(this).attr('data-status') === 'true') {
                IO.isContentChanged = true;
                changeInput($(this));
            }
        },
    });
    $('.count-tips .form-control').length && changeInput($('.count-tips .form-control'));

})(jQuery);


function getUrlData(_url) {
    $.post("//apiv2.iotheme.cn/webinfo/get.php", { url: _url, type: "json", key: IO.contributeVar.theme_key }, function (data, status) {
        if (data.code == 0) {
            showAlert({ "status": 3, "msg": IO.contributeVar.local.get_failed });
        }
        else {
            dataInput(data);
            showAlert({ "status": 1, "msg": IO.contributeVar.local.get_success });
        }
    }).fail(function () {
        showAlert({ "status": 3, "msg": IO.contributeVar.local.timeout2 });
    });
}
function dataInput(data) {
    var $desc = $('.sites-desc');
    $('.sites-title').val(data.site_title);
    $desc.val(data.site_description.slice(0, $desc.attr('maxlength')));
    changeInput($desc);
    $('.sites-keywords').val(data.site_keywords);
}