diff options
| author | Misko Hevery | 2011-01-31 16:21:29 -0800 | 
|---|---|---|
| committer | Misko Hevery | 2011-02-01 10:00:09 -0800 | 
| commit | ba6b68b6ae2bb2400a75ca2834fee47bfd60f1c6 (patch) | |
| tree | 94f08ee16f270dd5f6238fb77064c91c624df931 /src/directives.js | |
| parent | ed768ebc53ef6746ca83d81892c22d2e9c3afeef (diff) | |
| download | angular.js-ba6b68b6ae2bb2400a75ca2834fee47bfd60f1c6.tar.bz2 | |
changed the documentation @example to use <doc:example>
Diffstat (limited to 'src/directives.js')
| -rw-r--r-- | src/directives.js | 676 | 
1 files changed, 361 insertions, 315 deletions
diff --git a/src/directives.js b/src/directives.js index 104ff9c8..5ca7c2ec 100644 --- a/src/directives.js +++ b/src/directives.js @@ -4,22 +4,26 @@   * @name angular.directive.ng:init   *   * @description - * `ng:init` attribute allows the for initialization tasks to be executed  + * `ng:init` attribute allows the for initialization tasks to be executed   *  before the template enters execution mode during bootstrap.   *   * @element ANY   * @param {expression} expression to eval.   *   * @example +   <doc:example> +     <doc:source>      <div ng:init="greeting='Hello'; person='World'">        {{greeting}} {{person}}!      </div> - * - * @scenario -   it('should check greeting', function(){ -     expect(binding('greeting')).toBe('Hello'); -     expect(binding('person')).toBe('World'); -   }); +     </doc:source> +     <doc:scenario> +       it('should check greeting', function(){ +         expect(binding('greeting')).toBe('Hello'); +         expect(binding('person')).toBe('World'); +       }); +     </doc:scenario> +   </doc:example>   */  angularDirective("ng:init", function(expression){    return function(element){ @@ -33,66 +37,70 @@ angularDirective("ng:init", function(expression){   * @name angular.directive.ng:controller   *   * @description - * To support the Model-View-Controller design pattern, it is possible  - * to assign behavior to a scope through `ng:controller`. The scope is  - * the MVC model. The HTML (with data bindings) is the MVC view.  + * To support the Model-View-Controller design pattern, it is possible + * to assign behavior to a scope through `ng:controller`. The scope is + * the MVC model. The HTML (with data bindings) is the MVC view.   * The `ng:controller` directive specifies the MVC controller class   *   * @element ANY   * @param {expression} expression to eval.   *   * @example -    <script type="text/javascript"> -      function SettingsController() { -        this.name = "John Smith"; -        this.contacts = [ -          {type:'phone', value:'408 555 1212'}, -          {type:'email', value:'john.smith@example.org'} ]; -      } -      SettingsController.prototype = { -       greet: function(){ -         alert(this.name); -       }, -       addContact: function(){ -         this.contacts.push({type:'email', value:'yourname@example.org'}); -       }, -       removeContact: function(contactToRemove) { -         angular.Array.remove(this.contacts, contactToRemove); -       }, -       clearContact: function(contact) { -         contact.type = 'phone'; -         contact.value = ''; -       } -      }; -    </script> -    <div ng:controller="SettingsController"> -      Name: <input type="text" name="name"/>  -      [ <a href="" ng:click="greet()">greet</a> ]<br/> -      Contact: -      <ul> -        <li ng:repeat="contact in contacts"> -          <select name="contact.type"> -             <option>phone</option> -             <option>email</option> -          </select> -          <input type="text" name="contact.value"/> -          [ <a href="" ng:click="clearContact(contact)">clear</a>  -          | <a href="" ng:click="removeContact(contact)">X</a> ] -        </li> -        <li>[ <a href="" ng:click="addContact()">add</a> ]</li> -     </ul> -    </div> - * - * @scenario -   it('should check controller', function(){ -     expect(element('.doc-example-live div>:input').val()).toBe('John Smith'); -     expect(element('.doc-example-live li[ng\\:repeat-index="0"] input').val()).toBe('408 555 1212'); -     expect(element('.doc-example-live li[ng\\:repeat-index="1"] input').val()).toBe('john.smith@example.org'); -     element('.doc-example-live li:first a:contains("clear")').click(); -     expect(element('.doc-example-live li:first input').val()).toBe(''); -     element('.doc-example-live li:last a:contains("add")').click(); -     expect(element('.doc-example-live li[ng\\:repeat-index="2"] input').val()).toBe('yourname@example.org'); -   }); +   <doc:example> +     <doc:source> +      <script type="text/javascript"> +        function SettingsController() { +          this.name = "John Smith"; +          this.contacts = [ +            {type:'phone', value:'408 555 1212'}, +            {type:'email', value:'john.smith@example.org'} ]; +        } +        SettingsController.prototype = { +         greet: function(){ +           alert(this.name); +         }, +         addContact: function(){ +           this.contacts.push({type:'email', value:'yourname@example.org'}); +         }, +         removeContact: function(contactToRemove) { +           angular.Array.remove(this.contacts, contactToRemove); +         }, +         clearContact: function(contact) { +           contact.type = 'phone'; +           contact.value = ''; +         } +        }; +      </script> +      <div ng:controller="SettingsController"> +        Name: <input type="text" name="name"/> +        [ <a href="" ng:click="greet()">greet</a> ]<br/> +        Contact: +        <ul> +          <li ng:repeat="contact in contacts"> +            <select name="contact.type"> +               <option>phone</option> +               <option>email</option> +            </select> +            <input type="text" name="contact.value"/> +            [ <a href="" ng:click="clearContact(contact)">clear</a> +            | <a href="" ng:click="removeContact(contact)">X</a> ] +          </li> +          <li>[ <a href="" ng:click="addContact()">add</a> ]</li> +       </ul> +      </div> +     </doc:source> +     <doc:scenario> +       it('should check controller', function(){ +         expect(element('.doc-example-live div>:input').val()).toBe('John Smith'); +         expect(element('.doc-example-live li[ng\\:repeat-index="0"] input').val()).toBe('408 555 1212'); +         expect(element('.doc-example-live li[ng\\:repeat-index="1"] input').val()).toBe('john.smith@example.org'); +         element('.doc-example-live li:first a:contains("clear")').click(); +         expect(element('.doc-example-live li:first input').val()).toBe(''); +         element('.doc-example-live li:last a:contains("add")').click(); +         expect(element('.doc-example-live li[ng\\:repeat-index="2"] input').val()).toBe('yourname@example.org'); +       }); +     </doc:scenario> +   </doc:example>   */  angularDirective("ng:controller", function(expression){    this.scope(true); @@ -112,36 +120,38 @@ angularDirective("ng:controller", function(expression){   * @name angular.directive.ng:eval   *   * @description - * The `ng:eval` allows you to execute a binding which has side effects  + * The `ng:eval` allows you to execute a binding which has side effects   * without displaying the result to the user.   *   * @element ANY   * @param {expression} expression to eval.   * - * @exampleDescription - * Notice that `{{` `obj.multiplied = obj.a * obj.b` `}}` has a side effect of assigning  - * a value to `obj.multiplied` and displaying the result to the user. Sometimes,  - * however, it is desirable to execute a side effect without showing the value to  - * the user. In such a case `ng:eval` allows you to execute code without updating  - * the display. - *    * @example - *   <input name="obj.a" value="6" >  - *     * <input name="obj.b" value="2">  - *     = {{obj.multiplied = obj.a * obj.b}} <br> - *   <span ng:eval="obj.divide = obj.a / obj.b"></span> - *   <span ng:eval="obj.updateCount = 1 + (obj.updateCount||0)"></span> - *   <tt>obj.divide = {{obj.divide}}</tt><br/> - *   <tt>obj.updateCount = {{obj.updateCount}}</tt> - * - * @scenario -   it('should check eval', function(){ -     expect(binding('obj.divide')).toBe('3'); -     expect(binding('obj.updateCount')).toBe('2'); -     input('obj.a').enter('12'); -     expect(binding('obj.divide')).toBe('6'); -     expect(binding('obj.updateCount')).toBe('3'); -   }); + * Notice that `{{` `obj.multiplied = obj.a * obj.b` `}}` has a side effect of assigning + * a value to `obj.multiplied` and displaying the result to the user. Sometimes, + * however, it is desirable to execute a side effect without showing the value to + * the user. In such a case `ng:eval` allows you to execute code without updating + * the display. +   <doc:example> +     <doc:source> +       <input name="obj.a" value="6" > +         * <input name="obj.b" value="2"> +         = {{obj.multiplied = obj.a * obj.b}} <br> +       <span ng:eval="obj.divide = obj.a / obj.b"></span> +       <span ng:eval="obj.updateCount = 1 + (obj.updateCount||0)"></span> +       <tt>obj.divide = {{obj.divide}}</tt><br/> +       <tt>obj.updateCount = {{obj.updateCount}}</tt> +     </doc:source> +     <doc:scenario> +       it('should check eval', function(){ +         expect(binding('obj.divide')).toBe('3'); +         expect(binding('obj.updateCount')).toBe('2'); +         input('obj.a').enter('12'); +         expect(binding('obj.divide')).toBe('6'); +         expect(binding('obj.updateCount')).toBe('3'); +       }); +     </doc:scenario> +   </doc:example>   */  angularDirective("ng:eval", function(expression){    return function(element){ @@ -155,27 +165,30 @@ angularDirective("ng:eval", function(expression){   * @name angular.directive.ng:bind   *   * @description - * The `ng:bind` attribute asks <angular/> to replace the text content of this  - * HTML element with the value of the given expression and kept it up to  - * date when the expression's value changes. Usually you just write  - * {{expression}} and let <angular/> compile it into  + * The `ng:bind` attribute asks <angular/> to replace the text content of this + * HTML element with the value of the given expression and kept it up to + * date when the expression's value changes. Usually you just write + * {{expression}} and let <angular/> compile it into   * `<span ng:bind="expression"></span>` at bootstrap time. - *  + *   * @element ANY   * @param {expression} expression to eval.   * - * @exampleDescription - * Try it here: enter text in text box and watch the greeting change.   * @example - * Enter name: <input type="text" name="name" value="Whirled">. <br> - * Hello <span ng:bind="name" />! - *  - * @scenario -   it('should check ng:bind', function(){ -     expect(using('.doc-example-live').binding('name')).toBe('Whirled'); -     using('.doc-example-live').input('name').enter('world'); -     expect(using('.doc-example-live').binding('name')).toBe('world'); -   }); + * Try it here: enter text in text box and watch the greeting change. +   <doc:example> +     <doc:source> +       Enter name: <input type="text" name="name" value="Whirled">. <br> +       Hello <span ng:bind="name" />! +     </doc:source> +     <doc:scenario> +       it('should check ng:bind', function(){ +         expect(using('.doc-example-live').binding('name')).toBe('Whirled'); +         using('.doc-example-live').input('name').enter('world'); +         expect(using('.doc-example-live').binding('name')).toBe('world'); +       }); +     </doc:scenario> +   </doc:example>   */  angularDirective("ng:bind", function(expression, element){    element.addClass('ng-binding'); @@ -259,32 +272,35 @@ function compileBindTemplate(template){   * @name angular.directive.ng:bind-template   *   * @description - * The `ng:bind-template` attribute specifies that the element  - * text should be replaced with the template in ng:bind-template.  - * Unlike ng:bind the ng:bind-template can contain multiple `{{` `}}`  - * expressions. (This is required since some HTML elements  + * The `ng:bind-template` attribute specifies that the element + * text should be replaced with the template in ng:bind-template. + * Unlike ng:bind the ng:bind-template can contain multiple `{{` `}}` + * expressions. (This is required since some HTML elements   * can not have SPAN elements such as TITLE, or OPTION to name a few. - *  + *   * @element ANY   * @param {string} template of form   *   <tt>{{</tt> <tt>expression</tt> <tt>}}</tt> to eval.   * - * @exampleDescription - * Try it here: enter text in text box and watch the greeting change.   * @example -    Salutation: <input type="text" name="salutation" value="Hello"><br/> -    Name: <input type="text" name="name" value="World"><br/> -    <pre ng:bind-template="{{salutation}} {{name}}!"></pre> - *  - * @scenario -   it('should check ng:bind', function(){ -     expect(using('.doc-example-live').binding('{{salutation}} {{name}}')). -       toBe('Hello World!'); -     using('.doc-example-live').input('salutation').enter('Greetings'); -     using('.doc-example-live').input('name').enter('user'); -     expect(using('.doc-example-live').binding('{{salutation}} {{name}}')). -       toBe('Greetings user!'); -   }); + * Try it here: enter text in text box and watch the greeting change. +   <doc:example> +     <doc:source> +      Salutation: <input type="text" name="salutation" value="Hello"><br/> +      Name: <input type="text" name="name" value="World"><br/> +      <pre ng:bind-template="{{salutation}} {{name}}!"></pre> +     </doc:source> +     <doc:scenario> +       it('should check ng:bind', function(){ +         expect(using('.doc-example-live').binding('{{salutation}} {{name}}')). +           toBe('Hello World!'); +         using('.doc-example-live').input('salutation').enter('Greetings'); +         using('.doc-example-live').input('name').enter('user'); +         expect(using('.doc-example-live').binding('{{salutation}} {{name}}')). +           toBe('Greetings user!'); +       }); +     </doc:scenario> +   </doc:example>   */  angularDirective("ng:bind-template", function(expression, element){    element.addClass('ng-binding'); @@ -313,49 +329,52 @@ var REMOVE_ATTRIBUTES = {   * @name angular.directive.ng:bind-attr   *   * @description - * The `ng:bind-attr` attribute specifies that the element attributes  - * which should be replaced by the expression in it. Unlike `ng:bind`  - * the `ng:bind-attr` contains a JSON key value pairs representing  - * which attributes need to be changed. You don’t usually write the  - * `ng:bind-attr` in the HTML since embedding  - * <tt ng:non-bindable>{{expression}}</tt> into the  + * The `ng:bind-attr` attribute specifies that the element attributes + * which should be replaced by the expression in it. Unlike `ng:bind` + * the `ng:bind-attr` contains a JSON key value pairs representing + * which attributes need to be changed. You don’t usually write the + * `ng:bind-attr` in the HTML since embedding + * <tt ng:non-bindable>{{expression}}</tt> into the   * attribute directly is the preferred way. The attributes get   * translated into `<span ng:bind-attr="{attr:expression}"/>` at   * bootstrap time. - *  + *   * This HTML snippet is preferred way of working with `ng:bind-attr`   * <pre>   *   <a href="http://www.google.com/search?q={{query}}">Google</a>   * </pre> - *  + *   * The above gets translated to bellow during bootstrap time.   * <pre>   *   <a ng:bind-attr='{"href":"http://www.google.com/search?q={{query}}"}'>Google</a>   * </pre> - *  + *   * @element ANY - * @param {string} attribute_json a JSON key-value pairs representing  - *    the attributes to replace. Each key matches the attribute  - *    which needs to be replaced. Each value is a text template of  - *    the attribute with embedded  - *    <tt ng:non-bindable>{{expression}}</tt>s. Any number of  + * @param {string} attribute_json a JSON key-value pairs representing + *    the attributes to replace. Each key matches the attribute + *    which needs to be replaced. Each value is a text template of + *    the attribute with embedded + *    <tt ng:non-bindable>{{expression}}</tt>s. Any number of   *    key-value pairs can be specified.   * - * @exampleDescription - * Try it here: enter text in text box and click Google.   * @example -    Google for:  -    <input type="text" name="query" value="AngularJS"/>  -    <a href="http://www.google.com/search?q={{query}}">Google</a> - *  - * @scenario -   it('should check ng:bind-attr', function(){ -     expect(using('.doc-example-live').element('a').attr('href')). -       toBe('http://www.google.com/search?q=AngularJS'); -     using('.doc-example-live').input('query').enter('google'); -     expect(using('.doc-example-live').element('a').attr('href')). -       toBe('http://www.google.com/search?q=google'); -   }); + * Try it here: enter text in text box and click Google. +   <doc:example> +     <doc:source> +      Google for: +      <input type="text" name="query" value="AngularJS"/> +      <a href="http://www.google.com/search?q={{query}}">Google</a> +     </doc:source> +     <doc:scenario> +       it('should check ng:bind-attr', function(){ +         expect(using('.doc-example-live').element('a').attr('href')). +           toBe('http://www.google.com/search?q=AngularJS'); +         using('.doc-example-live').input('query').enter('google'); +         expect(using('.doc-example-live').element('a').attr('href')). +           toBe('http://www.google.com/search?q=google'); +       }); +     </doc:scenario> +   </doc:example>   */  angularDirective("ng:bind-attr", function(expression){    return function(element){ @@ -396,23 +415,28 @@ angularDirective("ng:bind-attr", function(expression){   * @name angular.directive.ng:click   *   * @description - * The ng:click allows you to specify custom behavior when  + * The ng:click allows you to specify custom behavior when   * element is clicked. - *  + *   * @element ANY   * @param {expression} expression to eval upon click.   *   * @example -    <button ng:click="count = count + 1" ng:init="count=0"> -      Increment -    </button> -    count: {{count}} - * @scenario -   it('should check ng:click', function(){ -     expect(binding('count')).toBe('0'); -     element('.doc-example-live :button').click(); -     expect(binding('count')).toBe('1'); -   }); +   <doc:example> +     <doc:source> +      <button ng:click="count = count + 1" ng:init="count=0"> +        Increment +      </button> +      count: {{count}} +     </doc:source> +     <doc:scenario> +       it('should check ng:click', function(){ +         expect(binding('count')).toBe('0'); +         element('.doc-example-live :button').click(); +         expect(binding('count')).toBe('1'); +       }); +     </doc:scenario> +   </doc:example>   */  /*   * A directive that allows creation of custom onclick handlers that are defined as angular @@ -440,35 +464,37 @@ angularDirective("ng:click", function(expression, element){   * @name angular.directive.ng:submit   *   * @description - *  - * @element form - * @param {expression} expression to eval. - * - * @exampleDescription - * @example - * <form ng:submit="list.push(text);text='';" ng:init="list=[]"> - *   Enter text and hit enter:  - *   <input type="text" name="text" value="hello"/> - * </form> - * <pre>list={{list}}</pre> - * @scenario -   it('should check ng:submit', function(){ -     expect(binding('list')).toBe('list=[]'); -     element('.doc-example-live form input').click(); -     this.addFutureAction('submit from', function($window, $document, done) { -       $window.angular.element( -         $document.elements('.doc-example-live form')). -           trigger('submit'); -       done(); -     }); -     expect(binding('list')).toBe('list=["hello"]'); -   }); - */ -/**   * Enables binding angular expressions to onsubmit events.   *   * Additionally it prevents the default action (which for form means sending the request to the   * server and reloading the current page). + * + * @element form + * @param {expression} expression to eval. + * + * @example +   <doc:example> +     <doc:source> +      <form ng:submit="list.push(text);text='';" ng:init="list=[]"> +        Enter text and hit enter: +        <input type="text" name="text" value="hello"/> +      </form> +      <pre>list={{list}}</pre> +     </doc:source> +     <doc:scenario> +       it('should check ng:submit', function(){ +         expect(binding('list')).toBe('list=[]'); +         element('.doc-example-live form input').click(); +         this.addFutureAction('submit from', function($window, $document, done) { +           $window.angular.element( +             $document.elements('.doc-example-live form')). +               trigger('submit'); +           done(); +         }); +         expect(binding('list')).toBe('list=["hello"]'); +       }); +     </doc:scenario> +   </doc:example>   */  angularDirective("ng:submit", function(expression, element) {    return injectUpdateView(function($updateView, element) { @@ -488,26 +514,30 @@ angularDirective("ng:submit", function(expression, element) {   * @name angular.directive.ng:watch   *   * @description - * The `ng:watch` allows you watch a variable and then execute  + * The `ng:watch` allows you watch a variable and then execute   * an evaluation on variable change. - *  + *   * @element ANY   * @param {expression} expression to eval.   * - * @exampleDescription - * Notice that the counter is incremented  - * every time you change the text.   * @example -    <div ng:init="counter=0" ng:watch="name: counter = counter+1"> -      <input type="text" name="name" value="hello"><br/> -      Change counter: {{counter}} Name: {{name}} -    </div> - * @scenario -   it('should check ng:watch', function(){ -     expect(using('.doc-example-live').binding('counter')).toBe('2'); -     using('.doc-example-live').input('name').enter('abc'); -     expect(using('.doc-example-live').binding('counter')).toBe('3'); -   }); + * Notice that the counter is incremented + * every time you change the text. +   <doc:example> +     <doc:source> +      <div ng:init="counter=0" ng:watch="name: counter = counter+1"> +        <input type="text" name="name" value="hello"><br/> +        Change counter: {{counter}} Name: {{name}} +      </div> +     </doc:source> +     <doc:scenario> +       it('should check ng:watch', function(){ +         expect(using('.doc-example-live').binding('counter')).toBe('2'); +         using('.doc-example-live').input('name').enter('abc'); +         expect(using('.doc-example-live').binding('counter')).toBe('3'); +       }); +     </doc:scenario> +   </doc:example>   */  //TODO: delete me, since having watch in UI is logic in UI. (leftover form getangular)  angularDirective("ng:watch", function(expression, element){ @@ -544,34 +574,37 @@ function ngClass(selector) {   * @name angular.directive.ng:class   *   * @description - * The `ng:class` allows you to set CSS class on HTML element  + * The `ng:class` allows you to set CSS class on HTML element   * conditionally. - *  + *   * @element ANY   * @param {expression} expression to eval.   * - * @exampleDescription   * @example -    <input type="button" value="set" ng:click="myVar='ng-input-indicator-wait'"> -    <input type="button" value="clear" ng:click="myVar=''"> -    <br> -    <span ng:class="myVar">Sample Text     </span> - *  - * @scenario -   it('should check ng:class', function(){ -     expect(element('.doc-example-live span').attr('className')).not(). -       toMatch(/ng-input-indicator-wait/); +   <doc:example> +     <doc:source> +      <input type="button" value="set" ng:click="myVar='ng-input-indicator-wait'"> +      <input type="button" value="clear" ng:click="myVar=''"> +      <br> +      <span ng:class="myVar">Sample Text     </span> +     </doc:source> +     <doc:scenario> +       it('should check ng:class', function(){ +         expect(element('.doc-example-live span').attr('className')).not(). +           toMatch(/ng-input-indicator-wait/); + +         using('.doc-example-live').element(':button:first').click(); -     using('.doc-example-live').element(':button:first').click(); +         expect(element('.doc-example-live span').attr('className')). +           toMatch(/ng-input-indicator-wait/); -     expect(element('.doc-example-live span').attr('className')). -       toMatch(/ng-input-indicator-wait/); +         using('.doc-example-live').element(':button:last').click(); -     using('.doc-example-live').element(':button:last').click(); -      -     expect(element('.doc-example-live span').attr('className')).not(). -       toMatch(/ng-input-indicator-wait/); -   }); +         expect(element('.doc-example-live span').attr('className')).not(). +           toMatch(/ng-input-indicator-wait/); +       }); +     </doc:scenario> +   </doc:example>   */  angularDirective("ng:class", ngClass(function(){return true;})); @@ -581,33 +614,35 @@ angularDirective("ng:class", ngClass(function(){return true;}));   * @name angular.directive.ng:class-odd   *   * @description - * The `ng:class-odd` and `ng:class-even` works exactly as  - * `ng:class`, except it works in conjunction with `ng:repeat`  + * The `ng:class-odd` and `ng:class-even` works exactly as + * `ng:class`, except it works in conjunction with `ng:repeat`   * and takes affect only on odd (even) rows.   *   * @element ANY - * @param {expression} expression to eval. Must be inside  + * @param {expression} expression to eval. Must be inside   * `ng:repeat`. -   * - * @exampleDescription   * @example -    <ol ng:init="names=['John', 'Mary', 'Cate', 'Suz']"> -      <li ng:repeat="name in names"> -       <span ng:class-odd="'ng-format-negative'" -             ng:class-even="'ng-input-indicator-wait'"> -         {{name}}        -       </span> -      </li> -    </ol> - *  - * @scenario -   it('should check ng:class-odd and ng:class-even', function(){ -     expect(element('.doc-example-live li:first span').attr('className')). -       toMatch(/ng-format-negative/); -     expect(element('.doc-example-live li:last span').attr('className')). -       toMatch(/ng-input-indicator-wait/); -   }); +   <doc:example> +     <doc:source> +        <ol ng:init="names=['John', 'Mary', 'Cate', 'Suz']"> +          <li ng:repeat="name in names"> +           <span ng:class-odd="'ng-format-negative'" +                 ng:class-even="'ng-input-indicator-wait'"> +             {{name}}       +           </span> +          </li> +        </ol> +     </doc:source> +     <doc:scenario> +       it('should check ng:class-odd and ng:class-even', function(){ +         expect(element('.doc-example-live li:first span').attr('className')). +           toMatch(/ng-format-negative/); +         expect(element('.doc-example-live li:last span').attr('className')). +           toMatch(/ng-input-indicator-wait/); +       }); +     </doc:scenario> +   </doc:example>   */  angularDirective("ng:class-odd", ngClass(function(i){return i % 2 === 0;})); @@ -617,33 +652,35 @@ angularDirective("ng:class-odd", ngClass(function(i){return i % 2 === 0;}));   * @name angular.directive.ng:class-even   *   * @description - * The `ng:class-odd` and `ng:class-even` works exactly as  - * `ng:class`, except it works in conjunction with `ng:repeat`  + * The `ng:class-odd` and `ng:class-even` works exactly as + * `ng:class`, except it works in conjunction with `ng:repeat`   * and takes affect only on odd (even) rows.   *   * @element ANY - * @param {expression} expression to eval. Must be inside  + * @param {expression} expression to eval. Must be inside   * `ng:repeat`. -   * - * @exampleDescription   * @example -    <ol ng:init="names=['John', 'Mary', 'Cate', 'Suz']"> -      <li ng:repeat="name in names"> -       <span ng:class-odd="'ng-format-negative'" -             ng:class-even="'ng-input-indicator-wait'"> -         {{name}}        -       </span> -      </li> -    </ol> - *  - * @scenario -   it('should check ng:class-odd and ng:class-even', function(){ -     expect(element('.doc-example-live li:first span').attr('className')). -       toMatch(/ng-format-negative/); -     expect(element('.doc-example-live li:last span').attr('className')). -       toMatch(/ng-input-indicator-wait/); -   }); +   <doc:example> +     <doc:source> +        <ol ng:init="names=['John', 'Mary', 'Cate', 'Suz']"> +          <li ng:repeat="name in names"> +           <span ng:class-odd="'ng-format-negative'" +                 ng:class-even="'ng-input-indicator-wait'"> +             {{name}}       +           </span> +          </li> +        </ol> +     </doc:source> +     <doc:scenario> +       it('should check ng:class-odd and ng:class-even', function(){ +         expect(element('.doc-example-live li:first span').attr('className')). +           toMatch(/ng-format-negative/); +         expect(element('.doc-example-live li:last span').attr('className')). +           toMatch(/ng-input-indicator-wait/); +       }); +     </doc:scenario> +   </doc:example>   */  angularDirective("ng:class-even", ngClass(function(i){return i % 2 === 1;})); @@ -655,27 +692,30 @@ angularDirective("ng:class-even", ngClass(function(i){return i % 2 === 1;}));   * @description   * The `ng:show` and `ng:hide` allows you to show or hide a portion   * of the HTML conditionally. - *  + *   * @element ANY - * @param {expression} expression if truthy then the element is  + * @param {expression} expression if truthy then the element is   * shown or hidden respectively.   * - * @exampleDescription   * @example -    Click me: <input type="checkbox" name="checked"><br/> -    Show: <span ng:show="checked">I show up when you checkbox is checked?</span> <br/> -    Hide: <span ng:hide="checked">I hide when you checkbox is checked?</span> - *  - * @scenario -   it('should check ng:show / ng:hide', function(){ -     expect(element('.doc-example-live span:first:hidden').count()).toEqual(1); -     expect(element('.doc-example-live span:last:visible').count()).toEqual(1); -      -     input('checked').check(); -      -     expect(element('.doc-example-live span:first:visible').count()).toEqual(1); -     expect(element('.doc-example-live span:last:hidden').count()).toEqual(1); -   }); +   <doc:example> +     <doc:source> +        Click me: <input type="checkbox" name="checked"><br/> +        Show: <span ng:show="checked">I show up when you checkbox is checked?</span> <br/> +        Hide: <span ng:hide="checked">I hide when you checkbox is checked?</span> +     </doc:source> +     <doc:scenario> +       it('should check ng:show / ng:hide', function(){ +         expect(element('.doc-example-live span:first:hidden').count()).toEqual(1); +         expect(element('.doc-example-live span:last:visible').count()).toEqual(1); + +         input('checked').check(); + +         expect(element('.doc-example-live span:first:visible').count()).toEqual(1); +         expect(element('.doc-example-live span:last:hidden').count()).toEqual(1); +       }); +     </doc:scenario> +   </doc:example>   */  angularDirective("ng:show", function(expression, element){    return function(element){ @@ -693,27 +733,30 @@ angularDirective("ng:show", function(expression, element){   * @description   * The `ng:show` and `ng:hide` allows you to show or hide a portion   * of the HTML conditionally. - *  + *   * @element ANY - * @param {expression} expression if truthy then the element is  + * @param {expression} expression if truthy then the element is   * shown or hidden respectively.   * - * @exampleDescription   * @example -    Click me: <input type="checkbox" name="checked"><br/> -    Show: <span ng:show="checked">I show up when you checkbox is checked?</span> <br/> -    Hide: <span ng:hide="checked">I hide when you checkbox is checked?</span> - *  - * @scenario -   it('should check ng:show / ng:hide', function(){ -     expect(element('.doc-example-live span:first:hidden').count()).toEqual(1); -     expect(element('.doc-example-live span:last:visible').count()).toEqual(1); -      -     input('checked').check(); -      -     expect(element('.doc-example-live span:first:visible').count()).toEqual(1); -     expect(element('.doc-example-live span:last:hidden').count()).toEqual(1); -   }); +   <doc:example> +     <doc:source> +        Click me: <input type="checkbox" name="checked"><br/> +        Show: <span ng:show="checked">I show up when you checkbox is checked?</span> <br/> +        Hide: <span ng:hide="checked">I hide when you checkbox is checked?</span> +     </doc:source> +     <doc:scenario> +       it('should check ng:show / ng:hide', function(){ +         expect(element('.doc-example-live span:first:hidden').count()).toEqual(1); +         expect(element('.doc-example-live span:last:visible').count()).toEqual(1); + +         input('checked').check(); + +         expect(element('.doc-example-live span:first:visible').count()).toEqual(1); +         expect(element('.doc-example-live span:last:hidden').count()).toEqual(1); +       }); +     </doc:scenario> +   </doc:example>   */  angularDirective("ng:hide", function(expression, element){    return function(element){ @@ -730,28 +773,31 @@ angularDirective("ng:hide", function(expression, element){   *   * @description   * The ng:style allows you to set CSS style on an HTML element conditionally. - *  + *   * @element ANY - * @param {expression} expression which evals to an object whes key's are  - *        CSS style names and values are coresponding values for those  + * @param {expression} expression which evals to an object whes key's are + *        CSS style names and values are coresponding values for those   *        CSS keys.   * - * @exampleDescription   * @example -    <input type="button" value="set" ng:click="myStyle={color:'red'}"> -    <input type="button" value="clear" ng:click="myStyle={}"> -    <br/> -    <span ng:style="myStyle">Sample Text</span> -    <pre>myStyle={{myStyle}}</pre> - *  - * @scenario -   it('should check ng:style', function(){ -     expect(element('.doc-example-live span').css('color')).toBe('rgb(0, 0, 0)'); -     element('.doc-example-live :button[value=set]').click(); -     expect(element('.doc-example-live span').css('color')).toBe('red'); -     element('.doc-example-live :button[value=clear]').click(); -     expect(element('.doc-example-live span').css('color')).toBe('rgb(0, 0, 0)'); -   }); +   <doc:example> +     <doc:source> +        <input type="button" value="set" ng:click="myStyle={color:'red'}"> +        <input type="button" value="clear" ng:click="myStyle={}"> +        <br/> +        <span ng:style="myStyle">Sample Text</span> +        <pre>myStyle={{myStyle}}</pre> +     </doc:source> +     <doc:scenario> +       it('should check ng:style', function(){ +         expect(element('.doc-example-live span').css('color')).toBe('rgb(0, 0, 0)'); +         element('.doc-example-live :button[value=set]').click(); +         expect(element('.doc-example-live span').css('color')).toBe('red'); +         element('.doc-example-live :button[value=clear]').click(); +         expect(element('.doc-example-live span').css('color')).toBe('rgb(0, 0, 0)'); +       }); +     </doc:scenario> +   </doc:example>   */  angularDirective("ng:style", function(expression, element){    return function(element){  | 
