// ==UserScript== // @name extension for axure // @namespace http://tampermonkey.net/ // @version 1.1.1 // @description axure 原型页面辅助 // @author gkeeno // @match http://192.168.1.5:30032/* // @require https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js // @grant none // @run-at document-idle // @noframes // @downloadURL none // ==/UserScript== var $ = jQuery; $.noConflict(); (function() { 'use strict'; if(self!=top) return; //不是顶层页面 var $headerBtnMenu = $("#sitemapToolbar > div.pageButtonHeader") // 添加一个 折叠 功能按钮 var a_foldMenuBtn = document.createElement("button") a_foldMenuBtn.title = "折叠菜单" a_foldMenuBtn.classList.add("sitemapToolbarButton") a_foldMenuBtn.innerText = '⇈' a_foldMenuBtn.onclick = function(){ var userRes = prompt("从几级开始折叠?(最小为1级)",2); var level = Math.floor(Number(userRes)); if(isNaN(level)|| level < 0) return alert("必须输入正整数") foldLeftMenu(level) } $headerBtnMenu && $headerBtnMenu.prepend(a_foldMenuBtn); })(); /************************************************************************************* 1. 菜单折叠 TODO:优化按钮显示 **************************************************************************************/ ///------------------ // 根据层级折叠菜单 function foldLeftMenu(level) { var $leftMenuTree = $("#sitemapTreeContainer > ul.sitemapTree") var levelFlag = { lvMax: 10, lvMin: level || 1, lvCur:1, isExceed: function () { return levelFlag.lvCur > levelFlag.lvMax }, completeFold: function () { levelFlag.lvCur++ } }; // 一级 Node var $nodeList = $leftMenuTree.find("> .sitemapNode") foldAllNodeByNodeList($nodeList, levelFlag, []); } // 折叠当前 node 的所有 sub node function foldAllNodeByNodeList($nodeList, flag, foldCallBacks) { // 是否超过需要折叠的层级 if (flag.isExceed()) { executedAllCallBacks(foldCallBacks) return; } var nextFoldNodeList = []; // 收集下一层级所有node var needSkipLevel = isSkipLevel(flag); for (var i = 0; i < $nodeList.length; i++) { var $curNode = $nodeList.eq(i); nextFoldNodeList = nextFoldNodeList.concat(findSubNodes($curNode));// 即使 父node 已折叠也 进行折叠 子node if(!needSkipLevel) foldCallBacks.push((function($node){ return function(){ foldNode($node) } })($curNode)); } flag.completeFold(); // 标志 折叠当前层级动作 已完成 var $nextFoldNodeList = $(nextFoldNodeList); // 超出折叠最大层数 if (!nextFoldNodeList.length) { executedAllCallBacks(foldCallBacks) return }; foldAllNodeByNodeList($nextFoldNodeList, flag, foldCallBacks) } // 获取当前 node 的所有 sub node function findSubNodes($node) { return $node.find("> ul > .sitemapNode").toArray() } // 判断Node是否已折叠 function isFolded($btn) { return $btn.find(" .sitemapPlus").length === 1 } // 判断Node是否可折叠 function canFold($node) { return !$node.is(".sitemapLeafNode") } // 折叠当前 Node function foldNode($node) { var $btn_fold = $node.find(">div > div.sitemapPageLinkContainer .sitemapPlusMinusLink"); var btn_fold = $btn_fold.get(0); btn_fold && !isFolded($btn_fold) && btn_fold.click(); } function executedAllCallBacks(arrCallBacks) { for (var i = arrCallBacks.length - 1; i >= 0; i--) { arrCallBacks[i].call(); } } function isSkipLevel(flag){ return flag.lvCur < flag.lvMin; }