Axure分享页面汉化脚本

Axure网页汉化

// ==UserScript==
// @name         Axure分享页面汉化脚本
// @namespace    http://tampermonkey.net/
// @version      1.0.2
// @description  Axure网页汉化
// @author       alone
// @license MIT
// @icon        data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARJSURBVFhHvZdfTFtVHMdrYqJjZi+++GD2gMvUGOKD+mAAmRrjv0xMFqNE3rbJiGEPsIVsZhM33bJFG4Yyi9kiiGlWJxJhgRmCm0i3MWRrKWtLKaG40RZue3vbe9ve238/z7m3veW0p6UxwEk+Ofmd3/fe34fS9oJm9RoaGtrGMMxuv9+/D7F/PeE4bu/y8vKbWq12S3ocudDghng8zqVSKdhIYqLodblce9JjleX1evehZiqZE96oOplMxq1W67vy8La2tjJJknzoEDc2jVCIt6HxD2vsdvtrtMAmkOrs7HxW43Q6P0qgA5lEek8jxRKg+80KR3+ehsO/2mDaHSL6uXlcO/1m+Mn0BXSbPofBWR3EE4mC+f7+/l0ah8NRl8AhCiwXgdqWq1D92Z/w/MlxqD5/F/yCRM1iQlEWTvz1ARweeV3myOjbEJEEahbT19f3qiyALQvRPeRQBXacuQ0NA/MQi8ep2V7zCXU45vrCZWouQ1Ygjg4KIEpx+ET3jyrwpPYO9FqYvNzU0igxXDd5SBHNya1GFrAhARwsxiLDQ+XZm6rA9vMWsPvCRObC1BF1+LFrtcDwbqJPo2QBzIDZqwo83mGGGsMcCGJM7a/wS3AcDcYCkw9GiGsLoQjYHHVSLIbe8XEE3jPk181XnKrAtk4LHDW6if6dpWvofXBSrbM9ep0WsKUF1oYVolB5cUYVeKzrHoy4OCITFsNEXYw8AVFSKFbfvh+EJ76blgXKdPegvHcWPKFoydevrlUBUZJQo3S+mXCrAlu6rLDn6iJERXq2GP9b4OscgXeuuCAiitRsMVQBbF8qE/9yxK9ge88sLAbC1OxayAIzsoCIDtbGF4oQb8KtSGDQyVKzpaAK4JevFFoG54iPYcvYA6LPj88B13GdOCuGQRaYQQJRdLAGAyYP8UVUdckBHPpYZvphbwB8leeA2XkKeOM8cW0h0gIzdeFoFIqx4OWg6uwt4qvY4g0SGfbTy8A89ZWMr6oDhOUA0aeRFYikD/GeIV3z4Qgc6CIfRt0mb16e+8GoCmDYA7+AEIlkM5T7qwI4KKBDZc+g1D3Ds+Tj+Hf0DKDlkah//yVCguuZWJXJv7/BQAjkY7Z5oPbQH6pAzfd3wRPgqVkM72XBV/1tVuK5MxCavk/NYgwGgyKAX2b8E+A9A66bj4/A7mblL6IXvjTCDSdD9HPzeA/emgfm6dOqhO/9CwXzsoBZFgijw3xOnxuHj4+Nwnun/oYfxxaoGRqBizeAeUkLzIta8B/so2YwsoDJYvlQPRTIwEbXer2+RjM8PPxyCDU2myDPJ+vr63fg/00eXXK7HSFBQI3Nw2a3G9HsR7CAplevf8vHspEgLyCzjcezssK2trZWycPT66H29vY3rHb7ZCAYStAuWg9YLhibMpnGmpqaqvFMZTS5yioqKp5paGh4pbGxsWY92YvuWV5evhPN2KqMwkuj+Q9ZLc3BjV9w+wAAAABJRU5ErkJggg==
// @match        *://*.axshare.com/*
// @match        *://127.0.0.1:32767/*
// @grant        GM_addStyle
// @run-at       document-end
// @require https://greasyfork.org/scripts/475259-elementgetter-alone/code/ElementGetter_Alone.js?version=1250106
// ==/UserScript==

