Includes: * display ToC for API docs * update dgeni-packages to 0.24.1 * add floating sidebar in API docs * add breadcrumbs and structured data for Google crawler * improved rendering of method overloads * properties rendered in a table * params rendered with docs * removal of outdated "infobox" from all API docs PR Close #21874
		
			
				
	
	
		
			59 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/**
 | 
						|
 * A class like API doc contains members, but these can be either properties or method.
 | 
						|
 * Separate the members into two new collections: `doc.properties` and `doc.methods`.
 | 
						|
 */
 | 
						|
module.exports = function processClassLikeMembers() {
 | 
						|
  return {
 | 
						|
    $runAfter: ['filterContainedDocs'],
 | 
						|
    $runBefore: ['rendering-docs'],
 | 
						|
    $process(docs) {
 | 
						|
      docs.forEach(doc => {
 | 
						|
        if (doc.members) {
 | 
						|
          doc.properties = [];
 | 
						|
          doc.methods = [];
 | 
						|
          doc.members.forEach(member => {
 | 
						|
            if (isMethod(member)) {
 | 
						|
              doc.methods.push(member);
 | 
						|
              computeMemberDescription(member);
 | 
						|
            } else {
 | 
						|
              doc.properties.push(member);
 | 
						|
 | 
						|
              if (!member.description) {
 | 
						|
                // Is this property defined as a constructor parameter e.g. `constructor(public property: string) { ... }`?
 | 
						|
                const constructorDoc = member.containerDoc.constructorDoc;
 | 
						|
                if (constructorDoc) {
 | 
						|
                  const matchingParameterDoc = constructorDoc.parameterDocs.filter(doc => doc.declaration === member.declaration)[0];
 | 
						|
                  member.constructorParamDoc = matchingParameterDoc;
 | 
						|
                }
 | 
						|
              }
 | 
						|
            }
 | 
						|
          });
 | 
						|
        }
 | 
						|
        if (doc.statics) {
 | 
						|
          doc.staticProperties = [];
 | 
						|
          doc.staticMethods = [];
 | 
						|
          doc.statics.forEach(member => {
 | 
						|
            if (isMethod(member)) {
 | 
						|
              doc.staticMethods.push(member);
 | 
						|
              computeMemberDescription(member);
 | 
						|
            } else {
 | 
						|
              doc.staticProperties.push(member);
 | 
						|
            }
 | 
						|
          });
 | 
						|
        }
 | 
						|
 | 
						|
      });
 | 
						|
    }
 | 
						|
  };
 | 
						|
};
 | 
						|
 | 
						|
function isMethod(doc) {
 | 
						|
  return doc.hasOwnProperty('parameters') && !doc.isGetAccessor && !doc.isSetAccessor;
 | 
						|
}
 | 
						|
 | 
						|
function computeMemberDescription(member) {
 | 
						|
  if (!member.description && member.overloads) {
 | 
						|
    // Perhaps the description is on one of the overloads - take the first non-empty one
 | 
						|
    member.description = member.overloads.map(overload => overload.description).filter(description => !!description)[0];
 | 
						|
  }
 | 
						|
} |