30 lines
		
	
	
	
		
			984 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
	
		
			984 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* global HTMLHint */
 | |
| /* eslint no-magic-numbers: ["error", { "ignore": [0, 1] }] */
 | |
| HTMLHint.addRule({
 | |
| 	id: 'kses',
 | |
| 	description: 'Element or attribute cannot be used.',
 | |
| 	init: function( parser, reporter, options ) {
 | |
| 		'use strict';
 | |
| 
 | |
| 		var self = this;
 | |
| 		parser.addListener( 'tagstart', function( event ) {
 | |
| 			var attr, col, attrName, allowedAttributes, i, len, tagName;
 | |
| 
 | |
| 			tagName = event.tagName.toLowerCase();
 | |
| 			if ( ! options[ tagName ] ) {
 | |
| 				reporter.error( 'Tag <' + event.tagName + '> is not allowed.', event.line, event.col, self, event.raw );
 | |
| 				return;
 | |
| 			}
 | |
| 
 | |
| 			allowedAttributes = options[ tagName ];
 | |
| 			col = event.col + event.tagName.length + 1;
 | |
| 			for ( i = 0, len = event.attrs.length; i < len; i++ ) {
 | |
| 				attr = event.attrs[ i ];
 | |
| 				attrName = attr.name.toLowerCase();
 | |
| 				if ( ! allowedAttributes[ attrName ] ) {
 | |
| 					reporter.error( 'Tag attribute [' + attr.raw + ' ] is not allowed.', event.line, col + attr.index, self, attr.raw );
 | |
| 				}
 | |
| 			}
 | |
| 		});
 | |
| 	}
 | |
| });
 |