本文整理匯總了TypeScript中dom5/lib/index-next.getAttribute函數的典型用法代碼示例。如果您正苦於以下問題:TypeScript getAttribute函數的具體用法?TypeScript getAttribute怎麽用?TypeScript getAttribute使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了getAttribute函數的10個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的TypeScript代碼示例。
示例1: ScannedScriptTagImport
const myVisitor: HtmlVisitor = (node) => {
if (isJsScriptNode(node)) {
const src =
dom5.getAttribute(node, 'src') as FileRelativeUrl | undefined;
if (src) {
features.push(new ScannedScriptTagImport(
src,
document.sourceRangeForNode(node)!,
document.sourceRangeForAttributeValue(node, 'src')!,
{language: 'html', node, containingDocument: document},
dom5.getAttribute(node, 'type') === 'module'));
} else {
const locationOffset =
getLocationOffsetOfStartOfTextContent(node, document);
const attachedCommentText = getAttachedCommentText(node) || '';
const contents = dom5.getTextContent(node);
features.push(new ScannedInlineDocument(
'js',
contents,
locationOffset,
attachedCommentText,
document.sourceRangeForNode(node)!,
{language: 'html', node, containingDocument: document}));
}
}
};
示例2: createLinks
export function createLinks(
urlResolver: UrlResolver,
html: string,
baseUrl: ResolvedUrl,
deps: Set<ResolvedUrl>,
absolute: boolean = false): string {
const ast = parse5.parse(html, {locationInfo: true});
const baseTag = dom5.query(ast, dom5.predicates.hasTagName('base'));
const baseTagHref = baseTag ? dom5.getAttribute(baseTag, 'href') : '';
// parse5 always produces a <head> element.
const head = dom5.query(ast, dom5.predicates.hasTagName('head'))!;
for (const dep of deps) {
let href;
if (absolute && !baseTagHref) {
href = absUrl(urlResolver.relative(dep));
} else {
href = urlResolver.relative(baseUrl, dep);
}
const link = dom5.constructors.element('link');
dom5.setAttribute(link, 'rel', 'prefetch');
dom5.setAttribute(link, 'href', href);
dom5.append(head, link);
}
dom5.removeFakeRootElements(ast);
return parse5.serialize(ast);
}
示例3: addCustomElementsEs5Adapter
export function addCustomElementsEs5Adapter(html: string): string {
// Only modify this file if we find a web components polyfill. This is a
// heuristic to identify the entry point HTML file. Ultimately we should
// explicitly transform only the entry point by having the project config.
if (!webcomponentsLoaderRegex.test(html)) {
return html;
}
const parsed = parse5.parse(html, {locationInfo: true});
const script = dom5.query(parsed, webcomponentsLoaderMatcher);
if (!script) {
return html;
}
// Collect important dom references & create fragments for injection.
const loaderScriptUrl = dom5.getAttribute(script, 'src')!;
const adapterScriptUrl =
url.resolve(loaderScriptUrl, 'custom-elements-es5-adapter.js');
const es5AdapterFragment = parse5.parseFragment(`
<script>if (!window.customElements) { document.write('<!--'); }</script>
<script type="text/javascript" src="${adapterScriptUrl}"></script>
<!--! do not remove -->
`);
dom5.insertBefore(script.parentNode!, script, es5AdapterFragment);
return parse5.serialize(parsed);
}
示例4: transformEsModuleToAmd
function transformEsModuleToAmd(
script: dom5.Node, idx: number, jsOptions: JsTransformOptions|undefined) {
// We're not a module anymore.
dom5.removeAttribute(script, 'type');
if (scriptWasSplitByHtmlSplitter(script)) {
// Nothing else to do here. If we're using HtmlSplitter, the JsTransformer
// is responsible for doing this transformation.
return;
}
const isExternal = dom5.hasAttribute(script, 'src');
if (isExternal) {
const src = dom5.getAttribute(script, 'src');
dom5.removeAttribute(script, 'src');
dom5.setTextContent(script, `define(['${src}']);`);
} else {
// Transform inline scripts with the AMD Babel plugin transformer.
const newJs = jsTransform(dom5.getTextContent(script), {
...jsOptions,
transformModulesToAmd: true,
moduleScriptIdx: idx,
});
dom5.setTextContent(script, newJs);
}
}
示例5: visit
await visit((node) => {
if (isCssImportNode(node)) {
const href = dom5.getAttribute(node, 'href')! as FileRelativeUrl;
imports.push(new ScannedImport(
'css-import',
href,
document.sourceRangeForNode(node)!,
document.sourceRangeForAttributeValue(node, 'href')!,
{language: 'html', node, containingDocument: document},
false));
}
});
示例6: visit
await visit((node) => {
let lazy: boolean;
if (isHtmlImportNode(node)) {
lazy = false;
} else if (isLazyImportNode(node)) {
lazy = true;
} else {
return;
}
const href = dom5.getAttribute(node, 'href')! as FileRelativeUrl;
imports.push(new ScannedImport(
type,
href,
document.sourceRangeForNode(node)!,
document.sourceRangeForAttributeValue(node, 'href')!,
{language: 'html', node, containingDocument: document},
lazy));
});
示例7: transformEsModuleToAmd
function transformEsModuleToAmd(
script: dom5.Node, idx: number, jsOptions: JsTransformOptions|undefined) {
// We're not a module anymore.
dom5.removeAttribute(script, 'type');
if (scriptWasSplitByHtmlSplitter(script)) {
// Nothing else to do here. If we're using HtmlSplitter, the JsTransformer
// is responsible for doing this transformation.
return;
}
// Module scripts execute in order. AMD modules don't necessarily preserve
// this ordering. To emulate the ordering, we construct an artificial
// dependency chain between all module scripts on the page.
const generatedModule = generateModuleName(idx);
const previousGeneratedModule =
idx === 0 ? undefined : generateModuleName(idx - 1);
const isExternal = dom5.hasAttribute(script, 'src');
if (isExternal) {
const deps = [];
if (previousGeneratedModule !== undefined) {
deps.push(previousGeneratedModule);
}
const externalSrc = dom5.getAttribute(script, 'src');
deps.push(externalSrc);
const depsStr = deps.map((dep) => `'${dep}'`).join(', ');
dom5.removeAttribute(script, 'src');
dom5.setTextContent(script, `define('${generatedModule}', [${depsStr}]);`);
} else {
// Transform inline scripts with the AMD Babel plugin transformer.
const newJs = jsTransform(dom5.getTextContent(script), {
...jsOptions,
transformModulesToAmd: true,
moduleScriptIdx: idx,
});
dom5.setTextContent(script, newJs);
}
}
示例8: _transformIter
protected async *
_transformIter(files: AsyncIterable<File>): AsyncIterable<File> {
for await (const file of files) {
if (file.path !== this.filePath) {
yield file;
continue;
}
const contents = await getFileContents(file);
const parsed = parse5.parse(contents, {locationInfo: true});
const base = dom5.query(parsed, baseMatcher);
if (!base || dom5.getAttribute(base, 'href') === this.newHref) {
yield file;
continue;
}
dom5.setAttribute(base, 'href', this.newHref);
dom5.removeFakeRootElements(parsed);
const updatedFile = file.clone();
updatedFile.contents = Buffer.from(parse5.serialize(parsed), 'utf-8');
yield updatedFile;
}
}
示例9: async
const visitor = async (node: ASTNode) => {
if (isStyleNode(node)) {
const tagName = node.nodeName;
if (tagName === 'link') {
const href = dom5.getAttribute(node, 'href')! as FileRelativeUrl;
features.push(new ScannedImport(
'html-style',
href,
document.sourceRangeForNode(node)!,
document.sourceRangeForAttributeValue(node, 'href')!,
{language: 'html', node, containingDocument: document},
true));
} else {
const contents = dom5.getTextContent(node);
const locationOffset =
getLocationOffsetOfStartOfTextContent(node, document);
const commentText = getAttachedCommentText(node) || '';
features.push(new ScannedInlineDocument(
'css',
contents,
locationOffset,
commentText,
document.sourceRangeForNode(node)!,
{language: 'html', node, containingDocument: document}));
}
}
// Descend into templates.
if (node.tagName === 'template') {
const content = treeAdapters.default.getTemplateContent(node);
if (content) {
for (const n of dom5.depthFirst(content)) {
visitor(n);
}
}
}
};
示例10: htmlTransform
export function htmlTransform(
html: string, options: HtmlTransformOptions): string {
if (options.js && options.js.moduleResolution === 'node' &&
!options.js.filePath) {
throw new Error('Cannot perform node module resolution without filePath.');
}
const document = parse5.parse(html, {
locationInfo: true, // Required for removeFakeNodes.
});
removeFakeNodes(document);
const allScripts = [...dom5.queryAll(document, isJsScript)];
const shouldTransformEsModuleToAmd = options.js &&
options.js.transformModulesToAmd &&
// Assume that if this document has a nomodule script, the author is
// already handling browsers that don't support modules, and we don't
// need to transform them (even if the configuration was set).
// TODO(aomarks) Check this for HtmlSplitter case too.
!allScripts.some((node) => dom5.hasAttribute(node, 'nomodule'));
let wctScript, firstModuleScript, finalModuleScript;
let moduleScriptIdx = 0;
for (const script of allScripts) {
const isModule = dom5.getAttribute(script, 'type') === 'module';
if (isModule) {
if (firstModuleScript === undefined) {
firstModuleScript = script;
}
finalModuleScript = script;
if (shouldTransformEsModuleToAmd) {
transformEsModuleToAmd(script, moduleScriptIdx++, options.js);
continue; // Bypass the standard jsTransform below.
}
}
const isInline = !dom5.hasAttribute(script, 'src');
if (isInline) {
// Note that scripts split by HtmlSplitter are always external, so we
// don't have to check for that case here.
const newJs = jsTransform(
dom5.getTextContent(script),
{...options.js, transformModulesToAmd: false});
dom5.setTextContent(script, newJs);
} else if (wctScript === undefined) {
const src = dom5.getAttribute(script, 'src') || '';
if (src.includes('web-component-tester/browser.js') ||
src.includes('wct-browser-legacy/browser.js')) {
wctScript = script;
}
}
}
if (shouldTransformEsModuleToAmd && finalModuleScript !== undefined) {
// We've defined a bunch of modules and chained them together. Now we need
// to initiate loading the chain by requiring the final one.
const finalModuleName = generateModuleName(moduleScriptIdx - 1);
const fragment = parse5.parseFragment(
`<script>require(['${finalModuleName}']);</script>`);
dom5.insertAfter(
finalModuleScript.parentNode!, finalModuleScript, fragment);
}
if (options.injectAmdLoader && shouldTransformEsModuleToAmd &&
firstModuleScript !== undefined) {
const fragment = parse5.parseFragment('<script></script>\n');
dom5.setTextContent(fragment.childNodes![0], getMinifiedRequireJs());
const requireJsScript = fragment.childNodes![0];
// Inject as late as possible (just before the first module is declared, if
// there is one) because there may be some UMD dependencies that we want to
// continue to load in global mode instead of AMD mode (which is detected by
// the presence of the `require` global).
dom5.insertBefore(
firstModuleScript.parentNode!, firstModuleScript, fragment);
if (wctScript !== undefined) {
addWctTimingHack(wctScript, requireJsScript);
}
}
if (options.injectBabelHelpers) {
const fragment = parse5.parseFragment('<script></script>\n');
dom5.setTextContent(fragment.childNodes![0], getMinifiedBabelHelpers());
const firstJsScriptOrHtmlImport =
dom5.query(document, isJsScriptOrHtmlImport);
if (firstJsScriptOrHtmlImport) {
dom5.insertBefore(
firstJsScriptOrHtmlImport.parentNode!,
firstJsScriptOrHtmlImport,
fragment);
} else {
const headOrDocument =
dom5.query(document, dom5.predicates.hasTagName('head')) || document;
dom5.append(headOrDocument, fragment);
}
//.........這裏部分代碼省略.........