128 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			128 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | /*--------------------------------------------------------------------------------------------- | ||
|  |  *  Copyright (c) Microsoft Corporation. All rights reserved. | ||
|  |  *  Licensed under the MIT License. See License.txt in the project root for license information. | ||
|  |  *--------------------------------------------------------------------------------------------*/ | ||
|  | (function (factory) { | ||
|  |     if (typeof module === "object" && typeof module.exports === "object") { | ||
|  |         var v = factory(require, exports); | ||
|  |         if (v !== undefined) module.exports = v; | ||
|  |     } | ||
|  |     else if (typeof define === "function" && define.amd) { | ||
|  |         define(["require", "exports", "../utils/markup"], factory); | ||
|  |     } | ||
|  | })(function (require, exports) { | ||
|  |     "use strict"; | ||
|  |     Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  |     exports.generateDocumentation = exports.HTMLDataProvider = void 0; | ||
|  |     const markup_1 = require("../utils/markup"); | ||
|  |     class HTMLDataProvider { | ||
|  |         isApplicable() { | ||
|  |             return true; | ||
|  |         } | ||
|  |         /** | ||
|  |          * Currently, unversioned data uses the V1 implementation | ||
|  |          * In the future when the provider handles multiple versions of HTML custom data, | ||
|  |          * use the latest implementation for unversioned data | ||
|  |          */ | ||
|  |         constructor(id, customData) { | ||
|  |             this.id = id; | ||
|  |             this._tags = []; | ||
|  |             this._tagMap = {}; | ||
|  |             this._valueSetMap = {}; | ||
|  |             this._tags = customData.tags || []; | ||
|  |             this._globalAttributes = customData.globalAttributes || []; | ||
|  |             this._tags.forEach(t => { | ||
|  |                 this._tagMap[t.name.toLowerCase()] = t; | ||
|  |             }); | ||
|  |             if (customData.valueSets) { | ||
|  |                 customData.valueSets.forEach(vs => { | ||
|  |                     this._valueSetMap[vs.name] = vs.values; | ||
|  |                 }); | ||
|  |             } | ||
|  |         } | ||
|  |         getId() { | ||
|  |             return this.id; | ||
|  |         } | ||
|  |         provideTags() { | ||
|  |             return this._tags; | ||
|  |         } | ||
|  |         provideAttributes(tag) { | ||
|  |             const attributes = []; | ||
|  |             const processAttribute = (a) => { | ||
|  |                 attributes.push(a); | ||
|  |             }; | ||
|  |             const tagEntry = this._tagMap[tag.toLowerCase()]; | ||
|  |             if (tagEntry) { | ||
|  |                 tagEntry.attributes.forEach(processAttribute); | ||
|  |             } | ||
|  |             this._globalAttributes.forEach(processAttribute); | ||
|  |             return attributes; | ||
|  |         } | ||
|  |         provideValues(tag, attribute) { | ||
|  |             const values = []; | ||
|  |             attribute = attribute.toLowerCase(); | ||
|  |             const processAttributes = (attributes) => { | ||
|  |                 attributes.forEach(a => { | ||
|  |                     if (a.name.toLowerCase() === attribute) { | ||
|  |                         if (a.values) { | ||
|  |                             a.values.forEach(v => { | ||
|  |                                 values.push(v); | ||
|  |                             }); | ||
|  |                         } | ||
|  |                         if (a.valueSet) { | ||
|  |                             if (this._valueSetMap[a.valueSet]) { | ||
|  |                                 this._valueSetMap[a.valueSet].forEach(v => { | ||
|  |                                     values.push(v); | ||
|  |                                 }); | ||
|  |                             } | ||
|  |                         } | ||
|  |                     } | ||
|  |                 }); | ||
|  |             }; | ||
|  |             const tagEntry = this._tagMap[tag.toLowerCase()]; | ||
|  |             if (tagEntry) { | ||
|  |                 processAttributes(tagEntry.attributes); | ||
|  |             } | ||
|  |             processAttributes(this._globalAttributes); | ||
|  |             return values; | ||
|  |         } | ||
|  |     } | ||
|  |     exports.HTMLDataProvider = HTMLDataProvider; | ||
|  |     /** | ||
|  |      * Generate Documentation used in hover/complete | ||
|  |      * From `documentation` and `references` | ||
|  |      */ | ||
|  |     function generateDocumentation(item, settings = {}, doesSupportMarkdown) { | ||
|  |         const result = { | ||
|  |             kind: doesSupportMarkdown ? 'markdown' : 'plaintext', | ||
|  |             value: '' | ||
|  |         }; | ||
|  |         if (item.description && settings.documentation !== false) { | ||
|  |             const normalizedDescription = (0, markup_1.normalizeMarkupContent)(item.description); | ||
|  |             if (normalizedDescription) { | ||
|  |                 result.value += normalizedDescription.value; | ||
|  |             } | ||
|  |         } | ||
|  |         if (item.references && item.references.length > 0 && settings.references !== false) { | ||
|  |             if (result.value.length) { | ||
|  |                 result.value += `\n\n`; | ||
|  |             } | ||
|  |             if (doesSupportMarkdown) { | ||
|  |                 result.value += item.references.map(r => { | ||
|  |                     return `[${r.name}](${r.url})`; | ||
|  |                 }).join(' | '); | ||
|  |             } | ||
|  |             else { | ||
|  |                 result.value += item.references.map(r => { | ||
|  |                     return `${r.name}: ${r.url}`; | ||
|  |                 }).join('\n'); | ||
|  |             } | ||
|  |         } | ||
|  |         if (result.value === '') { | ||
|  |             return undefined; | ||
|  |         } | ||
|  |         return result; | ||
|  |     } | ||
|  |     exports.generateDocumentation = generateDocumentation; | ||
|  | }); |