aboutsummaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/content/cookbook/advancedform.ngdoc149
-rw-r--r--docs/content/cookbook/buzz.ngdoc2
-rw-r--r--docs/content/cookbook/form.ngdoc16
-rw-r--r--docs/content/cookbook/mvc.ngdoc93
-rw-r--r--docs/content/tutorial/step_04.ngdoc4
-rw-r--r--docs/content/tutorial/step_08.ngdoc2
-rw-r--r--docs/content/tutorial/step_10.ngdoc2
-rw-r--r--docs/content/tutorial/step_11.ngdoc2
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];
});