var messages = {
  ".feedback-panel-empty-state__title":"无评论",
  ".feedback-panel-empty-state > div:nth-child(2)":
  "添加评论以反馈,提出疑问或改动建议。",
  ".feedback-item-confirm-delete-popup > .feedback-item-confirm-delete-popup__actions > button[type=button]":
  "取消",
  ".feedback-item-confirm-delete-popup > .feedback-item-confirm-delete-popup__actions > button[type=submit]":
  "删除",
  "#loginForm > div.form-title": "请输入密码",
  "#loginForm > div.userLoginBox > div:nth-child(2) > button": "查看项目",
  "#coreContents > div > div.form-title": "项目正在生成中...",
  "#coreContents > div > div:nth-child(3)": "这可能需要几分钟。",
  "div.feedback-reply-container > div.ax-reply.feedback-thread-reply-container.ax-reply--editable > div > div > p":
  "",
  ".feedback-item-submit-edit > button[type=button]": "取消",
  ".feedback-item-submit-edit > button[type=submit]": "保存",
  ".feedback-panel-header-row__mark-as-read-button": "全部已读",
  "#interfaceControlFrameRight > div.ax-menu.share-button-container > div > button":
  "分享",
  "#interfaceControlFrameRight > div.ax-menu.share-button-container > div.ax-menu__content.ax-menu__content.share-button-dialog > div.toggle-current-page > span":
  "连接到本页面",
  "#interfaceControlFrameRight > div.ax-menu.share-button-container > div.ax-menu__content.ax-menu__content.share-button-dialog > div:nth-child(3) > div.share-url > div":
  "分享链接",
  "#interfaceControlFrameRight > div.ax-menu.share-button-container > div.ax-menu__content.ax-menu__content.share-button-dialog > div:nth-child(4) > div.share-url > div":
  "分享并打开页面和评论",
  ".ax-copy-to-clipboard > button": "复制",
  "#pageNotesEmptyState > div.emptyStateTitle": "本页面没有备注",
  "#pageNotesEmptyState > div.emptyStateContent":
  "在Axure RP中添加的备注会在这里展示",
  "#feedbackHost > div > div.feedback-panel-header > div > div.feedback-panel-header__mode > div > div.ax-menu__content.ax-menu__content.filter-content > div.filter-inner-content > div:nth-child(1) > label > span":
  "仅本页面",
  "#feedbackHost > div > div.feedback-panel-header > div > div.feedback-panel-header__mode > div > div.ax-menu__content.ax-menu__content.filter-content > div.filter-inner-content > div:nth-child(2) > label > span":
  "未读",
  "#feedbackHost > div > div.feedback-panel-header > div > div.feedback-panel-header__mode > div > div.ax-menu__content.ax-menu__content.filter-content > div.filter-inner-content > div:nth-child(3) > label > span":
  "已处理",
  "#feedbackHost > div > div.feedback-panel-header > div > div.feedback-panel-header__mode > div > div.ax-menu__content.ax-menu__content.filter-content > div.ax-feedback-pin-color-picker.filter-colors > div > button:nth-child(1)":
  "全",
  "#phishing-banner-title":"来自Axure的消息"
};
var replace = [
  {
    key: "#interfaceControlFrameRight > div.ax-menu.share-button-container > div.ax-menu__content.ax-menu__content.share-button-dialog > div.share-note",
    search: "Copy the URL in the browser to share the current page and player configuration.",
    replace: "复制 URL 以共享当前页面和播放器设置。",
  },
  {
    key: "#interfaceControlFrameRight > div.ax-menu.share-button-container > div.ax-menu__content.ax-menu__content.share-button-dialog > div.share-note > div > span",
    search: " For a share link without the prototype player ",
    replace: "仅复制当前页面的分享链接",
  },
  {
    key: "#interfaceControlFrameRight > div.ax-menu.share-button-container > div.ax-menu__content.ax-menu__content.share-button-dialog > div.share-note > div > a",
    search: " click here ",
    replace: "点击这里",
  },
  {
    key: "#changePageInstructions",
    search: "Use",
    replace: "使用",
  },
  {
    key: "#changePageInstructions",
    search: "and",
    replace: "和",
  },
  {
    key: "#changePageInstructions",
    search: "keys",
    replace: "按键",
  },
  {
    key: "#changePageInstructions",
    search: "to move between pages",
    replace: "在页面间切换",
  },
  {
    key: "div.feedback-issue-replies-summary > span",
    search: /.+/,
    replace: "查看回复",
  },
  {
    key: ".ax-form-errors__error",
    search: " Please enter text ",
    replace: "请输入内容",
  },
  {
    key: ".feedback-item-confirm-delete-popup > .feedback-item-confirm-delete-popup__question",
    search: " Are you sure? ",
    replace: "确定删除?",
  },
  {
    key: ".feedback-reply-actions > div > .feedback-reply-actions__mark-resolved > button",
    search: "Post and Resolve",
    replace: "回复并处理",
  },
  {
    key: ".feedback-reply-actions > div > .feedback-reply-actions__mark-resolved > button",
    search: " Post and Unresolve ",
    replace: "回复并取消处理",
  },
  {
    key: ".feedback-reply-actions > div > div:nth-child(1) > button",
    search: "Post",
    replace: "回复",
  },
  {
    key: ".feedback-commenting-as",
    search: " Commenting as ",
    replace: "",
  },
  {
    key: "#showHotspotsOption",
    search: "Show Hotspots",
    replace: "显示热点",
  },
  {
    key: "#showNotesOption",
    search: "Show Note Markers",
    replace: "显示笔记",
  },
  {
    key: "#showCommentsOption",
    search: "Show Comments",
    replace: "显示评论",
  },
  {
    key: "#showHotspotsOption",
    search: "Show Hotspots",
    replace: "显示热点",
  },
  {
    key: "#interfaceScaleListContainer > div:nth-child(1)",
    search: "Default Scale",
    replace: "默认比例",
  },
  {
    key: "#interfaceScaleListContainer > div:nth-child(2)",
    search: "Scale to Width",
    replace: "适合宽度",
  },
  {
    key: "#interfaceScaleListContainer > div:nth-child(3)",
    search: "Scale to Fit",
    replace: "适合大小",
  },
  {
    key: "#coreContents > div > div:nth-child(4)",
    search: /If you have any questions, please email.+/,
    replace: "",
  },
  {
    key: "#core > div.loginLinkContents",
    search: " Workspace members can ",
    replace: "项目成员可以",
  },
  {
    key: "#core > div.loginLinkContents",
    search: "sign in to Axure Cloud",
    replace: "登录到 Axure 云",
  },
  {
    key: "#core > div.loginLinkContents",
    search: "to view this project.",
    replace: "查看此项目",
  },
  {
    key: "#pageNotesContent > div > div.widgetNoteLabel",
    search: "Rectangle",
    replace: "矩形",
  },
  {
    key: "#notesOverlay > div > div.notesDialogScroll > div > div.widgetNoteLabel",
    search: "Rectangle",
    replace: "矩形",
  },
  {
    key: ".pageNotesSectionHeader",
    search: "Rectangle",
    replace: "矩形",
  },
  {
    key: "#pageNotesSectionHeader",
    search: "Page Notes",
    replace: "页面注释",
  },
  {
    key: "#widgetNotesSectionHeader",
    search: "Widget Notes",
    replace: "小部件注释",
  },
  {
    key: "#phishing-banner-text",
    search: " strives to provide an easy and secure way to share ideas and prototypes. If you see content that may be deceptive, please ",
    replace: "努力提供一种简单而安全的方式来分享想法和原型。如果您看到可能具有欺骗性的内容,请",
  },
  {
    key: "#phishing-banner-text",
    search: "click here to report it",
    replace: "点击这里进行举报",
  },
  {
    key: "#phishing-banner-footer-tip",
    search: "Why am I seeing this?",
    replace: "为什么我会看见这条消息",
  },
  {
    key: "#phishing-banner-footer-tip > #tooltiptext",
    search: "This message appears when a page contains a link that leaves Axure Cloud.",
    replace: "当页面包含跳转到非Axure的链接时,会出现这条消息。",
  },
  {
    key: "#phishing-banner-footer-tip > #tooltiptext",
    search: "You will only see this the first time you view the project. Setting an access code on the project prevents this message from appearing.",
    replace: "只有第一次查看此项目时会显示,可以给项目设置密码来避免",
  },
  {
    key: "#phishing-banner-footer-button",
    search: "OK",
    replace: "好的",
  },
];


