toc.html.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. // Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.
  2. exports.transform = function (model) {
  3. var groupNames = {
  4. "constructor": { key: "constructorsInSubtitle" },
  5. "field": { key: "fieldsInSubtitle" },
  6. "property": { key: "propertiesInSubtitle" },
  7. "method": { key: "methodsInSubtitle" },
  8. "event": { key: "eventsInSubtitle" },
  9. "operator": { key: "operatorsInSubtitle" },
  10. };
  11. groupChildren(model);
  12. transformItem(model, 1);
  13. return model;
  14. function groupChildren(item) {
  15. if (!item || !item.items || item.items.length == 0) {
  16. return;
  17. }
  18. var grouped = {};
  19. var items = [];
  20. item.items.forEach(function (element) {
  21. groupChildren(element);
  22. if (element.type) {
  23. var type = element.type.toLowerCase();
  24. if (!grouped.hasOwnProperty(type)) {
  25. if (!groupNames.hasOwnProperty(type)) {
  26. groupNames[type] = {
  27. name: element.type
  28. };
  29. console.log(type + " is not predefined type, use its type name as display name.")
  30. }
  31. grouped[type] = [];
  32. }
  33. grouped[type].push(element);
  34. } else {
  35. items.push(element);
  36. }
  37. }, this);
  38. // With order defined in groupNames
  39. for (var key in groupNames) {
  40. if (groupNames.hasOwnProperty(key) && grouped.hasOwnProperty(key)) {
  41. items.push({
  42. name: model.__global[groupNames[key].key] || groupNames[key].name,
  43. items: grouped[key]
  44. })
  45. }
  46. }
  47. item.items = items;
  48. }
  49. function transformItem(item, level) {
  50. // set to null in case mustache looks up
  51. item.topicHref = item.topicHref || null;
  52. item.tocHref = item.tocHref || null;
  53. item.name = item.name || null;
  54. item.level = level;
  55. if (item.items && item.items.length > 0) {
  56. item.leaf = false;
  57. var length = item.items.length;
  58. for (var i = 0; i < length; i++) {
  59. transformItem(item.items[i], level + 1);
  60. };
  61. } else {
  62. item.items = [];
  63. item.leaf = true;
  64. }
  65. }
  66. }