本文整理汇总了TypeScript中dom5.setAttribute函数的典型用法代码示例。如果您正苦于以下问题:TypeScript setAttribute函数的具体用法?TypeScript setAttribute怎么用?TypeScript setAttribute使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了setAttribute函数的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。
示例1: _addSharedImportsToShell
_addSharedImportsToShell(bundles: Map<string, string[]>): string {
console.assert(this.shell != null);
let shellDeps = bundles.get(this.shell)
.map((d) => path.relative(path.dirname(this.shell), d));
let file = this.analyzer.files.get(this.shell);
console.assert(file != null);
let contents = file.contents.toString();
let doc = dom5.parse(contents);
let imports = dom5.queryAll(doc, dom5.predicates.AND(
dom5.predicates.hasTagName('link'),
dom5.predicates.hasAttrValue('rel', 'import')
));
// Remove all imports that are in the shared deps list so that we prefer
// the ordering or shared deps. Any imports left should be independent of
// ordering of shared deps.
let shellDepsSet = new Set(shellDeps);
for (let _import of imports) {
if (shellDepsSet.has(dom5.getAttribute(_import, 'href'))) {
dom5.remove(_import);
}
}
// Append all shared imports to the end of <head>
let head = dom5.query(doc, dom5.predicates.hasTagName('head'));
for (let dep of shellDeps) {
let newImport = dom5.constructors.element('link');
dom5.setAttribute(newImport, 'rel', 'import');
dom5.setAttribute(newImport, 'href', dep);
dom5.append(head, newImport);
}
let newContents = dom5.serialize(doc);
return newContents;
}
示例2: createLinks
export function createLinks(
html: string,
baseUrl: string,
deps: Set<string>,
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(dep);
} else {
href = relativeUrl(absUrl(baseUrl), absUrl(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: _rewriteElementAttrsBaseUrl
/**
* Find all element attributes which express URLs and rewrite them so they
* are based on the relationship of the old base URL to the new base URL.
*/
private _rewriteElementAttrsBaseUrl(
ast: ASTNode,
oldBaseUrl: ResolvedUrl,
newBaseUrl: ResolvedUrl) {
const nodes = dom5.queryAll(
ast,
matchers.elementsWithUrlAttrsToRewrite,
undefined,
this.bundler.rewriteUrlsInTemplates ? dom5.childNodesIncludeTemplate :
dom5.defaultChildNodes);
for (const node of nodes) {
for (const attr of constants.URL_ATTR) {
const attrValue = dom5.getAttribute(node, attr);
if (attrValue && !isTemplatedUrl(attrValue)) {
let relUrl: string;
if (attr === 'style') {
relUrl =
this._rewriteCssTextBaseUrl(attrValue, oldBaseUrl, newBaseUrl);
} else {
relUrl = rewriteHrefBaseUrl(attrValue, oldBaseUrl, newBaseUrl);
}
dom5.setAttribute(node, attr, relUrl);
}
}
}
}
示例4: _rewriteAstToEmulateBaseTag
/**
* Given an import document with a base tag, transform all of its URLs and
* set link and form target attributes and remove the base tag.
*/
private _rewriteAstToEmulateBaseTag(ast: ASTNode, docUrl: ResolvedUrl) {
const baseTag = dom5.query(ast, matchers.base);
const p = dom5.predicates;
// If there's no base tag, there's nothing to do.
if (!baseTag) {
return;
}
for (const baseTag of dom5.queryAll(ast, matchers.base)) {
removeElementAndNewline(baseTag);
}
if (dom5.predicates.hasAttr('href')(baseTag)) {
const baseUrl = this.bundler.analyzer.urlResolver.resolve(
docUrl, dom5.getAttribute(baseTag, 'href')! as FileRelativeUrl);
if (baseUrl) {
this._rewriteAstBaseUrl(ast, baseUrl, docUrl);
}
}
if (p.hasAttr('target')(baseTag)) {
const baseTarget = dom5.getAttribute(baseTag, 'target')!;
const tagsToTarget = dom5.queryAll(
ast,
p.AND(
p.OR(p.hasTagName('a'), p.hasTagName('form')),
p.NOT(p.hasAttr('target'))));
for (const tag of tagsToTarget) {
dom5.setAttribute(tag, 'target', baseTarget);
}
}
}
示例5: _addSharedImportsToShell
_addSharedImportsToShell(bundles: Map<string, string[]>): string {
console.assert(this.shell != null);
let shellUrl = urlFromPath(this.root, this.shell);
let shellUrlDir = posixPath.dirname(shellUrl);
let shellDeps = bundles.get(shellUrl)
.map((d) => posixPath.relative(shellUrlDir, d));
logger.debug('found shell dependencies', {
shellUrl: shellUrl,
shellUrlDir: shellUrlDir,
shellDeps: shellDeps,
});
let file = this.analyzer.getFile(this.shell);
console.assert(file != null);
let contents = file.contents.toString();
let doc = dom5.parse(contents);
let imports = dom5.queryAll(doc, dom5.predicates.AND(
dom5.predicates.hasTagName('link'),
dom5.predicates.hasAttrValue('rel', 'import')
));
logger.debug('found html import elements', {
imports: imports.map((el) => dom5.getAttribute(el, 'href')),
});
// Remove all imports that are in the shared deps list so that we prefer
// the ordering or shared deps. Any imports left should be independent of
// ordering of shared deps.
let shellDepsSet = new Set(shellDeps);
for (let _import of imports) {
let importHref = dom5.getAttribute(_import, 'href');
if (shellDepsSet.has(importHref)) {
logger.debug(`removing duplicate import element "${importHref}"...`);
dom5.remove(_import);
}
}
// Append all shared imports to the end of <head>
let head = dom5.query(doc, dom5.predicates.hasTagName('head'));
for (let dep of shellDeps) {
let newImport = dom5.constructors.element('link');
dom5.setAttribute(newImport, 'rel', 'import');
dom5.setAttribute(newImport, 'href', dep);
dom5.append(head, newImport);
}
let newContents = dom5.serialize(doc);
return newContents;
}
示例6: pullUpDeps
pullUpDeps(
file: File,
deps: string[],
type: 'import' | 'prefetch'
) {
let contents = file.contents.toString();
let ast = dom5.parse(contents);
let head = dom5.query(ast, dom5.predicates.hasTagName('head'));
for (let dep of deps) {
if (dep.startsWith(this.root)) {
dep = path.relative(file.dirname, dep);
}
// prefetched deps should be absolute, as they will be in the main file
if (type === 'prefetch') {
dep = path.join('/', dep);
}
let link = dom5.constructors.element('link');
dom5.setAttribute(link, 'rel', type);
dom5.setAttribute(link, 'href', dep);
dom5.append(head, link);
}
contents = dom5.serialize(ast);
file.contents = new Buffer(contents);
}
示例7: _setDomModuleAssetpaths
/**
* Set the assetpath attribute of all imported dom-modules which don't yet
* have them if the base URLs are different.
*/
private _setDomModuleAssetpaths(
ast: ASTNode, oldBaseUrl: ResolvedUrl, newBaseUrl: ResolvedUrl) {
const domModules = dom5.queryAll(ast, matchers.domModuleWithoutAssetpath);
for (let i = 0, node: ASTNode; i < domModules.length; i++) {
node = domModules[i];
const assetPathUrl = this.bundler.analyzer.urlResolver.relative(
newBaseUrl, stripUrlFileSearchAndHash(oldBaseUrl) as ResolvedUrl);
// There's no reason to set an assetpath on a dom-module if its
// different from the document's base.
if (assetPathUrl !== '') {
dom5.setAttribute(node, 'assetpath', assetPathUrl);
}
}
}
示例8: _updateExternalModuleScripts
/**
* Update the `src` attribute of external `type=module` script tags to point
* at new bundle locations.
*/
public async _updateExternalModuleScripts(ast: ASTNode) {
const scripts = dom5.queryAll(ast, matchers.externalModuleScript);
for (const script of scripts) {
const oldSrc = dom5.getAttribute(script, 'src');
const oldFileUrl = this.bundler.analyzer.urlResolver.resolve(
this.assignedBundle.url, oldSrc as FileRelativeUrl);
if (oldFileUrl === undefined) {
continue;
}
const bundle = this.manifest.getBundleForFile(oldFileUrl);
if (bundle === undefined) {
continue;
}
const newFileUrl = bundle.url;
const newSrc = this.bundler.analyzer.urlResolver.relative(
this.assignedBundle.url, newFileUrl);
dom5.setAttribute(script, 'src', newSrc);
}
}
示例9: _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 = new Buffer(parse5.serialize(parsed), 'utf-8');
yield updatedFile;
}
}
示例10: _updateExternalModuleScriptTags
/**
* Update the `src` attribute of external `type=module` script tags to point
* at new bundle locations.
*/
public async _updateExternalModuleScriptTags(ast: ASTNode) {
const scripts = dom5.queryAll(ast, matchers.externalModuleScript);
for (const script of scripts) {
const oldSrc = dom5.getAttribute(script, 'src');
const oldFileUrl = this.bundler.analyzer.urlResolver.resolve(
this.document.parsedDocument.baseUrl, oldSrc as FileRelativeUrl);
if (oldFileUrl === undefined) {
continue;
}
const bundle = this.manifest.getBundleForFile(oldFileUrl);
if (bundle === undefined) {
continue;
}
// Do not rewrite the src if the current bundle is going to be the new
// home of the code.
if (bundle.url === this.assignedBundle.url) {
continue;
}
const newFileUrl = bundle.url;
const newSrc = this.bundler.analyzer.urlResolver.relative(
this.assignedBundle.url, newFileUrl);
dom5.setAttribute(script, 'src', newSrc);
}
}