Commit Graph

8022 Commits

Author SHA1 Message Date
Martin Staffa e50e91c7a8 docs($componentController): add more info
Closes #15038
2016-08-17 22:09:49 +02:00
Duly Bonheur c54f7a93e0 docs(ngRepeat): improve example description
The example seems to also be filtering by age. It threw me off a bit because I was getting results when I entered numbers in the input field.

PR (#15037)
2016-08-17 21:48:47 +02:00
Martin Staffa e1da4bed8e feat(input[number]): support step
input[number] will now set the step error if the input value
(ngModel $viewValue) does not fit the step constraint set in the step / ngStep attribute.

Fixes #10597
2016-08-17 21:22:01 +02:00
Martin Staffa 9a8b8aaa96 feat(input[range]): support step
Step support works like min / max, but with the following caveat.
Currently, only Firefox fully implements the spec. Other browsers
(Chrome, Safari, Edge) have issues when the step value changes
after the input has been changed. They do not adjust the input value
to a valid value, but instead set the stepMismatch validity state.

Angular will take this validity state, and forward it as the ngModel
"step" error. Adjusting the error ourselves would add too much code,
as the logic is quite involved.
2016-08-17 21:22:01 +02:00
Georgios Kalpakas 88f3517db2 docs(guide/concepts): improve wording 2016-08-17 17:28:00 +03:00
Martin Staffa a272a3c0bd fix(input[range]): correctly handle min/max; remove ngMin/ngMax support
This commit fixes the handling of min/max, and removes support for ngMin/ngMax:

min/max:
Previously, interpolated min/max values on input range were not set when the first $render happens,
because the interpolation directive only sets the actual element attribute value after
a digest passes. That means that the browser would not adjust
the input value according to min/max and the range input and model would
not be initialzed as expected. 
With this change, input range will set the actual element attribute value during its own
linking phase, as it is already available on the attrs argument passed to the link fn.

ngMin/ngMax
Since ng prefixed attributes do not set their corresponding element attribute, the range input would always have min = 0, and max = 100 (in supported browsers), regardless of the value
in ngMin/ngMax. This is confusing and not very useful, so it's better to not support these attributes at all.

The commit also fixes a test which used an interpolation inside an attribute that expects an expression.

Fixes #14982 
PR (#14996)
2016-08-12 19:58:08 +02:00
Martin Staffa eacfe4148e feat($controller): throw when requested controller is not registered
Previously, it would throw the ng:areq error, which is less
specific and just informs that the requested controller is not defined. 
Given how commonly controllers are used
in Angular, it makes sense to have a specific error.

The ng:areq error is still thrown when the registered controller
is not a function.

Closes #14980
PR (#15015)
2016-08-12 19:12:12 +02:00
Georgios Kalpakas 6304cde2fc chore(build): fix version placeholder matching
During the `build` task, the version placeholders will be replaced with the actual values using a
RegExp, which expects the placeholders to be surrounded by double quotes. By replacing the quotes
from double to single in #15011, the RegExp was not able to match the placeholders.

(For reference, the RegExps that match and replace the version placeholders are in
[lib/grunt/utils.js][1].)

[1]: https://github.com/angular/angular.js/blob/859348c7f61ff5f93b9f81eb7f46842bd018d8e3/lib/grunt/utils.js#L125-L130

Closes #15016
2016-08-12 18:18:30 +03:00
Michał Gołębiowski 859348c7f6 chore(*): change remaining /* @this */ to /** @this */
Ref ec565ddd9c
2016-08-11 01:16:40 +02:00
Michał Gołębiowski 9360aa2d27 chore(eslint): enable quotes: ["error", "single"]
The quotes rule had to be disabled for e2e tests generated from ngdoc
because dgeni templates use double quotes as string delimiters.

Since we can't have guarantees that dgeni template wrappers will follow
the same JS code style the Angular 1 repo uses, we should find a way
to enforce our ESLint setup only for the parts in this repo, perhaps
via prepending a generated `/* eslint-enable OUR_RULES */` pragma.

Closes #15011
2016-08-10 21:52:38 +02:00
Georgios Kalpakas 42a00611f8 docs(CONTRIBUTING.md): minor improvements
Closes #15008
2016-08-10 20:45:21 +03:00
Martin Staffa b6340d1654 docs(ngValue): improve use case description 2016-08-09 22:08:20 +02:00
mohamed amr e6afca00c9 fix(ngValue): set the element's value property in addition to the value attribute
Input elements use the value attribute as their default value if the value property is not set.
Once the value property has been set (by adding input), it will not react to changes to
the value attribute anymore. Setting both attribute and property fixes this behavior, and
makes it possible to use ngValue as a one-way bind.

Closes #14031
Closes #13984

POSSIBLE BREAKING CHANGE:

`ngValue` now also sets the value *property* of its element. Previously, it would only set the
value *attribute*. This allows `ngValue` to be used as a one-way binding mechanism on `input[text]`
and `textarea` elements without `ngModel`. Previously, these input types would not update correctly
when only the value attribute was changed.
This change should not affect any applications, as `ngValue` is mainly used on `input[radio]` and
`option` elements, both of which are unaffected by this change.
2016-08-09 22:08:20 +02:00
Benjamin Dopplinger c7010bef6e docs(contributing.md): fix indentation for proper Markdown syntax
PR (#15007)
2016-08-09 10:30:36 +02:00
Georgios Kalpakas b62f33f29a docs(ngMock/$httpBackend): improve description of .flush() 2016-08-09 00:25:08 +03:00
sarychev 72b663219e feat(ngMock/$httpBackend): flush requests in any order
Previously, requests were flushed in the order in which they were made.
With this change, it is possible to flush requests in any order. This is useful for simulating more
realistic scenarios, where parallel requests may be completed in any order.

Partially addresses #13717.

Closes #14967
2016-08-08 21:52:30 +03:00
Georgios Kalpakas fdf8e0f988 fix($httpBackend): complete the request on timeout
When using the [timeout attribute](https://xhr.spec.whatwg.org/#the-timeout-attribute) and an XHR
request times out, browsers trigger the `timeout` event (and execute the XHR's `ontimeout`
callback). Additionally, Safari 9 handles timed-out requests in the same way, even if no `timeout`
has been explicitly set on the XHR.
In the above cases, `$httpBackend` would fail to capture the XHR's completing (with an error), so
the corresponding `$http` promise would never get fulfilled.

Note that using `$http`'s `timeout` configuration option does **not** rely on the XHR's `timeout`
property (or its `ontimeout` callback).

Fixes #14969
Closes #14972
2016-08-08 19:12:17 +03:00
Georgios Kalpakas ec565ddd9c chore(package): fix some warnings/errors
Related to #14952. Fixed the following warnings/errors:

1. **Warning**: Closure Compiler complained about `/* @this */` (annotations in non-JSDoc comments).
   Fixed by changing `/* @this */` to `/** @this */`.

2. **Warning**: Dgeni complained about `/** @this */` (invalid tags found).
   Fixed by adding an empty `this` tag definition in `docs/config/tag-defs/`.

3. **Error**: ESLint complained about CRLF linebreaks in `build/docs/examples/`. These are generated
   by dgeni and (apparently) use the system's default linebreak (e.g. CRLF on Windows).
   Fixed by disabling the `linebreak-style` rule for `build/docs/examples/`.

Closes #14997
2016-08-08 18:40:29 +03:00
Georgios Kalpakas 975a6170ef fix(aria/ngModel): do not overwrite the default $isEmpty() method for checkboxes
Previously, `ngAria` would overwrite the default `ngModelController.$isEmpty()` method for custom
`checkbox`-shaped controls (e.g. `role="checkbox"` or `role="menuitemcheckbox"`), using the same
implementation as `input[checkbox]` (i.e. `value === false`). While this makes sense for
`input[checkbox]` which also defines a custom parser, it doesn't make sense for a custom `checkbox`
out-of-the-box. For example, an unintialized value (`undefined`) would make the checkbox appear as
"checked".

If the user wants to provide a custom parser (e.g. setting falsy values to `false`), then they
should also provide a custom `$isEmpty()` method.

As a side effect, this commit solves issue #14621. (We could have solved it in different ways.)

Fixes #14621
Closes #14625

BREAKING CHANGE:

Custom `checkbox`-shaped controls (e.g. checkboxes, menuitemcheckboxes), no longer have a custom
`$isEmpty()` method on their `NgModelController` that checks for `value === false`. Unless
overwritten, the default `$isEmpty()` method will be used, which treats `undefined`, `null`, `NaN`
and `''` as "empty".

**Note:** The `$isEmpty()` method is used to determine if the checkbox is checked ("not empty" means
          "checked") and thus it can indirectly affect other things, such as the control's validity
          with respect to the `required` validator (e.g. "empty" + "required" --> "invalid").

Before:

```js
var template = '<my-checkbox role="checkbox" ng-model="value"></my-checkbox>';
var customCheckbox = $compile(template)(scope);
var ctrl = customCheckbox.controller('ngModel');

scope.$apply('value = false');
console.log(ctrl.$isEmpty());   //--> true

scope.$apply('value = true');
console.log(ctrl.$isEmpty());   //--> false

scope.$apply('value = undefined'/* or null or NaN or '' */);
console.log(ctrl.$isEmpty());   //--> false
```

After:

```js
var template = '<my-checkbox role="checkbox" ng-model="value"></my-checkbox>';
var customCheckbox = $compile(template)(scope);
var ctrl = customCheckbox.controller('ngModel');

scope.$apply('value = false');
console.log(ctrl.$isEmpty());   //--> false

scope.$apply('value = true');
console.log(ctrl.$isEmpty());   //--> false

scope.$apply('value = undefined'/* or null or NaN or '' */);
console.log(ctrl.$isEmpty());   //--> true
```

--
If you want to have a custom `$isEmpty()` method, you need to overwrite the default. For example:

```js
.directive('myCheckbox', function myCheckboxDirective() {
  return {
    require: 'ngModel',
    link: function myCheckboxPostLink(scope, elem, attrs, ngModelCtrl) {
      ngModelCtrl.$isEmpty = function myCheckboxIsEmpty(value) {
        return !value;   // Any falsy value means "empty"

        // Or to restore the previous behavior:
        // return value === false;
      };
    }
  };
})
```
2016-08-08 17:28:52 +03:00
Georgios Kalpakas e8d7496b62 perf($parse): improve performance of assignment expressions
There was a ~5% improvement in the added `parsed-expressions-bp/assignment` benchmark (which only
contains assignment expressions). In real-world applications, the time spent in assignment
expressions will be a tiny fragment of the overall processing time, though.

Closes #14957
2016-08-08 15:48:52 +03:00
Michał Gołębiowski 49f077736d chore(*): minor code style tweaks
This is a followup to the migration to ESLint.

Ref #14952

Closes #15006
2016-08-08 15:01:12 +03:00
Kevin Visscher 3393aac049 docs(error/reqslot): fix typo
Closes #15003
2016-08-08 14:31:41 +03:00
Martin Staffa 4fe0987966 style(benchmarks): fix eslint errors 2016-08-08 11:33:37 +02:00
dherman b58a7f8a12 chore(styleDirective): remove an unneccessary directive definition
Since the style directive is defined as a non-terminal element directive
with no behavior on link, we may as well not define anything at all.
PR (#14983)
2016-08-08 11:08:48 +02:00
Roshan Jossey 38a49641fd docs(guide/external-resources): add links to Atom and Vim packages
Add links to packages for Atom and Vim editors under editor support
subsection under tools section.
PR (#15000)
2016-08-08 11:02:47 +02:00
David Rodenas 4c2964d01b perf($compile): add provider option to turn off compilation of css class and comment directives
When the functions `cssClassDirectivesEnabled()` / `commentDirectivesEnabled()` on the `$compileProvider` are called with `false`, then the compiler won't look for directives on css classes / comment elements.

This can result in a compilation speed-up of around 10%.

PR (#14850)
2016-08-08 11:01:08 +02:00
Michał Gołębiowski 5fc993361f fix(jenkins): Fix the format for passing parameters to Grunt tasks
The Jenkins build.sh script has to be updated as the previous way of
specifying parameters to the code run in Grunt tasks stopped working
with the newest Grunt. This has been previously fixed for the Travis
build.sh but wasn't done for the Jenkins one.

Also, the contribute docs were updated to account for the new format.
2016-08-06 01:02:21 +02:00
Michał Gołębiowski c3220325a0 chore(*): switch from JSHint/JSCS to ESLint
Thanks to @narretz for help in fixing style violations and to @gkalpak
for a very extensive review.

Closes #14952
2016-08-05 22:18:32 +02:00
Michał Gołębiowski 517b9bd6ed chore(package.json): Remove the deprecated licenses field
The "licenses" field is deprecated in favor of the "license" field... which
we already have specified.
2016-08-05 20:24:58 +02:00
Michał Gołębiowski 8c00386e0d chore(package.json): update Karma & BrowserStack-related packages 2016-08-05 20:24:42 +02:00
Michał Gołębiowski 6f737293ee chore(package.json): remove the engineStrict field
The engineStrict field is deprecated in npm 2 and removed in npm 3.
2016-08-05 19:42:53 +02:00
Michał Gołębiowski b1c665095c chore(*): Add .nvmrc
If one uses nvm to manage Node.js versions, the .nvmrc file makes `nvm use`
switch to the version specified in .nvmrc. There are scripts that invoke
it automatically when cd'ing to directories containing .nvmrc so that you
never run build commands using a wrong Node version, see:
https://github.com/creationix/nvm/blob/v0.31.2/README.markdown#zsh
2016-08-05 19:42:42 +02:00
Michał Gołębiowski bdb794ebcf chore(bower): change the name in bower.json
This avoids warnings with newer versions of Bower.
2016-08-05 19:42:37 +02:00
Michał Gołębiowski 0606b15384 chore(package.json): upgrade Protractor
The previous version depended on a vulnerable request version.

Ref gh-14961
2016-08-05 19:42:28 +02:00
Michał Gołębiowski 3134e78fc0 chore(package.json): add grunt-cli to devDependencies, update grunt-* packages
The Travis build.sh script has to be updated as the previous way of
specifying parameters to the code run in Grunt tasks stopped working
with the newest Grunt.
2016-08-05 19:37:02 +02:00
Martin Staffa 1660ddd89e docs($resource): clarify overwriting a default action
Closes #14821
2016-08-03 11:10:37 +02:00
Gordon Zhu 494d12fd40 docs(guide/External Resources): remove stale resources
This commit removes two resources  (Firebase Foundations and Angular Course) that I authored but no longer maintain.
PR (#14973)
2016-08-01 09:58:37 +02:00
Georgios Kalpakas 7bef522042 docs($filter): improve description formatting 2016-07-31 10:46:19 +03:00
Georgios Kalpakas 4ef2169168 docs(textarea): add known issue about interpolation in placeholder in IE
Closes #5025

Closes #14965
2016-07-31 07:59:03 +03:00
Vitaly P 31f20b6db1 docs($filter): add link to built-in filters page 2016-07-30 16:57:19 +02:00
Martin Staffa 9130166767 feat(input): add support for binding to input[type=range] (#14870)
Thanks to @cironunes for the initial implementation in https://github.com/angular/angular.js/pull/9715

Adds support for binding to input[range] with the following behavior / features:

- Like input[number], it requires the model to be a Number, and will set the model to a Number
- it supports setting the min/max values via the min/max and ngMin/ngMax attributes
- it follows the browser behavior of never allowing an invalid value. That means, when the browser
converts an invalid value (empty: null, undefined, false ..., out of bounds: greater than max, less than min)
to a valid value, the input will in turn set the model to this new valid value via $setViewValue.
-- this means a range input will never be required and never have a non-Number model value, once the
ngModel directive is initialized.
-- this behavior is supported when the model changes and when the min/max attributes change in a way
that prompts the browser to update the input value.
-- ngMin / ngMax do not prompt the browser to update the values, as they don't set the attribute values.
Instead, they will set the min / max errors when appropriate
- browsers that do not support input[range] (IE9) handle the input like a number input (with validation etc.)

Closes #5892
Closes #9715
Close #14870
2016-07-29 14:29:09 +02:00
Georgios Kalpakas cd2f6d9d3b test(e2e): fix e2e tests in Firefox 2016-07-29 11:43:36 +03:00
Peter Bacon Darwin 13b7bf0bb5 docs(examples): give all examples a name
Closes #14958
2016-07-28 10:58:58 +01:00
Chung-Min Cheng 9ac9fb1565 docs(guide/animations): clean up example
Remove unnecessary inline styles, merge styles for identical selectors and clean up.

Closes #14960
2016-07-28 12:34:54 +03:00
Georgios Kalpakas c0795c97a5 docs(ngModel/numfmt): remove redundant argument 2016-07-27 12:04:03 +03:00
Georgios Kalpakas 4fa214ce32 fix($parse): block assigning to fields of a constructor prototype
This commit also adds the missing `isecaf` error page and more tests for assignment to constructors.

Fixes #14939

Closes #14951
2016-07-27 10:58:02 +03:00
Georgios Kalpakas 8ddfa2a491 fix($parse): correctly escape unsafe identifier characters
This commit also adds a couple of tests for `$parseProvider.setIdentifierFns()`.

Closes #14942
2016-07-26 10:18:09 +03:00
Georgios Kalpakas d6423804a9 test($parse): test custom literals with CSP both enabled and disabled
(This commit also includes a minor clean-up.)
2016-07-26 10:17:24 +03:00
Georgios Kalpakas 10a6e1a663 chore(travis): update sauce-connect
Closes #14936
2016-07-25 18:50:10 +03:00
Giuseppe Scoppino 544df1879b docs(guide/component): document $doCheck in the component guide
The docs for `$compile` were updated in e235f20 to include information about the recently
implemented `$doCheck` lifecycle hook for component controllers. The lifecycle hook documentation is
mirrored in the Component guide, and this change mirrors the update made to the `$compile` docs, to
the component guide docs.

Closes #14946
2016-07-25 18:17:28 +03:00