From 978376a46e71d97961a9cdade5eeb3b5e2e4c9b4 Mon Sep 17 00:00:00 2001 From: Peter Bacon Darwin Date: Wed, 3 May 2017 21:44:30 +0100 Subject: [PATCH] build(aio): `doc.searchTitle` can override name in search results --- .../transforms/angular-api-package/index.js | 1 + .../processors/computeSearchTitle.js | 9 +++ .../processors/computeSearchTitle.spec.js | 59 +++++++++++++++++++ .../processors/generateKeywords.js | 2 +- .../processors/generateKeywords.spec.js | 11 ++++ 5 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 aio/tools/transforms/angular-api-package/processors/computeSearchTitle.js create mode 100644 aio/tools/transforms/angular-api-package/processors/computeSearchTitle.spec.js diff --git a/aio/tools/transforms/angular-api-package/index.js b/aio/tools/transforms/angular-api-package/index.js index f713d0d042..4bc8db59c8 100644 --- a/aio/tools/transforms/angular-api-package/index.js +++ b/aio/tools/transforms/angular-api-package/index.js @@ -23,6 +23,7 @@ module.exports = new Package('angular-api', [basePackage, typeScriptPackage]) .processor(require('./processors/filterMemberDocs')) .processor(require('./processors/markBarredODocsAsPrivate')) .processor(require('./processors/filterPrivateDocs')) + .processor(require('./processors/computeSearchTitle')) // Where do we get the source files? .config(function(readTypeScriptModules, readFilesProcessor, collectExamples) { diff --git a/aio/tools/transforms/angular-api-package/processors/computeSearchTitle.js b/aio/tools/transforms/angular-api-package/processors/computeSearchTitle.js new file mode 100644 index 0000000000..697d3e6cc4 --- /dev/null +++ b/aio/tools/transforms/angular-api-package/processors/computeSearchTitle.js @@ -0,0 +1,9 @@ +module.exports = function computeSearchTitleProcessor() { + return { + $runAfter: ['ids-computed'], + $runBefore: ['generateKeywordsProcessor'], + $process(docs) { + + } + }; +}; diff --git a/aio/tools/transforms/angular-api-package/processors/computeSearchTitle.spec.js b/aio/tools/transforms/angular-api-package/processors/computeSearchTitle.spec.js new file mode 100644 index 0000000000..65d230bb85 --- /dev/null +++ b/aio/tools/transforms/angular-api-package/processors/computeSearchTitle.spec.js @@ -0,0 +1,59 @@ +const testPackage = require('../../helpers/test-package'); +const processorFactory = require('./computeSearchTitle'); +const Dgeni = require('dgeni'); + +fdescribe('computeSearchTitle processor', () => { + + it('should be available on the injector', () => { + const dgeni = new Dgeni([testPackage('angular-api-package')]); + const injector = dgeni.configureInjector(); + const processor = injector.get('computeSearchTitleProcessor'); + expect(processor.$process).toBeDefined(); + }); + + it('should run after the correct processor', () => { + const processor = processorFactory(); + expect(processor.$runAfter).toEqual(['ids-computed']); + }); + + it('should run before the correct processor', () => { + const processor = processorFactory(); + expect(processor.$runBefore).toEqual(['generateKeywordsProcessor']); + }); + + it('should compute a search title for class-like docs', () => { + const processor = processorFactory(); + const docs = [ + { docType: 'class', name: 'MyClass' }, + { docType: 'interface', name: 'MyInterface' }, + { docType: 'pipe', name: 'MyPipe', pipeOptions: { name: 'myPipe' } } + ]; + processor.$process(docs); + expect(docs[0].searchTitle).toEqual('class MyClass'); + expect(docs[0].searchTitle).toEqual('interface MyInterface'); + expect(docs[0].searchTitle).toEqual('myPipe (pipe)'); + }); + + it('should compute a class search title', () => { + const processor = processorFactory(); + const docs = [ + { docType: 'class', name: 'MyClass' } + ]; + processor.$process(docs); + expect(docs[0].searchTitle).toEqual('class MyClass'); + }); + +}); + + + + // 'decorator', + // 'directive', + // 'module' + // 'function', + // 'var', + // 'const', + // 'let', + // 'enum', + // 'type-alias', + // 'value-module' \ No newline at end of file diff --git a/aio/tools/transforms/angular-base-package/processors/generateKeywords.js b/aio/tools/transforms/angular-base-package/processors/generateKeywords.js index 9e16cefa04..078127a413 100644 --- a/aio/tools/transforms/angular-base-package/processors/generateKeywords.js +++ b/aio/tools/transforms/angular-base-package/processors/generateKeywords.js @@ -115,7 +115,7 @@ module.exports = function generateKeywordsProcessor(log, readFilesProcessor) { var searchData = filteredDocs.filter(function(page) { return page.searchTerms; }).map(function(page) { return Object.assign( - {path: page.path, title: page.name || page.title, type: page.docType}, page.searchTerms); + {path: page.path, title: page.searchTitle || page.name || page.title, type: page.docType}, page.searchTerms); }); docs.push({ diff --git a/aio/tools/transforms/angular-base-package/processors/generateKeywords.spec.js b/aio/tools/transforms/angular-base-package/processors/generateKeywords.spec.js index c61593e8b5..ef2e546d99 100644 --- a/aio/tools/transforms/angular-base-package/processors/generateKeywords.spec.js +++ b/aio/tools/transforms/angular-base-package/processors/generateKeywords.spec.js @@ -38,4 +38,15 @@ describe('generateKeywords processor', () => { jasmine.objectContaining({ title: 'PublicExport', type: 'class'}) ]); }); + + it('should use `doc.searchTitle` as the title if available', () => { + const processor = processorFactory(mockLogger, mockReadFilesProcessor); + const docs = [ + { docType: 'class', name: 'PublicExport', searchTitle: 'class PublicExport' }, + ]; + processor.$process(docs); + expect(docs[docs.length - 1].data).toEqual([ + jasmine.objectContaining({ title: 'class PublicExport', type: 'class'}) + ]); + }); });