sidebar.js 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. /* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.*/
  2. //左侧层级是否包含示例
  3. var containExample = false;
  4. var sideBarIconConfig = sideBarIconConfig || {};
  5. function initSideBar() {
  6. var sideBar = $("ul#sidebar-menu");
  7. for (var key in conf) {
  8. sideBar.append(createSideBarMenuItem(key, conf[key], false));
  9. }
  10. }
  11. //侧边栏滚动支持
  12. function sidebarScrollFix() {
  13. $('ul#sidebar-menu>li').hover(function (evt) {
  14. if (!$('body').hasClass('sidebar-collapse')) {
  15. return;
  16. }
  17. //调整一级菜单li下标题的布局位置至右侧
  18. var $titleBar = $(this).children('a').children('.sidebar-title-bar');
  19. $titleBar.css({
  20. "top": ($(this).offset().top - $(window).scrollTop()) + "px",
  21. //fix由于侧边栏滚动条宽度引起的减少的宽度
  22. "width": "233px"
  23. });
  24. //如果底部空间不够,动态增加侧边栏高度
  25. var visibleOffsetTop = $(this).offset().top - $(window).scrollTop();
  26. var offsetBottom = $('.sidebar-menu').height() - visibleOffsetTop;
  27. var requireVisibleHeight = $(this).height() + $(this).children('ul').height();
  28. if (offsetBottom <= requireVisibleHeight) {
  29. $('.sidebar-menu').css({
  30. "height": (requireVisibleHeight + $(window).height()) + "px"
  31. })
  32. }
  33. //调整一级菜单li下子列表的布局位置至右侧
  34. var offsetTop = visibleOffsetTop + $(this).height();
  35. $(this).children('ul').css({
  36. "top": offsetTop + "px"
  37. });
  38. //fix小尺寸屏幕下二级菜单高度高于窗口高度时显示不全的情况
  39. var $activeList = $(this).children('ul');
  40. var activeListOffsetBottom = Math.abs($(window).height() - visibleOffsetTop - $(this).height());
  41. var requireActiveListHeight = $activeList.height();
  42. if (activeListOffsetBottom < requireActiveListHeight) {
  43. $activeList.css({
  44. "height": requireActiveListHeight
  45. });
  46. //滚动条样式
  47. $activeList.addClass('scroll-list');
  48. }
  49. }, function (evt) {
  50. if (!$('body').hasClass('sidebar-collapse')) {
  51. return;
  52. }
  53. //滚动条
  54. $(this).children('ul').removeClass('scroll-list');
  55. //恢复原来的高度
  56. $(this).children('ul').css({
  57. "height": "auto"
  58. });
  59. });
  60. $('.main-sidebar').on('scroll', function (evt) {
  61. evt.stopPropagation();
  62. });
  63. $(window).on('resize', function () {
  64. $('.sidebar-menu').css({
  65. "height": "100%"
  66. })
  67. })
  68. }
  69. //创建菜单项
  70. function createSideBarMenuItem(id, config, containAll) {
  71. containExample = containAll;
  72. if (!config) {
  73. return;
  74. }
  75. if (window.isLocal && config.localIgnore) {
  76. return;
  77. }
  78. if (config.content) {
  79. var hasNewExamples = false;
  80. a: for (var key in config.content) {
  81. var examples = config.content[key].content;
  82. if (examples) {
  83. for (var index = 0; index < examples.length; index++) {
  84. var element = examples[index];
  85. if (element.version === window.version) {
  86. config.content[key].hasNewExamples = true;
  87. hasNewExamples = true;
  88. continue a;
  89. }
  90. }
  91. }
  92. }
  93. config.hasNewExamples = hasNewExamples;
  94. }
  95. var title = utils.getLocalPairs(config, "name");
  96. var li = $("<li id='iclient_" + id + "' class='treeview ' title='" + title + "'></li>");
  97. if (config.content) {
  98. createSideBarMenuTitle(id, title, true, config.hasNewExamples).appendTo(li);
  99. createSideBarSecondMenu(config.content, id).appendTo(li);
  100. } else {
  101. createSideBarMenuTitle(id, title, false, config.hasNewExamples).appendTo(li);
  102. }
  103. return li;
  104. }
  105. //创建二级菜单
  106. function createSideBarSecondMenu(config, name) {
  107. var ul = $("<ul class='treeview-menu second-menu '></ul>");
  108. for (var key in config) {
  109. var configItem = config[key];
  110. if (window.isLocal && configItem.localIgnore) {
  111. continue;
  112. }
  113. var title = utils.getLocalPairs(configItem, "name") || "【empty title】";
  114. var li = $("<li class='menuTitle ' id='" + key + "' title='" + title + "'></li>");
  115. li.appendTo(ul);
  116. if (containExample && configItem.content) {
  117. createSideBarMenuSecondTitle(name + '-' + key, title, true, configItem.hasNewExamples).appendTo(li);
  118. createSideBarThirdMenu(configItem.content).appendTo(li);
  119. } else {
  120. createSideBarMenuSecondTitle(name + '-' + key, title, false, configItem.hasNewExamples).appendTo(li);
  121. }
  122. }
  123. return ul;
  124. }
  125. //创建三级菜单
  126. function createSideBarThirdMenu(examples) {
  127. var ul = $("<ul class='treeview-menu third-menu'></ul>");
  128. var len = (examples && examples.length) ? examples.length : 0;
  129. for (var i = 0; i < len; i++) {
  130. var example = examples[i];
  131. if (window.isLocal && example.localIgnore) {
  132. continue;
  133. }
  134. var title = utils.getLocalPairs(example, "name") || "【empty title】";
  135. var li = $("<li class='menuTitle' id='" + example.fileName + "' title='" + title + "'></li>");
  136. li.appendTo(ul);
  137. if (example.fileName && title) {
  138. createSideBarMenuThirdTitle(example.fileName, title, false,example.version).appendTo(li);
  139. }
  140. }
  141. return ul;
  142. }
  143. function createSideBarMenuTitle(id, title, collapse, hasNewExamples) {
  144. id = id || "";
  145. var icon = "",
  146. iconName = sideBarIconConfig[id];
  147. if (iconName) {
  148. icon = "<i class='fa " + iconName + " iconName'></i>"
  149. }
  150. var div = $("<a href='#" + id + "'>" + icon + "</a>");
  151. var titleBar = $("<span class='sidebar-title-bar'></span>");
  152. var newIcon = "";
  153. if (hasNewExamples) {
  154. newIcon = "<svg style='width:16px;height:16px;padding-left:5px'><circle cx='3' cy='3' r='3' fill='#e14d57'></circle>/svg>";
  155. }
  156. var firstMenuTitle = $("<span class='firstMenuTitle'>" + title + newIcon + "</span>");
  157. titleBar.append(firstMenuTitle);
  158. if (collapse) {
  159. titleBar.append(createCollapsedIcon());
  160. }
  161. div.append(titleBar);
  162. return div;
  163. }
  164. function createSideBarMenuSecondTitle(id, title, collapse, hasNewExamples) {
  165. id = id || "";
  166. var icon = "",
  167. iconName = sideBarIconConfig[id];
  168. if (iconName) {
  169. icon = "<i class='fa " + iconName + "'></i>"
  170. }
  171. var newIcon = "";
  172. if (hasNewExamples) {
  173. newIcon = "<svg style='width:16px;height:16px;padding-left:5px'><circle cx='3' cy='3' r='3' fill='#e14d57'></circle>/svg>";
  174. }
  175. var div = $(
  176. "<a href='#" + id + "' id='" + id + '-' + id + "'>" + icon +
  177. "<span class='secondMenuTitle'>" + title + "</span>" + newIcon +
  178. "</a>");
  179. if (collapse) {
  180. div.append(createCollapsedIcon());
  181. }
  182. return div;
  183. }
  184. function createSideBarMenuThirdTitle(id, title, collapse,version) {
  185. id = id || "";
  186. var icon = "",
  187. iconName = sideBarIconConfig[id];
  188. if (iconName) {
  189. icon = "<i class='fa " + iconName + "'></i>"
  190. }
  191. var newIcon="";
  192. if(window.version===version){
  193. newIcon = "<svg style='width:16px;height:16px;padding-left:5px'><circle cx='3' cy='3' r='3' fill='#e14d57'></circle>/svg>";
  194. }
  195. var div = $(
  196. "<a href='#" + id + "' id='" + id + "'>" + icon +
  197. "<span class='thirdMenuTitle'>" + title + "</span>" +newIcon+
  198. "</a>");
  199. if (collapse) {
  200. div.append(createCollapsedIcon());
  201. }
  202. return div;
  203. }
  204. //创建右侧折叠菜单
  205. function createCollapsedIcon() {
  206. return $("<span class='pull-right-container'> <i class='fa fa-angle-left pull-right'></i> </span>");
  207. }
  208. //只处理三层节点,后续可优化
  209. function selectMenu(id, length) {
  210. var target = _getTarget(id, length);
  211. if (length !== 1) {
  212. //控制editor页面左侧导航栏一级菜单高亮
  213. _selectTarget(target.parent().parent().parent().parent());
  214. //控制示例页面左侧导航栏一级菜单高亮
  215. _selectTarget(target.parent().parent());
  216. //控制左侧导航栏最低级菜单高亮
  217. _selectTarget(target.parent());
  218. _selectTarget(target.find("ul"));
  219. }
  220. }
  221. function _getTarget(id, length) {
  222. var target;
  223. if (length) {
  224. if (length === 1) {
  225. $("section#sidebar li.active").removeClass("active");
  226. target = $("section#sidebar li#iclient_" + id);
  227. target.children('ul').show();
  228. }
  229. if (length === 2) {
  230. $("section#sidebar li.active ul.active li").removeClass("active");
  231. target = $("section#sidebar li.treeview").children('ul').children('li#' + id);
  232. }
  233. } else {
  234. $("section#sidebar #ul").addClass("active");
  235. $("section#sidebar li.active").removeClass("active");
  236. target = $("section#sidebar li#" + id);
  237. }
  238. target && target.addClass('active');
  239. return target;
  240. }
  241. function _selectTarget(target) {
  242. if (!target || target.length < 1) {
  243. return;
  244. }
  245. var className = target.attr("class");
  246. if (className && className.indexOf("treeview-menu") > -1 && className.indexOf("menu-open") === -1) {
  247. target.addClass("menu-open");
  248. target.css("display", "block");
  249. }
  250. if (className && className.indexOf("treeview") > -1) {
  251. target.addClass('active');
  252. }
  253. }