function Work() {
  Object.entries(messages).map(([k, v]) => {
    elmGetter.each(k, document, (reply) => {
      reply.innerText = v;
    });
  });

  replace.forEach((v) => {
    elmGetter.each(v.key, document, (reply) => {
      reply.innerHTML = reply.innerHTML.replace(v.search, v.replace);
    });
  });

  // 评论时间
  elmGetter.each("div.feedback-issue-options > span", document, (reply) => {
    if (!!reply.title) {
      var timeText = reply.title || "";
      var date = new Date(Date.parse(timeText));
      var formattedDate =
          date.getFullYear() +
          "/" +
          (date.getMonth() + 1) +
          "/" +
          date.getDate() +
          " " +
          date.getHours() +
          ":" +
          date.getMinutes() +
          ":" +
          date.getSeconds();
      reply.innerText = formattedDate;
    }
  });

  // 评论时间
  elmGetter.each(".feedback-item-content-date > span", document, (reply) => {
    if (!!reply.title) {
      var timeText = reply.title || "";
      var date = new Date(Date.parse(timeText));
      var formattedDate =
          date.getFullYear() +
          "/" +
          (date.getMonth() + 1) +
          "/" +
          date.getDate() +
          " " +
          date.getHours() +
          ":" +
          date.getMinutes() +
          ":" +
          date.getSeconds();
      reply.innerText = formattedDate;
    }
  });

  // 处理评论时间
  elmGetter.each(
    "#feedbackHost > div > div.feedback-panel-issues.feedback-panel__issues > div > div:nth-child(n) > div.feedback-issue__resolved-mark",
    document,
    (reply) => {
      const message = reply.querySelector("div:nth-child(1)");
      const time = reply.querySelector("div:nth-child(2)");
      if (message) {
        message.innerText = message.innerText.replace(
          /Resolved by (.+)/,
          "已由 $1 处理"
        );
      }
      if (time) {
        var timeText = time.innerText;
        var date = new Date(Date.parse(timeText));
        var formattedDate =
            date.getFullYear() +
            "/" +
            (date.getMonth() + 1) +
            "/" +
            date.getDate();
        time.innerText = formattedDate;
      }
    }
  );

  // 有状态的按钮切换时修改文字
    // 配置 MutationObserver 监听 class 属性的变化
    const config = { attributes: true, attributeFilter: ["class"] };

    // 添加评论按钮
    elmGetter
        .get("#feedbackHost > div > div.feedback-panel-add-comment > button")
        .then((button) => {
        if (
            button.className ==
            "feedback-panel-add-comment-button ax-button ax-button--default ax-button--block ax-button--large"
        ) {
            button.textContent = "添加评论";
        } else {
            button.textContent = "完成";
        }
        // 创建 MutationObserver 实例
        const observer = new MutationObserver((mutationsList) => {
            // 遍历每个发生变化的属性
            for (let mutation of mutationsList) {
                if (
                    mutation.type === "attributes" &&
                    mutation.attributeName === "class"
                ) {
                    // 当 class 属性发生变化时,修改按钮内容
                    if (
                        button.className ==
                        "feedback-panel-add-comment-button ax-button ax-button--default ax-button--block ax-button--large"
                    ) {
                        button.textContent = "添加评论";
                    } else {
                        button.textContent = "完成";
                    }
                }
            }
        });

        // 开始监听按钮的变化
        observer.observe(button, config);
    });

};

