Skip to content
This repository has been archived by the owner on Apr 12, 2024. It is now read-only.

Commit

Permalink
fix(directives): make directive names case-insensitive
Browse files Browse the repository at this point in the history
+ tests
+ added docs for angular.directive
  • Loading branch information
IgorMinar committed Nov 9, 2011
1 parent aaa0179 commit 1e00db8
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/Angular.js
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ var _undefined = undefined,
/** @name angular.attrMarkup */
angularAttrMarkup = extensionMap(angular, 'attrMarkup'),
/** @name angular.directive */
angularDirective = extensionMap(angular, 'directive'),
angularDirective = extensionMap(angular, 'directive', lowercase),
/** @name angular.widget */
angularWidget = extensionMap(angular, 'widget', shivForIE),
/** @name angular.filter */
Expand Down
1 change: 1 addition & 0 deletions src/Compiler.js
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,7 @@ Compiler.prototype = {
});
});
eachAttribute(element, function(value, name){
name = lowercase(name);
fn = directiveFns[name];
if (fn) {
element.addClass('ng-directive');
Expand Down
20 changes: 19 additions & 1 deletion src/directives.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use strict';

/**
* @ngdoc overview
* @ngdoc function
* @name angular.directive
* @description
*
Expand Down Expand Up @@ -39,6 +39,24 @@
* For more information about how Angular directives work, and to learn how to create your own
* directives, see {@link guide/dev_guide.compiler.directives Understanding Angular Directives} in
* the Angular Developer Guide.
*
* @param {string} name Directive identifier (case insensitive).
* @param {function(string, Element)} compileFn Also called "template function" is a function called
* during compilation of the template when the compiler comes across the directive being
* registered. The string value of the element attribute representing the directive and
* jQuery/jqLite wrapped DOM element are passed as arguments to this function.
*
* The `compileFn` function may return a linking function also called an instance function.
* This function is called during the linking phase when a Scope is being associated with the
* template or template clone (see repeater notes below). The signature of the linking function
* is: `function(Element)` where Element is jQuery/jqLite wrapped DOM Element that is being
* linked.
*
* The biggest differenciator between the compile and linking functions is how they are being called
* when a directive is present within an {@link angular.widget.@ng:repeat ng:repeat}. In this case,
* the compile function gets called once per occurence of the directive in the template. On the
* other hand the linking function gets called once for each repeated clone of the template (times
* number of occurences of the directive in the repeated template).
*/

/**
Expand Down
23 changes: 23 additions & 0 deletions test/AngularSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -427,6 +427,29 @@ describe('angular', function() {
});
});


describe('directive', function() {
it('should register directives with case-insensitive id', function() {
angularDirective('ALLCAPS', function(val, el) {el.text('+' + val + '+')});
angularDirective('lowercase', function(val, el) {el.text('-' + val + '-')});

var el = jqLite('<div>' +
'<span allcaps="xx1"></span>' +
'<span ALLcaps="xx2"></span>' +
'<span ALLCAPS="xx3"></span>' +
'<span lowerCASE="XX4">xx4</span>' +
'</div>');
compile(el);
expect(lowercase(sortedHtml(el))).toBe('<div>' +
'<span allcaps="xx1">+xx1+</span>' +
'<span allcaps="xx2">+xx2+</span>' +
'<span allcaps="xx3">+xx3+</span>' +
'<span lowercase="xx4">-xx4-</span>' +
'</div>');
});
});


describe('isDate', function() {
it('should return true for Date object', function() {
expect(isDate(new Date())).toBe(true);
Expand Down

0 comments on commit 1e00db8

Please sign in to comment.