File: /home/dmstechonline/whatsapp.dmstech.online/node_modules/parchment/src/attributor/attributor.ts
import * as Registry from '../registry';
export interface AttributorOptions {
scope?: Registry.Scope;
whitelist?: string[];
}
export default class Attributor {
attrName: string;
keyName: string;
scope: Registry.Scope;
whitelist: string[] | undefined;
static keys(node: HTMLElement): string[] {
return [].map.call(node.attributes, function(item: Attr) {
return item.name;
});
}
constructor(attrName: string, keyName: string, options: AttributorOptions = {}) {
this.attrName = attrName;
this.keyName = keyName;
let attributeBit = Registry.Scope.TYPE & Registry.Scope.ATTRIBUTE;
if (options.scope != null) {
// Ignore type bits, force attribute bit
this.scope = (options.scope & Registry.Scope.LEVEL) | attributeBit;
} else {
this.scope = Registry.Scope.ATTRIBUTE;
}
if (options.whitelist != null) this.whitelist = options.whitelist;
}
add(node: HTMLElement, value: string): boolean {
if (!this.canAdd(node, value)) return false;
node.setAttribute(this.keyName, value);
return true;
}
canAdd(node: HTMLElement, value: any): boolean {
let match = Registry.query(node, Registry.Scope.BLOT & (this.scope | Registry.Scope.TYPE));
if (match == null) return false;
if (this.whitelist == null) return true;
if (typeof value === 'string') {
return this.whitelist.indexOf(value.replace(/["']/g, '')) > -1;
} else {
return this.whitelist.indexOf(value) > -1;
}
}
remove(node: HTMLElement): void {
node.removeAttribute(this.keyName);
}
value(node: HTMLElement): string {
let value = node.getAttribute(this.keyName);
if (this.canAdd(node, value) && value) {
return value;
}
return '';
}
}