// This code is a browser extension script for Codemao community forum. // The purpose of this code is to add a forum posting assistant to the Codemao community forum. // The assistant can help users to manage their posts more easily and efficiently. // This code is written by OpenAI's GPT-3 and has not been tested. Use at your own risk.

const SERVER = 'http://localhost:5000';

setTimeout(() => { const optionsDiv = document.querySelector('.r-community-c-forum_sender--bottom_options'), forumEditDiv = optionsDiv.parentNode.children[2], forumTypeDiv = document.createElement('div'), sendButton = document.createElement('a'), saveButton = document.createElement('a'), manageButton = document.createElement('a'), tokenInput = document.createElement('input'), forumTypeSelectButton_richText = document.createElement('div'), forumTypeSelectButton_markDown = document.createElement('div'), forumTypeSelectButton_HTML = document.createElement('div'), markDownEdit = document.createElement('iframe'), HTMLEdit = document.createElement('iframe'), css = document.createElement('style'), help = document.createElement('div'), helpShowMoreButton = document.createElement('a'), manageBoard = document.createElement('div'), manager = new ForumManager(localStorage, manageBoard); let helpShowMore = true;

globalThis.CodemaoForumHelper_forumManager = manager;

sendButton.innerText = '发布';
saveButton.innerText = '保存';
manageButton.innerText = '管理';
sendButton.classList.add('r-community-c-forum_sender--option');
saveButton.classList.add('r-community-c-forum_sender--option');
manageButton.classList.add('r-community-c-forum_sender--option');
optionsDiv.innerHTML = '';
optionsDiv.appendChild(sendButton);
optionsDiv.appendChild(saveButton);
optionsDiv.appendChild(manageButton);

tokenInput.id = 'tokenInput';
tokenInput.placeholder = '帖子token';
optionsDiv.appendChild(tokenInput);

help.style.marginLeft = help.style.marginRight = '50px';
helpShowMoreButton.style.color = '#5AD9AA';
helpShowMoreButton.style.fontWeight = 'bold';
helpShowMoreButton.onclick = () => {
    if (helpShowMore) {
        help.innerText = '注意事项:

1.MarkDown/HTML类型帖子完全使用Editor.md的语法,支持流程图、表格、目录、TeX等……

'; helpShowMoreButton.innerText = ' 展开 ∨'; help.appendChild(helpShowMoreButton); } else { help.innerHTML = '注意事项:
1.MarkDown/HTML类型帖子完全使用Editor.md的语法,支持流程图、表格、目录、TeX等,具体语法参考这里
2.MarkDown/HTML类型帖子支持HTML语法,但不支持JavaScript,需要JavaScript请使用HTML类型帖子;
3.帖子token自动随机生成,相当于是帖子的密码和id,帖子的编辑不限账号,只需要有token就可以;
4.插件自带帖子管理器,会自动记录使用过的token;
5.请不要在帖子中进行xss注入或发布违规内容,违者会对帖子进行删除,情节严重或多次违规将 '; helpShowMoreButton.innerText = ' 收起 ∧'; help.appendChild(helpShowMoreButton); } helpShowMore = !helpShowMore; } helpShowMoreButton.click(); optionsDiv.parentNode.appendChild(help);

forumTypeDiv.classList.add('r-community-c-forum_sender--type_select');
forumEditDiv.insertBefore(forumTypeDiv, forumEditDiv.children[1]);
forumTypeSelectButton_richText.innerText = '富文本';
forumTypeSelectButton_markDown.innerText = 'MarkDown/HTML';
forumTypeSelectButton_HTML.innerText = 'HTML';
forumTypeDiv.appendChild(forumTypeSelectButton_richText);
forumTypeDiv.appendChild(forumTypeSelectButton_markDown);
forumTypeDiv.appendChild(forumTypeSelectButton_HTML);
forumTypeSelectButton_richText.style.color = 'red';
forumTypeSelectButton_richText.style.borderColor = 'red';

markDownEdit.src = `${SERVER}/static/MDEdit.html`;
markDownEdit.style.display = 'none';
markDownEdit.style.height = '600px';
markDownEdit.style.width = '100%';
document.querySelector(".r-community-c-forum_sender--container > div:nth-child(3)").appendChild(markDownEdit);

HTMLEdit.src = `${SERVER}/static/HTMLEdit.html`;
HTMLEdit.style.display = 'none';
HTMLEdit.style.height = '600px';
HTMLEdit.style.width = '100%';
document.querySelector(".r-community-c-forum_sender--container > div:nth-child(3)").appendChild(HTMLEdit);

document.querySelector(".c-model_box--content_wrap > div").appendChild(manageBoard)
manager.elementInit();

forumTypeSelectButton_richText.onclick = () => {
    document.querySelector(".r-community-c-forum_sender--container").style.width = '856px';
    forumTypeSelectButton_markDown.style.color = 'black';
    forumTypeSelectButton_markDown.style.borderColor = 'black';
    forumTypeSelectButton_HTML.style.color = 'black';
    forumTypeSelectButton_HTML.style.borderColor = 'black';
    forumTypeSelectButton_richText.style.color = 'red';
    forumTypeSelectButton_richText.style.borderColor = 'red';
    document.querySelector(".r-community-c-forum_sender--container > div:nth-child(3)").children[0].style.display = 'block';
    document.querySelector(".r-community-c-forum_sender--container > div:nth-child(3)").children[1].style.display = 'none';
    document.querySelector(".r-community-c-forum_sender--container > div:nth-child(3)").children[2].style.display = 'none';
};

forumTypeSelectButton_markDown.onclick = () => {
    document.querySelector(".r-community-c-forum_sender--container").style.width = 'auto';
    forumTypeSelectButton_richText.style.color = 'black';
    forumTypeSelectButton_richText.style.borderColor = 'black';
    forumTypeSelectButton_HTML.style.color = 'black';
    forumTypeSelectButton_HTML.style.borderColor = 'black';
    forumTypeSelectButton_markDown.style.color = 'red';
    forumTypeSelectButton_markDown.style.borderColor = 'red';
    document.querySelector(".r-community-c-forum_sender--container > div:nth-child(3)").children[1].style.display = 'block';
    document.querySelector(".r-community-c-forum_sender--container > div:nth-child(3)").children[0].style.display = 'none';
    document.querySelector(".r-community-c-forum_sender--container > div:nth-child(3)").children[2].style.display = 'none';
};

forumTypeSelectButton_HTML.onclick = () => {
    document.querySelector(".r-community-c-forum_sender--container").style.width = 'auto';
    forumTypeSelectButton_richText.style.color = 'black';
    forumTypeSelectButton_richText.style.borderColor = 'black';
    forumTypeSelectButton_markDown.style.color = 'black';
    forumTypeSelectButton_markDown.style.borderColor = 'black';
    forumTypeSelectButton_HTML.style.color = 'red';
    forumTypeSelectButton_HTML.style.borderColor = 'red';
    document.querySelector(".r-community-c-forum_sender--container > div:nth-child(3)").children[2].style.display = 'block';
    document.querySelector(".r-community-c-forum_sender--container > div:nth-child(3)").children[0].style.display = 'none';
    document.querySelector(".r-community-c-forum_sender--container > div:nth-child(3)").children[1].style.display = 'none';
};

sendButton.onclick = () => {

};

saveButton.onclick = () => {

};

manageButton.onclick = () => {
    manager.display();
};

css.innerHTML = `

.r-community-c-forum_sender--option { margin: 30px; }

.r-community-c-forum_sender--type_select { width: 100%; height: 35px; margin-bottom: 20px; text-align: center; }

.r-community-c-forum_sender--type_select:hover { font-size: 15px; cursor: pointer; }

.r-community-c-forum_sender--type_select > div { display: inline-block; width: 32%; height: 100%; border-style: solid; border-color: hsla(0,0%,40%,.28); border-width: 1px; border-radius: 4px; margin: 5px; text-align: center; line-height: 35px; font-size: 15px; }

#tokenInput { padding: 5px; border-style: solid; border-width: 2px !important; border-color: rgba(128,128,128,0.5); width: 200px; align-self: center; }

#tokenInput:focus { border-color: black; }

.forum:hover { background-color: rgba(252,194,51,0.5); }

.forumSelect { background-color: rgba(252,194,51,0.8) !important; } `; document.head.appendChild(css);

console.log('----- 编程猫发帖助手 运行成功 -----');

}, 3000);

class Forum { constructor(token, id, name, type, time) { this.token = token; this.id = id; this.name = name; this.type = type; this.time = time; }

async updateName(name) {
    const res = await axios({
        method: 'POST',
        url: SERVER + '/forum/update',
        data: {
            token: this.token,
            name: name
        }
    });
    if (res.status === 201) {
        this.time = new Date().valueOf();
        this.name = name;
        return true;
    }
    return false;
}

get data() {
    return {
        token: this.token,
        id: this.id,
        name: this.name,
        type: this.type,
        time: this.time
    };
}

elementShow(parent) {
    const element = document.createElement('div');
    element.classList.add('forum');
    element.style.width = '100%';
    element.style.height = '10%';
    element.style.padding = '2%';
    element.style.borderStyle = 'solid';
    element.style.borderColor = 'rgba(0,0,0,0.45)';
    element.style.borderWidth = '1px';
    element.style.fontSize = '15px';
    element.style.fontWeight = 'bold';
    element.style.whiteSpace = 'pre';
    element.innerText = `${this.id}    ${this.name}

${new Date(this.time).toLocaleString()} ${['富文本', 'MarkDown/HTML', 'HTML'][this.type]}`; parent.appendChild(element); return element; } }

class ForumManager { /** * @param {HTMLElement} element */ constructor(storage, element) { this.storage = storage; this.element = element; this.forums = []; if (!storage.getItem('CodemaoForumHelperData')) storage.setItem('CodemaoForumHelperData', '[]'); for (const forum of JSON.parse(storage.getItem('CodemaoForumHelperData'))) this.forums.push(new Forum(forum['token'], forum['id'], forum['name'], forum['type'], forum['time'])); }

elementInit() {
    this.element.style.display = 'none';
    this.element.style.width = '80%';
    this.element.style.height = '80%';
    this.element.style.borderRadius = '4px';
    this.element.style.position = 'absolute';
    this.element.style.top = '50%';
    this.element.style.left = '50%';
    this.element.style.transform = 'translate(-50%,-50%)';
    this.element.style.zIndex = '2';
    this.element.style.background = '#fff';
    this.element.style.boxShadow = '0 6px 28px 0 rgba(0,0,0,.12)' 
    this.mask = document.createElement('div');
    this.mask.style.display = 'none';
    this.mask.style.position = 'absolute';
    this.mask.style.top = this.mask.style.bottom = this.mask.style.left = this.mask.style.right = '0';
    this.mask.style.background = 'rgba(0,0,0,0.3)';
    this.element.parentElement.appendChild(this.mask);
    this.closeButton = document.createElement('a');
    this.closeButton.style.position = 'absolute';
    this.closeButton.style.right = '20px';
    this.closeButton.style.top = '10px';
    this.closeButton.style.padding = '10px'
    this.element.appendChild(this.closeButton);
    this.closeIcon = document.createElement('i');
    this.closeIcon.style.background = 'url(https://cdn-community.codemao.cn/community_frontend/asset/bind_phone_close_9b02e.svg) no-repeat -5px -5px';
    this.closeIcon.style.width = this.closeIcon.style.height = '14px';
    this.closeIcon.style.display = 'inline-block';
    this.closeButton.appendChild(this.closeIcon);
    this.closeButton.close = this.close;
    this.closeButton.onclick = () => {
        this.close();
    };
    this.forumShowBox = document.createElement('div');
    this.forumShowBox.style.borderStyle = 'solid';
    this.forumShowBox.style.borderColor = 'rgba(0,0,0,0.45)';
    this.forumShowBox.style.borderWidth = '1px';
    this.forumShowBox.style.width = '65%';
    this.forumShowBox.style.height = '90%';
    this.forumShowBox.style.margin = '5%';
    this.element.appendChild(this.forumShowBox);
    for (const forum of this.forums) forum.elementShow(this.forumShowBox).onclick = ({ srcElement }) => {
        this.forumOnclick(srcElement);
    };
    this.selectedForum = null;
}

forumOnclick(element) {
    this.selectedForum && this.selectedForum.classList.remove('forumSelect');
    this.selectedForum = element;
    element.classList.add('forumSelect');
}

display() {
    this.element.style.display = 'inline-block';
    this.mask.style.display = 'inline-block';
}

close() {
    this.element.style.display = 'none';
    this.mask.style.display = 'none';
}

appendForum(token, id, name, type) {
    const time = new Date().valueOf(),
    forum = new Forum(token, id, name, type, time);
    this.forums.push(forum);
    forum.elementShow(this.forumShowBox).onclick = () => {
        this.parentNode.forumOnclick(this);
    };
    this.storage.setItem('CodemaoForumHelperData', JSON.stringify(this.data));
}

get data() {
    return this.forums.map(forum => forum.data);
}

}


原文地址: https://www.cveoy.top/t/topic/oQQx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录