Make Coze Bot looks better!
- // ==UserScript==
- // @name Style for Coze Bot App mode
- // @namespace https://www.velhlkj.com/
- // @version 1.1.5
- // @description Make Coze Bot looks better!
- // @author Velade
- // @match https://www.coze.com/store/bot/*
- // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
- // @grant none
- // @run-at document-body
- // @license Apache 2.0
- // ==/UserScript==
- (function() {
- 'use strict';
- const style = document.createElement('style');
- style.textContent = `
- /*官方阴影*/
- .ULoOs2TMkJkb2BgT_MKa {
- display: none !important;
- }
- /*新对话按钮*/
- .NyvVfPwFXFYvQFyXUtTl {
- padding-left: 0 !important;
- }
- /*标题列*/
- .nZxnu8KzOis7qKnDx66E {
- position: fixed !important;
- top: 5px !important;
- right: 5px !important;
- width: 80px !important;
- height: 40px !important;
- filter: drop-shadow(0 0 5px rgba(0, 0, 0, 0.5)) !important;
- }
- .nZxnu8KzOis7qKnDx66E > div:first-child {
- display: none !important;
- }
- .nZxnu8KzOis7qKnDx66E > div:nth-child(2) > div:nth-child(2){
- display: none !important;
- }
- /*对话区域主体*/
- .O4fwdEnt3QgzBjrYtohO {
- -webkit-mask: linear-gradient(180deg,hsla(0,0%,100%,0) 5px, #fff calc(8.11% + 5px), #fff 91.89%, hsla(0,0%,100%,0)) !important;
- mask: linear-gradient(180deg,hsla(0,0%,100%,0) 5px, #fff calc(8.11% + 5px), #fff 91.89%, hsla(0,0%,100%,0)) !important;
- }
- /*底部声明:改为导航栏占位*/
- .pStAbHgTdAlDVUlpMOGP {
- opacity: 0 !important;
- height: 5px !important;
- }
- .pStAbHgTdAlDVUlpMOGP > span {
- display: none;
- }
- /*斜体样式*/
- .flow-markdown-body em.proced{
- display: none !important;
- }
- .flow-markdown-body em.vel-em-action {
- display: block !important;
- clear: both !important;
- color: #FF69B4 !important;
- font-style: normal !important;
- }
- .flow-markdown-body em.vel-em-other {
- display: inline-block !important;
- clear: none !important;
- color: #FF69B4 !important;
- font-style: normal !important;
- }
- `;
- document.head.appendChild(style);
- let pendingNodes = new Array();
- let timer = null;
- let observer = new MutationObserver(mutations=>{
- mutations.forEach(mutation=>{
- if(mutation.type === 'childList' || mutation.type === "characterData"){
- let newPush = false;
- mutation.addedNodes.forEach((node)=>{
- if(node.matches && (node.matches(".vel-em-action") || node.matches(".vel-em-other"))) return;
- pendingNodes.push(node);
- newPush = true;
- })
- if(newPush) PostProc();
- }
- })
- });
- // 获取textnode
- function getTextNodes(ele) {
- if (ele.nodeType == 3) return [ele];
- const nodes = ele.childNodes;
- const textnodes = [];
- for (const i in nodes) {
- if (nodes[i].nodeType == 3) {
- textnodes.push(nodes[i]);
- } else {
- const r = getTextNodes(nodes[i]);
- for (const tn of r) {
- textnodes.push(tn);
- }
- }
- }
- return textnodes;
- }
- // 后处理
- function PostProc(delay = 50) {
- if(timer) clearTimeout(timer);
- timer = setTimeout(()=>{
- const _pendingNodes = [...new Set(pendingNodes)];
- let node;
- while(node = _pendingNodes.shift()) {
- if(!node.querySelectorAll) continue;
- if(node.textContent.match(/\*\([^\)]+?\)\*/)) {
- const nl = getTextNodes(node);
- for(const n of nl) {
- if(n.nodeValue.match(/\*\([^\)]+?\)\*/)){
- const newNode = document.createElement("span");
- newNode.innerHTML = n.nodeValue.replaceAll(/\*\(([^\)]+?)\)\*/g, `<em class="vel-em-action">$1</em>`);
- n.replaceWith(newNode);
- }
- }
- }else if(node.tagName.toLowerCase() == "em") {
- if(node.matches(".proced") || node.matches(".vel-em-action") || node.matches(".vel-em-other")) continue;
- if(node.textContent.match(/^[\((].+?[\))]$/)) {
- const em = document.createElement("em");
- em.textContent = node.textContent.replaceAll(/[\(\)()]/g,"");
- em.classList.add("vel-em-action");
- node.classList.add("proced");
- node.after(em);
- }
- else node.classList.add("vel-em-other");
- }else if(node.matches(".math-inline")){
- if(node.parentElement.querySelector(".vel-em-action")) continue;
- const em = document.createElement("em");
- em.textContent = node.textContent.replaceAll(/[\(\)()]/g,"");
- em.classList.add("vel-em-action");
- node.parentElement.classList.remove("vel-em-other");
- node.parentElement.classList.add("proced");
- node.parentElement.after(em);
- }else{
- node.querySelectorAll(`em:not(.vel-em-action, .vel-em-other)`).forEach(n=>{
- if(n.textContent.match(/^[\((].+?[\))]$/)) {
- if(n.parentElement.querySelector(".vel-em-action")) return;
- const em = document.createElement("em");
- em.textContent = n.textContent.replaceAll(/[\(\)()]/g,"");
- em.classList.add("vel-em-action");
- n.classList.add("proced");
- n.after(em);
- }
- else n.classList.add("vel-em-other");
- })
- }
- }
- }, delay);
- }
- const config = { childList: true, subtree: true,characterData: true };
- const targetNode = document.body;
- observer.observe(targetNode, config);
- })();