diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/content/cookbook/advancedform.ngdoc | 149 | ||||
| -rw-r--r-- | docs/content/cookbook/buzz.ngdoc | 2 | ||||
| -rw-r--r-- | docs/content/cookbook/form.ngdoc | 16 | ||||
| -rw-r--r-- | docs/content/cookbook/mvc.ngdoc | 93 | ||||
| -rw-r--r-- | docs/content/tutorial/step_04.ngdoc | 4 | ||||
| -rw-r--r-- | docs/content/tutorial/step_08.ngdoc | 2 | ||||
| -rw-r--r-- | docs/content/tutorial/step_10.ngdoc | 2 | ||||
| -rw-r--r-- | docs/content/tutorial/step_11.ngdoc | 2 |
8 files changed, 129 insertions, 141 deletions
diff --git a/docs/content/cookbook/advancedform.ngdoc b/docs/content/cookbook/advancedform.ngdoc index e14be8b4..b376cbee 100644 --- a/docs/content/cookbook/advancedform.ngdoc +++ b/docs/content/cookbook/advancedform.ngdoc @@ -9,80 +9,80 @@ detection, and preventing invalid form submission. <doc:example> - <doc:source> - <script> - UserForm.$inject = ['$invalidWidgets']; - function UserForm($invalidWidgets){ - this.$invalidWidgets = $invalidWidgets; - this.state = /^\w\w$/; - this.zip = /^\d\d\d\d\d$/; - this.master = { - name: 'John Smith', - address:{ - line1: '123 Main St.', - city:'Anytown', - state:'AA', - zip:'12345' - }, - contacts:[ - {type:'phone', value:'1(234) 555-1212'} - ] - }; - this.cancel(); - } - - - UserForm.prototype = { - cancel: function(){ - this.form = angular.copy(this.master); - }, - - - save: function(){ - this.master = this.form; - this.cancel(); - } - }; - </script> - <div ng:controller="UserForm"> - - - <label>Name:</label><br/> - <input type="text" name="form.name" ng:required/> <br/><br/> - - - <label>Address:</label><br/> - <input type="text" name="form.address.line1" size="33" ng:required/> <br/> - <input type="text" name="form.address.city" size="12" ng:required/>, - <input type="text" name="form.address.state" size="2" ng:required ng:validate="regexp:state"/> - <input type="text" name="form.address.zip" size="5" ng:required +<doc:source> + <script> + UserForm.$inject = ['$invalidWidgets']; + function UserForm($invalidWidgets){ + this.$invalidWidgets = $invalidWidgets; + this.state = /^\w\w$/; + this.zip = /^\d\d\d\d\d$/; + this.master = { + name: 'John Smith', + address:{ + line1: '123 Main St.', + city:'Anytown', + state:'AA', + zip:'12345' + }, + contacts:[ + {type:'phone', value:'1(234) 555-1212'} + ] + }; + this.cancel(); + } + + + UserForm.prototype = { + cancel: function(){ + this.form = angular.copy(this.master); + }, + + + save: function(){ + this.master = this.form; + this.cancel(); + } + }; + </script> + <div ng:controller="UserForm"> + + + <label>Name:</label><br/> + <input type="text" name="form.name" ng:required/> <br/><br/> + + + <label>Address:</label><br/> + <input type="text" name="form.address.line1" size="33" ng:required/> <br/> + <input type="text" name="form.address.city" size="12" ng:required/>, + <input type="text" name="form.address.state" size="2" ng:required ng:validate="regexp:state"/> + <input type="text" name="form.address.zip" size="5" ng:required ng:validate="regexp:zip"/><br/><br/> - <label>Phone:</label> - [ <a href="" ng:click="form.contacts.$add()">add</a> ] - <div ng:repeat="contact in form.contacts"> - <select name="contact.type"> - <option>email</option> - <option>phone</option> - <option>pager</option> - <option>IM</option> - </select> - <input type="text" name="contact.value" ng:required/> - [ <a href="" ng:click="form.contacts.$remove(contact)">X</a> ] - </div> - <button ng:click="cancel()" disabled="{{master.$equals(form)}}">Cancel</button> - <button ng:click="save()" disabled="{{$invalidWidgets.visible() || + <label>Contacts:</label> + [ <a href="" ng:click="form.contacts.$add()">add</a> ] + <div ng:repeat="contact in form.contacts"> + <select name="contact.type"> + <option>email</option> + <option>phone</option> + <option>pager</option> + <option>IM</option> + </select> + <input type="text" name="contact.value" ng:required/> + [ <a href="" ng:click="form.contacts.$remove(contact)">X</a> ] + </div> + <button ng:click="cancel()" disabled="{{master.$equals(form)}}">Cancel</button> + <button ng:click="save()" disabled="{{$invalidWidgets.visible() || master.$equals(form)}}">Save</button> - <hr/> - Debug View: - <pre>form={{form}} - master={{master}}</pre> - </div> - </doc:source> - <doc:scenario> + <hr/> + Debug View: + <pre>form={{form}} + master={{master}}</pre> + </div> +</doc:source> +<doc:scenario> it('should enable save button', function(){ expect(element(':button:contains(Save)').attr('disabled')).toBeTruthy(); input('form.name').enter(''); @@ -100,7 +100,7 @@ master.$equals(form)}}">Save</button> expect(element(':button:contains(Cancel)').attr('disabled')).toBeTruthy(); expect(element(':input[name=form.name]').val()).toEqual('John Smith'); }); - </doc:scenario> +</doc:scenario> </doc:example> @@ -109,15 +109,10 @@ master.$equals(form)}}">Save</button> #Things to notice -* Cancel & save buttons are only enabled if the form is dirty -- there is something to cancel or - save. +* Cancel & save buttons are only enabled if the form is dirty — there is something to cancel or +save. * Save button is only enabled if there are no validation errors on the form. * Cancel reverts the form changes back to original state. * Save updates the internal model of the form. * Debug view shows the two models. One presented to the user form and the other being the pristine - copy master. - - - - - +copy master. diff --git a/docs/content/cookbook/buzz.ngdoc b/docs/content/cookbook/buzz.ngdoc index 52fa5647..f67b4d89 100644 --- a/docs/content/cookbook/buzz.ngdoc +++ b/docs/content/cookbook/buzz.ngdoc @@ -43,7 +43,7 @@ to retrieve Buzz activity and comments. <img src="{{item.actor.thumbnailUrl}}" style="max-height:30px;max-width:30px;"/> <a href="{{item.actor.profileUrl}}">{{item.actor.name}}</a> <a href="" ng:click="expandReplies(item)" style="float: right;"> - Expand replies: {{item.links.replies.count}} + Expand replies: {{item.links.replies[0].count}} </a> </h1> {{item.object.content | html}} diff --git a/docs/content/cookbook/form.ngdoc b/docs/content/cookbook/form.ngdoc index a224505f..55aeb4b9 100644 --- a/docs/content/cookbook/form.ngdoc +++ b/docs/content/cookbook/form.ngdoc @@ -78,27 +78,19 @@ ng:validate="regexp:zip"/><br/><br/> it('should validate zip', function(){ expect(using('.example').element(':input[name=user.address.zip]').attr('className')) - .not().toMatch(/ng-validation-error/) - - + .not().toMatch(/ng-validation-error/); using('.example').input('user.address.zip').enter('abc'); - - expect(using('.example').element(':input[name=user.address.zip]').attr('className')) - .toMatch(/ng-validation-error/) + .toMatch(/ng-validation-error/); }); it('should validate state', function(){ expect(using('.example').element(':input[name=user.address.state]').attr('className')) - .not().toMatch(/ng-validation-error/) - - + .not().toMatch(/ng-validation-error/); using('.example').input('user.address.state').enter('XXX'); - - expect(using('.example').element(':input[name=user.address.state]').attr('className')) - .toMatch(/ng-validation-error/) + .toMatch(/ng-validation-error/); }); </doc:scenario> </doc:example> diff --git a/docs/content/cookbook/mvc.ngdoc b/docs/content/cookbook/mvc.ngdoc index bc0eb653..04feffcc 100644 --- a/docs/content/cookbook/mvc.ngdoc +++ b/docs/content/cookbook/mvc.ngdoc @@ -17,7 +17,7 @@ no connection between the controller and the view. <doc:example> - <doc:source> + <doc:source> <script> function TicTacToeCntl($location){ this.$location = $location; @@ -34,8 +34,8 @@ no connection between the controller and the view. } TicTacToeCntl.prototype = { dropPiece: function(row, col) { - if (!this.winner && !this.board) { - this.board = this.nextMove; + if (!this.winner && !this.board[row][col]) { + this.board[row][col] = this.nextMove; this.nextMove = this.nextMove == 'X' ? 'O' : 'X'; this.setUrl(); } @@ -51,15 +51,15 @@ no connection between the controller and the view. this.setUrl(); }, grade: function(){ - var b = this.board; - this.winner = - row(0) || row(1) || row(2) || - col(0) || col(1) || col(2) || - diagonal(-1) || diagonal(1); - function row(r) { return same(b, b, b);} - function col(c) { return same(b, b, b);} - function diagonal(i) { return same(b[1-i], b, b[1+i]);} - function same(a, b, c) { return (a==b && b==c) ? a : '';}; + var b = this.board; + this.winner = + row(0) || row(1) || row(2) || + col(0) || col(1) || col(2) || + diagonal(-1) || diagonal(1); + function row(row) { return same(b[row][0], b[row][1], b[row][2]);} + function col(col) { return same(b[0][col], b[1][col], b[2][col]);} + function diagonal(i) { return same(b[0][1-i], b[1][1], b[2][1+i]);} + function same(a, b, c) { return (a==b && b==c) ? a : '';}; }, setUrl: function(){ var rows = []; @@ -68,12 +68,12 @@ no connection between the controller and the view. }); this.$location.hashSearch.board = rows.join(';') + '/' + this.nextMove; }, - readUrl: function(scope, value) { + readUrl: function(value) { if (value) { value = value.split('/'); - this.nextMove = value; - angular.forEach(value.split(';'), function(row, i){ - this.board = row.split(','); + this.nextMove = value[1]; + angular.forEach(value[0].split(';'), function(row, col){ + this.board[col] = row.split(','); }, this); this.grade(); } else { @@ -82,36 +82,38 @@ no connection between the controller and the view. } }; </script> + + <h3>Tic-Tac-Toe</h3> <div ng:controller="TicTacToeCntl"> Next Player: {{nextMove}} <div class="winner" ng:show="winner">Player {{winner}} has won!</div> - <table class="board"> - <tr ng:repeat="row in board" style="height:15px;"> - <td ng:repeat="cell in row" ng:style="cellStyle" - ng:click="dropPiece($parent.$index, $index)">{{cell}}</td> - </tr> - </table> - <button ng:click="reset()">reset board</button> + <table class="board"> + <tr ng:repeat="row in board" style="height:15px;"> + <td ng:repeat="cell in row" ng:style="cellStyle" + ng:click="dropPiece($parent.$index, $index)">{{cell}}</td> + </tr> + </table> + <button ng:click="reset()">reset board</button> </div> - </doc:source> - <doc:scenario> - it('should play a game', function(){ - piece(1, 1); - expect(binding('nextMove')).toEqual('O'); - piece(3, 1); - expect(binding('nextMove')).toEqual('X'); - piece(1, 2); - piece(3, 2); - piece(1, 3); - expect(element('.winner').text()).toEqual('Player X has won!'); - }); - - - function piece(row, col) { - element('.board tr:nth-child('+row+') td:nth-child('+col+')').click(); - } - </doc:scenario> + </doc:source> + <doc:scenario> + it('should play a game', function(){ + piece(1, 1); + expect(binding('nextMove')).toEqual('O'); + piece(3, 1); + expect(binding('nextMove')).toEqual('X'); + piece(1, 2); + piece(3, 2); + piece(1, 3); + expect(element('.winner').text()).toEqual('Player X has won!'); + }); + + + function piece(row, col) { + element('.board tr:nth-child('+row+') td:nth-child('+col+')').click(); + } + </doc:scenario> </doc:example> @@ -123,13 +125,12 @@ no connection between the controller and the view. * The controller is defined in JavaScript and has no reference to the rendering logic. * The controller is instantiated by <angular/> and injected into the view. * The controller can be instantiated in isolation (without a view) and the code will still execute. - This makes it very testable. +This makes it very testable. * The HTML view is a projection of the model. In the above example, the model is stored in the - board variable. +board variable. * All of the controller's properties (such as board and nextMove) are available to the view. * Changing the model changes the view. * The view can call any controller function. * In this example, the `setUrl()` and `readUrl()` functions copy the game state to/from the URL's - hash so the browser's back button will undo game steps. See deep-linking. This example calls - {@link api/angular.scope.$watch $watch()} to set up a listener that invokes `readUrl()` when -needed. +hash so the browser's back button will undo game steps. See deep-linking. This example calls {@link +api/angular.scope.$watch $watch()} to set up a listener that invokes `readUrl()` when needed. diff --git a/docs/content/tutorial/step_04.ngdoc b/docs/content/tutorial/step_04.ngdoc index 7c942c34..39bb3d51 100644 --- a/docs/content/tutorial/step_04.ngdoc +++ b/docs/content/tutorial/step_04.ngdoc @@ -180,7 +180,7 @@ The unit test now verifies that the default ordering property is set. We used Jasmine's API to extract the controller construction into a `beforeEach` block, which is -shared by all tests in the nearest `describe` block. +shared by all tests in the parent `describe` block. To run the unit tests, once again execute the `./scripts/test.sh` script and you should see the @@ -205,7 +205,7 @@ __`test/e2e/scenarios.js`:__ function() { - // let's narrow the dataset to make the test assertions shorter + // narrow the dataset to make the test assertions shorter input('query').enter('tablet'); diff --git a/docs/content/tutorial/step_08.ngdoc b/docs/content/tutorial/step_08.ngdoc index c0ba2831..a430387b 100644 --- a/docs/content/tutorial/step_08.ngdoc +++ b/docs/content/tutorial/step_08.ngdoc @@ -111,7 +111,7 @@ our model into the view. __`app/partials/phone-details.html`:__ <pre> -<img ng:src="{{phone.images}}" class="phone"/> +<img ng:src="{{phone.images[0]}}" class="phone"/> <h1>{{phone.name}}</h1> diff --git a/docs/content/tutorial/step_10.ngdoc b/docs/content/tutorial/step_10.ngdoc index 3a8dbd38..109f5b77 100644 --- a/docs/content/tutorial/step_10.ngdoc +++ b/docs/content/tutorial/step_10.ngdoc @@ -42,7 +42,7 @@ function PhoneDetailCtrl($xhr) { $xhr('GET', 'phones/' + self.params.phoneId + '.json', function(code, response) { self.phone = response; - self.mainImageUrl = response.images; + self.mainImageUrl = response.images[0]; }); diff --git a/docs/content/tutorial/step_11.ngdoc b/docs/content/tutorial/step_11.ngdoc index 7a176591..892342b5 100644 --- a/docs/content/tutorial/step_11.ngdoc +++ b/docs/content/tutorial/step_11.ngdoc @@ -102,7 +102,7 @@ function PhoneDetailCtrl(Phone_) { self.phone = Phone_.get({phoneId: self.params.phoneId}, function(phone) { - self.mainImageUrl = phone.images; + self.mainImageUrl = phone.images[0]; }); |
