Commits on Nov 21, 2016
  1. step-14 Animations

    petebacondarwin committed with gkalpak Jan 20, 2016
    - Add animations to the application:
      - Animate changes to the phone list, adding, removing and reordering phones with `ngRepeat`.
      - Animate view transitions with `ngView`.
      - Animate changes to the main phone image in the phone detail view.
    - Showcase three different kinds of animations:
      - CSS transition animations.
      - CSS keyframe animations.
      - JavaScript-based animations.
  2. step-13 REST and Custom Services

    petebacondarwin committed with gkalpak Nov 10, 2014
    - Replace `$http` with `$resource`.
    - Create a custom `Phone` service that represents the RESTful client.
    - Use a custom Jasmine equality tester in unit tests to ignore irrelevant properties.
  3. step-12 Event Handlers

    IgorMinar committed with gkalpak Nov 10, 2014
    - Make the thumbnail images in the phone detail view clickable:
      - Introduce a `mainImageUrl` property on `PhoneDetailController`.
      - Implement the `setImage()` method for changing the main image.
      - Use `ngClick` on the thumbnails to register a handler that changes the main image.
      - Add an end-to-end test for this feature.
  4. step-11 Custom Filters

    IgorMinar committed with gkalpak Nov 10, 2014
    - Implement a custom `checkmark` filter.
    - Update the `phoneDetail` template to use the `checkmark` filter.
    - Add a unit test for the `checkmark` filter.
  5. step-10 More Templating

    petebacondarwin committed with gkalpak Nov 10, 2014
    - Implement fetching data for the selected phone and rendering to the view:
      - Use `$http` in `PhoneDetailController` to fetch the phone details from a JSON file.
      - Create the template for the detail view.
    - Add CSS styles to make the phone detail page look "pretty-ish".
  6. step-9 Routing & Multiple Views

    petebacondarwin committed with gkalpak Jan 20, 2016
    - Introduce the `$route` service, which allows binding URLs to views for routing and deep-linking:
      - Add the `ngRoute` module as a dependency.
      - Configure routes for the application.
      - Use the `ngView` directive in 'index.html'.
    - Create a phone list route (`/phones`):
      - Map `/phones` to the existing `phoneList` component.
    - Create a phone detail route (`/phones/:phoneId`):
      - Map `/phones/:phoneId` to a new `phoneDetail` component.
      - Create a dummy `phoneDetail` component, which displays the selected phone ID.
      - Pass the `phoneId` parameter to the component's controller via `$routeParams`.
  7. step-8 Templating Links & Images

    petebacondarwin committed with gkalpak Nov 10, 2014
    - Add a phone image and links to phone pages.
    - Add an end-to-end test that verifies the phone links.
    - Tweak the CSS to style the page just a notch.
  8. step-7 XHR & Dependency Injection

    petebacondarwin committed with gkalpak Nov 10, 2014
    - Replace the in-memory dataset with data loaded from the server (in the form of a static
      'phone.json' file to keep the tutorial backend agnostic):
      - The JSON data is loaded using the `$http` service.
    - Demonstrate the use of `services` and `dependency injection` (DI):
      - `$http` is injected into the controller through DI.
      - Introduce DI annotation methods: `.$inject` and inline array
    Closes #207
  9. step-6 Two-way Data Binding

    petebacondarwin committed with gkalpak Oct 19, 2014
    - Add an `age` property to the phone model.
    - Add a drop-down menu to control the phone list order.
    - Override the default order value in controller.
    - Add unit and end-to-end tests for this feature.
    Closes #213
  10. step-5 Filtering Repeaters

    gkalpak committed Mar 28, 2016
    - Add a search box to demonstrate:
      - How the data-binding works on input fields.
      - How to use the `filter` filter.
      - How `ngRepeat` automatically shrinks and grows the number of phones in the view.
    - Add an end-to-end test to:
      - Show how end-to-end tests are written and used.
      - Prove that the search box and the repeater are correctly wired together.
  11. step-4 Directory and File Organization

    gkalpak committed Mar 28, 2016
    - Refactor the layout of files and directories, applying best practices and techniques that will
      make the application easier to maintain and expand in the future:
      - Put each entity in its own file.
      - Organize code by feature area (instead of by function).
      - Split code into modules that other modules can depend on.
      - Use external templates in `.html` files (instead of inline HTML strings).
  12. step-3 Components

    gkalpak committed Mar 28, 2016
    - Introduce components.
    - Combine the controller and the template into a reusable, isolated `phoneList` component.
    - Refactor the application and tests to use the `phoneList` component.
  13. step-2 Angular Templates

    petebacondarwin committed with gkalpak Oct 18, 2014
    - Convert the static phone list to dynamic by:
      - Creating a `PhoneListController` controller.
      - Extracting the data from HTML into the controller as an in-memory dataset.
      - Converting the static document into a template with the use of the `ngRepeat` directive.
    - Add a simple unit test for the `PhoneListController` controller to show how to write tests and
      run them using Karma (see for instructions).
  14. step-1 Static Template

    petebacondarwin committed with gkalpak Oct 18, 2014
    - Add a stylesheet file ('app/app.css').
    - Add a static list with two phones.
  15. step-0 Bootstrapping

    IgorMinar committed with gkalpak Oct 18, 2014
    - Add the 'angular.js' script.
    - Add the `ngApp` directive to bootstrap the application.
    - Add a simple template with an expression.