function Style() {

  //筛选选项加样式
  elmGetter.each(".color-list > button", document, (reply) => {
    if (!!reply.style) {
      reply.style.width = "16px";
      reply.style.height = "16px";
    }
  });
  //筛选选项加样式
  elmGetter.each(
    "div.ax-reply.feedback-thread-reply-container.ax-reply--editable > div > div > p",
    document,
    (reply) => {
      if (!!reply) {
        reply.dataPlaceholder = "";
      }
    }
  );

  GM_addStyle(`
    #feedbackHostBtn a {
    background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjk0Njg2NTM1MjQ5IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwNDYgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjM1MDgiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjA0LjI5Njg3NSIgaGVpZ2h0PSIyMDAiPjxwYXRoIGQ9Ik02ODguNjA2NDA2IDk5NS40Njc0MmMtNzUuOTgyNzc4IDIzLjc0NTU3OC0xNTQuMzQxMTM4IDMwLjg2NzIwNC0yMzIuNzA0NjE4IDIxLjM2OTk5NkMxNzAuOTU5OTcxIDk4My41OTQ2MzEtMzAuODcyMzIzIDcyNC43NzM5NzMgNC43NDYwNDQgNDQyLjIwNzczNyA0NS4xMTU1NzQgMTU5LjY0MTUwMSAzMDguNjgyMjc2LTM1LjA2OTE2NyA1OTEuMjQ4NTEyIDUuMjk1MjQzYzI4Mi41NjExMTYgMzUuNjE4MzY3IDQ4NC4zOTg1MyAyOTIuMDYzNDQzIDQ1MS4xNTU3NDUgNTc0LjYyOTY4LTExLjg2NzY2OSA4NS40Nzk5ODUtNDUuMTIwNjk0IDE2OC41ODk1MDktOTcuMzU3ODk1IDIzNy40NTA2NjFsLTIzLjc0NTU3OCAxNzguMDg2NzE2YzAgOS40OTIwODgtNC43NTExNjQgMTYuNjIzOTUzLTExLjg3Mjc4OSAyMS4zNjk5OTYtNy4xMjE2MjYgNC43NTExNjQtMTQuMjQzMjUxIDcuMTI2NzQ1LTIxLjM2OTk5NiA3LjEyNjc0NmwtMTk5LjQ1MTU5My0yOC40OTE2MjJ6TTI4NC45NDE4MTggNDUxLjcwNDk0NGMtNDAuMzY0NDExIDAtNzEuMjM2NzM0IDMwLjg2NzIwNC03MS4yMzY3MzUgNzEuMjM2NzM1czMwLjg2NzIwNCA3MS4yMzY3MzQgNzEuMjM2NzM1IDcxLjIzNjczNCA3MS4yMzY3MzQtMzAuODY3MjA0IDcxLjIzNjczNC03MS4yMzY3MzQtMzAuODcyMzIzLTcxLjIzNjczNC03MS4yMzY3MzQtNzEuMjM2NzM1eiBtMjM3LjQ1MDY2MSAwYy00MC4zNjQ0MTEgMC03MS4yMzY3MzQgMzAuODY3MjA0LTcxLjIzNjczNCA3MS4yMzY3MzVzMzAuODY3MjA0IDcxLjIzNjczNCA3MS4yMzY3MzQgNzEuMjM2NzM0IDcxLjIzNjczNC0zMC44NjcyMDQgNzEuMjM2NzM0LTcxLjIzNjczNC0zMC44NzIzMjMtNzEuMjM2NzM0LTcxLjIzNjczNC03MS4yMzY3MzV6IG0yMzcuNDQ1NTQyIDBjLTQwLjM2NDQxMSAwLTcxLjIzMTYxNSAzMC44NjcyMDQtNzEuMjMxNjE1IDcxLjIzNjczNXMzMC44NjcyMDQgNzEuMjM2NzM0IDcxLjIzMTYxNSA3MS4yMzY3MzRjNDAuMzY5NTMxIDAgNzEuMjM2NzM0LTMwLjg2NzIwNCA3MS4yMzY3MzQtNzEuMjM2NzM0cy0zMC44NjcyMDQtNzEuMjM2NzM0LTcxLjIzNjczNC03MS4yMzY3MzV6IiBmaWxsPSIjYmZiZmJmIiBwLWlkPSIzNTA5Ij48L3BhdGg+PC9zdmc+) no-repeat center center / 80% 80%;
}`);

  GM_addStyle(`
      ::-webkit-scrollbar {
        width: 10px;
        height: 8px;
    }
    ::-webkit-scrollbar-thumb {
        background: #E6E6E6;
        border-radius: 0.25em;
        min-height: 30px;
    }
    ::-webkit-scrollbar-track {
        background: transparent;
    }
    ::-webkit-scrollbar-thumb:hover {
        width: 12px;
        background: #ccc; // 设置滚动条滑块鼠标悬停颜色
    }`);

  GM_addStyle(`
  .widgetNoteContainer {
    border-bottom: 1px solid silver !important;
}

.pageNoteContainer > .pageNote {
    font-size: 14px;
    border: 2px solid #FEC794;
    border-radius: 5px;
    padding-inline: 10px;
    background: #FAF1E6;
}
.widgetNoteFootnote {
    font-size: 20px !important;
    line-height: 20px !important;
}
.widgetNoteContainer > .pageNote {
    font-size: 14px;
    border: 2px solid #98C1FF;
    border-radius: 5px;
    padding-inline: 10px;
    background: #E6EEFA;
}
.widgetNoteLabel {
    font-style: italic;
}
div.notesDialog {
    border-radius: 5px;
    border:none !important
}
div.annnotelabel {
    font-size: 20px;
    line-height: 20px;
}
.feedback-pin-popup{border:none !important}

div.closeNotesDialog{   top: 3px; right: 3px; width: 20px; height: 20px;background: url(https://files.axshare.com/gsr/3741/images/close_x.svg) no-repeat center center / 70% 70% !important;}

.feedback-pin-close-button{  top: 3px !important; right: 3px !important; width: 20px; height: 20px;}

.feedback-pin-close-button:hover{
    background: #E6E6E6;
    border-radius: 5px;
}
.ax-reply p.is-editor-empty:first-child:before {
    content: "请输入内容" !important;
}
div.feedback-reply-actions > div:nth-child(2) > button > svg {
    font-size: 14px;
    width: 20px;
    height: 18px !important;
}
.ax-reply .mention {
    background-color: #3eacef !important;
    border-radius: 5px !important;
    color: white !important;
}
.ax-reply .mention--current-user {
    color: #fff !important;
    background-color: #855cce !important;
}
.feedback-reply-actions__post-button {
    background-color: #3eacef !important;
}
.feedback-reply-actions__post-button:hover {
    background-color: #1482C5 !important;
}
    `);

};

(function () {
  "use strict";
  Work();
  Style();
})();