Commits on Oct 18, 2016
  1. chore(package): update to Protractor 4.x

    gkalpak committed Oct 18, 2016
    Fixes #377
    Closes #378
Commits on Jul 7, 2016
  1. chore(CI): fix "auto-update" Jenkins job

    gkalpak committed with petebacondarwin Jul 5, 2016
    The job is currently failing, because the Node.js version used in not compatible with some of our
    dependencies (e.g. Protractor).
    The added `` script is going to be executed by
Commits on Jul 5, 2016
  1. chore(.travis.yml): fix e2e tests on Travis (run on latest Chrome)

    gkalpak committed Jun 25, 2016
    Previously, the E2E tests would always fail/not run on Travis, because the current version of
    WebDriver requires a newer version of Chrome than the one installed on the VM.
Commits on Jun 17, 2016
Commits on May 24, 2016
  1. chore: update application structure, directory layout and dependencie…

    gkalpak committed Mar 28, 2016
    …s for the post-1.5.0 era
    This commit and the accompanying updates to the tutorial steps constitute a major re-structuring of
    the tutorial app's codebase, aiming at applying established best practices (in terms of file
    naming/layout and code organization) and utilizing several new features and enhancements (most
    notably components) introduced in recent versions of Angular (especially v1.5).
    Apart from the overall changes, two new chapters were introduced: one on components and one on code
    In the process, several other things were (incidentally) taken care of, including:
    * Dependencies were upgraded to latest versions.
    * Animations were polished.
    * Outdated links were updated.
    * The app's base URL was changed to `/` (instead of `/app/`).
    BTW, this has been tested with the following versions of Node (on Windows 10) and everything worked
    * 0.11.16
    * 4.2.6
    * 4.4.2
    * 5.10.0
    This was inspired by (and loosely based on) #289.
    Mad props to @teropa for leading the way :)
    The old version of the tutorial, that is compatible with Angular version 1.4 or older, has been
    saved on the `pre-v1.5.0-snapshot` branch. The `v1.4.x` version of the tutorial should be pointed
    to that branch instead of `master`.
    Related to angular/angular.js#14416.
    Related to angular/angular-seed#329.
    Related to angular/angular-seed#333.
    Fixes #198
    Fixes #214
    Fixes #224
    Fixes #230
    Fixes #243
    Fixes #246
    Fixes #252
    Fixes #277
    Fixes #286
    Fixes #295
    Fixes #303
    Fixes #304
    Fixes #323
    Fixes #324
    Closes #268
    Closes #270
    Closes #278
    Closes #280
    Closes #289
    Closes #309
    Closes #311
    Closes #319
Commits on Jun 29, 2015
  1. docs(scripts/update-repo): fix typos

    NRKirby committed with petebacondarwin Mar 5, 2015
    Closes #240
Commits on Dec 22, 2014
Commits on Nov 22, 2014
  1. docs(README): fix typo and punctuation

    evoluteur committed with petebacondarwin Nov 22, 2014
    Closes #215
Commits on Oct 25, 2014
Commits on Oct 19, 2014
  1. docs(README): fix 2 typos

    mbriot committed with petebacondarwin Oct 18, 2014
    Closes #206
Commits on Jul 29, 2014
Commits on Jul 26, 2014
  1. chore(package.json): explicitly list domain and port arguments in `np…

    amfarrell committed with petebacondarwin Jul 26, 2014
    …m start`
    A developer working on a remote server will want to change the IP
    address which `npm start` serves on. A developer working on a machine
    which is already using port 8000 will want to change the port. By
    listing those arguments explicitly, it angular-phonecat makes it easier
    for developers who are unfamiliar with npm and are working through the
    tutorial to see that they can do so. This should be accompanied by a
    sentence in the documentation.
    Closes #191
Commits on Jul 11, 2014
  1. chore(package): fix tmp dependency to fix bower bug

    petebacondarwin committed Jul 11, 2014
    Bower allowed itself to upgrade to a breaking change of the tmp library.
    This is the workaround - it forces npm to pull in the previous version
    of tmp.